我正在尝试创建一些出版物的时间表。由于每份出版物都包含有关其出版时间的信息,因此我想自动使用该信息将参考资料放在时间表上。
这是我目前的代码:
\documentclass{scrartcl}
\usepackage{chronology}
\usepackage[landscape]{geometry}
\usepackage[backend=biber]{biblatex}
\addbibresource{refs.bib}
\newcommand{\paperevent}[1]{%
\event{\citeyear{#1}}{\textcite{#1}}%
}
\begin{document}
\begin{chronology}[5]{1960}{2013}{\textwidth}
\paperevent{Miller1960}
\end{chronology}
\end{document}
您可能已经猜到了,这不起作用,可能是因为\citeyear
在第一次 LaTeX 编译期间未知。我有什么办法可以使用 biblatex 宏来实现这一点吗?
错误目前听起来:
There were errors in your LaTeX source
./timeline.tex:15: Extra \else. [ \paperevent{Miller1960}]
./timeline.tex:15: Package PGF Math Error: Unknown operator `M' or `Mi' (in '(\citeyear {Miller1960}-1960)*\unit '). [ \paperevent{Miller1960}]
答案1
如何为事件定义自定义引用命令:
\documentclass{scrartcl}
\usepackage{chronology}
\usepackage[landscape]{geometry}
\usepackage[backend=biber]{biblatex}
\addbibresource{refs.bib}
\DeclareCiteCommand{\eventcite}{}{\event{\thefield{year}}{\printnames{labelname},\space\printfield{year}}}{}{}
\begin{document}
\begin{chronology}[5]{1960}{2013}{\textwidth}
\eventcite{Milnor:Morse}
\end{chronology}
\end{document}
包含refs.bib
@Book{Milnor:Morse,
author = {Milnor, J.},
title = {Morse theory},
publisher = {Princeton University Press},
year = 1973,
volume = 51,
series = {Annals of Mathematics Studies},
address = {Princeton, New Jersey},
}
您必须按照通常的pdflatex biber pdflatex
编译顺序才能使其工作。代码假设年份字段包含一个简单的年份。
该命令用于\thefield{year}
在第一个参数中直接获取年份。在第二个参数中,我们想要打印引文中的信息,因此\printnames{labelname}
和\printfield{year}
是合适的。