
저는 다음을 사용하여 가계도를 만듭니다.계보 나무패키지. 인쇄 및 대화형 웹 페이지 모두에 대한 출력을 사용하려고 합니다.
웹 페이지의 경우 dvilualatex
및 dvisvgm
를 사용하여 SVG를 생성할 수 있으며, 트리의 이름에 클릭 핸들러를 표시하고 추가하여 페이지에 더 많은 정보를 표시할 수 있습니다.
그러나 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}
SVG를 생성하려면 dvilualatex
다음을 실행하세요 .dvisvgm
답변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}
나는 이것이 매크로로 정리될 수 있다고 확신합니다. 내 경우에는 이미 템플릿 언어를 통해 라텍스 문서를 생성하고 있으므로 이러한 종류의 인라인 코드는 매우 실용적입니다.