
Ich habe in der letzten Zeit Antworten auf Latex-Fragen gelesen, um ein Problem zu lösen, das ich habe. Ich verwende eine Schriftart, die Symbole enthält, und ordne die Symbole einem Latex-Befehl zu. Für dieses MWE können Sie jede beliebige Schriftart mit Symbolen verwenden, die möglicherweise nicht im lateinischen Zeichensatz enthalten sind.Hierist die, die ich verwende (ich habe nur den Dateinamen in Symbols.otf geändert) undHiergibt es eine Dokumentation dazu, einschließlich XeLaTeX-Befehlen. Dieser Teil funktioniert einwandfrei:
\documentclass[10pt,twoside]{book}
\makeatletter
\newfontface\honourific[Path = ./fonts/]{Symbols.otf}
\newcommand{\hn}[1]{{\honourific\XeTeXglyph #1}}
\newcommand{\RahimahumuLlah}{{\large\hn{83}\kern0.25em}}
\begin{document}
...and a similar statement has been reported as being the view of Imām Mālik Ibn Anas \RahimahumuLlah.
\begin{document}
Wenn ich es jetzt in meinem Schriftsatz zu verwenden versuche \firstcommand
, funktioniert es. Wenn jedoch ein Punkt, Komma, Doppelpunkt, Semikolon oder ein anderes Satzzeichen vorhanden ist, kann es sein, dass hinter dem Symbol viel mehr oder viel weniger Platz ist als nötig. Aus diesem Grund habe ich den Standard-Kerning auf 0,25em eingestellt, was in den meisten Situationen gut funktioniert. Ich möchte es so einrichten, dass es prüft, ob direkt nach dem Symbol ein anwendbares Satzzeichen (Punkt, Komma, Doppelpunkt ...) vorhanden ist, und wenn ja, stattdessen 0,05em Kerning anwendet.
Ich bin auf einige Diskussionen zum @ifnextchar-Befehl gestoßen, insbesonderedieser Threaddie begonnen hatte inDasForumsbeitrag. Ich habe versucht, die endgültige Antwort des Forumsbeitragenden in meinen Code zu implementieren, habe dabei aber festgestellt, dass weder die Bedingungen „wahr“ noch „false“ ausgewertet wurden.
Ich wäre sehr dankbar, wenn Sie mir die Implementierung dieser oder einer anderen Methode des bedingten Kernings erläutern könnten.
Danke
Bearbeiten:
Ok, ich habe einige Tests durchgeführt und das Problem möglicherweise eingegrenzt. Die Verwendung von xspace funktioniert nicht und auch das manuelle Durchlaufen von Bedingungen zur Erkennung der Zeichensetzung funktioniert nicht. Ich habe diesen Code verwendet, um herauszufinden, wo mein Problem lag:
\makeatletter
\newcommand{\punctuationcheck}{%
\@ifnextchar){parens\relax}{%
\@ifnextchar]{square bracket\relax}{%
\@ifnextchar.{fullstop\relax}{%
\@ifnextchar,{comma\relax}{space
}%
}%
}%
}%
}
\makeatother
Wenn ich diesen Code ausführe, erkennt er kein Komma und fügt stattdessen einfach das Wort „Leerzeichen“ ein, unabhängig davon, ob tatsächlich ein Leerzeichen nach dem Komma kommt oder nicht. Ich habe mir die Antwort angesehenHierund es wurde darauf hingewiesen, dass {}
nach Befehlen nach Bedarf Leerzeichen beibehalten werden sollen. Ich habe das versucht und es hat funktioniert. Das Problem ist jetzt, wie ich LaTeX zwingen kann, nach jedem meiner benutzerdefinierten Befehle ein anzuhängen, {}
damit ich beim Eintippen meines Dokuments nicht daran denken muss?
Bearbeitung 2: Gelöst
Es stellt sich also heraus, dass \xspace
es wirklich darauf ankommt, wo Sie den Befehl in der Definition platzieren.
Erste Instanz:
\newcommand{\RahimahumuLlah}{{\large\hn{83}\xspace}}
Ich konnte nicht erkennen, dass der Befehl funktionierte. Ich habe den Befehl direkt vor die letzte Klammer verschoben:
\newcommand{\RahimahumuLlah}{{\large\hn{83}}\xspace}
Und es funktioniert.
Antwort1
Sie könnten den xspace
Paketcode kopieren, der genau dies tut, abgesehen von der Tatsache, dass er ein normales Leerzeichen anstelle Ihres Kerns hinzufügt.