
Estoy creando un árbol genealógico usando elgenealogíaárbolpaquete. Tengo la intención de utilizar el resultado tanto para impresión como para una página web interactiva.
Para la página web, puedo generar un SVG usando dvilualatex
y dvisvgm
, que puedo mostrar y agregar controladores de clic a los nombres en el árbol para mostrar más información en la página.
Sin embargo, los elementos de texto generados en SVG son muy escasos, contienen solo el texto interno y todos están en el mismo nivel en el documento, por ejemplo:
<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>
Me gustaría incluir de alguna manera el ID de la base de datos para cada persona en este nodo.
Pude lograr este resultado usando un color único para cada persona y postprocesando el SVG para convertirlo nuevamente en las identificaciones relevantes, pero esto es algo difícil de administrar.
¿Existe una forma más natural de lograrlo?
Un documento de ejemplo mínimo:
\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}
Ejecute dvilualatex
seguido de dvisvgm
para producir el SVG.
Respuesta1
La sugerencia de utilizardvisvgm
especialespermite una solución muy elegante, simplemente envolviendo cada nodo en una <g>
etiqueta "sin formato" con los atributos que se deseen. Aplicando esto al documento de ejemplo anterior:
\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}
Estoy seguro de que esto se podría ordenar en una macro. En mi caso, ya estoy generando el documento látex mediante un lenguaje de plantillas, por lo que este tipo de código en línea es muy práctico.