
Estou criando uma árvore genealógica usando oárvore genealógicapacote. Pretendo usar a saída para impressão e uma página da web interativa.
Para a página da web, posso gerar um SVG usando dvilualatex
e dvisvgm
, que posso exibir e adicionar manipuladores de cliques aos nomes na árvore para exibir mais informações na página.
Porém, os elementos de texto gerados no SVG são muito esparsos, contendo apenas o texto interno e todos no mesmo nível do documento, por exemplo:
<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>
Gostaria de incluir de alguma forma o ID do banco de dados de cada pessoa neste nó.
Consegui alcançar esse resultado usando uma cor exclusiva para cada pessoa e pós-processando o SVG para transformá-lo novamente nos IDs relevantes, mas isso é um tanto difícil de gerenciar.
Existe uma maneira mais natural de conseguir isso?
Um documento de exemplo 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}
Execute dvilualatex
seguido de dvisvgm
para produzir o SVG.
Responder1
A sugestão de usodvisvgm
especiaispermite uma solução muito elegante, simplesmente envolvendo cada nó em uma <g>
tag "bruta" com quaisquer atributos desejados. Aplicando isso ao documento de exemplo acima:
\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}
Tenho certeza de que isso poderia ser organizado em uma macro. No meu caso, já estou gerando o documento latex através de uma linguagem de templates, então esse tipo de código inline é muito prático.