Используйте локализованные кавычки, переносы и пунктуацию в BibLaTeX, используя langid для заголовков записей

Используйте локализованные кавычки, переносы и пунктуацию в BibLaTeX, используя langid для заголовков записей

Что я получаю:

A. Автор, «Какое-то название статьи ?». Какой-то журнал.

Б. Бутор, «Un article ?». Другой журнал.

Что бы я хотел:

А. Автор, «Какое-то название статьи?». Какой-то журнал.

Б. Бутор, «Un article ?». Другой журнал.

И расстановка переносов, конечно же, должна зависеть от языка. ;)

autolang=otherэто не вариант, так как это приведет к переводу некоторых других частей библиографии, которые я не хочу затрагивать.

Я наткнулся наBibLaTeX langid с autolang=hyphen заставляет csquotes использовать локализованные кавычкии старое поведение в основном соответствует тому, что мне нужно (с небольшим замечанием, что я не знаю, как оно вело себя в отношении знаков препинания, таких как вопросительные знаки выше).

МНВЭ:

\documentclass{scrartcl}

\usepackage[british,french]{babel}
\usepackage[autostyle=true]{csquotes}
\usepackage[autolang=hyphen]{biblatex}
\usepackage{filecontents}

\begin{filecontents*}{\jobname.bib}
@article{eng,
  author = {Author, A.},
  title = {Some article title?},
  journal = {Whatever Journal},
  year = {2019},
  langid = {british},
}
@article{fra,
  author = {Buthor, B.},
  title = {Un article ?},
  journal = {Another Journal},
  year = {2019},
  langid = {french},
}
\end{filecontents*}
\addbibresource{\jobname.bib}

\begin{document}
\nocite{*}
\printbibliography
\end{document}

решение1

Вы можете попробовать следующее.

Замечание по поводу знаков препинания. В вашем примере их два типа:

  • Знаки препинания в полях, например, вопросительный знак в заголовке: {Some article title?},

  • Знаки препинания, созданные макросами из biblatex, например, двоеточие после In:.

Первый тип трудно адаптировать к языку с pdflatex, так как catcodes уже заморожены. С lualatex это работает.

\documentclass{scrartcl}
\usepackage{ifluatex}
\ifluatex\else
 \usepackage[T1]{fontenc} %with pdflatex
\fi

\usepackage[british,french]{babel}
\usepackage[autostyle=true]{csquotes}
\usepackage[autolang=hyphen]{biblatex}
\usepackage{filecontents}

\begin{filecontents*}{\jobname.bib}
@article{eng,
  author = {Author, A.},
  title = {Some article title?},
  journal = {Whatever Journal},
  year = {2019},
  langid = {british},
  editor={D. Editor}
}
@article{fra,
  author = {Buthor, B.},
  title = {Un article?},
  journal = {Another Journal},
  year = {2019},
  langid = {french},
  editor={D. Editor}
}

\end{filecontents*}
\addbibresource{\jobname.bib}

\makeatletter
\def\blx@hook@initlang{%
 \csq@reset=0 \csq@setstyle{\abx@field@langid}%
 %optional for the colon after "In":
 \ifdefstring{\abx@field@langid}{french}{}
  {\def\FDP@colonspace{}%
   \def\FDP@thinspace{}}%
 }
\makeatletter
\begin{document}

\nocite{*}
\printbibliography
\end{document}

Вывод с lualatex:

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

Вывод с помощью pdflatex

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

решение2

Использование autolang=other(и загрузка T1кодировки шрифта) решает эту задачу:

\documentclass{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

\usepackage[british,french]{babel}
\usepackage[autostyle=true]{csquotes}
\usepackage[autolang=other]{biblatex}
\usepackage{filecontents}

\begin{filecontents*}{\jobname.bib}
@article{eng,
  author = {Author, A.},
  title = {Some article title?},
  journal = {Whatever Journal},
  year = {2019},
  langid = {british},
}
@article{fra,
  author = {Buthor, B.},
  title = {Un article ?},
  journal = {Another Journal},
  year = {2019},
  langid = {french},
}
\end{filecontents*}
\addbibresource{\jobname.bib}

\begin{document}

\nocite{*}
\printbibliography

\end{document} 

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

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