Through the looking glass,and what Joseph found there
Joseph Wright

LATEX Project

The xfp package
Floating Point Unit
The LATEX3 Project∗
Released 2018-05-12
This package provides a LATEX 2ε document-level interface to the LATEX3 floating
point unit (part of expl3). It also provides a parallel integer expression interface forconvenience.
\fpeval ?

The expandable command \fpeval takes as its argument a floating point expression andproduces a result using the normal rules of mathematics. As this command is expandable
it can be used where TEX requires a number and for example within a low-level \edef
operation to give a purely numerical result.
Briefly, the floating point expressions may comprise:• Basic arithmetic:√addition x + y, subtraction x − y, multiplication x ∗ y, divisionx/y, square root x, and parentheses.
• Comparison operators: x < y, x <= y, x >? y, x ! = y etc.
• Boolean logic: sign sign x, negation ! x, conjunction x && y, disjunction x || y,ternary operator x ? y : z.
• Exponentials: exp x, ln x, xy .
• Trigonometry: sin x, cos x, tan x, cot x, sec x, csc x expecting their arguments inradians, and sind x, cosd x, tand x, cotd x, secd x, cscd x expecting their arguments

The LATEX 2ε environment– picture mode

The LATEX 2ε environment– picture mode
– color and graphicx– pdftex.def, etc.

The LATEX 2ε environment– picture mode
– color and graphicx– pdftex.def, etc.
– xcolor– xxcolor, colorspace, . . .

The LATEX 2ε environment– picture mode
– color and graphicx– pdftex.def, etc.
– xcolor– xxcolor, colorspace, . . .
– pgf, TikZLATEX 2ε Drivers

LATEX3 drivers%<*package>\ProvidesExplFile%<*dvipdfmx>{l3dvidpfmx.def}{2018-06-14}{}{L3 Experimental driver: dvipdfmx}%</dvipdfmx>%<*dvips>{l3dvips.def}{2018-06-14}{}{L3 Experimental driver: dvips}%</dvips>...

hfunctioni

or extended expressions by taking the result of such an expression to perform
additional calculations. The number of arguments may vary between different
functions, see section 2.3.4 on the next page for details.
Examples: ‘>wheel,30’, ‘>wheel,30,’, ‘>twheel,1,12’, ‘>twheel,-11,12’.

Colo(u)r expressions
hcolor i
hcolor expr iColors Finally, hcolor i is the ‘umbrella’ argument, covering the different concepts of specifying colors. This means, whenever there is a hcolor i argument, thefull range of names and expressions, as explained above, may be used.
2.3.2

Meaning of standard color expressions

We explain now how an expression
hprefix ihnamei!hpcti1 !hnamei1 !hpcti2 ! . . . !hpctin !hnamein hpostfix i
is being interpreted and processed:
1. First of all, the model and color parameters of hnamei are extracted todefine a temporary color htempi. If hpostfix i has the form ‘!![hnumi]’,then htempi will be the corresponding (direct-accessed) color hnumi fromthe series hnamei.
2. Then a color mix, consisting of hpcti1 % of color htempi and (100 − hpcti1 )%of color hnamei1 is computed; this is the new temporary color htempi.
3. The previous step is being repeated for all remaining parameter pairs(hpcti2 ,hnamei2 ), . . . , (hpctin ,hnamein ).
4. If hprefix i consists of an odd number of minus signs ‘-’, then htempi will bechanged into its complementary color.
5. If hpostfix i has the form ‘!!+’, ‘!!++’, ‘!!+++’, etc., a number of step commands (= number of ‘+’ signs) are performed on the underlying color serieshnamei. This has no consequences for the color htempi.
6. Now the color htempi is being displayed or serves as an input for otheroperations, depending on the invoking command.
Note that in a typical step 2 expression htempi!hpctiν !hnameiν , if hpctiν =100resp. hpctiν =0, the color htempi resp. hnameiν is used without further transformations. In the true mix case, 0 <hpctiν < 100, the two involved colors may havebeen defined in different color models, e.g., \definecolor{foo}{rgb}{...} and\definecolor{bar}{cmyk}{...}. In general, the second color, hnameiν , is transformed into the model of the first color, htempi, then the mix is calculated withinModel interconversion– Red–Green–Blue– Cyan–Magenta–Yellow–blacK– Grayscale– Spot color

Model interconversion– Red–Green–Blue– Cyan–Magenta–Yellow–blacK– Grayscale– Spot color
Interconversion is non-trivial!

Motivation– ‘Feature complete’ aims of expl3

Motivation– ‘Feature complete’ aims of expl3– API consistency

Motivation– ‘Feature complete’ aims of expl3– API consistency– Exploit expl3 features: the FPU

Drawing layers

Layer
SystemBaseInterface

Drawing layers

Layer

Tikz/pgf

SystemBaseInterface\pgfsys@moveto\pgfpathmoveto\drawDrawing layers

Layer

Tikz/pgf

l3draw

SystemBaseInterface\pgfsys@moveto\pgfpathmoveto\draw\driver_draw_moveto:nn\draw_path_moveto:n—Drawing\draw_begin:\draw_path_corner_arc:nn { 4pt } { 4pt }\draw_path_moveto:n{ \draw_point_polar:nn { 0 } { 1cm } }\int_step_inline:nnnn { 72 } { 72 } { 359 }{\draw_path_lineto:n{ \draw_point_polar:nn { #1 } { 1cm } }}\draw_path_close:\draw_path_use_clear:n { stroke }\draw_end:

Integration with expl3 concepts

This is text.

\draw_begin:\draw_path_moveto:n { 0cm , 0cm }\draw_path_lineto:n { 0cm , 1cm }\draw_path_use_clear:n { stroke }\hcoffin_set:Nn \l_tmpa_coffin{ This~is~text. }\draw_coffin_use:Nnn \l_tmpa_coffin { hc } { vc }\draw_end:

Expandable expressions

22.72949518869545pt,17.11517943480897pt\tl_set:Nx \l_tmpa_tl{\draw_point_intersect_circles:nnnnn{ (0,0) } { 1cm }{ (sqrt(2),sqrt(3)) } { 1cm }{ 1 }}\tl_to_str:N \l_tmpa_tl

Right arm over, three to come . . .

– Many core pgf functions working

Right arm over, three to come . . .

– Many core pgf functions working– More driver work still required

Right arm over, three to come . . .

– Many core pgf functions working– More driver work still required– Still to do: transparency, objects, etc.

Right arm over, three to come . . .

– Many core pgf functions working– More driver work still required– Still to do: transparency, objects, etc.
– Perhaps an interface to TikZ . . .