
Я создаю генеалогическое древо, используягенеалогическоедеревопакет. Я намерен использовать вывод как для печати, так и для интерактивной веб-страницы.
Для веб-страницы я могу сгенерировать SVG-файл с помощью dvilualatex
и dvisvgm
, который я могу отобразить и добавить обработчики щелчков к именам в дереве, чтобы отобразить больше информации на странице.
Однако сгенерированные текстовые элементы в SVG очень разрежены, содержат только внутренний текст и все находятся на одном уровне в документе, например:
<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>
Я хотел бы каким-то образом включить идентификатор базы данных для каждого человека в этот узел.
Мне удалось добиться этого результата, используя уникальный цвет для каждого человека и выполняя постобработку SVG, чтобы преобразовать его обратно в соответствующие идентификаторы, но это довольно сложно осуществить.
Есть ли более естественный способ добиться этого?
Минимальный пример документа:
\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}
Выполните dvilualatex
следующие действия dvisvgm
для создания SVG.
решение1
Предложение использоватьdvisvgm
специальные предложенияпозволяет очень элегантное решение, просто обернув каждый узел в «сырой» <g>
тег с любыми желаемыми атрибутами. Применяем это к примеру документа выше:
\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}
Я уверен, что это можно было бы привести в порядок в макросе. В моем случае я уже генерирую документ latex через язык шаблонов, поэтому такой встроенный код очень практичен.