使用 biblatex 在脚注中自定义前缀

使用 biblatex 在脚注中自定义前缀

我还有关于使用自定义脚注引用的另一个问题biblatex

对于某些文章中常见的事实或观察引用,我想在脚注中添加前缀。这是为了区分非字面引用。只有在真正逐字引用某人的罕见情况下,才不需要添加前缀。我的 95% 的引用都使用“参见:”前缀。

(我指的“前缀”不是通常的名称前缀,如“von”、“de”、“van”等。)

因此,

韦恩(2012),第 123 页。

我想实现

请参阅:Wayne(2012),第 123 页。

这已经适用于 prenote 语法(参见 MWE),但我也可以自定义renewbibmacro以包含前缀吗?否则,我 a) 必须浏览整个文档以手动更改每个引用,并且 b) 如果我想更改它,就必须再次执行此操作。

对于逐字引用,我猜我可以\citelit用引入一个新命令?\let\citelit\cite

最小工作示例:

\begin{filecontents}{_references.bib}
@article{wayne12a,
    Author={Wayne, B.}, Title={A survey about the social inequalities in Gotham City},
    Journal={International Journal of Comic Science}, Year={2012},
    Volume={7}, Number={4}, Pages={35--45}}

@article{joker10b,
    Author={Joker, T.}, Title={Why so serious?},
    Journal={Journal of Vulgarity}, Year={2010},
    Volume={38},Number={5}, Pages={103--116}}
\end{filecontents}

\documentclass[a4paper]{article}
\usepackage[utf8]{inputenc}

\usepackage[bibstyle=authoryear, citestyle=authoryear, autocite=footnote,% 
           dashed=false, firstinits=true]{biblatex}
\addbibresource{_references.bib}% add bibtex-file
\let\cite\autocite% \cite -> \autocite

\renewbibmacro*{cite:labelyear+extrayear}{% Round parentheses around the year
\iffieldundef{labelyear} % Source: tex.stackexchange.com/a/30822/10434
  {}
  {\printtext[bibhyperref]{%
   \printtext[parens]{%
   \printfield{labelyear}%
   \printfield{extrayear}}}}}

\begin{document}
The CEO of Wayne Enterprises praised Batman's achievements for improving the living 
conditions in Gotham City.~\cite[See:][31]{wayne12a}

In a recent publication, however, The Joker described Batman as ``a little boy in a 
playsuit, crying for mummy and daddy.''~\cite[109]{joker10b}
\end{document}

答案1

供将来参考,这里是另一种解决方案,允许您使用自动“参见:”预注覆盖引用的默认设置。

正如与 lockstep 讨论的那样,此功能对于 OP 的问题的回答并不是绝对必要的,但由于\citelit\cite在这种情况下具有语义含义(即直接和间接引用),因此可能需要有反映它的命令。此外,此解决方案比更具可定制性\newcommand,并且可以被其他想要实现类似结果的人使用。

您可以在序言中写以下内容:

% Create a cite command that uses the default autocite=footnote behaviour
\DeclareCiteCommand{\seecite}[\iffootnote\mkbibparens\mkbibfootnote]
    {% Replace \usebibmacro{prenote} by its demfinition and modify it
    \iffieldundef{prenote}
        {\bibstring{see}\addcolon%
        \setunit{\prenotedelim}}%
        {\printfield{prenote}%
        \setunit{\prenotedelim}}%
    }
    {\usebibmacro{citeindex}%
    \usebibmacro{cite}}
    {\multicitedelim}
    {\usebibmacro{postnote}}

正如原始问题所建议的,我们使用\citelit\cite

\let\citelit\autocite
\let\cite\seecite

现在,我们可以在文档中写入以下内容:

\cite[92]{wayne12a}
\cite[Contra\addcolon][73]{joker10b}
\citelit[127]{joker10b}

上述代码的输出

答案2

我将简单地定义一个\precite基于\autocite但始终使用其第二个可选参数的宏。iennisei 的\bibstring提示也很好 - 但请注意,添加\addspace到新宏的定义会导致前缀后出现双空格。

\documentclass{article}

\usepackage[style=authoryear,autocite=footnote]{biblatex}

\NewBibliographyString{see}
\DefineBibliographyStrings{english}{%
  see = {See},
}

\newcommand*{\precite}[2][]{\autocite[\bibstring{see}\addcolon][#1]{#2}}

\textheight=100pt% just for the example

\usepackage{filecontents}

\begin{filecontents}{\jobname.bib}
@article{wayne12a,
    Author={Wayne, B.}, Title={A survey about the social inequalities in Gotham City},
    Journal={International Journal of Comic Science}, Year={2012},
    Volume={7}, Number={4}, Pages={35--45}}
@article{joker10b,
    Author={Joker, T.}, Title={Why so serious?},
    Journal={Journal of Vulgarity}, Year={2010},
    Volume={38},Number={5}, Pages={103--116}}
\end{filecontents}

\addbibresource{\jobname.bib}

\begin{document}

The CEO of Wayne Enterprises praised Batman's achievements for improving the living
    conditions in Gotham City \precite[31]{wayne12a}.

In a recent publication, however, The Joker described Batman as ``a little boy in a
    playsuit, crying for mummy and daddy'' \autocite[109]{joker10b}.

\end{document}

在此处输入图片描述

相关内容