Take the 2-minute tour ×
TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It's 100% free, no registration required.

I want to use sub- and superscript together in text mode. I've found this macro to solve the problem

\def\textsubsuperscript#1#2{\rlap{\textsubscript{#1}}\textsuperscript{#2}}

But it doesn't works well when the subscript is long. In that case the subscript overlaps with the following character.

What could be the macro to enable sub- and superscripting in all cases?

share|improve this question
    
Check out the comment to this answer: tex.stackexchange.com/questions/1013/… –  Andrey Vihrov Jul 25 '11 at 12:10

2 Answers 2

up vote 7 down vote accepted

We need to have enough space for the longest of the two sub-/superscripts. For that we can calculate the maximum of both sub-/superscripts' widths and make a box as wide as the maximum:

\documentclass{article}

\usepackage{fixltx2e} % For \textsubscript

\makeatletter
\newcommand{\textsubsuperscript}[2]{%
  \begingroup
    \settowidth{\@tempdima}{\textsubscript{#1}}%
    \settowidth{\@tempdimb}{\textsuperscript{#2}}%
    \ifdim\@tempdima<\@tempdimb
      \setlength{\@tempdima}{\@tempdimb}%
    \fi
    \makebox[\@tempdima][l]{%
      \rlap{\textsubscript{#1}}\textsuperscript{#2}}%
  \endgroup}
\makeatother

\begin{document}

A\textsubsuperscript{x}{yyy}B

A\textsubsuperscript{xxx}{y}B

\end{document}

The result

I refrained from using mathmode and \text because \textsuperscript and \textsubscript may have more complex implementations than it would seem (see realscripts, for example).

share|improve this answer
    
Thanks for the answer. Can I ask, why there is a need to put a comment character in the end of each line? –  jutky Jul 26 '11 at 18:53
    
@jutky: tex.stackexchange.com/questions/7453/… –  Andrey Vihrov Jul 26 '11 at 23:07
\makeatletter
\DeclareRobustCommand*\textsubsuperscript[2]{%
  \@textsubsuperscript{\selectfont#1}{\selectfont#2}}
\def\@textsubsuperscript#1#2{%
  {\m@th\ensuremath{_{\mbox{\fontsize\sf@size\z@#1}}
                    ^{\mbox{\fontsize\sf@size\z@#2}}}}}
\makeatother

It's just the same code as for \textsuperscript in the LaTeX kernel with subscripts added.

The result is the same as Andrey's.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.