Automatisches Kerning mit LuaLaTeX

Automatisches Kerning mit LuaLaTeX

Gibt es eine Möglichkeit, ein rechtes doppeltes Anführungszeichen direkt über einem Punkt zu setzen (wenn das Zitat mit einem Punkt endet)? Nicht links (zum Beispiel ."), nicht rechts (zum Beispiel ".), sondern direkt darüber. Das Foto unten ist ein Beispiel vonBäume, Karten und Theoremevon Jean-Luc Doumont.

Rechtes doppeltes Anführungszeichen direkt über dem Punkt.

Antwort1

Eine Möglichkeit besteht darin, zwischen dem Anführungszeichen und dem Punkt ein negatives „Kerning“ einzufügen:

\documentclass{article}
\begin{document}
Here is an unkerned quotation mark: ``\dots''.

Here is a kerned quotation mark: ``\dots''\kern-0.5em.
\end{document}

Beispiel für Kerning

Der TeX-Befehl \kern-0.5emfügt zwischen dem Anführungszeichen und dem darauffolgenden Punkt ein Leerzeichen ein. Sie müssen ein wenig mit dem genauen Abstand experimentieren, aber die Verwendung eines Maßes wie , -0.5emdas mit der Schriftgröße skaliert wird, sollte einigermaßen gut funktionieren.

Automatisches Kerning mit LuaLaTeX

Wie andere bereits vorgeschlagen haben, können Sie dies mit Makros tun, aber wenn Sie dies automatisch tun möchten, müssen Sie diese Kerning-Informationen anscheinend in die schriftspezifische Kerning-Tabelle aufnehmen. Dies kann mitLuaLaTeXwie folgt:

Erstellen Sie zuerst eine Datei:Palatino.fea

languagesystem DFLT dflt;
languagesystem latn dflt;
feature kern {
pos  \quotedblright \period -1000;
} kern;

Laden Sie diese Schriftinformationen nun mit fontspec:

\documentclass{article}
\usepackage{fontspec}
\setmainfont[FeatureFile=Palatino.fea]{Palatino}

\begin{document}
Here is an automatically kerned quotation mark: ``\dots''.

Here is a manually kerned quotation mark: ``\dots''\kern-0.5em.
\end{document}

Beachten Sie, dass Sie dies jetzt kompilieren müssen lualatexund dass Sie die benutzerdefinierten Kerning-Informationen für jede Schriftart hinzufügen müssen, die Sie verwenden möchten.

Automatisches Kerning mit LuaLaTeX

Antwort2

Ich würde dies lediglich als einen \rlapmit -ed beginnenden Punkt (oder im Sinne von LaTeX als \makebox[0pt][l]) festlegen, verpackt in ein Makro:

Bildbeschreibung hier eingeben

\documentclass{article}
\newcommand{\qperiod}{\rlap{.}}
\begin{document}
Some text: ``\dots''.

Some text: ``\dots''

Some text: ``\dots\qperiod''
\end{document}

Durch die Makroumhüllung sind bei Bedarf globale Änderungen möglich.

Antwort3

Hier verwende ich einen Stapel. Das stacktypeist entweder „L“ für Lang oder „S“ für Kurz (Standard). Wenn „L“, ist der Stapel-„Abstand“ von Grundlinie zu Grundlinie. Durch die Einstellung auf 0ptwird angegeben, dass die beiden Komponenten dieselbe Grundlinie haben (im Gegensatz dazu ist ein kurzer Stapelabstand die vertikale Lücke zwischen der Oberseite des „Ankers“ und der Unterseite des gestapelten Elements). Das stackalignmentdefiniert die horizontale Ausrichtung (Standard c=Mitte). Hier habe ich es auf Linksausrichtung eingestellt.

\documentclass{article}
\usepackage{stackengine}
\renewcommand\stacktype{L}
\renewcommand\stackalignment{l}
\begin{document}
by ``\dots\stackon[0pt]{.}{''}
\end{document}  

Bildbeschreibung hier eingeben

Dasselbe Ergebnis kann unter Umgehung aller Parametereinstellungen durch Verwendung des generischen stackengineMakros mit 8 obligatorischen Argumenten erreicht werden:

by ``\dots\stackengine{0pt}{.}{''}{O}{l}{F}{F}{L}

Die acht obligatorischen Argumente sind:

  • Stapelabstand
  • Ankerelement
  • gestapeltes Element
  • Über- oder Unterstapeln
  • l(links) c(en) oder r(rechts) horizontale Ausrichtung
  • R/F für „quietstack“ („T“ bedeutet erstellt, aber nicht gedruckt)
  • T/F für „useanchorwidth“ („T“ bedeutet, dass die Ankerbreite die Gesamtstapelbreite bestimmt)
  • S(kurzer) oder L(anger) Stapel

verwandte Informationen