字段中的语言标记

字段中的语言标记

.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在支持多语言排版方面享有盛誉,但目前仍有一些功能尚未实现。特别是,没有针对每个字段的语言切换功能,您只能切换整个条目的语言,而且即使这样也可能产生一些不良副作用(见下文)。

字段中的语言标记

为特定字段切换语言最简单的方法之一可能是直接向相应字段添加(polyglossiababel)语言切换命令。例如

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或者。设置为语言名称将覆盖具有该明确值的所有字段。)然后整个条目被包裹在 中,这意味着该条目根据 的规则进行连字符处理。autobiblatexlangidlanguagelangid\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.”。

与上面相同(我们只看到摘录),但这次我们有“5. Aufl。”而不是“5th ed。”

这突出了 的一个问题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

我应该提到对biblatexpolyglossia支持不是很好。biblatex无法检测 的polyglossia语言变体,因此无法为british或生成预期的日期格式austrian(或australian。例如,参见\DeclareLanguageMappingBiblatex 中的后缀、继承和多语种

还应该提到的是,根据polyglossia文档,切换语言的首选方式似乎是\text<language>{...}针对几个单词和\begin{<language>}...\end{<language>}较长的段落<language>\foreignlanguage{<language>}{...}\begin{otherlanguage}{<language>}...\end{otherlanguage}仍然受支持,但仅在下提及其他命令

相关内容