从我粗糙的 MWE 中你可以看出,我对 LaTeX 还很陌生。我花了很多时间调整biblatex
它的外观。我还有最后一个问题,我找不到解决方法,在网站上也找不到解决方案。
我希望在\textcite
有多个作者时显示“and”,目前确实如此。尽管我希望在有\parencite
多个作者时显示“&”。我还希望我的参考书目显示“&”。
请联系 MWE,我们将非常感激任何帮助。
\documentclass[12pt, twoside]{report}
\usepackage{filecontents}
\usepackage[%
backend=biber,
style=authoryear,
uniquename=init,giveninits,giveninits=true, terseinits=true,hyperref]{biblatex}
\usepackage{xpatch}
\DeclareNameAlias{sortname}{last-first}%Surname first
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%\ifnumgreater{\value{liststop}}{2}{\finalandcomma}{}%
%\addspace\&\space}
\newcommand{\biband}{\ifcurrentname{labelname}{\bibstring{and}}{\&}}
\renewcommand*{\finalnamedelim}{%
\ifnumgreater{\value{liststop}}{4}{\finalandcomma}{}%
\addspace\biband\space}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\renewcommand{\labelnamepunct}{\addcomma\addspace}%Sets comma
\renewcommand*{\newunitpunct}{\addcomma\space}%Sets commas
\setlength{\bibhang}{0em}%remove indent
\setlength\bibitemsep{\baselineskip}% add vertical space
\begin{filecontents}{\jobname.bib}
@article{test,
author = "Family, Given and Second, A and Given, Two",
title = "title",
journal = "Journal",
year = "2012"}
@Article{leis2016,
Title = {A Temperature Compensation Technique for Near-Infrared Methane Gas Threshold Detection},
Author = {J. Leis and D. Buttsworth},
Journal = {{IEEE} Trans. Ind. Electron.},
Year = {2016},
Month = mar,
Number = {3},
Pages = {1813--1821},
Volume = {63},
File = {ieeetie-2016.pdf:PDF},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
I would like to use {\bfseries ``\&''} within the {\bfseries bibliography}. \\
I would like to use {\bfseries ``and''} in {\bfseries textcite} \textcite{leis2016} \\
I would like to use {\bfseries ``\&''} within {\bfseries parencite} \parencite{leis2016}.\\
Example of three authors would be the same as above \textcite{test} using {\bfseries ``and''} within {\bfseries textcite}. \\
Although using {\bfseries parencite} to be {\bfseries ``\&''} \parencite{test}.
\renewcommand{\bibname}{REFERENCES}
\xpatchbibmacro{date+extrayear}{%
\printtext[parens]%
}{}{}
\printbibliography
\end{document}
答案1
\parencite
将和之间的最终名称分隔符\textcite
从“&”更改为“and”,如下所示(Sigfridsson & Ryde,1998)以及 Sigfridsson 和 Ryde(1998)
是 APA 格式的一个特点。例如参见https://blog.apastyle.org/apastyle/2011/01/writing-in-text-citations-in-apa-style.html和https://blog.apastyle.org/apastyle/2011/02/changes-parentheses-bring.html。
如果你正在寻找 APA 风格的完整实现
biblatex
,你可能会感兴趣biblatex-apa
,当加载为\usepackage[backend=biber, style=apa]{biblatex}
应根据 APA 指南制作参考书目和引用。
下面的答案显示了如何在标准样式中更改最终名称分隔符。
使用新的上下文敏感分隔符接口应该像finalnamdelim
在全局范围内重新定义以提供与号和提供“和”一样简单textcite
。
\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[style=authoryear, backend=biber]{biblatex}
\addbibresource{biblatex-examples.bib}
\DeclareDelimFormat{finalnamedelim}{\addspace\&\space}
\DeclareDelimFormat[textcite]{finalnamedelim}{%
\ifnumgreater{\value{liststop}}{2}{\finalandcomma}{}%
\addspace\bibstring{and}\space}
\begin{document}
\cite{sigfridsson,companion}
\parencite{sigfridsson,companion}
\textcite{sigfridsson,companion}
\printbibliography
\end{document}
已编辑以使用上下文敏感分隔符接口。请参阅 旧版本的编辑历史biblatex
。
答案2
Biblatex 支持上下文相关的分隔符;即,根据所使用的引用命令(\textcite
、\parencite
等),您可以告诉 biblatex 对某些分隔符类型使用不同的分隔符。有关更多详细信息,请参阅 biblatex 手册的 §3.10.2。
\finalnamedelim
是用于分隔引文或参考书目条目中(最后)两个名称的分隔符。不幸的是,\finalnamedelim
是,不是默认情况下上下文敏感,但我们可以轻松更改它:
% Modify name:delim to use a context-sensitive version of finalnamedelim
\xpatchbibmacro{name:delim}
{\lbx@finalnamedelim{#1}}
{\printdelim{finalnamedelim}}
{}{}
% Set the global context to use an ampersand
\DeclareDelimFormat{finalnamedelim}{%
\ifnumgreater{\value{liststop}}{2}{\finalandcomma}{}%
\addspace\&\space}
% Set the textcite context specifically to use the "and" string
\DeclareDelimFormat[textcite]{finalnamedelim}{%
\ifnumgreater{\value{liststop}}{2}{\finalandcomma}{}%
\addspace\bibstring{and}\space}
工作原理
根据 biblatex 文档,\finalnamedelim
是:
在姓名列表中的最后一个姓名前打印的分隔符(而不是 \multinamedelim)。默认值是本地化术语“and”,以单词间空格分隔。
其定义biblatex.def
如下:
\newcommand*{\finalnamedelim}{%
\ifnumgreater{\value{liststop}}{2}{\finalandcomma}{}%
\addspace\bibstring{and}\space}
请注意,西班牙语的实现方式有所不同。
在所有标准样式中,它都是通过 bibmacro 调用的name:delim
,该宏也在以下位置定义biblatex.def
:
\newcommand*{\lbx@finalnamedelim}[1]{\finalnamedelim}
\newbibmacro*{name:delim}[1]{%
\ifnumgreater{\value{listcount}}{\value{liststart}}
{\ifboolexpr{
test {\ifnumless{\value{listcount}}{\value{liststop}}}
or
test \ifmorenames
}
{\multinamedelim}
{\lbx@finalnamedelim{#1}}}
{}}
因此,要name:delim
使用 的上下文相关版本\finalnamedelim
,我们需要使用\printdelim{finalnamedelim}
而不是\lbx@finalnamedelim{#1}
。您可以完整复制name:delim
并仅更改该行,也可以使用xpatch
包选择性地仅替换您关心的部分:
\xpatchbibmacro{name:delim}
{\lbx@finalnamedelim{#1}}
{\printdelim{finalnamedelim}}
{}{}
最后一步是使用 声明每个上下文的分隔符格式DeclareDelimFormat[<context>]{<name>}{<code>}
。
如果您未指定上下文,则格式将全局应用(即,适用于任何未设置特定格式的上下文)。因此,除非另有说明,否则以下内容将强制在所有上下文中使用 & 符号:
\DeclareDelimFormat{finalnamedelim}{%
\ifnumgreater{\value{liststop}}{2}{\finalandcomma}{}%
\addspace\&\space}
现在我们覆盖\textcite
上下文:
\DeclareDelimFormat[textcite]{finalnamedelim}{%
\ifnumgreater{\value{liststop}}{2}{\finalandcomma}{}%
\addspace\bibstring{and}\space}
\bibstring{and}
保持此语言的敏感性,并且还允许您使用以下命令覆盖它:
\DefineBibliographyStrings{english}{%
and = {as well as}%
}
笔记:
上下文的格式定义\textcite
只是 的原始定义\finalnamedelim
。因此,您可能想尝试简化它:
\DeclareDelimFormat[textcite]{finalnamedelim}{\finalnamedelim}
这实际上是将我们的格式定义用于全局上下文,因此您将得到一个 & 符号,而不是\bibstring{and}
。顺便说一句,这就是您不能这样做的原因:
\DeclareDelimFormat{finalnamedelim}{\finalnamedelim}
这将使编译器陷入无限递归,并最终崩溃。