¿Cuáles son las reglas exactas de pdfTeX para la protrusión de caracteres? ¿Y para las expansiones de \leftmarginkern/\rightmarginkern?

¿Cuáles son las reglas exactas de pdfTeX para la protrusión de caracteres? ¿Y para las expansiones de \leftmarginkern/\rightmarginkern?

Es bien sabido que pdfTeX intenta aplicar la protrusión de caracteres de una manera inteligente. Al dividir una lista horizontal en líneas, se insertan kerns (implícitos) para la protrusión de caracteres cerca de los bordes de cada uno de los \hbox'es' resultantes, para una cantidad de kerning que se deduce del \lpcode/ \rpcodedel carácter más a la izquierda/derecha de la línea, incluso si eso El carácter está enterrado dentro de \hbox'es' anidadas o si otro pegamento o núcleos, o incluso \hbox'es' vacíos, intervienen entre el carácter mismo y el borde de la línea. La presencia del cuadro de sangría, por otro lado, inhibe el kern del "margen izquierdo". Por lo tanto, vemos que la protrusión del carácter pasa por alto algunos tipos de nodos en una lista horizontal pero no otros.

He intentado encontrar una especificación exacta de las reglas que gobiernan la inserción de kerns de "margen", pero sin éxito. He notado, sin embargo, que las reglas para establecer el valor de,p.ej, \rightmarginkernno siempre están "sincronizados" con aquellos para la inserción de dichos núcleos. Considere, por ejemplo, el siguiente código:

\documentclass[a4paper]{article}
\usepackage[T1]{fontenc}
\usepackage[protrusion]{microtype} % protrusion option is actually redundant, 
                                   % but I want to be safe!

\begin{document}

First of all, \( \verb|\parfillskip| = \mbox{\the\parfillskip} \).

Secondarily, the main font is ``\fontname\the\font'': in this font the
\verb|\rpcode| of the character~``.'' is \the\rpcode\font`. \space and the 
\verb|\lpcode| of the character~``('' is \the\lpcode\font`( . % paren match )

Now we typeset a paragraph which, while containing the usual \verb|\parfillskip|
glue, whose value is specified above, ends flush with the right margin because
it contains a \verb|\hfill| command:\hfill
(here!).\special{comment:Do you see the kern?}

(Another example for protrusion into the left margin,\hfill using
parentheses.)\linebreak (We force a left parenthesis at the beginning of a
line.)

\begingroup

% Show that protrusion _is_ applied "through" the \parfillskip glue:
\showboxbreadth = 1000
\showboxdepth = 5
\showlists

% But if we ask for the \rightmarginkern of the last line...
\setbox0 = \vbox{\indent
Now we typeset a paragraph which, while containing the usual \verb|\parfillskip|
glue, whose value is specified above, ends flush with the right margin because
it contains a \verb|\hfill| command:\hfill (here!).\par
\global\setbox1 = \lastbox
}
% (...here it is...)
\showbox1

\endgroup

% ...we don't see any protrusion:
Now, \( \verb|\rightmarginkern1| = \mbox{\rightmarginkern1} \).

\end{document}

El examen de la transcripción producida por este ejemplo muestra que la protrusión del carácteresaplicado en el borde derecho de la última línea del párrafo que comienza con "Ahora componemos..."; sin embargo, cuando solicitamos el \rightmarginkernde esa línea, 0ptse devuelve.

¿Podría ser esto un error en pdfTeX? Y si no lo es (si es una característica), ¿cuáles son, nuevamente, las reglas exactas para configurar \leftmarginkerny \rightmarginkern?

Respuesta1

Sí, diría que esto es un error enpdftex . (Parece relacionado coneste error, que se solucionó hace un par de años). Parece que \rightmarginkerninforma un kern cero si \parfillskipcontiene un componente de pegamento, mientras que el kerning del margen se aplica a pesar del componente de pegamento. Ambos están de acuerdo si lo configuras \parfillskipen 0pt.

Para conocer las reglas exactas, sólo puedo referirte a lapdftexfuente, donde los elementos que se pueden omitir se definen (en cp_skipable) como:

  • inserciones
  • marcas
  • ajustar nodos
  • sanciones
  • Whatsits (excepto imágenes)
  • discrecionales vacíos
  • nodos matemáticos vacíos
  • cero granos
  • cero pegamentos (y aquí está la discrepancia entre el kerning de margen real y el kerning de margen informado)
  • cajas vacías

Desafortunadamente, parece que ya no hay un rastreador de errores pdftex, por lo que no sé dónde se podría informar esto.

información relacionada