При написании я люблю вводить сокращение для всей цитаты. В первом случае я бы написал "Это верно, как показано в (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
к параметрам времени загрузки) также предлагает эти функции с (насколько мне известно) точно таким же синтаксисом.