Переводить места в библиографии в зависимости от языка документа/Babel

Переводить места в библиографии в зависимости от языка документа/Babel

Я часто пишу тексты на немецком и английском языках и использую JabRef для организации ссылок. Ссылаясь на множество конференционных докладов, часто довольно раздражает необходимость постоянно менять язык местоположений в соответствии с языком документа. Поэтому я задумался, могу ли я предоставить biblatex своего рода словарь, чтобы мне не приходилось каждый раз адаптировать свою базу данных.

Например, в преамбуле я хотел бы определить:

Munich = München
Germany = Deutschland

в случае, если документ или язык Babel — ngerman.

Можно ли это сделать?


МВЭ

\documentclass[ngerman]{article}

\usepackage[ngerman]{babel}

\begin{filecontents}{bla.bib}
    @inproceedings{Orwell1984,
        author  = "George Orwell",
        title   = "1984",
        year    = "1948",
        booktitle = "Books about big brothers",
        location = "Munich, Germany",
    }
\end{filecontents}

\RequirePackage[backend=biber,style=ieee-alphabetic]{biblatex}

\addbibresource{bla.bib}
\begin{document}
    \cite{Orwell1984}. \\
    \printbibliography 
\end{document}

решение1

Вы можете использовать biblatexbibstrings для перевода определенных фраз. Вопрос в том, какой интерфейс будет хорошим. Если вы хотите иметь возможность объединять произвольные термины в одном поле, вам придется сделать что-то вроде следующего (что кажется немного неуклюжим).

\documentclass[ngerman]{article}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[backend=biber,style=ieee-alphabetic]{biblatex}

\NewBibliographyString{munich,germany}
\DefineBibliographyStrings{german}{
  munich  = {München},
  germany = {Deutschland},
}

\begin{filecontents}{\jobname.bib}
@inproceedings{Orwell1984,
  author    = {George Orwell},
  title     = {1984},
  year      = {1948},
  booktitle = {Books about big brothers},
  location  = {\bibstring{munich}, \bibstring{germany}},
}
\end{filecontents}
\addbibresource{\jobname.bib}

\begin{document}
  \autocite{Orwell1984}
  \printbibliography 
\end{document}

Дж. Оруэлл, «1984», в книге «Книги о старших братьях», Мюнхен, Германия, 1948.


Если вас устраивает использование только одной строки на поле, вы можете сделать все немного лучше.

\documentclass[ngerman]{article}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[backend=biber,style=ieee-alphabetic]{biblatex}

\NewBibliographyString{de-munich}
\DefineBibliographyStrings{german}{
  de-munich  = {München},
}
\DefineBibliographyStrings{english}{
  de-munich  = {Munich, Germany},
}

\DeclareListFormat{location}{%
  \usebibmacro{list:delim}{#1}%
  \ifbibstring{#1}{\bibstring{#1}}{#1}\isdot
  \usebibmacro{list:andothers}}

\begin{filecontents}{\jobname.bib}
@inproceedings{Orwell1984,
  author    = {George Orwell},
  title     = {1984},
  year      = {1948},
  booktitle = {Books about big brothers},
  location  = {de-munich},
}
\end{filecontents}
\addbibresource{\jobname.bib}

\begin{document}
  \autocite{Orwell1984}
  \printbibliography 
\end{document}

Дж. Оруэлл, «1984», в книге «Книги о старших братьях», Мюнхен, 1948.


Более BibTeX-ное решение использует @strings. Вы можете определить строки для каждого местоположения в разных .bibфайлах (по одному для каждого языка), а затем выбрать .bibфайл для нужного вам языка в документе.

\documentclass[ngerman]{article}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[backend=biber,style=ieee-alphabetic]{biblatex}


\begin{filecontents}{locationstrings-german.bib}
@string{de:munich = "München"}
\end{filecontents}
\begin{filecontents}{locationstrings-english.bib}
@string{de:munich = "Munich, Germany"}
\end{filecontents}
% select the bib file for the language you want
\addbibresource{locationstrings-german.bib}

\begin{filecontents}{\jobname.bib}
@inproceedings{Orwell1984,
  author    = {George Orwell},
  title     = {1984},
  year      = {1948},
  booktitle = {Books about big brothers},
  location  = de:munich,
}
\end{filecontents}
\addbibresource{\jobname.bib}


\begin{document}
  \autocite{Orwell1984}
  \printbibliography 
\end{document}

Дж. Оруэлл, «1984», в книге «Книги о старших братьях», Мюнхен, 1948.


biblatexТакже может быть интересна пока еще экспериментальная многоскриптовая версия :https://github.com/plk/biblatex/issues/416

решение2

\documentclass[ngerman]{article}

\usepackage[ngerman]{babel}

\begin{filecontents}{german-strings.bib}
    @string{muenchen={München}}
    @string{germany={Deutschland}}
\end{filecontents}


\begin{filecontents}[overwrite]{bla.bib}
    @inproceedings{Orwell1984,
        author  = "George Orwell",
        title   = "1984",
        year    = "1948",
        booktitle = "Books about big brothers",
        location = muenchen # ", " # germany
    }
\end{filecontents}

\RequirePackage[backend=biber,style=ieee-alphabetic]{biblatex}

\addbibresource{german-strings.bib}
\addbibresource{bla.bib}
\begin{document}
    \cite{Orwell1984}. \\
    \printbibliography
\end{document}

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

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