Настройка драйвера библиографии с помощью Biblatex

Настройка драйвера библиографии с помощью Biblatex

Я хочу переопределить драйвер библиографии для определенного типа записи (bookinbook), чтобы он содержал имя переводчика, причем переводчик может отличаться для разных работ в родительской книге (не унаследованной от родительской записи). Поэтому я хочу, чтобы моя запись выглядела примерно так:

Платон:Менон. Уберс. фон Фридрих Шлейермахер. В:ВеркеТр. II, С. 509--599.

--Протагор. Уберс. фон Дитрих Курц. В:ВеркеТр. II, С. 83--217.

Я добился всего, кроме части "Übers. von" (ред.) с помощью следующего драйвера:

\DeclareBibliographyDriver{bookinbook}{%
    \usebibmacro{bibindex}%
    \usebibmacro{begentry}%
    \usebibmacro{author/translator+others}%
    \setunit{\labelnamepunct}\newblock
    \usebibmacro{title}%
    \newunit
    \printlist{language}%
    \newunit\newblock
    \usebibmacro{byauthor}%
    \newunit\newblock
    \usebibmacro{in:}%
    \iffieldundef{crossref}
    {\usebibmacro{crossref:full}}
    {\usebibmacro{crossref:labelbookinbook}}
    \newunit\newblock
    \usebibmacro{chapter+pages}%
    \iffieldundef{crossref}
    {\usebibmacro{crossref:extrainfo}}
    {}
    \setunit{\bibpagerefpunct}\newblock
    \usebibmacro{pageref}%
    \usebibmacro{finentry}}

в сочетании с этим \newbibmacro:

\newbibmacro{crossref:labelbookinbook}{%
    \entrydata{\strfield{crossref}}
    {\printfield[title]{labeltitle}}
    \setunit*{\addspace}
    \printfield{volume}}

Но я просто не могу понять, что и куда вставить, чтобы получить "переведено" сразу после заголовка. Так что любая помощь будет очень кстати!

решение1

Добавьте макрос \usebibmacro{bytranslator+others}после \usebibmacro{byauthor}.

\DeclareBibliographyDriver{bookinbook}{%
    \usebibmacro{bibindex}%
    \usebibmacro{begentry}%
    \usebibmacro{author/translator+others}%
    \setunit{\labelnamepunct}\newblock
    \usebibmacro{title}%
    \newunit
    \printlist{language}%
    \newunit\newblock
    \usebibmacro{byauthor}%
    \newunit\newblock
    \usebibmacro{bytranslator+others}%
    \newunit\newblock
    \usebibmacro{in:}%
    \iffieldundef{crossref}
      {\usebibmacro{crossref:full}}
      {\usebibmacro{crossref:labelbookinbook}}%
    \newunit\newblock
    \usebibmacro{chapter+pages}%
    \iffieldundef{crossref}
      {\usebibmacro{crossref:extrainfo}}
      {}%
    \setunit{\bibpagerefpunct}\newblock
    \usebibmacro{pageref}%
    \usebibmacro{finentry}}

Обратите внимание, что технически для biblatex, translatorдля @in...записей (а также @bookinbook) относится к переводчику всей работы (родительской @book), поэтому то, что мы здесь делаем, является некоторой натяжкой.

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