Текст в библиографии, зависящий от языка (настраиваемый) (ошибка с \DefineBibliographyStrings{language} и нарушенная расстановка переносов \iffieldequalstr{hyphenation})

Текст в библиографии, зависящий от языка (настраиваемый) (ошибка с \DefineBibliographyStrings{language} и нарушенная расстановка переносов \iffieldequalstr{hyphenation})

Я пытаюсь получить зависящую от языка (настроенную) textбиблиографию с помощью pdflatex (biber).

Я нашел как минимум 3 подхода, как это сделать:

  1. \DefineBibliographyStrings{language}{bibfield={formatting}}
  2. \NewBibliographyString- создайте новую bibstring и используйте ее как вэтот пример
  3. \iffieldequalstr{hyphenation}{language}{true}{false}

Однако,первый подход

\DefineBibliographyStrings{english}{series = {Ser\adddot\addcolon\space{#1}\isdot}}

\DefineBibliographyStrings{russian}{series = {Сер\adddot\addcolon\space{#1}\isdot}}

приводит к ошибке:

Ошибка пакета keyval: серия не определена. }

Второй подходсложно реализовать, если вам нужно много чего text tuplesнастроить.

Третий подход

\DeclareFieldFormat{series}{\iffieldequalstr{hyphenation}{russian}{Сер}{Ser}\adddot\addcolon\space{#1}\isdot} % 

не работает ни с одним языково-ориентированным полем, например hyphenation.

Помогите, пожалуйста, с ответом, решающим задачи с 1 и 3 подходами.

МВЭ

\documentclass{memoir}

\usepackage{filecontents}

\begin{filecontents}{\jobname.bib}
@INBOOK{Inbook,
  author       = {Peter Eston},
  title        = {The title of the work},
  booktitle    = {Book title},
  chapter      = {8},
  pages        = {201-213},
  publisher    = {The name of the publisher},
  year         = {1993},
  volume       = {4},
  series       = {5},
  address      = {The address of the publisher},
  edition      = {3},
  month        = {7},
  hyphenation     = {english}
}

@Book{avtonomova:fya,
  author = {Н. С. Автономова},
  title = {Философский язык Жака Деррида},
  year = 2011,
  publisher = {Российская политическая энциклопедия (РОССПЭН)},
  location = {М.},
  isbn = {978-5-8243-1618-6},
  series = {Российские Пропилеи},
  pagetotal = 510,
  hyphenation =russian,
}
\end{filecontents}

\usepackage[T2A,T1]{fontenc}
\usepackage[utf8]{inputenc}[2014/04/30]         %
\usepackage[english, russian]{babel}[2014/03/24]% 


\usepackage[%
backend=biber,
bibencoding=utf8,
style=gost-numeric,
babel=other, 
defernumbers=true,
sortcites=true,
doi=true,
]{biblatex}[2016/09/17]
%add Ser.: to series format

%%% First approach
%\DefineBibliographyStrings{english}{series = {Ser\adddot\addcolon\space{#1}\isdot}}
%
%\DefineBibliographyStrings{russian}{series = {Сер\adddot\addcolon\space{#1}\isdot}}


%%% Third approach
\DeclareFieldFormat{series}{\iffieldequalstr{hyphenation}{russian}{Сер}{Ser}\adddot\addcolon\space{#1}\isdot} % do not work

%% Work perfectly
%\DeclareFieldFormat{series}{\iffieldequalstr{pagetotal}{510}{Сер}{Ser}\adddot\addcolon\space{#1}\isdot} %
\addbibresource{\jobname.bib}

\begin{document}

\cite{avtonomova:fya,Inbook}

\printbibliography

\end{document}

Желаемый результат

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

решение1

Обратите внимание, что в файле необходимо указывать нечисловые значения, .bibзаключенные в фигурные скобки (или кавычки). hyphenation = russianЭто неправильно и приводит к предупреждению WARN - BibTeX subsystem: <filename>, line 29, warning: undefined macro "russian". Это должно быть

hyphenation = {russian},

\iffieldequalstr{hyphenation}{russian}Не работает, потому что это hyphenationустаревший псевдоним. Внутри поле теперь называется langid. Следовательно,

\iffieldequalstr{langid}{russian}

работает.

Однако я бы предпочел подход со строками библиографии. Поскольку строка seriesеще не определена, вам нужно сначала объявить ее с помощью \NewBibliographyString{series}. Затем вы можете дать ее определение в \DefineBibliographyStrings. Обратите внимание, что это определение должно содержать только переведенную строку, без дополнительной пунктуации и другого форматирования, похожего на макросы. Наконец, вы можете использовать строку с\bibsring в формате поля. Это по сути второй подход изСоздание новых команд внутри bibfile.

\documentclass{memoir}
\usepackage[T2A,T1]{fontenc}
\usepackage[utf8]{inputenc}[2014/04/30]         %
\usepackage[english, russian]{babel}[2014/03/24]%

\usepackage[%
  backend=biber,
  style=gost-numeric,
  babel=other,
  defernumbers=true,
  sortcites=true,
  doi=true,
]{biblatex}[2016/09/17]

\NewBibliographyString{series}
\DefineBibliographyStrings{english}{series = {Ser\adddot}}
\DefineBibliographyStrings{russian}{series = {Сер\adddot}}

\DeclareFieldFormat{series}{\bibstring{series}\addcolon\space{#1}\isdot}

\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@INBOOK{Inbook,
  author       = {Peter Eston},
  title        = {The title of the work},
  booktitle    = {Book title},
  chapter      = {8},
  pages        = {201-213},
  publisher    = {The name of the publisher},
  year         = {1993},
  volume       = {4},
  series       = {5},
  address      = {The address of the publisher},
  edition      = {3},
  month        = {7},
  hyphenation  = {english}
}
@Book{avtonomova:fya,
  author      = {Н. С. Автономова},
  title       = {Философский язык Жака Деррида},
  year        = 2011,
  publisher   = {Российская политическая энциклопедия (РОССПЭН)},
  location    = {М.},
  isbn        = {978-5-8243-1618-6},
  series      = {Российские Пропилеи},
  pagetotal   = 510,
  hyphenation = {russian},
}
\end{filecontents}
\addbibresource{\jobname.bib}

\begin{document}
\cite{avtonomova:fya,Inbook}

\printbibliography
\end{document}

«Сер.: 5» на английском языке и «Сер.: Российские Пропилеи» на русском языке.

Обратите внимание, что третий подход быстро выходит из-под контроля, если вы хотите добавить третий язык. Первый подход просто не работает, поскольку biblatexразделяет локализацию (bibstrings) и общее форматирование (форматы полей и т. д.). Но второй подход не намного сложнее первого. Фактически, вы даже избегаете дублирования кода в этом примере.

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