`\textcite` 和 `\parencite` 的不同 `andothers` 表达

`\textcite` 和 `\parencite` 的不同 `andothers` 表达

andothers当使用文内或括号引用类别时,是否可以有两种不同的表达方式biblatex

例如,我想在文本中使用“and others”(用\textcite)并在括号中使用“et al.”(用\parencite)。如下所示:

正如 Yoon 等人 (2006) 提出的那样,......

这一结论此前已提出过 (Yoon et al., 2006)...

手册中 (第 103 页) 写道:

\textcitedelim

与 类似\multicitedelim,但由\textciteand 相关命令使用(§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

在标准的authoryearbiblatex 样式中,\parencite\textcite在内部都使用name:othersbibmacro。我们可以做的是创建一个在 try 中打开和关闭的切换开关\textcite,然后使用切换开关作为在宏内部使用的条件,该宏会打印“and others”或“et al”字符串。

\newtoggle{myintextcite}

最简单的方法是使用该xpatch包并在前面添加打开切换的命令,并在后面添加关闭切换的命令。

\xpretobibmacro{textcite}{\toggletrue{myintextcite}}{}{}
\xapptobibmacro{textcite}{\togglefalse{myintextcite}}{}{}

鉴于我们已经加载xpatch,我们可以使用它来修补name:andothersbibmacro

\xpatchbibmacro{name:andothers}
  {\andothersdelim\bibstring{andothers}}
  {\andothersdelim\iftoggle{myintextcite}{and others}{\bibstring{andothers}}}
  {}
  {}

请注意 (1)andothers字符串打印“et. al.”并且 (2) 没有etal字符串。

在此处输入图片描述

相关内容