von rais » Fr 7. Apr 2023, 09:28
\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
VG
Rainer
\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:
[code]
% 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}
[/code]
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