在德语缩写中,如何设置惩罚和内部空间的宽度,包括拉伸和收缩属性?

在德语缩写中,如何设置惩罚和内部空间的宽度,包括拉伸和收缩属性?

继续如何自动为德语缩写添加空格http://tex.stackexchange.com/a/134856,我们中的一些人倾向于在缩写中排版一个通常的或很窄的空格,例如,

d.\@ h, d.\ h., d.\,h., z.\@ B, z.\ B, z.\,B.

尽管 DIN 5008:2011(现已被取代;有人可以查阅更新吗?)在其中排版了一个常见的不可中断空格,而根本没有提到任何宽度变化,但z.°B.他们提供的示例是用等宽字体排版的。但是,我们更经常使用比例字体,因此我们可能还认为稍微减少缩写中的不可中断空格的宽度更好(就像 TeX.SE 的许多人一样)。有些人说它应该是正常空格宽度的一半;参见http://www.master-bachelor-korrektur.de/abstaende.php

使用 cmr10,间距长度为 3.33pt,因此我们得到

d.\kern1.665pt h., z.\kern1.665pt B.,

这足够接近

d.\kern.16667em h., z.\kern.16667em B.

或者

d.\,h., z.\,B.

在文本模式下。如果您希望更接近 DIN5008:2011,您也可以在区间 [最小{薄空间,半空间},常规空间[] 中取其他值;确切的值对于问题的要点可能并不重要。

现在,当排版真的很多文本,你迟早会遇到两个问题:

A. 固定宽度\kern数字你的缩写有时与行的其余部分相比看起来太宽或太窄,并且

B. 在窄栏中,有时您想避免文本跑到右边距或段落的最后一行,最终导致段落其他位置的单词太空或不利的连字符。

问题 A 可以通过在缩写空间内添加拉伸和收缩组件来解决,问题 B 可以通过引入非最大惩罚来解决:

d.\penalty5000\hskip.16667em plus.08333em minus.08333em h., z.\penalty5000\hskip.16667em plus.08333em minus.08333em B.

这引出了两个问题:

  1. 上面的 5000 是一个不知从何而来的值,是 50% 的,\@M我们无法解释为什么它是\@M/2 而不是\@M/3 或 2 \@M/3 或者只是 1。对于惩罚来说,一个好的通用值或值范围是什么(小于我目前的猜测,即区间 [1, 9999])?

  2. 上面,我们取了大约 50% 的自然宽度作为拉伸和收缩属性。同样,1/2 是无缘无故的 — 它也可以是 ]0,1[ 中的任何其他值,例如 1/3 或 2/3。对于拉伸和收缩属性的百分比,有没有更明智的选择?

独立于此并遵循 David 的评论如果缩写内的句号后跟 \hskip 或 \hspace,是否需要特别注意?,我们希望避免使用 pt 或 em 中的绝对值,而是使用相对于与空间相关的字体尺寸的值。因此:

  1. 如何表达
\hskip.5*\fontdimen2 plus.5\fontdimen3 minus.5\fontdimen4

在 LaTeX 中正确吗?当然,如果您不喜欢 1/2,只要您对此有很好的解释,就可以随意取其他百分比。或者,如果您觉得有必要并且可以解释,您可以对这三个参数采用\fontdimen2\fontdimen3和的其他线性组合。\fontdimen4

答案1


3 人份

\fontdimen接受两个参数,参数编号和从中获取参数的字体。\font返回当前字体,因此\hskip.5\fontdimen2\font plus.5\fontdimen3\font minus.5\fontdimen4\font


对于 1

这取决于您通过添加惩罚来尝试防止什么。TeX 将尝试找到换行符以最小化总不良性,因此不能单独考虑该点的值,您需要考虑如果换行符不在此处发生的情况,通常一些空白会被拉伸以允许次优断点,因此拉伸将产生不良值,并且如果惩罚要产生效果,您需要使中断缩写的惩罚大于拉伸空白的惩罚。

在此处输入图片描述

在第一个测试中,您会发现很容易避免之间的断点!!。如果惩罚为 10,则采用该断点,但低至 20 的惩罚已足以防止在该点处发生断点。

在第二场测试中,此时要避免破发就更加困难了,即使最高非强制性罚分 9999 也不够。

因此,没有明确的规则来决定你想要预防什么,以及你愿意在多大程度上容忍次优替代方案带来的不良影响

\documentclass{article}

\begin{document}
3) \hskip.5\fontdimen2\font plus.5\fontdimen3\font minus.5\fontdimen4\font X

\noindent X\dotfill X

\def\test#1{\par$#1$\par
  aaaaaaaaaaaaaaaaaaaaaaaaaaaa aaa a a a a a a4 a a a a a a a7 a a a a 8 aa!\penalty#1\,! bbb}

\test{-10000}
\test{10000}
\test{20}
\test{10}
\test{00}



\noindent X\dotfill X

\def\test#1{\par$#1$\par
  aaaaaaaaaaaaaaaaaaaaaaaaaaaa aa aaa aaa aa aa aaaaaaaaaaaaaaaaaa7  aa!\penalty#1\,!bbb bbbbbb}

\test{-10000}
\test{10000}
\test{9999}
\end{document}

2 人份

这在一定程度上取决于文化对缩写标点符号的期望,但我可能允许收缩幅度小于拉伸幅度。空间已经很窄了,所以在紧凑的线条中,如果你允许它减半,它可能看起来就像没有空间一样。在没有明显可见的空间的情况下,AB 看起来是否正确取决于你(或你的读者)对它的期望。

答案2

我认为您不希望在这样的缩写的中间出现换行符,但使用 却是可以实现的\penalty5000

您可以使用命令获得统一性:

\documentclass{article}

\ExplSyntaxOn

\NewDocumentCommand{\abk}{m}
 {
  \tl_head:n { #1 } % the first letter
  \exp_args:Ne \tl_map_function:nN { \tl_tail:n { #1 } } \aim_add_space:n
  .\@
 }

\cs_new_protected:Nn \aim_add_space:n
 {
  .\@\nolinebreak
  \skip_horizontal:n { ( \fontdimen2\font plus \fontdimen3\font minus \fontdimen4\font)*2/3 }
  #1
 }

\ExplSyntaxOff

\begin{document}

\abk{dh}
\abk{zB}

\abk{wxyz}

\makebox{word word \abk{zB} word word}

\makebox[1.3\width][s]{word word \abk{zB} word word}

\makebox[0.95\width][s]{word word \abk{zB} word word}

\end{document}

这里使用跳跃表达式将正常的单词间间距减少到 2/3。用该因子进行实验。

在此处输入图片描述

为了完整性,该命令可能会检查是否\spaceskip非零,如果是则使用它。

\documentclass{article}

\ExplSyntaxOn

\NewDocumentCommand{\abk}{m}
 {
  \tl_head:n { #1 } % the first letter
  \exp_args:Ne \tl_map_function:nN { \tl_tail:n { #1 } } \aim_add_space:n
  .\@
 }

\cs_new_protected:Nn \aim_add_space:n
 {
  .\@\nolinebreak
  \dim_compare:nTF { \spaceskip > 0pt }
   { 
    \skip_horizontal:n { \spaceskip*2/3 }
   }
   { 
    \skip_horizontal:n { (\fontdimen2\font plus \fontdimen3\font minus \fontdimen4\font)*2/3 }
   }
  #1
 }

\ExplSyntaxOff

\begin{document}

\abk{dh}
\abk{zB}

\abk{wxyz}

\makebox{word word \abk{zB} word word}

\makebox[1.3\width][s]{word word \abk{zB} word word}

\makebox[0.95\width][s]{word word \abk{zB} word word}

\setlength{\spaceskip}{1em plus 1em minus 0.5em}

\makebox{word word \abk{zB} word word}

\makebox[1.3\width][s]{word word \abk{zB} word word}

\makebox[0.95\width][s]{word word \abk{zB} word word}

\end{document}

在此处输入图片描述

相关内容