如何使 \citeauthor 不向 \printbibliography 添加条目

如何使 \citeauthor 不向 \printbibliography 添加条目

我想使用\citeauthor这种方式来提及作者,当作品本身未被引用,但每次提及时都会自动建立索引。我尝试用 重新定义它\DeclareCiteCommand,但没有得到想要的结果。

\documentclass{article}

\usepackage[style=verbose]{biblatex}
  \ExecuteBibliographyOptions{
    hyperref = true,
    indexing = cite,
    autocite = footnote
  }
  \begin{filecontents*}{test.bib}
    @book{aristotle:physics,
      author     = {Aristotle},
      title      = {Physics},
      publisher  = {G. P. Putnam},
      location   = {New York},
      date       = 1929
    }
  }
  \end{filecontents*}
  \addbibresource{test.bib}
\usepackage{imakeidx}
  \makeindex[title={Authors Index}, columns=2]
\usepackage[hidelinks]{hyperref}

\begin{document}
  \noindent \citeauthor{aristotle:physics} [...]
  \printbibliography
  \printindex
\end{document}

答案1

一种方法是将其放在一个特殊的参考部分中,您永远不会显示其参考书目:

\newcommand\mentionauthor[1]{\begin{refsection}\citeauthor{#1}\end{refsection}}

\begin{document}
  \noindent \mentionauthor{aristotle:physics} [...]
  \printbibliography
  \printindex
\end{document}

答案2

通常,一旦您biblatex \...cite...在条目上调用宏,就会从文件中请求该条目的数据.bib并将其添加到.bbl,这意味着如果打印了参考书目,它将被包含在参考书目中。如果biblatex不将条目发送到 ,您就无法获取条目的数据,.bbl并且一旦条目在 中,.bbl它就会被添加到参考书目中(如果参考书目是无限制打印的)。

有一些技巧可以解决这个问题,要么涉及几个refsections,要么按类别或其他数据进行过滤。

refsection是将文档某一部分的引文和相应的参考书目与另一部分的引文和相应的参考书目完全分开的一种方法。其中一种方法如下图所示太平洋标准时间回答类似的策略也可以在https://tex.stackexchange.com/a/403928/35864。这种方法的优点是它将您的“ \citeauthor”调用与文档引用的其余部分完全分开:仅在此处引用的作品将不会被添加到全局参考书目中,也不会影响排序或唯一性计算。缺点是处理开销:每个“ \citeauthor”调用都会创建一个新的refsection,这会导致辅助宏被写入辅助文件并从​​辅助文件中读取。Biber 需要refsection分别处理每个宏。

另一种方法是,category如果标记只用于\citeauthor,然后跳过这些条目。需要一些思考才能使逻辑正确,但您可以在古斯布斯回答如何使用 BibLaTeX 省略 \printbibliography 中的一个特定引用?refsegment(我现在正在简化代码以忽略s 。如果您需要它们,链接的答案会显示如何将它们重新添加。)

\documentclass{article}

\usepackage[style=authoryear-comp]{biblatex}

\newtoggle{includeentry}
\toggletrue{includeentry}

\DeclareBibliographyCategory{entriesinbib}

\AtEveryCitekey{%
  \iftoggle{includeentry}
    {\addtocategory{entriesinbib}{\thefield{entrykey}}}%
    {}}

\newcommand{\DontIncludeNextCite}{\AtNextCite{\togglefalse{includeentry}}}

\newcommand\mentionauthor{\DontIncludeNextCite\citeauthor}

\addbibresource{biblatex-examples.bib}

\begin{document}
Lorem \autocite{sigfridsson}
ipsum \autocite{worman}

Lorem \mentionauthor{worman}
ipsum \mentionauthor{nussbaum}

\printbibliography[category=entriesinbib]
\end{document}

这种方法的缺点是,在大多数情况下,\citeauthor'd 条目仍然是参考书目的一部分:它们影响排序和唯一性数据。(尝试\mentionauthor{knuth:ct:c} \autocite{knuth:ct:b}上面的 MWE。)

答案3

提出的两个答案对于了解如何处理这个问题都非常有用。这两个答案都有各自的优点和缺点。对于我正在研究的项目,方法\AtNextCite将改变年份,为其添加一个字母,(1980a)和将refsection杀死同上。缩写和缓慢的性能,MWE:

\documentclass{article}
  \usepackage[style=verbose-trad1]{biblatex}
    \let\oldciteauthor\citeauthor
    \renewcommand{\citeauthor}[1]{\begin{refsection}\oldciteauthor{#1}\end{refsection}}
    \addbibresource{biblatex-examples.bib}
    \ExecuteBibliographyOptions{
      autocite   = footnote,
      abbreviate = true,
      strict     = false,
    }

\begin{document}
Lorem \autocite[1]{worman} then \citeauthor{worman} ipsum \autocite[1]{worman}

\printbibliography
\end{document}

因此,我决定采用一个解决方案,可以通过 自动将所引用作品的作者添加到索引中\citeauthor,而同一.bib文件中未明确引用的作者将通过\index{AuthorName}命令手动控制,从而提供良好的性能并产生正确的输出:

\documentclass{article}
  \usepackage[style=verbose-trad1]{biblatex}
    \addbibresource{biblatex-examples.bib}
    \ExecuteBibliographyOptions{
      autocite   = footnote,
      abbreviate = true,
      strict     = false,
    }
  \usepackage{imakeidx}
    \makeindex[title={Authors Index}, columns=2]
  \usepackage[hidelinks]{hyperref}

\begin{document}
  Lorem \autocite[1]{worman} then \citeauthor{worman} ipsum \autocite[1]{worman}.

  Other author \index{Aristotle} Aristotle.
  \printbibliography
  \printindex
\end{document}

它需要更多的纪律和管理,并保持最终输出不发生不必要的更改。

相关内容