andothers
当使用文内或括号引用类别时,是否可以有两种不同的表达方式biblatex
?
例如,我想在文本中使用“and others”(用\textcite
)并在括号中使用“et al.”(用\parencite
)。如下所示:
正如 Yoon 等人 (2006) 提出的那样,......
这一结论此前已提出过 (Yoon et al., 2006)...
手册中 (第 103 页) 写道:
\textcitedelim
与 类似
\multicitedelim
,但由\textcite
and 相关命令使用(§3.7.2)。默认值为逗号加单词间空格。标准样式修改了此临时定义,以确保最终引用前的分隔符是本地化术语“and”,并以单词间空格分隔。
但我不确定这些是哪种风格或者他们如何修改它。
我查阅了以下问题和答案仅为 textcite 更改最后的 multicite delim(仅与参考书目条目进行对比)和在 textcite 中切换连词,但他们的解决方案无法满足我的需求。
答案1
从 3.4 版开始,biblatex
有一个 s 的概念delimcontext
,用于找出在什么上下文中(\parencite
、、\textcite
参考书目、文本被打印),我们可以使用它来确定我们处于\textcite
\makeatletter
\newcommand\ifintextcite{\ifdefstring{\blx@delimcontext}{textcite}}
\makeatother
这里不需要修补命令和新的切换。
然后我们可以andothers
根据测试修改 bistring
\DefineBibliographyStrings{german}{
andothers = {\ifintextcite{and others}{et\addabbrvspace al\adddot}}
}
平均能量损失
\documentclass{article}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{csquotes}
\usepackage[style=authoryear, backend=biber, sorting=none]{biblatex}
\addbibresource{biblatex-examples.bib}
\makeatletter
\newcommand\ifintextcite{\ifdefstring{\blx@delimcontext}{textcite}}
\makeatother
\DefineBibliographyStrings{german}{
andothers = {\ifintextcite{and others}{et\addabbrvspace al\adddot}}
}
\begin{document}
\textcite{aksin} \parencite{aksin}
\printbibliography
\end{document}
答案2
在标准的authoryear
biblatex 样式中,\parencite
和\textcite
在内部都使用name:others
bibmacro。我们可以做的是创建一个在 try 中打开和关闭的切换开关\textcite
,然后使用切换开关作为在宏内部使用的条件,该宏会打印“and others”或“et al”字符串。
\newtoggle{myintextcite}
最简单的方法是使用该xpatch
包并在前面添加打开切换的命令,并在后面添加关闭切换的命令。
\xpretobibmacro{textcite}{\toggletrue{myintextcite}}{}{}
\xapptobibmacro{textcite}{\togglefalse{myintextcite}}{}{}
鉴于我们已经加载xpatch
,我们可以使用它来修补name:andothers
bibmacro
\xpatchbibmacro{name:andothers}
{\andothersdelim\bibstring{andothers}}
{\andothersdelim\iftoggle{myintextcite}{and others}{\bibstring{andothers}}}
{}
{}
请注意 (1)andothers
字符串打印“et. al.”并且 (2) 没有etal
字符串。