# siunitx: spacing between \num and a variable name

I am using siunitx to typeset numbers and units. But when typesetting numbers in front of a variable, I feel a thin space is missing.

For example, with \num{0.1234}a I get (1), and with \num{0.1234}\,a I get (2) which looks better. Is there a way to automate this or do I have to manually put a thin space after each number?

• Assuming that a is some sort of unit you should use \SI{0.1234}{a}. Also, while code snippets are useful in explanations, it is always best to compose a fully compilable MWE that illustrates the problem including the \documentclass and the appropriate packages so that those trying to help don't have to recreate it. – Peter Grill Jan 2 '16 at 10:25

I defined \mynum for you which checks if the next token is of catcode “letter”.

\documentclass{article}
\usepackage{siunitx}
\ExplSyntaxOn

\NewDocumentCommand \mynum { o m }
{
\num [ #1 ] { #2 }
\peek_catcode_ignore_spaces:NT \c_catcode_letter_token { \, }
}

\ExplSyntaxOff
\begin{document}
Normal behaviour (very recommended)
$$\num{0,1234}\,a$$
Desired behaviour
$$\mynum{0,1234}a$$
\end{document}


You can also override the \num command provided by siunitx, which is not recommended. Therefore, I copied the definition of \num from siunitx.sty and appended the relevant bits.

\documentclass{article}
\usepackage{siunitx}

\ExplSyntaxOn

\RenewDocumentCommand \num { o m }
{
% begin from siunitx.sty
\leavevmode
\group_begin:
\IfNoValueF {#1}
{ \keys_set:nn { siunitx } {#1} }
\__siunitx_number_output:n {#2}
\group_end:
% end from siunitx.sty
\peek_catcode_ignore_spaces:NT \c_catcode_letter_token { \, }
}

\ExplSyntaxOff

\begin{document}
$\num{0,1234}a$
\end{document}


• What about $\num{0.1234} a$? – egreg Jan 2 '16 at 15:21
• @egreg That is why it is not recommended. Or use \peek_catcode_ignore_spaces:NT. – Henri Menke Jan 2 '16 at 15:25
• You might use \peek_catcode_ignore_spaces:NT – egreg Jan 2 '16 at 15:28
• As I explained in the other question, do not save and redirect \num, instead look at how it's defined and base your new version on the code-level functions (yes, I know they are marked as 'internal'). – Joseph Wright Jan 2 '16 at 15:44
• Well, you guys are way above my level. Redefining \num seems indeed a bit too much. I was looking for a simple way to automatically generate a thin space between a variable name and a leading coefficient. I guess I will put thin spaces manually. – Bibi Jan 5 '16 at 13:57