Я использую biblatex-chicago для своих ссылок. Мой файл bib включает много ссылок на документы конференций, которые я импортировал из цифровой библиотеки ACM. Сокращения этих конференций часто более известны, чем полные названия самих конференций. Поэтому для inproceedings
записей я включил сокращение, используя series
поле. Я хотел бы сгруппировать поля booktitle
и series
вместе.
\documentclass{article}
\usepackage[
authordate,
backend=biber,
]{biblatex-chicago} % biblatex setup
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@inproceedings{paper2012,
author = {Smith, John},
date = {2012},
title = {Paper Title},
booktitle = {Proceedings of the 2012 ACM annual conference on Human Factors in Computing Systems},
series = {CHI '12},
pages = {937-946},
location = {New York, NY, USA},
publisher = {{ACM}},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\nocite{*}
\begin{document}
\printbibliography
\end{document}
В этом примере на данный момент выводится следующее:
Смит, Джон. 2012. «Название статьи» вТруды ежегодной конференции ACM 2012 года по человеческому фактору в вычислительных системах, 937–946. ЧИ '12. Нью-Йорк, штат Нью-Йорк, США: ACM.
Вместо этого я хотел бы изменить вывод inproceedings
записей так, чтобы поля booktitle
и series
были сгруппированы вместе следующим образом:
Смит, Джон. 2012. «Название статьи» вТруды ежегодной конференции ACM 2012 года по человеческому фактору в вычислительных системах — CHI '12, 937–46. Нью-Йорк, штат Нью-Йорк, США: ACM.
Важное предостережение: не все inproceedings
записи имеют series
поле.
возможно ли это с biblatex-chicago?
решение1
Другие решения, предложенные для использования booktitleaddon
вместо series
. Лично я не думаю, что series
это правильное поле для использования. Рассмотрим, например, серию Springer Lecture Notes in Computer Science, публикацию трудов конференции по компьютерным наукам. Каждая книга имеет свое название (которое часто отличается от названия конференции), но труды известны по названию конференции или чаще по их аббревиатуре. И затем принято включать ссылку на серию LNCS и номер в серии.
Biblatex, при использовании с biber
, предлагает возможность p создать новое поле. Я предлагаю добавить acronym
поле.
Это можно сделать с помощью
\begin{filecontents}{biblatex-dm.cfg}
\DeclareDatamodelFields[type=field,datatype=literal,skipout=false]{acronym}
\end{filecontents}
Создает локальный файл конфигурации biblatex.
Затем нам нужно дать инструкции о том, как набрать новое поле (курсивом in proceedings
).
\DeclareFieldFormat[inproceedings]{acronym}{\textit{#1}}
Последний шаг — изменить соответствующий bibmacro
, в данном случае btitle+bstitle
.
\newbibmacro*{btitle+bstitle}{%
\iffieldundef{booktitle}
{}
{\ifthenelse{\ifentrytype{audio}\OR\ifentrytype{music}\OR%
\ifentrytype{video}}%
{}%
{\usebibmacro{cms-in:}}%
\printtext{%
\printfield{booktitle}%
\setunit{\addcolon\addspace}%
\printfield[booktitle]{booksubtitle}}%
\setunit{\addspace---\addspace}%
\ifentrytype{inproceedings}
{\printfield{acronym}}
{}%
\newcunit
\printfield{booktitleaddon}%
\setunit*{\addcomma\addspace}}}
Обратите внимание, что мы используем \ifentrytype{inproceedings}
для локализации изменения только для этого типа записи.
Вот полный MWE
\documentclass{article}
\usepackage[
authordate,
backend=biber,
]{biblatex-chicago} % biblatex setup
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@inproceedings{paper201x,
author = {Smith, John},
date = {2012},
title = {Paper Title},
booktitle = {Long Title of the Confererence},
acronym = {CONF'2012},
pages = {937-946},
series = {LNCS},
number = {1234},
location = {Heidelberg},
publisher = {Springer},
}
@inproceedings{paper2012a,
author = {Smith, John},
date = {2012},
title = {Paper Title},
booktitle = {Proceedings of the 2012 ACM annual conference on Human Factors in Computing Systems},
series = {CHI '12},
pages = {937-946},
location = {New York, NY, USA},
publisher = {{ACM}},
}
@inproceedings{paper2012b,
author = {Smith, John},
date = {2012},
title = {Paper Title},
booktitle = {Proceedings of the 2012 ACM annual conference on Human Factors in Computing Systems},
acronym = {CHI '12},
pages = {937-946},
location = {New York, NY, USA},
publisher = {{ACM}},
}
\end{filecontents}
\begin{filecontents}{biblatex-dm.cfg}
\DeclareDatamodelFields[type=field,datatype=literal,skipout=false]{acronym}
\end{filecontents}
\DeclareFieldFormat[inproceedings]{acronym}{\textit{#1}}
\newbibmacro*{btitle+bstitle}{% InIn fix from N&B
\iffieldundef{booktitle}
{}
{\ifthenelse{\ifentrytype{audio}\OR\ifentrytype{music}\OR%
\ifentrytype{video}}%
{}%
{\usebibmacro{cms-in:}}%
\printtext{%
\printfield{booktitle}%
\setunit{\addcolon\addspace}%
\printfield[booktitle]{booksubtitle}}%
\setunit{\addspace---\addspace}%
\ifentrytype{inproceedings}
{\printfield{acronym}}
{}%
\newcunit
\printfield{booktitleaddon}%
\setunit*{\addcomma\addspace}}}
\addbibresource{\jobname.bib}
\nocite{*}
\begin{document}
\printbibliography
\end{document}
решение2
Я бы посоветовал использовать booktitleaddon
поле вместо этого, так как оно уже разработано для печати в нужном вам месте. Однако такие поля обычно довольно «глубоко» в драйвере, поэтому вам нужно быть осторожным, чтобы убедиться, что ваши изменения влияют только на inproceedings
записи, так как он использует те же самые bibmacros, что и другие «in-
Я бы сделал это так: создал новые bibmacros и использовал xpatch
пакет для замены того, что нужно.
\documentclass{article}
\usepackage[
authordate,
backend=biber,
]{biblatex-chicago} % biblatex setup
\usepackage{xpatch}
\usepackage{xcolor}
\newcommand{\diff}[1]{\textcolor{red}{#1}}% <-- just to highlight differences
\usepackage{filecontents}
\begin{filecontents*}{\jobname.bib}% we need more entries...
@inproceedings{paper2012,
author = {Smith, John},
date = {2012},
title = {Paper Title},
booktitle = {Proceedings of the 2012 ACM annual conference on Human Factors in Computing Systems},
booktitleaddon = {\diff{CHI '12}},
number = 33,
series = {\diff{This is the series}},
pages = {937-946},
location = {New York, NY, USA},
publisher = {{ACM}},
}
@inproceedings{paper2013,
author = {Smith, John},
date = {2013},
title = {Different Paper Title},
booktitle = {Proceedings of the 2012 ACM annual conference on Human Factors in Computing Systems},
booksubtitle = {\diff{With a Subtitle}},
booktitleaddon = {CHI '12},
number = 34,
series = {\diff{This is the series}},
pages = {937-946},
location = {New York, NY, USA},
publisher = {{ACM}},
}
@inproceedings{paper2011,
author = {Smith, John},
date = {2011},
title = {Another Paper Title},
booktitle = {Proceedings of the 2012 ACM annual conference on Human Factors in Computing Systems},
booksubtitle = {\diff{With a Subtitle \& No Booktitleaddon}},
pages = {937-946},
location = {New York, NY, USA},
publisher = {{ACM}},
}
@incollection{paper2014,
author = {Doe, Jane},
date = {2014},
title = {Jane's Paper Title},
booktitle = {Collected Essays},
booksubtitle = {\diff{With a Series and a Booktitleaddon}},
series = {CHI '13},
booktitleaddon = {\diff{This is the booktitleaddon (which is preceded by the normal comma)}},
pages = {937-946},
location = {New York, NY, USA},
publisher = {{ACM}},
}
\end{filecontents*}
% we need our own bibmacros
\newbibmacro*{INP-btitle+bstitle}{%
\iffieldundef{booktitle}
{}
{\printtext{%
\printfield{booktitle}%
\setunit{\addcolon\addspace}%
\printfield[booktitle]{booksubtitle}}%
\newcunit
\setunit{\addspace ---\addspace}%
\printfield{booktitleaddon}}}
\newbibmacro*{INP-mtitle+mstitle+vol+part+btitle+bstitle}{%
\usebibmacro{INP-btitle+bstitle}%
\iffieldundef{booktitle}
{\setunit{\addperiod\addspace}}% Fix customc?
{\setunit{\addcomma\addspace}}%
\iffieldundef{maintitle}
{}
{\iffieldundef{volume}
{\printtext{%
\printfield{maintitle}%
\setunit{\addcolon\addspace}%
\printfield[maintitle]{mainsubtitle}}%
\newcunit
\printfield{maintitleaddon}}
{\printfield{volume}%
\printfield{part}%
\setunit{\addspace}
\bibstring{ofseries}%
\setunit{\addspace}
\printtext{%
\printfield{maintitle}%
\setunit{\addcolon\addspace}%
\printfield[maintitle]{mainsubtitle}}%
\newcunit
\printfield{maintitleaddon}}}}
\addbibresource{\jobname.bib}
% this puts the booktitleaddon field in 'italics' only for @inproceedings entry types
\DeclareFieldFormat[inproceedings]{booktitleaddon}{\emph{#1}}
% this replaces a portion of the default inproceedings bibdriver with the macrs we defined above.
\xpatchbibmacro{inproceedings}{mtitle+mstitle+vol+part+btitle+bstitle}{INP-mtitle+mstitle+vol+part+btitle+bstitle}
\nocite{*}
\begin{document}
\printbibliography
\end{document}
... И, пока я писал это, я вижу, что moewe опубликовал другое решение. Часть его можно объединить здесь, чтобы вам не пришлось переписывать свои записи в bib. Однако я все еще думаю, что сопоставление с booktitleaddon
— это лучшее поле для использования по умолчанию, хотя бы потому, что книги с гораздо большей вероятностью будут иметь подзаголовок, чем библиографическую информацию, которую нужно вводить в titleaddon
поле.
решение3
Я думаю, что позиция для краткого заголовка (ваша series
область) — это booksubtitle
, поэтому мы можем сделать следующее:
Мы просто меняем series
поле @inproccedings
на booksubtitle
. Конечно, это работает только в том случае, если нет записи, которая на самом деле имеет надлежащую series
запись, также booksubtitle
должно быть пустым.
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map{
\pertype{inproceedings}
\step[fieldsource=series, fieldtarget=booksubtitle]
}
\map{
\pertype{proceedings}
\step[fieldsource=series, fieldtarget=subtitle]
}
}
}
МВЭ
\documentclass{article}
\usepackage[
authordate,
backend=biber,
]{biblatex-chicago} % biblatex setup
\usepackage{filecontents}
\begin{filecontents*}{\jobname.bib}
@inproceedings{paper2012,
author = {Smith, John},
date = {2012},
title = {Paper Title},
booktitle = {Proceedings of the 2012 ACM annual conference on Human Factors in Computing Systems},
series = {CHI '12},
pages = {937-946},
location = {New York, NY, USA},
publisher = {{ACM}},
}
\end{filecontents*}
\addbibresource{\jobname.bib}
\nocite{*}
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map{
\pertype{inproceedings}
\step[fieldsource=series, fieldtarget=booksubtitle]
}
\map{
\pertype{proceedings}
\step[fieldsource=series, fieldtarget=subtitle]
}
}
}
\begin{document}
\printbibliography
\end{document}