![Дублирующая аббревиатура в ссылках Natbib](https://rvso.com/image/472711/%D0%94%D1%83%D0%B1%D0%BB%D0%B8%D1%80%D1%83%D1%8E%D1%89%D0%B0%D1%8F%20%D0%B0%D0%B1%D0%B1%D1%80%D0%B5%D0%B2%D0%B8%D0%B0%D1%82%D1%83%D1%80%D0%B0%20%D0%B2%20%D1%81%D1%81%D1%8B%D0%BB%D0%BA%D0%B0%D1%85%20Natbib.png)
У меня есть часть исследовательской работы, которая цитирует кучу технических и правительственных отчетов. Названия громоздкие, поэтому последуемэто хорошее решение для сокращений в natbibЯ привел в порядок свою библиографию.
К сожалению, файл .bst, который я использую, работает не очень хорошо и помещает название организации и аббревиатуру в две разные записи в библиографии. Я используюПотрясающий econ.bst Сиро Такеды. Так что мой вопрос в том, как мне правильно оформить цитаты? В идеале, не создавая собственную ветку файла .bst, но я открыт для использования biblatex, если есть элегантное решение, которое сохранит форматирование. Заранее спасибо!
Вот MWE, который порождает мою проблему:
\documentclass[12pt,letterpaper]{article}
\usepackage[margin=1.5in]{geometry}
\usepackage{natbib}
% Abbreviations in natbib
\usepackage{etoolbox}
\newif\ifabbreviation
\pretocmd{\thebibliography}{\abbreviationfalse}{}{}
\AtBeginDocument{\abbreviationtrue}
\DeclareRobustCommand\acroauthor[2]{%
\ifabbreviation #2\else #1 (\mbox{#2})\fi}
% econ.bst style of choice
\bibliographystyle{aer}
\begin{document}
In Germany, feed-in-tariffs for renewable energy last for 20 years \citep{OECDFIT} while similar Chinese tax cuts last for 6\citep{kpmgwind}.
\bibliography{citations}
\end{document}
где мой файл citations.bib содержит:
@techreport{OECDFIT,
author={{\acroauthor{Organization for Economic Co-Operation and Development}{OECD}}},
institution = {{Organization for Economic Co-Operation and Development}},
year ={2022},
title = {Renewable Energy Feed-in-tariffs}
}
@techreport{kpmgwind2020,
title = {The Power of Nature: Taxation of Wind Power - 2022 A Country Overview},
pages = {27--29},
author = {Nyberg, Per and Thorvaldsen, Trond and Greni, Jan},
institution = {{KPMG Law Advokatfirma}},
year = {2020}
}
Вот что он генерирует, обратите внимание на странное двойное появление «Организации экономического сотрудничества и развития (ОЭСР)».
решение1
Проблема вызвана деталью реализации в natbib. Как вы можете видеть в файле .bbl
, генерируются следующие элементы:
\harvarditem[Nyberg et al.]{Nyberg, Thorvaldsen and Greni}{2020}{kpmgwind2020}
{\bf Nyberg, Per, Trond Thorvaldsen, and Jan Greni}, ``The Power of Nature:
Taxation of Wind Power - 2022 A Country Overview,'' Technical Report, {KPMG
Law Advokatfirma} 2020.
\harvarditem[{\acroauthor{Organization for Economic Co-Operation and
Development}{OECD}}]{{\acroauthor{Organization for Economic Co-Operation and
Development}{OECD}}}{2022}{OECDFIT}
{\bf {\acroauthor{Organization for Economic Co-Operation and
Development}{OECD}}}, ``Renewable Energy Feed-in-tariffs,'' Technical Report,
{Organization for Economic Co-Operation and Development} 2022.
Часть, начинающаяся с, {\bf
представляет собой фактический вывод в документе, а до этого идет команда \harvarditem
, которая ведет учет ключа цитаты, краткого автора, полного автора, года, которые соответствуют файлу .aux
и различным \cite
командам.
Natbib определяет \harvarditem
как обертку вокруг \bibitem
команды по умолчанию. Он проверяет, является ли первый (необязательный) аргумент пустым с помощью \if\relax#1\relax
:
% definition from natbib.sty
\newcommand\harvarditem[4][]{%
\if\relax#1\relax
\bibitem[#2(#3)]{#4}%
\else
\bibitem[#1(#3)#2]{#4}%
\fi
}%
Однако эта проверка \if\relax#1\relax
не работает должным образом, если #1
содержит команду типа \acroauthor
, поскольку эта команда расширяется и при этом #1 (\mbox{#2})
выводится в этой точке.
Как поясняется, например, вКакова точная семантика \detokenize?, безопаснее проверить наличие детокенизированного представления аргумента:
\documentclass[12pt,letterpaper]{article}
\usepackage[margin=1.5in]{geometry}
\usepackage{natbib}
\renewcommand\harvarditem[4][]{%
\if\relax\detokenize{#1}\relax
\bibitem[#2(#3)]{#4}%
\else
\bibitem[#1(#3)#2]{#4}%
\fi
}%
% Abbreviations in natbib
\usepackage{etoolbox}
\newif\ifabbreviation
\pretocmd{\thebibliography}{\abbreviationfalse}{}{}
\AtBeginDocument{\abbreviationtrue}
\DeclareRobustCommand\acroauthor[2]{%
\ifabbreviation#2\else#1 (\mbox{#2})\fi}
% econ.bst style of choice
\bibliographystyle{aer}
\begin{document}
In Germany, feed-in-tariffs for renewable energy last for 20 years \citep{OECDFIT} while similar Chinese tax cuts last for 6 \citep{kpmgwind2020}.
\bibliography{techrepauth}
\end{document}
Результат: