![仅使用括号中的部分引用声明多引用命令](https://linux22.com/image/333474/%E4%BB%85%E4%BD%BF%E7%94%A8%E6%8B%AC%E5%8F%B7%E4%B8%AD%E7%9A%84%E9%83%A8%E5%88%86%E5%BC%95%E7%94%A8%E5%A3%B0%E6%98%8E%E5%A4%9A%E5%BC%95%E7%94%A8%E5%91%BD%E4%BB%A4.png)
更新:我可以通过这样做得到我想要的结果:
\newcommand*{\textapud}[2]{\citeauthor{#1} (\citeyear{#1} apud \citeauthor{#2}, \citeyear{#2})}
但是有几个问题。首先,它看起来不太好看,我认为我可以做得更好。其次,我无法为两个条目中的每一个指定 aprenote
和 a postnote
(我认为可能有办法将这种可能性添加到此命令中,但我无法让它工作)。最后,我无法使用该bibstring
命令——“apud”文本是硬编码在那里的。
我的问题类似于这个,但我只想把部分引文放在括号中。
我正在尝试写一种biblatex
风格,引用应该是这样的
“这”(DOE,2015)
或者,在文中引用作者时,像这样:
根据 BLOW (2016)。
到目前为止一切顺利,我成功做到了这一点。然后,当引用一位作者的另一位作者时,它必须像
“这个” (DOE,2015 apud BLOW,2016)。
根据 moewe 的回答我上面提到的问题,我也设法做到了这一点(我的代码在下面的 MWE 中),但现在我需要在文本中间执行此操作的版本,如下所示:
根据 DOE(2015 apud BLOW,2016)。
我不知道该怎么做。有什么想法吗?
\begin{filecontents}{\jobname.bib}
@abook{doe,
author = {John Doe},
year = {2015}}
@article{blow,
author = {Joe Blow},
year = {2016}}
@article{smith,
author = {Jim Smith},
year = {2016}}
\end{filecontents}
\documentclass{article}
\usepackage[backend=biber, style=authoryear]{biblatex}
\addbibresource{\jobname.bib}
\renewcommand*{\nameyeardelim}{\addcomma\addspace}
\newcommand{\addapud}{%
\renewcommand*{\multicitedelim}{%
\ifnumequal{\value{multicitecount}}{\value{multicitetotal}}
{\space\bibstring{apud}}
{\addsemicolon}%
\space}%
\renewcommand*{\textcitedelim}{%
\ifnumequal{\value{multicitecount}}{\value{multicitetotal}}
{\addspace\bibstring{apud}}
{\addsemicolon}%
\space}%
}
\DeclareMultiCiteCommand{\apud}[\addapud\mkbibparens]
{\@apud}
{\setunit{\multicitedelim}}
% This is to allow that second option down there
% in which the first author isn't in the .bib file.
\DeclareCiteCommand{\@apud}
{\iffieldundef{prenote}
{}
{\printfield[uppercase]{prenote}
\addspace\bibstring{apud}\addspace}}
{\usebibmacro{citeindex}%
\usebibmacro{cite}}
{\setunit{\multicitedelim}}
{\usebibmacro{postnote}}
% \DeclareMultiCiteCommand{\textapud}% HOW??
\begin{document}
\apud{doe}{blow}{smith}
\apud[Batman][]{smith}
\end{document}
附言:我没有添加bibstring
或代码来使名称和字段大写,因为我认为这不相关。
PS2:该命令不必像常规命令那样考虑两位以上作者的可能性\apud
。
答案1
我认为你的问题标题是错误的:你这里没有多重引用。你真正想要的是在另一个 \cite 的注释中添加一个 \cite。我认为合理的输入应该是
\textcite[{apud \cite[15]{smith}}]{Doe}
但由于无法嵌套引用,因此不允许这种输入。
您应该怎么做取决于具体情况。
我不会尝试调整 multicite。虽然它可以工作,但在这种情况下滥用它看起来并不明智。我也不会过度使用——考虑一下你真正需要它的频率,以及手动解决方案(通常更灵活)是否不是最佳解决方案。
您可以添加related
指向 smith 的字段并编写使用此字段的引用命令。但这不允许您向 smith 添加前注或后注。
另一种方法是按照您已经建议的方式去做:编写一个虚假的引用命令\textapud
,给出您想要的结果。您可以使用可选参数来改进它(您可能希望更改前注和后注的位置):
\documentclass{book}
\usepackage[backend=biber, style=authoryear]{biblatex}
\addbibresource{test.bib}
\renewcommand*{\nameyeardelim}{\addcomma\addspace}
\NewBibliographyString{apud}
\DefineBibliographyStrings{english}{apud=apud}
\usepackage{xparse}
\makeatletter
\NewDocumentCommand{\textapud}{o o m o o m}{%
\citeauthor{#3}
\mkbibparens{%
\IfNoValueTF{#2}
{%
\IfNoValueTF{#1}
{\citeyear{#3}}
{\citeyear[#1]{#3}}%
}
{%
\citeyear[#1][#2]{#3}%
}
\IfNoValueTF{#5}
{%
\IfNoValueTF{#4}
{\cite[\blx@imc@bibxstring{apud}][]{#6}}
{\cite[\blx@imc@bibxstring{apud}][#4]{#6}}%
}
{%
\cite[\blx@imc@bibxstring{apud} #4][#5]{#6}%
}%
}}
\makeatother
\begin{document}
\textapud[see][15]{doe}[blub][20]{smith}
\end{document}