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,但 plainauthoryearauthortitlestyles 卻沒有使用。

我們很好地看到如何修改它,authoryear以便它使用簡寫介紹。預設citeauthoryear可以在 中找到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(例如 via 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 函數的解決方案,您會很高興聽到該biblatex相容natbib模式(只需傳遞natbib=true到載入時選項)也提供了這些功能(據我所知)相同的語法。

相關內容