
私は家系図を作成しています系図パッケージ。出力は印刷とインタラクティブな Web ページの両方に使用するつもりです。
Web ページの場合、dvilualatex
とを使用して SVG を生成し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>
何らかの方法で、このノードに各人のデータベース ID を含めたいと思います。
私は、各人物に固有の色を使用し、SVG を後処理してこれを関連する ID に戻すことでこの結果を達成できましたが、これは管理がやや困難です。
これを実現するより自然な方法はあるでしょうか?
最小限のサンプルドキュメント:
\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>
必要な属性を持つ「raw」タグでラップするだけです。これを上記のサンプルドキュメントに適用すると、次のようになります。
\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 ドキュメントを生成しているので、このようなインライン コードは非常に実用的です。