Dentro das abreviações alemãs, como definir a penalidade e a largura do espaço interno incluindo os atributos de esticar e encolher?

Dentro das abreviações alemãs, como definir a penalidade e a largura do espaço interno incluindo os atributos de esticar e encolher?

ContinuandoComo escrever abreviações de espaço (alemão) automaticamenteehttp://tex.stackexchange.com/a/134856, alguns de nós tendem a digitar um espaço normal ou fino nas abreviações e escrever, por exemplo,

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

Embora a norma DIN 5008:2011 (agora substituída; alguém pode consultar uma atualização?) estabeleça um espaço inquebrável usual sem mencionar nenhuma alteração de largura, o exemplo z.°B.que eles fornecem é composto em uma fonte monoespaçada. No entanto, usamos uma fonte proporcional com muito mais frequência, então provavelmente também consideraríamos melhor (como muitas pessoas aqui no TeX.SE) diminuir ligeiramente a largura do espaço inquebrável dentro da abreviatura. Algumas pessoas dizem que deveria ter metade da largura do espaço normal; cf.http://www.master-bachelor-korrektur.de/abstaende.php.

Usando cmr10 com o comprimento do espaço sendo 3,33pt, obtemos, portanto

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

que está perto o suficiente de

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

ou

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

em modo texto. Alternativamente, você pode usar algum outro valor no intervalo [min{thin space, half space}, regular space[ se preferir estar mais próximo de DIN5008:2011; o valor exato provavelmente não importa muito para o objetivo da pergunta.

Agora, quando a composição realmentegrande quantidadedo texto, mais cedo ou mais tarde você se depara com dois problemas:

A. com largura fixa\kernnúmero, suas abreviações às vezes parecem muito largas ou muito estreitas em comparação com o resto da linha, e

B. em colunas estreitas, às vezes você gostaria de evitar que o texto ultrapasse a margem direita ou que a última linha de um parágrafo termine muito vazia ou com hifenizações desfavoráveis ​​de palavras em outras partes do parágrafo.

O problema A pode ser resolvido adicionando componentes de estiramento e contração ao espaço intra-abreviatura, e o problema B introduzindo uma penalidade não máxima:

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

Isso levanta duas questões:

  1. Acima, 5000 é um valor vindo do nada, sendo 50% \@Msem que possamos explicar por que é \@M/2 e não \@M/3 ou 2/3 \@Mou simplesmente 1. Qual seria um bom valor genérico ou faixa de valores (menor que meu palpite atual, qual é o intervalo [1, 9999]) para a penalidade?

  2. Acima, pegamos cerca de 50% da largura natural para os atributos de esticar e encolher. Novamente, 1/2 surgiu do nada - também poderia ter sido qualquer outro valor em ]0,1[, como 1/3 ou 2/3. Alguma escolha mais bem informada para as porcentagens dos atributos de estiramento e contração?

Independente disso e seguindo o comentário de DavidAlgum cuidado especial é necessário se um ponto final dentro de uma abreviatura for seguido por um \hskip ou um \hspace?, gostaríamos de evitar os valores absolutos em pt ou em e, em vez disso, gostaríamos de usar valores relativos às dimensões da fonte relacionadas ao espaço. Por isso:

  1. Como expressar
\hskip.5*\fontdimen2 plus.5\fontdimen3 minus.5\fontdimen4

em LaTeX corretamente? Claro, se você não gosta de 1/2, sinta-se à vontade para pegar outra porcentagem, desde que tenha uma boa explicação para isso. Alternativamente, você pode usar outras combinações lineares de \fontdimen2, \fontdimen3e \fontdimen4para os três parâmetros, se sentir necessidade e puder explicá-la.

Responder1


Para 3

\fontdimenleva dois argumentos, o número do parâmetro e a fonte de onde retirar o parâmetro. \fontretorna a fonte atual então\hskip.5\fontdimen2\font plus.5\fontdimen3\font minus.5\fontdimen4\font


Por 1

depende do que você está tentando evitar adicionando a penalidade. O TeX tentará encontrar quebras de linha para minimizar a maldade total, então o valor nesse ponto não pode ser considerado isoladamente, você precisa considerar o que acontece se a quebra de linha não for feita lá, normalmente algum espaço em branco é esticado para permitir um valor abaixo do ideal ponto de interrupção para que o alongamento incorra em um valor de maldade e você precise fazer com que a penalidade de quebrar sua abreviação seja maior que a penalidade de esticar o espaço em branco para que a penalidade tenha efeito.

insira a descrição da imagem aqui

No primeiro teste você vê que o ponto de interrupção entre !!é facilmente evitado. É aplicada se a penalidade for 10, mas uma penalidade tão baixa quanto 20 já é suficiente para evitar uma quebra nesse ponto.

No segundo teste é mais difícil evitar uma quebra nesse ponto, mesmo a penalidade máxima não forçada de 9999 não é suficiente.

Portanto, não existem regras definidas que você precisa para escolher o que deseja evitar e o quanto está disposto a tolerar a maldade produzida por alternativas abaixo do ideal.

\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}

Para 2

depende um pouco das expectativas culturais de pontuação de abreviações, mas eu provavelmente permitiria menos redução do que alongamento. O espaço já é estreito, portanto, em linhas estreitas, se você permitir que ele seja reduzido pela metade, pode parecer que não há espaço algum. Se AB parece certo sem nenhum espaço claramente visível depende de como você (ou seus leitores) espera que seja.

Responder2

Não acho que você queira uma quebra de linha no meio dessa abreviatura, o que seria possível com \penalty5000.

Você pode obter uniformidade usando um comando:

\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}

Aqui o espaço normal entre palavras é reduzido para 2/3, usando uma expressão de salto. Experimente o fator.

insira a descrição da imagem aqui

Para completar, o comando pode verificar se \spaceskipé diferente de zero e usá-lo caso seja.

\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}

insira a descrição da imagem aqui

informação relacionada