![如何改变参考书目样式](https://linux22.com/image/395567/%E5%A6%82%E4%BD%95%E6%94%B9%E5%8F%98%E5%8F%82%E8%80%83%E4%B9%A6%E7%9B%AE%E6%A0%B7%E5%BC%8F.png)
我想为所有引文添加括号,如(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).引用命令之间的差异。在:我刚刚编造的参考年鉴。