在 BibLaTeX 中使用本地化的引號、連字符和標點符號,使用 langid 作為條目標題

在 BibLaTeX 中使用本地化的引號、連字符和標點符號,使用 langid 作為條目標題

我得到什麼:

A. 作者,《某些文章標題? »。不管什麼雜誌。

B. Buthor,《一篇文章? »。另一本雜誌。

我想要什麼:

A. 作者,「某個文章標題?」。不管什麼雜誌。

B. Buthor,《一篇文章? »。另一本雜誌。

當然,連字符應該取決於語言。 ;)

autolang=other不是一個選項,因為它會翻譯我不希望受到影響的參考書目的其他部分。

我偶然發現BibLaTeX langid 與 autolang=hyphen 使 csquotes 使用本地化引號舊的行為主要是我想要的(小一點是我不知道它如何處理像上面問號這樣的標點符號)。

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}

答案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} 

在此輸入影像描述

相關內容