I've recently started doing my homework in LaTeX, so I'm still very new to this world. One of the things I don't very much like doing is typing out ^{-1} everytime I want the inverse of something, so I've taken to replacing this with a pre-defined command \newcommand{\inv}{^{-1}}. So far nothing seems to have broken and everything's displaying fine, but I was curious if this is somehow bad practice in LaTeX. Perhaps this results in some miniscule changes I am simply not aware of?
- 185
1 Answers
You run into a problem the moment you want to take e.g. the inverse of a', as a'\inv will yield a double superscript error. This issue annoyed me for many years, and eventually, I created the package SemanTeX to solve this and many other problems. It allows you to type all your math semantically, using keyval syntax, and issues like double superscripts never happen. Here is a code example:
\documentclass{article}
\usepackage{semantex}
\NewVariableClass\MyVar[
output=\MyVar,
define keys={
{inv}{ upper=-1 },
},
]
\NewObject\MyVar\va{a} % this means "variable a"
\begin{document}
$ \va[inv] $, $ \va[prime,inv] $, $ \va[prime,spar,inv] $
\end{document}
Following a request from the comments (not to this answer, but to the original question), I provide a macro \inv taking two optional arguments: an optional *, which adds a prime, and an optional argument, which allows you to raise to a negative power other than -1:
\documentclass{article}
\usepackage{xparse}
\NewDocumentCommand\inv{ s O{1} }
{%
\IfBooleanTF{#1}%
{%
^{\prime-#2}%
}%
{%
^{-#2}%
}%
}
\begin{document}
$ a\inv $, $ a\inv[2] $, $ a\inv* $, $ a\inv*[2] $
\end{document}
You can in principle also use a ' instead of a * by replacing { s O{1} } by { t{'} O{1} }. I did not use this approach, as I don’t really find a\inv' to be an intuitive syntax for a'⁻¹ (the inversion and prime are in the opposite order of how they are printed). But that is entirely a matter of personal taste.
- 12,801
-
1The double superscript error is kind of a dealbreaker, but I have to say that your method looks unnecessarily complicated to me (it could be simply because I'm new to LaTeX and this is actually considered normal). – Hilbert Jr. Nov 10 '20 at 13:26
-
@V.Ch. You have a valid point. My keyval-based approach makes the most sense when writing papers with complicated constructions like
\mathcal{C}_{/X}^{\mathrm{op}}or\mathcal{D}^{b,\ge0}(X). Then I find it blessing to be able to instead write something like\catC[over=\vX,op]and\der[bounded,positive degree]{\vX}. But that is entirely a matter of taste, of course.;-)– Gaussler Nov 10 '20 at 13:32 -
Incidentally, is there a difference between
a'anda\prime? I've been using the former this whole time, but I'm noticing people using the latter in this thread. – Hilbert Jr. Nov 10 '20 at 14:21 -
1In fact,
a'is equivalent toa^{\prime}. Knuth made it this way precisely so that you can typea^{\prime 2}to get a'². You should never writea\prime, however, as this will put a giant prime to the right of youra. – Gaussler Nov 10 '20 at 14:23 -
-
@Gaussler thanks for the updated answer! Is there a difference between DeclareDocumentCommand and NewDocumentCommand in xparse? – Hilbert Jr. Nov 10 '20 at 21:54
-
@Gaussler I'm trying to get the same thing working with NewDocumentCommand, but it's not working so far
\NewDocumentCommand{\inv}{s 0{#1}}{\IfValueTF{#1}{^{\prime-#2}}{^{-#2}}}. – Hilbert Jr. Nov 10 '20 at 22:00 -
1@V.Ch. The Declare variant overrides any previous definitions. I guess I should have used the New variant. Updating the answer with this. – Gaussler Nov 11 '20 at 06:24


^{-1}is directly readable by others and yourself in the future. It is not worth having a new command to save just a few keystrokes(in my opinion).\invcould collide with other things that comes from packages or what you do yourself elsewhere or in the future. – hpekristiansen Nov 10 '20 at 12:39\newcommand{\inv}[1][1]{^{-#1}}, so you can typea\invbut alsoa\inv[2]fora^{-2}. Anyway, as you see, this is mostly a question of opinion. – egreg Nov 10 '20 at 12:45^{-1}everytime. Your proposed improvement is great, I was actually wondering what I'd have to do in case of exponents higher than 1. Is there way to further improve on the command or is that about it? What about what @Gaussler mentions below, about it interfering with other superscripts, is there a way of circumventing that? – Hilbert Jr. Nov 10 '20 at 13:23\invofa'as in my answer, you could use thexparsepackage to allow this. For instance, you could add an optional star so thata\inv*producesa^{\prime -1}. – Gaussler Nov 10 '20 at 13:46;-)– Gaussler Nov 10 '20 at 19:52\inv a, nota\inv. Just so it feels more like a function. – Paŭlo Ebermann Nov 10 '20 at 23:44^{-1}is the worst idiom. For one simple concept you need five characters, threeshifts, three little finger presses, and it induces grouping issues. Anything you can come up with is strictly better if you use it frequently enough. – Symbol 1 Nov 11 '20 at 02:56