
계속공백(독일어) 약어를 자동으로 입력하는 방법그리고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.
공간의 길이를 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에 더 가깝기를 원한다면 [최소{얇은 공간, 절반 공간}, 일반 공간[] 간격에서 다른 값을 선택할 수도 있습니다. 정확한 값은 아마도 질문의 요점에 그다지 중요하지 않을 것입니다.
이제 실제로 조판할 때많이텍스트를 읽다가 조만간 두 가지 문제를 발견하게 됩니다.
A. 고정 너비 사용\kern
숫자, 약어가 줄의 나머지 부분에 비해 너무 넓거나 너무 좁아 보이는 경우가 있습니다.
B. 좁은 열에서는 텍스트가 오른쪽 여백으로 들어가거나 단락의 다른 곳에서 너무 비어 있거나 바람직하지 않은 하이픈으로 끝나는 단락의 마지막 줄을 피하고 싶을 때가 있습니다.
문제 A는 약어 내 공간에 늘이기 및 축소 구성 요소를 추가하여 해결할 수 있고 문제 B는 최대가 아닌 페널티를 도입하여 해결할 수 있습니다.
d.\penalty5000\hskip.16667em plus.08333em minus.08333em h., z.\penalty5000\hskip.16667em plus.08333em minus.08333em B.
이는 두 가지 질문을 제기합니다.
위에서 5000은 갑자기 나온 값으로, 왜 /2이고 /3이나 2 /3 또는 단순히 1이 아닌지
\@M
설명할 수 없는 50%입니다 . 좋은 일반 값이나 값 범위(보다 작은 값)는 무엇입니까? 내 현재 추측은 페널티 간격 [1, 9999])입니까?\@M
\@M
\@M
위에서는 늘이기 및 수축 속성에 대해 자연 너비의 약 50%를 사용했습니다. 다시 말하지만, 1/2은 어디에도 없습니다. 1/3 또는 2/3과 같이 ]0,1[의 다른 값일 수도 있습니다. 신축 및 수축 속성의 백분율에 대해 더 잘 알려진 선택이 있습니까?
그것과 별개로 David의 의견에 따라약어 안의 마침표 뒤에 \hskip 또는 \hspace가 오는 경우 특별한 주의가 필요합니까?, pt 또는 em의 절대값을 피하고 대신 공간 관련 글꼴 크기에 상대적인 값을 사용하고 싶습니다. 따라서:
- 표현하는 방법
\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
0이 아닌지 확인하고 0인 경우 이를 사용할 수 있습니다.
\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}