Jump to content

Manual:Converting between ParserFunctions syntax and TeX syntax

From mediawiki.org

It would be convenient to be able to use the same wikitext in evaluating a numerical expression with ParserFunctions and as TeX code for nicely displaying it. However, there are several issues.

Same code is possible, but display could be better

[edit]

Example: "{{#expr:1+2e11*3/(4+5^6)}}" → "38390173.115938" [1]

"{{#tag:math|1+2e11*3/(4+5^6)}}" → "" [2]

In this example the same wikitext is suitable for ParserFunctions and for TeX. Advantages of using TeX for the display, over displaying the raw wikitext, include the nice display of a power with a one-character exponent. An advantage of the wikitext being suitable for TeX is also the possibility to incorporate the wikitext in a larger TeX string, with also parts which no not require automatic evaluation. However, preferable in displaying the expression might additionally be:

  • normal power notation instead of e-notation
  • × instead of *
  • division with a horizontal division bar

Same code is not directly possible

[edit]

In addition to incompatibility with postfix function calls as well as nested template calls, it is not directly possible to use the same expression for a power with a multi-character exponent, because TeX requires braces, while ParserFunctions does not allow them:

"{{#expr:2^10}}" → "1024" [3]

"{{#tag:math|2^10}}" → "" [4]

"{{#expr:2^(10)}}" → "1024" [5]

"{{#tag:math|2^(10)}}" → "" [6]

"{{#expr:2^{10}}" → "Expression error: Unrecognized punctuation character "{"." [7]}

"{{#tag:math|2^{10}}}" → "" [8]

Remedy

[edit]

One can put the expression in a template like Template:Example expression for common use by ParserFunctions and TeX, with a parameter that is given the value "c" for a calculation and "d" for display. Using Template:TeX grouping operator the power in the example can now be written 2^{{()|{{{1}}}|10}}:


{{#expr:2^{{TeX grouping operator|c|10}}}} gives 1024

{{#tag:math|2^{{TeX grouping operator|d|10}}}} gives


Similarly we can use Template:Frac to produce either a division in ParserFunctions syntax, or a division with a horizontal bar in TeX syntax. Thus:

{{#expr:{{Example expression for common use by ParserFunctions and TeX|c}}}} gives 9.8134406521937

{{#tag:math|{{Example expression for common use by ParserFunctions and TeX|d}}}} gives

Using Template:Tex number, which takes the output of #expr and converts it to a TeX string, we can create TeX output including the result of the computation:

{{#tag:math|g=\frac{GM}{R^2}={{Example expression for common use by ParserFunctions and TeX|d}}={{Tex number|{{Example expression for common use by ParserFunctions and TeX|c}}}} m/s^2}} gives:

The numeric expression can be changed at one place, in its template, to produce new TeX output with automatically updated numeric result.

Another example is Template:Example expression for common use by ParserFunctions and TeX: escape velocity; this time parameter {{{1}}} can also be "f" for formula, for this value the template produces the TeX code for the formula without numbers substituted in it. Also, the template uses Template:Sqrt. Thus:

{{#tag:math|v_e = {{Example expression for common use by ParserFunctions and TeX: escape velocity|f}}={{Example expression for common use by ParserFunctions and TeX: escape velocity|d}}={{Tex number|{{Example expression for common use by ParserFunctions and TeX: escape velocity|c}}}} m/s}} gives:

Now the formula can be changed in its template, to produce new TeX output for both the formula and the computation, and automatically updated numeric result.