使用 BibLaTeX 生成连字模式的正确方法是什么?

使用 BibLaTeX 生成连字模式的正确方法是什么?

建议以何种方式将文本插入 BibLaTeX 数据库,以便 LaTeX 能够相应地对条目进行连字符连接,避免由于组合词中的破折号而导致行过满?

我想,你们都遇到过这个问题。你仔细编辑了包含提供给 BibLaTeX 的书目信息的数据库。当然,每条信息都是宝贵的,有人会说,越多越好。所以你也要小心,确保数据库中有每一个细节,并且大多数信息片段都会被提取出来,biber因此会呈现在 LaTeX 文件中(在书目部分内)。

当然,LaTeX 必须排版数据库的内容,才能组成最终的页面。因此,它必须对内容进行连字符处理。

我是德国人,我的大部分文件都是德语的。因此,我的文件当然包括

\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage[german]{csquotes}
\usepackage[backend=biber,style=numeric]{biblatex}

设置德语并能够拥有适当的连字符方案。

我的文档中的大多数文本都使用 babel 简写"=来插入破折号,LaTeX 可能会在此处用连字符连接单词还将检查剩余单词中的以下连字可能性。这看起来像

... das Corporate"=Design, welches als Kopier"=Vorlage ...

这确实很好用。事实上,插入"=而不是普通的破折号 ( -) 现在对我来说是一种正常的方式,并且已经成为我的第二天性。我到处都使用它。

但这对我的 BibLaTeX 数据库中的条目不起作用。在 BibLaTeX 提取和处理请求的条目后,它们会再次由 LaTeX 编译,但不是将速记替换为破折号,而是将速记字母复制到最终文档中。

另一方面:将常规破折号插入 BibLaTeX 数据库会导致正常的 LaTeX 行为,因为破折号会阻止 LaTeX 对破折号后面的单词中的所有内容进行连字符处理。这肯定会产生过满的水平盒子!

这两种解决方案都不能令人满意!"=输出中要么包含单词,要么行数过满。

我认为,这项biber工作只是从数据库中提取所需的条目,按照所选样式对其进行操作,然后将所有内容输出到类似 LaTeX 的文件中,然后由latex(或pdflatex, lualatex, xelatex...) 编译器再次解释。虽然这在某种程度上是正确的,但在替换已定义的 babel 简写和已用这种简写连接的单词的连字符时,这显然是不正确的。这个技巧对文档的其余部分非常有效,但在编译参考书目部分时突然失效了。

所以问题是:什么是正确的方法,可以安全地输入某些破折号字符、速记、宏等,这些字符将由 LaTeX 连字符连接并排版,以产生我们都知道和喜爱的高质量输出。

编辑

正如 David Carlisle 所说,使用-\hspace{0pt}就可以了。LaTeX 现在可以在 后使用连字符-。但我很遗憾地说,这个附加功能使条目更易于阅读。


@Book{voss21:wissenschaftliche-arbeit-mit-latex,
  author     = {Voss, Herbert},
  title      = {Die wissenschaftliche Arbeit mit \LaTeX},
  indextitle     = {Wissenschaftliche Arbeit mit LaTeX, die},
  year       = 2021,
  month      = 6,
  subtitle   = {unter Verwendung von \LuaTeX{}, KOMA-\hspace{0pt}Script und
                    Biber/\BibLaTeX},
  series     = {DANTE-\hspace{0pt}Edition},
  note       = {Ist für Juni 2021 angekündigt.},
  langid     = {ngerman},
  pubstate   = {Zweite, überarbeitete und erweiterte Auflage},
  location   = {Berlin},
  publisher  = lob,
  abstract   = {\TeX{} wurde vor mehr als 35 Jahren für das
                    Erstellen von Dokumenten im wissenschaftlichen
                    Bereich erstellt. Anfänglich nur für Manuskripte von
                    mathematisch orientierten Büchern geschaffen, wurde
                    das Satzsystem \TeX{} sehr schnell als
                    prädestiniertes System für den gesamten
                    wissenschaftlichen Bereich erkannt. Mit dem neuen
                    \TeX-\hspace{0pt}Compiler \LuaTeX{}, welcher auf dem
                    traditionellen\TeX{} aufbaut, dem \TeX-\hspace{0pt}Format
                    \LaTeX{} und den Dokumentenklassen von KOMA–\hspace{pt}Script
                    lassen sich wissenschaftliche Arbeiten für jeden
                    Bereich und in jeder Sprache erstellen. Die
                    wissenschaftliche Arbeit stellt nicht nur besondere
                    Anforderungen an die Art und Weise von
                    Literaturverweisen und der Ausgabe der Bibliografie,
                    sondern auch an typografische Gepflogenheiten. Mit
                    diesem Buch bekommt jeder viele Hinweise für das
                    Erstellen von wissenschaftlichen Arbeiten auf
                    höchstem Niveau.},
  keywords   = {book},
  pagetotal  = 448,
  edition    = 2,
  isbn       = {978-3-96543-217-8},
}

Ulrike Fischer 提到使用BibLaTeX 提供的\hyphen和。插入而不是将产生相同的结果。\hyphenation\hyphen-

引用 BibLaTeX 手册

langid 字段(标识符)
参考书目条目的语言 ID。别名连字符是为了向后兼容而提供的。标识符必须是 babel/polyglossia 包已知的语言名称。此信息可用于切换连字符模式和本地化参考书目中的字符串。

本地化效果很好,但连字符是我的一个问题。

请原谅我:我认为插入充其量只是一种丑陋的解决方法。这不可能是长期的解决方案。从对齐块切换到参差不齐的行,或者在排版参考书目时hspace{0pt}这样做,也不是。\sloppy

在我看来,这么好的连字算法,无论出于什么原因被阻止,都是不一致的。

(这个问题可能听起来类似于我之前的一个问题。确实如此。但由于该特定问题仍未标记为已解决,并且只有一个答案,该答案特别需要 LuaLaTeX 编译器,如果有人能以更通用的方式建议我如何解决我的问题,我会很高兴。)

答案1

据我所知,你的问题是不是连字符和连字符模式通常无法正常工作。您的总体问题是,包含连字符的单词无法在其他地方连字符(例如对已包含连字符的单词进行充分连字符连接)具体来说,你的问题是babel-german解决方案"=不太适用biblatex(正如你之前的问题中记录的那样babelshorthand“= 不适用于 BibLaTeX?)。

"=简要讨论一下为什么不起作用可能会有所帮助。"=依赖于"简写/活动字符,因此最终依赖于类别代码。至少对我来说,类别代码是 TeX 编程中比较棘手的方面之一。本质上(但很可能不完全正确)TeX 会记住它遇到的每个字符的类别代码。该类别代码基本上是冻结的,在读取后无法更改。因此,即使后来更改了所涉及字符的类别代码,代码“读取”时的类别代码设置也与它以后的行为有关。

biblatex.bbl从文件中读取参考书目项目的内容\begin{document}。这样做是为了确保整个文档中的所有数据都可用。至关重要的是,文件被读取 babel选择文档语言。特别是,即使您的文档语言是ngerman,其中"是活动字符/简写,文件在仍然是普通字符而不是简写.bbl时读取。"

事实上,"=如果我们"在之前已经做了简写\begin{document},那么它就可以正常工作,因为"在读取文件时,它是一个活动字符.bbl(我无法告诉您以后是否会有任何不良副作用)

\documentclass[english,ngerman]{scrartcl}

\usepackage[style=numeric]{biblatex}
\usepackage{babel}
\usepackage{csquotes}
\usepackage{dtk-logos}

\begin{filecontents}{\jobname.bib}
@Manual{class:scrguide,
  title      = {KOMA-Script},
  author     = {Kohm, Markus},
  month      = May,
  year       = 2016,
  url        = {http://www.komascript.de/~mkohm/scrguide.pdf},
  langid     = {ngerman},
  note       = {Bestandteil der Online"=Dokumentation von
                  \TeXLive, Datei \url{scrguide.pdf}},
  keywords   = {manual},
}
\end{filecontents}
\addbibresource{\jobname.bib}

\shorthandon{"}
\begin{document}
Der Eintrag~\cite{class:scrguide} aus meiner
Literatur"=Datenbank erscheint im Quellen"=Verzeichnis leider mit
einem \verb|"=| in der Ausgabe.

\printbibliography
\end{document}

Markus Kohm。KOMA 脚本。

作为乌尔丽克·菲舍尔 评论中指出,提供作为替代的biblatex命令,该命令不依赖于(非标准)类别代码,因此可以与所有语言设置一起使用。\hyphen"=

\documentclass[english,ngerman]{scrartcl}

\usepackage[style=numeric]{biblatex}
\usepackage{babel}
\usepackage{csquotes}
\usepackage{dtk-logos}

\begin{filecontents}{\jobname.bib}
@Manual{class:scrguide,
  title      = {KOMA-Script},
  author     = {Kohm, Markus},
  month      = May,
  year       = 2016,
  url        = {http://www.komascript.de/~mkohm/scrguide.pdf},
  langid     = {ngerman},
  note       = {Bestandteil der Online\hyphen Dokumentation von
                  \TeXLive, Datei \url{scrguide.pdf}},
  keywords   = {manual},
}
@Book{voss21:wissenschaftliche-arbeit-mit-latex,
  author     = {Voss, Herbert},
  title      = {Die wissenschaftliche Arbeit mit \LaTeX},
  indextitle     = {Wissenschaftliche Arbeit mit LaTeX, die},
  year       = 2021,
  month      = 6,
  subtitle   = {unter Verwendung von \LuaTeX{}, KOMA\hyphen Script und
                    Biber/\BibLaTeX{} und anderem mehr mehr},
  series     = {DANTE\hyphen Edition},
  langid     = {ngerman},
  location   = {Berlin},
  keywords   = {book},
  pagetotal  = 448,
  edition    = 2,
  isbn       = {978-3-96543-217-8},
}
\end{filecontents}
\addbibresource{\jobname.bib}

\begin{document}
Der Eintrag~\cite{class:scrguide,voss21:wissenschaftliche-arbeit-mit-latex} aus meiner
Literatur"=Datenbank erscheint im Quellen"=Verzeichnis leider mit
einem \verb|"=| in der Ausgabe.

\printbibliography
\end{document}

两个参考书目条目,一个以连字符“DANTE-Edi-//newline tion”结尾。

请注意,“DANTE-Edition”虽然包含连字符,但按照德语规则却是正确地用连字符连接。

如果您更喜欢输入"=\hyphen您可能能够对文件进行后期处理,将所有"=s 替换为\hyphens。

biblatex\hyphen定义为,所以\nobreak-\nobreak\hskip\z@skip最终会做什么大卫·卡莱尔 评论中建议

Corporate\hyphen Design

本质上

Corporate-\hspace{0pt}Design

相关内容