Abreviatura personalizada para citação no bibtex

Abreviatura personalizada para citação no bibtex

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 natbibpá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.texeu 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.bibeu tenho:

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

e a saída é:

insira a descrição da imagem aqui

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

biblatextem a macro padrão integrada shorthandintroque pode fazer isso. No .bibarquivo será então adicionado o shorthandcampo 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 authoryeare authortitlenão.

Veremos bem como se pode modificar o authoryearpara que ele use a introdução abreviada. A citemacro padrão para authoryearpode 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 \ifciteseenteste, teremos que habilitar o citetracker(por exemplo via citetracker=true).

Outros estilos de citação usam citemacros 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}

insira a descrição da imagem aqui

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 natbiba função cite-alias, ficará encantado em saber que o modo de compatibilidade biblatexde (basta passar para as opções de tempo de carregamento) também oferece esses recursos com (até onde eu sei) exatamente o mesma sintaxe.natbibnatbib=true

informação relacionada