我使用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}
multicitetotal
citetotal
three
\finalandcomma
不是打印,而它应该如此。
为了解决该异常,我添加了一个临时计数器,用于存储前一个citetotal
。在发生异常的情况下,lastcitetotal
将是 2 和citetotal
1,并且它们的总和将大于 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}
我们得到: