%20Text%20im%20Literaturverzeichnis%20(Fehler%20bei%20%5CDefineBibliographyStrings%7Blanguage%7D%20und%20fehlerhafter%20%5Ciffieldequalstr%7BSilbentrennung%7D).png)
Ich versuche, mit pdflatex (biber) eine sprachabhängige (angepasste) text
Bibliographie zu erhalten.
Ich habe mindestens drei Ansätze gefunden, um dies zu tun:
\DefineBibliographyStrings{language}{bibfield={formatting}}
\NewBibliographyString
- neue Bibstrings erstellen und wie indieses Beispiel\iffieldequalstr{hyphenation}{language}{true}{false}
Jedoch,erste Ansatz
\DefineBibliographyStrings{english}{series = {Ser\adddot\addcolon\space{#1}\isdot}}
\DefineBibliographyStrings{russian}{series = {Сер\adddot\addcolon\space{#1}\isdot}}
führt zu dem Fehler:
Paket-Keyval-Fehler: Serie nicht definiert. }
Zweiter Ansatzist schwierig umzusetzen, wenn viele text tuples
Anpassungen erforderlich sind.
Dritter Ansatz
\DeclareFieldFormat{series}{\iffieldequalstr{hyphenation}{russian}{Сер}{Ser}\adddot\addcolon\space{#1}\isdot} %
funktioniert nicht mit sprachorientierten Feldern wie hyphenation
.
Bitte helfen Sie mir mit der Antwort, die die Probleme mit den Ansätzen 1 und 3 löst.
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}
Gewünschte Ausgabe
Antwort1
Beachten Sie zunächst, dass Sie nicht numerische Werte in der .bib
Datei mit geschweiften Klammern (oder Anführungszeichen) angeben müssen. hyphenation = russian
ist falsch und erzeugt die Warnung WARN - BibTeX subsystem: <filename>, line 29, warning: undefined macro "russian"
. Es sollte sein
hyphenation = {russian},
Das \iffieldequalstr{hyphenation}{russian}
funktioniert nicht, weil hyphenation
es sich um einen veralteten Alias handelt. Intern heißt das Feld jetzt langid
. Daher
\iffieldequalstr{langid}{russian}
funktioniert.
Ich würde jedoch einen Ansatz mit Bibliographie-Strings bevorzugen. Da der String series
noch nicht definiert ist, müssen Sie ihn zuerst mit deklarieren \NewBibliographyString{series}
. Dann können Sie seine Definition in angeben \DefineBibliographyStrings
. Beachten Sie, dass diese Definition nur den übersetzten String enthalten sollte, keine zusätzliche Interpunktion und keine andere makroähnliche Formatierung. Schließlich können Sie den String mit \bibsring
im Feldformat verwenden. Dies ist im Grunde der zweite Ansatz vonErstellen neuer Befehle innerhalb der Bibdatei.
\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}
Beachten Sie, dass der dritte Ansatz schnell außer Kontrolle gerät, wenn Sie eine dritte Sprache hinzufügen möchten. Der erste Ansatz funktioniert einfach nicht, da biblatex
Lokalisierung (Bibstrings) und allgemeine Formatierung (Feldformate usw.) getrennt werden. Der zweite Ansatz ist jedoch nicht viel aufwändiger als der erste. Tatsächlich vermeiden Sie in diesem Beispiel sogar Code-Duplikation.