在寫作時,我喜歡引入整個引文的縮寫。在第一個實例中,我會寫「這是正確的,如 (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
,但 plainauthoryear
和authortitle
styles 卻沒有使用。
我們很好地看到如何修改它,authoryear
以便它使用簡寫介紹。預設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
(例如 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 的帶有natbib
cite-alias 函數的解決方案,您會很高興聽到該biblatex
相容natbib
模式(只需傳遞natbib=true
到載入時選項)也提供了這些功能(據我所知)相同的語法。