如何改变参考书目样式

如何改变参考书目样式

我想为所有引文添加括号,如(Shneider et al 2016)。最接近的样式是\usepackage[backend=bibtex, citestyle=authoryear]{biblatex},只是缺少括号。我试过了

\renewcommand{\cite}[1]{(\cite{#1})}

但这会导致堆栈溢出

! TeX capacity exceeded, sorry [input stack size=5000].

添加括号的正确方法是什么?

答案1

首先,你的尝试为什么会破坏 TeX?

当你执行\renewcommand{\cite}[1]{(\cite{#1})},并使用 时\cite{hello},TeX 会将\cite宏扩展为(\cite{hello})。很明显,对吧?毕竟这就是你想要做的。现在 TeX 写入一个(然后看到\cite{hello})。它再次扩展\cite并替换为你所做的定义:(\cite{hello}))。请注意,有两个));一个来自上一次扩展,一个来自最新的扩展。该过程重复进行,然后你会得到\cite{hello}))),然后\cite{hello})))),然后\cite{hello}))))...你让 TeX 陷入了无限循环。

通常它会不断扩大\cite 无限地(例如,如果你这样做\renewcommand{\cite}[1]{\cite{#1}},你需要手动中断 TeX,否则它将永远运行),然而,在每次扩展时,你都会添加一个新的),很快这个列表)就会变得太大,TeX 无法处理它,所以它会告诉你

! TeX capacity exceeded, sorry [input stack size=5000].

这就是你所做的,一个包含 5000 个)字符的长列表:D

只是为了好玩,只有 10 个字节:\def~{~)}~

如果您想重新定义命令但仍使用旧定义,则需要执行以下操作:

\let\cite_OLD\cite % make a copy of \cite in \cite_OLD
\renewcommand{\cite}[1]{(\cite_OLD{#1})} % redefine \cite to use \cite_OLD

现在来谈谈当前的问题……

您使用的是 BibLaTeX,它附带各种引文功能,因此您几乎不需要手动添加括号。此外,本网站有大量关于 BibLaTeX 的优秀使用示例,只需搜索即可找到 :)

对于您的具体查询,您可以查看biblatex手动的, 部分3.8 引用命令。引用命令有两种基本类型(引用手册,总结):

  • \cite/ \Cite [⟨prenote⟩][⟨postnote⟩]{⟨key⟩}:这些是裸引文命令。它们打印引文时不添加任何附加内容(例如括号)。\Cite与 类似,但如果启用\cite该选项,则将引文中名字的前缀大写。useprefix
  • \parencite/ \Parencite [⟨prenote⟩][⟨postnote⟩]{⟨key⟩}:这些命令使用类似的格式,\cite但将整个引用括在括号中。

而且由于您正在使用authoryear,所以这个也很常见(重点是我的):

  • \textcite/ \Textcite [⟨prenote⟩][⟨postnote⟩]{⟨key⟩}:这些引文命令用于文本流,替换句子的主题。它们打印作者或编辑,后面跟着括号中的引文标签。根据引文样式,标签可能是数字、出版年份、标题的缩写版本或其他内容。

正如您所问,这种分离是存在的,因为根据 Thor (2019) 的说法,在作者-年份引用样式中,通常要么使用引用作为句子中的主语,如上文,使用 ,\textcite要么在句子后添加带括号的引用(使用\parencite),这在括号外是没有意义的(Thor,2019)。因此,参考文献管理软件包提供这样的替代方案是很自然的。


Thor, AU (2019).引用命令之间的差异。在:我刚刚编造的参考年鉴。

相关内容