22 · Reproduzierbare Berichte mit Quarto
eine_quelle.svg
Abbildung · Quellcode
Erzeugt von eine_quelle() in lib/diagrams.py, Zeile 309–335.
.py schreiben und mit dem ▶-Knopf in VS Code ausführen – oder Zeile für Zeile in die Python-Konsole. Setzt die in Modul 02 eingerichtete Umgebung voraus.def eine_quelle() -> str: b = [eyebrow(40, 40, "Eine Quelle · viele Formate")] sx, sy = 40, 92 b.append(rect(sx, sy, 200, 150, r=12, fill=T["card"], stroke=T["rule"])) b.append(txt(sx + 16, sy + 26, "analyse.qmd", size=12.5, fill=T["ink"], w=600, mono=True)) b.append(line(sx + 16, sy + 38, sx + 184, sy + 38, stroke=T["hair"])) seg = [("text", T["mut"], 120), ("
code", T["acc"], 150), ("text", T["mut"], 90),
("Ergebnis", T["ok"], 110)]
yy = sy + 58
for lab, col, wd in seg:
b.append(rect(sx + 16, yy - 11, wd, 15, r=4, fill=T["soft"]))
b.append(txt(sx + 22, yy, lab, size=10, fill=col, mono=("code" in lab or "Erg" in lab)))
yy += 24
# render
b.append(arrow(250, sy + 75, 320, color=T["mut"]))
b.append(txt(285, sy + 66, "render", size=10.5, fill=T["mut"], anchor="middle"))
outs = [("HTML", 40), ("PDF", 105), ("Word", 170)]
ox = 340
for lab, oy in outs:
b.append(rect(ox, sy + oy - 24, 150, 44, r=10, fill=T["card"], stroke=T["rule"]))
b.append(rect(ox + 14, sy + oy - 14, 24, 24, r=5, fill=T["acct"]))
b.append(txt(ox + 48, sy + oy + 4, lab, size=12.5, fill=T["ink"], w=600))
b.append(f'<path d="M320,{sy+75} C332,{sy+75} 332,{sy+oy-2} {ox},{sy+oy-2}" stroke="{T["rule"]}" stroke-width="1.4" fill="none"/>')
b.append(txt(sx, sy + 214, "Ein Lauf: Code, Text und Ergebnis bleiben synchron.", size=11.5, fill=T["mut"]))
return canvas(760, 322, "".join(b),
"Reproduzierbarer Bericht: aus einer einzigen Quelldatei (analyse.qmd, die Code, Text und "
"Ergebnis vereint) entstehen per render zugleich HTML, PDF und Word.")