Biblatex:在文本引用中使用“and”,在括号中使用“&”,在参考书目中使用“&”

Biblatex:在文本引用中使用“and”,在括号中使用“&”,在参考书目中使用“&”

从我粗糙的 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.htmlhttps://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}

Sigfridsson 和 Ryde 1998;Goossens、Mittelbach 和 Samarin 1994\(Sigfridsson 和 Ryde 1998;Goossens、Mittelbach 和 Samarin 1994)\Sigfridsson 和 Ryde (1998) 以及 Goossens、Mittelbach 和 Samarin (1994)\Goossens、Michel、Frank Mittelbach 和 Alexander Samarin (1994)。\Sigfridsson、Emma 和 Ulf Ryde (1998)。

已编辑以使用上下文敏感分隔符接口。请参阅 旧版本的编辑历史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}

这将使编译器陷入无限递归,并最终崩溃。

相关内容