diff options
Diffstat (limited to 'Master/texmf-dist')
-rw-r--r-- | Master/texmf-dist/doc/latex/media9/ChangeLog | 9 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/media9/media9.pdf | bin | 1589265 -> 1589635 bytes | |||
-rw-r--r-- | Master/texmf-dist/doc/latex/media9/media9.tex | 73 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/media9/media9.sty | 126 |
4 files changed, 95 insertions, 113 deletions
diff --git a/Master/texmf-dist/doc/latex/media9/ChangeLog b/Master/texmf-dist/doc/latex/media9/ChangeLog index 182d3185ebc..e0b3c3f92c4 100644 --- a/Master/texmf-dist/doc/latex/media9/ChangeLog +++ b/Master/texmf-dist/doc/latex/media9/ChangeLog @@ -1,8 +1,15 @@ +2012-09-07 + * v0.12 + * new: command option `3Dpsob' and 3d views file entry `PSOB' added on + request of J. Bowman (Asymptote) + * fix: empty option list of \includemedia led to crash, improved Asymptote + compatibility + 2012-08-14 * v0.11 * new: package option `bigfiles' added which defers file embedding to the ps->pdf step; needed when latex aborts with error `TeX capacity exceeded' - + fix: minor fixes in 3Dmenu.js and media9.sty + * fix: minor fixes in 3Dmenu.js and media9.sty 2012-07-31 * v0.9, v.10 diff --git a/Master/texmf-dist/doc/latex/media9/media9.pdf b/Master/texmf-dist/doc/latex/media9/media9.pdf Binary files differindex ac72412c640..9005f612716 100644 --- a/Master/texmf-dist/doc/latex/media9/media9.pdf +++ b/Master/texmf-dist/doc/latex/media9/media9.pdf diff --git a/Master/texmf-dist/doc/latex/media9/media9.tex b/Master/texmf-dist/doc/latex/media9/media9.tex index 4fefb902b9a..6c4e0fa6585 100644 --- a/Master/texmf-dist/doc/latex/media9/media9.tex +++ b/Master/texmf-dist/doc/latex/media9/media9.tex @@ -99,7 +99,7 @@ The final PDF can be viewed in current Adobe Readers on MS Windows and other pla \section{Requirements} \begin{trivlist} -\makeatletter +\makeatletter \item l3kernel (\LaTeX{} package), version $\ge \g@mix@liiikerneldate$ \item l3packages (\LaTeX{} package), version $\ge \g@mix@liiipkgdate$ \makeatother @@ -272,6 +272,10 @@ Prescribes an initial camera roll around the optical axis (in clockwise directio \end{verbatim} This option directly sets the camera-to-world transformation matrix according to the PDF specification. This is an expert option to be used \emph{instead} of the `\verb+3Dc2c+', `\verb+3Dcoo+' and `\verb+3Droll+' options. Only fixed point real numbers are accepted. \begin{verbatim} +3Dpsob=Min | Max | W | H +\end{verbatim} +Expert option which directly sets either the \verb+/PS+ entry in case of perspective projection or the \verb+/OB+ entry in case of orthographic projection to one of the four possible values. Default value is \verb+Min+. +\begin{verbatim} 3Droo=<r> \end{verbatim} \verb+<r>+ is a positive fixed or floating point number specifying the radius of orbit $ROO$ of the virtual camera. Good values can be found by means of the `\verb+3Dmenu+' option. @@ -398,19 +402,20 @@ Things like animation, lighting, background of 3D objects etc. may also be scrip \caption{Entries in a {\tt VIEW} section.}\label{tab:views} \begin{tabular}[t]{p{0.24\linewidth}lp{0.4\linewidth}}\hline key & type & remarks\\\hline\hline - COO & three numbers & centre of orbit, see option `{\tt 3Dcoo}'\\ - C2C & three numbers & centre of orbit to camera vector, see option `{\tt 3Dc2c}'\\ - ROO & number & radius of orbit, see option `{\tt 3Droo}'\\ - C2W & 12 numbers & camera-to-world transformation matrix, see option `{\tt 3Dc2w}'\\ - AAC & number & camera aperture angle, see option `{\tt 3Daac}'\\ - ORTHO & number (optional) & enables orthographic view, see option `{\tt 3Dortho}'\\ - ROLL & number & camera roll, see option `{\tt 3Droll}'\\ - BGCOLOR & three numbers & 3D scene background colour (RGB), see option `{\tt 3Dbg}'\\ - RENDERMODE & string & render mode of the 3D object, see option `{\tt 3Drender}'\\ - LIGHTS & string & lighting scheme, see option `{\tt 3Dlights}'\\ - PARTSATTRS & string & allowed values are `{\tt keep}' and `{\tt restore}'; decides on whether to restore or not original part attributes before applying new ones from this view; see option `{\tt 3Dpartsattrs}'\\ - PART\,\,(sub-sec\-tion) & string & part name as in the model tree; optional if a UTF16NAME entry is present in the sub-section opened by a PART keyword, otherwise required; see Table~\ref{tab:parts} for list of possible entries\\ - CROSSSECT~(sub-section) & -- & see Table~\ref{tab:crosss} for list of possible entries\\ + {\tt COO} & three numbers & centre of orbit, see option `{\tt 3Dcoo}'\\ + {\tt C2C} & three numbers & centre of orbit to camera vector, see option `{\tt 3Dc2c}'\\ + {\tt ROO} & number & radius of orbit, see option `{\tt 3Droo}'\\ + {\tt C2W} & 12 numbers & camera-to-world transformation matrix, see option `{\tt 3Dc2w}'\\ + {\tt AAC} & number & camera aperture angle, see option `{\tt 3Daac}'\\ + {\tt ORTHO} & number (optional) & enables orthographic view, see option `{\tt 3Dortho}'\\ + {\tt PSOB} & string & expert setting, see option `{\tt 3Dpsob}'\\ + {\tt ROLL} & number & camera roll, see option `{\tt 3Droll}'\\ + {\tt BGCOLOR} & three numbers & 3D scene background colour (RGB), see option `{\tt 3Dbg}'\\ + {\tt RENDERMODE} & string & render mode of the 3D object, see option `{\tt 3Drender}'\\ + {\tt LIGHTS} & string & lighting scheme, see option `{\tt 3Dlights}'\\ + {\tt PARTSATTRS} & string & allowed values are `{\tt keep}' and `{\tt restore}'; decides on whether to restore or not original part attributes before applying new ones from this view; see option `{\tt 3Dpartsattrs}'\\ + {\tt PART}\,\,(sub-sec\-tion) & string & part name as in the model tree; optional if a {\tt UTF16NAME} entry is present in the sub-section opened by a {\tt PART} keyword, otherwise required; see Table~\ref{tab:parts} for list of possible entries\\ + {\tt CROSSSECT}~(sub-section) & -- & see Table~\ref{tab:crosss} for list of possible entries\\ \hline \end{tabular} \end{table} @@ -420,11 +425,11 @@ Things like animation, lighting, background of 3D objects etc. may also be scrip \caption{Entries in a {\tt PART} sub-section.}\label{tab:parts} \begin{tabular}[t]{llp{0.5\linewidth}}\hline key & type & remarks\\\hline\hline - UTF16NAME & hex string & part name in UTF-16 (aka Unicode), encoded as a hexadecimal string; optional, but useful for part names composed of non-latin characters;\\ - VISIBLE & boolean & a flag (`{\tt true}' or `{\tt false}') indicating the visibility of this part\\ - OPACITY & number & a number between 0.0 and 1.0 specifying the opacity of this part\\ - RENDERMODE & string & rendermode of this part, overrides global {\tt RENDERMODE} value in parent {\tt VIEW} section, see option `{\tt 3Drender}'\\ - TRANSFORM & 12 numbers & transformation matrix defining the part's position and scaling\\ + {\tt UTF16NAME} & hex string & part name in UTF-16 (aka Unicode), encoded as a hexadecimal string; optional, but useful for part names composed of non-latin characters;\\ + {\tt VISIBLE} & boolean & a flag (`{\tt true}' or `{\tt false}') indicating the visibility of this part\\ + {\tt OPACITY} & number & a number between 0.0 and 1.0 specifying the opacity of this part\\ + {\tt RENDERMODE} & string & rendermode of this part, overrides global {\tt RENDERMODE} value in parent {\tt VIEW} section, see option `{\tt 3Drender}'\\ + {\tt TRANSFORM} & 12 numbers & transformation matrix defining the part's position and scaling\\ \hline \end{tabular} \end{table} @@ -434,8 +439,8 @@ Things like animation, lighting, background of 3D objects etc. may also be scrip \caption{Entries in a {\tt CROSSSECT} sub-section.}\label{tab:crosss} \begin{tabular}[t]{llp{0.5\linewidth}}\hline key & type & remarks\\\hline\hline - CENTER & three numbers & central point coordinates of the section plane\\ - NORMAL & three numbers & normal vector coordinates of the section plane pointing into the cut-off region\\ + {\tt CENTER} & three numbers & central point coordinates of the section plane\\ + {\tt NORMAL} & three numbers & normal vector coordinates of the section plane pointing into the cut-off region\\ \hline \end{tabular} \end{table} @@ -547,15 +552,15 @@ parameter & description\\\hline\hline \centering \begin{Verbatim} \includemedia[ - label=some_dice, % defines JavaScript object annotRM['some_dice'] + label=some_dice, % defines JavaScript object annotRM['some_dice'] width=0.4\linewidth,height=0.3\linewidth, activate=pageopen, - addresource=files/random.mp4, %two video files - addresource=files/cube.mp4, + addresource=random.mp4, %two video files + addresource=cube.mp4, flashvars={ - source=files/random.mp4 % same path as in addresource! - &loop=true % loop video - &scaleMode=letterbox % preserve aspect ratio while scaling the video + source=random.mp4 + &loop=true % loop video + &scaleMode=letterbox % preserve aspect ratio while scaling the video } ]{}{VPlayer.swf} @@ -568,13 +573,13 @@ parameter & description\\\hline\hline \PushButton[ onclick={ annotRM['some_dice'].activated=true; - annotRM['some_dice'].callAS('setSource', 'files/random.mp4'); + annotRM['some_dice'].callAS('setSource', 'random.mp4'); } ]{\fbox{random.mp4}} \PushButton[ onclick={ annotRM['some_dice'].activated=true; - annotRM['some_dice'].callAS('setSource', 'files/cube.mp4'); + annotRM['some_dice'].callAS('setSource', 'cube.mp4'); } ]{\fbox{cube.mp4}} \end{Verbatim} @@ -583,18 +588,18 @@ parameter & description\\\hline\hline label=some_dice, width=0.6\linewidth,height=0.45\linewidth, activate=pageopen, - addresource=files/random.mp4, - addresource=files/cube.mp4, + addresource=random.mp4, + addresource=cube.mp4, flashvars={ - source=files/random.mp4 + source=random.mp4 &loop=true &scaleMode=letterbox } ]{}{VPlayer.swf}\hfill} \makebox[\linewidth]{\hfill% \PushButton[onclick={annotRM['some_dice'].activated=true;annotRM['some_dice'].callAS('playPause');}]{\fbox{\strut Play/Pause}} - \PushButton[onclick={annotRM['some_dice'].activated=true;annotRM['some_dice'].callAS('setSource', 'files/random.mp4');}]{\fbox{\strut random.mp4}} - \PushButton[onclick={annotRM['some_dice'].activated=true;annotRM['some_dice'].callAS('setSource', 'files/cube.mp4');}]{\fbox{\strut cube.mp4}} + \PushButton[onclick={annotRM['some_dice'].activated=true;annotRM['some_dice'].callAS('setSource', 'random.mp4');}]{\fbox{\strut random.mp4}} + \PushButton[onclick={annotRM['some_dice'].activated=true;annotRM['some_dice'].callAS('setSource', 'cube.mp4');}]{\fbox{\strut cube.mp4}} \hfill} \caption{Example of playing back two different embedded MP4 video files in the same video player instance. The player, `VPlayer.swf', is also embedded in the PDF. Exposed ActionScript functions `{\tt playPause}' and `{\tt setSource}' of `VPlayer.swf' (Table~\ref{AVPlayerMethods}) are used to set-up the JavaScript actions of interactive push buttons.}\label{videoa} \end{figure} diff --git a/Master/texmf-dist/tex/latex/media9/media9.sty b/Master/texmf-dist/tex/latex/media9/media9.sty index 8c6096b6285..3bb5afa0dee 100644 --- a/Master/texmf-dist/tex/latex/media9/media9.sty +++ b/Master/texmf-dist/tex/latex/media9/media9.sty @@ -39,8 +39,8 @@ \RequirePackage{l3keys2e} \RequirePackage{ifpdf} -\def\g@mix@date@tl{2012/08/14} -\def\g@mix@version@tl{0.11} +\def\g@mix@date@tl{2012/09/07} +\def\g@mix@version@tl{0.12} \def\g@mix@liiikerneldate{2012/07/16} \def\g@mix@liiipkgdate{2012/07/16} @@ -303,6 +303,7 @@ \tl_gset_eq:NN\g_mix_opt_bg_tl\g_mix_pkgopt_bg_tl \tl_gset_eq:NN\g_mix_opt_ls_tl\g_mix_pkgopt_ls_tl \tl_gset_eq:NN\g_mix_opt_rm_tl\g_mix_pkgopt_rm_tl + \tl_gset:Nn\g_mix_opt_psob_tl{Min} \tl_gset:Nn\g_mix_opt_coo_tl{0~0~0} \tl_gset:Nn\g_mix_opt_ctoc_tl{0~-1~0} \tl_gset:Nn\g_mix_opt_ciiw_tl{} @@ -324,6 +325,7 @@ \tl_set:Nn\l_mix_bg_tl{} \tl_set:Nn\l_mix_ls_tl{} \tl_set:Nn\l_mix_rm_tl{} + \tl_set:Nn\l_mix_psob_tl{Min} \tl_set:Nn\l_mix_coo_tl{0~0~0} \tl_set:Nn\l_mix_ctoc_tl{0~-1~0} \tl_set:Nn\l_mix_ciiw_tl{} @@ -510,7 +512,7 @@ \iow_new:N\g_mix_mstreams_stream \iow_open:Nn\g_mix_mstreams_stream{\jobname.m9} \iow_now:Nn\g_mix_mstreams_stream{ - 1~dict~begin~ + 1~dict~begin /o{mark/_objdef}bind~def/O{/type/stream/OBJ~pdfmark}bind~def /m~systemdict/mark~get~def /P{/ASCIIHexDecode~filter/PUT~pdfmark}bind~def @@ -518,9 +520,9 @@ } } } + \bool_if:NT\g_mix_pkgbigfiles_bool{ - \RequirePackage{atenddvi} - \AtEndDvi{ + \AtEndDocument{ \iow_now:Nn\g_mix_mstreams_stream{end} \iow_close:N\g_mix_mstreams_stream } @@ -969,7 +971,7 @@ \NewDocumentCommand\addmediapath{m}{\file_path_include:n{#1/}} -\NewDocumentCommand\includemedia{omm}{%#1 options, #2 text/image #3 media file +\NewDocumentCommand\includemedia{O{}mm}{%#1 options, #2 text/image #3 media file \group_begin: \leavevmode \mix_reset: @@ -1059,6 +1061,7 @@ \tl_set_eq:NN\l_mix_bg_tl\g_mix_opt_bg_tl \tl_set_eq:NN\l_mix_ls_tl\g_mix_opt_ls_tl \tl_set_eq:NN\l_mix_rm_tl\g_mix_opt_rm_tl + \tl_set_eq:NN\l_mix_psob_tl\g_mix_opt_psob_tl \tl_set_eq:NN\l_mix_coo_tl\g_mix_opt_coo_tl \tl_set_eq:NN\l_mix_ctoc_tl\g_mix_opt_ctoc_tl \tl_set_eq:NN\l_mix_ciiw_tl\g_mix_opt_ciiw_tl @@ -1204,34 +1207,6 @@ \group_end: \cs_set_eq:NN\mix_uriend:\group_end: -% macro to format a real number in tl variable -% * to show at most 9 places after `.' -% * trailing zeros removed -\cs_new_protected:Nn\mix_format_num:N{ - \fp_compare:nNnF{#1}={\fp_to_int:n{#1}}{ - \tl_set:Nx#1{\exp_after:wN\mix_format_num:w#1\q_stop} - } -} -\cs_new:Npn\mix_format_num:w#1.#2\q_stop{ - #1.\exp_after:wN\mix_trim_places:w#2000000000\q_stop -} -\cs_new:Npn\mix_trim_places:w#1#2#3#4#5#6#7#8#9\q_stop{ - \mix_trim_zeros:f{\exp_after:wN\tl_head:w#9\q_stop#8#7#6#5#4#3#2#1} -} -\cs_new:Nn\mix_trim_zeros:n{ - \exp_after:wN\mix_trim_zeros:w#1\q_stop -} -\cs_generate_variant:Nn\mix_trim_zeros:n{f} -\cs_new:Npn\mix_trim_zeros:w#1#2\q_stop{ - \str_if_eq:nnTF{#1}{0}{ - \int_compare:nNnTF{\tl_length:n{#2}}>{\c_one}{ - \exp_after:wN\mix_trim_zeros:w#2\q_stop - }{#2} - }{ - \tl_reverse:n{#2}#1 - } -} - %macro for building the C2W transformation matrix \cs_new:Npn\mix_calc_ciiw:w#1~#2~#3~#4~#5~#6\q_stop{ % #1,#2,#3 centre of orbit coordinates (coo) @@ -1316,30 +1291,18 @@ \fp_set:Nn\l_mix_transz_fp{#3 - \l_mix_roo_fp*\l_mix_viewz_fp} %format elements of transformation matrix - \tl_set:Nx\l_mix_leftx_tl {\fp_use:N\l_mix_leftx_fp } - \tl_set:Nx\l_mix_lefty_tl {\fp_use:N\l_mix_lefty_fp } - \tl_set:Nx\l_mix_leftz_tl {\fp_use:N\l_mix_leftz_fp } - \tl_set:Nx\l_mix_upx_tl {\fp_use:N\l_mix_upx_fp } - \tl_set:Nx\l_mix_upy_tl {\fp_use:N\l_mix_upy_fp } - \tl_set:Nx\l_mix_upz_tl {\fp_use:N\l_mix_upz_fp } - \tl_set:Nx\l_mix_viewx_tl {\fp_use:N\l_mix_viewx_fp } - \tl_set:Nx\l_mix_viewy_tl {\fp_use:N\l_mix_viewy_fp } - \tl_set:Nx\l_mix_viewz_tl {\fp_use:N\l_mix_viewz_fp } - \tl_set:Nx\l_mix_transx_tl{\fp_use:N\l_mix_transx_fp} - \tl_set:Nx\l_mix_transy_tl{\fp_use:N\l_mix_transy_fp} - \tl_set:Nx\l_mix_transz_tl{\fp_use:N\l_mix_transz_fp} - \mix_format_num:N\l_mix_leftx_tl - \mix_format_num:N\l_mix_lefty_tl - \mix_format_num:N\l_mix_leftz_tl - \mix_format_num:N\l_mix_upx_tl - \mix_format_num:N\l_mix_upy_tl - \mix_format_num:N\l_mix_upz_tl - \mix_format_num:N\l_mix_viewx_tl - \mix_format_num:N\l_mix_viewy_tl - \mix_format_num:N\l_mix_viewz_tl - \mix_format_num:N\l_mix_transx_tl - \mix_format_num:N\l_mix_transy_tl - \mix_format_num:N\l_mix_transz_tl + \tl_set:Nx\l_mix_leftx_tl {\fp_to_decimal:n{round((\l_mix_leftx_fp),9)} } + \tl_set:Nx\l_mix_lefty_tl {\fp_to_decimal:n{round((\l_mix_lefty_fp),9)} } + \tl_set:Nx\l_mix_leftz_tl {\fp_to_decimal:n{round((\l_mix_leftz_fp),9)} } + \tl_set:Nx\l_mix_upx_tl {\fp_to_decimal:n{round((\l_mix_upx_fp),9)} } + \tl_set:Nx\l_mix_upy_tl {\fp_to_decimal:n{round((\l_mix_upy_fp),9)} } + \tl_set:Nx\l_mix_upz_tl {\fp_to_decimal:n{round((\l_mix_upz_fp),9)} } + \tl_set:Nx\l_mix_viewx_tl {\fp_to_decimal:n{round((\l_mix_viewx_fp),9)} } + \tl_set:Nx\l_mix_viewy_tl {\fp_to_decimal:n{round((\l_mix_viewy_fp),9)} } + \tl_set:Nx\l_mix_viewz_tl {\fp_to_decimal:n{round((\l_mix_viewz_fp),9)} } + \tl_set:Nx\l_mix_transx_tl{\fp_to_decimal:n{round((\l_mix_transx_fp),9)}} + \tl_set:Nx\l_mix_transy_tl{\fp_to_decimal:n{round((\l_mix_transy_fp),9)}} + \tl_set:Nx\l_mix_transz_tl{\fp_to_decimal:n{round((\l_mix_transz_fp),9)}} %concat elements to matrix \tl_set:Nx\l_mix_ciiw_tl{ @@ -1360,19 +1323,16 @@ % 3D view object \cs_new:Nn\mix_view:n{ - \tl_set:Nx\l_mix_oscale_tl{\fp_use:N\l_mix_oscale_fp} - \mix_format_num:N\l_mix_oscale_tl - \tl_set:Nx\l_mix_aac_tl{\fp_use:N\l_mix_aac_fp} - \mix_format_num:N\l_mix_aac_tl - \tl_set:Nx\l_mix_roo_tl{\fp_use:N\l_mix_roo_fp} - \mix_format_num:N\l_mix_roo_tl + \tl_set:Nx\l_mix_oscale_tl{\fp_to_decimal:n{round((\l_mix_oscale_fp),9)}} + \tl_set:Nx\l_mix_aac_tl{\fp_to_decimal:n{round((\l_mix_aac_fp),9)}} + \tl_set:Nx\l_mix_roo_tl{\fp_to_decimal:n{round((\l_mix_roo_fp),9)}} \mix_pdfobj:nnn{}{dict}{ /MS/M /P<< \bool_if:NTF\l_mix_iiidortho_bool{ - /Subtype/O/OS~\l_mix_oscale_tl/OB/Min + /Subtype/O/OS~\l_mix_oscale_tl/OB/\l_mix_psob_tl }{ - /Subtype/P/FOV~\l_mix_aac_tl/PS/Min + /Subtype/P/FOV~\l_mix_aac_tl/PS/\l_mix_psob_tl } >> /C2W~[\l_mix_ciiw_tl] @@ -1590,6 +1550,11 @@ }, 3Drender .value_required:, + 3Dpsob .code:n = { + \tl_gset:Nx\g_mix_opt_psob_tl{#1} + }, + 3Dpsob .value_required:, + 3Dviews .code:n = { \file_if_exist:nTF{#1}{ \file_add_path:nN{#1}\l_mix_temp_tl @@ -1800,6 +1765,17 @@ }, ORTHO .default:n = {1}, + PSOB .code:n = { + \int_compare:nTF{\l_mix_level_tl=\c_zero}{ + \tl_set:Nx\l_mix_psob_tl{#1} + }{ + \msg_error:nnxxxx{media9}{key~not~allowed} + {\g_mix_vfile_tl}{\int_use:N\l_mix_lineno_int} + {PSOB}{a~VIEW} + } + }, + PSOB .value_required:, + ROLL .code:n = { \int_compare:nF{\l_mix_level_tl=\c_zero}{ \msg_error:nnxxxx{media9}{key~not~allowed} @@ -1919,8 +1895,7 @@ \seq_set_split:Nnn\l_mix_args_seq{~}{#1} \seq_map_inline:Nn\l_mix_args_seq{ \fp_set:Nn\l_mix_tmpa_fp{##1} - \tl_set:Nx\l_mix_tmpa_tl{\fp_use:N\l_mix_tmpa_fp} - \mix_format_num:N\l_mix_tmpa_tl + \tl_set:Nx\l_mix_tmpa_tl{\fp_to_decimal:n{round((\l_mix_tmpa_fp),9)}} \tl_put_right:Nx\l_mix_ndtrans_tl{~\l_mix_tmpa_tl} } }, @@ -1949,12 +1924,9 @@ } \tl_set:Nx\l_mix_args_tl{#1\space} \exp_after:wN\mix_parse_vect:w\l_mix_args_tl\q_stop - \tl_set:Nx\l_mix_x_tl{\fp_use:N\l_mix_x_fp} - \mix_format_num:N\l_mix_x_tl - \tl_set:Nx\l_mix_y_tl{\fp_use:N\l_mix_y_fp} - \mix_format_num:N\l_mix_y_tl - \tl_set:Nx\l_mix_z_tl{\fp_use:N\l_mix_z_fp} - \mix_format_num:N\l_mix_z_tl + \tl_set:Nx\l_mix_x_tl{\fp_to_decimal:n{round((\l_mix_x_fp),9)}} + \tl_set:Nx\l_mix_y_tl{\fp_to_decimal:n{round((\l_mix_y_fp),9)}} + \tl_set:Nx\l_mix_z_tl{\fp_to_decimal:n{round((\l_mix_z_fp),9)}} \tl_set:Nx\l_mix_cscentre_tl{ \l_mix_x_tl\space \l_mix_y_tl\space @@ -1977,10 +1949,8 @@ \fp_set:Nn\l_mix_roty_fp{-\l_mix_roty_fp} %rot angle of normal vec around Z axis \mix_angfromxy:Nnn\l_mix_rotz_fp\l_mix_x_fp\l_mix_y_fp - \tl_set:Nx\l_mix_roty_tl{\fp_use:N\l_mix_roty_fp} - \mix_format_num:N\l_mix_roty_tl - \tl_set:Nx\l_mix_rotz_tl{\fp_use:N\l_mix_rotz_fp} - \mix_format_num:N\l_mix_rotz_tl + \tl_set:Nx\l_mix_roty_tl{\fp_to_decimal:n{round((\l_mix_roty_fp),9)}} + \tl_set:Nx\l_mix_rotz_tl{\fp_to_decimal:n{round((\l_mix_rotz_fp),9)}} \tl_set:Nx\l_mix_csorient_tl{null~\l_mix_roty_tl\space\l_mix_rotz_tl} }, NORMAL .value_required:, |