我正在尝试创建一个图,其节点是参考书目中的一些作者年份引文。这个问题与这个帖子但不幸的是,提供的答案建议使用 Forest 包(用于绘制树)或手动定位节点。这两种方法都不方便,我真的很想使用 Tikz 的算法图形绘制功能的各种工具和选项。
简单地在图表中使用 \cite{} 命令会引发缺少 \endcsname 的错误。我尝试删除 \cite 命令所做的部分格式化来修复此问题,但没有成功。
我担心这超出了我非常有限的 Latex 编码能力,任何帮助都将不胜感激。
请注意,我宁愿使用 bibtex 来创建参考书目,但如果问题得到解决,我很乐意转向 biber。我尝试使用 biblatex 主要是想尝试 \citefield 命令。
以下是 MWE:
\RequirePackage{filecontents}
\begin{filecontents}{testGraph.bib}
@book{BookA,
author = "A",
title = "A book",
year = 2000,
}
@book{BookB,
author = "B",
title = "B book",
year = 2002,
}
\end{filecontents}
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{graphs}
\usepackage[%
backend=bibtex,
]{biblatex}
\addbibresource{testGraph.bib}
\DeclareCiteCommand{\citeGraph}
{\boolfalse{citetracker}%
\boolfalse{pagetracker}}
{\thefield{title}}
\begin{document}
% Does not work
%\begin{figure}[h]
%\centering
%\tikz \graph {
%\cite{bookA} -> B
%};
%\end{figure}
% Does not work either...
%\begin{figure}[h]
%\centering
%\tikz \graph {
%{\citeGraph{Book1}} -> B}
%};
%\end{figure}
\begin{figure}[h]
\centering
\begin{tikzpicture}[show/.style={draw}]
\node[show] (bookA) at (0,0)
{\citeGraph{BookA}};
\node[show] (bookB) at (3,0)
{\citeGraph{BookB}};
\draw[->] (bookA) -- (bookB);
\end{tikzpicture}
\end{figure}
\printbibliography
\end{document}
\endinput
答案1
图中节点的名称与内容相同,您不能命名节点\cite{...}
。要解决这个问题,请使用例如A[as=\citeGraph{BookA}]
,那么节点将获得名称A
,但内容将获得\citeGraph{BookA}
。
\RequirePackage{filecontents}
\begin{filecontents}{testGraph.bib}
@book{BookA,
author = "A",
title = "A book",
year = 2000,
}
@book{BookB,
author = "B",
title = "B book",
year = 2002,
}
\end{filecontents}
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{graphs}
\usepackage[%
backend=bibtex,
]{biblatex}
\addbibresource{testGraph.bib}
\DeclareCiteCommand{\citeGraph}
{\boolfalse{citetracker}%
\boolfalse{pagetracker}}
{\thefield{title}}
\begin{document}
\tikz \graph {
A[as=\cite{BookA}] -> B
};
\printbibliography
\end{document}