Пользовательское сокращение для цитирования в 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, простые authoryearи authortitleстили этого не делают.

Мы хорошо видим, как можно изменить 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}}

Затем фактический макрос cite изменяется так, чтобы при первой ссылке печаталась длинная цитата и сокращенное введение (очевидно, введение печатается только в том случае, если действительно присутствует сокращенное написание), а при последующих ссылках — сокращенная или длинная (обычная) цитата.

\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}}

к преамбуле.


Если вам нравится решение Вацлава Павлика с natbibфункцией cite-alias , вы будете рады услышать, что biblatexрежим natbibсовместимости (просто перейдите natbib=trueк параметрам времени загрузки) также предлагает эти функции с (насколько мне известно) точно таким же синтаксисом.

Связанный контент