I need to set subscripts and superscripts automatically in mathematical equations in roman font style for a book publication. I do not want to apply \mathrm{...} to each subscript or superscript separately.

Fortunately I found a solution to globally set subscripts in roman font style in Redefine underscore to produce roman subscript. I made a slight adaptation in order to have all indexes in sequence in roman font style:


Original typeset $x_{abc}^{de}$: original

Roman subscripts with code above $x_{abc}^{de}$: roman subscript

I can, however, not figure out how to apply this code to superscripts. Does anyone have a solution so set both the subscript and superscript font style to roman?

  • can't you just replace _ by ^ and \sb by \sp ? Commented Jul 19, 2017 at 7:47
  • I assume you never raise to the power of a variable, and instead only use descriptive superscripts in your field? Because in $x \mathrm{e}^{\mathrm{x}}$ the two xs are different entities, while in $x \mathrm{e}^x$ they're not.
    – Chris H
    Commented Jul 19, 2017 at 8:53
  • 1
    Correct, I only use descriptive superscripts. Commented Jul 19, 2017 at 9:52

3 Answers 3


I fail to see the rationale for this, however here it is:




  \catcode`_=12 \catcode`^=12




enter image description here

  • I really hope this is because it's a book about a field that only uses descriptive text superscripts rather than powers. I've come across this but can;t recall what uses it.
    – Chris H
    Commented Jul 19, 2017 at 8:56
  • @egreg, thanks a lot for your solution. It works very well for me. Commented Jul 19, 2017 at 9:54
  • The (German) publisher insists on roman subscripts and superscripts. So the only choice I have is to either manually re-format (some older) LaTeX code use this trick to globally change the format. Commented Jul 19, 2017 at 9:58
  • 2
    @christiankral If the publisher tells me that $x_{n}$ must have the “n” in upright type, I tell them they don't know about mathematics. Of course, this depends on what the subscripts/superscripts contain.
    – egreg
    Commented Jul 19, 2017 at 10:50

I wrote the package altsubsup to implement the solution given by egreg as bracket forms of _ and ^. See:




$ x_[roman]^{italic} \quad x_{italic}^[roman] \quad
  x_[roman]^[roman]  \quad x_{italic}^{italic}  $


code with altsubsup package

Bracket forms are displayed using \text, but this can be customized.


Here's a LuaLaTeX-based solution. It doesn't change the catcodes of _ and ^. Instead, it sets up a Lua function and assigns it to the process_input_buffer callback; that way, all instances of _{...} and ^{...} are converted to _{\mathrm{...}} and ^{\mathrm{...}}, respectively, before LaTeX even starts its usual processing.

Whitespace between _/^ and the material enclosed in curly braces is OK. However, the presence of the curly braces is significant: the Lua function will not modify the appearance of y^x and x_n, say.

enter image description here

% !TeX program = lualatex

function make_roman ( s )
  s = string.gsub ( s , "_%s-(%b{})",  "_{\\mathrm%1}" )
  s = string.gsub ( s , "%^%s-(%b{})", "^{\\mathrm%1}" )
  return s 
\AtBeginDocument{\directlua{luatexbase.add_to_callback (
  "process_input_buffer", make_roman , "make_roman" )}}

$x_{abc}^ {de}$ 

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .