Superscripts are sometimes needed for numbers (e.g., in footnote calls), but also for letters (e.g., in French, for centuries, issue numbers; likewise in English —depending on authors— for centuries, etc.)
Many fonts include set of superscript characters. Theoretically, assuming the font designers did their job well, and crafted them with the best of their art, with appropriate weight and shape, such “real” characters ought to look much better than, say, merely scaled and raised characters. The Brill font, for example, is commendable in this respect, with fairly well-designed superscript characters.
When available, how are these superior characters to be used? While direct Unicode input is sometimes possible, it is not practical. Moreover, all characters are not always available via Unicode...
Modern OpenType fonts often can include superscript characters, under the sups
feature.
When supported by the font, this could be the preferred way to access them, and the most reliable one for an extensive set of characters.
However, in his Elements of Typographic Style (3rd edition, §4.3.2), Robert Bringhurst writes: “Many fonts include sets of superscript numbers, but these are not always of satisfactory size and design. Text numerals set at a reduced size and elevated baseline are sometimes the best or only choice.”
Quite rightly, many fonts do not have perfect superscript characters. But raising and scaling standard characters is a compromise, and it is not without its own issues. The weight of such reduced characters may end up being too thin.
Indeed, Bringhurst goes on: “In many faces, smaller numbers in semibold look better than larger numbers of regular weight.”
Linear scaling may not be the best choice. Look at well designed fonts: Smaller numbers are usually scaled vertically to a proportion of the full height they would take at regular size. This is also often the case for letters, albeit to a smaller amount.
Finally, would the text be set in italic, a correction may be needed to improve the superscript placement.
In conclusion, such a simple feature (in appearance) is an interesting challenge for digital typesetting systems thriving for quality.
They have various options at their disposal, but the best choice will depend on the font, the characters, and the context:
But do all typesetting systems offer the same capabilities in this respect? And do they all use the same strategies?
(This discussion would also apply to subscripts, which are used in chemical formulas, for example, although mathematical notation may also be used in that case, and is of a different nature.)
\begin[papersize=a7]{document} \nofolios \neverindent \use[module=packages.textsubsuper] \font[family=Libertinus Serif,size=12pt] \font[size=16pt]{ther} (not superscript) \font[size=26pt]{Xᵗʰᵉʳ} (unicode superscript) \font[size=26pt]{X\font[features=+sups]{ther}} (font feature) \font[size=26pt]{X\textsuperscript[fake=false]{ther}} (native super) \font[size=26pt]{X\textsuperscript[fake=true]{ther}} (fake super) \begin[command=sample]{define} 20ᵗʰ \font[features=+smcp]{xx}ᵉ / 20\font[features=+sups]{th} \font[features=+smcp]{xx}\font[features=+sups]{e} / 20\textsuperscript[fake=false]{th} \font[features=+smcp]{xx}\textsuperscript[fake=false]{e} / 20\textsuperscript[fake=true]{th} \font[features=+smcp]{xx}\textsuperscript[fake=true]{e} \end{define} \font[family=Libertinus Serif,style=normal]{\sample} \font[family=Libertinus Serif,style=italic]{\sample} \font[family=Libertinus Sans,style=normal]{\sample} \font[family=Libertinus Sans,style=italic]{\sample} \end{document}
sile -o superscript-sile.pdf superscript-sile.sil
\documentclass[12pt]{article} \usepackage[paperheight=105mm,paperwidth=74mm,margin=4mm]{geometry} \pagenumbering{gobble} \setlength{\parindent}{0pt} \usepackage{fontspec} \usepackage{moresize} \usepackage{libertinus} \begin{document} {\LARGE ther} (not superscript) {\HUGE Xᵗʰᵉʳ} (unicode superscript) {\HUGE X\textsuperscript{ther}} (super) 20ᵗʰ \textsc{xx}ᵉ / 20\textsuperscript{th} \textsc{xx}\textsuperscript{e} \textit{% 20ᵗʰ \textsc{xx}ᵉ / 20\textsuperscript{th} \textsc{xx}\textsuperscript{e} } \textsf{% 20ᵗʰ \textsc{xx}ᵉ / 20\textsuperscript{th} \textsc{xx}\textsuperscript{e} } \textsf{\textit{% 20ᵗʰ \textsc{xx}ᵉ / 20\textsuperscript{th} \textsc{xx}\textsuperscript{e} }} \end{document}
xelatex -interaction=batchmode -halt-on-error -jobname data/superscript-xelatex superscript-xelatex.tex
#set page( paper: "a7", margin: 4mm, ) #set text( font: "Libertinus Serif", size: 12pt, ) #text(size:16pt)[ther] (not superscript) #text(size:26pt)[Xᵗʰᵉʳ] (unicode superscript) #text(size:26pt)[X#text(features: (sups: 1))[ther]] (font feature) // Not yet supported at the time of writing, // See https://github.com/typst/typst/pull/5777 #text(size:26pt)[X#super(typographic: true)[ther]] (typographic super) #text(size:26pt)[X#super(typographic: false)[ther]] (non typographic super) #text( font: "Libertinus Serif", style: "normal" )[ 20ᵗʰ #smallcaps[xx]ᵉ / 20#text(features: (sups:1))[th] #smallcaps[xx]#text(features: (sups:1))[e] / 20#super(typographic: false)[th] #smallcaps[xx]#super(typographic: false)[e] / 20#super(typographic: true)[th] #smallcaps[xx]#super(typographic: true)[e] ] #text( font: "Libertinus Serif", style: "italic" )[ 20ᵗʰ #smallcaps[xx]ᵉ / 20#text(features: (sups:1))[th] #smallcaps[xx]#text(features: (sups:1))[e] / 20#super(typographic: false)[th] #smallcaps[xx]#super(typographic: false)[e] / 20#super(typographic: true)[th] #smallcaps[xx]#super(typographic: true)[e] ] #text( font: "Libertinus Sans", style: "normal" )[ 20ᵗʰ #smallcaps[xx]ᵉ / 20#text(features: (sups:1))[th] #smallcaps[xx]#text(features: (sups:1))[e] / 20#super(typographic: false)[th] #smallcaps[xx]#super(typographic: false)[e] / 20#super(typographic: true)[th] #smallcaps[xx]#super(typographic: true)[e] ] #text( font: "Libertinus Sans", style: "italic" )[ 20ᵗʰ #smallcaps[xx]ᵉ / 20#text(features: (sups:1))[th] #smallcaps[xx]#text(features: (sups:1))[e] / 20#super(typographic: false)[th] #smallcaps[xx]#super(typographic: false)[e] / 20#super(typographic: true)[th] #smallcaps[xx]#super(typographic: true)[e] ]
typst compile superscript-typst.typ superscript-typst.pdf