summaryrefslogtreecommitdiff
path: root/macros/latex/contrib
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2022-11-28 03:03:54 +0000
committerNorbert Preining <norbert@preining.info>2022-11-28 03:03:54 +0000
commitd215ba492183a22167b7cdf9900899ab51f7dda6 (patch)
tree32b4b1d6266f2afc855301d585edd3001b363ea8 /macros/latex/contrib
parent6d1b034ffe312cd342bdcc717d7bd694dcad25a9 (diff)
CTAN sync 202211280303
Diffstat (limited to 'macros/latex/contrib')
-rw-r--r--macros/latex/contrib/lt3rawobjects/lt3rawobjects.dtx10
-rw-r--r--macros/latex/contrib/lt3rawobjects/lt3rawobjects.pdfbin538908 -> 538768 bytes
-rw-r--r--macros/latex/contrib/pagecolor/README25
-rw-r--r--macros/latex/contrib/pagecolor/pagecolor-example.pdfbin81832 -> 92870 bytes
-rw-r--r--macros/latex/contrib/pagecolor/pagecolor.dtx328
-rw-r--r--macros/latex/contrib/pagecolor/pagecolor.pdfbin339411 -> 342986 bytes
-rw-r--r--macros/latex/contrib/profcollege/doc/ProfCollege-doc.pdfbin9348583 -> 9452788 bytes
-rw-r--r--macros/latex/contrib/profcollege/latex/ProfCollege.sty1411
-rw-r--r--macros/latex/contrib/profcollege/metapost/PfCObjets.mp31
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
index ff46b3c3ca..68851dde03 100644
--- a/macros/latex/contrib/lt3rawobjects/lt3rawobjects.pdf
+++ b/macros/latex/contrib/lt3rawobjects/lt3rawobjects.pdf
Binary files differ
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
index ae63e8048c..2f542a3184 100644
--- a/macros/latex/contrib/pagecolor/pagecolor-example.pdf
+++ b/macros/latex/contrib/pagecolor/pagecolor-example.pdf
Binary files differ
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
index 08642c75e5..edbc7cbde2 100644
--- a/macros/latex/contrib/pagecolor/pagecolor.pdf
+++ b/macros/latex/contrib/pagecolor/pagecolor.pdf
Binary files differ
diff --git a/macros/latex/contrib/profcollege/doc/ProfCollege-doc.pdf b/macros/latex/contrib/profcollege/doc/ProfCollege-doc.pdf
index 73f0d7167d..65f4d3e66e 100644
--- a/macros/latex/contrib/profcollege/doc/ProfCollege-doc.pdf
+++ b/macros/latex/contrib/profcollege/doc/ProfCollege-doc.pdf
Binary files differ
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;