%20na%20bibliografia%20(erro%20com%20%5CDefineBibliographyStrings%7Bidioma%7D%20e%20%5Ciffieldequalstr%7Bhifeniza%C3%A7%C3%A3o%7D%20quebrada).png)
Estou tentando conseguir um idioma dependente (personalizado) text
na bibliografia com pdflatex (biber).
Encontrei pelo menos três abordagens para fazer isso por meio de:
\DefineBibliographyStrings{language}{bibfield={formatting}}
\NewBibliographyString
- crie um novo babador e use-o como emeste exemplo\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 tuples
que 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
Responder1
Observe primeiro que você deve fornecer valores não numéricos no .bib
arquivo entre chaves (ou aspas). hyphenation = russian
está 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 series
ainda 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 \bibsring
no 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}
Observe que a terceira abordagem sai do controle rapidamente se você quiser adicionar um terceiro idioma. A primeira abordagem simplesmente não funciona porque biblatex
separa 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.