Texto dependente de idioma (personalizado) na bibliografia (erro com \DefineBibliographyStrings{idioma} e \iffieldequalstr{hifenização} quebrada)

Texto dependente de idioma (personalizado) na bibliografia (erro com \DefineBibliographyStrings{idioma} e \iffieldequalstr{hifenização} quebrada)

Estou tentando conseguir um idioma dependente (personalizado) textna bibliografia com pdflatex (biber).

Encontrei pelo menos três abordagens para fazer isso por meio de:

  1. \DefineBibliographyStrings{language}{bibfield={formatting}}
  2. \NewBibliographyString- crie um novo babador e use-o como emeste exemplo
  3. \iffieldequalstr{hyphenation}{language}{true}{false}

No entanto,Primeira abordagem

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

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

leva ao erro:

Erro de chave de pacote: série indefinida. }

Segunda abordagemé difícil de implementar se você tiver muito o text tuplesque personalizar.

Terceira abordagem

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

não funciona com nenhum campo orientado ao idioma como hyphenation.

Por favor, ajude-me com a resposta, que resolve problemas com abordagens 1 e 3.

MWE

\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}

Saída desejada

insira a descrição da imagem aqui

Responder1

Observe primeiro que você deve fornecer valores não numéricos no .bibarquivo entre chaves (ou aspas). hyphenation = russianestá errado e produz o warning WARN - BibTeX subsystem: <filename>, line 29, warning: undefined macro "russian". Deveria ser

hyphenation = {russian},

O \iffieldequalstr{hyphenation}{russian}não funciona porque hyphenationé um alias herdado. Internamente o campo agora é chamado de langid. Por isso,

\iffieldequalstr{langid}{russian}

funciona.

Eu preferiria, no entanto, uma abordagem com cadeias de bibliografia. Como a string seriesainda não está definida, você precisa declará-la primeiro com \NewBibliographyString{series}. Então você pode dar sua definição em \DefineBibliographyStrings. Observe que esta definição deve conter apenas a string traduzida, nenhuma pontuação adicional e nenhuma outra formatação semelhante a macro. Finalmente você pode usar a string with \bibsringno formato do campo. Esta é basicamente a segunda abordagemCriando novos comandos dentro do 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}

"Ser.: 5" em inglês e "Сер.: Российские Пропилеи" em russo.

Observe que a terceira abordagem sai do controle rapidamente se você quiser adicionar um terceiro idioma. A primeira abordagem simplesmente não funciona porque biblatexsepara a localização (bibstrings) e a formatação geral (formatos de campo etc.). Mas a segunda abordagem não é muito mais trabalhosa do que a primeira abordagem. Na verdade você até evita a duplicação de código neste exemplo.

informação relacionada