Text im Superskript nicht überschneidungsfrei mit nachfolgendem Text

Schriftbild, Absätze und Auflistungen einstellen


jgrimm

Text im Superskript nicht überschneidungsfrei mit nachfolgendem Text

Beitrag von jgrimm »

Hallo zusammen,

ich habe leider folgendes Problem, welches ich nicht lösen kann. Eine Recherche zur bestehenden Problemstellung war leider nicht aufschlussreich, weshalb ich die Community um Hilfestellung bitte. Im nachfolgenden Code führe ich ein kompilierbares Minimalbeispiel an.

Die unten angeführten Befehle \SP, \SB und \SPSB benutze ich sowohl im normalen Text als auch im Mathematik-Modus. Die Befehle gehen auf einen anderen Thread bei stackexchange zurück; Quelle vgl. Kommentierung.
% Dokumentenklasse
\documentclass{scrbook} %openany erlaubt den chapters auf jeglicher seite zu beginnen.

%https://tex.stackexchange.com/questions/8255/vertically-aligning-textsuperscript-and-textsubscript-together
\def\SPSB#1#2{\rlap{\textsuperscript{#1}}\SB{#2}}
\def\SP#1{\textsuperscript{#1}}
\def\SB#1{\textsubscript{#1}}
\def\SPSBMOD#1#2{\textsuperscript{#1}\SB{#2}}

\begin{document}
	\noindent Sample of good and bad case: \\
	1. \textit{DARP\SPSB{C}{3}} that is fine -- no overlap \\
	2. \textit{DARP\SPSB{C+$\Psi$}{2}} that is bad -- overlap \\
	3. \textit{DARP\SPSB{C+\ensuremath{\Psi}}{2}} that is bad -- overlap \\
	4. \textit{DARP\SPSB{C+X}{3}} that is bad -- overlap \\
	5. \textit{DARP\SPSB{MP}{3}} that is bad -- overlap \\
	6. \textit{DARP\SPSB{E}{MP}} that is fine -- no overlap \\
	7. \textit{DARP\SPSBMOD{MP}{3}} that is also bad -- 3 not below MP \\
\end{document}
Für 9 von 10 Fällen klappt das auch reibungslos. Ich hatte erst die Vermutung, dass es an dem $\Psi$ liegt. Ich hatte daher mal versucht das $\Psi$ durch \ensuremath{\Psi} zu ersetzen (Fall 2 und 3). Kombination 4 zeigt aber, dass es nicht am Mathematik-Modus liegt. Das Problem scheint eher daher zu rühren, dass der Abstand nicht adäquat von \rlap im Befehl \SPSB abgeschätzt wird, vgl. dazu insbesondere die Fälle 5 und 6. Wenn ich \rlap rausnehme (Befehl \SPSBMOD und damit Fall 7), dann werden die Einträge aber nicht mehr übereinander sondern nacheinander dargestellt.

Wäre für einen Tipp dankbar worin das Problem besteht bzw. wie ich es ggfs. lösen kann.

Viele Grüße
Jonathan

rais
Forum-Guru
Forum-Guru
Beiträge: 407
Registriert: Di 21. Sep 2010, 00:37

Re: Text im Superskript nicht überschneidungsfrei mit nachfolgendem Text

Beitrag von rais »

\rlap versteckt quasi seinen Inhalt. Das wird hier genutzt, um Superscript/Subscript übereinander zu bekommen. Ein Problem bekommst Du, wenn der (Superscript-) Text im \rlap breiter ist als der Andere, dann wird der kürzere (Subscript-) Text maßgebend für den darauffolgenden Text.
Schauste halt vorher, welcher der beiden Texte breiter ist und packst den kürzeren Text in den \rlap:
% Dokumentenklasse
\documentclass{scrbook} %openany erlaubt den chapters auf jeglicher seite zu beginnen.

%https://tex.stackexchange.com/questions/8255/vertically-aligning-textsuperscript-and-textsubscript-together

\newlength\sbl
\newlength\spl
\def\SPSB#1#2{%
  \settowidth\sbl{#2}% Breite des Textes, der in den Subscript soll
  \settowidth\spl{#1}% Breite des Textes, der in den Superscript soll
  \ifdim\spl>\sbl\relax% wenn der Superscript-Text breiter als der Subscript-Text ist, dann
    \rlap{\textsubscript{#2}}\textsuperscript{#1}% erst Subscript ausgeben
  \else % sonst
    \rlap{\textsuperscript{#1}}\textsubscript{#2}% erst Superscript ausgeben
  \fi
}
\def\SP#1{\textsuperscript{#1}}
\def\SB#1{\textsubscript{#1}}
\def\SPSBMOD#1#2{\textsuperscript{#1}\SB{#2}}

\begin{document}
	\noindent Sample of good and bad case: \\
	1. \textit{DARP\SPSB{C}{3}} that is fine -- no overlap \\
	2. \textit{DARP\SPSB{C+$\Psi$}{2}} that's fine now, too \\
	3. \textit{DARP\SPSB{C+\ensuremath{\Psi}}{2}} that's fine now, too \\
	4. \textit{DARP\SPSB{C+X}{3}} that's fine now, too \\
	5. \textit{DARP\SPSB{MP}{3}} that's fine now, too \\
	6. \textit{DARP\SPSB{E}{MP}} that is fine -- no overlap \\
	7. \textit{DARP\SPSBMOD{MP}{3}} that is also bad -- 3 not below MP \\
\end{document}
Genau genommen vergleiche ich hier die Breiten der Texte, als ob sie im Fließtext benützt würden, OTOH interessiert an dieser Stelle nur der Vergleich und nicht die konkrete Textbreite unter \textsubscript/\textsuperscript :wink:

VG
Rainer
One of the joys of travel is visiting new towns and meeting new people---G.Khan (Robert Asprin, Another Fine Myth)

jgrimm

Re: Text im Superskript nicht überschneidungsfrei mit nachfolgendem Text

Beitrag von jgrimm »

Klasse, funktioniert. Danke dir! :)

Viele Grüße
Jonathan

Antworten