如何让图表标题中的 biblatex 引用显示在图表列表中?

如何让图表标题中的 biblatex 引用显示在图表列表中?

在我的工作场所,我们有一个官方的 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}

相关内容