在写作时,我喜欢为整个引文引入缩写。第一次,我会写“这是正确的,如(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
,但普通authoryear
和authortitle
样式却没有使用。
我们会看到如何修改,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 的带有natbib
cite-alias 功能的解决方案,那么您会很高兴听到biblatex
的natbib
兼容模式(只需传递natbib=true
给加载时选项)也提供了这些功能(据我所知)并且语法完全相同。