仅使用括号中的部分引用声明多引用命令

仅使用括号中的部分引用声明多引用命令

更新:我可以通过这样做得到我想要的结果:

\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}

在此处输入图片描述

相关内容