Объединить два отдельных поля biblatex в biblatex-ext

Объединить два отдельных поля biblatex в biblatex-ext

Я хотел бы связать год и страницы -элемента, incollectionчтобы в библиографии они отображались как единое целое. В другом случае (журнал + номер страницы в -элементе article) я написал новый bibmacroи заменил соответствующую команду в конце драйвера библиографии для article. Однако, используя стиль, предоставленный biblatex-ext, я не уверен, как реализовать эту стратегию. ВДругой вопросчто привело меня к использованиюbiblatex-ext, я получил этот код:

\documentclass[ngerman]{article}
\usepackage{babel}
\usepackage{csquotes}

\usepackage[backend=biber, style=ext-authoryear-ibid, citexref=true]{biblatex}

\usepackage{libertinus}

\begin{filecontents}{\jobname.bib}
@collection{EickerWolf2017,
  title    = {Ungleichheit in Deutschland – ein »gehyptes Problem«?},
  editor   = {Eicker-Wolf, Kai and Truger, Achim},
  location = {Marburg},
  year     = {2017},
}
@incollection{Schreiner2017,
  author   = {Schreiner, Patrick},
  title    = {Löhne und Verteilung},
  crossref = {EickerWolf2017},
  pages    = {47--78},
}
@incollection{Bosch2017,
  author   = {Bosch, Gerhard and Kalina, Thorsten},
  title    = {Die deutsche Mittelschicht aus der Arbeitsmarktperspektive},
  crossref = {EickerWolf2017},
  pages    = {111--142},
}
\end{filecontents}
\addbibresource{\jobname.bib}

\begin{document}
\cite{Bosch2017,Schreiner2017}
\printbibliography
\end{document}

Для краткого цитирования родительской записи после указания имен редакторов я хотел бы указать год и страницы в скобках, разделив их двоеточием и пробелом [2017, с. 17–46 → (2017: 17–46)]. Я бы использовал что-то вроде этого:

\newbibmacro*{year+pages}{%
  \space\printtext[parens]{\printfield{year}: \printfield{pages}}%
  \newunit}

После просмотра кода biblatex-extи получения нескольких указаний от moewe, я просто не понимаю, где я должен его разместить, поскольку задействованы перекрестные ссылки и различные переключатели. Может ли кто-нибудь дать мне подсказку?

решение1

Вы можете изменить код таким biblatex-extобразом, чтобы ссылки на страницы xrefciteпечатались непосредственно в примечании команды цитирования и чтобы функция использовала \textcite.

Сначала нам нужно удалить bibmacro, который печатает страницы из соответствующих bibdrivers. Затем мы изменим bibmacro crossciteтак, чтобы он передавал pagesполе в команду цитирования.

\documentclass[ngerman]{article}
\usepackage{babel}
\usepackage{csquotes}

\usepackage[backend=biber, style=ext-authoryear-ibid, citexref=true]{biblatex}

\usepackage{libertinus}

\DeclareDelimFormat{postnotedelim}{\addcolon\space}
\DeclareFieldFormat{postnote}{\mknormrange{#1}}

\usepackage{xpatch}
\newcommand*{\removechapterpages}[1]{%
  \xpatchbibdriver{#1}
    {\newunit\newblock
     \usebibmacro{chapter+pages}}
    {}
    {}{}}
\removechapterpages{inbook}
\removechapterpages{incollection}
\removechapterpages{inproceedings}

\renewbibmacro*{crosscite}[1]{%
  \iftoggle{bbx:citexref}
    {\iffieldundef{crossref}
       {\iffieldundef{xref}
          {\usebibmacro{#1}%
           \newunit\newblock
           \usebibmacro{chapter+pages}}
          {\usebibmacro{xrefcitewithpages}{xref}}}
       {\usebibmacro{xrefcitewithpages}{crossref}}}
    {\usebibmacro{#1}%
     \newunit\newblock
     \usebibmacro{chapter+pages}}}

\makeatletter
\newbibmacro{xrefcitewithpages}[1]{%
  \printtext{%
    \iffieldundef{pages}
      {\bbx@xrefcite{\thefield{#1}}}
      {\expandafter\bbx@xrefcite\expandafter[\abx@field@pages]{\thefield{#1}}}}%
}

\renewcommand*{\bbx@xrefcite}{%
  \AtNextCite{%
    \boolfalse{citetracker}%
    \boolfalse{pagetracker}%
    \boolfalse{backtracker}}%
  \textcite}
\makeatother

\begin{filecontents}{\jobname.bib}
@collection{EickerWolf2017,
  title    = {Ungleichheit in Deutschland – ein »gehyptes Problem«?},
  editor   = {Eicker-Wolf, Kai and Truger, Achim},
  location = {Marburg},
  year     = {2017},
}
@incollection{Schreiner2017,
  author   = {Schreiner, Patrick},
  title    = {Löhne und Verteilung},
  crossref = {EickerWolf2017},
  pages    = {47--78},
}
@incollection{Bosch2017,
  author   = {Bosch, Gerhard and Kalina, Thorsten},
  title    = {Die deutsche Mittelschicht aus der Arbeitsmarktperspektive},
  crossref = {EickerWolf2017},
  pages    = {111--142},
}
\end{filecontents}
\addbibresource{\jobname.bib}

\begin{document}
\cite{Bosch2017,Schreiner2017}
\printbibliography
\end{document}

Бош, Герхард и Торстен Калина (2017). «Немецкие среднеазиатские деятели с точки зрения трудового рынка». В: Эйкер-Вольф и Тругер (2017: 111–142).

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