
Есть ли способ автоматически заменить стандартные сокращения IEEE автоматически, используя biblatex + biber
(когда каким-то образом предоставлен список сокращений)?
Например:
"Отчет о конференции IEEE Международная конференция по коммуникациям"
должно стать
"Конф. Рек. 1995 IEEE Int. Conf. Commun."
решение1
Мне не очень нравится стиль IEEE, но, думаю, я понял вашу общую установку и попробую.
Я предполагаю, что вы используете biblatex
стиль ieee
, но загрузка IEEEabrv.bib
предоставлена IEEEtran
(хотя я не нашел там «Запись конференции IEEE International Conference on Communication», поэтому я использую здесь запись из IEEEexample.bib
).
Я вижу два способа переопределить стандартные сокращения IEEE, представленные в IEEEabrv.bib
. Первый — создать второй файл строк сокращений и загрузить егопосле IEEEabrv.bib
. Второй способ — использовать biblatex
's \DeclareSourcemap
для изменения данных записи.
Первый вариант будет выглядеть так:
\documentclass{article}
\usepackage[style = ieee]{biblatex}
\usepackage{filecontents}
\begin{filecontents*}{\jobname.bib}
@article{IEEEexample:article_typical,
author = "S. Zhang and C. Zhu and J. K. O. Sin and P. K. T. Mok",
title = "A Novel Ultrathin Elevated Channel Low-temperature
Poly-{Si} {TFT}",
journal = IEEE_J_EDL,
volume = "20",
month = nov,
year = "1999",
pages = "569-571"
}
\end{filecontents*}
\addbibresource{IEEEabrv.bib}
\addbibresource{myIEEEabrv.bib}
\addbibresource{\jobname.bib}
\begin{document}
\nocite{*}
\printbibliography
\end{document}
Где myIEEEabrv.bib
содержит переопределения сокращенных строк, которые вы хотите. В этом случае, что-то вроде:
@STRING{IEEE_J_EDL = "{IEEE} Elec. Dev. Lett."}
(Строка, определенная в IEEEabrv.bib
— {IEEE} Electron Device Lett.
). Обратите внимание, что она должна быть загружена после IEEEabrv.bib
.
Если я неправильно понял ваш вопрос, и вы на самом деле хотите предоставить некоторые сокращенные названия журналов, этот метод также дает вам разумный подход. Вы можете создать файл abbrev.bib
, определить нужные вам строки и добавить его с помощью \addbibresource
. Затем в ваших ссылках.bib
вы используете строкуимя(то есть без скобок, как в примере выше) в поле journaltitle
/ journal
. Тогда вы могли бы иметь:
@string{IEEEIntConfCom = "Conf. Rec. 1995 {IEEE} Int. Conf. Commun."}
и затем вы бы использовали в своем bibfile:
journaltitle = IEEEIntConfCom,
Обычно этот подход подразумевает также наличие второго файла, в котором определены полные строки, скажем, full.bib
. В нем вы бы имели:
@string{IEEEIntConfCom = "Conference Record {IEEE} International Conference on Communication"}
С его помощью все, что вам нужно сделать для перехода от сокращенных названий журналов к полным, — это заменить их \addbibresource{abbrev.bib}
на \addbibresource{full.bib}
в вашем основном .tex
файле.
Второй подход, как уже упоминалось, заключается в использовании \DeclareSourcemap
:
\documentclass{article}
\usepackage[style = ieee]{biblatex}
\usepackage{filecontents}
\begin{filecontents*}{\jobname.bib}
@article{IEEEexample:article_typical,
author = "S. Zhang and C. Zhu and J. K. O. Sin and P. K. T. Mok",
title = "A Novel Ultrathin Elevated Channel Low-temperature
Poly-{Si} {TFT}",
journal = IEEE_J_EDL,
volume = "20",
month = nov,
year = "1999",
pages = "569-571"
}
\end{filecontents*}
\addbibresource{IEEEabrv.bib}
\addbibresource{\jobname.bib}
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map{
\step[fieldsource=journal,
match={{IEEE} Electron Device Lett.},
replace={{IEEE} Elec. Dev. Lett.}]
}
}
}
\begin{document}
\nocite{*}
\printbibliography
\end{document}
Обратите внимание, что match
is обозначает стандартную сокращенную форму, определенную в IEEEabrv.bib
, а не имя строки.
Obs.: У меня были некоторые проблемы с IEEEabrv.bib
кодировкой . Поэтому, чтобы это сработало, мне нужно было сохранить его в UTF-8 для запуска. Но я полагаю, что, раз вы, похоже, уже используете эти сокращения, вы как-то с этим справились.