Группировка книг и серий в biblatex-chicago

Группировка книг и серий в biblatex-chicago

Я использую 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}

введите описание изображения здесь

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