Ao escrever, gosto de introduzir uma abreviatura para toda a citação. Em primeira instância, eu escreveria "Isso é verdade conforme mostrado em (nbren12, et. al. 2012) (doravante NB12)". Nas utilizações subsequentes, eu diria apenas “Este fato é verdadeiro (NB12)”. Como posso implementar isso automaticamente usando bibtex (ou biblatex)?
Isto é semelhante, mas não idêntico aessa questão.
Responder1
Está descrito claramente nomanualda natbib
página 3.
Use o comando:
\defcitealias{nbren12}{NB12}
Depois disso, além da citação clássica \citet{}
ou \citep{}
, você também pode usar:
\citetalias{nbren12}
% or
\citepalias{nbren12}
Exemplo
Em example.tex
eu tenho:
\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}
e em mybib.bib
eu tenho:
@article{jd14,
author={Doe, J. and Smith, J. and Bar, F.},
title={Some title},
journal={Some journal},
year={2014},
}
e a saída é:
E se você quiser que o alias apareça, por exemplo, em itálico, mas não em números de página, etc., você pode escrever, por exemplo, \defcitealias{jd14}{{\itshape JD14}}
.
Responder2
biblatex
tem a macro padrão integrada shorthandintro
que pode fazer isso. No .bib
arquivo será então adicionado o shorthand
campo e dado o nome abreviado da citação, assim
@article{jd14,
author = {Doe, J. and Smith, J. and Bar, F.},
title = {Some title},
journal = {Some journal},
year = {2014},
shorthand = {JD14},
}
A única coisa que falta fazer é garantir que esta macro só seja chamada quando for apropriado. Embora existam alguns estilos que já usam shorthandintro
, os estilos simples authoryear
e authortitle
não.
Veremos bem como se pode modificar o authoryear
para que ele use a introdução abreviada. A cite
macro padrão para authoryear
pode ser encontrada em authoryear.cbx
.
A parte principal da citação usada se nenhuma abreviação estiver presente pode ser terceirizada para uma nova macrolongcite
\newbibmacro*{longcite}{%
\ifthenelse{\ifnameundef{labelname}\OR\iffieldundef{labelyear}}
{\usebibmacro{cite:label}%
\setunit{\addspace}}
{\printnames{labelname}%
\setunit{\nameyeardelim}}%
\usebibmacro{cite:labelyear+extrayear}}
Em seguida, a macro de citação real é alterada para imprimir uma citação longa e uma introdução abreviada na primeira citação (obviamente a introdução só é impressa se uma abreviação estiver realmente presente) e a citação abreviada ou longa (normal) nas citações subsequentes.
\renewbibmacro*{cite}{%
\ifciteseen
{\iffieldundef{shorthand}
{\usebibmacro{longcite}}
{\usebibmacro{cite:shorthand}}}
{\usebibmacro{longcite}
\usebibmacro{shorthandintro}}}
Para podermos utilizar o \ifciteseen
teste, teremos que habilitar o citetracker
(por exemplo via citetracker=true
).
Outros estilos de citação usam cite
macros diferentes e as modificações terão que ser diferentes. Além disso, esta modificação não funciona atualmente com \textcite
.
MWE
\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}
Se você preferir "doravante <key>
" a "doravante citado como <key>
", basta adicionar
\DefineBibliographyStrings{english}{citedas = {hereafter}}
ao preâmbulo.
Se você gosta da solução de Václav Pavlík com natbib
a função cite-alias, ficará encantado em saber que o modo de compatibilidade biblatex
de (basta passar para as opções de tempo de carregamento) também oferece esses recursos com (até onde eu sei) exatamente o mesma sintaxe.natbib
natbib=true