
패키지를 사용하여 대규모 계보 나무를 만들고 싶고 genealogytree
인물 데이터를 별도의 파일에 저장하기로 결정했습니다.test_database.tex(MWE의 경우 3명 포함) 메인 파일에서 'test_database.tex'에 채워진 키를 사용하여 : test.tex
에 대한 새로운 형식을 만듭니다 .genealogytree
xTestFormat
나는 pgf 매뉴얼 섹션을 읽었 \pgfkeys
으며 일반적으로 키를 사용하기 전에 키가 존재하는지 확인하는 방법을 이해하지만 내 경우에는 그렇지 않습니다. MWE에서: 데이터베이스에 'Tom Water' 데이터가 포함되어 있는지 미리 알지 못하기 때문에 comment
'Tom Walter'에 대한 키가 존재하는지 확인하는 방법을 모르겠습니다 . 그래서 키를 사용하려고 하면 다음과 같은 오류 메시지가 나타납니다 Undefined control sequence. }
.
pgfkey 이름을 미리 모르는 경우 pgfkey가 비어 있지 않은지 확인하는 방법은 무엇입니까?
MWE
(마지막에서 세 번째 줄의 주석 처리를 취소하십시오.test_database.tex파일을 컴파일하려면 ( comment = {There is nothing to say}
).)
test.tex
\documentclass{standalone}
\usepackage[all]{genealogytree}
\begin{document}
% Define new keys in genealogytree database
\pgfkeys{/gtr/database/.cd,
nationality/.store in=\nationality,
given name/.store in=\givenname,
family name/.store in=\familyname
}
% Define new command with information to print
\newcommand\PrintPeople[1]{
\gtrPrintSex~\givenname
\familyname
\gtrPrintComment
}
% Define new format for genealogytree
\gtrDeclareDatabaseFormat{xTestFormat}
{% Define tcolorbox parameters based on 'nationality' key
\tcbset{french/.style={colback=blue!5!white,colframe=blue}}
\tcbset{british/.style={colback=red!5!white,colframe=red}}
}
{\PrintPeople}
\input{test_database}
\begin{tikzpicture}
\genealogytree[
timeflow=down,
processing=database,
database format=xTestFormat,
box={\nationality}
]
{child[id=fam_Water]{
p[id=Justine]{persdata=JustineID}
g[id=Tom]{persdata=TomID}
c[id=Jane]{persdata=JaneID}
}
}
\end{tikzpicture}
\end{document}
test_database.tex
% Create database
% Jane Water
\pgfkeys{/gtr/database/.cd,
persdata/.is choice,
persdata/JaneID/.style={
female,
nationality = british,
given name = Jane,
family name = Water,
comment = {Something else}
}
}
% Justine Random
\pgfkeys{/gtr/database/.cd,
persdata/.is choice,
persdata/JustineID/.style={
female,
nationality = french,
given name = Justine,
family name = Random,
comment = {Something interesting}
}
}
% Tom Water
\pgfkeys{/gtr/database/.cd,
persdata/.is choice,
persdata/TomID/.style={
male,
nationality = british,
given name = Tom,
family name = Water,
% comment = {There is nothing to say}
}
}
답변1
오류는 가 정의되어 Undefined control sequence. \gtrDBcomment
있는지 테스트하여 해당 DB 항목이 존재하는지 테스트할 수 있다는 것입니다 .\gtrDBcomment
\ifdefined
TeX가 정의되지 않은 제어 시퀀스를 발견하면 오류를 발생시키고 컨텍스트 줄을 표시합니다. 해당 줄에서 정의되지 않은 하나의 제어 시퀀스가 마지막 제어 시퀀스가 됩니다. 귀하의 경우 TeX는 다음을 보여줍니다.
Undefined control sequence.
\gtrPrintComment ... {0pt}{\itshape \gtrDBcomment
}
첫 번째 줄의 마지막 제어 시퀀스는 이며 \gtrDBcomment
실제로 TeX가 정의되지는 않았지만 확장하려고 시도한 제어 시퀀스였습니다.
따라서 해당 매크로가 정의되었는지 테스트하기 위해 정의를 변경하면 \PrintPeople
좋을 것입니다.
\newcommand\PrintPeople[1]{
\gtrPrintSex~\givenname
\familyname
\ifdefined\gtrDBcomment
\gtrPrintComment
\fi
}
MWE 완료:
\documentclass{standalone}
\usepackage[all]{genealogytree}
\begin{document}
% Define new keys in genealogytree database
\pgfkeys{/gtr/database/.cd,
nationality/.store in=\nationality,
given name/.store in=\givenname,
family name/.store in=\familyname
}
% Define new command with information to print
\newcommand\PrintPeople[1]{
\gtrPrintSex~\givenname
\familyname
\ifdefined\gtrDBcomment
\gtrPrintComment
\fi
}
% Define new format for genealogytree
\gtrDeclareDatabaseFormat{xTestFormat}
{% Define tcolorbox parameters based on 'nationality' key
\tcbset{french/.style={colback=blue!5!white,colframe=blue}}
\tcbset{british/.style={colback=red!5!white,colframe=red}}
}
{\PrintPeople}
% Contents of the database
% Jane Water
\pgfkeys{/gtr/database/.cd,
persdata/.is choice,
persdata/JaneID/.style={
female,
nationality = british,
given name = Jane,
family name = Water,
comment = {Something else}
}
}
% Justine Random
\pgfkeys{/gtr/database/.cd,
persdata/.is choice,
persdata/JustineID/.style={
female,
nationality = french,
given name = Justine,
family name = Random,
comment = {Something interesting}
}
}
% Tom Water
\pgfkeys{/gtr/database/.cd,
persdata/.is choice,
persdata/TomID/.style={
male,
nationality = british,
given name = Tom,
family name = Water,
% comment = {There is nothing to say}
}
}
% End of database
\begin{tikzpicture}
\genealogytree[
timeflow=down,
processing=database,
database format=xTestFormat,
box={\nationality}
]
{child[id=fam_Water]{
p[id=Justine]{persdata=JustineID}
g[id=Tom]{persdata=TomID}
c[id=Jane]{persdata=JaneID}
}
}
\end{tikzpicture}
\end{document}