From 92effab22b73c432933e7eb8e12c1cefda221df9 Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Wed, 3 Jan 2024 03:03:02 +0000 Subject: CTAN sync 202401030303 --- macros/latex/contrib/changebar/CATALOG | 2 +- macros/latex/contrib/changebar/README | 4 +- macros/latex/contrib/changebar/changebar.bug | 11 + macros/latex/contrib/changebar/changebar.dtx | 28 +- macros/latex/contrib/changebar/changebar.pdf | Bin 483608 -> 484332 bytes macros/latex/contrib/eolang/eolang.dtx | 88 ++- macros/latex/contrib/eolang/eolang.pdf | Bin 1935887 -> 1937780 bytes .../latex/contrib/nicematrix/nicematrix-code.dtx | 90 +-- .../latex/contrib/nicematrix/nicematrix-code.pdf | Bin 0 -> 973857 bytes .../latex/contrib/nicematrix/nicematrix-french.pdf | Bin 596600 -> 596978 bytes .../latex/contrib/nicematrix/nicematrix-french.tex | 16 +- macros/latex/contrib/nicematrix/nicematrix.ins | 4 +- macros/latex/contrib/nicematrix/nicematrix.pdf | Bin 612159 -> 611795 bytes macros/latex/contrib/nicematrix/nicematrix.tex | 17 +- .../latex/contrib/proflycee/doc/ProfLycee-doc.pdf | Bin 1444492 -> 1450770 bytes .../latex/contrib/proflycee/doc/ProfLycee-doc.tex | 4 +- macros/latex/contrib/proflycee/tex/ProfLycee.sty | 5 +- .../proflycee/tex/proflycee-tools-analyse.tex | 80 +-- .../proflycee/tex/proflycee-tools-arithm.tex | 24 +- .../proflycee/tex/proflycee-tools-complexes.tex | 609 +++++++++++++++++++++ 20 files changed, 850 insertions(+), 132 deletions(-) create mode 100644 macros/latex/contrib/nicematrix/nicematrix-code.pdf create mode 100644 macros/latex/contrib/proflycee/tex/proflycee-tools-complexes.tex (limited to 'macros/latex/contrib') diff --git a/macros/latex/contrib/changebar/CATALOG b/macros/latex/contrib/changebar/CATALOG index 4878681f57..74e408ac34 100644 --- a/macros/latex/contrib/changebar/CATALOG +++ b/macros/latex/contrib/changebar/CATALOG @@ -1,7 +1,7 @@ Name: ChangeBar Problems-To: johannes.braams(at)texniek.nl Author: J.L. Braams -Version: 3.7b +Version: 3.7c Description: diff --git a/macros/latex/contrib/changebar/README b/macros/latex/contrib/changebar/README index e5ef309494..847be179da 100644 --- a/macros/latex/contrib/changebar/README +++ b/macros/latex/contrib/changebar/README @@ -1,6 +1,6 @@ changebar bundle - December 30, 2023 + January 1, 2024 This bundle contains a package that I maintain to add changebars to a LaTeX document. @@ -14,7 +14,7 @@ be used to compare two versions of a document and automatically add the changebars. The file chbar.1, also contributed, documents the workings of chbar.sh -Copyright (C) 2023 Johannes L. Braams johannes.braams(at)texniek.nl +Copyright (C) 2024 Johannes L. Braams johannes.braams(at)texniek.nl This program can be redistributed and/or modified under the terms of the LaTeX Project Public License Distributed from CTAN diff --git a/macros/latex/contrib/changebar/changebar.bug b/macros/latex/contrib/changebar/changebar.bug index aed1dc80a7..4d2b9fa0a7 100644 --- a/macros/latex/contrib/changebar/changebar.bug +++ b/macros/latex/contrib/changebar/changebar.bug @@ -6,6 +6,7 @@ % VTeX (Michael Vulis) % PDFTeX (Piet van Oostrum) % XeTeX (Apostolos Syropoulos) +% luaTeX % % change history % @@ -205,6 +206,16 @@ % % v3.7a JLB: Added support for LuaTeX based on the pdfTEX and XeTeX code % +% v3.7b JLB: In creating the support for luaTeX a XeTeX error message got +% inadvertantly remove, reinserted. +% After adding those four lines the production of changebar.dtx +% led to a runaway argument error. It turned out that the comma's, +% used in were in one instance replaced by \TeX-code. Replaced +% the comma's with ";" to solve this. +% +% v3.7c JLB: Arash Esbati reported inconsistent spacing whit or without the +% optional argumenty to \cbstart or \begin{changebar}. +% % Known problems % - changebars for marginal paragraphs collide with changebars % for the main body of text diff --git a/macros/latex/contrib/changebar/changebar.dtx b/macros/latex/contrib/changebar/changebar.dtx index e4d71b5c39..2c67180adb 100644 --- a/macros/latex/contrib/changebar/changebar.dtx +++ b/macros/latex/contrib/changebar/changebar.dtx @@ -1,6 +1,6 @@ % \iffalse meta-comment % -%% Copyright 1994-2023 (C) Johannes Braams. All rights reserved. +%% Copyright 1994-2024 (C) Johannes Braams. All rights reserved. % % This file is part of the changebar package. % ------------------------------------------- @@ -24,7 +24,7 @@ % and covered by LPPL is defined by the unpacking scripts (with % extension .ins) which are part of the distribution. % \fi -% \CheckSum{2952} +% \CheckSum{2953} % %\iffalse % This file is built for \LaTeXe, so we make sure an error is @@ -39,7 +39,7 @@ \ProvidesFile{changebar.dtx} % %<+package>\ProvidesPackage{changebar} - [2023/12/30 v3.7b Indicate changes with marginal bars] + [2024/01/01 v3.7c Indicate changes with marginal bars] % \end{macrocode} % % \section{A driver for this document} @@ -162,7 +162,7 @@ % commands supported by `dvi drivers'. Currently six different % \changes{v3.5a}{2005/05/23}{PDF\TeX{} support added} % \changes{v3.6a}{2011/04/30}{Xe\TeX{} support added} -% drivers are supported, plus pdftex and Xe\TeX +% drivers are supported, plus pdftex, Xe\TeX\ and lua\TeX\ % support. More can easily be added. % \end{abstract} % @@ -752,7 +752,6 @@ % \item V\TeX % \item PDF\TeX % \item Xe\TeX -% % \cbstart\item luaTeX\cbend % \end{itemize} % @@ -2236,7 +2235,7 @@ % grouping errors.} % \changes{v3.4e}{2002/10/28}{Reverted the change from version 3.3i} % \begin{macrocode} -\newcommand*{\cbstart}{\@ifnextchar [%] +\newcommand*{\cbstart}{\@ifnextchar[%] {\cb@start}% {\cb@start[\changebarwidth]}} % \end{macrocode} @@ -2257,7 +2256,7 @@ % The default width (and length) of it are stored in % |\deletebarwidth|. % \begin{macrocode} -\newcommand*{\cbdelete}{\@ifnextchar [%] +\newcommand*{\cbdelete}{\@ifnextchar[%] {\cb@delete}% {\cb@delete[\deletebarwidth]}} % \end{macrocode} @@ -2280,8 +2279,8 @@ % environments. % \begin{macrocode} \newenvironment{changebar}% - {\@ifnextchar [{\cb@start}% - {\cb@start[\changebarwidth]}}% + {\@ifnextchar[{\cb@start}%] + {\cb@start[\changebarwidth]}}% {\cb@end} % \end{macrocode} % \end{macro} @@ -2373,7 +2372,8 @@ % depends on the model. % \begin{macrocode} \DeclareRobustCommand\cbcolor{% - \@ifnextchar[\@undeclaredcbcolor\@declaredcbcolor} + \@ifnextchar[%] + \@undeclaredcbcolor\@declaredcbcolor} % \end{macrocode} % \end{macro} % @@ -2471,9 +2471,11 @@ \fi % \end{macrocode} % Restore |\cb@pagecount|. +% \changes{v3.7c}{2024/01/01}{Added \cs{ignorespaces} at the end to +% prevent a spcae token from creaping into the output} % \begin{macrocode} \cb@pagecount\cb@cnta - \cb@advancePoint} + \cb@advancePoint\ignorespaces} % \end{macrocode} % \end{macro} % @@ -2523,6 +2525,8 @@ \cb@checkpage\thr@@ % \end{macrocode} % Again, we need to temporarily overwrite |\cb@pagecount|. +% \changes{v3.7c}{2024/01/01}{We need \cs{ignorespacesafterend} here, +% not \cs{ignorespaces}} % \begin{macrocode} \cb@cnta\cb@pagecount \cb@pagecount\cb@page\advance\cb@pagecount\m@ne @@ -2533,7 +2537,7 @@ \fi \cb@pagecount\cb@cnta \fi - \ignorespaces} + \ignorespacesafterend} % \end{macrocode} %\end{macro} % diff --git a/macros/latex/contrib/changebar/changebar.pdf b/macros/latex/contrib/changebar/changebar.pdf index 549d3e8883..ef79e6b5dc 100644 Binary files a/macros/latex/contrib/changebar/changebar.pdf and b/macros/latex/contrib/changebar/changebar.pdf differ diff --git a/macros/latex/contrib/eolang/eolang.dtx b/macros/latex/contrib/eolang/eolang.dtx index 9407f46eb6..9e1bd88e9d 100644 --- a/macros/latex/contrib/eolang/eolang.dtx +++ b/macros/latex/contrib/eolang/eolang.dtx @@ -50,7 +50,7 @@ %\NeedsTeXFormat{LaTeX2e} %\ProvidesPackage{eolang} %<*package> -[2023-12-28 0.17.0 Formulas and Graphs for EO Programming Language] +[2024-01-02 0.17.1 Formulas and Graphs for EO Programming Language] % %<*driver> \documentclass{ltxdoc} @@ -84,16 +84,19 @@ % \maketitle % % \textbf{\color{red}NB!} -% You must run \TeX{} processor with |--shell-escape| option +% You must run \TeX{} processor with |-shell-escape| option % and you must have \href{https://www.perl.org}{Perl} installed. -% If you omit the |--shell-escape| option, the package will try +% If you omit the |-shell-escape| option, the package will try % to use cached files, if they exist. If they don't, compilation will -% crash. Thus, when you must prepare your document for a compilation -% without the |--shell-escape| option, run it locally with the option -% and then package all files (including the files in the |_eolang| directory) -% into a single ZIP archive. +% fail. Thus, when you must prepare your document for a compilation +% without the |-shell-escape| option, run it locally with the option provided +% and then package all files (including the files in the |_eolang-*| directories) +% into a single ZIP archive. It is advised to use |tmpdir| package option +% in this case, in order to make the directory name not depend on the +% \LaTeX{} engine. % -% If |--shell-escape| is set, this package doesn't work on Windows. +% If |-shell-escape| is set, this package won't work on Windows, because +% it uses POSIX command line interface. % \section{Introduction} % @@ -778,12 +781,21 @@ % Then, we make a directory where all temporary files will be kept: % \begin{macrocode} -\ifnum\ShellEscapeStatus=1% - \iexec[null]{mkdir -p "\eolang@tmpdir/\jobname"}% -\else% - \message{eolang: Temporary directory "\eolang@tmpdir/\jobname" - is not created, because --shell-escape is not set^^J}% -\fi% +\RequirePackage{shellesc} +\IfFileExists + {\eolang@tmpdir/\jobname} + {\message{eolang: Temporary directory "\eolang@tmpdir/\jobname" + already exists^^J}} + {% + \ifnum\ShellEscapeStatus=1% + \iexec[null]{mkdir -p "\eolang@tmpdir/\jobname"}% + \else% + \message{eolang: Temporary directory "\eolang@tmpdir/\jobname" + is not created, because -shell-escape is not set, and + it doesn't exist, most probably the compilation + will fail later^^J}% + \fi% + } % \end{macrocode} % \begin{macro}{\eolang@lineno} @@ -805,7 +817,7 @@ % \end{macrocode} % \end{macro} -% \begin{macro}{eolang-phi.pl} +% \begin{macro}{-phi.pl} % \changes{0.0.2}{2022/10/21}{The symbols ``\texttt{[}'' and ``\texttt{]}'' replaced with ``\texttt{[[}'' and ``\texttt{]]}'' for abstract object brackets, because they conflicted with normal square brackets} % \changes{0.0.2}{2022/10/21}{New symbol added for basket slots} % \changes{0.0.2}{2022/10/21}{Parsing of the symbols ``\texttt{@},'' ``\texttt{\^{}},'' and ``\texttt{\&}'' enabled (\texttt{\char`\\varphi}, \texttt{\char`\\rho}, and \texttt{\char`\\sigma})} @@ -828,11 +840,17 @@ % \href{https://ctan.org/pkg/fancyvrb}{fancyvrb}: % \begin{macrocode} \makeatletter -\begin{VerbatimOut}{\eolang@tmpdir/eolang-phi.pl} +\openin 15=\eolang@tmpdir/\jobname-phi.pl +\ifeof 15 +\message{eolang: Perl script is going to be created, + because it is absent at "\eolang@tmpdir/\jobname-phi.pl", + but if -shell-escape is not set, the compilation will + most likely fail now^^J} +\begin{VerbatimOut}{\eolang@tmpdir/\jobname-phi.pl} $macro = $ARGV[0]; open(my $fh, '<', $ARGV[1]); my $tex; { local $/; $tex = <$fh>; } -print "% This file is auto-generated by 0.17.0\n"; +print "% This file is auto-generated by 0.17.1\n"; print '% There are ', length($tex), ' chars in the input: ', $ARGV[1], "\n"; print '% ---', "\n"; @@ -909,9 +927,9 @@ $tex =~ s/([^\\{a-z0-9]|^)D>/\1\\Delta{}..>/g; $tex =~ s/([^\\{a-z0-9]|^)L>/\1\\lambda{}..>/g; $tex =~ s/"([^"]+)"/|"\1"|/g; $tex =~ s/(^|(?<=[\s)(\]\[,.>\/]))([a-zA-Z][a-z0-9]+)(?=[\s)(\]\[,.-]|$)/|\2|/g; -$tex =~ s/([^^_]|^)([0-9]+|\*)\/(\\?[a-z]+|\|[a-z]+\|) +$tex =~ s/([^_^]|^)([0-9]+|\*)\/(\\?[a-z]+|\|[a-z]+\|) (->|\.\.>|~>|:=|!->)/\1\\alpha_{\2}\\vert{}\3\\space{}\4/xg; -$tex =~ s/([^^_]|^)([0-9]+|\*) +$tex =~ s/([^_^]|^)([0-9]+|\*) (->|\.\.>|~>|:=|!->)/\1\\alpha_{\2}\\space{}\3/xg; if ($macro ne 'phiq') { if (not $splitting) { @@ -999,7 +1017,12 @@ if ($macro eq 'phiq') { print '\endinput'; \end{VerbatimOut} \message{eolang: File with Perl script - '\eolang@tmpdir/eolang-phi.pl' saved^^J}% + '\eolang@tmpdir/\jobname-phi.pl' saved^^J} +\else + \message{eolang: Perl script already exists at + "\eolang@tmpdir/\jobname-phi.pl"^^J} +\fi +\closein 15 \makeatother % \end{macrocode} % \end{macro} @@ -1027,7 +1050,7 @@ print '\endinput'; \input{#1}} {% \ifnum\ShellEscapeStatus=1\else% - \message{eolang: The --shell-escape command line + \message{eolang: The -shell-escape command line option is not provided, most probably compilation will fail now:^^J}% \fi% @@ -1053,7 +1076,7 @@ print '\endinput'; "\eolang@tmpdir/\jobname/\hash.tex"}% \message{Start parsing 'phi' at line no. \the\inputlineno^^J} \iexec[trace,stdout=\eolang@tmpdir/\jobname/\hash-post.tex]{ - perl "\eolang@tmpdir/eolang-phi.pl" + perl "\eolang@tmpdir/\jobname-phi.pl" '#1' "\eolang@tmpdir/\jobname/\hash.tex" \ifdefined\eolang@nocomments | perl -pe 's/\%.*(\\n|$)//g'\fi @@ -1097,7 +1120,7 @@ print '\endinput'; \iexec[quiet,null]{cp "\eolang@tmpdir/\jobname/phiq.tex" "\eolang@tmpdir/\jobname/\hash-phiq.tex"}% \iexec[trace,stdout=\eolang@tmpdir/\jobname/\hash-phiq-post.tex]{ - perl \eolang@tmpdir/eolang-phi.pl 'phiq' + perl \eolang@tmpdir/\jobname-phi.pl 'phiq' "\eolang@tmpdir/\jobname/\hash-phiq.tex" \ifdefined\eolang@nocomments | perl -pe 's/\%.*(\\n|$)//g' \fi}% }% @@ -1120,7 +1143,7 @@ print '\endinput'; % \end{macrocode} % \end{macro} -% \begin{macro}{eolang-sodg.pl} +% \begin{macro}{-sodg.pl} % \changes{0.0.2}{2022/10/24}{The Perl file now has a fixed name, which doesn't depend on the name of the TeX job. This file may be shared among jobs, no need to make it uniquely named.} % \changes{0.1.0}{2022/10/26}{There are two Perl scripts now: one for \texttt{phiquation}, another one for \texttt{sodg}.} % \changes{0.2.0}{2022/10/28}{The content of the \texttt{atom} and the \texttt{data} boxes is parsed automatically as formulas and numbers, respectively.} @@ -1140,7 +1163,13 @@ print '\endinput'; % \href{https://ctan.org/pkg/fancyvrb}{fancyvrb}: % \begin{macrocode} \makeatletter -\begin{VerbatimOut}{\eolang@tmpdir/eolang-sodg.pl} +\openin 15=\eolang@tmpdir/\jobname-sodg.pl +\ifeof 15 +\message{eolang: Perl script is going to be created, + because it is absent at "\eolang@tmpdir/\jobname-sodg.pl", + but if -shell-escape is not set, the compilation will + most likely fail now^^J} +\begin{VerbatimOut}{\eolang@tmpdir/\jobname-sodg.pl} sub num { my ($i) = @_; $i =~ s/(\+|-)\./\10./g; @@ -1413,7 +1442,12 @@ print '% --- (' . (0+@cmds) . " lines)\n"; print '\endinput'; \end{VerbatimOut} \message{eolang: File with Perl script - '\eolang@tmpdir/eolang-sodg.pl' saved^^J}% + '\eolang@tmpdir/\jobname-sodg.pl' saved^^J} +\else + \message{eolang: Perl script already exists at + "\eolang@tmpdir/\jobname-sodg.pl"^^J} +\fi +\closein 15 \makeatother % \end{macrocode} % \end{macro} @@ -1559,7 +1593,7 @@ print '\endinput'; "\eolang@tmpdir/\jobname/\hash.tex"}% \message{eolang: Start parsing `sodg' at line no. \the\inputlineno^^J} \iexec[trace,stdout=\eolang@tmpdir/\jobname/\hash-sodg-post.tex]{ - perl "\eolang@tmpdir/eolang-sodg.pl" + perl "\eolang@tmpdir/\jobname-sodg.pl" "\eolang@tmpdir/\jobname/\hash.tex" \ifdefined\eolang@nocomments | perl -pe 's/\%.*(\\n|$)//g'\fi \ifdefined\eolang@sodgSaveTo > \eolang@sodgSaveTo\fi}% diff --git a/macros/latex/contrib/eolang/eolang.pdf b/macros/latex/contrib/eolang/eolang.pdf index c970e3b189..759f2c3ac6 100644 Binary files a/macros/latex/contrib/eolang/eolang.pdf and b/macros/latex/contrib/eolang/eolang.pdf differ diff --git a/macros/latex/contrib/nicematrix/nicematrix-code.dtx b/macros/latex/contrib/nicematrix/nicematrix-code.dtx index cfb0eb00d0..dea9c0ecd7 100644 --- a/macros/latex/contrib/nicematrix/nicematrix-code.dtx +++ b/macros/latex/contrib/nicematrix/nicematrix-code.dtx @@ -2,7 +2,7 @@ % % This file should be compiled with $xelatex$. % -% Copyright (C) 2018-2023 by F. Pantigny +% Copyright (C) 2018-2024 by F. Pantigny % ------------------------------------------ % % This file may be distributed and/or modified under the @@ -17,8 +17,8 @@ % % \fi % \iffalse -\def\myfileversion{6.26b} -\def\myfiledate{2023/12/13} +\def\myfileversion{6.26c} +\def\myfiledate{2024/01/02} % % %<*batchfile> @@ -29,7 +29,7 @@ \preamble -Copyright (C) 2018-2023 by F. Pantigny +Copyright (C) 2018-2024 by F. Pantigny ----------------------------------- This file may be distributed and/or modified under the @@ -121,7 +121,7 @@ version 2005/12/01 or later. % \pkg{nicematrix} relies upon the fact that the package |{array}| uses % |\ialign| to begin the |\halign|. % -% +% % \bigskip % \section{Declaration of the package and packages loaded} % @@ -1821,15 +1821,15 @@ version 2005/12/01 or later. % argument of |\tabularnote|.} % \item During the composition of the main tabular, the tabular notes will be % numbered from |\g_@@_notes_caption_int|+1 and the notes will be stored in -% |\g_@@_notes_seq|. Each composant of |\g_@@_notes_seq| will be a kind of +% |\g_@@_notes_seq|. Each component of |\g_@@_notes_seq| will be a kind of % couple of the form : \texttt{\{\textsl{label}\}\{\textsl{text of the -% tabularnote}\}}. The first composante is the optional argument (between square +% tabularnote}\}}. The first component is the optional argument (between square % brackets) of the command |\tabularnote| (if the optional argument is not used, % the value will be the special marker |\c_novalue_tl|). % \item During the composition of the caption (value of |\l_@@_caption_tl|), the % tabular notes will be numbered from $1$ to |\g_@@_notes_caption_int| and the % notes themselves will be stored in |\g_@@_notes_in_caption_seq|. The structure -% of the composantes of that sequence will be the same as for |\g_@@_notes_seq|. +% of the components of that sequence will be the same as for |\g_@@_notes_seq|. % \item After the composition of the main tabular and after the composition of % the caption, the sequences |\g_@@_notes_in_caption_seq| and |\g_@@_notes_seq| % will be merged (in that order) and the notes will be composed. @@ -1973,6 +1973,11 @@ version 2005/12/01 or later. } % \end{macrocode} % +% \begin{macrocode} +\cs_new_protected:Npn \@@_test_first_novalue:nnn #1 #2 #3 + { \tl_if_novalue:nT { #1 } { #3 } } +% \end{macrocode} +% % \bigskip % For the version in normal conditions, that is to say not in the |caption|. % |#1| is the optional argument of |\tabularnote| (maybe equal to the special @@ -1998,12 +2003,20 @@ version 2005/12/01 or later. % \end{center} % If the user have used |\tabularnote| without the optional argument, the % \texttt{\textsl{label}} will be the special marker |\c_novalue_tl|. +% +% When we will go through the sequence |\g_@@_notes_seq|, we will count in +% |\l_tmpb_int| the notes without explicit label in order to have the +% ``current'' value of the counter |\c@tabularnote|. % \begin{macrocode} + \int_zero:N \l_tmpb_int \seq_map_indexed_inline:Nn \g_@@_notes_seq { + \@@_test_first_novalue:nnn ##2 { \int_incr:N \l_tmpb_int } \tl_if_eq:nnT { { #1 } { #2 } } { ##2 } - { - \int_set:Nn \l_tmpa_int { ##1 } + { + \tl_if_novalue:nTF { #1 } + { \int_set_eq:NN \l_tmpa_int \l_tmpb_int } + { \int_set:Nn \l_tmpa_int { ##1 } } \seq_map_break: } } @@ -4536,7 +4549,7 @@ version 2005/12/01 or later. % Now, we prepare the token list for the instructions that we will have to write % on the |aux| file at the end of the environment. % \begin{macrocode} - \tl_build_gbegin:N \g_@@_aux_tl + \tl_gclear:N \g_@@_aux_tl % \end{macrocode} % % \begin{macrocode} @@ -4609,7 +4622,7 @@ version 2005/12/01 or later. % \begin{macrocode} \int_compare:nNnT \g_@@_total_X_weight_int > \c_zero_int { - \tl_build_gput_right:Nx \g_@@_aux_tl + \tl_gput_right:Nx \g_@@_aux_tl { \bool_set_true:N \l_@@_X_columns_aux_bool \dim_set:Nn \l_@@_X_columns_dim @@ -4804,7 +4817,6 @@ version 2005/12/01 or later. % We write on the |aux| file all the informations corresponding to the % current environment. % \begin{macrocode} - \tl_build_gend:N \g_@@_aux_tl \iow_now:Nn \@mainaux { \ExplSyntaxOn } \iow_now:Nn \@mainaux { \char_set_catcode_space:n { 32 } } \iow_now:Nx \@mainaux @@ -6410,7 +6422,7 @@ version 2005/12/01 or later. % \begin{macrocode} \int_compare:nNnT \g_@@_notes_caption_int > \c_zero_int { - \tl_build_gput_right:Nx \g_@@_aux_tl + \tl_gput_right:Nx \g_@@_aux_tl { \tl_set:Nn \exp_not:N \l_@@_note_in_caption_tl { \int_use:N \g_@@_notes_caption_int } @@ -7637,7 +7649,7 @@ version 2005/12/01 or later. % % \medskip % \begin{macrocode} - \tl_build_gput_right:Nx \g_@@_aux_tl + \tl_gput_right:Nx \g_@@_aux_tl { \seq_gset_from_clist:Nn \exp_not:N \g_@@_size_seq { @@ -7656,7 +7668,7 @@ version 2005/12/01 or later. % \begin{macrocode} \seq_if_empty:NF \g_@@_pos_of_blocks_seq { - \tl_build_gput_right:Nx \g_@@_aux_tl + \tl_gput_right:Nx \g_@@_aux_tl { \seq_gset_from_clist:Nn \exp_not:N \g_@@_pos_of_blocks_seq { \seq_use:Nnnn \g_@@_pos_of_blocks_seq , , , } @@ -7664,7 +7676,7 @@ version 2005/12/01 or later. } \seq_if_empty:NF \g_@@_multicolumn_cells_seq { - \tl_build_gput_right:Nx \g_@@_aux_tl + \tl_gput_right:Nx \g_@@_aux_tl { \seq_gset_from_clist:Nn \exp_not:N \g_@@_multicolumn_cells_seq { \seq_use:Nnnn \g_@@_multicolumn_cells_seq , , , } @@ -7872,7 +7884,7 @@ version 2005/12/01 or later. \seq_if_empty:NF \g_@@_rowlistcolors_seq { \@@_clear_rowlistcolors_seq: } \tl_if_empty:NF \g_@@_pre_code_before_tl { - \tl_build_gput_right:Nx \g_@@_aux_tl + \tl_gput_right:Nx \g_@@_aux_tl { \tl_gset:Nn \exp_not:N \g_@@_pre_code_before_tl { \exp_not:o \g_@@_pre_code_before_tl } @@ -7881,7 +7893,7 @@ version 2005/12/01 or later. } \tl_if_empty:NF \g_nicematrix_code_before_tl { - \tl_build_gput_right:Nx \g_@@_aux_tl + \tl_gput_right:Nx \g_@@_aux_tl { \tl_gset:Nn \exp_not:N \g_@@_code_before_tl { \exp_not:o \g_nicematrix_code_before_tl } @@ -10060,10 +10072,8 @@ version 2005/12/01 or later. \keys_define:nn { NiceMatrix / RowStyle } { cell-space-top-limit .dim_set:N = \l_tmpa_dim , - cell-space-top-limit .initial:n = \c_zero_dim , cell-space-top-limit .value_required:n = true , cell-space-bottom-limit .dim_set:N = \l_tmpb_dim , - cell-space-bottom-limit .initial:n = \c_zero_dim , cell-space-bottom-limit .value_required:n = true , cell-space-limits .meta:n = { @@ -10095,6 +10105,8 @@ version 2005/12/01 or later. \tl_clear:N \l_tmpa_tl % value of \rowcolor \tl_clear:N \l_@@_color_tl \int_set_eq:NN \l_@@_key_nb_rows_int \c_one_int + \dim_zero:N \l_tmpa_dim + \dim_zero:N \l_tmpb_dim \keys_set:nn { NiceMatrix / RowStyle } { #1 } % \end{macrocode} % If the key |rowcolor| has been used. @@ -10135,15 +10147,16 @@ version 2005/12/01 or later. % \begin{macrocode} \dim_compare:nNnT \l_tmpa_dim > \c_zero_dim { - \@@_put_in_row_style:n + \exp_args:Nx \@@_put_in_row_style:n { - \exp_not:n - { - \tl_gput_right:Nn \g_@@_cell_after_hook_tl - { - \dim_set:Nn \l_@@_cell_space_top_limit_dim - { \dim_use:N \l_tmpa_dim } - } + \tl_gput_right:Nn \exp_not:N \g_@@_cell_after_hook_tl + { +% \end{macrocode} +% It's not possible to chanage the following code by using |\dim_set_eq:NN| +% (because of expansion). +% \begin{macrocode} + \dim_set:Nn \l_@@_cell_space_top_limit_dim + { \dim_use:N \l_tmpa_dim } } } } @@ -10152,15 +10165,12 @@ version 2005/12/01 or later. % \begin{macrocode} \dim_compare:nNnT \l_tmpb_dim > \c_zero_dim { - \@@_put_in_row_style:n + \exp_args:Nx \@@_put_in_row_style:n { - \exp_not:n - { - \tl_gput_right:Nn \g_@@_cell_after_hook_tl - { - \dim_set:Nn \l_@@_cell_space_bottom_limit_dim - { \dim_use:N \l_tmpb_dim } - } + \tl_gput_right:Nn \exp_not:N \g_@@_cell_after_hook_tl + { + \dim_set:Nn \l_@@_cell_space_bottom_limit_dim + { \dim_use:N \l_tmpb_dim } } } } @@ -12345,7 +12355,7 @@ version 2005/12/01 or later. % commands which color the |rows|, |columns| and |cells| must not color the % cells in the corners. % \begin{macrocode} - \tl_build_gput_right:Nx \g_@@_aux_tl + \tl_gput_right:Nx \g_@@_aux_tl { \seq_set_from_clist:Nn \exp_not:N \l_@@_corners_cells_seq { \seq_use:Nnnn \l_@@_corners_cells_seq , , , } @@ -17156,6 +17166,7 @@ version 2005/12/01 or later. left-margin,~ light-syntax,~ matrix/columns-type,~ + no-cell-nodes,~ notes~(several~subkeys),~ nullify-dots,~ pgf-node-code,~ @@ -17214,6 +17225,7 @@ version 2005/12/01 or later. left-margin,~ light-syntax,~ name,~ + no-cell-nodes,~ nullify-dots,~ pgf-node-code,~ renew-dots,~ @@ -17278,6 +17290,7 @@ version 2005/12/01 or later. left-margin,~ light-syntax,~ name,~ + no-cell-nodes,~ nullify-dots,~ pgf-node-code,~ r,~ @@ -17340,6 +17353,7 @@ version 2005/12/01 or later. left-margin,~ light-syntax,~ name,~ + no-cell-nodes,~ notes~(several~subkeys),~ nullify-dots,~ pgf-node-code,~ diff --git a/macros/latex/contrib/nicematrix/nicematrix-code.pdf b/macros/latex/contrib/nicematrix/nicematrix-code.pdf new file mode 100644 index 0000000000..f05f5fc311 Binary files /dev/null and b/macros/latex/contrib/nicematrix/nicematrix-code.pdf differ diff --git a/macros/latex/contrib/nicematrix/nicematrix-french.pdf b/macros/latex/contrib/nicematrix/nicematrix-french.pdf index 456c820b75..5245e44dce 100644 Binary files a/macros/latex/contrib/nicematrix/nicematrix-french.pdf and b/macros/latex/contrib/nicematrix/nicematrix-french.pdf differ diff --git a/macros/latex/contrib/nicematrix/nicematrix-french.tex b/macros/latex/contrib/nicematrix/nicematrix-french.tex index 64ac62e240..3ba956b397 100644 --- a/macros/latex/contrib/nicematrix/nicematrix-french.tex +++ b/macros/latex/contrib/nicematrix/nicematrix-french.tex @@ -316,6 +316,10 @@ $\begin{pNiceMatrix} \end{pNiceMatrix}$ \end{scope} +\bigskip +Il est également possible de changer ces paramètres pour certaines lignes +seulement grâce à la commande |\RowStyle| (cf.~p.~\pageref{RowStyle}). + \medskip \section{La clé baseline} @@ -1779,10 +1783,6 @@ Rappelons que l'extension \pkg{colortbl} peut être chargée directement par |\usepackage{colortbl}| ou en chargeant l'extension \pkg{xcolor} avec l'option \texttt{table} : |\usepackage[table]{xcolor}|. -\medskip -Comme l'extension \pkg{nicematrix} est fondée sur \pkg{array}, il est possible -d'utiliser \pkg{colortbl} avec \pkg{nicematrix}. - \medskip Il y a néanmoins deux inconvénients : \begin{itemize} @@ -5199,6 +5199,7 @@ environnement de \pkg{nicematrix}, elle est sans effet. Pour un exemple d'utilisation, voir \url{tex.stackexchange.com/questions/488566} + \section{Utilisation de TikZ avec nicematrix} \label{name}\label{PGF-nodes} @@ -5207,6 +5208,8 @@ Pour un exemple d'utilisation, voir \url{tex.stackexchange.com/questions/488566} \subsection{Les nœuds correspondant aux contenus des cases} +\index{no-cell-nodes} + L'extension \pkg{nicematrix} crée un nœud PGF-TikZ\footnote{On rappelle que TikZ est une sur-couche de PGF. L'extension \pkg{nicematrix} charge PGF et ne charge pas TikZ. On parle de «nœud PGF-TikZ» pour rappeler que, en fait, les @@ -5224,6 +5227,11 @@ Néanmoins, on peut forcer la création d'un nœud avec la commande |\NotEmpty|. lignes pointillées (cf.~p.~\pageref{Cdots}) et la détermination des «coins» (cf. p.~\pageref{corners}).} +\medskip +Comme la création de ces nœuds requiert du temps et de la mémoire, il est +possible de la désactiver ponctuellement avec la clé |no-cell-nodes| pour +accéler les compilations. + \medskip Tous les nœuds du document doivent avoir des noms deux à deux distincts et le nom de ces nœuds doit donc faire intervenir le numéro de l'environnement diff --git a/macros/latex/contrib/nicematrix/nicematrix.ins b/macros/latex/contrib/nicematrix/nicematrix.ins index 171d3f7449..88bb4d6754 100644 --- a/macros/latex/contrib/nicematrix/nicematrix.ins +++ b/macros/latex/contrib/nicematrix/nicematrix.ins @@ -1,5 +1,5 @@ %% -%% Copyright (C) 2018-2023 by F. Pantigny +%% Copyright (C) 2018-2024 by F. Pantigny %% %% %% This file may be distributed and/or modified under the @@ -17,7 +17,7 @@ \usedir{tex/latex/nicematrix} \preamble -Copyright (C) 2018-2023 by F. Pantigny +Copyright (C) 2018-2024 by F. Pantigny This file may be distributed and/or modified under the conditions of the LaTeX Project Public License, either diff --git a/macros/latex/contrib/nicematrix/nicematrix.pdf b/macros/latex/contrib/nicematrix/nicematrix.pdf index cc1afcb859..e1f5e455dd 100644 Binary files a/macros/latex/contrib/nicematrix/nicematrix.pdf and b/macros/latex/contrib/nicematrix/nicematrix.pdf differ diff --git a/macros/latex/contrib/nicematrix/nicematrix.tex b/macros/latex/contrib/nicematrix/nicematrix.tex index 10dd6c789a..e1cd2af742 100644 --- a/macros/latex/contrib/nicematrix/nicematrix.tex +++ b/macros/latex/contrib/nicematrix/nicematrix.tex @@ -288,7 +288,9 @@ $\begin{pNiceMatrix} \end{pNiceMatrix}$ \end{scope} - +\bigskip +It's also possible to change these parameters for only a few rows by using the +command |\RowStyle| provided by \pkg{nicematrix} (cf.~p.~\pageref{RowStyle}). @@ -1727,10 +1729,6 @@ We recall that the package \pkg{colortbl} can be loaded directly with |\usepackage{colortbl}| or by loading \pkg{xcolor} with the key |table|: |\usepackage[table]{xcolor}|. -\medskip -Since the package \pkg{nicematrix} is based on \pkg{array}, it's possible to -use \pkg{colortbl} with \pkg{nicematrix}. - \medskip However, there is two drawbacks: \begin{itemize} @@ -5095,10 +5093,12 @@ For an example of utilisation, see \url{tex.stackexchange.com/questions/488566} \label{name}\label{PGF-nodes} \index{tikza@TikZ (utilisation with \pkg{nicematrix})} -\index{node@\textbf{Nodes of PGF/TikZ|}(} +\index{node@\textbf{Nodes of PGF/TikZ}|(} \subsection{The nodes corresponding to the contents of the cells} +\index{no-cell-nodes} + The package \pkg{nicematrix} creates a PGF/TikZ node\footnote{We recall that TikZ is a layer over PGF. The extension \pkg{nicematrix} loads PGF but does not load TikZ. We speak of PGF/TikZ nodes to emphase the fact that the PGF nodes @@ -5118,6 +5118,11 @@ considered as non-empty, which has consequencies for the continuous dotted lines (cf. p.~\pageref{Cdots}) and the computation of the ``corners'' (cf.~p.~\pageref{corners}).} +\medskip +The creation of those nodes needs time and memory. It's possible to desactive +ponctually the creation of those nodes with the key |no-cell-nodes| in order to +speed up the compilations. + \medskip The nodes of a document must have distinct names. That's why the names of the nodes created by \pkg{nicematrix} contains the number of the current diff --git a/macros/latex/contrib/proflycee/doc/ProfLycee-doc.pdf b/macros/latex/contrib/proflycee/doc/ProfLycee-doc.pdf index 21a32e22f8..7928e78fef 100644 Binary files a/macros/latex/contrib/proflycee/doc/ProfLycee-doc.pdf and b/macros/latex/contrib/proflycee/doc/ProfLycee-doc.pdf differ diff --git a/macros/latex/contrib/proflycee/doc/ProfLycee-doc.tex b/macros/latex/contrib/proflycee/doc/ProfLycee-doc.tex index 0dfda9ed87..806a31ab3b 100644 --- a/macros/latex/contrib/proflycee/doc/ProfLycee-doc.tex +++ b/macros/latex/contrib/proflycee/doc/ProfLycee-doc.tex @@ -5,8 +5,8 @@ % arara: lualatex: {shell: yes, synctex: no, interaction: batchmode} if found('log', '(undefined references|Please rerun|Rerun to get)') \documentclass[a4paper,french,11pt]{article} -\def\PLversion{3.01a} -\def\PLdate{6 décembre 2023} +\def\PLversion{3.01b} +\def\PLdate{2 janvier 2024} \usepackage{amsfonts} \usepackage{ProfLycee} \useproflyclib{piton,minted,pythontex,ecritures} diff --git a/macros/latex/contrib/proflycee/tex/ProfLycee.sty b/macros/latex/contrib/proflycee/tex/ProfLycee.sty index 6d2d836957..d1c9f5a086 100644 --- a/macros/latex/contrib/proflycee/tex/ProfLycee.sty +++ b/macros/latex/contrib/proflycee/tex/ProfLycee.sty @@ -3,7 +3,8 @@ % or later, see http://www.latex-project.org/lppl.txtf \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{ProfLycee}[2023/12/06 3.01a Aide pour l'utilisation de LaTeX en lycee] +\ProvidesPackage{ProfLycee}[2024/01/02 3.01b Aide pour l'utilisation de LaTeX en lycee] +% 3.01b Ajout de la division euclidienne + correction du bugs mineurs % 3.01a Ajout des courbes ECC/FCC + paramètres par interpolation % 3.00g Amélioration de la marge Gauche dans le PseudoCode % 3.00f Conversion d'une écriture décimale périodique en fraction (avec rédaction éventuelle) @@ -187,6 +188,8 @@ \input{proflycee-tools-aleatoire.tex} %%------Suites \input{proflycee-tools-suites.tex} +%%------Complexes +\input{proflycee-tools-complexes.tex} %%------Géométrie \input{proflycee-tools-geom.tex} %%------Récréations diverses diff --git a/macros/latex/contrib/proflycee/tex/proflycee-tools-analyse.tex b/macros/latex/contrib/proflycee/tex/proflycee-tools-analyse.tex index 00f6f0206a..90672aaf1d 100644 --- a/macros/latex/contrib/proflycee/tex/proflycee-tools-analyse.tex +++ b/macros/latex/contrib/proflycee/tex/proflycee-tools-analyse.tex @@ -2,6 +2,8 @@ % Copyright 2023 Cédric Pierquet % Released under the LaTeX Project Public License v1.3c or later, see http://www.latex-project.org/lppl.txt +%Correction d'un bug sur la raacine carrée... le cas où ça fait 1 ! + %%------SimplFrac nouvelle version \NewDocumentCommand\ConversionFraction{ s O{} m }{% %*=moins sur le numérateur @@ -295,43 +297,49 @@ %%------SIMPLIFRACINES \DeclareDocumentCommand\SimplificationRacine{ m }{% argument mandataire {calcul ou fraction} \xdef\calculargument{\xintIrr{\xinteval{#1}}}% - \IfEndWith{\calculargument}{/1}% - {%si c'est un entier ! - \xdef\calculargument{\xintiieval{#1}}% - \xdef\ExtractRacStop{\xintiFloor{\xintfloateval{sqrt(\calculargument)}}}% - \xintFor* ##1 in {\xintSeq{1}{\ExtractRacStop}}\do{% - \xintifboolexpr{ \xintiiRem{\calculargument}{\xintiieval{##1*##1}} == 0}%si le carré divise - {\xdef\ExtractRacID{##1}}% - {}% - }% - \xdef\ExtracReste{\xintiieval{\calculargument/(\ExtractRacID*\ExtractRacID)}}% - \ensuremath{\xintifboolexpr{\ExtractRacID == 1 && \ExtracReste == 1}% - {1}% - { \xintifboolexpr{\ExtractRacID == 1}{}{\num{\xintiieval{\ExtractRacID}}}% - \xintifboolexpr{\ExtracReste == 1}{}{\sqrt{\num{\ExtracReste}}} }}% -% }% - }% - {%on va mettre sous forme a\sqrt(d)/b := buggue avec des millièmes... - \StrBefore{\calculargument}{/}[\numerateur]%on extrait le numérateur - \StrBehind{\calculargument}{/}[\denominateur]%on extrait le dénominateur - \xdef\ExtractRacNNum{\xintiieval{\numerateur*\denominateur}}% - \xdef\ExtractRacStop{\xintiFloor{\xintfloateval{sqrt(\ExtractRacNNum)}}}% - \xintFor* ##1 in {\xintSeq{1}{\ExtractRacStop}}\do{% - \xintifboolexpr{ \xintiiRem{\ExtractRacNNum}{\xintiieval{##1*##1}} == 0}%si le carré divise - {\xdef\ExtractRacID{##1}}% - {} + \xintifboolexpr{\calculargument == 1}% + {% + \ensuremath{1}% }% - \xdef\ExtractRacGCD{\xintiiGCD{\ExtractRacID}{\denominateur}}% - \xdef\RacNumSimpl{\xintiieval{\ExtractRacID/\ExtractRacGCD}}%simpl num - \xdef\RacDenomSimpl{\xintiieval{\denominateur/\ExtractRacGCD}}% - \xdef\RacRacSimpl{\xintiieval{\ExtractRacNNum/(\ExtractRacID*\ExtractRacID)}}% - \ensuremath{\frac{% - \xintifboolexpr{\RacNumSimpl == 1 && \RacRacSimpl == 1}% - {1}% - { \xintifboolexpr{\RacNumSimpl == 1}{}{\RacNumSimpl} \xintifboolexpr{\RacRacSimpl == 1}{}{\sqrt{\num{\RacRacSimpl}}} }% + {% + \IfEndWith{\calculargument}{/1}% + {%si c'est un entier ! + \xdef\calculargument{\xintiieval{#1}}% + \xdef\ExtractRacStop{\xintiFloor{\xintfloateval{sqrt(\calculargument)}}}% + \xintFor* ##1 in {\xintSeq{1}{\ExtractRacStop}}\do{% + \xintifboolexpr{ \xintiiRem{\calculargument}{\xintiieval{##1*##1}} == 0}%si le carré divise + {\xdef\ExtractRacID{##1}}% + {}% + }% + \xdef\ExtracReste{\xintiieval{\calculargument/(\ExtractRacID*\ExtractRacID)}}% + \ensuremath{\xintifboolexpr{\ExtractRacID == 1 && \ExtracReste == 1}% + {1}% + { \xintifboolexpr{\ExtractRacID == 1}{}{\num{\xintiieval{\ExtractRacID}}}% + \xintifboolexpr{\ExtracReste == 1}{}{\sqrt{\num{\ExtracReste}}} }}% + % }% + }% + {%on va mettre sous forme a\sqrt(d)/b := buggue avec des millièmes... + \StrBefore{\calculargument}{/}[\numerateur]%on extrait le numérateur + \StrBehind{\calculargument}{/}[\denominateur]%on extrait le dénominateur + \xdef\ExtractRacNNum{\xintiieval{\numerateur*\denominateur}}% + \xdef\ExtractRacStop{\xintiFloor{\xintfloateval{sqrt(\ExtractRacNNum)}}}% + \xintFor* ##1 in {\xintSeq{1}{\ExtractRacStop}}\do{% + \xintifboolexpr{ \xintiiRem{\ExtractRacNNum}{\xintiieval{##1*##1}} == 0}%si le carré divise + {\xdef\ExtractRacID{##1}}% + {} }% - { \RacDenomSimpl }}% - }% + \xdef\ExtractRacGCD{\xintiiGCD{\ExtractRacID}{\denominateur}}% + \xdef\RacNumSimpl{\xintiieval{\ExtractRacID/\ExtractRacGCD}}%simpl num + \xdef\RacDenomSimpl{\xintiieval{\denominateur/\ExtractRacGCD}}% + \xdef\RacRacSimpl{\xintiieval{\ExtractRacNNum/(\ExtractRacID*\ExtractRacID)}}% + \ensuremath{\frac{% + \xintifboolexpr{\RacNumSimpl == 1 && \RacRacSimpl == 1}% + {1}% + { \xintifboolexpr{\RacNumSimpl == 1}{}{\RacNumSimpl} \xintifboolexpr{\RacRacSimpl == 1}{}{\sqrt{\num{\RacRacSimpl}}} }% + }% + { \RacDenomSimpl }}% + }% + }% } %%------DICHOTOMIE @@ -631,6 +639,8 @@ %clés \restoreKV[FracPeriod]% revenir au valeurs par défaut \setKV[FracPeriod]{#1}% lit les arguments optionnels + %vmode ? + \ifvmode\leavevmode\fi% %les variables utiles \IfEndWith{#2}{.}% {% diff --git a/macros/latex/contrib/proflycee/tex/proflycee-tools-arithm.tex b/macros/latex/contrib/proflycee/tex/proflycee-tools-arithm.tex index cabba276fb..9b2d9eb653 100644 --- a/macros/latex/contrib/proflycee/tex/proflycee-tools-arithm.tex +++ b/macros/latex/contrib/proflycee/tex/proflycee-tools-arithm.tex @@ -502,11 +502,11 @@ \xintFor* ##1 in {\xintSeq{2}{\argcal}}\do{% \xintifboolexpr{ \xintiiRem{\argcal}{##1} == 0 }% {% - \xdef\tmplistdiv{\tmplistdiv /\num{##1}} + \xdef\tmplistdiv{\tmplistdiv /\num{##1}}% }% {}% }% - \ensuremath{\ifboolKV[listdiv]{AffNom}{\IfBooleanTF{#1}{\mathscr{D}}{\mathcal{D}}_{\num{\argcal}}=}{}\EcritureEnsemble[\strut]{\tmplistdiv}} + \ensuremath{\ifboolKV[listdiv]{AffNom}{\IfBooleanTF{#1}{\mathscr{D}}{\mathcal{D}}_{\num{\argcal}}=}{}\EcritureEnsemble[\strut]{\tmplistdiv}}% } %arbre diviseurs @@ -913,4 +913,24 @@ }% } +%====DIV EUCL (OK) +\setKVdefault[diveucl]{% + Quotient=true,% + Reste=true,% + Vide=false,% + Pointilles=\ldots +} +\NewDocumentCommand\DivEucl{ s O{} m m }{% + \restoreKV[diveucl]% + \setKV[diveucl]{#2}% + \ifboolKV[diveucl]{Vide}% + {% + \setKV[diveucl]{Quotient=false,Reste=false}% + }% + {}% + \xdef\tmp@quotient{\xintiiQuo{#3}{#4}}\xdef\tmp@reste{\xintiiRem{#3}{#4}}% + \ensuremath{\num{#3}=\num{#4}\times\ifboolKV[diveucl]{Quotient}{\xintifboolexpr{\tmp@quotient < 0}{(\num{\tmp@quotient})}{\num{\tmp@quotient}}}{\useKV[diveucl]{Pointilles}}+\ifboolKV[diveucl]{Reste}{\num{\tmp@reste}}{\useKV[diveucl]{Pointilles}}}% + \IfBooleanT{#1}{~avec $0 \leqslant \num{\xintiiRem{#3}{#4}} < \xintifboolexpr{#4 < 0}{\lvert\num{#4}\rvert}{\num{#4}}$}% +} + \endinput \ No newline at end of file diff --git a/macros/latex/contrib/proflycee/tex/proflycee-tools-complexes.tex b/macros/latex/contrib/proflycee/tex/proflycee-tools-complexes.tex new file mode 100644 index 0000000000..ca64c0ac40 --- /dev/null +++ b/macros/latex/contrib/proflycee/tex/proflycee-tools-complexes.tex @@ -0,0 +1,609 @@ +% proflycee-tools-complexes.tex +% Copyright 2023 Cédric Pierquet +% Released under the LaTeX Project Public License v1.3c or later, see http://www.latex-project.org/lppl.txt + +\NewDocumentCommand\PartieReelle{ D<>{} m O{\PartReRes} }{% + \StrSubstitute{#2}{I}{0}[#3]% + \IfEq{#1}{n}% + {\ensuremath{\num{\xinteval{#3}}}}{}% + \IfEq{#1}{f}% + {\ensuremath{\ConversionFraction{#3}}}{}% + \IfEq{#1}{df}% + {\ensuremath{\ConversionFraction[d]{#3}}}{}% +} +\NewDocumentCommand\PartieImaginaire{ D<>{} m O{\PartImRes} }{% + \StrSubstitute{#2}{I}{0}[\TmpPartReCplxA]% + \StrSubstitute{(#2)-(\TmpPartReCplxA)}{I}{1}[#3]% + \IfEq{#1}{n}% + {\ensuremath{\num{\xinteval{#3}}}}{}% + \IfEq{#1}{f}% + {\ensuremath{\ConversionFraction{#3}}}{}% + \IfEq{#1}{df}% + {\ensuremath{\ConversionFraction[d]{#3}}}{}% +} + +\NewDocumentCommand\AffComplexe{ O{} }{% + \ensuremath{% + \xintifboolexpr{\xinttmpreCalc == 0 'and' \xinttmpimCalc == 0}{0}{}% + \xintifboolexpr{\xinttmpreCalc == 0 'and' \xinttmpimCalc == 1}{\i}{}% + \xintifboolexpr{\xinttmpreCalc == 0 'and' \xinttmpimCalc == -1}{-\i}{}% + \xintifboolexpr{\xinttmpreCalc == 0 'and' abs(\xinttmpimCalc) != 1 'and' \xinttmpimCalc != 0}{\ConversionFraction[#1]{\tmpimCalc}\i}{}% + \xintifboolexpr{\xinttmpreCalc != 0 'and' \xinttmpimCalc < 0 'and' \xinttmpimCalc != -1}{\ConversionFraction[#1]{\tmpreCalc}-\ConversionFraction[#1]{-(\tmpimCalc)}\i}{}% + \xintifboolexpr{\xinttmpreCalc != 0 'and' \xinttmpimCalc == -1}{\ConversionFraction[#1]{\tmpreCalc}-\i}{}% + \xintifboolexpr{\xinttmpreCalc != 0 'and' \xinttmpimCalc == 1}{\ConversionFraction[#1]{\tmpreCalc}+\i}{}% + \xintifboolexpr{\xinttmpreCalc != 0 'and' \xinttmpimCalc > 0 'and' \xinttmpimCalc != 1}{\ConversionFraction[#1]{\tmpreCalc}+\ConversionFraction[#1]{\tmpimCalc}\i}{}% + \xintifboolexpr{\xinttmpreCalc != 0 'and' \xinttmpimCalc == 0}{\ConversionFraction[#1]{\tmpreCalc}}{}% + }% +} + +\NewDocumentCommand\Complexe{ O{} m }{% + \PartieReelle{#2}[\tmpreA]% + \PartieImaginaire{#2}[\tmpimA]% + \xdef\xinttmpreCalc{\xinteval{\tmpreA}}% + \xdef\xinttmpimCalc{\xinteval{\tmpimA}}% + \ensuremath{% + \xintifboolexpr{\xinttmpreCalc == 0 'and' \xinttmpimCalc == 0}{0}{}% + \xintifboolexpr{\xinttmpreCalc == 0 'and' \xinttmpimCalc == 1}{\i}{}% + \xintifboolexpr{\xinttmpreCalc == 0 'and' \xinttmpimCalc == -1}{-\i}{}% + \xintifboolexpr{\xinttmpreCalc == 0 'and' abs(\xinttmpimCalc) != 1 'and' \xinttmpimCalc != 0}{\ConversionFraction[#1]{\tmpimA}\i}{}% + \xintifboolexpr{\xinttmpreCalc != 0 'and' \xinttmpimCalc < 0 'and' \xinttmpimCalc != -1}{\ConversionFraction[#1]{\tmpreA}-\ConversionFraction[#1]{-(\tmpimA)}\i}{}% + \xintifboolexpr{\xinttmpreCalc != 0 'and' \xinttmpimCalc == -1}{\ConversionFraction[#1]{\tmpreA}-\i}{}% + \xintifboolexpr{\xinttmpreCalc != 0 'and' \xinttmpimCalc == 1}{\ConversionFraction[#1]{\tmpreA}+\i}{}% + \xintifboolexpr{\xinttmpreCalc != 0 'and' \xinttmpimCalc > 0 'and' \xinttmpimCalc != 1}{\ConversionFraction[#1]{\tmpreA}+\ConversionFraction[#1]{\tmpimA}\i}{}% + \xintifboolexpr{\xinttmpreCalc != 0 'and' \xinttmpimCalc == 0}{\ConversionFraction[#1]{\tmpreA}}{}% + }% +} + +\NewDocumentCommand\SommeComplexes{ O{} m m }{% + \PartieReelle{#2}[\tmpreA]% + \PartieReelle{#3}[\tmpreB]% + \PartieImaginaire{#2}[\tmpimA]% + \PartieImaginaire{#3}[\tmpimB]% + \xdef\tmpreCalc{(\tmpreA)+(\tmpreB)}% + \xdef\xinttmpreCalc{\xinteval{(\tmpreA)+(\tmpreB)}}% + \xdef\tmpimCalc{(\tmpimA)+(\tmpimB)}% + \xdef\xinttmpimCalc{\xinteval{(\tmpimA)+(\tmpimB)}}% + %\xinttmpreCalc\text{ et }\xinttmpimCalc. + \AffComplexe[#1]% +} + +\NewDocumentCommand\ProduitComplexes{ O{} m m }{% + \PartieReelle{#2}[\tmpreA]% + \PartieReelle{#3}[\tmpreB]% + \PartieImaginaire{#2}[\tmpimA]% + \PartieImaginaire{#3}[\tmpimB]% + \xdef\tmpreCalc{(\tmpreA)*(\tmpreB)-(\tmpimA)*(\tmpimB)}% + \xdef\xinttmpreCalc{\xinteval{\tmpreCalc}}% + \xdef\tmpimCalc{(\tmpreA)*(\tmpimB)+(\tmpimA)*(\tmpreB)}% + \xdef\xinttmpimCalc{\xinteval{\tmpimCalc}}% + %\xinttmpreCalc\text{ et }\xinttmpimCalc. + \AffComplexe[#1]% +} + +\NewDocumentCommand\QuotientComplexes{ O{} m m }{% + \PartieReelle{#2}[\tmpreA]% + \PartieReelle{#3}[\tmpreB]% + \PartieImaginaire{#2}[\tmpimA]% + \PartieImaginaire{#3}[\tmpimB]% + \xdef\tmpreCalc{((\tmpreA)*(\tmpreB)+(\tmpimA)*(\tmpimB))/((\tmpreB)*(\tmpreB)+(\tmpimB)*(\tmpimB))}% + \xdef\xinttmpreCalc{\xinteval{\tmpreCalc}}% + \xdef\tmpimCalc{(-(\tmpreA)*(\tmpimB)+(\tmpimA)*(\tmpreB))/((\tmpreB)*(\tmpreB)+(\tmpimB)*(\tmpimB))}% + \xdef\xinttmpimCalc{\xinteval{\tmpimCalc}}% + %\xinttmpreCalc\text{ et }\xinttmpimCalc. + \AffComplexe[#1]% +} + +\NewDocumentCommand\CarreComplexe{ O{} m }{% + \PartieReelle{#2}[\tmpreA]% + \PartieImaginaire{#2}[\tmpimA]% + \xdef\tmpreCalc{(\tmpreA)*(\tmpreA)-(\tmpimA)*(\tmpimA)}% + \xdef\xinttmpreCalc{\xinteval{\tmpreCalc}}% + \xdef\tmpimCalc{2*(\tmpreA)*(\tmpimA)}% + \xdef\xinttmpimCalc{\xinteval{\tmpimCalc}}% + %\xinttmpreCalc\text{ et }\xinttmpimCalc. + \AffComplexe[#1]% +} + +\NewDocumentCommand\CubeComplexe{ O{} m }{% + \PartieReelle{#2}[\tmpreA]% + \PartieImaginaire{#2}[\tmpimA]% + \xdef\tmpreCalc{(\tmpreA)*(\tmpreA)*(\tmpreA)-3*(\tmpreA)*(\tmpimA)*(\tmpimA)}% + \xdef\xinttmpreCalc{\xinteval{\tmpreCalc}}% + \xdef\tmpimCalc{3*(\tmpreA)*(\tmpreA)*(\tmpimA)-(\tmpimA)*(\tmpimA)*(\tmpimA)}% + \xdef\xinttmpimCalc{\xinteval{\tmpimCalc}}% + %\xinttmpreCalc\text{ et }\xinttmpimCalc. + \AffComplexe[#1]% +} + +\NewDocumentCommand\ModuleComplexe{ m }{% + \PartieReelle{#1}[\tmpreA]% + \PartieImaginaire{#1}[\tmpimA]% + \IfSubStr{\tmpreA}{sqrt}% + {% + \StrDel{\tmpreA}{sqrt}[\tmpretmpA]% + }% + {% + \xdef\tmpretmpA{\tmpreA}% + }% + \IfSubStr{\tmpimA}{sqrt}% + {% + \StrDel{\tmpimA}{sqrt}[\tmpimtmpA]% + }% + {% + \xdef\tmpimtmpA{\tmpimA}% + }% + \IfSubStr{\tmpreA}{sqrt}% + {% + \IfSubStr{\tmpimA}{sqrt}% + {% + \xdef\tmpCarreModule{abs(\tmpretmpA)+abs(\tmpimtmpA)}% + }% + {% + \xdef\tmpCarreModule{abs(\tmpretmpA)+(\tmpimtmpA)*(\tmpimtmpA)}% + }% + }% + {% + \xdef\tmpCarreModule{(\tmpretmpA)*(\tmpretmpA)+(\tmpimtmpA)*(\tmpimtmpA)}% + }% + \ensuremath{\SimplificationRacine{\tmpCarreModule}}% +} + +\NewDocumentCommand\ArgumentComplexe{ O{} m }{% + \PartieReelle{#2}[\tmpreA]% + \PartieImaginaire{#2}[\tmpimA]% + \xdef\tmpCarreModule{(\tmpreA)*(\tmpreA)+(\tmpimA)*(\tmpimA)}% + \xdef\tmpModUnRe{(\tmpreA)/(sqrt(\tmpCarreModule))}% + \xdef\tmpModUnIm{(\tmpimA)/(sqrt(\tmpCarreModule))}% + \ensuremath{% + \xintifboolexpr{\tmpModUnRe == 1 'and' \tmpModUnIm == 0}{0}{}% + \xintifboolexpr{\tmpModUnRe == -1 'and' \tmpModUnIm == 0}{\pi}{}% + \xintifboolexpr{\tmpModUnRe == 0.5 'and' \tmpModUnIm > 0}{\IfEq{#1}{d}{\dfrac{\pi}{3}}{\frac{\pi}{3}}}{}% + \xintifboolexpr{\tmpModUnRe == 0.5 'and' \tmpModUnIm < 0}{\IfEq{#1}{d}{\dfrac{-\pi}{3}}{\frac{-\pi}{3}}}{}% + \xintifboolexpr{\tmpModUnRe == -0.5 'and' \tmpModUnIm > 0}{\IfEq{#1}{d}{\dfrac{2\pi}{3}}{\frac{2\pi}{3}}}{}% + \xintifboolexpr{\tmpModUnRe == -0.5 'and' \tmpModUnIm < 0}{\IfEq{#1}{d}{\dfrac{-2\pi}{3}}{\frac{-2\pi}{3}}}{}% + \xintifboolexpr{\tmpModUnRe > 0 'and' \tmpModUnIm == 0.5}{\IfEq{#1}{d}{\dfrac{\pi}{6}}{\frac{\pi}{6}}}{}% + \xintifboolexpr{\tmpModUnRe < 0 'and' \tmpModUnIm == 0.5}{\IfEq{#1}{d}{\dfrac{5\pi}{6}}{\frac{5\pi}{6}}}{}% + \xintifboolexpr{\tmpModUnRe > 0 'and' \tmpModUnIm == -0.5}{\IfEq{#1}{d}{\dfrac{-\pi}{6}}{\frac{-\pi}{6}}}{}% + \xintifboolexpr{\tmpModUnRe < 0 'and' \tmpModUnIm == -0.5}{\IfEq{#1}{d}{\dfrac{-5\pi}{6}}{\frac{-5\pi}{6}}}{}% + \xintifboolexpr{\tmpModUnRe == \tmpModUnIm 'and' \tmpModUnRe > 0}{\IfEq{#1}{d}{\dfrac{\pi}{4}}{\frac{\pi}{4}}}{}% + \xintifboolexpr{\tmpModUnRe == \tmpModUnIm 'and' \tmpModUnRe < 0}{\IfEq{#1}{d}{\dfrac{-3\pi}{4}}{\frac{-3\pi}{4}}}{}% + \xintifboolexpr{\tmpModUnRe == -\tmpModUnIm 'and' \tmpModUnRe > 0}{\IfEq{#1}{d}{\dfrac{-\pi}{4}}{\frac{-\pi}{4}}}{}% + \xintifboolexpr{\tmpModUnRe == -\tmpModUnIm 'and' \tmpModUnRe < 0}{\IfEq{#1}{d}{\dfrac{3\pi}{4}}{\frac{3\pi}{4}}}{}% + \xintifboolexpr{\tmpModUnRe == 0 'and' \tmpModUnIm == 1}{\IfEq{#1}{d}{\dfrac{\pi}{2}}{\frac{\pi}{2}}}{}% + \xintifboolexpr{\tmpModUnRe == 0 'and' \tmpModUnIm == -1}{\IfEq{#1}{d}{\dfrac{-\pi}{2}}{\frac{-\pi}{2}}}{}% + }% +} + +\NewDocumentCommand\FormeExpoComplexe{ m }{% + \PartieReelle{#1}[\tmpreA]% + \PartieImaginaire{#1}[\tmpimA]% + \IfSubStr{\tmpreA}{sqrt}% + {% + \StrDel{\tmpreA}{sqrt}[\tmpretmpA]% + }% + {% + \xdef\tmpretmpA{\tmpreA}% + }% + \IfSubStr{\tmpimA}{sqrt}% + {% + \StrDel{\tmpimA}{sqrt}[\tmpimtmpA]% + }% + {% + \xdef\tmpimtmpA{\tmpimA}% + }% + \IfSubStr{\tmpreA}{sqrt}% + {% + \IfSubStr{\tmpimA}{sqrt}% + {% + \xdef\tmpCarreModule{abs(\tmpretmpA)+abs(\tmpimtmpA)}% + }% + {% + \xdef\tmpCarreModule{abs(\tmpretmpA)+(\tmpimtmpA)*(\tmpimtmpA)}% + }% + }% + {% + \xdef\tmpCarreModule{(\tmpretmpA)*(\tmpretmpA)+(\tmpimtmpA)*(\tmpimtmpA)}% + }% + \xdef\tmpModUnRe{(\tmpreA)/(sqrt(\tmpCarreModule))}% + \xdef\tmpModUnIm{(\tmpimA)/(sqrt(\tmpCarreModule))}% + \ensuremath{% + \xintifboolexpr{\tmpCarreModule == 1}{}{\SimplificationRacine{\tmpCarreModule}}% + \e^{% + \xintifboolexpr{\tmpModUnRe == 1 'and' \tmpModUnIm == 0}{0}{}% + \xintifboolexpr{\tmpModUnRe == -1 'and' \tmpModUnIm == 0}{\i\pi}{}% + \xintifboolexpr{\tmpModUnRe == 0.5 'and' \tmpModUnIm > 0}{\IfEq{#1}{d}{\dfrac{\i\pi}{3}}{\frac{\i\pi}{3}}}{}% + \xintifboolexpr{\tmpModUnRe == 0.5 'and' \tmpModUnIm < 0}{\IfEq{#1}{d}{\dfrac{-\i\pi}{3}}{\frac{-\i\pi}{3}}}{}% + \xintifboolexpr{\tmpModUnRe == -0.5 'and' \tmpModUnIm > 0}{\IfEq{#1}{d}{\dfrac{2\i\pi}{3}}{\frac{2\i\pi}{3}}}{}% + \xintifboolexpr{\tmpModUnRe == -0.5 'and' \tmpModUnIm < 0}{\IfEq{#1}{d}{\dfrac{-2\i\pi}{3}}{\frac{-2\i\pi}{3}}}{}% + \xintifboolexpr{\tmpModUnRe > 0 'and' \tmpModUnIm == 0.5}{\IfEq{#1}{d}{\dfrac{\i\pi}{6}}{\frac{\i\pi}{6}}}{}% + \xintifboolexpr{\tmpModUnRe < 0 'and' \tmpModUnIm == 0.5}{\IfEq{#1}{d}{\dfrac{5\i\pi}{6}}{\frac{5\i\pi}{6}}}{}% + \xintifboolexpr{\tmpModUnRe > 0 'and' \tmpModUnIm == -0.5}{\IfEq{#1}{d}{\dfrac{-\i\pi}{6}}{\frac{-\i\pi}{6}}}{}% + \xintifboolexpr{\tmpModUnRe < 0 'and' \tmpModUnIm == -0.5}{\IfEq{#1}{d}{\dfrac{-5\i\pi}{6}}{\frac{-5\i\pi}{6}}}{}% + \xintifboolexpr{\tmpModUnRe == \tmpModUnIm 'and' \tmpModUnRe > 0}{\IfEq{#1}{d}{\dfrac{\i\pi}{4}}{\frac{\i\pi}{4}}}{}% + \xintifboolexpr{\tmpModUnRe == \tmpModUnIm 'and' \tmpModUnRe < 0}{\IfEq{#1}{d}{\dfrac{-3\i\pi}{4}}{\frac{-3\i\pi}{4}}}{}% + \xintifboolexpr{\tmpModUnRe == -\tmpModUnIm 'and' \tmpModUnRe > 0}{\IfEq{#1}{d}{\dfrac{-\i\pi}{4}}{\frac{-\i\pi}{4}}}{}% + \xintifboolexpr{\tmpModUnRe == -\tmpModUnIm 'and' \tmpModUnRe < 0}{\IfEq{#1}{d}{\dfrac{3\i\pi}{4}}{\frac{3\i\pi}{4}}}{}% + \xintifboolexpr{\tmpModUnRe == 0 'and' \tmpModUnIm == 1}{\IfEq{#1}{d}{\dfrac{\i\pi}{2}}{\frac{\i\pi}{2}}}{}% + \xintifboolexpr{\tmpModUnRe == 0 'and' \tmpModUnIm == -1}{\IfEq{#1}{d}{\dfrac{-\i\pi}{2}}{\frac{-\i\pi}{2}}}{}% + }% + }% +} + +%====commandes alternatives +\NewDocumentCommand\ExtractionCoeffExprRacines{ m O{\tmpCoeffA} O{\tmpCoeffB} O{\tmpCoeffC} O{\tmpCoeffD} }{%a*rac(b)+c*rac(d) + \IfSubStr{#1}{+} + {% + \StrCut{#1}{+}{\exprtestG}{\exprtestD}% + \IfSubStr{\exprtestG}{*sqrt}% + {% + \StrBefore{\exprtestG}{*}[#2]% + \StrBetween{\exprtestG}{sqrt(}{)}[#3]% + }% + {% + \xdef#2{\exprtestG}\xdef#3{1}% + }% + \IfSubStr{\exprtestD}{*sqrt}% + {% + \StrBefore{\exprtestD}{*}[#4]% + \StrBetween{\exprtestD}{sqrt(}{)}[#5]% + }% + {% + \xdef#4{\exprtestD}\xdef#5{1}% + }% + }% + {% + %si 2 moins... + \StrCount{#1}{-}[\tmpNbmoins]% + \xintifboolexpr{\tmpNbmoins == 2}% + {% + \StrCut[2]{#1}{-}{\exprtestG}{\exprtestD}% + }% + {% + \StrCut{#1}{-}{\exprtestG}{\exprtestD}% + }% + \IfSubStr{\exprtestG}{*sqrt}% + {% + \StrBefore{\exprtestG}{*}[#2]% + \StrBetween{\exprtestG}{sqrt(}{)}[#3]% + }% + {% + \xdef#2{\exprtestG}\xdef#3{1}% + }% + \IfSubStr{\exprtestD}{*sqrt}% + {% + \StrBefore{\exprtestD}{*}[#4]% + \xdef#4{-#4}% + \StrBetween{\exprtestD}{sqrt(}{)}[#5]% + }% + {% + \xdef#4{-#4}\xdef#5{1}% + }% + }% +} + +\NewDocumentCommand\SimplifCarreExprRacine{ O{} m }{% + \ExtractionCoeffExprRacines{#2}% + \xintifboolexpr{\tmpCoeffA > 0 'and' \tmpCoeffC > 0}% + {% + \ensuremath{% + \ConversionFraction[#1]{(\tmpCoeffA)*(\tmpCoeffA)*(\tmpCoeffB)+(\tmpCoeffC)*(\tmpCoeffC)*(\tmpCoeffD)}+% + \IfEq{#1}{d}{\displaystyle}{}\SimplificationRacine{4*(\tmpCoeffA)*(\tmpCoeffA)*(\tmpCoeffC)*(\tmpCoeffC)*(\tmpCoeffB)*(\tmpCoeffD)}% + }% + }% + {}% + \xintifboolexpr{\tmpCoeffA > 0 'and' \tmpCoeffC < 0}% + {% + \ensuremath{% + \ConversionFraction[#1]{(\tmpCoeffA)*(\tmpCoeffA)*(\tmpCoeffB)+(\tmpCoeffC)*(\tmpCoeffC)*(\tmpCoeffD)}-% + \IfEq{#1}{d}{\displaystyle}{}\SimplificationRacine{4*(\tmpCoeffA)*(\tmpCoeffA)*(\tmpCoeffC)*(\tmpCoeffC)*(\tmpCoeffB)*(\tmpCoeffD)}% + }% + }% + {}% + \xintifboolexpr{\tmpCoeffA < 0 'and' \tmpCoeffC > 0}% + {% + \ensuremath{% + \ConversionFraction[#1]{(\tmpCoeffA)*(\tmpCoeffA)*(\tmpCoeffB)+(\tmpCoeffC)*(\tmpCoeffC)*(\tmpCoeffD)}-% + \IfEq{#1}{d}{\displaystyle}{}\SimplificationRacine{4*(\tmpCoeffA)*(\tmpCoeffA)*(\tmpCoeffC)*(\tmpCoeffC)*(\tmpCoeffB)*(\tmpCoeffD)}% + }% + }% + {}% + \xintifboolexpr{\tmpCoeffA < 0 'and' \tmpCoeffC < 0}% + {% + \ensuremath{% + \ConversionFraction[#1]{(\tmpCoeffA)*(\tmpCoeffA)*(\tmpCoeffB)+(\tmpCoeffC)*(\tmpCoeffC)*(\tmpCoeffD)}+% + \IfEq{#1}{d}{\displaystyle}{}\SimplificationRacine{4*(\tmpCoeffA)*(\tmpCoeffA)*(\tmpCoeffC)*(\tmpCoeffC)*(\tmpCoeffB)*(\tmpCoeffD)}% + }% + }% + {}% +} + +\NewDocumentCommand\CalculModuleCplx{ O{} m m }{% + \ExtractionCoeffExprRacines{#2}[\Crea][\Creb][\Crec][\Cred]% + \ExtractionCoeffExprRacines{#3}[\Cima][\Cimb][\Cimc][\Cimd]% + \xdef\TmpCoeffsDebut{(\Crea)*(\Crea)*(\Creb)+(\Crec)*(\Crec)*(\Cred)+(\Cima)*(\Cima)*(\Cimb)+(\Cimc)*(\Cimc)*(\Cimd)}% + \xdef\TmpCoeffsRacineA{4*(\Crea)*(\Crea)*(\Crec)*(\Crec)*(\Creb)*(\Cred)}% + \xdef\TmpCoeffsRacineB{4*(\Cima)*(\Cima)*(\Cimc)*(\Cimc)*(\Cimb)*(\Cimd)}% + %\xinteval{\TmpCoeffsDebut}/\xinteval{\TmpCoeffsRacineA}/\xinteval{\TmpCoeffsRacineB}/\xinteval{(\Crea)*(\Crec)}/\xinteval{(\Cima)*(\Cimc)}= + \xintifboolexpr{\TmpCoeffsRacineA == 0 'and' \TmpCoeffsRacineB == 0}% + {% + \ensuremath{\IfEq{#1}{d}{\displaystyle}{}\SimplificationRacine{\TmpCoeffsDebut}}% + }% + {}% + \xintifboolexpr{\TmpCoeffsRacineA == 0 'and' \TmpCoeffsRacineB != 0}% + {% + \ensuremath{\IfEq{#1}{d}{\displaystyle}{}\sqrt{\SimplificationRacine{(\TmpCoeffsDebut)*(\TmpCoeffsDebut)}\xintifboolexpr{(\Cima)*(\Cimc) < 0}{-}{+}\SimplificationRacine{\TmpCoeffsRacineB}}}% + }% + {}% + \xintifboolexpr{\TmpCoeffsRacineA != 0 'and' \TmpCoeffsRacineB == 0}% + {% + \ensuremath{\IfEq{#1}{d}{\displaystyle}{}\sqrt{\SimplificationRacine{(\TmpCoeffsDebut)*(\TmpCoeffsDebut)}\xintifboolexpr{(\Crea)*(\Crec) < 0}{-}{+}\SimplificationRacine{\TmpCoeffsRacineA}}}% + }% + {}% + \xintifboolexpr{\TmpCoeffsRacineA != 0 'and' \TmpCoeffsRacineB != 0 'and' (\Crea)*(\Crec) < 0 'and' (\Cima)*(\Cimc) > 0 'and' \TmpCoeffsRacineA == \TmpCoeffsRacineB}% + {% + \ensuremath{\IfEq{#1}{d}{\displaystyle}{}\SimplificationRacine{\TmpCoeffsDebut}}% + }% + {}% + \xintifboolexpr{\TmpCoeffsRacineA != 0 'and' \TmpCoeffsRacineB != 0 'and' (\Crea)*(\Crec) > 0 'and' (\Cima)*(\Cimc) < 0 'and' \TmpCoeffsRacineA == \TmpCoeffsRacineB}% + {% + \ensuremath{\IfEq{#1}{d}{\displaystyle}{}\SimplificationRacine{\TmpCoeffsDebut}}% + }% + {}% + \xintifboolexpr{\TmpCoeffsRacineA != \TmpCoeffsRacineB}% + {% + \ensuremath{\IfEq{#1}{d}{\displaystyle}{}\sqrt{\SimplificationRacine{(\TmpCoeffsDebut)*(\TmpCoeffsDebut)}\xintifboolexpr{(\Crea)*(\Crec) < 0}{-}{+}\SimplificationRacine{\TmpCoeffsRacineA}\xintifboolexpr{(\Cima)*(\Cimc) < 0}{-}{+}\SimplificationRacine{\TmpCoeffsRacineB}}}% + }% + {}% +} + +\NewDocumentCommand\TestArgumentComplexe{ O{} m m m }{% + \xintifboolexpr{\TmpArg == #2 'or' \TmpArg == #3}{\ensuremath{\IfEq{#1}{d}{\displaystyle}{}#4}}{}% +} + +\NewDocumentCommand\CalculArgumentCplx{ s O{} m m }{% + \xdef\TmpArg{\xintfloateval{trunc(Argd(#3,#4),1)}}%\TmpArg% + \IfBooleanTF{#1}% + {% + %les pi/2 + \TestArgumentComplexe[#2]{0}{0.0}{0}% + \TestArgumentComplexe[#2]{90}{90.0}{\frac{\pi}{2}}% + \TestArgumentComplexe[#2]{-90}{-90.0}{\frac{3\pi}{2}}% + \TestArgumentComplexe[#2]{180}{180.0}{\pi}% + %les pi/3 + \TestArgumentComplexe[#2]{60}{60.0}{\frac{\pi}{3}}% + \TestArgumentComplexe[#2]{120}{120.0}{\frac{2\pi}{3}}% + \TestArgumentComplexe[#2]{-60}{-60.0}{\frac{5\pi}{3}}% + \TestArgumentComplexe[#2]{-120}{-120.0}{\frac{4\pi}{3}}% + %les pi/4 + \TestArgumentComplexe[#2]{45}{45.0}{\frac{\pi}{4}}% + \TestArgumentComplexe[#2]{135}{135.0}{\frac{3\pi}{4}}% + \TestArgumentComplexe[#2]{-45}{-45.0}{\frac{7\pi}{4}}% + \TestArgumentComplexe[#2]{-135}{-135.0}{\frac{5\pi}{4}}% + %les pi/5 + \TestArgumentComplexe[#2]{36}{36.0}{\frac{\pi}{5}}% + \TestArgumentComplexe[#2]{72}{72.0}{\frac{2\pi}{5}}% + \TestArgumentComplexe[#2]{108}{108.0}{\frac{3\pi}{5}}% + \TestArgumentComplexe[#2]{144}{144.0}{\frac{4\pi}{5}}% + \TestArgumentComplexe[#2]{-36}{-36.0}{\frac{9\pi}{5}}% + \TestArgumentComplexe[#2]{-72}{-72.0}{\frac{8\pi}{5}}% + \TestArgumentComplexe[#2]{-108}{-108.0}{\frac{7\pi}{5}}% + \TestArgumentComplexe[#2]{-144}{-144.0}{\frac{6\pi}{5}}% + %les pi/6 + \TestArgumentComplexe[#2]{30}{30.0}{\frac{\pi}{6}}% + \TestArgumentComplexe[#2]{150}{150.0}{\frac{5\pi}{6}}% + \TestArgumentComplexe[#2]{-30}{-30.0}{\frac{11\pi}{6}}% + \TestArgumentComplexe[#2]{-150}{-150.0}{\frac{7\pi}{6}}% + %les pi/8 + \TestArgumentComplexe[#2]{22.5}{22.5}{\frac{\pi}{8}}% + \TestArgumentComplexe[#2]{67.5}{67.5}{\frac{3\pi}{8}}% + \TestArgumentComplexe[#2]{112.5}{112.5}{\frac{5\pi}{8}}% + \TestArgumentComplexe[#2]{157.5}{157.5}{\frac{7\pi}{8}}% + \TestArgumentComplexe[#2]{-22.5}{-22.5}{\frac{15\pi}{8}}% + \TestArgumentComplexe[#2]{-67.5}{-67.5}{\frac{13\pi}{8}}% + \TestArgumentComplexe[#2]{-112.5}{-112.5}{\frac{11\pi}{8}}% + \TestArgumentComplexe[#2]{-157.5}{-157.5}{\frac{9\pi}{8}}% + %les pi/12 + \TestArgumentComplexe[#2]{15}{15.0}{\frac{\pi}{12}}% + \TestArgumentComplexe[#2]{75}{75.0}{\frac{5\pi}{12}}% + \TestArgumentComplexe[#2]{105}{105.0}{\frac{7\pi}{12}}% + \TestArgumentComplexe[#2]{165}{165.0}{\frac{11\pi}{12}}% + \TestArgumentComplexe[#2]{-15}{-15.0}{\frac{23\pi}{12}}% + \TestArgumentComplexe[#2]{-75}{-75.0}{\frac{19\pi}{12}}% + \TestArgumentComplexe[#2]{-105}{-105.0}{\frac{17\pi}{12}}% + \TestArgumentComplexe[#2]{-165}{-165.0}{\frac{13\pi}{12}}% + %les pi/10 + \TestArgumentComplexe[#2]{18}{18.0}{\frac{\pi}{10}}% + \TestArgumentComplexe[#2]{54}{54.0}{\frac{3\pi}{10}}% + \TestArgumentComplexe[#2]{126}{126.0}{\frac{7\pi}{10}}% + \TestArgumentComplexe[#2]{162}{162.0}{\frac{9\pi}{10}}% + \TestArgumentComplexe[#2]{-18}{-18.0}{\frac{19\pi}{10}}% + \TestArgumentComplexe[#2]{-54}{-54.0}{\frac{17\pi}{10}}% + \TestArgumentComplexe[#2]{-126}{-126.0}{\frac{13\pi}{10}}% + \TestArgumentComplexe[#2]{-162}{-162.0}{\frac{11\pi}{10}}% + }% + {% + %les pi/2 + \TestArgumentComplexe[#2]{0}{0.0}{0}% + \TestArgumentComplexe[#2]{90}{90.0}{\frac{\pi}{2}}% + \TestArgumentComplexe[#2]{-90}{-90.0}{\frac{-\pi}{2}}% + \TestArgumentComplexe[#2]{180}{180.0}{\pi}% + %les pi/3 + \TestArgumentComplexe[#2]{60}{60.0}{\frac{\pi}{3}}% + \TestArgumentComplexe[#2]{120}{120.0}{\frac{2\pi}{3}}% + \TestArgumentComplexe[#2]{-60}{-60.0}{\frac{-\pi}{3}}% + \TestArgumentComplexe[#2]{-120}{-120.0}{\frac{-2\pi}{3}}% + %les pi/4 + \TestArgumentComplexe[#2]{45}{45.0}{\frac{\pi}{4}}% + \TestArgumentComplexe[#2]{135}{135.0}{\frac{3\pi}{4}}% + \TestArgumentComplexe[#2]{-45}{-45.0}{\frac{-\pi}{4}}% + \TestArgumentComplexe[#2]{-135}{-135.0}{\frac{-3\pi}{4}}% + %les pi/5 + \TestArgumentComplexe[#2]{36}{36.0}{\frac{\pi}{5}}% + \TestArgumentComplexe[#2]{72}{72.0}{\frac{2\pi}{5}}% + \TestArgumentComplexe[#2]{108}{108.0}{\frac{3\pi}{5}}% + \TestArgumentComplexe[#2]{144}{144.0}{\frac{4\pi}{5}}% + \TestArgumentComplexe[#2]{-36}{-36.0}{\frac{-\pi}{5}}% + \TestArgumentComplexe[#2]{-72}{-72.0}{\frac{-2\pi}{5}}% + \TestArgumentComplexe[#2]{-108}{-108.0}{\frac{-3\pi}{5}}% + \TestArgumentComplexe[#2]{-144}{-144.0}{\frac{-4\pi}{5}}% + %les pi/6 + \TestArgumentComplexe[#2]{30}{30.0}{\frac{\pi}{6}}% + \TestArgumentComplexe[#2]{150}{150.0}{\frac{5\pi}{6}}% + \TestArgumentComplexe[#2]{-30}{-30.0}{\frac{-\pi}{6}}% + \TestArgumentComplexe[#2]{-150}{-150.0}{\frac{-5\pi}{6}}% + %les pi/8 + \TestArgumentComplexe[#2]{22.5}{22.5}{\frac{\pi}{8}}% + \TestArgumentComplexe[#2]{67.5}{67.5}{\frac{3\pi}{8}}% + \TestArgumentComplexe[#2]{112.5}{112.5}{\frac{5\pi}{8}}% + \TestArgumentComplexe[#2]{157.5}{157.5}{\frac{7\pi}{8}}% + \TestArgumentComplexe[#2]{-22.5}{-22.5}{\frac{-\pi}{8}}% + \TestArgumentComplexe[#2]{-67.5}{-67.5}{\frac{-3\pi}{8}}% + \TestArgumentComplexe[#2]{-112.5}{-112.5}{\frac{-5\pi}{8}}% + \TestArgumentComplexe[#2]{-157.5}{-157.5}{\frac{-7\pi}{8}}% + %les pi/12 + \TestArgumentComplexe[#2]{15}{15.0}{\frac{\pi}{12}}% + \TestArgumentComplexe[#2]{75}{75.0}{\frac{5\pi}{12}}% + \TestArgumentComplexe[#2]{105}{105.0}{\frac{7\pi}{12}}% + \TestArgumentComplexe[#2]{165}{165.0}{\frac{11\pi}{12}}% + \TestArgumentComplexe[#2]{-15}{-15.0}{\frac{-\pi}{12}}% + \TestArgumentComplexe[#2]{-75}{-75.0}{\frac{-5\pi}{12}}% + \TestArgumentComplexe[#2]{-105}{-105.0}{\frac{-7\pi}{12}}% + \TestArgumentComplexe[#2]{-165}{-165.0}{\frac{-11\pi}{12}}% + %les pi/10 + \TestArgumentComplexe[#2]{18}{18.0}{\frac{\pi}{10}}% + \TestArgumentComplexe[#2]{54}{54.0}{\frac{3\pi}{10}}% + \TestArgumentComplexe[#2]{126}{126.0}{\frac{7\pi}{10}}% + \TestArgumentComplexe[#2]{162}{162.0}{\frac{9\pi}{10}}% + \TestArgumentComplexe[#2]{-18}{-18.0}{\frac{-\pi}{10}}% + \TestArgumentComplexe[#2]{-54}{-54.0}{\frac{-3\pi}{10}}% + \TestArgumentComplexe[#2]{-126}{-126.0}{\frac{-7\pi}{10}}% + \TestArgumentComplexe[#2]{-162}{-162.0}{\frac{-9\pi}{10}}% + }% +} + +\NewDocumentCommand\CalculFormeExpoCplx{ s O{} m m }{% + \xdef\TmpArg{\xintfloateval{trunc(Argd(#3,#4),1)}}%\TmpArg% + \ensuremath{% + \xintifboolexpr{(#3)**2+(#4)**2 == 1 'and' \TmpArg == 0}{1}{}% + \xintifboolexpr{(#3)**2+(#4)**2 == 1 'and' \TmpArg != 0}{}{\CalculModuleCplx[#2]{#3}{#4}}% + \IfBooleanTF{#1}% + {% + %les pi/2 + \TestArgumentComplexe[#2]{0}{0.0}{}% + \TestArgumentComplexe[#2]{90}{90.0}{\e^{\frac{\i\pi}{2}}}% + \TestArgumentComplexe[#2]{-90}{-90.0}{\e^{\frac{3\i\pi}{2}}}% + \TestArgumentComplexe[#2]{180}{180.0}{\e^{\i\pi}}% + %les pi/3 + \TestArgumentComplexe[#2]{60}{60.0}{\e^{\frac{\i\pi}{3}}}% + \TestArgumentComplexe[#2]{120}{120.0}{\e^{\frac{2\i\pi}{3}}}% + \TestArgumentComplexe[#2]{-60}{-60.0}{\e^{\frac{5\i\pi}{3}}}% + \TestArgumentComplexe[#2]{-120}{-120.0}{\e^{\frac{4\i\pi}{3}}}% + %les pi/4 + \TestArgumentComplexe[#2]{45}{45.0}{\e^{\frac{\i\pi}{4}}}% + \TestArgumentComplexe[#2]{135}{135.0}{\e^{\frac{3\i\pi}{4}}}% + \TestArgumentComplexe[#2]{-45}{-45.0}{\e^{\frac{7\i\pi}{4}}}% + \TestArgumentComplexe[#2]{-135}{-135.0}{\e^{\frac{5\i\pi}{4}}}% + %les pi/5 + \TestArgumentComplexe[#2]{36}{36.0}{\e^{\frac{\i\pi}{5}}}% + \TestArgumentComplexe[#2]{72}{72.0}{\e^{\frac{2\i\pi}{5}}}% + \TestArgumentComplexe[#2]{108}{108.0}{\e^{\frac{3\i\pi}{5}}}% + \TestArgumentComplexe[#2]{144}{144.0}{\e^{\frac{4\i\pi}{5}}}% + \TestArgumentComplexe[#2]{-36}{-36.0}{\e^{\frac{9\i\pi}{5}}}% + \TestArgumentComplexe[#2]{-72}{-72.0}{\e^{\frac{8\i\pi}{5}}}% + \TestArgumentComplexe[#2]{-108}{-108.0}{\e^{\frac{7\i\pi}{5}}}% + \TestArgumentComplexe[#2]{-144}{-144.0}{\e^{\frac{6\i\pi}{5}}}% + %les pi/6 + \TestArgumentComplexe[#2]{30}{30.0}{\e^{\frac{\i\pi}{6}}}% + \TestArgumentComplexe[#2]{150}{150.0}{\e^{\frac{5\i\pi}{6}}}% + \TestArgumentComplexe[#2]{-30}{-30.0}{\e^{\frac{11\i\pi}{6}}}% + \TestArgumentComplexe[#2]{-150}{-150.0}{\e^{\frac{7\i\pi}{6}}}% + %les pi/8 + \TestArgumentComplexe[#2]{22.5}{22.5}{\e^{\frac{\i\pi}{8}}}% + \TestArgumentComplexe[#2]{67.5}{67.5}{\e^{\frac{3\i\pi}{8}}}% + \TestArgumentComplexe[#2]{112.5}{112.5}{\e^{\frac{5\i\pi}{8}}}% + \TestArgumentComplexe[#2]{157.5}{157.5}{\e^{\frac{7\i\pi}{8}}}% + \TestArgumentComplexe[#2]{-22.5}{-22.5}{\e^{\frac{15\i\pi}{8}}}% + \TestArgumentComplexe[#2]{-67.5}{-67.5}{\e^{\frac{13\i\pi}{8}}}% + \TestArgumentComplexe[#2]{-112.5}{-112.5}{\e^{\frac{11\i\pi}{8}}}% + \TestArgumentComplexe[#2]{-157.5}{-157.5}{\e^{\frac{9\i\pi}{8}}}% + %les pi/12 + \TestArgumentComplexe[#2]{15}{15.0}{\e^{\frac{\i\pi}{12}}}% + \TestArgumentComplexe[#2]{75}{75.0}{\e^{\frac{5\i\pi}{12}}}% + \TestArgumentComplexe[#2]{105}{105.0}{\e^{\frac{7\i\pi}{12}}}% + \TestArgumentComplexe[#2]{165}{165.0}{\e^{\frac{11\i\pi}{12}}}% + \TestArgumentComplexe[#2]{-15}{-15.0}{\e^{\frac{23\i\pi}{12}}}% + \TestArgumentComplexe[#2]{-75}{-75.0}{\e^{\frac{19\i\pi}{12}}}% + \TestArgumentComplexe[#2]{-105}{-105.0}{\e^{\frac{17\i\pi}{12}}}% + \TestArgumentComplexe[#2]{-165}{-165.0}{\e^{\frac{13\i\pi}{12}}}% + %les pi/10 + \TestArgumentComplexe[#2]{18}{18.0}{\e^{\frac{\i\pi}{10}}}% + \TestArgumentComplexe[#2]{54}{54.0}{\e^{\frac{3\i\pi}{10}}}% + \TestArgumentComplexe[#2]{126}{126.0}{\e^{\frac{7\i\pi}{10}}}% + \TestArgumentComplexe[#2]{162}{162.0}{\e^{\frac{9\i\pi}{10}}}% + \TestArgumentComplexe[#2]{-18}{-18.0}{\e^{\frac{19\i\pi}{10}}}% + \TestArgumentComplexe[#2]{-54}{-54.0}{\e^{\frac{17\i\pi}{10}}}% + \TestArgumentComplexe[#2]{-126}{-126.0}{\e^{\frac{13\i\pi}{10}}}% + \TestArgumentComplexe[#2]{-162}{-162.0}{\e^{\frac{11\i\pi}{10}}}% + }% + {% + %les pi/2 + \TestArgumentComplexe[#2]{0}{0.0}{}% + \TestArgumentComplexe[#2]{90}{90.0}{\e^{\frac{\i\pi}{2}}}% + \TestArgumentComplexe[#2]{-90}{-90.0}{\e^{\frac{-\i\pi}{2}}}% + \TestArgumentComplexe[#2]{180}{180.0}{\e^{\i\pi}}% + %les pi/3 + \TestArgumentComplexe[#2]{60}{60.0}{\e^{\frac{\i\pi}{3}}}% + \TestArgumentComplexe[#2]{120}{120.0}{\e^{\frac{2\i\pi}{3}}}% + \TestArgumentComplexe[#2]{-60}{-60.0}{\e^{\frac{-\i\pi}{3}}}% + \TestArgumentComplexe[#2]{-120}{-120.0}{\e^{\frac{-2\i\pi}{3}}}% + %les pi/4 + \TestArgumentComplexe[#2]{45}{45.0}{\e^{\frac{\i\pi}{4}}}% + \TestArgumentComplexe[#2]{135}{135.0}{\e^{\frac{3\i\pi}{4}}}% + \TestArgumentComplexe[#2]{-45}{-45.0}{\e^{\frac{-\i\pi}{4}}}% + \TestArgumentComplexe[#2]{-135}{-135.0}{\e^{\frac{-3\i\pi}{4}}}% + %les pi/5 + \TestArgumentComplexe[#2]{36}{36.0}{\e^{\frac{\i\pi}{5}}}% + \TestArgumentComplexe[#2]{72}{72.0}{\e^{\frac{2\i\pi}{5}}}% + \TestArgumentComplexe[#2]{108}{108.0}{\e^{\frac{3\i\pi}{5}}}% + \TestArgumentComplexe[#2]{144}{144.0}{\e^{\frac{4\i\pi}{5}}}% + \TestArgumentComplexe[#2]{-36}{-36.0}{\e^{\frac{-\i\pi}{5}}}% + \TestArgumentComplexe[#2]{-72}{-72.0}{\e^{\frac{-2\i\pi}{5}}}% + \TestArgumentComplexe[#2]{-108}{-108.0}{\e^{\frac{-3\i\pi}{5}}}% + \TestArgumentComplexe[#2]{-144}{-144.0}{\e^{\frac{-4\i\pi}{5}}}% + %les pi/6 + \TestArgumentComplexe[#2]{30}{30.0}{\e^{\frac{\i\pi}{6}}}% + \TestArgumentComplexe[#2]{150}{150.0}{\e^{\frac{5\i\pi}{6}}}% + \TestArgumentComplexe[#2]{-30}{-30.0}{\e^{\frac{-\i\pi}{6}}}% + \TestArgumentComplexe[#2]{-150}{-150.0}{\e^{\frac{-5\i\pi}{6}}}% + %les pi/8 + \TestArgumentComplexe[#2]{22.5}{22.5}{\e^{\frac{\i\pi}{8}}}% + \TestArgumentComplexe[#2]{67.5}{67.5}{\e^{\frac{3\i\pi}{8}}}% + \TestArgumentComplexe[#2]{112.5}{112.5}{\e^{\frac{5\i\pi}{8}}}% + \TestArgumentComplexe[#2]{157.5}{157.5}{\e^{\frac{7\i\pi}{8}}}% + \TestArgumentComplexe[#2]{-22.5}{-22.5}{\e^{\frac{-\i\pi}{8}}}% + \TestArgumentComplexe[#2]{-67.5}{-67.5}{\e^{\frac{-3\i\pi}{8}}}% + \TestArgumentComplexe[#2]{-112.5}{-112.5}{\e^{\frac{-5\i\pi}{8}}}% + \TestArgumentComplexe[#2]{-157.5}{-157.5}{\e^{\frac{-7\i\pi}{8}}}% + %les pi/12 + \TestArgumentComplexe[#2]{15}{15.0}{\e^{\frac{\i\pi}{12}}}% + \TestArgumentComplexe[#2]{75}{75.0}{\e^{\frac{5\i\pi}{12}}}% + \TestArgumentComplexe[#2]{105}{105.0}{\e^{\frac{7\i\pi}{12}}}% + \TestArgumentComplexe[#2]{165}{165.0}{\e^{\frac{11\i\pi}{12}}}% + \TestArgumentComplexe[#2]{-15}{-15.0}{\e^{\frac{-\i\pi}{12}}}% + \TestArgumentComplexe[#2]{-75}{-75.0}{\e^{\frac{-5\i\pi}{12}}}% + \TestArgumentComplexe[#2]{-105}{-105.0}{\e^{\frac{-7\i\pi}{12}}}% + \TestArgumentComplexe[#2]{-165}{-165.0}{\e^{\frac{-11\i\pi}{12}}}% + %les pi/10 + \TestArgumentComplexe[#2]{18}{18.0}{\e^{\frac{\i\pi}{10}}}% + \TestArgumentComplexe[#2]{54}{54.0}{\e^{\frac{3\i\pi}{10}}}% + \TestArgumentComplexe[#2]{126}{126.0}{\e^{\frac{7\i\pi}{10}}}% + \TestArgumentComplexe[#2]{162}{162.0}{\e^{\frac{9\i\pi}{10}}}% + \TestArgumentComplexe[#2]{-18}{-18.0}{\e^{\frac{-\i\pi}{10}}}% + \TestArgumentComplexe[#2]{-54}{-54.0}{\e^{\frac{-3\i\pi}{10}}}% + \TestArgumentComplexe[#2]{-126}{-126.0}{\e^{\frac{-7\i\pi}{10}}}% + \TestArgumentComplexe[#2]{-162}{-162.0}{\e^{\frac{-9\i\pi}{10}}}% + }% + }% +} + +\endinput \ No newline at end of file -- cgit v1.2.3