bibtex 中引用的自定义缩写

bibtex 中引用的自定义缩写

在写作时,我喜欢为整个引文引入缩写。第一次,我会写“这是正确的,如(nbren12,et. al. 2012)(以下简称 NB12)所示”。在后续用法中,我只会说“这个事实是正确的(NB12)”。如何使用 bibtex(或 biblatex)自动实现这一点?

这类似于但不完全相同这个问题

答案1

手动的natbib第 3 页。

使用命令:

\defcitealias{nbren12}{NB12}

此后,除了经典的引用\citet{}或之外\citep{},您还可以使用:

\citetalias{nbren12}
% or
\citepalias{nbren12}

例子

example.tex有:

\documentclass{article}
\usepackage{natbib}
\bibliographystyle{apalike}

\begin{document}

\defcitealias{jd14}{JD14}

In text \citet{jd14}. Or in brackets \citep[][hereafter JD14]{jd14}.

Now I cite it in text as \citetalias{jd14} and in brackets \citepalias{jd14}.

\bibliography{mybib}

\end{document}

并且mybib.bib我有:

@article{jd14,
  author={Doe, J. and Smith, J. and Bar, F.},
  title={Some title},
  journal={Some journal},
  year={2014},
}

输出为:

在此处输入图片描述

如果您希望别名以斜体显示,但不以页码等显示,您可以这样写\defcitealias{jd14}{{\itshape JD14}}

答案2

biblatex有内置的标准宏shorthandintro可以做到这一点。.bib然后在文件中添加字段shorthand并在那里给出简短的引用名称,如下所示

@article{jd14,
  author  = {Doe, J. and Smith, J. and Bar, F.},
  title   = {Some title},
  journal = {Some journal},
  year    = {2014},
  shorthand = {JD14},
}

剩下要做的唯一一件事就是确保只在适当的时候调用此宏。虽然有些样式已经使用了shorthandintro,但普通authoryearauthortitle样式却没有使用。

我们会看到如何修改,authoryear以便它使用简写 intro。cite的默认宏authoryear可以在中找到authoryear.cbx

如果没有简写,则使用的主要引用部分可以外包到新的宏中longcite

\newbibmacro*{longcite}{%
  \ifthenelse{\ifnameundef{labelname}\OR\iffieldundef{labelyear}}
    {\usebibmacro{cite:label}%
     \setunit{\addspace}}
    {\printnames{labelname}%
     \setunit{\nameyeardelim}}%
  \usebibmacro{cite:labelyear+extrayear}}

然后,实际的引用宏被更改为在第一次引用时打印长引用和简写介绍(显然,只有实际存在简写时才会打印介绍),并在后续引用中打印简写或长(正常)引用。

\renewbibmacro*{cite}{%
  \ifciteseen
    {\iffieldundef{shorthand}
      {\usebibmacro{longcite}}
      {\usebibmacro{cite:shorthand}}}
    {\usebibmacro{longcite}
     \usebibmacro{shorthandintro}}}

为了能够使用\ifciteseen测试,我们必须启用citetracker(例如通过citetracker=true)。

其他引用样式使用不同的cite宏,因此修改也必须不同,而且此修改目前不适用于\textcite

平均能量损失

\documentclass[british,a4paper]{article}
\usepackage{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{csquotes}
\usepackage{filecontents}
\usepackage[backend=biber,style=authoryear,citetracker=true]{biblatex}

\begin{filecontents*}{\jobname.bib}
@article{jd14,
  author  = {Doe, J. and Smith, J. and Bar, F.},
  title   = {Some Title},
  journal = {Some Journal},
  year    = {2014},
  shorthand = {JD14},
}
@article{jd13,
  author  = {Doe, J. and Smith, J. and Bar, F.},
  title   = {No shorthand here},
  journal = {Some Other Journal},
  year    = {2013},
}
\end{filecontents*}

\addbibresource{\jobname.bib}

\newbibmacro*{longcite}{%
  \ifthenelse{\ifnameundef{labelname}\OR\iffieldundef{labelyear}}
    {\usebibmacro{cite:label}%
     \setunit{\addspace}}
    {\printnames{labelname}%
     \setunit{\nameyeardelim}}%
  \usebibmacro{cite:labelyear+extrayear}}

\renewbibmacro*{cite}{%
  \ifciteseen
    {\iffieldundef{shorthand}
      {\usebibmacro{longcite}}
      {\usebibmacro{cite:shorthand}}}
    {\usebibmacro{longcite}
     \usebibmacro{shorthandintro}}}

\begin{document}
  \cite{jd14} again \cite{jd14} and one more time \cite{jd14}.

  Just for comparison \cite{jd13}.

  \printbibliography
\end{document}

在此处输入图片描述

如果你更喜欢用“此后<key>”而不是“此后引用为<key>”,只需添加

\DefineBibliographyStrings{english}{citedas = {hereafter}}

回到序言。


如果您喜欢 Václav Pavlík 的带有natbibcite-alias 功能的解决方案,那么您会很高兴听到biblatexnatbib兼容模式(只需传递natbib=true给加载时选项)也提供了这些功能(据我所知)并且语法完全相同。

相关内容