
Wie kann ich den Abstand um einen Punkt begrenzen, der kein Punkt ist (d. h. keinen Satz beendet)?
In meinem Dokument muss ich auf qualifizierte Namen verweisen (wie A.x
). Derzeit setze ich diese als \texttt{A.x}
. Dies erzeugt jedoch manchmal etwas Leerraum um den Punkt herum, beispielsweise im folgenden Ausschnitt:
Ich hätte gerne nur ein kleines bisschen Platz um das Punktsymbol, das die Teile des Namens trennt, aber alles, was ich finden konnte, bezog sich auf die Abstände im Mathematikmodus. Außerdem habe ich versucht, den Catcode vorübergehend .
wie folgt auf 11 zu ändern:
\newcommand{\codename}[1]{
\begingroup
\catcode`.=11
\texttt{#1}
\endgroup
}
dann verwenden \codename{A.x}
. Das hat jedoch nicht geholfen.
Jede Hilfe wird wirklich geschätzt.
Antwort1
Sie können einen Befehl definieren:
\newcommand{\codename}[2]{#1\kern-.05em.\kern-.05em#2}
Vergleichen Sie dann A.x
mit \codename{A}{x}
:
Durch die Verwendung \kern
von werden Zeilenumbrüche und Dehnungen vermieden. Sie können den Kerning-Faktor beliebig anpassen. Ich habe -.05em
die Länge auf beiden Seiten gewählt, aber in einer anderen Schriftart benötigen Sie möglicherweise unterschiedliche Längen davor und danach.
Antwort2
Das Hauptproblem des OP liegt meiner Ansicht nach darin, dass ihm die Tatsache nicht gefällt, dass \texttt
Punkte die gleiche Breite wie alle anderen Zeichen haben.
Hier verwende ich einen Token-Zyklus, um das Problem zu lösen. Ich durchsuche jedes Token des Arguments bis \codename
. Jedes Mal, wenn ich ein finde .
, ersetze ich es durch \nobreak{\textrm{.}}\nobreak
. Das bedeutet, dass Codenamen mit mehreren Punkten für das Makro kein Problem darstellen.
Dadurch werden kontextbedingte Abstände durch Punkte vermieden und durch das Setzen der Punkte in \textrm
wird die zusätzliche Breite des Punkts vermieden, selbst wenn \codename
in gesetzt ist \texttt
.
\documentclass{article}
\usepackage{tokcycle}
\Characterdirective{\ifx.#1\addcytoks{\nobreak{\textrm{.}}\nobreak}\else
\addcytoks{#1}\fi}
\newcommand\codename[1]{\tokencyclexpress#1\endtokencyclexpress}
\begin{document}
Here is \codename{A.1} code name.
Code names such as \texttt{\codename{A.2.4}}, can contain multiple dots!
By setting the dots in textrm, extra spacing is avoided even if the
codename is set in texttt.
\end{document}