diff options
author | Norbert Preining <norbert@preining.info> | 2022-11-28 03:03:54 +0000 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2022-11-28 03:03:54 +0000 |
commit | d215ba492183a22167b7cdf9900899ab51f7dda6 (patch) | |
tree | 32b4b1d6266f2afc855301d585edd3001b363ea8 /macros/latex/contrib | |
parent | 6d1b034ffe312cd342bdcc717d7bd694dcad25a9 (diff) |
CTAN sync 202211280303
Diffstat (limited to 'macros/latex/contrib')
-rw-r--r-- | macros/latex/contrib/lt3rawobjects/lt3rawobjects.dtx | 10 | ||||
-rw-r--r-- | macros/latex/contrib/lt3rawobjects/lt3rawobjects.pdf | bin | 538908 -> 538768 bytes | |||
-rw-r--r-- | macros/latex/contrib/pagecolor/README | 25 | ||||
-rw-r--r-- | macros/latex/contrib/pagecolor/pagecolor-example.pdf | bin | 81832 -> 92870 bytes | |||
-rw-r--r-- | macros/latex/contrib/pagecolor/pagecolor.dtx | 328 | ||||
-rw-r--r-- | macros/latex/contrib/pagecolor/pagecolor.pdf | bin | 339411 -> 342986 bytes | |||
-rw-r--r-- | macros/latex/contrib/profcollege/doc/ProfCollege-doc.pdf | bin | 9348583 -> 9452788 bytes | |||
-rw-r--r-- | macros/latex/contrib/profcollege/latex/ProfCollege.sty | 1411 | ||||
-rw-r--r-- | macros/latex/contrib/profcollege/metapost/PfCObjets.mp | 31 |
9 files changed, 1442 insertions, 363 deletions
diff --git a/macros/latex/contrib/lt3rawobjects/lt3rawobjects.dtx b/macros/latex/contrib/lt3rawobjects/lt3rawobjects.dtx index 8fd31317c8..a151fc48ee 100644 --- a/macros/latex/contrib/lt3rawobjects/lt3rawobjects.dtx +++ b/macros/latex/contrib/lt3rawobjects/lt3rawobjects.dtx @@ -22,11 +22,11 @@ % % \iffalse %<*driver> -\ProvidesFile{lt3rawobjects.dtx}[2022/11/26 2.1 Objects and proxies in LaTeX3] +\ProvidesFile{lt3rawobjects.dtx}[2022/11/27 2.1.1 Objects and proxies in LaTeX3] %</driver> %<package>\NeedsTeXFormat{LaTeX2e} %<package>\RequirePackage{expl3}[2022-04-10] -%<package>\ProvidesExplPackage{lt3rawobjects}{2022/11/26}{ 2.1 }{Objects and proxies in LaTeX3} +%<package>\ProvidesExplPackage{lt3rawobjects}{2022/11/27}{ 2.1.1 }{Objects and proxies in LaTeX3} %<*driver> \documentclass[full]{l3doc} \usepackage{lt3rawobjects} @@ -38,8 +38,8 @@ % \fi % % \NewDocumentCommand{\thpkg}{}{\pkg{lt3rawobjects}} -% \NewDocumentCommand{\thvsn}{}{2.1} -% \NewDocumentCommand{\thdta}{}{2022/11/26} +% \NewDocumentCommand{\thvsn}{}{2.1.1} +% \NewDocumentCommand{\thdta}{}{2022/11/27} % \NewDocumentCommand{\fromV}{ m }{{\ttfamily From: #1}} % % \title{The \pkg{lt3rawobjects} package} @@ -942,7 +942,7 @@ \cs_new_protected:Nn \object_member_set:nnn { - \object_member_set_eq:nnvn { #1 }{ #2 } + \object_member_set:nnvn { #1 }{ #2 } { \object_rcmember_adr:nnn { #1 } { #2 _ type }{ str } diff --git a/macros/latex/contrib/lt3rawobjects/lt3rawobjects.pdf b/macros/latex/contrib/lt3rawobjects/lt3rawobjects.pdf Binary files differindex ff46b3c3ca..68851dde03 100644 --- a/macros/latex/contrib/lt3rawobjects/lt3rawobjects.pdf +++ b/macros/latex/contrib/lt3rawobjects/lt3rawobjects.pdf diff --git a/macros/latex/contrib/pagecolor/README b/macros/latex/contrib/pagecolor/README index 0bae5caeb6..be71d8d8c8 100644 --- a/macros/latex/contrib/pagecolor/README +++ b/macros/latex/contrib/pagecolor/README @@ -1,4 +1,4 @@ -README for pagecolor package, 2022-11-20, v1.1a +README for pagecolor package, 2022-11-27, v1.2a TABLE OF CONTENTS @@ -27,6 +27,9 @@ When \nopagecolor is unknown or broken (crop package), this package provides a replacement. Similar to \newgeometry and \restoregeometry of the geometry package \newpagecolor{...} and \restorepagecolor are provided. +For use with the crop package \backgroundpagecolor{...} +as well as \newbackgroundpagecolor{...} and +\restorebackgroundpagecolor are provided. This material is published under the LPPL 1.3c: This work may be distributed and/or modified under the conditions of the LaTeX Project @@ -36,13 +39,13 @@ https://www.latex-project.org/lppl/lppl-1-3c.txt and the latest version of this license is in https://www.latex-project.org/lppl.txt and version 1.3c or later is part of all distributions of LaTeX version -2008-05-04 or later. +2005-12-01 or later. 2 DOWNLOAD ========== -`pagecolor' is available on CTAN: +"pagecolor" is available on CTAN: https://www.ctan.org/pkg/pagecolor Also a ZIP file is provided that contains the files: @@ -60,7 +63,7 @@ https://mirrors.ctan.org/install/macros/latex/contrib/pagecolor.tds.zip Installation with ZIP file in TDS format ---------------------------------------- -The ZIP file `pagecolor.tds.zip' contains the files +The ZIP file "pagecolor.tds.zip" contains the files sorted in a TDS tree. Thus you can directly unpack the ZIP file inside a TDS tree. See https://www.ctan.org/TDS-guidelines for an explanation @@ -79,9 +82,9 @@ a) Download the pagecolor files from CTAN. If necessary, unpack them. b) Generate the package and driver files: tex pagecolor.dtx -c) Install the file `pagecolor.sty' in your TDS tree: +c) Install the file "pagecolor.sty" in your TDS tree: cp pagecolor.sty TDS:tex/latex/pagecolor/ - Replace `TDS:' by the prefix of your TDS tree + Replace "TDS:" by the prefix of your TDS tree (texmf directory). d) Create the documentation, if necessary, e.g. pdflatex pagecolor.dtx @@ -105,8 +108,8 @@ g) Copy the documentation files to ===================== pagecolor loads other packages: -kvoptions and -xcolor, if the color package has not been loaded before pagecolor +- kvoptions and +- xcolor, if the color package has not been loaded before pagecolor which again load other packages (see the result of the \listfiles command in the log-file of the example). @@ -115,7 +118,7 @@ which again load other packages 5 PACKAGE COMPATIBILITY ======================= -pagecolor should be loaded quite early, i. e. before +pagecolor should be loaded quite early, i.e. before \pagecolor{...} is used by some other package (but can be loaded later using the pagecolor={...} option with accordingly chosen value), but must be loaded after @@ -138,8 +141,8 @@ A bug report should contain: warning messages. * \errorcontextlines=\maxdimen can be added in the TeX code to get more information in TeX error messages. -* Minimal test file that shows the problem, but does not - contain any unnecessary packages and code. +* Minimal test file that shows the problem, + but does not contain any unnecessary packages and code. * Used drivers/programs. * Version information about used packages and programs. * If you are using LaTeX, then add "\listfiles" to the document. diff --git a/macros/latex/contrib/pagecolor/pagecolor-example.pdf b/macros/latex/contrib/pagecolor/pagecolor-example.pdf Binary files differindex ae63e8048c..2f542a3184 100644 --- a/macros/latex/contrib/pagecolor/pagecolor-example.pdf +++ b/macros/latex/contrib/pagecolor/pagecolor-example.pdf diff --git a/macros/latex/contrib/pagecolor/pagecolor.dtx b/macros/latex/contrib/pagecolor/pagecolor.dtx index c23d9c4b86..3c57dacf55 100644 --- a/macros/latex/contrib/pagecolor/pagecolor.dtx +++ b/macros/latex/contrib/pagecolor/pagecolor.dtx @@ -1,7 +1,8 @@ % \iffalse meta-comment % % File: pagecolor.dtx -% Version: 2022-11-20 v1.1a +% Version: 2022-11-27 v1.2a +% Info: Provides thepagecolor % % Copyright (C) 2011 - 2022 by % H.-Martin Muench <Martin dot Muench at Uni-Bonn dot de> @@ -10,9 +11,9 @@ % conditions of the LaTeX Project Public License, either % version 1.3c of this license or (at your option) any later % version. This version of this license is in -% http://www.latex-project.org/lppl/lppl-1-3c.txt +% https://www.latex-project.org/lppl/lppl-1-3c.txt % and the latest version of this license is in -% http://www.latex-project.org/lppl.txt +% https://www.latex-project.org/lppl.txt % and version 1.3c or later is part of all distributions of % LaTeX version 2005-12-01 or later. % @@ -26,7 +27,7 @@ % pagecolor.ins, pagecolor.drv, % pagecolor-example.tex, pagecolor-example.pdf. % -% 'pagecolor' is available on CTAN: +% "pagecolor" is available on CTAN: % https://www.ctan.org/pkg/pagecolor % % Also a TDS.ZIP file is provided that contains all the files @@ -48,7 +49,7 @@ \input docstrip.tex \Msg{******************************************************************} \Msg{* Installation *} -\Msg{* Package: pagecolor 2022-11-20 v1.1a Provides thepagecolor (HMM)*} +\Msg{* Package: pagecolor 2022-11-27 v1.2a Provides thepagecolor (HMM)*} \Msg{******************************************************************} \keepsilent @@ -60,16 +61,11 @@ This is a generated file. Project: pagecolor -Version: 2022-11-20 v1.1a +Version: 2022-11-27 v1.2a Copyright (C) 2011 - 2022 by H.-Martin Muench <Martin dot Muench at Uni-Bonn dot de> -The usual disclaimer applies: -If it does not work right that is your problem. -(Nevertheless, send an e-mail to the maintainer - when you find an error in this package.) - This work may be distributed and/or modified under the conditions of the LaTeX Project Public License, either version 1.3c of this license or (at your option) any later @@ -150,7 +146,7 @@ In memoriam %<*driver> \NeedsTeXFormat{LaTeX2e}[2021-11-15] \ProvidesFile{pagecolor.drv}% - [2022-11-20 v1.1a Provides thepagecolor (HMM)] + [2022-11-27 v1.2a Provides thepagecolor (HMM)] \documentclass{ltxdoc}[2020/12/05]% v2.1b \usepackage{xcolor}[2021/10/31]% v2.13 \usepackage{holtxdoc}[2019/12/09]% v0.30 @@ -178,7 +174,6 @@ In memoriam \end{document} %</driver> % \end{macrocode} -% % \fi % % \GetFileInfo{pagecolor.drv} @@ -200,14 +195,14 @@ In memoriam % % \DoNotIndex{\,,\@bsphack,\@esphack,\\} % \DoNotIndex{\documentclass,\usepackage,\begin,\end,\pagenumbering,\bigskip,\smallskip} -% \DoNotIndex{\space,\newline,\noindent,\pagebreak,\section,\textbf,\textsf,\color,\gdef} +% \DoNotIndex{\space,\newline,\noindent,\linebreak,\pagebreak,\section,\textbf,\textsf,\textit} % \DoNotIndex{\GenerateLogMacros,\holtxdoc,\Oberdiek,\hyperref,\kvoptions,\options,\OCG} -% \DoNotIndex{\lipsum,\ifdefined,\IfPackageAtLeastTF,\IfPackageLoadedTF,\ifx,\listfiles} -% \DoNotIndex{\M\"{u}nch,\Alternatives,\transparent,\newcommand,\verb} -% \DoNotIndex{\pagecolor@info@noline,\pagecolor@warning,\pagecolor@warning@noline} +% \DoNotIndex{\color,\gdef,\lipsum,\ifdefined,\IfPackageAtLeastTF,\IfPackageLoadedTF,\ifx} +% \DoNotIndex{\M\"{u}nch,\Alternatives,\transparent,\newcommand,\verb,\listfiles} +% \DoNotIndex{\pagecolor@info,\pagecolor@info@noline,\pagecolor@warning,\pagecolor@warning@noline} % % \title{The \xpackage{pagecolor} package} -% \date{2022-11-20 v1.1a} +% \date{2022-11-27 v1.2a} % \author{H.-Martin Münch\\\xemail{Martin.Muench at Uni-Bonn.de}} % % \maketitle @@ -224,7 +219,10 @@ In memoriam % broken, this package provides a replacement.\\ % Similar to |\newgeometry| and |\restoregeometry| of the \xpackage{geometry} % package |\newpagecolor{<|\textit{some color}|>}| and |\restorepagecolor| -% are provided. +% are provided.\\ +% For use with the \xpackage{crop} package |\backgroundpagecolor{<|\textit{some color}|>}| +% as well as |\newbackgroundpagecolor{<|\textit{some color}|>}| and \newline +% |\restorebackgroundpagecolor| are provided. % \end{abstract} % % \bigskip @@ -242,7 +240,7 @@ In memoriam % \section{Introduction} % \indent This \LaTeX{} package provides the command |\thepagecolor|, % which gives the current page (background) color, -% \hbox{i.\,e. the} argument used with the most recent call of |\pagecolor{...}|. +% \hbox{i.\,e. the} argument used with the most recent call of |\pagecolor{...}|. % (\verb|\pagecolor| needs to be defined before by the \xpackage{xcolor} or % \xpackage{color} package.) The \xpackage{pagecolor} package should be loaded % before any package sets a page (background) color, but obviously after @@ -255,11 +253,14 @@ In memoriam % |\nopagecolor| command). In that case |\thepagecolor| is |white| and % |\thepagecolornone| is |none|. % When |\nopagecolor| is unknown or in case of the \xpackage{crop} package -% broken, this package provides a replacement depending on option |nopagecolor|. -% Similar to |\newgeometry| and |\restoregeometry| of the \xpackage{geometry} -% package\linebreak -% |\newpagecolor{<|\textit{some color}|>}| and |\restorepagecolor| -% are provided. +% broken, this package provides a replacement depending on option |nopagecolor|. +% Commands to change the background/outer/physical page color when using +% \xpackage{crop} are provided. Similar to |\newgeometry| and |\restoregeometry| +% of the \xpackage{geometry} package |\newpagecolor{<|\textit{some color}|>}| +% and |\restorepagecolor| are provided.\\ +% For use with the \xpackage{crop} package |\backgroundpagecolor{<|\textit{some color}|>}| +% as well as |\newbackgroundpagecolor{<|\textit{some color}|>}| and +% |\restorebackgroundpagecolor| are provided. % % \section{Usage} % @@ -283,13 +284,18 @@ In memoriam % just one page and do not want to (or cannot) manually determine where that page ends,\\ % |\newpagecolor{<|\textit{some color}|>}\afterpage{\restorepagecolor}|\\ % does the trick (and requires a |\usepackage{afterpage}| in the document's -% preamble), or for short\\ -% |\newcommand{\onepagecolor}[1]{%|\\ -% | \newpagecolor{#1}\afterpage{\restorepagecolor}}|\\ -% in the preamble and\\ -% |\onepagecolor{<|\textit{some color}|>}| in the document. +% preamble), or for short % -% \pagebreak +% \newpage +% +% \noindent|\newcommand{\onepagecolor}[1]{%|\\ +% | \newpagecolor{#1}\afterpage{\restorepagecolor}}|\\ +% in the preamble and |\onepagecolor{<|\textit{some color}|>}| in the document.\\ +% When the \xpackage{crop} package is used, |\backgroundpagecolor{<|\textit{some color}|>}| +% can be used to change the background/outer/physical page color and\\ +% |\newbackgroundpagecolor{<|\textit{some color}|>}%|\\ +% |\afterpage{\restorebackgroundpagecolor}%|\\ +% for changing just one background/outer/physical page color. % % \subsection{Options} % \DescribeMacro{options} @@ -368,8 +374,10 @@ In memoriam % The xcolor package would not be needed for just using the base colors. % The color package would be sufficient for that. + % \usepackage[cam,center,a3]{crop}[2017/11/19]% 1.10 + \usepackage[pagecolor={LightGoldenrod1},% - nopagecolor={none}]{pagecolor}[2022-11-20]% v1.1a + nopagecolor={none}]{pagecolor}[2022-11-27]% v1.2a \usepackage{afterpage}[2014/10/28]% v1.08 % The afterpage package is generally not needed, @@ -386,7 +394,7 @@ In memoriam \section*{Example for pagecolor} This example demonstrates the use of package\newline -\textsf{pagecolor}, v1.1a as of 2022-11-20 (HMM).\newline +\textsf{pagecolor}, v1.2a as of 2022-11-27 (HMM).\newline The used options were\newline \verb|pagecolor={LightGoldenrod1}|\newline (\verb|pagecolor={none}| would be the default), and\newline @@ -459,14 +467,26 @@ here (i.\,e. green).} The page color was changed back at the end of the page -- in mid-sentence! +\pagebreak + +\backgroundpagecolor{pink} + +When activating the loading of the crop package in the preamble of this +document, \verb|\backgroundpagecolor{<|\textit{some color}\verb|>}| +changes the color of the background/outer/physical page. + + +Analogous to \verb|\newpagecolor{...}| and \verb|\restorepagecolor|, +for the background/outer/physical page +\verb|\newbackgroundpagecolor{<|\textit{some color}\verb|>}| and\linebreak +\verb|\restorebackgroundpagecolor| are provided (but not demonstrated +here). \end{document} %</example> % \end{macrocode} % % \StopEventually{} % -% \newpage -% % \section{The implementation} % % We start off by checking that we are loading into \LaTeXe{} and @@ -478,7 +498,7 @@ in mid-sentence! % % \begin{macrocode} \NeedsTeXFormat{LaTeX2e}[2021-11-15] -\ProvidesPackage{pagecolor}[2022-11-20 1.1a +\ProvidesPackage{pagecolor}[2022-11-27 1.2a Provides thepagecolor (HMM)] % \end{macrocode} % @@ -486,7 +506,8 @@ in mid-sentence! % % \begin{macrocode} %% Provides the \thepagecolor, \thepagecolornone, \newpagecolor{...}, -%% and \restorepagecolor commands and a replacement for the +%% \restorepagecolor, \backgroundpagecolor, \newbackgroundpagecolor{...}, +%% and \restorebackgroundpagecolor commands and a replacement for the %% \nopagecolor command, if this is not available. % \end{macrocode} % @@ -549,9 +570,6 @@ in mid-sentence! \def\pagecolortmpb{none} \edef\pagecolortmpa{\pagecolor@nopagecolor} \ifx\pagecolortmpa\pagecolortmpb -% \end{macrocode} -% \pagebreak -% \begin{macrocode} \pagecolor@warning@noline{% Option nopagecolor=none requested but \string\nopagecolor\ % unknown: \\% @@ -592,8 +610,7 @@ in mid-sentence! % \end{macrocode} % % before we redefine it to include a definition of |\thepagecolor| -% and\linebreak -% |\thepagecolornone|: +% and \linebreak |\thepagecolornone|: % % \begin{macrocode} \renewcommand{\pagecolor}[1]{\@bsphack% @@ -638,46 +655,26 @@ in mid-sentence! \gdef\pagecolor@cl{0} \IfPackageLoadedTF{crop}{% crop loaded \gdef\pagecolor@cl{1} - \IfPackageAtLeastTF{crop}{2017/11/20}{ - % later than 2017/11/19 v1.10 might be OK - \pagecolor@warning@noline{% - \string\nopagecolor\ did not work with package \\% - crop 2017/11/19 v1.10. A newer version is used, % - which the pagecolor package does not know how to handle. % - Please contact the maintainer of the pagecolor package!% - }% - % Let us just hope everything got fixed: - \renewcommand{\nopagecolor}{% - \xdef\thepagecolor{white}% - \xdef\thepagecolornone{none}% - \orignopagecolor% - % That will not have any effect except when things got fixed! - }% - }{% else: older package version - \pagecolor@warning@noline{% - \string\nopagecolor\ does not work with % - the used crop package. Using \\% - \pagecolor@nopagecolor\ \\% - as nopagecolor now.% - } - \def\pagecolortmpb{none} - \edef\pagecolortmpa{\pagecolor@nopagecolor} - \ifx\pagecolortmpa\pagecolortmpb\relax - \pagecolor@warning@noline{% - Option nopagecolor=none requested % - but this does not work with the crop package. % - By option nopagecolor the "color" to be used with % - \string\nopagecolor\ % - is set. The current value is "none" (maybe by default), % - but the crop package broke \string\nopagecolor . % - Therefore the color cannot be "none". % - Please change the option accordingly! % - As first aid nopagecolor is now set to white.% - } - \setkeys{pagecolor}{nopagecolor=white} - \fi - \renewcommand{\nopagecolor}{\pagecolor{\pagecolor@nopagecolor}} + \pagecolor@info{\string\nopagecolor\space did not work with the crop package % + 2017/11/19 v1.10. Using \\% + \pagecolor@nopagecolor\ \\% + as nopagecolor now.% + } + \def\pagecolortmpb{none} + \edef\pagecolortmpa{\pagecolor@nopagecolor} + \ifx\pagecolortmpa\pagecolortmpb\relax + \pagecolor@warning@noline{% + Option nopagecolor=none requested but this does not work with the % + crop package. By option nopagecolor the "color" to be used with % + \string\nopagecolor\ is set. The current value is "none" (maybe by % + default), but the crop package broke \string\nopagecolor . % + Therefore the color cannot be "none". % + Please change the option accordingly! % + As first aid nopagecolor is now set to white.% } + \setkeys{pagecolor}{nopagecolor=white} + \fi + \renewcommand{\nopagecolor}{\pagecolor{\pagecolor@nopagecolor}} }{% crop not loaded \ifdefined\nopagecolor\relax \gdef\pagecolortmpa{none} @@ -747,13 +744,85 @@ in mid-sentence! % \end{macrocode} % is just a precaution for |\restorecolor| being used when no |\newpagecolor{...}| -% was used before it.\\ +% was used before it. % % When you want to change the color for just one page and do not want to % (or cannot) manually determine where the page ends,\\ % |\newpagecolor{<|\textit{some color}|>}\afterpage{\restorepagecolor}|\\ % does the trick (and requires an additional |\usepackage{afterpage}| in the -% document's preamble).\\ +% document's preamble). +% +% \begin{macro}{\backgroundpagecolor} +% When the \xpackage{crop} package has been loaded, the background/outer/physical page color +% is determined by the last |\pagecolor{...}| in the preamble after \newline +% |\usepackage[...]{crop}| and cannot be changed in the document. When the |\pagecolor{...}| +% is given before |\usepackage[...]{crop}|, a |\nopagecolor| works at the +% background/outer/physical page and not at the inner/foreground/logic page. +% |\nopagecolor| is fixed above. To change the background/outer/physical page color +% during the document, |\backgroundpagecolor{<|\textit{some color}|>}| is provided: +% +% \begin{macrocode} +\newcommand{\backgroundpagecolor}[1]{% + \IfPackageLoadedTF{crop}{% +% \end{macrocode} +% Remember current inner/foreground/logic page color: +% \begin{macrocode} + \xdef\pagecolortmpd{\thepagecolor}% +% \end{macrocode} +% Set inner/foreground page color to color whished for background/\allowbreak outer/\allowbreak +% physical page color: +% \begin{macrocode} + \pagecolor{#1}% +% \end{macrocode} +% Get that color, for example, |\pagecolor{blue}| might result in |\CROP@pagecolor| +% to be |0 0 1 rg 0 0 1 RG|: +% \begin{macrocode} + \xdef\pagecolortmpe{\CROP@pagecolor}% +% \end{macrocode} +% Set the inner/foreground/logic page color back to the color before changing it: +% \begin{macrocode} + \pagecolor{\pagecolortmpd}% +% \end{macrocode} +% Set the background/outer/physical page color: +% \begin{macrocode} + \xdef\CROP@stockcolor{\pagecolortmpe}% + }{\pagecolor@info{\string\backgroundpagecolor\ does not do % + anything when the crop package has not been loaded.}% +% \end{macrocode} +% - except giving this information. +% \begin{macrocode} + }% + } + +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\newbackgroundpagecolor} +% Analogous to |\newpagecolor| and |\restorepagecolor|, +% for the background/\allowbreak outer/\allowbreak physical page we define: +% +% \begin{macrocode} +\newcommand{\newbackgroundpagecolor}[1]{% + \IfPackageLoadedTF{crop}{% + \xdef\pagecolortmpf{\CROP@stockcolor}% + \backgroundpagecolor{#1}% + }{\pagecolor@info{\string\newbackgroundpagecolor\ does not do % + anything when the crop package has not been loaded.}% + }% + } + +% \end{macrocode} +% \end{macro} +% \begin{macro}{\newbackgroundpagecolor} +% \begin{macrocode} +\newcommand{\restorebackgroundpagecolor}{% + \IfPackageLoadedTF{crop}{\xdef\CROP@stockcolor{\pagecolortmpf}}{% + \pagecolor@info{\string\newbackgroundpagecolor\ does not do % + anything when the crop package has not been loaded.}}% + } + +% \end{macrocode} +% \end{macro} % % We checked whether the \xpackage{crop} package had been loaded before % the \xpackage{pagecolor} package, but maybe it has been loaded afterwards. @@ -766,48 +835,26 @@ in mid-sentence! % crop not loaded before pagecolor, but maybe afterwards: \IfPackageLoadedTF{crop}{% crop indeed loaded afterwards. \gdef\pagecolor@cl{1}% -% \end{macrocode} -% \pagebreak -% \begin{macrocode} - \IfPackageAtLeastTF{crop}{2017/11/20}{% - % later than 2017/11/19 v1.10 might be OK - \pagecolor@warning{% - \string\nopagecolor\ did not work with package \\% - crop 2017/11/19 v1.10. A newer version is used, % - which the pagecolor package does not know how to handle. % - Please contact the maintainer of the pagecolor package!% - }% - % Let us just hope everything got fixed: - \renewcommand{\nopagecolor}{% - \xdef\thepagecolor{white}% - \xdef\thepagecolornone{none}% - \orignopagecolor% - % That will not have any effect except when things got fixed! - }% - }{% else: older package version - \pagecolor@warning{pagecolor}{% - \string\nopagecolor\space does not work with % - the used crop package. Using \\% - \pagecolor@nopagecolor\ \\% - as nopagecolor now.% - }% - \def\pagecolortmpb{none}% - \edef\pagecolortmpa{\pagecolor@nopagecolor}% - \ifx\pagecolortmpa\pagecolortmpb% - \pagecolor@warning{% - Option nopagecolor=none requested % - but this does not work with the crop package. % - By option nopagecolor the "color" to be used with % - \string\nopagecolor\ is set. The current value is "none" % - (maybe by default), but the crop package broke % - \string\nopagecolor . Therefore the color cannot be "none". % - Please change the option accordingly! \\% - As first aid nopagecolor is now set to white.% - }% - \setkeys{pagecolor}{nopagecolor=white}% - \fi% - \renewcommand{\nopagecolor}{\pagecolor{\pagecolor@nopagecolor}}% + \pagecolor@info{\string\nopagecolor\space did not work with the crop package % + 2017/11/19 v1.10. Using \\% + \pagecolor@nopagecolor\ \\% + as nopagecolor now.% + }% + \def\pagecolortmpb{none}% + \edef\pagecolortmpa{\pagecolor@nopagecolor}% + \ifx\pagecolortmpa\pagecolortmpb\relax% + \pagecolor@warning@noline{% + Option nopagecolor=none requested but this does not work with % + the crop package. By option nopagecolor the "color" to be used % + with \string\nopagecolor\ is set. The current value is "none" % + (maybe by default), but the crop package broke % + \string\nopagecolor . Therefore the color cannot be "none". % + Please change the option accordingly! % + As first aid nopagecolor is now set to white.% }% + \setkeys{pagecolor}{nopagecolor=white}% + \fi% + \renewcommand{\nopagecolor}{\pagecolor{\pagecolor@nopagecolor}}% }{% crop neither loaded afterwards. }% \fi% @@ -819,8 +866,6 @@ in mid-sentence! %</package> % \end{macrocode} % -% \newpage -% % \section{Installation} % \subsection{Downloads} % Everything is available at \url{https://www.ctan.org}, @@ -867,7 +912,7 @@ in mid-sentence! % The |pagecolor-example.tex| requires the same file as all % documents using the \xpackage{pagecolor} package, i.\,e. % \begin{description} -% \item[-] package \xpackage{pagecolor}, 2022-11-20, v1.1a, +% \item[-] package \xpackage{pagecolor}, 2022-11-27, v1.2a, % \url{https://www.ctan.org/pkg/pagecolor}\\ % (Well, it is the example file for this package, and because you are reading the % documentation for the \xpackage{pagecolor} package, it~can be assumed that you already @@ -893,6 +938,8 @@ in mid-sentence! % This package is only needed for some blind text. % \end{description} % +% \newpage +% % \DescribeMacro{Alternatives} % \DescribeMacro{transparent} % \DescribeMacro{OCG} @@ -1042,9 +1089,9 @@ in mid-sentence! % % \subsection{Refresh file name databases} % -% If your \TeX~distribution (\TeX{} Live, \mikTeX, \teTeX, \dots) relies on -% file name databases, you must refresh these. For example, \teTeX{} users run -% \verb|texhash| or \verb|mktexlsr|. +% If your \TeX~distribution (\TeX\,Live, \mikTeX, \dots) relies on +% file name databases, you must refresh these. For example, \TeX\,Live\ users +% run \verb|texhash| or \verb|mktexlsr|. % % \subsection{Some details for the interested} % @@ -1090,6 +1137,8 @@ in mid-sentence! % The example file, \textsf{pagecolor-example.tex}, can be compiled via\\ % |(pdf)latex pagecolor-example.tex|. % +% \newpage +% % \section{Acknowledgements} % % I would like to thank \textsc{Heiko Oberdiek} for providing a lot of @@ -1107,8 +1156,6 @@ in mid-sentence! % and to \textsc{Reuben Thomas} for suggestions for improvements % of this documentation. % -% \pagebreak -% % \phantomsection % \begin{History}\label{History} % \begin{Version}{2011/07/16 v1.0a} @@ -1147,8 +1194,6 @@ in mid-sentence! % but some of the related code must already be performed earlier. % Bug found by \textsc{Heiner Richter} and reported by % \textsc{Johannes B\"{o}ttcher}, thanks! -% \item This version has been archived at\\ -% \url{https://web.archive.org/web/20161114093809/https://mirror.ctan.org/install/macros/latex/contrib/pagecolor.tds.zip} % \end{Version} % \begin{Version}{2017/05/29 v1.0i} % \item Documentation update following suggestions for improvements by @@ -1157,13 +1202,18 @@ in mid-sentence! % \url{https://web.archive.org/web/20220120221237/https://mirror.ctan.org/install/macros/latex/contrib/pagecolor.tds.zip} % \end{Version} % \begin{Version}{2022-11-20 v1.1a} -% \item Conversion to UTF-8. -% \item Update to \LaTeX{} format 2021-11-15. +% \item Replaced all |colour| (with |u|) by |color| (without |u|). +% \item Converted to UTF-8. +% \item Updated to \LaTeX{} format 2021-11-15. % \item Corrected an error in the example. -% \item \XeLaTeX{} and others now do know \verb|\nopagecolor|. -% \item Package \xpackage{crop} has been updated, but \verb|\nopagecolor| +% \item \XeLaTeX{} and others now do know |\nopagecolor|. +% \item Package \xpackage{crop} has been updated, but |\nopagecolor| % still applies to the physical background sheet instead of the logical foreground area. % \item Now using the \xpackage{hardwrap} package. +% \end{Version} +% \begin{Version}{2022-11-27 v1.2a} +% \item Now also handling the background/outer/physical page color, +% when the \xpackage{crop} package is used. % \item Documentation updates. % \end{Version} % \end{History} @@ -1173,6 +1223,8 @@ in mid-sentence! % When you find a mistake or have a suggestion for an improvement of this package, % please send an e-mail to the maintainer, thanks! (Please see BUG REPORTS in the README.) % +% \newpage +% % \PrintIndex % % \Finale diff --git a/macros/latex/contrib/pagecolor/pagecolor.pdf b/macros/latex/contrib/pagecolor/pagecolor.pdf Binary files differindex 08642c75e5..edbc7cbde2 100644 --- a/macros/latex/contrib/pagecolor/pagecolor.pdf +++ b/macros/latex/contrib/pagecolor/pagecolor.pdf diff --git a/macros/latex/contrib/profcollege/doc/ProfCollege-doc.pdf b/macros/latex/contrib/profcollege/doc/ProfCollege-doc.pdf Binary files differindex 73f0d7167d..65f4d3e66e 100644 --- a/macros/latex/contrib/profcollege/doc/ProfCollege-doc.pdf +++ b/macros/latex/contrib/profcollege/doc/ProfCollege-doc.pdf diff --git a/macros/latex/contrib/profcollege/latex/ProfCollege.sty b/macros/latex/contrib/profcollege/latex/ProfCollege.sty index e6cc0a8a68..5238a5e97e 100644 --- a/macros/latex/contrib/profcollege/latex/ProfCollege.sty +++ b/macros/latex/contrib/profcollege/latex/ProfCollege.sty @@ -4,7 +4,7 @@ \NeedsTeXFormat{LaTeX2e}% \def\filedate{2022/12/01}% \let\PfCfiledate\filedate% -\def\fileversion{0.99-z-b}% +\def\fileversion{0.99-z-c}% \let\PfCfileversion\fileversion% \ProvidesPackage{ProfCollege}[\filedate\space v\fileversion\space Aide pour utiliser LaTeX au college] @@ -51,6 +51,7 @@ \RequirePackage{iftex} \ifluatex +\RequirePackage{luacas} \RequirePackage{luamplib} \everymplib{input PfCSvgnames; input PfCConstantes; input PfCGeometrie; input PfCAfficheur; beginfig(1);} \everyendmplib{endfig;} @@ -347,6 +348,954 @@ } %%% +% Barres de calculs +%%% +\setKVdefault[SuiteBarre]{Litteral=false,Perso=false,Decimaux=false} + +\NewDocumentCommand\BarresCalculs{o m m}{% + \useKVdefault[SuiteBarre]% + \setKV[SuiteBarre]{#1}% + \xdef\PfCListeCalculsBarre{}% + \xdef\PfCListeResultatsBarre{}% + \ignoreemptyitems% + \ifboolKV[SuiteBarre]{Perso}{% + \setsepchar[*]{,*§}% + \readlist*\PfCListeBarresCalculs{#2}% + \foreachitem\compteur\in\PfCListeBarresCalculs{% + \StrChar{#3}{\compteurcnt}[\PfCLettreB]% + \StrSubstitute[0]{\PfCLettreB}{*}{Départ}[\PfCLettreC]% + \xdef\PfCListeResultatsBarre{\PfCListeResultatsBarre \PfCLettreC,}% + }% + \setsepchar{,}% + \readlist*\PfCListeResultats{\PfCListeResultatsBarre}% + \begin{NiceTabular}{ccc}[hvlines] + \xintFor* ##1 in{\xintSeq{1}{\PfCListeResultatslen}}\do{% + \xintifForFirst{\Block{2-1}{}}{\Block{2-1}{\ifboolKV[SuiteBarre]{Decimaux}{% + \num{\fpeval{\PfCListeBarresCalculs[\fpeval{##1-1},1]}}% + }{% + \begin{CAS} + c = \PfCListeBarresCalculs[\fpeval{##1-1},1] + \end{CAS}$\print{c:autosimplify()}$}% + }}&\Block{2-1}{\PfCListeResultats[##1]}&\Block{2-1}{$\PfCListeBarresCalculs[##1,2]$}\\ + &&\\ + }% + \end{NiceTabular} + }{% + \setsepchar{,}%\ignoreemptyitems% + \readlist*\PfCListeBarresCalculs{#2}% + \ifboolKV[SuiteBarre]{Litteral}{% + \foreachitem\compteur\in\PfCListeBarresCalculs{% + \StrChar{#3}{\compteurcnt}[\PfCLettreB]% + \StrSubstitute[0]{\PfCLettreB}{*}{Départ}[\PfCLettreC]% + \xdef\PfCListeResultatsBarre{\PfCListeResultatsBarre \PfCLettreC,}% + }% + \setsepchar[*]{,*/}% + \readlist*\PfCListeResultats{\PfCListeResultatsBarre}% + \setsepchar{,}% + \readlist*\PfCListeCalculs{#2}% + \begin{NiceTabular}{ccc}[hvlines] + \xintFor* ##1 in{\xintSeq{1}{\PfCListeResultatslen}}\do{% + \xintifForFirst{\Block{2-1}{}}{\Block{2-1}{$\print{c:expand():topolynomial()}$}}&\Block{2-1}{\PfCListeResultats[##1,1]}&\Block{2-1}{\begin{CAS} + vars('x') + c = \PfCListeCalculs[##1] + \end{CAS}$\print{c}$}\\ + &&\\ + }% + \end{NiceTabular} + }{% + \foreachitem\compteur\in\PfCListeBarresCalculs{% + \StrChar{#3}{\compteurcnt}[\PfCLettreB]% + \StrSubstitute[0]{\PfCLettreB}{*}{Départ}[\PfCLettreC]% + \xdef\PfCListeResultatsBarre{\PfCListeResultatsBarre \num{\fpeval{\compteur}}/\PfCLettreC,}% + \StrSubstitute[0]{\compteur}{*}{\times}[\PfCListeResultatEtapeA]% + \StrSubstitute[0]{\PfCListeResultatEtapeA}{/}{\div}[\PfCListeResultatEtapeB]% + \StrSubstitute[0]{\PfCListeResultatEtapeB}{(}{\left(}[\PfCListeResultatEtapeC]% + \StrSubstitute[0]{\PfCListeResultatEtapeC}{)}{\right)}[\PfCListeResultatEtapeD]% + \xdef\PfCListeCalculsBarre{\PfCListeCalculsBarre $\PfCListeResultatEtapeD$,}% + }% + \setsepchar[*]{,*/}% + \readlist*\PfCListeResultats{\PfCListeResultatsBarre}% + \setsepchar{,}% + \readlist*\PfCListeCalculs{\PfCListeCalculsBarre}% + \begin{NiceTabular}{ccc}[hvlines] + \xintFor* ##1 in{\xintSeq{1}{\PfCListeResultatslen}}\do{% + \xintifForFirst{\Block{2-1}{}}{\Block{2-1}{\PfCListeResultats[\fpeval{##1-1},1]}}&\Block{2-1}{\PfCListeResultats[##1,2]}&\Block{2-1}{\PfCListeCalculs[##1]}\\ + &&\\ + }% + \end{NiceTabular} + }% + }% + \reademptyitems% +}% + +%%% +% Solide et sections +%%% +\setKVdefault[ClesSolides]{Nom=cube,Aretes,Sommets,Pointilles,Largeur=1.5,Hauteur=1,Profondeur=0.75,ListeSommets={A,B,C,D,E,F,G,H},Rho=1500,Phi=30,Theta=20,Distance=50,Code=false,Couleur=white,Anglex=0,RayonCone=1,HauteurCone=2,HauteurPyramide=2,SommetsPyramide=5,Reguliere=false,DecalageSommet={(0,0,0)},RayonCylindre=1,HauteurCylindre=2,RayonSphere=1,AutoLabel=true,Sections=false,CoefSection=0.3,Axes=false,PointsSection={M,N,O,P},RemplisSection=false,ObjetSection={0.5,E,H,0.25,F,G,G,B}}% +\defKV[ClesSolides]{Traces=\setKV[ClesSolides]{Code}}% +\defKV[ClesSolides]{Section=\setKV[ClesSolides]{Sections}}% +\defKV[ClesSolides]{CouleurSection=\setKV[ClesSolides]{RemplisSection}}% + +\newcommand\MPSolideCylindre[3]{% + \ifluatex + \mplibforcehmode + \begin{mplibcode} + input PfCSolid; + + boolean NommeSommets,Code,Sections,Axes,RemplisSection; + NommeSommets=\useKV[ClesSolides]{Sommets}; + Code=\useKV[ClesSolides]{Code}; + Sections:=\useKV[ClesSolides]{Sections}; + Axes:=\useKV[ClesSolides]{Axes}; + RemplisSection=\useKV[ClesSolides]{RemplisSection}; + if RemplisSection:color CouleurSection;CouleurSection=\useKV[ClesSolides]{CouleurSection};fi; + %Initialisation + PfCRho=\useKV[ClesSolides]{Rho}; + PfCPhi=\useKV[ClesSolides]{Phi}; + PfCTheta=\useKV[ClesSolides]{Theta}; + PfCDistance=\useKV[ClesSolides]{Distance}; + CoefSection=\useKV[ClesSolides]{CoefSection}; + anglerotationx=\useKV[ClesSolides]{Anglex}; + rayoncylindre=\useKV[ClesSolides]{RayonCylindre}; + hauteurcylindre=\useKV[ClesSolides]{HauteurCylindre}; + + string Section; + if Sections:Section=\useKV[ClesSolides]{Section};fi; + + color PfCOutColor; + PfCOutColor=\useKV[ClesSolides]{Couleur}; + + vardef BaseCylindre(text t)= + save Cer; + picture Cer; + save n; + n:=0; + for p_=t: + if color p_: + n:=n+1; + _T[n]:=p_; + fi; + endfor; + pascercle:=5; + color ptcer[]; + for k=0 step pascercle until (360+pascercle) : + ptcer[k div pascercle]-_T[1]=Distance(_T[1],_T[2])*((_T[4]-_T[3])*cosd(k)/Distance(_T[3],_T[4])+(_T[5]-_T[3])*sind(k)/Distance(_T[3],_T[5])); + endfor; + % + color ddcer,cccer; + nbpointilles:=0; + nbtraces:=0; + path PathSection[]; + nbpathsection:=0; + Cer=image(% + for k=0 step pascercle until 360: + ddcer:=Oeil-ptcer[k div pascercle]; + cccer:=-Normal(ptcer[k div pascercle],ptcer[(k+pascercle) div pascercle],ptcer[k div pascercle]+Sommet1-Sommet2); + if (ProduitScalaire(ddcer,cccer)>=0): + nbtraces:=nbtraces+1; + if (nbtraces=1) and (nbpointilles>0): + draw chemin(ptcer[k div pascercle],ptcer[k div pascercle]+Sommet1-Sommet2); + fi; + nbpathsection:=nbpathsection+1; + PathSection[nbpathsection]=chemin(ptcer[k div pascercle],ptcer[(k+pascercle) div pascercle]); + draw chemin(ptcer[k div pascercle],ptcer[(k+pascercle) div pascercle]); + draw chemin(ptcer[k div pascercle]+Sommet1-Sommet2,ptcer[(k+pascercle) div pascercle]+Sommet1-Sommet2); + else: + nbpointilles:=nbpointilles+1; + nbtraces:=0; + if (nbpointilles=1): + draw chemin(ptcer[k div pascercle],ptcer[k div pascercle]+Sommet1-Sommet2); + fi; + if k mod (2*pascercle)=0: + nbpathsection:=nbpathsection+1; + PathSection[nbpathsection]=chemin(ptcer[k div pascercle],ptcer[(k+pascercle) div pascercle]); + draw chemin(ptcer[k div pascercle],ptcer[(k+pascercle) div pascercle]); + draw chemin(ptcer[k div pascercle]+Sommet1-Sommet2,ptcer[(k+pascercle) div pascercle]+Sommet1-Sommet2); + fi; + fi; + endfor; + ); + Cer + enddef; + + Figure(-10u,-10u,10u,10u); + Initialisation(PfCRho,PfCPhi,PfCTheta,PfCDistance); +% Initialisation(1500,30,20,50); + typetrace:="3D"; + typerepre:="persp"; + eclairage:=false; + nb:=36;%36 + subh:=1;% + incolor:=white; + outcolor:=PfCOutColor; + Ferme1:=true; + angx:=anglerotationx; + Objetcylindre1("r="&decimal(rayoncylindre),"h="&decimal(hauteurcylindre)); + eclairage:=false; +% traits:=false; +% AffichageObjet1; + + color O,S,A,M,B,C,D,Sommet[]; + Sommet2=(0,0,0); + Sommet1-Sommet2=(0,0,hauteurcylindre); + Sommet3-Sommet2=rayoncylindre*(cosd(0),-sind(0),0); + Sommet4-Sommet2=rayoncylindre*(cosd(90),-sind(90),0); + color MSection[]; + MSection[1]-Sommet2=rayoncylindre*(CoefSection,sin(arccos(CoefSection)),0); + MSection[7]-Sommet2=rayoncylindre*(CoefSection+0.01,sin(arccos(CoefSection+0.01)),0); + MSection[2]-Sommet2=rayoncylindre*(CoefSection,-sin(arccos(CoefSection)),0); + MSection[3]-MSection[2]=Sommet1-Sommet2; + MSection[4]-MSection[1]=Sommet1-Sommet2; + MSection[5]-Sommet2=CoefSection[Sommet1,Sommet2]; + MSection[6]-MSection[5]=MSection[2]-MSection[1]; + Sommet1:=RotXYZ(Sommet1); + Sommet2:=RotXYZ(Sommet2); + Sommet3:=RotXYZ(Sommet3); + Sommet4:=RotXYZ(Sommet4); + MSection[1]:=RotXYZ(MSection[1]); + MSection[2]:=RotXYZ(MSection[2]); + MSection[3]:=RotXYZ(MSection[3]); + MSection[4]:=RotXYZ(MSection[4]); + MSection[5]:=RotXYZ(MSection[5]); + MSection[6]:=RotXYZ(MSection[6]); + MSection[7]:=RotXYZ(MSection[7]); + + trace BaseCylindre(Sommet2,Sommet3,Sommet2,Sommet3,Sommet4); + currentpicture:=nullpicture; + + if Sections: + if Section="parallele": + if RemplisSection: + fill polygone(MSection[1],MSection[2],MSection[3],MSection[4]) withcolor CouleurSection; + fi; + color dcer,ccer; + invnormale:=if CoefSection<=0:-1 else:1 fi; + %1er côté et 3eme côté : face "basse" et face "haute" + dcer:=Oeil-Sommet3; + ccer:=-Normal(Sommet3,MSection1,MSection2); + draw chemin(MSection1,MSection2) if (ProduitScalaire(dcer,ccer)<0):dashed evenly fi; + draw chemin(MSection3,MSection4) if (ProduitScalaire(dcer,ccer)>0):dashed evenly fi; + % 2eme côté et 4eme coté + dcer:=Oeil-MSection7; + ccer:=-Normal(MSection7,MSection4,MSection1); + draw chemin(MSection4,MSection1) if (ProduitScalaire(dcer,ccer)<0):dashed evenly fi; + draw chemin(MSection2,MSection3) if (ProduitScalaire(dcer,ccer)>0):dashed evenly fi; + else: + if RemplisSection: + fill (PathSection[1] for p_=2 upto nbpathsection:--PathSection[p_] endfor--cycle) shifted(Projette(CoefSection[Sommet1,Sommet2]-Sommet2)) withcolor CouleurSection; + fi; + for p_=1 upto nbpathsection: + draw (PathSection[p_] shifted(Projette(CoefSection[Sommet1,Sommet2]-Sommet2))); + endfor; + fi; + fi; + + trace BaseCylindre(Sommet2,Sommet3,Sommet2,Sommet3,Sommet4); + + color dcer,ccer; + dcer:=Oeil-Sommet2; + ccer:=Normal(Sommet2,Sommet3,Sommet4); + if (ProduitScalaire(dcer,ccer)>=0): + draw Cercles(Sommet2,Sommet3,Sommet2,Sommet3,Sommet4); + fi; + dcer:=Oeil-Sommet1; + ccer:=Normal(Sommet1,Sommet4+Sommet1-Sommet2,Sommet3+Sommet1-Sommet2); + if (ProduitScalaire(dcer,ccer)>=0): + draw Cercles(Sommet1,Sommet3+Sommet1-Sommet2,Sommet1,Sommet3+Sommet1-Sommet2,Sommet4+Sommet1-Sommet2); + fi; + + vardef EcrireSommets(text t)= + nb:=0; + for p_=t: + nb:=nb+1; + if bluepart(Sommet1)>bluepart(Sommet2): + if nb=1: + label.ulft(TEX(p_),Projette(Sommet1));%p_ + elseif nb=2: + dotlabel.rt(TEX(p_),Projette(Sommet2));%p_ + fi; + else: + if nb=1: + label.bot(TEX(p_),Projette(Sommet1)); + elseif nb=2: + dotlabel.ulft(TEX(p_),Projette(Sommet2)); + fi; + fi; + endfor; + enddef; + + DefinirSommets(#1); + DefinirSommetsSection(#3); + + if Axes: + draw segment(1.5[Sommet1,Sommet2],1.5[Sommet2,Sommet1]) dashed dashpattern(on6 off3 on3 off 3); + remplis (fullcircle scaled 1mm) shifted(Projette(Sommet1)); + remplis (fullcircle scaled 1mm) shifted(Projette(Sommet2)); + fi; + + if Code: + \useKV[ClesSolides]{Traces}; + fi; + + \end{mplibcode} + \fi +} + +\newcommand\MPSolidePyramide[4]{% + \ifluatex + \mplibforcehmode + \begin{mplibcode} + + input PfCSolid; + + boolean Pointilles,TraceArete,NommeSommets,Code,Reguliere,AutoLabel,Sections,RemplisSection; + Sections:=\useKV[ClesSolides]{Sections}; + RemplisSection=\useKV[ClesSolides]{RemplisSection}; + if RemplisSection:color CouleurSection;CouleurSection=\useKV[ClesSolides]{CouleurSection};fi; + AutoLabel:=\useKV[ClesSolides]{AutoLabel}; + Pointilles=\useKV[ClesSolides]{Pointilles}; + TraceArete=\useKV[ClesSolides]{Aretes}; + NommeSommets=\useKV[ClesSolides]{Sommets}; + Code=\useKV[ClesSolides]{Code}; + Reguliere:=\useKV[ClesSolides]{Reguliere}; + % Initialisation + PfCRho=\useKV[ClesSolides]{Rho}; + PfCPhi=\useKV[ClesSolides]{Phi}; + PfCTheta=\useKV[ClesSolides]{Theta}; + PfCDistance=\useKV[ClesSolides]{Distance}; + CoefSection=\useKV[ClesSolides]{CoefSection}; + anglerotationx=\useKV[ClesSolides]{Anglex}; + hauteurpyramide=\useKV[ClesSolides]{HauteurPyramide}; + nombresommets=\useKV[ClesSolides]{SommetsPyramide}; + color PfCOutColor,DecalageSommet; + PfCOutColor=\useKV[ClesSolides]{Couleur}; + DecalageSommet=if Reguliere:(0,0,0) else: #3 fi; + + Figure(-10u,-10u,10u,10u); + Initialisation(PfCRho,PfCPhi,PfCTheta,PfCDistance); + typetrace:="3D"; + typerepre:="persp"; + if Pointilles=false: + pointilles:="non"; + fi; + + Ferme1:=true; + + color O,A[],S; + O=(0,0,0); + S-O=(0,0,hauteurpyramide)+DecalageSommet; + + NbS:=nombresommets; + Sommet1:=S; + ecartangle=360/(NbS-1); + for k=2 upto NbS: + if Reguliere: + repereangle:=(k-2)*ecartangle; + else: + repereangle:=(k-2)*ecartangle+(ecartangle*0.25+uniformdeviate(floor(ecartangle/2))); + fi; + Sommet[k]:=(cosd(repereangle),-sind(repereangle),0); + endfor; + Sommet[NbS+1]:=Sommet[2]; + + color TS[]; + for k=1 upto (NbS+1): + TS[k]=Sommet[k]; + endfor; + color PiedHauteur; + PiedHauteur=ProjectionsurPlan(Sommet1,Sommet2,Sommet3,Sommet4); + eclairage:=false; + traits:=false; + outcolor:=PfCOutColor; + angx:=anglerotationx; + for k=1 upto (NbS+1): + TS[k]:=RotXYZ(TS[k]); + endfor; + angx:=0; + + color MSection[]; + for p_=2 upto NbS: + MSection[p_-1]=CoefSection[Sommet[1],Sommet[p_]]; + endfor; + + DefinirSommetsSection(#4); + + vardef SectionPyramide(expr fracsection)= + save Section; + picture Section; + Section=image(% + if RemplisSection: + remplis polygone(fracsection[Sommet1,Sommet2],for p_=3 upto NbS-1:fracsection[Sommet1,Sommet[p_]],endfor fracsection[Sommet1,Sommet[NbS]]) withcolor CouleurSection; + fi; + color dcer,ccer; + for p_=2 upto NbS: + dcer:=Oeil-Sommet[p_]; + ccer:=-Normal(Sommet1,Sommet[p_],Sommet[p_+1]); + if (ProduitScalaire(dcer,ccer)>=0): + draw chemin(fracsection[Sommet1,Sommet[p_]],fracsection[Sommet1,Sommet[p_+1]]); + else: + draw chemin(fracsection[Sommet1,Sommet[p_]],fracsection[Sommet1,Sommet[p_+1]]) dashed evenly; + fi; + endfor; + ); + Section + enddef; + + ObjetNew1(% + TS1, for k=2 upto NbS:TS[k], endfor TS[NbS+1] + )(% + NbS-1, for p_=2 upto NbS:p_, endfor + for p=2 upto NbS: + 3,1,p+1,p,% + endfor); + AffichageObjet1; + + Sommet[NbS+1]:=Sommet[2]; + + if Sections: + draw SectionPyramide(CoefSection); + fi; + + NF:=NbS;%nombresommets; + % Fc[100] est la base + Fc[100]:=NbS-1; + for k=2 upto NbS: + Fc[100+k-1]:=k; + endfor; + for k=2 upto NF: + Fc[k*100]:=3; + Fc[k*100+1]:=1; + Fc[k*100+2]:=k+1; + Fc[k*100+3]:=k; + endfor; + DessineObjet; + + vardef EcrireSommets(text t)= + if AutoLabel: + nb:=0; + for p_=t: + nb:=nb+1; + if nb<NbS+1: + if nb>1: + label(TEX(""&p_&""),1.1[Projette(Sommet1),Projette(Sommet[nb])]); + else: + label(TEX(p_),1.1[Projette(Sommet[2]),Projette(Sommet[1])]); + fi; + fi; + endfor; + fi; + enddef; + + DefinirSommets(#1); + + if TraceArete=false: + currentpicture:=nullpicture; + fi; + if NommeSommets: + EcrireSommets(#2); + fi; + u:=0.25u; + marque_p:="croix"; + nbcroix=0; + for p_=#1: + nbcroix:=nbcroix+1; + if nbcroix<NbS+1: + pointe(p_); + fi; + endfor; + u:=1cm; + if Code: + \useKV[ClesSolides]{Traces}; + fi; + + \end{mplibcode} + \fi +} + +\newcommand\MPSolideCone[3]{% + \ifluatex + \mplibforcehmode + \begin{mplibcode} + boolean NommeSommets,Code,Sections,Axes,RemplisSection; + NommeSommets=\useKV[ClesSolides]{Sommets}; + Code=\useKV[ClesSolides]{Code}; + Axes:=\useKV[ClesSolides]{Axes}; + Sections=\useKV[ClesSolides]{Sections}; + RemplisSection=\useKV[ClesSolides]{RemplisSection}; + if RemplisSection:color CouleurSection;CouleurSection=\useKV[ClesSolides]{CouleurSection};fi; + %Initialisation + PfCRho=\useKV[ClesSolides]{Rho}; + PfCPhi=\useKV[ClesSolides]{Phi}; + PfCTheta=\useKV[ClesSolides]{Theta}; + PfCDistance=\useKV[ClesSolides]{Distance}; + CoefSection=\useKV[ClesSolides]{CoefSection}; + anglerotationx=\useKV[ClesSolides]{Anglex}; + rayoncone=\useKV[ClesSolides]{RayonCone}; + hauteurcone=\useKV[ClesSolides]{HauteurCone}; + + color PfCOutColor; + PfCOutColor=\useKV[ClesSolides]{Couleur}; + input PfCSolid; + + vardef BaseCone(text t)= + save Cer; + picture Cer; + save n; + n:=0; + for p_=t: + if color p_: + n:=n+1; + _T[n]:=p_; + fi; + endfor; + pascercle:=5; + color ptcer[]; + for k=0 step pascercle until (360+pascercle) : + ptcer[k div pascercle]-_T[1]=Distance(_T[1],_T[2])*((_T[4]-_T[3])*cosd(k)/Distance(_T[3],_T[4])+(_T[5]-_T[3])*sind(k)/Distance(_T[3],_T[5])); + endfor; + % + color ddcer,cccer; + nbpointilles:=0; + nbtraces:=0; + Cer=image(% + for k=0 step pascercle until 360: + ddcer:=Oeil-ptcer[k div pascercle]; + cccer:=-Normal(Sommet1,ptcer[k div pascercle],ptcer[(k+pascercle) div pascercle]); + if (ProduitScalaire(ddcer,cccer)>=0): + nbtraces:=nbtraces+1; + if (nbtraces=1) and (nbpointilles>0): + draw chemin(ptcer[k div pascercle],Sommet1); + fi; + draw chemin(ptcer[k div pascercle],ptcer[(k+pascercle) div pascercle]); + else: + nbpointilles:=nbpointilles+1; + nbtraces:=0; + if (nbpointilles=1): + draw chemin(ptcer[k div pascercle],Sommet1); + fi; + if k mod (2*pascercle)=0: + draw chemin(ptcer[k div pascercle],ptcer[(k+pascercle) div pascercle]); + fi; + fi; + endfor; + ); + Cer + enddef; + + Figure(-10u,-10u,10u,10u); + Initialisation(PfCRho,PfCPhi,PfCTheta,PfCDistance); + typetrace:="3D"; + typerepre:="persp"; + eclairage:=false; + nb:=36;%36 + subh:=1;% + incolor:=white; + outcolor:=PfCOutColor; + Ferme1:=true; + angx:=anglerotationx; + Objetcone1("r="&decimal(rayoncone),"h="&decimal(hauteurcone)); + traits:=false; + AffichageObjet1; + + color Sommet[];%O,S,A,M,B,C,D, + Sommet2=(0,0,0); + Sommet1-Sommet2=(0,0,hauteurcone); + Sommet3-Sommet2=rayoncone*(cosd(0),-sind(0),0); + Sommet4-Sommet2=rayoncone*(cosd(90),-sind(90),0); + Sommet1:=RotXYZ(Sommet1); + Sommet3:=RotXYZ(Sommet3); + Sommet4:=RotXYZ(Sommet4); + + color MSection[]; + MSection[1]=CoefSection[Sommet1,Sommet2]; + + DefinirSommetsSection(#3); + + if Sections: + if RemplisSection: + remplis Cercles(CoefSection[Sommet1,Sommet2],CoefSection[Sommet1,Sommet3],CoefSection[Sommet1,Sommet2],CoefSection[Sommet1,Sommet3],CoefSection[Sommet1,Sommet4]) withcolor CouleurSection; + fi; + trace BaseCone(CoefSection[Sommet1,Sommet2],CoefSection[Sommet1,Sommet3],CoefSection[Sommet1,Sommet2],CoefSection[Sommet1,Sommet3],CoefSection[Sommet1,Sommet4]); + fi; + + trace BaseCone(Sommet2,Sommet3,Sommet2,Sommet3,Sommet4); + color dcer,ccer; + dcer:=Oeil-Sommet2; + ccer:=Normal(Sommet2,Sommet3,Sommet4); + if (ProduitScalaire(dcer,ccer)>=0): + draw Cercles(Sommet2,Sommet3,Sommet2,Sommet3,Sommet4); + fi; + + vardef EcrireSommets(text t)= + nb:=0; + for p_=t: + nb:=nb+1; + if bluepart(Sommet1)>bluepart(Sommet2): + if nb=1: + label.ulft(TEX(p_),Projette(Sommet1)); + elseif nb=2: + dotlabel.rt(TEX(p_),Projette(Sommet2)); + fi; + else: + if nb=1: + label.bot(TEX(p_),Projette(Sommet1)); + elseif nb=2: + dotlabel.ulft(TEX(p_),Projette(Sommet2)); + fi; + fi; + endfor; + enddef; + + DefinirSommets(#1); + + if Axes: + draw segment(1.5[Sommet1,Sommet2],1.5[Sommet2,Sommet1]) dashed dashpattern(on6 off3 on3 off 3); + remplis (fullcircle scaled 1mm) shifted(Projette(Sommet1)); + remplis (fullcircle scaled 1mm) shifted(Projette(Sommet2)); + fi; + + if Code: + \useKV[ClesSolides]{Traces}; + fi; + + \end{mplibcode} + \fi +} + +\newcommand\MPSolidePave[5]{% + \ifluatex + \mplibforcehmode + \begin{mplibcode} + input PfCSolid; + + boolean Pointilles,TraceArete,NommeSommets,Code,AutoLabel,Sections,RemplisSection; + AutoLabel:=\useKV[ClesSolides]{AutoLabel}; + Pointilles=\useKV[ClesSolides]{Pointilles}; + TraceArete=\useKV[ClesSolides]{Aretes}; + NommeSommets=\useKV[ClesSolides]{Sommets}; + Code=\useKV[ClesSolides]{Code}; + Sections:=\useKV[ClesSolides]{Sections}; + RemplisSection=\useKV[ClesSolides]{RemplisSection}; + if RemplisSection:color CouleurSection;CouleurSection=\useKV[ClesSolides]{CouleurSection};fi; + + string Section; + if Sections:Section=\useKV[ClesSolides]{Section};fi; + + %Initialisation + PfCRho=\useKV[ClesSolides]{Rho}; + PfCPhi=\useKV[ClesSolides]{Phi}; + PfCTheta=\useKV[ClesSolides]{Theta}; + PfCDistance=\useKV[ClesSolides]{Distance}; + + Figure(-10u,-10u,10u,10u); + Initialisation(PfCRho,PfCPhi,PfCTheta,PfCDistance); + typetrace:="3D"; + typerepre:="persp"; + if Pointilles=false: + pointilles:="non"; + fi; + color A,B,C,D,E,F,G,H; + color Sommet[]; + trace Pave(A,B,C,D,E,F,G,H)(#3); + currentpicture:=nullpicture; + Sommet1=A; + Sommet2=B; + Sommet3=C; + Sommet4=D; + Sommet5=E; + Sommet6=F; + Sommet7=G; + Sommet8=H; + + DefinirSommets(#1); + + color MSection[]; + numeric RetiensSection[]; + numretienssection:=0; + color RetiensDefSection[]; + numretiensdefsection:=0; + if Sections: + if Section="arete": + for p_=#5: + if numeric p_: + numretienssection:=numretienssection+1; + RetiensSection[numretienssection]=p_; + elseif color p_: + numretiensdefsection:=numretiensdefsection+1; + RetiensDefSection[numretiensdefsection]=p_; + fi; + endfor; + % On dessine la section + MSection[1]=(RetiensSection[1])[RetiensDefSection[1],RetiensDefSection[2]]; + MSection[2]=(RetiensSection[2])[RetiensDefSection[3],RetiensDefSection[4]]; + MSection[3]-MSection[2]=RetiensDefSection[6]-RetiensDefSection[5]; + MSection[4]-MSection[1]=RetiensDefSection[6]-RetiensDefSection[5]; + if RemplisSection: + fill polygone(MSection1,MSection2,MSection3,MSection4) withcolor CouleurSection; + fi; +% DotLabel.top(TEX("M1"),MSection[1]); +% DotLabel.top(TEX("M2"),MSection[2]); +% DotLabel.top(TEX("M3"),MSection[3]); +% DotLabel.top(TEX("M4"),MSection[4]); +% if RemplisSection: +% fill polygone(MSection1,MSection2,MSection3,MSection4) withcolor CouleurSection; +% fi; +% trace polygone(MSection1,MSection2,MSection3,MSection4); + color dcer,ccer; + % 1er cote -> ok + dcer:=Oeil-RetiensDefSection[4]; + ccer:=Normal(RetiensDefSection[4],RetiensDefSection[2],RetiensDefSection[1]); + draw chemin(MSection1,MSection2) if (ProduitScalaire(dcer,ccer)<0):dashed evenly fi; + % 2eme cote + dcer:=Oeil-RetiensDefSection[4]; + ccer:=Normal(RetiensDefSection[4],RetiensDefSection[3],RetiensDefSection[4]+RetiensDefSection[6]-RetiensDefSection[5]); + draw chemin(MSection2,MSection3) if (ProduitScalaire(dcer,ccer)<0):dashed evenly fi; + % 3eme cote + dcer:=Oeil-RetiensDefSection[4]; + ccer:=Normal(RetiensDefSection[4],RetiensDefSection[2],RetiensDefSection[1]); + draw chemin(MSection3,MSection4) if (ProduitScalaire(dcer,ccer)>=0):dashed evenly fi; + % 4eme cote + dcer:=Oeil-RetiensDefSection[4]; + ccer:=Normal(RetiensDefSection[4],RetiensDefSection[3],RetiensDefSection[4]+RetiensDefSection[6]-RetiensDefSection[5]); + draw chemin(MSection4,MSection1) if (ProduitScalaire(dcer,ccer)>=0):dashed evenly fi; + else: + %face + for p_=#5: + if numeric p_: + numretienssection:=numretienssection+1; + RetiensSection[numretienssection]=p_; + elseif color p_: + numretiensdefsection:=numretiensdefsection+1; + RetiensDefSection[numretiensdefsection]=p_; + fi; + endfor; + % On dessine la section + MSection[1]=(RetiensSection[1])[RetiensDefSection[1],RetiensDefSection[2]]; + MSection[2]-MSection[1]=RetiensDefSection[4]-RetiensDefSection[3]; + MSection[3]-MSection[2]=RetiensDefSection[5]-RetiensDefSection[4]; + MSection[4]-MSection[1]=MSection[3]-MSection[2]; +% DotLabel.top(TEX("M1"),MSection[1]); +% DotLabel.top(TEX("M2"),MSection[2]); +% DotLabel.top(TEX("M3"),MSection[3]); +% DotLabel.top(TEX("M4"),MSection[4]); + if RemplisSection: + fill polygone(MSection1,MSection2,MSection3,MSection4) withcolor CouleurSection; + fi; + color dcer,ccer; + % 1er cote -> ok + dcer:=Oeil-RetiensDefSection[4]; + ccer:=Normal(RetiensDefSection[4],RetiensDefSection[2],RetiensDefSection[1]); + draw chemin(MSection1,MSection2) if (ProduitScalaire(dcer,ccer)<0):dashed evenly fi; + % 2eme cote + dcer:=Oeil-RetiensDefSection[4]; + ccer:=Normal(RetiensDefSection[5],RetiensDefSection[4],RetiensDefSection[5]+RetiensDefSection[1]-RetiensDefSection[2]); + draw chemin(MSection2,MSection3) if (ProduitScalaire(dcer,ccer)<0):dashed evenly fi; + % 3eme cote + dcer:=Oeil-RetiensDefSection[4]; + ccer:=Normal(RetiensDefSection[4],RetiensDefSection[2],RetiensDefSection[1]); + draw chemin(MSection3,MSection4) if (ProduitScalaire(dcer,ccer)>=0):dashed evenly fi; + % 4eme cote + dcer:=Oeil-RetiensDefSection[4]; + ccer:=Normal(RetiensDefSection[5],RetiensDefSection[4],RetiensDefSection[5]+RetiensDefSection[1]-RetiensDefSection[2]); + draw chemin(MSection4,MSection1) if (ProduitScalaire(dcer,ccer)>=0):dashed evenly fi; + fi; + %On trace la section considérée + %trace polygone(MSection1,MSection2,MSection3,MSection4); + fi; + + trace Pave(A,B,C,D,E,F,G,H)(#3); + + DefinirSommetsSection(#4); + + if TraceArete=false: + currentpicture:=nullpicture; + fi; + if NommeSommets: + EcrireSommetsPave(#2); + fi; + u:=0.25u; + marque_p:="croix"; + nbcroix=0; + for p_=#1: + nbcroix:=nbcroix+1; + if nbcroix=4: + if Pointilles: + pointe(p_); + fi; + else: + pointe(p_); + fi; + endfor; + u:=1cm; + if Code: + \useKV[ClesSolides]{Traces}; + fi; + \end{mplibcode} + \fi +} + +\newcommand\MPSolideSphere[3]{% + \ifluatex + \mplibforcehmode + \begin{mplibcode} + boolean NommeSommets,Code,Sections,Axes,RemplisSection; + NommeSommets=\useKV[ClesSolides]{Sommets}; + Code=\useKV[ClesSolides]{Code}; + Axes:=\useKV[ClesSolides]{Axes}; + Sections=\useKV[ClesSolides]{Sections}; + RemplisSection=\useKV[ClesSolides]{RemplisSection}; + if RemplisSection:color CouleurSection;CouleurSection=\useKV[ClesSolides]{CouleurSection};fi; + %Initialisation + PfCRho=\useKV[ClesSolides]{Rho}; + PfCPhi=0;%\useKV[ClesSolides]{Phi}; + PfCTheta=10;%\useKV[ClesSolides]{Theta}; + PfCDistance=\useKV[ClesSolides]{Distance}; + CoefSection=\useKV[ClesSolides]{CoefSection}; + anglerotationx=\useKV[ClesSolides]{Anglex}; + rayonsphere=\useKV[ClesSolides]{RayonSphere}; + + color PfCOutColor; + PfCOutColor=\useKV[ClesSolides]{Couleur}; + input PfCSolid; + + vardef BaseSphere= + save Cer; + picture Cer; + color PtInter.iso,PtInter[]; + vardef Famille(expr u,v)=(R*(cos(u)*cos(v),cos(u)*sin(v),sin(u))) enddef; + subh:=72; + Cer=image(% + if Sections: + if RemplisSection:fill (Cercles(Image((0,0,0)),Image((0,1,0)),Image((0,0,0)),Image((0,1,0)),Image((-1,0,0))) scaled (sqrt(1-(abs(CoefSection+0.02))**2))) shifted(Projette(MSection1-Sommet1)) withcolor CouleurSection; fi; + fi; + %Equateur + umin:=0; umax:=pi/nb; upas:=pi/nb; + vmin:=0; vpas:=2*pi/subh; vmax:=2*pi; + for l=0 upto subh-1: + PtInter[1]:=Image(Famille(umin+(0+1)*upas,vmin+l*vpas)); + PtInter[2]:=Image(Famille(umin+0*upas,vmin+l*vpas)); + PtInter[3]:=Image(Famille(umin+0*upas,vmin+(l+1)*vpas)); + PtInter[4]:=Image(Famille(umin+(0+1)*upas,vmin+(l+1)*vpas)); + PtInter.iso:=(PtInter[1]+PtInter[2]+PtInter[3]+PtInter[4])/4; + if ProduitScalaire(Oeil-PtInter.iso,Normal(PtInter.iso,PtInter[4],PtInter[1]))>=0: + if Sections: + draw (segment(PtInter[3],PtInter[2]) scaled (sqrt(1-(abs(CoefSection+0.02))**2))) shifted(Projette(MSection1-Sommet1)); + fi; + draw segment(PtInter[3],PtInter[2]); + else: + if l mod 2=0: + if Sections: + draw (segment(PtInter[3],PtInter[2]) scaled (sqrt(1-(abs(CoefSection+0.02))**2))) shifted(Projette(MSection1-Sommet1)); + fi; + draw segment(PtInter[3],PtInter[2]); + fi; + fi; + endfor; + + % "Exterieur" + nb:=72; + subh:=18; + umin:=-pi; umax:=pi; upas:=2*pi/nb; + vpas:=2*pi/subh; vmin:=pi/2; vmax:=2*pi; + for k=0 upto nb-1: + PtInter[1]:=Image(Famille(umin+(k+1)*upas,vmin+0*vpas)); + PtInter[2]:=Image(Famille(umin+k*upas,vmin+0*vpas)); + PtInter[3]:=Image(Famille(umin+k*upas,vmin+(0+1)*vpas)); + PtInter[4]:=Image(Famille(umin+(k+1)*upas,vmin+(0+1)*vpas)); + PtInter.iso:=(PtInter[1]+PtInter[2]+PtInter[3]+PtInter[4])/4; + draw segment(PtInter[2],PtInter[1]); + endfor; + ); + Cer + enddef; + + Figure(-10u,-10u,10u,10u); + Initialisation(PfCRho,PfCPhi,PfCTheta,PfCDistance); + typetrace:="3D"; + typerepre:="persp"; + eclairage:=false; + nb:=24;%36 + subh:=36;% + incolor:=blue; + outcolor:=white;%PfCOutColor; + Ferme1:=true; + angx:=anglerotationx; + Objetsphere1("R="&decimal(rayonsphere)); + % traits:=false; + % AffichageObjet1; + color Sommet[],SommetN,SommetS,SommetB; + Sommet1=(0,0,0); + Sommet2=(0,rayonsphere,0); + Sommet3=(-rayonsphere,0,0); + Sommet4=(0,0,rayonsphere); + SommetN=Sommet4; + SommetS=(0,0,-rayonsphere); + SommetB=(rayonsphere,0,0); + Sommet2:=RotXYZ(Sommet2); + Sommet3:=RotXYZ(Sommet3); + Sommet4:=RotXYZ(Sommet4); + SommetN:=RotXYZ(SommetN); + SommetS:=RotXYZ(SommetS); + SommetB:=RotXYZ(SommetB); + color MSection[]; + MSection[1]=CoefSection[Sommet1,SommetN]; + MSection[2]=Image((0,sqrt(1-CoefSection**2),CoefSection)); + + trace BaseSphere; + + DefinirSommets(#1); + DefinirSommetsSection(#3); + + if Axes: + draw segment(1.25[SommetN,SommetS],1.25[SommetS,SommetN]) dashed dashpattern(on6 off3 on3 off3); + remplis (fullcircle scaled 1mm) shifted(Projette(SommetN)); + remplis (fullcircle scaled 1mm) shifted(Projette(SommetS)); + fi; + + if Code: + \useKV[ClesSolides]{Traces}; + fi; + + \end{mplibcode} + \fi +} + +\def\UpdatetoksSolide#1\nil{\addtotok\toksolidelistesommets{"#1",}} +\newtoks\toksolidelistesommets% +\newtoks\toksolidelistepointssections% + +\newcommand\Solide[1][]{% + \useKVdefault[ClesSolides]% + \setKV[ClesSolides]{#1}% + \setsepchar{,}\ignoreemptyitems% + \xdef\foo{\useKV[ClesSolides]{ListeSommets}}% + \readlist*\ListeNomSommet{\foo}%\showitems\ListeNomSommet + \reademptyitems% + \toksolidelistesommets{} + \foreachitem\compteur\in\ListeNomSommet{\expandafter\UpdatetoksSolide\compteur\nil}%\the\toksolidelistesommets% + \IfStrEqCase{\useKV[ClesSolides]{Nom}}{% + {cube}{% + \MPSolidePave{\useKV[ClesSolides]{ListeSommets}}{\the\toksolidelistesommets}{1,1,1}{\useKV[ClesSolides]{PointsSection}}{\useKV[ClesSolides]{ObjetSection}}% + }% + {pave}{% + \MPSolidePave{\useKV[ClesSolides]{ListeSommets}}{\the\toksolidelistesommets}{\useKV[ClesSolides]{Profondeur},\useKV[ClesSolides]{Largeur},\useKV[ClesSolides]{Hauteur}}{\useKV[ClesSolides]{PointsSection}}{\useKV[ClesSolides]{ObjetSection}}% + }% + {cone}{% + \MPSolideCone{\useKV[ClesSolides]{ListeSommets}}{\the\toksolidelistesommets}{\useKV[ClesSolides]{PointsSection}}% + }% + {pyramide}{% + \MPSolidePyramide{\useKV[ClesSolides]{ListeSommets}}{\the\toksolidelistesommets}{\useKV[ClesSolides]{DecalageSommet}}{\useKV[ClesSolides]{PointsSection}}% + }% + {cylindre}{% + \MPSolideCylindre{\useKV[ClesSolides]{ListeSommets}}{\the\toksolidelistesommets}{\useKV[ClesSolides]{PointsSection}}% + }% + {sphere}{% + \MPSolideSphere{\useKV[ClesSolides]{ListeSommets}}{\the\toksolidelistesommets}{\useKV[ClesSolides]{PointsSection}}% + }% + }% +}% + +%%% % Vue Cubes %%% \setKVdefault[VueCubes]{Solution=false,Hauteur=5,Profondeur=4,Largeur=3,Angle=60,Nom=Ex1,Trou=false,Echelle=0.25,CouleurCube=LightSteelBlue,CouleurFleche=LightGray,Face=false,Creation=false,Grilles=false} @@ -7933,68 +8882,9 @@ couleur indiquée, le nombre de cases donné par le résultat du calcul. }% %%% Dessin Gradue %%% -\setKVdefault[DessinGradue]{Lignes=10,Debut=-5,Fin=5,Pas=10,Solution=false,EcartVertical=1.5,LignesIdentiques,Longueur=10,Echelle=1,Droites=false} +\setKVdefault[DessinGradue]{Lignes=10,Debut=-5,Fin=5,Pas=10,Solution=false,EcartVertical=1.5,LignesIdentiques,Longueur=10,Echelle=1,Droites=false,DemiDroites=false} -\def\TraceDessinGradue#1#2#3#4{% - \ifluatex - \mplibforcehmode - \begin{mplibcode} - pair La,Lb,Lab[]; - La=(0,0); - Lb-La=u*(\useKV[DessinGradue]{Longueur},0); - for k=0 upto #4: - Lab[k]=(k/#4)[La,Lb]; - endfor; - picture EnsembleLignes,Lignes; - Lignes=image( - trace segment(La,Lb); - for k=0 upto #4: - trace (Lab[k]+u*(0,-0.1))--(Lab[k]+u*(0,0.1)); - endfor; - labeloffset:=labeloffset*1.5; - label.top(TEX("\num{"&decimal(#2)&"}"),La); - label.top(TEX("\num{"&decimal(#3)&"}"),Lb); - labeloffset:=labeloffset/1.5; - ); - EnsembleLignes=image( - for k=0 upto #1-1: - trace Lignes shifted(k*u*(0,-\useKV[DessinGradue]{EcartVertical})); - label(TEX("(\num{"&decimal(k+1)&"})"),La+u*(-1.5,-k*\useKV[DessinGradue]{EcartVertical})); - endfor; - ); - trace EnsembleLignes scaled \useKV[DessinGradue]{Echelle}; - \end{mplibcode} - \else - \begin{mpost}[mpsettings={numeric LongueurLigne; LongueurLigne=\useKV[DessinGradue]{Longueur};numeric EcartVertical; EcartVertical=\useKV[DessinGradue]{EcartVertical}; numeric Echelle; Echelle=\useKV[DessinGradue]{Echelle};}] - pair La,Lb,Lab[]; - La=(0,0); - Lb-La=u*(LongueurLigne,0); - for k=0 upto #4: - Lab[k]=(k/#4)[La,Lb]; - endfor; - picture EnsembleLignes,Lignes; - Lignes=image( - trace segment(La,Lb); - for k=0 upto #4: - trace (Lab[k]+u*(0,-0.1))--(Lab[k]+u*(0,0.1)); - endfor; - labeloffset:=labeloffset*1.5; - label.top(LATEX("\num{"&decimal(#2)&"}"),La); - label.top(LATEX("\num{"&decimal(#3)&"}"),Lb); - labeloffset:=labeloffset/1.5; - ); - EnsembleLignes=image( - for k=0 upto #1-1: - trace Lignes shifted(k*u*(0,-EcartVertical)); - label(LATEX("(\num{"&decimal(k+1)&"})"),La+u*(-1.5,-k*EcartVertical)); - endfor; - ); - trace EnsembleLignes scaled Echelle; - \end{mpost} - \fi -} - -\def\TraceDessinGradueSolution#1#2#3#4#5#6{% +\def\TraceDessinGradue#1#2#3#4#5#6{% \ifluatex \mplibforcehmode \begin{mplibcode} @@ -8002,12 +8892,20 @@ couleur indiquée, le nombre de cases donné par le résultat du calcul. pair A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A',B',C',D',E',F',G',H',I',J',K',L',M',N',O',P',Q',R',S',T',U',V',W',X',Y',Z',A'',B'',C'',D'',E'',F'',G'',H'',I'',J'',K'',L'',M'',N'',O'',P'',Q'',R'',S'',T'',U'',V'',W'',X'',Y'',Z''; La=(0,0); Lb-La=u*(\useKV[DessinGradue]{Longueur},0); + boolean Solution; + Solution=\useKV[DessinGradue]{Solution}; for k=0 upto #4: Lab[k]=(k/#4)[La,Lb]; endfor; picture EnsembleLignes,Lignes; Lignes=image( + if \useKV[DessinGradue]{Droites}: + drawarrow 1.05[Lb,La]--1.05[La,Lb]; + elseif \useKV[DessinGradue]{DemiDroites}: + drawarrow La--1.05[La,Lb]; + else: trace segment(La,Lb); + fi; for k=0 upto #4: trace (Lab[k]+u*(0,-0.1))--(Lab[k]+u*(0,0.1)); endfor; @@ -8016,13 +8914,16 @@ couleur indiquée, le nombre de cases donné par le résultat du calcul. label.top(TEX("\num{"&decimal(#3)&"}"),Lb); labeloffset:=labeloffset/1.5; ); - EnsembleLignes=image(% + EnsembleLignes=image( + if Solution: drawoptions(withcolor 0.5white); + fi; for k=0 upto #1-1: trace Lignes shifted(k*u*(0,-\useKV[DessinGradue]{EcartVertical})); - label(TEX("(\num{"&decimal(k+1)&"})"),La+u*(-1.5,k*(-\useKV[DessinGradue]{EcartVertical}))); + label(TEX("(\num{"&decimal(k+1)&"})"),La+u*(-1.5,-k*\useKV[DessinGradue]{EcartVertical})); endfor; drawoptions(); + if Solution: n:=0; numeric nblignes,nbpas; for p_=#5: @@ -8038,11 +8939,12 @@ couleur indiquée, le nombre de cases donné par le résultat du calcul. for p_=#6: trace p_ withpen pencircle scaled 1.5; endfor; + fi; ); trace EnsembleLignes scaled \useKV[DessinGradue]{Echelle}; \end{mplibcode} \else - \begin{mpost}[mpsettings={numeric LongueurLigne; LongueurLigne=\useKV[DessinGradue]{Longueur};numeric EcartVertical; EcartVertical=\useKV[DessinGradue]{EcartVertical}; numeric Echelle; Echelle=\useKV[DessinGradue]{Echelle};}] + \begin{mpost}[mpsettings={numeric LongueurLigne; LongueurLigne=\useKV[DessinGradue]{Longueur};numeric EcartVertical; EcartVertical=\useKV[DessinGradue]{EcartVertical}; numeric Echelle; Echelle=\useKV[DessinGradue]{Echelle}; boolean Solution,Droites,DemiDroites; Solution=\useKV[DessinGradue]{Solution};Droites=\useKV[DessinGradue]{Droites};DemiDroites=\useKV[DessinGradue]{DemiDroites};}] pair La,Lb,Lab[]; pair A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A',B',C',D',E',F',G',H',I',J',K',L',M',N',O',P',Q',R',S',T',U',V',W',X',Y',Z',A'',B'',C'',D'',E'',F'',G'',H'',I'',J'',K'',L'',M'',N'',O'',P'',Q'',R'',S'',T'',U'',V'',W'',X'',Y'',Z''; La=(0,0); @@ -8052,7 +8954,13 @@ couleur indiquée, le nombre de cases donné par le résultat du calcul. endfor; picture EnsembleLignes,Lignes; Lignes=image( + if Droites: + drawarrow 1.05[Lb,La]--1.05[La,Lb]; + elseif DemiDroites: + drawarrow La--1.05[La,Lb]; + else: trace segment(La,Lb); + fi; for k=0 upto #4: trace (Lab[k]+u*(0,-0.1))--(Lab[k]+u*(0,0.1)); endfor; @@ -8062,12 +8970,15 @@ couleur indiquée, le nombre de cases donné par le résultat du calcul. labeloffset:=labeloffset/1.5; ); EnsembleLignes=image( + if Solution: drawoptions(withcolor 0.5white); + fi; for k=0 upto #1-1: trace Lignes shifted(k*u*(0,-EcartVertical)); - label(LATEX("(\num{"&decimal(k+1)&"})"),La+u*(-1.5,k*(-EcartVertical))); + label(LATEX("(\num{"&decimal(k+1)&"})"),La+u*(-1.5,-k*EcartVertical)); endfor; drawoptions(); + if Solution: n:=0; numeric nblignes,nbpas; for p_=#5: @@ -8083,99 +8994,54 @@ couleur indiquée, le nombre de cases donné par le résultat du calcul. for p_=#6: trace p_ withpen pencircle scaled 1.5; endfor; + fi; ); trace EnsembleLignes scaled Echelle; \end{mpost} \fi } -\def\TraceDessinGradueMul#1{% +\def\TraceDessinGradueMul#1#2#3{% \ifluatex \mplibforcehmode \begin{mplibcode} pair La,Lb,Lab[]; La=(0,0); + pair A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A',B',C',D',E',F',G',H',I',J',K',L',M',N',O',P',Q',R',S',T',U',V',W',X',Y',Z',A'',B'',C'',D'',E'',F'',G'',H'',I'',J'',K'',L'',M'',N'',O'',P'',Q'',R'',S'',T'',U'',V'',W'',X'',Y'',Z''; Lb-La=u*(\useKV[DessinGradue]{Longueur},0); + EcartVertical=\useKV[DessinGradue]{EcartVertical}; + boolean Solution; + Solution=\useKV[DessinGradue]{Solution}; picture EnsembleLignes,Lignes; EnsembleLignes=image( + if Solution: + drawoptions(withcolor 0.5white); + fi; n:=0; m:=0; for p_=#1: n:=n+1; - trace segment(La,Lb) shifted((n-1)*u*(0,-\useKV[DessinGradue]{EcartVertical})); - label(TEX("(\num{"&decimal(n)&"})"),La+u*(-1.5,-(n-1)*\useKV[DessinGradue]{EcartVertical})); - for k=0 upto bluepart(p_): - m:=bluepart(p_); - Lab[k]:=(k/m)[La,Lb]; - trace ((Lab[k]+u*(0,-0.1))--(Lab[k]+u*(0,0.1))) shifted((n-1)*u*(0,-\useKV[DessinGradue]{EcartVertical})); - endfor; - labeloffset:=labeloffset*1.5; - label.top(TEX("\num{"&decimal(redpart(p_))&"}"),La shifted((n-1)*u*(0,-\useKV[DessinGradue]{EcartVertical}))); - label.top(TEX("\num{"&decimal(greenpart(p_))&"}"),Lb shifted((n-1)*u*(0,-\useKV[DessinGradue]{EcartVertical}))); - labeloffset:=labeloffset/1.5; - endfor; - ); - trace EnsembleLignes scaled \useKV[DessinGradue]{Echelle}; - \end{mplibcode} - \else - \begin{mpost}[mpsettings={numeric LongueurLigne; LongueurLigne=\useKV[DessinGradue]{Longueur};numeric EcartVertical; EcartVertical=\useKV[DessinGradue]{EcartVertical}; numeric Echelle; Echelle=\useKV[DessinGradue]{Echelle};}] - pair La,Lb,Lab[]; - La=(0,0); - Lb-La=u*(LongueurLigne,0); - picture EnsembleLignes,Lignes; - EnsembleLignes=image( - n:=0; - m:=0; - for p_=#1: - n:=n+1; + if \useKV[DessinGradue]{Droites}: + drawarrow (1.05[Lb,La]--1.05[La,Lb]) shifted((n-1)*u*(0,-EcartVertical)); + elseif \useKV[DessinGradue]{DemiDroites}: + drawarrow (La--1.05[La,Lb]) shifted((n-1)*u*(0,-EcartVertical)); + else: trace segment(La,Lb) shifted((n-1)*u*(0,-EcartVertical)); + fi; + label(TEX("(\num{"&decimal(n)&"})"),La+u*(-1.5,-(n-1)*EcartVertical)); for k=0 upto bluepart(p_): m:=bluepart(p_); + retienspas[n]:=m; Lab[k]:=(k/m)[La,Lb]; trace ((Lab[k]+u*(0,-0.1))--(Lab[k]+u*(0,0.1))) shifted((n-1)*u*(0,-EcartVertical)); - label(LATEX("(\num{"&decimal(n)&"})"),La+u*(-1.5,-(n-1)*\useKV[DessinGradue]{EcartVertical})); - endfor; - labeloffset:=labeloffset*1.5; - label.top(LATEX("\num{"&decimal(redpart(p_))&"}"),La shifted((n-1)*u*(0,-EcartVertical))); - label.top(LATEX("\num{"&decimal(greenpart(p_))&"}"),Lb shifted((n-1)*u*(0,-EcartVertical))); - labeloffset:=labeloffset/1.5; - endfor; - ); - trace EnsembleLignes scaled Echelle; - \end{mpost} - \fi -} - -\def\TraceDessinGradueMulSolution#1#2#3{% - \ifluatex - \mplibforcehmode - \begin{mplibcode} - pair La,Lb,Lab[]; - pair A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A',B',C',D',E',F',G',H',I',J',K',L',M',N',O',P',Q',R',S',T',U',V',W',X',Y',Z',A'',B'',C'',D'',E'',F'',G'',H'',I'',J'',K'',L'',M'',N'',O'',P'',Q'',R'',S'',T'',U'',V'',W'',X'',Y'',Z''; - La=(0,0); - Lb-La=u*(\useKV[DessinGradue]{Longueur},0); - picture EnsembleLignes,Lignes; - EnsembleLignes=image(% - drawoptions(withcolor 0.5white); - n:=0; - m:=0; - numeric retienspas[]; - for p_=#1: - n:=n+1; - trace segment(La,Lb) shifted((n-1)*u*(0,-\useKV[DessinGradue]{EcartVertical})); - label(TEX("(\num{"&decimal(n)&"})"),La+u*(-1.5,-(n-1)*\useKV[DessinGradue]{EcartVertical})); - for k=0 upto bluepart(p_): - m:=bluepart(p_); - retienspas[n]:=bluepart(p_); - Lab[k]:=(k/m)[La,Lb]; - trace ((Lab[k]+u*(0,-0.1))--(Lab[k]+u*(0,0.1))) shifted((n-1)*u*(0,-\useKV[DessinGradue]{EcartVertical})); endfor; labeloffset:=labeloffset*1.5; - label.top(TEX("\num{"&decimal(redpart(p_))&"}"),La shifted((n-1)*u*(0,-\useKV[DessinGradue]{EcartVertical}))); - label.top(TEX("\num{"&decimal(greenpart(p_))&"}"),Lb shifted((n-1)*u*(0,-\useKV[DessinGradue]{EcartVertical}))); + label.top(TEX("\num{"&decimal(redpart(p_))&"}"),La shifted((n-1)*u*(0,-EcartVertical))); + label.top(TEX("\num{"&decimal(greenpart(p_))&"}"),Lb shifted((n-1)*u*(0,-EcartVertical))); labeloffset:=labeloffset/1.5; endfor; drawoptions(); + if Solution: n:=0; numeric nblignes,nbpas; for p_=#2: @@ -8192,37 +9058,46 @@ couleur indiquée, le nombre de cases donné par le résultat du calcul. for p_=#3: trace p_ withpen pencircle scaled 1.5; endfor; + fi; ); trace EnsembleLignes scaled \useKV[DessinGradue]{Echelle}; \end{mplibcode} \else - \begin{mpost}[mpsettings={numeric LongueurLigne; LongueurLigne=\useKV[DessinGradue]{Longueur};numeric EcartVertical; EcartVertical=\useKV[DessinGradue]{EcartVertical}; numeric Echelle; Echelle=\useKV[DessinGradue]{Echelle};}] + \begin{mpost}[mpsettings={numeric LongueurLigne; LongueurLigne=\useKV[DessinGradue]{Longueur};numeric EcartVertical; EcartVertical=\useKV[DessinGradue]{EcartVertical}; numeric Echelle; Echelle=\useKV[DessinGradue]{Echelle}; boolean Solution,Droites,DemiDroites; Solution=\useKV[DessinGradue]{Solution}; Droites=\useKV[DessinGradue]{Droites}; DemiDroites=\useKV[DessinGradue]{DemiDroites};}] pair La,Lb,Lab[]; - pair A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A',B',C',D',E',F',G',H',I',J',K',L',M',N',O',P',Q',R',S',T',U',V',W',X',Y',Z',A'',B'',C'',D'',E'',F'',G'',H'',I'',J'',K'',L'',M'',N'',O'',P'',Q'',R'',S'',T'',U'',V'',W'',X'',Y'',Z''; La=(0,0); + pair A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A',B',C',D',E',F',G',H',I',J',K',L',M',N',O',P',Q',R',S',T',U',V',W',X',Y',Z',A'',B'',C'',D'',E'',F'',G'',H'',I'',J'',K'',L'',M'',N'',O'',P'',Q'',R'',S'',T'',U'',V'',W'',X'',Y'',Z''; Lb-La=u*(LongueurLigne,0); picture EnsembleLignes,Lignes; EnsembleLignes=image( + if Solution: + drawoptions(withcolor 0.5white); + fi; n:=0; m:=0; - numeric retienspas[]; - drawoptions(withcolor 0.5white); for p_=#1: n:=n+1; + if Droites: + drawarrow (1.05[Lb,La]--1.05[La,Lb]) shifted((n-1)*u*(0,-EcartVertical)); + elseif DemiDroites: + drawarrow (La--1.05[La,Lb]) shifted((n-1)*u*(0,-EcartVertical)); + else: trace segment(La,Lb) shifted((n-1)*u*(0,-EcartVertical)); - label(LATEX("(\num{"&decimal(n)&"})"),La+u*(-1.5,-(n-1)*\useKV[DessinGradue]{EcartVertical})); + fi; + label(LATEX("(\num{"&decimal(n)&"})"),La+u*(-1.5,-(n-1)*EcartVertical)); for k=0 upto bluepart(p_): m:=bluepart(p_); - retienspas[n]:=bluepart(p_); + retienspas[n]:=m; Lab[k]:=(k/m)[La,Lb]; trace ((Lab[k]+u*(0,-0.1))--(Lab[k]+u*(0,0.1))) shifted((n-1)*u*(0,-EcartVertical)); endfor; labeloffset:=labeloffset*1.5; - label.top(TEX("\num{"&decimal(redpart(p_))&"}"),La shifted((n-1)*u*(0,-EcartVertical))); - label.top(TEX("\num{"&decimal(greenpart(p_))&"}"),Lb shifted((n-1)*u*(0,-EcartVertical))); + label.top(LATEX("\num{"&decimal(redpart(p_))&"}"),La shifted((n-1)*u*(0,-EcartVertical))); + label.top(LATEX("\num{"&decimal(greenpart(p_))&"}"),Lb shifted((n-1)*u*(0,-EcartVertical))); labeloffset:=labeloffset/1.5; endfor; drawoptions(); + if Solution: n:=0; numeric nblignes,nbpas; for p_=#2: @@ -8239,6 +9114,7 @@ couleur indiquée, le nombre de cases donné par le résultat du calcul. for p_=#3: trace p_ withpen pencircle scaled 1.5; endfor; + fi; ); trace EnsembleLignes scaled Echelle; \end{mpost} @@ -8253,47 +9129,36 @@ couleur indiquée, le nombre de cases donné par le résultat du calcul. \newcommand\DessinGradue[4][]{% \useKVdefault[DessinGradue]% \setKV[DessinGradue]{#1}% - \ifboolKV[DessinGradue]{Droites}{% - %en travail - \setsepchar[*]{,*/}% - \readlist\ListeDefDroites{#2}% - \newtoks\toklistedefdroites% - \foreachitem\compteur\in\ListeDefDroites{\expandafter\UpdateDefDroites\compteur\nil}% - %en travail - }{% - \ifboolKV[DessinGradue]{LignesIdentiques}{% - \ifboolKV[DessinGradue]{Solution}{% - \setsepchar[*]{,*/}% - \readlist\ListePG{#3}% - \setsepchar[*]{§*/}% - \readlist\ListeTraces{#4}% - \newtoks\toklisteptsgrad% - \foreachitem\compteur\in\ListePG{\expandafter\UpdateLignes\compteur\nil}% - \newtoks\toklistetracesgrad% - \foreachitem\compteur\in\ListeTraces{\expandafter\UpdateTraces\compteur\nil}% - \TraceDessinGradueSolution{\useKV[DessinGradue]{Lignes}}{\useKV[DessinGradue]{Debut}}{\useKV[DessinGradue]{Fin}}{\useKV[DessinGradue]{Pas}}{\the\toklisteptsgrad}{\the\toklistetracesgrad}% - }{% - \TraceDessinGradue{\useKV[DessinGradue]{Lignes}}{\useKV[DessinGradue]{Debut}}{\useKV[DessinGradue]{Fin}}{\useKV[DessinGradue]{Pas}}% - }% - }{% + \ifboolKV[DessinGradue]{LignesIdentiques}{% + \newtoks\toklisteptsgrad% + \newtoks\toklistetracesgrad% + \ifboolKV[DessinGradue]{Solution}{% \setsepchar[*]{,*/}% - \readlist\ListeDefLigne{#2}% - \newtoks\toklistedefligne% - \foreachitem\compteur\in\ListeDefLigne{\expandafter\UpdateDefLignes\compteur\nil}% - \ifboolKV[DessinGradue]{Solution}{% - \setsepchar[*]{,*/}% - \readlist\ListePG{#3}% - \setsepchar[*]{§*/}% - \readlist\ListeTraces{#4}% - \newtoks\toklisteptsgrad% - \foreachitem\compteur\in\ListePG{\expandafter\UpdateLignes\compteur\nil}% - \newtoks\toklistetracesgrad% - \foreachitem\compteur\in\ListeTraces{\expandafter\UpdateTraces\compteur\nil}% - \TraceDessinGradueMulSolution{\the\toklistedefligne}{\the\toklisteptsgrad}{\the\toklistetracesgrad}% - }{% - \TraceDessinGradueMul{\the\toklistedefligne}% - }% + \readlist\ListePG{#3}% + \setsepchar[*]{§*/}% + \readlist\ListeTraces{#4}% + \foreachitem\compteur\in\ListePG{\expandafter\UpdateLignes\compteur\nil}% + \foreachitem\compteur\in\ListeTraces{\expandafter\UpdateTraces\compteur\nil}% + }{}% + \TraceDessinGradue{\useKV[DessinGradue]{Lignes}}{\useKV[DessinGradue]{Debut}}{\useKV[DessinGradue]{Fin}}{\useKV[DessinGradue]{Pas}}{\the\toklisteptsgrad}{\the\toklistetracesgrad}% + }{% + \setsepchar[*]{,*/}% + \readlist\ListeDefLigne{#2}% + \xdef\toklistedefligne{}% + \foreachitem\compteur\in\ListeDefLigne{% + \xdef\toklistedefligne{\toklistedefligne (\ListeDefLigne[\compteurcnt,1],\ListeDefLigne[\compteurcnt,2],\ListeDefLigne[\compteurcnt,3]),}% }% + \newtoks\toklisteptsgrad% + \newtoks\toklistetracesgrad% + \ifboolKV[DessinGradue]{Solution}{% + \setsepchar[*]{,*/}% + \readlist\ListePG{#3}% + \setsepchar[*]{§*/}% + \readlist\ListeTraces{#4}% + \foreachitem\compteur\in\ListePG{\expandafter\UpdateLignes\compteur\nil}% + \foreachitem\compteur\in\ListeTraces{\expandafter\UpdateTraces\compteur\nil}% + }{}% + \TraceDessinGradueMul{\toklistedefligne}{\the\toklisteptsgrad}{\the\toklistetracesgrad}% }% }% @@ -19024,7 +19889,7 @@ Barre=false,Longueur=10cm,Hauteur=5mm,Bicolore=false,EcartBarre=0%Grille est dis %%% % Fonction %%% -\setKVdefault[ClesFonction]{Nom=f,Variable=x,Calcul=x,Tableau=false,Largeur=5mm,Ecriture=false,Definition=false,Points=false,Tangentes=false,PasX=1,PasY=1,UniteX=1,UniteY=1,Prolonge=false,Trace=false} +\setKVdefault[ClesFonction]{Nom=f,Variable=x,Calcul=x,Tableau=false,Largeur=5mm,Ecriture=false,Definition=false,Points=false,Tangentes=false,PasX=1,PasY=1,UniteX=1,UniteY=1,Prolonge=false,Trace=false,Catmull=false,Epaisseur=1} \newtoks\toklistePtsFn%pour la discipline @@ -19109,10 +19974,10 @@ Barre=false,Longueur=10cm,Hauteur=5mm,Bicolore=false,EcartBarre=0%Grille est dis draw Fn[0] for k=1 upto N: ..Fn[k] - endfor; + endfor withpen pencircle scaled \useKV[ClesFonction]{Epaisseur}; \end{mplibcode} \else - \begin{mpost} + \begin{mpost}[mpsettings={numeric Epaisseur; Epaisseur=\useKV[ClesFonction]{Epaisseur};}] x.u:=#2; y.u:=#3; X.u:=#4; @@ -19181,7 +20046,7 @@ Barre=false,Longueur=10cm,Hauteur=5mm,Bicolore=false,EcartBarre=0%Grille est dis draw Fn[0] for k=1 upto N: ..Fn[k] - endfor; + endfor withpen pencircle scaled Epaisseur; \end{mpost} \fi } @@ -19267,11 +20132,11 @@ Barre=false,Longueur=10cm,Hauteur=5mm,Bicolore=false,EcartBarre=0%Grille est dis for k=1 upto (N-1): ..{dir dirav[k]}Fn[k]{dir dirap[k]} endfor - ..{dir dirav[N]}Fn[N]; + ..{dir dirav[N]}Fn[N] withpen pencircle scaled \useKV[ClesFonction]{Epaisseur}; \end{mplibcode} \else - \begin{mpost} - x.u:=#2; + \begin{mpost}[mpsettings={numeric Epaisseur; Epaisseur=\useKV[ClesFonction]{Epaisseur};}] + x.u:=#2; y.u:=#3; X.u:=#4; Y.u:=#5; @@ -19310,7 +20175,7 @@ Barre=false,Longueur=10cm,Hauteur=5mm,Bicolore=false,EcartBarre=0%Grille est dis MaxY:=ypart(Gn[k]); fi; endfor; - if #6=0: + if #6=0: for k=MinY-1 step y.u until MaxY+1: draw cm*((MinX-1)*X.u,k*Y.u)--cm*((MaxX+1)*X.u,k*Y.u) withcolor 0.75white; endfor; @@ -19348,11 +20213,129 @@ Barre=false,Longueur=10cm,Hauteur=5mm,Bicolore=false,EcartBarre=0%Grille est dis for k=1 upto (N-1): ..{dir dirav[k]}Fn[k]{dir dirap[k]} endfor - ..{dir dirav[N]}Fn[N]; + ..{dir dirav[N]}Fn[N] withpen pencircle scaled Epaisseur; \end{mpost} \fi } +\def\MPCatmull#1#2#3#4#5{% + % #1 la liste des points + % #2: pas en x + % #3: pas en y + % #4: unit\'e en x + % #5: unit\'e en y + \ifluatex + \mplibforcehmode + \begin{mplibcode} + x.u:=#2; + y.u:=#3; + X.u:=#4; + Y.u:=#5; + numeric dirav[],dirap[]; + pair Fn[],Gn[]; + n=0; + for p_=#1: + Gn[n]=p_; + Fn[n]=cm*(X.u*xpart(p_),Y.u*ypart(p_)); + n:=n+1; + endfor; + N:=(n-1); + MinX=999; + MaxX=-999; + MinY=999; + MaxY=-999; + for k=0 upto N: + if xpart(Gn[k])<MinX: + MinX:=xpart(Gn[k]); + fi; + if xpart(Gn[k])>MaxX: + MaxX:=xpart(Gn[k]); + fi; + if ypart(Gn[k])<MinY: + MinY:=ypart(Gn[k]); + fi; + if ypart(Gn[k])>MaxY: + MaxY:=ypart(Gn[k]); + fi; + endfor; + for k=MinY-1 step y.u until MaxY+1: + draw cm*((MinX-1)*X.u,k*Y.u)--cm*((MaxX+1)*X.u,k*Y.u) withcolor 0.75white; + endfor; + for k=MinX-1 step x.u until MaxX+1: + draw cm*(k*X.u,(MinY-1)*Y.u)--cm*(k*X.u,(MaxY+1)*Y.u) withcolor 0.75white; + endfor; + for k=0 upto N: + fill cercles(Fn[k],0.5mm); + endfor; + drawarrow (0,(MinY-1)*Y.u*cm)--(0,(MaxY+1)*Y.u*cm); + drawarrow ((MinX-1)*X.u*cm,0)--((MaxX+1)*X.u*cm,0); + % + label.llft(btex O etex,(0,0)); + dotlabel.bot(btex 1 etex,cm*X.u*(1,0)); + dotlabel.lft(btex 1 etex,cm*Y.u*(0,1)); + % + draw Fn[1] + for k=2 upto N-1: + ..{dir angle(Fn[k+1]-Fn[k-1])}Fn[k]{dir angle(Fn[k+1]-Fn[k-1])} + endfor withpen pencircle scaled \useKV[ClesFonction]{Epaisseur}; + \end{mplibcode} + \else + \begin{mpost}[mpsettings={numeric Epaisseur; Epaisseur=\useKV[ClesFonction]{Epaisseur};}] + x.u:=#2; + y.u:=#3; + X.u:=#4; + Y.u:=#5; + numeric dirav[],dirap[]; + pair Fn[],Gn[]; + n=0; + for p_=#1: + Gn[n]=p_; + Fn[n]=cm*(X.u*xpart(p_),Y.u*ypart(p_)); + n:=n+1; + endfor; + N:=(n-1); + MinX=999; + MaxX=-999; + MinY=999; + MaxY=-999; + for k=0 upto N: + if xpart(Gn[k])<MinX: + MinX:=xpart(Gn[k]); + fi; + if xpart(Gn[k])>MaxX: + MaxX:=xpart(Gn[k]); + fi; + if ypart(Gn[k])<MinY: + MinY:=ypart(Gn[k]); + fi; + if ypart(Gn[k])>MaxY: + MaxY:=ypart(Gn[k]); + fi; + endfor; + for k=MinY-1 step y.u until MaxY+1: + draw cm*((MinX-1)*X.u,k*Y.u)--cm*((MaxX+1)*X.u,k*Y.u) withcolor 0.75white; + endfor; + for k=MinX-1 step x.u until MaxX+1: + draw cm*(k*X.u,(MinY-1)*Y.u)--cm*(k*X.u,(MaxY+1)*Y.u) withcolor 0.75white; + endfor; + for k=0 upto N: + fill cercles(Fn[k],0.5mm); + endfor; + drawarrow (0,(MinY-1)*Y.u*cm)--(0,(MaxY+1)*Y.u*cm); + drawarrow ((MinX-1)*X.u*cm,0)--((MaxX+1)*X.u*cm,0); + % + label.llft(btex O etex,(0,0)); + dotlabel.bot(btex 1 etex,cm*X.u*(1,0)); + dotlabel.lft(btex 1 etex,cm*Y.u*(0,1)); + % + draw Fn[1] + for k=2 upto N-1: + ..{dir angle(Fn[k+1]-Fn[k-1])}Fn[k]{dir angle(Fn[k+1]-Fn[k-1])} + endfor withpen pencircle scaled Epaisseur; + \end{mpost} + \fi +}% + \newcommand\Fonction[2][]{% \useKVdefault[ClesFonction]% \setKV[ClesFonction]{#1}% @@ -19365,23 +20348,32 @@ Barre=false,Longueur=10cm,Hauteur=5mm,Bicolore=false,EcartBarre=0%Grille est dis \toklistePtsFn{}% \setsepchar[*]{§*/}%\ignoreemptyitems% \readlist*\ListePoints{#2}% - \ifboolKV[ClesFonction]{Tangentes}{% + \ifboolKV[ClesFonction]{Catmull}{% + \xdef\PfCFooListePoints{(\ListePoints[1,2],\ListePoints[1,3]),} \foreachitem\compteur\in\ListePoints{% - \expandafter\UpdatePtsFn\compteur\nil% - }% - \ifboolKV[ClesFonction]{Prolonge}{% - \MPCourbe{\the\toklistePtsFn}{\useKV[ClesFonction]{PasX}}{\useKV[ClesFonction]{PasY}}{\useKV[ClesFonction]{UniteX}}{\useKV[ClesFonction]{UniteY}}{1}% - }{% - \MPCourbe{\the\toklistePtsFn}{\useKV[ClesFonction]{PasX}}{\useKV[ClesFonction]{PasY}}{\useKV[ClesFonction]{UniteX}}{\useKV[ClesFonction]{UniteY}}{0}% + \xdef\PfCFooListePoints{\PfCFooListePoints (\ListePoints[\compteurcnt,2],\ListePoints[\compteurcnt,3]),}% }% + \xdef\PfCFooListePoints{\PfCFooListePoints (\ListePoints[\ListePointslen,2],\ListePoints[\ListePointslen,3]),}% + \MPCatmull{\PfCFooListePoints}{\useKV[ClesFonction]{PasX}}{\useKV[ClesFonction]{PasY}}{\useKV[ClesFonction]{UniteX}}{\useKV[ClesFonction]{UniteY}}% }{% - \foreachitem\compteur\in\ListePoints{% - \expandafter\UpdatePtsFN\compteur\nil% - }% - \ifboolKV[ClesFonction]{Prolonge}{% - \MPCourbePoints{\the\toklistePtsFn}{\useKV[ClesFonction]{PasX}}{\useKV[ClesFonction]{PasY}}{\useKV[ClesFonction]{UniteX}}{\useKV[ClesFonction]{UniteY}}{1}% + \ifboolKV[ClesFonction]{Tangentes}{% + \foreachitem\compteur\in\ListePoints{% + \expandafter\UpdatePtsFn\compteur\nil% + }% + \ifboolKV[ClesFonction]{Prolonge}{% + \MPCourbe{\the\toklistePtsFn}{\useKV[ClesFonction]{PasX}}{\useKV[ClesFonction]{PasY}}{\useKV[ClesFonction]{UniteX}}{\useKV[ClesFonction]{UniteY}}{1}% + }{% + \MPCourbe{\the\toklistePtsFn}{\useKV[ClesFonction]{PasX}}{\useKV[ClesFonction]{PasY}}{\useKV[ClesFonction]{UniteX}}{\useKV[ClesFonction]{UniteY}}{0}% + }% }{% - \MPCourbePoints{\the\toklistePtsFn}{\useKV[ClesFonction]{PasX}}{\useKV[ClesFonction]{PasY}}{\useKV[ClesFonction]{UniteX}}{\useKV[ClesFonction]{UniteY}}{0}% + \foreachitem\compteur\in\ListePoints{% + \expandafter\UpdatePtsFN\compteur\nil% + }% + \ifboolKV[ClesFonction]{Prolonge}{% + \MPCourbePoints{\the\toklistePtsFn}{\useKV[ClesFonction]{PasX}}{\useKV[ClesFonction]{PasY}}{\useKV[ClesFonction]{UniteX}}{\useKV[ClesFonction]{UniteY}}{1}% + }{% + \MPCourbePoints{\the\toklistePtsFn}{\useKV[ClesFonction]{PasX}}{\useKV[ClesFonction]{PasY}}{\useKV[ClesFonction]{UniteX}}{\useKV[ClesFonction]{UniteY}}{0}% + }% }% }% }{% @@ -19419,7 +20411,7 @@ Barre=false,Longueur=10cm,Hauteur=5mm,Bicolore=false,EcartBarre=0%Grille est dis %%% % Diff\'erentes représentations graphiques %%% -\setKVdefault[TraceG]{Grille=false,Graduations=false,PasGradX=1,PasGradY=1,PasGrilleX=1,PasGrilleY=1,Xmin=-5.5,Xmax=5.5,Xstep=1,Ymin=-5.5,Ymax=5.5,Ystep=1,Bornea=-5.5,Borneb=5.5,LabelX={},LabelY={},LabelC=0.5,NomCourbe={},Origine={(5.5,5.5)},Fonction=false,Points=false,Invisible=false,CouleurPoint=red,CouleurTrace=black,Relie=false,RelieSegment=false,Marque=dot} +\setKVdefault[TraceG]{Grille=false,Graduations=false,PasGradX=1,PasGradY=1,PasGrilleX=1,PasGrilleY=1,Xmin=-5.5,Xmax=5.5,Xstep=1,Ymin=-5.5,Ymax=5.5,Ystep=1,Bornea=-5.5,Borneb=5.5,LabelX={},LabelY={},LabelC=0.5,NomCourbe={},Origine={(5.5,5.5)},Fonction=false,Points=false,Invisible=false,CouleurPoint=red,CouleurTrace=black,Epaisseur=1,Relie=false,RelieSegment=false,Marque=dot} \newcommand\TraceGraphique[2][]{% \useKVdefault[TraceG]% @@ -19637,7 +20629,8 @@ Barre=false,Longueur=10cm,Hauteur=5mm,Bicolore=false,EcartBarre=0%Grille est dis gradx=\useKV[TraceG]{PasGradX}; grady=\useKV[TraceG]{PasGradY}; pos=\useKV[TraceG]{LabelC}; - + Epaisseur:=\useKV[TraceG]{Epaisseur}; + color colortrace; colortrace=\useKV[TraceG]{CouleurTrace}; @@ -19720,12 +20713,12 @@ Barre=false,Longueur=10cm,Hauteur=5mm,Bicolore=false,EcartBarre=0%Grille est dis dotlabel.lft(TEX("\num{"&decimal(k)&"}"),(xpart(Origine*cm),k*y.u+ypart(Origine*cm))); endfor; fi; - drawoptions(withpen pencircle scaled1.5); + drawoptions(withpen pencircle scaled(1)); drawarrow (u*(0,ymin)--u*(0,ymax)) shifted (u*(xpart(Origine),0)); drawarrow (u*(xmin,0)--u*(xmax,0)) shifted (u*(0,ypart(Origine))); label.llft(btex 0 etex,u*Origine); drawoptions(); - draw courbe1(borneinf,bornesup,100)(#2) withcolor colortrace; + draw courbe1(borneinf,bornesup,100)(#2) withpen (pencircle scaled Epaisseur) withcolor colortrace; % labelisation numeric t; t=pos*length Cb1; @@ -19743,7 +20736,7 @@ Barre=false,Longueur=10cm,Hauteur=5mm,Bicolore=false,EcartBarre=0%Grille est dis \usepackage{ProfCollege} \setKV[TraceG]{#1} } - \begin{mpost}[mpsettings={borneinf=\useKV[TraceG]{Bornea};bornesup=\useKV[TraceG]{Borneb};xmin=\useKV[TraceG]{Xmin};xmax=\useKV[TraceG]{Xmax};ymin=\useKV[TraceG]{Ymin};ymax=\useKV[TraceG]{Ymax};pasx=\useKV[TraceG]{Xstep};pasy=\useKV[TraceG]{Ystep};xu=1cm/\useKV[TraceG]{Xstep};yu=1cm/\useKV[TraceG]{Ystep};grillex=\useKV[TraceG]{PasGrilleX};grilley=\useKV[TraceG]{PasGrilleY};pos=\useKV[TraceG]{LabelC};color colortrace;colortrace=\useKV[TraceG]{CouleurTrace};boolean Grille;Grille=\useKV[TraceG]{Grille};boolean Graduations;Graduations=\useKV[TraceG]{Graduations}; + \begin{mpost}[mpsettings={borneinf=\useKV[TraceG]{Bornea};bornesup=\useKV[TraceG]{Borneb};xmin=\useKV[TraceG]{Xmin};xmax=\useKV[TraceG]{Xmax};ymin=\useKV[TraceG]{Ymin};ymax=\useKV[TraceG]{Ymax};pasx=\useKV[TraceG]{Xstep};pasy=\useKV[TraceG]{Ystep};xu=1cm/\useKV[TraceG]{Xstep};yu=1cm/\useKV[TraceG]{Ystep};grillex=\useKV[TraceG]{PasGrilleX};grilley=\useKV[TraceG]{PasGrilleY};pos=\useKV[TraceG]{LabelC};Epaisseur=\useKV[TraceG]{Epaisseur}; color colortrace;colortrace=\useKV[TraceG]{CouleurTrace};boolean Grille;Grille=\useKV[TraceG]{Grille};boolean Graduations;Graduations=\useKV[TraceG]{Graduations}; pair Origine; Origine=(xmin,ymin)+\useKV[TraceG]{Origine};}] @@ -19821,7 +20814,7 @@ Barre=false,Longueur=10cm,Hauteur=5mm,Bicolore=false,EcartBarre=0%Grille est dis drawarrow (u*(0,ymin)--u*(0,ymax)) shifted (u*(xpart(Origine),0)); drawarrow (u*(xmin,0)--u*(xmax,0)) shifted (u*(0,ypart(Origine))); drawoptions(); - draw courbe1(borneinf,bornesup,100)(#2) withcolor colortrace; + draw courbe1(borneinf,bornesup,100)(#2) withpen (pencircle scaled Epaisseur) withcolor colortrace; % % labelisation numeric t; t=pos*length Cb1; @@ -22714,7 +23707,7 @@ u:=\useKV[ClesFormule]{Echelle}; if p_<>"": drawarrow (unitp*(valeur[n],-1))--(unitp*(valeur[n],-0.3)); label.bot(btex \hbox to2em{\dotfill} etex,(unitp*(valeur[n],-1))); - pointe(unitp*(valeur[n]-ValeurOrigine,0)); + pointe(unitp*(valeur[n],0)); fi; elseif AffichageCoord=2: if p_<>"": @@ -22856,7 +23849,7 @@ u:=\useKV[ClesFormule]{Echelle}; if p_<>"": drawarrow (unitp*(valeur[n],-1))--(unitp*(valeur[n],-0.3)); label.bot(btex \noexpand\hbox to2em{\noexpand\dotfill} etex,(unitp*(valeur[n],-1))); - pointe(unitp*(valeur[n]-ValeurOrigine,0)); + pointe(unitp*(valeur[n],0)); fi; elseif AffichageCoord=2: if p_<>"": @@ -25540,7 +26533,7 @@ label.lft(LATEX("\noexpand\footnotesize\noexpand\SI{\noexpand\fpeval{"&decimal(V \setlength{\PfCLongInter}{-40pt+\fpeval{\useKV[Tableur]{LargeurUn}}pt+\fpeval{(\useKV[Tableur]{Colonnes}-2)*\useKV[Tableur]{Largeur}}pt+\fpeval{2*\useKV[Tableur]{Colonnes}-6}\tabcolsep+\fpeval{\useKV[Tableur]{Colonnes}+2}\arrayrulewidth}% \ifboolKV[Tableur]{Bandeau}{% \begin{NiceTabular}{p{\PfCTableurLargeur}p{10pt}p{50pt}p{\PfCLongInter}} - \Block[draw]{}{\useKV[Tableur]{Cellule}}&\Block[draw]{}{\scriptsize$\blacktriangledown$}&\Block{}{$f_x$\hfill$\sum$~\scriptsize$\blacktriangledown$\hfill$=$}&\Block[draw]{}{\useKV[Tableur]{Formule}\hfill\scriptsize$\blacktriangledown$}\\ + \Block[draw,l]{}{\useKV[Tableur]{Cellule}}&\Block[draw]{}{\scriptsize$\blacktriangledown$}&\Block{}{$f_x$\hfill$\sum$~\scriptsize$\blacktriangledown$\hfill$=$}&\Block[draw]{}{\useKV[Tableur]{Formule}\hfill\scriptsize$\blacktriangledown$}\\ \end{NiceTabular}% \nopagebreak% \\% diff --git a/macros/latex/contrib/profcollege/metapost/PfCObjets.mp b/macros/latex/contrib/profcollege/metapost/PfCObjets.mp index 96daf3d3bc..964cfedd8a 100644 --- a/macros/latex/contrib/profcollege/metapost/PfCObjets.mp +++ b/macros/latex/contrib/profcollege/metapost/PfCObjets.mp @@ -637,6 +637,37 @@ vardef Objetsphere[](expr Rn)= apj.@:=apj-1; enddef; +vardef ObjetSphereNew[](expr Rn)= + Outcolor.@:=outcolor; + Incolor.@:=incolor; + if creux:Ferme.@:=false else: Ferme.@:=true fi; + scantokens("numeric "&substring(0,1) of Rn&"; "&Rn&";"); + vardef Famille(expr u,v)=(R*(cos(u)*cos(v),cos(u)*sin(v),sin(u))) enddef; + umin:=-pi/2; upas:=pi/nb; umax:=pi/2; + vmin:=-pi; vpas:=2*pi/subh; vmax:=pi; + apj:=0; + %On crée les facettes et on calcule la profondeur en Z. + for k=0 upto (nb-1): + for l=0 upto (subh-1): + tcpt.@[apj]:=apj; + OTFc.@[apj].nb:=4; + OTFc.@[apj][1]:=Image(Famille(umin+(k+1)*upas,vmin+l*vpas)); + OTFc.@[apj][2]:=Image(Famille(umin+k*upas,vmin+l*vpas)); + OTFc.@[apj][3]:=Image(Famille(umin+k*upas,vmin+(l+1)*vpas)); + OTFc.@[apj][4]:=Image(Famille(umin+(k+1)*upas,vmin+(l+1)*vpas)); + OTFc.@[apj].iso:=(OTFc.@[apj][1]+OTFc.@[apj][2]+OTFc.@[apj][3]+OTFc.@[apj][4])/4; + ALT.@[apj]:=-Zpart(GCoord(OTFc.@[apj].iso)); + if ProduitScalaire(Oeil-OTFc.@[apj].iso,Normal(OTFc.@[apj].iso,OTFc.@[apj][1],OTFc.@[apj][2]))>=0: + Vue.@[apj]:=true;coul.@[apj]:=outcolor; + else: + Vue.@[apj]:=false;coul.@[apj]:=incolor; + fi; + apj:=apj+1; + endfor; + endfor; + apj.@:=apj-1; +enddef; + vardef Objetcalotte[](expr Rn,Phib,Phih)= Outcolor.@:=outcolor; Incolor.@:=incolor; |