在我的工作场所,我们有一个官方的 LaTeX 文档类,我们应该使用它。我正在使用这个类和 biblatex 作为我的参考资料撰写一份报告。它工作得很好,除了一个怪癖:在图表列表中,标题中出现的引用被相应的 bibtex 条目的标签替换。为了说明这一点,请考虑以下 MWE,其中类文件被精简到最低限度:
\begin{filecontents*}{\jobname.bib}
@Article{foo1970,
author = {Foo, B. and others},
title = {Frobtzing the frob},
journal = "J.\ Frob.",
year = 1970}
\end{filecontents*}
\begin{filecontents*}{mweclass.cls}
\def\fileversion{2.0}
\def\filedate{2010/06/15}
\def\docdate {2010/06/15}
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{mweclass}[\filedate\space v\fileversion\space MWE class]
\ProcessOptions\relax
\LoadClassWithOptions{article}
\AtBeginDocument{
\listoffigures
\clearpage
}
\end{filecontents*}
\documentclass{mweclass}
\usepackage[backend=biber,style=authoryear]{biblatex}
\usepackage[demo]{graphicx}
\addbibresource{\jobname.bib}
\begin{document}
\begin{figure}
\centering
\includegraphics{test}
\caption{This cites \textcite{foo1970}.}
\end{figure}
\printbibliography[heading=bibnumbered]
\end{document}
如果我(使用)编译它pdflatex
,我会得到这个:
然而,如果我将\AtBeginDocument
命令移出类文件,并将其放在\begin{document}
,我得到了预期的结果:
我已尝试\protect
执行该\textcite
命令,但没有任何变化。
根据@moewe的建议,我还尝试将以下代码片段添加到类文件中(来自他/她对这个问题):
\AtEndPreamble{%
\addtocontents{toc}{%
\booltrue{citerequest}\relax}%
\addtocontents{lof}{%
\booltrue{citerequest}\relax}%
\addtocontents{lot}{%
\booltrue{citerequest}\relax}}
但不幸的是,只要该\AtBeginDocument
命令出现在类文件中,它就没有任何区别(并且实际上导致一些未定义的引用)。
这是怎么回事?我该如何说服pdflatex
将相同的文本放在图表列表和图表标题中?
答案1
您可以使用etoolbox
包(使用\AtEndPreamble
)修复您的课程:
\begin{filecontents*}{\jobname.bib}
@Article{foo1970,
author = {Foo, B. and others},
title = {Frobtzing the frob},
journal = "J.\ Frob.",
year = 1970}
\end{filecontents*}
\begin{filecontents*}{mweclass.cls}
\def\fileversion{2.0}
\def\filedate{2010/06/15}
\def\docdate {2010/06/15}
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{mweclass}[\filedate\space v\fileversion\space MWE class]
\ProcessOptions\relax
\LoadClassWithOptions{article}
\RequirePackage{etoolbox}
\AtEndPreamble{
\AtBeginDocument{
\listoffigures
\clearpage
}
}
\end{filecontents*}
\documentclass{mweclass}
\usepackage[demo]{graphicx}
\usepackage[backend=biber,style=authoryear]{biblatex}
\AtEndPreamble{%
\addtocontents{toc}{%
\booltrue{citerequest}\relax}%
\addtocontents{lof}{%
\booltrue{citerequest}\relax}%
\addtocontents{lot}{%
\booltrue{citerequest}\relax}}
\addbibresource{\jobname.bib}
\begin{document}
\begin{figure}
\centering
\includegraphics{test}
\caption{This cites \protect\textcite{foo1970}.}
\end{figure}
\printbibliography[heading=bibnumbered]
\end{document}