Use aspas localizadas, hifenização e pontuação no BibLaTeX usando langid para o título das entradas

Use aspas localizadas, hifenização e pontuação no BibLaTeX usando langid para o título das entradas

O que eu ganho:

A. Autor, «Algum título de artigo? ». Seja qual for o jornal.

B. Buthor, «Um artigo? ». Outro diário.

O que eu gostaria:

A. Autor, “Algum título de artigo?”. Seja qual for o jornal.

B. Buthor, «Um artigo? ». Outro diário.

E a hifenização deve depender do idioma, é claro. ;)

autolang=othernão é uma opção, pois traduziria algumas outras partes da bibliografia que não quero que sejam afetadas.

eu tropeceiBibLaTeX langid com autolang=hyphen faz csquotes usar aspas localizadase o comportamento antigo é principalmente o que eu quero (com a pequena questão de que não sei como ele se comportou com a pontuação como os pontos de interrogação acima).

MNWE:

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

Responder1

Você pode tentar o seguinte.

Uma observação sobre os sinais de pontuação. Existem dois tipos no seu exemplo:

  • Sinais de pontuação em campos, como por exemplo o ponto de interrogação no título: {Some article title?},

  • Sinais de pontuação criados por macros do biblatex, por exemplo, os dois pontos após o In:.

O primeiro tipo é difícil de se adaptar à linguagem com pdflatex porque os catcodes já estão congelados. Com lualatex funciona.

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

Saída com lualatex:

insira a descrição da imagem aqui

Saída com pdflatex

insira a descrição da imagem aqui

Responder2

Usar autolang=other(e carregar a T1codificação da fonte) faz o trabalho:

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

insira a descrição da imagem aqui

informação relacionada