Was sind die genauen Regeln von pdfTeX für die Hervorhebung von Zeichen? Und für die Erweiterungen von \leftmarginkern/\rightmarginkern?

Was sind die genauen Regeln von pdfTeX für die Hervorhebung von Zeichen? Und für die Erweiterungen von \leftmarginkern/\rightmarginkern?

Es ist bekannt, dass pdfTeX versucht, Zeichenvorsprünge auf clevere Weise anzuwenden. Beim Aufteilen einer horizontalen Liste in Zeilen werden (implizite) Unterschneidungen für Zeichenvorsprünge in der Nähe der Kanten jedes der resultierenden \hbox'es eingefügt, und zwar für eine Unterschneidungsmenge, die vom \lpcode/ \rpcodedes am weitesten links/rechts stehenden Zeichens in der Zeile abgeleitet wird, selbst wenn dieses Zeichen in verschachtelten \hbox'es verborgen ist oder wenn andere Klebe- oder Unterschneidungen oder sogar leere \hbox'es zwischen dem Zeichen selbst und der Zeilenkante liegen. Das Vorhandensein des Einrückungsfelds verhindert andererseits die Unterschneidung am „linken Rand“. Wir sehen also, dass Zeichenvorsprünge einige Knotentypen in einer horizontalen Liste umgehen, andere jedoch nicht.

Ich habe versucht, eine genaue Spezifikation der Regeln zu finden, die das Einfügen von "Rand"-Kerns regeln, aber ohne Erfolg. Mir ist jedoch aufgefallen, dass die Regeln zum Festlegen des Wertes vonz.B, \rightmarginkernsind nicht immer „synchron“ mit denen zum Einfügen solcher Unterschneidungen. Betrachten Sie beispielsweise den folgenden Code:

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

Die Untersuchung des Transkripts dieses Beispiels zeigt, dass die ZeichenprotrusionIstwird am rechten Rand der letzten Zeile des Absatzes angewendet, der mit „Jetzt setzen wir …“ beginnt. Wenn wir dennoch nach der Zahl \rightmarginkerndieser Zeile fragen, 0ptwird zurückgegeben.

Könnte dies ein Fehler in pdfTeX sein? Und wenn nicht (wenn es eine Funktion ist), was sind dann nochmal die genauen Regeln zum Setzen von \leftmarginkernund \rightmarginkern?

Antwort1

Ja, ich würde sagen, das ist ein Fehler in pdftex. (Es scheint damit zusammenzuhängendieser Fehler, das vor ein paar Jahren behoben wurde.) Es scheint, dass \rightmarginkernein Null-Kerning gemeldet wird, wenn \parfillskipeine Klebekomponente enthalten ist, während das Rand-Kerning selbst trotz der Klebekomponente angewendet wird. Beide stimmen überein, wenn Sie \parfillskipauf setzen 0pt.

Für die genauen Regeln kann ich nur verweisen auf diepdftexQuelle, wobei die überspringbaren Elemente (in cp_skipable) wie folgt definiert sind:

  • Einfügungen
  • Markierungen
  • Knoten anpassen
  • Strafen
  • was auch immer (außer Bilder)
  • leere Ermessensspielräume
  • leere mathematische Knoten
  • Null Kerning
  • Null Klebstoffe (und hier liegt die Diskrepanz zwischen dem tatsächlichen Rand-Kerning und dem gemeldeten Rand-Kerning)
  • leere Hboxen

Leider scheint es dafür keinen Bugtracker pdftexmehr zu geben, daher weiß ich nicht, wo dies gemeldet werden könnte.

verwandte Informationen