3
$\begingroup$

When I try to format a number that has a big exponent with TeXForm the following happens:

In[1]:= TeXForm[1.543*10^-10 ]

Out[1]//TeXForm=
    \text{1.543$\grave{ }$*${}^{\wedge}$-10}

But I would like to get something like 1.543 \cdot 10^{-10}. Is there any workaround for this?

$\endgroup$
0

3 Answers 3

5
$\begingroup$

You could use ScientificForm[] for starters:

TeXForm[ScientificForm[1.543*10^-10]]
   1.543\times 10^{-10}
$\endgroup$
5
$\begingroup$

Here is another approach that addresses some issues you may (or may not) encounter: With the built-in formats like ScientificForm, there is an aesthetic problem:

TeXForm[ScientificForm[1.*10^-10]]

1.\times 10^{-10}

Notice that trailing decimal points are printed after machine-precision numbers even when there's no digits to the right.

Also, you wanted a centered dot to represent the multiplication. Both of these issues can be addressed with the following wrapper function:

tF[x_?MachineNumberQ] := 
 TeXForm@NumberForm[x, 
   NumberFormat -> (DisplayForm@
       RowBox[Join[{StringTrim[#1, RegularExpression["\\.$"]]}, 
         If[#3 =!= "", {"\[CenterDot]", 
           SuperscriptBox[#2, #3]}, {}]]] &)]

An example is:

tF[1.34 10^-10]

1.34\cdot 10^{-10}

A slightly different way to implement this would be to declare this as a Format that only kicks in during TeXForm output:

Format[tN[x_?MachineNumberQ], TeXForm] := 
 NumberForm[x, 
  NumberFormat -> (DisplayForm@
      RowBox[Join[{StringTrim[#1, RegularExpression["\\.$"]]}, 
        If[#3 =!= "", {"\[CenterDot]", 
          SuperscriptBox[#2, #3]}, {}]]] &)]

Format[tN[x_]] := x

With this, you could wrap any expression you want with the tN function, and it will display as if tN weren't there. But if you apply TeXForm, the output is changed:

tN[1. 10^-10]

$1. \times 10^{-10}$

TeXForm[%]

1\cdot 10^{-10}

The centered dot and the removed decimal point can be seen only in the last line where TeXForm was applied.

It depends on the application whether you would want to use a wrapper with a Format like tN, or a simple conversion function like tF.

The formatting in these wrapper functions relies on NumberForm, and I basically borrowed the function trimPoint from my answer here.

$\endgroup$
2
  • $\begingroup$ One might also consider using MantissaExponent[] for such manipulations... $\endgroup$ Nov 15, 2012 at 0:23
  • $\begingroup$ That's the same thing that NumberFormat does. Here the main point is that you want the flexibility provided by NumberForm to introduce, e.g., the \cdot multiplication symbol. $\endgroup$
    – Jens
    Nov 15, 2012 at 3:49
3
$\begingroup$

The answer by @Jens should be good enough, but unfortunately defining TeXForm formats using Format works only at the top level. For instance:

tN[1.543*^-10] //TeXForm

$1.543\cdot 10^{-10}$

works well, while:

{tN[1.543*^-10]} //TeXForm

$\{\text{1.543$\grave{ }$*${}^{\wedge}$-10}\}$

does not. One can instead define TraditionalForm MakeBoxes rules:

Clear[tN];
tN /: MakeBoxes[tN[x_Real], TraditionalForm] := MakeBoxes[
    NumberForm[
        x,
        NumberMultiplier -> "\[CenterDot]"
    ],
    TraditionalForm
]

Then:

tN[1.543*^-10] //TeXForm

$1.543\cdot 10^{-10}$

and

{tN[1.543*^-10]} //TeXForm

$\left\{1.543\cdot 10^{-10}\right\}$

both work as expected.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.