我正在尝试生成一个图表来显示参考书目中论文之间的关系。我在 LaTex 文档中使用 GraphViz 来生成图表。到目前为止一切顺利:图表生成正确。
出现这个问题是因为我想在图表内有引用。
我知道可以使用 Tikz 而不是 GraphViz 来做类似的事情,但我愿意坚持使用 GraphViz,因为我发现设置图表要容易得多。
这是我能运行的代码,带有图表外的引用:
\documentclass[a4paper,10pt]{article}
\usepackage[pdf]{graphviz}
\begin{document}
Some text with a citation~\cite{lecun1990handwritten}.
\digraph{bibliography}{
{
/* Timeline */
node[shape=plaintext, fontsize=15];
1980 -> 1985 -> 1990;
}
/* Papers */
{
node[shape=plaintext, fontsize=13];
NeoCognitron [ label=<NeoCognitron> ]
BackPropagation [ label=<BackPropagation> ]
LeNet [ label=<LeNet> ]
}
/* Year-paper relation */
{ rank=same; 1980; NeoCognitron; }
{ rank=same; 1985; BackPropagation; }
{ rank=same; 1990; LeNet; }
/* Paper-to-paper influence */
BackPropagation -> LeNet
NeoCognitron -> LeNet
}
\bibliographystyle{plain}
\bibliography{deepLearningBibliography}
\end{document}
如果我将引用放在图表中,像这样,编译会成功,但会出现一些错误,并且引用不会出现在图表中:
LeNet [ label=<LeNet\cite{lecun1990handwritten}> ]
我收到的第一个错误是:
./example.tex:30:Use of \Gin@ii doesn't match its definition }
如果这些信息有用,我正在 Ubuntu 上通过 Kile 使用 PdfLaTeX。
我的目标是将引文嵌入到图中,作为节点标签的一部分。
提前感谢你的帮助!
答案1
该graphviz
包允许psfrag
使用替换来添加引用\usepackage[psfrag]{graphviz}
。
梅威瑟:
\documentclass[a4paper,10pt]{article}
\usepackage[psfrag]{graphviz}
\begin{document}
Some text with a citation~\cite{book1}.
\psfrag{lenetref}[cc][cc]{Lenet\cite{book1}}
\psfrag{neocognitronref}[cc][cc]{NeoCognitron\cite{misc1}}
\psfrag{backproprefabcdef}[cc][cc]{BackPropagation\cite{article1}}
\Large
\digraph{bibliography}{
{
/* Timeline */
node[shape=plaintext, fontsize=15];
1980 -> 1985 -> 1990;
}
/* Papers */
{
node[shape=plaintext, fontsize=13];
NeoCognitron [ label=<neocognitronref> ]
BackPropagation [ label=<backproprefabcdef> ]
LeNet [ label=<lenetref> ]
}
/* Year-paper relation */
{ rank=same; 1980; NeoCognitron; }
{ rank=same; 1985; BackPropagation; }
{ rank=same; 1990; LeNet; }
/* Paper-to-paper influence */
BackPropagation -> LeNet
NeoCognitron -> LeNet
}
\bibliographystyle{plain}
\bibliography{sample1}
\end{document}
结果:
此解决方案的主要缺点是您无法将其用于pdflatex
编译,因为这会干扰 的 PostScript 处理psfrag
。因此,您需要运行latex --shell-escape yourfile.tex
两次,然后 ,dvips yourfile.dvi
然后ps2pdf yourfile.ps
。此外,字体看起来与标准 Graphviz 字体不同,但如果您的所有节点都包含引用,这可能不一定是个问题。第三,节点的定位由 Graphviz 根据替换前原始标签的大小确定,因此您需要确保标签和替换的大小大致相同,否则图形布局可能会偏离(例如backproprefabcdef
上面的标签,其中abcdef
添加了部分以使标签更长)。