
続くスペース(ドイツ語)の略語を自動的に文字化する方法そして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 の多くのメンバーと同様に) 略語内の改行不可スペースの幅を少し狭くした方がよいと考えるでしょう。通常のスペースの半分の幅にすべきだという人もいます。cf.http://www.master-bachelor-korrektur.de/abstaende.php。
スペースの長さが3.33ptであるcmr10を使用すると、次のようになります。
d.\kern1.665pt h., z.\kern1.665pt B.,
これは十分に近い
d.\kern.16667em h., z.\kern.16667em B.
または
d.\,h., z.\,B.
テキスト モードでは、DIN5008:2011 に近づけたい場合は、[min{thin space, half space}, normal space[ の範囲で他の値を取ることもできます。質問の要点からすると、正確な値はそれほど重要ではないでしょう。
さて、タイプセットを実際に行うとたくさんテキストを読むと、遅かれ早かれ次の 2 つの問題に遭遇します。
A. 固定幅\kern
番号略語が行の残りの部分と比べて広すぎたり狭すぎたりすることがあります。
B. 狭い列では、テキストが右余白に流れ出たり、段落の最後の行が空っぽになったり、段落内の他の部分の単語のハイフン付けが不適切になったりすることを避けたい場合があります。
問題 A は、略語内空間に伸縮コンポーネントを追加することで解決できます。問題 B は、非最大ペナルティを導入することで解決できます。
d.\penalty5000\hskip.16667em plus.08333em minus.08333em h., z.\penalty5000\hskip.16667em plus.08333em minus.08333em B.
これにより、2つの疑問が生じます。
上記では、5000 はどこからともなく出てきた値で、50 % ですが、なぜ/2 であって/3 や 2 /3 や単に 1 ではない
\@M
のか説明できません。ペナルティの適切な一般的な値または値の範囲 (現在の推測である [1, 9999] の範囲よりも小さい値) は何でしょうか。\@M
\@M
\@M
上記では、伸縮属性と収縮属性に自然な幅の約 50 % を使用しました。ここでも、1/2 は突飛な数字です。1/3 や 2/3 など、]0,1[ 内の他の値も考えられます。伸縮属性と収縮属性のパーセンテージについて、もっと情報に基づいた選択はありますか?
それとは別に、デイビッドのコメントに従って略語内のピリオドの後に \hskip または \hspace が続く場合、特別な注意が必要ですか?pt や em の絶対値を避け、代わりにスペース関連のフォント寸法に対する相対値を使用したいと思います。つまり、
- 表現方法
\hskip.5*\fontdimen2 plus.5\fontdimen3 minus.5\fontdimen4
LaTeX で正しく計算できますか? もちろん、1/2 が気に入らない場合は、適切な説明があれば、他のパーセンテージを自由に取ってもかまいません。 あるいは、必要だと感じて説明できる場合は、3 つのパラメータとして、、、\fontdimen2
およびの他の線形結合を取ることもできます。\fontdimen3
\fontdimen4
答え1
3人用
\fontdimen
パラメータ番号とパラメータを取得するフォントの2つの引数を取ります。\font
現在のフォントを返します。\hskip.5\fontdimen2\font plus.5\fontdimen3\font minus.5\fontdimen4\font
1の場合
ペナルティを追加することで何を防ごうとしているかによって異なります。TeX は全体の悪さを最小限に抑えるために改行を探します。そのため、その時点での値を単独で考慮することはできません。そこで改行が行われなかった場合に何が起こるかを考慮する必要があります。通常、一部の空白が引き伸ばされて最適でないブレークポイントが許可されるため、引き伸ばすことで悪さの値が発生します。ペナルティを有効にするには、省略形を分割するペナルティを、空白を引き伸ばすペナルティよりも大きくする必要があります。
最初のテストでは、間のブレークポイントが!!
非常に簡単に回避されることがわかります。ペナルティが 10 の場合はブレークポイントが実行されますが、ペナルティが 20 と低くても、そのポイントでのブレークを防ぐのに十分です。
2 番目のテストでは、最大の非強制ペナルティである 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}