Gerando SVG com IDs de elemento

Gerando SVG com IDs de elemento

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 dvilualatexe 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 dvilualatexseguido de dvisvgmpara produzir o SVG.

Responder1

A sugestão de usodvisvgmespeciaispermite 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.

informação relacionada