![多语言参考书目中的标点符号](https://linux22.com/image/258079/%E5%A4%9A%E8%AF%AD%E8%A8%80%E5%8F%82%E8%80%83%E4%B9%A6%E7%9B%AE%E4%B8%AD%E7%9A%84%E6%A0%87%E7%82%B9%E7%AC%A6%E5%8F%B7.png)
在用给定语言编写的文档中(我这里是法语,但这可能没那么重要),我有一个混合了不同语言条目的参考书目(这里是法语、英语和德语)。我希望为每个条目正确设置标点符号(基本上是双标点符号或问号前的引号和空格)。
在这个简单的例子中:
\documentclass{article}
\usepackage[british,french]{babel}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@article{A2012,
author = {Author, A},
title = {A ``paper'': written in english?},
journal = {Journal},
year = {2012},
volume = {2},
pages = {70--76},
}
@article{B2012,
author = {Auteur, B},
title = {Un \og article\fg : \'ecrit en fran\c{c}ais ?},
journal = {Journal},
year = {2012},
volume = {2},
pages = {77--79},
}
\end{filecontents}
\begin{document}
\cite{A2012}, \cite{B2012}
\bibliographystyle{plain}
\bibliography{\jobname}
\end{document}
我得到
babel
在英文条目的冒号和问号前添加了空格。避免这种情况的一种方法是添加序言\NoAutoSpaceBeforeFDP
。但冒号前的空间也会被法文条目占用babel
。我可以通过在书目条目中手动添加一个不可分割的空格来确保这种情况不会发生。然而,对我来说,这似乎是一种不方便的黑客行为。
是否有一种系统的方法来确保每个条目的间距都是正确的?(如果可能的话,是否可以获得正确的引号而不必像我在示例中所做的那样手动输入它们?)
答案1
这是切换到的另一个原因biblatex
(此处:与csquotes
)。 (与biblatex-trad
甚至还有一种trad-plain
风格!)
\documentclass{article}
\usepackage[british,french]{babel}
\usepackage[french=guillemets]{csquotes}
\usepackage[style=trad-plain,babel=other]{biblatex}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@article{A2012,
hyphenation = {british},
author = {Author, A},
title = {A \enquote{paper}: written in english?},
journal = {Journal},
year = {2012},
volume = {2},
pages = {70--76},
}
@article{B2012,
hyphenation = {french},
author = {Auteur, B},
title = {Un \enquote{article}: \'ecrit en fran\c{c}ais?},
journal = {Journal},
year = {2012},
volume = {2},
pages = {77--79},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\cite{A2012}, \cite{B2012}
\printbibliography
\end{document}
答案2
使用
title = {\foreignlanguage{british}{A ``paper'': written in english?}},
仅当您采用作者-标题风格时才会出现问题。
答案3
一种可能的策略是使用babelbib
。但是标准babplain
样式在冒号方面存在问题,这也在plain
您的示例中显示出来:卷号后面的冒号有空格,但不应该有空格。
\documentclass{article}
\usepackage[british,french]{babel}
\usepackage{babelbib}
\renewcommand{\btxauthorcolon}{,}
\providecommand{\btxvolumecolon}{\string:}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@article{A2012,
author = {Author, A},
title = {A ``paper'': written in english?},
journal = {Journal},
year = {2012},
volume = {2},
pages = {70--76},
language={british},
}
@article{B2012,
author = {Auteur, B},
title = {Un \og article\fg: \'ecrit en fran\c{c}ais ?},
journal = {Journal},
year = {2012},
volume = {2},
pages = {77--79},
language={french},
}
@article{C2012,
author = {Zuteur, B},
title = {Un \og article\fg: \'ecrit en fran\c{c}ais ?},
journal = {Journal},
year = {2012},
volume = {2},
pages = {77--79},
language={french},
}
\end{filecontents}
\begin{document}
\cite{A2012}, \cite{B2012}, \cite{C2012}
\bibliographystyle{mybabplain}
\bibliography{\jobname}
\end{document}
该文件mybabplain.bst
与 完全相同babplain.bst
,但有一处变化:函数format.vol.num.pages
(第 631 至 650 行)应更改为
FUNCTION {format.vol.num.pages}
{ volume field.or.null
number empty$
'skip$
{ "(" number * ")" * *
volume empty$
{ "there's a number but no volume in " cite$ * warning$ }
'skip$
if$
}
if$
pages empty$
'skip$
{ duplicate$ empty$
{ pop$ format.pages }
{ "\btxvolumecolon {}" * pages n.dashify * }
if$
}
if$
}
更改仅是\btxvolumecolon {}
为了替换:
。在文档序言中,我为提供了默认定义\btxvolumecolon
。