Biblatex 在多个引用中更改作者之间的标点符号

Biblatex 在多个引用中更改作者之间的标点符号

我使用biblatex包。我在更改多个引用标点符号时遇到问题。

我想要使​​用如下\cites命令\parentcites

\cites{AuthorYYYY,AuthorYYYY,AuthorYYYY}

我的输出为:

作者 1 YYYY;作者 2 YYYY;作者 3 YYYY。

但我想要的是:

作者 1 YYYY 和 作者 2 YYYY

作者 1 YYYY、作者 2 YYYY 和作者 3 YYYY

作者 1 YYYY,第 1-3 页,作者 2 YYYY,以及作者 3 YYYY,第 4 页和第 12-14 页

我该如何改变它?

谢谢你!

答案1

你可以通过改变 来改变传递给同一个 cite 命令的连续引用之间的通用标点符号\multicitedelim。因此,类似下面的命令\renewcommand{\multicitedelim}{\addcomma\space}应该会将你的输出更改为

作者 1 YYYY,作者 2 YYYY,作者 3 YYYY

为了\cites{AuthorYYYY,AuthorYYYY,AuthorYYYY}

现在,您甚至希望对两个引用的情况使用不同的处理方式,即使用“and”,并在所有引用之间使用逗号,但最后一个引用除外,在两个以上引用的情况下,应使用“and”和牛津逗号。我认为这并不容易实现,因为 biblatex 似乎没有区分最后一项和所有其他项目的分隔符,就像它区分作者姓名和列表分隔符一样。

答案2

我参加聚会迟到了,但我想现在biblatex允许你这么做。

考虑以下示例:

\documentclass{article}
\usepackage{geometry}
\usepackage[citestyle=authoryear-comp]{biblatex}
\addbibresource{biblatex-examples.bib}
\begin{document}
\cites{glashow,herrmann}

\cites{glashow,herrmann,kastenholz}

\cites[1-3]{glashow}{herrmann}[\ppno~4 and~12--14]{kastenholz}
\end{document}

打印结果为:

在此处输入图片描述

如果我们重新定义,\multicitedelim我们可以让它打印不同的分隔符,具体取决于引用的数量(存储在citetotal计数器中)和当前引用的数量(存储在计数器中citecount):

\renewcommand*{\multicitedelim}{%
  \iflastcitekey
    {%
      \ifboolexpr{
            test {\ifnumgreater{\value{citetotal}+\value{multicitetotal}-1}{2}}
         or test {\ifnumgreater{\value{lastcitetotal}+\value{citetotal}}{2}}
       }
       {\finalandcomma}
       {}%
      \addspace\bibstring{and}\space
   }
   {\addcomma\space}%
  \ifnumequal{\value{citetotal}}{\value{citecount}}
   {\setcounter{lastcitetotal}{\value{citetotal}}}
   {}%
}

上述定义检查当前引用键是否是使用 分隔的逗号列表中的最后一个\iflastcitekey。如果不是最后一个引用,则只需打印\addcomma\space(IE, ,␣)。否则,如果它是最后一个键,我们检查表达式\value{citetotal}+\value{multicitetotal}-1\value{lastcitetotal}+\value{citetotal}是否大于二,如果是,则打印 a \finalandcomma,然后\addspace\bibstring{and}\space在所有情况下 ( ,␣and␣)。

第一个表达式小于或等于多引用命令中的总引用数,因此如果有多个引用,它将确保。此表达式仅在处理时为 (其中为 2 且为 1)的\finalandcomma情况下才会失败。在这种情况下,表达式计算结果为 2 且为\cites{one,two}{three}multicitetotalcitetotalthree\finalandcomma不是打印,而它应该如此。

为了解决该异常,我添加了一个临时计数器,用于存储前一个citetotal。在发生异常的情况下,lastcitetotal将是 2 和citetotal1,并且它们的总和将大于 2,因此\finalandcomma将打印。

将该定义添加到我们的示例中:

\documentclass{article}
\usepackage{geometry}
\usepackage[citestyle=authoryear-comp]{biblatex}
\addbibresource{biblatex-examples.bib}
\newcounter{lastcitetotal}
\renewcommand*{\multicitedelim}{%
  \iflastcitekey
    {%
      \ifboolexpr{
            test {\ifnumgreater{\value{citetotal}+\value{multicitetotal}-1}{2}}
         or test {\ifnumgreater{\value{lastcitetotal}+\value{citetotal}}{2}}
       }
       {\finalandcomma}
       {}%
      \addspace\bibstring{and}\space
   }
   {\addcomma\space}%
  \ifnumequal{\value{citetotal}}{\value{citecount}}
   {\setcounter{lastcitetotal}{\value{citetotal}}}
   {}%
}
\begin{document}
\pagestyle{empty}
\cites{glashow,herrmann}

\cites{glashow,herrmann,kastenholz}

\cites[1-3]{glashow}{herrmann}[\ppno~4 and~12--14]{kastenholz}
\end{document}

我们得到:

在此处输入图片描述

相关内容