26

In in-line math mode, I tend to use the literal slash (i.e. /) to denote division. Unlike the common binary operators [+ - \times \div], / is treated as an ordinary math object, though. This may easily result in inconsistent (asymmetric) horizontal spacing, for instance when / is preceded by a variable and succeeded by a function, as in the following example:

\documentclass{article}

\usepackage{amsmath}

\begin{document}

\noindent
\(\tan x = \sin x / \cos x\)

\end{document}

Output:

Of course, I can correct the horizontal spacing by turning \cos x into an ordinary math object:

\(\tan x = \sin x / {\cos x}\)

Output:

Alternatively, I can make / function as a binary operator similar to [+ - \times \div]:

\(\tan x = \sin x \mathbin{/} \cos x\)

Output:

Now, I am curious: Which of the above two workarounds should be preferred? Or is there even a better one?

10
  • 6
    my preference would be to treat it as a binary operator. Aug 22, 2012 at 14:44
  • 4
    Knuth decided not to have / behave as a binary operator, following printer's traditions ("printer" as in "someone who operates a printing press".) (I guess that's well known to you, @barbarabeeton.) Aug 22, 2012 at 15:53
  • 3
    @mhp: Yes indeed! But you made a very interesting observation in your question! Somehow it would be nice if / would be clever enough to behave in the correct way automatically if followed by a mathop. Aug 22, 2012 at 16:36
  • 2
    @mhp In chapter 18 of the TeXbook, $n/\!\log n$ is recommended. Doing this is equivalent to $n/{\log n}$, but I'd prefer using \!`.
    – egreg
    Aug 22, 2012 at 17:46
  • 2
    @HendrikVogt -- er, umm, indeed. what you say is true. but it's also true that the space on either side of the slash should be uniform. i've done a little research in the books on math typesetting that i have on my shelf, and the spaces in pre-tex examples were almost always visually equal in width. i found one tex example (not in the texbook; thanks @egreg) with a slash followed by \log and there the wider space on the right was camouflaged by the height of the l. maybe this is a topic for a disquisition on "niceties"; i'll pursue that. Aug 22, 2012 at 17:47

3 Answers 3

17

You should definitely prefer the version \sin x / {\cos x} with the small spaces, or \sin x / \!\cos x as egreg suggests. From the TeXbook, page 132:

TeX does not treat / as a binary operation, even though a slash stands for division (which qualifies as a binary operation on mathematical grounds). The reason is that printers traditionally put extra space around the symbols +, , and *, but not around /.

Knuth continues, explaining that 1 \mathbin{/} 2 would come out

one half

which is wrong; so TeX considers / to be an ordinary symbol.

And from page 170:

In the formula $n/\log n$, TeX automatically inserts an unwanted thin space before \log, since the slash is treated as an ordinary symbol, and since a thin space is usually desirable between an ordinary symbol and an operator like \log.

4
  • 1
    This only explains why / is treated differently by TeX, not why one shouldn't treat it as a binary operator oneself. IMHO “tradition” is not a very strong argument if it is one at all… (BTW: I don't actually have an opinion whether / should be a binary operator or not…)
    – cgnieder
    Aug 22, 2012 at 20:53
  • @cgnieder: "Tradition" often is not a strong argument, true, but I do respect printers traditions a lot. See also my edit. Aug 23, 2012 at 11:55
  • Don't get me wrong: I do respect printers' tradition very much, too! But I find the picture much more convincing!
    – cgnieder
    Aug 23, 2012 at 11:59
  • @cgnieder: That's what I hoped for :-) Thanks for inducing me to add the picture! Aug 23, 2012 at 12:05
10

In your case you use / as binary operator: \mathbin{/}:

$a \mathbin{/} b$

As an abbreviation a command could be defined to act as slash as binary operator:

\mathchardef\mslash="202F
$a \mslash b$

Or the symbol / can be changed globally to act as binary operator:

\mathcode`\/="202F
$a / b$

The starting number is the class, 0x200 is binary operator. The last two digits of the hexadecimal number 2F is the character code of /.

1
  • 2
    Typographically I wouldn't recommend doing that, see my comment to the question. Aug 22, 2012 at 15:53
1

There are three LaTeX packages that seem to help: xfrac, nicefrac and (possibly) faktor (which last I have never looked at; there is a reference to it in the catalogue entry for nicefrac). Note that xfrac is a LaTeX-3-coded package.

It is possible that none of those help, but I would sooner use a tried-and-tested package than twiddle with the inner workings of maths mode (which generally makes me feel slightly ill).

2
  • 1
    It would be great if you can give the snapshots of the output with simple examples.
    – percusse
    Aug 23, 2012 at 13:56
  • As far as I know the xfrac package can’t help in this context. But I suspect it theoretically could.
    – mhp
    Aug 23, 2012 at 20:09

You must log in to answer this question.

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