23

In LaTeX, the ex unit represents the height of a lowercase 'x' in the current font.

Is there a length in LaTeX that represents the height of a capital 'X'?

sergej
  • 6,461
  • 32
  • 62

1 Answers1

31

The information about 1ex is stored in the font; it is usually the height of a lowercase ‘x’, but it need not be necessarily.

You can access the height of an uppercase ‘X’ by

\fontcharht\font`X

A way for expressing lengths in this ‘unit of measure’ is

\newcommand{\eX}{\dimexpr\fontcharht\font`X\relax}

so you can say something like

\vspace{1.2\eX}

or

\setlength{\mylen}{2\eX}

where \mylen has been allocated with \newlength.

egreg
  • 1,121,712
  • Somehow off-topic comment-question (;-)): Which commands do define 1ex to be (most times) the height of an x and which do deviate from them, and why? –  Jun 20 '14 at 13:46
  • 1
    @ChristianHupfer See Johan's answer Q:4239 – percusse Jun 20 '14 at 13:47
  • 5
    @ChristianHupfer No command defines 1ex; it's information stored in the font, it's the font designer's responsibility fixing it. – egreg Jun 20 '14 at 13:48
  • @egreg: I see -- I just thought, it is some command extracting some information from font and calculating 1ex then. –  Jun 20 '14 at 13:50
  • @egreg Thanks for your Answer and the background information! I am trying to do something like \tikz[baseline=-.5\eX] but it does not seem to work. Am I missing something? – sergej Jun 20 '14 at 13:55
  • 4
    @ChristianHupfer When a font is loaded, TeX builds an internal array where the \fontdimen parameters defined in the font are stored. A font need have at least seven \fontdimen parameters, but may have more (math symbol fonts need 22, math extension fonts need 13). The x-height is \fontdimen5; when TeX scans 1ex or 2.5ex, it looks at the internal array for the fifth value; you could also say 2.5\fontdimen5\font and achieve the same result. – egreg Jun 20 '14 at 13:55
  • @sergej This seems to work: A\tikz[baseline=-1\eX]\draw(0,0)--(1,0);B – egreg Jun 20 '14 at 14:04
  • @egreg It works with \tikz[baseline=-.5\mylen]... – sergej Jun 20 '14 at 14:11
  • @sergej Maybe a new question with a full (non)working example is better. – egreg Jun 20 '14 at 14:13
  • 3
    The \fontcharht is the case of the eTeX extension. It isn't icluded in standard TeX. The \dimexpr is the same case. – wipet Jun 23 '14 at 20:15
  • @egreg is using \relax here the right approach? that disallows using this unit as part of a skip specification for example – Frank Mittelbach Jun 25 '14 at 06:13
  • @FrankMittelbach The \relax is gobbled when \dimexpr is evaluated. – egreg Jun 25 '14 at 08:22
  • @egreg makes sense really - should have tried before making the comment :-( – Frank Mittelbach Jun 25 '14 at 08:52
  • @FrankMittelbach Probably a better choice would have been \endexpr instead of \relax, but I don't know the details of the implementation. – egreg Jun 25 '14 at 09:02