.bib
由于连字符在不同语言中的工作方式不同,因此如果某些条目不是主要语言,我需要在文件中包括有关其语言的信息(例如标题、作者、出版商)。当{\begin{otherlanguage}{french} ... \end{otherlanguage}}
在条目中包含例如开头和结尾的花括号时,这似乎可以正常工作,参见以下 MWE。
\documentclass{article}
\usepackage{polyglossia}
\setdefaultlanguage[variant = american]{english}
\setotherlanguage{french}
\setotherlanguage[variant = german]{german}
\usepackage[style = authoryear-comp]{biblatex}
\usepackage{filecontents}
\begin{filecontents*}{\jobname.bib}
@BOOK{smith1968,
AUTHOR = "John Smith",
TITLE = "Jackknife juggernaut",
YEAR = "1968",
PUBLISHER = "Oxford University Press"}
@BOOK{quenneville1975,
AUTHOR = "{\begin{otherlanguage}{french}Dominic Quenneville\end{otherlanguage}}",
TITLE = "Subterranean homesick",
YEAR = "1975",
PUBLISHER = "{\begin{otherlanguage}{german}Der beste Verlag Deutschlands\end{otherlanguage}}"}
\end{filecontents*}
\addbibresource{\jobname.bib}
\begin{document}
\nocite{*}
\parbox{0pt}{\hspace{0pt}\printbibliography}
\end{document}
但有时参考文献中的所有内容都是另一种语言,将{\begin{otherlanguage}{...} ... \end{otherlanguage}}
参考文献的每一行都放进去似乎很乏味。但我找不到指定整个参考文献的语言的方法(例如,以下 MWE 将忽略参考文献{otherlanguage}
周围的环境,paul1920
将其视为“垃圾”)。我该怎么做?
\documentclass{article}
\usepackage{polyglossia}
\setdefaultlanguage[variant = american]{english}
\setotherlanguage{french}
\setotherlanguage[variant = german]{german}
\usepackage[style = authoryear-comp]{biblatex}
\usepackage{filecontents}
\begin{filecontents*}{\jobname.bib}
\begin{otherlanguage}{german}
@BOOK{paul1920,
AUTHOR = "Hermann Paul",
TITLE = "Prinzipien der Sprachgeschichte",
YEAR = "1920",
EDITION = "5",
LOCATION = "Halle a.\@ S.",
PUBLISHER = "Max Niemeyer"}
\end{otherlanguage}
@BOOK{quenneville1975,
AUTHOR = "{\begin{otherlanguage}{french}Dominic Quenneville\end{otherlanguage}}",
TITLE = "Subterranean homesick",
YEAR = "1975",
PUBLISHER = "{\begin{otherlanguage}{german}Der beste Verlag Deutschlands\end{otherlanguage}}"}
\end{filecontents*}
\addbibresource{\jobname.bib}
\begin{document}
\nocite{*}
\parbox{0pt}{\hspace{0pt}\printbibliography}
\end{document}
答案1
虽然biblatex
在支持多语言排版方面享有盛誉,但目前仍有一些功能尚未实现。特别是,没有针对每个字段的语言切换功能,您只能切换整个条目的语言,而且即使这样也可能产生一些不良副作用(见下文)。
字段中的语言标记
为特定字段切换语言最简单的方法之一可能是直接向相应字段添加(polyglossia
或babel
)语言切换命令。例如
title = {\foreignlanguage{german}{Prinzipien der Sprachgeschichte}},
这适用于许多领域并且是一种快速的解决方案,但也有一些注意事项
- 语言切换标记可能会使排序混乱。Biber 在排序之前会删除一些宏,但由于它不解析 TeX(并且不知道所有宏的定义),因此该示例将排序在 下,
g
而不是 下P
。 切换标记可能会造成混乱或阻止字段解析。这在名称字段中很明显。
author = {\begin{otherlanguage}{french}Dominic Quenneville\end{otherlanguage}},
\begin{otherlanguage}{french}Dominic
会完全失败,因为 Biber(和 BibTeX)将其解析为给定组件为且其家族组件为的名称Quenneville\end{otherlanguage}
。biblatex
需要能够独立处理这些名称部分。但是当独立处理名称部分时,环境不匹配会导致致命错误。因此,我们需要添加一对额外的括号来停止名称解析(类似于在书目条目的“作者”字段中使用“公司作者”(完整拼写出姓名))
author = {{\begin{otherlanguage}{french}Dominic Quenneville\end{otherlanguage}}},
现在,姓名被解释为仅由家庭部分组成
{\begin{otherlanguage}{french}Dominic\bibnamedelimb Quenneville\end{otherlanguage}}
。这意味着排序将再次关闭,姓名格式将无法按预期工作。特别是,即使姓名通常会反转(“Quenneville, Dominic”)或仅显示姓氏(“Quenneville”),姓名仍将始终显示为“Dominic Quenneville”。像 这样的选项将无法按预期工作giveninits
,\mkbibnamefamily
也\mkbibnamegiven
不会产生预期的效果。
因此,此方法仅适用于简单的文字字段,其值对排序无关紧要。一般来说,我可能不建议这样做。
langid
&autolang
此langid
字段应为您的用例的答案paul1920
。如biblatex 中的 langid 字段与语言字段有何不同?在其他地方,此字段可用于切换完整条目的语言。
但是,使用默认设置时,该字段没有任何效果。您需要将选项设置autolang
为除 (默认值) 之外的值none
。您可能对 感兴趣autolang=hyphen
。(请注意,如果您想从字段中选择语言,langid
则应将选项设置为autobib
(默认值),autocite
或者。设置为语言名称将覆盖具有该明确值的所有字段。)然后整个条目被包裹在 中,这意味着该条目根据 的规则进行连字符处理。auto
biblatex
langid
language
langid
\begin{hyphenrules}{<langid>}...\end{hyphenrules}
<langid>
\documentclass{article}
\usepackage{polyglossia}
\setdefaultlanguage[variant = american]{english}
\setotherlanguage[variant = german]{german}
\usepackage[style = authoryear-comp, autolang=hyphen]{biblatex}
\usepackage{filecontents}
\begin{filecontents*}{\jobname.bib}
@book{paul1920,
author = {Hermann Paul},
title = {Prinzipien der Sprachgeschichte},
year = {1920},
edition = {5},
location = {Halle a.~S.},
publisher = {Max Niemeyer},
langid = {german},
}
\end{filecontents*}
\addbibresource{\jobname.bib}
\begin{document}
\nocite{*}
\parbox{0pt}{\hspace{0pt}\printbibliography}
\end{document}
如果您设置了autolang=other
,则条目将被包装在 中\begin{otherlanguage}{<langid>}...\end{otherlanguage}
,这意味着不仅连字符将按照<langid>
,而且 bibstring 也将在 中<langid>
,因此在上面的例子中您将看不到“5th. ed.”,而会看到“5. Aufl.”。
这突出了 的一个问题autolang=hyphen
。整个条目将根据 的规则进行连字符处理,<langid>
这对于 中的字段内容来说是正确的<langid>
,但 bibstrings 是主文档语言(可能等于 也可能不等于<langid>
)。在上面的例子中,“edition”将根据德语规则进行连字符处理。这可能会有问题。
\begin{otherlanguage}{german}...\end{otherlanguage}
在文件中添加.bib
条目之外的内容不会产生任何效果。条目之外的文本将被忽略(BibTeX 会默默忽略,Biber 会发出警告)。
但我需要别的东西
不幸的是,biblatex
目前这些只是全部的报价。
您无法按字段切换语言,因为每个条目可能使用不同的语言(请参阅https://github.com/plk/biblatex/issues/895)。
可以,但相当棘手,只切换字段内容,将<langid>
其余部分(bibstrings、标点符号)保留在主文档语言中(这可以解决提到的问题autolang=hyphen
),但非常棘手。请参阅根据字段更改语言,第 2 部分:字体、大小写转换和排序,请注意,该实现有一些缺点,例如它不能与一起使用\MakeSentenceCase
。
不幸的是,更复杂的语言切换机制的实现看起来相当复杂......
polyglossia
我应该提到对biblatex
的polyglossia
支持不是很好。biblatex
无法检测 的polyglossia
语言变体,因此无法为british
或生成预期的日期格式austrian
(或australian
。例如,参见\DeclareLanguageMappingBiblatex 中的后缀、继承和多语种。
还应该提到的是,根据polyglossia
文档,切换语言的首选方式似乎是\text<language>{...}
针对几个单词和\begin{<language>}...\end{<language>}
较长的段落<language>
。\foreignlanguage{<language>}{...}
和\begin{otherlanguage}{<language>}...\end{otherlanguage}
仍然受支持,但仅在下提及其他命令。