summaryrefslogtreecommitdiff
path: root/macros/latex/contrib
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2020-04-11 03:09:12 +0000
committerNorbert Preining <norbert@preining.info>2020-04-11 03:09:12 +0000
commitc2697fc286a1e2c94fd9968b76be6f4a6d2114cd (patch)
tree1dc2cfb07cb032740483dd8be7c74aff66b70352 /macros/latex/contrib
parent25111608e6aa05042b0c6f83009262e1973d7a45 (diff)
CTAN sync 202004110309
Diffstat (limited to 'macros/latex/contrib')
-rw-r--r--macros/latex/contrib/acrotex/README.md4
-rw-r--r--macros/latex/contrib/acrotex/doc/aeb_man.pdfbin1362881 -> 1362825 bytes
-rw-r--r--macros/latex/contrib/acrotex/doc/aeb_man.tex4
-rw-r--r--macros/latex/contrib/acrotex/doc/eformman.pdfbin989403 -> 995393 bytes
-rw-r--r--macros/latex/contrib/acrotex/doc/eformman.tex4
-rw-r--r--macros/latex/contrib/acrotex/examples/jquiztst.pdfbin355221 -> 349331 bytes
-rw-r--r--macros/latex/contrib/acrotex/exerquiz.dtx51
-rw-r--r--macros/latex/contrib/acrotex/exerquiz.ins2
-rw-r--r--macros/latex/contrib/brandeis-dissertation/brandeis-dissertation.dtx12
-rw-r--r--macros/latex/contrib/brandeis-dissertation/brandeis-dissertation.pdfbin170866 -> 171196 bytes
-rw-r--r--macros/latex/contrib/brandeis-thesis/brandeis-thesis.dtx36
-rw-r--r--macros/latex/contrib/brandeis-thesis/brandeis-thesis.pdfbin142665 -> 149947 bytes
-rw-r--r--macros/latex/contrib/canoniclayout/README9
-rw-r--r--macros/latex/contrib/canoniclayout/README.txt51
-rw-r--r--macros/latex/contrib/canoniclayout/canoniclayout.dtx730
-rw-r--r--macros/latex/contrib/canoniclayout/canoniclayout.pdfbin474321 -> 482218 bytes
-rw-r--r--macros/latex/contrib/canoniclayout/canoniclayout.sty108
-rw-r--r--macros/latex/contrib/curve2e/README.txt2
-rw-r--r--macros/latex/contrib/curve2e/curve2e-manual.pdfbin566076 -> 565999 bytes
-rw-r--r--macros/latex/contrib/curve2e/curve2e-manual.tex22
-rw-r--r--macros/latex/contrib/curve2e/curve2e.dtx66
-rw-r--r--macros/latex/contrib/curve2e/curve2e.pdfbin641726 -> 648539 bytes
-rw-r--r--macros/latex/contrib/endnotes-hy/README.md19
-rw-r--r--macros/latex/contrib/endnotes-hy/docs/endnotes-hy.pdfbin0 -> 252245 bytes
-rw-r--r--macros/latex/contrib/endnotes-hy/endnotes-hy.dtx249
-rw-r--r--macros/latex/contrib/endnotes-hy/endnotes-hy.ins60
-rw-r--r--macros/latex/contrib/endnotes-hy/examples/exmpl-endnotes.pdfbin0 -> 88245 bytes
-rw-r--r--macros/latex/contrib/endnotes-hy/examples/exmpl-endnotes.tex81
-rw-r--r--macros/latex/contrib/eqexam/README.md7
-rw-r--r--macros/latex/contrib/eqexam/aebrandom.def2
-rw-r--r--macros/latex/contrib/eqexam/doc/eqexam.pdfbin790391 -> 806244 bytes
-rw-r--r--macros/latex/contrib/eqexam/doc/eqexamman.pdfbin618511 -> 624926 bytes
-rw-r--r--macros/latex/contrib/eqexam/doc/eqexamman.tex69
-rw-r--r--macros/latex/contrib/eqexam/eqexam.def27
-rw-r--r--macros/latex/contrib/eqexam/eqexam.dtx410
-rw-r--r--macros/latex/contrib/eqexam/eqexam.ins2
-rw-r--r--macros/latex/contrib/eqexam/examples/test01.tex2
-rw-r--r--macros/latex/contrib/euclideangeometry/README.txt2
-rw-r--r--macros/latex/contrib/euclideangeometry/euclideangeometry-man.pdfbin556684 -> 571301 bytes
-rw-r--r--macros/latex/contrib/euclideangeometry/euclideangeometry-man.tex180
-rw-r--r--macros/latex/contrib/euclideangeometry/euclideangeometry.dtx157
-rw-r--r--macros/latex/contrib/euclideangeometry/euclideangeometry.pdfbin411051 -> 431209 bytes
-rw-r--r--macros/latex/contrib/hepunits/ChangeLog22
-rw-r--r--macros/latex/contrib/hepunits/README20
-rw-r--r--macros/latex/contrib/hepunits/hepunits.pdfbin86255 -> 95331 bytes
-rw-r--r--macros/latex/contrib/hepunits/hepunits.sty217
-rw-r--r--macros/latex/contrib/hepunits/hepunits.tex309
-rw-r--r--macros/latex/contrib/tkz-doc/README.md23
-rw-r--r--macros/latex/contrib/tkz-doc/latex/couverture.tex6
-rw-r--r--macros/latex/contrib/tkz-doc/latex/tkz-doc.cfg10
-rw-r--r--macros/latex/contrib/tkz-doc/latex/tkz-doc.cls17
-rw-r--r--macros/latex/contrib/tkz-doc/latex/tkzexample.sty7
-rw-r--r--macros/latex/contrib/tkz/tkz-tab/README.md44
-rw-r--r--macros/latex/contrib/tkz/tkz-tab/doc/TKZdoc-tab.pdfbin0 -> 346356 bytes
-rw-r--r--macros/latex/contrib/tkz/tkz-tab/doc/latex/TKZdoc-tab-adapt.tex526
-rw-r--r--macros/latex/contrib/tkz/tkz-tab/doc/latex/TKZdoc-tab-bac.tex204
-rw-r--r--macros/latex/contrib/tkz/tkz-tab/doc/latex/TKZdoc-tab-examples.tex575
-rw-r--r--macros/latex/contrib/tkz/tkz-tab/doc/latex/TKZdoc-tab-image.tex180
-rw-r--r--macros/latex/contrib/tkz/tkz-tab/doc/latex/TKZdoc-tab-init.tex201
-rw-r--r--macros/latex/contrib/tkz/tkz-tab/doc/latex/TKZdoc-tab-main.tex187
-rw-r--r--macros/latex/contrib/tkz/tkz-tab/doc/latex/TKZdoc-tab-sign.tex311
-rw-r--r--macros/latex/contrib/tkz/tkz-tab/doc/latex/TKZdoc-tab-slope.tex39
-rw-r--r--macros/latex/contrib/tkz/tkz-tab/doc/latex/TKZdoc-tab-style.tex285
-rw-r--r--macros/latex/contrib/tkz/tkz-tab/doc/latex/TKZdoc-tab-tangente.tex176
-rw-r--r--macros/latex/contrib/tkz/tkz-tab/doc/latex/TKZdoc-tab-tv.tex87
-rw-r--r--macros/latex/contrib/tkz/tkz-tab/doc/latex/TKZdoc-tab-valeurs.tex164
-rw-r--r--macros/latex/contrib/tkz/tkz-tab/doc/latex/TKZdoc-tab-variation.tex852
-rw-r--r--macros/latex/contrib/tkz/tkz-tab/latex/tkz-tab.sty927
-rw-r--r--macros/latex/contrib/zhlipsum/README.md6
-rw-r--r--macros/latex/contrib/zhlipsum/zhlipsum-en.pdfbin67196 -> 66910 bytes
-rw-r--r--macros/latex/contrib/zhlipsum/zhlipsum-text.dtx2
-rw-r--r--macros/latex/contrib/zhlipsum/zhlipsum.dtx328
-rw-r--r--macros/latex/contrib/zhlipsum/zhlipsum.pdfbin268970 -> 342601 bytes
73 files changed, 6949 insertions, 1144 deletions
diff --git a/macros/latex/contrib/acrotex/README.md b/macros/latex/contrib/acrotex/README.md
index f226cb3297..1037f3a7a1 100644
--- a/macros/latex/contrib/acrotex/README.md
+++ b/macros/latex/contrib/acrotex/README.md
@@ -1,6 +1,6 @@
The AcroTeX eDucation Bundle
Author: D. P. Story
-Dated: 2020-01-01
+Dated: 2020-03-14
AeB contains the following:
@@ -19,6 +19,8 @@ AeB contains the following:
6) Documentation for AeB (AcroTeX eDucatation Bundle) and eForms
(including insdljs and dljslib).
+What's New (2020-03-14) Minor changes that support new features of eqexam.
+
What's New (2020-01-01) Replace use of \count0 with new counter \eqtmpcnta,
in situation, the value of \count0 was leaking out giving incorrect page
numbers.
diff --git a/macros/latex/contrib/acrotex/doc/aeb_man.pdf b/macros/latex/contrib/acrotex/doc/aeb_man.pdf
index 280a4bc02f..2bfc7a8364 100644
--- a/macros/latex/contrib/acrotex/doc/aeb_man.pdf
+++ b/macros/latex/contrib/acrotex/doc/aeb_man.pdf
Binary files differ
diff --git a/macros/latex/contrib/acrotex/doc/aeb_man.tex b/macros/latex/contrib/acrotex/doc/aeb_man.tex
index 5b9744d5bd..8060c03977 100644
--- a/macros/latex/contrib/acrotex/doc/aeb_man.tex
+++ b/macros/latex/contrib/acrotex/doc/aeb_man.tex
@@ -232,10 +232,10 @@
\university{{\AcroT} Software Development Team}
\email{dpstory@acrotex.net}
\versionLabel{Dated:}
-\version{2020/01/01}
+\version{2020/03/14}
\copyrightyears{1999-\the\year}
\nocopyright
-\prepared{2020/01/01}
+\prepared{2020/03/14}
\revisionLabel{Distribution Dated:}
\copyrightStatus{True}
diff --git a/macros/latex/contrib/acrotex/doc/eformman.pdf b/macros/latex/contrib/acrotex/doc/eformman.pdf
index 88525c5be8..7cddaa6778 100644
--- a/macros/latex/contrib/acrotex/doc/eformman.pdf
+++ b/macros/latex/contrib/acrotex/doc/eformman.pdf
Binary files differ
diff --git a/macros/latex/contrib/acrotex/doc/eformman.tex b/macros/latex/contrib/acrotex/doc/eformman.tex
index fe52261ce4..a07ff1dac0 100644
--- a/macros/latex/contrib/acrotex/doc/eformman.tex
+++ b/macros/latex/contrib/acrotex/doc/eformman.tex
@@ -80,8 +80,8 @@
email={dpstory@acrotex.net},
subject={Documentation for the eforms and insdljs packages},
talksite={\url{www.acrotex.net}},
- version={2019/12/17},
- prepared={2019/12/17},
+ version={2020/03/14},
+ prepared={2020/03/14},
preparedLabel={Distribution Dated:},
keywords={LaTeX, hyperref, PDF, exercises, quizzes},
copyrightStatus=True,
diff --git a/macros/latex/contrib/acrotex/examples/jquiztst.pdf b/macros/latex/contrib/acrotex/examples/jquiztst.pdf
index 70229d4eef..8bd66e99d1 100644
--- a/macros/latex/contrib/acrotex/examples/jquiztst.pdf
+++ b/macros/latex/contrib/acrotex/examples/jquiztst.pdf
Binary files differ
diff --git a/macros/latex/contrib/acrotex/exerquiz.dtx b/macros/latex/contrib/acrotex/exerquiz.dtx
index 255756e0d1..d75879e090 100644
--- a/macros/latex/contrib/acrotex/exerquiz.dtx
+++ b/macros/latex/contrib/acrotex/exerquiz.dtx
@@ -21,8 +21,8 @@
%<eqexam>\ProvidesFile{eqexam.def}
%<randomize>\ProvidesFile{aebrandom.def}
%<sumrytbls>\ProvidesFile{aebsumrytbls.def}
-%<template>\ProvidesFile{template.`def}
-%<package|driver|aebjs|eqexam|randomize|sumrytbls|template> [2020/01/01 v8.5.8 %
+%<template>\ProvidesFile{template.def}
+%<package|driver|aebjs|eqexam|randomize|sumrytbls|template> [2020/03/14 v8.5.10 %
%<package> Exerquiz: Exercises and Quizzes for LaTeX/PDF package (dps)]
%<driver> Exerquiz documentation driver file (dps)]
%<aebjs> Exerquiz document level JavaScript (dps)]
@@ -761,6 +761,8 @@
% \changes{v6.4t}{2012/06/18}{Testing for pdflatex and xetex}
% \changes{v8.1a}{2017/09/03}{Testing for luatex}
% \begin{macrocode}
+\let\bWebCustomize\endinput
+\let\eWebCustomize\relax
\@ifpackageloaded{web}{%
\ExecuteOptions{\eq@driver@name}%
}{%
@@ -1923,6 +1925,7 @@
{\if\exerstar*\def\eq@next{\@exercise}\else
\def\eq@next{\exercise@@}\fi\eq@next}%
}{\eq@postexerciseHook\endexerhook\par
+ \global\let\insE@rlyAtQues\@empty
\global\eq@exerciseheadingtrue\removelastskip\eq@exerskip}
% \end{macrocode}
% the exercise environment takes two sets of optional parameter,
@@ -1987,17 +1990,19 @@
\newif\ifeq@exerciseheading \eq@exerciseheadingtrue
% \end{macrocode}
% \changes{v6.7q}{2013/12/15}{Added this hook for use by \textsf{contsolns.dtx}}
+% \changes{v8.5.10}{2020/03/14}{Added \string\cs{priorexlabelheader} to support \string\pkg{eqexam}}
% \begin{macrocode}
\let\prior@exerSolnHeaderHook\@empty
\newcommand\exerSolnHeader[3]{%
\prior@exerSolnHeaderHook
\ifeqforpaper\else\webnewpage\fi\markright{#1}%\par\noindent%
+ \priorexlabelheader
%</package|eqexam>
%<*package>
- \noindent\hypertarget{#2}{#3}\relax
+ \noindent\hypertarget{#2}{#3}\global\let\priorexlabelheader\relax
%</package>
%<*eqexam>
- #3%
+ #3\global\let\priorexlabelheader\relax
%</eqexam>
%<*package|eqexam>
\solnhspace
@@ -2129,7 +2134,8 @@
% \begin{macrocode}
\eq@initializeContAnnot
\ifeq@exerciseheading
- \prior@questionsHook\marginparpriorhook\noindent\eqexheader@wrapper
+ \prior@questionsHook
+ \insE@rlyAtQues\marginparpriorhook\noindent\eqexheader@wrapper
\afterlabelhskip\marginparafterhook\gEx@CommonCmd
\eq@setPrbSolnAftrIndnt\ignorespaces\fi}
% \end{macrocode}
@@ -2163,6 +2169,7 @@
\def\makeExSolnsLocalOn{\makeExSlLocaltrue}
\def\makeExSolnsLocalOff{\makeExSlLocalfalse}
\let\eqMrkSoln\@gobble
+\let\priorexlabelheader\relax
\def\eqExerSolnHeaderSngl{%
\ifmakeExSlLocal\protect\begingroup^^J\fi
\ifx\eqMrkCpyArg\@empty\else
@@ -2739,7 +2746,7 @@
% \begin{macrocode}
\let\eq@exerstarEnv\relax
\newenvironment{exercise*}{\def\eq@exerstarEnv{*}\exercise}
-{\endexercise}
+{\global\let\insE@rlyAtQues\@empty\endexercise}
% \end{macrocode}
% \end{environment}
% \begin{environment}{parts}
@@ -2842,8 +2849,10 @@
% \end{macrocode}
% (2012/02/04) Common code to the definition of \cs{item}
% both list and tabular versions.
+% \changes{v8.5.10}{2020/03/14}{\string\cs{probInMinip@ge} set to \string\cs{relax}}
% \begin{macrocode}
\def\eq@item@common{\eq@insertContAnnot\eqp@rtc@lcm@rk
+ \global\let\probInMinip@ge\relax
\def\currhideopt{x}\eq@hidesolutionfalse\eq@nolinkfalse
\@ifnextchar[{\@ckhide}{\eq@item}}
% \end{macrocode}
@@ -2893,6 +2902,7 @@
% \begin{macrocode}
\newif\ifwithinparts
\let\ex@listtabheader@fterhook\@empty
+\let\probInMinip@ge\relax
% \end{macrocode}
% Begin the list version of the parts environment.
% \begin{macrocode}
@@ -2979,9 +2989,15 @@
{\eq@item@latex\ex@listtabheader@fterhook
\exlisttabheaderafterhook}}%
\def\eqthisenv{parts}\withinpartstrue
- \def\item{\ifx\@currenvir\eqthisenv
+% \end{macrocode}
+% If \cs{probInMinip@ge} has been redefined, continue to \cs{eq@item@common} to support \pkg{eqexam}.
+% \changes{v8.5.10}{2020/03/14}{Change in logic for \string\cs{item} to support \string\pkg{eqexam}}
+% \begin{macrocode}
+ \def\item{\ifx\probInMinip@ge\relax
+ \ifx\@currenvir\eqthisenv
\def\eq@next{\eq@item@common}\else
\def\eq@next{\eq@item}\fi
+ \else\def\eq@next{\eq@item@common}\fi
\eq@next}%
}}{\endlist\global\let\leadinitem\leadinitem@external
\post@parts@hook\belowpartshook}
@@ -3522,9 +3538,8 @@
\newcommand{\exerSolnInput}
{%
\@ifundefined{eqe@IWO}{}{\ifsolutionsAtEnd
- \eqe@IWO\@auxout{\string\expandafter\string\gdef
- \string\csname\space eqExamQuesLastPage\string\endcsname
- {\arabic{page}}}\fi}\let\webnewpage\relax
+ \eqe@IWO\@auxout{\string\csarg\string\gdef
+ {eqExamQuesLastPage}{\arabic{page}}}\fi}\let\webnewpage\relax
\ifsolutionsonly\else
% \end{macrocode}
% \changes{v8.2.6}{2018/12/03}{place \string\cs{endinput} at end of sol file}
@@ -3745,6 +3760,7 @@
% This is a redesigned \texttt{list} environment.
% \begin{macrocode}
\newcommand{\prior@questionsHook}{}
+\let\insE@rlyAtQues\@empty
\let\qMark@Hook\@empty
\let\aebtitleQuiz\@empty
\newcommand{\post@questionsHook}{}
@@ -3806,7 +3822,8 @@
\toks@=\expandafter\expandafter\expandafter{#1}\expandafter
\xdef\csname quesOpts\@quesctr\endcsname{\the\toks@}%
\edef\tempexp{\noexpand\setkeys{props@ques}{\the\toks@}}\tempexp
- \list{\qMark@Hook\prior@questionsHook\gdef\eqPTs{1}%
+ \list{\qMark@Hook\prior@questionsHook
+ \insE@rlyAtQues\gdef\eqPTs{1}%
\global\let\eqQT\eq@na%
% \end{macrocode}
% (06/06/10) We create a macro \cs{@currentQues} that holds the current
@@ -10298,7 +10315,7 @@ var ok2Continue = true;
%
% The arrays \texttt{RightWrong}, \texttt{ProbValue}, \texttt{ProbDist} and \texttt{ProbType} maintain quiz information
% for a quiz. The following are typical values of these arrays. This is a quiz taken
-% from the manswer.tex demo file. Question 1 is a multiple selection question; Question 2
+% from the \texttt{manswer.tex} demo file. Question 1 is a multiple selection question; Question 2
% is a multiple choice question; Question 3 is a math fill-in question; and Question 4
% is a grouped question. (The \texttt{undefined} entries indicate an empty or a not used entry.)
%\begin{verbatim}
@@ -11974,7 +11991,7 @@ function DisplayQuizResults(qtfield,nPointTotal,nQuestions)
for (var i=1; i < RightWrong.length; i++)
{
if ( (typeof RightWrong[i] == "object" ) %
- && ( RightWrong[i][0] == "grp" ) ) {
+&& ( RightWrong[i][0] == "grp" ) ) {
// grouped question
Score += GrpRight(RightWrong[i], i, qtfield);
var aWeights = ProbValue[i].slice(2);
@@ -11994,9 +12011,15 @@ function DisplayQuizResults(qtfield,nPointTotal,nQuestions)
if (RightWrong[i][1] == 1)
ProbDist[i]=(typeof ProbValue[i]=="object") ?
1*ProbValue[i][1] : 1*ProbValue[i];
- else
+ else {
ProbDist[i]=(typeof ProbValue[i] == "object") ?
1*ProbValue[i][1] : 0;
+% \end{macrocode}
+% If the user receives negative points, we change it to zero points.
+% \changes{v8.5.9}{2020/02/21}{If the user receives negative points, we change it to zero points.}
+% \begin{macrocode}
+ if (!negPointsAllowed && !negPointsMarkupAllowed) if (ProbDist[i]<0) ProbDist[i]=0
+ }
ptScore += (1*ProbDist[i]);
}
} else {
diff --git a/macros/latex/contrib/acrotex/exerquiz.ins b/macros/latex/contrib/acrotex/exerquiz.ins
index d3514d0099..f8e05e4265 100644
--- a/macros/latex/contrib/acrotex/exerquiz.ins
+++ b/macros/latex/contrib/acrotex/exerquiz.ins
@@ -3,7 +3,7 @@
%% driver files from the doc files in this package when run through
%% LaTeX or TeX.
%%
-%% Copyright 1999-2014 D. P. Story
+%% Copyright 1999-2020 D. P. Story
%%
%% This file is part of the `AcroTeX eDucation Bundle'.
%% -------------------------------------------
diff --git a/macros/latex/contrib/brandeis-dissertation/brandeis-dissertation.dtx b/macros/latex/contrib/brandeis-dissertation/brandeis-dissertation.dtx
index 6cafd4486a..767651386f 100644
--- a/macros/latex/contrib/brandeis-dissertation/brandeis-dissertation.dtx
+++ b/macros/latex/contrib/brandeis-dissertation/brandeis-dissertation.dtx
@@ -22,7 +22,7 @@
%<package>\NeedsTeXFormat{LaTeX2e}[2005/12/01]
%<package>\ProvidesPackage{brandeis-dissertation}
%<*package>
- [2020/04/02 v3.1 .dtx brandeis-dissertation file]
+ [2020/04/09 v3.11 .dtx brandeis-dissertation file]
%</package>
%<package>\LoadClass[12pt]{article}
%<package>\RequirePackage[margin=1in]{geometry}
@@ -202,7 +202,9 @@
% Right brace \} Tilde \~}
%
%
-% \changes{v3.1}{2020/02/28}{Initial version}
+% \changes{v3.0}{2020/02/28}{Initial version}
+% \changes{v3.1}{2020/04/09}{Formatting update}
+% \changes{v3.11}{2020/04/09}{Documentation update}
%
% \GetFileInfo{brandeis-dissertation.dtx}
%
@@ -282,11 +284,11 @@
%
% This will create your abstract page, with the abstract being ``I present a simple explanation of how to LaTeX your dissertation.'' You may optionally use the \texttt{dissertation-acknowledgements} environment in the same way, immediately before your abstract.
%
-% Table of Contents, List of Figures, etc. can be generated as usual using \LaTeX.
+% Table of Contents, List of Figures, etc. can be generated as usual using \LaTeX. You should precede these with \texttt{\textbackslash doublespacing} to make them double spaced.
%
% To end the front matter section of your dissertation and begin the body of your dissertation, use the command \texttt{\textbackslash startbody}.
%
-% The rest of your dissertation may be written as normal; margins, spacing, and pagination should be set automatically.
+% The rest of your dissertation may be written as normal; margins, spacing, and pagination should be set automatically, with the exception of your bibliography. To make your bibliography single spaced, you should precede it with You should precede these with \texttt{\textbackslash singlespacing}.
%
% \section{Example}
%
@@ -322,7 +324,7 @@
% I present a simple explanation of how to LaTeX your dissertation.
% \end{dissertation-abstract}
%
-% \addcontentsline{toc}{section}{Table of Contents}
+% \doublespacing
% \tableofcontents
%
% \startbody
diff --git a/macros/latex/contrib/brandeis-dissertation/brandeis-dissertation.pdf b/macros/latex/contrib/brandeis-dissertation/brandeis-dissertation.pdf
index f83ffe7a56..5fda9fe22f 100644
--- a/macros/latex/contrib/brandeis-dissertation/brandeis-dissertation.pdf
+++ b/macros/latex/contrib/brandeis-dissertation/brandeis-dissertation.pdf
Binary files differ
diff --git a/macros/latex/contrib/brandeis-thesis/brandeis-thesis.dtx b/macros/latex/contrib/brandeis-thesis/brandeis-thesis.dtx
index 3ae38d8f5f..b148381de9 100644
--- a/macros/latex/contrib/brandeis-thesis/brandeis-thesis.dtx
+++ b/macros/latex/contrib/brandeis-thesis/brandeis-thesis.dtx
@@ -4,7 +4,7 @@
% -------------------------------------------------------
%
% This file may be distributed and/or modified under the
-% conditions of the LaTeX Project Public License, either version 1.3c
+% conditions of the LaTeX Project Public License, either version 1.3
% of this license or (at your option) any later version.
% The latest version of this license is in:
%
@@ -22,7 +22,7 @@
%<package>\NeedsTeXFormat{LaTeX2e}[2005/12/01]
%<package>\ProvidesClass{brandeis-thesis}
%<*package>
- [2020/01/21 v1.0 .dtx brandeis-thesis file]
+ [2020/04/09 v3.1 .dtx brandeis-thesis file]
%</package>
%<package>\LoadClass[12pt]{article}
%<package>\RequirePackage[margin=1in]{geometry}
@@ -37,8 +37,8 @@
%<package>\titleformat*{\subsection}{\normalsize\bfseries}
%<package>\titleformat*{\subsubsection}{\normalsize\bfseries}
%
-%<package>\renewcommand\month[1]{\def\@month{#1}}
-%<package>\renewcommand\year[1]{\def\@year{#1}}
+%<package>\renewcommand\graduationmonth[1]{\def\@graduationmonth{#1}}
+%<package>\renewcommand\graduationyear[1]{\def\@graduationyear{#1}}
%<package>\newcommand\program[1]{\def\@program{#1}}
%<package>\newcommand\advisor[1]{\def\@advisor{#1}}
%<package>\newcommand\degreetype[1]{\def\@degreetype{#1}}
@@ -71,7 +71,7 @@
\vspace{1em}
\@author\\
\vspace{1em}
- \@month\,\@year
+ \@graduationmonth\,\@graduationyear
\end{center}
\restoregeometry
\newpage
@@ -87,7 +87,7 @@
Copyright by\\
\@author{}\\
\vspace{1em}
- \@year{}
+ \@graduationyear{}
\end{center}
\restoregeometry
\newpage
@@ -99,7 +99,6 @@
\newenvironment{thesis-abstract}
{
%\newgeometry{top=1.4in}
- \addcontentsline{toc}{section}{Abstract}
\begin{center}
\MakeUppercase{Abstract}\\
\vspace{1em}
@@ -158,7 +157,8 @@
% Right brace \} Tilde \~}
%
%
-% \changes{v1.0}{2020/01/21}{Initial version}
+% \changes{v3.0}{2020/01/21}{Initial version}
+% \changes{v3.1}{2020/04/09}{Formatting update}
%
% \GetFileInfo{brandeis-thesis.dtx}
%
@@ -192,8 +192,8 @@
% \begin{verbatim}
% \title{}
% \author{}
-% \month{}
-% \year{}
+% \graduationmonth{}
+% \graduationyear{}
% \program{}
% \advisor{}
% \degreetype{}
@@ -204,8 +204,8 @@
% \begin{verbatim}
% \title{LaTeXing Your Thesis}
% \author{Deanna Daly}
-% \month{May}
-% \year{2020}
+% \graduationmonth{May}
+% \graduationyear{2020}
% \program{Computer Science}
% \advisor{Alan Turing}
% \degreetype{Science}
@@ -230,13 +230,13 @@
% \end{thesis-abstract}
% \end{verbatim}
%
-% This will create your abstract page, with the abstract being "I present a simple explanation of how to LaTeX your thesis."
+% This will create your abstract page, with the abstract being ``I present a simple explanation of how to LaTeX your thesis.''
%
-% Table of Contents, List of Figures, etc. can be generated as usual using \LaTeX.
+% Table of Contents, List of Figures, etc. can be generated as usual using \LaTeX. You should precede these with \texttt{\textbackslash doublespacing} to make them double spaced.
%
% To end the front matter section of your thesis and begin the body of your thesis, use the command \texttt{\textbackslash startbody}.
%
-% The rest of your thesis may be written as normal; margins, spacing, and pagination should be set automatically.
+% The rest of your thesis may be written as normal; margins, spacing, and pagination should be set automatically, with the exception of your bibliography. To make your bibliography single spaced, you should precede it with You should precede these with \texttt{\textbackslash singlespacing}.
%
% \section{Example}
%
@@ -248,8 +248,8 @@
%
% \title{LaTeXing Your Thesis}
% \author{Deanna Daly}
-% \month{May}
-% \year{2020}
+% \graduationmonth{May}
+% \graduationyear{2020}
% \program{Computer Science}
% \advisor{Alan Turing}
% \degreetype{Science}
@@ -263,7 +263,7 @@
% I present a simple explanation of how to LaTeX your thesis.
% \end{thesis-abstract}
%
-% \addcontentsline{toc}{section}{Table of Contents}
+% \doublespacing
% \tableofcontents
%
% \startbody
diff --git a/macros/latex/contrib/brandeis-thesis/brandeis-thesis.pdf b/macros/latex/contrib/brandeis-thesis/brandeis-thesis.pdf
index d30119d45c..b7361daedb 100644
--- a/macros/latex/contrib/brandeis-thesis/brandeis-thesis.pdf
+++ b/macros/latex/contrib/brandeis-thesis/brandeis-thesis.pdf
Binary files differ
diff --git a/macros/latex/contrib/canoniclayout/README b/macros/latex/contrib/canoniclayout/README
deleted file mode 100644
index 1f9c586035..0000000000
--- a/macros/latex/contrib/canoniclayout/README
+++ /dev/null
@@ -1,9 +0,0 @@
-Canoniclayout v.04
-
-Canoniclayout is a small extension that allows to design a canonic layout based on the great circle inscribed within the page and tangent to the horizontal sides of the type block rectangle. The margins reflect the trimmed page shape ratio, therefore the type block principal diagonal coincides with the corresponding page diagonal; this layout is especially good for ISO shapes but can be used with many other traditional book page shapes.
-
-This work is released under the Latex Project Pubblic Licence v.1.3. The LPPL is distributed with any TeX system distribution and can be found also in any CTAN archive.
-
-Claudio Beccari 2011
-Author maintained
-claudio dot beccari at gmail dot com
diff --git a/macros/latex/contrib/canoniclayout/README.txt b/macros/latex/contrib/canoniclayout/README.txt
new file mode 100644
index 0000000000..546cf44f17
--- /dev/null
+++ b/macros/latex/contrib/canoniclayout/README.txt
@@ -0,0 +1,51 @@
+%%
+%% This is file `README.txt',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% canoniclayout.dtx (with options: `txt')
+%% ______________________________________________________
+%% The canoniclayout package for LaTeX
+%% Copyright (C) 2010-2020 Claudio Beccari
+%% All rights reserved
+%%
+%% License information appended
+%%
+\ProvidesFile{README.txt}
+ [2020-04-09 v.0.5 Canonic layout circumscribed to a circle]
+
+
+Canoniclayout is a small extension package that allows to design
+a canonic layout based on the great circle inscribed within the
+page and tangent to the horizontal sides of the type block rectangle.
+The margins reflect the trimmed page shape ratio, therefore the
+type block principal diagonal coincides with the corresponding
+page diagonal; this layout is especially good for ISO page shapes
+but it can be used with many other traditional book page shapes.
+
+This new version is completely new, in the sense that its code
+calculations are performed by means of the 2018 xfp package
+facilities. For this reason it cannot be used with any TeX
+distribution preceding the year 2018 and updated by the end of
+that year; should this happen this very package aborts its own
+input while advising the user by means of an Error Message.
+
+This work is released under the Latex Project Public Licence
+v.1.3c. The LPPL is distributed with any TeX system distribution
+and can be found also in any CTAN archive.
+
+Claudio Beccari 2020
+claudio dot beccari at gmail dot com
+
+%% Distributable under the LaTeX Project Public License,
+%% version 1.3c or higher (your choice). The latest version of
+%% this license is at: http://www.latex-project.org/lppl.txt
+%%
+%% This work consists of this file canoniclayout.dtx, a README.txt file
+%% and the derived files canoniclayout.sty and canoniclayout.pdf.
+%%
+%% This work is "maintained"
+%%
+%%
+%% End of file `README.txt'.
diff --git a/macros/latex/contrib/canoniclayout/canoniclayout.dtx b/macros/latex/contrib/canoniclayout/canoniclayout.dtx
index 0855bd860e..21acee8337 100644
--- a/macros/latex/contrib/canoniclayout/canoniclayout.dtx
+++ b/macros/latex/contrib/canoniclayout/canoniclayout.dtx
@@ -6,28 +6,28 @@
\preamble
______________________________________________________
The canoniclayout package for LaTeX
- Copyright (C) 2010-2011 Claudio Beccari
+ Copyright (C) 2010-2020 Claudio Beccari
All rights reserved
License information appended
\endpreamble
-\postamble
-Copyright 2011 Claudio Beccari
+\postamble
Distributable under the LaTeX Project Public License,
version 1.3c or higher (your choice). The latest version of
this license is at: http://www.latex-project.org/lppl.txt
-This work is "author-maintained"
-
-This work consists of this file canoniclayout.dtx, a README file
+This work consists of this file canoniclayout.dtx, a README.txt file
and the derived files canoniclayout.sty and canoniclayout.pdf.
+This work is "maintained"
+
\endpostamble
\askforoverwritefalse
%
\generate{\file{canoniclayout.sty}{\from{canoniclayout.dtx}{package}}}
+\generate{\file{README.txt}{\from{canoniclayout.dtx}{txt}}}
%
\def\tmpa{plain}
\ifx\tmpa\fmtname\endgroup\expandafter\bye\fi
@@ -41,21 +41,22 @@ and the derived files canoniclayout.sty and canoniclayout.pdf.
%</driver>
%<package>\NeedsTeXFormat{LaTeX2e}[2009/01/01]
%<package>\ProvidesPackage{canoniclayout}%
-%<*package>
- [2011/11/05 v.0.3 Canonic layout circumscribed to a circle]
-%</package>
+%<txt>\ProvidesFile{README.txt}
+%<*package,txt>
+ [2020-04-09 v.0.5 Canonic layout circumscribed to a circle]
+%</package,txt>
%<*driver>
\documentclass[a4paper]{ltxdoc}
\paperwidth=210mm\paperheight=297mm
\pdfpagewidth=\paperwidth \pdfpageheight=\paperheight
-\usepackage[latin1]{inputenc}
+\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{textcomp}
\usepackage{multicol}
\usepackage{amsmath,array,booktabs}
-\usepackage{pict2e}[2009/06/01]%
-\usepackage{color}
+\usepackage{pict2e}[2019/06/01]%
+\usepackage{color,xfp}
\usepackage{canoniclayout}
\hfuzz 10pt
@@ -63,21 +64,28 @@ and the derived files canoniclayout.sty and canoniclayout.pdf.
\newcommand*\pack[1]{\textsf{#1}}
\newcommand*\prog[1]{\textsl{#1}}
\newcommand*\file[1]{\texttt{#1}}
-\definecolor{grigio}{gray}{.75}
+\definecolor{grigio}{gray}{.85}
\makeatletter
-\def\cblayoutdestro{\dimen256=\dimexpr\headheight+\topmargin+1in-\paperheight\relax
-\dimen258=\dimexpr\oddsidemargin+1in\relax
-\dimen262=1mm\relax
-\dimen260=\dimexpr \paperwidth*\p@/\dimen262\relax
-\dimen264=\dimexpr \paperheight-\topmargin-\headheight-1in-\headsep-\textheight\relax
-\begin{picture}(0,0)(\strip@pt\dimen258,-\strip@pt\dimen256)
+%\newdimen\CLinnermargin % 258
+%\newdimen\CLmm % 262
+%\newdimen\CLpagewidth % 260
+%\newdimen\Clowermargin % 264
+%\newdimen\CLvoffset % 256
+\edef\CLinnermargin{\fpeval{\oddsidemargin+1in}}
+\edef\CLmm{\fpeval{1mm}}
+\edef\CLpagewidth{\fpeval{\paperwidth}}
+\edef\CLlowermargin{\fpeval{\paperheight-\topmargin-\headheight-(1in)-\headsep-\textheight}}
+\edef\CLvoffset{\fpeval{\headheight+\topmargin+1in-\paperheight}}
+\edef\CLpageheight{\fpeval{\paperheight}}
+\def\cblayoutdestro{%
+\begin{picture}(0,0)(\CLinnermargin,-\CLvoffset)
\put(0,0){\unitlength=\p@
-\put(0,0){\framebox(\strip@pt\paperwidth,\strip@pt\paperheight){}}
+\put(0,0){\framebox(\CLpagewidth,\CLpageheight){}}
\color{red}
-\put(\strip@pt\dimen258,\strip@pt\dimen264){\makebox(0,0)[bl]{\color{grigio}\rule{\textwidth}{\textheight}}}
- \Line(0,\strip@pt\paperheight)(\strip@pt\paperwidth,0)
- \put(\strip@pt\dimexpr\paperwidth/2\relax,\strip@pt\dimexpr\dimen264+\textheight/2\relax){\circle{\strip@pt\paperwidth}}
+\put(\CLinnermargin,\CLlowermargin){\makebox(0,0)[bl]{\color{grigio}\rule{\textwidth}{\textheight}}}
+ \Line(0,\CLpageheight)(\CLpagewidth,0)
+ \put(\fpeval{\CLpagewidth/2},\fpeval{\CLlowermargin+(\textheight)/2}){\circle{\CLpagewidth}}
}
\end{picture}}
\def\ps@title{\ps@plain
@@ -86,52 +94,73 @@ and the derived files canoniclayout.sty and canoniclayout.pdf.
\allowdisplaybreaks
\begin{document}
\GetFileInfo{canoniclayout.dtx}
-\title{Package \pack{canoniclayout}\thanks{Version number \fileversion; last
- revision \filedate.}}
-\author{Claudio Beccari\thanks{e-mail: \texttt{claudio dot beccari at gmail dot com}}}
+\title{Package \pack{canoniclayout}}
+\author{Claudio Beccari}
+\date{\centering Version number \fileversion; last revision \filedate.\\
+ e-mail: \texttt{claudio dot beccari at gmail dot com}\par}
\maketitle\thispagestyle{title}
\DocInput{canoniclayout.dtx}
\end{document}
%</driver>
% \fi
%
-% \CheckSum{211}
-% \begin{abstract}
-% This package is a small extension that allows to determine the page
-% parameters for a canonical layout where the text block is placed onto the page in such a
-% way as: $(a)$ its diagonal coincides with the page relevant diagonal, and $(b)$ the
-% circle inscribed within the text block is also tangent to the page sides. The text
-% block width to height ratio is kept equal to the page ratio, as well as the inner to
-% outer and the upper to lower margin ratios.
-%
-% The canonical layout determined by this package is laid down on this very page; of
-% course the actual text block fits the text block grid, because this
-% documentation is typeset by means of the \texttt{ltxdoc} document class, that by
-% itself would use other layout parameters, but that is has been arrayed so as to invoke
-% this very package. This allows you to immediately evaluate this traditional layout and
-% see if it fits to your needs.
-% \end{abstract}
+% \CheckSum{128}
+%\begin{abstract}
+%\noindent
+% This package is a small extension that allows to determine the page
+% parameters for a canonical layout where the text block is placed onto
+% the page in such a way as: $(a)$ its diagonal coincides with the page
+% relevant diagonal, and $(b)$ the circle inscribed within the text block
+% is tangent to the page sides. The text block width to height ratio is
+% kept equal to the page ratio, as well as the inner to outer and the
+% upper to lower margin ratios.
+%
+% The canonical layout determined by this package is laid down on this
+% very page; of course the actual text block fits the text block grid,
+% because this documentation is typeset by means of the \texttt{ltxdoc}
+% document class, that by itself would use other layout parameters, but
+% that is has been arranged so as to invoke this very package. This
+% allows you to immediately evaluate this traditional layout and see if
+% it fits your requirements.
+%\end{abstract}
%
% \begin{multicols}{2}
% \tableofcontents
% \end{multicols}
%
% \section{Introduction}
-% As any user of the \class{memoir} class knows well, this class allows to customize the
-% page layout virtually without any limitation; such limitations are connected mainly with
-% the user inconsistent data that miss to specify necessary information or give unnecessary
-% and contrasting information. Also other classes and/or packages allow the customized
-% design of the page layout; some other classes, such as the standard ones, do not have any
-% facility for customizing the page geometry, unless the user invokes suitable packages,
-% such as \pack{geometry} or \pack{tyeparea}, just to male a couple of well known examples.
+% As any user of the \class{memoir} class knows well, this class allows
+% to customise the page layout virtually without any limitation; such
+% limitations are connected mainly with the user inconsistent data that
+% miss to specify necessary information or give unnecessary or conflicting
+% information. Also other classes and/or packages allow the customised
+% design of the page layout; some other classes, such as the standard
+% ones, do not have any facility to customise the page geometry, unless
+% the user invokes suitable packages, such as \pack{geometry} or
+% \pack{tyeparea}, just to male a couple of well known examples.
%
-% Many packages exist in order to specify a named layout; this package \pack{canoniclayout}
-% is another one that computes the page parameters to determine the horizontal and vertical
-% dimensions of the margins and the text block. All other details shall be specified by the
-% user, for example the dimensions of the stock paper, the trimming widths, and therefore
-% the position of the page onto the stock paper, and so on.
-% This package deals only with the trimmed page, not with the page and stock paper
-% relationship.
+% Many packages exist in order to specify a named layout; this package
+% \pack{canoniclayout} is another one that computes the page parameters
+% to determine the horizontal and vertical dimensions of the margins
+% and the text block. All other details shall be specified by the user,
+% for example the dimensions of the stock paper, the trimming widths,
+% and therefore the position of the page onto the stock paper; and so on.
+% This package deals only with the trimmed page, not with the page and
+% stock paper relationship.
+%
+% \paragraph{Warning} This package works well only with a modern
+% installation of the \TeX\ system; in particular it uses the
+% facilities of the \pack{xfp} package, that is an interface between
+% the end user and the lower level language known as \LaTeX\,3 (L3 for
+% short). This implies a \LaTeX kernel implementation dated at least
+% 2029-01-01, and a complete installation of the \TeX\ system. In
+% particular the availability of the \pack{xfp} package is checked,
+% and if the typesetting program cannot fetch it, is issues a message
+% and interrupts loading this package. It is a clear message that your
+% installation is obsolete; you might have your good reasons for not
+% using a modern release of the \TeX\ system, but either you upgrade
+% your installation or you cannot use this package.
+
%
% \begin{figure}
% \makebox[\textwidth]{\makebox[1.1\textwidth][r]{%
@@ -161,130 +190,160 @@ and the derived files canoniclayout.sty and canoniclayout.pdf.
% \unitlength0.001591\textwidth
% \let\ul=\unitlength
% \begin{picture}(220,330)(0,-20)
-% \put(0,0){\framebox(220,280){}}
-% \put(20.742,33.6){\makebox(0,0)[bl]{\color{grigio}\rule{172.86\ul}{220\ul}}}
-% \put(110,-35){\makebox(0,0)[b]{Letter paper canonical layout}}
-% \color{red}
-% \put(110,143.6){\circle{220}}
+% \put(0,0){\framebox(220,280){}}
+% \put(20.742,33.6){\makebox(0,0)[bl]{\color{grigio}\rule{172.86\ul}{220\ul}}}
+% \put(110,-35){\makebox(0,0)[b]{Letter paper canonical layout}}
+% \color{red}
+% \put(110,143.6){\circle{220}}
% \multiput(0,280)(2.37837837838,-3.02702702703){93}{\line(220,-280){1}}
% \end{picture}
% }}%
-% \caption{A right page with the relevant diagonal, the text block and the canonical circle.
-% In this figure the important information is the page proportions, not the scale; matter of
-% fact the letter paper is 17.6 mm shorter than the A4 paper, but the drawings to the same
-% height emphasize the relative proportions of the various page parts.}
+% \caption{A right page with the relevant diagonal, the text block and the
+% canonical circle.
+% In this figure it is important to notice the page proportions, not the
+% scale; matter of fact the letter paper height is 17.6\,mm shorter than
+% the A4 paper, but the drawings to the same height emphasise the relative
+% proportions of the various page parts.}
% \label{fig:canoniclayout}
% \end{figure}
%
-% Figure~\ref{fig:canoniclayout} depicts the situation described above; the gray rectangle
-% represents the type block; the dotted page diagonal, as it can be seen, passes through
-% the diagonal vertices of the type block; at the same time the circle is tangent to both
-% the type block and the page contour.
-%
-% It must also be noticed, in the sketch on the left, that the page rectangle is a golden
-% one; therefore also the type block is a golden rectangle; the inner to the outer margin
-% ratio is the golden section value so as this same ratio exists between the upper and the
-% lower margin. This canonical layout implies that the type block height is equal to the
-% page width.
-%
-% Therefore this canonical layout is not suited when the page width is too small compared
-% to the page height: with the golden section\footnote{Here we denote $\phi=1,618\dots$
-% with the name of \emph{golden number}, and its reciprocal $\varphi=0,618\dots$ with the
-% name of \emph{golden section}.} this ratio is 0.618, with the ISO paper shape, in the
-% sketch on the center, this ratio is 0,707, and so on.
-%
-% But it is equally unsuitable with squarish pages, such as the sketch on the right where
-% the page proportions conform with the USA letter paper size: the type block leaves little
-% space for the margins, as it is evident from the properties of the canonical circle, which
-% is tangent to the page lateral sides and to the type block horizontal sides; to the limit
-% in a square page the type block is so large that there is no room for the margins.
+% Figure~\ref{fig:canoniclayout} depicts the situation described above;
+% the grey rectangle represents the type block; the dotted page diagonal,
+% as it can be seen, passes through the diagonal vertices of the type
+% block; at the same time the circle is tangent to both the type block
+% and the page contour.
+%
+% It must also be noticed, in the sketch on the left, that the page
+% rectangle is a golden one; therefore also the type block is a golden
+% rectangle; the inner to the outer margin ratio is the golden section
+% value so as this same ratio exists between the upper and the lower
+% margin. This canonical layout implies that the type block height is
+% equal to the page width.
+%
+% Therefore this canonical layout is not suited when the page width
+% is too small compared to the page height: with the golden
+% section\footnote{Here we denote $\phi=1,618\dots$
+% with the name of \emph{golden number}, and its reciprocal
+% $\varphi=0,618\dots$ with the name of \emph{golden section}.} this
+% ratio is 0.618, with the ISO paper shape, in the sketch on the center,
+% this ratio is 0,707, and so on.
+%
+% But it is equally unsuitable with squarish pages, such as the sketch
+% on the right where the page proportions conform with the USA letter
+% paper size: the type block leaves little space for the margins, as
+% it is evident from the properties of the canonical circle, which
+% is tangent to the page lateral sides and to the type block horizontal
+% sides; to the limit in a square page the type block is so large that
+% there is no room for the margins.
%
% \section{The mathematics of the canonical layout}
-% If one plays a little with the drawing of figure~\ref{fig:canoniclayout} and applies what
-% has been described in the Introduction, may easily derive the following formulas:
+% If one plays a little with the drawing of figure~\ref{fig:canoniclayout}
+% and applies what has been described in the Introduction, may easily
+% derive the following formulas:
%\begin{align}
-%&\text{Page shape ratio:}& x&=b/h \label{equ:1} \\
-%&\text{Inner margin:}& I&=bx(1-x)/(1+x) \\
-%&\text{External margin:}& E&=b(1-x)/(1+x) \\
-%&\text{Top margin:}& T&=hx(1-x)/(1+x) \\
-%&\text{Bottom margin:}& B&=h(1-x)/(1+x) \\
-%&\text{Text width:}& W&=xb \\
-%&\text{Text height:}& H&=b \\
-%&\text{Circle center abscissa:}&C_x&=0.5b \\
-%&\text{Circle center ordinate:}&C_y&=h(1-x)/(1+x)+b/2 \\
-%&\text{Circle radius:}& R&=0.5b \label{equ:10}
+%&\text{Page shape ratio:} & x&=b/h \label{equ:1} \\
+%&\text{Inner margin:} & I&=bx(1-x)/(1+x) \\
+%&\text{External margin:} & E&=b(1-x)/(1+x) \\
+%&\text{Top margin:} & T&=hx(1-x)/(1+x) \\
+%&\text{Bottom margin:} & B&=h(1-x)/(1+x) \\
+%&\text{Text width:} & W&=xb \\
+%&\text{Text height:} & H&=b \\
+%&\text{Circle center abscissa:} & C_x&=0.5b \\
+%&\text{Circle center ordinate:} & C_y&=h(1-x)/(1+x)+b/2 \\
+%&\text{Circle radius:} & R&=0.5b \label{equ:10}
%\end{align}
-% whose results are summarized in table~\ref{tab:canoniclayout} for three common values of
-% the shape factor and for the letter paper shape ratio.
-%
-%\begin{table}[!b]\centering\let~\enspace
-%\hrule
-%\caption{Canonical layout ratios referred to the the base (or width, $b$) of the trimmed
-% page and its height ($h$).}\label{tab:canoniclayout}
+% whose results are summarised in table~\ref{tab:canoniclayout} for
+% three common values of the shape factor and for the letter paper
+% shape ratio.
+%
+%\begin{table}[!b]\centering^^A\let~\enspace
+%^^A\hrule
+%\caption{Canonical layout ratios referred to the base
+% (or width, $b$) and the height ($h$) of the trimmed page.}
+%\label{tab:canoniclayout}
%\bigskip
%\begin{tabular}{l@{\qquad}*4{>{$}c<{$}}}
%\toprule
-% &\multicolumn4c{Canon} \\
-%\multicolumn1c{Quantity} & \phi:1 & 3:2 & \sqrt2:1 & 11:8.5\\
+% &\multicolumn4c{Canon} \\
+%\multicolumn1c{Shape ratio} & \phi:1 & 3:2 & \sqrt2:1 & 11:8.5\\
%\midrule
-% Page shape ratio &0,618~ &0,666~ &0,707~ &0,773~ \\
-% Inner margin &0,146b &0,133b &0,121b &0,099b \\
-% External margin &0,236b &0,200b &0,172b &0,128b \\
-% Upper margin &0,146h &0,133h &0,121h &0,099h \\
-% Lower margin &0,236h &0,200h &0,172h &0,128h \\
-% Text width & 0,618b &0,666b &0,707b &0,773b \\
-% Text height & b & b & b &b \\
-% Circle center abscissa & b/2 & b/2 & b/2 &b/2 \\
-% Circle center ordinate & 0,545h &0,533h &0,526h &0,515h \\
-% Circle radius & b/2 & b/2 & b/2 &b/2 \\
+% Page shape ratio &0,618~ &0,666~ &0,707~ &0,773~ \\
+% Inner margin &0,146b &0,133b &0,121b &0,099b \\
+% External margin &0,236b &0,200b &0,172b &0,128b \\
+% Upper margin &0,146h &0,133h &0,121h &0,099h \\
+% Lower margin &0,236h &0,200h &0,172h &0,128h \\
+% Text block width & 0,618b &0,666b &0,707b &0,773b \\
+% Text block height & b & b & b &b \\
+% Circle center abscissa & b/2 & b/2 & b/2 &b/2 \\
+% Circle center ordinate & 0,545h &0,533h &0,526h &0,515h \\
+% Circle radius & b/2 & b/2 & b/2 &b/2 \\
%\bottomrule
%\end{tabular}
%\end{table}
%
-% Actually the formulas~\ref{equ:1}--\ref{equ:10}, and their numerical evaluations reported
-% in table~\ref{tab:canoniclayout}, are just for general information. The actual
-% computations are performed by this package, either by means of the \class{memoir} built-in
-% facilities or by explicit computations that exploit the $\varepsilon$-\TeX\ extensions.
-% But it can be easily seen that as the trimmed page becomes more squarish, the
-% page size ratio tends to one, ad the margins become smaller and smaller. Therefore it
-% seems that this layout is most suited for intermediate page ratios, such as the ISO one
-% or the common European book size of 170\,mm $\times$ 240\,mm with a ratio of 0,708.
+% Actually the formulas~\ref{equ:1}–\ref{equ:10}, and their numerical
+% evaluations reported in table~\ref{tab:canoniclayout}, are just for
+% general information. The actual computations are performed by this
+% package, either by means of the \class{memoir} built-in facilities
+% or by explicit computations that exploit the \pack{xfp} functions.
+% But it can be easily seen that as the trimmed page becomes more
+% squarish, the page size ratio tends to one, ad the margins become
+% smaller and smaller. Therefore it seems that this layout is better
+% suited for intermediate page ratios, such as the ISO one or the
+% common European book size of 170\,mm $\times$ 240\,mm with a ratio
+% of 0,708.
%
% \section{Usage}
% This package is invoked as usual with:
%\begin{verbatim}
% \usepackahe{canoniclayout}
%\end{verbatim}
-% No options are necessary; but it is necessary to invoke the package only after the page
-% dimensions are known, be they specified by an option passed to the class, such as, for
-% example, \texttt{a4paper}, or by means of a \texttt{page}$size$ specification, for example
+% No options are necessary; but it is necessary to invoke the package
+% only after the actual page dimensions are known, be they specified
+% by an option passed to the class, such as, for example, \texttt{a4paper},
+% or by means of a \texttt{page}\meta{size} specification, for example
% \texttt{pagebv} for calling the ISO B5 size.
%
-% At any convenient moment after calling this package, the trimming margins with respect to
-% the stock paper may be computed and the layout rechecked and fixed for consistency.
+% At any convenient moment after calling this package, the trimming
+% margins with respect to the stock paper may be computed and the
+% layout rechecked and fixed for consistency.
%
% \section{Font normal size}
-% At the same time if this page layout is chosen, the font normal size should be selected on
-% the actual text block width; it is possible that the golden ratio type block, on a golden
-% rectangle paper obtained by trimming an ISO A4 stock paper, might be suitable with a 10pt
-% normal font size (exactly 66 characters per line with 10pt Latin Modern fonts), while a
-% full ISO A4 paper yields a type block that might be more suited for a 12pt normal font
-% size (86 characters with 10pt Latin Modern fonts). The computations might be left to the
-% \class{memoir} class commands, but it's better the user is aware of this particular point.
-% For his/her sake this package provides the command |\currentfontletters| (to be used
-% only after |\begin{document}|, because specific font packages might be loaded after the
-% page layout has been computed; in any case the command is ``text producing'', therefore
-% it can't be used while in the preamble!) that types out a sentence such as ``The number
-% of characters in one text line with the current font is $nn$'', where the $nn$ is the
-% actual number printed out. If such number is much larger than the ideal Bringhurst range
-% of $66\pm5$, it's wiser to chose a larger normal font size.
-% In any case the alternative command |\charactersperpage| types out the same information,
-% the number of lines and the estimated number of characters per page. These commands are
-% supposed to be useful while setting up the complete preliminary parameters for the page
+% At the same time if this page layout is chosen, the font normal size
+% should be selected on the actual text block width; it is possible
+% that the golden ratio type block, on a golden rectangle paper obtained
+% by trimming an ISO A4 stock paper, might be suitable with a 10\,pt
+% normal font size (exactly 66 characters per line with 10pt Latin
+% Modern fonts), while a full ISO A4 paper yields a type block that
+% might be more suited for a 12pt normal font size (86 characters with
+% 10pt Latin Modern fonts is too much). The computations might be left
+% to the \class{memoir} class commands, but it's better the user
+% is aware of this particular point.
+% For his/her sake this package provides the command |\currentfontletters|
+% (to be used only after |\begin{document}|, because specific font
+% packages might be loaded after the page layout has been computed; in
+% any case the command is “text producing”, therefore it can't be used
+% while in the preamble!) that types out a sentence such as “The number
+% of characters in one text line with the current font is $nn$”, where
+% the $nn$ is the actual number printed out. If such number is much
+% larger than the ideal Bringhurst range of $66\pm6$, it's wiser to
+% chose a larger normal font size.
+% In any case the alternative command |\charactersperpage| types out
+% the same information, the number of lines and the estimated number
+% of characters per page. These commands are supposed to be useful
+% while setting up the complete preliminary parameters for the page
% layout.
%
-% Just to have a comparison, table~\ref{tab:sizes} displays the number of characters in one
-% line of text for several fonts and for page sizes A4, A5, and B5.
+% Just to have a comparison, table~\ref{tab:sizes} displays the number
+% of characters in one text line for several fonts and for page sizes
+% A4, A5, and B5. As you see, although that Bringhurst range comes form
+% socio-psychological studies and therefore has a large standard deviation,
+% It appears that for the larger papers only those fonts with wider
+% lowercase letters are suitable for this canonical layout; with smaller
+% paper sizes, quite understandably, more font collections are suited.
+% This very document, typeset with this canonical layout on A4 paper
+% with a Latin Modern 10\,pt font size, has long text lines that stress
+% the readers eyes.
%
%\begin{table}
%\caption{Text line lengths measured in average number
@@ -295,120 +354,119 @@ and the derived files canoniclayout.sty and canoniclayout.pdf.
% \let\b\bfseries \let\i\itshape\tabcolsep=5pt
% \makebox[\textwidth]{\small\begin{tabular}{l*9c}
% \toprule
-% Font collection & \multicolumn3c{A4 paper size}
-% & \multicolumn3c{A5 paper size}
-% &\multicolumn3c{B5 paper size}\\
-% & 10\,pt & 11\,pt & 12\,pt & 10\,pt & 11\,pt & 12\,pt & 10\,pt & 11\,pt & 12\,pt \\
+% Font collection & \multicolumn3c{A4 paper size}
+% & \multicolumn3c{A5 paper size}
+% &\multicolumn3c{B5 paper size}\\
+% &10\,pt &11\,pt &12\,pt &10\,pt &11\,pt &12\,pt &10\,pt &11\,pt &12\,pt\\
% \midrule
-% Times eXtended & \i92 & \i84 & \i77 & \b64 & 59 & \i54 & \i77 & \b70 & \b64 \\
-% Latin Modern & \i86 & \i79 & 73 & 60 & \i55 & \i51 & 72 & \b66 & \b61 \\
-% Kepler Project & \i83 & 76 & \b69 & 58 & \i53 & \i48 & \b69 & \b63 & 58 \\
-% Palatino eXtended& \i82 & 75 & \b69 & 58 & \i53 & \i48 & \b69 & \b63 & 57 \\
+% Times eXtended
+% & \i92 & \i84 & \i77 & \b64 & 59 & \i54 & \i77 & \b70 & \b64\\
+% Latin Modern
+% & \i86 & \i79 & 73 & \b60 & \i55 & \i51 & \b72 & \b66 & \b61\\
+% Kepler Project
+% & \i83 & 76 & \b69 & 58 & \i53 & \i48 & \b69 & \b63 & 58\\
+% Palatino eXtended
+% & \i82 & 75 & \b69 & 58 & \i53 & \i48 & \b69 & \b63 & 57\\
% \bottomrule
% \end{tabular}}
%\end{table}
%
-% It can be seen that the bold measures satisfy the Bringhurst rule with a number of
-% characters in the range $66\pm5$; the measures typeset in medium series type are out of
-% the optimal Bringhurst range, but may be considered acceptable; the measures typeset in
-% italics are completely out of the interval $66\pm10$ and should not be considered
-% acceptable. This means that the large A4 paper size may be best used with intrinsically
-% large fonts such as the Palatino eXtended (package \pack{pxfonts}) and the Kepler Project
-% (package \pack{kpfonts}). With the smaller A5 paper size with 10\,pt size fonts the best
-% ones are the Times eXtended (package \pack{txfonts}), but substantially all the examined
-% fonts are acceptable, while with 12\,pt fonts none are acceptable.
-%
-% With an intermediate sized paper, such as a B5 ISO size, all the considered fonts are
-% acceptable inside or just outside the optimal Bringhurst interval.
-%
-% Many books are trimmed to a size close the B5 paper size, therefore the page layout
-% produced with this package is most useful with medium and smaller sizes (at least with
-% ISO sizes).
+% It can be seen that the bold measures satisfy the Bringhurst rule
+% with a number of characters in the range $66\pm6$; the measures
+% typeset in medium series type are out of the optimal Bringhurst
+% range, but may be considered acceptable; the measures typeset in
+% italics are completely out of the interval $66\pm10$ and should
+% not be considered acceptable. This means that the large A4 paper
+% size may be best used with intrinsically large fonts such as the
+% Palatino eXtended (package \pack{newpxtext}) and the Kepler Project
+% (package \pack{kpfonts}). With the smaller A5 paper size with 10\,pt
+% size fonts the best ones are the Times eXtended (package
+% \pack{newtxtext}), and the Latin Modern ones (package \pack{lmodern})
+% but substantially all the examined fonts are acceptable, while with
+% 12\,pt fonts none are acceptable.
+%
+% With an intermediate sized paper, such as a B5 ISO size, all the
+% considered fonts are acceptable inside or just outside the optimal Bringhurst interval.
+%
+% Many books are trimmed to a size close the B5 paper size, therefore
+% the page layout produced with this package is most useful with medium
+% and smaller sizes (at least with ISO sizes).
% \section{Conclusion}
-% I don't think this package should set also the header and footer distances, for example,
-% or should set any specification for the page ``decorations'', such as underlined headers,
-% or overlined footers, or the size, font family, series and shape of the header and footer
-% contents. These specifications are of course important, but have nothing to do with the
-% relationship between the paper size, the page size and the type block size.
-%
-% As a final remark it's worth noting that a single pass of \prog{pdflatex} on this
-% \file{canoniclayout.dtx} file produces at the same time both the \file{canoniclayout.sty}
-% package file and the documentation \file{canoniclayout.pdf} file. After running
-% \prog{pdflatex} move \file{canoniclayout.sty} to a \file{tex/latex/canoniclayout/} folder
-% and \file{canoniclayout.pdf} to a \file{doc/latex\discretionary{}{/}{/}canoniclayout/} one;
-% if such folders don't exist, create them on your personal \TeX\ tree. After moving these
-% files remember to refresh the file name data base.
+% I don't think this package should set also the header and footer
+% distances, for example, or should set any specification for the page
+% “decorations”, such as underlined headers, or over lined footers,
+% or the size, font family, series and shape of the header and footer
+% contents. These specifications are of course important, but have
+% nothing to do with the relationship between the paper size, the
+% page size and the type block size.
+%
+% As a final remark it's worth noting that a single pass of
+% \prog{pdflatex} on this \file{canoniclayout.dtx} file produces at the
+% same time both the \file{canoniclayout.sty} package file and the
+% documentation \file{canoniclayout.pdf} file, besides a \file{README.txt}
+% required for uploading to the \textsc{ctan} archives. After running
+% \prog{pdflatex} move \file{canoniclayout.sty} to a
+% \file{tex/latex/canoniclayout/} folder and \file{canoniclayout.pdf}
+% to a \file{doc/latex\discretionary{}{/}{/}canoniclayout/} one;
+% if such folders don't exist, create them on your personal \TeX\
+% tree. After moving these files and if you have a Mik\TeX\ installation,
+% remember to refresh the file name data base.
%
%
% \StopEventually{}
%
% \section{Documented code}
-% The package preliminaries are already in place. We are going to make some computations in
-% order to determine the page shape factor $x$; to this end we exploit the dimensional
-% computing capabilities of $\varepsilon$-\TeX, that are already embedded in the most recent
-% implementations of the program \prog{pdftex}; in fact it must be remarked that these
-% facilities are being embedded into the \prog{pdftex} typesetting engine since the \TeX~Live
-% distribution of the year 2005. If these facilities are not available, either
-% because the \TeX\ distribution is a little too old, or because the real \prog{tex}
-% typesetting engine, not \prog{pdftex}, is being used, then, this entire package contents is
-% skipped and nothing is done, except issuing a suitable warning.
-% \begin{macrocode}
+% The package preliminaries are already in place. We are going to make
+% some computations in order to determine the page shape factor $x$;
+% to this end we exploit the dimensional computing capabilities package
+% \pack{xft}, that are already available in the most recent \LaTeX\
+% kernel files; in facts, the \LaTeX\,3 (L3) language computing
+% facilities have been available for several years, but the simple
+% and efficient user interface package \pack{xfp} has been available
+% since the 2018 autumn. If these facilities are not available, either
+% because the \TeX\ distribution is a little too old, or because the
+% real \prog{tex} typesetting engine, not \prog{pdftex}, is being used,
+% then, this entire package contents is skipped and nothing is done,
+% except issuing a suitable warning.
+%\iffalse
%<*package>
-\expandafter\ifx\csname eTeXversion\endcsname\relax
- \PackageWarning{canoniclayout}{%
- The typesetting engine is not suited\Messagebreak
- for working in extended mode.\Messagebreak}
- This package is being skipped}
- \expandafter\endinput
-\fi
-\ifnum\eTeXversion>\z@\else
- \PackageWarning{canoniclayout}{%
- The typesetting engine is not working in extended mode.\MessageBreak
- This package is being skipped}
- \expandaftter\endinput
-\fi
+%\fi
+% \begin{macrocode}
+\IfFileExists{xfp.sty}{\RequirePackage{xfp}}{%
+ \PackageError{canoniclayout}{\MessageBreak%
+ The xfp package is not available\MessageBreak
+ and this package cannot work without\MessageBreak}{
+ Reading of this package is skipped\MessageBreak
+ Expect a different layout form the canonical one\Messagebreak
+ Update your TeX system installation!\expandafter\endinput}}
% \end{macrocode}
%
-% In order to have this layout work with the \class{memoir} class or with any other
-% class we have to test the fact they they package has been loaded within the preamble
-% of a \class{memoir} styled document; according to the result of this test we can exploit
-% the \class{memoir} facilities for determining the page geometry, or we have to carry out
-% the complete computations ourselves.
+% In order to have this layout work with the \class{memoir} class or
+% with any other class we have to test the fact that this package
+% has been loaded within the preamble of a \class{memoir} styled document;
+% according to the result of this test we can exploit
+% the \class{memoir} facilities for determining the page geometry,
+% or we have to carry out the complete computations ourselves.
% \begin{macrocode}
-\@ifclassloaded{memoir}{% }% balancing brace
+\@ifclassloaded{memoir}{%
% \end{macrocode}
-% Working with the \class{memoir} facilities, we can determine the page shape factor
-% and we save it into the control sequence |\CLshape|. The trick of multiplying by |p@|,
-% a length of 1\,pt, is a simple trick for reducing the shape ratio to a length whose
-% numerical value is exactly the ratio we are interested in. By stripping the `pt' part
-% from this dimension value we remain with the real number we want to keep in memory.
-% Of course we need also the reciprocal value, therefore we have to perform this
-% calculation a second time with different factors.
-% This ``strange'' way of computing real ratios derives from the ability of the
-% $\varepsilon$-\TeX\ engine to scale lengths with a higher computational precision than
-% ``normal'' \TeX\ can do with the standard dimension and integer operations. In facts
-% all the computational operations are performed in the CPU registers and the intermediate
-% first result of the multiplication is kept into a double length register, so that no bits
-% are rounded or truncated; the division operation is performed with a double length
-% numerator and a single length denominator, so that, again, almost no information is lost
-% at the inevitable end of the division algorithm with a non vanishing remainder.
+% Working with the \class{memoir} facilities, we can determine the page
+% shape factor and we save it into the control sequence |\CLshape|.
% \begin{macrocode}
-\dimen@=\dimexpr \p@ * \paperwidth / \paperheight\relax
-\edef\CLshape{\strip@pt\dimen@}
-\dimen@=\dimexpr \p@ * \p@ / \dimen@\relax
-\edef\CLinvshape{\strip@pt\dimen@}
+\edef\CLshape{\fpeval{\paperwidth / \paperheight}}
+\edef\CLinvshape{\fpeval{1/\CLshape}}
% \end{macrocode}
-% We then assign the text height, thanks to the fact that the canonical layout has the
-% block height just as long as the page width, due to the circle property mentioned in the
-% Introduction; in any case the formulas~\ref{equ:1}--\ref{equ:10} and
-% table~\ref{tab:canoniclayout} confirm this property for any shape.
+% We then assign the text height, thanks to the fact that the canonical
+% layout has the block height just as long as the page width, due to the
+% circle property mentioned in the Introduction; in any case the
+% formulas~\ref{equ:1}--\ref{equ:10} and table~\ref{tab:canoniclayout} confirm this property for any shape.
% \begin{macrocode}
\textheight=\paperwidth
% \end{macrocode}
%
-% This done, we can use the internal \class{memoir} commands to determine the other layout
-% dimensions.
+% This done, we can use the internal \class{memoir} commands to determine
+% the other layout dimensions.
% \begin{macrocode}
\settypeblocksize{\textheight}{*}{\CLshape}
\setlrmargins{*}{*}{\CLinvshape}
@@ -417,129 +475,157 @@ and the derived files canoniclayout.sty and canoniclayout.pdf.
% \end{macrocode}
%
-% We now use the |\checkandfixthelayout| so that it adjusts the type block dimensions
-% to an integer number of lines in the normal font and eventually prints the page
-% parameters to the% \file{.log} file.
+% We now use the |\checkandfixthelayout| so that it adjusts the type
+% block dimensions to an integer number of lines in the normal font and
+% eventually prints the page parameters to the \file{.log} file.
% \begin{macrocode}
\checkandfixthelayout
% \end{macrocode}
%
-% At this point we are finished with the computations if the \class{memoir} class is the active one, nut we need to perform the complete calculations in case we are not working with the \class{memoir} class.
+% At this point we are finished with the computations if the
+% \class{memoir} class is the active one, but we need to perform
+% the complete calculations in case we are not working with the
+% \class{memoir} class.
% \begin{macrocode}
}{%
% \end{macrocode}
-% We start by defining the lengths registers that hold the real inner, outer and upper
-% margins, without the one inch shift and without taking into consideration the headings
-% and their spacings, that must be specified before calling this package.
+% We start by defining the lengths registers that hold the real inner,
+% outer and upper margins, without the one inch shift and without taking
+% into consideration the headings and their spacings, that must be
+% specified before calling this package.
% \begin{macrocode}
\newlength\innermargin
\newlength\outermargin
\newlength\uppermargin
% \end{macrocode}
-% Then we define scratch length registers in order to maintain intermediate values.
+% Then we use some macros where to store some constant values;
+% we compute them using the rimmed page width and height;
% \begin{macrocode}
-\dimendef\CLpageratio=1256% x=b/h
-\dimendef\CLsmallratio=1258% z=x*y
-\dimendef\CLlargeratio=1260% y=(1-x)/(1+x)
-% \end{macrocode}
-% Now we determine the actual values based on the page width and height; we work on dimensions, and we extract the decimal fractional value by stripping off the `pt' part of their measure; we keep the decimal fractionl values into service macros:
-% \begin{macrocode}
-\CLpageratio=\dimexpr \p@*\paperwidth/\paperheight\relax % x
-\CLlargeratio=\dimexpr \p@*(\p@-\CLpageratio)/(\p@+\CLpageratio)\relax % y
-\CLsmallratio=\dimexpr \CLpageratio*\CLlargeratio/\p@\relax % z
-%
-\edef\CL@pageratio{\strip@pt\CLpageratio}
-\edef\CL@smallratio{\strip@pt\CLsmallratio}
-\edef\CL@largeratio{\strip@pt\CLlargeratio}
+\edef\CLpageratio{\fpeval{\paperwidth/\paperheight}} % x
+\edef\CLlargeratio{\fpeval{(1-\CLpageratio)/(1+\CLpageratio)}} % y
+\edef\CLsmallratio{\fpeval{\CLpageratio*\CLlargeratio}} % z
% \end{macrocode}
% We compute the type block dimensions:
% \begin{macrocode}
-\textheight\paperwidth% altezza griglia
-\textwidth=\CL@pageratio\textheight
+\textheight\paperwidth
+\textwidth=\CLpageratio\textheight
% \end{macrocode}
% We then compute the real margins between the page sides and the type block:
% \begin{macrocode}
-\innermargin=\CL@smallratio\paperwidth
-\outermargin=\CL@largeratio\paperwidth
-\uppermargin=\CL@smallratio\paperheight
+\innermargin=\CLsmallratio\paperwidth
+\outermargin=\CLlargeratio\paperwidth
+\uppermargin=\CLsmallratio\paperheight
% \end{macrocode}
-% But the typesetting engine does not use the net margins, due to the historical
-% one inch shift of the original \TeX\ implementation and, for the upper margin,
-% due to the fact that by default this layout implies the headings and the footers
-% outside the type block. Since we have the real outer margin dimension, we compute
+% But the typesetting engine does not use the net margins, due to the
+% historical one inch shift of the original \TeX\ implementation and,
+% for the upper margin, due to the fact that by default this layout
+% implies the headings and the footers outside the type block. Since
+% we have the real outer margin dimension, we compute
% the actual default marginal note measure:
% \begin{macrocode}
-\marginparwidth=\dimexpr0.8\outermargin-\marginparsep\relax
-\evensidemargin=\dimexpr\outermargin -1in\relax
-\oddsidemargin=\dimexpr\innermargin-1in\relax
-\topmargin=\dimexpr\uppermargin-1in-\headheight-\headsep\relax
+\marginparwidth=\fpeval{0.8\outermargin-\marginparsep}pt
+\evensidemargin=\fpeval{\outermargin -(1in)}pt
+\oddsidemargin=\fpeval{\innermargin-(1in)}pt
+\topmargin=\fpeval{\uppermargin-(1in)-\headheight-\headsep}pt
% \end{macrocode}
-% When using different classes from the \class{memoir} one, we adjust the type block
-% dimensions so that the type block contains an integer number of lines; we use the
-% normal size |\baslineskip| value and compute the number of lines contained in the
-% initial type block minus the first line stander height equal to |\topskip|; notice
-% that the integer value expression computed for counter 256 is a rounded value, not
-% a truncated value, therefore the actual type block height might get enlarged or
-% reduced a very little bit that will not be noticed with naked eye when one examines
-% a typeset page; eventually we recompute the |\textheight| taking into account the
-% height of the first line.
+% When using different classes from the \class{memoir} one, we adjust
+% the type block dimensions so that the type block contains an integer
+% number of lines; we use the normal size |\baselineskip| value and
+% compute the number of lines contained in the initial type block minus
+% the first line standard height equal to |\topskip|; notice that the
+% integer value expression is a rounded value,
+% not a truncated one, therefore the actual type block height might get
+% enlarged or reduced by a very little bit that will not be noticed with
+% naked eye when one examines a typeset page; eventually we recompute the
+% |\textheight| taking into account the height of the first line.
% \begin{macrocode}
-\normalfont
-\count256=\numexpr(\textheight-\topskip)/\baselineskip\relax
-\textheight=\count256\baselineskip\relax
-\textheight=\dimexpr\textheight+\topskip\relax
+\normalfont\textheight=%
+\fpeval{round((\textheight - \topskip)/\baselineskip, 0) * \baselineskip + \topskip}pt%
\normalbaselineskip\baselineskip
% \end{macrocode}
-% and we eventually close the second action depending on the use of the \class{memoir}
-% class:
+% and we eventually close the second action depending on the use of the
+% \class{memoir} class:
% \begin{macrocode}
-}
+}% end of test on the class being used
% \end{macrocode}
%
-% Just for testing the number of characters in a line, the following macros are provided.
-% A couple of scratch dimension registers will be used |dimen@| and |\abcwidth|; |\abcwidth|
-% will hold the current lowercase alphabet length, and |\dimen@| will hold several values
-% in succession. The scratch counter |\count254| will receive the final result to be
-% printed out. $\varepsilon$-\TeX\ arithmetics will be used throughout.
-%
-% Another service macro for the user's sake is |\charactersperpage|; this macro
-% typesets the average number of characters per line, the numbers of lines per
-% page, and eventually their product, a good estimate of the number of characters
-% per page.
-%
-% Many text editors have facilities for counting a ``compuscript'' number o words
-% and characters; with this further information the user may easily estimate the
-% number of pages of his/her document; of course s/he must allow a certain allowance
-% for the front and back matter pages, so that s/he can evaluate the total amount
-% of signatures of the whole typeset document; of course, by typesetting it with
-% \prog{(pdf)latex} s/he knows exactly the number of pages of the final document, but the
-% typographer wants to know a good estimate before the source \TeX\ files are finished.
+% Just for testing the number of characters in a line, the following
+% macros are provided. A couple of variables will be used |\CLaux|
+% and |\CLabcwidth|; |\CLabcwidth| will hold the current lowercase
+% alphabet length, while |\CLaux| will hold several values in succession.
+% The scratch variable |\CLcharcount| will receive the final result to be
+% printed out.
+%
+% Another service macro for the user's sake is |\charactersperpage|; this
+% macro typesets the average number of characters per line, the numbers of
+% lines per page, and eventually their product, a good estimate of the
+% number of characters per page.
+%
+% Many text editors have facilities for counting a “compuscript”
+% number of words and characters; with this further information the
+% user may easily estimate the number of pages of his/her document;
+% of course s/he must allow a certain allowance for the front and back
+% matter pages, so that s/he can evaluate the total amount of signatures
+% of the whole typeset document; of course, by typesetting it with
+% \prog{(pdf)latex} s/he knows exactly the number of pages of the final
+% document, but the typography shop generally wants to know a good
+% estimate before the source \TeX\ files are finished.
% \begin{macrocode}
\newlength\abc@width
+\settowidth\abc@width{abcdefghijklmnopqrstuvwxyz}%
+\edef\CLcharcount{\fpeval{round(\textwidth * 26 / \abc@width,0)}}
\newcommand*\currentfontletters{%
-\settowidth\abc@width{abcdefghijklmnopqrstuvwxyz}\dimen0=26\p@
-\dimen0=\dimexpr \textwidth * \dimen0 / \abc@width \relax
-\count254=\numexpr \dimen0 / \p@ \relax
\par The number of characters in one text line with the current font is
- \the\count254.\par}
-
+ \CLcharcount.\par}
+%
\newcommand*\charactersperpage{%
-\settowidth\abc@width{abcdefghijklmnopqrstuvwxyz}\dimen0=26\p@
-\dimen0=\dimexpr \textwidth * \dimen0 / \abc@width \relax
-\count254=\numexpr \dimen0 / \p@ \relax
-\count252=\numexpr \textheight / \baselineskip \relax
-\count250=\numexpr \count252 * \count254\relax
+\edef\CLlinesperpage{\fpeval{round(\textheight / \baselineskip,0)}}
+\edef\CLcharsperpage{%
+ \fpeval{\CLcharcount * \CLlinesperpage}}
\begin{quote} The average number of characters in one text line
- with the current font is \the\count254;
- this text block contains \the\count252\ lines;
+ with the current font is \CLcharcount;
+ this text block contains \CLlinesperpage\ lines;
a rough estimate of the number of characters per page is
- \the\count250.\par
+ \CLcharsperpage.\par
This information may be useful to evaluate the total number
of pages in a document.
\end{quote}}
+% \end{macrocode}
+% Using these macros, we can type out the information relative to this
+% specific documentation.
+% \charactersperpage
+%\iffalse
%</package>
+%<*txt>
+%\fi
+%
+% \begin{macrocode}
+Canoniclayout is a small extension package that allows to design
+a canonic layout based on the great circle inscribed within the
+page and tangent to the horizontal sides of the type block rectangle.
+The margins reflect the trimmed page shape ratio, therefore the
+type block principal diagonal coincides with the corresponding
+page diagonal; this layout is especially good for ISO page shapes
+but it can be used with many other traditional book page shapes.
+
+This new version is completely new, in the sense that its code
+calculations are performed by means of the 2018 xfp package
+facilities. For this reason it cannot be used with any TeX
+distribution preceding the year 2018 and updated by the end of
+that year; should this happen this very package aborts its own
+input while advising the user by means of an Error Message.
+
+This work is released under the Latex Project Public Licence
+v.1.3c. The LPPL is distributed with any TeX system distribution
+and can be found also in any CTAN archive.
+
+Claudio Beccari 2020
+claudio dot beccari at gmail dot com
% \end{macrocode}
+%\iffalse
+%</txt>
+%\fi
% \Finale
% \endinput
%
diff --git a/macros/latex/contrib/canoniclayout/canoniclayout.pdf b/macros/latex/contrib/canoniclayout/canoniclayout.pdf
index 7b3e05f320..ddbe09af08 100644
--- a/macros/latex/contrib/canoniclayout/canoniclayout.pdf
+++ b/macros/latex/contrib/canoniclayout/canoniclayout.pdf
Binary files differ
diff --git a/macros/latex/contrib/canoniclayout/canoniclayout.sty b/macros/latex/contrib/canoniclayout/canoniclayout.sty
deleted file mode 100644
index 915dc3b0d5..0000000000
--- a/macros/latex/contrib/canoniclayout/canoniclayout.sty
+++ /dev/null
@@ -1,108 +0,0 @@
-%%
-%% This is file `canoniclayout.sty',
-%% generated with the docstrip utility.
-%%
-%% The original source files were:
-%%
-%% canoniclayout.dtx (with options: `package')
-%% ______________________________________________________
-%% The canoniclayout package for LaTeX
-%% Copyright (C) 2010-2011 Claudio Beccari
-%% All rights reserved
-%%
-%% License information appended
-%%
-\NeedsTeXFormat{LaTeX2e}[2009/01/01]
-\ProvidesPackage{canoniclayout}%
- [2011/11/05 v.0.3 Canonic layout circumscribed to a circle]
-
-\expandafter\ifx\csname eTeXversion\endcsname\relax
-\PackageWarning{canoniclayout}{%
-The typesetting engine is not suited\Messagebreak
-for working in extended mode.\Messagebreak}
-This package is being skipped}
-\expandafter\endinput
-\fi
-\ifnum\eTeXversion>\z@\else
-\PackageWarning{canoniclayout}{%
-The typesetting engine is not working in extended mode.\MessageBreak
-This package is being skipped}
-\expandaftter\endinput
-\fi
-\@ifclassloaded{memoir}{% }% balancing brace
-\dimen@=\dimexpr \p@ * \paperwidth / \paperheight\relax
-\edef\CLshape{\strip@pt\dimen@}
-\dimen@=\dimexpr \p@ * \p@ / \dimen@\relax
-\edef\CLinvshape{\strip@pt\dimen@}
-\textheight=\paperwidth
-\settypeblocksize{\textheight}{*}{\CLshape}
-\setlrmargins{*}{*}{\CLinvshape}
-\setulmargins{*}{*}{\CLinvshape}
-\setmarginnotes{7pt}{\dimexpr \foremargin-3\marginparsep}{\onelineskip}
-
-\checkandfixthelayout
-}{%
-\newlength\innermargin
-\newlength\outermargin
-\newlength\uppermargin
-\dimendef\CLpageratio=1256% x=b/h
-\dimendef\CLsmallratio=1258% z=x*y
-\dimendef\CLlargeratio=1260% y=(1-x)/(1+x)
-\CLpageratio=\dimexpr \p@*\paperwidth/\paperheight\relax % x
-\CLlargeratio=\dimexpr \p@*(\p@-\CLpageratio)/(\p@+\CLpageratio)\relax % y
-\CLsmallratio=\dimexpr \CLpageratio*\CLlargeratio/\p@\relax % z
-\edef\CL@pageratio{\strip@pt\CLpageratio}
-\edef\CL@smallratio{\strip@pt\CLsmallratio}
-\edef\CL@largeratio{\strip@pt\CLlargeratio}
-\textheight\paperwidth% altezza griglia
-\textwidth=\CL@pageratio\textheight
-\innermargin=\CL@smallratio\paperwidth
-\outermargin=\CL@largeratio\paperwidth
-\uppermargin=\CL@smallratio\paperheight
-\marginparwidth=\dimexpr0.8\outermargin-\marginparsep\relax
-\evensidemargin=\dimexpr\outermargin -1in\relax
-\oddsidemargin=\dimexpr\innermargin-1in\relax
-\topmargin=\dimexpr\uppermargin-1in-\headheight-\headsep\relax
-\normalfont
-\count256=\numexpr(\textheight-\topskip)/\baselineskip\relax
-\textheight=\count256\baselineskip\relax
-\textheight=\dimexpr\textheight+\topskip\relax
-\normalbaselineskip\baselineskip
-}
-\newlength\abc@width
-\newcommand*\currentfontletters{%
-\settowidth\abc@width{abcdefghijklmnopqrstuvwxyz}\dimen0=26\p@
-\dimen0=\dimexpr \textwidth * \dimen0 / \abc@width \relax
-\count254=\numexpr \dimen0 / \p@ \relax
-\par The number of characters in one text line with the current font is
- \the\count254.\par}
-
-\newcommand*\charactersperpage{%
-\settowidth\abc@width{abcdefghijklmnopqrstuvwxyz}\dimen0=26\p@
-\dimen0=\dimexpr \textwidth * \dimen0 / \abc@width \relax
-\count254=\numexpr \dimen0 / \p@ \relax
-\count252=\numexpr \textheight / \baselineskip \relax
-\count250=\numexpr \count252 * \count254\relax
-\begin{quote} The average number of characters in one text line
- with the current font is \the\count254;
- this text block contains \the\count252\ lines;
- a rough estimate of the number of characters per page is
- \the\count250.\par
- This information may be useful to evaluate the total number
- of pages in a document.
-\end{quote}}
-
-
-%% Copyright 2011 Claudio Beccari
-%%
-%% Distributable under the LaTeX Project Public License,
-%% version 1.3c or higher (your choice). The latest version of
-%% this license is at: http://www.latex-project.org/lppl.txt
-%%
-%% This work is "author-maintained"
-%%
-%% This work consists of this file canoniclayout.dtx, a README file
-%% and the derived files canoniclayout.sty and canoniclayout.pdf.
-%%
-%%
-%% End of file `canoniclayout.sty'.
diff --git a/macros/latex/contrib/curve2e/README.txt b/macros/latex/contrib/curve2e/README.txt
index 66d32795f9..d805a99f29 100644
--- a/macros/latex/contrib/curve2e/README.txt
+++ b/macros/latex/contrib/curve2e/README.txt
@@ -10,7 +10,7 @@
%% License information appended
%%
File README.txt for package curve2e
- [2020-02-28 v.2.2.3 Extension package for pict2e]
+ [2020-04-02 v.2.2.6 Extension package for pict2e]
The package bundle curve2e is composed of the following files
curve2e.dtx
diff --git a/macros/latex/contrib/curve2e/curve2e-manual.pdf b/macros/latex/contrib/curve2e/curve2e-manual.pdf
index 389c3b74ae..9d0fc06c45 100644
--- a/macros/latex/contrib/curve2e/curve2e-manual.pdf
+++ b/macros/latex/contrib/curve2e/curve2e-manual.pdf
Binary files differ
diff --git a/macros/latex/contrib/curve2e/curve2e-manual.tex b/macros/latex/contrib/curve2e/curve2e-manual.tex
index e2dc3de5a6..23a35a8f85 100644
--- a/macros/latex/contrib/curve2e/curve2e-manual.tex
+++ b/macros/latex/contrib/curve2e/curve2e-manual.tex
@@ -36,17 +36,19 @@
\renewcommand\cs[1]{{\normalfont\texttt{\char92#1}}}
\providecommand\Pbox{}
-\RenewDocumentCommand\Pbox{D(){0,0} O{cc} m O{0.5ex}}{%
-\put(#1){%
-\dimendef\Dim=2566\relax
-\settowidth\Dim{#2}%
-\edef\Rapp{\fpeval{\Dim/{1ex}}}%
+\newlength\PbDim
+\RenewDocumentCommand\Pbox{D(){0,0} O{cc} m O{0.5ex} s D<>{0}}{%
+\put(#1){\rotatebox{#6}{\makebox(0,0){%
+\settowidth\PbDim{#2}%
+\edef\Rapp{\fpeval{\PbDim/{1ex}}}%
\fptest{\Rapp > 1.5}{\fboxsep=0.5ex}{\fboxsep=0.75ex}%
-\fboxrule=0pt
-\fptest{#4 = 0sp}{\makebox(0,0)[#2]{\fbox{$\relax#3\relax$}}}%
-{\edef\Diam{\fpeval{#4/\unitlength}}%
-\makebox(0,0){\circle*{\Diam}}%
-\makebox(0,0)[#2]{\fbox{$\relax\mathsf#3\relax$}}}%
+\IfBooleanTF{#5}{\fboxrule=0.4pt}{\fboxrule=0pt}%
+\fptest{#4 = 0sp}%
+ {\makebox(0,0)[#2]{\fbox{$\relax#3\relax$}}}%
+ {\edef\Diam{\fpeval{(#4)/\unitlength}}%
+ \makebox(0,0){\circle*{\Diam}}%
+ \makebox(0,0)[#2]{\fbox{$\relax\mathsf#3\relax$}}%
+ }}}%
}\ignorespaces}
\def\LissajousCoefs#1,#2,#3,#4,#5,#6!{%
diff --git a/macros/latex/contrib/curve2e/curve2e.dtx b/macros/latex/contrib/curve2e/curve2e.dtx
index 2c4d727bda..a0e4bae20b 100644
--- a/macros/latex/contrib/curve2e/curve2e.dtx
+++ b/macros/latex/contrib/curve2e/curve2e.dtx
@@ -46,7 +46,7 @@ README.txt and curve2e-v161.sty.
%<+package>\ProvidesPackage{curve2e}%
%<+readme>File README.txt for package curve2e
%<*package|readme>
- [2020-02-28 v.2.2.3 Extension package for pict2e]
+ [2020-04-02 v.2.2.6 Extension package for pict2e]
%</package|readme>
%<*driver>
\documentclass{ltxdoc}\errorcontextlines=9
@@ -81,17 +81,19 @@ README.txt and curve2e-v161.sty.
\renewcommand\eTeX{\lower0.5ex\hbox{$\varepsilon\!$}\TeX}
\providecommand\Pbox{}
-\RenewDocumentCommand\Pbox{D(){0,0} O{cc} m O{0.5ex}}{%
-\put(#1){%
-\dimendef\Dim=2566\relax
-\settowidth\Dim{#2}%
-\edef\Rapp{\fpeval{\Dim/{1ex}}}%
+\newlength\PbDim
+\RenewDocumentCommand\Pbox{D(){0,0} O{cc} m O{0.5ex} s D<>{0}}{%
+\put(#1){\rotatebox{#6}{\makebox(0,0){%
+\settowidth\PbDim{#2}%
+\edef\Rapp{\fpeval{\PbDim/{1ex}}}%
\fptest{\Rapp > 1.5}{\fboxsep=0.5ex}{\fboxsep=0.75ex}%
-\fboxrule=0pt
-\fptest{#4 = 0sp}{\makebox(0,0)[#2]{\fbox{$\relax#3\relax$}}}%
-{\edef\Diam{\fpeval{#4/\unitlength}}%
-\makebox(0,0){\circle*{\Diam}}%
-\makebox(0,0)[#2]{\fbox{$\relax\mathsf#3\relax$}}}%
+\IfBooleanTF{#5}{\fboxrule=0.4pt}{\fboxrule=0pt}%
+\fptest{#4 = 0sp}%
+ {\makebox(0,0)[#2]{\fbox{$\relax#3\relax$}}}%
+ {\edef\Diam{\fpeval{(#4)/\unitlength}}%
+ \makebox(0,0){\circle*{\Diam}}%
+ \makebox(0,0)[#2]{\fbox{$\relax\mathsf#3\relax$}}%
+ }}}%
}\ignorespaces}
\def\LissajousCoefs#1,#2,#3,#4,#5,#6!{%
@@ -181,7 +183,7 @@ README.txt and curve2e-v161.sty.
%</driver>
% \fi
%
-% \CheckSum{5581}
+% \CheckSum{5594}
% \begin{abstract}
% This file documents the |curve2e| extension package to the |pict2e|
% bundle implementation; the latter was described by Lamport
@@ -486,6 +488,11 @@ README.txt and curve2e-v161.sty.
% necessary any more, but it's true that it became imperative when older
% versions were used.
%
+% Some others users spotted other “features” that did not produce the
+% desired results; they have been acknowledged by footnotes in
+% correspondence with the corrections that were made tanks their
+% contribution.
+%
% \StopEventually{%
% \begin{thebibliography}{9}
% \bibitem{pict2e} Gäßlein H., Niepraschk R., and Tkadlec J.
@@ -1000,7 +1007,7 @@ README.txt and curve2e-v161.sty.
{\IfNoValueTF{#3}{\PackageError{curve2e}
{\string\multiput\space Increment components missing}%
{Nothing done}
- }
+ }%
{\put(#1){\let\c@multicnt\@multicnt
\CopyVect #2 to \R
\CopyVect#3 to\D
@@ -1009,9 +1016,9 @@ README.txt and curve2e-v161.sty.
\put(\R){#5}%
\IfValueTF{#6}{#6}{\AddVect#3 and\R to \R}%
\advance\@multicnt\m@ne
- }
- }
- }
+ }%
+ }%
+ }%
}\ignorespaces
}
% \end{macrocode}
@@ -1637,7 +1644,7 @@ README.txt and curve2e-v161.sty.
% \begin{macrocode}
\def\ArgOfVect#1to#2{\GetCoord(#1){\t@X}{\t@Y}%
\fptest{\t@X=\z@ && \t@Y=\z@}{\edef#2{0}%
-\PackageWarning{curve2e}{Null vector}{Check your data\Messagebreak
+\PackageWarning{curve2e}{Null vector}{Check your data\MessageBreak
Computations go on, but the results may be meaningless}}{%
\edef#2{\fpeval{round(atand(\t@Y,\t@X),6)}}}\ignorespaces}
% \end{macrocode}
@@ -2690,10 +2697,22 @@ Computations go on, but the results may be meaningless}}{%
% the distances of the control points from the adjacent nodes using the
% half chord length, not the full length. We also distinguish between the
% computations relative to the arc starting point and those relative to
-% the end point.
+% the end point. Notice that if the directions of two successive nodes are
+% identical, it is necessary to draw a line, not a third order
+% spline\footnote{Many thanks to John Hillas who spotted this bug, that
+% passed unnoticed fora long time, because it is a very unusual situation.};
+% therefore it is necessary to make a suitable test that is more
+% comfortable to do after the chord has been rotated to be horizontal;
+% in facts, if the two directions are equal, the vertical componente
+% of the directions are both vanishing values; probably, instead of
+% testing with respect to zero, it might be advisable to test the
+% absolute value with respect to a small number such as, for example,
+% “1.e-6.”
%
% \begin{macrocode}
-\ifdim\@DXpzero\p@=\z@
+\fptest{\@DYpuno=0 && \@DYpzero=0}{\GetCoord(\@Puno)\@tX\@tY
+ \pIIe@lineto{\@tX\unitlength}{\@tY\unitlength}}%
+{\ifdim\@DXpzero\p@=\z@
\@tdA=1.333333\p@
\Numero\@KCzero{\@semichord\@tdA}%
\fi
@@ -2757,7 +2776,7 @@ Computations go on, but the results may be meaningless}}{%
\GetCoord(\@CPuno)\@XCPuno\@YCPuno
\pIIe@curveto{\@XCPzero\unitlength}{\@YCPzero\unitlength}%
{\@XCPuno\unitlength}{\@YCPuno\unitlength}%
- {\@XPuno\unitlength}{\@YPuno\unitlength}\egroup
+ {\@XPuno\unitlength}{\@YPuno\unitlength}}\egroup
% \end{macrocode}
% It does not have to stroke the curve because other Bézier splines
% might still be added to the path. On the opposite it memorises the
@@ -2774,7 +2793,10 @@ Computations go on, but the results may be meaningless}}{%
% selected color, while the latter just strokes the path. Both
% recursively examine an arbitrary list of nodes and directions; node
% coordinates are grouped within round parentheses while direction
-% components are grouped within angle brackets. The first call of the
+% components are grouped within angle brackets. Before testing for a
+% possible star, this initial command kills any space or glue that
+% might precede it\footnote{Thanks to John Hillas who spotted the
+% effects of this missing glue elimination.} The first call of the
% macro initialises the drawing process and checks for the next node and
% direction; if a second node is missing, it issues a warning message and
% does not draw anything. It does not check for a change in direction,
@@ -2791,7 +2813,7 @@ Computations go on, but the results may be meaningless}}{%
% regular |\ChangeDir| macro, but also for recursing again by recalling
% |\@Curve|.
% \begin{macrocode}
-\def\Curve{\@ifstar{\let\fillstroke\fillpath\Curve@}%
+\def\Curve{\@killglue\@ifstar{\let\fillstroke\fillpath\Curve@}%
{\let\fillstroke\strokepath\Curve@}}
\def\Curve@(#1)<#2>{%
diff --git a/macros/latex/contrib/curve2e/curve2e.pdf b/macros/latex/contrib/curve2e/curve2e.pdf
index 1141d91861..21c403da84 100644
--- a/macros/latex/contrib/curve2e/curve2e.pdf
+++ b/macros/latex/contrib/curve2e/curve2e.pdf
Binary files differ
diff --git a/macros/latex/contrib/endnotes-hy/README.md b/macros/latex/contrib/endnotes-hy/README.md
new file mode 100644
index 0000000000..7ed5b175f5
--- /dev/null
+++ b/macros/latex/contrib/endnotes-hy/README.md
@@ -0,0 +1,19 @@
+The endnotes-hy package
+Author: D. P. Story
+Dated: 2020-04-08
+
+This is a short package to support the creation of hypertext
+links in support of the endnotes package. The package modifies
+the syntax of the \endnote command:
+\endnote*[<num>]{<text>}\label{<name>}. When the *-option is
+used, no endnote mark is created, but the endnote itself is
+written. The \label command appears at the end of the \endnote
+and its arguments, rather than within the argument of the <text>
+argument.
+
+Now, I simply must get back to my retirement.
+
+D. P. Story
+www.acrotex.net
+dpstory@uakron.edu
+dpstory@acrotex.net
diff --git a/macros/latex/contrib/endnotes-hy/docs/endnotes-hy.pdf b/macros/latex/contrib/endnotes-hy/docs/endnotes-hy.pdf
new file mode 100644
index 0000000000..55299b7b59
--- /dev/null
+++ b/macros/latex/contrib/endnotes-hy/docs/endnotes-hy.pdf
Binary files differ
diff --git a/macros/latex/contrib/endnotes-hy/endnotes-hy.dtx b/macros/latex/contrib/endnotes-hy/endnotes-hy.dtx
new file mode 100644
index 0000000000..3f69d7a642
--- /dev/null
+++ b/macros/latex/contrib/endnotes-hy/endnotes-hy.dtx
@@ -0,0 +1,249 @@
+% \iffalse
+% makeindex -s gglo.ist -o endnotes-hy.gls endnotes-hy.glo
+% makeindex -s gind.ist -o endnotes-hy.ind endnotes-hy.idx
+%<*copyright>
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% endnotes-hy.sty package, %%
+%% Copyright (C) 2020 %%
+%% dpstory@uakron.edu dpstory@acrotex.net %%
+%% %%
+%% This program can redistributed and/or modified under %%
+%% the terms of the LaTeX Project Public License %%
+%% Distributed from CTAN archives in directory %%
+%% macros/latex/base/lppl.txt; either version 1.2 of the %%
+%% License, or (at your option) any later version. %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%</copyright>
+%<package>\NeedsTeXFormat{LaTeX2e}
+%<package>\ProvidesPackage{endnotes-hy}
+%<package> [2020/04/08 v0.1 Enables hypertext links for endnotes]
+%<*driver>
+\documentclass{ltxdoc}
+\usepackage[colorlinks,hyperindex=false,linktocpage,bookmarksnumbered]{hyperref}
+\usepackage{calc}
+\usepackage{endnotes-hy}
+%\def\texorpdfstring#1#2{#1}
+%\pdfstringdefDisableCommands{\let\\\textbackslash}
+\OnlyDescription % comment out for implementation details
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\gdef\brpr#1{\texttt{\char123\relax#1\char125\relax}}
+\let\darg\brpr
+\let\env\texttt
+\let\opt\texttt
+\let\app\textsf
+\let\pkg\textsf
+\def\EXCL{!}
+\def\visispace{\symbol{32}}
+\def\ameta#1{\ensuremath{\langle\textit{\texttt{#1}}\rangle}}
+\def\meta#1{\textsl{\texttt{#1}}}
+\def\SUB#1{\ensuremath{{}_{\mbox{\scriptsize\ttfamily#1}}}}
+\def\CMD#1{\textbackslash#1}
+\makeatletter
+\renewcommand\theparagraph{\texorpdfstring{\protect\P\protect\ }{\textparagraph}}
+\renewcommand\thesubparagraph{\texorpdfstring{\protect\P\protect\P\protect\ }{\textparagraph\textparagraph}}
+\renewcommand{\section}
+ {\renewcommand{\@seccntformat}[1]{\thesection\quad}%
+ \@startsection {section}{1}{\z@}%
+ {-3.5ex \@plus -1ex \@minus -.2ex}%
+ {2.3ex \@plus.2ex}%
+ {\normalfont\Large\bfseries}}
+\renewcommand{\paragraph}
+ {\renewcommand{\@seccntformat}[1]{\theparagraph\unskip\,}%
+ \@startsection{paragraph}{4}{0pt}{6pt}{-3pt}{\bfseries}}
+\renewcommand{\subparagraph}
+ {\renewcommand{\@seccntformat}[1]{\thesubparagraph\unskip\,}%
+ \@startsection{subparagraph}{5}{\parindent}{6pt}{-3pt}{\bfseries}}
+\makeatother
+\newbox\enbox
+\InputIfFileExists{aebdocfmt.def}{\PackageWarning{endnotes-hy}{Inputting aebdocfmt.def}}
+ {\def\IndexOpt{\DescribeMacro}\def\IndexKey{\DescribeMacro}\let\setupFullwidth\relax
+ \PackageInfo{endnotes-hy}{aebdocfmt.def cannot be found}}
+\begin{document}
+\addtolength{\marginparwidth}{3pt}
+ \GetFileInfo{endnotes-hy.sty}
+ \title{The \textsf{endnotes-hy} Package}
+ \author{D. P. Story\\
+ Email: \texttt{dpstory@uakron.edu}}
+ \date{processed \today}
+ \maketitle
+\setcounter{secnumdepth}{5}
+\setcounter{tocdepth}{5}
+\bgroup
+\value{secnumdepth}=3
+\value{tocdepth}=3
+ \tableofcontents
+\egroup
+ \DocInput{endnotes-hy.dtx}
+\IfFileExists{\jobname.ind}{\newpage\setupFullwidth\par\PrintIndex}{\paragraph*{Index} The index goes here. Execute
+ \begin{quote}\texttt{makeindex -s gind.ist -o endnotes-hy.ind endnotes-hy.idx}\end{quote}
+ on the command line and recompile
+ \texttt{endnotes-hy.dtx}.}
+\IfFileExists{\jobname.gls}{\PrintChanges}{\paragraph*{Change History} The list of changes goes here. Execute
+ \begin{quote}
+ \texttt{makeindex -s gglo.ist -o endnotes-hy.gls endnotes-hy.glo}
+ \end{quote}
+ on the command line and recompile \texttt{endnotes-hy.dtx}.}
+\end{document}
+%</driver>
+% \fi
+% \MakeShortVerb{|}
+% \InputIfFileExists{aebdonotindex.def}{\PackageInfo{web}{Inputting aebdonotindex.def}}
+% {\PackageInfo{web}{cannot find aebdonotindex.def}}
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+% \section{Introduction}
+% This package is an extension of \href{https://ctan.org/pkg/endnotes}{\pkg{endnotes}}.
+% \changes{v0.1}{2020/04/08}{First published version of this package.}
+%
+% \paragraph*{Background:} A colleague---a dedicated user of the
+% \href{https://ctan.org/pkg/endnotes}{\pkg{endnotes}} package---complained to me
+% (for some reason) that links created by \pkg{hyperref} do not point to the
+% endnotes at the end of the file; for example, if we say
+%\begin{quote}\ttfamily
+% \string\endnote\darg{\string\label\darg{\ameta{name}}\ameta{text}}
+%\end{quote}
+% then any link, such as
+% \cs{hyperref[\ameta{name}]\darg{endnote\string~\string\ref*\darg{\ameta{name}}}} jumps
+% to the most recent anchor (\texttt{Doc-Start}, for example); no hypertext
+% anchor is created where the endnote is inserted into the document. This short
+% package is an attempt to rectify this problem.
+%
+%\paragraph*{Syntax:}
+% The \cs{endnote} command has been modified to conform to the following syntax:
+%\begin{quote}
+% \cs{endnote*[\ameta{num}]\darg{\ameta{text}}\string\label\darg{\ameta{name}}}
+%\end{quote}
+% Refer to the documentation of the \href{https://ctan.org/pkg/endnotes}{\pkg{endnotes}} package for a description of the \cs{endnote}
+% command and its \ameta{num} and \ameta{text} arguments.
+% If the \texttt*-option (new syntax) is used, the endnote mark is not placed, but the endnote
+% is written to the \texttt{ENT} file.\endnote*{An endnote created with \texttt*-option}\label{en:en*}
+% Such a ``secret'' endnote can be referred to using standard \pkg{hyperref} commands,
+% see the \autoref{en:en*} on page~\pageref{en:en*} for more information. The placement of the \cs{label} has
+% changed for this package as well. To define an endnote label, place \cs{label\darg{name}} following
+% the \cs{endnote} command, a more traditional location. This was done to get access to the \ameta{name}, if it exist.
+% This enables the package to place a hypertext link around the endnote mark.\endnote{This is normal endnote}\label{en:normal}
+% The optional \ameta{num} can be used
+% to write special endnotes.{\def\theendnote{N\arabic{endnote}}\endnote[1]{This is special endnote}\label{en:specen}}
+% As a side benefit to this new syntax, you can place verbatim text into an
+% endnote.\setbox\enbox\hbox{\verb!%^$^&$%^&!}\edef\VertTxti{\unhbox\enbox}\endnote{Some verbatim text \VertTxti}\label{en:verb}
+% If there is no \cs{label} following \cs{endnote}, no hypertext link is created.\endnote{No hypertext link created}
+%
+% \paragraph*{Note:} This package will work correctly without the \pkg{hyperref} package (of course, no links).
+% The advantage of using \pkg{endnotes-hy} without \pkg{hyperref} is to use the extended syntax:
+% \cs{endnote*[\ameta{num}]\darg{\ameta{text}}\string\label\darg{\ameta{name}}}
+%
+% \section{Required packages}
+%
+% \begin{macrocode}
+\RequirePackage{endnotes}
+% \end{macrocode}
+% Require \pkg{etoolbox} because we redefine several commands using \cs{patchcmd}; this is not
+% really necessary, we could have redefined the whole command instead.
+% \begin{macrocode}
+\RequirePackage{etoolbox}
+% \end{macrocode}
+% \section{Package code}
+% We allow the author not to use \pkg{hyperref}; this enables the use of the extended
+% syntax of the \cs{endnote} command.
+% \begin{macrocode}
+\newcommand\hyperref@nohy[2][]{#2}
+\AtBeginDocument{\@ifundefined{hyperref}{\let\hyperref@en\hyperref@nohy
+ \let\phantomendnote\relax}
+ {\let\hyperref@en\hyperref}}
+% \end{macrocode}
+% \begin{macro}{\phantomendnote}
+% The key is to create an hyperref anchor to reference; this definition is based on
+% \cs{phantomsection} of \pkg{hyperref}. This is used internally.
+% \begin{macrocode}
+\def\phantomendnote{%
+ \Hy@MakeCurrentHrefAuto{endnote}%
+ \Hy@raisedlink
+ {\hyper@anchorstart{endnote.\@theenmark}\hyper@anchorend}}
+\def\endnoteautorefname{endnote}
+% \end{macrocode}
+% \end{macro}
+% Redefinition of \DescribeMacro{\theendnotes}\cs{theendnotes}
+% \begin{macrocode}
+\patchcmd{\theendnotes}{\enoteformat}
+ {\phantomendnote\def\@currentHref{endnote.\@theenmark}%
+ \enoteformat}{}{}
+% \end{macrocode}
+% Redefine \DescribeMacro\endnote\cs{endnote} to take an optional \texttt{*}, if this option is used, the mark does not appear
+% in the text. This enables us to easily define an endnote and refer to it even with multiple paragraphs.
+% I didn't like the syntax of inserting the \cs{label} within the argument of \cs{endnote}, this seems to have
+% problems. The new syntax is as follows:\begin{quote}
+% Syntax: \cs{endnote*[\ameta{num}]\darg{\ameta{text}}\string\label\darg{\ameta{name}}}\end{quote}
+% This new syntax could be a problem if an author has already used \pkg{endnotes} and then converts
+% to \pkg{endnotes-hy}. In \pkg{endnotes} the \texttt*-option is note defined and the \cs{label}
+% command is typically placed within the argument of the \darg{\ameta{text}}. Labels would have to be moved
+% to a position following \darg{\ameta{text}}.
+%
+% To obtain this syntax, we need several stages of parsing. The major problem is to get the
+% label name in time to build a hyperref link around \cs{@endnotemark}.
+% \begin{macrocode}
+\newtoks\@entoks
+\def\endnote{\let\@encurrlabelname\@empty
+ \@ifstar{\let\@noMrk1\endnote@i}{\let\@noMrk0\endnote@i}}
+\def\endnote@i{\@ifnextchar[%]
+ {\@xendnote}
+ {\stepcounter{endnote}%
+ \protected@xdef\@theenmark{\theendnote}%
+% \end{macrocode}
+% We placed the \darg{text} argument into a token register, this removes
+% that argument from the input stream, and allows us to see of the next token
+% is \cs{label}, if so, we get the label name argument.
+% \begin{macrocode}
+ \afterassignment\endnote@ii\@entoks}}
+% \end{macrocode}
+% If the next token is \cs{label}, get the label name with \cs{endnote@iii},
+% otherwise, move on to \cs{endnote@iv}, the final step.
+% \begin{macrocode}
+\def\endnote@ii{\@ifnextchar\label{\endnote@iii}{\endnote@iv}}
+\def\endnote@iii\label#1{\def\@encurrlabelname{#1}\endnote@iv}
+% \end{macrocode}
+% If the flag \cs{@noMrk} is 0 (mark is typeset), and if there
+% is a label name, we make an hypertext link.
+% \begin{macrocode}
+\def\endnote@iv{%
+ \if\@noMrk0\relax
+ \ifx\@encurrlabelname\@empty
+ \@endnotemark
+ \else
+ \hyperref@en[\@encurrlabelname]{\@endnotemark}%
+ \fi
+ \fi
+% \end{macrocode}
+% Finish by expanding \cs{@endnotetext} with its argument
+% that was saved in the \cs{@entoks} register.
+% \begin{macrocode}
+ \expandafter\@endnotetext\expandafter{\the\@entoks}}
+% \end{macrocode}
+% We patch into \DescribeMacro\@endnotetext\cs{@endnotetext} just after \verb~\def\next{#1}~.
+% If there was a \cs{label}, we insert it back into the argument
+% of \cs{endnote}.
+% \begin{macrocode}
+\patchcmd{\@endnotetext}
+ {\def\next{#1}}
+ {\ifx\@encurrlabelname\@empty
+ \def\next{#1}\else
+ \edef\x{\noexpand\label{\@encurrlabelname}}%
+ \expandafter\def\expandafter\next\expandafter{\x#1}\fi}{}{}
+% \end{macrocode}
+% If \cs{endnote} has an optional argument, the flow passes to
+% \DescribeMacro\xendnote\cs{xendnote}. We replace
+% \verb~\@endnotemark\@endnotetext~ by redirecting flow to
+% to \cs{endnote@ii}, after saving the argument in \cs{@entoks}.
+% \begin{macrocode}
+\patchcmd{\@xendnote}
+ {\@endnotemark\@endnotetext}
+ {\afterassignment\endnote@ii\@entoks}
+ {}{}
+% \end{macrocode}
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+%\theendnotes
+%\Finale
diff --git a/macros/latex/contrib/endnotes-hy/endnotes-hy.ins b/macros/latex/contrib/endnotes-hy/endnotes-hy.ins
new file mode 100644
index 0000000000..b1104ffe1a
--- /dev/null
+++ b/macros/latex/contrib/endnotes-hy/endnotes-hy.ins
@@ -0,0 +1,60 @@
+%%
+%% This file will generate fast loadable files and documentation
+%% driver files from the doc files in this package when run through
+%% LaTeX or TeX.
+%%
+%% Copyright 1999-2012 D. P. Story
+%%
+%% This file is part of the `AcroTeX eDucation Bundle'.
+%% -------------------------------------------
+%%
+%% It may be distributed under the conditions of the LaTeX Project Public
+%% License, either version 1.2 of this license or (at your option) any
+%% later version. The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.2 or later is part of all distributions of LaTeX
+%% version 1999/12/01 or later.
+%%
+%% --------------- start of docstrip commands ------------------
+%%
+\def\filedate{2020/04/08}
+\def\batchfile{endnotes-hy.ins}
+
+\input docstrip
+\ifx\generate\undefined
+ \Msg{**********************************************}
+ \Msg{*}
+ \Msg{* This installation requires docstrip}
+ \Msg{* version 2.4 or later.}
+ \Msg{*}
+ \Msg{* An older version of docstrip has been input}
+ \Msg{*}
+ \Msg{**********************************************}
+ \errhelp{Move or rename old docstrip.tex and get a newer one.}
+ \errmessage{Old docstrip in input path}
+ \batchmode
+ \csname @@end\endcsname\end
+\fi
+
+\keepsilent
+\askforoverwritefalse
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\preamble
+\endpreamble
+
+\generate
+{%
+ \file{endnotes-hy.sty}{\from{endnotes-hy.dtx}{copyright,package}}
+}
+
+\Msg{***************************************************************}
+\Msg{*}
+\Msg{* \space To finish the installation you have to copy the files }
+\Msg{*}
+\Msg{* \space *.sty, *.cfg and *.def into a directory searched by TeX}
+\Msg{*}
+\Msg{***************************************************************}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\endinput
diff --git a/macros/latex/contrib/endnotes-hy/examples/exmpl-endnotes.pdf b/macros/latex/contrib/endnotes-hy/examples/exmpl-endnotes.pdf
new file mode 100644
index 0000000000..abfbb86dee
--- /dev/null
+++ b/macros/latex/contrib/endnotes-hy/examples/exmpl-endnotes.pdf
Binary files differ
diff --git a/macros/latex/contrib/endnotes-hy/examples/exmpl-endnotes.tex b/macros/latex/contrib/endnotes-hy/examples/exmpl-endnotes.tex
new file mode 100644
index 0000000000..ab523dfffe
--- /dev/null
+++ b/macros/latex/contrib/endnotes-hy/examples/exmpl-endnotes.tex
@@ -0,0 +1,81 @@
+\documentclass{article}
+\usepackage{xcolor}
+\usepackage{endnotes-hy}
+
+\usepackage{hyperref}
+\hypersetup{colorlinks,linkcolor=red}
+
+\usepackage{fancyvrb}
+
+\def\cs#1{\texttt{\char`\\#1}}
+
+% used to create verbatim endnotes
+\newbox\enbox
+\setbox\enbox\hbox{\verb!%^$^&$%^&!}
+\edef\VertTxti{\unhbox\enbox}
+
+% Use to get indentation in multi-paragraph endnotes
+\def\enPAR{\par\hskip15pt}
+
+\makeatletter
+% the use of \everypar is to get proper alignment of the left margin
+% in multi-paragraph endnotes.
+\def\enoteformat{%
+ \rightskip\z@ \leftskip\z@ \parindent=1.8em
+ \everypar{\hangindent=\parindent \hangafter=1}%
+ \leavevmode\llap{\makeenmark}}
+\makeatother
+
+% Modify how the endnote mark looks at the end.
+\patchcmd{\theendnotes}
+ {\makeatletter}
+ {\makeatletter
+ \renewcommand\makeenmark{\textbf{\theenmark{}.} }}
+ {}{}
+
+\usepackage{lipsum}
+
+\begin{document}
+
+%\show\enoteformat
+
+\section{Making endnotes clickable}\label{MkClk}
+
+The new syntax for the \cs{endnote} command is,
+\begin{Verbatim}[xleftmargin=15pt]
+\endnote*[<num>]{<note-text>}\label{<name>}
+\end{Verbatim}
+The use of \texttt* causes the endnote mark not to appear. If \verb!\label{<name>}! appears,
+a hypertext links is created pointing to the placement of the endnote at the end of the document.
+
+\begin{itemize}
+
+\item Some beginning text.\endnote{My endnote text.}\label{judy}
+
+\item Refer to endnote.\endnote{Tom Terrific!}\label{tom}
+
+\item Another method is to use the \texttt*-form and use
+\verb~\autoref~\endnote*{Alex-tastic!}\label{alex} to display
+the reference to \autoref{alex}.
+
+\item Now make another endnote.\endnote{Kira's endnote is a very long one.
+ Kira's endnote is a very long one. Kira's endnote is a very long one.\enPAR
+ Kira's endnote is a very long one. Kira's endnote is a very long one.
+ Kira's endnote is a very long one.}\label{kira}
+
+\item This is an endnote with two paragraphs\endnote*{Don is good.\par Tom is better.}\label{multipar} in endnote~\ref{multipar}.
+
+\item Here, we try \verb!\Nameref!, \verb~\nameref~, \verb~\autoref~: \Nameref{tom}, \nameref{tom}, \autoref{tom}.
+
+\item This is a specially number endnote.{\def\theendnote{N\arabic{endnote}}\endnote[1]{A special end note, verbatim: \VertTxti.}\label{cusNum}}
+
+\item We reference endnote\endnote{Don's endnote is here!}\label{don} on page~\pageref{don}.
+
+\end{itemize}
+\lipsum[1]
+
+\newpage
+
+\theendnotes
+
+\end{document}
diff --git a/macros/latex/contrib/eqexam/README.md b/macros/latex/contrib/eqexam/README.md
index 60949c12fb..ab464cabca 100644
--- a/macros/latex/contrib/eqexam/README.md
+++ b/macros/latex/contrib/eqexam/README.md
@@ -1,5 +1,5 @@
The eqexam Package
-Dated: 2020-01-06
+Dated: 2020-03-14
Author: D. P. Story
eqExam is a LaTeX package for writing exams, tests, quizzes,
@@ -40,6 +40,11 @@ this package are as follows:
folder. See also the series of blogs at
http://www.acrotex.net/blog/?tag=fortextbook
+What's New (2020-03-14) Defined several commands and one environment to
+support the insertion of a figure into a problem. Demo file that illustrates
+these new commands and environment is found at
+http://www.acrotex.net/blog/?p=1419
+
What's New (2020-01-06) Fixed a bug in eqexam, so that now comment.sty is
fully supported. For consistency, aeb-comment.sty is nothing more than
version 3.8 dating to July 2016.
diff --git a/macros/latex/contrib/eqexam/aebrandom.def b/macros/latex/contrib/eqexam/aebrandom.def
index 2906805a5c..f2952e463e 100644
--- a/macros/latex/contrib/eqexam/aebrandom.def
+++ b/macros/latex/contrib/eqexam/aebrandom.def
@@ -18,7 +18,7 @@
%% License, or (at your option) any later version. %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\ProvidesFile{aebrandom.def}
- [2020/01/01 v8.5.8 %
+ [2020/03/14 v8.5.10 %
Exerquiz support for randomization (dps)]
\@ifundefined{nextrandom}{\input{random.tex}}{}
\def\nextrandom{\begingroup
diff --git a/macros/latex/contrib/eqexam/doc/eqexam.pdf b/macros/latex/contrib/eqexam/doc/eqexam.pdf
index 7441d01044..ea03c1f8fb 100644
--- a/macros/latex/contrib/eqexam/doc/eqexam.pdf
+++ b/macros/latex/contrib/eqexam/doc/eqexam.pdf
Binary files differ
diff --git a/macros/latex/contrib/eqexam/doc/eqexamman.pdf b/macros/latex/contrib/eqexam/doc/eqexamman.pdf
index 97f43ca1ee..9684fd4f9b 100644
--- a/macros/latex/contrib/eqexam/doc/eqexamman.pdf
+++ b/macros/latex/contrib/eqexam/doc/eqexamman.pdf
Binary files differ
diff --git a/macros/latex/contrib/eqexam/doc/eqexamman.tex b/macros/latex/contrib/eqexam/doc/eqexamman.tex
index bef910e600..258bf56245 100644
--- a/macros/latex/contrib/eqexam/doc/eqexamman.tex
+++ b/macros/latex/contrib/eqexam/doc/eqexamman.tex
@@ -150,7 +150,7 @@ part of the\texorpdfstring{\\}{ }\texorpdfstring{\AcroTeX}{AcroTeX} eDucation Bu
\keywords{LaTeX, hyperref, PDF, exercises, quizzes}
\university{{\AcroT} Software Development Team}
\email{dpstory@acrotex.net}
-\version{5.1.8, 2020/01/06}
+\version{5.1.10, 2020/03/14}
\copyrightyears{2005-\the\year}
\renewcommand{\exsectitletext}{Solutions to exams in this manual}
@@ -1727,7 +1727,7 @@ parameter is the value of the \texttt{label} key.
I have a couple of crazy gizmos that you can use.
-\subsubsection{The \texttt{workarea} Environment}
+\subsubsection{The \texttt{workarea} Environment}\label{sss:workarea}
For a mathematics test, we often pose
a question that needs to be worked out. Vertical space is created
@@ -1784,7 +1784,7 @@ is not provided, and the \texttt{workarea} does nothing. If
\texttt{solutionsafter} is specified, that space is replaced by
the provided solution.
-\subsubsection{The \texorpdfstring{\cs{placeAtxy}}{\textbackslash placeAtxy} Command}
+\subsubsection{The \texorpdfstring{\cs{placeAtxy}}{\textbackslash placeAtxy} Command}\label{sss:placeatxy}
The \cs{placeAtxy} command is another device that I've used to
place a block of text or a graphic on top of the vertical space
@@ -1829,7 +1829,7 @@ combination with the \texttt{workarea} environment.
% on the \hyperref[problem]{\texttt{problem} environment}, on
% page~\hyperref[problem]{\pageref*{problem}}.
-\subsubsection{The \texttt{splitsolution} Environment}
+\subsubsection{The \texttt{splitsolution} Environment}\label{sss:splitsoln}
I developed this environment to solve a problem with the
\texttt{online} and \texttt{email} options. The white space
@@ -5126,7 +5126,66 @@ in your \texttt{exam} environment.
%\handpoint The demo file for this feature is named \texttt{markqs.tex}.
\exAeBBlogPDF{p=1231} The demo file for this feature is named
-\texttt{\href{\urlAcroTeXBlog/?p=1231}{markqs.pdf}}
+\texttt{\href{\urlAcroTeXBlog/?p=1231}{markqs.pdf}} and is found on the {\AcroBlog}.
+
+\subsection{Methods for working figures into a problem}\label{s:insFigProbs}
+
+A figure is sometimes an integral part of a problem and is referred to in the
+statement of the problem. This section discusses methods of incorporating the
+figure into the problem.
+
+There are two placement locations for the figure: (1) in the work area or
+solution area depending on the state of the exam document, and (2) in the
+questions area. Traditionally, a figure is included as part of the work area;
+these methods are documented and illustrated in the earlier discussions on
+the \env{workarea} environment on page~\pageref{sss:workarea}, the
+\cs{placeAtxy} command on page~\pageref{sss:placeatxy}, and the
+\env{splitsolution} environment on page~\pageref{sss:splitsoln}. The primary
+focus, therefore, is on positioning the figure within the question itself.
+
+To insert a figure into the question, there are two methods: (1) enclose the
+problem in a \env{minipage}, enclose the figure in a \env{minipage}, and
+place them side-by-side; and~(2) use a wrapping package, such as \pkg{picins}, to
+insert and wrap the question text around the figure. We present commands in
+support of these two methods.
+
+\paragraph*{The \env{minipage} approach.}
+When a \env{problem} environment or an \cs{item} in a \env{problem*}
+environment is enclosed in a \env{minipage} to reduce the width of the
+problem to accommodate a figure, precede the outer \env{minipage} with
+the command \cs{probInMinipage} and follow the outer \env{minipage} with the
+environment \env{vadjustForSolnInBx}.
+%\begin{fullwidthEnv}[priorskip=0pt]
+\settowidth{\aebdimen}{\ttfamily\string\begin\darg{vadjForSolnInBx}\darg{\meta{width}}}%
+\def\1{\rlap{\hskip\linewidth\texttt{ \%}\textsf{ marks a problem in a \env{minipage}}}}%
+\def\2{\rlap{\hskip\linewidth\texttt{ \%}\textsf{ an environment that follows a problem ...}}}%
+\def\3{\rlap{\hskip\linewidth\texttt{ \%}\textsf{ marked with \cs{probInMinipage}}}}%
+\begin{dCmd}[commandchars=!()]{\aebdimen+2\fboxsep+2\fboxrule}
+!1\probInMinipage
+!2\begin{vadjForSolnInBx}{!meta(width)}
+!3!qquad!ameta(solution)
+\end{vadjForSolnInBx}
+\end{dCmd}
+
+\paragraph*{The wrap-the-figure method.} The next set of command supports wrapping
+the figure around the text of the question.
+
+\settowidth{\aebdimen}{\ttfamily\string\probInsertSoln\darg{\meta{content}}}%
+\def\2{\rlap{\hskip\linewidth\texttt{ \%}\textsf{ for \env{problem} env}}}%
+\def\3{\rlap{\hskip\linewidth\texttt{ \%}\textsf{ for \cs{item} of \env{problem*} environment}}}%
+\def\4{\rlap{\hskip\linewidth\texttt{ \%}\textsf{ close group begun by two prior cmds}}}%
+\def\5{\rlap{\hskip\linewidth\texttt{ \%}\textsf{ write figure to the solution page}}}%
+\begin{dCmd}[commandchars=!()]{\aebdimen+2\fboxsep+2\fboxrule}
+!2\bProbInsert{!meta(content)}
+!3\bItemInsert{!meta(content)}
+!4\eProbInsert
+!5\probInsertSoln{!meta(content)}
+\end{dCmd}
+
+\exAeBBlogPDF{p=1419} The demo file that illustrates these commands and
+environment, named \texttt{\href{\urlAcroTeXBlog/?p=1419}{ins-fig.pdf}},
+is found on the {\AcroBlog}.
+
\newpage
\markright{References}
diff --git a/macros/latex/contrib/eqexam/eqexam.def b/macros/latex/contrib/eqexam/eqexam.def
index 53d9fc0fa1..0d865559a7 100644
--- a/macros/latex/contrib/eqexam/eqexam.def
+++ b/macros/latex/contrib/eqexam/eqexam.def
@@ -7,7 +7,7 @@
%% exerquiz.dtx (with options: `eqexam')
%%
\ProvidesFile{eqexam.def}
- [2020/01/01 v8.5.8 %
+ [2020/03/14 v8.5.10 %
Exerquiz support file for eqexam (dps)]
\let\eq@YES=y \let\eq@NO=n
\let\eq@One=1 \let\eq@Zero=0
@@ -257,6 +257,7 @@
{\if\exerstar*\def\eq@next{\@exercise}\else
\def\eq@next{\exercise@@}\fi\eq@next}%
}{\eq@postexerciseHook\endexerhook\par
+ \global\let\insE@rlyAtQues\@empty
\global\eq@exerciseheadingtrue\removelastskip\eq@exerskip}
\def\exercise@[#1]{\edef\eq@arg{#1}%
\if\eq@arg h\def\currhideopt{h}%
@@ -304,7 +305,8 @@
\newcommand\exerSolnHeader[3]{%
\prior@exerSolnHeaderHook
\ifeqforpaper\else\webnewpage\fi\markright{#1}%\par\noindent%
- #3%
+ \priorexlabelheader
+ #3\global\let\priorexlabelheader\relax
\solnhspace
}
\let\solnItemMngt\relax
@@ -363,7 +365,8 @@
\fi
\eq@initializeContAnnot
\ifeq@exerciseheading
- \prior@questionsHook\marginparpriorhook\noindent\eqexheader@wrapper
+ \prior@questionsHook
+ \insE@rlyAtQues\marginparpriorhook\noindent\eqexheader@wrapper
\afterlabelhskip\marginparafterhook\gEx@CommonCmd
\eq@setPrbSolnAftrIndnt\ignorespaces\fi}
\newif\ifterminexchanged \terminexchangedfalse % dps cq
@@ -374,6 +377,7 @@
\def\makeExSolnsLocalOn{\makeExSlLocaltrue}
\def\makeExSolnsLocalOff{\makeExSlLocalfalse}
\let\eqMrkSoln\@gobble
+\let\priorexlabelheader\relax
\def\eqExerSolnHeaderSngl{%
\ifmakeExSlLocal\protect\begingroup^^J\fi
\ifx\eqMrkCpyArg\@empty\else
@@ -677,7 +681,7 @@
\endsolnexerhook\penalty0\relax}
\let\eq@exerstarEnv\relax
\newenvironment{exercise*}{\def\eq@exerstarEnv{*}\exercise}
-{\endexercise}
+{\global\let\insE@rlyAtQues\@empty\endexercise}
\def\exerwparts@cols{0}
\let\topofpartshook\relax
\let\@listiiredefined\eq@NO
@@ -730,6 +734,7 @@
\let\eqp@rtc@lcm@rk\relax
\let\eq@insertContAnnot\relax
\def\eq@item@common{\eq@insertContAnnot\eqp@rtc@lcm@rk
+ \global\let\probInMinip@ge\relax
\def\currhideopt{x}\eq@hidesolutionfalse\eq@nolinkfalse
\@ifnextchar[{\@ckhide}{\eq@item}}
\newcommand{\partsitemsep}[1]{{%
@@ -762,6 +767,7 @@
\eq@item@latex\eq@optArg\exlisttabheaderafterhook}
\newif\ifwithinparts
\let\ex@listtabheader@fterhook\@empty
+\let\probInMinip@ge\relax
\newenvironment{exercise@parts@list}{%
\settowidth{\eq@tmplength}{\parts@indent}%
\edef\widthOfParts{\the\eq@tmplength}%
@@ -817,9 +823,11 @@
{\eq@item@latex\ex@listtabheader@fterhook
\exlisttabheaderafterhook}}%
\def\eqthisenv{parts}\withinpartstrue
- \def\item{\ifx\@currenvir\eqthisenv
+ \def\item{\ifx\probInMinip@ge\relax
+ \ifx\@currenvir\eqthisenv
\def\eq@next{\eq@item@common}\else
\def\eq@next{\eq@item}\fi
+ \else\def\eq@next{\eq@item@common}\fi
\eq@next}%
}}{\endlist\global\let\leadinitem\leadinitem@external
\post@parts@hook\belowpartshook}
@@ -1055,9 +1063,8 @@
\newcommand{\exerSolnInput}
{%
\@ifundefined{eqe@IWO}{}{\ifsolutionsAtEnd
- \eqe@IWO\@auxout{\string\expandafter\string\gdef
- \string\csname\space eqExamQuesLastPage\string\endcsname
- {\arabic{page}}}\fi}\let\webnewpage\relax
+ \eqe@IWO\@auxout{\string\csarg\string\gdef
+ {eqExamQuesLastPage}{\arabic{page}}}\fi}\let\webnewpage\relax
\ifsolutionsonly\else
\bgroup\OKToWriteExamDatatrue
\writeT@ExSolns{\string\endinput}\egroup
@@ -1086,6 +1093,7 @@
\exerSolnInput
}
\newcommand{\prior@questionsHook}{}
+\let\insE@rlyAtQues\@empty
\let\qMark@Hook\@empty
\let\aebtitleQuiz\@empty
\newcommand{\post@questionsHook}{}
@@ -1125,7 +1133,8 @@
\toks@=\expandafter\expandafter\expandafter{#1}\expandafter
\xdef\csname quesOpts\@quesctr\endcsname{\the\toks@}%
\edef\tempexp{\noexpand\setkeys{props@ques}{\the\toks@}}\tempexp
- \list{\qMark@Hook\prior@questionsHook\gdef\eqPTs{1}%
+ \list{\qMark@Hook\prior@questionsHook
+ \insE@rlyAtQues\gdef\eqPTs{1}%
\global\let\eqQT\eq@na%
{\@tempcnta=0 \let\@thispr@b\@empty
\@whilenum\@tempcnta<\@eqquestiondepth\do{\advance\@tempcnta\@ne
diff --git a/macros/latex/contrib/eqexam/eqexam.dtx b/macros/latex/contrib/eqexam/eqexam.dtx
index abd1da2c9d..d27fe47511 100644
--- a/macros/latex/contrib/eqexam/eqexam.dtx
+++ b/macros/latex/contrib/eqexam/eqexam.dtx
@@ -16,8 +16,8 @@
%</copyright>
%<package>\NeedsTeXFormat{LaTeX2e}
%<package>\ProvidesPackage{eqexam}
-%<package> [2020/01/06 v5.1.8 An Exam Construction Package (dps)]
-%<package>\def\eqexamdefReq{2020/01/01}
+%<package> [2020/03/14 v5.1.10 An Exam Construction Package (dps)]
+%<package>\def\eqexamdefReq{2020/03/14}
%<*driver>
\documentclass{ltxdoc}
\GlossaryPrologue{\section{{Change History}}}%
@@ -405,7 +405,7 @@
\def\eqe@auto@chk@drivers{\ifpdf\ExecuteOptionsX{pdftex}\else
\ifxetex\ExecuteOptionsX{xetex}\fi\fi}
\newif\ifeqeonline \eqeonlinefalse
-\DeclareOptionX{online}{\eqe@auto@chk@drivers
+\DeclareOptionX{online}{\eqe@auto@chk@drivers\displayworkareafalse
\let\eq@online\eqe@YES\eqeonlinetrue\ExecuteOptionsX{links}}
\DeclareOptionX{pdf}{\eqe@auto@chk@drivers\let\load@web\eqe@YES}
\DeclareOptionX{links}{\eqe@auto@chk@drivers
@@ -676,6 +676,7 @@
\newif\ifeq@proofing \eq@proofingfalse
\newif\ifeq@nolink \eq@nolinkfalse
\@ifundefined{ifpreview}{\newif\ifpreview \previewfalse}{}
+\def\previewOn{\previewtrue}\def\previewOff{\previewfalse}
\newif\ifeqforpaper \eqforpaperfalse
% \end{macrocode}
% We define the commands for inputting the CFG files.
@@ -836,8 +837,14 @@
\ifx\eqeAEFormatting\@empty\else
\eqe@IWO\quiz@solns{\string\eqeAEFormatting}\fi
\fi
+ \protect\cqqsfalse
}
-\def\writeWithSolDocTrue{\writeT@SolnFile{\protect\withinsoldoctrue}}
+% \end{macrocode}
+% \changes{v5.1.10}{2020/03/14}{Added \string\cs{cqqsfalse} to definition of
+% \string\cs{writeWithSolDocTrue}}
+% \begin{macrocode}
+\def\writeWithSolDocTrue{\writeT@SolnFile{%
+ \protect\withinsoldoctrue\protect\cqqsfalse}}
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -894,6 +901,7 @@
% \texttt{nosolutions}.
% \begin{macrocode}
\def\csarg#1#2{\expandafter#1\csname#2\endcsname}
+\let\w@csarg\csarg
\def\saveIFEQE#1{\def\ARG{#1ifSave}%
\expandafter\csarg\expandafter
\let\expandafter\ARG\csname#1\if#1true\else false\fi\endcsname}
@@ -1033,7 +1041,7 @@
% Here, I input the \texttt{verbatim} package after the comment package.
% \begin{macrocode}
\RequirePackage{verbatim}
-\@ifundefined{dlcomment}{\typeout{!! defining dlcomment}%
+\@ifundefined{dlcomment}{%\typeout{!! defining dlcomment}%
\let\dlcomment\comment
\let\enddlcomment\endcomment
\let\eqSavedComment\dlcomment
@@ -1177,6 +1185,7 @@
\let\marginpoints\eqrightmarginbox}
\def\PointsOnBothSides{\def\@reportpoints{3}\relax
\let\marginpoints\eqbothmargins}
+\let\PointsOnBoth\PointsOnBothSides
\newif\ifeqe@nopoints \eqe@nopointsfalse
\def\NoPoints{\if\isInExamEnv\eqe@NO
\eqe@nopointstrue\def\@reporttotals{0}\let\totalsbox=\hfil
@@ -2280,11 +2289,25 @@
\eq@hspanner\ignorespaces
}
% \end{macrocode}
-% \DescribeMacro{\optsMlTextField} is used to pass options to the multi-line
+% \DescribeMacro{\optsMlTxtFld} is used to pass options to the multi-line
% text field.
+% \changes{v5.1.10}{2020/03/14}{Introduced control over width of text field in
+% for \string\texttt{online} option.}
% \begin{macrocode}
-\def\optsMlTextField#1{\def\eqe@optsmltf{#1}}
+\def\optsMlTxtFld#1{\def\eqe@optsmltf{#1}}
\let\eqe@optsmltf\@empty
+% \end{macrocode}
+% \DescribeMacro{\wdthMlTxtFld}\hskip-\marginparsep\texttt{\darg{\ameta{length}}}
+% sets the underlying multi-line text field, when \texttt{online} option is in effect,
+% to \ameta{length}. The default length of \cs{linewidth} is reset after the field
+% has been created.
+% \changes{v5.1.10}{2020/03/14}{Introduced control over width of text field in
+% for \string\texttt{online} option.}
+% \begin{macrocode}
+\def\eqeLW{\linewidth}
+\def\wdthMlTxtFld#1{\setlength\eqetmplengtha{#1}%
+ \edef\eqeLW{\the\eqetmplengtha}}
+\def\resetFldWdth{\gdef\eqeLW{\linewidth}}%
\def\eqExamPriorVspace#1{%
\edef\fieldName{%
\if\probstar*eqexam.\curr@quiz.%
@@ -2294,7 +2317,7 @@
\fi
}%
\nobreak\noindent\textField[\BC{}\presets{\eqe@optsmltf}
- \Ff\FfMultiline]{\fieldName}{\linewidth}{#1}\@gobble
+ \Ff\FfMultiline]{\fieldName}{\eqeLW}{#1}\resetFldWdth\@gobble
}
% \end{macrocode}
%
@@ -2655,8 +2678,7 @@
% If the reference \texttt{r@\#1} is defined, define the value to be
% the second argument of \cs{r@\#1} expanded
% \begin{macrocode}
- \expandafter\xdef\csname nRefii@#1\endcsname
- {\expandafter\expandafter\expandafter
+ \csarg\xdef{nRefii@#1}{\expandafter\expandafter\expandafter
\@getsecondOf\csname r@#1\endcsname}%
}%
}
@@ -3373,7 +3395,7 @@
new Array("pointsgiven.\curr@quiz.page\thepage"));}}]
{\fieldName}{\widthtpboxes}{15pt}%
}
-\ifx\use@email y
+\ifx\use@email\eqe@YES
\let\insertPointsBoxPDF\@insertPointsBoxPDF
\let\insertTotalsBoxPDF\@insertTotalsBoxPDF
\else
@@ -3387,18 +3409,29 @@
% At the bottom of the box goes the points for the problem, if the \texttt{email} option
% is used, in the top, a text field is inserted.
% \begin{macrocode}
-\newcommand{\eqrightmarginbox}[2]{\makebox[0pt][l]{%
- \setlength\tabcolsep{0pt}%
+\newcommand{\eqrightmarginbox}[2]{%
+ \makebox[0pt][l]{%
+% \end{macrocode}
+% If this problem is in a minipage, (as declared by \cs{probInMinipage}), we adjust
+% the text width to be the original text width, rather than the text width determined
+% by the width of the minipage.
+% \changes{v5.1.9}{2020/13/06}{Allow adjustment of \string\cs{textwidth} with a problem
+% is within a minipage.}
+% \begin{macrocode}
+ \ifx\probInMinip@ge\relax
+ \let\eq@TW\textwidth\else
+ \let\eq@TW\eqTWSave\fi
+ \setlength\tabcolsep{0pt}%
% \end{macrocode}
% (2011/05/08) new calculation for the right point box.
% \begin{macrocode}
- \setlength{\@tempdima}{\textwidth-\eqemargin+\marginparsep}%
- \hspace*{\@tempdima}%
- \raisebox{-.5\height}[0pt][0pt]{%
- \marginboxdesign[\insertPointsBoxPDF]%
- {\marginpointsboxtext{#1}{#2}}%
- }\hfil
- }%
+ \setlength{\@tempdima}{\eq@TW-\eqemargin+\marginparsep}%
+ \hspace*{\@tempdima}%
+ \raisebox{-.5\height}[0pt][0pt]
+ {\marginboxdesign[\insertPointsBoxPDF]%
+ {\marginpointsboxtext{#1}{#2}}%
+ }\hfil
+ }\let\probInMinip@ge\relax
}
% \end{macrocode}
% At the end of each exam \verb!\end{exam}! the part totals can be optionally
@@ -3852,7 +3885,7 @@
%\textbf{New Syntax}\\[3pt]
%\begingroup\small
% \switchCats\ttfamily
-% \string\begin{splitsolution}[\meta(width)][\meta(depth)]\\
+% \string\begin{splitsolution}[\meta(width)][\meta(height)]\\
% \string\begin{panel}[l\string|r]\\
% ...\\
% \string\end{panel}\\
@@ -3866,7 +3899,7 @@
%\textbf{Old Syntax}\\[3pt]
%\begingroup\small
% \switchCats\ttfamily
-% \string\begin{splitsolution}{\meta(depth)}\\
+% \string\begin{splitsolution}{\meta(height)}\\
% \string\begin{panel}[l\string|r]{\meta(width)}\\
% ...\\
% \string\end{panel}\\
@@ -4087,6 +4120,8 @@
\newenvironment{@ssSolution}[1][\ss@Argii]%
{%
\def\eqe@argi{#1}\ifx\eqe@argi\@empty\else
+ \setlength{\@tempdima}{\ss@Argii}% chng
+ \edef\ss@Argii{\the\@tempdima}%
\let\soln@keys@nLines\@empty
\edef\panelheight{\the\panelheight}%
\edef\panelwidth{\the\panelwidth}%
@@ -4193,13 +4228,20 @@
\string\setlength{\string\panelwidth}{\ss@Argiii}%
\string\def\string\eqedepth
{\ifeq@nosolutions\ss@Argii\else\ss@Argii\fi}C}}}%
- {\lccode`C=`\%\lowercase{\eqe@IW{%
- \string\strut\string\noindent%
-% \string\strut\par\string\nobreak\string\noindent%
- \string\hbox\space to\string\linewidth\bgroup^^J%
- \eqe@lPanel\string\minipage[b][\string\eqedepth][t]%
- {\string\linewidth\eqe@subleftgutter%
- -\string\panelwidth-\string\panelgap}C
+% \end{macrocode}
+% (2020/03/14) Change to \verb~\noindent\hskip\eqemargin~ to get the margin
+% correct within the \env{eqequestions} environment on the solutions page.
+%\changes{v5.1.10}{2020/03/14}{Change to reflect \string\env{eqequestions}}
+% \begin{macrocode}
+ {\lccode`C=`\%\lowercase{\eqe@IW{\string\vskip2pt
+ \string\noindent\string\hskip\string\eqemargin
+% \string\strut\string\noindent%
+% \string\strut\par\string\nobreak\string\noindent%
+% \string\vskip2pt\string\noindent%
+ \string\hbox\space to\string\linewidth\bgroup^^J%
+ \eqe@lPanel\string\minipage[b][\string\eqedepth][t]%
+ {\string\linewidth\eqe@subleftgutter%
+ -\string\panelwidth-\string\panelgap}C
}}}%
\ifeq@solutionsafter
\noindent\strut\hbox to\linewidth\bgroup
@@ -4389,7 +4431,6 @@
\label{\thisexamlabel PageBegin}%
\eqe@IWO\@auxout{\string\csarg\string\gdef
{\thisexamlabel pageno}{\thepage}}%
-% \let\sq@priorhook\@empty
\ifeqfortextbook
\global\examenvtrue\tb@beginexam@code
\fi
@@ -4402,31 +4443,60 @@
% \begin{macrocode}
\def\tb@insmargmark{\ifisinstred\ifismarginans
\insMidMarg{\mark{}}\fi\fi}
-\def\eqe@adjForSepRule{\if\eq@parttotals\eqe@YES
+\def\eqe@adjForSepRule{\ifx\eq@parttotals\eqe@YES
\eq@pointboxtotalheight\halfHtPtBox\relax
\advance\eq@pointboxtotalheight\dpPtBox\relax
\advance\eq@pointboxtotalheight\pointsmarginparpush
\vspace*{\eq@pointboxtotalheight}\fi}
\def\eqe@afterexamsepcode{%
- \if\eq@parttotals\eqe@YES
- \@actionsAtPageBreak{\global\let\@spacetobreak1}%
- {\global\let\@spacetobreak0}%
- \ifx\@spacetobreak0\relax
- \bgroup\@tempdima=\pagetotal
- \advance\@tempdima\eq@pointboxtotalheight
- \ifdim\@tempdima>\pagegoal\aftergroup\newpage
- \else\ifnum\arabic{eq@count}>0\relax
- \removelastskip\vskip6pt\kern0pt
- \if\@reportpoints\eqe@One\else\@checkSpacing{0}\fi
- \textcolor{\endexamtotal@color}%
- {\eqeomarginbox{\arabic{eq@count}}{0}}\fi
- \ifx\eqx@separationrule\eqe@YES
- \separationrule\eqe@adjForSepRule\fi
- \fi\egroup
+ \ifx\eq@parttotals\eqe@YES
+ \@actionsAtPageBreak{\global\let\@spacetobreak\eqe@One}%
+ {\global\let\@spacetobreak\eqe@Zero}%
+ \ifx\@spacetobreak\eqe@One
+ \bgroup\@tempdima=\pagetotal
+ \advance\@tempdima\eq@pointboxtotalheight
+ \ifdim\@tempdima>\pagegoal\aftergroup\newpage
+ \else
+ \ifnum\arabic{eq@count}>\z@
+ \removelastskip\vskip6pt\kern0pt
+ \ifx\@reportpoints\eqe@One\else\@checkSpacing{0}\fi
+ \def\@emitPartTotalsBox{\textcolor{\endexamtotal@color}%
+ {\eqeomarginbox{\arabic{eq@count}}{0}}}%
+ \insertContent\@emitPartTotalsBox
+ \fi
+ \ifx\eqx@separationrule\eqe@YES
+ \def\@emitSepRule{\separationrule\eqe@adjForSepRule}%
+ \insertContent\@emitSepRule
\fi
- \else\ifx\eqx@separationrule\eqe@YES
- \separationrule\eqe@adjForSepRule\fi
+ \fi\egroup
+ \else
+ \ifnum\arabic{eq@count}>\z@
+ \ifx\@reportpoints\eqe@One\else\@checkSpacing{0}\fi
+ \def\@emitPartTotalsBox{\textcolor{\endexamtotal@color}%
+ {\eqeomarginbox{\arabic{eq@count}}{0}}}%
+ \insertContent\@emitPartTotalsBox
+ \fi
+ \ifx\eqx@separationrule\eqe@YES
+ \def\@emitSepRule{\separationrule\eqe@adjForSepRule}%
+ \insertContent\@emitSepRule
+ \else
+ \eqe@adjForSepRule
+ \fi
\fi
+ \else
+ \ifx\eqx@separationrule\eqe@YES
+ \def\@emitSepRule{\separationrule\bigskip}%
+ \insertContent\@emitSepRule\fi
+ \fi
+}
+\def\insertContent#1{%
+ \@ifundefined{NextAfter\currExamName}
+ {#1}
+ {\edef\x{%
+ \numFirstPageOfExam{\@nameuse{NextAfter\currExamName}}}%
+ \edef\y{\numLastPageOfExam{\currExamName}}%
+ \ifnum\x=\y\relax#1\fi
+ }%
}
\def\examenddef
{%
@@ -4545,40 +4615,55 @@
% \end{macrocode}
% The beginning of the \env{exam} environment.
% \begin{macrocode}
+\let\currExamName\@empty
+\let\prevExamName\@empty
+\let\nextExamName\@empty
\newenvironment{exam}[2][]
{%
- \ifDoNotRecordThisExam % dpsf02
+ \xdef\eqTWSave{\the\textwidth}%
+ \ifDoNotRecordThisExam
\expandafter\bIFFalseWrtSolns\fi
- \makeRoomForProb{\@fvsizeskip\textheight}{0}%
- \let\isInExamEnv\eqe@YES
- \stepcounter{eq@numparts}%
+ \makeRoomForProb{\@fvsizeskip\textheight}{0}%
+ \ifx\currExamName\@empty % chng
+ \xdef\currExamName{#2}\else
+ \xdef\prevExamName{\currExamName}%
+ \eqe@IWO\@auxout{\string\csarg\string
+ \gdef{NextAfter\prevExamName}{#2}}%
+ \xdef\currExamName{#2}%
+ \eqe@IWO\@auxout{\string\csarg\string
+ \gdef{PrevTo\currExamName}{\prevExamName}}%
+ \fi
+ \let\isInExamEnv\eqe@YES
+ \stepcounter{eq@numparts}%
% \end{macrocode}
% If \texttt{\#2} is empty, use \cs{autoExamName}
% \begin{macrocode}
- \def\eqexamargii{#2}\ifx\eqexamargii\@empty
- \edef\eqexamargii{\autoExamName}\fi
- \xdef\thisexamlabel{\eqexamargii}\xdef\curr@quiz{\eqexamargii}%
- \def\eqexamargi{#1}\ifx\eqexamargi\@empty
- \edef\eqexamargi{\eqexamargii}\fi
- \expandafter\gdef\expandafter\thisUFexamlabel
- \expandafter{\eqexamargi}%
- \edef\eq@tmp{\the\partNames\string\\{\eqexamargii}}%
- \global\partNames=\expandafter{\eq@tmp}%
- \csarg\ifx{NumberOfParts}\relax\else
-\ifx\eqeWrtExamTitleToSolns\eqe@YES
- \ifnum\nNumberOfP@rts=1\relax\else
- \def\eqe@argi{#1}\ifx\eqe@argi\@empty
- \eqe@writetoSolns{\eqexamargii}\eqe@writetoAux{\string
- \csarg\string\gdef{userFriendly\eqexamargii}{\eqexamargii}}
+ \def\eqexamargii{#2}\ifx\eqexamargii\@empty
+ \edef\eqexamargii{\autoExamName}\fi
+ \xdef\thisexamlabel{\eqexamargii}\xdef\curr@quiz{\eqexamargii}%
+ \def\eqexamargi{#1}\ifx\eqexamargi\@empty
+ \edef\eqexamargi{\eqexamargii}\fi
+ \expandafter\gdef\expandafter\thisUFexamlabel
+ \expandafter{\eqexamargi}%
+ \edef\eq@tmp{\the\partNames\string\\{\eqexamargii}}%
+ \global\partNames=\expandafter{\eq@tmp}%
+ \csarg\ifx{NumberOfParts}\relax\else
+ \ifx\eqeWrtExamTitleToSolns\eqe@YES
+ \ifnum\nNumberOfP@rts=1\relax
+ \else
+ \def\eqe@argi{#1}%
+ \ifx\eqe@argi\@empty
+ \eqe@writetoSolns{\eqexamargii}\eqe@writetoAux{\string
+ \csarg\string\gdef{userFriendly\eqexamargii}{\eqexamargii}}
\else
- \eqe@writetoSolns{#1}\eqe@writetoAux{\string
- \csarg\string\gdef{userFriendly#2}{#1}}
+ \eqe@writetoSolns{#1}\eqe@writetoAux{\string
+ \csarg\string\gdef{userFriendly#2}{#1}}%
\fi
- \fi\fi
-\fi
- \exambegdef
- \edef\temp@Exp{\noexpand\shortquiz\sqstar[\eqexamargii]}\temp@Exp
-% \expandafter\shortquiz\sqstar[\eqexamargii]%
+ \fi
+ \fi
+ \fi
+ \exambegdef
+ \edef\temp@Exp{\noexpand\shortquiz\sqstar[\eqexamargii]}\temp@Exp
}{%
\examenddef
% \end{macrocode}
@@ -7108,6 +7193,183 @@
\if@bypasseqexamheading\else
\pagestyle{eqExamheadings}\fi\fi
% \end{macrocode}
+% \section{Insertion of figures into a problem or solution}
+% Over the years, there have been many requests for ``easy'' methods of inserting
+% images (or other content) into a problem. In this section, we provide some basic tools
+% for doing just that.
+%
+% There are two methods for inserting content (without disturbing the layout of the document):
+% (1) using a minipage; and (2) using a wrap-figure package, such as \pkg{picins} (recommended).
+%
+% The demo file for these features is \texttt{ins-fig.tex}
+% \changes{v5.1.10}{2020/03/14}{Added commands for inserting figures in a problem}
+%
+% \subsection{Enclose problem in a minipage}
+% The idea is to include the \env{problem} environment in a \env{minipage} with a width smaller than
+% \cs{linewidth}; then place the figure in another \env{minipage} next to the question. To use this
+% methods, precede the enclosing \env{minipage} with the command \cs{probInMinipage}; illustration follows.
+%\begin{verbatim}
+%\def\PROB{The problem ...}
+%\def\FIG{\includegraphics[width=4.5cm]{figura1}}
+%\probInMinipage
+%\begin{minipage}{\linewidth}
+%\begin{minipage}[t]{\textwidth-4.5cm-11pt}\kern0pt
+%\begin{problem}[10]\PROB
+%\begin{solution}[1in]
+%This is the solution to ``\PROB''
+%\end{solution}
+%\end{problem}
+%\end{minipage}
+%\begin{minipage}[t]{4.5cm}\kern0pt\FIG
+%\end{minipage}\end{minipage}
+%\end{verbatim}
+%The same technique is used for multi-part problems.
+%\begin{verbatim}
+%\probInMinipage
+%\begin{minipage}[t]{\linewidth-4.5cm-11pt}\kern0pt\parindent15pt
+% \item \PROB
+%\begin{solution}[1in]
+%This is the solution to ``\PROB''
+%\end{solution}
+%\begin{workarea}{\sameVspace}
+%\end{minipage}\hfill
+%\begin{minipage}[t]{4.5cm}\kern0pt\FIG\end{minipage}
+%\end{verbatim}
+%\begin{macro}{\probInMinipage}
+%Place in front of a \env{minipage} environment that encloses side-by-side
+%content: the problem on the left and the figure on the right. The big problem
+%here is inserting the figure without disturbing the right margin totals.
+%The \cs{eqTWSave} is the saved value of the \cs{textwidth} in effect when
+%the \env{exam} environment is opened. The right totals box is placed in the right
+%margin based on this value.
+% \begin{macrocode}
+\def\probInMinipage{%
+ \ifanswerkey
+ \ifkeepdeclaredvspacing
+ \global\let\w@sKeyOn\eqe@YES
+ \vspacewithkeyOff
+ \else
+ \global\let\w@sKeyOn\eqe@NO
+ \fi
+ \fi
+ \let\probInMinip@ge\eqTWSave\noindent}
+\let\probInMinip@ge\relax
+% \end{macrocode}
+% \end{macro}
+% \begin{environment}{vadjForSolnInBx}\hskip-\marginparsep\texttt{\darg{\ameta{width}}}
+% When the \env{problem} environment environment
+% is enclosed in a minipage, the space left for the solution is not correct when
+% \cs{vspacewithkeyOn} is in effect.
+%
+% This is companion environment to the \cs{probInMinipage} command whose intension is
+% to get the spacing correct. It it placed after all \env{minipage}s
+% are closed that enclosed the whole \env{problem}. The argument, \ameta{width}, is the same
+% width of \env{minipage} that encloses the problem. The content of the environment should
+% be the same content as the \env{solution} environment. \env{vadjForSolnInBx} calculates
+% the total height of the typeset solution. It then calculates the difference between
+% \cs{sameVspace}, which should hold the value of the optional argument of \env{solution},
+% and the actual height of the solution. It then executes a \cs{vspace} for that amount calculated.
+%
+% \begin{macrocode}
+\newenvironment{vadjForSolnInBx}[1]{%
+ \setlength\@tempdima{#1}%
+ \setbox\z@\vbox\bgroup\hsize\@tempdima
+}{%
+ \egroup
+ \ifanswerkey
+ \ifx\w@sKeyOn\eqe@YES
+ \global\vspacewithkeyOn\fi
+ \setlength{\@tempdima}{\ht\z@+\dp\z@}%
+ \setlength{\@tempdima}{\sameVspace-\@tempdima}%
+ \par\vspace{\@tempdima}\fi
+ \setbox\z@\box\voidb@x
+}
+% \end{macrocode}
+% \end{environment}
+%
+% \subsection{Insertions using a wrapping package}
+% A technique for wrapping text around the figure has been developed, and is an ugly hack.
+% The example below is typical: define \cs{insertFig} (for convenience). Prior to the
+% opening of \env{problem}, expand \verb~\bProbInsert{\insertFig}~.
+% \begin{macro}{\bProbInsert}\hskip-\marginparsep\texttt{\darg{\ameta{fig}}}
+% Use this command above the \env{problem} (or \env{problem*}) environment only. Prior to opening the \env{problem}
+% use \cs{bProbInsert} with its argument. Place \DescribeMacro{\eProbInsert}\cs{eProbInsert} at the end of the statement of the
+% question, as illustrated below. \cs{bProbInsert} puts the question into a group,
+% \cs{eProbInsert} gets us out of the group.
+%\begin{verbatim}
+%\def\insertFig{\parpic[r]{\FIG}}
+%\bProbInsert{\insertFig}
+%\begin{problem}[10]\PROB
+%\PROB\space\PROB\eProbInsert
+%\begin{solution}[1in]
+%This is the solution: \PROB
+%\end{solution}
+%\end{problem}
+%\end{verbatim}
+% \begin{macrocode}
+\def\bProbInsert#1{\def\@rgi{#1}\ifx\@rgi\@empty
+ \global\let\insE@rlyAtQues\@empty\else
+ \gdef\insE@rlyAtQues{\begingroup#1}\fi}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\bItemInsert}\hskip-\marginparsep\texttt{\darg{\ameta{fig}}\ameta{content}\cs{eProbInsert}}\\
+% The \cs{bItemInsert} command is the \cs{item}-version of \cs{bProbInsert}. Place \cs{bItemInsert} with its argument
+% just after the \cs{item}, as illustrated below. At the end of the question place \cs{eProbInsert}.
+%\begin{verbatim}
+%\begin{problem*}[5ea]
+%Solve each without error.
+%\begin{parts}
+% \item \bItemInsert{\insertFig} \PROB
+% \PROB\space\PROB\space\PROB\eProbInsert
+%\begin{solution}[1in]
+%This is the solution. \PROB
+%\end{solution}
+% ...
+%\end{parts}
+%\end{problem*}
+%\end{verbatim}
+% \begin{macrocode}
+\def\bItemInsert#1{\begingroup#1\noindent\ignorespaces}
+\def\eProbInsert{\par\endgroup\@restorepar\par}
+% \end{macrocode}
+% \end{macro}
+% \section{Insertions in the solution section}
+% Its a bit trickier to include a wrapped graphic in the solution section. The primary
+% command for doing this is \DescribeMacro{\probInsertSoln}\cs{probInsertSoln}
+%\begin{verbatim}
+%\bProbInsert{\insertFig}
+%\probInsertSoln[\protect\vskip3pt]{\insertFig}
+%\begin{problem}[10]\begin{cq*}
+%\PROB\space\PROB
+%
+%\PROB\space\PROB\space\PROB\space\PROB\cqQS{}{\RESTOREPAR}
+%
+%\PROB\cqQS{\eProbInsert}{}
+%\end{cq*}
+%\begin{solution}[1in]
+%\ifcqSA\else\textit{Question}: \cqCopiedQues
+%\par\medskip\noindent\textit{Solution}:\space\fi
+%This is the solution: \PROB
+%\end{solution}
+%\end{problem}
+%\end{verbatim}
+% \begin{macro}{\probInsertSoln}\hskip-\marginparsep\texttt{[\ameta{opt}]\darg{\ameta{\cs{cmd}}}}
+% The command \ameta{\cs{cmd}} is a expands to the figure insertion; for example,
+% \verb~\gdef\insertFig{\parpic[r]{\FIG}}~, the second argument would read \cs{insertFig}.
+% The first argument was designed for vertical adjustment, as needed. In the sample file
+% \texttt{ins-fig.tex}, we insert an extra 3pts, see the verbatim listing above.
+% \begin{macrocode}
+\newcommand{\probInsertSoln}[2][]{\writeToSolnFile{#1%
+ \protect\def\protect
+ \priorexlabelheader{\protect#2\protect\noindent
+}}}
+% \end{macrocode}
+% Sometimes you need to insert \cs{RESTOREPAR} to make the paragraphs layout as they should.
+% This is illustrated above.
+% \begin{macrocode}
+\def\RESTOREPAR{\let\par\@@par}
+% \end{macrocode}
+% \end{macro}
% \begin{macrocode}
%</package>
%<*textbook>
diff --git a/macros/latex/contrib/eqexam/eqexam.ins b/macros/latex/contrib/eqexam/eqexam.ins
index a5fd9e5387..3cecb5ff06 100644
--- a/macros/latex/contrib/eqexam/eqexam.ins
+++ b/macros/latex/contrib/eqexam/eqexam.ins
@@ -3,7 +3,7 @@
%% driver files from the doc files in this package when run through
%% LaTeX or TeX.
%%
-%% Copyright 2005--2018 D. P. Story
+%% Copyright 2005--2020 D. P. Story
%%
%% This file is part of the `AcroTeX eDucation Bundle'.
%% -------------------------------------------
diff --git a/macros/latex/contrib/eqexam/examples/test01.tex b/macros/latex/contrib/eqexam/examples/test01.tex
index 4f7d39e4bd..102b7b61e0 100644
--- a/macros/latex/contrib/eqexam/examples/test01.tex
+++ b/macros/latex/contrib/eqexam/examples/test01.tex
@@ -2,7 +2,7 @@
\usepackage{amsmath}
\usepackage{graphicx}
\usepackage[%
- online, % try commenting out this option to get a paper document
+% online, % try commenting out this option to get a paper document
% nosolutions,
% answerkey,
vspacewithsolns,
diff --git a/macros/latex/contrib/euclideangeometry/README.txt b/macros/latex/contrib/euclideangeometry/README.txt
index 6402a6e9ff..b0ea7a4bf8 100644
--- a/macros/latex/contrib/euclideangeometry/README.txt
+++ b/macros/latex/contrib/euclideangeometry/README.txt
@@ -10,7 +10,7 @@
%% License information appended
%%
File README.txt for package euclideangeometry
- [2020-02-12 v.0.1.5 Extension package for curve2e]
+ [2020-03-30 v.0.1.7 Extension package for curve2e]
The package bundle euclideangeometry is composed of the following files
diff --git a/macros/latex/contrib/euclideangeometry/euclideangeometry-man.pdf b/macros/latex/contrib/euclideangeometry/euclideangeometry-man.pdf
index d36d79326e..c7ab75ca88 100644
--- a/macros/latex/contrib/euclideangeometry/euclideangeometry-man.pdf
+++ b/macros/latex/contrib/euclideangeometry/euclideangeometry-man.pdf
Binary files differ
diff --git a/macros/latex/contrib/euclideangeometry/euclideangeometry-man.tex b/macros/latex/contrib/euclideangeometry/euclideangeometry-man.tex
index 4c09bb6025..3df15a96c4 100644
--- a/macros/latex/contrib/euclideangeometry/euclideangeometry-man.tex
+++ b/macros/latex/contrib/euclideangeometry/euclideangeometry-man.tex
@@ -884,7 +884,7 @@ z^2 &= m^2\eu^{\iu 2\phi}\\
\cs{IntersecionOfLines}\parg{point1}\parg{dir1} and\parg{point2}\parg{dir2}
\qquad to\meta{vector}
\end{ttsyntax}
- were each line is identified with its \meta{point} and its direction
+ were each line is identified with its \meta{point} and its \emph{direction}
\meta{dir}; the intersection coordinates go to the output \meta{vector}.
\item A second command\cs{IntersectionOfSegments} does almost the same
@@ -898,7 +898,59 @@ z^2 &= m^2\eu^{\iu 2\phi}\\
Again the intersection point coordinates go to the output \meta{vector}.
The first segment is between points 11 and 12, and, similarly, the second
segment is between points 21 and 22.
-
+\item Another “intersection” command is \cs{IntersectionsOfLine} to
+ determine the two intersection of a line with a circle. The syntax is:
+ \begin{ttsyntax}
+\cs{IntersectionsOfLine}\parg{point}\parg{dir}WithCircle\parg{center}\marg{radius}to\meta{int1} and\meta{int2}
+\end{ttsyntax}
+ where \meta{point} and \meta{dir} identify a line with a given direction
+ and passing through a given point; the circle is identified with its
+ \meta{center} and \meta{radius}; the intersection points \meta{int1} and
+ \meta{int2} are the coordinates of the intersection points; If the line
+ and circle do not intersect, a warning message is issued, shown in the
+ console and written to the \file{.log} file; the intersection points are
+ assigned the default values \texttt{0,0}, which evidently produce strange
+ results in the output document, so as to remind the user to give a look
+ to the \file{.log} file and to review his/her data.
+\item It is difficult to numerically determine the coordinates of the
+ intersection points of two circles; it becomes easier if one of the
+ intersections is known; To this end, a macro to draw a circle with a
+ given center and passing through a given point is handy:
+\begin{ttsyntax}
+ \cs{CircleThrough}\meta{point}WithCenter\marg{center}
+\end{ttsyntax}
+ draws such circumference.
+\item With the above macro it becomes easy to draw two circumferences
+ with different centers and passing through the same point; therefore
+ it becomes determine the other intersection point by means of the
+ following macro:
+\begin{ttsyntax}
+\cs{Segment}\parg{endpoint1}\parg{endpoint2}SymmetricPointOF\meta{p1}
+ to\meta{p2}
+\end{ttsyntax}
+ The computation is simple, because the second intersection is the
+ symmetrical point \meta{p2} of \meta{p1} with respect to the segment
+ that joins the centers of the given circles intersecting one another
+ in \meta{p1}.
+\item It would be interesting to solve the same problem with help of
+ the following macro relating to right triangles identified with their
+ hypothenuse and one of its legs; the other leg is found by means of this
+ macro:
+\begin{ttsyntax}
+\cs{LegFromHypothenuse}\meta{length1} AndOtherLeg\meta{length2}
+ to\marg{length3}
+\end{ttsyntax}
+ since the intersection points of two circles define their common chord;
+ this chord and the two circle centers define two isosceles triangles
+ with the same base; therefore the segment joining the circle radii,
+ coincides whit the chord axis and divides each isosceles triangle in
+ two right triangles, where the hypotenuse is one of two radii and the
+ first leg is the distance from the chord middle point, intersection of
+ the chord and the segment joining the circle centers; at this point the
+ distance of the second point intersection from the chord middle point
+ and the coordinates of the second intersection may be easily computed;
+ of course this is a much clumsier way to determine the second
+ intersection, but it is useful to solve this right triangle easy problem.
\item Command \cs{ThreePointCircle} draws a circle that goes through three
given points; the syntax is the following:
\begin{ttsyntax}
@@ -908,7 +960,6 @@ z^2 &= m^2\eu^{\iu 2\phi}\\
the coordinates of the center of the circle, that might be useful even
if the circle is not drawn; the optional asterisk, if present, does not
draw the circle, but the center is available.
-
\item Alternatively
\begin{ttsyntax}\setfontsize{10.5}
\cs{ThreePointCircleCenter}\parg{point1}\parg{point2}\parg{point3}to\meta{vector}
@@ -931,7 +982,7 @@ z^2 &= m^2\eu^{\iu 2\phi}\\
\end{ttsyntax}
Apparently these two commands do the same, but, no, they behave
differently: in the former command the \meta{Radius} is a vector the
- modulus of which si computed and used as the radius; in the latter
+ modulus of which is computed and used as the radius; in the latter
command the \meta{radius} is a scalar and (its magnitude) is directly
used.
@@ -1497,6 +1548,64 @@ y(t) &= \dfrac{13\cos(t)-5\cos(2t)-2\cos(3t)-\cos(4t)}{16}
\end{figure*}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\subsection{ Intersections involving circles}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+Determining the intersection of two circles is difficult; algebraically it requires the solution of second degree equations whose coefficients are sort of complicated expressions of the centers and radii; furthermore such equations might not have real roots. The problems are much simpler even geometrically when one circle is intersected by a line, and when two circles share a common point. In the first case there are two intersections, possibly coincident, if the centers distance is shorter than the sum of their radii; in the second case its easy to determine the chord common to both circles and the problem of finding the second intersection becomes that of finding the second end point of the chord.
+
+Figure~\ref{fig:circle-and-line} shows the simple geometrical construction that leads to the determination of the intersections; one of the lines is tangent to the circle and the intersection points $P_3$ and $P_4$ coincide.
+
+\begin{figure}
+\begin{Esempio}[\setfontsize{9}]
+\unitlength=0.007\linewidth
+\begin{picture}(100,100)
+\AutoGrid
+\IntersectionsOfLine(100,50)(0,20)%
+ WithCircle(40,40){30}to\Puno and\Pdue
+\Pbox(\Puno)[tl]{P_1}[2]
+\Pbox(\Pdue)[t]{P_2}[2]
+\Dotline(\C)(\Pt){2}[1.5]
+\Dotline(\C)(\Pq){2}[1.5]
+\Pbox(\Int)[t]{M}[2]
+\Dotline(\C)(\Int){2}[1.5]
+%
+\IntersectionsOfLine(0,70)(100,70)%
+ WithCircle(40,40){30}to\Ptre and\Pquat
+\Pbox(\Ptre)[bl]{P_3}[2]
+\Pbox(\Pquat)[br]{P_4}[2]
+\IntersectionsOfLine(0,40)(100,100)%
+ WithCircle(40,40){30}to\Pcin and\Psei
+\Pbox(\Pcin)[br]{P_5}[2]
+\Pbox(\Psei)[t]{P_6}[2]
+\end{picture}
+\end{Esempio}
+\caption{Intersection of a circle with several lines}\label{fig:circle-and-line}
+\end{figure}
+
+Figure~\ref{fig:two-intersecting-circles} shows the geometrical construction to determine the second intersection point $P_2$ of two circles that already have a first common point $P_1$. The common chord and the segment joining the centers are not shown, but the code, although with “strange” point names, shows all the steps necessary to find the second intersection point
+
+
+\begin{figure}\centering
+\begin{Esempio}[\setfontsize{9}]
+\unitlength0.007\linewidth
+\begin{picture}(100,100)
+\AutoGrid
+\edef\PCCuno{30,40}
+\edef\PCCdue{70,60}
+\edef\PCCzero{40,55}
+\Pbox(\PCCuno)[t]{C_1}[2]
+\Pbox(\PCCdue)[t]{C_2}[2]
+\Pbox(\PCCzero)[l]{P_1}[2.5]
+\CircleThrough\PCCzero WithCenter\PCCuno
+\CircleThrough\PCCzero WithCenter\PCCdue
+\Segment(\PCCuno)(\PCCdue)%
+ SymmetricPointOf\PCCzero to\PCCquat
+\Pbox(\PCCquat)[l]{P_2}[2.5]
+\end{picture}
+\end{Esempio}
+\caption{Second intersection point $P_2$ of two circles sharing a first intersection point $P_1$}\label{fig:two-intersecting-circles}
+\end{figure}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Triangles and their special lines}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -1704,6 +1813,51 @@ y(t) &= \dfrac{13\cos(t)-5\cos(2t)-2\cos(3t)-\cos(4t)}{16}
\end{figure}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\subsection{The tangent to an ellipse}\label{ssec:diretriz}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+Ellipses have mani interesting properties. One that I was not able to find anywhere in the documentation I examined (of course not the totality of available on ellipses, except an on-line document written in Portuguese by Sergio Alvez, \url{https://docplayer.com.br/345411-Elipses-inscritas-num-triangulo.html}, is the \emph{director circumference}, literal translation of the Portuguese definition \emph{circunfência diretriz}.
+
+Consider an ellipse with its foci $F$ en $F'$, and a generic point $P$ on its contour.
+Trace a segment from $F\,P$ and another segment for $P\,F'$; these segments measure the distanced from point $P$ to each focus: their sum is the length of the main ellipse axis $2a$, being $a$ the semi axis. Now lengthen the segment $P\,F'$ to point $S$ by the length of $F\,P$; the length of $S\,F'$ is therefore equal to $2a$; now trace the circumference with center in $F'$ and radius $2a$; this is the \emph{director circumference}, that is labelled with~$\Gamma$.
+
+By construction, then, the circle $\gamma$ centred in $F$ and radius equal to $F\,P$ is tangent to $\Gamma$ in $S$ and passes through $F$. This allows to say that:
+\begin{itemize}[noitemsep]
+\item the ellipse is the locus of the centres of all circles passing through focus $F$ and internally tangent to the circle $\Gamma$ centred in the other focus $F'$ and with radius $2a$;
+\item the axis of segment $S\,F$ is tangent to the ellipse;
+\item the tangency point is the point $P$;
+\item since this axis passes through the midpoint $M$ of segment $S\,F$ and it is perpendicular to it, the segment $M\,P$ has the same direction of the tangent to the ellipse;
+\item notice that points $S$ and $F$ are symmetrical with respect to the tangent in point $P$.
+\end{itemize}
+Such properties can be viewed and controlled in figure~\ref{fig:diretriz}.
+
+\begin{figure}[!tb]\centering
+\begin{Esempio}*[\setfontsize{8.2}](0.40)
+\unitlength=0.005\linewidth
+\begin{picture}(170,160)(-60,-80)
+\GraphGrid(-60,-80)(170,160)
+\VECTOR(0,-80)(0,80)\Pbox(0,80)[r]{y}[0]
+\VECTOR(-60,0)(110,0)\Pbox(110,0)[t]{x}[0]
+\edef\A{40}\edef\B{30}\Xellisse{\A}{\B}[\thicklines]
+\edef\X{\fpeval{\A*cosd(120)}}\edef\Y{\fpeval{\B*sind(120)}}
+\edef\P{\X,\Y}\Pbox(\P)[b]{P}[3]
+\edef\C{\fpeval{sqrt(\A**2-\B**2)}}% Inter focal semi distance
+\CopyVect-\C,0 to\F \CopyVect\C,0 to\Fp\Pbox(\Fp)[t]{F'}[3]
+\Pbox(\F)[t]{F}[3]\Pbox(0,0)[tr]{O}[3]
+\edef\Raggio{\fpeval{2*\A}}\Circlewithcenter\Fp radius\Raggio
+\SegmentLength(\P)(\F)to\raggio\Circlewithcenter\P radius\raggio
+\SegmentArg(\Fp)(\P)to\Arg\AddVect\Fp and\Arg:\Raggio to\S
+\segment(\Fp)(\S)\Pbox(\S)[br]{S}[3]
+\segment(\F)(\S)\SegmentCenter(\F)(\S)to\M
+\Pbox(\M)[r]{M}[3]\SegmentArg(\F)(\S)to\Arg
+\edef\Arg{\fpeval{\Arg-90}}\AddVect\M and \Arg:50 to\D\segment(\M)(\D)
+\end{picture}
+\end{Esempio}
+\caption{The director circumference}\label{fig:diretriz}
+\end{figure}
+
+Of course the geometrical construction of figure~\ref{fig:diretriz} can be used also in reverse order; for example it may be given a line to play the role of the tangent, a point on this line to play the role of tangency, and a point not belonging to the line to play the role of a focus, then it is possible to find the other focus laying on a horizontal line passing through the given focus. It suffices to find the symmetrical point of the first focus with respect with the given line, and to draw a line passing through this symmetrical point and the point of tangency that intersects the horizontal line through the first focus, concluding that this is the second focus and that the ellipse major axis length is that of the segment joining this second focus with the above mentioned symmetrical point.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{A triangle internally tangent ellipse given one of its foci}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -1715,6 +1869,8 @@ y(t) &= \dfrac{13\cos(t)-5\cos(2t)-2\cos(3t)-\cos(4t)}{16}
one point of tangency, because the focal distance and the sum of
distances of that tangency point from the foci, is sufficient to
determine all the parameters required to draw the ellipse.
+
+ As seen in the previous subsection~\ref{ssec:diretriz}, it is sufficient to find the threes symmetrical point of The given focus with respect to to the three sides, i.e. the three lines that pass through the triangle vertices; and the constructions gives simultaneously the major axis length and the three tangency points, therefore all the elements required to draw the ellipse. to draw
\begin{figure}[!tb]\centering
\begin{Esempio}[\setfontsize{7}](0.375)
@@ -1740,27 +1896,27 @@ y(t) &= \dfrac{13\cos(t)-5\cos(2t)-2\cos(3t)-\cos(4t)}{16}
\end{figure}
- The geometrical construction is rather complicated; the steps to follow
+ The geometrical construction with help of what has been explained in
+ subsection~\ref{ssub:diretriz} is easy; the steps to follow, therefore
are the following:\enlargethispage*{\baselineskip}
\begin{itemize}[noitemsep]
\item draw the triangle and the given focus $\mathsf{F}$;
-\item Find the symmetrical points $\mathsf G_i$ of this focus with
- respect to the sides of the triangle;
+\item Find the symmetrical points $\mathsf S_i$ of this
+focus with respect to the sides of the triangle;
-\item use these three points $\mathsf G_i$ as the vertices of a triangle
- with which to draw its circumcircle, actually only its center is of
+\item use these three points $\mathsf S_i$ as the vertices of a triangle
+ with which to draw its circumcircle that turns to be the \emph{director circumference}; actually only its center is of
interest, because it represents the second focus $\mathsf F'$; the
inter focal distance $2c$; is just le length of vector $F' -F$;
-\item join with segments each symmetrical point $\mathsf G_i$ with the
+\item join with segments each symmetrical point $\mathsf S_i$ with the
second focus $\mathsf F'$ and find their intersections $\mathsf T_i$
with the triangle sides; they represent the tangency points of the
ellipse to be drawn;
-\item use one of these tangency points to find its distances from the
- foci; their sum gives the ellipse larger axis length $2a$;
+\item the radius of the director circumference is the ellipse major axix;
\item equation~\eqref{equ:axes-foci} allows to find the second axis
length; the segment that joins the foci has the required inclination
diff --git a/macros/latex/contrib/euclideangeometry/euclideangeometry.dtx b/macros/latex/contrib/euclideangeometry/euclideangeometry.dtx
index 5710287c70..7305301abf 100644
--- a/macros/latex/contrib/euclideangeometry/euclideangeometry.dtx
+++ b/macros/latex/contrib/euclideangeometry/euclideangeometry.dtx
@@ -45,7 +45,7 @@ This work consists of files:
%<package>\ProvidesPackage{euclideangeometry}%
%<readme>File README.txt for package euclideangeometry
%<*package|readme>
- [2020-02-12 v.0.1.5 Extension package for curve2e]
+ [2020-03-30 v.0.1.7 Extension package for curve2e]
%</package|readme>
%<*driver>
\documentclass{ltxdoc}\errorcontextlines=100
@@ -154,7 +154,7 @@ g\raisebox{-0.715ex}{\kern-0.26em u}\kern-0.13em\I\kern-0.14em t}\xspace}
% installed with your updated complete \TeX system installation.
% Please refer to the user manual before using this package.
-% \CheckSum{1108}
+% \CheckSum{1193}
%^^A%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%\StopEventually{}
%^^A%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -215,7 +215,8 @@ g\raisebox{-0.715ex}{\kern-0.26em u}\kern-0.13em\I\kern-0.14em t}\xspace}
% is |\Pbox| and it produces a box containing the label in math format. By
% default the point label is typeset with the math font variant produced
% by command |\mathsf|, but the macro is sufficiently versatile to allow
-% other settings; It accepts several optional arguments, therefore it syntax is particular:
+% other settings; it accepts several optional arguments, therefore it
+% syntax is particular:
%\begin{ttsyntax}
%\cs{Pbox}\parg{coordinates}\oarg{alignment}\marg{label}\oarg{diameter}\meta{$\star$}\aarg{angle}
%\end{ttsyntax}
@@ -228,7 +229,9 @@ g\raisebox{-0.715ex}{\kern-0.26em u}\kern-0.13em\I\kern-0.14em t}\xspace}
% specification, the couple \texttt{cc} is assumed; most often than
% not, the label position becomes such that when the user reviews the
% document drafts, s/he understands immediately that s/he forgot to specify
-% some reasonable \meta{alignment} codes. Think of the \meta{alignment}
+% some reasonable \meta{alignment} codes; in any case the \texttt{cc} code
+% works fine to just put the dot of a specified diameter but with an empty
+% label. Think of the \meta{alignment}
% letters as the position of the reference point with respect to the
% the \meta{label} optical center. The optional \meta{angle} argument
% produces a rotation of the whole label by that angle; it may be used
@@ -238,23 +241,27 @@ g\raisebox{-0.715ex}{\kern-0.26em u}\kern-0.13em\I\kern-0.14em t}\xspace}
%
% The optional asterisk draws a frame around the \emph{label}. Notice that
% the separator between the visible or the invisible frame and the box
-% contents varies according the the fact the the \meta{alignment}
+% contents varies according the the fact that the \meta{alignment}
% specification contains just one or two letter codes; this is useful,
% because the diagonal position of the label should be optically equal
-% to the gap that exists between the reference point and the \meta{label}
+% to the gap that exists between the reference point and the \meta{label}
% box.
%
% If the \meta{diameter} is zero, no dot is drawn, the whole \meta{label}
% is typeset with the |\mathit| math font; otherwise only the first symbol
-% of a math expression si typeset in sans serif. The presence of subscripts
+% of a math expression is typeset in sans serif. The presence of subscripts
% makes the labels appear more distant from their reference point; the same
% is true when math symbols, even without subscripts, are used, because
-% of the oblique nature of the math letters alphabet.
+% of the oblique nature of the math ‘letters’ alphabet.
%
% If some text has to be printed as a label, it suffices to surround it
% with dollar signs, that switch back to text mode when the default mode
% is the math one. With this kind of textual labels it might be convenient
% to use the optional asterisk to frame the text.
+% The final optional argument \meta{angle} (to be delimited with the
+% \texttt{<~>} signs) specifies the inclination of the label with respect
+% to the horizontal line; it is useful, for example to set a label along
+% a sloping line.
% \begin{macrocode}
\providecommand\Pbox{}
\newlength\PbDim
@@ -577,6 +584,108 @@ g\raisebox{-0.715ex}{\kern-0.26em u}\kern-0.13em\I\kern-0.14em t}\xspace}
\let\MiddlePointOf\SegmentCenter
% \end{macrocode}
%
+% Some other macros are needed to solve certain triangle problems;
+% one of such macros is the one allows to determine the length of one
+% leg of a right triangle by knowing the lengths of the hypothenuse
+% and the other leg. The syntax is the following:
+%\begin{ttsyntax}
+%\cs{LegFromHypotenuse}\meta{hypothenuse} AndOtherLeg\meta{leg1} to\meta{leg2}
+%\end{ttsyntax}
+% where the three parameters may be macros, especially the last one;
+% all of them contina scalar values.
+%
+% \begin{macrocode}
+\def\LegFromHypotenuse#1AndOtherLeg#2to#3{%
+ \edef#3{\fpeval{sqrt(#1**2-#2**2)}}}
+% \end{macrocode}
+%
+% Another useful macro determines the two intersections of a line with
+% a circumference if they exist; otherwise it issues a warning and sets
+% both output values to vector \texttt{0,0}, which, of course, is wrong,
+% but it allows to go on with typesetting, although with non sense results.
+% Warnings do not stop the compilation program, therefore their message
+% goes to the \file{.log} file and the user might not notice it; but
+% since the results are probably absurd, s/he certainly notice this
+% fact and look for messages; the user, therefore, who has carefully
+% read this user manual, immediately looks onto the \file{.log} file
+% and realises the reason of the wrong results.
+%
+% The syntax of this macro is the following:
+%\begin{ttsyntax}
+%\cs{IntersectionsOfLine}\parg{point}\parg{direction} WithCircle\parg{center}\marg{radius} to\meta{int1} and\meta{int2}
+%\end{ttsyntax}
+% where \meta{point} and \meta{direction} are the line parameters
+% that can be explicit complex values or macros; \meta{center} is
+% the circumference explicit complex value, or a macro, containing
+% the center coordinates; \meta{radius} is the scalar explicit or
+% macro radius length; The intersection points \meta{int1} and
+% \meta{ind2} are supposed to be macros that get defined with the
+% intersection point coordinates; \meta{int1} is the first intersection
+% that is determined along the line \emph{direction}. Please notice the
+% different first part of the macro name \texttt{IntersectionsOfLine}
+% compared to the macro that determines the intersection of two lines
+% \texttt{IntersectionOfLines}: two intersections and one line vs. one
+% intersection with two lines.
+% \begin{macrocode}
+\def\IntersectionsOfLine(#1)(#2)WithCircle(#3)#4to#5and#6{%
+\CopyVect#3 to\C \edef\R{#4}
+\CopyVect#1to\Pu \CopyVect#2to\Pd
+\Circlewithcenter\C radius\R
+\segment(\Pu)(\Pd)\SegmentArg(\Pu)(\Pd)to\Diru
+\edef\Dird{\fpeval{\Diru+90}}\Pbox(\C)[b]{C}[2]
+\IntersectionOfLines(\Pu)(\Diru:1)and(\C)(\Dird:1)to\Int
+\SegmentLength(\C)(\Int)to\A
+\fptest{\A > \R}{\PackageError{euclideangeometry}%
+{Distance of line \A\space larger than radius \R. No intersections}%
+{Check your data; correct and retry}}{%
+\LegFromHypotenuse\R AndOtherLeg\A to\B
+\AddVect\Int and\Diru:-\B to\Pt \edef#5{\Pt}
+\SymmetricalPointOf\Pt respect\Int to\Pq \edef#6{\Pq}
+}}
+% \end{macrocode}
+%
+% Another useful macro determines the point \meta{p2} symmetric
+% to a given point \meta{p1} with respect to a given segment the
+% end points of which are \meta{Segm1} and \meta{Segm2}:
+%\begin{ttsyntax}
+%\cs{Segment}\parg{Segm1}\parg{Segm2}SymmetricPointOf\marg{p1} to\meta{p2}
+%\end{ttsyntax}
+% where, as usual, the input data may be explicit or macro defined
+% coordinates, while the output result should be a macro name.
+% \begin{macrocode}
+\def\Segment(#1)(#2)SymmetricPointOf#3to#4{%
+\SegmentArg(#1)(#2)to\Sanguno\edef\Sangdue{\fpeval{\Sanguno+90}}
+\IntersectionOfLines(#1)(\Sanguno:1)and(#3)(\Sangdue:1)to\Smed
+\SymmetricalPointOf#3respect\Smed to#4\ignorespaces}
+% \end{macrocode}
+%
+% Another useful macro draws a circle given its \meta{center} and the
+% coordinates of the \meta{ponit} which the circumference should pass
+% through. The syntax is:
+%\begin{ttsyntax}
+%\cs{CircleThrough}\parg{[point}WithCenter\marg{center}
+%\end{ttsyntax}
+% As usual, the parameters are all explicit or macro defined complex
+% numbers.
+% \begin{macrocode}
+\def\CircleThrough#1WithCenter#2{%
+\SegmentLength(#1)(#2)to\Radius
+\Circlewithcenter#2radius\Radius}
+% \end{macrocode}
+% The above macro is the building block for a simple macro that draws
+% two circles that cross at a given point; but it is so simple that
+% it is not worth defining a macro: if the user wants to try his/her
+% ability, s/he may define:
+%\begin{flushleft}\obeylines
+%| \NewDocumentCommand{r() r() r()}{%|
+%| \CircleThrough#3 WithCenter{#1}|
+%| \CircleThrough#3 WithCenter{#2}\ignorespaces}|
+%\end{flushleft}
+% where \cs{ignorespaces} may be superfluous, but is always a safety action
+% when defining commands to be used within the \amb{picture} environment.
+% In any case see example~XXX in \file{euclideangeometry-man.pdf}
+%^^A\ref{fig:twocircles-second intersection}.
+%
%^^A%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \subsection{Triangle special points}
%^^A%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -1195,7 +1304,7 @@ g\raisebox{-0.715ex}{\kern-0.26em u}\kern-0.13em\I\kern-0.14em t}\xspace}
% The overall macro that executes all the passages described in
% the above enumeration follows; the reader can easily recognise
% the various steps, since the names of the macros are self
-% explanatory; the $G_i$ point names are the symmetrical ones
+% explanatory; the $S_i$ point names are the symmetrical ones
% to the first focus $F$; the $M_i$ points are the centers of
% symmetry; the $F'$ point is the second focus; the $T_i$ points
% are the tangency points. The macro |\EllipseWithFOcus| has the
@@ -1225,26 +1334,26 @@ g\raisebox{-0.715ex}{\kern-0.26em u}\kern-0.13em\I\kern-0.14em t}\xspace}
\IntersectionOfLines(\Pd)(\Au:1)and(\F)(\fpeval{\Au+90}:1)to\Mu
\IfBooleanTF{#1}{\Pbox(\Mt)[br]{M_3}[1.5pt]\Pbox(\Md)[t]{M_2}[1.5pt]
\Pbox(\Mu)[b]{M_1}[1.5pt]}{}
-\SymmetricalPointOf\F respect\Mu to\Gu
-\IfBooleanTF{#1}{\Pbox(\Gu)[l]{G_1}[1.5pt]}{}
-\SymmetricalPointOf\F respect \Md to\Gd
-\IfBooleanTF{#1}{\Pbox(\Gd)[t]{G_2}[1.5pt]}{}
-\SymmetricalPointOf\F respect \Mt to\Gt
-\IfBooleanTF{#1}{\Pbox(\Gt)[r]{G_3}[1.5pt]}{}
-\IfBooleanTF{#1}{\ThreePointCircle*(\Gu)(\Gd)(\Gt)}%
- {\ThreePointCircle(\Gu)(\Gd)(\Gt)}
+\SymmetricalPointOf\F respect\Mu to\Su
+\IfBooleanTF{#1}{\Pbox(\Su)[l]{S_1}[1.5pt]}{}
+\SymmetricalPointOf\F respect \Md to\Sd
+\IfBooleanTF{#1}{\Pbox(\Sd)[t]{S_2}[1.5pt]}{}
+\SymmetricalPointOf\F respect \Mt to\St
+\IfBooleanTF{#1}{\Pbox(\St)[r]{S_3}[1.5pt]}{}
+\IfBooleanTF{#1}{\ThreePointCircle*(\Su)(\Sd)(\St)}%
+ {\ThreePointCircle(\Su)(\Sd)(\St)}
\CopyVect\C to\Fp \Pbox(\Fp)[l]{F'}[1.5pt]
\IfBooleanTF{#1}{%
-\Dotline(\F)(\Gt){2}[1.5pt]
-\Dotline(\F)(\Gd){2}[1.5pt]
-\Dotline(\F)(\Gu){2}[1.5pt]}{}
-\IntersectionOfSegments(\Pu)(\Pt)and(\Fp)(\Gt)to\Tt
-\IntersectionOfSegments(\Pu)(\Pd)and(\Fp)(\Gd)to\Td
-\IntersectionOfSegments(\Pd)(\Pt)and(\Fp)(\Gu)to\Tu
+\Dotline(\F)(\St){2}[1.5pt]
+\Dotline(\F)(\Sd){2}[1.5pt]
+\Dotline(\F)(\Su){2}[1.5pt]}{}
+\IntersectionOfSegments(\Pu)(\Pt)and(\Fp)(\St)to\Tt
+\IntersectionOfSegments(\Pu)(\Pd)and(\Fp)(\Sd)to\Td
+\IntersectionOfSegments(\Pd)(\Pt)and(\Fp)(\Su)to\Tu
\IfBooleanTF{#1}{\Pbox(\Tu)[l]{T_1}[1.5pt]
\Pbox(\Td)[b]{T_2}[1.5pt]
\Pbox(\Tt)[tl]{T_3}[1.5pt]
-\Dashline(\Fp)(\Gu){1}\Dashline(\Fp)(\Gd){1}\Dashline(\Fp)(\Gt){1}}{}
+\Dashline(\Fp)(\Su){1}\Dashline(\Fp)(\Sd){1}\Dashline(\Fp)(\St){1}}{}
\DistanceAndDirOfVect\Fp minus\Tt to\DFp and\AFu
\DistanceAndDirOfVect\F minus\Tt to\DF and\AF
\SegmentCenter(\F)(\Fp)to\CE \Pbox(\CE)[b]{C}[1.5pt]
diff --git a/macros/latex/contrib/euclideangeometry/euclideangeometry.pdf b/macros/latex/contrib/euclideangeometry/euclideangeometry.pdf
index 1665a1b1f0..06df57e151 100644
--- a/macros/latex/contrib/euclideangeometry/euclideangeometry.pdf
+++ b/macros/latex/contrib/euclideangeometry/euclideangeometry.pdf
Binary files differ
diff --git a/macros/latex/contrib/hepunits/ChangeLog b/macros/latex/contrib/hepunits/ChangeLog
index dfc9c20bff..36bdb8236d 100644
--- a/macros/latex/contrib/hepunits/ChangeLog
+++ b/macros/latex/contrib/hepunits/ChangeLog
@@ -1,3 +1,24 @@
+2020-04-10 Andy Buckley <andy.buckley@cern.ch>
+
+ * Release version 2.0.0.
+
+ * Update to use siunitx.
+
+ * Refine eV and eV/c kerns, with bold font-series specifialisation.
+
+ * Change 'overc' and 'overcsq' macros to e.g. \MeVc and \MeVcsq.
+
+ * Removing 'inverse eV' units.
+
+ * Make the units non-freestanding by default, and exclude
+ non-essential convenience prefixed macros for SI units unless
+ requsted via a package option.
+
+2009-01-13 Andy Buckley <andy@insectnation.org>
+
+ * Added cross-section units of millibarns and upwards for e.g. LHC
+ total cross-sections.
+
2007-09-27 Andy Buckley <andy@insectnation.org>
* Ready for the momentous 1.1.1 release.
@@ -22,4 +43,3 @@
* Added SIunits options passing.
* Started ChangeLog.
-
diff --git a/macros/latex/contrib/hepunits/README b/macros/latex/contrib/hepunits/README
index 08e37bdd12..224f214d3d 100644
--- a/macros/latex/contrib/hepunits/README
+++ b/macros/latex/contrib/hepunits/README
@@ -2,18 +2,18 @@ hepunits --- a set of useful units for use in high energy physics
by Andy Buckley <andy@insectnation.org>
-----------------------------------------------------------
-hepunits is a LaTeX package built on the SIunits package which
-adds a collection of useful HEP units to the existing SIunits set.
-These include the energy units \MeV, \GeV, \TeV and the derived
-momentum and mass units \MeVoverc, \MeVovercsq and so on.
+hepunits is a LaTeX package built on the siunitx package which adds a collection
+of useful HEP units to the existing siunitx set. These include a refined
+definition of the \electronvolt energy unit (accounting for missing kerns),
+convenience derived units \eV, \MeV, \GeV, \TeV, their associated derived
+momentum and mass units \MeVc, \MeVcsq and so on (also with kern corrections),
+and convenience-prefixed cross-section and luminosity units.
-Additionally, some units are added for pure convenience. The
-contents of the package with the exception of the energy units
-mentioned above are subject to deprecation and addition, so please
-provide feedback on which HEP units you'd like added to the
-package.
+Additionally, some units are provided (for now) for pure convenience via the
+[sicmds] package option. Please provide feedback if you'd like to see more
+HEP-specific units added.
-This material is subject to the LaTeX Project Public License.
+This material is subject to the LaTeX Project Public License.
See http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html
for the details of that license.
diff --git a/macros/latex/contrib/hepunits/hepunits.pdf b/macros/latex/contrib/hepunits/hepunits.pdf
index b4f82024fc..2abcfa94f8 100644
--- a/macros/latex/contrib/hepunits/hepunits.pdf
+++ b/macros/latex/contrib/hepunits/hepunits.pdf
Binary files differ
diff --git a/macros/latex/contrib/hepunits/hepunits.sty b/macros/latex/contrib/hepunits/hepunits.sty
index 50b8adcd48..6cb68abfa7 100644
--- a/macros/latex/contrib/hepunits/hepunits.sty
+++ b/macros/latex/contrib/hepunits/hepunits.sty
@@ -9,164 +9,129 @@
%% Please let me know if you use hepunits and what you think of it.
%% I'll try to implement any suggested options that seem sensible!
-\def\fileversion{1.1.1}
-\def\filedate{2007/09/27}
+\def\fileversion{2.0.0}
+\def\filedate{2020/04/10}
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{hepunits}[\filedate\space High-energy physics units by Andy Buckley (v\fileversion)]
-%% Now-redundant wrapper for declaring new units
-\DeclareRobustCommand{\@NewUnit}[2]{\addunit{#1}{#2}}
-%% Option handling variables
-\def\@empty{}
+%% Option handling
\def\@yes{yes}
\def\@HEPopt@noprefixcmds{}
-\def\@SIopt@cdot{}
-\def\@SIopt@space{mediumspace}
-\def\@SIopt@qspace{thickqspace}
-\def\@SIopt@amssquare{squaren}
-\def\@SIopt@pstricks{}
-\def\@SIopt@Gray{}
-\def\@SIopt@italian{}
-\def\@SIopt@textstyle{yes}
-\def\@SIopt@binary{}
-\def\@SIopt@noams{}
-\def\@SIopt@derivedinbase{}
-\def\@SIopt@derived{}
-
-%% Option for turning off explicit SI prefix commands
+\def\@HEPopt@sicmds{}
+\def\@HEPopt@freestanding{}
+\DeclareOption{sicmds}{\def\@HEPopt@sicmds{yes}}
\DeclareOption{noprefixcmds}{\def\@HEPopt@noprefixcmds{yes}}
-
-%% Options for passing to SIunits
-\DeclareOption{cdot}{\def\@SIopt@cdot{yes}}
-\DeclareOption{thickspace}{\def\@SIopt@space{thickspace}}
-\DeclareOption{mediumspace}{\def\@SIopt@space{mediumspace}}
-\DeclareOption{thinspace}{\def\@SIopt@space{thinspace}}
-\DeclareOption{thickqspace}{\def\@SIopt@qspace{thickqspace}}
-\DeclareOption{mediumqspace}{\def\@SIopt@qspace{mediumqspace}}
-\DeclareOption{thinqspace}{\def\@SIopt@qspace{thinqspace}}
-\DeclareOption{noamssquareissue}{\def\@SIopt@amssquare{}}
-\DeclareOption{amssymb}{\def\@SIopt@amssquare{amssymb}}
-\DeclareOption{squaren}{\def\@SIopt@amssquare{squaren}}
-\DeclareOption{pstricks}{\def\@SIopt@pstricks{yes}}
-\DeclareOption{Gray}{\def\@SIopt@Gray{yes}}
-\DeclareOption{italian}{\def\@SIopt@italian{yes}}
-\DeclareOption{textstyle}{\def\@SIopt@textstyle{yes}}
-\DeclareOption{notextstyle}{\def\@SIopt@textstyle{}}
-\DeclareOption{binary}{\def\@SIopt@binary{yes}}
-\DeclareOption{noams}{\def\@SIopt@noams{yes}}
-\DeclareOption{derivedinbase}{\def\@SIopt@derivedinbase{yes}}
-\DeclareOption{derived}{\def\@SIopt@derived{yes}}
-%\DeclareOption{noderived}{\def\@SIopt@derived{}}
-
+\DeclareOption{freestanding}{\def\@HEPopt@freestanding{yes}}
\ProcessOptions
+\ifx\@HEPopt@noprefixcmds\@yes\def\@HEPopt@sicmds\@empty\fi
+
-%% Pass the SIunits yes/no options
-\ifx\@SIopt@cdot\@yes\PassOptionsToPackage{cdot}{SIunits}\fi
-\ifx\@SIopt@pstricks\@yes\PassOptionsToPackage{pstricks}{SIunits}\fi
-\ifx\@SIopt@Gray\@yes\PassOptionsToPackage{Gray}{SIunits}\fi
-\ifx\@SIopt@italian\@yes\PassOptionsToPackage{italian}{SIunits}\fi
-\ifx\@SIopt@textstyle\@yes\PassOptionsToPackage{textstyle}{SIunits}\fi
-\ifx\@SIopt@binary\@yes\PassOptionsToPackage{binary}{SIunits}\fi
-\ifx\@SIopt@noams\@yes\PassOptionsToPackage{noams}{SIunits}\fi
-\ifx\@SIopt@derivedinbase\@yes\PassOptionsToPackage{derivedinbase}{SIunits}\fi
-\ifx\@SIopt@derived\@yes\PassOptionsToPackage{derived}{SIunits}\fi
-%% Pass the SIunits "choice" options
-\ifx\@SIopt@space\@empty\else\PassOptionsToPackage{\@SIopt@space}{SIunits}\fi
-\ifx\@SIopt@qspace\@empty\else\PassOptionsToPackage{\@SIopt@qspace}{SIunits}\fi
-\ifx\@SIopt@amssquare\@empty\else\PassOptionsToPackage{\@SIopt@amssquare}{SIunits}\fi
-
-%% Get the dependancy packages, now that the options
-%% have been processed
+%% Get the dependency packages
\RequirePackage{amsmath}
-\RequirePackage{xspace}
-\RequirePackage{SIunits}
+\RequirePackage{ifthen}
+\RequirePackage{siunitx}
+
+%% Pass default config to siunitx
+\sisetup{detect-all, detect-display-math, mode=text}
+\ifx\@HEPopt@freestanding\@yes
+\sisetup{free-standing-units=true}
+\fi
+
%% -------------------------------------------------
%% Units defined below here
%% -------------------------------------------------
-\@NewUnit{\Hz}{\hertz}
-\ifx\@HEPopt@noprefixcmds\@empty
+\DeclareSIUnit{\Hz}{\hertz}
+
+\ifx\@HEPopt@sicmds\@yes
%% Lengths
-\@NewUnit{\nm}{\nano\metre}
-\@NewUnit{\micron}{\micro\metre}
-\@NewUnit{\mm}{\milli\metre}
-\@NewUnit{\cm}{\centi\metre}
+\DeclareSIUnit{\fermi}{\femto\metre}
+\DeclareSIUnit{\nm}{\nano\metre}
+\DeclareSIUnit{\micron}{\micro\metre}
+\DeclareSIUnit{\um}{\micro\metre}
+\DeclareSIUnit{\mm}{\milli\metre}
+\DeclareSIUnit{\cm}{\centi\metre}
%% Angles
-\@NewUnit{\mrad}{\milli\rad}
+\DeclareSIUnit{\mrad}{\milli\radian}
%% Times
-\@NewUnit{\as}{\atto\second}
-\@NewUnit{\fs}{\femto\second}
-\@NewUnit{\ps}{\pico\second}
-\@NewUnit{\ns}{\nano\second}
+\DeclareSIUnit{\as}{\atto\second}
+\DeclareSIUnit{\fs}{\femto\second}
+\DeclareSIUnit{\ps}{\pico\second}
+\DeclareSIUnit{\ns}{\nano\second}
%% Rates
-\@NewUnit{\mHz}{\milli\hertz}
-\@NewUnit{\kHz}{\kilo\hertz}
-\@NewUnit{\MHz}{\mega\hertz}
-\@NewUnit{\GHz}{\giga\hertz}
-\@NewUnit{\THz}{\tera\hertz}
+\DeclareSIUnit{\mHz}{\milli\hertz}
+\DeclareSIUnit{\kHz}{\kilo\hertz}
+\DeclareSIUnit{\MHz}{\mega\hertz}
+\DeclareSIUnit{\GHz}{\giga\hertz}
+\DeclareSIUnit{\THz}{\tera\hertz}
\fi
+
%% Fields
-\@NewUnit{\gauss}{G}
+\DeclareSIUnit{\gauss}{G}
%% Luminosity
-\@NewUnit{\invcmsqpersecond}{\rpsquare{\centi\metre}\usk\reciprocal{\second}}
-\@NewUnit{\invcmsqpersec}{\invcmsqpersecond}
-\DeclareRobustCommand{\lumiunits}{\invcmsqpersecond}
+\DeclareSIUnit{\invcmsq}{\centi\metre\tothe{-2}}
+\DeclareSIUnit{\invcmsqpersecond}{\invcmsq\second\tothe{-1}}
+\DeclareSIUnit{\invcmsqpersec}{\invcmsqpersecond}
%% (Inverse) cross-sections
-\@NewUnit{\invbarn}{\reciprocal\barn\xspace}
+\DeclareSIUnit{\invbarn}{\barn\tothe{-1}}
\ifx\@HEPopt@noprefixcmds\@empty
-\@NewUnit{\nanobarn}{\nano\barn\xspace}
-\@NewUnit{\picobarn}{\pico\barn\xspace}
-\@NewUnit{\femtobarn}{\femto\barn\xspace}
-\@NewUnit{\attobarn}{\atto\barn\xspace}
-\@NewUnit{\zeptobarn}{\zepto\barn\xspace}
-\@NewUnit{\yoctobarn}{\yocto\barn\xspace}
-\@NewUnit{\invnanobarn}{\nano\invbarn\xspace}
-\@NewUnit{\invpicobarn}{\pico\invbarn\xspace}
-\@NewUnit{\invfemtobarn}{\femto\invbarn\xspace}
-\@NewUnit{\invattobarn}{\atto\invbarn\xspace}
-\@NewUnit{\invzeptobarn}{\zepto\invbarn\xspace}
-\@NewUnit{\invyoctobarn}{\yocto\invbarn\xspace}
-\@NewUnit{\invnb}{\invnanobarn}
-\@NewUnit{\invpb}{\invpicobarn}
-\@NewUnit{\invfb}{\invfemtobarn}
-\@NewUnit{\invab}{\invattobarn}
-\@NewUnit{\invzb}{\invzeptobarn}
-\@NewUnit{\invyb}{\invyoctobarn}
+\DeclareSIUnit{\millibarn}{\milli\barn}
+\DeclareSIUnit{\microbarn}{\micro\barn}
+\DeclareSIUnit{\nanobarn}{\nano\barn}
+\DeclareSIUnit{\picobarn}{\pico\barn}
+\DeclareSIUnit{\femtobarn}{\femto\barn}
+\DeclareSIUnit{\attobarn}{\atto\barn}
+\DeclareSIUnit{\zeptobarn}{\zepto\barn}
+\DeclareSIUnit{\yoctobarn}{\yocto\barn}
+\DeclareSIUnit{\invnanobarn}{\nano\invbarn}
+\DeclareSIUnit{\invpicobarn}{\pico\invbarn}
+\DeclareSIUnit{\invfemtobarn}{\femto\invbarn}
+\DeclareSIUnit{\invattobarn}{\atto\invbarn}
+\DeclareSIUnit{\invzeptobarn}{\zepto\invbarn}
+\DeclareSIUnit{\invyoctobarn}{\yocto\invbarn}
+\DeclareSIUnit{\invnb}{\invnanobarn}
+\DeclareSIUnit{\invpb}{\invpicobarn}
+\DeclareSIUnit{\invfb}{\invfemtobarn}
+\DeclareSIUnit{\invab}{\invattobarn}
+\DeclareSIUnit{\invzb}{\invzeptobarn}
+\DeclareSIUnit{\invyb}{\invyoctobarn}
\fi
%% HEP energy, momentum and mass units
-\DeclareRobustCommand{\clight}{\ensuremath{c}}
-\@NewUnit{\eV}{\electronvolt\xspace}
-\@NewUnit{\inveV}{\reciprocal\electronvolt\xspace}
-\@NewUnit{\eVoverc}{\ensuremath{\eV\!/\clight}\xspace}
-\@NewUnit{\eVovercsq}{\ensuremath{\eV\!/\clight^{2}}\xspace}
+% \DeclareSIUnit{\electronvolt}{\text{e\kern-1.2\scriptspace V}}
+\DeclareSIUnit{\electronvolt}{\text{e\kern-0.15ex V}}
+\DeclareSIUnit{\eV}{\electronvolt}
+\newcommand{\@eVoverc}[1][]{\ensuremath{
+ \eV
+ \ifthenelse{\equal{\f@series}{\bfdefault}}{/}{\mkern-\medmuskip/\mkern-\thinmuskip}
+ \text{\ensuremath{c#1}}
+ }}
+\DeclareSIUnit{\electronvoltc}{\@eVoverc}
+\DeclareSIUnit{\electronvoltcsq}{\@eVoverc[^2]}
+\DeclareSIUnit{\eVc}{\@eVoverc}
+\DeclareSIUnit{\eVcsq}{\@eVoverc[^2]}
\ifx\@HEPopt@noprefixcmds\@empty
-\@NewUnit{\meV}{\milli\eV}
-\@NewUnit{\keV}{\kilo\eV}
-\@NewUnit{\MeV}{\mega\eV}
-\@NewUnit{\GeV}{\giga\eV}
-\@NewUnit{\TeV}{\tera\eV}
-\@NewUnit{\minveV}{\milli\inveV}
-\@NewUnit{\kinveV}{\kilo\inveV}
-\@NewUnit{\MinveV}{\mega\inveV}
-\@NewUnit{\GinveV}{\giga\inveV}
-\@NewUnit{\TinveV}{\tera\inveV}
-\@NewUnit{\meVoverc}{\ensuremath{\milli\eVoverc}\xspace}
-\@NewUnit{\keVoverc}{\ensuremath{\kilo\eVoverc}\xspace}
-\@NewUnit{\MeVoverc}{\ensuremath{\mega\eVoverc}\xspace}
-\@NewUnit{\GeVoverc}{\ensuremath{\giga\eVoverc}\xspace}
-\@NewUnit{\TeVoverc}{\ensuremath{\tera\eVoverc}\xspace}
-\@NewUnit{\meVovercsq}{\ensuremath{\milli\eVovercsq}\xspace}
-\@NewUnit{\keVovercsq}{\ensuremath{\kilo\eVovercsq}\xspace}
-\@NewUnit{\MeVovercsq}{\ensuremath{\mega\eVovercsq}\xspace}
-\@NewUnit{\GeVovercsq}{\ensuremath{\giga\eVovercsq}\xspace}
-\@NewUnit{\TeVovercsq}{\ensuremath{\tera\eVovercsq}\xspace}
+\DeclareSIUnit{\meV}{\milli\eV}
+\DeclareSIUnit{\keV}{\kilo\eV}
+\DeclareSIUnit{\MeV}{\mega\eV}
+\DeclareSIUnit{\GeV}{\giga\eV}
+\DeclareSIUnit{\TeV}{\tera\eV}
+\DeclareSIUnit{\meVc}{\milli\eVc}
+\DeclareSIUnit{\keVc}{\kilo\eVc}
+\DeclareSIUnit{\MeVc}{\mega\eVc}
+\DeclareSIUnit{\GeVc}{\giga\eVc}
+\DeclareSIUnit{\TeVc}{\tera\eVc}
+\DeclareSIUnit{\meVcsq}{\milli\eVcsq}
+\DeclareSIUnit{\keVcsq}{\kilo\eVcsq}
+\DeclareSIUnit{\MeVcsq}{\mega\eVcsq}
+\DeclareSIUnit{\GeVcsq}{\giga\eVcsq}
+\DeclareSIUnit{\TeVcsq}{\tera\eVcsq}
\fi
diff --git a/macros/latex/contrib/hepunits/hepunits.tex b/macros/latex/contrib/hepunits/hepunits.tex
index 325ffa1cfc..797bd90313 100644
--- a/macros/latex/contrib/hepunits/hepunits.tex
+++ b/macros/latex/contrib/hepunits/hepunits.tex
@@ -1,8 +1,10 @@
\documentclass[12pt]{article}
-\usepackage{maybemath, xspace, setspace, fancyvrb, a4wide}
-\usepackage{url, relsize, booktabs, ccaption, braket}
-\usepackage{hepunits}
+\usepackage{xspace,setspace,fancyvrb,a4wide}
+\usepackage{url,relsize,booktabs,ccaption,braket}
\usepackage[colorlinks=true,bookmarks=true]{hyperref}
+\usepackage{mathpazo,microtype}
+
+\usepackage[sicmds,freestanding]{hepunits}
\newcommand{\hepunits}{\texttt{hepunits}\xspace}
\let\OldCite\cite
@@ -14,187 +16,192 @@
\author{Andy Buckley, \texttt{andy@insectnation.org}}
\title{The \hepunits \LaTeX{} package}
-\newcommand{\Or}{\ensuremath{\vert}\xspace}
-\newcommand{\manifestsAs}{\ensuremath{\Rightarrow\quad}\xspace}
-\newcommand{\texcmd}[1]{\texttt{\char`\\#1}}
-\newcommand{\texenv}[1]{\texttt{\char`#1}}
+\newcommand{\texcmd}[1]{\texttt{\char`\\#1}}
+\newcommand{\texenv}[1]{\texttt{\char`#1}}
\newcommand{\texopt}[1]{\texttt{\char`#1}}
\newcommand{\texarg}[1]{\texttt{\char`#1}}
\newcommand{\texpkg}[1]{\texttt{\char`#1}}
\newcommand{\texcls}[1]{\texttt{\char`#1}}
-\newcommand{\texcommand}[1]{\texcmd{#1}}
+\newcommand{\texcommand}[1]{\texcmd{#1}}
\newcommand{\texoption}[1]{\texopt{#1}}
\newcommand{\texgen}[1]{\ensuremath{\braket{\text{\emph{#1}}}}}
\newenvironment{snippet}{\Verbatim}{\endVerbatim}
+
+
\begin{document}
\maketitle
-\abstract{%
- The \hepunits package extends the existing (and excellent) \texpkg{SIunits}
- package to support units commonly used in high-energy physics. HEP uses a
- rather specialised set of units to describe measurements of energies, masses,
- momenta, reaction cross-sections, luminosities and so-on. Using this package
- will provide particle physicists with a consistent and accurate way to refer
- to dimensionful HEP quantities.
-%
-}
+
+%\abstract{%
+The \hepunits~v2 package extends the existing (and excellent) \texpkg{siunitx}
+package to support units commonly used in high-energy physics. HEP uses a
+rather specialised set of units to describe measurements of energies, masses,
+momenta, reaction cross-sections, luminosities and so-on. Using this package
+provides particle physicists with a consistent and accurate way to refer to
+dimensionful HEP quantities. It additionally tweaks the often problematic
+character spacing around the \si\eV and \si\eVcsq units, as an ``eV kern''
+is not typically defined in \LaTeX{} fonts. %
+%}
+
\section{Recommended usage}
-The basic usage mode for \hepunits is to place
+The basic usage mode for \hepunits is to place |\usepackage{hepunits}|
+% %
+% \begin{snippet}
+% \usepackage{hepunits}
+% \end{snippet}
+% %
+in the preamble of your document.
+
+This loads the \texpkg{amsmath} (for \texcmd{mspace}/\texcmd{mkern}) and
+\texpkg{siunitx} packages, as well as defining new HEP units using the
+\texpkg{siunitx} mechanisms. For convenience, it also sets the \texpkg{siunitx}
+defaults to detect the surrounding text style (include displayed mathematics)
+and to use text-mode rendering of units, again to match the surrounding text
+font for numbers and unit text. If these features aren't wanted, or you want to
+set any of the myriad other \texpkg{siunitx} rendering options, call the
+\texcmd{sisetup} macro \emph{after} the |\usepackage{hepunits}| call.
+
+
+\section{Options}
+\hepunits accepts three optional arguments during import:
%
-\begin{snippet}
-\usepackage{hepunits}
-\end{snippet}
+\begin{description}
+\item[sicmds:] Also define convenience short versions of SI units, e.g.~\texcmd{cm};
+\item[noprefixcmds:] Don't define convenience SI-prefixed versions of HEP units, e.g.~\texcmd{GeV} in addition to \texcmd{eV};
+\item[freestanding:] Make the unit macros also usable outside the \texcmd{SI} and \texcmd{si} macros (equivalent to |\sisetup{free-standing-units=true}|.
+\end{description}
%
-in the preamble of your document. \hepunits also supports the \texpkg{SIunits}
-optional arguments (\texopt{thickspace}, \texopt{amssymb} and so-on), which are
-passed on directly to the \texpkg{SIunits} package. By default the
-\texopt{mediumspace}, \texopt{thickqspace}, \texopt{squaren} and
-\texopt{textstyle} options are passed, but these can be overridden.
-\texopt{amssymb} and \texopt{squaren} are considered to be mutually exclusive
-options, but you can choose to pass neither option to \texpkg{SIunits} by using
-the \hepunits \texopt{noamssquareissue} option. Additionally, the \hepunits
-\texopt{notextstyle} option can be used to turn the \texpkg{SIunits}
-\texopt{textstyle} off. On the whole, though, you should be able to use
-\hepunits with no options in most circumstances and are likely only to need them
-if you want access to the binary or derived units (using \texopt{binary} and
-\texopt{derived}/\texopt{derivedinbase} respectively).
-
-Finally, the only \hepunits-specific option is \texopt{noprefixcmds}. This is
-discussed at the end of the document and is probably only useful for macro
-language pedants!\footnote{No offence intended to macro language pedants, of course\dots}
+These can be used as follows: |\usepackage[sicmds,freestanding]{heputils}|.
\section{Requirements}
-\hepunits requires the \texpkg{SIunits}, \texpkg{xspace} and \texpkg{amsmath}
+\hepunits requires the \texpkg{siunitx} and \texpkg{amsmath}
packages to be installed as part of your \TeX{} distribution. I don't know of
any distributions for which this isn't the case, so chances are you're safe to
-just install \hepunits and use it right away!
+just install \hepunits and use it right away.
\section{Provided units}
The HEP units provided by \hepunits are listed in Tables \ref{tab:normunits} and
\ref{tab:hepunits} below. All the example outputs have been produced with a
-command like |\unit{1.0}{|\texgen{unit}|}| where \texgen{unit} is one of the
-unit commands listed in the tables.
+command like |\SI{1.0}{|\texgen{unit}|}| where \texgen{unit} is one of the unit
+commands listed in the first columns of the tables. Note that standard
+\texpkg{siunitx} parsing extensions like |\SI{1.23e-4}{\GeV}| $\to$
+\SI{1.23e-4}{\GeV}, and significant-digit control, also work but aren't shown
+here in the interests of brevity.
\begin{table}[ht]
-\centering
-\begin{tabular}{ll}
-\toprule
-Unit command & Example \\
-
-\midrule
-Lengths & \\
-\texcmd{nm} & \unit{1.0}{\nm} \\
-\texcmd{micron} & \unit{1.0}{\micron} \\
-\texcmd{mm} & \unit{1.0}{\mm} \\
-\texcmd{cm} & \unit{1.0}{\cm} \\
-
-\midrule
-Times & \\
-\texcmd{ns} & \unit{1.0}{\ns} \\
-\texcmd{ps} & \unit{1.0}{\ps} \\
-\texcmd{fs} & \unit{1.0}{\fs} \\
-\texcmd{as} & \unit{1.0}{\as} \\
-
-\midrule
-Rates & \\
-\texcmd{mHz} & \unit{1.0}{\mHz} \\
-\texcmd{Hz} & \unit{1.0}{\Hz} \\
-\texcmd{kHz} & \unit{1.0}{\kHz} \\
-\texcmd{MHz} & \unit{1.0}{\MHz} \\
-\texcmd{GHz} & \unit{1.0}{\GHz} \\
-\texcmd{THz} & \unit{1.0}{\THz} \\
-
-\midrule
-Misc. & \\
-\texcmd{mrad} & \unit{1.0}{\mrad} \\
-\texcmd{gauss} & \unit{1.0}{\gauss} \\
-
-\bottomrule
-\end{tabular}
-\caption{List of non-HEP specific units provided by \hepunits}
-\label{tab:normunits}
+ \centering
+ \begin{tabular}{lllll}
+ \toprule
+ Unit command & Normal & Italic & Bold & Math \\
+
+ \midrule
+ Lengths \\
+ \texcmd{nm} & \SI{1.0}{\nm} & \textit{\SI{1.0}{\nm}} & \textbf{\SI{1.0}{\nm}} & $x = \SI{1.0}{\nm}$ \\
+ \texcmd{um} & \SI{1.0}{\um} & \textit{\SI{1.0}{\um}} & \textbf{\SI{1.0}{\um}} & $x = \SI{1.0}{\um}$ \\
+ \texcmd{mm} & \SI{1.0}{\mm} & \textit{\SI{1.0}{\mm}} & \textbf{\SI{1.0}{\mm}} & $x = \SI{1.0}{\mm}$ \\
+ \texcmd{cm} & \SI{1.0}{\cm} & \textit{\SI{1.0}{\cm}} & \textbf{\SI{1.0}{\cm}} & $x = \SI{1.0}{\cm}$ \\
+ \texcmd{micron} & \SI{1.0}{\um} & \textit{\SI{1.0}{\um}} & \textbf{\SI{1.0}{\um}} & $x = \SI{1.0}{\um}$ \\
+
+ \midrule
+ Times \\
+ \texcmd{ns} & \SI{1.0}{\ns} & \textit{\SI{1.0}{\ns}} & \textbf{\SI{1.0}{\ns}} & $x = \SI{1.0}{\ns}$ \\
+ \texcmd{ps} & \SI{1.0}{\ps} & \textit{\SI{1.0}{\ps}} & \textbf{\SI{1.0}{\ps}} & $x = \SI{1.0}{\ps}$ \\
+ \texcmd{fs} & \SI{1.0}{\fs} & \textit{\SI{1.0}{\fs}} & \textbf{\SI{1.0}{\fs}} & $x = \SI{1.0}{\fs}$ \\
+ \texcmd{as} & \SI{1.0}{\as} & \textit{\SI{1.0}{\as}} & \textbf{\SI{1.0}{\as}} & $x = \SI{1.0}{\as}$ \\
+
+ \midrule
+ Rates \\
+ \texcmd{mHz} & \SI{1.0}{\mHz} & \textit{\SI{1.0}{\mHz}} & \textbf{\SI{1.0}{\mHz}} & $x = \SI{1.0}{\mHz}$ \\
+ \texcmd{Hz} & \SI{1.0}{\Hz} & \textit{\SI{1.0}{\Hz}} & \textbf{\SI{1.0}{\Hz}} & $x = \SI{1.0}{\Hz}$ \\
+ \texcmd{kHz} & \SI{1.0}{\kHz} & \textit{\SI{1.0}{\kHz}} & \textbf{\SI{1.0}{\kHz}} & $x = \SI{1.0}{\kHz}$ \\
+ \texcmd{MHz} & \SI{1.0}{\MHz} & \textit{\SI{1.0}{\MHz}} & \textbf{\SI{1.0}{\MHz}} & $x = \SI{1.0}{\MHz}$ \\
+ \texcmd{GHz} & \SI{1.0}{\GHz} & \textit{\SI{1.0}{\GHz}} & \textbf{\SI{1.0}{\GHz}} & $x = \SI{1.0}{\GHz}$ \\
+ \texcmd{THz} & \SI{1.0}{\THz} & \textit{\SI{1.0}{\THz}} & \textbf{\SI{1.0}{\THz}} & $x = \SI{1.0}{\THz}$ \\
+
+ \midrule
+ Misc. \\
+ \texcmd{mrad} & \SI{1.0}{\mrad} & \textit{\SI{1.0}{\mrad}} & \textbf{\SI{1.0}{\mrad}} & $x = \SI{1.0}{\mrad}$ \\
+ \texcmd{gauss} & \SI{1.0}{\gauss} & \textit{\SI{1.0}{\gauss}} & \textbf{\SI{1.0}{\gauss}} & $x = \SI{1.0}{\gauss}$ \\
+ \bottomrule
+ \end{tabular}
+ \caption{List of non-HEP specific units provided by \hepunits. Other than \texttt{\textbackslash{}gauss}, these units are only available via the \texttt{sicmds} package option.}
+ \label{tab:normunits}
\end{table}
\begin{table}[ht]
-\centering
-\begin{tabular}{ll}
-\toprule
-Unit command & Example \\
-\midrule
-Luminosities & \\
-\texcmd{invcmsqpersecond} & \unit{1.0}{\invcmsqpersecond} \\
-\texcmd{invcmsqpersec} & \unit{1.0}{\invcmsqpersec} \\
-\texcmd{lumiunits} & \unit{1.0}{\lumiunits} \\
-
-\midrule
-Cross-sections & \\
-\texcmd{barn} & \unit{1.0}{\barn} \\
-\texcmd{invbarn} & \unit{1.0}{\invbarn} \\
-\texcmd{nanobarn} & \unit{1.0}{\nanobarn} \\
-\texcmd{invnanobarn} / \texcmd{invnb} & \unit{1.0}{\invnanobarn} \\
-\texcmd{picobarn} & \unit{1.0}{\picobarn} \\
-\texcmd{invpicobarn} / \texcmd{invpb} & \unit{1.0}{\invpicobarn} \\
-\texcmd{femtobarn} & \unit{1.0}{\femtobarn} \\
-\texcmd{invfemtobarn} / \texcmd{invfb} & \unit{1.0}{\invfemtobarn} \\
-\texcmd{attobarn} & \unit{1.0}{\attobarn} \\
-\texcmd{invattobarn} / \texcmd{invab} & \unit{1.0}{\invattobarn} \\
-
-\bottomrule
-\end{tabular}
-\caption{List of HEP-specific units provided by \hepunits}
-\label{tab:hepunits}
+ \centering
+ \begin{tabular}{lllll}
+ \toprule
+ Unit command & Normal & Italic & Bold & Math \\
+ \midrule
+ Luminosities \\
+ \texcmd{invcmsq} & \SI{1.0}{\invcmsq} & \textit{\SI{1.0}{\invcmsq}} & \textbf{\SI{1.0}{\invcmsq}} & $x = \SI{1.0}{\invcmsq}$ \\
+ \texcmd{invcmsqpersecond} & \SI{1.0}{\invcmsqpersecond} & \textit{\SI{1.0}{\invcmsqpersecond}} & \textbf{\SI{1.0}{\invcmsqpersecond}} & $x = \SI{1.0}{\invcmsqpersecond}$ \\
+ \texcmd{invcmsqpersec} & \SI{1.0}{\invcmsqpersec} & \textit{\SI{1.0}{\invcmsqpersec}} & \textbf{\SI{1.0}{\invcmsqpersec}} & $x = \SI{1.0}{\invcmsqpersec}$ \\
+
+ \midrule
+ Cross-sections \\
+ \texcmd{barn} & \SI{1.23e-4}{\barn} & \textit{\SI{1.0}{\barn}} & \textbf{\SI{1.0}{\barn}} & $x = \SI{1.0}{\barn}$ \\
+ \texcmd{invbarn} & \SI{1.0}{\invbarn} & \textit{\SI{1.0}{\invbarn}} & \textbf{\SI{1.0}{\invbarn}} & $x = \SI{1.0}{\invbarn}$ \\
+ \texcmd{nanobarn} & \SI{1.0}{\nanobarn} & \textit{\SI{1.0}{\nanobarn}} & \textbf{\SI{1.0}{\nanobarn}} & $x = \SI{1.0}{\nanobarn}$ \\
+ \texcmd{invnanobarn} / \texcmd{invnb} & \SI{1.0}{\invnanobarn} & \textit{\SI{1.0}{\invnanobarn}} & \textbf{\SI{1.0}{\invnanobarn}} & $x = \SI{1.0}{\invnanobarn}$ \\
+ \texcmd{picobarn} & \SI{1.0}{\picobarn} & \textit{\SI{1.0}{\picobarn}} & \textbf{\SI{1.0}{\picobarn}} & $x = \SI{1.0}{\picobarn}$ \\
+ \texcmd{invpicobarn} / \texcmd{invpb} & \SI{1.0}{\invpicobarn} & \textit{\SI{1.0}{\invpicobarn}} & \textbf{\SI{1.0}{\invpicobarn}} & $x = \SI{1.0}{\invpicobarn}$ \\
+ \texcmd{femtobarn} & \SI{1.0}{\femtobarn} & \textit{\SI{1.0}{\femtobarn}} & \textbf{\SI{1.0}{\femtobarn}} & $x = \SI{1.0}{\femtobarn}$ \\
+ \texcmd{invfemtobarn} / \texcmd{invfb} & \SI{1.0}{\invfemtobarn} & \textit{\SI{1.0}{\invfemtobarn}} & \textbf{\SI{1.0}{\invfemtobarn}} & $x = \SI{1.0}{\invfemtobarn}$ \\
+ \texcmd{attobarn} & \SI{1.0}{\attobarn} & \textit{\SI{1.0}{\attobarn}} & \textbf{\SI{1.0}{\attobarn}} & $x = \SI{1.0}{\attobarn}$ \\
+ \texcmd{invattobarn} / \texcmd{invab} & \SI{1.0}{\invattobarn} & \textit{\SI{1.0}{\invattobarn}} & \textbf{\SI{1.0}{\invattobarn}} & $x = \SI{1.0}{\invattobarn}$ \\
+
+ \bottomrule
+ \end{tabular}
+ \caption{List of HEP-specific luminosity units provided by \hepunits.}
+ \label{tab:hepunits}
\end{table}
\begin{table}[ht]
-\centering
-\begin{tabular}{ll}
-\toprule
-Unit command & Example \\
-\midrule
-\eV-based units & \\
-\texcmd{eV} & \unit{1.0}{\eV} \\
-\texcmd{inveV} & \unit{1.0}{\inveV} \\
-\texcmd{eVoverc} & \unit{1.0}{\eVoverc} \\
-\texcmd{eVovercsq} & \unit{1.0}{\eVovercsq} \\
-\texcmd{meV} & \unit{1.0}{\meV} \\
-\texcmd{keV} & \unit{1.0}{\keV} \\
-\texcmd{MeV} & \unit{1.0}{\MeV} \\
-\texcmd{GeV} & \unit{1.0}{\GeV} \\
-\texcmd{TeV} & \unit{1.0}{\TeV} \\
-\texcmd{minveV} & \unit{1.0}{\minveV} \\
-\texcmd{kinveV} & \unit{1.0}{\kinveV} \\
-\texcmd{MinveV} & \unit{1.0}{\MinveV} \\
-\texcmd{GinveV} & \unit{1.0}{\GinveV} \\
-\texcmd{TinveV} & \unit{1.0}{\TinveV} \\
-\texcmd{meVoverc} & \unit{1.0}{\meVoverc} \\
-\texcmd{keVoverc} & \unit{1.0}{\keVoverc} \\
-\texcmd{MeVoverc} & \unit{1.0}{\MeVoverc} \\
-\texcmd{GeVoverc} & \unit{1.0}{\GeVoverc} \\
-\texcmd{TeVoverc} & \unit{1.0}{\TeVoverc} \\
-\texcmd{meVovercsq} & \unit{1.0}{\meVovercsq} \\
-\texcmd{keVovercsq} & \unit{1.0}{\keVovercsq} \\
-\texcmd{MeVovercsq} & \unit{1.0}{\MeVovercsq} \\
-\texcmd{GeVovercsq} & \unit{1.0}{\GeVovercsq} \\
-\texcmd{TeVovercsq} & \unit{1.0}{\TeVovercsq} \\
-
-\bottomrule
-\end{tabular}
-\contcaption{List of HEP-specific units provided by \hepunits (cont.)}
-\label{tab:hepunits2}
+ \centering
+ \begin{tabular}{lllll}
+ \toprule
+ Unit command & Normal & Italic & Bold & Math \\
+ \midrule
+ \eV-based units \\
+ %\multicolumn{4}{\eV-based units} \\
+ \texcmd{eV} & \SI{1.0}{\eV} & \textit{\SI{1.0}{\eV}} & \textbf{\SI{1.0}{\eV}} & $x = \SI{1.0}{\eV}$ \\
+ \texcmd{eVc} & \SI{1.0}{\eVc} & \textit{\SI{1.0}{\eVc}} & \textbf{\SI{1.0}{\eVc}} & $x = \SI{1.0}{\eVc}$ \\
+ \texcmd{eVcsq} & \SI{1.0}{\eVcsq} & \textit{\SI{1.0}{\eVcsq}} & \textbf{\SI{1.0}{\eVcsq}} & $x = \SI{1.0}{\eVcsq}$ \\
+ \texcmd{meV} & \SI{1.0}{\meV} & \textit{\SI{1.0}{\meV}} & \textbf{\SI{1.0}{\meV}} & $x = \SI{1.0}{\meV}$ \\
+ \texcmd{keV} & \SI{1.0}{\keV} & \textit{\SI{1.0}{\keV}} & \textbf{\SI{1.0}{\keV}} & $x = \SI{1.0}{\keV}$ \\
+ \texcmd{MeV} & \SI{1.0}{\MeV} & \textit{\SI{1.0}{\MeV}} & \textbf{\SI{1.0}{\MeV}} & $x = \SI{1.0}{\MeV}$ \\
+ \texcmd{GeV} & \SI{1.0}{\GeV} & \textit{\SI{1.0}{\GeV}} & \textbf{\SI{1.0}{\GeV}} & $x = \SI{1.0}{\GeV}$ \\
+ \texcmd{TeV} & \SI{1.0}{\TeV} & \textit{\SI{1.0}{\TeV}} & \textbf{\SI{1.0}{\TeV}} & $x = \SI{1.0}{\TeV}$ \\
+ \texcmd{meVc} & \SI{1.0}{\meVc} & \textit{\SI{1.0}{\meVc}} & \textbf{\SI{1.0}{\meVc}} & $x = \SI{1.0}{\meVc}$ \\
+ \texcmd{keVc} & \SI{1.0}{\keVc} & \textit{\SI{1.0}{\keVc}} & \textbf{\SI{1.0}{\keVc}} & $x = \SI{1.0}{\keVc}$ \\
+ \texcmd{MeVc} & \SI{1.0}{\MeVc} & \textit{\SI{1.0}{\MeVc}} & \textbf{\SI{1.0}{\MeVc}} & $x = \SI{1.0}{\MeVc}$ \\
+ \texcmd{GeVc} & \SI{1.0}{\GeVc} & \textit{\SI{1.0}{\GeVc}} & \textbf{\SI{1.0}{\GeVc}} & $x = \SI{1.0}{\GeVc}$ \\
+ \texcmd{TeVc} & \SI{1.0}{\TeVc} & \textit{\SI{1.0}{\TeVc}} & \textbf{\SI{1.0}{\TeVc}} & $x = \SI{1.0}{\TeVc}$ \\
+ \texcmd{meVcsq} & \SI{1.0}{\meVcsq} & \textit{\SI{1.0}{\meVcsq}} & \textbf{\SI{1.0}{\meVcsq}} & $x = \SI{1.0}{\meVcsq}$ \\
+ \texcmd{keVcsq} & \SI{1.0}{\keVcsq} & \textit{\SI{1.0}{\keVcsq}} & \textbf{\SI{1.0}{\keVcsq}} & $x = \SI{1.0}{\keVcsq}$ \\
+ \texcmd{MeVcsq} & \SI{1.0}{\MeVcsq} & \textit{\SI{1.0}{\MeVcsq}} & \textbf{\SI{1.0}{\MeVcsq}} & $x = \SI{1.0}{\MeVcsq}$ \\
+ \texcmd{GeVcsq} & \SI{1.0}{\GeVcsq} & \textit{\SI{1.0}{\GeVcsq}} & \textbf{\SI{1.0}{\GeVcsq}} & $x = \SI{1.0}{\GeVcsq}$ \\
+ \texcmd{TeVcsq} & \SI{1.0}{\TeVcsq} & \textit{\SI{1.0}{\TeVcsq}} & \textbf{\SI{1.0}{\TeVcsq}} & $x = \SI{1.0}{\TeVcsq}$ \\
+ \bottomrule
+ \end{tabular}
+ \contcaption{List of HEP-specific units provided by \hepunits (cont.)}
+ \label{tab:hepunits2}
\end{table}
Note that a lot of these units have, for convenience, been provided as explicit
commands with various SI prefixes, rather than just defining the base unit and
-using the \texpkg{SIunits} prescription for the prefixes. Let's give a demo in
-case you don't know what I'm waffling about\dots the ``usual'' \texpkg{SUunits}
+using the \texpkg{siunitx} prescription for the prefixes. Let's give a demo in
+case you don't know what I'm waffling about\dots the ``usual'' \texpkg{siunitx}
way of doing things is like this:
-|\unit{1.0}{\mega\eVoverc}|. This produces ``\unit{1.0}{\mega\eVoverc}''
-just like |\unit{1.0}{\MeVoverc}| would do.
+|\SI{1.0}{\mega\eVc}|. This produces ``\SI{1.0}{\mega\eVc}''
+just like |\SI{1.0}{\MeVc}| would do.
I've chosen to provide the explicit prefixed commands for convenience: choose
your own favourite way (the same applies even more so for most of the non-HEP
@@ -207,13 +214,13 @@ do.
\section{Summary}
\hepunits is a handy package for particle physicists who'd like their units to
-look right, with upright \micro{s} and properly italicised $c$s in the
-appropriate places. Fortunately most of the work has already been done by the
-marvellous \texpkg{SIunits} package and I've just provided a few more commands
-and an option passing wrapper on to that excellent piece of work.
+look right, with upright \si{\micro}{s}, properly italicised $c$s, and properly
+kerned \eV{s} in the appropriate places. Fortunately most of the work has
+already been done by the marvellous \texpkg{siunitx} package and I've just
+provided a few more commands and an option passing wrapper on to that excellent
+piece of work.
If you have any comments, criticism, huge cash donations etc., then please do
-send them my way. Email to |andy@insectnation.org| is preferred, but if you can
-find a way to get your message to me by carrier pigeon I'll be very impressed.
+send them my way.
\end{document}
diff --git a/macros/latex/contrib/tkz-doc/README.md b/macros/latex/contrib/tkz-doc/README.md
index ee48eb39b0..bd4e76b0d7 100644
--- a/macros/latex/contrib/tkz-doc/README.md
+++ b/macros/latex/contrib/tkz-doc/README.md
@@ -1,16 +1,22 @@
# tkz-doc — Class and package for the documentation of all tkz-* packages.
-Release 1.42c 2020/03/20
+Release 1.43c 2020/04/10
## Note
This package is highly experimental and subject to change without notice.
-
## Licence
-The scontents package may be modified and distributed under the terms and
-conditions of the [LaTeX Project Public License](https://www.latex-project.org/lppl/), version 1.3c or greater.
+This work may be distributed and/or modified under the
+conditions of the LaTeX Project Public License, either version 1.3
+of this license or (at your option) any later version.
+The latest version of this license is in
+[LaTeX Project Public License](https://www.latex-project.org/lppl/)
+and version 1.3 or later is part of all distributions of LaTeX
+version 2005/12/01 or later.
+This work has the LPPL maintenance status “maintained”.
+The Current Maintainer of this work is Alain Matthes.
## Installation
@@ -27,11 +33,12 @@ installation `TDS` tree or in your `TEXMFHOME`:
## How to use it
-1. If you want to compile the documentation of a `tkz-*` package, yuo need to use
-the lualatex engine.
+1. If you want to compile the documentation of a `tkz-*` package, you need to use the lualatex engine.
+
+## History
-2. I added in the version 1.4, an option called `cadre`. If you want to draw the
-frame of the cover, you need to use this option. In this case, you need to
+- v 1.43 Correction of bug about the color. Remove the library `babel` of `TikZ`
+- v 1.42 I added in the version 1.4, an option called `cadre`. If you want to draw the frame of the cover, you need to use this option. In this case, you need to
install the font `orna4`. By default, no frame.
## Author
diff --git a/macros/latex/contrib/tkz-doc/latex/couverture.tex b/macros/latex/contrib/tkz-doc/latex/couverture.tex
index ade0ca4551..88df6f1036 100644
--- a/macros/latex/contrib/tkz-doc/latex/couverture.tex
+++ b/macros/latex/contrib/tkz-doc/latex/couverture.tex
@@ -13,9 +13,9 @@
% The Current Maintainer of this work is Alain Matthes.
%<--------- Couverture des documentations --------------------------------
-\def\fileversion{1.4c}
-\def\filedate{2020/03/20}
-\typeout{2020/03/20 1.4c couverture.tex}
+\def\fileversion{1.43c}
+\def\filedate{2020/04/10}
+\typeout{2020/04/10 1.43c couverture.tex}
%<------------------ Make Title ------------------------------------------
\renewcommand\maketitle{%
diff --git a/macros/latex/contrib/tkz-doc/latex/tkz-doc.cfg b/macros/latex/contrib/tkz-doc/latex/tkz-doc.cfg
index 9ab589fc50..2f3e98a2ab 100644
--- a/macros/latex/contrib/tkz-doc/latex/tkz-doc.cfg
+++ b/macros/latex/contrib/tkz-doc/latex/tkz-doc.cfg
@@ -19,9 +19,9 @@
% variable.
%===============================================================================
-\def\fileversion{1.4c}
-\def\filedate{2020/03/20}
-\typeout{2020/03/20 1.4c tkz-doc.cfg}
+\def\fileversion{1.43c}
+\def\filedate{22020/04/10}
+\typeout{2020/04/10 1.43c tkz-doc.cfg}
% ============= colors =========================================================
@@ -48,7 +48,7 @@
\colorlet{codeonlybackground}{lightgray!30}
\colorlet{numbackground}{white}
\colorlet{textcodecolor}{darkgray}
-\colorlet{numcolor}{MidnightBlue}
+\colorlet{numcolor}{black}
\definecolor{Salmon}{RGB}{178,51,51}
\definecolor{BrickRed}{RGB}{233,49,16}
@@ -72,7 +72,7 @@
\newcommand*{\tkzHand}{\ \\\llap{\textcolor{red}{\lefthand\hskip1em}}}
\newcommand*{\tkzBomb}{\ \\\llap{\textcolor{red}{\bomb\hskip1em}}}
\newcommand*{\tkzTwoBomb}{\ \\\llap{\textcolor{red}{\bomb\ \bomb\hskip1em}}}
-\newcommand*{\tkzname}[1]{\textbf{\texttt{\textcolor{MidnightBlue}{#1}}}}
+\newcommand*{\tkzname}[1]{\textbf{\texttt{\textcolor{black}{#1}}}}
\newcommand*{\tkzimp}[1]{\textbf{#1}}
\newcommand*{\tkzHandBomb}{\ \\\llap{\textcolor{red}{\lefthand\ \bomb\hskip1em}}}
\providecommand\LaTeX{L\kern-.36em\raise.3ex\hbox{\sc a}\kern-.15em\TeX}
diff --git a/macros/latex/contrib/tkz-doc/latex/tkz-doc.cls b/macros/latex/contrib/tkz-doc/latex/tkz-doc.cls
index b78883f11c..1b74679f6c 100644
--- a/macros/latex/contrib/tkz-doc/latex/tkz-doc.cls
+++ b/macros/latex/contrib/tkz-doc/latex/tkz-doc.cls
@@ -8,19 +8,16 @@
% http://www.latex-project.org/lppl.txt
% and version 1.3 or later is part of all distributions of LaTeX
% version 2005/12/01 or later.
-%
% This work has the LPPL maintenance status “maintained”.
-%
% The Current Maintainer of this work is Alain Matthes.
-%
% tkz-doc class for use with the tkz documentation
% ( AlterMundus Collection ).
%
%% Objet : Classe LaTeX et Styles pour créer des documentations.
%<-------------- Définitions relatives au package --------------------------->
\newcommand*{\PackageName}{tkz-doc}
-\newcommand*{\PackageVersion}{1.4c}
-\newcommand*{\filedate}{2020/03/20}
+\newcommand*{\PackageVersion}{1.43c}
+\newcommand*{\filedate}{2020/04/10}
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{scrartcl}}
@@ -83,13 +80,9 @@
\newcounter{cnt}\setcounter{cnt}{1}
\setcounter{secnumdepth}{3}%
\setcounter{tocdepth}{3}
-\color{blue}
%<------------------ Éxécution et chargement -----------------------------
-
-
\RequirePackage{tikz}
-\usetikzlibrary{babel,
- decorations.shapes,
+\usetikzlibrary{decorations.shapes,
decorations.text,
decorations.pathreplacing,
decorations.pathmorphing,
@@ -121,7 +114,7 @@
\newenvironment{NewMacroBox}[2]{%
\parindent=0pt
\renewcommand*{\ActivBoxName}{#1}
-\def\FrameCommand{\color{myblue}{\vrule width 1pt\hspace{3pt}}}%
+\def\FrameCommand{\color{MidnightBlue}{\vrule width 1pt\hspace{3pt}}}%
\MakeFramed{\advance\hsize-\width}%
\noindent
\makebox[0pt][l]{%
@@ -178,7 +171,7 @@
\noindent
% \ignorespaces\tkzcname{#1#3}
\Ienv{#1}
-\color{myblue}}{%
+\color{MidnightBlue}}{%
\par\noindent%
\makebox[0pt][l]{%
\hspace{-6pt}%
diff --git a/macros/latex/contrib/tkz-doc/latex/tkzexample.sty b/macros/latex/contrib/tkz-doc/latex/tkzexample.sty
index 1aa7fbefb5..c564a0f0d1 100644
--- a/macros/latex/contrib/tkz-doc/latex/tkzexample.sty
+++ b/macros/latex/contrib/tkz-doc/latex/tkzexample.sty
@@ -1,6 +1,3 @@
-% H I G H L Y E X P E R I M E N T A L
-%
-% encoding : utf8
% Documentation of tkz-euclide
% Copyright 2020 Alain Matthes
% This work may be distributed and/or modified under the
@@ -21,10 +18,10 @@
% from the file pgfmanual-en-macros.tex
% (Copyright 2006 by Till Tantau)
% See the file doc/generic/pgf/licenses/LICENSE for more details.
-%
+% H I G H L Y E X P E R I M E N T A L
%<--------------------------------------------------------------------------->
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{tkzexample}[2011/06/04 v1.1c (code and graphic ) ]
+\ProvidesPackage{tkzexample}[2020/04/10 v1.43c (code and graphic)]
\RequirePackage{calc,mdframed,fancyvrb}
\newif\iftkzcodesaved
\DeclareOption{saved}{\tkzcodesavedtrue}
diff --git a/macros/latex/contrib/tkz/tkz-tab/README.md b/macros/latex/contrib/tkz/tkz-tab/README.md
new file mode 100644
index 0000000000..5749247416
--- /dev/null
+++ b/macros/latex/contrib/tkz/tkz-tab/README.md
@@ -0,0 +1,44 @@
+Release 2.1c 2020/04/10
+
+## Description
+
+The `tkz-tab` package is built on top of PGF and its associated front-end,
+ TikZ and is a (La)TeX-friendly drawing package. The aim is to provide some
+useful macros to build tables showing variations of functions as they are
+used in France.
+These macros may be used by only LaTeX TeX users. The documentation is in
+ French.
+
+## Licence
+
+This work may be distributed and/or modified under the
+conditions of the LaTeX Project Public License, either version 1.3
+of this license or (at your option) any later version.
+The latest version of this license is in
+[LaTeX Project Public License](https://www.latex-project.org/lppl/)
+ and version 1.3 or later is part of all distributions of LaTeX version 2005/12/01 or later.
+
+This work has the LPPL maintenance status “maintained”.
+
+The Current Maintainer of this work is Alain Matthes.
+
+
+## Requirements
+
+The package compiles with utf8, pdflatex and lualatex.
+The package loads `TikZ` and you can use it.
+
+## Documentation
+
+Documentation for `tkz-tab` is available on `CTAN`. You will soon be able to find examples on my site [http://altermundus.fr](http://altermundus.fr).
+
+
+## History
+
+- v 2.1 correction of bugs and add examples in the documentation
+
+## Author
+
+Alain Matthes, 5 rue de Valence, Paris 75005, al (dot) ma (at) mac (dot) com
+
+
diff --git a/macros/latex/contrib/tkz/tkz-tab/doc/TKZdoc-tab.pdf b/macros/latex/contrib/tkz/tkz-tab/doc/TKZdoc-tab.pdf
new file mode 100644
index 0000000000..fca8221a5e
--- /dev/null
+++ b/macros/latex/contrib/tkz/tkz-tab/doc/TKZdoc-tab.pdf
Binary files differ
diff --git a/macros/latex/contrib/tkz/tkz-tab/doc/latex/TKZdoc-tab-adapt.tex b/macros/latex/contrib/tkz/tkz-tab/doc/latex/TKZdoc-tab-adapt.tex
new file mode 100644
index 0000000000..8e2233e103
--- /dev/null
+++ b/macros/latex/contrib/tkz/tkz-tab/doc/latex/TKZdoc-tab-adapt.tex
@@ -0,0 +1,526 @@
+\section{Personnalisation des tableaux}\label{pers}
+
+\subsection{\texttt{\textcolor{red}{help}} : option commune aux principales macros}
+
+\subsubsection{\texttt{\textcolor{red}{help}} : option de \addbs{tkzTabInit}}
+Cette option permet de connaître la structure d'un tableau. \tkzname{deltacl=1} permet d'espacer un peu les points et les labels
+
+\begin{tkzexample}[small]
+ \begin{tikzpicture}
+ \tkzTabInit[deltacl=1,espcl=8,help]%
+ {$x$/1,Signe\\ de $\dfrac{1}{x}$/1.5/1.5,Variation\\ de $\ln$/2}%
+ {$0$,$+\infty$}%
+ \end{tikzpicture}
+\end{tkzexample}
+
+
+\subsubsection{\texttt{\textcolor{red}{help}} : option de \addbs{tkzTabLine}}
+Afin de mieux voir les labels il est préférable de pas employer l'option \tkzname{help} en même temps sur toutes les macros.
+%\begin{tkzexample}[small]
+ \begin{tikzpicture}
+ \tkzTabInit[deltacl=1,espcl=8]%
+ {$x$/1,Signe\\ de $\dfrac{1}{x}$/1.5/1.5,Variation\\ de $\ln$/2}%
+ {$0$,$+\infty$}%
+ \tkzTabLine[help]{,,}%
+ \tkzTabVar{D-/ $-\infty$, +/$+\infty$}
+ \end{tikzpicture}
+%\end{tkzexample}
+%
+% \subsubsection{\texttt{\textcolor{red}{help}} : option de \addbs{tkzTabVar}}
+% Cette option montre les nodes qui sont utilisés pour le tracé des flèches de variations. Afin de ne pas multiplier les labels de nodes, seuls les nodes utilisés ont été nommés. Une flèche débute par un node nommé \tkzname{FR} (right = droite du node) et se termine par un node nommé \tkzname{FL} (left gauche du node)
+% \begin{tkzexample}[small]
+% \begin{tikzpicture}
+% \tkzTabInit[deltacl=1,espcl=8]%
+% {$x$/1,Signe\\ de $\dfrac{1}{x}$/1.5/1.5,Variation\\ de $\ln$/1.5}%
+% {$0$,$+\infty$}%
+% \tkzTabLine{d,+,}%
+% \tkzTabVar [help]{D-/ $-\infty$, +/$+\infty$ }
+% \end{tikzpicture}
+% \end{tkzexample}
+%
+% Voici un exemple plus complexe
+%
+% \begin{tkzexample}[small]
+% \begin{tikzpicture}
+% \tkzTabInit
+% {$x$ /1,
+% $\dfrac{-1}{x^2}\ {\E}^{\left(\dfrac{1}{x}\right)}$ /1.5,
+% ${\E}^{\left(\dfrac{1}{x}\right)}$ /2}%
+% {$-\infty$ ,$0$ , $+\infty$}%
+% \tkzTabLine{t,-,d,-,t}
+% \tkzTabVar[help]{ + / $1$ ,-CD+ / $0$ / $+\infty$ , - / $1$ }%
+% \end{tikzpicture}
+% \end{tkzexample}
+%
+% ce qui donne
+% \begin{tkzexample}[small]
+% \begin{tikzpicture}
+% \tkzTabInit
+% {$x$ /1,
+% $\dfrac{-1}{x^2}\ {\E}^{\left(\dfrac{1}{x}\right)}$ /1.5,
+% ${\E}^{\left(\dfrac{1}{x}\right)}$ /2}%
+% {$-\infty$ ,$0$ , $+\infty$}%
+% \tkzTabLine{t,-,d,-,t}
+% \tkzTabVar{ + / $1$ ,-CD+ / $0$ / $+\infty$ , - / $1$ }%
+% \end{tikzpicture}
+% \end{tkzexample}
+%
+% La connaissance de tous ces points et nodes permet de personnaliser les tableaux. Quelques explications supplémentaires sont données dans le paragraphe suivant.
+%
+% \subsection{Les structures}
+% \subsubsection{La structure principale}
+%
+% La macro \tkzname{tkzTabInit} définit les principaux \tkzname{nodes}. Ce sont les arguments de cette macro qui déterminent le nombre de nodes.
+%
+% Par exemple, si le tableau comporte 3 lignes alors les nodes $T00$, $T01$, $T02$, $T10$, $T11$, $T12$, $T03$, $T13$ et $T23$ sont créés, ainsi que $F0$, $F1$ et $F2$. $Tij$ représente un point de la colonne $i$ et de la ligne $j$. Pourquoi cet ordre ? je n'en sais rien
+%
+% \begin{tkzexample}[vbox,small]
+% \begin{tikzpicture}
+% \tkzTabInit[color=false,espcl=4,lgt=3]{%
+% \colorbox{red}{\textcolor{white}{$\scriptscriptstyle F0$}} / 1,%
+% \colorbox{red}{\textcolor{white}{$\scriptscriptstyle F1$}} / 1,%
+% \colorbox{red}{\textcolor{white}{$\scriptscriptstyle F2$}} / 1}%
+% { , }%
+% \foreach \ligne in {0,...,3}{%
+% \foreach \colonne in {0,1,2}{%
+% \draw[fill=blue] (T\colonne\ligne) circle(2pt) ;}}
+% \draw (T00) node[above right=4pt] {\scriptsize T00};
+% \draw (T01) node[above right=4pt] {\scriptsize T01};
+% \draw (T02) node[above right=4pt] {\scriptsize T02};
+% \draw (T03) node[above right=4pt] {\scriptsize T03};
+% \draw (T20) node[above right=4pt] {\scriptsize T20};
+% \draw (T21) node[above right=4pt] {\scriptsize T21};
+% \draw (T22) node[above right=4pt] {\scriptsize T22};
+% \draw (T23) node[above right=4pt] {\scriptsize T23};
+% \draw (T10) node[above right=4pt] {\scriptsize T10};
+% \draw (T13) node[above right=4pt] {\scriptsize T13};
+% \draw (T11) node[above right=3pt] {\scriptsize T11};
+% \draw (T12) node[above right=3pt] {\scriptsize T12};
+% \tikzset{bluesty/.style={fill=blue,<-,>=latex,shorten <=2pt}}
+% \draw[bluesty] (T20) -- +(2,0) node[right,blue]{ligne $0$};
+% \draw[bluesty] (T21) -- +(2,0) node[right,blue]{ligne $1$};
+% \draw[bluesty] (T22) -- +(2,0) node[right,blue]{ligne $2$};
+% \draw[bluesty] (T23) -- +(2,0) node[right,blue]{ligne $3$};
+% \draw[bluesty] (T03) -- +(0,-2) node[midway,above,sloped,blue]{colonne $0$};
+% \draw[bluesty] (T13) -- +(0,-2) node[midway,above,sloped,blue]{colonne $1$};
+% \draw[bluesty] (T23) -- +(0,-2) node[midway,above,sloped,blue]{colonne $2$};
+% \end{tikzpicture}
+% \end{tkzexample}
+%
+%
+% Ainsi la structure principale de ce tableau possède exactement trois filets verticaux et quatre horizontaux. Soient \tkzname{12} points principaux définis par les intersections et trois nodes $F0$, $F1$ et $F2$.
+%
+% \subsubsection{La structure interne}
+% J'appelle structure interne, l'ensemble des points et nodes qui vont être définis par les antécédents dans la partie droite du tableau. Le second argument de la macro \tkzname{tkzTabInit} définit cette structure. Cet argument donne le nombre de labels (antécédents) qui vont être placés sur la première ligne et qui vont être les repères pour les lignes de signes et de variations.
+%
+%
+% \begin{tkzexample}[vbox,small]
+% \begin{tikzpicture}
+% \tkzTabInit[color=false,espcl=4,lgt=3]{%
+% \colorbox{red} {\textcolor{white}{$\scriptscriptstyle F0$}} / 1,
+% \colorbox{red} {\textcolor{white}{$\scriptscriptstyle F1$}} / 1,
+% \colorbox{red} {\textcolor{white}{$\scriptscriptstyle F2$}} / 1}{%
+% \colorbox{blue}{\textcolor{white}{$\scriptscriptstyle L1$}},
+% \colorbox{blue}{\textcolor{white}{$\scriptscriptstyle L2$}},
+% \colorbox{blue}{\textcolor{white}{$\scriptscriptstyle L3$}}}%
+% \foreach \ligne in {0,...,3}{%
+% \foreach \colonne in {0,1,2}{%
+% \draw[fill=blue] (T\colonne\ligne) circle(2pt) ;}}
+% \foreach \colonne in {1,2,3}{%
+% \draw[fill=red] (N\colonne 0) circle(2pt)%
+% node[above,red] {\scriptsize N{\colonne 0}};}
+% \foreach \ligne in {1,2,3}{%
+% \foreach \colonne in {1,2,3}{%
+% \draw[fill=red] (N\colonne\ligne) circle(2pt)%
+% node[above,red] {\scriptsize N\colonne\ligne};}}
+% \foreach \ligne in {0,1,2,3}{%
+% \foreach \colonne in {1,2}{%
+% \draw[fill=green] (M\colonne\ligne) circle(2pt)
+% node[below right,green] {\scriptsize M\colonne\ligne};}}
+% \tikzset{redsty/.style={fill=red,<-,>=latex,shorten <=2pt}}
+% \draw[redsty] (T20) -- +(2,0) node[right,red]{ligne $0$};
+% \draw[redsty] (T21) -- +(2,0) node[right,red]{ligne $1$};
+% \draw[redsty] (T22) -- +(2,0) node[right,red]{ligne $2$};
+% \draw[redsty] (T23) -- +(2,0) node[right,red]{ligne $3$};
+% \draw[redsty] (N13) -- +(0,-2) node[midway,above,sloped,red]{colonne $1$};
+% \draw[redsty] (N23) -- +(0,-2) node[midway,above,sloped,red]{colonne $2$};
+% \draw[redsty] (N33) -- +(0,-2) node[midway,above,sloped,red]{colonne $3$};
+% \end{tikzpicture}
+% \end{tkzexample}
+%
+%
+% \subsubsection{La structure secondaire}
+% Les points $Zij$, $Sij$ sont définis à partir de la structure interne (voir le tableau précédent) mais seulement avec l'usage de la macro \tkzcname{tkzTabLine}. Les points $FRij$ et $FLij$ eux sont définis avec l'usage de la macro \tkzcname{tkzTabVar}
+%
+% \begin{tkzexample}[small]
+% \begin{tikzpicture}
+% \tkzTabInit
+% {$x$ /1,
+% $\dfrac{-1}{x^2}\ {\E}^{\left(\dfrac{1}{x}\right)}$ /1.5,
+% ${\E}^{\left(\dfrac{1}{x}\right)}$ /2}%
+% {$-\infty$ ,$0$ , $+\infty$}%
+% % \tkzTabLine[help]{t , - , d , - , t}
+% \tkzTabVar[help]{ + / $1$ ,-CD+ / $0$ / $+\infty$ , - / $1$ }%
+% \end{tikzpicture}
+% \end{tkzexample}
+% \subsubsection{Conclusion}
+% \begin{tikzpicture}
+%
+% \tkzTabInit[color=false,espcl=4,lgt=3,deltacl=1]{%
+% \colorbox{red}{\textcolor{white} {$\scriptscriptstyle F0$}} / 1,
+% \colorbox{red}{\textcolor{white} {$\scriptscriptstyle F1$}} / 2,
+% \colorbox{red}{\textcolor{white} {$\scriptscriptstyle F2$}} / 2}{%
+% \colorbox{blue}{\textcolor{white}{$\scriptscriptstyle L1$}} ,
+% \colorbox{blue}{\textcolor{white}{$\scriptscriptstyle L2$}} ,
+% \colorbox{blue}{\textcolor{white}{$\scriptscriptstyle L3$}} }
+% \foreach \ligne in {0,...,3}{%
+% \foreach \colonne in {0,1,2}{%
+% \draw[fill=blue] (T\colonne\ligne) circle(2pt) ;}}
+% \draw (T00) node[left = 4pt] {\scriptsize T00};
+% \draw (T01) node[left = 4pt] {\scriptsize T01};
+% \draw (T02) node[left = 4pt] {\scriptsize T02};
+% \draw (T03) node[left = 4pt] {\scriptsize T03};
+% \draw (T20) node[right = 4pt] {\scriptsize T20};
+% \draw (T21) node[right = 4pt] {\scriptsize T21};
+% \draw (T22) node[right = 4pt] {\scriptsize T22};
+% \draw (T23) node[right = 4pt] {\scriptsize T23};
+% \draw (T10) node[above = 4pt] {\scriptsize T10};
+% \draw (T13) node[below = 4pt] {\scriptsize T13};
+% \draw (T11) node[above left= 3pt] {\scriptsize T11};
+% \draw (T12) node[above left= 3pt] {\scriptsize T12};
+% \foreach \colonne in {1,2,3}
+% {\draw[fill=red] (N\colonne 0) circle(2pt)%
+% node[above right] {\scriptsize N{\colonne 0}};}
+% \foreach \ligne in {1,2,3}
+% { \foreach \colonne in {1,2,3}
+% {\draw[fill=red] (N\colonne\ligne) circle(2pt)%
+% node[below right] {\scriptsize N\colonne\ligne};}}
+% \foreach \ligne in {0,1,2,3}
+% { \foreach \colonne in {1,2}
+% {\draw[fill=green] (M\colonne\ligne) circle(2pt)%
+% node[below right] {\scriptsize M\colonne\ligne};}}
+% \foreach \colonne in {1,2}
+% {\path (M\colonne 1) to (M\colonne 2)%
+% node[midway](S\colonne 1) {};
+% \draw[fill=yellow] (S\colonne 1) circle(2pt)%
+% node[below right] {\scriptsize S\colonne 1};}
+% \foreach \colonne in {1,2,3}
+% {\path (N\colonne 1) to (N\colonne 2)%
+% node[midway](Z\colonne 1) {};
+% \draw[fill=yellow] (Z\colonne 1) circle(2pt)%
+% node[below right] {\scriptsize Z\colonne 1};}
+% \end{tikzpicture}
+%
+% \bigskip
+% \begin{tabular}{ccllc}
+% \toprule
+% type & notation & repère & conditions & utilisation\\
+% \midrule
+% \tikz \draw[fill=red] (0,0) rectangle (0.3,0.3) node(X) {}; & Fj & ligne & $0\leq j\leq p$ & expressions,formules \\
+% \midrule
+% \tikz \draw[fill=blue] (0,0) rectangle (0.3,0.3)node(X) {}; & Li & colonne& $1\leq i\leq n$ & valeurs significatives pour les variations \\
+% \midrule
+% \tikz \draw[fill=blue] circle (2pt)node(X) {}; &%
+% Tij & colonne& $0\leq i\leq 2$ ;& structure principale du tableau\\
+% & & ligne &$0\leq j\leq p$ & il existe une ligne $0$ et une colonne $0$\\
+% \midrule
+% \tikz \draw[fill=green] circle (2pt)node(X) {}; & Nij &colonne &$1\leq i\leq n$ & structure interne du tableau \\
+% & & ligne &$0\leq j\leq p$ & \\
+% \midrule
+% \tikz \draw[fill=green] circle (2pt)node(X) {}; & Mij &colonne &$1\leq i\leq n$ & structure interne du tableau \\
+% & & ligne &$0\leq j\leq p$ & \\
+% \midrule
+% \tikz \draw[fill=yellow] circle (2pt)node(X) {}; & Sij &colonne &$1\leq i\leq n$ & structure secondaire du tableau \\
+% & & ligne &$1\leq j\leq q$ & \\
+% \midrule
+% \tikz \draw[fill=yellow] circle (2pt)node(X) {};& Zij &colonne &$1\leq i\leq n$ & structure secondaire du tableau \\
+% & & ligne &$1\leq j\leq q$ & \\
+% \midrule
+% \end{tabular}
+%
+%
+% \subsection{Ajustement des dimensions}
+% Nous avons vu précédemment que l'on pouvait modifier certaines dimensions à l'aide de l'emploi d'options. Le code du tableau suivant utilise les structures du tableau
+%
+% \begin{tkzexample}[small]
+% \begin{tikzpicture}
+% \tkzTabInit
+% {$x$ / 1}
+% {$a_1$ , $a_2$ , $a_3$}
+% \begin{scope}[arstyle/.style={>=latex,#1,<->}]
+% \draw[arstyle=blue] (N10) to node[above,color=blue]%
+% {\scriptsize $ espcl = 2$ cm} (N20);
+% \draw[arstyle=blue] (N20) to node[above,color=blue]%
+% {\scriptsize $ espcl = 2$ cm} (N30);
+% \draw[arstyle=red] (T10) to node[above=12pt,color=red]%
+% {\scriptsize $ deltacl = 0,5$ cm} (N10);
+% \draw[arstyle=red] (N30) to node[above=12pt,color=red]%
+% {\scriptsize $ deltacl = 0,5$ cm} (T20);
+% \draw[arstyle=blue] (T00) to node[above,color=blue]%
+% {\scriptsize $ lgt = 2$ cm} (T10);
+% \end{scope}
+% \end{tikzpicture}
+% \end{tkzexample}
+%
+% \subsubsection{\texttt{\textcolor{red}{scale}} permet d'ajuster la taille d'un tableau}
+% \index{scale}
+%
+%
+% \begin{tkzexample}[width=7cm,small]
+% \begin{tikzpicture}[scale=.8]
+% \tkzTabInit[lgt=3]{ $x$ / 1 , $\ln(x)$ /2}
+% { $0$ , $+\infty$ }
+% \end{tikzpicture}
+% \end{tkzexample}
+%
+% Il est aussi possible d'utiliser \tkzname{xscale} et \tkzname{yscale}.
+%
+% \begin{tkzexample}[width=7cm,small]
+% \begin{tikzpicture}[xscale=.8,yscale=1.5]
+% \tkzTabInit[lgt=3]{ $x$ / 1 , $\ln(x)$ /2}
+% { $0$ , $+\infty$ }
+% \end{tikzpicture}
+% \end{tkzexample}
+%
+%
+% \subsection{Exemples d'utilisation}
+% \subsubsection{Une croix sur un tableau}
+%
+% \begin{tkzexample}[vbox,small]
+% \begin{tikzpicture}
+% \tkzTab{$x$ / 1, $f'(x)$ / 1.5, $f(x)$ / 3}%
+% {$-5$ , $-2$ , $1$ , $+\infty$}%
+% {d,+,0,-,0,+,}
+% { D-/ / $-\infty$ ,%
+% +/ $\dfrac{2}{3}$ / ,%
+% -/ $0$ / ,%
+% +/ $+\infty$ / }%
+% \draw[line width=2pt,red] (T00) to (T23);
+% \draw[line width=2pt,red] (T03) to (T20);
+% \end{tikzpicture}
+% \end{tkzexample}
+%
+% \subsubsection{Une croix sur une case}
+%
+% L'intérêt est de faciliter la personnalisation d'un tableau. Par exemple, si nous souhaitons ajouter un tracé comme une croix dans une case, on peut procéder ainsi :
+%
+% \begin{tkzexample}[small]
+% \begin{tikzpicture}
+% \tkzTabInit%
+% {$x$ /1,
+% $x^2-3x+2$ /1,
+% $(x-\E)\ln x$ /1}
+% {$0$ , $\E$ , $+\infty$}
+% \draw[red] (T12) -- (T23);
+% \draw[red] (T13) -- (T22);
+% \end{tikzpicture}
+% \end{tkzexample}
+%
+% \subsubsection{Mise en évidence de signes}
+% \medskip
+% On peut ainsi placer des signes sur la seconde ligne qui n'a pas été mise en forme par \tkzname{tkzTabLine} mais en connaissant un peu la programmation à l'aide de \TIKZ.
+%
+% \begin{tkzexample}[code only]
+% \path (M11)--(M12) node[midway,draw,fill=red!10] {-};
+% \path (M31)--(M32) node[midway,draw,fill=blue!10] {+};
+% \end{tkzexample}
+%
+% \begin{tkzexample}[small]
+% \begin{tikzpicture}
+% \tkzTabInit{$x$ / 1, $\dfrac{2x}{x^2-1}$ /1}
+% {$-\infty$ , $-1$ , $1$ , $+\infty$}
+% \path (M11)--(M12) node[midway,draw,fill=red!10] {-};
+% \path (M31)--(M32) node[midway,draw,fill=blue!10] {+};
+% \end{tikzpicture}
+% \end{tkzexample}
+%
+% mais on peut aussi utiliser un node de la structure secondaire pour cela on utilise
+% \begin{tkzexample}[]
+% \tkzname{tkzTabLine}[help] \end{tkzexample}
+%
+% \begin{tikzpicture}
+% \tkzTabInit{$x$ / 1, $\dfrac{2x}{x^2-1}$ /1}
+% {$-\infty$ , $-1$ , $1$ , $+\infty$}
+% % \tkzTabLine[help]{,,,,,,}
+% \end{tikzpicture}
+%
+% Ensuite il reste à créer des nodes
+% \begin{tkzexample}[code only]
+% \node[draw,fill=red!10] at (S11) {-};
+% \node[draw,fill=red!10] at (S31) {+}; \end{tkzexample}
+%
+%
+%
+% \begin{tkzexample}[small]
+% \begin{tikzpicture}
+% \tkzTabInit{$x$ / 1, $\dfrac{2x}{x^2-1}$ /1}
+% {$-\infty$ , $-1$ , $1$ , $+\infty$}
+% \tkzTabLine{,,,,,,}
+% \node[draw,fill=red!10] at (S11) {-};
+% \node[draw,fill=red!10] at (S31) {+};
+% \end{tikzpicture}
+% \end{tkzexample}
+%
+% \subsubsection{Structure principale : hachurer une zone}
+%
+% On veut par exemple hachurer une zone mais vous ne connaissez pas la notation des nodes. Il suffit de passer \tkzname{help} en option. On obtient ainsi l'emplacement et les noms des nodes.
+%
+% \begin{tkzexample}[code only]
+% \begin{tikzpicture}
+% \tkzTabInit[help,deltacl=1]{$x$ / 1, $\dfrac{2x}{x^2-1}$ /1,$\ln{(x^2-1)}$/1}
+% {$-\infty$ , $-1$ , $1$ , $+\infty$}
+% \end{tikzpicture}
+% \end{tkzexample}
+%
+%
+% \medskip
+% On peut hachurer un rectangle par
+%
+% \begin{tkzexample}[code only]
+% \pattern[pattern=north west lines] (N21) rectangle (N33);
+% \end{tkzexample}
+%
+%
+% \begin{tkzexample}[small]
+% \begin{tikzpicture}
+% \tkzTabInit{$x$ / 1 , $\ln{(x^2-1)}$/1}
+% {$-\infty$ , $-1$ , $1$ , $+\infty$}
+% \pattern[pattern=north west lines] (N21) rectangle (N32);
+% \end{tikzpicture}
+% \end{tkzexample}
+%
+%
+%
+% \subsubsection{Mise en évidence de certaines zones}
+%
+% Afin de mettre en évidence le signe d'une expression du second degré, il est possible de mettre en couleur les parties extérieures. \tkzcname{draw[fill=Red!80,opacity=0.4](N11) rectangle (N22);}. La syntaxe est celle de \TIKZ. Un rectangle est défini par deux sommets opposés.
+%
+% \begin{tkzexample}[vbox,small]
+% \begin{tikzpicture}
+% \tkzTabInit[deltacl=1,lgt=3,espcl=2]%
+% {$x$ /1,$x^2-3x+2$ /1}%
+% {$-\infty$ , $1$ , $2$, $+\infty$}%
+% \tkzTabLine {t,+,0,-,0,+,t}
+% \draw[fill=Red!80,opacity=0.4](N11) rectangle (N22);
+% \draw[fill=Red!80,opacity=0.4](N31) rectangle (N42);
+% \end{tikzpicture}
+% \end{tkzexample}
+%
+% \subsubsection{Mise en évidence de valeurs}
+% \begin{tkzexample}[vbox,small]
+% \begin{tikzpicture}
+% \tkzTab
+% {$x$ /1,
+% $\dfrac{-1}{x^2}\ {\E}^{\left(\dfrac{1}{x}\right)}$ /1.5,
+% ${\E}^{\left(\dfrac{1}{x}\right)}$ /2}%
+% {$-\infty$ ,$0$ , $+\infty$}%
+% {t,-, ,-,t}
+% { + / $1$ , -CD+ / \colorbox{red}{\textcolor{white}{$0$}} / $+\infty$ , - / $1$ }%
+% \node[draw,inner sep=2pt,circle,fill=yellow] at (Z21) {$0$} ;
+% \end{tikzpicture}
+% \end{tkzexample}
+%
+% \subsubsection{Mise en évidence de limites}
+%
+% \begin{tkzexample}[vbox,small]
+% \begin{tikzpicture}
+% \tkzTabInit[espcl=8]%
+% {$x$/1 , Variation\\ de $\ln$/2}%
+% {$0$,$+\infty$}%
+% \tkzTabVar {D-/ $-\infty$, +/$+\infty$ }
+% \draw[opacity=.3,fill=red] (FR11) circle (10pt);
+% \draw[opacity=.3,fill=red] (FL21) circle (10pt);
+% \end{tikzpicture}
+% \end{tkzexample}
+%
+%
+% \subsubsection{Décoration}
+% Il est nécessaire de charger une librairie de \TIKZ\footnote{pgf/tikz version 2.00} qui permet des actions de décoration. \NameLib{decorations.pathreplacing}
+%
+% \begin{tkzexample}[code only]
+% \usetikzlibrary{decorations.pathreplacing}
+% \ldots
+% \draw[decoration={brace,amplitude=12pt},
+% decorate,line width=2pt,red] (T10) -- (T20);\end{tkzexample}
+%
+%
+% \begin{tkzexample}[small]
+% \begin{tikzpicture}
+% \tkzTabInit[lgt=3,espcl=1.5]
+% {$x$ /1,
+% $x^2-3x+2$ /1,
+% $(x-\E)\ln x$ /1}%
+% {$0$,$1$,$2$,$\E$,$+\infty$}%
+% \draw[fill=Orange,opacity=.3] (N10) rectangle (N53.west);
+% \draw[decoration={brace,amplitude=12pt},
+% decorate,line width=2pt,red] (T10) -- (T20);
+% \end{tikzpicture}
+% \end{tkzexample}
+%
+%
+% \subsubsection{Avec de la couleur}
+% \begin{tkzexample}[vbox,small]
+% \begin{tikzpicture}
+% \tkzTabInit[color,colorC = blue!30,colorL = orange!50,
+% colorT = green!30,colorV = red!50,espcl=8]
+% {$x$/1,Signe\\ de $\dfrac{1}{x}$ /1.5,Variation\\ de $\ln$ /3}
+% {$0$,$+\infty$}%
+% \tkzTabLine{d,+,}%
+% \tkzTabVar[color=red]{D-/$-\infty$ , +/$+\infty$}
+% \tkzTabVal[draw]{1}{2}{0.3}{\textcolor{red}{$\text{1}$}}{\textcolor{blue}{$0$}}
+% \tkzTabVal[draw]{1}{2}{0.6}{\textcolor{red}{$\text{\large e}$}}{\textcolor{blue}{$1$}}%
+% \draw[fill=gray,opacity=0.6] (T11) rectangle (N13);
+% \end{tikzpicture}
+% \end{tkzexample}
+%
+%
+% \subsubsection{Écrire dans un tableau}
+%
+% Aucune restriction au niveau de l'écriture, l'exemple suivant :
+%
+% \medskip
+% \begin{tikzpicture}
+% \tkzTabInit[lgt=5,espcl=3]%
+% { $x$ /1,%
+% Il est parfois possible d'obtenir les variations d'une fonction sans déterminer sa dérivée /2,%
+% $\ln (x) +x$ /1%
+% }%
+% { $0$ , $1$ , $+\infty$ }%
+% \end{tikzpicture}
+%
+% \begin{tkzexample}[code only]
+% \begin{tikzpicture}
+% \tkzTabInit[lgt=3,espcl=4]%
+% { $x$ /1,%
+% Il est parfois ... /2,%
+% $\ln (x) +x$ /1%
+% }%
+% { $0$ , $1$ , $+\infty$ }%
+% \end{tikzpicture}
+% \end{tkzexample}
+%
+% \subsubsection{Tableau de proportionnalité}
+%
+% On utilise ici un compteur interne \tkzname{tkz@cnt@pred} du package. l' arrobase \tkzname{@} devient une lettre ordinaire à l'aide des macros \tkzname{makeatletter} et \tkzname{makeatother}. Ce compteur va servir à tracer des filets verticaux afin de séparer les antécédents et les images.
+%
+% \begin{tkzexample}[vbox,small]
+% \begin{tikzpicture}
+% \tkzTabInit[espcl=0.5]{ $x$/1,$f(x)$ /1}%
+% {1,,2,,3,,4,,5,,6}%
+% \tkzTabLine{5,,,,10,,,,15,,,,20,,,,25,,,,30}%
+% \makeatletter
+% \foreach \x in {1,...,5}{%
+% \setcounter{tkz@cnt@pred}{\x}\addtocounter{tkz@cnt@pred}{\x}
+% \draw (N\thetkz@cnt@pred 0.center) to (N\thetkz@cnt@pred 2.center);}
+% \makeatother
+% \begin{scope}[->,red,line width=1pt,>=latex']
+% \draw (M20) to [bend left] node[above]{$\times 3$} (7.5,0);
+% \draw (M22) to [bend right] node[below]{$\times 3$} (7.5,-2);
+% \draw (8,-0.25) to [post,bend left=60] node[midway,above,sloped] {$\times 5$} (8,-1.75);
+% \end{scope}
+% \end{tikzpicture}
+% \end{tkzexample}
+\endinput
+
+
+
diff --git a/macros/latex/contrib/tkz/tkz-tab/doc/latex/TKZdoc-tab-bac.tex b/macros/latex/contrib/tkz/tkz-tab/doc/latex/TKZdoc-tab-bac.tex
new file mode 100644
index 0000000000..b3f7472903
--- /dev/null
+++ b/macros/latex/contrib/tkz/tkz-tab/doc/latex/TKZdoc-tab-bac.tex
@@ -0,0 +1,204 @@
+\section{Exemples avec alterqcm.sty et tkz-fct}\label{prof}%
+Dans ce chapitre, les exemples sont encore des sujets de Baccalauréat ES utilisant le module \tkzname{alterqcm.sty} mais aussi les modules dérivés de tikz, \tkzname{tkz-fct.sty} et bien évidemment \tkzname{tkz-tab.sty}.
+Vous trouverez des exemples accompagnant cette documentation avec un \textcolor{red}{|préambule minimum|}.
+\vfill
+\example{Baccalauréat Centres Étrangers ES 2006 }\label{bac1}
+
+\medskip
+\begin{alterqcm}[lq=70mm,pre=true]
+
+\AQmessage{ Soit $f$ une fonction définie et dérivable sur l'intervalle $]-5~;~+\infty[$ dont le tableau de variations est donné ci-dessous :
+\begin{center}
+\begin{tikzpicture}
+\tkzTabInit[espcl=1.75]{$x$/1,$f(x)$/3}
+ {$-5$,$-1$,$0$,$2$,$+\infty$}
+\tkzTabVar{-/$-\infty$ /,%
+ +/$-3$/,%
+ -/$-5$/,%
+ +/4 /,%
+ -/{4,5}/}
+\end{tikzpicture}
+\end{center}
+ On désigne par $\mathcal{C}$ la courbe représentative de $f$.}
+
+
+\AQquestion{Sur l'intervalle $]-5~;~+\infty[$, l'équation $f(x) = -2$ admet }
+{{une seule solution},
+{deux solutions},
+{quatre solutions}
+}
+\AQquestion{Sur l'intervalle $]-5~;~+\infty[$ la courbe $\mathcal{C}$ admet : }
+{%
+{\begin{minipage}{6cm}\small une seule asymptote la droite d'équation $x = -5$%
+\end{minipage}},
+{\begin{minipage}{6cm}\small exactement deux asymptotes, les droites d'équations $x = -4,5$ et $y = -5$%
+\end{minipage}},
+{\begin{minipage}{6cm}\small exactement deux asymptotes, les droites d'équations $y = -4,5$ et $x = -5$%
+\end{minipage}}%
+}
+\AQquestion{On sait que $f'(2) = 0$. L'équation de la tangente à $\mathcal{C}$ au point d'abscisse $2$ est : }
+{{$y = 4$},
+{$y = 4(x -2)$},
+{$y = 4(x -2)$}
+}
+\AQquestion{On sait que l'équation de la tangente à $\mathcal{C}$ au point de coordonnées (1 ; 2) est $y = 3x - 1$. On a :}
+{{$f(2) = 1$},
+{$f'(1) = -1$},
+{$f'(1) = 3$}
+}
+\AQquestion{Sur l'intervalle $]2~;~+\infty[$, la fonction $g$ définie par $g(x) =\text{e}^{-f(x)}$ }
+{{est croissante},
+{est décroissante},
+{n'est pas monotone.}
+}
+\AQquestion{On pose $h(x) = \ln \left[f(x) + 5\right]$. Alors la fonction $h$ : }
+{{$\mathbb{R}$},
+{$]0~;~+\infty[$},
+{$[0~;~+\infty[$}
+}
+\end{alterqcm}
+
+
+\vfill
+\example{Baccalauréat ES Antilles juin 2004 }\label{bac2}
+
+\medskip
+
+\begin{alterqcm}[lq=110mm,pre=true]
+
+\AQmessage{ La figure 1. donne la représentation graphique d'une fonction $f$ définie sur $\mathbf{R}^+$ et la figure 2 celle d'une primitive de $f$ sur $\mathbf{R}^+$.
+\begin{center}
+ \begin{tikzpicture}[xscale=2.25,yscale=1]
+ \tkzInit[xmin=-2,xmax=3,ymin=-1,ymax=6]
+ \tkzX
+ \tkzY
+ \tkzFct[label=false,samples=100](-1..2.2){x+exp(x-1)}
+ \tkzPoint[noname,coord](1,2){pt1}
+ \tkzPoint[noname,coord,label,xlabel={},%
+ ylabel=$\text{e}+2$,posylabel=10pt]%
+ (2,2+e){pt2}
+ \tkzRep
+ \end{tikzpicture}
+\end{center}
+\begin{center}
+ \begin{tikzpicture}[xscale=2.25,yscale=1]
+ \tkzInit[xmin=-2,xmax=3,ymin=-1,ymax=6]
+ \tkzX
+ \tkzY
+ \tkzFct(-2..2.2){x*x/2+exp(x-1)}
+ \tkzPoint[noname,coord,label,xlabel={},ylabel=$3/2$](1,1.5){pt1}
+ \tkzPoint[noname,coord,label,xlabel={},%
+ ylabel=$\text{e}+2$,posylabel=10pt]%
+ (2,2+e){pt2}
+ \tkzRep
+ \end{tikzpicture}
+\end{center}
+}
+
+\AQquestion{Quelle est l'aire, en unités d'aire, de la partie du plan limitée par la représentation graphique de la fonction $f$, l'axe des abscisses et les
+droites d'équation $x = 1$ et $x = 2$ ? }
+{{$\text{e} + \cfrac{3}{4}$},
+{$\text{e} + \cfrac{1}{2}$},
+{$1$}
+}
+
+\end{alterqcm}
+
+\medskip
+\hfill Tournez la page s.v.p.
+
+
+\begin{alterqcm}[lq=70mm,pre=false,numbreak=1]
+\AQmessage{La fonction $k$ définie et strictement positive sur $\mathbf{R}^+$ est connue par son tableau de variations.
+\begin{center}
+\begin{tikzpicture}
+ \tkzTabInit[lgt=1,espcl=2]{$x$/0.5,$k(x)$/1.5}
+ {$0$,$1$,$3$,$+\infty$}
+ \tkzTabVar{-/ /,%
+ +/ /,%
+ -/ /,%
+ +/ $+\infty$ /}%
+ \end{tikzpicture}
+\end{center}%
+}
+
+\AQquestion{Pami les tableaux suivants, quel est le tableau de variations de la fonction $g$ définie sur
+$\mathbf{R}^+$ par \[g(x) = \cfrac{1}{k(x)}\ ? \]}
+{{Tableau A},
+{Tableau B},
+{Tableau C}
+}
+
+\AQmessage{%
+\begin{center}
+Tableau A\\
+\begin{tikzpicture}
+ \tkzTabInit[lgt=1,espcl=2]{$x$/0.5,$g(x)$/1.5}
+ {$0$,$1$,$3$,$+\infty$}
+ \tkzTabVar{-/ /,%
+ +/ /,%
+ -/ /,%
+ +/ $+\infty$ /}%
+ \end{tikzpicture}
+\end{center}
+\begin{center}
+Tableau B\\
+\begin{tikzpicture}\activoff
+ \tkzTabInit[lgt=1,espcl=2]{$x$/0.5,$g(x)$/1.5}
+ {$0$,$1$,$3$,$+\infty$}
+ \tkzTabVar{+/ /,%
+ -/ /,%
+ +/ /,%
+ -/ $-\infty$ /}%
+ \end{tikzpicture}
+\end{center}
+\begin{center}
+Tableau C\\
+\begin{tikzpicture}\activoff
+ \tkzTabInit[lgt=1,espcl=2]{$x$/0.5,$g(x)$/1.5}
+ {$0$,$1$,$3$,$+\infty$}
+ \tkzTabVar{-/ /,%
+ +/ /,%
+ -/ /,%
+ +/ $0$ /}%
+ \end{tikzpicture}
+\end{center}
+}
+
+\AQquestion{Soit $h$ la fonction définie sur $\mathbf{R}$ par $h(x) = \text{e}^x - x + 1$.
+On note $\mathcal{C}$ la courbe représentative de $h$ dans un repère
+orthonormal $O;\vec{\imath};\vec{\jmath}$.}
+{{%
+\begin{minipage}{5cm}\small
+ La droite d'équation $y = 1$ est
+ asymptote à $\mathcal{C}$%
+\end{minipage}
+},
+{\begin{minipage}{5cm}\small
+ La droite d'équation $x = 0$ est
+asymptote à $\mathcal{C}$
+\end{minipage}},
+{\begin{minipage}{5cm}\small
+ La droite d'équation $y = -x + 1$ est
+asymptote à $\mathcal{C}$
+\end{minipage}}
+}
+\AQquestion[pq=5mm]{%
+En économie, le coût marginal est le coût occasionné par la
+production d'une unité supplémentaire, et on considère que le coût
+marginal est assimilé à la dérivée du coût total.\\
+Dans une entreprise, une étude a montré que le coût marginal
+$C_{m}(q)$ exprimé en millliers d'euro en fonction du nombre $q$
+d'articles fabriqués est donné par la relation :
+\[C_{m}(q) = 3q^2 - 10q + \cfrac{2}{q} + 20.\]
+}
+{%
+{$C_{r}(q) = q^3 - 5q^2 + 2\ln q + 20q + 9984$},
+{$C_{r}(q) = q^3 - 5q^2 + 2\ln q + 20q - 6$},
+{$C_{r}(q) = 6q - 10 - \cfrac{2}{q^2}$}
+}
+
+\end{alterqcm}
+\vfill
+
+\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-tab/doc/latex/TKZdoc-tab-examples.tex b/macros/latex/contrib/tkz/tkz-tab/doc/latex/TKZdoc-tab-examples.tex
new file mode 100644
index 0000000000..fcd1c5194f
--- /dev/null
+++ b/macros/latex/contrib/tkz/tkz-tab/doc/latex/TKZdoc-tab-examples.tex
@@ -0,0 +1,575 @@
+\section{Galerie}
+\subsection{Tableaux de signes}
+L'exemple suivant provient de la documentation de l'excellent \tkzname{tablor.sty}.
+
+
+\medskip
+
+
+\begin{tkzexample}[vbox,small]
+ \begin{tikzpicture}
+ \tkzTabInit[lgt=3]
+ {$x$ /1,
+ Signe de\\ $-2+3$ /1.5,
+ Signe de\\ $-x+5$ /1.5,
+ Signe de\\ $(-2x+3)(-x+5)$ /1.5 }%
+ {$-\infty$,$\dfrac{3}{2}$,$5$,$+\infty$}%
+ \tkzTabLine { ,+,z,-,t,-, }
+ \tkzTabLine { ,+,t,+,z,-, }
+ \tkzTabLine { ,+,z,-,z,+, }
+ \end{tikzpicture}
+\end{tkzexample}
+
+
+\subsection{Variations de fonctions}
+ \subsubsection{Variation d'une fonction rationnelle}
+
+ Cet exemple a été cité dans la documentation du package \tkzname{tabvar}
+
+ Étude de la fonction $f~:~ x \longmapsto \frac{x^3+2}{2x}$ sur $]-\infty~;~+\infty[$
+
+\begin{tkzexample}[vbox,small]
+\begin{tikzpicture}
+ \tkzTabInit[]
+ {$x$ /1, $f'(x)$ /1,$f$ /3}
+ {$-\infty$ , $0$ , $1$ , $+\infty$}
+\tkzTabLine{,-,d,-,z,+,}
+\tkzTabVar{+/$+\infty$ ,-D+/$-\infty$ / $+\infty$ ,-/$\frac{3}{2}$, +/$+\infty$}
+\tkzTabVal{1}{2}{0.4}{$ -\sqrt[3]{2}$}{$0$}
+\end{tikzpicture}
+\end{tkzexample}
+
+
+\subsubsection{Variation d'une fonction irrationnelle}
+
+Autre exemple cité dans la documentation du package \tkzname{tabvar}
+
+Étude de la fonction $f~:~ x \longmapsto \sqrt{\frac{x-1}{x+1}}$ sur $]-\infty~;~-1[\cup ]1~;~+\infty[$
+
+\begin{tkzexample}[vbox,small]
+\begin{tikzpicture}
+ \tkzTabInit[]
+ {$x$ /1, $f'(x)$ /1,$f$ /3}
+ {$-\infty$ , $-1$ , $1$ , $+\infty$}
+\tkzTabLine{,+,d,h,d,+, }
+\tkzTabSlope{ 3/ /+\infty}
+\tkzTabVar{-/$1$ ,+DH/$+\infty$ ,-/$0$, +/$1$}
+\end{tikzpicture}
+\end{tkzexample}
+
+Un prolongement par continuité pourrait être : $f(x)=0$ sur $[-1~;~1]$ alors le tableau deviendrait
+
+\begin{tkzexample}[vbox,small]
+\begin{tikzpicture}
+ \tkzTabInit[]
+ {$x$ /1, $f'(x)$ /1,$f$ /3}
+ {$-\infty$ , $-1$ , $1$ , $+\infty$}
+\tkzTabLine{,+,d,0,d,+, }
+\tkzTabSlope{ 3/ /+\infty}
+\tkzTabVar{-/$1$ ,+D-/$+\infty$/$0$ ,-/$0$, +/$1$}
+\end{tikzpicture}
+\end{tkzexample}
+
+
+\subsection{Fonctions trigonométriques}
+\NameFonct{Fonctions trigonométriques}
+ \subsubsection{Variation de la fonction tangente}
+ \NameFonct{Fonction tangente}
+ Étude de la fonction $f~:~ x \longmapsto \tan{x}$ sur $[0~;\pi]$
+
+ \begin{tkzexample}[vbox]
+\begin{tikzpicture}
+\tkzTabInit[espcl=6]{$x$ / 1,Signe de\\f'(x)/1, Variations de\\ $f$ / 3}%
+ {$0$ ,$\frac{\pi}{2}$ , $\pi$}%
+\tkzTabLine{ ,+,d,+, }
+\tkzTabVar{-/$0$ , +D-/$+\infty$/$-\infty$ , +/$0$ }
+\tkzTabVal{1}{2}{0.5}{$\frac{\pi}{4}$}{$1$}
+\tkzTabVal{2}{3}{0.5}{$\frac{3\pi}{4}$}{$1$}
+\end{tikzpicture}
+\end{tkzexample}
+
+\subsubsection{Variation de la fonction cosinus}
+ \NameFonct{Fonction cosinus}
+ Étude de la fonction $f~:~ x \longmapsto \cos{x}$ sur $[-\pi~;~+\pi]$
+
+ \begin{tkzexample}[vbox]
+\begin{tikzpicture}
+\tkzTabInit[espcl=6]{$x$ / 1,Signe de\\f'(x)/1, Variations de\\ $f$ / 3}%
+ {$0$ , $\pi$}%
+\tkzTabLine{ , + , }
+\tkzTabVar{+/$1$ , -/$-1$ }
+\tkzTabVal{1}{2}{0.5}{$\frac{\pi}{2}$}{$0$}
+\end{tikzpicture}
+\end{tkzexample}
+
+\subsection{Fonctions paramétrées et trigonométriques}
+\NameFonct{Fonctions paramétrées} \NameFonct{Fonctions trigonométriques}
+
+Étude sur $\left[0~;~\frac{\pi}{2}\right]$
+ \begin{equation*}
+\left\{%
+\begin{array}{l}
+ x(t) = \cos(3t)\\
+ y(t) = \sin(4t)
+\end{array}\right.
+\end{equation*}
+
+\begin{tkzexample}[vbox,small]
+ \begin{tikzpicture}
+ \tkzTabInit[ lgt=3 , espcl=3]%
+ {$t$ /1,
+ Signe de\\ $x'(t)$ /1.5,
+ Variations de\\ $x$ /3,
+ Variations de\\ $y$ /3,
+ Signe de\\ $y'(t)$ /1.5}
+ {$0$ , $\frac{\pi}{8}$ , $\frac{\pi}{3}$ ,
+ $\frac{3\pi}{8}$ , $\frac{\pi}{2}$ }%
+ \tkzTabLine {z , - ,-3\sin\left(\frac{3\pi}{8}\right) , - , z , + ,%
+ 3\sin\left(\frac{\pi}{8}\right),+,3}
+ \tkzTabVar { +/$1$ , R/ , -/$-1$/ , R/ , +/$0$ }
+ \tkzTabIma{1}{3}{2}{$\cos\left(\frac{3\pi}{8}\right)$}
+ \tkzTabIma{3}{5}{4}{$-\cos\left(\frac{\pi}{8}\right)$}
+ \tkzTabVar { -/$0$ , +/$1$ , R/ , -/$-1$ , +/$0$ }
+ \tkzTabIma{2}{4}{3}{$\frac{-\sqrt{3}}{2}$}
+ \tkzTabLine {4 , + , z , - , -2 , - , z ,+,4}
+ \end{tikzpicture}
+\end{tkzexample}
+
+
+\subsection{Baccalauréat Asie ES 1998}
+\index{Baccalauréat}
+Une petite astuce, en principe \tkzname{z} est le symbole à mettre dans la liste pour obtenir un zéro centré sur un trait en pointillés. Si on veut que le zéro soit sans le trait , il suffit de remplacer \tkzname{z} par \tkzname{0}. Celui-ci n'est pas un symbole reconnu, il est donc traiter comme une chaîne normale.
+
+ Soit $f$ la fonction de variable réelle $x$, définie sur $\mathbf{R}$ par :
+ \[
+ f(x)=\E^x(\E^x+a)+b
+ \]
+ où $a$ et $b$ sont deux constantes réelles.
+
+ Les renseignements connus sur $f$ sont donnés dans le tableau de variation ci-dessous.
+
+ \medskip
+ \begin{center}
+ \begin{tikzpicture}
+ \tkzTab[lgt=3,espcl=4]{$x$/1,Signe de $f'(x)$ /1,Variations de $f$ /2}%
+ {$-\infty$,$0$,$+\infty$}%
+ {,, z ,,}%
+ {+/ $-3$ ,
+ -/ ,
+ +/ }
+ \end{tikzpicture}
+ \end{center}
+
+ \medskip
+ \begin{enumerate}
+ \item Calculer $f'(x)$ en fonction de $a$ ($f'$ désigne la fonction dérivée de $f$).
+ \item \begin{enumerate}
+ \item déterminer $a$ et $b$ en vous aidant des informations contenues dans le
+ tableau ci-dessus.
+ \item Calculer $f(0)$ et calculer la limite de $f$ en $+\infty$.
+ \item Compléter, après l'avoir reproduit, le tableau de variations de $f$.
+ \end{enumerate}
+ \item Résoudre dans $\mathbf{R}$ l'équation
+ \[
+ \E^x(\E^x-2)-3=0
+ \]
+ (on pourra pose $X=\E^x$).
+ \item Résoudre dans $\mathbf{R}$ les inéquations :
+ \[
+ \E^x(\E^x-2)-3\geq -4
+ \]
+ \[
+ \E^x(\E^x-2)-3 \leq 0
+ \]
+ (On utilisera le tableau de variations donné ci-dessus et en particulier les
+ informations obtenues en 2.b)
+ \end{enumerate}
+
+\begin{tkzexample}[code only,small]
+ Soit $f$ la fonction de variable réelle $x$, définie sur $\mathbf{R}$ par :
+ \[
+ f(x)=\E^x(\E^x+a)+b
+ \]
+ où $a$ et $b$ sont deux constantes réelles.
+
+ Les renseignements connus sur $f$ sont donnés dans le tableau de variation ci-dessous.
+
+ \medskip
+ \begin{center}
+ \begin{tikzpicture}
+ \tkzTab[lgt=3,espcl=4]{$x$/1,Signe de $f'(x)$ /1,Variations de $f$ /2}%
+ {$-\infty$,$0$,$+\infty$}%
+ {,, z ,,}%
+ {+/ $-3$ ,
+ -/ ,
+ +/ }
+ \end{tikzpicture}
+ \end{center}
+
+ \medskip
+ \begin{enumerate}
+ \item Calculer $f'(x)$ en fonction de $a$ ($f'$ désigne la fonction dérivée de $f$).
+ \item \begin{enumerate}
+ \item déterminer $a$ et $b$ en vous aidant des informations contenues dans le
+ tableau ci-dessus.
+ \item Calculer $f(0)$ et calculer la limite de $f$ en $+\infty$.
+ \item Compléter, après l'avoir reproduit, le tableau de variations de $f$.
+ \end{enumerate}
+ \item Résoudre dans $\mathbf{R}$ l'équation
+ \[
+ \E^x(\E^x-2)-3=0
+ \]
+ (on pourra pose $X=\E^x$).
+ \item Résoudre dans $\mathbf{R}$ les inéquations :
+ \[
+ \E^x(\E^x-2)-3\geq -4
+ \]
+ \[
+ \E^x(\E^x-2)-3 \leq 0
+ \]
+ (On utilisera le tableau de variations donné ci-dessus et en particulier les
+ informations obtenues en 2.b)
+ \end{enumerate}
+\end{tkzexample}
+
+
+\subsection{Baccalauréat}
+\index{Baccalauréat}
+ On considère la fonction $f$ définie sur $]-\infty~;~0[$ :
+
+ \[
+ f(x)=ax+b+\ln(-2x)
+ \]
+ où $a$ et $b$ sont deux réels donnés.
+
+ \begin{enumerate}
+ \item Calculer $f'(x)$ en fonction de $a$ et $b$.
+ \item Le tableau ci-dessous représente les variations d'une fonction particulière $f$.
+
+ \medskip
+ \begin{center}
+ \begin{tikzpicture}
+ \tkzTab[]%
+ {$x$/1.25,Signe de\\ $f'(x)$/1.5, Variations\\ de $f$/1.5}%
+ {$-\infty$,$\dfrac{-1}{2}$,$0$}%
+ {,+,$0$,-,}%
+ {-//,
+ +/$2$/,
+ -//}
+ \end{tikzpicture}
+ \end{center}
+
+ \medskip
+ \begin{enumerate}
+ \item En utilisant les données du tableau déterminer les valeurs $a$ et $b$ qui caractérisent
+ cette fonction.
+ \item Pour cette fonction particulière $f$, déterminer
+ $\displaystyle \lim_{x \xrightarrow[x<0]{} 0} f(x)$.
+ \item Montrer que, dans l'intervalle $\Big[\dfrac{-1}{2}~;~0,01\Big]$, l'équation $f(x)=0$
+ admet une solution unique. En donner une valeur approchée à $10^{-3}$ près.
+ \end{enumerate}
+ \end{enumerate}
+
+\begin{tkzexample}[small,code only]
+ On considère la fonction $f$ définie sur $]-\infty~;~0[$ :
+
+ \[
+ f(x)=ax+b+\ln(-2x)
+ \]
+ où $a$ et $b$ sont deux réels donnés.
+
+ \begin{enumerate}
+ \item Calculer $f'(x)$ en fonction de $a$ et $b$.
+ \item Le tableau ci-dessous représente les variations d'une fonction particulière $f$.
+
+ \medskip
+ \begin{center}
+ \begin{tikzpicture}
+ \tkzTab[]%
+ {$x$/1.25,Signe de\\ $f'(x)$/1.5, Variations\\ de $f$/1.5}%
+ {$-\infty$,$\dfrac{-1}{2}$,$0$}%
+ {,+,$0$,-,}%
+ {-//,
+ +/$2$/,
+ -//}
+ \end{tikzpicture}
+ \end{center}
+
+ \medskip
+ \begin{enumerate}
+ \item En utilisant les données du tableau déterminer les valeurs $a$ et $b$ qui caractérisent
+ cette fonction.
+ \item Pour cette fonction particulière $f$, déterminer
+ $\displaystyle \lim_{x \xrightarrow[x<0]{} 0} f(x)$.
+ \item Montrer que, dans l'intervalle $\Big[\dfrac{-1}{2}~;~0,01\Big]$, l'équation $f(x)=0$
+ admet une solution unique. En donner une valeur approchée à $10^{-3}$ près.
+ \end{enumerate}
+ \end{enumerate}
+\end{tkzexample}
+
+
+
+\subsection{Baccalauréat Guyane ES 1998 }
+\index{Baccalauréat}
+C'est cet exemple qui m'a obligé à penser aux commandes du style $+V+$. Sans doute, voulait-on ne pas influencer les élèves avec la vision d'une double barre (trop souvent associée à la présence d'une asymptote).
+
+\textbf{Le sujet :}
+
+{\parindent=0pt
+On considère une fonction $f$ de la variable $x$, dont on donne le tableau de variations :
+
+\begin{center}
+\begin{tikzpicture}
+\tkzTab[lgt=3]%
+{$x$/1.25,Signe de\\ $f'(x)$/1.5, Variations\\ de $f$/2.5}
+{$-\infty$,$\dfrac{-1}{2}$,$1$,$+\infty$}
+{,-,$0$,+, ,-,}
+{+/ $1$ , -/$\dfrac{-1}{3}$ , +V+/ $+\infty$ /$+\infty$ , -/$1$}
+\end{tikzpicture}
+\end{center}
+
+On appelle (C) la courbe représentative de $f$ dans un repère Le plan est muni d'un repère orthonormé $(O;\vec{\imath};\vec{\jmath})$ (unités graphiques 2 cm sur chaque axe)
+
+\vspace{6pt}
+\textbf{Première partie}
+
+En interprétant le tableau donné ci-dessus :%
+
+ \begin{enumerate}
+ \item Préciser l'ensemble de définition de $f$.
+ \item Placer dans le repère $(O;\vec{\imath};\vec{\jmath})$ :
+ \begin{enumerate}
+ \item l'asymptote horizontale (D);
+ \item l'asymptote verticale (D');
+ \item le point $A$ où la tangente à (C) est horizontale.
+ \end{enumerate}
+ \end{enumerate}
+
+\textbf{Seconde partie}
+
+On donne maintenant l'expression de $f$ :
+\[
+f(x)=1 + \dfrac{4}{(x-1)} + \dfrac{3}{(x-1)^2}
+\]
+\begin{enumerate}
+ \item Résoudre les équations $f(x)=0$ et $f(x)=1$.
+ \item Au moyen de votre calculatrice, remplir le tableau suivant
+ ( recopier ce tableau sur votre copie).
+\end{enumerate}
+\begin{tikzpicture}
+ \tkzTabInit[deltacl=1,espcl=1]{ $x$/1 , $f(x)$ /1}%
+ {-1,,{-0,75},,{0,5},,2,,3,,4}%
+ \tkzTabLine{,,,,,,,,,,,,,,,,,,,,}%
+ \makeatletter
+ \foreach \x in {1,...,5}
+ \setcounter{tkz@cnt@pred}{\x}\addtocounter{tkz@cnt@pred}{\x}
+ \draw (N\thetkz@cnt@pred 0.center) to (N\thetkz@cnt@pred 2.center);
+\end{tikzpicture}
+}
+
+
+\begin{tkzexample}[code only,small]
+On considère une fonction $f$ de la variable $x$, dont on donne le tableau de variations :
+
+\begin{center}
+\begin{tikzpicture}
+\tkzTab[]%
+{$x$/1.25,Signe de\\ $f'(x)$/1.5, Variations\\ de $f$/2.5}
+{$-\infty$,$\dfrac{-1}{2}$,$1$,$+\infty$}
+{,-,$0$,+, ,-,}
+{+/ $1$ , -/$\dfrac{-1}{3}$ , +V+/ $+\infty$ /$+\infty$ , -/$1$}
+\end{tikzpicture}
+\end{center}
+
+ \vspace{6pt}
+On appelle (C) la courbe représentative de $f$ dans un repère. Le plan est muni d'un repère%
+ orthonormal $(O;\vec{\imath};\vec{\jmath})$ (unités graphiques 2 cm sur chaque axe)%
+
+\textbf{Première partie}
+
+En interprétant le tableau donné ci-dessus :%
+
+ \begin{enumerate}
+ \item Préciser l'ensemble de définition de $f$.
+ \item Placer dans le repère $(O;\vec{\imath};\vec{\jmath})$ :
+ \begin{enumerate}
+ \item l'asymptote horizontale (D);
+ \item l'asymptote verticale (D');
+ \item le point $A$ où la tangente à (C) est horizontale.
+ \end{enumerate}
+ \end{enumerate}
+
+\textbf{Seconde partie}
+
+On donne maintenant l'expression de $f$ :
+\[
+f(x)=1 + \dfrac{4}{(x-1)} + \dfrac{3}{(x-1)^2}
+\]
+\begin{enumerate}
+ \item Résoudre les équations $f(x)=0$ et $f(x)=1$.
+ \item Au moyen de votre calculatrice, remplir le tableau suivant
+ ( recopier ce tableau sur votre copie).
+ \begin{tikzpicture}
+ \tkzTabInit[deltacl=1,espcl=1]{ $x$/1,$f(x)$ /1}%
+ {-1,,{-0,75},,{0,5},,2,,3,,4}%
+ \tkzTabLine{,,,,,,,,,,,,,,,,,,,,}%
+ \makeatletter
+ \foreach \x in {1,...,5}
+ \setcounter{tkz@cnt@pred}{\x}\addtocounter{tkz@cnt@pred}{\x}
+ \draw (N\thetkz@cnt@pred 0.center) to (N\thetkz@cnt@pred 2.center);
+ \end{tikzpicture}
+\end{enumerate}
+
+\vfill
+\end{tkzexample}
+
+\subsection{Exemple relatif à une question: problème de virgule}
+
+Il suffit pour régler ce genre de problème d'utiliser le package numprint.
+La macro |\np| permet d'afficher correctement $1,5$.
+\begin{tkzexample}[code only, small]
+\usepackage[french]{babel}
+\usepackage[np]{numprint}
+\end{tkzexample}
+
+\begin{tkzexample}[vbox]
+\begin{tikzpicture}[scale=1]
+\tkzTabInit[lgt=6,espcl=7]
+{$x$/0.75,
+$x\np{-1.5}$/0.75}
+{$-\infty$,$+\infty$}
+\end{tikzpicture}
+\end{tkzexample}
+
+\subsection{Quelques tableaux classiques}
+
+Tableau 1 (ln) :
+
+\begin{tkzexample}[vbox,small]
+ \begin{tikzpicture}
+ \tkzTabInit[espcl=6]{$x$/1,$\ln'(x)$/1,$\ln(x)$/2}{$0$,$+\infty$}
+ \tkzTabLine{d,+,}
+ \tkzTabVar{D-/$-\infty$,+/$+\infty$,}
+ \tkzTabVal{1}{2}{0.4}{1}{0}
+ \tkzTabVal{1}{2}{0.67}{$\E$}{1}
+ \end{tikzpicture}
+\end{tkzexample}
+
+
+\bigskip
+
+Tableau 2 (racine) :
+
+\begin{tkzexample}[vbox,small]
+\begin{tikzpicture}
+\tkzTabInit[lgt=3,espcl=6]{$x$/1,$f'(x)$/1,$f(x)=\sqrt{x}$/2}{$0$,$+\infty$}
+\tkzTabLine{d,+,}
+\tkzTabVar{-/0,+/$+\infty$,}
+\end{tikzpicture}
+\end{tkzexample}
+
+\bigskip
+
+Tableau 3 (inverse) :
+
+\begin{tkzexample}[vbox,small]
+\begin{tikzpicture}
+\tkzTabInit[lgt=3,espcl=6]{$x$/1,$f'(x)=-\dfrac{1}{\ x^2}$/1,$f(x)=\dfrac{1}{x}$/2}{$-\infty$,$0$,$+\infty$}
+\tkzTabLine{,-,d,-,}
+\tkzTabVar{+/0,-D+/$-\infty$/$+\infty$,-/0}
+\end{tikzpicture}
+\end{tkzexample}
+
+\bigskip
+
+Tableau 4 (\(f(x)=\dfrac{x^2+4}{x}\)):
+\begin{tkzexample}[vbox,small]
+\begin{tikzpicture}
+\tkzTabInit[]{\(x$/1,$f'(x)\)/1,\(f(x)\)/2}{\(-\infty\),\(-2\),\(0\),2,\(+\infty\)}
+\tkzTabLine{,+,z,-,d,-,z,+,}
+\tkzTabVar{-/\(-\infty\),+/-4,-D+/$-\infty$/$+\infty$,-/4,+/\(+\infty\)}
+\end{tikzpicture}
+\end{tkzexample}
+
+\bigskip
+
+
+Tableau 5 (cos):
+\begin{tkzexample}[vbox,small]
+\begin{tikzpicture}
+\tkzTabInit{$x$/1,$-\sin(x)$/1,$\cos(x)$/2}{$0$,$\pi$,$2\pi$}
+\tkzTabLine{z,-,z,+,z}
+\tkzTabVar{+/$1$,-/$-1$,+/$1$}
+\tkzTabVal{1}{2}{0.5}{$\dfrac{\pi}{2}$}{0}
+\tkzTabVal{2}{3}{0.5}{$\dfrac{3\pi}{2}$}{0}
+\end{tikzpicture}
+\end{tkzexample}
+
+\subsection{Utilisation de la macro \tkzcname{par}}
+
+Et bien c'est impossible. La meilleure solution est d'utiliser la macro |\parbox| sinon l'emploi de |\endgraf| définit par |\let\endgraf=\par| peut faire l'affaire.
+
+\begin{tkzexample}[width=7cm,small]
+ \begin{tikzpicture}
+ \tkzTabInit {$x$ / 1 ,$f(x)$ /1}%
+ {$0$,$1$}
+ \tkzTabLine{,\parbox{3cm}{$u(x)$\\ $v(x)$},}
+ \end{tikzpicture}
+\end{tkzexample}
+
+\subsection{Exemple utiisant l'option help}
+
+\begin{tkzexample}[vbox,small]
+ \begin{tikzpicture}
+ \tkzTabInit[color, colorT = red!20, colorC = yellow!20,
+ colorL = cyan!40, colorV = lightgray!20, espcl=3,help]
+ {$x$ /1, $f''$ /1,$f'$ /2, $f$ /2}
+ {$-\infty$ , $0$ ,$+\infty$}
+ \tkzTabLine{, - , z , + ,}
+ \tkzTabVar{+/$+\infty$ , -/$-2$ , +/$+\infty$}
+ \tkzTabVal[draw]{1}{2}{.6}{$x_1$}{$0$}
+ \tkzTabVal[draw]{2}{3}{.4}{$x_2$}{$0$}
+ \end{tikzpicture}
+\end{tkzexample}
+
+
+\begin{tkzexample}[vbox,small]
+ \begin{tikzpicture}
+ \tikzset{arrow style/.style = {black,
+ >-> = latex’,thick ,
+ shorten > = 5pt,
+ shorten < = 5pt}}
+ \tkzTabInit[color, colorT = red!20, colorC = yellow!20,
+ colorL = cyan!40, colorV = lightgray!20, espcl=3]
+ {$x$ /1, $f''$ /1,$f'$ /2, $f$ /2}
+ {$-\infty$ , $0$ ,$+\infty$}
+ \tkzTabLine{, - , z , + ,}
+ \tkzTabVar{+/$+\infty$ , -/$-2$ , +/$+\infty$}
+ \tkzTabVal[draw]{1}{2}{.6}{$x_1$}{$0$}
+ \tkzTabVal[draw]{2}{3}{.4}{$x_2$}{$0$}
+ \begin{scope}[>->,line width=1pt,>=stealth]
+ \path (N13) -- (N23) node[midway,below=6pt](N){};
+ \draw ([above=6pt]N14) to [bend left=45] ([left=1pt]N);
+ \draw ([right=3pt]N) to [bend left=45] ([above=6pt]N24) ;
+ \draw ([above right=6pt]N24)to [bend right=40] ([below left=6pt]N33);
+ \end{scope}
+ \end{tikzpicture}
+\end{tkzexample}
+
+\subsection{Exemple modifiant la largeur d'une colonne}
+Cette modification n'est pas prévue. Une astuce consiste à intoduire des colonnes vides.
+
+\begin{tkzexample}[vbox,small]
+ \begin{tikzpicture}
+ \tikzset{t style/.style = {style = densely dashed}}
+ \tkzTabInit[lgt=4, espcl = 1.2, lw = 0.5pt, deltacl=0]
+ { / 0.7 , $x(x^2-5x+4)$ / 1}{ ,$0$, $1$, , $4$,}
+ \tkzTabLine{,-,t,+,t,,-,,t, +,}
+ \draw[fill=black] (N21) circle(2pt);
+ \draw[fill=black] (N31) circle(2pt);
+ \draw[fill=black] (N51) circle(2pt);
+ \draw[->=stealth, line width=1.5pt] (N11) -> (N61.east) node[right=2pt] {$x$};
+ \end{tikzpicture}
+\end{tkzexample}
+
+\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-tab/doc/latex/TKZdoc-tab-image.tex b/macros/latex/contrib/tkz/tkz-tab/doc/latex/TKZdoc-tab-image.tex
new file mode 100644
index 0000000000..6dc458860b
--- /dev/null
+++ b/macros/latex/contrib/tkz/tkz-tab/doc/latex/TKZdoc-tab-image.tex
@@ -0,0 +1,180 @@
+\section{Ajout d'images \addbs{tkzTabIma} et \addbs{tkzTabImaFrom}}
+Ces macros permettent de placer une valeur sur une flèche de la ligne des variations. On ne peut placer une valeur que dans un intervalle où la fonction est \tkzname{monotone}, de plus l'image est celle d'un antécédent déjà défini dans la première ligne. La première macro est \tkzcname{tkzTabIma}.
+
+\subsection{Définition de \addbs{tkzTabIma}}
+
+\begin{NewMacroBox}{tkzTabIma}{\oarg{local options}\{Début\}\{Fin\}\{Position\}\{Antécédent\}\{Image\}}
+
+\begin{tabular}{lllc}
+\toprule
+\texttt{arguments} & \texttt{défaut} & \texttt{définition} \\
+\toprule
+\IargName{tkzTabIma}{Début} & |no default|& rang de l'origine de la flèche \\
+\IargName{tkzTabIma}{Fin} & |no default|& rang de l'extrémité de la flèche \\
+\IargName{tkzTabIma}{Position} & |no default| & rang de l'antécédent correspondant à l'image \\
+\IargName{tkzTabIma}{Image} & |no default| & valeur de l'image si nécessaire \\
+\bottomrule
+\end{tabular}
+
+\medskip
+\noindent\emph{Ceci mérite quelques commentaires : Il s'agit de savoir sur quelle flèche, on va positionner l'image. \tkzname{Début} et \tkzname{Fin} sont les rangs des valeurs qui déterminent les extrémités de la flèche. \tkzname{Image} est la valeur que l'on veut placer. \tkzname{Position} est un nombre entier qui est le rang de l'antécédent.}
+
+\medskip
+\begin{tabular}{lllc}
+\toprule
+\texttt{options} & \texttt{défaut} & \texttt{définition} \\
+\midrule
+\IoptName{tkzTabIma}{draw} & |true| & dessin d'une flèche entre l'antécédent et son image \\
+\IoptName{tkzTabIma}{remember}& |lastval|& définit un node personnalisé \\
+\bottomrule
+\end{tabular}
+
+\medskip
+\noindent\emph{Si vous voulez une flèche entre l'antécédent et l'image, il vous suffit de passer en option \tkzname{draw}. Si vous voulez référencer le point où se situe l'image alors il faut utiliser l'option \tkzname{remember}.}
+\end{NewMacroBox}
+
+\subsubsection{Ajout de valeurs intermédiaires à partir d'un antécédent donné}
+Il y a plusieurs possibilités mais la suivante est préférable. L'antécédent est de rang $2$.
+ La fonction est monotone entre les valeurs de rang $1$ et $3$. Voici comment faire apparaître l'image par $f$ de $\sqrt\E$.
+
+\begin{tkzexample}[vbox,small]
+\begin{tikzpicture}
+\tkzTabInit[espcl=6]%
+ {$x$/1,$f'(x)$/1, $f(x)$/2}{$0$,$\sqrt\E$,$+\infty$}%
+ \tkzTabLine{d,+,0,+,}%
+ \tkzTabVar{D- /$-\infty$ , R / ,+ / $0$ }%
+ \tkzTabIma{1}{3}{2}{-5}
+\end{tikzpicture}
+\end{tkzexample}
+\Iopt{tkzTabVal}{draw}
+
+Une autre possibilité est d'utiliser la macro \tkzcname{tkzTabImaFrom} ainsi que les nodes créés pour construire le tableau ; voir la section \og personnalisation \fg\ (\ref{pers}) et la fin de ce chapitre.
+
+\subsubsection{Exemple avec plusieurs lignes de variations}
+\begin{tkzexample}[vbox,small]
+ \begin{tikzpicture}
+
+ \tkzTabInit[espcl=4]
+ { $x$ /1,
+ $f''(x)$ /1,
+ $f'$ /2,
+ Signe de\\ $f'(x)$ /2,
+ $f$ /3}%
+ { $0$ , $1$ , $\alpha$,$+\infty$ }%
+ \tkzTabLine {d , + , z , - , , - }%
+ \tkzTabVar
+ {- / $1$ ,
+ + / ,
+ R / ,
+ - / $-\infty$ }
+ \tkzTabIma[draw]{2}{4}{3}{$0$}
+ % ou bien \tkzTabVal[draw]{2}{4}{0.5}{}{0} obsolète
+ \tkzTabLine { , + , , + , z , - }%
+ \tkzTabVar
+ {- / $-\infty$ ,
+ R / ,
+ + / $1$ ,
+ - / $0$ }
+ \tkzTabIma[draw]{1}{3}{2}{$0$}
+ \end{tikzpicture}
+\end{tkzexample}
+
+
+\subsubsection{Fonctions paramétrées}
+\NameFonct{Fonctions paramétrées}
+
+\begin{tkzexample}[vbox,small]
+ \begin{tikzpicture}
+ \tkzTabInit[ lgt=4, deltacl=1, espcl=2]%
+ {$t$ /1,
+ Signe de\\ $x'(t)$ /1.5,
+ Variations de\\ $x$ /3,
+ Variations de\\ $y$ /3,
+ Signe de\\ $y'(t)$ /1.5}
+ { $-\infty$ , $-4$ , $-1$ , $0$, $2$ , $+\infty$}%
+
+ \tkzTabLine { , - , z , + , d , + , z , - , d , - , }
+
+ \tkzTabVar {+/$1$ , -/$ \frac{8}{9}$ ,+D-/$+\infty$/$-\infty$ ,
+ +/$0$/ ,-D+ /$-\infty$/ $+\infty$ , -/$1$ / }
+
+ \tkzTabVar {+/$+\infty$ , R/ ,-D+/$-\infty$/$+\infty$ ,
+ -/$0$ ,R / , +/$+\infty$ }
+
+ \tkzTabIma{1}{3}{2}{$\frac{32}{3}$}
+ \tkzTabIma{4}{6}{5}{$\frac{16}{3}$}
+
+ \tkzTabLine{ , - , \frac{-64}{9} , - , d , - , z , + , \frac{44}{9} , + , }
+ \end{tikzpicture}
+\end{tkzexample}
+
+\subsection{Définition de \addbs{tkzTabImaFrom}}
+Cette macro ressemble à la précédente mais elle permet de placer une image relativement à une autre image ou relativement à un point quelconque du tableau auquel on a attribué un nom.
+
+\begin{NewMacroBox}{tkzTabImaFrom}{\oarg{local options}\{Début\}\{Fin\}\{From\}\{Image\}}
+
+\begin{tabular}{lllc}
+\toprule
+\texttt{arguments} & \texttt{défaut} & \texttt{définition} \\
+\midrule
+\IargName{tkzTabImaFrom}{Début} & |no default| & rang de l'origine de la flèche \\
+\IargName{tkzTabImaFrom}{Fin} & |no default| & rang de l'extrémité de la flèche \\
+\IargName{tkzTabImaFrom}{From} & |no default| & nom d'un point \\
+\IargName{tkzTabImaFrom}{Image} & |no default| & valeur de l'image \\
+\bottomrule
+\end{tabular}
+
+\medskip
+\noindent\emph{Comme pour \tkzcname{tkzTabVal}, \tkzname{Début} et \tkzname{Fin} sont les rangs des valeurs qui déterminent les extrémités de la flèche. \tkzname{Image} est la valeur que l'on veut placer. \tkzname{From} est le nom du node qui correspond à l'antécédent.}
+
+\medskip
+\begin{tabular}{lllc}
+\toprule
+\texttt{options} & \texttt{défaut} & \texttt{définition} \\
+\midrule
+\IoptName{tkzTabImaFrom}{draw} & |true| & dessin d'une flèche entre l'antécédent et son image \\
+\IoptName{tkzTabImaFrom}{remember}& |lastval|& définit un node personnalisé \\
+\bottomrule
+\end{tabular}
+
+\medskip
+\noindent\emph{Si vous voulez une flèche entre l'antécédent et l'image, il vous suffit de passer en option \tkzname{draw}. Si vous voulez référencer le point où se situe l'image alors il faut utiliser l'option \tkzname{remember}.}
+
+\end{NewMacroBox}
+
+\subsubsection{Utilisation d'un node défini par la macro \addbs{tkzTabInit}}
+Il s'agit ici de \tkzname{N21}. C'est un node, plus exactement un point situé sous la seconde valeur $\sqrt\E$ et sur le premier filet horizontal sous cette valeur. Voir le chapitre \tkzname{personnalisation} et en particulier l'option \tkzname{help} qui permet d'afficher différents points de construction.
+
+\begin{tkzexample}[vbox,small]
+\begin{tikzpicture}
+\tkzTabInit[espcl=6]%
+ {$x$/1,$f'(x)$/1, $f(x)$/3}{$0$,$\sqrt\E$,$+\infty$}%
+ \tkzTabLine{d,+,0,+,}%
+ \tkzTabVar{D-/ $-\infty$, R/ , +/$0$ }
+ \tkzTabImaFrom[draw]{1}{3}{N21}{-5}
+ \draw[opacity=0.4,fill=red!30] (N21) circle(3ex);
+ \draw[fill=red] (N21) circle(2pt);
+ \node[above right= 12pt,red](txt) at (N21) {$N21$};
+\end{tikzpicture}
+\end{tkzexample}
+\Iopt{tkzTabImaFrom}{draw}
+
+\subsubsection{Utilisation d'un point défini par l'utilisateur avec \texttt{\textcolor{red}{remember}}}
+
+\begin{tkzexample}[vbox, num,small]
+ \begin{tikzpicture}
+ \tkzTabInit[lgt=3,espcl=6]{ $x$/1, $f'(x)$/1, $f(x)$/3,/3 }%
+ { $a$ , $d$ ,$e$}
+ \tkzTabLine{ z,+ ,z,- ,z }
+ \tkzTabVar {-/\va ,+/\vd , -/ \ve}
+ \tkzTabVal[draw,remember=vb]{1}{2}{0.333}{b}{$0$}
+ \tkzTabVal[draw,remember=vc]{1}{2}{0.666}{c}{$1$}
+ \tkzTabVar{-/\va ,R/ , +/ \ve}
+ \tkzTabVal[draw]{1}{3}{0.5}{}{$0$}
+ \tkzTabImaFrom[draw]{1}{3}{vc}{$-1$}
+ \tkzTabImaFrom[draw]{1}{3}{vb}{$-2$}
+ \end{tikzpicture}
+\end{tkzexample}
+\Iopt{tkzTabImaFrom}{remember}
+
+\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-tab/doc/latex/TKZdoc-tab-init.tex b/macros/latex/contrib/tkz/tkz-tab/doc/latex/TKZdoc-tab-init.tex
new file mode 100644
index 0000000000..43d568361c
--- /dev/null
+++ b/macros/latex/contrib/tkz/tkz-tab/doc/latex/TKZdoc-tab-init.tex
@@ -0,0 +1,201 @@
+\newpage
+\section{Initialisation d'un tableau : \addbs{tkzTabInit} }
+\subsection{Définition}
+
+\begin{NewMacroBox}{tkzTabinit}%
+{\oarg{local options}\var{e(1)/h(1),...,e(p)/h(p)}\var{a(1),...,a(n)}}
+
+\begin{tabular}{lllc}
+\toprule
+arguments & défaut & définition \\
+\midrule
+\TAline{liste1} {no default } {\var{e(1)/h(1),...,e(p)/h(p)} }
+\TAline{liste2} {no default } {\var{a(1),...,a(n)}}
+\bottomrule
+\end{tabular}
+
+\medskip
+\noindent\emph{Les arguments obligatoires de cette macro sont deux listes dont les éléments sont séparés par des virgules. La première contient $p$ éléments qui définissent $p$ lignes dans le tableau. La seconde liste contient $n$ éléments qui définissent $n$ antécédents. À un antécédent correspond une colonne.}
+
+ \begin{itemize}
+
+\item Liste 1 : \emph{les éléments de la première liste sont des paires \tkzname{e(i)/h(i)} où \tkzname{/} est un séparateur entre d'une part, une expression \tkzname{e(1)} et d'autre part, un nombre exprimé en \tkzname{centimètres}. \tkzname{h(i)} est pour tout $i$ un nombre décimal qui fait référence à la hauteur en \tkzname{cm} de la ligne qui contient l'expression \tkzname{e(i)}. Les nombres décimaux utilisent le point comme séparateur.}
+
+\item Liste 2 : \emph{On ne peut pas utiliser les symboles \og \tkzname{/} \fg\ et \og \tkzname{,} \fg\ dans \tkzname{e(i)} sauf si on les protège dans un groupe\protect\footnotemark. La protection de la virgule par une paire d'accolades |\{4,5\}| peut avantageusement être remplacée par une commande comme \tkzcname{numprint\{4,5\}} ou encore \tkzcname{np\{4,5\}}\protect\footnotemark.}
+ \end{itemize}
+\NamePack{numprint}
+
+\medskip
+\begin{tabular}{lllc}
+\toprule
+options & défaut & définition \\
+\midrule
+\TOline{espcl} {2 cm}{espacement entre deux valeurs }
+\TOline{lgt} { 2 cm}{largeur de la première colonne }
+\TOline{deltacl}{0.5 cm}{marge avant le premier et le dernier antécédent}
+\TOline{lw} {0.4 pt}{épaisseur des lignes du tableau }
+\TOline{nocadre}{false}{par défaut, on encadre le tableau }
+\TOline{color} {false}{booléen autorise la couleur\protect\footnotemark}
+\TOline{colorC} {white}{couleur de la première colonne }
+\TOline{colorL} {white}{couleur de la première ligne }
+\TOline{colorT} {white}{couleur de la partie centrale }
+\TOline{colorV} {white}{couleur de la case de la variable }
+\TOline{help} {false}{affiche les noms des points de construction} \bottomrule
+\end{tabular}
+
+\medskip
+\noindent\emph{Le tableau ci-dessus décrit les options actuelles de la macro. Les trois premières sont essentielles pour l'esthétisme de votre tableau, ainsi que pour ses dimensions finales. Il reste cependant une possibilité car on peut encore jouer avec les options de l'environnement \tkzname{tikzpicture} qui sont \tkzname{scale}, \tkzname{xscale} et \tkzname{yscale}.}
+\end{NewMacroBox}
+
+\footnotetext[3]{expression entre accolades.}
+\footnotetext[4]{Voir la documentation du package \tkzname{numprint}.}
+\footnotetext[5]{Il est préférable de charger le package \tkzname{xcolor} avec des options comme \tkzname{usenames} ou bien \tkzname{dvipsnames}.}
+
+\subsection{Utilisation des arguments}
+\subsubsection{Tableau simple}
+\medskip
+Exemple : \begin{tkzexample}[code only]\tikz \tkzTabInit{$x$ /.8 , $f(x)$ /.8}{$0$ , $+\infty$}; \end{tkzexample}crée un tableau de \tkzname{deux} lignes. La première ligne fait $\np{0.8}$ cm de hauteur, ainsi que la seconde. La colonne de droite a pour bornes $0$ et $+\infty$.
+
+\medskip
+\begin{center}
+ \tikz \tkzTabInit{$x$ /.8 , $f(x)$ /.8}{$0$ , $+\infty$};
+\end{center}
+\subsubsection{Ajout de lignes et de colonnes}
+
+La première liste permet d'obtenir trois lignes qui ont pour hauteur $1$ cm. La seconde liste comporte trois antécédents qui déterminent deux intervalles (zones). Il sera possible de placer des filets verticaux sous ces antécédents.
+
+\begin{tkzexample}[width=10cm,small]
+\begin{tikzpicture}
+\tkzTabInit
+ {$x$ /1,
+ $f(x)$ /1,
+ $g(x)$ /1}
+ {$0$,$\E$,$+\infty$}
+\end{tikzpicture}
+\end{tkzexample}
+Il est à noter l'utilisation de la macro \tkzcname{E} \footnote{\tkzcname{E} est définie ainsi \BS newcommand*\{\BS E\}\{\BS ensuremath\{\BS mathrm\{e\}\}\}.}
+\subsubsection{Tableau minimum}
+\index{Tableau minimum}
+Le premier argument est \tkzname{ /1}, c'est l'argument minimum. L'argument est une liste avec comme séparateur le symbole \tkzname{/}. Celui-ci est précédé d'un blanc ou d'un vide. La première case de la ligne sera vide. Le \tkzname{$1$} signifie \tkzname{$1$ cm} car une dimension en cm est obligatoire pour donner la hauteur de la ligne. Le deuxième argument est constitué de deux éléments vides ou bien de deux blancs séparés par une virgule. Cet argument doit contenir au minimum deux éléments. Ces deux éléments sont les bornes d'un intervalle.
+
+\begin{tkzexample}[width=8cm,small]
+\begin{tikzpicture}
+ \tkzTabInit{ / 1}
+ { , }
+\end{tikzpicture}
+\end{tkzexample}
+
+\subsection{Utilisation des options}
+
+Tout d'abord on peut modifier certaines dimensions concernant les colonnes. Voyons les valeurs par défaut.
+
+\begin{center}
+ \begin{tikzpicture}
+ \tkzTabInit
+ {$x$ / 1}
+ {$a_1$ , $a_2$ , $a_3$}
+ \begin{scope}[arstyle/.style={>=latex,#1,<->}]
+ \draw[arstyle=blue] (N10) to node[above,color=blue]%
+ {\scriptsize $ espcl = 2$ cm} (N20);
+ \draw[arstyle=blue] (N20) to node[above,color=blue]%
+ {\scriptsize $ espcl = 2$ cm} (N30);
+ \draw[arstyle=red] (T10) to node[above=12pt,color=red]%
+ {\scriptsize $ deltacl = 0,5$ cm} (N10);
+ \draw[arstyle=red] (N30) to node[above=12pt,color=red]%
+ {\scriptsize $ deltacl = 0,5$ cm} (T20);
+ \draw[arstyle=blue] (T00) to node[above,color=blue]%
+ {\scriptsize $ lgt = 2$ cm} (T10);
+ \end{scope}
+ \end{tikzpicture}
+\end{center}
+
+
+\subsubsection{\texttt{\textcolor{red}{lgt}} : modification de la largeur de la première colonne}\Iopt{tkzTabInit}{lgt}
+
+Par défaut la largeur de cette première colonne est de $2$ cm. L'unité est toujours le \tkzname{cm}.
+
+\begin{tkzexample}[width=8cm,small]
+\begin{tikzpicture}
+ \tkzTabInit[lgt=3]{ $x$ / 1}
+ { $1$ , $3$ }
+\end{tikzpicture}
+\end{tkzexample}
+
+\subsubsection{\texttt{\textcolor{red}{espcl}} : modification de l'espacement entre deux valeurs}\Iopt{tkzTabInit}{espcl}
+
+\begin{tkzexample}[width=9cm,small]
+\begin{tikzpicture}
+ \tkzTabInit[lgt=3,espcl=4]%
+ { $x$ / 1}
+ { $1$ , $4$ }
+\end{tikzpicture}
+\end{tkzexample}
+
+\subsubsection{\texttt{\textcolor{red}{deltacl}} : modification des espacements aux extrémités}\Iopt{tkzTabInit}{deltacl}
+
+\begin{tkzexample}[width=9cm,small]
+\begin{tikzpicture}
+ \tkzTabInit[lgt=3,deltacl=1]%
+ { $x$ / 1}
+ { $1$ , $4$ }
+\end{tikzpicture}
+\end{tkzexample}
+
+\subsubsection{\texttt{\textcolor{red}{lw}} : épaisseur des lignes du tableau}
+\Iopt{tkzTabInit}{lw}
+Ce n'est pas recommandé. Il est préférable que tous les traits d'un document aient la même épaisseur qui par défaut est de $\np{0,4}$ pt.
+
+\begin{tkzexample}[width=8cm,small]
+\begin{tikzpicture}
+ \tkzTabInit[lw=2pt]{ / 1}
+ { , }
+\end{tikzpicture}
+\end{tkzexample}
+
+\subsubsection{\texttt{\textcolor{red}{nocadre}} : suppression du cadre externe}
+\Iopt{tkzTabInit}{nocadre}
+
+\begin{tkzexample}[width=8cm,small]
+\begin{tikzpicture}
+ \tkzTabInit[nocadre]{ / 1, /1, /1}
+ { , }
+\end{tikzpicture}
+\end{tkzexample}
+
+\subsubsection{\texttt{\textcolor{red}{color}} : utilisation de la couleur dans un tableau}
+\Iopt{tkzTabInit}{color}\NamePack{amsmath}
+\tkzname{color} est un booléen et indique que l'on veut utiliser la couleur. Pour cela, il faut donner les couleurs attribuées à la première ligne \tkzname{colorL}, la première colonne \tkzname{colorC}, à la case de la variable \tkzname{colorV} et aux lignes \tkzname{colorT}. Il est possible d'attribuer une couleur pour une ligne particulière.
+
+\tkzname{tkzTabInit\{[color]\}} signifie que le booléen color est à vrai.
+
+\begin{tkzexample}[width=8cm,small]
+\begin{tikzpicture}
+ \tkzTabInit[color,
+ colorT = yellow!20,
+ colorC = orange!20,
+ colorL = green!20,
+ colorV = lightgray!20]
+ { /1 , /1}{ , }
+\end{tikzpicture}
+\end{tkzexample}
+
+\begin{tkzexample}[width=8cm]
+\begin{tikzpicture}
+ \tkzTabInit[color,
+ colorT = yellow!20,
+ colorC = red!20,
+ colorL = green!20,
+ colorV = lightgray!20,
+ lgt = 1,
+ espcl = 2.5]%
+ {$t$/1,$a$/1,$b$/1,$c$/1,$d$/1}%
+ {$\alpha$,$\beta$,$\gamma$}%
+\end{tikzpicture}
+\end{tkzexample}
+
+\subsubsection{\texttt{\textcolor{red}{help}} : Affiche la structure du tableau}
+\Iopt{tkzTabInit}{help}
+Voir la section \og personnalisation \fg\ (\ref{pers}).
+\endinput
+
+
diff --git a/macros/latex/contrib/tkz/tkz-tab/doc/latex/TKZdoc-tab-main.tex b/macros/latex/contrib/tkz/tkz-tab/doc/latex/TKZdoc-tab-main.tex
new file mode 100644
index 0000000000..e6b191b5b9
--- /dev/null
+++ b/macros/latex/contrib/tkz/tkz-tab/doc/latex/TKZdoc-tab-main.tex
@@ -0,0 +1,187 @@
+% !TEX TS-program = lualatex
+% encoding : utf8
+% linknodesdoc.tex
+% Created by Alain Matthes on 2008-01-19.
+% Copyright (C) 2009 Alain Matthes
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License , either version 1.3
+% of this license or (at your option) any later version and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/generic/pgf/licenses/LICENSE for more details.%
+% See http://www.latex-project.org/lppl.txt for details.
+%
+%
+% ``TKZdoc-tab-main '' is the french doc of tkz-tab
+%
+%
+\documentclass[DIV = 14,
+ fontsize = 10,
+ headinclude = false,
+ index = totoc,
+ footinclude = false,
+ twoside,
+ headings = small
+ ]{tkz-doc}
+\usepackage{etoc}
+
+\gdef\tkznameofpack{Tkz-Tab}
+\gdef\tkzversionofpack{2.1c}
+\gdef\tkzdateofpack{2020/04/10}
+\gdef\tkznameofdoc{doc-tkz-tab}
+\gdef\tkzdateofdoc{2020/04/10}
+\gdef\tkzversionofdoc{2.1c}
+\gdef\tkzauthorofpack{Alain Matthes}
+\gdef\tkzadressofauthor{}
+\gdef\tkznamecollection{AlterMundus}
+\gdef\tkzurlauthor{http://altermundus.fr}
+\gdef\tkzurlauthorcom{http://altermundus.fr}
+\gdef\tkzengine{lualatex}
+
+\usepackage{tkz-tab}
+\usetikzlibrary[petri,babel]
+\usepackage[colorlinks]{hyperref}
+\hypersetup{
+ linkcolor=Gray,
+ citecolor=Green,
+ filecolor=Mulberry,
+ urlcolor=NavyBlue,
+ menucolor=Gray,
+ runcolor=Mulberry,
+ linkbordercolor=Gray,
+ citebordercolor=Green,
+ filebordercolor=Mulberry,
+ urlbordercolor=NavyBlue,
+ menubordercolor=Gray,
+ runbordercolor=Mulberry,
+ pdfsubject={Cartesian System},
+ pdfauthor={\tkzauthorofpack},
+ pdftitle={\tkznameofpack},
+ pdfkeywords={tikz, pgf, pdf, pdflatex, graphic, euclide,lualatex,
+ geometry, points, maths, line, circle, angle ,polygon},
+ pdfcreator={\tkzengine}
+}
+\usepackage{tkzexample}
+\usepackage{fontspec}
+\setmainfont{texgyrepagella}[
+ Extension = .otf,
+ UprightFont = *-regular ,
+ ItalicFont = *-italic ,
+ BoldFont = *-bold ,
+ BoldItalicFont = *-bolditalic ,
+]
+\setsansfont{texgyreheros}[
+ Extension = .otf,
+ UprightFont = *-regular ,
+ ItalicFont = *-italic ,
+ BoldFont = *-bold ,
+ BoldItalicFont = *-bolditalic ,
+]
+
+\setmonofont{lmmono10-regular.otf}[
+ Numbers={Lining,SlashedZero},
+ ItalicFont=lmmonoslant10-regular.otf,
+ BoldFont=lmmonolt10-bold.otf,
+ BoldItalicFont=lmmonolt10-boldoblique.otf,
+]
+\newfontfamily\ttcondensed{lmmonoltcond10-regular.otf}
+%% (La)TeX font-related declarations:
+\linespread{1.05} % Pagella needs more space between lines
+\usepackage{unicode-math}
+\usepackage{fourier-otf}
+% \makeatletter
+% \if@tkzcadre \usepackage{zorna} \fi
+% \makeatother
+\usepackage{calc}
+\usepackage[french]{babel}
+\usepackage[np,autolanguage]{numprint}
+\usepackage[parfill]{parskip}
+\usepackage{array,multirow,multido,booktabs}
+\usepackage{shortvrb,fancyvrb}
+\renewcommand{\labelitemi}{--}
+
+\usepackage{url}
+\def\UrlFont{\small\ttfamily}
+% \usepackage[protrusion = true,
+% expansion,
+% final,
+% verbose = false,
+% babel = true]{microtype}
+
+
+%\DisableLigatures{encoding = T1, family = tt*}
+\makeatletter
+%\renewcommand*\l@subsubsection{\bprot@dottedtocline{3}{3.8em}{4em}}
+\makeatother
+\AtBeginDocument{\MakeShortVerb{\|}}
+
+\colorlet{graphicbackground}{white}
+\colorlet{codebackground}{Gray!20}
+\newcommand*{\E}{\ensuremath{\mathrm{e}}}
+
+\setlength\parindent{0pt}
+\RequirePackage{makeidx}
+%\@twocolumnfalse
+\makeindex
+%<--------------------------------------------------------------------------->
+\begin{document}
+
+
+\title{\tkznameofpack}
+\date{\today}
+\clearpage
+\thispagestyle{empty}
+ \maketitle
+\clearpage
+%
+% \definecolor{fondpaille}{cmyk}{0,0,0.1,0}
+% \colorlet{graphicbackground}{fondpaille}
+% \colorlet{codebackground}{brown!15}
+% \colorlet{codeonlybackground}{brown!15}
+% \colorlet{textcodecolor}{Maroon}
+
+
+\nameoffile{\tkznameofpack}
+\defoffile{\textbf{tkz-tab.sty} est un package pour créer à l'aide de \TIKZ\ des tableaux de signes et de variations le plus simplement possible. Il est dépendant de \TIKZ\ et fera partie d'une série de packages ayant comme point commun, la création de dessins utiles dans l'enseignement des mathématiques. La lecture de cette documentation va, je l'espère vous permettre d'apprécier la simplicité d'utilisation de \TIKZ\ et vous permettre de commencer à le pratiquer.}
+
+\presentation
+
+\vfill
+\lefthand\ Je remercie \tkzimp{Till Tantau} pour nous permettre d'utiliser \tkzname{\TIKZ}.
+
+\lefthand\ Je remercie \tkzimp{Michel Bovani} pour nous permettre d'utiliser \tkzname{fourier} et \tkzname{utopia} avec \LaTeX.
+
+\lefthand\ Je remercie \tkzimp{Henri-Claude Dufresne } pour sa lecture approfondie de la documentation et ses propositions de correction.
+
+\lefthand\ Je remercie également \tkzimp{Jean-Côme Charpentier}, \tkzimp{Manuel Pégourié-Gonnard}, \tkzimp{Franck Pastor}, \tkzimp{Ulrike Fischer} et \tkzimp{Josselin Noirel} pour les différentes idées et conseils qui m'ont permis de faire ce package, ainsi que \tkzimp{Herbert Vo\ss } pour son document \tkzname{mathmode.pdf}.
+
+
+
+\clearpage
+\tableofcontents
+%<--------------------------------------------------------------------------->
+\newcommand*{\va}{\colorbox{red!50} {$\scriptscriptstyle V_a$}}
+\newcommand*{\vb}{\colorbox{blue!50} {$\scriptscriptstyle V_b$}}
+\newcommand*{\vbo}{\colorbox{blue!50} {$\scriptscriptstyle V_{b1}$}}
+\newcommand*{\vbt}{\colorbox{yellow!50}{$\scriptscriptstyle V_{b2}$}}
+\newcommand*{\vc}{\colorbox{gray!50} {$\scriptscriptstyle V_c$}}
+\newcommand*{\vd}{\colorbox{magenta!50}{$\scriptscriptstyle V_d$}}
+\newcommand*{\ve}{\colorbox{orange!50} {$\scriptscriptstyle V_e$}}
+%<--------------------------------------------------------------------------->
+\input{TKZdoc-tab-init}
+\input{TKZdoc-tab-sign}
+\input{TKZdoc-tab-variation}
+\input{TKZdoc-tab-tv}
+\input{TKZdoc-tab-valeurs}
+\input{TKZdoc-tab-image}
+\input{TKZdoc-tab-tangente}
+\input{TKZdoc-tab-slope}
+\input{TKZdoc-tab-style}
+\input{TKZdoc-tab-adapt}
+\input{TKZdoc-tab-examples}
+%<-------------------------------------------------------------------------->
+\newpage
+\printindex
+\end{document} \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-tab/doc/latex/TKZdoc-tab-sign.tex b/macros/latex/contrib/tkz/tkz-tab/doc/latex/TKZdoc-tab-sign.tex
new file mode 100644
index 0000000000..2ba16e3acf
--- /dev/null
+++ b/macros/latex/contrib/tkz/tkz-tab/doc/latex/TKZdoc-tab-sign.tex
@@ -0,0 +1,311 @@
+\newpage
+\section{Création d'une ligne de signes : \tkzcname{tkzTabLine}}
+\subsection{Définition}
+
+\begin{NewMacroBox}{tkzTabLine}{\oarg{local options}\var{s(1),...,s(2n-1)}}
+ $n$ est le nombre d'éléments du second argument de \tkzname{tkzTabInit}.
+
+\medskip
+\begin{tabular}{lll}
+\toprule
+symbole de rang impair & & définition \\
+\midrule
+\TAline{z} {} {place un trait en pointillés et un zéro centré}
+\TAline{t} {} {place un trait en pointillés centré}
+\TAline{d} {} {place une double barre centrée}
+\TAline{\BS textvisiblespace}{} {aucune action }
+\bottomrule
+\end{tabular}
+
+\medskip
+\begin{tabular}{lll}
+\toprule
+symbole de rang pair & & définition \\
+\midrule
+\TAline{h} {} {zone interdite}
+\TAline{+} {} {le signe $+$}
+\TAline{-} {} {le signe $-$}
+\TAline{\BS textvisiblespace}{} {aucune action }
+\bottomrule
+
+\end{tabular}
+
+
+\medskip
+\noindent\emph{\tkzcname{tkzTabLine} accepte comme argument une liste constituée de symboles. Dans une utilisation \tkzname{normale}, les symboles font partie de deux catégories; les symboles de rang impair et les symboles de rang pair. Cette distinction est due au fait que les symboles de rang impair sont en général des traits (filets) et ceux pour les places de rang pair sont en général des signes \og $+$ ou $-$ \fg. Les symboles de rang impair agissent graphiquement, et permettent de tracer des filets verticaux. L'argument de \tkzcname{tkzTabLine} en contient \tkzname{$n$} si on suppose que le deuxième argument de \tkzcname{tkzTabInit} possède \textcolor{red}{$n$} éléments (antécédents). Les symboles de rang pair permettent d'obtenir un signe \og $+$ ou $-$ \fg\ ou bien une zone interdite (hachurée ou colorée). Chaque ligne de signes en contient \tkzname{$n-1$} et contiendra donc un total de \tkzname{$2n-1$} éléments, c'est à dire \tkzname{$2n-2$} virgules !\\
+Les différents symboles "reconnus" sont donnés dans le tableau ci-dessus, mais vous devez savoir que l'on peut mettre pratiquement n'importe quoi. Cependant attention! la virgule \textcolor{red}{(,)} est le séparateur de liste aussi vous devez prendre des précautions pour introduire un nombre à virgule. Vous avez plusieurs possibilités~:
+\begin{itemize}
+\item[--] \{4,5\} on place le nombre entre des accolades.
+\item[--] \tkzcname{numprint\{4,5\}} ou encore \tkzcname{np\{4,5\}}, ce qui nécessite de charger l'excellent package \tkzname{numprint}\NamePack{numprint} avec l'option \tkzname{np} pour le raccourci.
+\end{itemize}}
+
+\medskip
+\begin{tabular}{lllc}
+\toprule
+options & défaut & définition \\
+\midrule
+\TOline{style} {dotted } {style des traits verticaux }
+\TOline{help} {no default} {affiche la structure d'une ligne de signes}
+\bottomrule
+\end{tabular}
+
+\medskip
+\noindent\emph{Il est possible de changer localement le style des filets verticaux et il est possible d'avoir des renseignements sur la structure de la ligne.}
+\end{NewMacroBox}
+
+\subsection{Nombre d'arguments utilisés.}
+La syntaxe générale est :
+
+\begin{tkzltxexample}[]
+ \tkzTabInit{ e(1),...,e(i),...,e(p)} % tableau à p lignes.
+ { a(1),...,a(i),...,a(n)} % n antécédents
+ \tkzTabLine{ s(1),...,s(i),...,s(2n-1)}
+\end{tkzltxexample}
+
+
+\medskip
+Si on utilise \tkzname{$n$} antécédents pour la première ligne alors il y aura \tkzname{$n$} symboles de rang impair et \tkzname{$n-1$} symboles de rang pair, soit \tkzname{$2n-1$} symboles.
+
+ Les principaux symboles utilisés sont : \tkzname{z} pour un zéro placé sur un trait, \tkzname{t} pour un trait correspondant à un zéro d'une autre ligne, \tkzname{d} pour une valeur pour laquelle l'expression n'est pas définie.
+
+Voyons une illustration simple : trois antécédents $a_1$, $a_2$, et $a_3$ permettront de mettre $2\times3 -1 =5$ symboles. Les $3$ valeurs de la première ligne impliquent pour l'argument de \tkzcname{tkzTabLine} de posséder {$2\times 3-1=5$} éléments c'est-à-dire être une liste comportant $3$ symboles de rang impair et $2$ symboles de rang pair, soit un total de $5$ symboles qui seront séparés par $4$ virgules.
+
+\begin{center}
+ \begin{tikzpicture}
+ \tkzTabInit[espcl=3,lgt=2]%
+ {\colorbox{red!40}{\textcolor{white}{$x$}} / 1,%
+ \colorbox{red!40}{\textcolor{white}{$f(x)$}} / 1}%
+ {\colorbox{blue!40}{\textcolor{white}{ $a_1$}},%
+ \colorbox{blue!40}{\textcolor{white}{ $a_2$}},%
+ \colorbox{blue!40}{\textcolor{white}{ $a_3$}}}%
+ \path (N11)--(N12) node[circle,draw, fill= lightgray,midway] {1};
+ \path (N12)--(N21) node[midway] {$,$};
+ \path (N21)--(N22) node[circle, draw, fill= lightgray,midway] {3};
+ \path (N31)--(N32) node[circle,draw, fill= lightgray,midway] {5};
+ \path (M11)--(M12) node[circle, draw, fill= orange!30,midway] {2};
+ \path (M21)--(M22) node[circle,draw, fill= orange!30,midway] {4};
+ \end{tikzpicture}
+\end{center}
+
+Pour obtenir cette ligne, il faut entrer
+\begin{tkzexample}[code only]\tkzTabLine{ $1$ , $2$ , $3$ , $4$ , $5$}
+\end{tkzexample}
+
+
+
+
+
+\subsection{Emploi minimum}
+La deuxième ligne est vide mais l'argument \tkzcname{tkzTabLine} doit comporter \tkzname{$4$} virgules. C'est en effet une liste comportant \tkzname{$5 = 2\times3-1$} valeurs.
+
+\begin{tkzexample}[code only]
+ \tkzTabLine{,,,,} ou \tkzTabLine{ , , , , }\end{tkzexample}
+
+\begin{tkzexample}[width=8cm,small]
+\begin{tikzpicture}
+ \tkzTabInit[espcl=1.5]
+ {$x$ / 1 ,$f(x)$ /1 }%
+ {$v_1$ , $v_2$ , $v_3$ }%
+ \tkzTabLine{ , , , , }
+\end{tikzpicture}
+\end{tkzexample}
+
+\subsubsection{\texttt{\textcolor{red}{t}} : ajout d'un trait}
+Cette option place un simple trait verticalement.
+\begin{tkzexample}[width=8cm,small]
+\begin{tikzpicture}
+ \tkzTabInit[espcl=1.5]
+ {$x$ / 1 ,$f(x)$ /1 }%
+ {$v_1$ , $v_2$ , $v_3$ }%
+ \tkzTabLine{ t, , t , ,t }
+\end{tikzpicture}
+\end{tkzexample}
+
+\subsubsection{\texttt{\textcolor{red}{z}} : ajout d'un zéro sur un trait vertical}
+\begin{tkzexample}[width=8cm,small]
+\begin{tikzpicture}
+ \tkzTabInit[espcl=1.5]
+ {$x$ / 1 ,$f(x)$ /1 }%
+ {$v_1$ , $v_2$ , $v_3$ }%
+ \tkzTabLine{ z, , z , ,z }
+\end{tikzpicture}
+\end{tkzexample}
+
+\subsubsection{\texttt{\textcolor{red}{d}} : double barre}
+
+On peut aussi avoir le cas d'une fonction non définie en $0$ et en $2$ mais s'annulant en $1$. On place à chaque extrémité le symbole |d|.
+
+\begin{tkzexample}[width=7cm,small]
+\begin{tikzpicture}
+ \tkzTabInit[espcl=1.5]%
+ {$x$ / 1,$g(x)$ / 1}%
+ {$0$,$1$,$2$}%
+\tkzTabLine{d,+,0,-,d}
+\end{tikzpicture}
+\end{tkzexample}
+
+On peut aussi avoir le cas d'une fonction admettant une dérivée à droite différente de la dérivée à gauche
+
+\begin{tkzexample}[width=7cm,small]
+\begin{tikzpicture}
+ \tkzTabInit[lgt=1.5,espcl=1.75]%
+ {$x$ / 1,$f'(x)$ / 1}%
+ {$-\infty$,$0$,$+\infty$}%
+ \tkzTabLine{,+,d,-,}
+\end{tikzpicture}
+\end{tkzexample}
+
+\subsection{Utilisation des symboles de rang pair}
+
+Pour un tableau de signe, en principe les symboles de rang pair mais il est possible de détourner l'emploi de base de cette macro. L'exemple suivant montre un cas classique d'une zone du tableau qui correspond à des valeurs interdites. par défaut avec le symbole \tkzname{h}, la zone est grisée mais on peut hachurer cette zone si on préfère.
+Le dernier exemple montre comment détourner l'usage principal.
+
+\subsubsection{\texttt{\textcolor{red}{h}} : zone interdite}
+
+Une fonction peut ne pas être définie sur un intervalle, ici $[1~;~2]$. La partie du tableau qui correspond à cet intervalle sera hachurée ou bien colorée (par défaut, la zone est grisée). Des options permettant de personnaliser seront offertes. Pour l'exemple suivant, il suffit de placer |h| entre les deux |d| qui correspondent aux valeurs interdites\index{valeurs interdites} $1$ et $2$.
+
+\begin{tkzexample}[width=8cm, small]
+\begin{tikzpicture}
+ \tkzTabInit[color,espcl=1.5]
+ {$x$ / 1,$g(x)$ / 1}
+ {$0$,$1$,$2$,$3$}%
+ \tkzTabLine{z, + , d , h , d , - , t}
+\end{tikzpicture}
+\end{tkzexample}
+
+\subsection{Utilisation des options}
+
+\subsubsection{\tkzname{t style} : modification du style des traits verticaux}
+\Istyle{tkzTabLine}{t style}
+
+\begin{tkzexample}[width=7cm, small]
+\begin{tikzpicture}
+\tikzset{t style/.style = {style = dashed}}
+ \tkzTabInit[espcl=1.5]
+ {$x$ / 1 ,$f(x)$ /1 }%
+ {$v_1$ , $v_2$ , $v_3$ }%
+ \tkzTabLine{ t, , t , ,t }
+\end{tikzpicture}
+\end{tkzexample}
+
+
+\begin{tkzexample}[width=7cm, small]
+\tikzset{t style/.style = {style = densely dashed}}
+\begin{tikzpicture}
+ \tkzTabInit[espcl=1.5]
+ {$x$ / 1 ,$f(x)$ /1 }%
+ {$v_1$ , $v_2$ , $v_3$ }%
+ \tkzTabLine{ z, , z , ,z }
+\end{tikzpicture}
+\end{tkzexample}
+
+\subsubsection{\tkzname{help} : Affiche la structure du tableau}
+\Iopt{tkzTabLine}{help}
+Voir la section \og personnalisation \fg\ (\ref{pers}).
+
+
+\subsection{Utilisation des styles}
+
+\subsubsection{\tkzname{h style} : modification de la couleur d'une zone interdite}
+\Istyle{tkzTabLine}{h style} \index{zone interdite}
+Si vous préférez hachurer une zone du tableau, alors il faut modifier un style.
+\begin{tkzexample}[width=8cm,small]
+\begin{tikzpicture}
+ \tikzset{h style/.style = {fill=red!50}}
+ \tkzTabInit[color,espcl=1.5]%
+ {$x$ / 1,$g(x)$ / 1}%
+ {$0$,$1$,$2$,$3$}%
+ \tkzTabLine{z,+,d,h,d,-,t}
+\end{tikzpicture}
+\end{tkzexample}
+
+
+Cette fois la zone est hachurée.
+ \index{hachures}
+\begin{tkzexample}[width=8cm,small]
+\begin{tikzpicture}
+ \tikzset{h style/.style =
+ {pattern=north west lines}}
+ \tkzTabInit[color,espcl=1.5]%
+ {$x$ / 1,$g(x)$ / 1}%
+ {$0$,$1$,$2$,$3$}%
+ \tkzTabLine{z,+,,h,d,-,t}
+\end{tikzpicture}
+\end{tkzexample}
+
+
+
+\subsection{Exemples}
+
+\subsubsection{Simplification d'une expression comportant une valeur absolue }
+
+\begin{tkzexample}[width=8cm,small]
+ \begin{tikzpicture}
+ \tkzTabInit[lgt=2,espcl=1.75]%
+ {$x$/1,$2-x$/1, $\vert 2-x \vert $/1}%
+ {$-\infty$,$2$,$+\infty$}%
+ \tkzTabLine{ , + , z , - , }
+ \tkzTabLine{ , 2-x ,z, x-2, }
+\end{tikzpicture}
+\end{tkzexample}
+
+\subsubsection{Tableau de signes}
+
+\begin{tkzexample}[ small]
+\begin{tikzpicture}
+ \tkzTabInit[lgt=3,espcl=1.5]%
+ {$x$ /1,
+ $x^2-3x+2$ /1,
+ $(x-\E)\ln x$ /1,
+ $\dfrac{x^2-3x+2}{(x-\E)\ln x}$ /2}
+ {$0$ , $1$ , $2$ , $\E$ ,$+\infty$}
+ \tkzTabLine{ t,+,z,-,z,+,t,+,}
+ \tkzTabLine{ d,+,z,-,t,-,z,+,}
+ \tkzTabLine{ d,+,d,+,z,-,d,+,}
+\end{tikzpicture}
+\end{tkzexample}
+
+
+\subsubsection{Signe d'une expression du second degré}
+
+Si $\Delta \geq 0$ on peut écrire $\displaystyle ax^2+bx+c=a\left(x-\dfrac{-b-\sqrt{b^2-4ac}}{2a}\right)\left(x-\dfrac{-b+\sqrt{b^2-4ac}}{2a}\right)$
+
+
+\begin{tkzexample}[vbox,small]
+\begin{tikzpicture}
+ \tkzTabInit[color,lgt=5,espcl=3]%
+ {$x$ / .8,$\Delta>0$\\ Le signe de\\ $ax^2+bx+c$ /1.5}%
+ {$-\infty$,$x_1$,$x_2$,$+\infty$}%
+ \tkzTabLine{ , \genfrac{}{}{0pt}{0}{\text{signe de}}{a}, z
+ , \genfrac{}{}{0pt}{0}{\text{signe}}{\text{opposé de}\ a}, z
+ , \genfrac{}{}{0pt}{0}{\text{signe de}}{a}, }
+ \end{tikzpicture}
+\end{tkzexample}
+ Il faut noter l'emploi de la macro \tkzcname{genfrac}\footnote{\tkzcname{genfrac} est une macro du package \tkzname{amsmath}}.
+
+\medskip
+Si $\Delta = 0$ alors on peut écrire $\displaystyle ax^2+bx+c=a\left(x+\dfrac{b}{2a}\right)^2$
+
+\begin{tkzexample}[vbox,width=7cm,small]
+\begin{tikzpicture}
+ \tkzTabInit[color,lgt=5,espcl=3]%
+ {$x$ / 1 , $\Delta=0$\\ Le signe de\\ $ax^2+bx+c$ / 2}%
+ {$-\infty$,$\dfrac{-b}{2a}$,$+\infty$}%
+ \tkzTabLine{ , \genfrac{}{}{0pt}{0}{\text{signe de}}{ a} , z
+ , \genfrac{}{}{0pt}{0}{\text{signe de}}{a}, }
+\end{tikzpicture}
+\end{tkzexample}
+
+Si $\Delta < 0$ alors $\displaystyle ax^2+bx+c=a\left[\left(x+\dfrac{b}{2a}\right)^2 -\dfrac{b^2-4ac}{4a^2}\right]$
+
+\begin{tkzexample}[vbox,width=7cm,small]
+\begin{tikzpicture}
+ \tkzTabInit[color,lgt=5,espcl=5]%
+ {$x$/.8,$\Delta<0$\\ Le signe de\\ $ax^2+bx+c$/2}%
+ {$-\infty$,$+\infty$}%
+ \tkzTabLine{ , \genfrac{}{}{0pt}{0}{\text{signe de}}{ a}, }
+\end{tikzpicture}
+\end{tkzexample}
+
+
+\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-tab/doc/latex/TKZdoc-tab-slope.tex b/macros/latex/contrib/tkz/tkz-tab/doc/latex/TKZdoc-tab-slope.tex
new file mode 100644
index 0000000000..85e9d4b5e2
--- /dev/null
+++ b/macros/latex/contrib/tkz/tkz-tab/doc/latex/TKZdoc-tab-slope.tex
@@ -0,0 +1,39 @@
+\section{Nombres dérivés : \addbs{tkzTabSlope}}
+
+\begin{NewMacroBox}{tkzTabSlope}{\{Liste\}}
+
+\begin{tabular}{lllc}
+\toprule
+\texttt{arguments} & \texttt{défaut} & \texttt{définition} \\
+\midrule
+\IargName{tkzTabSlope}{Liste} & |no default| & $i$/eg($i$)/ed($i$) \\
+\bottomrule
+\end{tabular}
+
+\medskip
+\noindent\emph{$i$ est compris entre $1$ et $n$, $n$ étant le nombre de valeurs de la première ligne.
+Cette macro permet de personnaliser les signes d'une fonction dérivée en indiquant par exemples des limites, les valeurs d'une dérivée à droite, à gauche. $i$ est le rang de l'antécédent qui correspond à la valeur de la dérivée, \tkzname{eg} et \tkzname{ed} sont les expressions que l'on veut placer soit à gauche et soit à droite.}
+\end{NewMacroBox}
+
+\subsection{Ajout de nombres dérivés}
+\Iaccent{nombres deriv}{nombres dérivés}
+Étude de la fonction $f~:~ x \longmapsto \sqrt {x(x-1)^2}$ sur $[0~;~4]$
+
+\begin{tkzexample}[vbox,small]
+\begin{tikzpicture}
+\tkzTabInit[lgt=3]%
+ {$x$/1,%
+ Signe\\ de $f'(x)$ /1,%
+ Variations\\ de\\ $\sqrt {x(x-1)^2}$ /4}%
+ {$0$ , $\dfrac{1}{3}$ , $1$ , $4$}%
+\tkzTabLine{d ,+, 0 ,-, d ,+, }
+\tkzTabSlope{1//+\infty,3/-1 /+1}
+\tkzTabVar %
+ {- / $0$ ,
+ + / $\dfrac{2\sqrt3}{9}$ ,
+ - / $0$ ,
+ + / $6$ }
+\end{tikzpicture}
+\end{tkzexample}
+
+\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-tab/doc/latex/TKZdoc-tab-style.tex b/macros/latex/contrib/tkz/tkz-tab/doc/latex/TKZdoc-tab-style.tex
new file mode 100644
index 0000000000..a125c38ba1
--- /dev/null
+++ b/macros/latex/contrib/tkz/tkz-tab/doc/latex/TKZdoc-tab-style.tex
@@ -0,0 +1,285 @@
+\newpage
+\section{Utilisation des styles}
+\subsection{Définition de \tkzcname{tkzTabSetup}}
+
+Le plus simple est d'utiliser la macro \tkzcname{tkzTabSetup}. Celle-ci permet de modifier les styles principaux.
+
+\begin{NewMacroBox}{tkzTabSetup}{\oarg{local options}}
+
+\begin{tabular}{llc}
+\toprule
+\texttt{arguments} & \texttt{défaut} & \texttt{définition} \\
+\midrule
+\IargName{tkzTabSetup}{doubledistance} & |1pt| & écart double barre \\
+\IargName{tkzTabSetup}{doublecolor} & |white| & couleur centrale dans la double barre \\
+\IargName{tkzTabSetup}{lw} & |0.4pt| & épaisseur d'un trait \\
+\IargName{tkzTabSetup}{color} & |black| & couleur d'un trait \\
+\midrule
+\IargName{tkzTabSetup}{tstyle} & |dotted| & style des traits verticaux \\
+\IargName{tkzTabSetup}{tcolor } & |black| & couleur des traits verticaux \\
+\IargName{tkzTabSetup}{tanarrowstyle}&|latex'|&style d'une flèche pour une tangente \\
+\IargName{tkzTabSetup}{tanstyle}& |->| & style d'une tangente \\
+\IargName{tkzTabSetup}{tancolor}& |black| & couleur d'une tangente \\
+\IargName{tkzTabSetup}{tanwidth}& |0.4pt|& épaisseur d'une tangente \\
+\IargName{tkzTabSetup}{fromarrowstyle}&|latex'|&style d'une flèche antécédent -> image \\
+\IargName{tkzTabSetup}{fromstyle }& |->| & style antécédent -> image \\
+\IargName{tkzTabSetup}{fromcolor }& |black| & couleur antécédent -> image \\
+\IargName{tkzTabSetup}{fromwidth }& |0.4pt| & épaisseur antécédent -> image \\
+\IargName{tkzTabSetup}{hcolor } & |gray| & couleur d'une zone interdite \\
+\IargName{tkzTabSetup}{hopacity } & |0.4| & transparence de la couleur d'une zone interdite \\
+\IargName{tkzTabSetup}{crosslines}& |false| & booléen true hachure la zone interdite \\
+\IargName{tkzTabSetup}{arrowcolor}& |black| & couleur d'une flèche de variation \\
+\IargName{tkzTabSetup}{arrowstyle}& |latex'| & style d'une flèche de variation \\
+\IargName{tkzTabSetup}{arrowlinewidth}&|0.4pt|&épaisseur d'une flèche de variation \\
+\bottomrule
+\end{tabular}
+
+\medskip
+\noindent\emph{Cette macro s'utilise dès le début. Les épaisseurs sont en générale donnée en \tkzname{pt}, la valeur par défaut est la plus fréquente. }
+
+\end{NewMacroBox}
+
+\subsubsection{Utilisation de \tkzname{doubledistance} et \tkzname{hcolor}}
+
+\begin{center}
+\begin{tikzpicture}
+ \tkzTabColors[backgroundcolor=fondpaille,%
+ color=Maroon]
+ \tkzTabSetup[doubledistance = 2pt]
+ \tkzTabInit[lgt=2,espcl=1]
+ {$x$ /1, $x^2-3x+2$ /1, $\ln (x^2-1)$ /1, $E(x)$ /1}%
+ {$-\infty$ ,$-\sqrt{2}$, $-1$ , $1$ ,$\sqrt{2}$ , $2$ , $+\infty$}%
+ \tkzTabLine{ , + , t , + , t , + , z , - , t , - , z , + , }
+ \tkzTabLine{ , + , z , - , d , h , d , - , z , + , t , + , }
+ \tkzTabLine{ , + , z , - , d , h , d , + ,z , - , z , + , }
+\end{tikzpicture}
+\end{center}
+
+
+\begin{tkzexample}[code only,small]
+\begin{tikzpicture}
+ \tkzTabColors[backgroundcolor=fondpaille,%
+ color=Maroon]
+\tkzTabSetup[doubledistance = 2pt]
+\tkzTabInit[lgt=2,espcl=1]
+{$x$ /1, $x^2-3x+2$ /1, $\ln (x^2-1)$ /1, $E(x)$ /1}%
+{$-\infty$ ,$-\sqrt{2}$, $-1$ , $1$ ,$\sqrt{2}$ , $2$ , $+\infty$}%
+\tkzTabLine{ , + , t , + , t , + , z , - , t , - , z , + , }
+\tkzTabLine{ , + , z , - , d , h , d , - , z , + , t , + , }
+\tkzTabLine{ , + , z , - , d , h , d , + ,z , - , z , + , }
+\end{tikzpicture}
+\end{tkzexample}
+
+\subsubsection{Utilisation de \tkzname{fromcolor} et \tkzname{tancolor}}
+
+\begin{center}
+ \begin{tikzpicture}
+ \tkzTabSetup[fromcolor = red, tancolor = blue,,backgroundcolor=fondpaille,%
+ color=Maroon]
+ \tkzTabInit[espcl=4]
+ { $x$ /1, $f''(x)$ /1, $f'$ /3, $f$ /4}%
+ { $0$ , $1$ , $\alpha$,$+\infty$ }%
+ \tkzTabLine {d , + , z , - , , - }%
+ \tkzTabVar
+ {- / $1$ /, + / /, R / /, - / $-\infty$ /}
+
+ \tkzTabVal[draw]{2}{4}{0.5}{}{0}
+ \tkzTabIma[draw]{2}{4}{3}{$0$}
+ \tkzTabTan[pos]{1}{2}{2}{$2$}
+ \tkzTabVar
+ {- / $-\infty$ , R / , + / $1$ , - / $0$ }
+ \tkzTabIma[draw]{1}{3}{2}{$0$}
+ \end{tikzpicture}
+\end{center}
+
+
+\begin{tkzexample}[code only,small]
+\begin{tikzpicture}
+ \tkzTabSetup[fromcolor = red, tancolor = blue,,backgroundcolor=fondpaille,%
+ color=Maroon]
+ \tkzTabInit[espcl=4]
+ { $x$ /1, $f''(x)$ /1, $f'$ /3, $f$ /4}%
+ { $0$ , $1$ , $\alpha$,$+\infty$ }%
+ \tkzTabLine {d , + , z , - , , - }%
+ \tkzTabVar
+ {- / $1$ /, + / /, R / /, - / $-\infty$ /}
+
+ \tkzTabVal[draw]{2}{4}{0.5}{}{0}
+ \tkzTabIma[draw]{2}{4}{3}{$0$}
+ \tkzTabTan[pos]{1}{2}{2}{$2$}
+ \tkzTabVar
+ {- / $-\infty$ , R / , + / $1$ , - / $0$ }
+ \tkzTabIma[draw]{1}{3}{2}{$0$}
+\end{tikzpicture}
+\end{tkzexample}
+
+\subsection{Utilisation de \tkzcname{tikzset} pour modifier les styles}
+
+Voici la liste des styles qui sont utilisés et leurs définitions.
+
+\begin{tabular}{ll}
+\toprule
+\tkzname{node style} & style des nodes utilisé pour les valeurs placées dans le tableau \\
+\tkzname{low left} & valeur située en bas et à gauche d'un trait vertical \\
+\tkzname{low right} & valeur située en bas et à droite d'un trait vertical\\
+\tkzname{hight left} & valeur située en haut et à gauche d'un trait vertical\\
+\tkzname{hight right}& valeur située en haut et à droite d'un trait vertical\\
+\tkzname{low} & valeur située en bas d'un trait vertical \\
+\tkzname{hight } & valeur située en haut d'un trait vertical \\
+\tkzname{on double} & couleur du fond sous une double barre \\
+\tkzname{tan style} & style pour une tangente\\
+\tkzname{arrow style} & style pour les flèches des variations\\
+\tkzname{from style} & style pour la ligne allant d'un antécédent à une image\\
+\tkzname{h style} & style pour une zone interdite\\
+\tkzname{double style} & style pour une double barre\\
+\tkzname{t style} & style pour un trait vertical\\
+\bottomrule
+\end{tabular}
+
+
+Les valeurs par défaut utilisées sont les suivantes :
+\begin{tkzexample}[code only, small]
+\def\tkzTabDefaultWritingColor{black}
+\def\tkzTabDefaultBackgroundColor{white}
+\def\tkzTabDefaultLineWidth{0.4pt}
+\def\tkzTabDefaultArrowStyle{latex'}
+\def\tkzTabDefaultSep{2pt}
+\end{tkzexample}
+
+les principaux styles par défaut sont :
+
+\begin{tkzexample}[code only, small]
+\tikzset{node style/.style = {inner sep = \tkzTabDefaultSep,
+ outer sep = \tkzTabDefaultSep,
+ fill = \tkzTabDefaultBackgroundColor}}
+\tikzset{tan style/.style = {> = \tkzTabDefaultArrowStyle,
+ ->,
+ color = \tkzTabDefaultBackgroundColor}}
+\tikzset{arrow style/.style = {\tkzTabDefaultWritingColor,
+ ->,
+ > = \tkzTabDefaultArrowStyle,
+ shorten > = \tkzTabDefaultSep,
+ shorten < = \tkzTabDefaultSep}}
+\tikzset{from style/.style = {shorten > = \tkzTabDefaultSep,
+ shorten < = \tkzTabDefaultSep,
+ line width = \tkzTabDefaultLineWidth,
+ > = \tkzTabDefaultArrowStyle,
+ ->,
+ draw = \tkzTabDefaultWritingColor,
+ dotted}}
+\tikzset{t style/.style = {style = dotted,
+ draw = \tkzTabDefaultWritingColor}}
+\tikzset{h style/.style = {pattern = north west lines,
+ pattern color = \tkzTabDefaultWritingColor}}
+\tikzset{on double/.style = {fill = \tkzTabDefaultBackgroundColor}}
+\tikzset{double style/.append style = {%
+ draw = \tkzTabDefaultWritingColor,
+ double = \tkzTabDefaultBackgroundColor}}
+\end{tkzexample}
+
+Les couleurs de fond pour les différentes sont définies par les styles :
+\begin{tkzexample}[code only, small]
+\tikzset{fondC/.style={fill = \tkzTabDefaultBackgroundColor}}
+\tikzset{fondL/.style={fill = \tkzTabDefaultBackgroundColor}}
+\tikzset{fondT/.style={fill = \tkzTabDefaultBackgroundColor}}
+\tikzset{fondV/.style={fill = \tkzTabDefaultBackgroundColor}}
+\end{tkzexample}
+Enfin les approches des valeurs par les flèches sont :
+\begin{tkzexample}[code only, small]
+\tikzset{low left/.style = {above left = \tkzTabDefaultSep}}
+\tikzset{low right/.style = {above right = \tkzTabDefaultSep}}
+\tikzset{high right/.style = {below right = \tkzTabDefaultSep}}
+\tikzset{high left/.style = {below left = \tkzTabDefaultSep}}
+\tikzset{low/.style = {above = \tkzTabDefaultSep}}
+\tikzset{high/.style = {below = \tkzTabDefaultSep}}
+\end{tkzexample}
+
+\subsubsection{Utilisation de \tkzcname{tikzset} et \tkzname{h style}}
+
+
+\begin{tkzexample}[latex=8cm,small]
+\begin{tikzpicture}
+ \tkzTabColors[backgroundcolor=fondpaille,%
+ color=Maroon]
+ \tkzTabSetup[doubledistance = 2pt]
+ \tikzset{h style/.style = {fill=red!50}}
+ \tkzTabInit[color,espcl=1.5]%
+ {$x$ / 1,$g(x)$ / 1}%
+ {$0$,$1$,$2$,$3$}%
+ \tkzTabLine{z,+,d,h,d,-,t}
+\end{tikzpicture}
+\end{tkzexample}
+
+\subsubsection{Utilisation de \tkzcname{tikzset} et \tkzname{h style}}
+
+\begin{tkzexample}[latex=8cm,small]
+\begin{tikzpicture}
+\tikzset{h style/.append style = {%
+ pattern=north east lines}}
+\tkzTabInit[color,espcl=1.5]%
+ {$x$ / 1,$g(x)$ / 1}%
+ {$0$,$1$,$2$,$3$}%
+\tkzTabLine{z,+,,h,d,-,t}
+\end{tikzpicture}
+\end{tkzexample}
+
+\subsubsection{Utilisation de \tkzcname{tikzset} et \tkzname{arrow style}}
+
+\begin{center}
+ \begin{tkzexample}[vbox,small]
+ %\newcommand*{\E}{\ensuremath{\mathrm{e}}}
+ \begin{tikzpicture}
+
+ \tikzset{arrow style/.append style = {red,shorten >=6pt,shorten <=6pt}}
+ \tkzTabInit[espcl=5]{$x$ /1, $\ln x +1$ /1.5, $x \ln x$ /2}%
+ {$0$ ,$1/\E$ , $+\infty$}%
+ \tkzTabLine{d,-,z,+,}
+ \tkzTabVar%
+ { D+/ / $0$ ,%
+ -/ \colorbox{black}{\textcolor{white}{$\dfrac{-1}{e}$}}/ ,%
+ +/ $+\infty$ / }%
+ \end{tikzpicture}
+ \end{tkzexample}
+\end{center}
+
+
+\subsubsection{Utilisation de \tkzcname{tikzset} et \tkzcname{tkzTabSetup}}
+
+ On remarquera la dernière utilisation de \tkzcname{tkzTabSetup} qui remet les valeurs par défaut.
+
+\begin{center}
+ \begin{tkzexample}[vbox,small]
+ % \newcommand*{\va}{\colorbox{red!50} {$\scriptscriptstyle V_a$}}
+ % \newcommand*{\vb}{\colorbox{blue!50} {$\scriptscriptstyle V_b$}}
+ % \newcommand*{\vc}{\colorbox{gray!50} {$\scriptscriptstyle V_c$}}
+ % \newcommand*{\vd}{\colorbox{magenta!50}{$\scriptscriptstyle V_d$}}
+ % \newcommand*{\ve}{\colorbox{orange!50} {$\scriptscriptstyle V_e$}}
+
+ \begin{tikzpicture}
+ \tkzTabSetup[fromcolor = red,
+ fromstyle = dashed,
+ fromwidth = 1pt,
+ fromarrowstyle = stealth',
+ arrowcolor = green ]
+ \tkzTabInit[lgt=1.5,espcl=5]{ $x$/.7,$f''(x)$/.7,$f'$/3,$f$/3 }%
+ { $a$ , $d$ ,$e$}
+ \tkzTabLine{ z,+ ,z,- ,z }
+ \tkzTabVar {-/\va ,+/\vd , -/ \ve}
+ \tkzTabVal[draw,remember=vb]{1}{2}{0.333}{b}{$1$}
+ \tikzset{from style/.append style = {draw = blue}}
+ \tkzTabVal[draw,remember=vc]{1}{2}{0.666}{c}{$2$}
+ \tkzTabVar{-/$-\infty$ ,R/ , +/ $+\infty$}
+ \tkzTabSetup
+ \tkzTabVal[draw]{1}{3}{0.5}{}{$0$}
+ \draw[opacity=0.5,fill=red!40] (vb) circle(2ex);
+ \draw[opacity=0.5,fill=blue!40] (vc) circle(2ex);
+ \end{tikzpicture}
+ \end{tkzexample}
+\end{center}
+
+
+
+\endinput
+
+
+
diff --git a/macros/latex/contrib/tkz/tkz-tab/doc/latex/TKZdoc-tab-tangente.tex b/macros/latex/contrib/tkz/tkz-tab/doc/latex/TKZdoc-tab-tangente.tex
new file mode 100644
index 0000000000..ce015767e7
--- /dev/null
+++ b/macros/latex/contrib/tkz/tkz-tab/doc/latex/TKZdoc-tab-tangente.tex
@@ -0,0 +1,176 @@
+\section{Tangente horizontale : \addbs{tkzTabTan} et \addbs{tkzTabTanFrom}}
+\subsection{Définition de \tkzcname{tkzTabTan}}
+
+\begin{NewMacroBox}{tkzTabTan}{\oarg{local options}\{Début\}\{Fin\}\{Position\}\{Image\}}
+
+\begin{tabular}{lllc}
+\toprule
+\texttt{arguments} & \texttt{défaut} & \texttt{définition} \\
+\midrule
+\IargName{tkzTabTan}{Début}&|no default|&rang de l'origine de la flèche \\
+\IargName{tkzTabTan}{Fin}&|no default|& rang de l'extrémité de la flèche \\
+\IargName{tkzTabTan}{Position} & |no default| & rang de l'antécédent \\
+\IargName{tkzTabTan}{Image} & |no default| & valeur de l'image \\
+\bottomrule
+\end{tabular}
+
+\medskip
+\noindent\emph{Il s'agit de savoir sur quelle flèche, on va positionner la tangente. \tkzname{Début} et \tkzname{Fin} sont les rangs des valeurs qui déterminent les extrémités de la flèche. \tkzname{Position} est le rang de la valeur qui correspond à la tangente. \tkzname{Image} est la valeur que l'on peut joindre à la tangente (ordonnée du point de contact).}
+
+\medskip
+\begin{tabular}{lllc}
+\toprule
+\texttt{options} & \texttt{défaut} & \texttt{définition} \\
+\midrule
+\IoptName{tkzTabTan}{pos} & |below| & position de la valeur \\
+\bottomrule
+\end{tabular}
+
+\medskip
+\noindent\emph{Il existe une option \tkzname{pos} qui permet de positionner cette valeur sous la tangente.\\}
+
+\end{NewMacroBox}
+
+
+\subsection{Utilisation des arguments}
+
+\subsubsection{Palier}
+La flèche débute pour la valeur initiale $0$ donc de rang $1$ et se termine pour $+\infty$, valeur de rang $3$. La tangente est ici en $x=1$ soit la valeur de rang $2$.
+
+\begin{tkzexample}[vbox]
+\begin{tikzpicture}
+ \tkzTab[espcl=6]{$x$/1,$f'(x)$ /1, $f$/3}%
+ {$0$ , $1$ , $+\infty$}%
+ {d , + , 0 , + , }
+ {D- / $-\infty$ , R / , +/ $+\infty$}%
+ \tkzTabTan{1}{3}{2}{\scriptsize $2$}
+\end{tikzpicture}
+\end{tkzexample}
+
+\subsubsection{Tangente à l'extrémité d'un intervalle}
+Dans l'exemple ci-dessous, la flèche débute pour la valeur initiale $0$ donc de rang $1$ et se termine pour $1$, valeur de rang $2$. La tangente est ici en $x=1$ soit la valeur de rang $2$. Il faut remarquer que la macro \tkzcname{tkzTabTan} s'applique à la ligne de variations qui la précède.
+
+La valeur $0$ de l'image de $1$ par $f$ n'est pas indiquée dans \tkzcname{tkzTabVar}. Elle serait sous les flèches représentant la tangente, aussi elle est passée comme argument de \tkzcname{tkzTabTan} avec l'option \tkzname{pos=below}.
+
+\begin{tkzexample}[vbox]
+\begin{tikzpicture}
+ \tkzTabInit[espcl=6]{$x$ /1,$f'(x)$/1,$f$/2}{$0$,$1$,$+\infty$}%
+ \tkzTabLine{t , + , z , - , }%
+ \tkzTabVar{-/ $-1$ , +/ , -/$-\infty$ }
+ \tkzTabTan[pos=below]{1}{2}{2}{$0$}
+\end{tikzpicture}
+\end{tkzexample}
+
+\subsection{Utilisation des options}
+
+\subsubsection{\texttt{\textcolor{red}{pos}} : position de la valeur}
+
+\begin{tkzexample}[vbox]
+\begin{tikzpicture}
+ \tkzTabInit[espcl=5]{$x$/1,$f''{x}$/1,$f'(x)$/2,$f(x)$/2}{$0$,$1$,$+\infty$}%
+ \tkzTabLine{d,+,0,-,}%
+ \tkzTabVar{-/ $-\infty$ ,+/ ,-/$-\infty$}
+ \tkzTabTan[pos=below]{1}{2}{2}{$0$}
+ \tkzTabVar{+/ $+\infty$ , R/ , -/ $0$}
+ \tkzTabTan{1}{3}{2}{$1$}
+\end{tikzpicture}
+\end{tkzexample}
+
+\subsubsection{Variations imbriquées}
+\begin{tkzexample}[vbox]
+\begin{tikzpicture}
+ \tkzTabInit[espcl=3]
+ {$x$ /1,
+ $f''(x)$ /1,
+ $f'$ /3,
+ $f$ /3}%
+ {$0$ , $\alpha$ , $1$ , $\beta$, $+\infty$ }%
+ \tkzTabLine {d , +, , + , z , - , , - }%
+ \tkzTabVar {-/ $-1$ / , R/ ,+/ , R/ , -/ $-\infty$ }
+ \tkzTabIma[draw]{1}{3}{2}{0}
+ \tkzTabIma[draw]{3}{5}{4}{0}
+ \tkzTabTan[pos]{1}{3}{3}{$2$}
+ \tkzTabVar{+/ $+\infty$ , - / , R/,+/ , -/ $0$ }
+ \tkzTabTan[]{1}{2}{2}{$1$}
+ \tkzTabTan[pos=below]{2}{4}{4}{$2$}
+\end{tikzpicture}
+\end{tkzexample}
+
+
+\subsection{Définition de \textcolor{red}{tkzTabTanFrom}}
+
+\begin{NewMacroBox}{tkzTabTanFrom}{\oarg{local options}\{Début\}\{Fin\}\{Position\}\{Image\}}
+
+\begin{tabular}{lllc}
+\toprule
+\texttt{arguments} & \texttt{défaut} & \texttt{définition} \\
+\midrule
+\IargName{tkzTabTanFrom}{Début} & |no default| & rang de l'origine de la flèche \\
+\IargName{tkzTabTanFrom}{Fin} & |no default| & rang de l'extrémité de la flèche \\
+\IargName{tkzTabTanFrom}{Position} & |no default| & nom d'un point \\
+\IargName{tkzTabTanFrom}{Image} & |no default| & valeur de l'image \\
+\bottomrule
+\end{tabular}
+
+\medskip
+\noindent\emph{La position est donnée par le nom d'un point ou d'un node.}
+
+\medskip
+\begin{tabular}{lllc}
+\toprule
+\texttt{options} & \texttt{défaut} & \texttt{définition} \\
+\midrule
+\IoptName{tkzTabTan}{pos} & |below| & position de la valeur \\
+\bottomrule
+\end{tabular}
+
+
+\end{NewMacroBox}
+\subsection{Le nom est défini par le tableau}
+Le nom du node qui correspond à $\alpha$ est ici \tkzname{N21} (antécédent de rang 2, premier filet sous la valeur.)
+\begin{tkzexample}[vbox,small]
+\begin{tikzpicture}
+\tkzTabInit[ espcl=6]
+{ $x$ /1,
+ $f'(x)$ /1,
+ $f$ /3}
+{ $0$ , $\alpha$ , $+\infty$ }%
+\tkzTabLine { , ,+, , }%
+\tkzTabVar{-/ $-1$ , R , +/ $+1$ /}%
+\tkzTabTanFrom[pos=below]{1}{3}{N21}{$0$}
+\end{tikzpicture}
+\end{tkzexample}
+
+\subsection{Le nom est donné par l'utilisateur avec l'option \texttt{\textcolor{red}{remember}}}
+
+\begin{tkzexample}[vbox,small]
+\begin{tikzpicture}
+\tkzTabInit[ espcl=4]
+{ $x$ /1,
+ $f''(x)$ /1,
+ $f'$ /2,
+ Signe de $f'(x)$ /2,
+ $f$ /3}
+{ $0$ , $1$ , $\alpha$ , $+\infty$ }%
+\tkzTabLine {d,+,0,-, ,- }%
+\tkzTabVar
+{-/ $1$ ,
+ +/ ,
+ R/ ,
+ -/ $-\infty$ }%
+\tkzTabTan[pos,remember=v1]{1}{2}{2}{$2$}%
+\tkzTabVal[remember=v2]{2}{4}{0.5}{}{0}%
+\tkzTabLine { ,, +,, z,- }%
+\tkzTabVar
+{-/ $-\infty$ ,
+ R/ ,
+ +/ ,
+ -/ $0$ }
+\tkzTabImaFrom[]{1}{3}{v1}{0}%
+\tkzTabImaFrom[]{3}{4}{v2}{}%
+\tkzTabTanFrom[pos=below]{3}{4}{v2}{$1$}
+\end{tikzpicture}
+\end{tkzexample}
+
+
+\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-tab/doc/latex/TKZdoc-tab-tv.tex b/macros/latex/contrib/tkz/tkz-tab/doc/latex/TKZdoc-tab-tv.tex
new file mode 100644
index 0000000000..54a611b720
--- /dev/null
+++ b/macros/latex/contrib/tkz/tkz-tab/doc/latex/TKZdoc-tab-tv.tex
@@ -0,0 +1,87 @@
+% 20 / 02 /2009 v1.00c TKZdoc-tab-tv
+\section{Création d'un tableau de variations : \addbs{tkzTab}}
+\subsection{Définition}
+\begin{NewMacroBox}{tkzTab}%
+{\oarg{local options}\var{liste1}\var{liste2}\var{liste3}\var{liste4}}
+
+\medskip
+\begin{tabular}{lllc}
+\toprule
+\texttt{arguments} & \texttt{défaut} & \texttt{définition} \\
+\midrule
+\IargName{tkzTab}{liste1} & |no default| & \var{e(1)/h(1),\dots,e(p)/h(p)} première colonne \\
+\IargName{tkzTab}{liste2} & |no default| & \var{a(1),\dots,a(n)} antécédents de la première ligne \\
+\IargName{tkzTab}{liste3} & |no default| & \var{s(1),\dots,s(2n-1)} symboles de la ligne de signes \\
+\IargName{tkzTab}{liste4} & |no default| & \var{s(1)/eg(1)/ed(1),\dots,s($q$)/eg($q$)/ed($q$)} variations \\
+\bottomrule
+\end{tabular}
+
+\medskip
+\noindent\emph{La macro \emph{\tkzcname{tkzTab}} est un raccourci pour enchaîner \tkzcname{tkzTabInit}, \tkzcname{tkzTabLine} et \tkzcname{tkzTabVar}. Les \tkzname{options} sont identiques à celles de \tkzcname{tkzTabInit}. Ces tableaux ne concernent que les tableaux à trois lignes pour la variable, le signe de la dérivée et les variations de la fonction.}
+\end{NewMacroBox}
+
+\medskip
+
+\begin{tkzexample}[code only]
+ \tkzTab{ e(1) / h(1) ,
+ ... ,
+ e(p) / h(p)}
+ { v(1), ... ,v(n) }
+ { a(1),...,a(2n-1)}
+ { s(1) / eg(1) / ed(1), ... ,s(n) / eg(n) / ed(n)}
+\end{tkzexample}
+
+\subsection{Exemple 1}
+
+Étude de la fonction $f~:~ x \longmapsto x^2$ sur $[-5~;~7]$
+
+\begin{tkzexample}[vbox,small]
+\begin{tikzpicture}
+\tkzTab[lgt=3,espcl=5]{ $x$ / 1,
+ $f'(x)$ / 1,
+ Variations de \\$f$ / 2}
+ { $-5$ , $0$ ,$7$}
+ { ,-,z,+,}
+ { +/$25$ , -/$0$ , +/ $49$}%
+\end{tikzpicture}
+\end{tkzexample}
+
+\subsection{Exemple 2}
+Étude de la fonction $f~:~ x \longmapsto x \ln x $ sur $]0~;~+\infty]$
+
+\begin{tkzexample}[vbox,small]
+ \begin{tikzpicture}
+ \tkzTab[espcl=5,lgt=3]{$x$ / 1, Signe de \\$\ln x +1$ / 1.5,%
+ Variations de \\$f$ / 3}%
+ {$0$ ,$1/\E$ , $+\infty$}{d,-,z,+,}
+ {D+/ $0$,%
+ -/ \colorbox{black}{\textcolor{white}{$\dfrac{-1}{e}$}} ,%
+ +/ $+\infty$ }%
+\end{tikzpicture}
+\end{tkzexample}
+
+\subsection{Exemple 3}
+ Étude de la fonction $f~:~ $x$ \longmapsto \sqrt{x^2-1}$ sur $]-\infty~;~-1] \cup [1~;~+\infty[$
+
+\begin{tkzexample}[vbox,small]
+\begin{tikzpicture}
+ \tkzTab{ $x$ / 1, $f'(x)$ / 1, $f$ / 2}%
+ { $-\infty$, $-1$ ,$1$, $+\infty$}
+ { ,-,d,h,d,+, }
+ { +/$+\infty$ , -H/$0$, -/$0$ , +/ $+\infty$ }%
+\end{tikzpicture}
+\end{tkzexample}
+
+\subsection{Exemple 4}
+ Étude de la fonction $f~:~ $t$ \longmapsto \frac{t^2}{t^2-1}$ sur $[0~;~+\infty[$
+
+\begin{tkzexample}[vbox,small]
+\begin{tikzpicture}
+ \tkzTab{ $t$ / 1, Signe de\\ $f'(t)$ / 2, Variation de \\$f$ / 2}%
+ { $0$, $1$, $+\infty$}
+ { z , - , d , - , }
+ { +/$0$ , -D+/$-\infty$/$+\infty$, -/ $1$ }%
+\end{tikzpicture}
+\end{tkzexample}
+\endinput
+
diff --git a/macros/latex/contrib/tkz/tkz-tab/doc/latex/TKZdoc-tab-valeurs.tex b/macros/latex/contrib/tkz/tkz-tab/doc/latex/TKZdoc-tab-valeurs.tex
new file mode 100644
index 0000000000..47de2100ab
--- /dev/null
+++ b/macros/latex/contrib/tkz/tkz-tab/doc/latex/TKZdoc-tab-valeurs.tex
@@ -0,0 +1,164 @@
+\section{Valeurs intermédiaires \addbs{tkzTabVal}}
+Cette macro permet de placer une valeur sur une flèche de la ligne des variations. Elle doit être employée juste après la commande \tkzcname{tkzTabVar} définissant la ligne de variations sur laquelle on souhaite placer les valeurs intermédiaires. On ne peut placer une valeur que dans un intervalle où la fonction est \tkzname{monotone}. Cette macro permet d'afficher une nouvelle valeur (intermédiaire) dans la première ligne.
+
+\subsection{Définition de \addbs{tkzTabVal}}
+
+\begin{NewMacroBox}{tkzTabVal}{\oarg{local options}\{Début\}\{Fin\}\{Position\}\{Antécédent\}\{Image\}}
+
+\begin{tabular}{lllc}
+\toprule
+\texttt{arguments} & \texttt{défaut} & \texttt{définition} \\
+\midrule
+\IargName{tkzTabVal}{Début} & |no default| & rang de l'origine de la flèche \\
+\IargName{tkzTabVal}{Fin} & |no default| & rang de l'extrémité de la flèche \\
+\IargName{tkzTabVal}{Position} & |no default| & nombre décimal entre $0$ et $1$ \\
+\IargName{tkzTabVal}{Antécédent}& |no default| & valeur de l'antécédent si nécessaire \\
+\IargName{tkzTabVal}{Image} & |no default| & valeur de l'image si nécessaire \\
+\bottomrule
+\end{tabular}
+
+\medskip
+\noindent\emph{Ceci mérite quelques commentaires : Il s'agit de savoir sur quelle flèche, on va positionner l'image. \tkzname{Début} et \tkzname{Fin} sont les rangs des valeurs qui déterminent les extrémités de la flèche. \tkzname{Antécédent} \tkzname{Image} sont les valeurs que l'on veut placer. \tkzname{Position} est un nombre qui est obligatoirement compris entre $0$ et $1$. C'est une abscisse en prenant comme origine \tkzname{Début} et comme extrémité \tkzname{Fin}.}
+
+\medskip
+\begin{tabular}{lllc}
+\toprule
+\texttt{options} & \texttt{défaut} & \texttt{définition} \\
+\midrule
+\IoptName{tkzTabVal}{draw} & |true| & dessin d'une flèche entre l'antécédent et son image \\
+\IoptName{tkzTabVal}{remember}& |lastval|& définit un node personnalisé \\
+\bottomrule
+\end{tabular}
+
+\medskip
+\noindent\emph{Si vous voulez une flèche entre l'antécédent et l'image, il vous suffit de passer en option \tkzname{draw}. Si vous voulez référencer le point où se situe l'image alors il faut utiliser l'option \tkzname{remember}.}
+\end{NewMacroBox}
+
+\subsubsection{Ajout de valeurs intermédiaires}
+
+Le premier exemple montre des valeurs remarquables pour la fonction $\ln$. Il s'agit de mettre en évidence des valeurs importantes pour la fonction. La fonction est monotone entre les valeurs de rang $1$ ($0$) et $2$ ($+\infty$), ainsi les deux premiers arguments sont $1$ et $2$. Les coefficients utilisés pour \tkzname{Position} sont des nombres \tkzname{décimaux} ici $0.33$ et $0.66$. Les antécédents n'étaient pas présents dans la première ligne aussi leurs valeurs sont passées dans les arguments.
+
+\begin{tkzexample}[code only]
+ \tkzTabVal{1}{2}{0.33}{1}{0}
+ \tkzTabVal{1}{2}{0.66}{\E}{1}
+\end{tkzexample}
+
+\begin{tkzexample}[vbox, small]
+\begin{tikzpicture}
+\tkzTabInit[lgt=3,espcl=10] {$x$ /1, Signe\\ de $\dfrac{1}{x}$ /1.5,%
+ Variation\\ de $\ln$ /2} {$0$ , $+\infty$}%
+ \tkzTabLine{d,+,}%
+ \tkzTabVar[color=red]{ D- / $-\infty$, + / $+\infty$ }
+ \tkzTabVal{1}{2}{0.33}{1}{0}
+ \tkzTabVal{1}{2}{0.66}{\E}{1}
+\end{tikzpicture}
+\end{tkzexample}
+
+\subsubsection{Ajout de valeurs intermédiaires avec une fonction non monotone }
+
+On ne peut utiliser la macro que sur un intervalle où la fonction est monotone, ici il y a trois valeurs
+\mbox{$0$, $\E$ et $+\infty$}. La fonction est monotone entre les deux premières c'est à dire entre les valeurs de rang $1$ et $2$ ainsi qu'entre les deux dernières de rang $2$ et $3$.
+
+\begin{tkzexample}[vbox,small]
+\begin{tikzpicture}
+ \tkzTabInit[espcl=6]{$x$ / 1 , $f'(x)$ / 1, $f(x)$ / 2}
+ {$0$, $\E$ , $+\infty$}%
+ \tkzTabLine{d,+,0,-,}%
+ \tkzTabVar{D- / $-\infty$, + / $\E$, - / $0$ }%
+ \tkzTabVal[draw]{1}{2}{0.6}{$1$}{$\dfrac{1}{\E}$}%
+ \tkzTabVal[draw]{2}{3}{0.4}{$\E^2$}{$1$}%
+\end{tikzpicture}
+\end{tkzexample}
+
+\subsubsection{Ajout de valeurs intermédiaires avec un palier}
+
+Il ne faut pas s'arrêter au deuxième antécédent. La fonction est monotone mais admet un palier. L'option \tkzname{R} permet d'éviter qu'une flèche s'arrête pour $\sqrt\E$. La flèche va donc de la valeur de rang $1$ à la valeur de rang $3$. Le code est donc :
+\begin{tkzexample}[code only]
+ \tkzTabVal[draw]{1}{3}{0.6}{\E}{$\dfrac{-1}{\E}$}
+\end{tkzexample}
+
+\begin{tkzexample}[vbox,small]
+\begin{tikzpicture}
+ \tkzTabInit[espcl=6]{$x$/1,$f'(x)$/1, $f(x)$/2}
+ {$0$,$\sqrt\E$,$+\infty$}%
+ \tkzTabLine{d,+,0,+,}%
+ \tkzTabVar{D- / $-\infty$,R / ,+ / $0$ }
+ \tkzTabVal[draw]{1}{3}{0.4}{$1$}{$-\E$}
+\end{tikzpicture}
+\end{tkzexample}
+
+
+\subsubsection{Valeurs intermédiaires et plusieurs lignes de variations }
+\Iopt{tkzTabVal}{draw}
+
+Les variations de $f$ et $f'$ sont représentées. Pour $f$ la valeur $1$ n'est pas utilisée, on passe donc du rang $1$ au rang $3$.
+
+\begin{tkzexample}[vbox,small]
+\begin{tikzpicture}
+ \tkzTabInit[espcl=6]{$x$/1,$f''(x)$/1,$f'(x)$/3,$f(x)$/3}
+ {$0$,$1$,$+\infty$}%
+ \tkzTabLine{d,+,0,-, }%
+ \tkzTabVar{-/ $-\infty$ ,+/ ,-/ $-\infty$ }
+ \tkzTabVal[draw]{1}{2}{0.3}{$0,3$}{$-2$}
+ \tkzTabVal[draw]{2}{3}{0.6}{$4$}{$-1$}
+ \tkzTabVar{+/ $+\infty$,R ,-/ $-1$}
+ \tkzTabVal[draw]{1}{3}{0.6}{$2$}{$0$}
+\end{tikzpicture}
+\end{tkzexample}
+
+\subsection{Utilisation des options}
+
+\subsubsection{\texttt{\textcolor{red}{draw}} : ajout d'une flèche vers la valeur ajoutée}\Iopt{tkzTabVal}{draw}
+L'option a déjà été utilisée dans les exemples précédents, en voici un autre.
+
+\begin{tkzexample}[vbox,small]
+\begin{tikzpicture}
+ \tkzTabInit[lgt=3,espcl=10]{$x$ /1,
+ Signe\\ de $\dfrac{1}{x}$ /2,
+ Variation\\ de $\ln$ /3}
+ {$0$ , $+\infty$ }%
+ \tkzTabLine {d,+ , }%
+ \tkzTabVar[color=red]{D-/ $-\infty$ , +/$+\infty$}%
+ \tkzTabVal[draw]{1}{2}{0.24}{\scriptsize $1-h$}{$<0$}%
+ \tkzTabVal[draw]{1}{2}{0.3}{$1$}{$0$}%
+ \tkzTabVal[draw]{1}{2}{0.36}{\scriptsize $1+h$}{$>0$}%
+ \tkzTabVal[draw]{1}{2}{0.64}{$2,7$}{$<$}%
+ \tkzTabVal[draw]{1}{2}{0.7}{$\E$}{$1$}%
+ \tkzTabVal[draw]{1}{2}{0.76}{$2,8$}{$>$}%
+\end{tikzpicture}
+\end{tkzexample}
+
+
+\subsubsection{\texttt{\textcolor{red}{remember}} : attribuer un nom à un point ou un node.}
+\Iopt{tkzTabVal}{remember}
+
+Cette option permet d'utiliser \tkzcname{tkzTabImaFrom} mais il est possible de récupérer les noms des nodes et de les traiter avec par exemple du code de \TIKZ.
+
+\begin{tkzexample}[code only]
+ \draw[opacity=0.4,fill=red!20] (vb) circle(3ex);
+ \draw[opacity=0.4,fill=blue!20] (vc) circle(3ex);
+\end{tkzexample}
+
+
+\begin{tkzexample}[,small]
+ \begin{tikzpicture}
+ \tkzTabInit[lgt=3,espcl=6]{ $x$/1,/1,/3,/3 }%
+ { $a$ , $d$ ,$e$}
+ \tkzTabLine{ z,+ ,z,- ,z }
+ \tkzTabVar {-/\va ,+/\vd , -/ \ve}
+
+ \tkzTabVal[draw,remember=vb]{1}{2}{0.333}{$b$}{$0$}
+ \tkzTabVal[draw,remember=vc]{1}{2}{0.666}{$c$}{$1$}
+
+ \tkzTabVar{-/\va ,R/ , +/ \ve}
+
+ \tkzTabVal[draw]{1}{3}{0.5}{}{$0$}
+
+ \draw[opacity=0.4,fill=red!20] (vb) circle(3ex);
+ \draw[opacity=0.4,fill=blue!20] (vc) circle(3ex);
+ \end{tikzpicture}
+\end{tkzexample}
+
+\medskip
+Il faut remarquer que $b$ et $c$ sont des valeurs intermédiaires car le tableau a été défini avec $a$, $d$ et $e$.
+\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-tab/doc/latex/TKZdoc-tab-variation.tex b/macros/latex/contrib/tkz/tkz-tab/doc/latex/TKZdoc-tab-variation.tex
new file mode 100644
index 0000000000..6c2cf70388
--- /dev/null
+++ b/macros/latex/contrib/tkz/tkz-tab/doc/latex/TKZdoc-tab-variation.tex
@@ -0,0 +1,852 @@
+\section{Création d'une ligne de variations : \addbs{tkzTabVar}}
+\subsection{Définition}
+
+\begin{NewMacroBox}{tkzTabVar}{\oarg{local options}\var{el($1$),\dots,el($n$)}}
+ avec \tkzname{el($i$) = s($i$) / e($i$)} ou bien \tkzname{el($i$) = s($i$) / eg($i$) / ed($i$)}.
+
+\noindent\tkzname{s($i$)} est une série de symboles à choisir dans le tableau ci-dessous. \tkzname{eg($i$)} et \tkzname{ed($i$)} sont des expressions mathématiques qui se placent à gauche et à droite des filets verticaux. \tkzname{e($i$)} est une expression centrée sur un filet.
+
+\medskip
+ \begin{tabular}{llrl}
+\toprule
+ Groupe 1& \emph{avec un seul signe} &&\\
+\midrule
+\tkzname{s($i$)} & Position des expressions & \tkzname{el($i$)} & \\
+\midrule
+\IargName{tkzTabVar}{$-~~~$}& expression unique et centrée en bas eg=ed & $- $&$/e $ \\
+\IargName{tkzTabVar}{$+~~~$}& expression unique et centrée en haut eg=ed & $+ $&$/e $ \\
+\IargName{tkzTabVar}{$~R~~$}& rien, on passe à l'expression suivante & $~R $&$(/) $ \\
+\IargName{tkzTabVar}{$-C$} & prolongement par continuité en bas, centrée & $-C $&$/e $ \\
+\IargName{tkzTabVar}{$+C$} & prolongement par continuité en haut, centrée& $+C $&$/e $ \\
+\IargName{tkzTabVar}{$-H$} & expression en bas et centrée puis zone interdite & $-H $&$/e $ \\
+\IargName{tkzTabVar}{$+H$} & expression en haut et centrée puis zone interdite & $+H $&$/e $ \\
+\IargName{tkzTabVar}{$+D~~$}& discontinuité, expression en haut à gauche & $+D $&$/e $ \\
+\IargName{tkzTabVar}{$-D~~$}& discontinuité, expression en bas à gauche & $-D $&$/e $ \\
+\IargName{tkzTabVar}{$~D+~$}& discontinuité, expression en haut et à droite & $D+ $&$/e $ \\
+\IargName{tkzTabVar}{$~D-~$}& discontinuité, expression en bas et droite & $D- $&$/e $ \\
+\IargName{tkzTabVar}{$+DH$} & discontinuité à gauche et en haut puis zone interdite& $+DH $&$/e $ \\
+\IargName{tkzTabVar}{$-DH$} & discontinuité à gauche et en bas puis zone interdite & $-DH $&$/e $ \\
+\IargName{tkzTabVar}{$+CH$} & prolongement par continuité puis zone interdite & $+CH $&$/e $ \\
+\IargName{tkzTabVar}{$-CH$} & idem mais expression en bas et à gauche & $-CH $&$/e $ \\
+\midrule
+ Groupe 2& \emph{avec deux signes}& &\\
+\midrule
+\IargName{tkzTabVar}{$+D-$} & discontinuité,\hfill deux expressions & $+D- $&$/eg/ed$ \\
+\IargName{tkzTabVar}{$-D+$} & discontinuité, \dots \hfill qui sont & $-D+ $&$/eg/ed$ \\
+\IargName{tkzTabVar}{$+D+$} & discontinuité, \dots \hfill soit à gauche ,soit à droite &$+D+ $&$/eg/ed$ \\
+\IargName{tkzTabVar}{$-D-$} & discontinuité, \dots \hfill soit en haut, soit en bas&$-D- $&$/eg/ed$ \\
+\IargName{tkzTabVar}{$+CD+$}& prolongement par continuité à gauche et & $+CD+$&$/eg/ed$ \\
+\IargName{tkzTabVar}{$-CD-$}& \dots \hfill deux expressions qui sont & $-CD-$&$/eg/ed$ \\
+\IargName{tkzTabVar}{$+CD-$}& \dots \hfill soit à gauche ,soit à droite & $+CD-$&$/eg/ed$ \\
+\IargName{tkzTabVar}{$-CD+$}& \dots \hfill soit en haut, soit en bas & $-CD+$&$/eg/ed$ \\
+\IargName{tkzTabVar}{$+DC+$}& prolongement par continuité à droite et & $+DC+$&$/eg/ed$ \\
+\IargName{tkzTabVar}{$-DC-$}& \dots \hfill deux expressions qui sont & $-DC-$&$/eg/ed$ \\
+\IargName{tkzTabVar}{$+DC-$}& \dots \hfill soit à gauche ,soit à droite & $+DC-$&$/eg/ed$ \\
+\IargName{tkzTabVar}{$-DC+$}& \dots \hfill soit en haut, soit en bas & $-DC+$&$/eg/ed$ \\
+\IargName{tkzTabVar}{$+V+$} & comme une discontinuité mais sans double barre et& $+V+ $&$/eg/ed$ \\
+\IargName{tkzTabVar}{$-V-$} & \dots \hfill deux expressions qui sont & $-V- $&$/eg/ed$ \\
+\IargName{tkzTabVar}{$+V-$} & \dots \hfill soit à gauche ,soit à droite & $+V- $&$/eg/ed$ \\
+\IargName{tkzTabVar}{$-V+$} & \dots \hfill soit en haut, soit en bas & $-V+ $&$/eg/ed$ \\
+\midrule
+\tkzname{\textvisiblespace} & laisse la place vide dans certains cas& & \\
+\bottomrule
+\end{tabular}
+
+\medskip
+\noindent\emph{La macro \tkzcname{tkzTabVar} nécessite un argument qui est une liste. Cette liste contient \tkzname{$n$} éléments correspondant aux \tkzname{$n$} antécédents de la première ligne. Chaque élément donne la position d'une ou de deux expressions par rapport à la ligne avec un signe $+$ (en haut) ou bien un signe $-$ (en bas). Ces expressions sont, soit des images, soit des limites.}
+
+\noindent\emph{Les éléments \tkzname{el($i$)} ont pour forme~:\\
+ soit \mbox{\tkzname{\{ s($i$)/ e($i$)\}}} ou bien \mbox{\tkzname{\{ s($i$)/ e($i$) / \}}}, soit \mbox{\tkzname{\{ s($i$)/ eg($i$) / ed($i$)\}}}.}
+
+\noindent\emph{La première forme correspond aux symboles qui ne possèdent qu'un signe \tkzname{$+$} ou \tkzname{$-$} et qui placent une seule expression; la seconde correspond aux symboles qui possèdent deux signes et qui placent deux expressions. Les expressions sont des valeurs prises à gauche \tkzname{ eg($i$)\}} ou bien à droite \tkzname{ed($i$)} par la fonction ou encore des limites mais les expressions peuvent être vides. Un signe \tkzname{$+$} ou \tkzname{$-$} à gauche (resp. à droite) des symboles correspond à \tkzname{eg($i$)} (resp. à \tkzname{ed($i$)}).}
+
+\medskip
+\begin{tabular}{lllc}
+\toprule
+\texttt{options} & \texttt{défaut} & \texttt{définition} \\
+\midrule
+\IoptName{tkzTabVar}{color} & |black| & couleur des flèches \\
+\IoptName{tkzTabVar}{help} & affiche la structure d'une ligne de variations \\
+ \bottomrule
+\end{tabular}
+
+\end{NewMacroBox}
+
+ \medskip
+Un schéma étant parfois plus simple qu'un long discours \dots
+
+ \begin{center}
+\begin{tikzpicture}
+\tkzTabInit[lgt=2,espcl=3]{$x$/1,$f'(x)$/1,$f(x)$/3}%
+{$0$,$1$,$2$,$+\infty$}%
+\tkzTabLine{t,-,d,-,z,+,}%
+\tkzTabVar{}%
+\node[below =3pt] (FN12) at (N12){};
+\node[below =3pt] (FN22) at (N22){};
+\node[below =3pt] (FN32) at (N32){};
+\node[below =3pt] (FN42) at (N42){};
+
+\node[above =3pt] (FN13) at (N13){};
+\node[above =3pt] (FN23) at (N23){};
+\node[above =3pt] (FN33) at (N33){};
+\node[above =3pt] (FN43) at (N43){};
+
+\node[below right=3pt] (FRN12) at (N12){};
+\node[below right=3pt] (FRN22) at (N22){};
+\node[below right=3pt] (FRN32) at (N32){};
+\node[below right=3pt] (FRN42) at (N42){};
+
+\node[above right=3pt] (FRN13) at (N13){};
+\node[above right=3pt] (FRN23) at (N23){};
+\node[above right=3pt] (FRN33) at (N33){};
+
+\node[below left=3pt] (FLN22) at (N22){};
+\node[below left=3pt] (FLN32) at (N32){};
+\node[below left=3pt] (FLN42) at (N42){};
+
+\node[above left=3pt] (FLN13) at (N13){};
+\node[above left=3pt] (FLN23) at (N23){};
+\node[above left=3pt] (FLN33) at (N33){};
+\node[above left=3pt] (FLN43) at (N43){};
+
+\draw[fill=red!50] (FN12) circle(2pt) node[below=2pt,text=red!50] {\small e} node[left=1cm,red] {$+$};
+\draw[fill=red!50] (FN22) circle(2pt);
+\draw[fill=red!50] (FN32) circle(2pt);
+\draw[fill=red!50] (FN42) circle(2pt);
+
+\draw[fill=red!50] (FN13) circle(2pt) node[left=1cm,red] {$-$};
+\draw[fill=red!50] (FN23) circle(2pt);
+\draw[fill=red!50] (FN33) circle(2pt) node[above=2pt,text=red!50] {\small e};
+\draw[fill=red!50] (FN43) circle(2pt);
+
+\draw[fill=blue!30] (FRN12) circle(2pt);
+\draw[fill=blue!30] (FRN22) circle(2pt) node[below right=2pt,text=blue!30] {\small ed};
+\draw[fill=blue!30] (FRN32) circle(2pt);
+\draw[fill=blue!30] (FRN13) circle(2pt);
+\draw[fill=blue!30] (FRN23) circle(2pt);
+\draw[fill=blue!30] (FRN33) circle(2pt);
+
+\draw[fill=green!50] (FLN22) circle(2pt);
+\draw[fill=green!50] (FLN32) circle(2pt);
+\draw[fill=green!50] (FLN42) circle(2pt) node[below left =2pt,text=green!50] {\small eg};
+\draw[fill=green!50] (FLN23) circle(2pt) node[above left =2pt,text=green!50] {\small eg};
+\draw[fill=green!50] (FLN33) circle(2pt);
+\draw[fill=green!50] (FLN43) circle(2pt);
+\end{tikzpicture}
+\end{center}
+
+\medskip
+Pour les besoins de certains tableaux , j'ai employé les macros suivantes~:
+
+\begin{tkzexample}[code only]
+ \newcommand*{\va}{\colorbox{red!50} {$\scriptscriptstyle V_a$}}
+ \newcommand*{\vb}{\colorbox{blue!50} {$\scriptscriptstyle V_b$}}
+ \newcommand*{\vbo}{\colorbox{blue!50} {$\scriptscriptstyle V_{b1}$}}
+ \newcommand*{\vbt}{\colorbox{yellow!50}{$\scriptscriptstyle V_{b2}$}}
+ \newcommand*{\vc}{\colorbox{gray!50} {$\scriptscriptstyle V_c$}}
+ \newcommand*{\vd}{\colorbox{magenta!50}{$\scriptscriptstyle V_d$}}
+ \newcommand*{\ve}{\colorbox{orange!50} {$\scriptscriptstyle V_e$}}
+\end{tkzexample}
+
+\medskip
+ \begin{center}
+\begin{tikzpicture}
+\tkzTabInit[lgt=2,espcl=3]{$x$/1,$f'(x)$/1,$f(x)$/3}%
+{$0$,$1$,$2$,$+\infty$}%
+ \tkzTabLine{t,-,d,-,z,+,}%
+ \tkzTabVar{+/\va , -D+/\vb/\vc,-/\vd, +D/\ve}%
+\end{tikzpicture}
+\end{center}
+
+\begin{tkzexample}[code only]
+ \begin{tikzpicture}
+ \tkzTabInit[lgt=2,espcl=3]{$x$/1,$f'(x)$/1,$f(x)$/3}%
+ {$0$,$1$,$2$,$+\infty$}%
+\tkzTabLine{t,-,d,-,z,+,}%
+ \tkzTabVar{+/\va , -D+/\vb/\vc,-/\vd, +D/\ve}%
+\end{tikzpicture}
+\end{tkzexample}
+
+Commentaires : Les signes $+$ et $-$ permettent de positionner une extrémité de la flèche en haut ou en bas de la ligne. Ensuite, en présence d'un seul signe, une seule expression est nécessaire. La position par rapport à la colonne est donnée par la position du signe par rapport aux autres symboles (voir \tkzname{$+D$}). \tkzname{$-D+$} nécessite deux expressions.
+
+\subsection{Utilisation des symboles}
+
+\medskip
+\bgroup\parindent=0pt
+\begin{minipage}{7cm}
+\begin{tkzexample}[code only]
+ {+ /\va , -/\vb }
+\end{tkzexample}
+ \begin{tikzpicture}
+ \tkzTabInit[lgt=1]{ /0.5,/2 }{ a , b }
+ \tkzTabVar%
+ {+ /\va , -/\vb }
+ \end{tikzpicture}
+\end{minipage}
+\hfill
+\begin{minipage}{7cm}
+\begin{tkzexample}[code only]
+ {-/\va , +/\vb}
+\end{tkzexample}
+ \begin{tikzpicture}
+ \tkzTabInit[lgt=1]{ /0.5,/2 }{ a , b }
+ \tkzTabVar%
+{-/\va , +/\vb}
+ \end{tikzpicture}
+\end{minipage}
+
+\begin{minipage}{7cm}
+\begin{tkzexample}[code only]
+ {+/\va , +/\vb}
+\end{tkzexample}
+ \begin{tikzpicture}
+ \tkzTabInit[lgt=1]{ /0.5,/2 }{ a , b }
+ \tkzTabVar%
+{+/\va , +/\vb}
+ \end{tikzpicture}
+\end{minipage}
+\hfill
+\begin{minipage}{7cm}
+\begin{tkzexample}[code only]
+ {-/\va , -/\vb}
+\end{tkzexample}
+ \begin{tikzpicture}
+ \tkzTabInit[lgt=1]{ /0.5,/2 }{ a , b }
+ \tkzTabVar%
+{-/\va , -/\vb}
+ \end{tikzpicture}
+\end{minipage}
+
+\begin{minipage}{7cm}
+\begin{tkzexample}[code only]
+ {+/\va , -C / \vb}
+\end{tkzexample}
+ \begin{tikzpicture}
+ \tkzTabInit[lgt=1]{ /0.5,/2 }{ a , b }
+ \tkzTabVar%
+{+/\va , -C / \vb}
+ \end{tikzpicture}
+\end{minipage}
+\hfill
+\begin{minipage}{7cm}
+\begin{tkzexample}[code only]
+{-/\va , +C / \vb }\end{tkzexample}
+ \begin{tikzpicture}
+ \tkzTabInit[lgt=1]{ /0.5,/2 }{ a , b }
+ \tkzTabVar%
+{-/\va , +C / \vb }
+ \end{tikzpicture}
+\end{minipage}
+
+\begin{minipage}{7cm}
+\begin{tkzexample}[code only]
+ {+C / \va , -C / \vb}
+\end{tkzexample}
+\begin{tikzpicture}
+ \tkzTabInit[lgt=1]{ /0.5,/2 }{ a , b }
+ \tkzTabVar%
+ {+C / \va , -C / \vb }
+\end{tikzpicture}
+\end{minipage}
+\hfill
+\begin{minipage}{7cm}
+\begin{tkzexample}[code only]
+ {-C /\va , +C /\vb}
+\end{tkzexample}
+\begin{tikzpicture}
+ \tkzTabInit[lgt=1]{ /0.5,/2 }{ a , b }
+ \tkzTabVar%
+ {-C /\va , +C /\vb}
+\end{tikzpicture}
+\end{minipage}
+
+\begin{minipage}{7cm}
+\begin{tkzexample}[code only]
+ { D+ /\va , -/\vb}
+\end{tkzexample}
+ \begin{tikzpicture}
+ \tkzTabInit[lgt=1]{ /0.5,/2 }{ a , b }
+ \tkzTabVar%
+ { D+ /\va , -/\vb}
+ \end{tikzpicture}
+\end{minipage}
+\hfill
+\begin{minipage}{7cm}
+\begin{tkzexample}[code only]
+ { D- /\va , +/\vb}
+\end{tkzexample}
+ \begin{tikzpicture}
+ \tkzTabInit[lgt=1]{ /0.5,/2 }{ a , b }
+ \tkzTabVar
+ { D- /\va , +/\vb}
+ \end{tikzpicture}
+\end{minipage}
+
+\begin{minipage}{7cm}
+\begin{tkzexample}[code only]
+ {+/\va , -D / \vb}
+\end{tkzexample}
+ \begin{tikzpicture}
+ \tkzTabInit[lgt=1]{ /0.5,/2 }{ a , b }
+ \tkzTabVar%
+{+/\va , -D / \vb}
+ \end{tikzpicture}
+\end{minipage}
+\hfill
+\begin{minipage}{7cm}
+\begin{tkzexample}[code only]
+ {-/\va , +D / \vb }
+\end{tkzexample}
+ \begin{tikzpicture}
+ \tkzTabInit[lgt=1]{ /0.5,/2 }{ a , b }
+ \tkzTabVar%
+{-/\va , +D / \vb }
+ \end{tikzpicture}
+\end{minipage}
+
+\begin{minipage}{7cm}
+\begin{tkzexample}[code only]
+ {D+ / \va , -D / \vb }
+\end{tkzexample}
+\begin{tikzpicture}
+ \tkzTabInit[lgt=1]{ /0.5,/2 }{ a , b }
+ \tkzTabVar%
+ {D+ / \va , -D / \vb }
+\end{tikzpicture}
+\end{minipage}
+\hfill
+\begin{minipage}{7cm}
+\begin{tkzexample}[code only]
+ {D- /\va , +D /\vb}
+\end{tkzexample}
+\begin{tikzpicture}
+ \tkzTabInit[lgt=1]{ /0.5,/2 }{ a , b }
+ \tkzTabVar%
+ {D- /\va , +D /\vb}
+\end{tikzpicture}
+\end{minipage}
+
+\begin{minipage}{7cm}
+\begin{tkzexample}[code only]
+ {+/ \va , -/ \vb , +/ \vc}
+\end{tkzexample}
+\begin{tikzpicture}
+\tkzTabInit[lgt=1,espcl=2.5]{ /0.5,/2 }{ a , b , c }
+\tkzTabVar {+/ \va , -/ \vb ,+/ \vc}
+\end{tikzpicture}
+\end{minipage}
+\hfill
+\begin{minipage}{7cm}
+\begin{tkzexample}[code only]
+ {+/ \va ,-C/ \vb , +/ \vc/ }
+\end{tkzexample}
+\begin{tikzpicture}
+\tkzTabInit[lgt=1,espcl=2.5]{ /0.5,/2 }{ a , b , c }
+\tkzTabVar {+/ \va ,-C/ \vb , +/ \vc/ }
+\end{tikzpicture}
+\end{minipage}
+
+\begin{minipage}{7cm}
+\begin{tkzexample}[code only]
+ {- /\va , R , +/\vc}
+\end{tkzexample}
+\begin{tikzpicture}
+\tkzTabInit[lgt=1,espcl=2.5]{ /0.5,/2 }{ a , b , c }
+\tkzTabVar%
+{- /\va , R, +/\vc}
+\end{tikzpicture}
+\end{minipage}
+\hfill
+\begin{minipage}{7cm}
+\begin{tkzexample}[code only]
+ {- /\va , R , +/\vc}
+\end{tkzexample}
+\begin{tikzpicture}
+\tkzTabInit[lgt=1,espcl=2.5]{ /0.5,/2}{ a , b , c }
+\tkzTabVar%
+{- /\va , R , +/\vc}
+\end{tikzpicture}
+\end{minipage}
+
+\begin{minipage}{7cm}
+\begin{tkzexample}[code only]
+ {D-/\va , +DH/\vbo/ , }
+\end{tkzexample}
+\begin{tikzpicture}
+\tkzTabInit[lgt=1,espcl=2.5]{ /0.5,/2 }{ a , b , c }
+\tkzTabVar%
+{D-/\va , +DH/\vbo/ , }
+\end{tikzpicture}
+\end{minipage}
+\hfill
+\begin{minipage}{7cm}
+\begin{tkzexample}[code only]
+ {D-/\va , -DH/\va/\vb , D+/}
+\end{tkzexample}
+\begin{tikzpicture}
+\tkzTabInit[lgt=1,espcl=2.5]{ /0.5,/2 }{ a , b , c }
+\tkzTabVar%
+{D-/\va , -DH/\vbo , D+/}
+\end{tikzpicture}
+\end{minipage}
+
+\begin{minipage}{7cm}
+\begin{tkzexample}[code only]
+ {D-/\va , +D-/\vbo/\vbt , +D/\vc}
+\end{tkzexample}
+\begin{tikzpicture}
+\tkzTabInit[lgt=1,espcl=2.5]{ /0.5,/2 }{ a , b , c }
+\tkzTabVar%
+{D-/\va , +D-/\vbo/\vbt , +D/\vc}
+\end{tikzpicture}
+\end{minipage}
+\hfill
+\begin{minipage}{7cm}
+\begin{tkzexample}[code only]
+ {D-/\va , +D-/\vbo/\vbt , +D/\vc}
+\end{tkzexample}
+\begin{tikzpicture}
+\tkzTabInit[lgt=1,espcl=2.5]{ /0.5,/2 }{ a , b , c }
+\tkzTabVar%
+{D-/\va , -D-/\vbo/\vbt , +D/\vc}
+\end{tikzpicture}
+\end{minipage}
+
+\begin{minipage}{7cm}
+\begin{tkzexample}[code only]
+ {+/\va , -D- / \vbo/\vbt , +/\vc}
+\end{tkzexample}
+\begin{tikzpicture}
+\tkzTabInit[lgt=1,espcl=2.5]{ /0.5,/2 }{ a , b , c }
+\tkzTabVar {+/ \va , -D- /\vbo/\vbt,+/\vc }
+\end{tikzpicture}
+\end{minipage}
+\hfill
+\begin{minipage}{7cm}
+\begin{tkzexample}[code only]
+ {+ /\va,-DC- /\vbo/\vbt,+ /\vc}
+\end{tkzexample}
+\begin{tikzpicture}\tikzset{low/.style = {above = 15pt}}
+\tkzTabInit[lgt=1,espcl=2.5]{ /0.5,/2 }{ a , b , c }
+\tkzTabVar {+ /\va ,-DC- /\vbo/\vbt ,+ /\vc}
+\end{tikzpicture}
+\end{minipage}
+
+\begin{minipage}{7cm}
+\begin{tkzexample}[code only]
+ {D-/\va, +DC-/\vbo/\vbt, +D/\vc}
+\end{tkzexample}
+\begin{tikzpicture}
+\tkzTabInit[lgt=1,espcl=2.5]{ /0.5,/2 }{ a , b , c }
+\tkzTabVar%
+{D-/\va , +DC-/\vbo/\vbt ,+D/\vc}
+\end{tikzpicture}
+\end{minipage}
+\hfill
+\begin{minipage}{7cm}
+\begin{tkzexample}[code only]
+ {D+/\va , +DC-/\vbo/\vbt , +D/\vc}
+\end{tkzexample}
+\begin{tikzpicture}
+\tkzTabInit[lgt=1,espcl=2.5]{ /0.5,/2 }{ a , b , c }
+\tkzTabVar%
+{D+/\va , +DC-/\vbo/\vbt ,+D/\vc}
+\end{tikzpicture}
+\end{minipage}
+
+\begin{minipage}{7cm}
+\begin{tkzexample}[code only]
+ {D-/\va , +CD-/\vbo/\vbt , +D/\vc}
+\end{tkzexample}
+\begin{tikzpicture}
+\tkzTabInit[lgt=1,espcl=2.5]{ /0.5,/2 }{ a , b , c }
+\tkzTabVar%
+{D-/\va , +CD-/\vbo/\vbt , +D/\vc}
+\end{tikzpicture}
+\end{minipage}
+\hfill
+\begin{minipage}{7cm}
+\begin{tkzexample}[code only]
+ {D-/\va , +CD-/\vbo/\vbt ,+D/\vc}
+\end{tkzexample}
+\begin{tikzpicture}
+\tkzTabInit[lgt=1,espcl=2.5]{ /0.5,/2 }{ a , b , c }
+\tkzTabVar%
+{D+/\va , +CD-/\vbo/\vbt , +D/\vc}
+\end{tikzpicture}
+\end{minipage}
+
+\begin{minipage}{7cm}
+\begin{tkzexample}[code only]
+ {+/\va, -DC+ /\vbo/\vbt, - /\vc}
+\end{tkzexample}
+\begin{tikzpicture}
+\tkzTabInit[lgt=1,espcl=2.5]{ /0.5,/2 }{ a , b , c }
+\tkzTabVar {+ /\va ,-DC+ /\vbo/\vbt , -/\vc}
+\end{tikzpicture}
+\end{minipage}
+\hfill
+\begin{minipage}{7cm}
+\begin{tkzexample}[code only]
+ {D- /\va, -DC- /\vbo/\vbt,+D/\vc}
+\end{tkzexample}
+\begin{tikzpicture}\tikzset{low/.style = {above = 15pt}}
+\tkzTabInit[lgt=1,espcl=2.5]{ /0.5,/2 }{ a , b , c }
+\tkzTabVar%
+{D- /\va , -DC- /\vbo/\vbt , +D/\vc}
+\end{tikzpicture}
+\end{minipage}
+
+\begin{minipage}{7cm}
+\begin{tkzexample}[code only]
+ {+/\va , -CH /\vbo/\vbt , D+/}
+\end{tkzexample}
+\begin{tikzpicture}
+\tkzTabInit[lgt=1,espcl=2.5]{ /0.5,/2 }{ a , b , c }
+\tkzTabVar%
+{+/\va , -CH /\vbo/\vbt , D+/}
+\end{tikzpicture}
+\end{minipage}
+\hfill
+\begin{minipage}{7cm}
+\begin{tkzexample}[code only]
+ {+ /\va , -CH/\vb, //}
+\end{tkzexample}
+\begin{tikzpicture}
+\tkzTabInit[lgt=1,espcl=2.5]{ /0.5,/2 }{ a , b , c }
+\tkzTabVar%
+{+ /\va , -CH/\vb, //}
+\end{tikzpicture}
+\end{minipage}
+
+\begin{minipage}{7cm}
+\begin{tkzexample}[code only]
+ {+/\va , -V- /\vbo /\vbt, +/\vc}
+\end{tkzexample}
+\begin{tikzpicture}
+\tkzTabInit[lgt=1,espcl=2.5]{ /0.5,/2 }{ a , b , c }
+\tkzTabVar {+/\va,-V- /\vbo /\vbt, +/\vc}
+\end{tikzpicture}
+\end{minipage}
+\hfill
+\begin{minipage}{7cm}
+\begin{tkzexample}[code only]
+ {+/ \va ,-V+ / \vbo/ \vbt ,-/ \vc}
+\end{tkzexample}
+\begin{tikzpicture}
+\tkzTabInit[lgt=1,espcl=2.5]{ /0.5,/2 }{ a , b , c }
+\tkzTabVar {+/ \va ,-V+ / \vbo/ \vbt ,-/ \vc}
+\end{tikzpicture}
+\end{minipage}
+
+\begin{minipage}{7cm}
+\begin{tkzexample}[code only]
+ {+/ \va ,+V- /\vbo/ \vbt , -/\vc}
+\end{tkzexample}
+\begin{tikzpicture}
+\tkzTabInit[lgt=1,espcl=2.5]{ /0.5,/2 }{ a , b , c }
+\tkzTabVar {+/ \va ,+V- / \vbo/ \vbt , -/\vc}
+\end{tikzpicture}
+\end{minipage}
+\hfill
+\begin{minipage}{7cm}
+\begin{tkzexample}[code only]
+ {-/ \va, +V+ / \vbo/\vbt, -/\vc}
+\end{tkzexample}
+\begin{tikzpicture}
+\tkzTabInit[lgt=1,espcl=2.5]{ /0.5,/2 }{ a , b , c }
+\tkzTabVar {-/ \va ,+V+ / \vbo / \vbt, -/\vc}
+\end{tikzpicture}
+\end{minipage}
+
+\begin{minipage}{16cm}
+\begin{tkzexample}[code only]
+ {-/ \va ,+H/\vb,-/\vc, +/ \vd}
+\end{tkzexample}
+\begin{tikzpicture}
+\tkzTabInit[lgt=1,espcl=3]{ /0.5,/2 }{ a , b , c , d }
+\tkzTabVar {-/ \va ,+H/\vb,-/\vc, +/ \vd}
+\end{tikzpicture}
+\end{minipage}
+
+\begin{minipage}{16cm}
+\begin{tkzexample}[code only]
+ {+/ \va ,-H/\vb,-/\vc, +/ \vd}
+\end{tkzexample}
+\begin{tikzpicture}
+\tkzTabInit[lgt=1,espcl=3]{ /0.5,/2 }{ a , b , c , d }
+\tkzTabVar {+/ \va ,-H/\vb,-/\vc, +/ \vd}
+\end{tikzpicture}
+\end{minipage}
+
+\begin{minipage}{16cm}
+\begin{tkzexample}[code only]
+ {-/ \va , R , R , R , +/ \ve}
+\end{tkzexample}
+\begin{tikzpicture}
+\tkzTabInit[lgt=1,espcl=3]{ /0.5,/2 }{ a , b , c , d , e}
+\tkzTabVar {-/ \va ,R,R,R, +/ \ve}
+\end{tikzpicture}
+\end{minipage}
+
+\begin{minipage}{16cm}
+\begin{tkzexample}[code only]
+ {-/ \va , +/\vb , -DH/\vc , -/\vd , +/ \ve}
+ \end{tkzexample}
+\begin{tikzpicture}
+\tkzTabInit[lgt=1,espcl=3]{ /0.5,/2 }{ a , b , c , d , e}
+\tkzTabVar {-/ \va ,+/\vb ,-DH/\vc,-/\vd, +/ \ve}
+\end{tikzpicture}
+\end{minipage}
+
+\begin{minipage}{16cm}
+\begin{tkzexample}[code only]
+ {D-/ \va , +DH/\vb/ , D-/\vc , +/\vd , +D/\ve}
+\end{tkzexample}
+\begin{tikzpicture}
+\tkzTabInit[lgt=1,espcl=3]{ /0.5,/2 }{ a , b , c , d , e}
+\tkzTabVar {D-/ \va ,+DH/\vb/,D-/\vc,+/\vd, -D/\ve}
+\end{tikzpicture}
+\end{minipage}
+\egroup
+
+\medskip
+Commentaires
+\begin{itemize}
+ \item on peut employer la syntaxe suivante dans pratiquement tous les cas $s(i)/\ldots/\ldots$ mais alors il faut bien positionner les expressions;
+
+ \item l'argument vide est employé parfois à la fin d'une ligne mais dans ce cas aucune flèche n'est tracée;
+
+ \item $C+$ et $C-$ n'existent pas. $+C$ et $-C$ suffisent car les expressions sont centrées;
+ \item $D+$ et $D-$ existent .
+
+\end{itemize}
+
+
+\subsection{Utilisation des options}
+
+\subsubsection{\texttt{\textcolor{red}{color}} : modification de la couleur des flèches}
+Il est possible de personnaliser le tableau à l'aide de styles.
+\begin{tkzexample}[vbox, small]
+\begin{tikzpicture}
+ \tkzTabInit[color,espcl=8]%
+ {$x$ /1,%
+ Signe\\ de $\dfrac{1}{x}$ /1.5,
+ Variation\\ de $\ln$ /1.5}%
+ {$0$,$+\infty$}%
+ \tkzTabLine{d,+,}%
+ \tkzTabVar[color=red]%
+ {D-/ / $-\infty$,+/ $+\infty$ /}
+\end{tikzpicture}
+\end{tkzexample}
+
+\subsubsection{\texttt{\textcolor{red}{help}} : affiche la structure du tableau}
+\Iopt{tkzTabVar}{help}
+Voir le chapitre personnalisation (\ref{pers})
+\subsection{Utilisation des styles}
+
+\subsubsection{Modification de la couleur d'une zone interdite}
+\Istyle{tkzTabvar}{h style}
+Si vous préférez hachurer une zone du tableau, alors il faut modifier un style.
+
+Par défaut, \tkzname{h style} est défini ainsi:
+\begin{tkzexample}[code only]
+ \tikzset{h style/.style = {fill=gray,opacity=0.4}}
+\end{tkzexample}
+
+Une autre définition peut être :
+
+\begin{tkzexample}[code only]
+ \tikzset{h style/.style = {fill=red!50}}
+\end{tkzexample}
+
+\begin{tkzexample}[vbox,width=9cm]
+\begin{tikzpicture}
+ \tikzset{h style/.style = {fill=red!50}}
+ \tkzTabInit[lgt=1,espcl=2]{$x$ /1, $f$ /2}{$0$,$1$,$2$,$3$}%
+ \tkzTabVar{+/ $1$ / , -CH/ $-2$ / , +C/ $5$, -/ $0$ / }
+\end{tikzpicture}
+\end{tkzexample}
+
+\subsubsection{\texttt{\textcolor{red}{h style}} Zone interdite hachurée}
+\Istyle{tkzTabVar}{h style}
+
+\begin{tkzexample}[code only]
+ \tikzset{h style/.style = {pattern=north west lines}}
+\end{tkzexample}
+ Ce code permet d'hachurer la zone
+
+\begin{tkzexample}[vbox,width=9cm,small]
+\begin{tikzpicture}
+ \tikzset{h style/.style = {pattern=north west lines}}
+ \tkzTabInit[lgt=1,espcl=2]{$x$ /1, $f$ /2}{$0$,$1$,$2$,$3$}%
+ \tkzTabVar{+/ $1$ / , -CH/ $-2$ / , +C/ $5$, -/ $0$ / }
+\end{tikzpicture}
+\end{tkzexample}
+
+
+\subsubsection{\texttt{\textcolor{red}{arrow style}} style des flèches.}
+\Istyle{tkzTabVar}{arrow}
+Le style des flèches est \tkzname{arrow style} et il est défini ainsi :
+
+\begin{tkzexample}[code only]
+ \tikzset{arrow style/.style = {\cmdTAB@VA@color,
+ ->,
+ > = latex',
+ shorten > = 2pt,
+ shorten < = 2pt}}
+\end{tkzexample}
+
+ On limite l'approche des nodes par les arrows. Voici une modification possible du style
+
+\begin{tkzexample}[code only]
+ \tikzset{arrow style/.style = {blue,
+ ->,
+ > = latex',
+ shorten > = 6pt,
+ shorten < = 6pt}}
+\end{tkzexample}
+
+ La couleur et l'approche des flèches sont modifiées.
+
+\begin{tkzexample}[vbox,small]
+\begin{tikzpicture}
+ \tikzset{arrow style/.style = {blue,
+ ->,
+ > = latex',
+ shorten > = 6pt,
+ shorten < = 6pt}}
+ \tkzTabInit[espcl=5]{$x$ /1, $\ln x +1$ /1.5, $x \ln x$ /2}%
+ {$0$ ,$1/\E$ , $+\infty$}%
+ \tkzTabLine{d,-,z,+,}
+ \tkzTabVar%
+ { D+/ / $0$ ,%
+ -/ \colorbox{black}{\textcolor{white}{$\dfrac{-1}{e}$}}/ ,%
+ +/ $+\infty$ / }%
+\end{tikzpicture}
+\end{tkzexample}
+
+\subsubsection{\texttt{\textcolor{red}{node style}} Style des nodes}
+\Istyle{tkzTabVar}{node style}
+Par défaut, Le style des nodes est \tkzname{node style} et il est défini ainsi :
+\begin{tkzexample}[code only]
+\tikzset{node style/.style = {inner sep = 2pt,
+ outer sep = 2pt,
+ fill = \cmdTAB@tbs@colorT}}\end{tkzexample}
+Si on veut apporter des modifications mais conserver une partie de ce style, on peut agir ainsi :
+
+\begin{tkzexample}[code only]
+ \tikzset{node style/.append style = {draw,circle,fill=red!40,opacity=.4}}
+\end{tkzexample}
+
+ Par défaut les nodes sont des rectangles non tracés, ils deviennent des disques
+
+\begin{tikzpicture}
+ \tikzset{node style/.append style = {draw,circle,fill=red!40,opacity=.4}}
+ \tkzTabInit[espcl=5]{$x$ /1, $\ln x +1$ /1.5, $x \ln x$ /2}%
+ {$0$ ,$1/\E$ , $+\infty$}%
+ \tkzTabLine{d,-,z,+,}
+ \tkzTabVar%
+ { D+/ / $0$ ,%
+ -/ \colorbox{black}{\textcolor{white}{$\dfrac{-1}{e}$}}/ ,%
+ +/ $+\infty$ / }%
+\end{tikzpicture}
+
+\begin{tkzexample}[code only,small]
+\begin{tikzpicture}
+ \tikzset{node style/.append style = {draw,circle,fill=red!40,opacity=.4}}
+ \tkzTabInit[espcl=5]{$x$ /1, $\ln x +1$ /1.5, $x \ln x$ /2}%
+ {$0$ ,$1/\E$ , $+\infty$}%
+ \tkzTabLine{d,-,z,+,}
+ \tkzTabVar%
+ { D+/ / $0$ ,%
+ -/ \colorbox{black}{\textcolor{white}{$\dfrac{-1}{e}$}}/ ,%
+ +/ $+\infty$ / }%
+\end{tikzpicture}
+\end{tkzexample}
+
+\subsection{Quelques exemples}
+\subsubsection{Fonction inverse}
+Étude de la fonction inverse $i~:~ x \longmapsto \frac{1}{x}$ sur $]-\infty~;~0[ \cup ]0~;~+\infty[$
+
+
+\begin{tkzexample}[vbox,small]
+\begin{tikzpicture}
+ \tkzTabInit[lgt=1.5,espcl=6.5]{$x$ /1,$i'(x)$ /1,$i$ /3}
+ {$-\infty$,$0$,$+\infty$}%
+ \tkzTabLine{,-,d,-,}
+ \tkzTabVar{+/ $0$ / ,-D+/ $-\infty$ / $+\infty$ , -/ $0$ /}
+\end{tikzpicture}
+\end{tkzexample}
+
+\subsubsection{Fonction avec des paliers, emploi du symbole \texttt{\textcolor{red}{R}}}
+Il est possible avec R de passer plusieurs valeurs.
+
+\begin{tkzexample}[vbox,small]
+\begin{tikzpicture}
+ \tkzTabInit[espcl=4]{$x$ /1,$f'(x)$ /1,$f(x)$ /2}
+ {$0$ , $1$ ,$2$, $+\infty$}%
+ \tkzTabLine {d,+ , z,+ , z,+ , }
+ \tkzTabVar{D-/ / $-\infty$,R/ /,R/ /,+/ $+\infty$ /}%
+\end{tikzpicture}
+\end{tkzexample}
+
+\subsubsection{Zone interdite}
+
+\begin{tkzexample}[vbox,small]
+\begin{tikzpicture}
+ \tkzTabInit[lgt=1,espcl=2]{$x$ /1, $f$ /2}{$0$,$1$,$2$,$3$}%
+ \tkzTabVar{+/ $1$ / ,-DH/ $-\infty$ / ,D+/ / $+\infty$, -/ $2$ / }
+\end{tikzpicture}
+\end{tkzexample}
+
+\subsubsection{Zone interdite + prolongement par continuité}
+\index{zone interdite}
+\begin{tkzexample}[vbox,small]
+\begin{tikzpicture}
+ \tkzTabInit[lgt=1,espcl=2]{$x$ /1, $f$ /2}{$0$,$1$,$2$,$3$}%
+ \tkzTabVar{+/ $1$ / ,-CH/ $-2$ /, D+/ / $+\infty$,-/ $2$ / }
+\end{tikzpicture}
+\end{tkzexample}
+
+\subsubsection{Zone interdite + double prolongement par continuité}
+\index{prolongement par continuité}
+\begin{tkzexample}[vbox]
+\begin{tikzpicture}
+ \tkzTabInit[lgt=1,espcl=2]{$x$ /1, $f$ /2}{$0$,$1$,$2$,$3$}%
+ \tkzTabVar{+/ $1$ / , -CH/ $-2$ / , +C/ $5$, -/ $0$ / }
+\end{tikzpicture}
+\end{tkzexample}
+
+\subsubsection{Exemple d'une fonction partiellement constante}
+
+Utilisation de l'option nocadre qui supprime le cadre extérieur, sinon on peut constater que l'on peut mettre pratiquement ce que l'on veut avec la macro \tkzcname{signe}.
+\begin{tkzexample}[vbox,small]
+\begin{tikzpicture}
+ \tkzTab[nocadre,lgt=3,espcl=4]
+ {$x$ /1,
+ Signe\\ de $f'(x)$ /1.5,
+ Variations\\ de\\ $f$ /2}
+ {$-\infty$, $-2$,$\dfrac{1}{\E}$,$\E$}%
+ {z, <--- 0 --->,d, -, d, \genfrac{}{}{0pt}{0}{\text{signe de}}{ a}, d}
+ {+/ $\dfrac{2}{3}$, +/ $\dfrac{2}{3}$,
+ -D-/ $-\infty$ / $-\infty$,+D/ $+\infty$ }
+\end{tikzpicture}
+\end{tkzexample}
+
+\subsubsection{Double variations}
+
+\begin{tkzexample}[vbox,small]
+\begin{tikzpicture}
+ \tkzTabInit[espcl=6]
+ {$x$ /1, $f''{x}$ /1,$f'(x)$ /2, $f(x)$ /2}%
+ {$0$ , $1$ , $+\infty$ }%
+ \tkzTabLine{d,+,z,-, }%
+ \tkzTabVar {D-/ /$1$,+/ $\E$ /,-/ $0$ /}%
+ \tkzTabVar {D-/ /$-\infty$ ,R/ $0$ /, +/ $+8$ /}
+\end{tikzpicture}
+\end{tkzexample}
+
+
+
+\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-tab/latex/tkz-tab.sty b/macros/latex/contrib/tkz/tkz-tab/latex/tkz-tab.sty
new file mode 100644
index 0000000000..e9715151ae
--- /dev/null
+++ b/macros/latex/contrib/tkz/tkz-tab/latex/tkz-tab.sty
@@ -0,0 +1,927 @@
+% Copyright 2020 Alain Matthes
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX version 2005/12/01 or later.
+% This work has the LPPL maintenance status “maintained”.
+% The Current Maintainer of this work is Alain Matthes.
+% Objet : Création de tableaux (signes et variations)
+%<----------------------------------------------------------------------------->
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{tkz-tab}[2020/04/08 v2.1c variations (ctan version)]
+%<----------------------------------------------------------------------------->
+\RequirePackage{ifthen}
+\RequirePackage{xkeyval}[2005/11/25]
+\RequirePackage{tikz}
+\usetikzlibrary{arrows,patterns}
+%<------------------------------ Initialisation ----------------------------->
+
+%<------------------------------ Styles ----------------------------->
+%<------------------------------ Colors ----------------------------->
+\def\tkzTabDefaultWritingColor{black}
+\def\tkzTabDefaultBackgroundColor{white}
+\def\tkzTabDefaultLineWidth{0.4pt}
+\def\tkzTabDefaultArrowStyle{latex'}
+\def\tkzTabDefaultSep{2pt}
+\def\cmdTAB@backgroundcolor{white}
+\def\cmdTAB@writecolor{black}
+\def\cmdTAB@TTS@doubledistance{1pt}
+\def\cmdTAB@TG@hcolor{gray}
+\let\cmdTAB@TG@patterncolor\cmdTAB@writecolor
+\def\cmdTAB@TG@patternstyle{north west lines}
+\let\cmdTAB@TG@color\cmdTAB@writecolor
+\let\cmdTAB@tbs@colorT\cmdTAB@backgroundcolor
+\let\cmdTAB@VA@color\cmdTAB@writecolor
+\let\cmdTAB@arrowcolor\cmdTAB@writecolor
+%<-------------------------------------------------------------------------->
+\tikzset{node style/.style = {inner sep = \tkzTabDefaultSep,
+ outer sep = \tkzTabDefaultSep,
+ fill = \tkzTabDefaultBackgroundColor}}
+\tikzset{low left/.style = {above left = \tkzTabDefaultSep}}
+\tikzset{low right/.style = {above right = \tkzTabDefaultSep}}
+\tikzset{high right/.style = {below right = \tkzTabDefaultSep}}
+\tikzset{high left/.style = {below left = \tkzTabDefaultSep}}
+\tikzset{low/.style = {above = \tkzTabDefaultSep}}
+\tikzset{high/.style = {below = \tkzTabDefaultSep}}
+\tikzset{on double/.style = {fill = \tkzTabDefaultBackgroundColor}}
+\tikzset{tan style/.style = {> = \tkzTabDefaultArrowStyle,
+ ->,
+ color = \tkzTabDefaultWritingColor}}
+\tikzset{arrow style/.style = {\tkzTabDefaultWritingColor,
+ ->,
+ > = \tkzTabDefaultArrowStyle,
+ shorten > = \tkzTabDefaultSep,
+ shorten < = \tkzTabDefaultSep}}
+\tikzset{from style/.style = {shorten > = \tkzTabDefaultSep,
+ shorten < = \tkzTabDefaultSep,
+ line width = \tkzTabDefaultLineWidth,
+ > = \tkzTabDefaultArrowStyle,
+ ->,
+ draw = \tkzTabDefaultWritingColor,
+ dotted}}
+
+\tikzset{t style/.style = {style = dotted,
+ draw = \tkzTabDefaultWritingColor}}
+
+\tikzset{h style/.style = {pattern = north west lines,
+ pattern color = \tkzTabDefaultWritingColor}}
+
+\tikzset{double style/.append style = {%
+ draw = \tkzTabDefaultWritingColor,
+ double = \tkzTabDefaultBackgroundColor}}
+%<--------------------- Colorisation du fond ------------------------------>
+\tikzset{fondC/.style={fill = \tkzTabDefaultBackgroundColor}}
+\tikzset{fondL/.style={fill = \tkzTabDefaultBackgroundColor}}
+\tikzset{fondT/.style={fill = \tkzTabDefaultBackgroundColor}}
+\tikzset{fondV/.style={fill = \tkzTabDefaultBackgroundColor}}
+%<------------------------------ End of Styles ---------------------------->
+\newdimen\tkz@XF
+\newdimen\tkz@YF
+\newcounter{tkz@cnt@line}
+\newcounter{tkz@cnt@lg}
+\newcounter{tkz@cnt@cl}
+\newcounter{tkz@cnt@pred}
+\newcounter{tkz@cnt@temp}
+\newcounter{tkz@cnt@arrow}
+\newcounter{tkz@cnt@zone}
+\newcounter{tkz@cnt@lgnext}
+\newcounter{tkz@cnt@clnext}
+\newcounter{tkz@cnt@pair}
+\newcounter{tkz@cnt@impair}
+\newcounter{tkz@cnt@aw}
+%<--------------------------------------------------------------------------->
+\define@cmdkey [TAB] {TTC} {color}{}
+\define@cmdkey [TAB] {TTC} {backgroundcolor}{}
+\presetkeys [TAB] {TTC} {color = black,
+ backgroundcolor = white}{}
+\newcommand*{\tkzTabColors}[1][]{%
+\setkeys[TAB]{TTC}{#1}
+\let\tkzTabDefaultWritingColor\cmdTAB@TTC@color
+\let\tkzTabDefaultBackgroundColor\cmdTAB@TTC@backgroundcolor
+\let\cmdTAB@backgroundcolor\cmdTAB@TTC@backgroundcolor
+\let\cmdTAB@writecolor\cmdTAB@TTC@color
+\let\cmdTAB@doublecolor\cmdTAB@TTC@backgroundcolor
+\let\cmdTAB@patterncolor\cmdTAB@TTC@color
+\let\cmdTAB@tcolor\cmdTAB@TTC@color
+\tikzset{fondC/.style={fill = \tkzTabDefaultBackgroundColor}}
+\tikzset{fondL/.style={fill = \tkzTabDefaultBackgroundColor}}
+\tikzset{fondT/.style={fill = \tkzTabDefaultBackgroundColor}}
+\tikzset{fondV/.style={fill = \tkzTabDefaultBackgroundColor}}
+}
+%<--------------------------------------------------------------------------->
+%<--------------------------------------------------------------------------->
+\define@boolkey [TAB] {TTS} {crosslines}[true]{}
+\define@cmdkey [TAB] {TTS} {doubledistance}{}
+\define@cmdkey [TAB] {TTS} {lw}{}
+\define@cmdkey [TAB] {TTS} {doublecolor}{}
+\define@cmdkey [TAB] {TTS} {color}{}
+\define@cmdkey [TAB] {TTS} {backgroundcolor}{}
+\define@cmdkey [TAB] {TTS} {patterncolor}{}
+\define@cmdkey [TAB] {TTS} {patternstyle}{}
+\define@cmdkey [TAB] {TTS} {tstyle}{}
+\define@cmdkey [TAB] {TTS} {tcolor}{}
+\define@cmdkey [TAB] {TTS} {tanstyle}{}
+\define@cmdkey [TAB] {TTS} {tanarrowstyle}{}
+\define@cmdkey [TAB] {TTS} {tancolor}{}
+\define@cmdkey [TAB] {TTS} {tanwidth}{}
+\define@cmdkey [TAB] {TTS} {fromstyle}{}
+\define@cmdkey [TAB] {TTS} {fromarrowstyle}{}
+\define@cmdkey [TAB] {TTS} {fromcolor}{}
+\define@cmdkey [TAB] {TTS} {fromwidth}{}
+\define@cmdkey [TAB] {TTS} {twidth}{}
+\define@cmdkey [TAB] {TTS} {hcolor}{}
+\define@cmdkey [TAB] {TTS} {hopacity}{}
+\define@cmdkey [TAB] {TTS} {arrowcolor}{}
+\define@cmdkey [TAB] {TTS} {arrowstyle}{}
+\define@cmdkey [TAB] {TTS} {arrowlinewidth}{}
+%<--------------------------------------------------------------------------->
+\presetkeys [TAB] {TTS} {doubledistance = 1pt,
+ doublecolor = \tkzTabDefaultBackgroundColor,
+ lw = \tkzTabDefaultLineWidth,
+ color = \tkzTabDefaultWritingColor,
+ backgroundcolor = \tkzTabDefaultBackgroundColor,
+ patterncolor = \tkzTabDefaultWritingColor,
+ patternstyle = north west lines,
+ tstyle = dotted,
+ tcolor = \tkzTabDefaultWritingColor,
+ tanarrowstyle = \tkzTabDefaultArrowStyle,
+ tanstyle = ->,
+ tancolor = \tkzTabDefaultWritingColor,
+ tanwidth = \tkzTabDefaultLineWidth,
+ fromarrowstyle = \tkzTabDefaultArrowStyle,
+ fromstyle = ->,
+ fromcolor = \tkzTabDefaultWritingColor,
+ fromwidth = \tkzTabDefaultLineWidth,
+ twidth = \tkzTabDefaultLineWidth,
+ hcolor = \tkzTabDefaultWritingColor,
+ hopacity = 0.4,
+ crosslines = false,
+ arrowcolor = \tkzTabDefaultWritingColor,
+ arrowstyle = \tkzTabDefaultArrowStyle,
+ arrowlinewidth = \tkzTabDefaultLineWidth}{}
+%<--------------------------------------------------------------------------->
+\newcommand*{\tkzTabSetup}[1][]{%
+\setkeys[TAB]{TTS}{#1}
+\tikzset{from style/.append style = {line width = \cmdTAB@TTS@fromwidth,
+ > = \cmdTAB@TTS@fromarrowstyle,
+ \cmdTAB@TTS@fromstyle,
+ \cmdTAB@TTS@fromcolor}}
+
+\tikzset{tan style/.style = {\cmdTAB@TTS@tanstyle,
+ > = \cmdTAB@TTS@tanarrowstyle,
+ \cmdTAB@TTS@tancolor}}
+
+\tikzset{double style/.append style = {%
+ draw = \cmdTAB@TTS@color,
+ double = \cmdTAB@TTS@doublecolor,
+ double distance = \cmdTAB@TTS@doubledistance,
+ line width = \cmdTAB@TTS@lw}}
+\tikzset{t style/.style = {style = \cmdTAB@TTS@tstyle,
+ draw = \cmdTAB@TTS@tcolor,
+ line width = \cmdTAB@TTS@twidth}}
+\tikzset{arrow style/.append style = {\cmdTAB@TTS@arrowcolor,
+ > = \cmdTAB@TTS@arrowstyle,
+ line width = \cmdTAB@TTS@arrowlinewidth}}
+\tikzset{node style/.append style = { fill = fondpaille}}
+\tikzset{fondC/.style={fill = \cmdTAB@TTS@backgroundcolor}}
+\tikzset{fondL/.style={fill = \cmdTAB@TTS@backgroundcolor}}
+\tikzset{fondT/.style={fill = \cmdTAB@TTS@backgroundcolor}}
+\tikzset{fondV/.style={fill = \cmdTAB@TTS@backgroundcolor}}
+\ifTAB@TTS@crosslines%
+ \tikzset{h style/.style = {pattern = north west lines,
+ pattern color = \cmdTAB@TTS@patterncolor}}
+\else
+ \tikzset{h style/.style = {fill = \cmdTAB@TTS@patterncolor!50,
+ opacity = \cmdTAB@TTS@hopacity}}
+\fi
+}
+%<--------------------- tracé du cadre extérieur --------------------------->
+\define@boolkey [TAB] {tbs} {help}[true]{}
+\define@boolkey [TAB] {tbs} {color}[true]{}
+\define@boolkey [TAB] {tbs} {nocadre}[true]{}
+\define@cmdkey [TAB] {tbs} {lw}{}
+\define@cmdkey [TAB] {tbs} {textw}{}
+\define@cmdkey [TAB] {tbs} {colorC}{}
+\define@cmdkey [TAB] {tbs} {colorL}{}
+\define@cmdkey [TAB] {tbs} {colorT}{}
+\define@cmdkey [TAB] {tbs} {colorV}{}
+\define@cmdkey [TAB] {tbs} {lgt}{}
+\define@cmdkey [TAB] {tbs} {espcl}{}
+\define@cmdkey [TAB] {tbs} {deltacl}{}
+\presetkeys [TAB] {tbs} {help = false,
+ espcl = 3,
+ lgt = 2,
+ textw = \cmdTAB@tbs@lgt,
+ lw = \tkzTabDefaultLineWidth,
+ colorC = \tkzTabDefaultBackgroundColor,
+ colorL = \tkzTabDefaultBackgroundColor,
+ colorT = \tkzTabDefaultBackgroundColor,
+ colorV = \tkzTabDefaultBackgroundColor,
+ color = false,
+ nocadre = false,
+ deltacl = 0.5}{}
+%<--------------------------------------------------------------------------->
+%<-------------- Macro principale : détermine les dim ----------------------->
+%<--------------------------------------------------------------------------->
+\newcommand*{\tkzTabInit}[3][]{%
+ \setkeys[TAB]{tbs}{#1}
+ \setcounter{tkz@cnt@line}{1}
+ \setcounter{tkz@cnt@lgnext}{0}
+ \setcounter{tkz@cnt@clnext}{0}
+ \setcounter{tkz@cnt@aw}{0}
+ \setcounter{tkz@cnt@lg}{0}
+ \setcounter{tkz@cnt@cl}{0}
+ \setcounter{tkz@cnt@pred}{0}
+ \setcounter{tkz@cnt@temp}{0}
+ \setcounter{tkz@cnt@arrow}{0}
+ \setcounter{tkz@cnt@zone}{0}
+ \gdef\tkz@deltaY{0}
+%<----------------------- Première colonne ---------------------------------->
+\foreach \ligne/\ecart in {#2}{%
+ \stepcounter{tkz@cnt@lg}%
+}%
+\stepcounter{tkz@cnt@lg}%
+\foreach \colonne in {#3}{%
+ \stepcounter{tkz@cnt@cl}%
+}%
+\addtocounter{tkz@cnt@cl}{-1}%
+\let\tkz@nbinterv\thetkz@cnt@cl
+\addtocounter{tkz@cnt@lg}{-1}%
+\xdef\maxtkz@cnt@lg{\thetkz@cnt@lg}%
+\xdef\tkz@maxcl{\thetkz@cnt@cl}%
+\pgfmathparse{\cmdTAB@tbs@lgt+2*\cmdTAB@tbs@deltacl+\cmdTAB@tbs@espcl*\tkz@nbinterv}%
+\global\let\tkz@lgttab\pgfmathresult
+\global\let\tkz@lgttab\tkz@lgttab
+\coordinate(T00) at (0,0);
+\coordinate(T10) at (\cmdTAB@tbs@lgt,0);
+\coordinate(T20) at (\tkz@lgttab,0);
+\setcounter{tkz@cnt@lg}{0}%
+\foreach \ligne/\tkz@deltaH in {#2}{%
+ \setcounter{tkz@cnt@cl}{0}%
+ \foreach \x in {#3}{%
+ \pgfmathmultiply{\cmdTAB@tbs@espcl}{\value{tkz@cnt@cl}}%
+ \global\let\ecartcl\pgfmathresult
+ \pgfmathparse{\cmdTAB@tbs@lgt+\cmdTAB@tbs@deltacl+\ecartcl}%
+ \global\let\tkz@ddx\pgfmathresult
+ \stepcounter{tkz@cnt@cl}%
+ \coordinate(N\thetkz@cnt@cl 0) at (\tkz@ddx,-\tkz@deltaY);}}%
+\foreach \m in {1,...,\tkz@maxcl}{%
+ \setcounter{tkz@cnt@clnext}{\m}%
+ \stepcounter{tkz@cnt@clnext}%
+ \path (N\m 0)--(N\thetkz@cnt@clnext 0) coordinate[midway](M\m 0);}%
+\setcounter{tkz@cnt@cl}{0}%
+\setcounter{tkz@cnt@lg}{0}%
+\foreach \ligne/\tkz@deltaH in {#2}{%
+ \stepcounter{tkz@cnt@lg}%
+ \pgfmathadd{\tkz@deltaY}{\tkz@deltaH}%
+ \global\let\tkz@deltaY\pgfmathresult
+ \coordinate(T0\thetkz@cnt@lg) at (0,-\tkz@deltaY);
+ \coordinate(T1\thetkz@cnt@lg) at (\cmdTAB@tbs@lgt,-\tkz@deltaY);
+ \coordinate(T2\thetkz@cnt@lg) at (\tkz@lgttab,-\tkz@deltaY);
+ \setcounter{tkz@cnt@cl}{0}%
+ \foreach \x in {#3}{%
+ \pgfmathparse{\cmdTAB@tbs@lgt+\cmdTAB@tbs@deltacl+%
+ \cmdTAB@tbs@espcl*\thetkz@cnt@cl}%
+ \global\let\tkz@ddx\pgfmathresult
+ \stepcounter{tkz@cnt@cl}%
+ \coordinate(N\number\value{tkz@cnt@cl}%
+ \number\value{tkz@cnt@lg})%
+ at (\tkz@ddx,-\tkz@deltaY);
+ }%
+ \foreach \m in {1,...,\tkz@maxcl}{%
+ \setcounter{tkz@cnt@clnext}{\m}%
+ \stepcounter{tkz@cnt@clnext}%
+ \path (N\m\number\value{tkz@cnt@lg})--%
+ (N\thetkz@cnt@clnext\number\value{tkz@cnt@lg})%
+ coordinate[midway](M\m\number\value{tkz@cnt@lg});
+ \ifTAB@tbs@help%
+ \draw[fill=green!30!black] (M\m\number\value{tkz@cnt@lg}) circle(2pt)%
+ node[below right,green!30!black] {%
+ \footnotesize M\m\number\value{tkz@cnt@lg}};
+ \fi
+ }%
+ \pgfmathdivide{\cmdTAB@tbs@lgt}{2}%
+ \global\let\tkz@tab@dx\pgfmathresult
+ \pgfmathdivide{\tkz@deltaH}{2}%
+ \global\let\tkz@halfdeltaH\pgfmathresult
+ \pgfmathsubtract{\tkz@halfdeltaH}{\tkz@deltaY}%
+ \global\let\tkz@tab@dy\pgfmathresult
+ \setcounter{tkz@cnt@temp}{\thetkz@cnt@lg}%
+ \addtocounter{tkz@cnt@temp}{-1}%
+ \path (\tkz@tab@dx,\tkz@tab@dy) coordinate(F\thetkz@cnt@temp);}%
+%
+%<--------------------- Colorisation du fond ------------------------------>
+\tikzset{fondC/.style={fill = \cmdTAB@tbs@colorC}}
+\tikzset{fondL/.style={fill = \cmdTAB@tbs@colorL}}
+\tikzset{fondT/.style={fill = \cmdTAB@tbs@colorT}}
+\tikzset{fondV/.style={fill = \cmdTAB@tbs@colorV}}
+\ifTAB@tbs@color
+ \draw[fondC] (T01) rectangle (T1\maxtkz@cnt@lg);
+ \draw[fondL] (T11) rectangle (T20);
+ \draw[fondT] (T11) rectangle (T2\maxtkz@cnt@lg);
+ \draw[fondV] (T00) rectangle (T11);
+\fi
+%<-------------------Fin Colorisation du fond ------------------------------>
+%
+%<--------------- Écriture des formules en colonne 1 --------------------->
+\setcounter{tkz@cnt@lg}{-1}%
+\pgfmathsubtract{\cmdTAB@tbs@textw}{0.4}%
+\xdef\cmdTAB@tbs@textw{\pgfmathresult}%
+\foreach \ligne/\tkz@deltaH in {#2}{%
+\stepcounter{tkz@cnt@lg}%
+\ifTAB@tbs@help%
+\node[draw,fill=green!50,inner sep=1pt] at (F\number\value{tkz@cnt@lg}) {\footnotesize F\thetkz@cnt@lg};
+\else
+\node[text width = \cmdTAB@tbs@textw cm,text centered,inner sep=0pt] at (F\thetkz@cnt@lg) {\ligne};
+\fi}%
+%<--------------- Cadre = true on trace tout sinon condition---------------->
+\ifTAB@tbs@nocadre%
+\draw[line width = \cmdTAB@tbs@lw] (T10) --(T1\maxtkz@cnt@lg);
+\setcounter{tkz@cnt@temp}{\maxtkz@cnt@lg}%
+\addtocounter {tkz@cnt@temp}{-1}%
+\xdef\maxtkz@cnt@lg{\thetkz@cnt@temp}%
+\foreach \y in {1,...,\maxtkz@cnt@lg}{\draw[line width = \cmdTAB@tbs@lw] (T0\y) --(T2\y);}%
+\else
+\foreach \y in {1,...,\maxtkz@cnt@lg}{\draw[line width = \cmdTAB@tbs@lw] (T0\y) --(T2\y);}%
+\draw[line width = \cmdTAB@tbs@lw] (T00) rectangle (T2\maxtkz@cnt@lg);
+\draw[line width = \cmdTAB@tbs@lw] (T10) -- (T1\maxtkz@cnt@lg);
+\fi
+%<------------ Première ligne et Nodes variations -------------------------->
+\setcounter{tkz@cnt@cl}{0}%
+\pgfextractx{\tkz@XF}{\pgfpointanchor{F0}{center}}%
+\pgfextracty{\tkz@YF}{\pgfpointanchor{F0}{center}}%
+\foreach \x in {#3}{%
+\pgfmathparse{\cmdTAB@tbs@deltacl+\cmdTAB@tbs@lgt/2+%
+ \cmdTAB@tbs@espcl*\thetkz@cnt@cl}%
+ \global\let\tkz@tab@dx\pgfmathresult
+ \stepcounter{tkz@cnt@cl}%
+ \ifTAB@tbs@help%
+ \node[draw,fill=blue!50,inner sep=1pt] (L\number\value{tkz@cnt@cl})%
+ at (\tkz@XF + \tkz@tab@dx cm,\tkz@YF) {\footnotesize L\number\value{tkz@cnt@cl}};%
+ \else
+ \node (L\thetkz@cnt@cl) at (\tkz@XF + \tkz@tab@dx cm,\tkz@YF) {\x};%
+ \fi}%
+%<------------------------ help ----------------------------->
+\ifTAB@tbs@help%
+\foreach \colonne in {0,1,2}{%
+\foreach \ligne in {0,...,\maxtkz@cnt@lg}{\draw (T\colonne\ligne)%
+ node[draw,fill=red!50,inner sep=1pt] {\textbf{\footnotesize T\colonne\ligne}};}}%
+\setcounter{tkz@cnt@temp}{\tkz@maxcl}
+\stepcounter{tkz@cnt@temp}
+\xdef\tkz@maxcl{\thetkz@cnt@temp}%
+\foreach \ligne in {0,...,\maxtkz@cnt@lg}
+{\foreach \colonne in {1,...,\tkz@maxcl}{%
+ \draw[fill=red] (N\colonne\ligne) circle(2pt)%
+ node[above right,red,inner sep=1pt] {\footnotesize N\colonne\ligne};}}%
+\fi
+}% fin de tkzTabInit
+%<--------------------------------------------------------------------------->
+%<--------------------- Ligne de Signes ------------------------------------->
+%<----------------------- tkzTabLine ----------------------------------->
+\newcommand*\stripspaces[1]{%
+ \strip@spaces{#1}}
+\newcommand\strip@spaces{\renewcommand\strip@spaces[1]}%
+\expandafter\strip@spaces{%
+ \@firstofone{\expandafter\strip@lastspace\@firstofone #1\@nil}
+\@nil\@@nil}
+\@ifdefinable\strip@lastspace{%
+ \def\strip@lastspace#1 \@nil#2\@@nil{\strip@nil#1\@nil\@@nil}}
+\@ifdefinable\strip@nil{%
+ \def\strip@nil#1\@nil#2\@@nil{#1}}
+%<--------------------------------------------------------------------------->
+\define@boolkey[TAB]{TL}{help}[true]{}
+\presetkeys[TAB]{TL}{help=false}{}
+%<--------------------------------------------------------------------------->
+\newcommand{\tkzTabLine}[2][]{%
+ \makeatletter
+ \setkeys[TAB]{TL}{#1}%
+ \setcounter{tkz@cnt@lg}{\thetkz@cnt@line}%
+ \stepcounter{tkz@cnt@line}%
+ \setcounter{tkz@cnt@lgnext}{\thetkz@cnt@line}%
+ \setcounter{tkz@cnt@cl}{1}%
+ \setcounter{tkz@cnt@pair}{1}%
+ \setcounter{tkz@cnt@impair}{1}%
+ \ifTAB@TL@help%
+ \foreach \x in {#2}
+ {
+ \ifthenelse{\isodd{\value{tkz@cnt@cl}}}{%
+ \path (N\thetkz@cnt@impair\thetkz@cnt@lg) --%
+ node[draw,inner sep =1pt,midway,fill=yellow]%
+ {\footnotesize Z\thetkz@cnt@impair\thetkz@cnt@lg}%
+ (N\thetkz@cnt@impair\thetkz@cnt@lgnext);
+ \stepcounter{tkz@cnt@impair}}{%
+ \path (M\thetkz@cnt@pair\thetkz@cnt@lg)--%
+ node[draw,inner sep =1pt,midway,fill=yellow]%
+ {\footnotesize S\thetkz@cnt@pair\thetkz@cnt@lg}%
+ (M\thetkz@cnt@pair\thetkz@cnt@lgnext);
+ \stepcounter{tkz@cnt@pair}}%
+ \stepcounter{tkz@cnt@cl}%
+ }%
+ \else
+ \ifTAB@tbs@color%
+ \draw(T1\thetkz@cnt@lg) rectangle (T2\thetkz@cnt@line);%
+ \fi
+ \foreach \x in {#2}
+ {%
+ \ifthenelse{\isodd{\value{tkz@cnt@cl}}}{%
+ \path (N\thetkz@cnt@impair\thetkz@cnt@lg) --%
+ coordinate[midway](Z\thetkz@cnt@impair\thetkz@cnt@lg)%
+ (N\thetkz@cnt@impair\thetkz@cnt@lgnext);
+ \ifthenelse{\equal{\expandafter\stripspaces\expandafter{\x}}{z}}{%
+ \draw[line width = \cmdTAB@tbs@lw,t style]%
+ (N\thetkz@cnt@impair\thetkz@cnt@lg) -- %
+ (N\thetkz@cnt@impair\thetkz@cnt@lgnext);
+ \node at (Z\thetkz@cnt@impair\thetkz@cnt@lg){$0$};
+ }{%
+ \ifthenelse{\equal{\expandafter\stripspaces\expandafter{\x}}{}}{%
+ }{%
+ \ifthenelse{\equal{\expandafter\stripspaces\expandafter{\x}}{t}}{%
+ \draw[line width = \cmdTAB@tbs@lw,t style]
+ (N\thetkz@cnt@impair\thetkz@cnt@lg) -- %
+ (N\thetkz@cnt@impair\thetkz@cnt@lgnext);}{%
+ \ifthenelse{\equal{\expandafter\stripspaces\expandafter{\x}}{d}}{%
+ \draw[line width =\cmdTAB@tbs@lw,double style]%
+ ([yshift = -\cmdTAB@tbs@lw/2] N\thetkz@cnt@impair\thetkz@cnt@lg)--%
+ ([yshift = \cmdTAB@tbs@lw/2] N\thetkz@cnt@impair\thetkz@cnt@lgnext);
+ }{%
+ \path (N\thetkz@cnt@impair\thetkz@cnt@lg)--%
+ (N\thetkz@cnt@impair\thetkz@cnt@lgnext);
+ \node at (Z\thetkz@cnt@impair\thetkz@cnt@lg){$\x$};
+ }%
+ }}}\stepcounter{tkz@cnt@impair}%
+ }{%
+ \path (M\thetkz@cnt@pair\thetkz@cnt@lg)--%
+ coordinate[midway](S\thetkz@cnt@pair\thetkz@cnt@lg)%
+ (M\thetkz@cnt@pair\thetkz@cnt@lgnext);%
+ \ifthenelse{\equal{\expandafter\stripspaces\expandafter{\x}}{h}}{%
+ \setcounter{tkz@cnt@clnext}{\thetkz@cnt@pair}%
+ \stepcounter{tkz@cnt@clnext}%
+ \pgfmathparse{\cmdTAB@TTS@doubledistance/2+\cmdTAB@tbs@lw}
+ \global\let\tkz@deltax\pgfmathresult
+ \fill[h style]([xshift=\tkz@deltax,yshift=-\cmdTAB@tbs@lw/2]%
+ N\thetkz@cnt@pair\thetkz@cnt@lg)
+ rectangle%
+ ([xshift=-\tkz@deltax,yshift=\cmdTAB@tbs@lw/2]%
+ N\thetkz@cnt@clnext\thetkz@cnt@lgnext);
+}{%
+ \node at (S\thetkz@cnt@pair\thetkz@cnt@lg) {$\x$};
+ }%
+ \stepcounter{tkz@cnt@pair}%
+ }%
+ \stepcounter{tkz@cnt@cl}%
+ }% end foreach
+ \fi
+ \makeatother
+}%
+%<--------------------------------------------------------------------------->
+%<---------------------------- Variations ------------------------------->
+%<--------------------------------------------------------------------------->
+%<----------------------- Macro pour tracer une flèche ---------------------->
+%<--------------------------------------------------------------------------->
+\newcommand*{\tkzDrawArrow}{%
+\makeatletter
+\ifthenelse{\equal{\thetkz@cnt@zone}{0}}{%
+ \setcounter{tkz@cnt@pred}{\thetkz@cnt@cl}
+ \addtocounter{tkz@cnt@pred}{-1}
+ \ifthenelse{\thetkz@cnt@temp>0}{%
+ \addtocounter{tkz@cnt@pred}{-\thetkz@cnt@temp}%
+ \setcounter{tkz@cnt@temp}{0}}{}%
+ \ifTAB@VA@help%
+ \draw[fill=orange] (FR\thetkz@cnt@pred\thetkz@cnt@lg) circle(2pt)%
+ node[right,orange] {\footnotesize FR\thetkz@cnt@pred\thetkz@cnt@lg};
+ \draw[fill=orange] (FL\thetkz@cnt@cl\thetkz@cnt@lg)circle(2pt)%
+ node[left,orange] {\footnotesize FL\thetkz@cnt@cl\thetkz@cnt@lg};
+ \else
+ \draw[arrow style] (FR\thetkz@cnt@pred\thetkz@cnt@lg) to%
+ (FL\thetkz@cnt@cl\thetkz@cnt@lg);%
+ \fi
+ }{%
+ \setcounter{tkz@cnt@zone}{0}%
+ }%
+\makeatother
+}%
+%<--------------------------------------------------------------------------->
+\define@boolkey[TAB]{VA}{help}[true]{}
+\define@cmdkey[TAB]{VA}{color}{}
+\presetkeys[TAB]{VA}{color = \tkzTabDefaultWritingColor,
+ help = false}{}
+%<--------------------------------------------------------------------------->
+\newcommand*{\tkzTabVar}[2][]{%
+\setkeys[TAB]{VA}{#1}%
+\setcounter{tkz@cnt@lg}{\thetkz@cnt@line}%
+\stepcounter{tkz@cnt@line}%
+\setcounter{tkz@cnt@lgnext}{\thetkz@cnt@line}%
+\begin{scope}
+\tikzset{every node/.style={inner sep =3pt}}%
+\setcounter{tkz@cnt@cl}{0}%
+\setcounter{tkz@cnt@aw}{0}%
+\setcounter{tkz@cnt@temp}{0}%
+\setcounter{tkz@cnt@arrow}{0}%
+\pgfmathparse{\cmdTAB@TTS@doubledistance/2+\cmdTAB@tbs@lw}
+\global\let\tkz@deltax\pgfmathresult
+
+\ifTAB@tbs@color%
+ \draw (T1\thetkz@cnt@lg) rectangle (T2\thetkz@cnt@line);%
+\fi%
+%<----------------- Lecture des données et création des nodes --------------->
+\foreach \x/\tl/\tr in {#2}
+{\stepcounter{tkz@cnt@aw}\stepcounter{tkz@cnt@cl}%
+%<------------------------------------------------------------------- D- ---->
+\ifthenelse{\equal{\expandafter\stripspaces\expandafter{\x}}{D-}}%
+{\draw[double style]%
+ ([yshift = -\cmdTAB@tbs@lw/2] N\thetkz@cnt@cl\thetkz@cnt@lg) --%
+ ([yshift = \cmdTAB@tbs@lw/2] N\thetkz@cnt@cl\thetkz@cnt@lgnext);
+ \node[node style,low right] (FR\thetkz@cnt@cl\thetkz@cnt@lg) at (N\thetkz@cnt@aw\thetkz@cnt@lgnext){\ifTAB@VA@help\else\tr\fi};%
+ \ifthenelse{\equal{\thetkz@cnt@arrow}{0}}{}{\tkzDrawArrow}%
+}%
+%<------------------------------------------------------------------- D+ ---->
+{\ifthenelse{\equal{\expandafter\stripspaces\expandafter{\x}}{D+}}%
+{\draw[double style]%
+ ([yshift = -\cmdTAB@tbs@lw/2] N\thetkz@cnt@cl\thetkz@cnt@lg) --%
+ ([yshift = \cmdTAB@tbs@lw/2] N\thetkz@cnt@cl\thetkz@cnt@lgnext);
+ \node[node style,high right] (FR\thetkz@cnt@cl\thetkz@cnt@lg)%
+ at (N\thetkz@cnt@aw\thetkz@cnt@lg){\ifTAB@VA@help\else\tr\fi};%
+ \ifthenelse{\equal{\thetkz@cnt@arrow}{0}}{}{\tkzDrawArrow}%
+}
+%<------------------------------------------------------------------- +D ---->
+{\ifthenelse{\equal{\expandafter\stripspaces\expandafter{\x}}{+D}}%
+{\draw[double style]%
+ ([yshift=-\cmdTAB@tbs@lw/2] N\thetkz@cnt@cl\thetkz@cnt@lg) -- ([yshift=\cmdTAB@tbs@lw/2] N\thetkz@cnt@cl\thetkz@cnt@lgnext);
+ \node[node style,high left] (FL\thetkz@cnt@cl\thetkz@cnt@lg) at (N\thetkz@cnt@aw\thetkz@cnt@lg){\ifTAB@VA@help\else\tl\fi};%
+ \ifthenelse{\equal{\thetkz@cnt@arrow}{0}}{}{\tkzDrawArrow}%
+}%
+%<------------------------------------------------------------------- +C ---->
+{\ifthenelse{\equal{\expandafter\stripspaces\expandafter{\x}}{+C}}%
+{\draw[double style]%
+ ([yshift = -\cmdTAB@tbs@lw/2] N\thetkz@cnt@cl\thetkz@cnt@lg)--%
+ ([yshift = \cmdTAB@tbs@lw/2] N\thetkz@cnt@cl\thetkz@cnt@lgnext);%
+\node[node style,high,on double] (FL\thetkz@cnt@cl\thetkz@cnt@lg) at (N\thetkz@cnt@aw\thetkz@cnt@lg){\ifTAB@VA@help\else\tl\fi};%
+\node[node style,high,on double] (FR\thetkz@cnt@cl\thetkz@cnt@lg) at (N\thetkz@cnt@aw\thetkz@cnt@lg){\ifTAB@VA@help\else\tl\fi};%
+\ifthenelse{\equal{\thetkz@cnt@arrow}{0}}{}{\tkzDrawArrow}%
+}
+%<------------------------------------------------------------------ -D ----->
+{\ifthenelse{\equal{\expandafter\stripspaces\expandafter{\x}}{-D}}%
+{\draw[double style]%
+ ([yshift = -\cmdTAB@tbs@lw/2] N\thetkz@cnt@cl\thetkz@cnt@lg) --%
+ ([yshift = \cmdTAB@tbs@lw/2] N\thetkz@cnt@cl\thetkz@cnt@lgnext);
+ \node[node style,low left] (FL\thetkz@cnt@cl\thetkz@cnt@lg) at (N\thetkz@cnt@aw\thetkz@cnt@lgnext){\ifTAB@VA@help\else\tl\fi};%
+ \ifthenelse{\equal{\thetkz@cnt@arrow}{0}}{}{\tkzDrawArrow}%
+}%
+%<------------------------------------------------------------------ -C ----->
+{\ifthenelse{\equal{\expandafter\stripspaces\expandafter{\x}}{-C}}%
+{\draw[double style]%
+ ([yshift = -\cmdTAB@tbs@lw/2] N\thetkz@cnt@cl\thetkz@cnt@lg) --%
+ ([yshift = \cmdTAB@tbs@lw/2] N\thetkz@cnt@cl\thetkz@cnt@lgnext);
+ \node[node style,low,on double] (FL\thetkz@cnt@cl\thetkz@cnt@lg) at (N\thetkz@cnt@aw\thetkz@cnt@lgnext){\ifTAB@VA@help\else\tl\fi};%
+ \node[node style,low,on double] (FR\thetkz@cnt@cl\thetkz@cnt@lg) at (N\thetkz@cnt@aw\thetkz@cnt@lgnext){\ifTAB@VA@help\else\tl\fi};%
+ \ifthenelse{\equal{\thetkz@cnt@arrow}{0}}{}{\tkzDrawArrow}%
+}%
+%<------------------------------------------------------------------- + ---->
+{\ifthenelse{\equal{\expandafter\stripspaces\expandafter{\x}}{+}}%
+{\node[node style,high] (FL\thetkz@cnt@cl\thetkz@cnt@lg) at (N\thetkz@cnt@aw\thetkz@cnt@lg){\ifTAB@VA@help\else\tl\fi};
+ \node[node style,high] (FR\thetkz@cnt@cl\thetkz@cnt@lg) at (N\thetkz@cnt@aw\thetkz@cnt@lg){\ifTAB@VA@help\else\tl\fi};
+ \ifthenelse{\equal{\thetkz@cnt@arrow}{0}}{}{\tkzDrawArrow}%
+}
+%<---------------------------------------------------------------- +V+ ---->
+{\ifthenelse{\equal{\expandafter\stripspaces\expandafter{\x}}{+V+}}%
+{\node[node style,high left] (FL\thetkz@cnt@cl\thetkz@cnt@lg) at (N\thetkz@cnt@aw\thetkz@cnt@lg){\ifTAB@VA@help\else\tl\fi};
+ \node[node style,high right] (FR\thetkz@cnt@cl\thetkz@cnt@lg) at (N\thetkz@cnt@aw\thetkz@cnt@lg){\ifTAB@VA@help\else\tr\fi};
+ \ifthenelse{\equal{\thetkz@cnt@arrow}{0}}{}{\tkzDrawArrow}%
+}%
+%<--------------------------------------------------------------- -V- ---->
+{\ifthenelse{\equal{\expandafter\stripspaces\expandafter{\x}}{-V-}}%
+{\node[node style,low left] (FL\thetkz@cnt@cl\thetkz@cnt@lg) at (N\thetkz@cnt@aw\thetkz@cnt@lgnext){\ifTAB@VA@help\else\tl\fi};
+ \node[node style,low right] (FR\thetkz@cnt@cl\thetkz@cnt@lg) at (N\thetkz@cnt@aw\thetkz@cnt@lgnext){\ifTAB@VA@help\else\tr\fi};
+ \ifthenelse{\equal{\thetkz@cnt@arrow}{0}}{}{\tkzDrawArrow}%
+}%
+%<-------------------------------------------------------------- -V+ ---->
+{\ifthenelse{\equal{\expandafter\stripspaces\expandafter{\x}}{-V+}}%
+{\node[node style,low left] (FL\thetkz@cnt@cl\thetkz@cnt@lg) at (N\thetkz@cnt@aw\thetkz@cnt@lgnext){\ifTAB@VA@help\else\tl\fi};
+ \node[node style,high right] (FR\thetkz@cnt@cl\thetkz@cnt@lg) at (N\thetkz@cnt@aw\thetkz@cnt@lg){\ifTAB@VA@help\else\tr\fi};
+ \ifthenelse{\equal{\thetkz@cnt@arrow}{0}}{}{\tkzDrawArrow}%
+}
+%<---------------------------------------------------------------- +V- ---->
+{\ifthenelse{\equal{\expandafter\stripspaces\expandafter{\x}}{+V-}}%
+{\node[node style,high left] (FL\thetkz@cnt@cl\thetkz@cnt@lg) at (N\thetkz@cnt@aw\thetkz@cnt@lg){\ifTAB@VA@help\else\tl\fi};
+ \node[node style,low right] (FR\thetkz@cnt@cl\thetkz@cnt@lg) at (N\thetkz@cnt@aw\thetkz@cnt@lgnext){\ifTAB@VA@help\else\tr\fi};
+ \ifthenelse{\equal{\thetkz@cnt@arrow}{0}}{}{\tkzDrawArrow}%
+}
+%<------------------------------------------------------------------- - ---->
+{\ifthenelse{\equal{\expandafter\stripspaces\expandafter{\x}}{-}}%
+{\node[node style,low] (FL\thetkz@cnt@cl\thetkz@cnt@lg) at (N\thetkz@cnt@aw\thetkz@cnt@lgnext){\ifTAB@VA@help\else\tl\fi};
+ \node[node style,low] (FR\thetkz@cnt@cl\thetkz@cnt@lg) at (N\thetkz@cnt@aw\thetkz@cnt@lgnext){\ifTAB@VA@help\else\tl\fi};
+ \ifthenelse{\equal{\thetkz@cnt@arrow}{0}}{}{\tkzDrawArrow}%
+}%
+%<------------------------------------------------------------------ -D+ ---->
+{\ifthenelse{\equal{\expandafter\stripspaces\expandafter{\x}}{-D+}}%
+{\draw[line width =\cmdTAB@tbs@lw,double style]%
+ ([yshift = -\cmdTAB@tbs@lw/2] N\thetkz@cnt@cl\thetkz@cnt@lg) --%
+ ([yshift = \cmdTAB@tbs@lw/2] N\thetkz@cnt@cl\thetkz@cnt@lgnext);
+ \node[node style,low left] (FL\thetkz@cnt@cl\thetkz@cnt@lg) at (N\thetkz@cnt@aw\thetkz@cnt@lgnext){\ifTAB@VA@help\else\tl\fi};
+ \node[node style,high right] (FR\thetkz@cnt@cl\thetkz@cnt@lg) at (N\thetkz@cnt@aw\thetkz@cnt@lg){\ifTAB@VA@help\else\tr\fi};
+ \ifthenelse{\equal{\thetkz@cnt@arrow}{0}}{}{\tkzDrawArrow}%
+}
+%<------------------------------------------------------------------ +D- ---->
+{\ifthenelse{\equal{\expandafter\stripspaces\expandafter{\x}}{+D-}}%
+{\draw[double style]%
+ ([yshift = -\cmdTAB@tbs@lw/2] N\thetkz@cnt@cl\thetkz@cnt@lg) --%
+ ([yshift = \cmdTAB@tbs@lw/2] N\thetkz@cnt@cl\thetkz@cnt@lgnext);
+ \node[node style,high left] (FL\thetkz@cnt@cl\thetkz@cnt@lg) at (N\thetkz@cnt@aw\thetkz@cnt@lg){\ifTAB@VA@help\else\tl\fi};%
+ \node[node style,low right] (FR\thetkz@cnt@cl\thetkz@cnt@lg) at (N\thetkz@cnt@aw\thetkz@cnt@lgnext){\ifTAB@VA@help\else\tr\fi};
+ \ifthenelse{\equal{\thetkz@cnt@arrow}{0}}{}{\tkzDrawArrow}%
+}
+%<----------------------------------------------------------------- -CD+ ---->
+{\ifthenelse{\equal{\expandafter\stripspaces\expandafter{\x}}{-CD+}}%
+{\draw[double style]%
+ ([yshift = -\cmdTAB@tbs@lw/2] N\thetkz@cnt@cl\thetkz@cnt@lg) --%
+ ([yshift = \cmdTAB@tbs@lw/2] N\thetkz@cnt@cl\thetkz@cnt@lgnext);
+ \node[node style,low,on double] (FL\thetkz@cnt@cl\thetkz@cnt@lg) at (N\thetkz@cnt@aw\thetkz@cnt@lgnext){\ifTAB@VA@help\else\tl\fi};
+ \node[node style,high right,on double] (FR\thetkz@cnt@cl\thetkz@cnt@lg) at (N\thetkz@cnt@aw\thetkz@cnt@lg){\ifTAB@VA@help\else\tr\fi};
+ \ifthenelse{\equal{\thetkz@cnt@arrow}{0}}{}{\tkzDrawArrow}%
+}
+%<----------------------------------------------------------------- -CD- ---->
+{\ifthenelse{\equal{\expandafter\stripspaces\expandafter{\x}}{-CD-}}%
+{\draw[double style]%
+ ([yshift = -\cmdTAB@tbs@lw/2] N\thetkz@cnt@cl\thetkz@cnt@lg) --%
+ ([yshift = \cmdTAB@tbs@lw/2] N\thetkz@cnt@cl\thetkz@cnt@lgnext);
+ \node[node style,low,on double] (FL\thetkz@cnt@cl\thetkz@cnt@lg) at (N\thetkz@cnt@aw\thetkz@cnt@lgnext){\ifTAB@VA@help\else\tl\fi};
+ \node[node style,low right,on double] (FR\thetkz@cnt@cl\thetkz@cnt@lg) at (N\thetkz@cnt@aw\thetkz@cnt@lgnext){\ifTAB@VA@help\else\tr\fi};
+ \ifthenelse{\equal{\thetkz@cnt@arrow}{0}}{}{\tkzDrawArrow}%
+}
+%<----------------------------------------------------------------- +CD- ---->
+{\ifthenelse{\equal{\expandafter\stripspaces\expandafter{\x}}{+CD-}}%
+{\draw[double style]%
+ ([yshift = -\cmdTAB@tbs@lw/2] N\thetkz@cnt@cl\thetkz@cnt@lg) --%
+ ([yshift = \cmdTAB@tbs@lw/2] N\thetkz@cnt@cl\thetkz@cnt@lgnext);
+ \node[node style,high,on double] (FL\thetkz@cnt@cl\thetkz@cnt@lg) at (N\thetkz@cnt@aw\thetkz@cnt@lg){\ifTAB@VA@help\else\tl\fi};
+ \node[node style,low right,on double] (FR\thetkz@cnt@cl\thetkz@cnt@lg) at (N\thetkz@cnt@aw\thetkz@cnt@lgnext){\ifTAB@VA@help\else\tr\fi};
+ \ifthenelse{\equal{\thetkz@cnt@arrow}{0}}{}{\tkzDrawArrow}%
+}
+%<----------------------------------------------------------------- -DC+ ---->
+{\ifthenelse{\equal{\expandafter\stripspaces\expandafter{\x}}{-DC+}}%
+{\draw[double style]%
+ ([yshift = -\cmdTAB@tbs@lw/2] N\thetkz@cnt@cl\thetkz@cnt@lg) -- %
+ ([yshift = \cmdTAB@tbs@lw/2] N\thetkz@cnt@cl\thetkz@cnt@lgnext);
+ \node[node style,low left,on double] (FL\thetkz@cnt@cl\thetkz@cnt@lg) at (N\thetkz@cnt@aw\thetkz@cnt@lgnext){\ifTAB@VA@help\else\tl\fi};
+ \node[node style,high,on double] (FR\thetkz@cnt@cl\thetkz@cnt@lg) at (N\thetkz@cnt@aw\thetkz@cnt@lg){\ifTAB@VA@help\else\tr\fi};
+ \ifthenelse{\equal{\thetkz@cnt@arrow}{0}}{}{\tkzDrawArrow}%
+}%
+%<----------------------------------------------------------------- +DC- ---->
+{\ifthenelse{\equal{\expandafter\stripspaces\expandafter{\x}}{+DC-}}%
+{\draw[double style]%
+ ([yshift = -\cmdTAB@tbs@lw/2] N\thetkz@cnt@cl\thetkz@cnt@lg) -- %
+ ([yshift = \cmdTAB@tbs@lw/2] N\thetkz@cnt@cl\thetkz@cnt@lgnext);
+ \node[node style,high left,on double] (FL\thetkz@cnt@cl\thetkz@cnt@lg) at (N\thetkz@cnt@aw\thetkz@cnt@lg){\ifTAB@VA@help\else\tl\fi};
+ \node[node style,low,on double] (FR\thetkz@cnt@cl\thetkz@cnt@lg) at (N\thetkz@cnt@aw\thetkz@cnt@lgnext){\ifTAB@VA@help\else\tr\fi};
+ \ifthenelse{\equal{\thetkz@cnt@arrow}{0}}{}{\tkzDrawArrow}%
+}%
+%<----------------------------------------------------------------- -DC- ---->
+{\ifthenelse{\equal{\expandafter\stripspaces\expandafter{\x}}{-DC-}}%
+{\draw[double style]%
+ ([yshift = -\cmdTAB@tbs@lw/2] N\thetkz@cnt@cl\thetkz@cnt@lg) -- %
+ ([yshift = \cmdTAB@tbs@lw/2] N\thetkz@cnt@cl\thetkz@cnt@lgnext);
+ \node[node style,low left,on double] (FL\thetkz@cnt@cl\thetkz@cnt@lg) at (N\thetkz@cnt@aw\thetkz@cnt@lgnext){\ifTAB@VA@help\else\tl\fi};
+ \node[node style,low,on double] (FR\thetkz@cnt@cl\thetkz@cnt@lg) at (N\thetkz@cnt@aw\thetkz@cnt@lgnext){\ifTAB@VA@help\else\tr\fi};
+ \ifthenelse{\equal{\thetkz@cnt@arrow}{0}}{}{\tkzDrawArrow}%
+}%
+%<----------------------------------------------------------------- +DC+ ---->
+{\ifthenelse{\equal{\expandafter\stripspaces\expandafter{\x}}{+DC+}}%
+{\draw[double style]%
+ ([yshift = -\cmdTAB@tbs@lw/2] N\thetkz@cnt@cl\thetkz@cnt@lg) --%
+ ([yshift = \cmdTAB@tbs@lw/2] N\thetkz@cnt@cl\thetkz@cnt@lgnext);
+ \node[node style,high left,on double] (FL\thetkz@cnt@cl\thetkz@cnt@lg) at (N\thetkz@cnt@aw\thetkz@cnt@lg){\ifTAB@VA@help\else\tl\fi};
+ \node[node style,high,on double] (FR\thetkz@cnt@cl\thetkz@cnt@lg) at (N\thetkz@cnt@aw\thetkz@cnt@lg){\ifTAB@VA@help\else\tr\fi};
+ \ifthenelse{\equal{\thetkz@cnt@arrow}{0}}{}{\tkzDrawArrow}%
+}%
+%<------------------------------------------------------------------ +D+ ---->
+{\ifthenelse{\equal{\expandafter\stripspaces\expandafter{\x}}{+D+}}%
+{\draw[double style]%
+ ([yshift = -\cmdTAB@tbs@lw/2] N\thetkz@cnt@cl\thetkz@cnt@lg) -- %
+ ([yshift = \cmdTAB@tbs@lw/2] N\thetkz@cnt@cl\thetkz@cnt@lgnext);
+ \node[node style,high left,on double] (FL\thetkz@cnt@cl\thetkz@cnt@lg) at (N\thetkz@cnt@aw\thetkz@cnt@lg){\ifTAB@VA@help\else\tl\fi};
+ \node[node style,high right,on double] (FR\thetkz@cnt@cl\thetkz@cnt@lg) at (N\thetkz@cnt@aw\thetkz@cnt@lg){\ifTAB@VA@help\else\tr\fi};
+ \ifthenelse{\equal{\thetkz@cnt@arrow}{0}}{}{\tkzDrawArrow}%
+}%
+%<------------------------------------------------------------------ -D- ---->
+{\ifthenelse{\equal{\expandafter\stripspaces\expandafter{\x}}{-D-}}%
+{\draw[double style]%
+ ([yshift = -\cmdTAB@tbs@lw/2] N\thetkz@cnt@cl\thetkz@cnt@lg) -- %
+ ([yshift = \cmdTAB@tbs@lw/2] N\thetkz@cnt@cl\thetkz@cnt@lgnext);
+ \node[node style,low left] (FL\thetkz@cnt@cl\thetkz@cnt@lg) at (N\thetkz@cnt@aw\thetkz@cnt@lgnext){\ifTAB@VA@help\else\tl\fi};
+ \node[node style,low right] (FR\thetkz@cnt@cl\thetkz@cnt@lg) at (N\thetkz@cnt@aw\thetkz@cnt@lgnext){\ifTAB@VA@help\else\tr\fi};
+ \ifthenelse{\equal{\thetkz@cnt@arrow}{0}}{}{\tkzDrawArrow}%
+}%
+%<------------------------------------------------------------------ R ------>
+{\ifthenelse{\equal{\expandafter\stripspaces\expandafter{\x}}{R}}%
+{\stepcounter{tkz@cnt@temp}%
+}%
+%<------------------------------------------------------------------ +DH ---->
+{\ifthenelse{\equal{\expandafter\stripspaces\expandafter{\x}}{+DH}}%
+{\draw[double style]%
+ ([yshift = -\cmdTAB@tbs@lw/2] N\thetkz@cnt@cl\thetkz@cnt@lg) -- %
+ ([yshift = \cmdTAB@tbs@lw/2] N\thetkz@cnt@cl\thetkz@cnt@lgnext);
+ \node[node style,high left] (FL\thetkz@cnt@cl\thetkz@cnt@lg) at (N\thetkz@cnt@aw\thetkz@cnt@lg){\ifTAB@VA@help\else\tl\fi};
+ \setcounter{tkz@cnt@clnext}{\thetkz@cnt@cl}\stepcounter{tkz@cnt@clnext}
+ \fill[h style]%
+ ([xshift=\tkz@deltax] N\thetkz@cnt@cl\thetkz@cnt@lg)%
+ rectangle%
+ (N\thetkz@cnt@clnext\thetkz@cnt@lgnext);
+\ifthenelse{\equal{\thetkz@cnt@arrow}{0}}{}{\tkzDrawArrow}\stepcounter{tkz@cnt@zone}%
+}%
+%<------------------------------------------------------------------ -DH ---->
+{\ifthenelse{\equal{\expandafter\stripspaces\expandafter{\x}}{-DH}}%
+{\draw[double style]%
+ ([yshift=-\cmdTAB@tbs@lw/2] N\thetkz@cnt@cl\thetkz@cnt@lg) --%
+ ([yshift=\cmdTAB@tbs@lw/2] N\thetkz@cnt@cl\thetkz@cnt@lgnext);
+ \node[node style,low left] (FL\thetkz@cnt@cl\thetkz@cnt@lg) at (N\thetkz@cnt@cl\thetkz@cnt@lgnext){\ifTAB@VA@help\else\tl\fi};
+ \setcounter{tkz@cnt@clnext}{\thetkz@cnt@cl}\stepcounter{tkz@cnt@clnext}%
+ \fill[h style]%
+ ([xshift=\tkz@deltax] N\thetkz@cnt@cl\thetkz@cnt@lg)%
+ rectangle%
+ (N\thetkz@cnt@clnext\thetkz@cnt@lgnext);
+ \ifthenelse{\equal{\thetkz@cnt@arrow}{0}}{}{\tkzDrawArrow}\stepcounter{tkz@cnt@zone}%
+}%
+%<------------------------------------------------------------------ +CH ---->
+{\ifthenelse{\equal{\expandafter\stripspaces\expandafter{\x}}{+CH}}%
+{\setcounter{tkz@cnt@clnext}{\thetkz@cnt@cl}\stepcounter{tkz@cnt@clnext}
+\fill[h style]%
+(N\thetkz@cnt@cl\thetkz@cnt@lg)%
+ rectangle%
+ (N\thetkz@cnt@clnext\thetkz@cnt@lgnext);
+ \draw[double style]%
+ ([yshift = -\cmdTAB@tbs@lw/2] N\thetkz@cnt@cl\thetkz@cnt@lg) --%
+ ([yshift = \cmdTAB@tbs@lw/2] N\thetkz@cnt@cl\thetkz@cnt@lgnext);
+ \node[node style,high,on double] (FL\thetkz@cnt@cl\thetkz@cnt@lg) at (N\thetkz@cnt@aw\thetkz@cnt@lg){\ifTAB@VA@help\else\tl\fi};
+\ifthenelse{\equal{\thetkz@cnt@arrow}{0}}{}{\tkzDrawArrow}\stepcounter{tkz@cnt@zone}%
+}%
+%<------------------------------------------------------------------ -CH ---->
+{\ifthenelse{\equal{\expandafter\stripspaces\expandafter{\x}}{-CH}}%
+{\setcounter{tkz@cnt@clnext}{\thetkz@cnt@cl}\stepcounter{tkz@cnt@clnext}%
+ \fill[h style]%
+ ([xshift=\tkz@deltax] N\thetkz@cnt@cl\thetkz@cnt@lg)%
+ rectangle%
+ (N\thetkz@cnt@clnext\thetkz@cnt@lgnext);
+ \draw[double style]%
+ ([yshift = -\cmdTAB@tbs@lw/2] N\thetkz@cnt@cl\thetkz@cnt@lg) --%
+ ([yshift = \cmdTAB@tbs@lw/2] N\thetkz@cnt@cl\thetkz@cnt@lgnext);
+ \node[node style,low,on double](FL\thetkz@cnt@cl\thetkz@cnt@lg) at (N\thetkz@cnt@aw\thetkz@cnt@lgnext){\ifTAB@VA@help\else\tl\fi};
+ \ifthenelse{\equal{\thetkz@cnt@arrow}{0}}{}{\tkzDrawArrow}\stepcounter{tkz@cnt@zone}%
+}%
+%<------------------------------------------------------------------ +H ---->
+{\ifthenelse{\equal{\expandafter\stripspaces\expandafter{\x}}{+H}}%
+{\setcounter{tkz@cnt@clnext}{\thetkz@cnt@cl}\stepcounter{tkz@cnt@clnext}
+ \fill[h style]%
+ (N\thetkz@cnt@cl\thetkz@cnt@lg)%
+ rectangle %
+ (N\thetkz@cnt@clnext\thetkz@cnt@lgnext);
+ \draw[]%
+ (N\thetkz@cnt@cl\thetkz@cnt@lg) -- (N\thetkz@cnt@cl\thetkz@cnt@lgnext);
+ \node[node style,high,on double] (FL\thetkz@cnt@cl\thetkz@cnt@lg) at (N\thetkz@cnt@aw\thetkz@cnt@lg){\ifTAB@VA@help\else\tl\fi};%
+\ifthenelse{\equal{\thetkz@cnt@arrow}{0}}{}{\tkzDrawArrow}\stepcounter{tkz@cnt@zone}%
+}%
+%<------------------------------------------------------------------ -H ---->
+{\ifthenelse{\equal{\expandafter\stripspaces\expandafter{\x}}{-H}}%
+{\setcounter{tkz@cnt@clnext}{\thetkz@cnt@cl}\stepcounter{tkz@cnt@clnext}
+ \fill[h style]%
+ (N\thetkz@cnt@cl\thetkz@cnt@lg)%
+ rectangle %
+ (N\thetkz@cnt@clnext\thetkz@cnt@lgnext);
+ \draw[]%
+ (N\thetkz@cnt@cl\thetkz@cnt@lg) -- (N\thetkz@cnt@cl\thetkz@cnt@lgnext);
+ \node[node style,low,on double](FL\thetkz@cnt@cl\thetkz@cnt@lg) at (N\thetkz@cnt@aw\thetkz@cnt@lgnext){\ifTAB@VA@help\else\tl\fi};
+\ifthenelse{\equal{\thetkz@cnt@arrow}{0}}{}{\tkzDrawArrow}\stepcounter{tkz@cnt@zone}%
+}{}% non prévu
+}}}}}}}}}}}}}}}}}}}}}}}}}}}}}%
+\stepcounter{tkz@cnt@arrow}}% end de la boucle
+%<-------------------------------------------------- Tracé des flèches ------>
+\end{scope}%
+}% fin de la macro variation
+%<--------------------------------------------------------------------------->
+%<------------------------- Valeur Intermédiaire ---------------------------->
+%<--------------------------------------------------------------------------->
+\define@boolkey[TAB] {VI} {draw}[true]{}
+\define@cmdkey [TAB] {VI} {remember}{}
+\presetkeys [TAB] {VI} {draw = false,
+ remember= lastval}{}
+%<--------------------------------------------------------------------------->
+\newcommand*{\tkzTabVal}[6][]{%
+\setkeys[TAB]{VI}{#1}%
+\setcounter{tkz@cnt@lg}{\thetkz@cnt@line}%
+\addtocounter{tkz@cnt@lg}{-1}%
+\pgfextractx{\tkz@XF}{\pgfpointanchor{L#2}{center}}
+\pgfextracty{\tkz@YF}{\pgfpointanchor{L#2}{center}}
+\pgfmathparse{\cmdTAB@tbs@espcl * (#4)*(#3-#2)}%
+\global\let\tkz@tab@dx\pgfmathresult
+\node[inner sep = 0pt,fondL] (ANT) at (\tkz@XF + \tkz@tab@dx cm,\tkz@YF) {#5};
+\path coordinate (ANTa) at ([xshift=\tkz@tab@dx cm]N#21);
+\path coordinate (ANTb) at ([xshift=\tkz@tab@dx cm]N#2\thetkz@cnt@line);
+\path (intersection cs:%
+ first line = {(FR#2\thetkz@cnt@lg)--(FL#3\thetkz@cnt@lg)},%
+ second line = {(ANTa)--(ANTb)}) node[node style,fondT](VAL){#6};
+\path coordinate (\cmdTAB@VI@remember) at (VAL);
+\ifTAB@VI@draw%
+ \draw[from style] (ANTa.center) to (VAL);
+\fi
+}%
+%<--------------------------------------------------------------------------->
+%<--------------------------------------------------------------------------->
+\define@boolkey[TAB] {IM} {draw}[true]{}
+\define@cmdkey [TAB] {IM} {remember}{}
+\presetkeys [TAB] {IM} {draw = false,
+ remember= lastval}{}
+\newcommand*{\tkzTabIma}[5][]{%
+\setkeys[TAB]{IM}{#1}%
+\setcounter{tkz@cnt@lg}{\thetkz@cnt@line}%
+\addtocounter{tkz@cnt@lg}{-1}%
+\setcounter{tkz@cnt@lgnext}{\thetkz@cnt@line}%
+\path (intersection cs:
+ first line = {(FR#2\thetkz@cnt@lg)--(FL#3\thetkz@cnt@lg)},%
+ second line = {(N#4\thetkz@cnt@lg) --(N#4\thetkz@cnt@lgnext)}) node[node style,fondT](IMA){#5};
+ \path coordinate (\cmdTAB@IM@remember) at (IMA);
+\ifTAB@IM@draw%
+ \draw[from style] (N#41) to (IMA);
+\fi
+}%
+%<--------------------------------------------------------------------------->
+%<--------------------------------------------------------------------------->
+\newcommand*{\tkzTabImaFrom}[5][]{%
+\setkeys[TAB]{IM}{#1}%
+\setcounter{tkz@cnt@lg}{\thetkz@cnt@line}%
+\addtocounter{tkz@cnt@lg}{-1}%
+\path (intersection cs:%
+ first line = {(FR#2\thetkz@cnt@lg)--(FL#3\thetkz@cnt@lg)},%
+ second line={(#4)--([yshift=-0.5 cm]#4)}) node[node style,fondT](IMA){#5};
+ \path coordinate (\cmdTAB@IM@remember) at (IMA);
+\ifTAB@IM@draw
+ \draw[from style] (#4) to (IMA);
+\fi
+}%
+%<--------------------------------------------------------------------------->
+%<--------------------------------------------------------------------------->
+%<---------------------- tangente horizontale ----------------------------->
+% args 1--> options ;
+% 2--> tkz@cnt@cl debut fl ;
+% 3--> tkz@cnt@clnext fin de fl ;%
+% 4---> n°de val ;
+% 5----> image
+\define@cmdkey [TAB] {TA} {pos}[below]{}
+\define@cmdkey [TAB] {TA} {color}{}
+\define@boolkey[TAB] {TA} {draw}[true]{}
+\define@cmdkey [TAB] {TA} {remember}{}
+\presetkeys [TAB] {TA} {draw = false,
+ color = \tkzTabDefaultWritingColor,
+ pos = above,
+ remember = lastval}{}
+%<--------------------------------------------------------------------------->
+\newcommand*{\tkzTabTan}[5][]{%
+\setkeys[TAB]{TA}{#1}%
+\setcounter{tkz@cnt@lg}{\thetkz@cnt@line}%
+\addtocounter{tkz@cnt@lg}{-1}%
+\setcounter{tkz@cnt@lgnext}{\thetkz@cnt@line}%
+\path (intersection cs:
+ first line = {(FR#2\thetkz@cnt@lg)--(FL#3\thetkz@cnt@lg)},%
+ second line = {(N#4\thetkz@cnt@lg) --(N#4\thetkz@cnt@lgnext)}) coordinate(tgt);
+\draw[fill,color=\cmdTAB@TA@color] (tgt) circle (1pt);
+\node[\cmdTAB@TA@pos =1pt] at (tgt) {#5};
+\path coordinate (\cmdTAB@TA@remember) at (tgt);
+\draw[tan style] (tgt) -- ++(.75,0);
+\draw[tan style] (tgt) -- ++(-.75,0);
+\ifTAB@TA@draw \draw[from style] (N#41) to (tgt); \fi
+}%
+%<--------------------------------------------------------------------------->
+%<--------------------------------------------------------------------------->
+\newcommand*{\tkzTabTanFrom}[5][]{%
+\setkeys[TAB]{TA}{#1}%
+ \setcounter{tkz@cnt@lg}{\thetkz@cnt@line}%
+ \addtocounter{tkz@cnt@lg}{-1}%
+ \setcounter{tkz@cnt@lgnext}{\thetkz@cnt@line}%
+ \path (intersection cs:
+ first line = {(FR#2\thetkz@cnt@lg)--(FR#3\thetkz@cnt@lg)},%
+ second line = {(#4) --([yshift=-0.5 cm]#4)}) coordinate(tgt);
+ \draw[fill,color=\cmdTAB@TA@color] (tgt) circle (1pt);
+ \node[\cmdTAB@TA@pos = 1pt] at (tgt) {#5};
+ \path coordinate (\cmdTAB@TA@remember) at (tgt);
+ \draw[arrow style] (tgt) -- ++(.75,0);
+ \draw[arrow style] (tgt) -- ++(-.75,0);
+ \ifTAB@TA@draw \draw[from style] (#4) -- (tgt); \fi
+}%
+%<--------------------------------------------------------------------------->
+%<---------------------- dérivée droite gauche ------------------------------>
+\newcommand*{\tkzTabSlope}[1]{%
+\foreach \x/\y/\z in {#1}{%
+ \node[left = 3pt] at (Z\x 1) {\scriptsize $\y$};
+ \node[right = 3pt] at (Z\x 1) {\scriptsize $\z$};
+ }%
+}
+%<--------------------------------------------------------------------------->
+%<--------------------------------------------------------------------------->
+\newcommand*{\tkzTab}[5][]{%
+ \tkzTabInit[#1]{#2}{#3}%
+ \tkzTabLine{#4}%
+ \tkzTabVar{#5}%
+}
+%<-------------------------------The End ------------------------------------>
+\endinput
+
diff --git a/macros/latex/contrib/zhlipsum/README.md b/macros/latex/contrib/zhlipsum/README.md
index ebbab97309..be5d29520a 100644
--- a/macros/latex/contrib/zhlipsum/README.md
+++ b/macros/latex/contrib/zhlipsum/README.md
@@ -36,8 +36,8 @@ To install `zhlipsum`, you can use one of the following methods:
Contributing
------------
-[Issues](https://github.com/Stone-Zeng/zhlipsum/issues) and
-[pull requests](https://github.com/Stone-Zeng/zhlipsum/pulls)
+[Issues](https://github.com/stone-zeng/zhlipsum/issues) and
+[pull requests](https://github.com/stone-zeng/zhlipsum/pulls)
are always welcome.
License
@@ -50,4 +50,4 @@ version.
-----
-Copyright (C) 2017, 2018 by Xiangdong Zeng <xdzeng96@gmail.com>.
+Copyright (C) 2017&ndash;2020 by Xiangdong Zeng <xdzeng96@gmail.com>.
diff --git a/macros/latex/contrib/zhlipsum/zhlipsum-en.pdf b/macros/latex/contrib/zhlipsum/zhlipsum-en.pdf
index 2f10ca3191..595b5d8810 100644
--- a/macros/latex/contrib/zhlipsum/zhlipsum-en.pdf
+++ b/macros/latex/contrib/zhlipsum/zhlipsum-en.pdf
Binary files differ
diff --git a/macros/latex/contrib/zhlipsum/zhlipsum-text.dtx b/macros/latex/contrib/zhlipsum/zhlipsum-text.dtx
index 8a314fb10c..ef9fc2903f 100644
--- a/macros/latex/contrib/zhlipsum/zhlipsum-text.dtx
+++ b/macros/latex/contrib/zhlipsum/zhlipsum-text.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 2017, 2018 by Xiangdong Zeng <xdzeng96@gmail.com>
+% Copyright (C) 2017--2020 by Xiangdong Zeng <xdzeng96@gmail.com>
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either
diff --git a/macros/latex/contrib/zhlipsum/zhlipsum.dtx b/macros/latex/contrib/zhlipsum/zhlipsum.dtx
index 3ef3fd63a8..f6e0c1b118 100644
--- a/macros/latex/contrib/zhlipsum/zhlipsum.dtx
+++ b/macros/latex/contrib/zhlipsum/zhlipsum.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 2017, 2018 by Xiangdong Zeng <xdzeng96@gmail.com>
+% Copyright (C) 2017--2020 by Xiangdong Zeng <xdzeng96@gmail.com>
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either
@@ -71,8 +71,8 @@ To install `zhlipsum`, you can use one of the following methods:
Contributing
------------
-[Issues](https://github.com/Stone-Zeng/zhlipsum/issues) and
-[pull requests](https://github.com/Stone-Zeng/zhlipsum/pulls)
+[Issues](https://github.com/stone-zeng/zhlipsum/issues) and
+[pull requests](https://github.com/stone-zeng/zhlipsum/pulls)
are always welcome.
License
@@ -85,7 +85,7 @@ version.
-----
-Copyright (C) 2017, 2018 by Xiangdong Zeng <xdzeng96@gmail.com>.
+Copyright (C) 2017&ndash;2020 by Xiangdong Zeng <xdzeng96@gmail.com>.
%</readme>
%
%<*internal>
@@ -102,7 +102,7 @@ Copyright (C) 2017, 2018 by Xiangdong Zeng <xdzeng96@gmail.com>.
\preamble
- Copyright (C) 2017, 2018 by Xiangdong Zeng <xdzeng96@gmail.com>
+ Copyright (C) 2017--2020 by Xiangdong Zeng <xdzeng96@gmail.com>
This work may be distributed and/or modified under the
conditions of the LaTeX Project Public License, either
@@ -183,7 +183,7 @@ Copyright (C) 2017, 2018 by Xiangdong Zeng <xdzeng96@gmail.com>.
%<package>\NeedsTeXFormat{LaTeX2e}
%<package>\RequirePackage{expl3}
%<*!(driver|install)>
-%<!readme>\GetIdInfo $Id: zhlipsum.dtx 1.1.1 2018-09-08 12:00:00Z Xiangdong Zeng <xdzeng96@gmail.com> $
+%<!readme>\GetIdInfo $Id: zhlipsum.dtx 1.2.0 2020-04-10 12:00:00Z Xiangdong Zeng <xdzeng96@gmail.com> $
%<package> {Chinese dummy text}
%<package>\ProvidesExplPackage{\ExplFileName}
%<utf8> {Chinese dummy text with UTF-8 encoding (for zhlipsum)}
@@ -195,12 +195,12 @@ Copyright (C) 2017, 2018 by Xiangdong Zeng <xdzeng96@gmail.com>.
%<!readme> {\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
%</!(driver|install)>
%<*driver>
-%\PassOptionsToPackage{showframe}{geometry}
%^^A! \PassOptionsToPackage{scheme=plain, linespread=1.1}{ctex}
%^^A+
\documentclass{ctxdoc}
\usepackage{multirow}
-\setCJKmonofont{FangSong}[ItalicFont=KaiTi]
+\setCJKmainfont{Source Han Serif SC}[ItalicFont=Kaiti SC]
+\setCJKmonofont{STFangsong}[ItalicFont=Kaiti SC]
%^^A-
\hypersetup{%
pdftitle={zhlipsum: 中文乱数假文(Lorem ipsum)},
@@ -219,21 +219,20 @@ Copyright (C) 2017, 2018 by Xiangdong Zeng <xdzeng96@gmail.com>.
%^^A! \pagestyle{headings}
%^^A+
% Use `!` for comment in `ctexexam`.
-\makeatletter
\catcode`!=\active
\RecustomVerbatimEnvironment{ctexexam}{Verbatim}{%
frame=single, framesep=10pt,
%^^A-
gobble=4,
label=\rule{0pt}{12pt}\textnormal{\bfseries 例 \arabic{ctexexam}},
-%^^A! gobble=2,
-%^^A! label=\rule{0pt}{12pt}\textnormal{\bfseries Example \arabic{ctexexam}},
+ defineactive=\def!{\color{gray}\%},
+%^^A! gobble=2,
+%^^A! label=\rule{0pt}{12pt}\textnormal{\bfseries Example \arabic{ctexexam}},
+%^^A! defineactive=\def!{\color{gray}\itshape\%},
%^^A+
listparameters=%
\setlength\topsep{\bigskipamount}%
- \refstepcounter{ctexexam}\ctexexamlabelref
- \appto\FV@EndList{\nointerlineskip},
- defineactive=\def!{\color{gray}\itshape\%}}
+ \refstepcounter{ctexexam}\ctexexamlabelref}
\preto\ctexexam{\catcode`!=\active}
\preto\endctexexam{\catcode`!=12}
\catcode`!=12
@@ -252,17 +251,6 @@ Copyright (C) 2017, 2018 by Xiangdong Zeng <xdzeng96@gmail.com>.
}
\group_end:
}
-% From l3doc, to make @@ -> <module> while @@@@ -> @@
-\cs_set_protected:Npn \__ctxdoc_replace_at_at_aux:Nn #1#2
- {
- \tl_replace_all:Nnn #1 { \token_to_str:N @ } { @ }
- \tl_replace_all:Nnn #1 { \token_to_str:N _ } { _ }
- \tl_replace_all:Nnn #1 { @ @ @ @ } { \token_to_str:N a a }
- \tl_replace_all:Nnn #1 { _ _ @ @ } { _ _ #2 }
- \tl_replace_all:Nnn #1 { _ @ @ } { _ _ #2 }
- \tl_replace_all:Nnn #1 { @ @ } { _ _ #2 }
- \tl_replace_all:Nnn #1 { \token_to_str:N a a } { @ @ }
- }
\ExplSyntaxOff
\makeatother
\RenewDocumentEnvironment{arguments}{}%
@@ -313,12 +301,12 @@ Copyright (C) 2017, 2018 by Xiangdong Zeng <xdzeng96@gmail.com>.
%
% \title{\textbf{zhlipsum: 中文乱数假文(Lorem ipsum)}}
% \author{曾祥东}
-% \date{2018/09/08 \quad v1.1.1^^A
-% \thanks{\url{https://github.com/Stone-Zeng/zhlipsum}.}}
+% \date{2020/04/10 \quad v1.2.0^^A
+% \thanks{\url{https://github.com/stone-zeng/zhlipsum}.}}
%^^A! \title{\textbf{The \pkg{zhlipsum} Package: Chinese Dummy Text}}
%^^A! \author{Xiangdong Zeng}
-%^^A! \date{2018/09/08 \quad v1.1.1%
-%^^A! \thanks{\url{https://github.com/Stone-Zeng/zhlipsum}.}}
+%^^A! \date{2020/04/10 \quad v1.2.0%
+%^^A! \thanks{\url{https://github.com/stone-zeng/zhlipsum}.}}
%^^A!
%
%^^A 标题页页边距
@@ -432,8 +420,8 @@ Copyright (C) 2017, 2018 by Xiangdong Zeng <xdzeng96@gmail.com>.
%^^A!
%
% 如果使用了 \CTeX{} 宏集,则编码会根据 \CTeX{} 自动确定。但需注意,
-% 在 \CTeX{} 宏集中,相应的宏包选项为 \opt{UTF8} 和 \opt{GBK},而本
-% 宏包中所有选项均为小写。
+% 在 \CTeX{} 宏集中,相应的宏包选项为大写的 \opt{UTF8} 和 \opt{GBK},
+% 而本宏包中所有选项均为小写。
%^^A! If you have loaded \CTeX{} bundle, then the encoding will be
%^^A! selected automatically according to \CTeX{}. Note that in \CTeX{}
%^^A! bundle, the correspoding options are \opt{UTF8} and \opt{GBK},
@@ -441,7 +429,7 @@ Copyright (C) 2017, 2018 by Xiangdong Zeng <xdzeng96@gmail.com>.
%^^A!
%
%^^A+
-% \begin{function}[updated=2018-04-08]{\zhlipsum}
+% \begin{function}[updated=2020-04-08]{\zhlipsum}
%^^A-
% \begin{syntax}
% \cs{zhlipsum}\oarg{段落}\oarg{选项}
@@ -460,11 +448,11 @@ Copyright (C) 2017, 2018 by Xiangdong Zeng <xdzeng96@gmail.com>.
%^^A! \end{function}
%^^A!
%
-% 默认情况下,不带星号的命令 \cs{zhlipsum} 会在假文段落之前、之后与
-% 之间进行分段(即插入 \tn{par}),而带星号的命令 \cs{zhlipsum}|*|
+% 默认情况下,不带星号的命令 \cs{zhlipsum} 会在假文段落之后与之间
+% 进行分段(即插入 \tn{par}),而带星号的命令 \cs{zhlipsum}|*|
% 则不做额外处理。您可以利用后文给出的 \opt{before}、\opt{after}、
% \opt{inter} 选项来更改默认设置。
-%^^A! By default, the \cs{zhlipsum} command will insert \tn{par} before,
+%^^A! By default, the \cs{zhlipsum} command will insert \tn{par}
%^^A! after and between dummy text paragraphs, while \cs{zhlipsum}|*|
%^^A! will not give any extra processing. To change the default
%^^A! behavior, you can use the \opt{before}, \opt{after} and
@@ -577,17 +565,17 @@ Copyright (C) 2017, 2018 by Xiangdong Zeng <xdzeng96@gmail.com>.
% \begin{function}[added=2018-03-29]{before,after,inter}
%^^A-
% \begin{syntax}
-% name = \meta{内容}
-% after = \meta{内容}
-% inter = \meta{内容}
+% before = \meta{内容}
+% after = \meta{内容}
+% inter = \meta{内容}
% \end{syntax}
% 在假文段落之前、之后与之间插入内容。注意使用不带星号的
% \cs{zhlipsum} 命令时插入的分段命令会被这里的设置覆盖。
% \end{function}
%^^A! \begin{syntax}
-%^^A! name = \meta{content}
-%^^A! after = \meta{content}
-%^^A! inter = \meta{content}
+%^^A! before = \meta{content}
+%^^A! after = \meta{content}
+%^^A! inter = \meta{content}
%^^A! \end{syntax}
%^^A! Insert contents before, after or between dummy text paragraphs.
%^^A! Note that the \tn{par} command inserted when using \cs{zhlipsum}
@@ -767,8 +755,8 @@ Copyright (C) 2017, 2018 by Xiangdong Zeng <xdzeng96@gmail.com>.
% ! \usepackage[encoding=big5]{zhlipsum}
%
% ! 直接使用 \newzhlipsum{big5}{許蓋功, 蓋功許, 功許蓋} 会报错
-% ! 原理:在分组内用 <、>、+ 代替 {、}、\,再将原先的 {、}、\ 设为“其他”
-% ! 类(即类别码为 12)
+% ! 原理:分组内使用 < > + 代替 { } \ 后,再将原先的 { } \ 设为“其他”类(即
+% ! 类别码为 12)
% \begingroup
% \catcode`\<=1
% \catcode`\>=2
@@ -786,7 +774,7 @@ Copyright (C) 2017, 2018 by Xiangdong Zeng <xdzeng96@gmail.com>.
%^^A!
%^^A! ! Using `\newzhlipsum{big5}{許蓋功, 蓋功許, 功許蓋}' directly will
%^^A! ! lead to an error.
-%^^A! ! Use <, >, + to replace {, } and \, and set the original {, } and \
+%^^A! ! Use <, >, + to replace {, } and \, then set the original {, } and \
%^^A! ! to be `other' category (i.e. catcode=12).
%^^A! \begingroup
%^^A! \catcode`\<=1
@@ -833,19 +821,17 @@ Copyright (C) 2017, 2018 by Xiangdong Zeng <xdzeng96@gmail.com>.
%
% \subsection{内部变量和函数}
%
-% \begin{variable}{\l_@@_tmpa_tl,\l_@@_tmpa_seq,\l_@@_tmpb_seq}
+% \begin{variable}{
+% \l_@@_tmpa_tl,
+% \l_@@_tmpa_seq,
+% \l_@@_tmpb_seq,
+% \l_@@_tmpa_str}
% 临时变量。
% \begin{macrocode}
\tl_new:N \l_@@_tmpa_tl
\seq_new:N \l_@@_tmpa_seq
\seq_new:N \l_@@_tmpb_seq
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\g_@@_encoding_tl}
-% 编码信息。
-% \begin{macrocode}
-\tl_new:N \g_@@_encoding_tl
+\str_new:N \l_@@_tmpa_str
% \end{macrocode}
% \end{variable}
%
@@ -859,56 +845,64 @@ Copyright (C) 2017, 2018 by Xiangdong Zeng <xdzeng96@gmail.com>.
% \begin{variable}{\c_zhlipsum_simp_seq,\c_zhlipsum_trad_seq}
% 预定义的简体中文与繁体中文的假文名称列表。
% \begin{macrocode}
-\seq_new:N \c_zhlipsum_simp_seq
-\seq_new:N \c_zhlipsum_trad_seq
-\seq_set_from_clist:Nn \c_zhlipsum_simp_seq { simp, zhufu, aspirin }
-\seq_set_from_clist:Nn \c_zhlipsum_trad_seq { trad, xiangyu, nanshanjing }
+\seq_const_from_clist:Nn \c_zhlipsum_simp_seq { simp, zhufu, aspirin }
+\seq_const_from_clist:Nn \c_zhlipsum_trad_seq { trad, xiangyu, nanshanjing }
% \end{macrocode}
% \end{variable}
%
+% \begin{macro}[int]{\file_input:x}
% \LaTeX3 函数变体。
% \begin{macrocode}
\cs_generate_variant:Nn \file_input:n { x }
-\prg_generate_conditional_variant:Nnn \tl_if_eq:nn { Vn } { T, TF }
% \end{macrocode}
+% \end{macro}
%
-% \begin{macro}[int,TF]{\@@_if_unicode_engine:}
+% \begin{macro}[TF]{\@@_if_unicode_engine:}
% 判断是否为 Unicode 引擎。来自于 \pkg{zhnumber} 宏包。
% \begin{macrocode}
-\prg_new_protected_conditional:Npnn \@@_if_unicode_engine: { T, F, TF }
+\prg_new_conditional:Npnn \@@_if_unicode_engine: { T, F, TF }
{
\bool_lazy_any:nTF
{
- { \sys_if_engine_xetex_p: }
- { \sys_if_engine_luatex_p: }
- { \sys_if_engine_uptex_p: }
+ \sys_if_engine_xetex_p:
+ \sys_if_engine_luatex_p:
+ \sys_if_engine_uptex_p:
}
- { \prg_return_true: }
- { \prg_return_false: }
+ { \prg_return_true: } { \prg_return_false: }
}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}[TF]{\@@_if_encoding:n}
+% \begin{variable}{\g_@@_encoding_str}
% 判断当前编码。
% \begin{macrocode}
-\prg_new_protected_conditional:Npnn \@@_if_encoding:n #1 { T, F, TF }
+\prg_new_conditional:Npnn \@@_if_encoding:n #1 { T, F, TF }
{
- \tl_if_eq:VnTF \g_@@_encoding_tl {#1}
+ \str_if_eq:VnTF \g_@@_encoding_str {#1}
{ \prg_return_true: } { \prg_return_false: }
}
+\prg_generate_conditional_variant:Nnn \@@_if_encoding:n { V } { T, F, TF }
+\str_new:N \g_@@_encoding_str
% \end{macrocode}
+% \end{variable}
% \end{macro}
%
-% \begin{macro}{\@@_msg_new:nn,
-% \@@_error:n,\@@_error:nn,
-% \@@_warning:nn,\@@_warning:nnn,\@@_warning:nxxx,
+% \begin{macro}{
+% \@@_msg_new:nn,
+% \@@_error:n,
+% \@@_error:nn,
+% \@@_warning:n,
+% \@@_warning:nn,
+% \@@_warning:nnn,
+% \@@_warning:nxxx,
% \@@_info:nn}
% 各种信息函数的缩略形式。
% \begin{macrocode}
\cs_new:Npn \@@_msg_new:nn { \msg_new:nnn { zhlipsum } }
\cs_new:Npn \@@_error:n { \msg_error:nn { zhlipsum } }
\cs_new:Npn \@@_error:nn { \msg_error:nnn { zhlipsum } }
+\cs_new:Npn \@@_warning:n { \msg_warning:nn { zhlipsum } }
\cs_new:Npn \@@_warning:nn { \msg_warning:nnn { zhlipsum } }
\cs_new:Npn \@@_warning:nnn { \msg_warning:nnnn { zhlipsum } }
\cs_new:Npn \@@_warning:nxxx { \msg_warning:nnxxx { zhlipsum } }
@@ -916,17 +910,12 @@ Copyright (C) 2017, 2018 by Xiangdong Zeng <xdzeng96@gmail.com>.
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\@@_par:}
-% 分段命令。
-% \begin{macrocode}
-\cs_new_eq:NN \@@_par: \tex_par:D
-% \end{macrocode}
-% \end{macro}
-%
% \subsection{宏包选项}
%
% \changes{v0.4}{2017/09/16}{新增 \opt{encoding} 选项。}
% \changes{v0.5}{2017/12/22}{支持 Big5 编码。}
+% \changes{v1.0.0}{2018/04/01}{根据 \CTeX{} 宏集的选项自动确定编码。}
+% \changes{v1.2.0}{2020/02/20}{优化编码判断。}
%
% \begin{macro}{encoding}
% 设置编码。
@@ -935,19 +924,7 @@ Copyright (C) 2017, 2018 by Xiangdong Zeng <xdzeng96@gmail.com>.
{
encoding .choices:nn =
{ utf8, gbk, big5 }
- {
- \tl_gset_eq:NN \g_@@_encoding_tl \l_keys_choice_tl
- \@@_if_unicode_engine:T
- {
- \@@_if_encoding:nF { utf8 }
- {
- \tl_gset:Nn \g_@@_encoding_tl { utf8 }
- \@@_warning:nn { unicode-engine } {#1}
- }
- }
- \@@_if_ctex_valid_encoding:F
- { \@@_error:nn { ctex-invalid-encoding } {#1} }
- },
+ { \str_gset:Nn \g_@@_encoding_str {#1} },
encoding / unknown .code:n =
{ \@@_error:nn { invalid-encoding } {#1} },
encoding .value_required:n = true,
@@ -962,64 +939,78 @@ Copyright (C) 2017, 2018 by Xiangdong Zeng <xdzeng96@gmail.com>.
%
% 提示信息。
% \begin{macrocode}
-\@@_msg_new:nn { unicode-engine }
- {
- You~ are~ now~ using~ Unicode~ engine~ \c_sys_engine_str. \\
- Encoding~ "#1"~ is~ invalid.~ Changed~ into~ "utf8".
- }
-\@@_msg_new:nn { ctex-invalid-encoding }
- {
- Package~ option~ "encoding=#1"~ is~ in~ conflict~ with~ ctex's~
- option~ "\tl_use:N \l__ctex_encoding_tl".\\\\
- Please~ check~ the~ package~ options.
- }
\@@_msg_new:nn { invalid-encoding }
{
- Encoding~ "#1"~ is~ invalid. \\
- Available~ encodings~ are~ "utf8",~ "gbk"~ and~ "big5".
+ Encoding~"#1"~is~invalid. \\
+ Available~encodings~are~"utf8",~"gbk"~and~"big5".
}
\@@_msg_new:nn { unknown-option }
- { Package~ option~ "\l_keys_key_tl"~ is~ unknown. }
+ { Package~option~'\l_keys_key_tl'~is~unknown. }
% \end{macrocode}
%
-% \changes{v1.0.0}{2018/04/01}{根据 \CTeX{} 宏集的选项自动确定编码。}
-%
-% \begin{macro}[TF]{\@@_if_ctex_valid_encoding:}
-% 检查 \CTeX{} 编码。
+% \begin{macro}{\@@_check_unicode_engine_encoding:}
+% Unicode 引擎下编码始终设为 UTF-8。
% \begin{macrocode}
-\prg_new_protected_conditional:Npnn \@@_if_ctex_valid_encoding: { F }
+\cs_new_protected:Npn \@@_check_unicode_engine_encoding:
{
- \tl_if_exist:NTF \l__ctex_encoding_tl
+ \@@_if_unicode_engine:T
{
- \tl_set:Nx \l_@@_tmpa_tl
- { \str_lower_case:f { \l__ctex_encoding_tl } }
- \str_if_eq:NNTF \g_@@_encoding_tl \l_@@_tmpa_tl
- { \prg_return_true: } { \prg_return_false: }
+ \str_if_empty:NF \g_@@_encoding_str
+ {
+ \@@_if_encoding:nF { utf8 }
+ { \@@_warning:n { unicode-engine } }
+ }
+ \str_gset:Nn \g_@@_encoding_str { utf8 }
}
- { \prg_return_true: }
+ }
+\@@_msg_new:nn { unicode-engine }
+ {
+ You~are~now~using~Unicode~engine~\c_sys_engine_str\c_space_tl~so~
+ encoding~"\g_@@_encoding_str"~is~invalid. \\
+ Changed~into~"utf8".
}
% \end{macrocode}
% \end{macro}
%
-% 如果调用了 \CTeX{} 宏集,则自动确定编码;否则默认设为 UTF-8。
+% \begin{macro}{\@@_check_ctex_encoding:}
+% 如果调用了 \CTeX{} 宏集,则自动确定编码。
% \begin{macrocode}
-\tl_if_exist:NTF \l__ctex_encoding_tl
+\cs_new_protected:Npn \@@_check_ctex_encoding:
{
- \tl_if_eq:VnTF \l__ctex_encoding_tl { UTF8 }
- { \tl_gset:Nn \g_@@_encoding_tl { utf8 } }
+ \tl_if_exist:NT \l__ctex_encoding_tl
{
- \tl_if_eq:VnT \l__ctex_encoding_tl { GBK }
- { \tl_gset:Nn \g_@@_encoding_tl { gbk } }
+ \str_set:Nx \l_@@_tmpa_str
+ { \str_lower_case:f { \l__ctex_encoding_tl } }
+ \str_if_empty:NF \g_@@_encoding_str
+ {
+ \@@_if_encoding:VF \l_@@_tmpa_str
+ { \@@_warning:n { ctex-encoding-conflict } }
+ }
+ \str_gset_eq:NN \g_@@_encoding_str \l_@@_tmpa_str
}
}
- { \tl_gset:Nn \g_@@_encoding_tl { utf8 } }
+\@@_msg_new:nn { ctex-encoding-conflict }
+ {
+ Package~option~"encoding=\g_@@_encoding_str"~is~in~conflict~with~
+ ctex's~option~"\l__ctex_encoding_tl". \\
+ Changed~into~"encoding=\l_@@_tmpa_str".
+ }
% \end{macrocode}
+% \end{macro}
%
% 将宏包选项传给 |zhlipsum/option|。
% \begin{macrocode}
\ProcessKeysOptions { zhlipsum / option }
% \end{macrocode}
%
+% 检查编码兼容性。
+% \begin{macrocode}
+\@@_check_unicode_engine_encoding:
+\@@_check_ctex_encoding:
+\str_if_empty:NT \g_@@_encoding_str
+ { \str_gset:Nn \g_@@_encoding_str { utf8 } }
+% \end{macrocode}
+%
% \subsection{函数选项}
%
% \begin{variable}{\l_@@_name_tl}
@@ -1063,8 +1054,7 @@ Copyright (C) 2017, 2018 by Xiangdong Zeng <xdzeng96@gmail.com>.
% \end{macrocode}
% \end{macro}
%
-% \changes{v0.5}{2017/12/22}{新增选项 \opt{script},同时支持简体中文
-% 和繁体中文。}
+% \changes{v0.5}{2017/12/22}{新增选项 \opt{script},同时支持简体中文和繁体中文。}
% \changes{v1.0.0}{2018/03/24}{\opt{script} 成为过时选项。}
%
% \begin{macro}{script}
@@ -1112,57 +1102,55 @@ Copyright (C) 2017, 2018 by Xiangdong Zeng <xdzeng96@gmail.com>.
%
% \subsection{输出假文}
%
-% \begin{macro}{\zhlipsum}
+% \begin{macro}{\zhlipsum,\@@:n}
% \changes{v0.5}{2018/01/05}{支持选项设置。}
-% \changes{v1.0.0}{2018/03/23}{更改参数形式,允许利用逗号分隔列表选择
-% 段落。}
+% \changes{v1.0.0}{2018/03/23}{更改参数形式,允许利用逗号分隔列表选择段落。}
% \changes{v1.1.0}{2018/04/08}{改回使用方括号指定段落数的形式。}
-% 输出假文,第一个可选参数表示段落数,默认为 |1-3|;第二个可选参数为选
-% 项列表。
+% \changes{v1.2.0}{2020/04/08}{修正 \env{quote}/\env{quotation} 等环境中段落缩进消失问题。}
+% \changes{v1.2.0}{2020/04/08}{与 \pkg{lipsum} 等宏包保持一致,不在开头插入分段命令。}
+% 输出假文,第一个可选参数表示段落数,默认为 |1-3|;第二个可选参数为选项列表。
% \begin{macrocode}
\NewDocumentCommand \zhlipsum { s o +o }
{
\group_begin:
\IfBooleanF {#1}
{
- \tl_set:Nn \l_@@_before_tl { \@@_par: }
- \tl_set:Nn \l_@@_after_tl { \@@_par: }
- \tl_set:Nn \l_@@_inter_tl { \@@_par: }
+ \tl_set:Nn \l_@@_before_tl { }
+ \tl_set:Nn \l_@@_after_tl { \par }
+ \tl_set:Nn \l_@@_inter_tl { \par }
}
\IfValueTF {#3}
{
\keys_set:nn { zhlipsum } {#3}
- \zhlipsum_use:Vn \l_@@_name_tl {#2}
+ \@@:n {#2}
}
{
\IfValueTF {#2}
{
% \end{macrocode}
-% 如果只带一个参数,那么根据其是否含有 |=| 来判断该参数是段落数还是
-% 选项列表。
+% 如果只带一个参数,那么根据其是否含有 |=| 来判断该参数是段落数还是选项列表。
% \begin{macrocode}
\@@_if_key_value_list:nTF {#2}
{
\keys_set:nn { zhlipsum } {#2}
- \zhlipsum_use:Vn \l_@@_name_tl { 1 - 3 }
+ \@@:n { 1 - 3 }
}
- { \zhlipsum_use:Vn \l_@@_name_tl {#2} }
+ { \@@:n {#2} }
}
- { \zhlipsum_use:Vn \l_@@_name_tl { 1 - 3 } }
+ { \@@:n { 1 - 3 } }
}
\group_end:
}
+\cs_new_protected:Npn \@@:n #1
+ { \exp_args:No \zhlipsum_use:nn { \l_@@_name_tl } {#1} }
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}[TF]{\@@_if_key_value_list:n}
+% \begin{macro}{\@@_if_key_value_list:nTF}
% 判断是否为键值列表,即是否含有 |=|。
% \begin{macrocode}
-\prg_new_protected_conditional:Npnn \@@_if_key_value_list:n #1 { TF }
- {
- \tl_if_in:nnTF {#1} { = }
- { \prg_return_true: } { \prg_return_false: }
- }
+\cs_new_protected:Npn \@@_if_key_value_list:nTF #1
+ { \tl_if_in:nnTF {#1} {=} }
% \end{macrocode}
% \end{macro}
%
@@ -1173,7 +1161,8 @@ Copyright (C) 2017, 2018 by Xiangdong Zeng <xdzeng96@gmail.com>.
% \end{macrocode}
% \end{variable}
%
-% \begin{macro}{\zhlipsum_use:nn,\zhlipsum_use:Vn}
+% \begin{macro}{\zhlipsum_use:nn}
+% \changes{v1.2.0}{2019/08/11}{检查空的段落范围避免陷入死循环。}
% 输出多段假文。|#1| = 假文名称,|#2| = 段落编号列表。解析段落编号之
% 后,按次序逐项输出,并在前后插入相应内容。注意最后一段需要单独处理。
% \begin{macrocode}
@@ -1184,33 +1173,34 @@ Copyright (C) 2017, 2018 by Xiangdong Zeng <xdzeng96@gmail.com>.
\zhlipsum_if_exist:nTF {#1}
{
\@@_parse_par:nn {#1} {#2}
- \seq_pop_right:NN \l_@@_par_num_seq \l_@@_tmpa_tl
- \tl_use:N \l_@@_before_tl
- \seq_map_inline:Nn \l_@@_par_num_seq
+ \seq_if_empty:NF \l_@@_par_num_seq
{
- \@@_use:nn {#1} {##1}
- \tl_use:N \l_@@_inter_tl
+ \seq_pop_right:NN \l_@@_par_num_seq \l_@@_tmpa_tl
+ \l_@@_before_tl
+ \seq_map_inline:Nn \l_@@_par_num_seq
+ {
+ \@@_use:nn {#1} {##1}
+ \l_@@_inter_tl
+ }
+ \@@_use:nn {#1} { \l_@@_tmpa_tl }
+ \l_@@_after_tl
}
- \@@_use:nn {#1} { \tl_use:N \l_@@_tmpa_tl }
- \tl_use:N \l_@@_after_tl
}
{ \@@_error:nn { invalid-name } {#1} }
}
{ \@@_error:n { CJK-invalid-encoding } }
}
-\cs_generate_variant:Nn \zhlipsum_use:nn { Vn }
\@@_msg_new:nn { invalid-name }
{
- Name~ "#1"~ is~ unknown. \\\\
+ Name~ "#1"~ is~ unknown. \\
Please~ use~ the~ pre-defined~ Chinese~ dummy~ texts~ or~
declare~ new~ one.
}
\@@_msg_new:nn { CJK-invalid-encoding }
{
- The~ current~ CJK~ environment~ uses~ "\tl_use:N \CJK@@@@@enc"~
- encoding,\\
+ The~ current~ CJK~ environment~ uses~ "\CJK@@@@@enc"~ encoding,~
but~ zhlipsum~ package~ has~ been~ loaded~ with~ the~ option~
- "encoding=\tl_use:N \g_@@_encoding_tl".\\\\
+ "encoding=\g_@@_encoding_str". \\
Please~ check~ the~ package~ options.
}
% \end{macrocode}
@@ -1223,25 +1213,13 @@ Copyright (C) 2017, 2018 by Xiangdong Zeng <xdzeng96@gmail.com>.
{
\tl_if_exist:NTF \CJK@@@@@enc
{
- \tl_set:Nx \l_@@_tmpa_tl { \str_lower_case:f { \CJK@@@@@enc } }
-% TODO: str or tl?
- \str_if_eq:NNTF \g_@@_encoding_tl \l_@@_tmpa_tl
- { \prg_return_true: }
+ \exp_args:NV \str_case:nn \g_@@_encoding_str
{
- \@@_if_encoding:nTF { gbk }
- {
- \str_if_eq:VnTF \l_@@_tmpa_tl { gb }
- { \prg_return_true: } { \prg_return_false: }
- }
- {
- \@@_if_encoding:nTF { big5 }
- {
- \str_if_eq:VnTF \l_@@_tmpa_tl { bg5 }
- { \prg_return_true: } { \prg_return_false: }
- }
- { \prg_return_false: }
- }
+ { utf8 } { \str_if_eq:VnTF \CJK@@@@@enc { UTF8 } }
+ { gbk } { \str_if_in:NnTF \CJK@@@@@enc { GB } }
+ { big5 } { \str_if_eq:VnTF \CJK@@@@@enc { Bg5 } }
}
+ { \prg_return_true: } { \prg_return_false: }
}
{ \prg_return_true: }
}
@@ -1288,7 +1266,7 @@ Copyright (C) 2017, 2018 by Xiangdong Zeng <xdzeng96@gmail.com>.
\clist_map_inline:nn {#2}
{
\@@_parse_par_aux:n {##1}
- \bool_if:NTF \l@@_invalid_range_bool
+ \bool_if:NTF \l_@@_invalid_range_bool
{ \@@_warning:nnn { invalid-range } {##1} {#2} }
{
\bool_if:NT \l_@@_modified_range_bool
@@ -1449,7 +1427,7 @@ Copyright (C) 2017, 2018 by Xiangdong Zeng <xdzeng96@gmail.com>.
%
% 根据编码读入假文文本定义文件。
% \begin{macrocode}
-\file_input:x { zhlipsum- \g_@@_encoding_tl .def }
+\file_input:x { zhlipsum- \g_@@_encoding_str .def }
%</package>
% \end{macrocode}
%
diff --git a/macros/latex/contrib/zhlipsum/zhlipsum.pdf b/macros/latex/contrib/zhlipsum/zhlipsum.pdf
index 3f31e40b96..c1e34165bf 100644
--- a/macros/latex/contrib/zhlipsum/zhlipsum.pdf
+++ b/macros/latex/contrib/zhlipsum/zhlipsum.pdf
Binary files differ