这个问题是关于作者年份引用,使用biblatex
括号内内联引用。
有时,需要引用两位作者,并使用“连接词”来指定他们之间的某种联系。[这有什么技术术语吗?]
例如:
Marvin 2009,引用 Arthur 2007
或者:
马文 1333,解释登特 1245
更具体地说,我希望将此排版为括号内的文内引用:
(Marvin 2009,引用 Arthur 2007)
或者:
(Marvin 1333,解释 Dent 1245)
我根本不知道该如何使用 来做到这一点,或者说如何优雅地做到这一点biblatex
。我最接近的方法是
- 使用分号而不是逗号的版本;
- 如果其中一个条目没有作者,那么冗长的破解就会失败。
\documentclass{article}
\usepackage[citestyle=authoryear-comp,bibstyle=authoryear,backend=biber]{biblatex}
\addbibresource{biblatex-examples.bib}
\begin{document}
Desired output is (CTAN 2006, interpreting Gillies 1933).
The following are almost correct except that they use the default delimiter (of course) so I have a semicolon rather than a comma: \autocites{ctan}[interpreting][]{gillies} or \parencites{ctan}[interpreting][]{gillies}.
The following is a bit long-winded. Worse, it fails if an entry does not actually have an author: \parentext{\citeauthor{ctan} \citeyear{ctan}, interpreting \citeauthor{gillies} \citeyear{gillies}}.
\end{document}
请注意,将引文之间的分隔符从分号重新定义为逗号并不是一个好的解决方案,因为分号对于几乎所有出现的多重引文都是正确的(在我的论文中,所有第 2 条都是如此)。只有当有一个特殊的“连接词”时,我才想要用逗号代替。
我想知道是否需要定义一个新的引用命令。这很好,但我想知道我没有遗漏任何东西,否则我只能重新设计轮子,最终得到一个不对称的平行四边形,而不是我本可以更轻松地使用的圆形圆圈。
如果没有直接的方法来实现这一点,这似乎令人惊讶,因为这似乎是一件相当常见的事情。因此,我怀疑我错过了一些明显的解决方案,只是找不到它。
安排此类引用最优雅的方式是什么?
答案1
一个解决方案是使用多点方法并重新定义\multicitedelim
适当的以下内容使用 \footcites 命令和 authoryear-icomp 在倒数第二个引用和倒数第二个引用之间添加“And”。
\newcommand{\interp}[1]{%
\renewcommand*{\multicitedelim}{%
\ifnumequal{\value{multicitecount}}{\value{multicitetotal}}
{\addcomma\space\printtext{#1}}
{}%
\space}%
\renewcommand*{\textcitedelim}{%
\ifnumequal{\value{multicitecount}}{\value{multicitetotal}}
{\addspace\printtext{#1}}
{}%
\space}%
}
然后我们只需定义新的多引用命令
\DeclareMultiCiteCommand{\citeint}[\interp{interpreting}]{\cite}{\setunit{\multicitedelim}}
\DeclareMultiCiteCommand{\citesla}[\interp{slagging off}]{\cite}{\setunit{\multicitedelim}}
\DeclareMultiCiteCommand{\citepint}[\interp{interpreting}\mkbibparens]{\parencite}{\setunit{\multicitedelim}}
\DeclareMultiCiteCommand{\citepsla}[\interp{slagging off}\mkbibparens]{\parencite}{\setunit{\multicitedelim}}
\makeatletter
\DeclareMultiCiteCommand{\citetint}[\interp{interpreting}\cbx@textcites@init\cbx@textcites]{\textcite}{\setunit{\multicitedelim}}
\DeclareMultiCiteCommand{\citetsla}[\interp{slagging off}\cbx@textcites@init\cbx@textcites]{\textcite}{\setunit{\multicitedelim}}
\makeatother
然后我们可以将其用作
\citeint{ctan}{gillies} and \citesla{ctan}{gillies}
您还可以使用您最初的想法\parencites{ctan}[interpreting][]{gillies}
如果你发出
\AtNextCite{\renewcommand{\multicitedelim}{\addcomma\space}}
在引用命令之前。
就像
\AtNextCite{\renewcommand{\multicitedelim}{\addcomma\space}}
\parencites{ctan}[interpreting][]{gillies}
平均能量损失
\documentclass{article}
\usepackage[citestyle=authoryear-comp,bibstyle=authoryear,backend=biber]{biblatex}
\addbibresource{biblatex-examples.bib}
\newcommand{\interp}[1]{%
\renewcommand*{\multicitedelim}{%
\ifnumequal{\value{multicitecount}}{\value{multicitetotal}}
{\addcomma\space\printtext{#1}}
{}%
\space}%
\renewcommand*{\textcitedelim}{%
\ifnumequal{\value{multicitecount}}{\value{multicitetotal}}
{\addspace\printtext{#1}}
{}%
\space}%
}
\DeclareMultiCiteCommand{\citeint}[\interp{interpreting}]{\cite}{\setunit{\multicitedelim}}
\DeclareMultiCiteCommand{\citesla}[\interp{slagging off}]{\cite}{\setunit{\multicitedelim}}
\DeclareMultiCiteCommand{\citepint}[\interp{interpreting}\mkbibparens]{\parencite}{\setunit{\multicitedelim}}
\DeclareMultiCiteCommand{\citepsla}[\interp{slagging off}\mkbibparens]{\parencite}{\setunit{\multicitedelim}}
\makeatletter
\DeclareMultiCiteCommand{\citetint}[\interp{interpreting}\cbx@textcites@init\cbx@textcites]{\textcite}{\setunit{\multicitedelim}}
\DeclareMultiCiteCommand{\citetsla}[\interp{slagging off}\cbx@textcites@init\cbx@textcites]{\textcite}{\setunit{\multicitedelim}}
\makeatother
\begin{document}
Desired output is (CTAN 2006, interpreting Gillies 1933).
\autocites{ctan}{gillies}
\citepint{ctan}{gillies} and \citepsla{ctan}{gillies}
\citetint{ctan}{gillies} and \citetsla{ctan}{gillies}
\citeint{ctan}{gillies} and \citesla{ctan}{gillies}
\autocites{ctan}{gillies}
\end{document}
答案2
编辑
或者...呃...这会让我得到与下面所示的相同的输出,并且具有相同的文档内容:
\newbibmacro*{connectcites:multipostnote}{%
\setunit{\addcomma\space}%
\iffieldundef{multipostnote}
{\printtext{quoting}}
{\printfield{multipostnote}\clearfield{multipostnote}}%
\space}
\DeclareMultiCiteCommand{\pconnectcites}[\mkbibparens]{\parencite}{\usebibmacro{connectcites:multipostnote}}
但它可能以一百种不同的方式违反了 Biblatex 圣经......
梅威瑟:
\documentclass{article}
\usepackage[citestyle=authoryear-comp,bibstyle=authoryear,backend=biber]{biblatex}
\addbibresource{biblatex-examples.bib}
\newbibmacro*{connectcites:multipostnote}{%
\setunit{\addcomma\space}%
\iffieldundef{multipostnote}
{\printtext{quoting}}
{\printfield{multipostnote}\clearfield{multipostnote}}%
\space}
\DeclareMultiCiteCommand{\pconnectcites}[\mkbibparens]{\parencite}{\usebibmacro{connectcites:multipostnote}}
\begin{document}
\pconnectcites(interpreting){ctan}{gillies}
\pconnectcites[see][56]{ctan}[details from][47--89]{gillies}
\pconnectcites(interpreting)[based on][87]{ctan}[original argument in][32]{gillies}
\pconnectcites(interpreting)[98]{ctan}[67]{gillies}
\pconnectcites(interpreting)[see][]{ctan}[an earlier version in][]{gillies}
\end{document}
原始答案
在moewe 的请求,我将其作为“答案”发布,尽管我并不认为它是一个答案,因为它远非优雅!
使用penguinpreferred 的建议并且xparse
,我想出了这个:
\NewDocumentCommand \pconnectcites { D() {quoting} o o m o o m }{%
\parentext{%
\IfNoValueTF{#3}{%
\IfNoValueTF{#2}{%
\cite{#4}%
}{%
\cite[#2]{#4}%
}%
}{%
\cite[#2][#3]{#4}%
}%
, #1 %
\IfNoValueTF{#6}{%
\IfNoValueTF{#5}{%
\cite{#7}%
}{%
\cite[#5]{#7}%
}%
}{%
\cite[#5][#6]{#7}%
}%
}%
}
这让我可以说:
\pconnectcites(interpreting){ctan}{gillies}
\pconnectcites[see][56]{ctan}[details from][47--89]{gillies}
\pconnectcites(interpreting)[based on][87]{ctan}[original argument in][32]{gillies}
\pconnectcites(interpreting)[98]{ctan}[67]{gillies}
\pconnectcites(interpreting)[see][]{ctan}[an earlier version in][]{gillies}
生产: