
Ich erstelle einen Stammbaum mit demGenealogiebaumPaket. Ich beabsichtige, die Ausgabe sowohl zum Drucken als auch für eine interaktive Webseite zu verwenden.
Für die Webseite kann ich mithilfe von dvilualatex
und ein SVG generieren dvisvgm
, das ich anzeigen und den Namen im Baum Klickhandler hinzufügen kann, um weitere Informationen auf der Seite anzuzeigen.
Die generierten Textelemente im SVG sind jedoch sehr spärlich und enthalten nur den inneren Text und alle befinden sich auf derselben Ebene im Dokument, zum Beispiel:
<text class='f2' transform='matrix(1 0 0 1 951.279 373.834)' x='-37.0118' y='-2.45512'>
<tspan>N</tspan>
<tspan x='-28.5655'>a</tspan>
<tspan x='-23.9577'>m</tspan>
<tspan x='-20.3533'>e</tspan>
</text>
Ich möchte die Datenbank-ID für jede Person irgendwie in diesen Knoten einbinden.
Ich konnte dieses Ergebnis erzielen, indem ich für jede Person eine eindeutige Farbe verwendet und das SVG nachbearbeitet habe, um es wieder in die entsprechenden IDs umzuwandeln. Dies ist jedoch etwas schwierig zu handhaben.
Gibt es einen natürlicheren Weg, dies zu erreichen?
Ein minimales Beispieldokument:
\documentclass[9pt]{article}
\usepackage[all]{genealogytree}
\newcommand{\traditional}{
\begin{minipage}[c][\gtrNodeMinHeight]{\gtrNodeMinWidth}
\begin{center}
\gtrBoxContent
\end{center}
\end{minipage}
}
\begin{document}
\begin{tikzpicture}
\genealogytree[node processor=\traditional]{
child{
g{Alice}
p{Bob}
c{Charlie}
}
}
\end{tikzpicture}
\end{document}
Führen Sie es durch und erstellen Sie dvilualatex
anschließend dvisvgm
das SVG.
Antwort1
Der Vorschlag zur Verwendungdvisvgm
Besonderheitenermöglicht eine sehr elegante Lösung, indem jeder Knoten einfach in ein „rohes“ <g>
Tag mit den gewünschten Attributen eingebunden wird. Wenden wir dies auf das obige Beispieldokument an:
\documentclass[9pt]{article}
\usepackage[all]{genealogytree}
\newcommand{\traditional}{
\begin{minipage}[c][\gtrNodeMinHeight]{\gtrNodeMinWidth}
\begin{center}
\gtrBoxContent
\end{center}
\end{minipage}
}
\begin{document}
\begin{tikzpicture}
\genealogytree[node processor=\traditional]{
child{
g{\special{dvisvgm:raw <g id='alice'>}Alice\special{dvisvgm:raw </g>}}
p{\special{dvisvgm:raw <g id='bob'>}Bob\special{dvisvgm:raw </g>}}
c{\special{dvisvgm:raw <g id='charlie'>}Charlie\special{dvisvgm:raw </g>}}
}
}
\end{tikzpicture}
\end{document}
Ich bin sicher, dass dies in einem Makro zusammengefasst werden könnte. In meinem Fall erstelle ich das Latex-Dokument bereits über eine Vorlagensprache, daher ist diese Art von Inline-Code sehr praktisch.