summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2023-08-10 03:01:21 +0000
committerNorbert Preining <norbert@preining.info>2023-08-10 03:01:21 +0000
commitf2278c4ebe48c174e43845ccfd838fffc3376514 (patch)
treefa8ae4a3eb80e79f3fcad8c0cb8d306ef28a823b
parent9c6ffed1253f7d203afb08f7fffc9c661c48567b (diff)
CTAN sync 202308100301
-rw-r--r--CTAN.sites3
-rw-r--r--FILES.byname219
-rw-r--r--FILES.byname.gzbin2536431 -> 2536517 bytes
-rw-r--r--FILES.last07days189
-rw-r--r--biblio/ctan-bibdata/ctan.bib45
-rw-r--r--biblio/ctan-bibdata/ctan.pdfbin3694170 -> 3692157 bytes
-rw-r--r--graphics/metapost/contrib/macros/wordcloud/README.md57
-rw-r--r--graphics/metapost/contrib/macros/wordcloud/doc/ctan.bib99
-rw-r--r--graphics/metapost/contrib/macros/wordcloud/doc/doc-wc.pdfbin0 -> 6760 bytes
-rw-r--r--graphics/metapost/contrib/macros/wordcloud/doc/fond.pdfbin0 -> 1309 bytes
-rw-r--r--graphics/metapost/contrib/macros/wordcloud/doc/wordcloud-doc-en.pdfbin0 -> 118155 bytes
-rw-r--r--graphics/metapost/contrib/macros/wordcloud/doc/wordcloud-doc-en.tex429
-rw-r--r--graphics/metapost/contrib/macros/wordcloud/doc/wordcloud-preamble.tex214
-rw-r--r--graphics/metapost/contrib/macros/wordcloud/metapost/wordcloud.mp467
-rw-r--r--graphics/metapost/contrib/macros/wordcloud/scripts/wordcloud.lua224
-rw-r--r--graphics/metapost/contrib/macros/wordcloud/tex/wordcloud.sty149
-rw-r--r--macros/latex/contrib/arraycols/README.md4
-rw-r--r--macros/latex/contrib/arraycols/arraycols.dtx293
-rw-r--r--macros/latex/contrib/arraycols/arraycols.ins4
-rw-r--r--macros/latex/contrib/arraycols/arraycols.pdfbin458546 -> 463229 bytes
-rw-r--r--macros/latex/contrib/huawei/huawei.dtx148
-rw-r--r--macros/latex/contrib/huawei/huawei.pdfbin807934 -> 808197 bytes
-rw-r--r--macros/latex/contrib/proflycee/doc/ProfLycee-doc.pdfbin1072458 -> 1071216 bytes
-rw-r--r--macros/latex/contrib/proflycee/doc/ProfLycee-doc.tex8
-rw-r--r--macros/latex/contrib/proflycee/doc/ProfLycee-exemples-pyluatex.pdfbin61493 -> 58292 bytes
-rw-r--r--macros/latex/contrib/proflycee/doc/ProfLycee-exemples-pyluatex.tex4
-rw-r--r--macros/latex/contrib/proflycee/doc/ProfLycee-exemples-pythontex.pdfbin44184 -> 40961 bytes
-rw-r--r--macros/latex/contrib/proflycee/doc/ProfLycee-exemples-pythontex.tex2
-rw-r--r--macros/latex/contrib/proflycee/doc/ProfLycee-old-doc.pdfbin712614 -> 0 bytes
-rw-r--r--macros/latex/contrib/proflycee/doc/ProfLycee-old-doc.tex5268
-rw-r--r--macros/latex/contrib/proflycee/tex/ProfLycee-old.sty3125
-rw-r--r--macros/latex/contrib/proflycee/tex/ProfLycee.sty7
-rw-r--r--macros/latex/contrib/verbatimbox/verbatimbox.pdfbin257027 -> 258446 bytes
-rw-r--r--macros/latex/contrib/verbatimbox/verbatimbox.sty27
-rw-r--r--macros/latex/contrib/verbatimbox/verbatimbox.tex23
-rw-r--r--macros/latex/contrib/writeongrid/doc/WriteOnGrid-doc-en.pdfbin463835 -> 492397 bytes
-rw-r--r--macros/latex/contrib/writeongrid/doc/WriteOnGrid-doc-en.tex53
-rw-r--r--macros/latex/contrib/writeongrid/doc/WriteOnGrid-doc-fr.pdfbin578577 -> 606805 bytes
-rw-r--r--macros/latex/contrib/writeongrid/doc/WriteOnGrid-doc-fr.tex72
-rw-r--r--macros/latex/contrib/writeongrid/tex/WriteOnGrid.sty29
-rw-r--r--macros/luatex/latex/lualinalg/README.txt2
-rw-r--r--macros/luatex/latex/lualinalg/lualinalg.pdfbin271095 -> 270847 bytes
-rw-r--r--macros/luatex/latex/lualinalg/lualinalg.sty1884
-rw-r--r--macros/luatex/latex/lualinalg/lualinalg.tex12
-rw-r--r--systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl4
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb149
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb.md52
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha5122
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc16
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb.xzbin2462004 -> 2460564 bytes
-rw-r--r--timestamp2
-rw-r--r--usergrps/gutenberg/FAQ_leaflet.pdfbin166341 -> 0 bytes
-rw-r--r--usergrps/gutenberg/README9
-rw-r--r--usergrps/gutenberg/VERSION2
-rw-r--r--usergrps/gutenberg/plaquette_gutenberg.pdfbin1751387 -> 662117 bytes
-rw-r--r--usergrps/gutenberg/plaquette_latex.pdfbin238816 -> 668315 bytes
56 files changed, 3318 insertions, 9928 deletions
diff --git a/CTAN.sites b/CTAN.sites
index f2e7d7069d..097b63355c 100644
--- a/CTAN.sites
+++ b/CTAN.sites
@@ -417,6 +417,9 @@ by country):
ctan.fisiquimicamente.com (Spain)
URL: https://ctan.fisiquimicamente.com/
+ ctan.javinator9889.com (Spain)
+ URL: https://ctan.javinator9889.com/
+
osl.ugr.es (Spain)
URL: https://osl.ugr.es/CTAN/
diff --git a/FILES.byname b/FILES.byname
index 5417dad059..c0635813fa 100644
--- a/FILES.byname
+++ b/FILES.byname
@@ -2056,12 +2056,12 @@
2023/07/04 | 1675 | biblio/citation-style-language/README.md
2023/07/04 | 12878 | biblio/citation-style-language/vancouver.csl
2023/07/04 | 4522435 | biblio/citation-style-language.zip
-2023/08/08 | 1678 | biblio/ctan-bibdata/biblatex-ctan/ctan.bbx
+2023/08/09 | 1678 | biblio/ctan-bibdata/biblatex-ctan/ctan.bbx
2022/10/08 | 127 | biblio/ctan-bibdata/biblatex-ctan/ctan.cbx
-2023/08/08 | 2799909 | biblio/ctan-bibdata/ctan.bib
-2023/08/08 | 3693434 | biblio/ctan-bibdata/ctan.pdf
+2023/08/09 | 2799911 | biblio/ctan-bibdata/ctan.bib
+2023/08/09 | 3694170 | biblio/ctan-bibdata/ctan.pdf
2023/01/16 | 1489 | biblio/ctan-bibdata/README
-2023/08/08 | 4093629 | biblio/ctan-bibdata.zip
+2023/08/09 | 4094567 | biblio/ctan-bibdata.zip
2023/02/23 | 3126 | biblio/pbibtex/pbibtex-base/cpp.awk
2023/02/23 | 1009 | biblio/pbibtex/pbibtex-base/generate.sh
2023/02/23 | 22362 | biblio/pbibtex/pbibtex-base/jabbrv.bst
@@ -5421,7 +5421,7 @@
1990/10/02 | 5440 | dviware/vutex/vaxvms.hlp
1990/10/02 | 812 | dviware/vutex/vaxvms.ins
1990/10/02 | 127576 | dviware/vutex/vutex.web
-2023/08/08 | 96191 | FILES.last07days
+2023/08/09 | 98866 | FILES.last07days
2021/07/24 | 1139410 | fonts/aboensis/Aboensis.glyphs
2021/07/24 | 18907382 | fonts/aboensis/aboensis.pdf
2021/07/24 | 137860 | fonts/aboensis/Aboensis-Regular.otf
@@ -158148,6 +158148,17 @@
2005/12/14 | 143192 | graphics/metapost/contrib/macros/txp.zip
2008/04/15 | 640 | graphics/metapost/contrib/macros/venn/README
2001/12/06 | 7658 | graphics/metapost/contrib/macros/venn/venn.mp
+2023/08/09 | 4027 | graphics/metapost/contrib/macros/wordcloud/doc/ctan.bib
+2023/08/09 | 6760 | graphics/metapost/contrib/macros/wordcloud/doc/doc-wc.pdf
+2023/08/09 | 1309 | graphics/metapost/contrib/macros/wordcloud/doc/fond.pdf
+2023/08/09 | 118155 | graphics/metapost/contrib/macros/wordcloud/doc/wordcloud-doc-en.pdf
+2023/08/09 | 13948 | graphics/metapost/contrib/macros/wordcloud/doc/wordcloud-doc-en.tex
+2023/08/09 | 6503 | graphics/metapost/contrib/macros/wordcloud/doc/wordcloud-preamble.tex
+2023/08/09 | 13929 | graphics/metapost/contrib/macros/wordcloud/metapost/wordcloud.mp
+2023/08/09 | 1643 | graphics/metapost/contrib/macros/wordcloud/README.md
+2023/08/09 | 6900 | graphics/metapost/contrib/macros/wordcloud/scripts/wordcloud.lua
+2023/08/09 | 5311 | graphics/metapost/contrib/macros/wordcloud/tex/wordcloud.sty
+2023/08/09 | 137885 | graphics/metapost/contrib/macros/wordcloud.zip
1996/01/29 | 6351 | graphics/metapost/contrib/misc/mp2.mft
1996/01/29 | 1531 | graphics/metapost/contrib/misc/mp2mft.sed
1995/08/10 | 3281 | graphics/metapost/contrib/misc/mp.mft
@@ -211783,11 +211794,11 @@
2004/05/09 | 2763 | macros/latex/contrib/arcs/arcstest.tex
2004/05/09 | 455 | macros/latex/contrib/arcs/README
2005/04/28 | 55630 | macros/latex/contrib/arcs.zip
-2020/11/23 | 16694 | macros/latex/contrib/arraycols/arraycols.dtx
-2020/11/23 | 1993 | macros/latex/contrib/arraycols/arraycols.ins
-2020/11/23 | 458546 | macros/latex/contrib/arraycols/arraycols.pdf
-2019/06/27 | 900 | macros/latex/contrib/arraycols/README.md
-2020/11/23 | 463731 | macros/latex/contrib/arraycols.zip
+2023/08/09 | 18177 | macros/latex/contrib/arraycols/arraycols.dtx
+2023/08/09 | 1993 | macros/latex/contrib/arraycols/arraycols.ins
+2023/08/09 | 463229 | macros/latex/contrib/arraycols/arraycols.pdf
+2023/08/09 | 926 | macros/latex/contrib/arraycols/README.md
+2023/08/09 | 469022 | macros/latex/contrib/arraycols.zip
2013/09/04 | 35591 | macros/latex/contrib/arraysort/arraysort.dtx
2013/08/21 | 1785 | macros/latex/contrib/arraysort/arraysort.ins
2013/09/04 | 302651 | macros/latex/contrib/arraysort/arraysort.pdf
@@ -224781,14 +224792,14 @@
2022/10/31 | 1083 | macros/latex/contrib/href-ul/LICENSE.txt
2022/10/31 | 1286 | macros/latex/contrib/href-ul/README.md
2022/10/31 | 272816 | macros/latex/contrib/href-ul.zip
-2023/08/03 | 660 | macros/latex/contrib/huawei/DEPENDS.txt
-2023/08/03 | 253724 | macros/latex/contrib/huawei/huawei-cover-picture.pdf
-2023/08/03 | 32942 | macros/latex/contrib/huawei/huawei.dtx
-2023/08/03 | 2626 | macros/latex/contrib/huawei/huawei.ins
-2023/08/03 | 807934 | macros/latex/contrib/huawei/huawei.pdf
-2023/08/03 | 1083 | macros/latex/contrib/huawei/LICENSE.txt
-2023/08/03 | 1513 | macros/latex/contrib/huawei/README.md
-2023/08/03 | 1050507 | macros/latex/contrib/huawei.zip
+2023/08/09 | 660 | macros/latex/contrib/huawei/DEPENDS.txt
+2023/08/09 | 253724 | macros/latex/contrib/huawei/huawei-cover-picture.pdf
+2023/08/09 | 33409 | macros/latex/contrib/huawei/huawei.dtx
+2023/08/09 | 2626 | macros/latex/contrib/huawei/huawei.ins
+2023/08/09 | 808197 | macros/latex/contrib/huawei/huawei.pdf
+2023/08/09 | 1083 | macros/latex/contrib/huawei/LICENSE.txt
+2023/08/09 | 1513 | macros/latex/contrib/huawei/README.md
+2023/08/09 | 1050847 | macros/latex/contrib/huawei.zip
2022/10/16 | 327838 | macros/latex/contrib/huaz/huaz.pdf
2022/10/16 | 20294 | macros/latex/contrib/huaz/huaz.sty
2022/10/16 | 21740 | macros/latex/contrib/huaz/huaz.tex
@@ -233537,18 +233548,15 @@
2023/01/02 | 9215 | macros/latex/contrib/proflycee/doc/graphics/pl-solve_b.png
2023/01/02 | 10175 | macros/latex/contrib/proflycee/doc/graphics/pl-solve_c.png
2023/01/02 | 10145 | macros/latex/contrib/proflycee/doc/graphics/pl-solve_d.png
-2023/06/14 | 1072458 | macros/latex/contrib/proflycee/doc/ProfLycee-doc.pdf
-2023/06/14 | 295127 | macros/latex/contrib/proflycee/doc/ProfLycee-doc.tex
-2023/06/08 | 61493 | macros/latex/contrib/proflycee/doc/ProfLycee-exemples-pyluatex.pdf
-2023/06/05 | 6656 | macros/latex/contrib/proflycee/doc/ProfLycee-exemples-pyluatex.tex
-2023/04/15 | 44184 | macros/latex/contrib/proflycee/doc/ProfLycee-exemples-pythontex.pdf
-2023/04/15 | 5409 | macros/latex/contrib/proflycee/doc/ProfLycee-exemples-pythontex.tex
-2022/11/06 | 712614 | macros/latex/contrib/proflycee/doc/ProfLycee-old-doc.pdf
-2022/11/06 | 192682 | macros/latex/contrib/proflycee/doc/ProfLycee-old-doc.tex
-2023/06/14 | 529 | macros/latex/contrib/proflycee/doc/testscript.py
+2023/08/08 | 1071216 | macros/latex/contrib/proflycee/doc/ProfLycee-doc.pdf
+2023/08/08 | 295284 | macros/latex/contrib/proflycee/doc/ProfLycee-doc.tex
+2023/08/08 | 58292 | macros/latex/contrib/proflycee/doc/ProfLycee-exemples-pyluatex.pdf
+2023/08/08 | 6665 | macros/latex/contrib/proflycee/doc/ProfLycee-exemples-pyluatex.tex
+2023/08/08 | 40961 | macros/latex/contrib/proflycee/doc/ProfLycee-exemples-pythontex.pdf
+2023/08/08 | 5409 | macros/latex/contrib/proflycee/doc/ProfLycee-exemples-pythontex.tex
+2023/08/08 | 529 | macros/latex/contrib/proflycee/doc/testscript.py
2022/08/10 | 439 | macros/latex/contrib/proflycee/README.md
-2022/11/06 | 112967 | macros/latex/contrib/proflycee/tex/ProfLycee-old.sty
-2023/06/14 | 6829 | macros/latex/contrib/proflycee/tex/ProfLycee.sty
+2023/08/08 | 6974 | macros/latex/contrib/proflycee/tex/ProfLycee.sty
2023/05/18 | 4196 | macros/latex/contrib/proflycee/tex/proflycee-tools-aleatoire.tex
2023/05/14 | 22505 | macros/latex/contrib/proflycee/tex/proflycee-tools-analyse.tex
2023/05/20 | 17988 | macros/latex/contrib/proflycee/tex/proflycee-tools-arithm.tex
@@ -233563,7 +233571,7 @@
2023/06/03 | 17918 | macros/latex/contrib/proflycee/tex/proflycee-tools-stats.tex
2023/04/13 | 6608 | macros/latex/contrib/proflycee/tex/proflycee-tools-suites.tex
2023/05/03 | 42723 | macros/latex/contrib/proflycee/tex/proflycee-tools-trigo.tex
-2023/06/15 | 2158314 | macros/latex/contrib/proflycee.zip
+2023/08/09 | 1402708 | macros/latex/contrib/proflycee.zip
2023/08/06 | 177454 | macros/latex/contrib/profmaquette/doc/profmaquette-doc.pdf
2023/08/06 | 39803 | macros/latex/contrib/profmaquette/doc/profmaquette-doc.tex
2023/06/23 | 17412 | macros/latex/contrib/profmaquette/doc/TestParcoursPerso.pdf
@@ -241666,11 +241674,11 @@
2011/04/02 | 6796 | macros/latex/contrib/verbasef/verbasef-doc.tex
1995/01/30 | 12825 | macros/latex/contrib/verbasef/verbasef.sty
2011/04/02 | 339799 | macros/latex/contrib/verbasef.zip
-2013/04/24 | 1173 | macros/latex/contrib/verbatimbox/README
-2014/03/12 | 257027 | macros/latex/contrib/verbatimbox/verbatimbox.pdf
-2014/03/12 | 8928 | macros/latex/contrib/verbatimbox/verbatimbox.sty
-2014/03/12 | 20472 | macros/latex/contrib/verbatimbox/verbatimbox.tex
-2014/03/12 | 250342 | macros/latex/contrib/verbatimbox.zip
+2023/08/08 | 1173 | macros/latex/contrib/verbatimbox/README
+2023/08/08 | 258446 | macros/latex/contrib/verbatimbox/verbatimbox.pdf
+2023/08/08 | 9199 | macros/latex/contrib/verbatimbox/verbatimbox.sty
+2023/08/08 | 20611 | macros/latex/contrib/verbatimbox/verbatimbox.tex
+2023/08/09 | 246836 | macros/latex/contrib/verbatimbox.zip
2008/11/17 | 797 | macros/latex/contrib/verbatimcopy/README
2008/11/17 | 168477 | macros/latex/contrib/verbatimcopy/verbatimcopy.pdf
2008/11/17 | 6122 | macros/latex/contrib/verbatimcopy/verbatimcopy.sty
@@ -242146,13 +242154,13 @@
2022/08/05 | 96536 | macros/latex/contrib/wrapstuff/wrapstuff.dtx
2022/08/05 | 451989 | macros/latex/contrib/wrapstuff/wrapstuff.pdf
2022/08/05 | 454990 | macros/latex/contrib/wrapstuff.zip
-2023/03/18 | 463835 | macros/latex/contrib/writeongrid/doc/WriteOnGrid-doc-en.pdf
-2023/03/18 | 16725 | macros/latex/contrib/writeongrid/doc/WriteOnGrid-doc-en.tex
-2023/03/18 | 578577 | macros/latex/contrib/writeongrid/doc/WriteOnGrid-doc-fr.pdf
-2023/03/18 | 30553 | macros/latex/contrib/writeongrid/doc/WriteOnGrid-doc-fr.tex
+2023/08/09 | 492397 | macros/latex/contrib/writeongrid/doc/WriteOnGrid-doc-en.pdf
+2023/08/09 | 17451 | macros/latex/contrib/writeongrid/doc/WriteOnGrid-doc-en.tex
+2023/08/09 | 606805 | macros/latex/contrib/writeongrid/doc/WriteOnGrid-doc-fr.pdf
+2023/08/09 | 31338 | macros/latex/contrib/writeongrid/doc/WriteOnGrid-doc-fr.tex
2023/01/17 | 457 | macros/latex/contrib/writeongrid/README.md
-2023/03/18 | 23376 | macros/latex/contrib/writeongrid/tex/WriteOnGrid.sty
-2023/03/18 | 1027212 | macros/latex/contrib/writeongrid.zip
+2023/08/09 | 23685 | macros/latex/contrib/writeongrid/tex/WriteOnGrid.sty
+2023/08/09 | 1082208 | macros/latex/contrib/writeongrid.zip
2013/08/27 | 1511 | macros/latex/contrib/wsemclassic/LICENSE
2013/08/27 | 2275 | macros/latex/contrib/wsemclassic/Makefile
2013/08/27 | 2394 | macros/latex/contrib/wsemclassic/README
@@ -244887,11 +244895,11 @@
2018/08/22 | 952 | macros/luatex/latex/lualatex-truncate/lualatex-truncate.ins
2018/08/22 | 1276 | macros/luatex/latex/lualatex-truncate/README.md
2018/08/22 | 68726 | macros/luatex/latex/lualatex-truncate.zip
-2023/08/07 | 271095 | macros/luatex/latex/lualinalg/lualinalg.pdf
-2023/08/07 | 41091 | macros/luatex/latex/lualinalg/lualinalg.sty
-2023/08/07 | 44722 | macros/luatex/latex/lualinalg/lualinalg.tex
-2023/08/07 | 2090 | macros/luatex/latex/lualinalg/README.txt
-2023/08/07 | 214542 | macros/luatex/latex/lualinalg.zip
+2023/08/09 | 270847 | macros/luatex/latex/lualinalg/lualinalg.pdf
+2023/08/09 | 37105 | macros/luatex/latex/lualinalg/lualinalg.sty
+2023/08/09 | 44707 | macros/luatex/latex/lualinalg/lualinalg.tex
+2023/08/08 | 2090 | macros/luatex/latex/lualinalg/README.txt
+2023/08/09 | 214205 | macros/luatex/latex/lualinalg.zip
2022/05/04 | 699 | macros/luatex/latex/luamathalign/build.lua
2022/05/04 | 22720 | macros/luatex/latex/luamathalign/luamathalign.dtx
2022/05/04 | 683 | macros/luatex/latex/luamathalign/luamathalign-luacmd.lua
@@ -289631,12 +289639,12 @@
2022/05/31 | 1186444 | systems/texlive/tlnet/archive/aomart.doc.r63442.tar.xz
2022/05/31 | 13736 | systems/texlive/tlnet/archive/aomart.r63442.tar.xz
2022/05/31 | 22360 | systems/texlive/tlnet/archive/aomart.source.r63442.tar.xz
-2020/01/15 | 565092 | systems/texlive/tlnet/archive/apa6.doc.r53406.tar.xz
+2023/08/09 | 556524 | systems/texlive/tlnet/archive/apa6.doc.r67848.tar.xz
2019/02/28 | 245600 | systems/texlive/tlnet/archive/apa6e.doc.r23350.tar.xz
2019/02/28 | 2896 | systems/texlive/tlnet/archive/apa6e.r23350.tar.xz
2019/02/28 | 8492 | systems/texlive/tlnet/archive/apa6e.source.r23350.tar.xz
-2020/01/15 | 13760 | systems/texlive/tlnet/archive/apa6.r53406.tar.xz
-2020/01/15 | 37360 | systems/texlive/tlnet/archive/apa6.source.r53406.tar.xz
+2023/08/09 | 13788 | systems/texlive/tlnet/archive/apa6.r67848.tar.xz
+2023/08/09 | 37432 | systems/texlive/tlnet/archive/apa6.source.r67848.tar.xz
2022/07/26 | 745272 | systems/texlive/tlnet/archive/apa7.doc.r63974.tar.xz
2022/07/26 | 14252 | systems/texlive/tlnet/archive/apa7.r63974.tar.xz
2022/07/26 | 32888 | systems/texlive/tlnet/archive/apa7.source.r63974.tar.xz
@@ -292117,7 +292125,7 @@
2023/02/18 | 177276 | systems/texlive/tlnet/archive/cweb.amd64-freebsd.r65877.tar.xz
2023/02/20 | 147836 | systems/texlive/tlnet/archive/cweb.amd64-netbsd.r65923.tar.xz
2023/02/18 | 118596 | systems/texlive/tlnet/archive/cweb.armhf-linux.r65877.tar.xz
-2023/07/22 | 73548 | systems/texlive/tlnet/archive/cweb.doc.r67693.tar.xz
+2023/08/09 | 73548 | systems/texlive/tlnet/archive/cweb.doc.r67845.tar.xz
2023/02/18 | 140668 | systems/texlive/tlnet/archive/cweb.i386-freebsd.r65877.tar.xz
2023/02/18 | 144220 | systems/texlive/tlnet/archive/cweb.i386-linux.r65877.tar.xz
2023/02/20 | 117724 | systems/texlive/tlnet/archive/cweb.i386-netbsd.r65923.tar.xz
@@ -292125,7 +292133,7 @@
2019/02/28 | 240884 | systems/texlive/tlnet/archive/cweb-latex.doc.r28878.tar.xz
2019/02/28 | 36236 | systems/texlive/tlnet/archive/cweb-latex.r28878.tar.xz
2019/02/28 | 9720 | systems/texlive/tlnet/archive/cweb-old.r49271.tar.xz
-2023/07/22 | 24520 | systems/texlive/tlnet/archive/cweb.r67693.tar.xz
+2023/08/09 | 24544 | systems/texlive/tlnet/archive/cweb.r67845.tar.xz
2023/02/20 | 332852 | systems/texlive/tlnet/archive/cweb.universal-darwin.r65895.tar.xz
2023/02/20 | 110408 | systems/texlive/tlnet/archive/cweb.windows.r65891.tar.xz
2023/03/11 | 111940 | systems/texlive/tlnet/archive/cweb.x86_64-cygwin.r66544.tar.xz
@@ -295211,8 +295219,8 @@
2023/06/26 | 255780 | systems/texlive/tlnet/archive/japanese-otf.r67475.tar.xz
2023/06/26 | 68800 | systems/texlive/tlnet/archive/japanese-otf.source.r67475.tar.xz
2019/11/12 | 9792 | systems/texlive/tlnet/archive/jbact.r52717.tar.xz
-2023/06/09 | 7935884 | systems/texlive/tlnet/archive/jeuxcartes.doc.r67304.tar.xz
-2023/06/09 | 6715932 | systems/texlive/tlnet/archive/jeuxcartes.r67304.tar.xz
+2023/08/09 | 7935092 | systems/texlive/tlnet/archive/jeuxcartes.doc.r67849.tar.xz
+2023/08/09 | 6716028 | systems/texlive/tlnet/archive/jeuxcartes.r67849.tar.xz
2019/02/28 | 340 | systems/texlive/tlnet/archive/jfmutil.aarch64-linux.r46228.tar.xz
2019/02/28 | 340 | systems/texlive/tlnet/archive/jfmutil.amd64-freebsd.r44835.tar.xz
2019/02/28 | 340 | systems/texlive/tlnet/archive/jfmutil.amd64-netbsd.r44835.tar.xz
@@ -296369,8 +296377,8 @@
2021/02/22 | 328240 | systems/texlive/tlnet/archive/luacolor.doc.r57829.tar.xz
2021/02/22 | 4152 | systems/texlive/tlnet/archive/luacolor.r57829.tar.xz
2021/02/22 | 9244 | systems/texlive/tlnet/archive/luacolor.source.r57829.tar.xz
-2023/02/15 | 115644 | systems/texlive/tlnet/archive/luacomplex.doc.r65833.tar.xz
-2023/02/15 | 1660 | systems/texlive/tlnet/archive/luacomplex.r65833.tar.xz
+2023/08/09 | 88272 | systems/texlive/tlnet/archive/luacomplex.doc.r67852.tar.xz
+2023/08/09 | 1688 | systems/texlive/tlnet/archive/luacomplex.r67852.tar.xz
2021/12/03 | 340 | systems/texlive/tlnet/archive/luafindfont.aarch64-linux.r61207.tar.xz
2021/12/03 | 344 | systems/texlive/tlnet/archive/luafindfont.amd64-freebsd.r61207.tar.xz
2021/12/03 | 340 | systems/texlive/tlnet/archive/luafindfont.amd64-netbsd.r61207.tar.xz
@@ -296894,9 +296902,9 @@
2019/02/28 | 1836 | systems/texlive/tlnet/archive/memexsupp.r15878.tar.xz
2021/07/01 | 755384 | systems/texlive/tlnet/archive/memoirchapterstyles.doc.r59766.tar.xz
2021/07/01 | 572 | systems/texlive/tlnet/archive/memoirchapterstyles.r59766.tar.xz
-2022/11/18 | 3136720 | systems/texlive/tlnet/archive/memoir.doc.r65040.tar.xz
-2022/11/18 | 75292 | systems/texlive/tlnet/archive/memoir.r65040.tar.xz
-2022/11/18 | 242732 | systems/texlive/tlnet/archive/memoir.source.r65040.tar.xz
+2023/08/09 | 3145420 | systems/texlive/tlnet/archive/memoir.doc.r67850.tar.xz
+2023/08/09 | 70124 | systems/texlive/tlnet/archive/memoir.r67850.tar.xz
+2023/08/09 | 212556 | systems/texlive/tlnet/archive/memoir.source.r67850.tar.xz
2019/02/28 | 29908 | systems/texlive/tlnet/archive/memory.doc.r30452.tar.xz
2019/02/28 | 191084 | systems/texlive/tlnet/archive/memorygraphs.doc.r49631.tar.xz
2019/02/28 | 2048 | systems/texlive/tlnet/archive/memorygraphs.r49631.tar.xz
@@ -297550,9 +297558,9 @@
2019/02/28 | 438652 | systems/texlive/tlnet/archive/nag.doc.r24741.tar.xz
2019/02/28 | 7800 | systems/texlive/tlnet/archive/nag.r24741.tar.xz
2019/02/28 | 17648 | systems/texlive/tlnet/archive/nag.source.r24741.tar.xz
-2023/07/15 | 663312 | systems/texlive/tlnet/archive/naive-ebnf.doc.r67631.tar.xz
-2023/07/15 | 2388 | systems/texlive/tlnet/archive/naive-ebnf.r67631.tar.xz
-2023/07/15 | 5676 | systems/texlive/tlnet/archive/naive-ebnf.source.r67631.tar.xz
+2023/08/09 | 672020 | systems/texlive/tlnet/archive/naive-ebnf.doc.r67851.tar.xz
+2023/08/09 | 2428 | systems/texlive/tlnet/archive/naive-ebnf.r67851.tar.xz
+2023/08/09 | 5760 | systems/texlive/tlnet/archive/naive-ebnf.source.r67851.tar.xz
2023/02/06 | 1431708 | systems/texlive/tlnet/archive/nameauth.doc.r65738.tar.xz
2023/02/06 | 7044 | systems/texlive/tlnet/archive/nameauth.r65738.tar.xz
2023/02/06 | 116900 | systems/texlive/tlnet/archive/nameauth.source.r65738.tar.xz
@@ -301008,7 +301016,7 @@
2021/03/23 | 276 | systems/texlive/tlnet/archive/texlive-it.r58653.tar.xz
2023/03/09 | 1945084 | systems/texlive/tlnet/archive/texlive-ja.doc.r66482.tar.xz
2023/03/09 | 276 | systems/texlive/tlnet/archive/texlive-ja.r66482.tar.xz
-2023/04/21 | 151740 | systems/texlive/tlnet/archive/texlive-msg-translations.r66901.tar.xz
+2023/08/09 | 151800 | systems/texlive/tlnet/archive/texlive-msg-translations.r67843.tar.xz
2019/02/28 | 344 | systems/texlive/tlnet/archive/texliveonfly.aarch64-linux.r46208.tar.xz
2019/02/28 | 344 | systems/texlive/tlnet/archive/texliveonfly.amd64-freebsd.r24062.tar.xz
2019/02/28 | 344 | systems/texlive/tlnet/archive/texliveonfly.amd64-netbsd.r30191.tar.xz
@@ -301034,7 +301042,7 @@
2022/09/13 | 600 | systems/texlive/tlnet/archive/texlive-scripts.amd64-freebsd.r64356.tar.xz
2022/09/13 | 596 | systems/texlive/tlnet/archive/texlive-scripts.amd64-netbsd.r64356.tar.xz
2022/09/13 | 596 | systems/texlive/tlnet/archive/texlive-scripts.armhf-linux.r64356.tar.xz
-2023/08/08 | 428396 | systems/texlive/tlnet/archive/texlive-scripts.doc.r67839.tar.xz
+2023/08/09 | 428316 | systems/texlive/tlnet/archive/texlive-scripts.doc.r67842.tar.xz
2020/01/27 | 916 | systems/texlive/tlnet/archive/texlive-scripts-extra.aarch64-linux.r53577.tar.xz
2020/01/27 | 924 | systems/texlive/tlnet/archive/texlive-scripts-extra.amd64-freebsd.r53577.tar.xz
2020/01/27 | 916 | systems/texlive/tlnet/archive/texlive-scripts-extra.amd64-netbsd.r53577.tar.xz
@@ -301056,7 +301064,7 @@
2022/09/13 | 592 | systems/texlive/tlnet/archive/texlive-scripts.i386-linux.r64356.tar.xz
2022/09/13 | 596 | systems/texlive/tlnet/archive/texlive-scripts.i386-netbsd.r64356.tar.xz
2022/09/13 | 596 | systems/texlive/tlnet/archive/texlive-scripts.i386-solaris.r64356.tar.xz
-2023/08/08 | 114084 | systems/texlive/tlnet/archive/texlive-scripts.r67839.tar.xz
+2023/08/09 | 114120 | systems/texlive/tlnet/archive/texlive-scripts.r67842.tar.xz
2022/09/13 | 580 | systems/texlive/tlnet/archive/texlive-scripts.universal-darwin.r64356.tar.xz
2023/05/14 | 60312 | systems/texlive/tlnet/archive/texlive-scripts.windows.r67095.tar.xz
2022/09/13 | 596 | systems/texlive/tlnet/archive/texlive-scripts.x86_64-cygwin.r64356.tar.xz
@@ -301409,8 +301417,8 @@
2019/08/21 | 6912 | systems/texlive/tlnet/archive/tikz-feynhand.r51915.tar.xz
2020/10/10 | 322304 | systems/texlive/tlnet/archive/tikz-feynman.doc.r56615.tar.xz
2020/10/10 | 15440 | systems/texlive/tlnet/archive/tikz-feynman.r56615.tar.xz
-2022/07/21 | 622916 | systems/texlive/tlnet/archive/tikzfill.doc.r63947.tar.xz
-2022/07/21 | 4432 | systems/texlive/tlnet/archive/tikzfill.r63947.tar.xz
+2023/08/09 | 626980 | systems/texlive/tlnet/archive/tikzfill.doc.r67847.tar.xz
+2023/08/09 | 4652 | systems/texlive/tlnet/archive/tikzfill.r67847.tar.xz
2019/06/28 | 972112 | systems/texlive/tlnet/archive/tikz-imagelabels.doc.r51490.tar.xz
2019/06/28 | 2124 | systems/texlive/tlnet/archive/tikz-imagelabels.r51490.tar.xz
2019/06/28 | 8216 | systems/texlive/tlnet/archive/tikz-imagelabels.source.r51490.tar.xz
@@ -302925,16 +302933,16 @@
2020/07/18 | 47816 | systems/texlive/tlnet/archive/zztex.doc.r55862.tar.xz
2020/07/18 | 101724 | systems/texlive/tlnet/archive/zztex.r55862.tar.xz
2023/08/07 | 125713 | systems/texlive/tlnet/install-tl
-2023/08/08 | 5737206 | systems/texlive/tlnet/install-tl-unx.tar.gz
-2023/08/08 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
-2023/08/08 | 488 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
+2023/08/09 | 5736247 | systems/texlive/tlnet/install-tl-unx.tar.gz
+2023/08/09 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
+2023/08/09 | 488 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
2023/05/13 | 5083 | systems/texlive/tlnet/install-tl-windows.bat
-2023/08/08 | 21038231 | systems/texlive/tlnet/install-tl-windows.exe
-2023/08/08 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
-2023/08/08 | 488 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
-2023/08/08 | 26025538 | systems/texlive/tlnet/install-tl.zip
-2023/08/08 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
-2023/08/08 | 488 | systems/texlive/tlnet/install-tl.zip.sha512.asc
+2023/08/09 | 21037440 | systems/texlive/tlnet/install-tl-windows.exe
+2023/08/09 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
+2023/08/09 | 488 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
+2023/08/09 | 26025589 | systems/texlive/tlnet/install-tl.zip
+2023/08/09 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
+2023/08/09 | 488 | systems/texlive/tlnet/install-tl.zip.sha512.asc
2023/03/19 | 1229 | systems/texlive/tlnet/README.md
2023/03/19 | 0 | systems/texlive/tlnet/TEXLIVE_2023
2023/01/17 | 8401 | systems/texlive/tlnet/tlpkg/gpg/pubring.gpg
@@ -302944,7 +302952,7 @@
2023/01/17 | 1280 | systems/texlive/tlnet/tlpkg/gpg/trustdb.gpg
2023/08/03 | 50576 | systems/texlive/tlnet/tlpkg/installer/config.guess
2010/11/11 | 11651 | systems/texlive/tlnet/tlpkg/installer/COPYING.MinGW-runtime.txt
-2023/08/07 | 7338 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
+2023/08/08 | 7384 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
2023/05/31 | 215902 | systems/texlive/tlnet/tlpkg/installer/curl/curl-ca-bundle.crt
2020/04/15 | 2606592 | systems/texlive/tlnet/tlpkg/installer/curl/curl.exe
2017/04/16 | 2629 | systems/texlive/tlnet/tlpkg/installer/installer-options.txt
@@ -302986,12 +302994,12 @@
2023/02/21 | 20371 | systems/texlive/tlnet/tlpkg/TeXLive/TLCrypto.pm
2021/12/21 | 5429 | systems/texlive/tlnet/tlpkg/TeXLive/TLDownload.pm
2023/04/08 | 28167 | systems/texlive/tlnet/tlpkg/TeXLive/TLPaper.pm
-2023/08/08 | 18175798 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
-2023/08/08 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+2023/08/09 | 18175818 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
+2023/08/09 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
2023/02/20 | 86803 | systems/texlive/tlnet/tlpkg/TeXLive/TLPDB.pm
-2023/08/08 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
-2023/08/08 | 488 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
-2023/08/08 | 2461952 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+2023/08/09 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+2023/08/09 | 488 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
+2023/08/09 | 2462004 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
2023/02/20 | 58928 | systems/texlive/tlnet/tlpkg/TeXLive/TLPOBJ.pm
2023/06/11 | 42749 | systems/texlive/tlnet/tlpkg/TeXLive/TLPSRC.pm
2023/02/21 | 16138 | systems/texlive/tlnet/tlpkg/TeXLive/TLTREE.pm
@@ -305691,27 +305699,27 @@
2023/02/20 | 3511 | systems/texlive/tlnet/tlpkg/tltcl/lib/tkConfig.sh
2018/11/30 | 1310 | systems/texlive/tlnet/tlpkg/tltcl/tlmgr.gif
2023/04/05 | 25692 | systems/texlive/tlnet/tlpkg/tltcl/tltcl.tcl
-2023/04/06 | 82459 | systems/texlive/tlnet/tlpkg/translations/cs.po
-2023/04/06 | 57728 | systems/texlive/tlnet/tlpkg/translations/da.po
-2023/04/06 | 89983 | systems/texlive/tlnet/tlpkg/translations/de.po
-2023/04/20 | 81294 | systems/texlive/tlnet/tlpkg/translations/es.po
-2023/04/06 | 94433 | systems/texlive/tlnet/tlpkg/translations/fr.po
-2023/04/06 | 87939 | systems/texlive/tlnet/tlpkg/translations/it.po
-2023/04/06 | 62854 | systems/texlive/tlnet/tlpkg/translations/ja.po
-2023/04/06 | 47295 | systems/texlive/tlnet/tlpkg/translations/messages.pot
-2023/04/06 | 58302 | systems/texlive/tlnet/tlpkg/translations/nl.po
-2023/04/06 | 67354 | systems/texlive/tlnet/tlpkg/translations/pl.po
-2023/04/06 | 82791 | systems/texlive/tlnet/tlpkg/translations/pt_BR.po
+2023/08/08 | 82459 | systems/texlive/tlnet/tlpkg/translations/cs.po
+2023/08/08 | 57728 | systems/texlive/tlnet/tlpkg/translations/da.po
+2023/08/08 | 89983 | systems/texlive/tlnet/tlpkg/translations/de.po
+2023/08/08 | 81631 | systems/texlive/tlnet/tlpkg/translations/es.po
+2023/08/08 | 94433 | systems/texlive/tlnet/tlpkg/translations/fr.po
+2023/08/08 | 87939 | systems/texlive/tlnet/tlpkg/translations/it.po
+2023/08/08 | 62854 | systems/texlive/tlnet/tlpkg/translations/ja.po
+2023/08/08 | 47295 | systems/texlive/tlnet/tlpkg/translations/messages.pot
+2023/08/08 | 58302 | systems/texlive/tlnet/tlpkg/translations/nl.po
+2023/08/08 | 67354 | systems/texlive/tlnet/tlpkg/translations/pl.po
+2023/08/08 | 82791 | systems/texlive/tlnet/tlpkg/translations/pt_BR.po
2019/03/25 | 430 | systems/texlive/tlnet/tlpkg/translations/README
-2023/04/06 | 107622 | systems/texlive/tlnet/tlpkg/translations/ru.po
-2023/04/06 | 89282 | systems/texlive/tlnet/tlpkg/translations/sk.po
-2023/04/06 | 70484 | systems/texlive/tlnet/tlpkg/translations/sl.po
-2023/04/06 | 103515 | systems/texlive/tlnet/tlpkg/translations/sr.po
+2023/08/08 | 107622 | systems/texlive/tlnet/tlpkg/translations/ru.po
+2023/08/08 | 89282 | systems/texlive/tlnet/tlpkg/translations/sk.po
+2023/08/08 | 70484 | systems/texlive/tlnet/tlpkg/translations/sl.po
+2023/08/08 | 103515 | systems/texlive/tlnet/tlpkg/translations/sr.po
2023/03/03 | 877 | systems/texlive/tlnet/tlpkg/translations/translators
-2023/04/06 | 80620 | systems/texlive/tlnet/tlpkg/translations/uk.po
-2023/04/06 | 90624 | systems/texlive/tlnet/tlpkg/translations/vi.po
-2023/04/06 | 63592 | systems/texlive/tlnet/tlpkg/translations/zh_CN.po
-2023/04/06 | 61459 | systems/texlive/tlnet/tlpkg/translations/zh_TW.po
+2023/08/08 | 80620 | systems/texlive/tlnet/tlpkg/translations/uk.po
+2023/08/08 | 90624 | systems/texlive/tlnet/tlpkg/translations/vi.po
+2023/08/08 | 63592 | systems/texlive/tlnet/tlpkg/translations/zh_CN.po
+2023/08/08 | 61459 | systems/texlive/tlnet/tlpkg/translations/zh_TW.po
2023/04/11 | 4669661 | systems/texlive/tlnet/update-tlmgr-r66822.exe
2023/04/11 | 154 | systems/texlive/tlnet/update-tlmgr-r66822.exe.sha512
2023/04/11 | 455 | systems/texlive/tlnet/update-tlmgr-r66822.exe.sha512.asc
@@ -313615,7 +313623,7 @@
2014/07/05 | 611 | systems/win32/yandy/README
2014/07/05 | 1004628 | systems/win32/yandy/yandy-src.tar.xz
2014/07/05 | 1012416 | systems/win32/yandy.zip
-2023/08/09 | 186 | timestamp
+2023/08/10 | 186 | timestamp
2002/08/26 | 61898 | usergrps/dante/antrag.pdf
2002/08/26 | 118217 | usergrps/dante/antrag.ps
2021/11/11 | 917 | usergrps/dante/dtk/doc/beispiel.bib
@@ -313644,7 +313652,6 @@
2000/10/23 | 89091 | usergrps/dante/satzung.pdf
2000/10/23 | 139670 | usergrps/dante/satzung.ps
2023/01/02 | 101336 | usergrps/gutenberg/adhesion.pdf
-2023/01/06 | 166341 | usergrps/gutenberg/FAQ_leaflet.pdf
2010/11/02 | 2046238 | usergrps/gutenberg/lettre/lettre37.pdf
2012/05/29 | 7206211 | usergrps/gutenberg/lettre/lettre38.pdf
2018/08/26 | 1084374 | usergrps/gutenberg/lettre/lettre39.pdf
@@ -313659,10 +313666,10 @@
2022/12/02 | 993028 | usergrps/gutenberg/lettre/lettre48.pdf
2023/01/21 | 1037403 | usergrps/gutenberg/lettre/lettre49.pdf
2023/06/13 | 27381240 | usergrps/gutenberg/lettre/lettre50.pdf
-2022/01/05 | 1751387 | usergrps/gutenberg/plaquette_gutenberg.pdf
-2022/01/05 | 238816 | usergrps/gutenberg/plaquette_latex.pdf
-2023/06/14 | 1465 | usergrps/gutenberg/README
-2023/06/14 | 11 | usergrps/gutenberg/VERSION
+2023/04/23 | 662117 | usergrps/gutenberg/plaquette_gutenberg.pdf
+2023/04/22 | 668315 | usergrps/gutenberg/plaquette_latex.pdf
+2023/08/06 | 1558 | usergrps/gutenberg/README
+2023/08/06 | 11 | usergrps/gutenberg/VERSION
1995/01/29 | 803 | usergrps/ntg/maps/descript.ion
1995/01/29 | 2667 | usergrps/ntg/maps/maps01/00read.me
1995/01/23 | 198 | usergrps/ntg/maps/maps01/descript.ion
diff --git a/FILES.byname.gz b/FILES.byname.gz
index c73222481f..50695a37bd 100644
--- a/FILES.byname.gz
+++ b/FILES.byname.gz
Binary files differ
diff --git a/FILES.last07days b/FILES.last07days
index 2da1d9c483..cad6b25939 100644
--- a/FILES.last07days
+++ b/FILES.last07days
@@ -1,97 +1,183 @@
+2023/08/09 | 926 | macros/latex/contrib/arraycols/README.md
+2023/08/09 | 88272 | systems/texlive/tlnet/archive/luacomplex.doc.r67852.tar.xz
+2023/08/09 | 808197 | macros/latex/contrib/huawei/huawei.pdf
+2023/08/09 | 7935092 | systems/texlive/tlnet/archive/jeuxcartes.doc.r67849.tar.xz
+2023/08/09 | 73548 | systems/texlive/tlnet/archive/cweb.doc.r67845.tar.xz
+2023/08/09 | 70124 | systems/texlive/tlnet/archive/memoir.r67850.tar.xz
+2023/08/09 | 6900 | graphics/metapost/contrib/macros/wordcloud/scripts/wordcloud.lua
+2023/08/09 | 6760 | graphics/metapost/contrib/macros/wordcloud/doc/doc-wc.pdf
+2023/08/09 | 672020 | systems/texlive/tlnet/archive/naive-ebnf.doc.r67851.tar.xz
+2023/08/09 | 6716028 | systems/texlive/tlnet/archive/jeuxcartes.r67849.tar.xz
+2023/08/09 | 660 | macros/latex/contrib/huawei/DEPENDS.txt
+2023/08/09 | 6503 | graphics/metapost/contrib/macros/wordcloud/doc/wordcloud-preamble.tex
+2023/08/09 | 626980 | systems/texlive/tlnet/archive/tikzfill.doc.r67847.tar.xz
+2023/08/09 | 606805 | macros/latex/contrib/writeongrid/doc/WriteOnGrid-doc-fr.pdf
+2023/08/09 | 5760 | systems/texlive/tlnet/archive/naive-ebnf.source.r67851.tar.xz
+2023/08/09 | 5736247 | systems/texlive/tlnet/install-tl-unx.tar.gz
+2023/08/09 | 556524 | systems/texlive/tlnet/archive/apa6.doc.r67848.tar.xz
+2023/08/09 | 5311 | graphics/metapost/contrib/macros/wordcloud/tex/wordcloud.sty
+2023/08/09 | 492397 | macros/latex/contrib/writeongrid/doc/WriteOnGrid-doc-en.pdf
+2023/08/09 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+2023/08/09 | 488 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
+2023/08/09 | 488 | systems/texlive/tlnet/install-tl.zip.sha512.asc
+2023/08/09 | 488 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
+2023/08/09 | 488 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
+2023/08/09 | 469022 | macros/latex/contrib/arraycols.zip
+2023/08/09 | 4652 | systems/texlive/tlnet/archive/tikzfill.r67847.tar.xz
+2023/08/09 | 463229 | macros/latex/contrib/arraycols/arraycols.pdf
+2023/08/09 | 44707 | macros/luatex/latex/lualinalg/lualinalg.tex
+2023/08/09 | 428316 | systems/texlive/tlnet/archive/texlive-scripts.doc.r67842.tar.xz
+2023/08/09 | 4094567 | biblio/ctan-bibdata.zip
+2023/08/09 | 4027 | graphics/metapost/contrib/macros/wordcloud/doc/ctan.bib
+2023/08/09 | 37432 | systems/texlive/tlnet/archive/apa6.source.r67848.tar.xz
+2023/08/09 | 37105 | macros/luatex/latex/lualinalg/lualinalg.sty
+2023/08/09 | 3694170 | biblio/ctan-bibdata/ctan.pdf
+2023/08/09 | 33409 | macros/latex/contrib/huawei/huawei.dtx
+2023/08/09 | 3145420 | systems/texlive/tlnet/archive/memoir.doc.r67850.tar.xz
+2023/08/09 | 31338 | macros/latex/contrib/writeongrid/doc/WriteOnGrid-doc-fr.tex
+2023/08/09 | 2799911 | biblio/ctan-bibdata/ctan.bib
+2023/08/09 | 270847 | macros/luatex/latex/lualinalg/lualinalg.pdf
+2023/08/09 | 2626 | macros/latex/contrib/huawei/huawei.ins
+2023/08/09 | 26025589 | systems/texlive/tlnet/install-tl.zip
+2023/08/09 | 253724 | macros/latex/contrib/huawei/huawei-cover-picture.pdf
+2023/08/09 | 246836 | macros/latex/contrib/verbatimbox.zip
+2023/08/09 | 2462004 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+2023/08/09 | 24544 | systems/texlive/tlnet/archive/cweb.r67845.tar.xz
+2023/08/09 | 2428 | systems/texlive/tlnet/archive/naive-ebnf.r67851.tar.xz
+2023/08/09 | 23685 | macros/latex/contrib/writeongrid/tex/WriteOnGrid.sty
+2023/08/09 | 214205 | macros/luatex/latex/lualinalg.zip
+2023/08/09 | 212556 | systems/texlive/tlnet/archive/memoir.source.r67850.tar.xz
+2023/08/09 | 21037440 | systems/texlive/tlnet/install-tl-windows.exe
+2023/08/09 | 1993 | macros/latex/contrib/arraycols/arraycols.ins
+2023/08/09 | 18177 | macros/latex/contrib/arraycols/arraycols.dtx
+2023/08/09 | 18175818 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
+2023/08/09 | 17451 | macros/latex/contrib/writeongrid/doc/WriteOnGrid-doc-en.tex
+2023/08/09 | 1688 | systems/texlive/tlnet/archive/luacomplex.r67852.tar.xz
+2023/08/09 | 1678 | biblio/ctan-bibdata/biblatex-ctan/ctan.bbx
+2023/08/09 | 1643 | graphics/metapost/contrib/macros/wordcloud/README.md
+2023/08/09 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
+2023/08/09 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
+2023/08/09 | 151800 | systems/texlive/tlnet/archive/texlive-msg-translations.r67843.tar.xz
+2023/08/09 | 1513 | macros/latex/contrib/huawei/README.md
+2023/08/09 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
+2023/08/09 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+2023/08/09 | 1402708 | macros/latex/contrib/proflycee.zip
+2023/08/09 | 13948 | graphics/metapost/contrib/macros/wordcloud/doc/wordcloud-doc-en.tex
+2023/08/09 | 13929 | graphics/metapost/contrib/macros/wordcloud/metapost/wordcloud.mp
+2023/08/09 | 13788 | systems/texlive/tlnet/archive/apa6.r67848.tar.xz
+2023/08/09 | 137885 | graphics/metapost/contrib/macros/wordcloud.zip
+2023/08/09 | 1309 | graphics/metapost/contrib/macros/wordcloud/doc/fond.pdf
+2023/08/09 | 118155 | graphics/metapost/contrib/macros/wordcloud/doc/wordcloud-doc-en.pdf
+2023/08/09 | 114120 | systems/texlive/tlnet/archive/texlive-scripts.r67842.tar.xz
+2023/08/09 | 1083 | macros/latex/contrib/huawei/LICENSE.txt
+2023/08/09 | 1082208 | macros/latex/contrib/writeongrid.zip
+2023/08/09 | 1050847 | macros/latex/contrib/huawei.zip
2023/08/08 | 968772 | systems/texlive/tlnet/archive/context-handlecsv.doc.r67840.tar.xz
+2023/08/08 | 94433 | systems/texlive/tlnet/tlpkg/translations/fr.po
2023/08/08 | 92420 | macros/luatex/latex/luacomplex.zip
+2023/08/08 | 9199 | macros/latex/contrib/verbatimbox/verbatimbox.sty
+2023/08/08 | 90624 | systems/texlive/tlnet/tlpkg/translations/vi.po
+2023/08/08 | 89983 | systems/texlive/tlnet/tlpkg/translations/de.po
+2023/08/08 | 89282 | systems/texlive/tlnet/tlpkg/translations/sk.po
+2023/08/08 | 87939 | systems/texlive/tlnet/tlpkg/translations/it.po
2023/08/08 | 8285082 | macros/latex/contrib/jeuxcartes/doc/JeuxCartes-doc.pdf
+2023/08/08 | 82791 | systems/texlive/tlnet/tlpkg/translations/pt_BR.po
+2023/08/08 | 82459 | systems/texlive/tlnet/tlpkg/translations/cs.po
+2023/08/08 | 81631 | systems/texlive/tlnet/tlpkg/translations/es.po
+2023/08/08 | 80620 | systems/texlive/tlnet/tlpkg/translations/uk.po
2023/08/08 | 7774 | macros/luatex/latex/luacomplex/luacomplex.tex
2023/08/08 | 770 | graphics/pgf/contrib/tikzfill/CHANGES.md
2023/08/08 | 7423 | macros/latex/contrib/memoir/doc-src/memnoidxnum.tex
+2023/08/08 | 7384 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
2023/08/08 | 727190 | macros/latex/contrib/naive-ebnf/naive-ebnf.pdf
2023/08/08 | 723303 | macros/latex/contrib/naive-ebnf.zip
+2023/08/08 | 70484 | systems/texlive/tlnet/tlpkg/translations/sl.po
+2023/08/08 | 6974 | macros/latex/contrib/proflycee/tex/ProfLycee.sty
+2023/08/08 | 67354 | systems/texlive/tlnet/tlpkg/translations/pl.po
+2023/08/08 | 6665 | macros/latex/contrib/proflycee/doc/ProfLycee-exemples-pyluatex.tex
2023/08/08 | 6624 | graphics/pgf/contrib/tikzfill/tikzlibraryfill.rhombus.code.tex
2023/08/08 | 6520 | systems/texlive/tlnet/archive/lualinalg.r67840.tar.xz
2023/08/08 | 64896 | systems/texlive/tlnet/archive/tagpdf.source.r67840.tar.xz
2023/08/08 | 648702 | graphics/pgf/contrib/tikzfill/tikzfill.pdf
2023/08/08 | 635966 | install/graphics/pgf/contrib/tikzfill.tds.zip
+2023/08/08 | 63592 | systems/texlive/tlnet/tlpkg/translations/zh_CN.po
2023/08/08 | 635408 | graphics/pgf/contrib/tikzfill.zip
+2023/08/08 | 62854 | systems/texlive/tlnet/tlpkg/translations/ja.po
2023/08/08 | 620009 | macros/latex/contrib/apa6.zip
+2023/08/08 | 61459 | systems/texlive/tlnet/tlpkg/translations/zh_TW.po
2023/08/08 | 586 | macros/latex/contrib/memoir/doc-src/trims-example.tex
-2023/08/08 | 5737206 | systems/texlive/tlnet/install-tl-unx.tar.gz
+2023/08/08 | 58302 | systems/texlive/tlnet/tlpkg/translations/nl.po
+2023/08/08 | 58292 | macros/latex/contrib/proflycee/doc/ProfLycee-exemples-pyluatex.pdf
+2023/08/08 | 57728 | systems/texlive/tlnet/tlpkg/translations/da.po
2023/08/08 | 5519 | macros/latex/contrib/memoir/doc-src/memfonts.sty
+2023/08/08 | 5409 | macros/latex/contrib/proflycee/doc/ProfLycee-exemples-pythontex.tex
+2023/08/08 | 529 | macros/latex/contrib/proflycee/doc/testscript.py
2023/08/08 | 52303 | macros/latex/contrib/memoir/README
-2023/08/08 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
-2023/08/08 | 488 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
-2023/08/08 | 488 | systems/texlive/tlnet/install-tl.zip.sha512.asc
-2023/08/08 | 488 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
-2023/08/08 | 488 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
2023/08/08 | 486576 | systems/texlive/tlnet/archive/tikzpeople.doc.r67840.tar.xz
+2023/08/08 | 47295 | systems/texlive/tlnet/tlpkg/translations/messages.pot
2023/08/08 | 4728832 | systems/texlive/tlnet/archive/novel.doc.r67840.tar.xz
2023/08/08 | 4639 | graphics/pgf/contrib/tikzfill/tikzfill-doc.sty
2023/08/08 | 432 | macros/latex/contrib/memoir/doc-src/memman.gst
-2023/08/08 | 428396 | systems/texlive/tlnet/archive/texlive-scripts.doc.r67839.tar.xz
2023/08/08 | 42311 | macros/latex/contrib/memoir/doc-src/memsty.sty
2023/08/08 | 42059 | graphics/pgf/contrib/tikzfill/tikzfill.tex
2023/08/08 | 4197 | macros/luatex/latex/luacomplex/luacomplex.sty
2023/08/08 | 41277 | macros/latex/contrib/jeuxcartes/doc/JeuxCartes-doc.tex
-2023/08/08 | 4093629 | biblio/ctan-bibdata.zip
+2023/08/08 | 40961 | macros/latex/contrib/proflycee/doc/ProfLycee-exemples-pythontex.pdf
2023/08/08 | 3977 | macros/latex/contrib/memoir/memoir.ins
2023/08/08 | 389 | macros/latex/contrib/memoir/doc-src/memman.ist
-2023/08/08 | 3693434 | biblio/ctan-bibdata/ctan.pdf
2023/08/08 | 36627 | macros/latex/contrib/memoir/mempatch.dtx
2023/08/08 | 3623212 | install/macros/latex/contrib/memoir.tds.zip
2023/08/08 | 3522153 | macros/latex/contrib/memoir.zip
2023/08/08 | 34968 | systems/texlive/tlnet/archive/tagpdf.r67840.tar.xz
2023/08/08 | 3036 | systems/texlive/tlnet/archive/modeles-factures-belges-assocs.r67840.tar.xz
+2023/08/08 | 295284 | macros/latex/contrib/proflycee/doc/ProfLycee-doc.tex
2023/08/08 | 2852 | macros/latex/contrib/memoir/mempatch.ins
2023/08/08 | 2845232 | macros/latex/contrib/memoir/memman.pdf
-2023/08/08 | 2799909 | biblio/ctan-bibdata/ctan.bib
2023/08/08 | 27432 | systems/texlive/tlnet/archive/luamplib.source.r67840.tar.xz
2023/08/08 | 2630 | macros/latex/contrib/naive-ebnf/naive-ebnf.ins
-2023/08/08 | 26025538 | systems/texlive/tlnet/install-tl.zip
2023/08/08 | 260140 | systems/texlive/tlnet/archive/modeles-factures-belges-assocs.doc.r67840.tar.xz
+2023/08/08 | 258446 | macros/latex/contrib/verbatimbox/verbatimbox.pdf
2023/08/08 | 2573 | graphics/pgf/contrib/tikzfill/tikzfill-common.sty
-2023/08/08 | 2461952 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
2023/08/08 | 2450 | graphics/pgf/contrib/tikzfill/README.md
2023/08/08 | 23340 | macros/latex/contrib/jeuxcartes/tex/JeuxCartes.sty
2023/08/08 | 2109884 | systems/texlive/tlnet/archive/tagpdf.doc.r67840.tar.xz
-2023/08/08 | 21038231 | systems/texlive/tlnet/install-tl-windows.exe
+2023/08/08 | 2090 | macros/luatex/latex/lualinalg/README.txt
2023/08/08 | 208 | macros/latex/contrib/naive-ebnf/DEPENDS.txt
2023/08/08 | 206 | macros/latex/contrib/memoir/doc-src/Makeidxglo
2023/08/08 | 20696 | systems/texlive/tlnet/archive/tikzpeople.r67840.tar.xz
+2023/08/08 | 20611 | macros/latex/contrib/verbatimbox/verbatimbox.tex
2023/08/08 | 203838 | macros/latex/contrib/memoir/doc-src/setpage-example.pdf
2023/08/08 | 198152 | systems/texlive/tlnet/archive/lualinalg.doc.r67840.tar.xz
-2023/08/08 | 18175798 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
2023/08/08 | 17396 | macros/latex/contrib/memoir/doc-src/titlepages.sty
-2023/08/08 | 1678 | biblio/ctan-bibdata/biblatex-ctan/ctan.bbx
2023/08/08 | 16513 | macros/latex/contrib/naive-ebnf/naive-ebnf.dtx
2023/08/08 | 1644 | systems/texlive/tlnet/archive/chronology.r67840.tar.xz
2023/08/08 | 16028 | systems/texlive/tlnet/archive/context-handlecsv.r67840.tar.xz
2023/08/08 | 156876 | systems/texlive/tlnet/archive/luamplib.doc.r67840.tar.xz
-2023/08/08 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
-2023/08/08 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
2023/08/08 | 15207834 | macros/latex/contrib/jeuxcartes.zip
2023/08/08 | 1520265 | macros/latex/contrib/memoir/doc-src/memman.tex
2023/08/08 | 1518 | macros/latex/contrib/memoir/doc-src/anvil2.mps
-2023/08/08 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
2023/08/08 | 14597 | macros/latex/contrib/memoir/doc-src/memlays.sty
-2023/08/08 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
2023/08/08 | 1428 | macros/latex/contrib/naive-ebnf/README.md
2023/08/08 | 1298 | macros/luatex/latex/luacomplex/README.txt
2023/08/08 | 12772 | systems/texlive/tlnet/archive/chronology.doc.r67840.tar.xz
2023/08/08 | 12132 | systems/texlive/tlnet/archive/luamplib.r67840.tar.xz
2023/08/08 | 12104 | graphics/pgf/contrib/tikzfill/tikzlibraryfill.hexagon.code.tex
+2023/08/08 | 1173 | macros/latex/contrib/verbatimbox/README
2023/08/08 | 1170 | graphics/pgf/contrib/tikzfill/tikzfill.sty
2023/08/08 | 116132 | systems/texlive/tlnet/archive/novel.r67840.tar.xz
2023/08/08 | 1140 | graphics/pgf/contrib/tikzfill/tikzfill.rhombus.sty
2023/08/08 | 1140 | graphics/pgf/contrib/tikzfill/tikzfill.hexagon.sty
-2023/08/08 | 114084 | systems/texlive/tlnet/archive/texlive-scripts.r67839.tar.xz
2023/08/08 | 1122850 | macros/latex/contrib/memoir/memoir.dtx
2023/08/08 | 1120 | graphics/pgf/contrib/tikzfill/tikzfill.image.sty
2023/08/08 | 10931 | graphics/pgf/contrib/tikzfill/tikzlibraryfill.image.code.tex
2023/08/08 | 109293 | macros/luatex/latex/luacomplex/luacomplex.pdf
2023/08/08 | 1078 | macros/latex/contrib/naive-ebnf/LICENSE.txt
+2023/08/08 | 107622 | systems/texlive/tlnet/tlpkg/translations/ru.po
+2023/08/08 | 1071216 | macros/latex/contrib/proflycee/doc/ProfLycee-doc.pdf
+2023/08/08 | 103515 | systems/texlive/tlnet/tlpkg/translations/sr.po
2023/08/07 | 9953 | macros/luatex/generic/luamplib/NEWS
2023/08/07 | 96212 | macros/luatex/generic/luamplib/luamplib.dtx
2023/08/07 | 7724 | macros/latex/contrib/apa6/samples/bibliography.bib
-2023/08/07 | 7338 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
2023/08/07 | 6908 | macros/latex/contrib/apa6/samples/longsample.tex
2023/08/07 | 6704 | macros/latex/contrib/apa6/apa6.ins
2023/08/07 | 628 | systems/texlive/tlnet/archive/collection-langfrench.r67826.tar.xz
@@ -99,10 +185,8 @@
2023/08/07 | 603020 | macros/latex/contrib/apa6/apa6.pdf
2023/08/07 | 5611 | macros/luatex/generic/luamplib/test-luamplib-latex.tex
2023/08/07 | 5548 | macros/latex/contrib/apa6/config/APAendfloat.cfg
-2023/08/07 | 44722 | macros/luatex/latex/lualinalg/lualinalg.tex
2023/08/07 | 429692 | systems/texlive/tlnet/archive/cahierprof.doc.r67826.tar.xz
2023/08/07 | 4204 | systems/texlive/tlnet/archive/cahierprof.r67826.tar.xz
-2023/08/07 | 41091 | macros/luatex/latex/lualinalg/lualinalg.sty
2023/08/07 | 3872 | macros/luatex/generic/luamplib/test-luamplib-plain.tex
2023/08/07 | 3223 | macros/latex/contrib/apa6/config/APAngerman.txt
2023/08/07 | 3221 | macros/latex/contrib/apa6/config/APAgreek.txt
@@ -114,10 +198,7 @@
2023/08/07 | 3169 | macros/latex/contrib/apa6/config/APAamerican.txt
2023/08/07 | 3164 | macros/latex/contrib/apa6/config/APAbritish.txt
2023/08/07 | 2752 | macros/luatex/generic/luamplib/Makefile
-2023/08/07 | 271095 | macros/luatex/latex/lualinalg/lualinalg.pdf
2023/08/07 | 2359601 | macros/latex/contrib/tagpdf.zip
-2023/08/07 | 214542 | macros/luatex/latex/lualinalg.zip
-2023/08/07 | 2090 | macros/luatex/latex/lualinalg/README.txt
2023/08/07 | 202348 | install/macros/luatex/generic/luamplib.tds.zip
2023/08/07 | 1996 | macros/luatex/generic/luamplib/README
2023/08/07 | 187702 | macros/luatex/generic/luamplib.zip
@@ -620,6 +701,7 @@
2023/08/06 | 157 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_insert_braces.snap
2023/08/06 | 1573 | support/texlab/crates/base-db/src/semantics/bib.rs
2023/08/06 | 15622 | support/texlab/crates/citeproc/src/tests.rs
+2023/08/06 | 1558 | usergrps/gutenberg/README
2023/08/06 | 1509 | support/texlab/crates/symbols/src/document.rs
2023/08/06 | 1506 | support/texlab/crates/texlab/src/features/completion/import.rs
2023/08/06 | 1505 | support/texlab/crates/texlab/tests/lsp/text_document/document_symbol.rs
@@ -662,6 +744,7 @@
2023/08/06 | 1226 | support/texlab/crates/hover/src/citation.rs
2023/08/06 | 1210 | support/texlab/crates/definition/src/lib.rs
2023/08/06 | 1208 | support/texlab/crates/texlab/tests/lsp/text_document/folding_range.rs
+2023/08/06 | 11 | usergrps/gutenberg/VERSION
2023/08/06 | 11 | support/texlab/crates/parser/src/test_data/latex/label/label_reference_equation.txt
2023/08/06 | 11 | support/texlab/crates/parser/src/test_data/latex/label/label_definition_simple.txt
2023/08/06 | 11 | support/texlab/crates/parser/src/test_data/latex/include/import_incomplete.txt
@@ -893,7 +976,6 @@
2023/08/03 | 84789 | macros/latex/contrib/l3kernel/l3fp-basics.dtx
2023/08/03 | 83077 | macros/latex/contrib/l3kernel/l3clist.dtx
2023/08/03 | 81941 | macros/latex/contrib/l3kernel/l3prefixes.pdf
-2023/08/03 | 807934 | macros/latex/contrib/huawei/huawei.pdf
2023/08/03 | 80198 | macros/latex/contrib/l3kernel/l3names.dtx
2023/08/03 | 79261 | macros/latex/contrib/l3kernel/l3str.dtx
2023/08/03 | 77774 | macros/latex/contrib/l3kernel/l3msg.dtx
@@ -910,7 +992,6 @@
2023/08/03 | 70538 | macros/latex/contrib/l3kernel/expl3.dtx
2023/08/03 | 70482 | macros/latex/contrib/l3kernel/l3prg.dtx
2023/08/03 | 6677 | macros/latex/contrib/l3kernel/l3news02.tex
-2023/08/03 | 660 | macros/latex/contrib/huawei/DEPENDS.txt
2023/08/03 | 649612 | macros/latex/contrib/siunitx/siunitx-code.pdf
2023/08/03 | 6482 | macros/latex/contrib/l3kernel/l3news03.tex
2023/08/03 | 6433 | macros/latex/contrib/l3kernel/l3news06.tex
@@ -951,7 +1032,6 @@
2023/08/03 | 35441 | macros/latex/contrib/l3kernel/l3quark.dtx
2023/08/03 | 35188 | macros/latex/contrib/l3kernel/l3sys.dtx
2023/08/03 | 33709 | macros/latex/contrib/l3kernel/l3cctab.dtx
-2023/08/03 | 32942 | macros/latex/contrib/huawei/huawei.dtx
2023/08/03 | 31776 | macros/latex/contrib/siunitx/siunitx-emulation.dtx
2023/08/03 | 31738 | macros/latex/contrib/siunitx/siunitx-version-1.cfg
2023/08/03 | 31092 | systems/texlive/tlnet/archive/mandi.source.r67796.tar.xz
@@ -964,8 +1044,6 @@
2023/08/03 | 273398 | macros/latex/contrib/siunitx/siunitx-v2.sty
2023/08/03 | 27270 | macros/latex/contrib/l3kernel/l3kernel-functions.dtx
2023/08/03 | 2636 | macros/latex/contrib/siunitx/siunitx-code.tex
-2023/08/03 | 2626 | macros/latex/contrib/huawei/huawei.ins
-2023/08/03 | 253724 | macros/latex/contrib/huawei/huawei-cover-picture.pdf
2023/08/03 | 25249 | macros/latex/contrib/l3kernel/l3deprecation.dtx
2023/08/03 | 250127 | macros/latex/contrib/l3kernel/l3news09.pdf
2023/08/03 | 24792 | macros/latex/contrib/l3kernel/source3body.tex
@@ -1001,7 +1079,6 @@
2023/08/03 | 151911 | macros/latex/contrib/l3kernel/l3docstrip.pdf
2023/08/03 | 151569 | macros/latex/contrib/l3kernel/l3news06.pdf
2023/08/03 | 15153 | macros/latex/contrib/siunitx/siunitx-quantity.dtx
-2023/08/03 | 1513 | macros/latex/contrib/huawei/README.md
2023/08/03 | 150675 | macros/latex/contrib/l3kernel/l3news02.pdf
2023/08/03 | 150282 | macros/latex/contrib/l3kernel/l3news10.pdf
2023/08/03 | 149884 | systems/texlive/tlnet/archive/bidi.source.r67798.tar.xz
@@ -1029,55 +1106,7 @@
2023/08/03 | 112487 | macros/latex/contrib/l3kernel/l3news05.pdf
2023/08/03 | 112274 | macros/latex/contrib/l3kernel/l3color.dtx
2023/08/03 | 11220 | systems/texlive/tlnet/archive/mandi.r67796.tar.xz
-2023/08/03 | 1083 | macros/latex/contrib/huawei/LICENSE.txt
2023/08/03 | 107383 | macros/latex/contrib/l3kernel/l3news09.tex
-2023/08/03 | 1050507 | macros/latex/contrib/huawei.zip
2023/08/03 | 105012 | macros/latex/contrib/l3kernel/l3fp-parse.dtx
2023/08/03 | 103395 | macros/latex/contrib/siunitx/siunitx-unit.dtx
2023/08/03 | 10328 | macros/latex/contrib/l3kernel/l3flag.dtx
-2023/08/02 | 761651 | macros/xetex/latex/bidi/gull.jpg
-2023/08/02 | 746496 | systems/texlive/tlnet/archive/caption.doc.r67788.tar.xz
-2023/08/02 | 676336 | systems/texlive/tlnet/archive/piton.doc.r67790.tar.xz
-2023/08/02 | 641 | macros/latex/contrib/eolang/eolang.bib
-2023/08/02 | 61220 | systems/texlive/tlnet/archive/caption.r67788.tar.xz
-2023/08/02 | 6101 | macros/xetex/latex/bidi/bidi-doc-latex-pkgsupport.ltx
-2023/08/02 | 584050 | macros/unicodetex/latex/fontsetup/doc/fontsetup-doc.pdf
-2023/08/02 | 5823 | macros/xetex/latex/bidi/bidi-doc-plain-basics.ltx
-2023/08/02 | 56524 | macros/latex/contrib/eolang/eolang.dtx
-2023/08/02 | 534 | macros/xetex/latex/bidi/bidi-doc.ltx
-2023/08/02 | 534000 | macros/latex/contrib/mandi.zip
-2023/08/02 | 4895119 | install/macros/xetex/latex/bidi.tds.zip
-2023/08/02 | 47687 | macros/latex/contrib/eolang/cactus.pdf
-2023/08/02 | 462 | macros/latex/contrib/eolang/DEPENDS.txt
-2023/08/02 | 4547 | macros/xetex/latex/bidi/bidi-doc-latex-pkgs.ltx
-2023/08/02 | 4497 | macros/xetex/latex/bidi/bidi-doc-latex-programming.ltx
-2023/08/02 | 4473944 | macros/xetex/latex/bidi.zip
-2023/08/02 | 40736 | systems/texlive/tlnet/archive/piton.source.r67790.tar.xz
-2023/08/02 | 369 | macros/unicodetex/latex/fontsetup/README
-2023/08/02 | 3688262 | macros/xetex/latex/bidi/bidi.pdf
-2023/08/02 | 3596 | macros/xetex/latex/bidi/bidi-doc-preamble.ltx
-2023/08/02 | 2936 | macros/xetex/latex/bidi/bidi-bibitem.pdf
-2023/08/02 | 27136 | support/wmf2epsc/wmf2epsc.exe
-2023/08/02 | 2628 | macros/latex/contrib/eolang/eolang.ins
-2023/08/02 | 23131 | macros/xetex/latex/bidi/bidi-doc-latex-basics.ltx
-2023/08/02 | 217360 | systems/texlive/tlnet/archive/caption.source.r67788.tar.xz
-2023/08/02 | 2108 | macros/xetex/latex/bidi/bidi-doc-title.ltx
-2023/08/02 | 19810 | macros/unicodetex/latex/fontsetup/doc/fontsetup-doc.tex
-2023/08/02 | 1961 | macros/xetex/latex/bidi/bidi-doc-plain-programming.ltx
-2023/08/02 | 1893265 | macros/latex/contrib/eolang.zip
-2023/08/02 | 1888881 | macros/latex/contrib/eolang/eolang.pdf
-2023/08/02 | 18274 | CTAN.sites
-2023/08/02 | 176441 | macros/xetex/latex/bidi/bidi-doc.pdf
-2023/08/02 | 1693 | macros/xetex/latex/bidi/picture.jpg
-2023/08/02 | 1631908 | systems/texlive/tlnet/archive/quran.r67791.tar.xz
-2023/08/02 | 1503 | macros/unicodetex/latex/fontsetup/fspeulerot.sty
-2023/08/02 | 1425 | macros/xetex/latex/bidi/bidi-doc-intro.ltx
-2023/08/02 | 13556 | systems/texlive/tlnet/archive/piton.r67790.tar.xz
-2023/08/02 | 1347 | macros/latex/contrib/eolang/README.md
-2023/08/02 | 1323 | macros/xetex/latex/bidi/README
-2023/08/02 | 1303128 | systems/texlive/tlnet/archive/profcollege.r67787.tar.xz
-2023/08/02 | 1083 | macros/latex/contrib/eolang/LICENSE.txt
-2023/08/02 | 1080550 | macros/xetex/latex/bidi/bidi.dtx
-2023/08/02 | 10753460 | systems/texlive/tlnet/archive/profcollege.doc.r67787.tar.xz
-2023/08/02 | 1068494 | macros/unicodetex/latex/fontsetup.zip
-2023/08/02 | 1032296 | systems/texlive/tlnet/archive/quran.doc.r67791.tar.xz
diff --git a/biblio/ctan-bibdata/ctan.bib b/biblio/ctan-bibdata/ctan.bib
index 928f4647e5..2152a30761 100644
--- a/biblio/ctan-bibdata/ctan.bib
+++ b/biblio/ctan-bibdata/ctan.bib
@@ -1,7 +1,7 @@
%% bib file of all CTAN packages
%% (C) Herbert Voß
%%
-%% created at 09-08-2023, 02:01:30
+%% created at 10-08-2023, 02:01:04
%%
%% This file is provided under the terms of the LPPL v1.3 or
@@ -3204,8 +3204,8 @@
title = {The \texttt{arraycols} package},
subtitle = {New column types for array and tabular environments},
author = {Antoine Missier},
- date = {2021-09-20},
- version = {1.2},
+ date = {2023-08-09},
+ version = {1.3},
license = {lppl1.3},
mirror = {https://mirror.ctan.org/macros/latex/contrib/arraycols},
url = {https://ctan.org/pkg/arraycols},
@@ -30546,7 +30546,7 @@
title = {The \texttt{GUTenberg} package},
subtitle = {French \TeX{} Users Group information},
author = {Jérémy Just},
- date = {2023-06-23},
+ date = {2023-08-09},
version = {},
license = {cc-by-4},
mirror = {https://mirror.ctan.org/usergrps/gutenberg},
@@ -32051,8 +32051,8 @@
title = {The \texttt{huawei} package},
subtitle = {Template for Huawei documents},
author = {Yegor Bugayenko},
- date = {2023-08-03},
- version = {0.17.0},
+ date = {2023-08-09},
+ version = {0.18.0},
license = {mit},
mirror = {https://mirror.ctan.org/macros/latex/contrib/huawei},
url = {https://ctan.org/pkg/huawei},
@@ -41508,8 +41508,8 @@
title = {The \texttt{lualinalg} package},
subtitle = {A linear algebra package for LuaLaTeX},
author = {{Chetan Shirore and Ajit Kumar}},
- date = {2023-08-07},
- version = {1.5},
+ date = {2023-08-09},
+ version = {1.6},
license = {lppl1.3c},
mirror = {https://mirror.ctan.org/macros/luatex/latex/lualinalg},
url = {https://ctan.org/pkg/lualinalg},
@@ -54597,8 +54597,8 @@
title = {The \texttt{ProfLycee} package},
subtitle = {A \LaTeX{} package for French maths teachers in high school},
author = {Cédric Pierquet},
- date = {2023-06-15},
- version = {2.7.0},
+ date = {2023-08-09},
+ version = {2.7.1},
license = {lppl1.3c},
mirror = {https://mirror.ctan.org/macros/latex/contrib/proflycee},
url = {https://ctan.org/pkg/proflycee},
@@ -74527,8 +74527,8 @@
title = {The \texttt{verbatimbox} package},
subtitle = {Deposit verbatim text in a box},
author = {Steven B. Segletes},
- date = {2016-06-24},
- version = {3.13},
+ date = {2023-08-09},
+ version = {3.2},
license = {lppl},
mirror = {https://mirror.ctan.org/macros/latex/contrib/verbatimbox},
url = {https://ctan.org/pkg/verbatimbox},
@@ -75976,6 +75976,23 @@
url = {https://ctan.org/pkg/word2x},
}
+@manual{ctan-wordcloud,
+ title = {The \texttt{wordcloud} package},
+ subtitle = {Drawing wordclouds with MetaPost and Lua},
+ author = {Maxime Chupin},
+ date = {2023-08-09},
+ version = {0.1},
+ license = {lppl1.3c,fdl},
+ mirror = {https://mirror.ctan.org/graphics/metapost/contrib/macros/wordcloud},
+ url = {https://ctan.org/pkg/wordcloud},
+ annotation = {This MetaPost and Lua\LaTeX{} package allows drawing wordclouds
+ from a list of words and weights. The algorithm is implemented
+ with MetaPost whereas Lua is used to parse \LaTeX{} commands,
+ to build the list of words and weights from a text file
+ and to generate MetaPost code interpreted by
+ .},
+}
+
@manual{ctan-wordcount,
title = {The \texttt{wordcount} package},
subtitle = {Estimate the number of words in a \LaTeX{} document},
@@ -76151,8 +76168,8 @@
title = {The \texttt{WriteOnGrid} package},
subtitle = {Write on grid lines},
author = {Cédric Pierquet},
- date = {2023-03-18},
- version = {0.1.3},
+ date = {2023-08-09},
+ version = {0.1.4},
license = {lppl1.3c},
mirror = {https://mirror.ctan.org/macros/latex/contrib/writeongrid},
url = {https://ctan.org/pkg/writeongrid},
diff --git a/biblio/ctan-bibdata/ctan.pdf b/biblio/ctan-bibdata/ctan.pdf
index 8b8227f04c..4b392c9167 100644
--- a/biblio/ctan-bibdata/ctan.pdf
+++ b/biblio/ctan-bibdata/ctan.pdf
Binary files differ
diff --git a/graphics/metapost/contrib/macros/wordcloud/README.md b/graphics/metapost/contrib/macros/wordcloud/README.md
new file mode 100644
index 0000000000..a4db68ebf4
--- /dev/null
+++ b/graphics/metapost/contrib/macros/wordcloud/README.md
@@ -0,0 +1,57 @@
+# wordcloud
+
+This package (MetaPost, Lua, and LaTeX) allows you to draw wordclouds.
+
+_This package is in beta version, do not hesitate to report bugs, as well as
+requests for improvement. There is lots to do!_
+
+## Github
+
+To allow for easier feedback and bug reporting, this repository has a mirror
+repository on github:
+[https://github.com/chupinmaxime/wordcloud](https://github.com/chupinmaxime/wordcloud)
+
+## Installation
+
+MPchess is on the [ctan](ctan.org) and can be installed via the package manager of your
+distribution [https://www.ctan.org/pkg/wordcloud](https://www.ctan.org/pkg/wordcloud).
+
+### With TeX live under Linux or MacOS
+
+To install `wordcloud` with TeX live, you will have to create the directory `texmf`
+directory in your home.
+```bash
+user $> mkdir ~/texmf
+```
+
+Then, you will have to place the .mp files in the
+`~/texmf/tex/metapost/wordcloud/`.
+
+`wordcloud` consists of 3 files:
+* `wordcloud.mp` (MetaPost) that should be in `~/texmf/metapost/wordcloud/`;
+* `wordcloud.tex` (LaTeX) that should be in `~/texmf/tex/latex/wordcloud/`;
+* `wordcloud.lua` (Lua) that should be in `~/texmf/scripts/wordcloud/`.
+
+### With MikTEX and Windows
+
+These two systems are unknown to the author of MPchess, so we refer to their
+documentation to add local packages:
+[http://docs.miktex.org/manual/localadditions.html](http://docs.miktex.org/manual/localadditions.html)
+
+## Dependencies
+
+* metapost-colorbrewer
+* latexmp
+* luamplib
+* xcolor
+## Documentation
+
+* [English documentation](doc/wordcloud-doc-en.pdf)
+
+## Contact
+
+Maxime Chupin, `notezik(at)gmail.com`
+
+## Licenses
+
+This projet is under LATEX Project Public License 1.3c. \ No newline at end of file
diff --git a/graphics/metapost/contrib/macros/wordcloud/doc/ctan.bib b/graphics/metapost/contrib/macros/wordcloud/doc/ctan.bib
new file mode 100644
index 0000000000..fb435f0a3d
--- /dev/null
+++ b/graphics/metapost/contrib/macros/wordcloud/doc/ctan.bib
@@ -0,0 +1,99 @@
+
+@manual{ctan-metapost,
+ title = {The \texttt{metapost} package},
+ subtitle = {A development of Metafont for creating graphics},
+ author = {{The MetaPost Team} and John Hobby},
+ date = {2021-08-26},
+ license = {lgpl},
+ url = {https://ctan.org/pkg/metapost},
+ annotation = {MetaPost uses a language based on that of
+ to produce precise
+ technical illustrations. Its output is scalable PostScript or
+ SVG, rather than the bitmaps Metafont creates.},
+}
+
+
+
+@manual{ctan-metapost-colorbrewer,
+ title = {The \texttt{metapost-colorbrewer} package},
+ subtitle = {An implementation of the colorbrewer2.org colours for MetaPost},
+ author = {Toby Thurston},
+ date = {2018-09-25},
+ version = {},
+ license = {gpl3+},
+ mirror = {https://mirror.ctan.org/graphics/metapost/contrib/macros/metapost-colorbrewer},
+ url = {https://ctan.org/pkg/metapost-colorbrewer},
+}
+
+@manual{ctan-latexmp,
+ title = {The \texttt{latexMP} package},
+ subtitle = {Interface for \LaTeX{}-based typesetting in MetaPost},
+ author = {Jens-Uwe Morawski},
+ date = {2020-06-21},
+ version = {1.2.1},
+ license = {pd},
+ mirror = {https://mirror.ctan.org/graphics/metapost/contrib/macros/latexmp},
+ url = {https://ctan.org/pkg/latexmp},
+ annotation = {The MetaPost package latexMP implements a user-friendly
+ interface to access \LaTeX{}-based typesetting capabilities in
+ MetaPost. The text to be typeset is given as string. This
+ allows even dynamic text elements, for example counters, to be
+ used in labels. Compared to other implementations it is much
+ more flexible, since it can be used as direct replacement for
+ , and much faster, compared for example to the
+ solution provided by .},
+}
+
+@manual{ctan-lualatex-doc,
+ title = {The \texttt{lualatex-doc} package},
+ subtitle = {A guide to use of \LaTeX{} with LuaTeX},
+ author = {Manuel Pégourié-Gonnard},
+ date = {2016-06-24},
+ version = {},
+ license = {fdl},
+ mirror = {https://mirror.ctan.org/info/luatex/lualatex-doc},
+ url = {https://ctan.org/pkg/lualatex-doc},
+}
+
+
+@manual{ctan-luamplib,
+ title = {The \texttt{luamplib} package},
+ subtitle = {Use LuaTeX’s built-in MetaPost interpreter},
+ author = {Hans Hagen and Taco Hoekwater and Élie Roux and Manuel Pégourié-Gonnard and Philipp Gesang and Dohyun Kim},
+ date = {2022-01-12},
+ version = {2.23.0},
+ license = {gpl2},
+ mirror = {https://mirror.ctan.org/macros/luatex/generic/luamplib},
+ url = {https://ctan.org/pkg/luamplib},
+}
+
+@manual{ctan-xcolor,
+ title = {The \texttt{xcolor} package},
+ subtitle = {Driver-independent color extensions for \LaTeX{} and pdfLaTeX},
+ author = {Uwe Kern and {The \LaTeX{} Project Team}},
+ date = {2022-06-12},
+ version = {2.14},
+ license = {lppl1.3c},
+ mirror = {https://mirror.ctan.org/macros/latex/contrib/xcolor},
+ url = {https://ctan.org/pkg/xcolor},
+ annotation = {The package starts from the basic facilities of the
+ package, and
+ provides easy driver-independent access to several kinds of
+ color tints, shades, tones, and mixes of arbitrary colors. It
+ allows a user to select a document-wide target color model and
+ offers complete tools for conversion between eight color models.
+ Additionally, there is a command for alternating row colors plus
+ repeated non-aligned material (like horizontal lines) in tables.
+ Colors can be mixed like \textbackslash{}color{red!30!green!40!blue}.},
+}
+
+@manual{ctan-graphicx,
+ title = {The \texttt{graphicx} package},
+ subtitle = {Enhanced support for graphics},
+ author = {David Carlisle and {The \LaTeX{} Project Team}},
+ date = {2021-11-12},
+ version = {1.2d},
+ license = {lppl1.3c},
+ mirror = {https://mirror.ctan.org/macros/latex/required/graphics},
+ url = {https://ctan.org/pkg/graphicx},
+} \ No newline at end of file
diff --git a/graphics/metapost/contrib/macros/wordcloud/doc/doc-wc.pdf b/graphics/metapost/contrib/macros/wordcloud/doc/doc-wc.pdf
new file mode 100644
index 0000000000..682af3842a
--- /dev/null
+++ b/graphics/metapost/contrib/macros/wordcloud/doc/doc-wc.pdf
Binary files differ
diff --git a/graphics/metapost/contrib/macros/wordcloud/doc/fond.pdf b/graphics/metapost/contrib/macros/wordcloud/doc/fond.pdf
new file mode 100644
index 0000000000..22218152cc
--- /dev/null
+++ b/graphics/metapost/contrib/macros/wordcloud/doc/fond.pdf
Binary files differ
diff --git a/graphics/metapost/contrib/macros/wordcloud/doc/wordcloud-doc-en.pdf b/graphics/metapost/contrib/macros/wordcloud/doc/wordcloud-doc-en.pdf
new file mode 100644
index 0000000000..38656d0d9b
--- /dev/null
+++ b/graphics/metapost/contrib/macros/wordcloud/doc/wordcloud-doc-en.pdf
Binary files differ
diff --git a/graphics/metapost/contrib/macros/wordcloud/doc/wordcloud-doc-en.tex b/graphics/metapost/contrib/macros/wordcloud/doc/wordcloud-doc-en.tex
new file mode 100644
index 0000000000..e3ef5b24ae
--- /dev/null
+++ b/graphics/metapost/contrib/macros/wordcloud/doc/wordcloud-doc-en.tex
@@ -0,0 +1,429 @@
+
+% LTeX: language=en
+
+% wordcloud : draw word cloud with MetaPost and Lua
+%
+% Originally written by Maxime Chupin <notezik@gmail.com>,
+% 2023.
+%
+% Distributed under the terms of the GNU free documentation licence:
+% http://www.gnu.org/licenses/fdl.html
+% without any invariant section or cover text.
+
+\documentclass[english]{ltxdoc}
+
+\input{wordcloud-preamble}
+\usepackage{wordcloud}
+\usepackage[english]{babel}
+
+\makeindex[title=Command Index, columns=2]
+
+
+
+%\lstset{moredelim=*[s][\color{red}\rmfamily\itshape]{<}{>}}
+%\lstset{moredelim=*[s][\color{blue}\rmfamily\itshape]{<<}{>>}}
+
+\begin{document}
+
+\title{{Wordcloud} : drawing wordclouds with \hologo{METAPOST} and Lua}
+\author{Maxime Chupin, \url{notezik@gmail.com}}
+\date{\today}
+
+%% === Page de garde ===================================================
+\thispagestyle{empty}
+\begin{tikzpicture}[remember picture, overlay]
+ \node[below right, shift={(-4pt,4pt)}] at (current page.north west) {%
+ \includegraphics{fond.pdf}%
+ };
+\end{tikzpicture}%
+
+\noindent
+{\Huge \texttt{wordcloud}}\par\bigskip
+\noindent
+{\Large drawing wordclouds \\[0.2cm]with \hologo{METAPOST} and Lua}\\[3cm]
+\parbox{0.6\textwidth}{
+ \wordcloud[scale=2,rotate=0,margin=0.5pt,usecolor]{(Wordcloud,10);(\\hologo{METAPOST},6);(\\LaTeX,7);(Lua,4);(algorithm,3);(code,2);(mathematics,2);(CTAN,2);(mplib,4);(\\hologo{LuaTeX},4);(latexmp,3);(graphism,2)}
+}\hfill
+\parbox{0.5\textwidth}{\Large\raggedleft
+ \textbf{Contributor}\\
+ Maxime \textsc{Chupin}\\
+ \url{notezik@gmail.com}
+}
+\vfill
+\begin{center}
+ Version 0.1, 2023, August, 9th \\
+ \url{https://plmlab.math.cnrs.fr/mchupin/wordcloud}
+\end{center}
+%% == Page de garde ====================================================
+\newpage
+
+%\maketitle
+
+\begin{abstract}
+ These \hologo{METAPOST} and \hologo{LuaLaTeX} packages allows drawing
+ wordclouds from a list of words and weights. The algorithm is implemented with
+ \hologo{METAPOST} whereas Lua is used to parse \LaTeX{} commands, to build
+ the list of words and weights from a text file, and to generate
+ \hologo{METAPOST} code interpreted by \package{luamplib}.
+\end{abstract}
+
+
+\begin{center}
+ \url{https://plmlab.math.cnrs.fr/mchupin/wordcloud}
+ \url{https://github.com/chupinmaxime/wordcloud}
+\end{center}
+
+\tableofcontents
+
+\bigskip
+
+\begin{tcolorbox}[ arc=0pt,outer arc=0pt,
+ colback=darkred!3,
+ colframe=darkred,
+ breakable,
+ boxsep=0pt,left=5pt,right=5pt,top=5pt,bottom=5pt, bottomtitle =
+ 3pt, toptitle=3pt,
+ boxrule=0pt,bottomrule=0.5pt,toprule=0.5pt, toprule at break =
+ 0pt, bottomrule at break = 0pt,]
+ \itshape
+ This package is in beta version---do not hesitate to report bugs, as well as
+ requests for improvement, or better: to help me to improve it.
+\end{tcolorbox}
+
+\section{Installation}
+
+\wordcloudpkg is on \ctan{} and can also be installed via the package manager of your
+distribution.
+
+\begin{center}
+ \url{https://www.ctan.org/pkg/wordcloud}
+\end{center}
+
+
+\subsection{With \TeX live under Linux or macOS}
+
+To install \wordcloudpkg with \TeX Live, you will have to create the directory
+\lstinline+texmf+ in your \lstinline+home+.
+
+\begin{commandshell}
+mkdir ~/texmf
+\end{commandshell}
+
+Then, you will have to place the \lstinline+wordcloud.mp+ file in
+\begin{center}
+ \verb+~/texmf/metapost/wordcloud/+
+\end{center}
+
+
+You will also have to place the \lstinline+wordcloud.lua+ file in
+\begin{center}
+ \verb+~/texmf/scripts/wordcloud/+
+\end{center}
+
+And finally, you will have to place the \lstinline+wordcloud.sty+ file in
+\begin{center}
+ \verb+~/texmf/tex/latex/wordcloud/+
+\end{center}
+
+
+
+Once this is done, \wordcloudpkg will be loaded with the classic \MP{}
+input code
+\begin{mpcode}
+input wordcloud
+\end{mpcode}
+
+And for the \hologo{LuaLaTeX} side, \wordcloudpkg will be loaded with
+\begin{latexcode}
+\usepackage{wordcloud}
+\end{latexcode}
+
+\subsection{With Mik\TeX{} and Windows}
+
+These two systems are unknown to the author of \wordcloudpkg, so we
+refer you to the Mik\TeX documentation concerning the addition of local packages:
+\begin{center}
+ \url{http://docs.miktex.org/manual/localadditions.html}
+\end{center}
+
+
+
+\subsection{Dependencies}
+
+
+\wordcloudpkg depends, for the \MP side, of course on \MP~\cite{ctan-metapost},
+but also on \package{metapost-colorbrewer}~\cite{ctan-metapost-colorbrewer} and the
+\package{latexmp} package~\cite{ctan-latexmp}. For the \hologo{LuaLaTeX} side~\cite{ctan-lualatex-doc},
+\wordcloudpkg depends on the \package{luamplib} package~\cite{ctan-luamplib}
+and the \package{xcolor}~\cite{ctan-xcolor}.
+
+
+\section{\hologo{METAPOST} side}
+
+\subsection{Description of the algorithm}
+
+Given a set of words and weights, we first use a
+\emph{scale function} of the weights to scale the words. In this beta version of
+\package{wordcloud}, we only provide a log-based function\footnote{Other scale
+options could be provided in the next versions.}.
+
+Then, we compute a spiral line starting at the center\footnote{There is variants
+of the algorithm that use different line: squared spiral, etc.}.
+
+Then the algorithm is quite simple:
+\begin{algorithmic}[1]
+\Require set of words $(W_i)_{i\in\{1,\dots,N}$ and corresponding weight
+$(w_i)_{i\in\{1,\dots,N}$, and a spiral line $\mathcal{S}$
+\ForAll{$i\in\{1, \dots,N\}$}
+\State Place $W_i$ at the start of $\mathcal{S}$
+\Repeat
+ \State Set $b_\text{draw}:=\text{true}$
+ \ForAll{$j\in{1,\dots,i}$}
+ \If{$W_i\cap W_j\neq\emptyset$}
+ \State Set $b_\text{draw}:=\text{false}$
+ \EndIf
+ \EndFor
+ \If{$b_\text{draw}==\text{true}$}
+ \State Draw $W_i$
+ \Else
+ \State Move $W_i$ along $\mathcal{S}$
+ \EndIf
+\Until{$W_i$ is drawn}
+\EndFor
+\end{algorithmic}
+
+The hard part is making it perform efficiently! According to Jonathan Feinberg,
+Wordle\footnote{One of the first web application to build wordcloud.} uses a
+combination of hierarchical bounding boxes and quadtrees to achieve reasonable
+speeds. Here, with \hologo{METAPOST}, we compute intersections with the bounding
+box of the word.
+
+\begin{remark}
+ \begin{itemize}
+ \item
+ The words with \hologo{METAPOST} are built with the \lstinline+textext()+
+ function of \package{latexmp} or \package{luamplib}. We are trying to use the
+ bounding boxes of the letters when we get an intersection between ``global''
+ bounding boxes to allow placing words nearer of each other. Unfortunately,
+ this does not work for the moment. Any help is welcomed. \medskip
+
+ \item We first tried to compute intersections between words by decomposing the
+ letter using their contours and compute intersection of contours (with
+ \lstinline+intersectiontimes+). Unfortunately, this is much too slow.
+\end{itemize}
+
+\end{remark}
+
+Some explanations can be found here:
+\begin{center}
+ \url{https://www.jasondavies.com/wordcloud/about/}
+\end{center}
+
+\subsection{Main command}
+
+The main command is
+
+\commande|draw_wordcloud(«words», «weights»,«rotation»,«size»)|\smallskip\index{draw_wordcloud@\lstinline+draw_wordcloud+}
+
+\begin{description}
+\item[\meta{words}:] array of strings ;
+\item[\meta{weights}:] array of numerics ;
+\item[\meta{rotation}:] angle for wordcloud drawing;
+\item[\meta{size}:] number of elements in arrays.
+\end{description}
+
+\begin{ExempleMP}
+input wordcloud
+beginfig(0);
+string words[];
+numeric weights[];
+words[1]:="\LaTeX";
+words[2]:="\hologo{METAPOST}";
+words[3]:="Document";
+words[4]:="Lua";
+words[5]:="\TeX";
+weights[1]:=5;
+weights[2]:=4;
+weights[3]:=3.5;
+weights[4]:=3;
+weights[5]:=3;
+draw_wordcloud(words,weights,0,5);
+endfig;
+\end{ExempleMP}
+
+\begin{remark}
+The ``unity'' of weights is not important because internally,
+\package{wordcloud} compute new weights to work
+with the internal scaling function.
+\end{remark}
+
+\subsection{Parameters}
+
+There are few parameters.
+
+\subsubsection{Colors}\label{sec:colors}
+
+You can use set of colors to draw the wordcloud. For that, you have to use the
+following command:
+\commande|wordcloud_use_color(«bool»)|\smallskip\index{wordcloud_use_color@\lstinline+wordcloud_use_color+}
+
+\begin{description}
+ \item[\meta{bool}:] boolean \lstinline+true+ or \lstinline+false+ (default \lstinline+false+).
+\end{description}
+
+\package{wordcloud} provides a set of five colors using the \hologo{METAPOST}
+package \package{metapost-colorbrewer}~\cite{ctan-metapost-colorbrewer}.
+\package{wordcloud} defines an array of \lstinline+color+s and a
+\lstinline+numeric+ to set the colors to use.\index{wordcloud_colors@\lstinline+wordcloud_colors+}\index{wordcloud_colors_number@\lstinline+wordcloud_colors_number+}
+\begin{mpcode}
+% default colors
+wordcloud_colors[1]:=Reds[3][3];
+wordcloud_colors[2]:=Greens[3][3];
+wordcloud_colors[3]:=Blues[3][3];
+wordcloud_colors[4]:=Oranges[3][3];
+wordcloud_colors[5]:=black;
+wordcloud_colors_number:=5;
+\end{mpcode}
+Feel free to modify that variables to customize the colors.
+
+\subsubsection{Scaling}
+
+You can globally scale the picture using the following command:
+\commande|set_wordcloud_scale(«scale»)|\smallskip\index{set_wordcloud_scale@\lstinline+set_wordcloud_scale+}
+
+\begin{description}
+ \item[\meta{scale}:] \lstinline+numeric+.
+\end{description}
+
+\subsubsection{Margins}
+
+You can adjust the margins of the global bounding boxes of words using the
+following command:
+\commande|set_box_margin(«dim»)|\smallskip\index{set_box_margin@\lstinline+set_box_margin+}
+
+\begin{description}
+ \item[\meta{dim}:] a dimension with units (default 0.3pt).
+\end{description}
+
+
+
+\section{\hologo{LuaLaTeX} side}
+
+\package{wordcloud} provides a \hologo{LuaLaTeX} package. It uses the package
+\package{luamplib} to interpret the \hologo{METAPOST} code produced by Lua.
+
+
+\subsection{Main commands}
+
+The first \LaTeX{} command provided by \wordcloudpkg is:
+
+\commande|\wordcloud[«options»]{«list of words and weights»}|\smallskip\index{\wordcloud@\lstinline+\wordcloud+}
+
+where
+\begin{description}
+ \item[\meta{list of words and weights}:] is a list of couples of the form
+ \lstinline+(word1,weight1);(word2,weight2);(word3,weight3);...+
+\end{description}
+
+The second \LaTeX{} command allows to read a text file, to build the list of
+words and weights and draw the wordcloud up to a certain number of words.
+
+\commande|\wordcloudFile[«options»]{«text file»}{«number of words»}|\smallskip\index{\wordcloudFile@\lstinline+\wordcloudFile+}
+
+where:
+\begin{description}
+ \item[\meta{text file}:] is a text file to analyze and from which the
+ wordcloud is build ;
+ \item[\meta{number of words}:] is the number of words composing the wordcloud.
+\end{description}
+
+\subsubsection{Options}
+
+Both of these functions (\lstinline+\wordcloud+ and \lstinline+\wordcloudFile+)
+have the same options:
+
+\begin{description}
+ \item[\texttt{scale=}\meta{value}:] to scale the picture\footnote{Beware
+ that scaling increases the computation time and the values manipulated by
+ \hologo{METAPOST}.} ;
+ \item[\texttt{margin=}\meta{value with units}:] to adjust the margins
+ (default \lstinline+0.3pt+) ;
+ \item[\texttt{rotation=}\meta{angle}:] to rotate (degrees) the words with
+ $\pm$\meta{angle} alternatively (default 0) ;
+ \item[\texttt{usecolor}:] to use color for word drawing (boolean, default
+ \lstinline+false+) as described in section~\ref{sec:colors} ;
+ \item[\texttt{colors=}\meta{list of colors}:] to define a new
+ set of colors as described in section~\ref{sec:colors}\footnote{This needs
+ \package{xcolor} because the colors are converted to rgb coding and then
+ transferred to \hologo{METAPOST}.}.
+\end{description}
+
+
+Here an example:
+\begin{ExempleLaTeX}
+\wordcloud[scale=1,rotate=45,margin=0.5pt,usecolor,colors={red!40,blue!40,green!20!black}]{(Wordcloud,10);(\\hologo{METAPOST},6);(\\LaTeX,7);(Lua,4);(algorithm,3);(code,2);(mathematics,2);(CTAN,2);(mplib,4);(\\hologo{LuaTeX},4);(latexmp,3);(graphism,2)}
+\end{ExempleLaTeX}
+
+\begin{remark}
+Because the list of words and weights is given to Lua, we have to escape the
+\lstinline+\+ to use \LaTeX{} commands.
+\end{remark}
+
+\subsection{Add ignored words}
+
+The Lua function that builds words and weights from a text file ignores some
+words (and characters). For the moment, \package{wordcloud} only includes word
+lists to ignore for English and French.
+
+However, you can add a list of words to ignore with the following command:
+
+\commande|\wordcloudIgnoreWords{«word list»}|\smallskip\index{\wordcloudIgnoreWords@\lstinline+\wordcloudIgnoreWords+}
+
+\begin{description}
+ \item[\meta{word list}:] the list of words, separated with commas, to ignore
+ \lstinline+word1,word2,word3, etc.+
+\end{description}
+
+
+\section{With \texttt{pdftotext}}
+
+Thanks to \package{wordcloud} and the program \texttt{pdftotext}\footnote{It
+should be possible to parse a \pdf{} with \hologo{LuaTeX}, though. See \url{https://tex.stackexchange.com/questions/692930/recovering-the-textual-content-of-a-pdf-file-with-luatex}.} one can
+easily produce the wordcloud of the current \pdf.
+
+For that, you can produce the text file of the \pdf{}:
+\begin{commandshell}
+pdftotext wordcloud-doc-en.pdf
+\end{commandshell}
+and then, you can use the following code:
+\begin{latexcode}
+\wordcloudFile[usecolor]{wordcloud-doc-en.txt}{50}
+\end{latexcode}
+
+This produce the following wordcloud\footnote{Note that, because the wordcloud
+production is slow, we used a separate file to only produce the \pdf{} of the
+wordcloud, without any scaling, and we inserted the result scaling it with \package{graphicx}\cite{ctan-graphicx}.}
+\begin{center}
+ \includegraphics[width=\linewidth]{doc-wc.pdf}
+\end{center}
+
+\section{To do}
+
+Some things to do:
+\begin{itemize}
+ \item Improve intersection of words by using the letters bounding boxes.
+ \item Work on speed of the algorithm.
+ \item Add supported languages (ignored words).
+ \item Improve text file analysis with Lua to build the set of words and
+ weights.
+ \item Build wordcloud inside a shape.
+ \item Add options for rotation of words.
+\end{itemize}
+
+\printbibliography
+\printindex
+\newpage
+
+
+
+\end{document}
diff --git a/graphics/metapost/contrib/macros/wordcloud/doc/wordcloud-preamble.tex b/graphics/metapost/contrib/macros/wordcloud/doc/wordcloud-preamble.tex
new file mode 100644
index 0000000000..2e950254c4
--- /dev/null
+++ b/graphics/metapost/contrib/macros/wordcloud/doc/wordcloud-preamble.tex
@@ -0,0 +1,214 @@
+\usepackage{tcolorbox}
+\tcbuselibrary{listings,breakable}
+%\tcbuselibrary{documentation}
+\usepackage{enumitem}
+\usepackage[tikz]{bclogo}
+\usepackage{mflogo}
+\usepackage{hologo}
+\usepackage{luamplib}
+\mplibtextextlabel{enable}
+\usepackage{biblatex}
+\addbibresource{ctan.bib}
+\usepackage{wrapfig}
+\usepackage{accsupp}
+\usepackage{siunitx}
+\usepackage{imakeidx}
+%\usepackage{csquotes}
+\usepackage{fancyvrb,xparse,xargs}
+\usepackage[sfdefault]{FiraSans}
+\usepackage[mathrm=sym]{firamath-otf}
+\setmonofont{Fira Mono}
+%\setmonofont{FiraCode-Regular.ttf}[BoldFont= FiraCode-Bold.ttf,ItalicFont= FiraCode-RegularItalic.otf,BoldItalicFont= FiraCode-BoldItalic.otf,Ligatures={NoCommon, NoDiscretionary, NoHistoric, NoRequired, NoContextual}]
+\usepackage[noEnd=false,]{algpseudocodex}
+\usepackage{xspace}
+\usepackage{animate}
+\newcommand{\ctan}{\textsc{ctan}}
+\NewDocumentCommand{\package}{ m }{%
+ \href{https://ctan.org/pkg/#1}{#1}\xspace
+}
+
+\definecolor{darkred}{rgb}{0.6,0.1,0.1}
+\definecolor{vert}{rgb}{0.1,0.4,0.1}
+\definecolor{bleu}{rgb}{0.2,0.2,0.6}
+\definecolor{orange}{rgb}{0.6,0.4,0.}
+\colorlet{code}{blue!80!black}
+
+\usepackage[colorlinks=true,urlcolor=orange,linkcolor=orange,menucolor=black,citecolor=orange]{hyperref}
+
+\newcommand \file {\nolinkurl}
+\renewcommand \cmd {\texttt}
+\renewcommand \code [1] {\texorpdfstring {\texttt{\color{code}#1}} {#1}}
+\renewcommand*\cs [1] {\code{\textbackslash #1}}
+
+
+
+\newcommand*\commande{\par\bigskip\noindent\hspace{-30pt}%
+ \SaveVerb[aftersave={%
+ \UseVerb{Vitem}%
+ }%
+ ]{Vitem}%
+ }
+ \newcommand\vitem[1][]{\SaveVerb[%
+ aftersave={\item[\textnormal{\UseVerb[#1]{vsave}}]}]{vsave}}
+\newcommand*\textme[1]{\textcolor{black}{\rmfamily\textit{#1}}}
+%\renewcommand*\meta[1]{% % meta
+% \textme{\ensuremath{\langle}#1\ensuremath{\rangle}}}
+\newcommand*\optstar{% % optional star
+ \meta{\ensuremath{*}}\xspace}
+\DefineShortVerb{\|}
+\newcommand\R{\mathbf{R}}
+\setlength{\fboxsep}{2pt}
+\fvset{%
+ codes={\catcode`\«\active \catcode`\×\active },
+ defineactive={\makefancyog\makefancytimes},
+ formatcom=\color{darkred},
+ frame=single
+}
+% rendre «...» équivalent à \meta{...}
+{\catcode`\«\active
+ \newcommandx\makefancyog[0][addprefix=\global]{%
+ \def«##1»{\meta{##1}}}}
+% rendre × équivalent à \optstar
+{\catcode`\×\active
+ \newcommandx\makefancytimes[0][addprefix=\global]{%
+ \def×{\optstar{}}}}
+
+
+\newcommand\wordcloudpkg{\package{wordcloud}}
+
+\def\MO/{{\fontspec{fetamont}META\-OBJ}}
+
+%\addbibresource{biblio.bib}
+
+
+\lstset{
+ numberstyle=\footnotesize\color{vert},
+ keywordstyle=\ttfamily\bfseries\color{bleu},
+ basicstyle=\ttfamily,
+ commentstyle=\itshape\color{vert},
+ stringstyle=\ttfamily\color{orange},
+ showstringspaces=false,
+ language=MetaPost,
+ breaklines=true,
+ breakindent=30pt,
+ defaultdialect=MetaPost,
+ classoffset=1,% frame=tb
+ morekeywords={draw_wordcloud,set_box_margin,set_wordcloud_scale,wordcloud_colors,wordcloud_colors_number,wordcloud_use_color,\wordcloud,\wordcloudFile,\wordcloudIgnoreWords},
+ keywordstyle=\color{darkred},
+ classoffset=2,% frame=tb
+ morekeywords={Reds,Greens,Blues,Oranges},
+ keywordstyle=\color{vert},
+ classoffset=0,% frame=tb
+ morekeywords={draw},
+ keywordstyle=\color{bleu}
+}
+
+
+\extractcolorspecs{darkred!3}\modelcmd\colorcmd
+\makeatletter
+\tcbset{%
+ listing metapost/.code={%
+ \def\tcbuselistingtext@input{\begin{mplibcode} verbatimtex \leavevmode etex;
+ background:=(\colorcmd); input \jobname.listing; \end{mplibcode}}%
+ }
+}
+\makeatother
+\newtcblisting[auto counter,]{ExempleMP}[1][]{%
+ arc=0pt,outer arc=0pt,
+ colback=darkred!3,
+ colframe=darkred,
+ breakable,fontupper=\small,
+ boxsep=0pt,left=5pt,right=5pt,top=5pt,bottom=5pt, bottomtitle =
+ 3pt, toptitle=3pt,
+ boxrule=0pt,bottomrule=0.5pt,toprule=0.5pt, toprule at break =
+ 0pt, bottomrule at break = 0pt,
+ %listing side text,
+ listing metapost,
+ title=Exemple \hologo{METAPOST}~\thetcbcounter,
+ listing options={breaklines},#1
+}
+
+\newtcblisting[auto counter,]{ExempleLaTeX}{%
+ arc=0pt,outer arc=0pt,
+ colback=darkred!3,
+ colframe=darkred,
+ breakable,fontupper=\small,
+ boxsep=0pt,left=5pt,right=5pt,top=5pt,bottom=5pt, bottomtitle =
+ 3pt, toptitle=3pt,
+ boxrule=0pt,bottomrule=0.5pt,toprule=0.5pt, toprule at break =
+ 0pt, bottomrule at break = 0pt,
+ %listing side text,
+ title=Exemple \LaTeX~\thetcbcounter,
+ listing options={breaklines,language={[LaTeX]TeX},
+ classoffset=1,% frame=tb
+ morekeywords={\wordcloud,\wordcloudFile},
+ keywordstyle=\color{darkred},
+ classoffset=2,% frame=tb
+ morekeywords={scale,rotate,margin,usecolor,colors},
+ keywordstyle=\color{vert},
+ classoffset=0,% frame=tb
+ morekeywords={draw},
+ keywordstyle=\color{bleu}
+ }
+}
+
+\newtcblisting{commandshell}{colback=black,colupper=white,colframe=black,
+ arc=0pt,
+ listing only,boxsep=0pt,listing
+ options={style=tcblatex,language=sh},
+ every listing line={\BeginAccSupp{ActualText={}}\textcolor{red}{\small\ttfamily\bfseries user \$> }}\EndAccSupp{}}
+
+
+ \newtcblisting{mpcode}[1][]{
+ arc=0pt,outer arc=0pt,
+ colback=darkred!3,
+ colframe=darkred,
+ breakable,
+ boxsep=0pt,left=5pt,right=5pt,top=5pt,bottom=5pt, bottomtitle =
+ 3pt, toptitle=3pt,
+ boxrule=0pt,bottomrule=0.5pt,toprule=0.5pt, toprule at break =
+ 0pt, bottomrule at break = 0pt,
+ listing only,boxsep=0pt,listing
+ options={breaklines},#1
+}
+
+\newtcblisting{latexcode}{
+ arc=0pt,outer arc=0pt,
+ colback=darkred!3,
+ colframe=darkred,
+ breakable,
+ boxsep=0pt,left=5pt,right=5pt,top=5pt,bottom=5pt, bottomtitle =
+ 3pt, toptitle=3pt,
+ boxrule=0pt,bottomrule=0.5pt,toprule=0.5pt, toprule at break =
+ 0pt, bottomrule at break = 0pt,
+ listing only,boxsep=0pt,listing
+ options={breaklines,language={[LaTeX]TeX},
+ classoffset=1,% frame=tb
+ morekeywords={\wordcloud,\wordcloudFile},
+ keywordstyle=\color{darkred},
+ classoffset=2,% frame=tb
+ morekeywords={scale,rotate,margin,usecolor,colors},
+ keywordstyle=\color{vert},
+ classoffset=0,% frame=tb
+ morekeywords={draw},
+ keywordstyle=\color{bleu}}
+}
+
+
+\newcommand\pdf{\textsc{pdf}}
+
+\usepackage{array,booktabs}
+\usepackage{collcell}
+
+\newcolumntype{H}{>{\collectcell\lstinline}l<{\endcollectcell}}
+
+\NewDocumentEnvironment{remark}{o}{
+ \tcbset{%
+ arc=0pt,outer arc=0pt,colback=black!10,colframe=black,
+ boxsep=0pt,left=10pt,right=10pt,top=8pt,bottom=10pt, bottomtitle = 3pt, toptitle=3pt,
+ boxrule=0pt
+ }
+ \smallskip
+ \begin{tcolorbox}[fonttitle=\bfseries,title={Remark \IfNoValueF{#1}{(#1)}}]}%
+ {\end{tcolorbox}\medskip
+} \ No newline at end of file
diff --git a/graphics/metapost/contrib/macros/wordcloud/metapost/wordcloud.mp b/graphics/metapost/contrib/macros/wordcloud/metapost/wordcloud.mp
new file mode 100644
index 0000000000..6a69fb5191
--- /dev/null
+++ b/graphics/metapost/contrib/macros/wordcloud/metapost/wordcloud.mp
@@ -0,0 +1,467 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% wordcloud %%
+%% drawing wordclouds %%
+%% with METAPOST and Lua %%
+%% chupin@ceremade.dauphine.fr %%
+%% Version 0.1 (aout 2023) %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% This work may be distributed and/or modified under the conditions of
+% the LaTeX Project Public License, either version 1.3c of this license
+% or (at your option) any later version. The latest version of this
+% license is in http://www.latex-project.org/lppl.txt
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+if not known mplib: input latexmp ; show"wordcloud Infos: latexmp loaded";fi;
+input colorbrewer-rgb
+
+
+% function to get all the path of letters (too slow)
+vardef build_pathpicture(expr pict)=
+ save tex_pct,glp_pct,glp_idx,glp_num,pth_num,glp_pth,fnt_str, txt_str, sub_str,txt_wd;
+ % text material and glyphs contours
+ picture tex_pct, glp_pct;
+ numeric glp_num, pth_num[];
+ path glp_pth[][];
+ % tex_pct btex .. etex material
+ % glp_num number of glyphs within tex_pct
+ % pth_num[i] number of paths defining the rank i (0 .. glp_num-1) glyph
+ % glp_pth[i][j] rank j (0 .. pth_num[i]-1) path of the rank i glyph
+ % glp_pct glyphs picture
+
+ tex_pct:=pict;
+
+ glp_pct:=nullpicture;
+ string fnt_str, txt_str, sub_str;
+ numeric txt_wd;
+ glp_num:=0;
+ for tkn within pict:
+ %show tkn;
+ if textual tkn:
+ %show "textual";
+ fnt_str:=fontpart tkn;
+ txt_str:=textpart tkn;
+ txt_wd:=0;
+ for glp_idx=0 upto (length txt_str-1):
+ sub_str:=substring (glp_idx, glp_idx+1) of txt_str;
+ for sub_tkn within glyph ASCII sub_str of fnt_str
+ scaled (fontsize fnt_str/1000)
+ xscaled xxpart tkn
+ yscaled yypart tkn
+ shifted (txt_wd+xpart tkn, ypart tkn):
+ addto glp_pct doublepath (pathpart sub_tkn);
+ endfor
+ txt_wd:=txt_wd+
+ (xxpart tkn)*xpart urcorner (sub_str infont fnt_str);
+ endfor
+ fi
+ endfor
+ glp_pct
+enddef;
+
+
+% path intersection (trop gourmant en temps, too slow...)
+vardef word_intersection(expr tic, tac)=
+ save _p, _w, _v,_output;
+ boolean _output;
+ _output:=false;
+ path _p,_w,_v;
+ for _p within tic:
+ _w := pathpart _p;
+ for _q within tac:
+ _v := pathpart _q;
+ if((_w intersectiontimes _v)<>(-1,-1)): % intersection
+ _output:=true;
+ fi
+ endfor
+ endfor
+ _output
+enddef;
+
+% global variable
+_wordcloud_box_margin:=0.3pt;
+
+% setting the box margin
+def set_box_margin(expr s)=
+ _wordcloud_box_margin:=s;
+enddef;
+
+% extrenal box intersection (horizontal or vertical)
+vardef extbb_intersection(expr tic, tac)=
+ save xmax_, xmin_, ymax_, ymin_, xmax__, xmin__, ymax__, ymin__, _output;
+ boolean _output;
+ _output:=false;
+ %show _p;
+ xmin_:= (xpart llcorner tic) -_wordcloud_box_margin;
+ ymin_ := (ypart llcorner tic)-_wordcloud_box_margin;
+ xmax_:= (xpart urcorner tic)+_wordcloud_box_margin;
+ ymax_ := (ypart urcorner tic)+_wordcloud_box_margin;
+ xmin__:= (xpart llcorner tac)-_wordcloud_box_margin;
+ ymin__ := (ypart llcorner tac)-_wordcloud_box_margin;
+ xmax__:= (xpart urcorner tac)+_wordcloud_box_margin;
+ ymax__ := (ypart urcorner tac)+_wordcloud_box_margin;
+ if ((xmin_<= xmax__) and (xmax_ >= xmin__) and (ymin_<= ymax__) and (ymax_ >= ymin__)):
+ _output:=true;
+ fi
+ _output
+enddef;
+
+% subbb_entersection of words (from textext)
+%%%!!!!!! not working !!!!!!!!!
+vardef bb_intersection(expr tic, tac)=
+ save xmax_, xmin_, ymax_, ymin_, xmax__, xmin__, ymax__, ymin__,
+ _output;
+ save _p, _w, _v,_output,_q;
+ boolean _output;
+ _output:=false;
+ path _p,_w,_v;
+ i:=0;
+ for _v within tic:
+ for _p within _v:
+ i:=i+1;
+ %show "i"&decimal(i);
+ xmin_:= (xpart llcorner _p)-_wordcloud_box_margin;
+ ymin_ := (ypart llcorner _p)-_wordcloud_box_margin;
+ xmax_:= (xpart urcorner _p)+_wordcloud_box_margin;
+ ymax_ := (ypart urcorner _p)+_wordcloud_box_margin;
+ j:=0;
+ for _w within tac:
+ for _q within _w:
+ j:=j+1;
+ %show "j"&decimal(j);
+ xmin__:= (xpart llcorner _q)-_wordcloud_box_margin;
+ ymin__ := (ypart llcorner _q)-_wordcloud_box_margin;
+ xmax__:= (xpart urcorner _q)+_wordcloud_box_margin;
+ ymax__ := (ypart urcorner _q)+_wordcloud_box_margin;
+ if ((xmin_<= xmax__) and (xmax_ >= xmin__) and (ymin_<= ymax__) and (ymax_ >= ymin__)):
+ _output:=true;
+ fi
+ exitif(_output);
+ endfor
+ endfor
+ exitif(_output);
+ endfor
+ endfor
+ _output
+enddef;
+
+
+% build the spiral to put words
+path _wordcloud_spiral;
+
+_wordcloud_spiral:=(0,0);
+
+_wordcloud_N:= 10*360;
+_tours:=20;
+_scale:=0.3;
+for j:=1 upto _tours:
+ _rapj:=j/_tours;
+ for i:=1 step 10 until 360:
+ _rapi:=((i)+(j)*360)/360;
+ %show (_rapj*_rapi);
+ %show (6*_rapj*_rapi)*(cosd(i)*1cm,sind(i)*1cm);
+ _wordcloud_spiral:=_wordcloud_spiral--((_scale*_rapi)*(cosd(i)*1cm,sind(i)*1cm));
+ endfor;
+endfor
+
+picture _wordcloud_words[], _wordcloud_pathwords[];
+path _wordcloud_words_oriented_bb[];
+numeric _wordcloud_weights[];
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%% FONCTIONS USUELLES %%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% from repere.mp Olivier Péault
+
+pi:=3.141592654;
+e:=2.718281828;
+
+vardef sin(expr x) = sind(180*x/pi) enddef;
+
+vardef cos(expr x) = cosd(180*x/pi) enddef;
+
+vardef tan(expr x) = sin(x)/cos(x) enddef;
+
+vardef exp(expr x) = mexp(x*256) enddef;
+
+vardef ln(expr x) = mlog(x)/256 enddef;
+
+vardef ch(expr x)=(exp(x)+exp(-x))/2 enddef;
+
+vardef sh(expr x)=(exp(x)-exp(-x))/2 enddef;
+
+vardef Arctan(expr x)= pi*angle(1,x)/180 enddef;
+vardef Arctand(expr x)= angle(1,x) enddef;
+
+vardef Arcsin(expr x)= Arctan(x/sqrt(1-x**2)) enddef;
+vardef Arcsind(expr x)= Arctand(x/sqrt(1-x**2)) enddef;
+
+vardef Arccos(expr x)= pi/2-Arcsin(x) enddef;
+vardef Arccosd(expr x)= Arctand((sqrt(1-x**2))/x)enddef;
+
+% general scaling
+_wordcloud_gen_scale:=1;
+
+def set_wordcloud_scale(expr s)=
+ _wordcloud_gen_scale:=s;
+enddef;
+
+% fonction d'agrandissement en fonction du poids du mot
+vardef _wordcloud_scale_fct(expr e,_max,_min)=
+ save _t,_N,_a,_b;
+ _a*_min+_b=0.7;
+ _a*_max+_b=2.5;
+ _t:=_a*e+_b;
+ _t:=ln(_t)-ln(0.7)+0.295;
+ _wordcloud_gen_scale*(1.1*_t)
+enddef;
+
+% fabrication des mots avec la taille requise
+vardef _build_tabs(suffix _words, _weights)(expr _N)=
+ save _tmp_pict,_width,_height;
+ picture _tmp_pict;
+ for i=1 upto _N:
+ _tmp_pict:=textext(_words[i]) scaled (_wordcloud_scale_fct(_weights[i],_weights[1],_weights[_N]));
+ _width:=abs(ulcorner _tmp_pict - urcorner _tmp_pict);
+ _height:=abs(ulcorner _tmp_pict - llcorner _tmp_pict);
+ _wordcloud_words[i]:= _tmp_pict shifted (-0.5_width,-0.5_height);
+ _wordcloud_weights[i]:=_weights[i];
+ _bbox_old:=bboxmargin;
+ bboxmargin:=_wordcloud_box_margin;
+ _wordcloud_words_oriented_bb[i]:= bbox _wordcloud_words[i];
+ bboxmargin:=_bbox_old;
+ _wordcloud_pathwords[i]:=build_pathpicture(_wordcloud_words[i]) ;
+ endfor;
+enddef;
+% function to compute angle
+def _wordcloud_rotation(expr a,b)=
+% a: angle
+% b: 0 or 1
+ if b=0:
+ a
+ else:
+ if(a=0):
+ 90
+ else:
+ -a
+ fi
+ fi
+enddef;
+
+%%% colors
+boolean _wordcloud_use_color;
+_wordcloud_use_color:=false;
+
+numeric wordcloud_colors_number;
+color wordcloud_colors[];
+
+% default colors
+wordcloud_colors[1]:=Reds[3][3];
+wordcloud_colors[2]:=Greens[3][3];
+wordcloud_colors[3]:=Blues[3][3];
+wordcloud_colors[4]:=Oranges[3][3];
+wordcloud_colors[5]:=black;
+wordcloud_colors_number:=5;
+
+def wordcloud_use_color(expr b)=
+ _wordcloud_use_color:= b;
+enddef;
+
+% main function to draw the picture
+vardef draw_wordcloud(suffix _words, _weights, rotation)(expr _N)=
+ save _rotation_bool,_position,_ok_draw,_tmp_word,_random_pt,_position_pt,_pt;
+ pair _random_pt,_position_pt,_pt;
+ path _tmp_word;
+ boolean _ok_draw;
+ _position:=0;
+ _build_tabs(_words,_weights,_N);
+ for i=1 upto _N:
+ %show i;
+ _position:=0;
+ if(i mod 2) = 0:
+ _rotation_bool:=1;
+ else:
+ _rotation_bool:=0;
+ fi
+ if(i=1):
+ draw _wordcloud_words[i] rotated (_wordcloud_rotation(rotation,_rotation_bool)) shifted (point _position
+ of _wordcloud_spiral) if(_wordcloud_use_color): withcolor wordcloud_colors[i] fi ;
+ _position_pt:=(0,0);
+ _random_pt:=(0,0);
+ else:
+ _count:=0;
+
+ forever:
+ _position_pt:=point _position of _wordcloud_spiral;
+ _random_pt:=(uniformdeviate(1)*0.01cm,uniformdeviate(1)*0.01cm);
+ _pt:=_position_pt+_random_pt;
+ _count:=_count+1;
+ _ok_draw:= true;
+ _tmp_word:=_wordcloud_words_oriented_bb[i] rotated (_wordcloud_rotation(rotation,_rotation_bool)) shifted (_position_pt + _random_pt);
+ %_tmp_word:=_wordcloud_words[i] rotated (_rotation*90) shifted (point %_position
+ % of _wordcloud_spiral);
+ for j=1 upto i-1:
+ if(rectangles_intersection(_tmp_word,_wordcloud_words_oriented_bb[j])):
+ %if(bb_intersection(_tmp_word,_wordcloud_words[j])):
+ _ok_draw:= false;
+ %fi
+ fi
+ endfor;
+ if(_ok_draw): % if there is no intersections
+ draw _wordcloud_words[i] rotated
+ (_wordcloud_rotation(rotation,_rotation_bool)) shifted (_position_pt +
+ _random_pt) if(_wordcloud_use_color): withcolor wordcloud_colors[((i-1)
+ mod wordcloud_colors_number)+1] fi;
+ else: % else, we move along the spiral
+ _position:=_position+1;
+ fi
+ exitif(_ok_draw);
+ %exitif(_count>30);
+ endfor;
+ fi
+ _wordcloud_words[i]:=_wordcloud_words[i] rotated (_wordcloud_rotation(rotation,_rotation_bool)) shifted
+ (_position_pt + _random_pt);
+ _wordcloud_words_oriented_bb[i]:=_wordcloud_words_oriented_bb[i] rotated (_wordcloud_rotation(rotation,_rotation_bool)) shifted
+ (_position_pt + _random_pt);
+ _wordcloud_pathwords[i]:=_wordcloud_pathwords[i] rotated (_wordcloud_rotation(rotation,_rotation_bool)) shifted
+ (_position_pt + _random_pt);
+ endfor;
+enddef;
+
+
+vardef dotproduct(expr a,b)=
+ save _output;
+ _output := (xpart a)*(xpart b)+(ypart a)*(ypart b);
+ _output
+enddef;
+
+vardef normvec(expr p)=
+ p/(sqrt((xpart p)**2+(ypart p)**2))
+enddef;
+
+vardef bb_projection(expr p,a)=
+ % p : edge of a rectangle (pair)
+ % a : axis of proj
+ dotproduct(p,a)
+enddef;
+
+% intersection of oriented rectangel
+vardef rectangles_intersection(expr tic,tac)=
+ % tic, tac, two rectangular path (closed)
+ save x,y,a,b,normedge,edge,_min,_max,_dotprod,_output,_minEdge,_maxEdge;
+ pair normedge,edge;
+ boolean _output;
+ _output:=false;
+ numeric x[],y[],a[],b[];
+ (x1,y1) = point 1 of tic;
+ (x2,y2) = point 2 of tic;
+ (x3,y3) = point 3 of tic;
+ (x4,y4) = point 4 of tic;
+ (a1,b1) = point 1 of tac;
+ (a2,b2) = point 2 of tac;
+ (a3,b3) = point 3 of tac;
+ (a4,b4) = point 4 of tac;
+ for i=1 upto 4:
+ %show (x[i],y[i]);
+ endfor;
+ for i=1 upto 4:
+ %show (a[i],b[i]);
+ endfor;
+ %draw (a1,b1)--(a2,b2)--(a3,b3)--(a4,b4);
+ for i=1 upto 2: % on prend deux côtés perpendiculaire du rectangle 1
+ %show "premier";
+ %show i;
+ edge:=(x[i+1],y[i+1])-(x[i],y[i]);
+ %show edge;
+ normedge:=normvec(edge);
+ for j=1 upto 4: %pour chaque point de deuxième triangle on projette sur
+ % l’axe du côté du rectangle 1 qu’on considère
+ _dotprod:=dotproduct((x[j],y[j]),normedge);
+ if(j=1):
+ _minEdge:=_dotprod;
+ _maxEdge:=_dotprod;
+ fi
+ if(_dotprod<_minEdge):
+ _minEdge:=_dotprod;
+ else:
+ if(_dotprod>_maxEdge):
+ _maxEdge:=_dotprod;
+ fi
+ fi
+ %show _minEdge;
+ %show _maxEdge;
+ endfor;
+ %show _minEdge;
+ %show _maxEdge;
+
+ for j=1 upto 4: %pour chaque point de deuxième triangle on projette sur
+ % l’axe du côté du rectangle 1 qu’on considère
+ _dotprod:=dotproduct((a[j],b[j]),normedge);
+ if(j=1):
+ _min:=_dotprod;
+ _max:=_dotprod;
+ fi
+ if(_dotprod<_min):
+ _min:=_dotprod;
+ else:
+ if(_dotprod>_max):
+ _max:=_dotprod;
+ fi
+ fi
+ endfor;
+ %show _min;
+ %show _max;
+ if (_min>_maxEdge) or (_max<_minEdge):
+ %show "OK";
+ _output:=true;
+ fi
+ endfor; %the other way
+ for i=1 upto 2: % on prend deux côtés perpendiculaire du rectangle 1
+ %show "deuxième";
+ %show i;
+ edge:=(a[i+1],b[i+1])-(a[i],b[i]);
+ %show edge;
+ normedge:=normvec(edge);
+ for j=1 upto 4: %pour chaque point de deuxième triangle on projette sur
+ % l’axe du côté du rectangle 1 qu’on considère
+ _dotprod:=dotproduct((a[j],b[j]),normedge);
+ if(j=1):
+ _minEdge:=_dotprod;
+ _maxEdge:=_dotprod;
+ fi
+ if(_dotprod<_minEdge):
+ _minEdge:=_dotprod;
+ else:
+ if(_dotprod>_maxEdge):
+ _maxEdge:=_dotprod;
+ fi
+ fi
+ %show _minEdge;
+ %show _maxEdge;
+ endfor;
+ %show _minEdge;
+ %show _maxEdge;
+
+ for j=1 upto 4: %pour chaque point de deuxième triangle on projette sur
+ % l’axe du côté du rectangle 1 qu’on considère
+ _dotprod:=dotproduct((x[j],y[j]),normedge);
+ if(j=1):
+ _min:=_dotprod;
+ _max:=_dotprod;
+ fi
+ if(_dotprod<_min):
+ _min:=_dotprod;
+ else:
+ if(_dotprod>_max):
+ _max:=_dotprod;
+ fi
+ fi
+ endfor;
+ if (_min>_maxEdge) or (_max<_minEdge):
+ %show "OK";
+ _output:=true;
+ fi
+ endfor;
+ not _output
+enddef;
+
diff --git a/graphics/metapost/contrib/macros/wordcloud/scripts/wordcloud.lua b/graphics/metapost/contrib/macros/wordcloud/scripts/wordcloud.lua
new file mode 100644
index 0000000000..209ab0ca71
--- /dev/null
+++ b/graphics/metapost/contrib/macros/wordcloud/scripts/wordcloud.lua
@@ -0,0 +1,224 @@
+--[[
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% wordcloud %%
+%% drawing wordclouds %%
+%% with METAPOST and Lua %%
+%% chupin@ceremade.dauphine.fr %%
+%% Version 0.1 (aout 2023) %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% This work may be distributed and/or modified under the conditions of
+% the LaTeX Project Public License, either version 1.3c of this license
+% or (at your option) any later version. The latest version of this
+% license is in http://www.latex-project.org/lppl.txt
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+]]
+function wc_file2string(file)
+ local f = assert(io.open(file, "rb"))
+ local content = f:read("*all")
+ f:close()
+ return content
+end
+
+function wc_table_concat(t1,t2)
+ for i=1,#t2 do
+ t1[#t1+1] = t2[i]
+ end
+ return t1
+end
+
+function wc_ignor_fr()
+ local output;
+ output= {"et", "donc", "alors", "les", "ainsi", "des", "que", "qui", "sont", "par", "dans","est","pour","une","peut","avec","sans","Les","son","sur","ces","ses","tandis","quand"}
+ return output
+end
+
+function wc_ignor_en()
+ local output;
+ output= {"and", "so", "the", "the", "hence", "some", "that", "are", "is", "have", "has","in","on","could","should","with","be","this","these","where","when","not","with","can",}
+ return output
+end
+
+-- global variable for ignored words
+wordcloud_ignor_words = {};
+wc_table_concat(wordcloud_ignor_words,wc_ignor_fr())
+wc_table_concat(wordcloud_ignor_words,wc_ignor_en())
+
+-- function to add list of words to be ignored
+function wc_add_ignored_words(tab)
+ wc_table_concat(wordcloud_ignor_words,tab)
+end
+
+-- function to build a tab from a string of the form
+-- word1,word2,word3,etc.
+function wc_string_to_tab(strWord)
+ strWord=string.gsub(strWord, "%s+", "") -- space delete
+ local tab
+ tab = string.explode(strWord, ",")
+ return tab
+end
+
+function wc_build_word_table(mystr)
+ local loc_str = mystr;
+ local ignor_chars = {";","’","'","\"","{","}","[","]","(",")","…",".","?","!","$","\\","#","<",">","«","»","+","*","-","/","=","%%", "€",":","~"}
+ loc_str = loc_str:gsub('[%p%c]+',' ')
+ for i=1,#ignor_chars do
+ loc_str = loc_str:gsub('['..ignor_chars[i]..']+',' ')
+ end
+ for i=1,#wordcloud_ignor_words do
+ loc_str = loc_str:gsub(' '..wordcloud_ignor_words[i]..' ',' ')
+ end
+ loc_str = loc_str:gsub(' LaTeX ',' \\LaTeX ')
+ loc_str = loc_str:gsub(' TeX ',' \\TeX ')
+ local t = {}
+ for i in loc_str:gmatch("%S+") do
+ t[#t + 1] = i
+ end
+ -- delete 2 size words
+ local id_two={}
+ for i=1,#t do
+ if(string.len(t[i])<=2) then
+ table.insert(id_two,i)
+ end
+ end
+ for i=#id_two,1,-1 do
+ table.remove(t,id_two[i])
+ end
+ return t
+end
+
+function wc_build_table_weight(t)
+ local weight = {}
+ for _, v in ipairs(t) do
+ weight[v] = (weight[v] or 0) + 1
+ end
+ return weight
+end
+
+function wc_table_to_tabular(table_weight)
+ local total_occ = 0
+ local tabular_weight = {}
+ for k,v in pairs(table_weight) do
+ total_occ=total_occ+v
+ end
+ local i=0
+ for k,v in pairs(table_weight) do
+ i=i+1
+ tabular_weight[i] ={}
+ tabular_weight[i][1]=k
+ tabular_weight[i][2]=v/total_occ
+ end
+ table.sort(tabular_weight,function (k1, k2) return k1[2] > k2[2] end)
+ return tabular_weight
+end
+
+function wc_build_mp_code(table_weight,maximum,rotation)
+ -- optional arguments
+ maximum = maximum or 50
+ rotation = rotation or 0
+
+ local total_occ = 0
+ local tabular_weight = wc_table_to_tabular(table_weight)
+
+
+ local str_mp=[[
+ string words[];
+ numeric weights[];
+ ]]
+ local i=0
+ for i=1, #tabular_weight do
+
+ str_mp=str_mp.."words["..i.."]:=\""..tabular_weight[i][1].."\";"
+ str_mp=str_mp.."weights["..i.."]:="..tabular_weight[i][2]..";"
+ if (i>=maximum) then
+ break
+ end
+ end
+ str_mp=str_mp.."draw_wordcloud(words,weights,"..rotation..","..math.min(maximum,#tabular_weight)..");"
+ return str_mp
+end
+
+function wc_list_to_table(list)
+ -- list of words and weights (word1,weight1);(word2,weight2); etc.
+ local table_weight = {}
+ local pair = string.explode(list, ";")
+ local lgth=#pair
+ for i=1,lgth do
+ word,weight=string.match(pair[i],"%((.+),(.+)%)")
+ table_weight[word]=weight
+ end
+ return table_weight
+end
+
+function wc_size_of_table(table)
+ local lengthNum = 0
+
+ for k, v in pairs(table) do -- for every key in the table with a corresponding non-nil value
+ lengthNum = lengthNum + 1
+ end
+ return lengthNum
+end
+
+
+function wc_build_color_list(colors)
+ -- list of LaTeX colors separated with colons
+ local out = ""
+ local pair = string.explode(colors:sub(1,-2), ";") -- sub(1,-2) to delete last ;
+ local lgth=#pair
+ for i=1,lgth do
+ out=out.."wordcloud_colors["..i.."]:="..pair[i]..";";
+ end
+ out=out.."wordcloud_colors_number:="..lgth..";"
+ return out
+end
+
+-- build mp code for the wordcloud of a list given in LaTeX command
+function wc_build_wordcloud(str,rotation,scale,margin,usecolor,colors)
+
+ maximum = maximum or 50
+ local table = wc_list_to_table(str)
+ local lgth_table = wc_size_of_table(table)
+ local output
+ output= [[\begin{mplibcode}[wordcloud]
+ input wordcloud
+ beginfig(0);
+ ]]
+ if(usecolor=="true") then
+ output = output.."wordcloud_use_color(true);"
+ if(colors~="") then
+ output=output..wc_build_color_list(colors)
+ end
+ end
+ output = output.."set_wordcloud_scale("..scale..");"
+ output = output.."set_box_margin("..margin..");"
+ output = output..wc_build_mp_code(table,lgth_table,rotation)
+ output = output.."endfig;\\end{mplibcode}"
+ tex.sprint(output)
+end
+
+
+-- build mp code for the wordcloud of a file given in LaTeX command
+function wc_build_wordcloud_file(file,number,rotation,scale,margin,usecolor,colors)
+ local str = wc_file2string(file)
+
+ local words = wc_build_word_table(str)
+
+ local table_weight = wc_build_table_weight(words)
+ local output
+ output= [[\begin{mplibcode}[wordcloud]
+ input wordcloud
+ beginfig(0);
+ ]]
+ if(usecolor=="true") then
+ output = output.."wordcloud_use_color(true);"
+ if(colors~="") then
+ output=output..wc_build_color_list(colors)
+ end
+ end
+ output = output.."set_wordcloud_scale("..scale..");"
+ output = output.."set_box_margin("..margin..");"
+ output = output..wc_build_mp_code(table_weight,number,rotation)
+ output = output.."endfig;\\end{mplibcode}"
+ tex.sprint(output)
+end
diff --git a/graphics/metapost/contrib/macros/wordcloud/tex/wordcloud.sty b/graphics/metapost/contrib/macros/wordcloud/tex/wordcloud.sty
new file mode 100644
index 0000000000..6fce2b03d9
--- /dev/null
+++ b/graphics/metapost/contrib/macros/wordcloud/tex/wordcloud.sty
@@ -0,0 +1,149 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% wordcloud %%
+%% drawing wordclouds %%
+%% with METAPOST and Lua %%
+%% chupin@ceremade.dauphine.fr %%
+%% Version 0.1 (aout 2023) %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% This work may be distributed and/or modified under the conditions of
+% the LaTeX Project Public License, either version 1.3c of this license
+% or (at your option) any later version. The latest version of this
+% license is in http://www.latex-project.org/lppl.txt
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\NeedsTeXFormat{LaTeX2e}%
+\def\PackageName{wordcloud}%
+\def\fileversion{v0.1}%
+\def\filedate{2023/07/26}%
+\ProvidesPackage{wordcloud}[\filedate\space\fileversion]%
+%
+% package to load
+\RequirePackage{luamplib}%
+
+%
+% load the lua code
+\directlua{require("wordcloud.lua")}%
+
+\ExplSyntaxOn
+
+% variable globale
+\tl_new:N \g__wc_wordcloud_scale_tl
+\tl_new:N \g__wc_wordcloud_rotate_tl
+\tl_new:N \g__wc_wordcloud_margin_tl
+
+% definitions des clés/valeurs pour la commande \wordcloud
+\keys_define:nn{wc/wordcloud}{%
+ scale .tl_gset:N = \g__wc_wordcloud_scale_tl,
+ scale .value_required:n = true,
+ rotate .tl_gset:N = \g__wc_wordcloud_rotate_tl,
+ rotate .value_required:n = true,
+ margin .tl_gset:N = \g__wc_wordcloud_margin_tl,
+ margin .value_required:n = true,
+ usecolor .bool_set:N = \g__wc_wordcloud_usecolor_bool,
+ colors .clist_set:N = \g__wc_wordcloud_colors_clist, % list of LaTeX colors
+ colors .value_required:n = true,
+% usecolor .default:n = true,
+}
+
+% local variable to stock metapost colors list
+\tl_new:N \l_colors_list_tl%
+
+% function to build a wordcloud from a list of the form :
+% (word1,weight1);(word2,weight2);etc.
+\NewDocumentCommand\wordcloud{ o m }{%
+ % mandatory argument : list (word1,weight1);(word2,weight2);etc.
+ % optional arguments :
+ % scale=<value> (default 1)
+ % rotation=<value> (default 0)
+ % margin=<value> (default 0.3pt)
+ % usecolor=true/false (default false)
+ % colors={color1,color2,etc}
+ % pour les clés à valeur par défaut
+ \keys_set:nn { wc/wordcloud } { scale=1 } %
+ \keys_set:nn { wc/wordcloud } { rotate=0 } %
+ \keys_set:nn { wc/wordcloud } { margin=0.3pt } %
+ \keys_set:nn { wc/wordcloud } { colors={} } %
+ \keys_set:nn { wc/wordcloud } { usecolor=false } %
+
+ \tl_clear:N \l_colors_list_tl%
+ \IfNoValueF {#1}
+ {
+ \keys_set:nn { wc/wordcloud } { #1 }
+ }
+
+ % parse the list to build a list of rgb colors for metapost code
+
+ \clist_map_variable:NNn \g__wc_wordcloud_colors_clist \l_onecolor_tl {%
+ \extractcolorspecs{\tl_use:N
+ \l_onecolor_tl}{\wc_onecolor_type}{\wc_onecolor_values}
+ % get the type and values of color (see xcolor doc)
+ \convertcolorspec{\wc_onecolor_type}{\wc_onecolor_values}{rgb}\wc_rgb_values
+ % convert to rgb (see xcolor loc)
+ \tl_gput_right:Nx \l_colors_list_tl {(\wc_rgb_values);} % add value with
+ %parenthesis
+ }%
+
+
+ %\show {coucous}
+ \directlua{%
+ %tex.sprint("test")
+ wc_build_wordcloud("#2",\tl_use:N \g__wc_wordcloud_rotate_tl,\tl_use:N \g__wc_wordcloud_scale_tl,"\tl_use:N \g__wc_wordcloud_margin_tl",\bool_if:NTF \g__wc_wordcloud_usecolor_bool{"true"}{"false"},"\tl_use:N \l_colors_list_tl")
+ }%
+}
+
+
+% function to build a wordcloud from a text file :
+\NewDocumentCommand\wordcloudFile{ o m m}{%
+ % two mandatory arguments : name of the file and number of words for the
+ % wordcloud
+ % optional arguments :
+ % scale=<value> (default 1)
+ % rotation=<value> (default 0)
+ % margin=<value> (default 0.3pt)
+ % usecolor=true/false (default false)
+ % colors={color1,color2,etc}
+
+ % pour les clés à valeur par défaut
+ \keys_set:nn { wc/wordcloud } { scale=1 } %
+ \keys_set:nn { wc/wordcloud } { rotate=0 } %
+ \keys_set:nn { wc/wordcloud } { margin=0.3pt } %
+ \keys_set:nn { wc/wordcloud } { colors={} } %
+ \keys_set:nn { wc/wordcloud } { usecolor=false } %
+ \tl_clear:N \l_colors_list_tl%
+
+ \IfNoValueF {#1}
+ {
+ \keys_set:nn { wc/wordcloud } { #1 }
+ }
+
+ % parse the list to build a list of rgb colors for metapost code
+
+ \clist_map_variable:NNn \g__wc_wordcloud_colors_clist \l_onecolor_tl {%
+ \extractcolorspecs{\tl_use:N
+ \l_onecolor_tl}{\wc_onecolor_type}{\wc_onecolor_values}
+ % get the type and values of color (see xcolor doc)
+ \convertcolorspec{\wc_onecolor_type}{\wc_onecolor_values}{rgb}\wc_rgb_values
+ % convert to rgb (see xcolor loc)
+ \tl_gput_right:Nx \l_colors_list_tl {(\wc_rgb_values);} % add value with
+ %parenthesis
+ }%
+
+ %\show {coucous}
+ \directlua{%
+ wc_build_wordcloud_file("#2",#3,\tl_use:N \g__wc_wordcloud_rotate_tl,\tl_use:N \g__wc_wordcloud_scale_tl,"\tl_use:N \g__wc_wordcloud_margin_tl",\bool_if:NTF \g__wc_wordcloud_usecolor_bool{"true"}{"false"},"\tl_use:N \l_colors_list_tl")
+ }%
+}
+
+% function to add words to ignor when a wordcloud is build from a text file
+\NewDocumentCommand\wordcloudIgnoreWords{m}{%
+ % mandatory argument : list of words separated by commas
+ % word1, word2, word3, etc.
+ \directlua{%
+ tab=wc_string_to_tab("#1")
+ wc_add_ignored_words(tab)
+ }%
+}
+
+
+\ExplSyntaxOff \ No newline at end of file
diff --git a/macros/latex/contrib/arraycols/README.md b/macros/latex/contrib/arraycols/README.md
index 5c316f85f8..6cdafd4ee7 100644
--- a/macros/latex/contrib/arraycols/README.md
+++ b/macros/latex/contrib/arraycols/README.md
@@ -7,8 +7,8 @@ This small package provides new column types for array and tabular environments,
horizontally and vertically centered,
or with adjusted height for big mathematical expressions.
-The columns width can be fixed or calculated like in tabularx environments.
-Macros for drawing vertical and horizontal rules of variable thickness are also provided.
+The columns width can be either fixed or calculated, similar to tabularx environments.
+Column types or macro for drawing vertical and horizontal rules of variable thickness are also provided.
## Installation
diff --git a/macros/latex/contrib/arraycols/arraycols.dtx b/macros/latex/contrib/arraycols/arraycols.dtx
index 9a62fa7f1c..43dc0fe7ea 100644
--- a/macros/latex/contrib/arraycols/arraycols.dtx
+++ b/macros/latex/contrib/arraycols/arraycols.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 2019-2020 by Antoine Missier <antoine.missier@ac-toulouse.fr>
+% Copyright (C) 2019-2023 by Antoine Missier <antoine.missier@ac-toulouse.fr>
%
% This file may be distributed and/or modified under the conditions of
% the LaTeX Project Public License, either version 1.3 of this license
@@ -19,8 +19,8 @@
%</driver>
%<*package>
\NeedsTeXFormat{LaTeX2e}[2005/12/01]
-\ProvidesPackage{arraycols}
- [2020/11/23 v1.1 .dtx arraycols file]
+\ProvidesPackage{arraycols}
+ [2023/08/09 v1.3 .dtx arraycols file]
%</package>
%<*driver>
\documentclass{ltxdoc}
@@ -29,23 +29,23 @@
\usepackage[french,english]{babel}
\usepackage{lmodern}
\usepackage{arraycols}
-\DisableCrossrefs
+\DisableCrossrefs
%\CodelineIndex
%\RecordChanges
\usepackage{hyperref}
\hypersetup{%
colorlinks,
- linkcolor=blue,
+ linkcolor=blue,
citecolor=blue,
- pdftitle={arraycols},
- pdfsubject={LaTeX package},
+ pdftitle={arraycols},
+ pdfsubject={LaTeX package},
pdfauthor={Antoine Missier}
}
-\MakeShortVerb{*}
+\MakeShortVerb{"}
\begin{document}
- \DocInput{arraycols.dtx}
- %\PrintChanges
- %\PrintIndex
+\DocInput{arraycols.dtx}
+%\PrintChanges
+%\PrintIndex
\end{document}
%</driver>
% \fi
@@ -73,52 +73,53 @@
% \changes{v1.0}{2019/06/17}{English translation by François Bastouil}
% \changes{v1.1}{2020/11/23}{Incompatibility with tablestyles mentioned,
% minor changes in documentation}
+% \changes{v1.2}{2021/09/20}{Incompatibility with siunitx package (called by pstricks-add) is solved}
+% \changes{v1.3}{2023/09/08}{Small changes in the documentation}
%
% \GetFileInfo{arraycols.sty}
%
% \title{The \textsf{arraycols} package\thanks{This document
% corresponds to \textsf{arraycols}~\fileversion, dated \filedate.
-% Thanks to François Bastouil for help in English translation.}}
+% Thanks to François Bastouil for assistance with the English translation.}}
% \author{Antoine Missier \\ \texttt{antoine.missier@ac-toulouse.fr}}
-% \date{November 23, 2020}
+% \date{August 9, 2023}
% \maketitle
%
% \section{Introduction}
%
-% This package provides new predefined column types to typeset tables in addition to
-% the \textsf{array} package by Frank Mittelbach and David Carlisle~\cite{ARRAY}
-% (loaded by \textsf{arraycols}) and also a command to draw wide horizontal rules.
-% Here is a summary of the column types and macro, defined by \textsf{arraycols},
-% which we detail in the next section.
+% This package introduces new predefined column types for tables, alongside
+% the \textsf{array} package by Frank Mittelbach and David Carlisle~\cite{ARRAY}. It also includes a command for wide horizontal rule drawing.
+% Below is a summary of the column types and macro defined by \textsf{arraycols},
+% with further to follow.
%
% \begin{center}\small \setlength{\extrarowheight}{1pt}
% \begin{tabular}{|cIm{7.9cm}|}
% \whline
% \multicolumn{2}{|c|}{\thead{Column definitions}} \\
% \Xhline{0.7pt}
-% \texttt{L} & Left adjusted column (LR mode in \texttt{array} environments
-% or math mode in \texttt{tabular} environment) \\
+% \texttt{L} & Left adjusted column (applicable in LR mode for \texttt{array} environments
+% or math mode for \texttt{tabular} environment) \\
% \hline
-% \texttt{C} & Centered adjusted column (idem) \\
+% \texttt{C} & Centered-adjusted column (similar to L but centered) \\
% \hline
-% \texttt{R} & Right adjusted column (idem) \\
+% \texttt{R} & Right-adjusted column (similar to L but right-adjusted) \\
% \hline
-% \texttt{t}\marg{width} & Text column (LR mode) of fixed \meta{width} like \texttt{p},
-% but horizontally and vertically centered \\
+% \texttt{t}\marg{width} & Text column of fixed \meta{width} (LR mode), similar to \texttt{p},
+% but with horizontal and vertical centering \\
% \hline
% \texttt{x} & Centered column in math mode with adjusted height to
% avoid touching the horizontal rules \\
% \hline
-% \texttt{y} & Left aligned column in math mode with adjusted height \\
+% \texttt{y} & Left-aligned column in math mode with adjusted height \\
% \hline
-% \texttt{z}\marg{width} & Centered column in math mode with adjusted height, like \texttt{x},
-% and fixed \meta{width} \\
+% \texttt{z}\marg{width} & Centered column in math mode, similar to \texttt{x}, with adjusted height,
+% but with fixed \meta{width} \\
% \hline
% \texttt{T} & Centered text column with adjusted width
% for \texttt{tabularx} environments (calculated like \texttt{X} column) \\
% \hline
-% \texttt{Z} & Centered column for \texttt{tabularx}, like \texttt{T},
-% but in math mode with adjusted height, like \texttt{x} and \texttt{z} \\
+% \texttt{Z} & Centered column for \texttt{tabularx}, similar to \texttt{T},
+% but in math mode with adjusted height, like \texttt{x} and \texttt{z} \\
% \hline
% \texttt{I} & Thick vertical rule (1\,pt) \\
% \hline
@@ -131,63 +132,64 @@
% \end{tabular}
% \end{center}
%
-% Note that if a column type has already been defined previously,
-% it will be overwritten with a warning message.
+% Note that if a column type has been previously defined,
+% using \textsf{arraycols} will overwrite it and display a warning message.
%
-% Besides \textsf{array}, \textsf{arraycols} loads the \textsf{cellspace} package~\cite{CELLSP},
-% necessary for the \texttt{x}, \texttt{y}, \texttt{z} and \texttt{Z} types of columns and
-% \textsf{tabularx}~\cite{TABX}, necessary for \texttt{T} and \texttt{Z},
-% as well as \textsf{makecell}~\cite{MKCELL} for various alignments of multilined table cells.
-% The \textsf{tablestyles} package~\cite{TBLSTY} defines also L, C, R, Z column types
-% but in a different way, nevertheless this package is incompatible with \textsf{makecell}
-% and therefore with \textsf{arraycols} too.
+% In addition to loading the \textsf{array} package, \textsf{arraycols} also requires the \textsf{cellspace} package~\cite{CELLSP},
+% which is necessary for the \texttt{x}, \texttt{y}, \texttt{z} and \texttt{Z} column types. Moreover it relies on
+% \textsf{tabularx}~\cite{TABX} for \texttt{T} and \texttt{Z} column types and
+% loads \textsf{makecell}~\cite{MKCELL} for creation of multilined tabular cells.
+% It's worth mentioning that the \textsf{tablestyles} package~\cite{TBLSTY}
+% also defines L, C, R and Z column types differently.
+% Nevertheless, \textsf{tablestyles} is incompatible with \textsf{makecell}
+% and consequently with \textsf{arraycols} as well.
%
-% With a very short code, this package does not claim to develop new macros.
-% Its main action is to combine and set features coming from other packages.
+% Despite its minimal code, this package does not aim to introduce new macros.
+% Its main purpose is to combine and configure features derived from other packages.
%
% \section{Usage}
%
%\medskip
% \DescribeEnv{L} \DescribeEnv{C} \DescribeEnv{R}
% Referring to an example from the \textsf{array} package documentation,
-% \textsf{arraycols} provides the |L|, |C|, |R| columns types
-% which reverse the mathematical mode.
-% Then we can use them to get centered, left-aligned or right-aligned
-% LR-mode in an \texttt{array} environment or math-mode in a \texttt{tabular} environment.
-% For instance, the declaration *\begin{tabular}{|l|C|r|}* sets centered mathematical mode
-% in the second column and declaration *\begin{array}{|L|c|c|}*
-% sets text mode, left aligned in the first column\footnote{The declarations
+% the |L|, |C| and |R| columns types, offered by \textsf{arraycols}, provide the convenience
+% of reversing the mathematical mode.
+% This allows to achieve centered, left-aligned or right-aligned
+% LR-mode in an \texttt{array} environment or an equivalent math-mode
+% in a \texttt{tabular} environment.
+% For instance, using the declaration "\begin{tabular}{|l|C|r|}" sets the second column
+% in centered mathematical mode. Similarly, using the declaration "\begin{array}{|L|c|c|}"
+% sets the first column\footnote{The declarations
% \texttt{L, C, R} do not work in a \texttt{tabularx} environment.
-% Note that the \textsf{tabulary} package by David Carlisle~\cite{TABY}
-% already defines the \texttt{L, C, R, J} column types for particular alignments
-% in tables of same type as \texttt{tabularx},
-% but there is no incompatibility because these column definitions
-% only apply in \texttt{tabulary} environments.
-% }.
+% Additionally, the \mbox{\textsf{tabulary}} package by David Carlisle~\cite{TABY}
+% already defines the \texttt{L, C, R} and \texttt{J} column types for specific alignments
+% in tables of the same type as \texttt{tabularx}.
+% However there is no incompatibility with \textsf{arraycols} because these column definitions
+% apply exclusively in \texttt{tabulary} environments.
+% } in text mode, left-aligned.
%
% \medskip
% \DescribeEnv{t\marg{width}}
-% The new column type definition \texttt{t}\{\meta{width}\} (text in LR-mode)
-% produces horizontal and vertical centering in the column unlike the classics
+% The newly introduced column type definition \texttt{t}\{\meta{width}\} (text in LR-mode)
+% achieves both horizontal and vertical centering within the column. It is distinct from the traditional
% \texttt{p}\marg{width} (in standard \LaTeX) and \texttt{m}\marg{width}
-% (from the \textsf{array} package) which produce left aligned text (visible when the column
-% is wider than the text inside).
+% (from the \textsf{array} package) column types, which are equivalent to
+% "\parbox[t]" or "\parbox".
%
% \medskip
% \DescribeEnv{x} \DescribeEnv{y}
-% To ensure sufficient height for rows, for instance in displaymath mode
-% formulas, we provide the columntypes \texttt{x} (centered)
+% In order to guarantee adequate row heights, especially for displaymath mode
+% formulas, the package includes the column types \texttt{x} (centered)
% and \texttt{y} (left aligned), based on the \textsf{cellspace} package
% by Josselin Noirel~\cite{CELLSP}.
-% They allow automatic adjustment of row heights to avoid touching the
-% horizontal rules when content is too high.
-% Although \textsf{cellspace} is defined \emph{a priori} for \texttt{tabular} environments,
-% the new \texttt{x} and \texttt{y} column types, defined by \textsf{arraycols},
-% produce a column in mathematical mode with good adjustment,
-% either in a \texttt{tabular} or in an \texttt{array} environment.
-%
-% Look at the following examples produced with
-% *\begin{array}{|c|}* and with *\begin{array}{|x|}*.
+% These column types allow automatic adjustment of row heights to prevent any overlap with
+% horizontal rules in cases where the content is too tall.
+% While \textsf{cellspace} is initially designed for \texttt{tabular} environments,
+% the new \texttt{x} and \texttt{y} column types, introduces by \mbox{\textsf{arraycols}},
+% generate mathematically well-adjusted columns.
+% They are applicable in both \texttt{tabular} and \texttt{array} environments.
+% Examine the following examples created using
+% "\begin{array}{|c|}" and "\begin{array}{|x|}".
% \[
% \begin{array}{|c|}
% \hline
@@ -220,46 +222,54 @@
% \og the \textsf{amsmath} package can be loaded beforehand with other
% packages (such as \texttt{empheq} or \texttt{mathtools}),
% were an incompatibility to arise from one’s loading it later\fg.}
-% for a good management of row heights in matrix tables.
+% to effectively manage row heights in matrix tables.
+% Another option of \textsf{cellspace}, \texttt{column=Q}
+% (with \texttt{S} being the default in \textsf{cellspace})\footnote{The
+% selection of the letter Q to substitute the default column modifier S of the \textsf{cellspace}
+% package is here arbitrary.}, was necessary to prevent any compatibility issues
+% with the \textsf{siunitx} package (also loaded by \textsf{pstricks-add}).
+% The \texttt{Q} column type serves as a \og modifier \fg{}
+% that, when combined with the traditional
+% column types \texttt{l, c, r}, permits the adjustment of cell height.
%
% \medskip
-% Notice that another package, \textsf{booktabs}~\cite{BOOK}, also provides
-% an excellent adjustment of row heights, but unfortunately, it doesn't handle height
-% of vertical separators *|*.
-% To get the same vertical adjustment as \textsf{booktabs},
-% we set the \textsf{cellspace} parameters as follows:\\
-% |\setlength{\cellspacetoplimit}{3pt}|, \\
-% |\setlength{\cellspacebottomlimit}{2pt}|.
+% Notice that another package, \textsf{booktabs}~\cite{BOOK}, also offers
+% excellent row height adjustment. However, regrettably, it doesn't handle the height
+% of vertical separators "|".
+% In order to achieve a similar vertical adjustment as \textsf{booktabs},
+% we configure the \textsf{cellspace} parameters as follows:\\
+% "\setlength{\cellspacetoplimit}{3pt}", \\
+% "\setlength{\cellspacebottomlimit}{2pt}".
%
-% We should also mention the \textsf{tabls} package by Donald Arneseau~\cite{TABLS}
+% Additionally, it's worth mentioning the \textsf{tabls} package by Donald Arneseau~\cite{TABLS}
% that makes a good adjustment of row heights as well, but it is incompatible
% with the \textsf{array} and \textsf{numprint} packages.
%
% \medskip
-% At last, it is also possible to make manual adjustments with the |\vstrut| command
-% from the \textsf{spacingtricks} package~\cite{SPA}, or |\gape| and |\Gape|
+% Finally, manual adjustments can also be achieved using the "\vstrut" command
+% from the \textsf{spacingtricks} package~\cite{SPA}, or by utilizing "\gape" and "\Gape"
% from the \textsf{makecell} package~\cite{MKCELL},
-% or |\bigstrut| from the \textsf{bigstrut} package~\cite{STRUT}.
+% as well as employing "\bigstrut" from the \textsf{bigstrut} package~\cite{STRUT}.
%
% \medskip
% \DescribeEnv{z\marg{width}}
-% The column type \texttt{z}\marg{width} enables to set the column width,
-% as \texttt{t}\marg{width},
-% but also activates the math mode and adjusts the row height,
-% as \texttt{x}.
+% The \texttt{z}\marg{width} column type allows you to define the column width,
+% just like \texttt{t}\marg{width},
+% and it also activates math mode and adjusts the row height,
+% similar to the \texttt{x} column type.
%
% \medskip
% \DescribeEnv{T} \DescribeEnv{Z}
-% The \textsf{tabularx} package by David Carlisle~\cite{TABX} provides
-% the \texttt{X} column definition whose width is calculated according
-% to the required width for the whole table, and with left alignment
-% as for \texttt{p}\marg{width}.
-% *\begin{tabularx}{8cm}{|c|X|X|}* adjusts the width of the \texttt{X} columns
-% for a total witdh of the table equals to 8\,cm. As a complement, we propose
-% the \texttt{T} declaration, doing the same thing but with horizontal centering
-% and \texttt{Z} which furthermore activates the mathematical mode and adjusts
-% line heights (as \texttt{x} or \texttt{z}). Here is an example with
-% *\begin{tabularx}{\linewidth}{|T|y|x|Z|T|}*.
+% The \textsf{tabularx} package by David Carlisle~\cite{TABX} introduces
+% the \texttt{X} column definition, which calculates its width based on
+% the required width for the entire table. It aligns text to the left
+% akin to \texttt{p}\marg{width}.
+% For instance, using "\begin{tabularx}{8cm}{|c|X|X|}" adjusts the width of the \texttt{X} columns
+% to achieve a total width of 8\,cm. To complement this, we offer
+% the \texttt{T} declaration, which performs a similar function but centers the content horizontally.
+% Additionally the \texttt{Z} declaration goes further by activating mathematical mode and adjusting
+% line heights, comparable to \texttt{x} or \texttt{z}). Here's an example with
+% "\begin{tabularx}{\linewidth}{|T|y|x|Z|T|}".
% \begin{center}
% \begin{tabularx}{\linewidth}{|T|y|x|Z|T|}
% \hline
@@ -267,44 +277,43 @@
% \displaystyle\lim_{\substack{x \to 1\\x>1}} \ln\left(\dfrac{x^2}{x-1}\right) &
% \dfrac{a}{b} &
% \dfrac{a}{b} + \displaystyle \int_{1}^{X} \frac{1}{t}\,\mathrm{d}t &
-% \makecell{a multiline \\ piece of text}\\
+% \makecell{a multi-line \\ piece of text}\\
% \hline
% \end{tabularx}
% \end{center}
-% To keep the perfect aligment of fraction bars in mathematical formulas,
-% cells are not vertically centered, however, to get a proper vertical positioning
-% in the last cell, we have used the powerfull |\makecell| command of
+% In order to maintain precise alignment of fraction bars within mathematical formulas,
+% cells are deliberately not vertically centered. Nevertheless, for achieving accurate vertical positioning
+% within the last cell, we have used the powerful "\makecell" command from
% the \textsf{makecell} package by Olga Lapko~\cite{MKCELL}:
-% |\makecell{a multiline \\ piece of text}|.
+% "\makecell{a multi-line \\ piece of text}".
%
-% \medskip
+% \bigskip
% \DescribeEnv{I} \DescribeEnv{V\marg{thickness}}
-% The column definition \texttt{I} is suggested in The \LaTeX\ Companion~\cite{COMP}
-% and enables to draw a thick vertical line (1\,pt thick) instead of the one obtained
-% with standard declaration *|*. To choose thickness, we propose further column
+% The column definition \texttt{I} is mentioned in The \LaTeX\ Companion~\cite{COMP}
+% and allows for drawing a thicker \emph{vertical} line (1\,pt thick) compared to the one achieved
+% with the standard declaration "|". For selecting the line thickness, we additionally provide the column
% definition \texttt{V}\marg{thickness}\footnote{The definition of \texttt{V}
-% would have been simplified by using an optional argument for \texttt{I}
-% but this way out is not working.}.
+% would have been simplified by utilizing an optional argument for \texttt{I}, but unfortunately, this approach doesn't function.}.
%
% \medskip
% \DescribeMacro{\whline}
-% Likewise, the |\whline| command, proposed in The \LaTeX\ Companion, enables to draw a
-% thick horizontal line (1\,pt thick) instead of the one obtained with |\hline|
-% and the \textsf{makecell} package provides further command |\Xhline|\marg{thickness}
-% enabling to choose the thickness of the horizontal rule.
+% Similarly, the "\whline" command, suggested in The \LaTeX\ Companion, allows for drawing a
+% thicker \emph{horizontal} line (1\,pt thick) compared to the line obtained with "\hline".
+% Moreover, the \textsf{makecell} package provides the command "\Xhline"\marg{thickness}
+% enabling the choice of horizontal rule thickness.
%
% \medskip
-% The introduction table has been typeset with a column declaration \texttt{I}
-% as separator between the two columns of text, and with |\whline| for the horizontal rules
-% at the begin and at the end of the table,
-% and |\Xhline{0.8pt}| for the one following the legend rows.
-% Formatting header lines has been done with |\thead| command from the \textsf{makecell}
-% package. For this command \textsf{arraycols} sets by default:\\
-% |\renewcommand\theadfont{\footnotesize\sffamily}| \\
-% (originally |\footnotesize| only, without |\sffamily|).
-% At last, according to a recommendation of the \textsf{array} package~\cite{ARRAY},
-% 1\,pt has been added to the normal height of every row of this table, with the command
-% |\setlength{\extrarowheight}{1pt}|\footnote{As mentioned
+% The introductory table has been typeset with a column declaration \texttt{I}
+% serving as a separator between the two text columns.
+% Horizontal rules at the beginning and end of the table are accomplished using "\whline",
+% while a "\Xhline{0.8pt}" rule is employed after the legend rows.
+% The formatting of header rows is achieved using the "\thead" command from the \textsf{makecell}
+% package. By default, \textsf{arraycols} sets:
+% "\renewcommand\theadfont{\footnotesize\sffamily}"
+% (initially |\footnotesize| only, without "\sffamily").
+% Lastly, following a recommendation of the \textsf{array} package~\cite{ARRAY},
+% an additional 1\,pt has been added to the standard height of each row within this table. This adjustment is implemented with the command
+% "\setlength{\extrarowheight}{1pt}"\footnote{As stated
% in the \textsf{array} package documentation:
% \og This is important for tables with horizontal lines because those
% lines normally touch the capital letters\fg.}.
@@ -314,7 +323,7 @@
% \section{Implementation}
% \begin{macrocode}
\RequirePackage{array}
-\RequirePackage[math]{cellspace}
+\RequirePackage[math,column=Q]{cellspace}
\RequirePackage{tabularx} % must be loaded after cellspace
\RequirePackage{makecell}
@@ -323,41 +332,41 @@
\newcolumntype{R}{>{$}r<{$}}
\newcolumntype{t}[1]{>{\centering\arraybackslash}m{#1}}
% \end{macrocode}
-% The \textsf{cellspace} package provides the \texttt{S} modifier enabling,
-% when placed before a column declaration, to adjust the height of the content of the cells
-% to avoid to touch horizontal rules. Spacing between the content and the rules
-% is controlled by the parameters
-% |\cellspacetoplimit| and |\cellspacebottomlimit|.
+% The \textsf{cellspace} package offers the \texttt{S} modifier (we used \texttt{Q} instead), which,
+% when placed before a column declaration, allows for the adjustment of cell content height
+% to prevent any overlap with horizontal rules. The spacing between the content and the rules
+% is governed by the parameters
+% "\cellspacetoplimit" and "\cellspacebottomlimit".
%
% \begin{macrocode}
-\newcolumntype{x}{>{$}Sc<{$}}
-\newcolumntype{y}{>{$}Sl<{$}}
+\newcolumntype{x}{>{$}Qc<{$}}
+\newcolumntype{y}{>{$}Ql<{$}}
\setlength{\cellspacetoplimit}{3pt}
\setlength{\cellspacebottomlimit}{2pt}
-\newcolumntype{z}[1]{>{$}S{>{\centering\arraybackslash}p{#1}}<{$}}
+\newcolumntype{z}[1]{>{$}Q{>{\centering\arraybackslash}p{#1}}<{$}}
% \end{macrocode}
-% For the \texttt{z} definition of column, we use \texttt{p} and not \texttt{m}
-% (which automatically centers) in order to keep a correct alignment for mathematical
-% expressions in the cells of a same row.
+% When defining the \texttt{z} column type, we employ the \texttt{p} column type instead of \texttt{m}
+% (which centers content automatically). This choice ensures proper alignment of mathematical
+% expressions within cells of the same row.
% \medskip
% \begin{macrocode}
\newcolumntype{T}{>{\centering\arraybackslash}X}
-\newcolumntype{Z}{>{$}ST<{$}}
+\newcolumntype{Z}{>{$}QT<{$}}
% \end{macrocode}
-% The \texttt{T} columns are not automatically centered. It would be possible to do it
-% with the command |\renewcommand{\tabularxcolumn}[1]{m{#1}}|
+% The \texttt{T} columns are not centered automatically. Although it's possible to achieve this
+% by using the command "\renewcommand{\tabularxcolumn}[1]{m{#1}}"
% (with \texttt{m} instead of default value \texttt{p}),
-% but unfortunately this has a global effect for all the declarations of columns based
-% on \texttt{X}, so \texttt{T} but also \texttt{Z}, and this would lead to disturb
-% alignment of mathematical expressions in the cells of a same row.
+% unfortunately, this approach has a global effect on all column declarations based
+% on \texttt{X}, including \texttt{T} and \texttt{Z}. As a result, it could disrupt the
+% alignment of mathematical expressions within cells of the same row.
% \begin{macrocode}
\newcolumntype{I}{!{\vrule width 1pt}}
\newcolumntype{V}[1]{!{\vrule width #1}}
\newlength\savedwidth
\newcommand{\whline}{%
- \noalign{\global\savedwidth\arrayrulewidth\global\arrayrulewidth 1pt}
- \hline
- \noalign{\global\arrayrulewidth\savedwidth}
+ \noalign{\global\savedwidth\arrayrulewidth\global\arrayrulewidth 1pt}
+ \hline
+ \noalign{\global\arrayrulewidth\savedwidth}
}
\renewcommand\theadfont{\footnotesize\sffamily}
% \end{macrocode}
@@ -378,7 +387,7 @@
% \bibitem{STRUT} \emph{The \textsf{multirow}, \textsf{bigstrut} and \textsf{bigdelim} packages},
% Piet van Oostrum, Øystein Bache, Jerry Leichter, CTAN, v2.4 2019/01/01.
% \bibitem{SPA} \emph{The \textsf{spacingtricks} package}, Antoine Missier,
-% CTAN, v1.0 2019/06/26.
+% CTAN, v1.3 2020/11/02.
% \bibitem{COMP} \emph{The \LaTeX\ Companion}. Frank Mittelbach, Michel Goossens,
% Johannes Braams, David Carlisle, Chris Rowley, 2nd edition, Pearson Education, 2004.
% \end{thebibliography}
diff --git a/macros/latex/contrib/arraycols/arraycols.ins b/macros/latex/contrib/arraycols/arraycols.ins
index 5c6a796f93..567b7a7540 100644
--- a/macros/latex/contrib/arraycols/arraycols.ins
+++ b/macros/latex/contrib/arraycols/arraycols.ins
@@ -1,5 +1,5 @@
%%
-%% Copyright (C) 2019-2020 by Antoine Missier <antoine.missier@ac-toulouse.fr>
+%% Copyright (C) 2019-2023 by Antoine Missier <antoine.missier@ac-toulouse.fr>
%%
%% This file may be distributed and/or modified under the conditions of
%% the LaTeX Project Public License, either version 1.3 of this license
@@ -21,7 +21,7 @@
This is a generated file.
-Copyright (C) 2019-2020 by Antoine Missier <antoine.missier@ac-toulouse.fr>
+Copyright (C) 2019-2023 by Antoine Missier <antoine.missier@ac-toulouse.fr>
This file may be distributed and/or modified under the conditions of
the LaTeX Project Public License, either version 1.3 of this license
diff --git a/macros/latex/contrib/arraycols/arraycols.pdf b/macros/latex/contrib/arraycols/arraycols.pdf
index e00a2109e3..d66dd231be 100644
--- a/macros/latex/contrib/arraycols/arraycols.pdf
+++ b/macros/latex/contrib/arraycols/arraycols.pdf
Binary files differ
diff --git a/macros/latex/contrib/huawei/huawei.dtx b/macros/latex/contrib/huawei/huawei.dtx
index 7546b37e56..7297aae941 100644
--- a/macros/latex/contrib/huawei/huawei.dtx
+++ b/macros/latex/contrib/huawei/huawei.dtx
@@ -50,7 +50,7 @@
%<class>\NeedsTeXFormat{LaTeX2e}
%<class>\ProvidesClass{huawei}
%<*class>
-[2023-08-03 0.17.0 Template for Huawei Documents]
+[2023-08-09 0.18.0 Template for Huawei Documents]
%</class>
%<*driver>
\documentclass{ltxdoc}
@@ -351,42 +351,39 @@ $pdflatex = 'pdflatex %O --shell-escape %S';
\LoadClass[12pt]{article}
% \end{macrocode}
-% Then, we parse package options:
+% Then, we parse class options:
% \changes{v0.15.0}{2022/12/13}{A new package option \texttt{breaks} introduced, which forces all sections to start from a new page.}
-% \begin{macrocode}
-\makeatletter
-\DeclareOption{breaks}{
- \let\huawei@oldsection\section
- \renewcommand\section{\clearpage\huawei@oldsection}
+% \changes{v0.18.0}{2023/08/09}{Now we use \texttt{pfgopts} for parsing class options.}
+% \begin{macrocode}
+\RequirePackage{pgfopts}
+\pgfkeys{
+ /huawei/.cd,
+ breaks/.store in=\huawei@breaks,
+ slides/.store in=\huawei@slides,
+ nosecurity/.store in=\huawei@nosecurity,
+ authordraft/.store in=\huawei@authordraft,
+ nobrand/.store in=\huawei@nobrand,
+ nodate/.store in=\huawei@nodate,
+ nocover/.store in=\huawei@nocover,
+ nopaging/.store in=\huawei@nopaging,
+ landscape/.store in=\huawei@landscape,
+ anonymous/.store in=\huawei@anonymous,
}
-\newif\ifhuawei@dark
-\DeclareOption{dark}{\huawei@darktrue}
-\newif\ifhuawei@slides
-\DeclareOption{slides}{\huawei@slidestrue}
-\newif\ifhuawei@nosecurity
-\DeclareOption{nosecurity}{\huawei@nosecuritytrue}
-\newif\ifhuawei@authordraft
-\DeclareOption{authordraft}{\huawei@authordrafttrue}
-\newif\ifhuawei@nobrand
-\DeclareOption{nobrand}{\huawei@nobrandtrue}
-\newif\ifhuawei@nodate
-\DeclareOption{nodate}{\huawei@nodatetrue}
-\newif\ifhuawei@nocover
-\DeclareOption{nocover}{\huawei@nocovertrue}
-\newif\ifhuawei@nopaging
-\DeclareOption{nopaging}{\huawei@nopagingtrue}
-\newif\ifhuawei@landscape
-\DeclareOption{landscape}{\huawei@landscapetrue}
-\newif\ifhuawei@anonymous
-\DeclareOption{anonymous}{\huawei@anonymoustrue}
-\ProcessOptions\relax
-\makeatother
+\ProcessPgfPackageOptions{/huawei}
+% \end{macrocode}
+
+% Then, we redefine |\section| command in order to break pages for each section:
+% \begin{macrocode}
+\makeatletter\ifdefined\huawei@breaks
+\let\huawei@oldsection\section
+\renewcommand\section{\clearpage\huawei@oldsection}
+\fi\makeatother
% \end{macrocode}
% Then, we set the size of the page:
% \begin{macrocode}
\RequirePackage{geometry}
-\makeatletter\ifhuawei@landscape
+\makeatletter\ifdefined\huawei@landscape
\geometry{paperwidth=16in, paperheight=9in,
left=4in, right=2in, top=1.5in, bottom=1.5in}
\else
@@ -397,7 +394,7 @@ $pdflatex = 'pdflatex %O --shell-escape %S';
% Then, we set the size of the font:
% \begin{macrocode}
-\makeatletter\ifhuawei@slides
+\makeatletter\ifdefined\huawei@slides
\usepackage[fontsize=24pt]{fontsize}
\fi\makeatother
% \end{macrocode}
@@ -529,7 +526,7 @@ $pdflatex = 'pdflatex %O --shell-escape %S';
% Then, we define |\huawei@header|:
% \begin{macrocode}
\makeatletter\newcommand\huawei@header[1]{{%
- \ifhuawei@slides%
+ \ifdefined\huawei@slides%
\setstretch{0.8}%
\fontsize{19pt}{24pt}\selectfont%
\else%
@@ -557,8 +554,8 @@ $pdflatex = 'pdflatex %O --shell-escape %S';
% Then, we define |\huawei@logo|:
% \begin{macrocode}
\makeatletter\newcommand\huawei@logo[1]{
-\def\BLACK{\ifhuawei@dark white\else black\fi}
-\def\BLANK{\ifhuawei@dark black\else white\fi}
+\def\BLACK{\ifdefined\huawei@dark white\else black\fi}
+\def\BLANK{\ifdefined\huawei@dark black\else white\fi}
\begin{tikzpicture}[y=0.80pt, x=0.80pt, yscale=-#1,
xscale=#1, inner sep=0pt, outer sep=0pt]
\begin{scope}[even odd rule,line width=0.800pt]
@@ -706,7 +703,7 @@ xscale=#1, inner sep=0pt, outer sep=0pt]
\fancyhf{}
\makeatletter\fancyfoot[L]{
\huawei@bar
- \ifhuawei@authordraft%
+ \ifdefined\huawei@authordraft%
\begin{textblock}{14}[0.5,0.5](8,8)%
\tikz \node[minimum width=14\TPHorizModule] {%
\fontsize{64}{64}\selectfont\sffamily\scshape%
@@ -717,9 +714,9 @@ xscale=#1, inner sep=0pt, outer sep=0pt]
}\makeatother
\makeatletter\fancyhead[L]{
\ifnum\value{page}=1\else%
- \ifhuawei@nobrand\else%
+ \ifdefined\huawei@nobrand\else%
\begin{textblock}{8}[0,0](1.2,0.2)%
- \huawei@logo{\ifhuawei@slides 1.8\else 1\fi}%
+ \huawei@logo{\ifdefined\huawei@slides 1.8\else 1\fi}%
\end{textblock}%
\fi%
\fi%
@@ -727,7 +724,7 @@ xscale=#1, inner sep=0pt, outer sep=0pt]
\makeatletter\fancyhead[R]{
\begin{textblock}{8}[1,0](15.8,0.2)%
\raggedleft\huawei@header{%
- \ifhuawei@nosecurity\else%
+ \ifdefined\huawei@nosecurity\else%
\thesecurity
\fi%
}%
@@ -737,16 +734,16 @@ xscale=#1, inner sep=0pt, outer sep=0pt]
\begin{textblock}{8}[0,1](1.2,15.8)%
\ifnum\value{page}=1\else%
\huawei@header{\raggedright%
- \ifhuawei@anonymous\else%
+ \ifdefined\huawei@anonymous\else%
\theauthor%
- \ifhuawei@nosecurity\else%
+ \ifdefined\huawei@nosecurity\else%
\ifx\theid\empty\else, \theid\fi
\fi%
- \ifhuawei@nobrand\else%
+ \ifdefined\huawei@nobrand\else%
\newline
\fi%
\fi%
- \ifhuawei@nobrand\else%
+ \ifdefined\huawei@nobrand\else%
\thecompany{}
\fi%
}%
@@ -755,14 +752,14 @@ xscale=#1, inner sep=0pt, outer sep=0pt]
\begin{textblock}{8}[1,1](15.8,15.8)%
\raggedleft\huawei@header{%
\ifnum\value{page}=1\else%
- \ifhuawei@nopaging\else%
+ \ifdefined\huawei@nopaging\else%
Page \#\thepage{} of \pageref*{LastPage}%
- \ifhuawei@nodate\else%
+ \ifdefined\huawei@nodate\else%
\\
\fi%
\fi%
\fi%
- \ifhuawei@nodate\else%
+ \ifdefined\huawei@nodate\else%
\today{} \settimeformat{daytime}\currenttime{}%
\fi%
}%
@@ -789,23 +786,23 @@ xscale=#1, inner sep=0pt, outer sep=0pt]
\ifx\thesubtitle\empty\else%
{\color{gray!50!black}\large\thesubtitle\par}
\fi
- \ifhuawei@nobrand\else%
- \ifhuawei@anonymous\else%
+ \ifdefined\huawei@nobrand\else%
+ \ifdefined\huawei@anonymous\else%
\ifx\thecompany\empty\else%
\thecompany\newline
\fi
\fi
\fi
\ifx\theauthor\empty\else%
- {\scshape\ifhuawei@anonymous
+ {\scshape\ifdefined\huawei@anonymous
Anonymous Authors
\else%
\theauthor
\fi}%
\fi%
- \ifhuawei@anonymous\else%
+ \ifdefined\huawei@anonymous\else%
\ifx\theauthor\empty\else
- \ifhuawei@nobrand\else%
+ \ifdefined\huawei@nobrand\else%
\ifx\theid\empty\else
$\;$/ {\theid}
\fi
@@ -854,7 +851,7 @@ xscale=#1, inner sep=0pt, outer sep=0pt]
\textbf{Disclaimer}: The opinions expressed in
this document are in good faith and
while every care has been taken in preparing it,
- \ifhuawei@nobrand%
+ \ifdefined\huawei@nobrand%
the author%
\else%
\thecompany{}%
@@ -863,7 +860,7 @@ xscale=#1, inner sep=0pt, outer sep=0pt]
of whatever nature in respect of these documents,
including but not limited to the accuracy or completeness
of any information, facts and/or opinions contained therein.
- \ifhuawei@nobrand%
+ \ifdefined\huawei@nobrand%
The author%
\else%
\thecompany{}%
@@ -882,7 +879,7 @@ xscale=#1, inner sep=0pt, outer sep=0pt]
% Then, we define |\PrintFirstPage|:
% \begin{macrocode}
\makeatletter\newcommand\PrintFirstPage[1]{
- \ifhuawei@landscape\else
+ \ifdefined\huawei@landscape\else
\PackageError{huawei}{It's allowed to use
PrintFirstPage only in landscape mode}{Read huawei.pdf
for more information}
@@ -895,7 +892,7 @@ xscale=#1, inner sep=0pt, outer sep=0pt]
\fi
\vspace*{0.5in}
\maketitle
- \ifhuawei@nocover\else
+ \ifdefined\huawei@nocover\else
\begin{textblock}{14}[1,1](14,14)
\raggedleft\includegraphics[height=3.6in]{huawei-cover-picture.pdf}
\end{textblock}
@@ -908,7 +905,7 @@ xscale=#1, inner sep=0pt, outer sep=0pt]
% Then, we define |\PrintLastPage|:
% \begin{macrocode}
\makeatletter\newcommand\PrintLastPage{
- \ifhuawei@landscape\else
+ \ifdefined\huawei@landscape\else
\PackageError{huawei}{It's allowed to use
PrintLastPage only in landscape mode}{Read huawei.pdf
for more information}
@@ -941,7 +938,7 @@ xscale=#1, inner sep=0pt, outer sep=0pt]
from those expressed or implied in the predictive statements.
Therefore, such information is provided for reference purpose
only and constitutes neither an offer nor an acceptance.
- \ifhuawei@nobrand%
+ \ifdefined\huawei@nobrand%
The author%
\else%
\thecompany{}%
@@ -955,31 +952,38 @@ xscale=#1, inner sep=0pt, outer sep=0pt]
% \begin{macro}{\PrintBibliography}
% Then, we define |\PrintBibliography|:
+% \changes{v0.18.0}{2023/08/09}{The bibliography prints in one column unless \texttt{breaks} class option is specified.}
% \begin{macrocode}
-\makeatletter\newcommand\PrintBibliography{
- \setlength\bibitemsep{3pt}
- \AtNextBibliography{\small}
- \newpage
- \raggedright
- \ifhuawei@landscape
- \begin{multicols}{3}\setstretch{0.95}\printbibliography\end{multicols}
- \else
- \begin{multicols}{2}\setstretch{0.95}\printbibliography\end{multicols}
- \fi
+\makeatletter\newcommand\PrintBibliography{%
+ \setlength\bibitemsep{3pt}%
+ \AtNextBibliography{\small}%
+ \ifdefined\huawei@breaks\newpage\fi%
+ \begingroup%
+ \raggedright%
+ \setstretch{0.95}%
+ \ifdefined\huawei@landscape%
+ \begin{multicols}{3}\printbibliography\end{multicols}%
+ \else%
+ \ifdefined\huawei@breaks%
+ \begin{multicols}{2}\printbibliography\end{multicols}%
+ \else
+ \printbibliography%
+ \fi%
+ \fi%
}\makeatother
% \end{macrocode}
% \end{macro}
-% Then, we set the background color of the document:
+% Then, we set the background color of the document, if required by the |dark| class option:
% \begin{macrocode}
-\makeatletter\ifhuawei@dark
- \RequirePackage{pagecolor}
- \pagecolor{black}
- \color{white}
+\makeatletter\ifdefined\huawei@dark
+ \RequirePackage{pagecolor}%
+ \pagecolor{black}%
+ \color{white}%
\fi
% \end{macrocode}
-% Then, we configure layout:
+% Then, we configure the layout:
% \begin{macrocode}
\AtBeginDocument{%
\raggedbottom%
diff --git a/macros/latex/contrib/huawei/huawei.pdf b/macros/latex/contrib/huawei/huawei.pdf
index 8355c298f1..f002dcbce5 100644
--- a/macros/latex/contrib/huawei/huawei.pdf
+++ b/macros/latex/contrib/huawei/huawei.pdf
Binary files differ
diff --git a/macros/latex/contrib/proflycee/doc/ProfLycee-doc.pdf b/macros/latex/contrib/proflycee/doc/ProfLycee-doc.pdf
index 188e150a29..0ef3c920c5 100644
--- a/macros/latex/contrib/proflycee/doc/ProfLycee-doc.pdf
+++ b/macros/latex/contrib/proflycee/doc/ProfLycee-doc.pdf
Binary files differ
diff --git a/macros/latex/contrib/proflycee/doc/ProfLycee-doc.tex b/macros/latex/contrib/proflycee/doc/ProfLycee-doc.tex
index b967adb55c..549e60d405 100644
--- a/macros/latex/contrib/proflycee/doc/ProfLycee-doc.tex
+++ b/macros/latex/contrib/proflycee/doc/ProfLycee-doc.tex
@@ -5,8 +5,8 @@
% arara: lualatex: {shell: yes, synctex: no, interaction: batchmode} if found('log', '(undefined references|Please rerun|Rerun to get)')
\documentclass[a4paper,french,11pt]{article}
-\def\PLversion{2.7.0}
-\def\PLdate{15 juin 2023}
+\def\PLversion{2.7.1}
+\def\PLdate{08 août 2023}
\usepackage{amsfonts}
\usepackage{ProfLycee}
\useproflyclib{piton,minted,pythontex}
@@ -434,7 +434,7 @@ Le {package} \ctex{ProfLycee} charge et utilise les {packages} :
\item \ctex{mathtools}, \ctex{amssymb} ;
\item \ctex{xcolor} avec l' option \textsf{[table,svgnames]} ;
\item \ctex{tikz}, \ctex{pgf}, \ctex{pgffor}, \ctex{nicefrac}, \ctex{nicematrix} ;
- \item \ctex{tcolorbox} avec l'option \textsf{[most]} ;
+ \item \ctex{tcolorbox} avec les librairies \ctex{breakable,fitting,skins,listings,listingsutf8,hooks} ;
\item \ctex{xparse}, \ctex{xstring}, \ctex{simplekv}, \ctex{xinttools} ;
\item \ctex{listofitems}, \ctex{xintexpr} , \ctex{xintbinhex}, \ctex{xintgcd} ;
\item \ctex{tabularray}, \ctex{fontawesome5}, \ctex{randomlist}, \ctex{fancyvrb}.
@@ -7444,6 +7444,8 @@ La grille, créée en \TikZ, est portée par le rectangle de \og coins \fg{} $(0
\part{Historique}
+{\small \bverb|v 2.7.1|~:~~~~Chargement de \textsf{tcolorbox} par librairies (au lieu de \textsf{[most]})
+
{\small \bverb|v 2.7.0|~:~~~~Ajout de la clé \Cle{Frac} pour les axes verticaux (\pageref{reperagetikz})
{\small \bverb| |~:~~~~Fonction de répartition discrète (\pageref{fctrepart})
diff --git a/macros/latex/contrib/proflycee/doc/ProfLycee-exemples-pyluatex.pdf b/macros/latex/contrib/proflycee/doc/ProfLycee-exemples-pyluatex.pdf
index d9a165fe28..757a5a5f34 100644
--- a/macros/latex/contrib/proflycee/doc/ProfLycee-exemples-pyluatex.pdf
+++ b/macros/latex/contrib/proflycee/doc/ProfLycee-exemples-pyluatex.pdf
Binary files differ
diff --git a/macros/latex/contrib/proflycee/doc/ProfLycee-exemples-pyluatex.tex b/macros/latex/contrib/proflycee/doc/ProfLycee-exemples-pyluatex.tex
index c993ade44c..adf46e1690 100644
--- a/macros/latex/contrib/proflycee/doc/ProfLycee-exemples-pyluatex.tex
+++ b/macros/latex/contrib/proflycee/doc/ProfLycee-exemples-pyluatex.tex
@@ -2,11 +2,11 @@
% !TeX TXS-program:compile = txs:///lualatex/[--shell-escape]
\documentclass[french,a4paper,10pt]{article}
-\def\PLver{2.6.9}
+\def\PLver{2.7.1}
\usepackage[margin=1.5cm]{geometry}
\usepackage{ProfLycee}
\useproflyclib{piton}
-\usepackage[executable=python.exe]{pyluatex}
+\usepackage[executable=python,ignoreerrors]{pyluatex}
\usepackage{babel}
\sisetup{locale=FR,output-decimal-marker={,},group-minimum-digits=4}
\usepackage{codehigh}
diff --git a/macros/latex/contrib/proflycee/doc/ProfLycee-exemples-pythontex.pdf b/macros/latex/contrib/proflycee/doc/ProfLycee-exemples-pythontex.pdf
index b8ba967585..8c7e855b09 100644
--- a/macros/latex/contrib/proflycee/doc/ProfLycee-exemples-pythontex.pdf
+++ b/macros/latex/contrib/proflycee/doc/ProfLycee-exemples-pythontex.pdf
Binary files differ
diff --git a/macros/latex/contrib/proflycee/doc/ProfLycee-exemples-pythontex.tex b/macros/latex/contrib/proflycee/doc/ProfLycee-exemples-pythontex.tex
index f25a865eba..2ddbf43ff4 100644
--- a/macros/latex/contrib/proflycee/doc/ProfLycee-exemples-pythontex.tex
+++ b/macros/latex/contrib/proflycee/doc/ProfLycee-exemples-pythontex.tex
@@ -5,7 +5,7 @@
% arara: lualatex: {shell: no, synctex: yes, interaction: batchmode} if found('log', '(undefined references|Please rerun|Rerun to get)')
\documentclass[french,a4paper,10pt]{article}
-\def\PLver{2.5.8}
+\def\PLver{2.7.1}
\usepackage[margin=1.5cm]{geometry}
\usepackage{ProfLycee}
\useproflyclib{pythontex}
diff --git a/macros/latex/contrib/proflycee/doc/ProfLycee-old-doc.pdf b/macros/latex/contrib/proflycee/doc/ProfLycee-old-doc.pdf
deleted file mode 100644
index e88f2d146d..0000000000
--- a/macros/latex/contrib/proflycee/doc/ProfLycee-old-doc.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/latex/contrib/proflycee/doc/ProfLycee-old-doc.tex b/macros/latex/contrib/proflycee/doc/ProfLycee-old-doc.tex
deleted file mode 100644
index cb42767b37..0000000000
--- a/macros/latex/contrib/proflycee/doc/ProfLycee-old-doc.tex
+++ /dev/null
@@ -1,5268 +0,0 @@
-% !TeX TXS-program:compile = txs:///arara
-% arara: lualatex: {shell: yes, synctex: no, interaction: batchmode}
-% arara: pythontex: {rerun: modified} if found('pytxcode', 'PYTHONTEX#py')
-% arara: lualatex: {shell: yes, synctex: no, interaction: batchmode} if found('pytxcode', 'PYTHONTEX#py')
-% arara: lualatex: {shell: yes, synctex: no, interaction: batchmode} if found('log', '(undefined references|Please rerun|Rerun to get)')
-
-\documentclass{article}
-\usepackage[french]{babel}
-\usepackage{mathtools}
-\usepackage{lualatex-math}
-\usepackage{luatexbase}
-\usepackage[math-style=french,bold-style=ISO]{fourier-otf}
-\usepackage{ProfLycee-old}
-\usepackage{tkz-euclide}
-\usetikzlibrary{hobby}
-\usepackage[group-minimum-digits=4]{siunitx}
-\usepackage{fancyvrb}
-\usepackage{fancyhdr}
-\usepackage{multicol}
-%\makeatletter
-% \@addtoreset{section}{part}
-%\makeatother
-%fancy
-\fancyhf{}
-\renewcommand{\headrulewidth}{0pt}
-\lfoot{\sffamily \small [ProfLycee]}
-\cfoot{\sffamily \small - \thepage{} -}
-\rfoot{\hyperlink{matoc}{\small\faArrowAltCircleUp[regular]}}
-
-\usepackage{graphics}
-\usepackage{hvlogos}
-\usepackage{simplekv}
-\usepackage{menukeys}
-\let\tab\relax
-\usepackage{tabto}
-\usepackage{pgf,pgfplots}
-\pgfplotsset{
- compat=newest,
- xlabel near ticks,
- ylabel near ticks
-}
-\usepackage{tkz-tab}
-\tikzstyle{every picture}+=[remember picture]
-\usepackage{listofitems}
-\usepackage{xintexpr}
-\usepackage{codehigh}
-\usepackage{scontents}
-\usepackage{hyperref}
-\urlstyle{same}
-\hypersetup{pdfborder=0 0 0}
-
-\sisetup{locale=FR}
-\usepackage{geometry}
-\geometry{margin=1.5cm}
-\usepackage{newverbs}
-\newverbcommand{\pverb}{\color{purple}}{}
-\newverbcommand{\rverb}{\color{red}}{}
-\newverbcommand{\vverb}{\color{ForestGreen}}{}
-\newverbcommand{\averb}{\color{CadetBlue}}{}
-\newverbcommand{\overb}{\color{orange}}{}
-\newverbcommand{\bverb}{\color{blue}}{}
-\setlength{\parindent}{0pt}
-\definecolor{LightGray}{gray}{0.9}
-
-\def\PLversion{1.3.8}
-\def\PLdate{6 Novembre 2022}
-
-\tcbset{vignettes/.style={%
- nobeforeafter,box align=base,boxsep=0pt,enhanced,sharp corners=all,rounded corners=southeast,%
- boxrule=0.75pt,left=7pt,right=1pt,top=0pt,bottom=0.25pt,%
- }
-}
-\tcbset{vignettelatex/.style={%
- fontupper={\vphantom{pf}\footnotesize\ttfamily},
- vignettes,%
- colframe=CadetBlue,coltitle=white,colback=CadetBlue!5,%
- overlay={\begin{tcbclipinterior}%
- \fill[fill=lightgray!50]($(interior.south west)$) rectangle node[rotate=90]{\tiny \sffamily{\textcolor{CadetBlue}{\scalebox{0.6}[0.75]{\textbf{\LaTeX}}}}} ($(interior.north west)+(5pt,0pt)$);%
- \end{tcbclipinterior}}
- }
-}
-
-\newtcblisting{codetex}[1][]{%
- colback=white,colframe=red!75!black,title={\small \faCode} Code \LaTeX,fonttitle=\sffamily\bfseries,left=3pt,right=3pt,top=2pt,bottom=2pt,#1}
-
-\newtcolorbox{codeattention}[1][]{%
- colback=Yellow!50,colframe=Yellow!50!Black,title={\small \faBomb} Attention,fonttitle=\sffamily\bfseries,left=3pt,right=3pt,top=2pt,bottom=2pt,#1}
-
-\newtcolorbox{codesortie}[1][]{%
- colback=white,colframe=red!75!black,title={\small \faArrowAltCircleRight[regular]} Sortie \LaTeX,fonttitle=\sffamily\bfseries,left=3pt,right=3pt,top=2pt,bottom=2pt,#1}
-
-\newtcolorbox{codeidee}[1][]{%
- colback=white,colframe=PeachPuff!75!black,title={\small \faLightbulb[regular]} Idée(s),fonttitle=\sffamily\bfseries,left=3pt,right=3pt,top=2pt,bottom=2pt,#1}
-
-\newtcolorbox{codeinfo}[1][]{%
- colback=white,colframe=SteelBlue,title={\small \faPuzzlePiece} Information(s),fonttitle=\sffamily\bfseries,left=3pt,right=3pt,top=2pt,bottom=2pt,#1}
-
-\newtcolorbox{codecles}[1][]{%
- colback=white,colframe=ForestGreen!75,title={\small \faPaperclip} Clés et options,fonttitle=\sffamily\bfseries,left=3pt,right=3pt,top=2pt,bottom=2pt,#1}
-
-%petite vignette tex
-\newcommand\ctex[1]{\tcbox[vignettelatex]{#1}}
-
-%gestion de la fenêtre v2 directement dans le tikzpicture
-\tikzset{%
- xmin/.store in=\xmin,xmin/.default=-5,xmin=-5,
- xmax/.store in=\xmax,xmax/.default=5,xmax=5,
- ymin/.store in=\ymin,ymin/.default=-5,ymin=-5,
- ymax/.store in=\ymax,ymax/.default=5,ymax=5,
- xgrille/.store in=\xgrille,xgrille/.default=1,xgrille=1,
- xgrilles/.store in=\xgrilles,xgrilles/.default=0.5,xgrilles=0.5,
- ygrille/.store in=\ygrille,ygrille/.default=1,ygrille=1,
- ygrilles/.store in=\ygrilles,ygrilles/.default=0.5,ygrilles=0.5,
- xunit/.store in=\xunit,unit/.default=1,xunit=1,
- yunit/.store in=\yunit,unit/.default=1,yunit=1
-}
-\newcommand\tgrilles[1][ultra thin,lightgray]{%
- \draw[xstep=\xgrilles,ystep=\ygrilles,#1] (\xmin,\ymin) grid (\xmax,\ymax);%
-}
-\newcommand\tgrillep[1][thin,gray]{%
- \draw[xstep=\xgrille,ystep=\ygrille,#1] (\xmin,\ymin) grid (\xmax,\ymax);%
-}
-
-\newcommand\genfenetre{%
- %styles
- \tikzset{noeudexpl/.style={purple,font=\sffamily\small}}
- \tikzset{portionexpl/.style={orange,thick,<->}}
- \tikzset{expl/.style={midway,inner sep=1pt,above right=0,orange,font=\sffamily\scriptsize,rotate=45}}
- \tikzset{coeffs/.style={CadetBlue!50!black,circle,draw=CadetBlue,thick,fill=CadetBlue!5,font=\small\ttfamily}}
- \tikzset{tangente/.style={teal,line width=1pt,dashed}}
- %grilles & axes
- \tgrilles[line width=0.3pt,lightgray!50]
- \tgrillep[line width=0.6pt,lightgray!50]
- \draw[line width=1.5pt,->,gray] (\xmin,0)--(\xmax,0) ;
- \draw[line width=1.5pt,->,gray] (0,\ymin)--(0,\ymax) ;
- \foreach \x in {0,1,...,10} {\draw[gray,line width=1.5pt] (\x,4pt) -- (\x,-4pt) ;}
- \foreach \y in {0,1,...,6} {\draw[gray,line width=1.5pt] (4pt,\y) -- (-4pt,\y) ;}
-}
-
-\newcommand\gennotice{%
- %notice
- \draw (0,1) node[noeudexpl,below] {point 1} ;
- \draw (4,3.667) node[noeudexpl,above] {point 2} ;
- \draw (7.5,1.75) node[noeudexpl,below] {point 3} ;
- \draw (9,2) node[noeudexpl,above] {point 4} ;
- \draw (10,0) node[noeudexpl,below] {point 5} ;
- \draw[portionexpl] (0,6)--(4,6) node[expl] {portion 1} ;
- \draw[portionexpl] (4,6)--(7.5,6) node[expl] {portion 2} ;
- \draw[portionexpl] (7.5,6)--(9,6) node[expl] {portion 3} ;
- \draw[portionexpl] (9,6)--(10,6) node[expl] {portion 4} ;
- \draw[orange,densely dashed,thick] (4,0)--(4,6) (7.5,0)--(7.5,6) (9,0)--(9,6) (10,0)--(10,6) ;
-}
-
-\newcommand\gentangentes{%
- %tangentes
- \draw[tangente] (0,1)--(1,1) ;
- \draw[tangente,domain=3:5] plot (\x,{-1/3*(\x-9)+2}) ;
- \draw[tangente] (6.5,1.75)--(8.5,1.75) ;
- \draw[tangente,domain=8:10] plot (\x,{-1/3*(\x-9)+2}) ;
- \draw[tangente,domain=9.5:10] plot (\x,{-10*(\x-10)+0}) ;%
-}
-
-\newcommand\listecoeffs[4]{%
- \draw (0,5.5) node[left,CadetBlue,font=\small\ttfamily] {Coeffs} ;
- \node[coeffs] at (2,5.5) {#1} ;
- \node[coeffs] at ({(4+7.5)/2},5.5) {#2} ;
- \node[coeffs] at ({(7.5+9)/2},5.5) {#3} ;
- \node[coeffs] at ({(9+10)/2},5.5) {#4} ;%
-}
-
-\title{%
-\begin{minipage}{0.75\linewidth}
- \begin{tcolorbox}[colframe=yellow,colback=yellow!15]
- \begin{center}
- \begin{tabular}{c}
- \lstinline!ProfLycee!\\
- \\
- Quelques \textit{petites} commandes pour \LaTeX{} (au lycée)
- \end{tabular}
- \end{center}
- \end{tcolorbox}
-\end{minipage}
-}
-\author{
- \begin{tabular}{c}
- Cédric Pierquet\\
- {\ttfamily c pierquet -- at -- outlook . fr}
- \end{tabular}
-}
-\date{Version \PLversion{} -- \PLdate}
-
-\newcommand\Cle[1]{{\bfseries\sffamily\textlangle #1\textrangle}}
-
-\begin{document}
-
-%\AddToShipoutPicture{%
-%\begin{tikzpicture}[remember picture,overlay]
-% \node [anchor=center,yshift=1cm,xshift=-1.5cm] (box\thepage) at (current page.south east){\hyperlink{matoc}{\LARGE\faArrowAltCircleUp[regular]}};
-%\end{tikzpicture}}
-
-\pagestyle{fancy}
-
-\maketitle
-
-\thispagestyle{empty}
-
-{\Large {\bfseries Résumé} : Quelques commandes pour faciliter l'utilisation de \LaTeX{} pour les enseignants de mathématiques en lycée.}
-
-\medskip
-
-\noindent Quelques commandes pour des courbes \textit{lisses} avec gestion des extrema et des dérivées.
-
-Quelques commandes pour simuler une fenêtre de logiciel de calcul formel, en \TikZ.
-
-Quelques environnements (\textsf{tcbox}) pour présenter du code \textsf{python} ou \textsf{pseudocode}.
-
-Quelques environnements (\textsf{tcbox}) pour présenter des commandes dans un terminal (\textsf{win} ou \textsf{mac} ou \textsf{linux}).
-
-Un cartouche (\textsf{tcbox}) pour présenter des codes de partage \textsf{capytale}.
-
-Une commande pour tracer un pavé en droit, en \TikZ, avec création des nœuds liés aux sommets.
-
-Une commande pour simplifier des calculs sous forme fractionnaire.
-
-Une commande pour simplifier l'écriture d'un ensemble, avec espaces \og automatiques \fg.
-
-Une commande pour créer, en \TikZ, la \textit{toile} pour une suite récurrente.
-
-Une commande pour créer, en \TikZ, un cercle trigo avec options.
-
-Une commande pour afficher un petit schéma, en \TikZ, sur le signe d'une fonction affine ou d'un trinôme.
-
-Deux commandes pour, en \TikZ, créer des petits schémas \og de signe \fg.
-
-Une commande pour travailler sur les statistiques à deux variables (algébriques et graphiques).
-
-Quelques commandes pour convertir bin/dec/hex avec certains détails.
-
-Une commande pour, en \TikZ, créer un pixelart avec correction éventuelle.
-
-Une commande pour, en \TikZ, créer un SudoMaths non forcément $9\times9$.
-
-Des commandes pour effectuer des calculs de probas (lois binomiale, exponentielle, de Poisson, normale).
-
-Une commande pour, en \TikZ, créer des arbres de probas \og classiques \fg.
-
-\vspace{1.5cm}
-
-\hfill{}\textit{Merci à Anne pour ses retours et sa relecture !}
-
-\hfill{}\textit{Merci aux membres du groupe \faFacebook{} du \og Coin \LaTeX{} \fg{} pour leur aide et leurs idées !}
-
-\vfill
-
-\hrule
-
-\medskip
-
-\begin{tblr}{width=\linewidth,colspec={X[c]X[c]X[c]X[c]X[c]X[c]},cells={font=\sffamily}}
- {\huge \LaTeX} & & & & &\\
- & {\huge \pdfLaTeX} & & & & \\
- & & {\huge \LuaLaTeX} & & & \\
- & & & {\huge \TikZ} & & \\
- & & & & {\huge \TeXLive} & \\
- & & & & & {\huge \MiKTeX} \\
-\end{tblr}
-
-\medskip
-
-\hrule
-
-\vfill
-
-~
-
-\newpage
-
-\phantomsection
-\hypertarget{matoc}{}
-
-\tableofcontents
-
-\newpage
-
-\part{Introduction}
-
-\section{Le package ProfLycee}
-
-\subsection{\og Philosophie \fg{} du package}
-
-\begin{codeidee}
-Ce \ctex{package}, très largement inspiré (et beaucoup moins abouti !) de l'excellent \ctex{ProfCollege} de C. Poulain et des excellents \ctex{tkz-*} d'A. Matthes, va définir quelques outils pour des situations particulières qui ne sont pas encore dans \ctex{ProfCollege}.
-
-On peut le voir comme un (maigre) complément à \ctex{ProfCollege}, et je précise que la syntaxe est très proche (car pertinente de base) et donc pas de raison de changer une équipe qui gagne !
-
-\medskip
-
-Il se charge, dans le préambule, par \ctex{\textbackslash usepackage\{ProfLycee\}}. Il charge quelques {packages} utiles, mais j'ai fait le choix de laisser l'utilisateur gérer ses autres {packages}, comme notamment \ctex{amssymb} qui peut poser souci en fonction de la \textit{position} de son chargement.
-
-L'utilisateur est libre de charger ses autres {packages} utiles et habituels, ainsi que ses \textsf{polices} et \textsf{encodages} habituels.
-\end{codeidee}
-
-\begin{codeinfo}
-Le {package} \ctex{ProfLycee} charge les {packages} :
-
-\begin{itemize}
- \item \ctex{xcolor} avec les options \textsf{[table,svgnames]} ;
- \item \ctex{tikz}, \ctex{pgf}, \ctex{xfp} ;
- \item \ctex{xparse}, \ctex{xkeyval}, \ctex{xstring}, \ctex{simplekv} ;
- \item \ctex{listofitems}, \ctex{xintexpr} , \ctex{xintbinhex} et \ctex{xintgcd};
- \item \ctex{tabularray}, \ctex{fontawesome5}, \ctex{tcolorbox} ;
- \item \ctex{piton} et \ctex{pythontex}
-\end{itemize}
-\end{codeinfo}
-
-\begin{codeidee}
-J'ai utilisé les {packages} de C. Tellechea, je vous conseille d'aller jeter un œil sur ce qu'il est possible de faire en \LaTeX{} avec \ctex{listofitems}, \ctex{randomlist}, \ctex{simplekv} ou encore \ctex{xstring} !
-\end{codeidee}
-
-\subsection{Chargement du package}
-
-\begin{codetex}[listing only]
-%exemple de chargement pour une compilation en (pdf)latex
-\documentclass{article}
-\usepackage[french]{babel}
-\usepackage[utf8]{inputenc}
-\usepackage[T1]{fontenc}
-\usepackage{ProfLycee}
-...
-\end{codetex}
-
-\begin{codetex}[listing only]
-%exemple de chargement pour une compilation en (xe/lua)latex
-\documentclass{article}
-\usepackage[french]{babel}
-\usepackage{mathtools}
-\usepackage{fontspec}
-\usepackage{ProfLycee}
-...
-\end{codetex}
-
-\subsection{Options du package}
-
-\begin{codeattention}
-Par défaut, \ctex{minted} est chargé et donc la compilation nécessite d'utiliser \textsf{shell-escape}. Cependant, si vous ne \underline{souhaitez pas} utiliser les commandes nécessitant \ctex{minted} vous pouvez charger le package \ctex{ProfLycee} avec l'option \Cle{nominted}.
-\end{codeattention}
-
-\begin{codetex}[listing only]
-...
-\usepackage[nominted]{ProfLycee}
-...
-\end{codetex}
-
-\begin{codeinfo}
-En compilant (notamment avec les packages \ctex{minted} et \ctex{pythontex}) on peut spécifier des répertoires particuliers pour les (ou des) fichiers auxiliaires.
-
-Avec l'option \Cle{build}, l'utilisateur a la possibilité de placer les fichiers temporaires de \ctex{minted} et \ctex{pythontex} dans un répertoire \menu{build} du répertoire courant.
-
-\smallskip
-
-Dans ce cas il vaut mieux créer au préalable le répertoire \menu{build} avant de compiler un fichier !
-\end{codeinfo}
-
-\begin{codetex}[listing only]
-...
-\usepackage[build]{ProfLycee}
-...
-\end{codetex}
-
-\begin{codeinfo}
-Les options précédentes sont cumulables, et, pour info, elles conditionnent le chargement des {packages} avec les options :
-
-\begin{itemize}
- \item \ctex{\textbackslash setpythontexoutputdir\{./build/pythontex-files-\textbackslash jobname\}}
- \item \ctex{\textbackslash RequirePackage[outputdir=build]\{minted\}}
-\end{itemize}
-\end{codeinfo}
-
-\section{Compléments}
-
-\subsection{Le système de \og clés/options \fg}
-
-\begin{codeidee}
-L'idée est de conserver -- autant que faire se peut -- l'idée de \Cle{Clés} qui sont :
-%
-\begin{itemize}
- \item modifiables ;
- \item définies (en majorité) par défaut pour chaque commande.
-\end{itemize}
-
-Pour certaines commandes, le système de \Cle{Clés} pose quelques soucis, de ce fait le fonctionnement est plus \textit{basique} avec un système d'\textsf{arguments} optionnels (entre \textsf{[\ldots]}) ou mandataires (entre \textsf{\{\ldots\}}).
-
-\smallskip
-
-À noter que les :
-%
-\begin{itemize}
- \item les \Cle{Clés} peuvent être mises dans n'importe quel ordre, elles peuvent être omises lorsque la valeur par défaut est conservée ;
- \item les \textsf{arguments} doivent, eux, être positionnés dans le \textit{bon ordre}.
-\end{itemize}
-\end{codeidee}
-
-\begin{codeinfo}
-Les \textsf{commandes} et \textsf{environnements} présentés seront explicités via leur \textsf{syntaxe} avec les \textsf{options} ou \textsf{arguments}.
-
-Autant que faire se peut, des exemples/illustrations/remarques seront proposés à chaque fois.
-
-\smallskip
-
-Les \textsf{codes} seront présentés dans des \textsf{boîtes} \textcolor{red!75!black}{{\small \faCode} Code \LaTeX}, si possible avec la \textsf{sortie} dans la même boîte, et sinon la \textsf{sortie} sera visible dans des \textsf{boîtes} \textcolor{red!75!black}{{\small \faArrowAltCircleRight[regular]} Sortie \LaTeX}.
-
-Les \textsf{clés} ou \textsf{options} seront présentées dans des \textsf{boîtes} \textcolor{ForestGreen}{{\small \faPaperclip} Clés}.
-\end{codeinfo}
-
-%\subsection{Outils disponibles}
-%
-%\begin{codeidee}
-%Le {package}, qui s'enrichira peut-être au fil du temps permet -- pour le moment -- de :
-%
-%\begin{itemize}
-% \item tracer des splines cubiques avec gestion \textit{assez fine} des tangentes ;
-% \item tracer des tangentes (ou portions) de tangentes sur la même base que pour les splines ;
-% \item simuler une fenêtre de logiciel formel (\textit{à la manière de} \textsf{XCas}) ;
-% \item mettre en forme du code \textsf{python} ou \textsf{pseudocode} ;
-% \item simuler une fenêtre de terminal (win/unix/osx) ;
-% \item créer un cartouche \textit{à la manière de} Capytale ;
-% \item créer rapidement un pavé droit ou un tétraèdre en \TikZ, avec gestion des nœuds ;
-% \item créer rapidement un ensemble d'éléments, avec gestion des espaces ;
-% \item créer, dans un environnement \TikZ, la \og toile \fg{} pour une suite récurrente :
-% \item etc
-%\end{itemize}
-%\end{codeidee}
-
-\begin{codeinfo}
-À noter que certaines commandes disponibles sont liées à un environnement \ctex{tikzpicture}, elles ne sont pas autonomes mais permettent de conserver -- en parallèle -- toute commande liée à \TikZ{} !
-\end{codeinfo}
-
-\subsection{Compilateur(s)}
-
-\begin{codeinfo}
-Le package \ctex{ProfLycee} est compatible avec les compilateurs classiques : \textsf{latex}, \textsf{pdflatex} ou encore \textsf{lualatex}.
-
-\smallskip
-
-En ce qui concerne les codes \textsf{python} et/ou \textsf{pseudocode}, il faudra :
-
-\begin{itemize}
- \item compiler en chaîne \textsf{pdflatex + pythontex + pdflatex} pour les environnements avec \ctex{pythontex} ;
- \item compiler avec \textsf{shell-escape} (ou \textsf{write18}) pour les environnements avec \ctex{minted}.
-\end{itemize}
-\end{codeinfo}
-
-\begin{codeattention}
-Certains commandes ou environnements nécessitent une compilation spécifique, qui seront indiquées clairement dans la documentation !
-\end{codeattention}
-
-\subsection{Problèmes éventuels\ldots}
-
-\begin{codeinfo}
-Certaines \textsf{commandes} sont à intégrer dans un environnement \TikZ, afin de pouvoir rajouter des éléments, elles ont été testés dans des environnement \ctex{tikzpicture}, à vérifier que la gestion des axes par l'environnement \ctex{axis} est compatible\ldots
-
-\smallskip
-
-Certains packages ont une fâcheuse tendance à être tatillons sur leurs options (les \textit{fameux} \textsf{option clash for} \ldots) ou leur \textit{position} dans le chargement, donc attention notamment au chargement de \ctex{xcolor} et de \ctex{amsmath}.
-
-\smallskip
-
-En dehors de cela, ce sont des tests multiples et variés qui permettront de détecter d'éventuels bugs !
-\end{codeinfo}
-
-\vfill
-
-\hfill{\Huge $\leftrightsquigarrow$ Bonne(s) découverte(s) $\leftrightsquigarrow$}\hfill~
-
-\vfill
-
-\newpage
-
-\part{Liste des commandes, par thème}
-
-\begin{codetex}[listing only]
-%courbe d'interpolation, tangente, dans un environnement tikz
-\splinetikz[<options>]
-\tangentetikz[<options>]
-
-%toile pour une suite récurrente, dans un environnement tikz
-\recurrPL[<clés>][<options du tracé>][<option supplémentaire des termes>]
-
-%présentation type calcul formel, dans un environnement tikz
-\paramCF[<options>]
-\ligneCF[<options>]{<commande>}{<résultat>}
-\end{codetex}
-
-\begin{codetex}[listing only]
-%présentation de code Python
-\begin{envcodepython}(*)[<largeur>]{<commandes tcbox>}...\end{envcodepython}
-\envcodepythonfichier(*)[<largeur>]{<commandes tcbox<}{<script>}
-\begin{envcodepiton}[<options>]...\end{envcodepiton}
-\begin{envcodepythontex}[<options>]...\end{envcodepythontex}
-\begin{envcodepythonminted}(*)[<largeur>][<options>]...\end{envcodepythonminted}
-
-%console Python
-\begin{envconsolepythontex}[<options>]...\end{envconsolepythontex}
-
-%présentation de pseudocode
-\begin{envpseudocode}(*)[<largeur>][<options>]...\end{envpseudocode}
-
-%terminal OS
-\begin{PLtermwin}[<largeur>]{<clés>}[<options>]...\end{PLtermwin}
-\begin{PLtermunix}[<largeur>]{<clés>}[<options>]...\end{PLtermunix}
-\begin{PLtermosx}[<largeur>]{<clés>}[<options>]...\end{PLtermosx}
-
-%code Capytale
-\liencapytale(*)[<options<]{<code capytale>}
-\end{codetex}
-
-\begin{codetex}[listing only]
-%pavé et tétraèdre, dans un environnement tikz
-\pavePL[<options>]
-\tetraPL[<options>]
-
-%cercle trigo, dans un environnement tikz
-\cercletrigoPL[<clés>]
-\end{codetex}
-
-\begin{codetex}[listing only]
-%paramètres d'une régression linéaire, nuage de points
-\PLreglin[<clés>]{<listeX>}{<listeY>}
-\PLreglinpts[<clés>]{<listeX>}{<listeY>}
-
-%stats à 2 variables, dans un environnement tikz
-\PLgrilletikz[<options>][<options grille ppale>][<options grille second.>]
-\PLaxestikz[<options>]
-\PLaxextikz[<options>]{<valeurs>} \PLaxeytikz[<options>]{<valeurs>}
-\PLfenetre
-\PLfenetresimple<options axe Ox>{liste abscisses}<options axe Oy>{liste ordonnées}
-\PLnuagepts[<options>]{<listeX>}{<listeY>}
-\PLnuageptmoy[<options>]
-\PLcourbe[<options>]{<formule>}{<domaine>}
-
-%boîte à moustaches, dans un environnement tikz
-\PLboitemoust[<options>]
-\PLboitemoustaxe[<options>]
-\end{codetex}
-
-\begin{codetex}[listing only]
-%loi binomiale B(n,p)
-\calcPbinomP{n}{p}{k}
-\calcPbinomC{n}{p}{a}{b}
-\numPbinomP(*)[prec]{n}{p}{k}
-\numPbinomC(*)[prec]{n}{p}{a}{b}
-
-%loi de Poisson P (l)
-\calcPpoissP{l}{k}
-\calcPpoissC{l}{a}{b}
-\numPpoissP(*)[prec]{l}{k}
-\numPpoissC(*)[prec]{l}{a}{b}
-
-%loi géométrique G (p)
-\calcPgeomP{p}{k}
-\calcPgeomC{l}{a}{b}
-\numPgeomP{p}{k}
-\numPgeomC{l}{a}{b}
-
-%loi hypergéométrique H (N,n,m)
-\calcPhypergeomP{N}{n}{m}{k}
-\calcPhypergeomP{N}{n}{m}{a}{b}
-\numPhypergeomP{N}{n}{m}{k}
-\numPhypergeomC{N}{n}{m}{a}{b}
-
-%loi normale N(m,s)
-\calcPnormC{m}{s}{a}{b}
-\numPnormC(*)[prec]{m}{s}{a}{b}
-
-%loi exponentielle E(l)
-\calcPexpoC{l}{a}{b}
-\numPexpoC(*)[prec]{l}{a}{b}
-
-%arbres de probas
-\PLarbre[<options>]{<donnees>}
-\begin{PLenvarbre}[<options>]{<donnees>}...\end{PLenvarbre}
-
-%schémas lois continues
-\LoiNormaleGraphe[options]<options tikz>{m}{s}{a}{b}
-\LoiExpoGraphe[options]<options tikz>{l}{a}{b}
-\end{codetex}
-
-\begin{codetex}[listing only]
-%conversions
-\PLconvdecbin(*)[<clés>]{<nombre>}
-\PLconvbinhex[<clés>]{<nombre>}
-\PLconvtodec[<clés>]{<nombre>}
-\PLconvDepuisDec[<options>]{<nombre en base 10>}{<base d'arrivée>}
-
-%PGCD présenté
-\PresentationPGCD[<options>]{a}{b}
-\end{codetex}
-
-\begin{codetex}[listing only]
-%conversion en fraction
-\convertfraction[<option>]{<argument>}
-
-%ensemble d'éléments
-\ensPL[<clés>]{<liste>}
-
-%schémas pour le signe affine/trinôme, dans un environnement tikz
-\aidesignePL[<clés>]
-\aidesignetkztabPL[<options>]{<numligne>}[<echelle>][<décalage horizontal>]
-
-%trinôme, trinôme aléatoire
-\EcritureTrinome[<options>]{a}{b}{c}
-\end{codetex}
-
-\begin{codetex}[listing only]
-%pixelart, dans un environnement tikz
-\PLpixelart[<clés>]{<fichier>.csv}
-
-%sudomaths
-\PLsudomaths[<options>]{<liste>}.
-\begin{PLenvsudomaths}[<options>]{<grille>}...\end{PLenvsudomaths}
-\end{codetex}
-
-\newpage
-
-\part{Outils pour l'analyse}
-
-\section{L'outil \og \textbackslash{}splinetikz \fg}
-
-\subsection{Courbe d'interpolation}
-
-\begin{codeinfo}
-On va utiliser les notions suivantes pour paramétrer le tracé \og automatique \fg{} grâce à \ctex{..controls} :
-%
-\begin{itemize}
- \item il faut rentrer les \textcolor{purple}{\textsf{points de contrôle}} ;
- \item il faut préciser les \textcolor{ForestGreen}{\textsf{pentes des tangentes}} (pour le moment on travaille avec les mêmes à gauche et à droite\ldots) ;
- \item on peut \og affiner \fg{} les portions de courbe en paramétrant des \textcolor{CadetBlue}{\textsf{coefficients}} (voir un peu plus loin\ldots).
-\end{itemize}
-
-\medskip
-
-Pour déclarer les paramètres :
-%
-\begin{itemize}
- \item liste des points de contrôle (minimum 2 !!) par : \verb|liste=x1/y1/d1§x2/y2/d2§...| avec les points \pverb|(xi;yi)| et \vverb|f'(xi)=di| ;
- \item coefficients de contrôle par \verb|coeffs=...| :
- \begin{itemize}
- \item \averb|coeffs=x| pour mettre tous les coefficients à x ;
- \item \averb|coeffs=C1§C2§...| pour spécifier les coefficients par portion (donc il faut avoir autant de § que pour les points !) ;
- \item \averb|coeffs=C1G/C1D§...| pour spécifier les coefficients par portion et par partie gauche/droite ;
- \item on peut mixer avec \averb|coeffs=C1§C2G/C2D§...|.
- \end{itemize}
-\end{itemize}
-\end{codeinfo}
-
-\subsection{Code, clés et options}
-
-\begin{codetex}[listing only]
-\begin{tikzpicture}
- ...
- \splinetikz[<options>]
- ...
-\end{tikzpicture}
-\end{codetex}
-
-\begin{codecles}
-Certains paramètres et \Cle{clés} peuvent être gérés directement dans la commande \ctex{splinetikz} :
-%
-\begin{itemize}
- \item la couleur de la courbe par la {clé} \Cle{couleur} ;\hfill{}défaut \Cle{red}
- \item l'épaisseur de la courbe par la {clé} \Cle{epaisseur} ;\hfill{}défaut \Cle{1.25pt}
- \item du style supplémentaire pour la courbe peut être rajouté, grâce à la {clé} \Cle{style} ;\hfill{}défaut \Cle{vide}
- \item les coefficients de \textit{compensation} gérés par la {clé} \Cle{coeffs} ;\hfill{}défaut \Cle{3}
- \item les points de contrôle , affichés ou non par la {clé booléenne} \Cle{affpoints} ;\hfill{}défaut \Cle{false}
- \item la taille des points de contrôle est géré par la {clé} \Cle{taillepoints}.\hfill{}défaut \Cle{2pt}
-\end{itemize}
-\end{codecles}
-
-\subsection{Compléments sur les coefficients de \og compensation \fg}
-
-\begin{codeidee}
-Le choix a été fait ici, pour \textit{simplifier} le code, le travailler sur des courbes de Bézier.
-
-Pour \textit{simplifier} la gestion des nombres dérivés, les points de contrôle sont gérés par leurs coordonnées \textit{polaires}, les \textsf{coefficients de compensation} servent donc -- grosso modo -- à gérer la position radiale.
-
-\smallskip
-
-Le coefficient \Cle{3} signifie que, pour une courbe de Bézier entre $x=a$ et $x=b$, les points de contrôles seront situés à une distance radiale de $\frac{b-a}{3}$.
-
-Pour \textit{écarter} les points de contrôle, on peut du coup \textit{réduire} le coefficient de compensation !
-
-\medskip
-
-Pour des intervalles \textit{étroits}, la \textit{pente} peut paraître abrupte, et donc le(s) coefficient(s) peuvent être modifiés, de manière fine.
-
-\medskip
-
-Si jamais il existe (un ou) des points \textit{anguleux}, le plus simple est de créer les splines en plusieurs fois.
-\end{codeidee}
-
-\subsection{Exemples}
-
-\begin{codetex}[tikz lower]
-%code tikz
-\def\x{0.9cm}\def\y{0.9cm}
-\def\xmin{-1}\def\xmax{11}\def\xgrille{1}\def\xgrilles{0.5}
-\def\ymin{-1}\def\ymax{5}\def\ygrille{1}\def\ygrilles{0.5}
-%axes et grilles
-\draw[xstep=\xgrilles,ystep=\ygrilles,line width=0.6pt,lightgray!50] (\xmin,\ymin) grid (\xmax,\ymax);
-\draw[line width=1.5pt,->,gray] (\xmin,0)--(\xmax,0) ;
-\draw[line width=1.5pt,->,gray] (0,\ymin)--(0,\ymax) ;
-\foreach \x in {0,1,...,10} {\draw[gray,line width=1.5pt] (\x,4pt) -- (\x,-4pt) ;}
-\foreach \y in {0,1,...,4} {\draw[gray,line width=1.5pt] (4pt,\y) -- (-4pt,\y) ;}
-\draw[darkgray] (1,-4pt) node[below,font=\sffamily] {1} ;
-\draw[darkgray] (-4pt,1) node[left,font=\sffamily] {1} ;
-%splines
-\def\LISTE{0/1/0§4/3.667/-0.333§7.5/1.75/0§9/2/-0.333§10/0/-10}
-\splinetikz[liste=\LISTE,affpoints=true,coeffs=3,couleur=red]
-\end{codetex}
-
-\begin{codeinfo}
-Avec des explications utiles à la compréhension :
-
-\begin{center}
- \begin{tikzpicture}[x=0.9cm,y=0.9cm,xmin=-1,xmax=11,xgrille=1,xgrilles=0.5,ymin=-1,ymax=7,ygrille=1,ygrilles=0.5]
- \genfenetre
- \splinetikz[liste=0/1/0§4/3.667/-0.333§7.5/1.75/0§9/2/-0.333§10/0/-10,affpoints=true]
- \gennotice
- \gentangentes
- \listecoeffs{3}{3}{3}{3}
- \end{tikzpicture}
-\end{center}
-\end{codeinfo}
-
-\subsection{Avec une gestion plus fine des \og coefficients \fg}
-
-\begin{codeinfo}
-Dans la majorité des cas, le \textit{coefficient} \textcircled{3} permet d'obtenir une courbe (ou une portion) très satisfaisante !
-
-Dans certains cas, il se peut que la portion paraisse un peu trop \og abrupte \fg{}.
-
-On peut dans ce cas \textit{jouer} sur les coefficients de cette portion pour \textit{arrondir} un peu tout cela (\textit{ie} diminuer le \textsf{coeff}\ldots)!
-
-%\begin{itemize}
-% \item être donnés (pour utiliser le même partout) sous la forme \Cle{coeffs=C} ;
-% \item être donnés portion par portion, sous la forme \Cle{coeffs=C1§C2§...} ;
-% \item être donné de manière très fine, portion par portion et côté par côté, sous la forme \Cle{coeffs=C1G/C1D§C2G/C2D§...}.
-%\end{itemize}
-
-\begin{center}
- \begin{tikzpicture}[x=0.9cm,y=0.9cm,xmin=-1,xmax=11,xgrille=1,xgrilles=0.5,ymin=-1,ymax=7,ygrille=1,ygrilles=0.5]
- \genfenetre
- \draw (1,-4pt) node[below,font=\sffamily] {1} ;
- \draw (-4pt,1) node[left,font=\sffamily] {1} ;
- \def\LISTE{0/1/0§4/3.667/-0.333§7.5/1.75/0§9/2/-0.333§10/0/-10}
- \splinetikz[liste=\LISTE,affpoints=true,coeffs=3§3§3§2/1]
- \gennotice
- \listecoeffs{3/3}{3/3}{3/3}{2/1}
- \end{tikzpicture}
-\end{center}
-\end{codeinfo}
-
-\begin{codetex}[listing only]
-...
-%splines
-\def\LISTE{0/1/0§4/3.667/-0.333§7.5/1.75/0§9/2/-0.333§10/0/-10}
-\splinetikz[liste=\LISTE,affpoints=true,coeffs=3§3§3§2/1]
-...
-\end{codetex}
-
-\begin{codesortie}
-\begin{center}
- \begin{tikzpicture}[x=0.9cm,y=0.9cm,xmin=-1,xmax=11,xgrille=1,xgrilles=0.5,ymin=-1,ymax=5,ygrille=1,ygrilles=0.5]
- %axes et grilles
- \draw[xstep=\xgrilles,ystep=\ygrilles,line width=0.3pt,lightgray!50] (\xmin,\ymin) grid (\xmax,\ymax);
- \draw[xstep=\xgrilles,ystep=\ygrilles,line width=0.6pt,lightgray!50] (\xmin,\ymin) grid (\xmax,\ymax);
- \draw[line width=1.5pt,->,gray] (\xmin,0)--(\xmax,0) ;
- \draw[line width=1.5pt,->,gray] (0,\ymin)--(0,\ymax) ;
- \foreach \x in {0,1,...,10} {\draw[gray,line width=1.5pt] (\x,4pt) -- (\x,-4pt) ;}
- \foreach \y in {0,1,...,4} {\draw[gray,line width=1.5pt] (4pt,\y) -- (-4pt,\y) ;}
- \draw[darkgray] (1,-4pt) node[below,font=\sffamily] {1} ;
- \draw[darkgray] (-4pt,1) node[left,font=\sffamily] {1} ;
-% \draw (1,-4pt) node[below,font=\sffamily] {1} ;
-% \draw (-4pt,1) node[left,font=\sffamily] {1} ;
- \def\LISTE{0/1/0§4/3.667/-0.333§7.5/1.75/0§9/2/-0.333§10/0/-10}
- \splinetikz[liste=\LISTE,affpoints=true,coeffs=3§3§3§2/1]
- \end{tikzpicture}
-\end{center}
-\end{codesortie}
-
-\subsection{Conclusion}
-
-\begin{codeinfo}
-Le plus \og simple \fg{} est donc:
-%
-\begin{itemize}
- \item de déclarer la liste des points de contrôle, grâce à \ctex{\textbackslash def\textbackslash LISTE\{x1/y1/d1§x2/y2/d2§...\}} ;
- \item de saisir la commande \ctex{\textbackslash splinetikz[liste=\textbackslash LISTE]} ;
- \item d'ajuster les options et coefficients en fonction du rendu !
-\end{itemize}
-\end{codeinfo}
-
-\newpage
-
-\section{L'outil \og \textbackslash{}tangentetikz \fg{}}
-
-\subsection{Définitions}
-
-\begin{codeidee}
-En parallèle de l'outil \ctex{splinetikz}, il existe l'outil \ctex{tangentetikz} qui va permettre de tracer des tangentes à l'aide de la liste de points précédemment définie pour l'outil \ctex{splinetikz}.
-
-\smallskip
-
-NB : il peut fonctionner indépendamment de l'outil \ctex{splinetikz} puisque la liste des points de travail est gérée de manière autonome !
-\end{codeidee}
-
-\begin{codetex}[listing only]
-\begin{tikzpicture}
- ...
- \tangentetikz[<options>]
- ...
-\end{tikzpicture}
-\end{codetex}
-
-\begin{codecles}
-Cela permet de tracer la tangente :
-%
-\begin{itemize}
- \item au point numéro \Cle{point} de la liste \Cle{liste}, de coordonnées \textsf{xi/yi} avec la pente \textsf{di} ;
- \item avec une épaisseur de \Cle{epaisseur}, une couleur \Cle{couleur} et un style additionnel \Cle{style} ;
- \item en la traçant à partir de \Cle{xl} avant \textsf{xi} et jusqu'à \Cle{xr} après \textsf{xi}.
-\end{itemize}
-\end{codecles}
-
-\subsection{Exemple et illustration}
-
-\begin{codetex}[listing only]
-\begin{tikzpicture}
- ...
- \def\LISTE{0/1.5/0§1/2/-0.333§2/0/-5}
- %spline
- \splinetikz[liste=\LISTE,affpoints=true,coeffs=3§2,couleur=red]
- %tangente
- \tangentetikz[liste=\LISTE,xl=0,xr=0.5,couleur=ForestGreen,style=dashed]
- \tangentetikz[liste=\LISTE,xl=0.5,xr=0.75,couleur=orange,style=dotted,point=2]
- \tangentetikz[liste=\LISTE,xl=0.33,xr=0,couleur=blue,style=densely dashed,point=3]
- ...
-\end{tikzpicture}
-\end{codetex}
-
-\begin{codesortie}
-On obtient le résultat suivant (avec les éléments rajoutés utiles à la compréhension) :
-
-\begin{center}
- \begin{tikzpicture}[x=3cm,y=2cm,xmin=0,xmax=2,xgrilles=0.25,ymin=0,ymax=2.25,ygrilles=0.25]
- \tikzset{noeudexpl/.style={purple,font=\sffamily\small}}
- \tgrilles
- \draw[line width=1.5pt,->,darkgray] (\xmin,0)--(\xmax,0) ;
- \draw[line width=1.5pt,->,darkgray] (0,\ymin)--(0,\ymax) ;
- \draw (0,1.5) node[noeudexpl,below] {point 1} ;
- \draw (1,2) node[noeudexpl,below] {point 2} ;
- \draw (2,0) node[noeudexpl,above left] {point 3} ;
- %spline
- \splinetikz[liste=0/1.5/0§1/2/-0.333§2/0/-5,affpoints=true,coeffs=3§2,couleur=red]
- %tangente
- \tangentetikz[liste=0/1.5/0§1/2/-0.333§2/0/-5,xl=0,xr=0.5,couleur=ForestGreen,style=dashed]
- \tangentetikz[liste=0/1.5/0§1/2/-0.333§2/0/-5,xl=0.5,xr=0.75,couleur=orange,style=dotted,point=2]
- \tangentetikz[liste=0/1.5/0§1/2/-0.333§2/0/-5,xl=0.33,xr=0,couleur=blue,style=densely dashed,point=3]
- %explications
- \draw[<->,very thick,darkgray] (0.5,2.2)--(1,2.2) node[midway,above,font=\sffamily] {xl} ;
- \draw[<->,very thick,darkgray] (1,2.2)--(1.75,2.2) node[midway,above,font=\sffamily] {xr};
- \draw[thick,darkgray] (1,4pt)--(1,-4pt) node[below,font=\sffamily] {1} ;
- \draw[thick,darkgray] (4pt,1)--(-4pt,1) node[left,font=\sffamily] {1} ;
- \end{tikzpicture}
-\end{center}
-\end{codesortie}
-
-\subsection{Exemple avec les deux outils, et \og personnalisation \fg}
-
-\begin{codetex}[listing only]
-\tikzset{%
- xmin/.store in=\xmin,xmin/.default=-5,xmin=-5,
- xmax/.store in=\xmax,xmax/.default=5,xmax=5,
- ymin/.store in=\ymin,ymin/.default=-5,ymin=-5,
- ymax/.store in=\ymax,ymax/.default=5,ymax=5,
- xgrille/.store in=\xgrille,xgrille/.default=1,xgrille=1,
- xgrilles/.store in=\xgrilles,xgrilles/.default=0.5,xgrilles=0.5,
- ygrille/.store in=\ygrille,ygrille/.default=1,ygrille=1,
- ygrilles/.store in=\ygrilles,ygrilles/.default=0.5,ygrilles=0.5,
- xunit/.store in=\xunit,unit/.default=1,xunit=1,
- yunit/.store in=\yunit,unit/.default=1,yunit=1
-}
-
-\begin{tikzpicture}[x=0.5cm,y=0.5cm,xmin=0,xmax=16,xgrilles=1,ymin=0,ymax=16,ygrilles=1]
- \draw[xstep=\xgrilles,ystep=\ygrilles,line width=0.3pt,lightgray] (\xmin,\ymin) grid (\xmax,\ymax) ;
- \draw[line width=1.5pt,->,darkgray] (\xmin,0)--(\xmax,0) ;
- \draw[line width=1.5pt,->,darkgray] (0,\ymin)--(0,\ymax) ;
- \foreach \x in {0,2,...,14} {\draw[darkgray,line width=1.5pt] (\x,4pt) -- (\x,-4pt) ;}
- \foreach \y in {0,2,...,14} {\draw[darkgray,line width=1.5pt] (4pt,\y) -- (-4pt,\y) ;}
- %la liste pour la courbe d'interpolation
- \def\liste{0/6/3§3/11/0§7/3/0§10/0/0§14/14/6}
- %les tangentes "stylisées"
- \tangentetikz[liste=\liste,xl=0,xr=1,couleur=blue,style=dashed]
- \tangentetikz[liste=\liste,xl=2,xr=2,couleur=purple,style=dotted,point=2]
- \tangentetikz[liste=\liste,xl=2,xr=2,couleur=orange,style=<->,point=3]
- \tangentetikz[liste=\liste,xl=2,xr=0,couleur=ForestGreen,point=5]
- %la courbe en elle-même
- \splinetikz[liste=\liste,affpoints=true,coeffs=3,couleur=cyan,style=densely dotted]
-\end{tikzpicture}
-\end{codetex}
-
-\begin{codesortie}
-\begin{center}
-\begin{tikzpicture}[x=0.5cm,y=0.5cm,xmin=0,xmax=16,xgrilles=1,ymin=0,ymax=16,ygrilles=1]
- \draw[xstep=\xgrilles,ystep=\ygrilles,line width=0.3pt,lightgray] (\xmin,\ymin) grid (\xmax,\ymax) ;
- \draw[line width=1.5pt,->,darkgray] (\xmin,0)--(\xmax,0) ;
- \draw[line width=1.5pt,->,darkgray] (0,\ymin)--(0,\ymax) ;
- \foreach \x in {0,2,...,14} {\draw[darkgray,line width=1.5pt] (\x,4pt) -- (\x,-4pt) ;}
- \foreach \y in {0,2,...,14} {\draw[darkgray,line width=1.5pt] (4pt,\y) -- (-4pt,\y) ;}
- \draw[darkgray] (2,-4pt) node[below,font=\sffamily] {2} ;
- \draw[darkgray] (-4pt,2) node[left,font=\sffamily] {2} ;
- %la liste pour la courbe d'interpolation
- \def\liste{0/6/3§3/11/0§7/3/0§10/0/0§14/14/6}
- %les tangentes "stylisées"
- \tangentetikz[liste=\liste,xl=0,xr=1,couleur=blue,style=dashed]
- \tangentetikz[liste=\liste,xl=2,xr=2,couleur=purple,style=dotted,point=2]
- \tangentetikz[liste=\liste,xl=2,xr=2,couleur=orange,style=<->,point=3]
- \tangentetikz[liste=\liste,xl=2,xr=0,couleur=ForestGreen,point=5]
- %la courbe en elle-même
- \splinetikz[liste=\liste,affpoints=true,coeffs=3,couleur=cyan,style=densely dotted]
- \end{tikzpicture}
-\end{center}
-\end{codesortie}
-
-\newpage
-
-\section{Suites récurrentes et \og toile \fg}\label{recurr}
-
-\subsection{Idée}
-
-\begin{codeidee}
-L'idée est d'obtenir une commande pour tracer (en \TikZ) la \og toile \fg{} permettant d'obtenir -- graphiquement -- les termes d'une suite récurrente définie par une relation $u_{n+1}=f(u_n)$.
-
-\smallskip
-
-Comme pour les autres commandes \TikZ, l'idée est de laisser l'utilisateur définir et créer son environnement \TikZ, et d'insérer la commande \ctex{recurrPL} pour afficher la \og toile \fg.
-\end{codeidee}
-
-\subsection{Commandes}
-
-\begin{codetex}[listing only]
-...
-\begin{tikzpicture}[<options>]
- ...
- \recurrPL[<clés>][<options du tracé>][<options supplémentaires des termes>]
- ...
-\end{tikzpicture}
-\end{codetex}
-
-\begin{codecles}
-Plusieurs \Cle{arguments} (optionnels) sont disponibles :
-
-\begin{itemize}
- \item le premier argument optionnel définit les \Cle{Clés} de la commande :
- \begin{itemize}
- \item la clé \Cle{fct} qui définit la fonction $f$ ;\hfill{}défaut \Cle{vide}
- \item la clé \Cle{nom} qui est le \textit{nom} de la suite ;\hfill{}défaut \Cle{u}
- \item la clé \Cle{no} qui est l'indice initial ;\hfill{}défaut \Cle{0}
- \item la clé \Cle{uno} qui est la valeur du terme initial ;\hfill{}défaut \Cle{vide}
- \item la clé \Cle{nb} qui est le nombre de termes à construire ;\hfill{}défaut \Cle{5}
- \item la clé \Cle{poslabel} qui correspond au placement des labels par rapport à l'axe des abscisses ;\hfill{}défaut \Cle{below}
- \item la clé \Cle{decallabel} qui correspond au décalage des labels par rapport aux abscisses ;\hfill{}défaut \Cle{6pt}
- \item la clé \Cle{taillelabel} qui correspond à la taille des labels ;\hfill{}défaut \Cle{small}
- \item un booléen \Cle{afftermes} qui permet d'afficher les termes de la suite sur l'axe $(Ox)$.\hfill{}défaut \Cle{true}
- \end{itemize}
- \item le deuxième argument optionnel concerne les \Cle{options} du tracé de l'\textit{escalier} en \textit{langage \TikZ} ;
-
- \hfill{}défaut \Cle{thick,color=magenta} ;
- \item le troisième argument optionnel concerne les \Cle{options} du tracé des termes en \textit{langage \TikZ}.
-
- \hfill{}défaut \Cle{dotted}.
-\end{itemize}
-\end{codecles}
-
-\begin{codeinfo}
-Il est à noter que le \textsf{code} n'est pas autonome, et doit être intégré dans un environnement \ctex{tikzpicture}.
-
-\smallskip
-
-L'utilisateur est donc libre de définir ses styles pour l'affichage des éléments de son graphique, et il est libre également de rajouter des éléments en plus du tracé de la \textit{toile} !
-
-\smallskip
-
-La macro ne permet -- pour le moment -- ni de tracer la bissectrice, ni de tracer la courbe$\ldots$
-
-En effet, il y aurait trop d'options pour ces deux éléments, et l'idée est quand même de conserver une commande \textit{simple} ! Donc l'utilisateur se chargera de tracer et de personnaliser sa courbe et sa bissectrice !
-\end{codeinfo}
-
-\subsection{Exemples}
-
-\begin{codeinfo}
-On va tracer la \textit{toile} des 4 premiers termes de la suite récurrente $\begin{dcases} u_1 = 1 \\ u_{n+1} = \sqrt{5u_n}+1 \text{ pour tout entier } n \geqslant 1\end{dcases}$.
-\end{codeinfo}
-
-\begin{codetex}[tikz lower]
-%code tikz
-\def\x{1.5cm}\def\y{1.5cm}
-\def\xmin{0}\def\xmax{10}\def\xgrille{1}\def\xgrilles{0.5}
-\def\ymin{0}\def\ymax{8}\def\ygrille{1}\def\ygrilles{0.5}
-%axes et grilles
-\draw[xstep=\xgrilles,ystep=\ygrilles,line width=0.6pt,lightgray!50] (\xmin,\ymin) grid (\xmax,\ymax);
-\draw[line width=1.5pt,->,darkgray] (\xmin,0)--(\xmax,0) ;
-\draw[line width=1.5pt,->,darkgray] (0,\ymin)--(0,\ymax) ;
-\foreach \x in {0,1,...,9} {\draw[darkgray,line width=1.5pt] (\x,4pt) -- (\x,-4pt) ;}
-\foreach \y in {0,1,...,7} {\draw[darkgray,line width=1.5pt] (4pt,\y) -- (-4pt,\y) ;}
-%fonction définie et réutilisable
-\def\f{sqrt(5*\x)+1}
-%toile
-\recurrPL[fct={\f},no=1,uno=1,nb=4,decallabel=4pt]
-%éléments supplémentaires
-\draw[very thick,blue,domain=0:8,samples=250] plot (\x,{\f}) ;
-\draw[very thick,ForestGreen,domain=0:8,samples=2] plot (\x,\x) ;
-\end{codetex}
-
-\begin{codeinfo}
-Peut-être que -- ultérieurement -- des options \textit{booléennes} seront disponibles pour un tracé \textit{générique} de la courbe et de la bissectrice, mais pour le moment la \textsf{macro} ne fait \textit{que} l'escalier.
-\end{codeinfo}
-
-\subsection{Influence des paramètres}
-
-\begin{codetex}[listing only]
-\begin{center}
- \begin{tikzpicture}[x=4cm,y=3cm]
- %axes + grilles + graduations
- ...
- %fonction
- \def\f{-0.25*\x*\x+\x}
- %tracés
- \begin{scope}
- \clip (0,0) rectangle (2.5,1.25) ;
- \draw[line width=1.25pt,blue,domain=0:2.5,samples=200] plot (\x,{\f}) ;
- \end{scope}
- \recurrPL[fct={\f},no=0,uno=2,nb=5,poslabel=above right,decallabel=0pt]
-\end{tikzpicture}
-\end{center}
-\end{codetex}
-
-\begin{codesortie}
-\begin{center}
- \begin{tikzpicture}[x=4cm,y=3cm]
- \draw[xstep=0.25,ystep=0.25,line width=0.3pt,lightgray!50] (0,0) grid (2.5,1.25);
- \draw[thick,->] (0,0)--(2.5,0) ;
- \draw[thick,->] (0,0)--(0,1.25) ;
- \foreach \x in {0,1,2}
- \draw[line width=1.25pt] (\x,4pt) -- (\x,-4pt) node[below] {\num{\x}} ;
- \foreach \y in {0,0.5,1.0}
- \draw[line width=1.25pt] (4pt,\y) -- (-4pt,\y) node[left] {\num{\y}} ;
- \draw[line width=1.25pt,red](0,0) -- (1.25,1.25) ;
- %fonction
- \def\f{-0.25*\x*\x+\x}
- %tracés
- \begin{scope}
- \clip (0,0) rectangle (2.5,1.25) ;
- \draw[line width=1.25pt,blue,domain=0:2.5,samples=200] plot (\x,{\f}) ;
- \end{scope}
- \recurrPL[fct={\f},no=0,uno=2,nb=5,poslabel=above right,decallabel=0pt]
-\end{tikzpicture}
-\end{center}
-\end{codesortie}
-
-\begin{codetex}[listing only]
-\begin{center}
- \begin{tikzpicture}[x=5cm,y=1.5cm]
- ...
- \def\f{1+1/\x}
- \recurrPL%
- [fct={\f},no=0,uno=1,nb=7,poslabel=above right,decallabel=0pt,afftermes=false]%
- [line width=1.25pt,ForestGreen,densely dashed][]
- \draw[line width=1.25pt,blue,domain=0:2.25,samples=2] plot(\x,{\x});
- \draw[line width=1.25pt,red,domain=0.8:2.5,samples=250] plot(\x,{\f});
- \end{tikzpicture}
-\end{center}
-\end{codetex}
-
-\begin{codesortie}
-\begin{center}
- \begin{tikzpicture}[x=5cm,y=1.5cm]
- %axes et grille
- \draw[xstep=0.5,ystep=0.25,line width=0.3pt,lightgray!50] (0,0) grid (2.5,2.25);
- \draw[thick,->] (0,0)--(2.5,0) ;
- \draw[thick,->] (0,0)--(0,2.25) ;
- \foreach \x in {0,0.5,...,2}
- \draw[line width=1.25pt] (\x,4pt) -- (\x,-4pt) node[below] {\num{\x}};
- \foreach \y in {0,0.5,...,2}
- \draw[line width=1.25pt] (4pt,\y) -- (-4pt,\y) node[left] {\num{\y}};
- %fonction
- \def\f{1+1/\x}
- %tracés
- \recurrPL[fct={\f},no=0,uno=1,nb=7,poslabel=above right,decallabel=0pt,afftermes=false][line width=1.25pt,ForestGreen,densely dashed][]
- \draw[line width=1.25pt,blue,domain=0:2.25,samples=2] plot(\x,{\x});
- \draw[line width=1.25pt,red,domain=0.8:2.5,samples=250] plot(\x,{\f});
- \end{tikzpicture}
-\end{center}
-\end{codesortie}
-
-\newpage
-
-\part{Présentation de codes}
-
-\section{L'outil \og Calcul Formel \fg}
-
-\subsection{Introduction}
-
-\begin{codeidee}
-L'idée des commandes suivantes est de définir, dans un environnement \TikZ, une présentation proche de celle d'un logiciel de calcul formel comme \textsf{XCas} ou \textsf{Geogebra}.
-
-\smallskip
-
-Les sujets d'examens, depuis quelques années, peuvent comporter des \textit{captures d'écran} de logiciel de calcul formel, l'idée est ici de reproduire, de manière autonome, une telle présentation.
-
-\smallskip
-
-À la manière du {package} \ctex{tkz-tab}, l'environnement de référence est un environnement \TikZ, dans lequel les lignes sont créées petit à petit, à l'aide de nœuds qui peuvent être réutilisés à loisir ultérieurement.
-\end{codeidee}
-
-\subsection{La commande \og \textbackslash{}paramCF \fg}
-
-\begin{codeinfo}
-La première chose à définir est l'ensemble des paramètres \textit{globaux} de la fenêtre de calcul formel, à l'aide de \Cle{Clés}.
-\end{codeinfo}
-
-\begin{codetex}[listing only]
-...
-\begin{tikzpicture}[...]
- \paramCF[<options>]
- ...
-\end{tikzpicture}
-\end{codetex}
-
-\begin{codecles}
-Les \Cle{Clés} disponibles sont :
-\begin{itemize}
- \item \Cle{larg} : largeur de l'environnement ; \hfill{}défaut \Cle{16}
- \item \Cle{esplg} : espacement vertical entre les lignes ;\hfill{}défaut \Cle{2pt}
- \item \Cle{premcol} \& \Cle{hpremcol} : largeur et hauteur de la case du \textit{petit numéro} ;\hfill{}défaut \Cle{0.3} \& \Cle{0.4}
- \item \Cle{taille} : taille du texte ;\hfill{}défaut \Cle{\textbackslash normalsize}
- \item \Cle{couleur} : couleur des traits de l'environnement ;\hfill{}défaut \Cle{darkgray}
- \item \Cle{titre} : booléen pour l'affichage d'un bandeau de titre ;\hfill{}défaut \Cle{false}
- \item \Cle{tailletitre} : taille du titre ;\hfill{}défaut \Cle{\textbackslash normalsize}
- \item \Cle{poscmd} : position horizontale de la commande d'entrée ;\hfill{}défaut \Cle{gauche}
- \item \Cle{posres} : position horizontale de la commande de sortie ;\hfill{}défaut \Cle{centre}
- \item \Cle{couleurcmd} : couleur de la commande d'entrée ;\hfill{}défaut \Cle{red}
- \item \Cle{couleurres} : couleur de la commande de sortie ;\hfill{}défaut \Cle{blue}
- \item \Cle{sep} : booléen pour l'affichage du trait de séparation E/S ;\hfill{}défaut \Cle{true}
- \item \Cle{menu} : booléen pour l'affichage du \textit{bouton} MENU ;\hfill{}défaut \Cle{true}
- \item \Cle{labeltitre} : libellé du titre.\hfill{}défaut \Cle{Résultats obtenus avec un logiciel de Calcul Formel}
-\end{itemize}
-\end{codecles}
-
-\subsection{La commande \og \textbackslash{}ligneCF \fg}
-
-\begin{codeinfo}
-Une fois les paramètres déclarés, il faut créer les différentes lignes, grâce à la \ctex{ligneCF}.
-\end{codeinfo}
-
-\begin{codetex}[listing only]
-\begin{tikzpicture}[...]
- \paramCF[<options>]
- \ligneCF[<options>]
- ...
-\end{tikzpicture}
-\end{codetex}
-
-\begin{codecles}
-Les (quelques) \Cle{Clés} disponibles sont :
-
-\begin{itemize}
- \item \Cle{hc} et \Cle{hr}: hauteur de la ligne de commande d'entrée et de sortie ;\hfill{}défaut \Cle{0.75}
- \item deux \textsf{arguments}, celui de la commande d'entrée et celui de la commande de sortie.
-\end{itemize}
-%
-Chaque argument \textsf{COMMANDE} \& \textsf{RÉSULTAT} peut être formaté (niveau police) de manière indépendante.
-\end{codecles}
-
-\begin{codetex}[tikz lower]
-%code tikz
-\paramCF[titre=true,couleurcmd=olive,couleurres=orange]
-\ligneCF{COMMANDE 1}{RÉSULTAT 1}
-\ligneCF[hc=0.75,hr=1]{\texttt{(x+1)\CFchap2}}{$\mathtt{x^2+2x+1}$} %\CFchap := ^ en mathtt
-\end{codetex}
-
-\subsection{Visualisation des paramètres}
-
-\begin{codeinfo}
-Pour \textit{illustrer} un peu les \Cle{clés}, un petit schéma, avec les différents nœuds crées par les \textsf{macros}.
-
-\begin{center}
- \begin{tikzpicture}[x=0.7cm,y=0.5cm,line width=1pt]
- \paramCF[larg=12cm,couleur=lightgray,esplg=12pt,menu=false]
- \ligneCF{}{}
- \ligneCF[hc=1,hr=1.25]{}{}
- %explications
- \foreach \noeud in {01,11,21,31,41,51,02,12,22,32,42,52}
- \draw[blue] (A\noeud) node[font=\footnotesize\ttfamily] {A\noeud} ;
-\end{tikzpicture}
-\end{center}
-
-\begin{center}
- \begin{tikzpicture}[x=0.7cm,y=0.7cm,line width=1pt]
- \paramCF[titre=true,larg=12cm,esplg=10pt,premcol=0.5,hpremcol=0.7,couleur=lightgray]
- \ligneCF{COMMANDE 1}{RÉSULTAT 1}
- \ligneCF[hc=0.85,hr=1.05]{COMMANDE 2}{RÉSULTAT 2}
- %explications
- \draw[CadetBlue,<->] ($(A22) + (0,-12pt)$) -- ($(A52) + (0,-12pt)$) node[midway,below,font=\footnotesize\sffamily] {\Cle{larg}} ;
- \draw[CadetBlue,<->] ($(A51) + (12pt,0)$) -- ($(A32) + (12pt,0)$) node[midway,right,font=\footnotesize\sffamily] {\Cle{esplg}} ;
- \draw[CadetBlue,<->] ($(A02) + (0,2pt)$) -- ($(A02) + (0,2pt) + ({-\CFpremcol},0) $) node[midway,above,font=\footnotesize\sffamily] {\Cle{premcol}} ;
- \draw[CadetBlue,<->] ($(A02) + ({-\CFpremcol},0) + (-2pt,0)$) -- ($(A02) + ({-\CFpremcol},{-\CFhpremcol}) +(-2pt,0)$) node[midway,left,font=\footnotesize\sffamily] {\Cle{hpremcol}} ;
- \draw[CadetBlue,<->] ($(A31) + (12pt,0)$) -- ($(A41) + (12pt,0)$) node[midway,right,font=\footnotesize\sffamily] {\Cle{hc}} ;
- \draw[CadetBlue,<->] ($(A41) + (12pt,0)$) -- ($(A51) + (12pt,0)$) node[midway,right,font=\footnotesize\sffamily] {\Cle{hr}} ;
- \draw[CadetBlue,<->] ($(A32) + (12pt,0)$) -- ($(A42) + (12pt,0)$) node[midway,right,font=\footnotesize\sffamily] {\Cle{hc}} ;
- \draw[CadetBlue,<->] ($(A42) + (12pt,0)$) -- ($(A52) + (12pt,0)$) node[midway,right,font=\footnotesize\sffamily] {\Cle{hr}} ;
- \draw[CadetBlue,->] ($(A12) + (0,-12pt)$) to[bend left=10] ($(A12) + (0,-12pt) + (-18pt,-12pt)$) node[below left,font=\footnotesize\sffamily] {\Cle{couleur}} ;
- \draw[CadetBlue,->] ($(A52) + (-0.65,0.25)$) to[bend left=10] ($(A52) + (-0.65,0.25) + (-18pt,12pt)$) node[inner sep=0pt,above left=1pt,font=\footnotesize\sffamily] {\Cle{menu}} ;
- \draw[CadetBlue,->] ($(A12) + (16pt,0)$) to[bend left=10] ($(A12) + (16pt,0) + (18pt,-12pt)$) node[inner sep=0pt,below right=1pt,font=\footnotesize\sffamily] {\Cle{sep}} ;
- \draw[CadetBlue,->] ($(A01) + (8pt,2pt) + (0,1em)$) to[bend left=10] ($(A01) + (8pt,2pt) + (0,1em) + (-18pt,12pt)$) node[inner sep=0pt,above=1pt,font=\footnotesize\sffamily] {\Cle{titre} \& \Cle{tailletitre} \& \Cle{labeltitre}} ;
-\end{tikzpicture}
-\end{center}
-\end{codeinfo}
-
-\newpage
-
-\section{Code Python \og simple \fg{} via le package listings}\label{pythonsimple}
-
-\subsection{Introduction}
-
-\begin{codeidee}
-Le {package} \ctex{listings} permet d'insérer et de formater du code, notamment du code Python.
-
-En \textit{partenariat} avec \ctex{tcolorbox}, on peut donc présenter \textit{joliment} du code python !
-\end{codeidee}
-
-\begin{codeinfo}
-Le package \ctex{listings} ne nécessite pas de compilation particulière, au contraire d'autres (comme \ctex{pythontex} ou \ctex{minted} ou \ctex{piton}) qui seront présentés ultérieurement.
-\end{codeinfo}
-
-\begin{codeinfo}
-Le style utilisé pour formater le code Python n'est pas modifiable. Il donne un rendu proche de celui des packages comme \ctex{pythontex} ou \ctex{minted} ou \ctex{piton}.
-
-\smallskip
-
-Donc, si plusieurs \textit{méthodes} sont utilisées pour insérer du code Python (via les \textit{méthodes} suivantes), le rendu pourra être légèrement différent.
-\end{codeinfo}
-
-\subsection{Commande et options}
-
-\begin{codeidee}
-L'environnement \ctex{envcodepython} permet de présenter du code python, dans une \ctex{tcolorbox} avec un style particulier.
-\end{codeidee}
-
-\begin{codetex}[listing only]
-\begin{envcodepython}(*)[<largeur>]{<commandes tcbox>}
-...
-\end{envcodepython}
-\end{codetex}
-
-\begin{codecles}
-Plusieurs \Cle{arguments} sont disponibles :
-
-\begin{itemize}
- \item la version \textit{étoilée} qui permet de ne pas afficher les numéros de lignes ;
- \item le premier argument (optionnel), concerne la \Cle{largeur} de la \ctex{tcbox} ;\hfill{}défaut \Cle{\textbackslash linewidth}
- \item le second argument (mandataire), concerne des \Cle{options} de la \ctex{tcbox} en \textit{langage tcolorbox}, comme l'alignement.
-\end{itemize}
-\end{codecles}
-
-\begin{codeattention}
-Les environnements \ctex{DeclareTCBListing} créés par \ctex{tcolorbox} et \ctex{listings} ne sont pas compatibles avec les options \Cle{gobble} (pour supprimer les tabulations d'environnement), donc il faut bien penser à \og aligner \fg{} le code à gauche, pour éviter des tabulations non esthétiques !
-\end{codeattention}
-
-\subsection{Insertion via un fichier \og externe \fg}
-
-\begin{codeidee}
-Pour des raison pratiques, il est parfois intéressant d'avoir le code Python dans un fichier externe au ficher \ctex{tex}, ou bien créé directement par le fichier \ctex{tex} (via \ctex{scontents}, notamment, mais non chargé par \ctex{ProfLycee}).
-
-Dans ce cas, il n'est pas nécessaire d'aligner le code \og à gauche \fg, en utilisant une commande alternative.
-
-\smallskip
-
-Si cette méthode est utilisée, il ne faut oublier de charger le package \ctex{scontents}.
-\end{codeidee}
-
-\begin{codetex}[listing only]
-\usepackage{scontents} %si script déclaré dans le fichier tex
-...
-\envcodepythonfichier(*)[<largeur>]{<commandes tcbox>}{<script>}
-\end{codetex}
-
-\subsection{Exemples}
-
-\begin{codetex}[listing only]
-\begin{envcodepython}{} %les {}, même vides, sont nécessaires (bug avec # sinon !)
-#environnement par défaut
-nb = int(input("Saisir un entier positif"))
-if (nb %7 == 0) :
- print(f"{nb} est bien divisible par 7")
-#endif
-
-def f(x) :
- return x**2
-\end{envcodepython}
-\end{codetex}
-
-\begin{codesortie}
-\begin{envcodepython}{}
-#environnement par défaut
-nb = int(input("Saisir un entier positif"))
-if (nb %7 == 0) :
- print(f"{nb} est bien divisible par 7")
-#endif
-
-def f(x) :
- return x**2
-\end{envcodepython}
-\end{codesortie}
-
-\begin{codetex}[listing only]
-\begin{envcodepython}*[0.5\linewidth]{flush right}
-#largeur de 50%, sans numéro, et aligné à droite
-nb = int(input("Saisir un entier Python positif"))
-if (nb %7 == 0) :
- print(f"{nb} est bien divisible par 7")
-#endif
-
-def f(x) :
- return x**2
-\end{envcodepython}
-\end{codetex}
-
-\begin{codesortie}
-\begin{envcodepython}*[0.5\linewidth]{flush right}
-#largeur de 50%, sans numéro, et aligné à droite
-nb = int(input("Saisir un entier Python positif"))
-if (nb %7 == 0) :
- print(f"{nb} est bien divisible par 7")
-#endif
-
-def f(x) :
- return x**2
-\end{envcodepython}
-\end{codesortie}
-
-\begin{codetex}[listing only]
-\begin{scontents}[overwrite,write-out=testscript.py]
-# Calcul de la factorielle en langage Python
-def factorielle(x):
- if x < 2:
- return 1
- else:
- return x * factorielle(x-1)
-
-# rapidité de tracé
-import matplotlib.pyplot as plt
-import time
-def trace_parabole_tableaux():
- depart=time.clock()
- X = [] # Initialisation des listes
- Y = []
- a = -2
- h = 0.001
- while a<2:
- X.append(a) # Ajout des valeurs
- Y.append(a*a) # au "bout" de X et Y
- a = a+h
- # Tracé de l'ensemble du tableau de valeurs
- plt.plot(X,Y,".b")
- fin=time.clock()
- return "Temps : " + str(fin-depart) + " s."
-\end{scontents}
-
-%environnement centré, avec numéros, largeur 9cm
-\envcodepythonfichier[9cm]{center}{testscript.py}
-\end{codetex}
-
-\begin{codesortie}
-\begin{scontents}[overwrite,write-out=testscript.py]
-# Calcul de la factorielle en langage Python
-def factorielle(x):
- if x < 2:
- return 1
- else:
- return x * factorielle(x-1)
-
-# rapidité de tracé
-import matplotlib.pyplot as plt
-import time
-def trace_parabole_tableaux():
- depart=time.clock()
- X = [] # Initialisation des listes
- Y = []
- a = -2
- h = 0.001
- while a<2:
- X.append(a) # Ajout des valeurs
- Y.append(a*a) # au "bout" de X et Y
- a = a+h
- # Tracé de l'ensemble du tableau de valeurs
- plt.plot(X,Y,".b")
- fin=time.clock()
- return "Temps : " + str(fin-depart) + " s."
-\end{scontents}
-
-\envcodepythonfichier[9cm]{center}{testscript.py}
-\end{codesortie}
-
-\newpage
-
-\section{Code Python via le package piton}\label{pythonpiton}
-
-\subsection{Introduction}
-
-\begin{codeinfo}
-Le package \ctex{piton} (compatible uniquement avec une compilation en \LuaLaTeX{} !) permet d'insérer du code Python avec une coloration syntaxique en utilisant la bibliothèque \textsf{Lua LPEG}.
-
-\smallskip
-
-En \textit{partenariat} avec \ctex{tcolorbox}, on peut avoir une présentation de code Python !
-\end{codeinfo}
-
-\begin{codeattention}
-Le package \ctex{piton} nécessite donc obligatoirement l’emploi de \LuaLaTeX{} !
-
-Ce package n'est chargé que si la compilation détectée est en \LuaLaTeX{} !
-\end{codeattention}
-
-\subsection{Présentation de code Python}
-
-\begin{codetex}[listing only]
-\begin{envcodepiton}[<options>]
-...
-...
-\end{envcodepiton}
-\end{codetex}
-
-\begin{codeattention}
-Les environnements créés par \ctex{piton} et \ctex{tcolorbox} ne sont -- a priori -- pas compatibles avec les options de type \Cle{gobble} (pour supprimer les tabulations d'environnement), donc il faut bien penser à \og aligner \fg{} le code à gauche, pour éviter des tabulations non esthétiques !
-\end{codeattention}
-
-\begin{codecles}
-Plusieurs \Cle{clés} sont disponibles :
-
-\begin{itemize}
- \item la clé booléenne \Cle{Lignes} pour afficher ou non les numéros de lignes ; \hfill{}défaut \Cle{true}
- \item la clé \Cle{Largeur} qui correspond à la largeur de la \ctex{tcbox} ; \hfill{}défaut \Cle{\textbackslash linewidth}
- \item la clé \Cle{Alignement} qui paramètre l'alignement de la \ctex{tcbox}. \hfill{}défaut \Cle{center}
-\end{itemize}
-\end{codecles}
-
-\begin{codetex}[listing only]
-\begin{envcodepiton}
-#environnement piton avec numéros de ligne, pleine largeur
-def f(x) :
- """fonction qui renvoie le carré d'un réel"""
- return x**2
-\end{envcodepiton}
-\end{codetex}
-
-\begin{codesortie}
-\begin{envcodepiton}
-#environnement piton avec numéros de ligne, pleine largeur
-def f(x) :
- """fonction qui renvoie le carré d'un réel"""
- return x**2
-\end{envcodepiton}
-\end{codesortie}
-
-\pagebreak
-
-\begin{codetex}[listing only]
-\begin{envcodepiton}[Lignes=false,Largeur=15cm]
-#sans numéro, de largeur 15cm
-def f(x) :
- """fonction qui renvoie le carré d'un réel"""
- return x**2
-\end{envcodepiton}
-
-\begin{envcodepiton}[Alignement=flush right,Largeur=13cm]
-#avec numéros, de largeur 13cm, aligné à droite
-def f(x) :
- """fonction qui renvoie le carré d'un réel"""
- return x**2
-\end{envcodepiton}
-
-\begin{envcodepiton}[Alignement=flush left,Largeur=11cm]
-#avec numéros, de largeur 11cm, aligné à gauche
-def f(x) :
- """fonction qui renvoie le carré d'un réel"""
- return x**2
-\end{envcodepiton}
-\end{codetex}
-
-\begin{codesortie}
-\begin{envcodepiton}[Lignes=false,Largeur=15cm]
-#sans numéro, de largeur 15cm
-def f(x) :
- """fonction qui renvoie le carré d'un réel"""
- return x**2
-\end{envcodepiton}
-
-\begin{envcodepiton}[Alignement=flush right,Largeur=13cm]
-#avec numéros, de largeur 13cm, aligné à droite
-def f(x) :
- """fonction qui renvoie le carré d'un réel"""
- return x**2
-\end{envcodepiton}
-
-\begin{envcodepiton}[Alignement=flush left,Largeur=11cm]
-#avec numéros, de largeur 11cm, aligné à gauche
-def f(x) :
- """fonction qui renvoie le carré d'un réel"""
- return x**2
-\end{envcodepiton}
-\end{codesortie}
-
-\pagebreak
-
-\section{Code \& Console Python, via les packages Pythontex ou Minted}
-
-\subsection{Introduction}
-
-\begin{codeidee}
-Le {package} \ctex{pythontex} permet d'insérer et d'exécuter du code Python. On peut :
-
-\begin{itemize}
- \item présenter du code Python ;
- \item exécuter du code Python dans un environnement type \og console \fg{} ;
- \item charger du code Python, et éventuellement l'utiliser dans la console.
-\end{itemize}
-\end{codeidee}
-
-\begin{codeattention}
-\textbf{Attention : }il faut dans ce cas une compilation en plusieurs étapes, comme par exemple \textsf{pdflatex puis pythontex puis pdflatex} !
-
-Voir par exemple \url{http://lesmathsduyeti.fr/fr/informatique/latex/pythontex/} !
-\end{codeattention}
-
-\begin{codeinfo}
-Compte tenu de la \textit{relative complexité} pour gérer les options (par paramètres/clés\ldots) des \textit{tcbox} et des \textit{fancyvrb}, le style est \og fixé \fg{} tel quel, et seules la taille et la position de la \textit{tcbox} sont modifiables. Si toutefois vous souhaitez personnaliser davantage, il faudra prendre le code correspondant et appliquer vos modifications !
-
-Cela peut donner -- en tout cas -- des idées de personnalisation en ayant une base \textit{pré}existante !
-\end{codeinfo}
-
-\subsection{Présentation de code Python grâce au package pythontex}\label{pythontex}
-
-\begin{codeidee}
-L'environnement \ctex{envcodepythontex} est donc lié à \ctex{pythontex} (chargé par \ctex{ProfLycee}, avec l'option \textit{autogobble}) permet de présenter du code python, dans une \ctex{tcolorbox} avec un style particulier.
-\end{codeidee}
-
-\begin{codetex}[listing only]
-\begin{envcodepythontex}[<options>]
-...
-\end{envcodepythontex}
-\end{codetex}
-
-\begin{codecles}
-Comme précédemment, des \Cle{Clés} qui permettent de \textit{légèrement} modifier le style :
-
-\begin{itemize}
- \item \Cle{largeur} : largeur de la \textit{tcbox} ;\hfill{}défaut \Cle{\textbackslash linewidth}
- \item \Cle{centre} : booléen pour centrer ou non la \textit{tcbox} ;\hfill{}défaut \Cle{true}
- \item \Cle{lignes} : booléen pour afficher ou non les numéros de ligne.\hfill{}défaut \Cle{true}
-\end{itemize}
-\end{codecles}
-
-\begin{codetex}[listing only]
-\begin{envcodepythontex}[largeur=12cm]
- #environnement Python(tex) centré avec numéros de ligne
- def f(x) :
- return x**2
-\end{envcodepythontex}
-\end{codetex}
-
-\begin{codesortie}
-\begin{envcodepythontex}[largeur=12cm]
- #environnement Python(tex) centré avec numéros de ligne
- def f(x) :
- return x**2
-\end{envcodepythontex}
-\end{codesortie}
-
-\begin{codetex}[listing only]
-\begin{envcodepythontex}[largeur=12cm,lignes=false,centre=false]
- #environnement Python(tex) non centré sans numéro de ligne
- def f(x) :
- return x**2
-\end{envcodepythontex}
-\end{codetex}
-
-\begin{codesortie}
-\begin{envcodepythontex}[largeur=12cm,lignes=false,centre=false]
- #environnement Python(tex) non centré sans numéro de ligne
- def f(x) :
- return x**2
-\end{envcodepythontex}
-\end{codesortie}
-
-\subsection{Présentation de code Python via le package minted}\label{pytminted}
-
-\begin{codeinfo}
-Pour celles et ceux qui ne sont pas à l'aise avec le {package} \ctex{pythontex} et notamment sa spécificité pour compiler, il existe le {package} \ctex{minted} qui permet de présenter du code, et notamment Python.
-\end{codeinfo}
-
-\begin{codeattention}
-Le package \ctex{minted} nécessite quand même une compilation avec l'option \ctex{--shell-escape} ou \ctex{-write18} !
-\end{codeattention}
-
-\begin{codetex}[listing only]
-\begin{envcodepythonminted}(*)[<largeur>][<options>]
-...
-\end{envcodepythonminted}
-\end{codetex}
-
-\begin{codecles}
-Plusieurs \Cle{arguments} (optionnels) sont disponibles :
-
-\begin{itemize}
- \item la version \textit{étoilée} qui permet de ne pas afficher les numéros de lignes ;
- \item le premier argument optionnel concerne la \Cle{largeur} de la \ctex{tcbox} ;\hfill{}défaut \Cle{12cm}
- \item le second argument optionnel concerne les \Cle{options} de la \ctex{tcbox} en \textit{langage tcolorbox}.\hfill{}défaut \Cle{vide}
-\end{itemize}
-\end{codecles}
-
-\begin{codetex}[listing only]
-\begin{envcodepythonminted}[12cm][center]
- #environnement Python(minted) centré avec numéros, de largeur 12cm
- def f(x) :
- return x**2
-\end{envcodepythonminted}
-\end{codetex}
-
-\begin{codesortie}
-\begin{envcodepythonminted}[12cm][center]
- #environnement Python(minted) centré avec numéros
- def f(x) :
- return x**2
-\end{envcodepythonminted}
-\end{codesortie}
-
-\begin{codetex}[listing only]
-\begin{envcodepythonminted}*[0.8\linewidth][]
- #environnement Python(minted) sans numéro, de largeur 0.8\linewidth
- def f(x) :
- return x**2
-\end{envcodepythonminted}
-\end{codetex}
-
-\begin{codesortie}
-\begin{envcodepythonminted}*[0.8\linewidth][]
- #environnement Python(minted) sans numéro, de largeur 0.8\linewidth
- def f(x) :
- return x**2
-\end{envcodepythonminted}
-\end{codesortie}
-
-\subsection{Console d'exécution Python}
-
-\begin{codeidee}
-\ctex{pythontex} permet également de \textit{simuler} (en exécutant également !) du code python dans une \textit{console}.
-
-C'est l'environnement \ctex{envconsolepythontex} qui permet de le faire.
-\end{codeidee}
-
-\begin{codetex}[listing only]
-\begin{envconsolepythontex}[<options>]
-...
-\end{envconsolepythontex}
-\end{codetex}
-
-\begin{codecles}
-Les \Cle{Clés} disponibles sont :
-
-\begin{itemize}
- \item \Cle{largeur} : largeur de la \textit{console} ;\hfill{}défaut \Cle{\textbackslash linewidth}
- \item \Cle{centre} : booléen pour centrer ou non la \textit{console} ;\hfill{}défaut \Cle{true}
- \item \Cle{label} : booléen pour afficher ou non le titre.\hfill{}défaut \Cle{true}
-\end{itemize}
-\end{codecles}
-
-\begin{codetex}[listing only]
-\begin{envconsolepythontex}[largeur=14cm,centre=false]
- #console Python(tex) non centrée avec label
- from math import sqrt
- 1+1
- sqrt(12)
-\end{envconsolepythontex}
-\end{codetex}
-
-\begin{codesortie}
-\smallskip
-\begin{envconsolepythontex}[largeur=14cm,centre=false]
- #console Python(tex) non centrée avec label
- from math import sqrt
- 1+1
- sqrt(12)
-\end{envconsolepythontex}
-\end{codesortie}
-
-\begin{codetex}[listing only]
-\begin{envconsolepythontex}[largeur=14cm,label=false]
- #console Python(tex) centrée sans label
- table = [[1,2],[3,4]]
- table[0][0]
-
- tableau = [[randint(1,20) for j in range(0,6)] for i in range(0,3)]
- tableau
- len(tableau), len(tableau[0])
- tableau[1][4]
-\end{envconsolepythontex}
-\end{codetex}
-
-\begin{codesortie}
-\smallskip
-\begin{envconsolepythontex}[largeur=14cm,label=false]
- #console Python(tex) centrée sans label
- table = [[1,2],[3,4]]
- table[0][0]
-
- tableau = [[randint(1,20) for j in range(0,6)] for i in range(0,3)]
- tableau
- len(tableau), len(tableau[0])
- tableau[1][4]
-\end{envconsolepythontex}
-\end{codesortie}
-
-\begin{codeinfo}
-Le package \ctex{pythontex} peut donc servir à présenter du code Python, comme \ctex{minted} ou \ctex{piton}, sa particularité est toutefois de pouvoir \textit{exécuter} du code Python pour une présentation de type \textit{console}.
-\end{codeinfo}
-
-\newpage
-
-\section{Pseudo-Code}\label{pseudocode}
-
-\subsection{Introduction}
-
-\begin{codeinfo}
-Le {package} \ctex{listings} permet d'insérer et de présenter du code, et avec \ctex{tcolorbox} on peut obtenir une présentation similaire à celle du code Python. Pour le moment la \textit{philosophie} de la commande est un peu différente de celle du code python, avec son système de \Cle{Clés}, car l'environnement \ctex{tcblisting} est un peu différent\ldots
-\end{codeinfo}
-
-\subsection{Présentation de Pseudo-Code}
-
-\begin{codeidee}
-L'environnement \ctex{envpseudocode} permet de présenter du (pseudo-code) dans une \ctex{tcolorbox}.
-\end{codeidee}
-
-\begin{codeattention}
-De plus, le package \ctex{listings} avec \ctex{tcolorbox} ne permet pas de gérer le paramètre \textit{autogobble}, donc il faudra être vigilant quant à la position du code (pas de tabulation en fait\ldots)
-\end{codeattention}
-
-\begin{codetex}[listing only]
-\begin{envpseudocode}(*)[<largeur>][<options>]
-%attention à l'indentation, gobble ne fonctionne pas...
-...
-\end{envpseudocode}
-\end{codetex}
-
-\begin{codecles}
-Plusieurs \Cle{arguments} (optionnels) sont disponibles :
-
-\begin{itemize}
- \item la version \textit{étoilée} qui permet de ne pas afficher les numéros de lignes ;
- \item le premier argument optionnel concerne la \Cle{largeur} de la \ctex{tcbox} ;\hfill{}défaut \Cle{12cm}
- \item le second argument optionnel concerne les \Cle{options} de la \ctex{tcbox} en \textit{langage tcolorbox}.\hfill{}défaut \Cle{vide}
-\end{itemize}
-\end{codecles}
-
-\begin{codetex}[listing only]
-\begin{envpseudocode} %non centré, de largeur par défaut (12cm) avec lignes
-List = [...] # à déclarer au préalable
-n = longueur(List)
-Pour i allant de 0 à n-1 Faire
- Afficher(List[i])
-FinPour
-\end{envpseudocode}
-\end{codetex}
-
-\begin{codesortie}
-\begin{envpseudocode}
-List = [...] # à déclarer au préalable
-n = longueur(List)
-Pour i allant de 0 à n-1 Faire
- Afficher(List[i])
-FinPour
-\end{envpseudocode}
-\end{codesortie}
-
-\begin{codetex}[listing only]
-\begin{envpseudocode}*[15cm][center] %centré, de largeur 15cm sans ligne
-List = [...] # à déclarer au préalable
-n = longueur(List)
-Pour i allant de 0 à n-1 Faire
- Afficher(List[i])
-FinPour
-\end{envpseudocode}
-\end{codetex}
-
-\begin{codesortie}
-\begin{envpseudocode}*[15cm][center]
-List = [...] # à déclarer au préalable
-n = longueur(List)
-Pour i allant de 0 à n-1 Faire
- Afficher(List[i])
-FinPour
-\end{envpseudocode}
-\end{codesortie}
-
-\subsection{Compléments}
-
-\begin{codeinfo}
-À l'instar de packages existants, la \textit{philosophie} ici est de laisser l'utilisateur gérer \textit{son} langage pseudo-code.
-
-J'ai fait le choix de ne pas définir des \textsf{mots clés} à mettre en valeur car cela reviendrait à \textit{imposer} des choix ! Donc ici, pas de coloration syntaxique ou de mise en évidence de mots clés, uniquement un formatage basique de pseudo-code.
-\end{codeinfo}
-
-\begin{codeidee}
-Évidemment, le code source est récupérable et adaptable à volonté, en utilisant les possibilités du package \ctex{listings}.
-
-\smallskip
-
-Celles et ceux qui sont déjà à l'aise avec les packages \ctex{listings} ou \ctex{minted} doivent déjà avoir leur environnement personnel prêt !
-
-Il s'agit ici de présenter une version \og clé en main \fg{}.
-\end{codeidee}
-
-\begin{codeinfo}
-Le style \ctex{listings} utilisé par la commande a l'option \Cle{mathescape} activée, et accessible grâce aux délimiteurs \Cle{(*...*)}.
-
-Cela permet d'insérer du code \LaTeX{} dans l'environnement \ctex{envpseudocode} (attention au fontes de rendu par contre !).
-\end{codeinfo}
-
-\begin{codetex}[listing only]
-\begin{envpseudocode}[12cm][]
-#Utilisation du mode mathescape
-Afficher (*\og*) .........(*\fg*)
-m = (*$\tfrac{\texttt{1}}{\texttt{2}}$*)
-\end{envpseudocode}
-\end{codetex}
-
-\begin{codesortie}
-\begin{envpseudocode}[12cm][]
-#Utilisation du mode mathescape
-Afficher (*\og*) .........(*\fg*)
-m = (*$\tfrac{\texttt{1}}{\texttt{2}}$*)
-\end{envpseudocode}
-\end{codesortie}
-
-\newpage
-
-\section{Terminal Windows/UNiX/OSX}\label{terms}
-
-\subsection{Introduction}
-
-\begin{codeidee}
-L'idée des \textsf{commandes} suivantes est de permettre de simuler des fenêtres de \textsf{Terminal}, que ce soit pour Windows, Ubuntu ou OSX.
-
-\smallskip
-
-L'idée de base vient du {package} \ctex{termsim}, mais ici la gestion du \textsf{code} et des \textsf{fenêtres} est légèrement différente.
-
-\smallskip
-
-Le \textsf{contenu} est géré par le package \ctex{listings}, sans langage particulier, et donc sans coloration syntaxique particulière.
-\end{codeidee}
-
-\begin{codeattention}
-Comme pour le pseudo-code, pas d'\textsf{autogobble}, donc commandes à aligner à gauche !
-\end{codeattention}
-
-\subsection{Commandes}
-
-\begin{codetex}[listing only]
-\begin{PLtermwin}[<largeur>]{<titre=...>}[<options>]
-...
-\end{PLtermwin}
-
-\begin{PLtermunix}[<largeur>]{<titre=...>}[<options>]
-...
-\end{PLtermunix}
-
-\begin{PLtermosx}[<largeur>]{<titre=...>}[<options>]
-...
-\end{PLtermosx}
-\end{codetex}
-
-\begin{codecles}
-Peu d'options pour ces commandes :
-
-\begin{itemize}
- \item le premier, optionnel, est la \Cle{largeur} de la \ctex{tcbox} ;\hfill{}défaut \Cle{\textbackslash linewidth}
- \item le deuxième, mandataire, permet de spécifier le titre par la clé \Cle{titre}.\hfill{}défaut \Cle{Terminal Windows/UNiX/OSX}
- \item le troisième, optionnel, concerne les \Cle{options} de la \ctex{tcbox} en \textit{langage tcolorbox}.\hfill{}défaut \Cle{vide}
-\end{itemize}
-\end{codecles}
-
-\begin{codeinfo}
-Le \textsf{code} n'est pas formaté, ni mis en coloration syntaxique.
-
-De ce fait tous les caractères sont autorisés : même si l'éditeur pourra détecter le \% comme le début d'un commentaire, tout sera intégré dans le code mis en forme !
-\end{codeinfo}
-
-\begin{codetex}[listing only]
-\begin{PLtermunix}[12cm]{titre=Terminal Ubuntu}[center] %12cm, avec titre modifié et centré
-test@DESKTOP:~$ ping -c 2 ctan.org
-PING ctan.org (5.35.249.60) 56(84) bytes of data.
-\end{PLtermunix}
-\end{codetex}
-
-\begin{codesortie}
-\begin{PLtermunix}[12cm]{titre=Terminal Ubuntu}[center]
-test@DESKTOP:~$ ping -c 2 ctan.org
-PING ctan.org (5.35.249.60) 56(84) bytes of data.
-\end{PLtermunix}
-\end{codesortie}
-
-\begin{codetex}[listing only]
-\begin{PLtermwin}[15cm]{} %largeur 15cm avec titre par défaut
-Microsoft Windows [version 10.0.22000.493]
-(c) Microsoft Corporation. Tous droits réservés.
-C:\Users\test>ping ctan.org
-
-Envoi d’une requête 'ping' sur ctan.org [5.35.249.60] avec 32 octets de données :
-Réponse de 5.35.249.60 : octets=32 temps=35 ms TTL=51
-Réponse de 5.35.249.60 : octets=32 temps=37 ms TTL=51
-Réponse de 5.35.249.60 : octets=32 temps=35 ms TTL=51
-Réponse de 5.35.249.60 : octets=32 temps=39 ms TTL=51
-
-Statistiques Ping pour 5.35.249.60:
-Paquets : envoyés = 4, reçus = 4, perdus = 0 (perte 0%),
-Durée approximative des boucles en millisecondes :
-Minimum = 35ms, Maximum = 39ms, Moyenne = 36ms
-\end{PLtermwin}
-
-\begin{PLtermosx}[0.5\linewidth]{titre=Terminal MacOSX}[flush right] %1/2-largeur et titre modifié et droite
-[test@server]$ ping -c 2 ctan.org
-PING ctan.org (5.35.249.60) 56(84) bytes of data.
-\end{PLtermosx}
-\end{codetex}
-
-\begin{codesortie}
-\begin{PLtermwin}[15cm]{}
-Microsoft Windows [version 10.0.22000.493]
-(c) Microsoft Corporation. Tous droits réservés.
-C:\Users\test>ping ctan.org
-
-Envoi d’une requête 'ping' sur ctan.org [5.35.249.60] avec 32 octets de données :
-Réponse de 5.35.249.60 : octets=32 temps=35 ms TTL=51
-Réponse de 5.35.249.60 : octets=32 temps=37 ms TTL=51
-Réponse de 5.35.249.60 : octets=32 temps=35 ms TTL=51
-Réponse de 5.35.249.60 : octets=32 temps=39 ms TTL=51
-
-Statistiques Ping pour 5.35.249.60:
-Paquets : envoyés = 4, reçus = 4, perdus = 0 (perte 0%),
-Durée approximative des boucles en millisecondes :
-Minimum = 35ms, Maximum = 39ms, Moyenne = 36ms
-\end{PLtermwin}
-
-\begin{PLtermunix}[12cm]{titre=Terminal Ubuntu}[center]
-test@DESKTOP:~$ ping -c 2 ctan.org
-PING ctan.org (5.35.249.60) 56(84) bytes of data.
-\end{PLtermunix}
-
-\begin{PLtermosx}[0.5\linewidth]{titre=Terminal MacOSX}[flush right]
-[test@server]$ ping -c 2 ctan.org
-PING ctan.org (5.35.249.60) 56(84) bytes of data.
-\end{PLtermosx}
-\end{codesortie}
-
-\newpage
-
-\section{Cartouche Capytale}\label{capytale}
-
-\subsection{Introduction}
-
-\begin{codeidee}
-L'idée est d'obtenir des \textsf{cartouches} tels que \textsf{Capytale} les présente, pour partager un code afin d'accéder à une activité \textsf{python}.
-\end{codeidee}
-
-\subsection{Commandes}
-
-\begin{codetex}[listing only]
-\liencapytale(*)[<options>]{<code capytale>}
-\end{codetex}
-
-\begin{codecles}
-Peu d'options pour ces commandes :
-
-\begin{itemize}
- \item la version \textit{étoilée} qui permet de passer de la police \Cle{sffamily} à la police \Cle{ttfamily}, et donc dépendante des fontes du document ;
- \item le deuxième, optionnel, permet de rajouter des caractères après le code (comme un \textsf{espace}) ;\hfill{}défaut \Cle{vide}
- \item le troisième, mandataire, est le \textsf{code capytale} à afficher.
-\end{itemize}
-\end{codecles}
-
-\begin{codetex}[listing only]
-\liencapytale{abcd-12345} %lien simple, en sf
-
-\liencapytale[~]{abcd-12345} %lien avec ~ à la fin, en sf
-
-\liencapytale*{abcd-12345} %lien simple, en tt
-
-\liencapytale*[~]{abcd-12345} %lien avec ~ à la fin, en tt
-\end{codetex}
-
-\begin{codesortie}
-\liencapytale{abcd-12345}
-
-\liencapytale[~]{abcd-12345}
-
-\liencapytale*{abcd-12345}
-
-\liencapytale*[~]{abcd-12345}
-\end{codesortie}
-
-\begin{codeinfo}
-Le \textsf{cartouche} peut être \og cliquable \fg{} grâce à \ctex{href}.
-\end{codeinfo}
-
-\begin{codetex}[listing only]
-\usepackage{hyperref}
-\urlstyle{same}
-...
-\href{https://capytale2.ac-paris.fr/web/c/abcd-12345}{\liencapytale{abcd-12345}}
-\end{codetex}
-
-\begin{codesortie}
-\href{https://capytale2.ac-paris.fr/web/c/abcd-12345}{\liencapytale{abcd-12345}}
-\end{codesortie}
-
-\newpage
-
-\part{Outils pour la géométrie}
-
-\section{Pavé droit \og simple \fg}\label{pave}
-
-\subsection{Introduction}
-
-\begin{codeidee}
-L'idée est d'obtenir un pavé droit, dans un environnement \TikZ, avec les nœuds créés et nommés directement pour utilisation ultérieure.
-\end{codeidee}
-
-\subsection{Commandes}
-
-\begin{codetex}[listing only]
-...
-\begin{tikzpicture}[<options tikz>]
- \pavePL[<options>]
- ...
-\end{tikzpicture}
-\end{codetex}
-
-\begin{codecles}
-Quelques \Cle{clés} sont disponibles pour cette commande :
-
-\begin{itemize}
- \item \Cle{largeur} : largeur du pavé ;\hfill{}défaut \Cle{2}
- \item \Cle{profondeur} : profondeur du pavé ;\hfill{}défaut \Cle{1}
- \item \Cle{hauteur} : hauteur du pavé ;\hfill{}défaut \Cle{1.25}
- \item \Cle{angle} : angle de fuite de la perspective ;\hfill{}défaut \Cle{30}
- \item \Cle{fuite} : coefficient de fuite de la perspective ;\hfill{}défaut \Cle{0.5}
- \item \Cle{sommets} : liste des sommets (avec délimiteur § !) ;\hfill{}défaut \Cle{A§B§C§D§E§F§G§H}
- \item \Cle{epaisseur} : épaisseur des arêtes (en \textit{langage simplifié} \TikZ) ;\hfill{}défaut \Cle{thick}
- \item \Cle{aff} : booléen pour afficher les noms des sommets ;\hfill{}défaut \Cle{false}
- \item \Cle{plein} : booléen pour ne pas afficher les arêtes \textit{invisibles} ;\hfill{}défaut \Cle{false}
- \item \Cle{cube} : booléen pour préciser qu'il s'agit d'un cube (seule la valeur \Cle{largeur} est util(isé)e).\hfill{}défaut \Cle{false}
-\end{itemize}
-\end{codecles}
-
-\begin{codetex}[tikz lower]
-%code tikz
-\pavePL
-\end{codetex}
-
-\begin{codetex}[tikz lower]
-%code tikz
-\pavePL[cube,largeur=2]
-\end{codetex}
-
-\begin{codeinfo}
-La ligne est de ce fait à insérer dans un environnement \TikZ, avec les options au choix pour cet environnement.
-
-Le code crée les nœuds relatifs aux sommets, et les nomme comme les sommets, ce qui permet de les réutiliser pour éventuellement compléter la figure !
-\end{codeinfo}
-
-\subsection{Influence des paramètres}
-
-\begin{codetex}[listing only]
-\begin{tikzpicture}[line join=bevel]
- \pavePL[aff,largeur=4,profondeur=3,hauteur=2,epaisseur={ultra thick}]
-\end{tikzpicture}
-\end{codetex}
-
-\begin{codesortie}
-\begin{tikzpicture}[line join=bevel]
- \pavePL[aff,largeur=4,profondeur=3,hauteur=2,epaisseur={ultra thick}]
-\end{tikzpicture}
-\end{codesortie}
-
-\begin{codetex}[listing only]
-\begin{center}
- \begin{tikzpicture}[line join=bevel]
- \pavePL[plein,aff,largeur=7,profondeur=3.5,hauteur=4,sommets=Q§S§D§F§G§H§J§K]
- \draw[thick,red,densely dotted] (G)--(J) ;
- \draw[thick,blue,densely dotted] (K)--(H) ;
- \end{tikzpicture}
-\end{center}
-\end{codetex}
-
-\begin{codesortie}
-\begin{center}
- \begin{tikzpicture}[line join=bevel]
- \pavePL[plein,aff,largeur=7,profondeur=3.5,hauteur=4,sommets=Q§S§D§F§G§H§J§K]
- \draw[thick,red,densely dotted] (G)--(J) ;
- \draw[thick,blue,densely dotted] (K)--(H) ;
- \end{tikzpicture}
-\end{center}
-\end{codesortie}
-
-\newpage
-
-\section{Tétraèdre \og simple \fg}\label{tetra}
-
-\subsection{Introduction}
-
-\begin{codeidee}
-L'idée est d'obtenir un tétraèdre, dans un environnement \TikZ, avec les nœuds créés et nommés directement pour utilisation ultérieure.
-\end{codeidee}
-
-\subsection{Commandes}
-
-\begin{codetex}[listing only]
-...
-\begin{tikzpicture}[<options tikz>]
- \tetraPL[<options>]
- ...
-\end{tikzpicture}
-\end{codetex}
-
-\begin{codecles}
-Quelques \Cle{clés} sont disponibles pour cette commande :
-
-\begin{itemize}
- \item \Cle{largeur} : \textit{largeur} du tétraèdre ;\hfill{}défaut \Cle{4}
- \item \Cle{profondeur} : \textit{profondeur} du tétraèdre ;\hfill{}défaut \Cle{1.25}
- \item \Cle{hauteur} : \textit{hauteur} du tétraèdre ;\hfill{}défaut \Cle{3}
- \item \Cle{alpha} : angle \textit{du sommet de devant} ;\hfill{}défaut \Cle{40}
- \item \Cle{beta} : angle \textit{du sommet du haut} ;\hfill{}défaut \Cle{60}
- \item \Cle{sommets} : liste des sommets (avec délimiteur § !) ;\hfill{}défaut \Cle{A§B§C§D}
- \item \Cle{epaisseur} : épaisseur des arêtes (en \textit{langage simplifié} \TikZ) ;\hfill{}défaut \Cle{thick}
- \item \Cle{aff} : booléen pour afficher les noms des sommets ;\hfill{}défaut \Cle{false}
- \item \Cle{plein} : booléen pour ne pas afficher l'arête \textit{invisible} .\hfill{}défaut \Cle{false}
-\end{itemize}
-\end{codecles}
-
-\begin{codetex}[tikz lower]
-%code tikz
-\tetraPL
-\end{codetex}
-
-\begin{codetex}[tikz lower]
-%code tikz
-\tetraPL[aff,largeur=2,profondeur=0.625,hauteur=1.5]
-\end{codetex}
-
-\begin{codetex}[tikz lower]
-%code tikz
-\tetraPL[plein,aff,largeur=5,beta=60]
-\end{codetex}
-
-%\begin{codeinfo}
-%La ligne est de ce fait à insérer dans un environnement \TikZ, avec les options au choix pour cet environnement.
-%
-%Le code créé les nœuds relatifs aux sommets, et les nomme comme les sommets, ce qui permet de les réutiliser pour éventuellement compléter la figure !
-%\end{codeinfo}
-
-\subsection{Influence des paramètres}
-
-\begin{codeinfo}
-Pour \textit{illustrer} un peu les \Cle{clés}, un petit schéma, avec les différents paramètres utiles.
-
-\begin{center}
- \begin{tikzpicture}[x=1.25cm,y=1.25cm,line width=1pt,line join=bevel]
- \tetraPL[largeur=5,profondeur=1.95,hauteur=2.75,alpha=45,beta=70]
- \draw[draw=none] (A)--(C) node[midway,sloped,above,font=\small\sffamily,CadetBlue] {largeur} ;
- \draw[draw=none] (A)--(B) node[midway,sloped,below,font=\small\sffamily,CadetBlue] {profondeur} ;
- \draw[draw=none] (A)--(D) node[midway,sloped,above,font=\small\sffamily,CadetBlue] {hauteur} ;
- \draw[purple] (0.5,0) arc (0:-45:0.5) ;
- \draw (-22.5:0.5) node[purple,right] {$\alpha$} ;
- \draw[orange] (0.75,0) arc (0:70:0.75) ;
- \draw (35:0.75) node[orange,right] {$\beta$} ;
- \end{tikzpicture}
-\end{center}
-\end{codeinfo}
-
-\begin{codetex}[listing only]
-\begin{center}
- \begin{tikzpicture}[line join=bevel]
- \tetraPL[aff,largeur=7,profondeur=3,hauteur=5,epaisseur={ultra thick},alpha=20,beta=30]
- \draw[very thick,ForestGreen,<->] ($(A)!0.5!(D)$)--($(B)!0.5!(D)$) ;
- \end{tikzpicture}
-\end{center}
-\end{codetex}
-
-\begin{codesortie}
-\begin{center}
- \begin{tikzpicture}[line join=bevel]
- \tetraPL[aff,largeur=7,profondeur=3,hauteur=5,epaisseur={ultra thick},alpha=20,beta=30]
- \draw[very thick,ForestGreen,<->] ($(A)!0.5!(D)$)--($(B)!0.5!(D)$) ;
- \end{tikzpicture}
-\end{center}
-\end{codesortie}
-%
-%\begin{codetex}[listing only]
-% \begin{center}
-% \begin{tikzpicture}[line join=bevel]
-% \pavePL[plein,aff,largeur=7,profondeur=3.5,hauteur=4,sommets=Q§S§D§F§G§H§J§K]
-% \draw[thick,red,densely dotted] (G)--(J) ;
-% \draw[thick,blue,densely dotted] (K)--(H) ;
-% \end{tikzpicture}
-% \end{center}
-%\end{codetex}
-%
-%\medskip
-%
-%\begin{codesortie}
-% \begin{center}
-% \begin{tikzpicture}[line join=bevel]
-% \pavePL[plein,aff,largeur=7,profondeur=3.5,hauteur=4,sommets=Q§S§D§F§G§H§J§K]
-% \draw[thick,red,densely dotted] (G)--(J) ;
-% \draw[thick,blue,densely dotted] (K)--(H) ;
-% \end{tikzpicture}
-% \end{center}
-%\end{codesortie}
-
-\newpage
-
-%\newpage
-%
-\section{Cercle trigo}\label{cercletrigo}
-
-\subsection{Idée}
-
-\begin{codeidee}
-L'idée est d'obtenir une commande pour tracer (en \TikZ) un cercle trigonométrique, avec personnalisation des affichages.
-
-\smallskip
-
-Comme pour les autres commandes \TikZ, l'idée est de laisser l'utilisateur définir et créer son environnement \TikZ, et d'insérer la commande \ctex{cercletrigoPL} pour afficher le cercle.
-\end{codeidee}
-
-\begin{codetex}[tikz lower]
-%code tikz
-\cercletrigoPL
-\end{codetex}
-
-\subsection{Commandes}
-
-\begin{codetex}[listing only]
-...
-\begin{tikzpicture}[<options tikz>]
- ...
- \cercletrigoPL[<clés>]
- ...
-\end{tikzpicture}
-\end{codetex}
-
-\begin{codecles}
-Plusieurs \Cle{Clés} sont disponibles pour cette commande :
-
-\begin{itemize}
- \item la clé \Cle{rayon} qui définit le rayon du cercle ;\hfill{}défaut \Cle{3}
- \item la clé \Cle{epaisseur} qui donne l'épaisseur des traits de base ;\hfill{}défaut \Cle{thick}
- \item la clé \Cle{marge} qui est l'\textit{écartement} de axes ;\hfill{}défaut \Cle{0.25}
- \item la clé \Cle{taillevaleurs} qui est la taille des valeurs remarquables ;\hfill{}défaut \Cle{scriptsize}
- \item la clé \Cle{tailleangles} qui est la taille des angles ;\hfill{}défaut \Cle{footnotesize}
- \item la clé \Cle{couleurfond} qui correspond à la couleur de fond des labels ;\hfill{}défaut \Cle{white}
- \item la clé \Cle{decal} qui correspond au décalage des labels par rapport au cercle ;\hfill{}défaut \Cle{10pt}
- \item un booléen \Cle{moinspi} qui bascule les angles \og -pipi \fg{} à \og zerodeuxpi \fg{} ;\hfill{}défaut \Cle{true}
- \item un booléen \Cle{affangles} qui permet d'afficher les angles ;\hfill{}défaut \Cle{true}
- \item un booléen \Cle{afftraits} qui permet d'afficher les \textit{traits de construction} ;\hfill{}défaut \Cle{true}
- \item un booléen \Cle{affvaleurs} qui permet d'afficher les valeurs remarquables.\hfill{}défaut \Cle{true}
-\end{itemize}
-\end{codecles}
-
-\pagebreak
-
-\begin{codetex}[listing only]
-\begin{center}
- \begin{tikzpicture}[line join=bevel]
- \cercletrigoPL[rayon=2.5,affvaleurs=false,decal=8pt]
- \end{tikzpicture}
- ~~~~
- \begin{tikzpicture}[line join=bevel]
- \cercletrigoPL[rayon=2.5,affangles=false]
- \end{tikzpicture}
- ~~~~
- \begin{tikzpicture}[line join=bevel]
- \cercletrigoPL[rayon=2.5,moinspi=false,couleurfond=orange!15]
- \end{tikzpicture}
-\end{center}
-\end{codetex}
-
-\begin{codesortie}
-\begin{center}
- \begin{tikzpicture}[line join=bevel]
- \cercletrigoPL[rayon=2.5,affvaleurs=false,decal=8pt]
- \end{tikzpicture}
- ~~~~
- \begin{tikzpicture}[line join=bevel]
- \cercletrigoPL[rayon=2.5,affangles=false]
- \end{tikzpicture}
- ~~~~
- \begin{tikzpicture}[line join=bevel]
- \cercletrigoPL[rayon=2.5,moinspi=false,couleurfond=orange!15,taillevaleurs=\tiny]
- \end{tikzpicture}
-\end{center}
-\end{codesortie}
-
-\subsection{Équations trigos}
-
-\begin{codeinfo}
-En plus des \Cle{Clés} précédentes, il existe un complément pour \textit{visualiser} des solutions d'équations simples du type $\cos(x)=\ldots$ ou $\sin(x)=\ldots$.
-\end{codeinfo}
-
-\begin{codecles}
-Les \Cle{Clés} pour cette possibilité sont :
-
-\begin{itemize}
- \item un booléen \Cle{equationcos} pour \textit{activer} \og $\cos=$ \fg; \hfill{}défaut \Cle{false}
- \item un booléen \Cle{equationsin} pour \textit{activer} \og $\sin=$ \fg;\hfill{}défaut \Cle{false}
- \item la clé \Cle{sin} qui est la valeur de l'angle (en degrés) du sin ;\hfill{}défaut \Cle{30}
- \item la clé \Cle{cos} qui est la valeur de l'angle (en degrés) cos ;\hfill{}défaut \Cle{45}
- \item la clé \Cle{couleursol} qui est la couleur des \textit{solutions}.\hfill{}défaut \Cle{blue}
-\end{itemize}
-\end{codecles}
-
-\begin{codetex}[listing only]
-\begin{center}
- \begin{tikzpicture}
- \cercletrigoPL[%
- affangles=false,affvaleurs=false,afftraits=false,rayon=2,equationsin,sin=-30,couleursol=red]
- \end{tikzpicture}
- ~~~~
- \begin{tikzpicture}
- \cercletrigoPL[%
- affangles=false,affvaleurs=false,afftraits=false,rayon=2,equationcos,cos=135,couleursol=orange]
- \end{tikzpicture}
-
- \medskip
-
- \begin{tikzpicture}
- \cercletrigoPL[%
- afftraits=false,affangles=false,rayon=2.75,equationcos,cos=60,couleursol=purple,taillevaleurs=\tiny]
- \end{tikzpicture}
-\end{center}
-\end{codetex}
-
-\begin{codesortie}
-\begin{center}
- \begin{tikzpicture}
- \cercletrigoPL[%
- affangles=false,affvaleurs=false,afftraits=false,rayon=2,equationsin,sin=-30,couleursol=red]
- \end{tikzpicture}
- ~~~~
- \begin{tikzpicture}
- \cercletrigoPL[%
- affangles=false,affvaleurs=false,afftraits=false,rayon=2,equationcos,cos=150,couleursol=orange]
- \end{tikzpicture}
-
- \medskip
-
- \begin{tikzpicture}
- \cercletrigoPL[%
- afftraits=false,affangles=false,rayon=2.75,equationcos,cos=60,couleursol=purple,taillevaleurs=\tiny]
- \end{tikzpicture}
-\end{center}
-\end{codesortie}
-
-\newpage
-
-\part{Outils pour les statistiques}
-
-\section{Paramètres d'une régression linéaire par la méthode des moindres carrés}\label{reglin}
-
-\subsection{Idée}
-
-\begin{codeidee}
-L'idée est d'utiliser une commande qui va permettre de calculer les paramètres principaux d'un régression linéaire par la méthode des moindres carrés.
-
-Le package \ctex{pgfpots} permet de le faire nativement, mais le moteur de calculs de \textsf{pgf} n'est pas des plus performants avec de grandes valeurs, donc ici cela passe par \ctex{xfp} qui permet de gagner en précision !
-
-\smallskip
-
-L'idée est que cette macro calcule et stocke les paramètres dans des variables (le nom peut être personnalisé !) pour exploitation ultérieure :
-
-\begin{itemize}
- \item en calculs \textit{purs} ;
- \item dans un environnement \TikZ{} via \textsf{pgfplots} ou bien en \textit{natif} ;
- \item dans un environnement \PSTricks{} ;
- \item dans un environnement \METAPOST{} (à vérifier quand même) ;
- \item \ldots
-\end{itemize}
-\end{codeidee}
-
-\begin{codetex}[listing only]
-...
-\PLreglin[<clés>]{<listeX>}{<listeY>} %listes avec éléments séparés par des ,
-...
-\end{codetex}
-
-\begin{codeinfo}
-La commande \ctex{PLreglin} va définir également des \textsf{macros} pour chaque coefficient, qui de ce fait seront réutilisables après !
-\end{codeinfo}
-
-\subsection{Commandes}
-
-\begin{codecles}
-Quelques \Cle{Clés} sont disponibles pour cette commande, essentiellement pour \textit{renommer} les paramètres :
-
-\begin{itemize}
- \item la clé \Cle{nomcoeffa} qui permet de définir la variable qui contiendra $a$ ;\hfill{}défaut \Cle{COEFFa}
- \item la clé \Cle{nomcoeffb} qui permet de définir la variable qui contiendra $b$ ;\hfill{}défaut \Cle{COEFFb}
- \item la clé \Cle{nomcoeffr} qui permet de définir la variable qui contiendra $r$ ;\hfill{}défaut \Cle{COEFFr}
- \item la clé \Cle{nomcoeffrd} qui permet de définir la variable qui contiendra $r^2$ ;\hfill{}défaut \Cle{COEFFrd}
- \item la clé \Cle{nomxmin} qui permet de définir la variable qui contiendra $x_{\text{min}}$ ;\hfill{}défaut \Cle{LXmin}
- \item la clé \Cle{nomxmax} qui permet de définir la variable qui contiendra $x_{\text{max}}$.\hfill{}défaut \Cle{LXmax}
-\end{itemize}
-\end{codecles}
-
-\begin{codetex}[listing only]
-%les espaces verticaux n'ont pas été écrits ici
-\def\LLX{1994,1995,1996,1997,1998,1999,2000,2001,2002,2004,2005,2006,2007,2008,2009,2010}
-\def\LLY{1718,1710,1708,1700,1698,1697,1691,1688,1683,1679,1671,1670,1663,1661,1656,1649}
-\PLreglin{\LLX}{\LLY}
-\end{codetex}
-
-\begin{codetex}[listing only]
-%vérif des calculs (noms non modifiables...)
-Liste des X := \showitems\LX.
-Liste des Y := \showitems\LY.
-Somme des X := \LXSomme{} et somme des Y := \LYSomme.
-Moyenne des X := \LXmoy{} et moyenne des Y := \LYmoy.
-Variance des X := \LXvar{} et variance des Y := \LYvar{}
-Covariance des X/Y := \LXYvar.
-%les coefficients, avec des noms modifiables !
-Min des X := \LXmin{} et Max des X := \LXmax.
-Coefficient $a=\COEFFa$.
-Coefficient $b=\COEFFb$.
-Coefficient $r=\COEFFr$.
-Coefficient $r^2=\COEFFrd$.
-\end{codetex}
-
-\begin{codesortie}
-\def\LLX{1994,1995,1996,1997,1998,1999,2000,2001,2002,2004,2005,2006,2007,2008,2009,2010}
-\def\LLY{1718,1710,1708,1700,1698,1697,1691,1688,1683,1679,1671,1670,1663,1661,1656,1649}
-\PLreglin{\LLX}{\LLY}
-
-Liste des X := \showitems\LX.
-
-\smallskip
-
-Liste des Y := \showitems\LY.
-
-\smallskip
-
-Somme des X := \LXSomme{} et somme des Y := \LYSomme.
-
-\smallskip
-
-Moyenne des X := \LXmoy{} et moyenne des Y := \LYmoy.
-
-\smallskip
-
-Variance des X := \LXvar{} et variance des Y := \LYvar{}
-
-\smallskip
-
-Covariance des X/Y := \LXYvar.
-
-\smallskip
-
-Min des X := \LXmin{} et Max des X := \LXmax.
-
-\smallskip
-
-Coefficient $a=\COEFFa$.\tabto{0.5\textwidth}Coefficient $b=\COEFFb$.
-
-%\smallskip
-%
-%Coefficient $b=\COEFFb$.
-
-\smallskip
-
-Coefficient $r=\COEFFr$.\tabto{0.5\textwidth}Coefficient $r^2=\COEFFrd$.
-
-%\smallskip
-%
-%Coefficient $r^2=\COEFFrd$.
-\end{codesortie}
-
-\begin{codeinfo}
-\hfill~\includegraphics[height=3cm]{./graphics/pl-doc-stats_a}~~\includegraphics[height=3cm]{./graphics/pl-doc-stats_b}~~\includegraphics[height=3cm]{./graphics/pl-doc-stats_c}~~\includegraphics[height=3cm]{./graphics/pl-doc-stats_c2}\hfill~
-\end{codeinfo}
-
-\begin{codeinfo}
-Les \textsf{macros} qui contiennent les paramètres de la régression sont donc réutilisables, en tant que nombres réels, donc exploitables par \ctex{siunitx} et \ctex{xfp} pour affichage \textit{fin} ! Ci-dessous un exemple permettant de visualiser tout cela.
-\end{codeinfo}
-
-\begin{codetex}[listing only]
-%les espaces verticaux n'ont pas été écrits ici
-\def\LstX{0,1,3,4,5,6}
-\def\LstY{-35,-37.4,-37.7,-39.9,-39,-39.6}
-%on lance les calculs et on change le nom des "macros-résultats"
-\PLreglin[nomcoeffa=TESTa,nomcoeffb=TESTb,nomcoeffr=TESTr,nomcoeffrd=TESTrd,%
- nomxmin=TESTmin,nomxmax=TESTmax]{\LstX}{\LstY}
-%commandes complémentaires
-\DeclareDocumentCommand\arrond{ s O{3} m }{% * pour afficher signe / opt = précision / argument = nb
- \IfBooleanTF{#1}{\num[print-implicit-plus]{\fpeval{round(#3,#2)}}}{\num{\fpeval{round(#3,#2)}}}
-}
-%paramètres
-Les valeurs extr. de X sont \TESTmin{} et \TESTmax. Une éq. est $y=\arrond[3]{\TESTa}x \arrond*[3]{\TESTb}$.
-Le coeff. de corrélation est $r=\arrond[4]{\TESTr}$, et son carré est $r^2=\arrond[4]{\TESTrd}$.
-\end{codetex}
-
-\begin{codesortie}
-\def\LstX{0,1,3,4,5,6}\def\LstY{-35,-37.4,-37.7,-39.9,-39,-39.6}
-\PLreglin[nomcoeffa=TESTa,nomcoeffb=TESTb,nomcoeffr=TESTr,nomcoeffrd=TESTrd,nomxmin=TESTmin,nomxmax=TESTmax]{\LstX}{\LstY}
-\DeclareDocumentCommand\arrond{ s O{3} m }{
- \IfBooleanTF{#1}{\num[print-implicit-plus]{\fpeval{ceil(#3,#2)}}}
- {\num{\fpeval{round(#3,#2)}}}
-}
-
-Les valeurs extrêmes de X sont \TESTmin{} et \TESTmax. Une équation de la droite de régression de $y$ en $x$ est $y=\arrond[3]{\TESTa}x \arrond*[3]{\TESTb}$.
-
-\smallskip
-
-Le coefficient de corrélation linéaire est $r=\arrond[4]{\TESTr}$, et son carré est $r^2=\arrond[4]{\TESTrd}$.
-\end{codesortie}
-
-\begin{codeinfo}
-\hfill~\includegraphics[height=3cm]{./graphics/pl-doc-stats_d}~~\includegraphics[height=3cm]{./graphics/pl-doc-stats_e}\hfill~
-\end{codeinfo}
-
-\subsection{Intégration dans un environnement \TikZ}
-
-\begin{codeinfo}
-La commande étant \og autonome \fg{}, elle va pouvoir être intégrée dans des environnements graphiques pour permettre un tracé \textit{facile} de la droite de régression.
-\end{codeinfo}
-
-\begin{codetex}[listing only]
-\begin{tikzpicture}
- \begin{axis}[<options des axes, non présentées ici...>]
- \addplot[teal, only marks] table{
- X Y
- 1994 1718 1995 1710 1996 1708 1997 1700 1998 1698 1999 1697 2000 1691 2001 1688
- 2002 1683 2004 1679 2005 1671 2006 1670 2007 1663 2008 1661 2009 1656 2010 1649
- };
- \def\LLX{1994,1995,1996,1997,1998,1999,2000,2001,2002,2004,2005,2006,2007,2008,2009,2010}
- \def\LLY{1718,1710,1708,1700,1698,1697,1691,1688,1683,1679,1671,1670,1663,1661,1656,1649}
- \PLreglin{\LLX}{\LLY}
- \addplot [thick,orange,domain=\LXmin:\LXmax,samples=2]{\COEFFa*x+\COEFFb};
- \addlegendentry{$y = \fpeval{round(\COEFFa,3)}\,x + \fpeval{round(\COEFFb,3)}$};
- \addlegendentry{$R^2=\fpeval{round(\COEFFrd,5)}$};
- \end{axis}
-\end{tikzpicture}
-\end{codetex}
-
-\begin{codesortie}
-\begin{tikzpicture}
- \begin{axis}[
- /pgf/number format/.cd,
- use comma,
- xmin = 1992, xmax = 2012,
- ymin = 1640, ymax = 1730,
- width = 0.7\textwidth,
- height = 0.35\textwidth,
- xtick distance = 2,
- ytick distance = 10,
- grid = both,
- minor tick num = 1,
- major grid style = {lightgray},
- minor grid style = {lightgray!25},
- xlabel = {\small Année ($x$)},
- ylabel = {\small Altitude du glacier (en m) ($y$)},
- x tick label style={/pgf/number format/.cd, set thousands separator={}},
- y tick label style={/pgf/number format/.cd, set thousands separator={}},
- legend cell align = {left},
- legend pos = north east
- ]
- \addplot[teal, only marks] table{
- X Y
- 1994 1718
- 1995 1710
- 1996 1708
- 1997 1700
- 1998 1698
- 1999 1697
- 2000 1691
- 2001 1688
- 2002 1683
- 2004 1679
- 2005 1671
- 2006 1670
- 2007 1663
- 2008 1661
- 2009 1656
- 2010 1649
- };
- \def\LLX{1994,1995,1996,1997,1998,1999,2000,2001,2002,2004,2005,2006,2007,2008,2009,2010}
- \def\LLY{1718,1710,1708,1700,1698,1697,1691,1688,1683,1679,1671,1670,1663,1661,1656,1649}
- \PLreglin{\LLX}{\LLY}
- \addplot [thick,orange,domain=\LXmin:\LXmax,samples=2]{\COEFFa*x+\COEFFb};
- \addlegendentry{$y = \fpeval{round(\COEFFa,3)}\,x + \fpeval{round(\COEFFb,3)}$};
- \addlegendentry{$R^2=\fpeval{round(\COEFFrd,5)}$};
- \end{axis}
-\end{tikzpicture}
-\end{codesortie}
-
-\begin{codeinfo}
-Il existe également une commande auxiliaire, \ctex{PLreglinpts} pour afficher le nuage de points avec quelques options, dans un environnement \TikZ{} classique (sans \textsf{pgfplot})\ldots
-\end{codeinfo}
-
-\begin{codetex}[listing only]
-...
-\begin{tikzpicture}[<options>]
- ...
- \PLreglinpts[<clés>]{<listeX>}{<listeY>}
- ...
-\end{tikzpicture}
-\end{codetex}
-
-\begin{codecles}
-Quelques \Cle{Clés} sont disponibles pour cette commande, essentiellement pour la mise en forme du nuage :
-
-\begin{itemize}
- \item la clé \Cle{couleur} pour la couleur des points du nuage ;\hfill{}défaut \Cle{teal}
- \item la clé \Cle{taille} pour la taille des points (type \textit{cercle}) ;\hfill{}défaut \Cle{2pt}
- \item la clé \Cle{Ox} pour spécifier la valeur initiale Ox (si changement d'origine) ;\hfill{}défaut \Cle{0}
- \item la clé \Cle{Oy} pour spécifier la valeur initiale Oy (si changement d'origine).\hfill{}défaut \Cle{0}
-\end{itemize}
-\end{codecles}
-
-\begin{codetex}[listing only]
-\begin{tikzpicture}[x=0.5cm,y=0.05cm]
- \draw[xstep=1,ystep=5,lightgray!50,very thin] (0,0) grid (20,100);
- \draw[xstep=2,ystep=10,lightgray,thin] (0,0) grid (20,100);
- \draw[thick,->] (0,0)--(20,0) ;
- \draw[thick,->] (0,0)--(0,100) ;
- \foreach \x in {1992,1994,...,2010} \draw[thick] ({\x-1992},4pt)--({\x-1992},-4pt) node[below] {$\x$} ;
- \foreach \y in {1640,1650,...,1730} \draw[thick] (4pt,{\y-1640})--(-4pt,{\y-1640}) node[left] {$\y$} ;
- \def\LLX{1994,1995,1996,1997,1998,1999,2000,2001,2002,2004,2005,2006,2007,2008,2009,2010}
- \def\LLY{1718,1710,1708,1700,1698,1697,1691,1688,1683,1679,1671,1670,1663,1661,1656,1649}
- \def\Ox{1992}\def\Oy{1640}
- \PLreglin{\LLX}{\LLY}
- \PLreglinpts[Ox=1992,Oy=1640,couleur=blue,taille=3pt]{\LLX}{\LLY}
- \draw[orange,very thick,samples=2,domain=\LXmin:\LXmax] plot ({\x-\Ox},{\COEFFa*(\x)+\COEFFb-\Oy}) ;
- \matrix [draw,fill=white,below left] at (current bounding box.north east) {
- \node {$y = \fpeval{round(\COEFFa,3)}\,x + \fpeval{round(\COEFFb,3)}$} ; \\
- \node {$R^2=\fpeval{round(\COEFFrd,5)}$} ; \\
- };
-\end{tikzpicture}
-\end{codetex}
-
-\begin{codesortie}
-\begin{tikzpicture}[x=0.5cm,y=0.05cm]
- \draw[xstep=1,ystep=5,lightgray!50,very thin] (0,0) grid (20,100);
- \draw[xstep=2,ystep=10,lightgray,thin] (0,0) grid (20,100);
- \draw[thick,->] (0,0)--(20,0) ;
- \draw[thick,->] (0,0)--(0,100) ;
- \foreach \x in {1992,1994,...,2010} \draw[thick] ({\x-1992},4pt)--({\x-1992},-4pt) node[below] {$\x$} ;
- \foreach \y in {1640,1650,...,1730} \draw[thick] (4pt,{\y-1640})--(-4pt,{\y-1640}) node[left] {$\y$} ;
- \def\LLX{1994,1995,1996,1997,1998,1999,2000,2001,2002,2004,2005,2006,2007,2008,2009,2010}
- \def\LLY{1718,1710,1708,1700,1698,1697,1691,1688,1683,1679,1671,1670,1663,1661,1656,1649}
- \def\Ox{1992}\def\Oy{1640}
- \PLreglin{\LLX}{\LLY}
- \PLreglinpts[Ox=1992,Oy=1640,couleur=blue,taille=3pt]{\LLX}{\LLY}
- \draw[orange,very thick,samples=2,domain=\LXmin:\LXmax] plot ({\x-\Ox},{\COEFFa*(\x)+\COEFFb-\Oy}) ;
- \matrix [draw,fill=white,below left] at (current bounding box.north east) {
- \node {$y = \fpeval{round(\COEFFa,3)}\,x + \fpeval{round(\COEFFb,3)}$} ; \\
- \node {$R^2=\fpeval{round(\COEFFrd,5)}$} ; \\
- };
-\end{tikzpicture}
-\end{codesortie}
-
-\newpage
-
-\section{Statistiques à deux variables}\label{statsdeuxvars}
-
-\subsection{Idées}
-
-\begin{codeidee}
-L'idée est de \textit{prolonger} le paragraphe précédent pour proposer un environnement \TikZ{} adapté à des situations venant de statistiques à deux variables.
-
-\smallskip
-
-Un des soucis pour ces situations est le fait que le repère dans lequel on travaille n'a pas forcément pour origine $(0\,;\,0)$.
-
-De ce fait - pour éviter des erreurs de \ctex{dimension too large} liées à \TikZ{} - il faut \textit{décaler les axes} pour se ramener à une origine en $O$.
-
-\smallskip
-
-Le code, intimement lié à un environnement \ctex{tikzpicture}, va donc :
-
-\begin{itemize}
- \item préciser les informations utiles comme \ctex{xmin}, \ctex{xmax}, \ctex{Ox}, \ctex{xgrille}, etc
- \item proposer des commandes (sans se soucier des \textit{translations} !) pour :
- \begin{itemize}
- \item tracer une grille (principale et/ou secondaire) ;
- \item tracer les axes (avec légendes éventuelles) et éventuellement les graduer ;
- \end{itemize}
-\end{itemize}
-
-En utilisant les commandes de \textsf{régression linéaire} du paragraphe précédent, il sera de plus possible (sans calculs !) de :
-
-\begin{itemize}
- \item représenter le nuage de points ;
- \item placer le point moyen ;
- \item tracer la droite d'ajustement (obtenue par \ctex{ProfLycee}) ou une autre courbe.
-\end{itemize}
-\end{codeidee}
-
-\begin{codeinfo}
-Le package \ctex{pgfplots} peut être utilisé pour traiter ce genre de situation, mais ne l'utilisant pas, j'ai préféré préparer des \textsf{macros} permettant de s'affranchir de ce package (est-ce pertinent, ça c'est une autre question\ldots).
-\end{codeinfo}
-
-\begin{codetex}[listing only]
-%Listes et calculs
-\def\LLX{1994,1995,1996,1997,1998,1999,2000,2001,2002,2004,2005,2006,2007,2008,2009,2010}
-\def\LLY{1718,1710,1708,1700,1698,1697,1691,1688,1683,1679,1671,1670,1663,1661,1656,1649}
-\PLreglin{\LLX}{\LLY}
-\end{codetex}
-
-\begin{codetex}[listing only]
-%tracé (simple), les options seront présentées juste après
-\begin{tikzpicture}%
- [x=0.5cm,y=0.1cm, %unités
- Ox=1992,xmin=1992,xmax=2012,xgrille=2,xgrilles=1, %axe Ox
- Oy=1640,ymin=1640,ymax=1730,ygrille=10,ygrilles=5] %axe Oy
- \PLgrilletikz \PLaxestikz %grilles et axes
- \PLaxextikz[annee]{1992,1994,...,2010} %axeOx
- \PLaxeytikz{1640,1650,...,1720} %axeOy
- \PLnuagepts{\LLX}{\LLY} %nuage
- \PLcourbe[line width=1.25pt,ForestGreen,samples=2]%
- {\COEFFa*\x+\COEFFb}{\LXmin:\LXmax} %droite de régression
- \PLnuageptmoy %point moyen
-\end{tikzpicture}
-\end{codetex}
-
-\begin{codetex}[listing only]
-%tracé avec options fenêtre par défaut
-\begin{tikzpicture}%
- [....] %paramètres
- \PLfenetresimple<annee>{1992,1994,...,2010}{1640,1650,...,1720} %fenêtre "simple"
- \PLnuagepts{\LLX}{\LLY} %nuage
- \PLcourbe[line width=1.25pt,ForestGreen,samples=2]%
- {\COEFFa*\x+\COEFFb}{\LXmin:\LXmax} %droite de régression
- \PLnuageptmoy %point moyen
-\end{tikzpicture}
-\end{codetex}
-
-\begin{codesortie}
-\def\LLX{1994,1995,1996,1997,1998,1999,2000,2001,2002,2004,2005,2006,2007,2008,2009,2010}
-\def\LLY{1718,1710,1708,1700,1698,1697,1691,1688,1683,1679,1671,1670,1663,1661,1656,1649}
-\PLreglin{\LLX}{\LLY}
-
-\begin{tikzpicture}[x=0.5cm,y=0.1cm,Ox=1992,xmin=1992,xmax=2012,xgrille=2,xgrilles=1,Oy=1640,ymin=1640,ymax=1730,ygrille=10,ygrilles=5]
- \PLgrilletikz \PLaxestikz
- \PLaxextikz[annee]{1992,1994,...,2010}
- \PLaxeytikz{1640,1650,...,1720}
- \PLnuagepts{\LLX}{\LLY}
- \PLcourbe[line width=1.25pt,ForestGreen,samples=2]{\COEFFa*\x+\COEFFb}{\LXmin:\LXmax}
- \PLnuageptmoy
-\end{tikzpicture}
-\end{codesortie}
-
-\subsection{Commandes, clés et options}
-
-\begin{codeinfo}
-Les \Cle{paramètres} nécessaires à la bonne utilisation des commandes suivantes sont à déclarer directement dans l'environnement \ctex{tikzpicture}, seules versions \og x \fg{} sont présentées ici:
-
-\begin{itemize}
- \item \Cle{xmin}, stockée dans \ctex{\textbackslash{}xmin} ;\hfill{}défaut \Cle{-3}
- \item \Cle{xmax}, stockée dans \ctex{\textbackslash{}xmax} ;\hfill{}défaut \Cle{3}
- \item \Cle{Ox}, stockée dans \ctex{\textbackslash{}axexOx}, origine de l'axe $(Ox)$ ;\hfill{}défaut \Cle{0}
- \item \Cle{xgrille}, stockée dans \ctex{\textbackslash{}xgrille}, graduation principale ;\hfill{}défaut \Cle{1}
- \item \Cle{xgrilles}, stockée dans \ctex{\textbackslash{}xgrilles}, graduation secondaire.\hfill{}défaut \Cle{0.5}
-\end{itemize}
-
-La fenêtre d'affichage (de sortie) sera donc \textit{portée} par le rectangle de coins $(xmin\,;\,ymin)$ et $(xmax\,;\,ymax)$ ; ce qui correspond en fait à la fenêtre \TikZ{} \textit{portée} par le rectangle de coins $(xmin-Ox\,;\,ymin-Oy)$ et $(xmax-Ox\,;\,ymax-Oy)$.
-
-\smallskip
-
-Les commandes ont -- pour certaines -- pas mal de \Cle{clés} pour des réglages fins, mais dans la majorité des cas elles ne sont pas forcément \textit{utiles}.
-\end{codeinfo}
-
-\begin{codeinfo}
-Pour illustrer les commandes et options de ce paragraphe, la base sera le graphique présenté précédemment.
-\end{codeinfo}
-
-\begin{codetex}[listing only]
-%...code tikz
- \PLgrilletikz[<options>][<options grille ppale>][<options grille second.>]
-\end{codetex}
-
-\begin{codecles}
-Cette commande permet de tracer une grille principale et/ou une grille secondaire :
-
-\begin{itemize}
- \item les premières \Cle{clés} sont les booléens \Cle{affp} et \Cle{affs} qui affichent ou non les grilles ;\hfill~défaut \Cle{true}
- \item les options des grilles sont en \TikZ. \hfill~défaut \Cle{thin,lightgray} et \Cle{very thin,lightgray}
-\end{itemize}
-\end{codecles}
-
-\begin{codetex}[listing only]
-\begin{tikzpicture}%
- [x=0.35cm,y=0.07cm,%
- Ox=1992,xmin=1992,xmax=2012,xgrille=2,xgrilles=1,%
- Oy=1640,ymin=1640,ymax=1730,ygrille=10,ygrilles=5]
- \PLgrilletikz
-\end{tikzpicture}
-~~
-\begin{tikzpicture}%
- [x=0.35cm,y=0.07cm,%
- Ox=1992,xmin=1992,xmax=2012,xgrille=2,xgrilles=1,%
- Oy=1640,ymin=1640,ymax=1730,ygrille=10,ygrilles=5]
- \PLgrilletikz[affp=false][][orange,densely dotted]
-\end{tikzpicture}
-\end{codetex}
-
-\begin{codesortie}
-\hfill~
-\begin{tikzpicture}%
- [x=0.35cm,y=0.07cm,%
- Ox=1992,xmin=1992,xmax=2012,xgrille=2,xgrilles=1,%
- Oy=1640,ymin=1640,ymax=1730,ygrille=10,ygrilles=5]
- \PLgrilletikz
-\end{tikzpicture}
-~~
-\begin{tikzpicture}%
- [x=0.35cm,y=0.07cm,%
- Ox=1992,xmin=1992,xmax=2012,xgrille=2,xgrilles=1,%
- Oy=1640,ymin=1640,ymax=1730,ygrille=10,ygrilles=5]
- \PLgrilletikz[affp=false][][orange,densely dotted]
-\end{tikzpicture}
-\hfill~
-\end{codesortie}
-
-\begin{codetex}[listing only]
-%...code tikz
- \PLaxestikz[<options>]
-\end{codetex}
-
-\begin{codecles}
-Cette commande permet de tracer les axes, avec des \Cle{clés} :
-
-\begin{itemize}
- \item \Cle{epaisseur} qui est l'épaisseur des traits ; \hfill~défaut \Cle{1.25pt}
- \item \Cle{police} qui est le style des labels des axes ; \hfill~défaut \Cle{\textbackslash{}normalsize\textbackslash{}normalfont}
- \item \Cle{labelx} qui est le label de l'axe $(Ox)$ ; \hfill~défaut \Cle{\${}x\$}
- \item \Cle{labely} qui est le label de l'axe $(Oy)$ ; \hfill~défaut \Cle{\${}y\$}
- \item \Cle{afflabel} qui est le code pour préciser quels labels afficher, entre \Cle{x}, \Cle{y} ou \Cle{xy} ; \hfill~défaut \Cle{vide}
- \item \Cle{poslabelx} pour la position du label de $(Ox)$ en bout d'axe ; \hfill~défaut \Cle{right}
- \item \Cle{poslabely} pour la position du label de $(Oy)$ en bout d'axe ; \hfill~défaut \Cle{above}
- \item \Cle{echellefleche} qui est l'échelle de la flèche des axes ; \hfill~défaut \Cle{1}
- \item \Cle{typefleche} qui est le type de la flèche des axes.\hfill~défaut \Cle{>}
-\end{itemize}
-\end{codecles}
-
-\begin{codetex}[listing only]
-%code tikz
- \PLaxestikz
-
-%code tikz
- \PLaxestikz%
- [afflabel=xy,labelx={Année},labely={Altitude},%
- poslabelx={below right},poslabely={above left}%
- police=\small\sffamily]
-\end{codetex}
-
-\begin{codesortie}
-\hfill~
-\begin{tikzpicture}%
- [x=0.35cm,y=0.07cm,%
- Ox=1992,xmin=1992,xmax=2012,xgrille=2,xgrilles=1,%
- Oy=1640,ymin=1640,ymax=1730,ygrille=10,ygrilles=5]
- \PLaxestikz
-\end{tikzpicture}
-~~
-\begin{tikzpicture}%
- [x=0.35cm,y=0.07cm,%
- Ox=1992,xmin=1992,xmax=2012,xgrille=2,xgrilles=1,%
- Oy=1640,ymin=1640,ymax=1730,ygrille=10,ygrilles=5]
- \PLaxestikz%
- [afflabel=xy,labelx={Année},labely={Altitude},%
- poslabelx={below right},poslabely={above left},%
- police=\small\sffamily]
-\end{tikzpicture}
-\hfill~
-\end{codesortie}
-
-%les axes
-
-\begin{codetex}[listing only]
-%...code tikz
- \PLaxextikz[<options>]{valeurs}
- \PLaxeytikz[<options>]{valeurs}
-\end{codetex}
-
-\begin{codecles}
-Ces commande permet de tracer les graduations des axes, avec des \Cle{clés} identiques pour les deux directions :
-
-\begin{itemize}
- \item \Cle{epaisseur} qui est l'épaisseur des graduations ; \hfill~défaut \Cle{1.25pt}
- \item \Cle{police} qui est le style des labels des graduations ; \hfill~défaut \Cle{\textbackslash{}normalsize\textbackslash{}normalfont}
- \item \Cle{posgrad} qui est la position des graduations par rapport à l'axe ; \hfill~défaut \Cle{below} et \Cle{left}
- \item \Cle{hautgrad} qui est la position des graduations (sous la forme \Cle{lgt} ou \Cle{lgta/lgtb}) ; \hfill~défaut \Cle{4pt}
- \item le booléen \Cle{affgrad} pour afficher les valeurs (formatés avec \ctex{num} donc dépendant de \ctex{sisetup}) des graduations ; \hfill~défaut \Cle{true}
- \item le booléen \Cle{afforigine} pour afficher la graduation de l'origine ; \hfill~défaut \Cle{true}
- \item le booléen \Cle{annee} qui permet de ne pas formater les valeurs des graduations (type \textsf{année}). \hfill~défaut \Cle{false}
-\end{itemize}
-\end{codecles}
-
-\begin{codetex}[listing only]
-%code tikz
- \PLaxextikz[police=\small]{1992,1994,...,2010}
- \PLaxeytikz{1640,1650,...,1720}
-
-%code tikz
- \PLaxextikz[police=\small,annee,hautgrad=0pt/4pt]{1992,1994,...,2010}
- \PLaxeytikz[affgrad=false,hautgrad=6pt]{1640,1650,...,1720}
-
-%des axes fictifs (en gris) sont rajoutés pour la lisibilité du code de sortie
-\end{codetex}
-
-\begin{codesortie}
-\hfill~
-\begin{tikzpicture}%
- [x=0.35cm,y=0.07cm,%
- Ox=1992,xmin=1992,xmax=2012,xgrille=2,xgrilles=1,%
- Oy=1640,ymin=1640,ymax=1730,ygrille=10,ygrilles=5]
- \draw[gray,line width=1.25pt,->] ({\xmin-\axexOx},0) -- ({\xmax-\axexOx},0) ;
- \draw[gray,line width=1.25pt,->] (0,{\ymin-\axeyOy}) -- (0,{\ymax-\axeyOy}) ;
- \PLaxextikz[police=\small]{1992,1994,...,2010}
- \PLaxeytikz{1640,1650,...,1720}
-\end{tikzpicture}
-~~
-\begin{tikzpicture}%
- [x=0.35cm,y=0.07cm,%
- Ox=1992,xmin=1992,xmax=2012,xgrille=2,xgrilles=1,%
- Oy=1640,ymin=1640,ymax=1730,ygrille=10,ygrilles=5]
- \draw[gray,line width=1.25pt,->] ({\xmin-\axexOx},0) -- ({\xmax-\axexOx},0) ;
- \draw[gray,line width=1.25pt,->] (0,{\ymin-\axeyOy}) -- (0,{\ymax-\axeyOy}) ;
- \PLaxextikz[police=\small,annee,hautgrad=0pt/4pt]{1992,1994,...,2010}
- \PLaxeytikz[affgrad=false,hautgrad=6pt]{1640,1650,...,1720}
-\end{tikzpicture}
-\hfill~
-\end{codesortie}
-
-\subsection{Commandes annexes}
-
-\begin{codeinfo}
-Il existe, de manière marginale, quelques commandes complémentaires qui ne seront pas trop détaillées mais qui sont présentes dans l'introduction :
-
-\begin{itemize}
- \item \ctex{PLfenetre} qui restreint les tracés à la fenêtre (utile pour des courbes qui \textit{débordent}) ;
- \item \ctex{PLfenetresimple} qui permet d'automatiser le tracé des grilles/axes/graduations dans leurs versions par défaut, avec peu de paramétrages ;
- \item \ctex{PLorigine} pour rajouter le libellé de l'origine si non affiché par les axes.
-\end{itemize}
-\end{codeinfo}
-
-\begin{codetex}[listing only]
-%code tikz
- \PLfenetre %on restreint les tracés
- \PLfenetresimple<options axe Ox>{liste abscisses}<options axe Oy>{liste ordonnées}
-\end{codetex}
-
-%%l'origine
-%
-%\begin{codetex}[listing only]
-%%...code tikz
-% \PLorigine[<options>]
-%\end{codetex}
-
-\subsection{Interactions avec PLreglin}
-
-\begin{codetex}[listing only]
-%...code tikz
- \PLnuagepts[<options>]{listeX}{listeY}
-\end{codetex}
-
-\begin{codecles}
-Cette commande, liée à la commande \ctex{PLreglin} permet de représenter le nuage de points associé aux deux listes, avec les \Cle{clés} suivantes :
-
-\begin{itemize}
- \item \Cle{taille} qui est la taille des points du nuage ; \hfill~défaut \Cle{2pt}
- \item \Cle{style} parmi \Cle{o} (rond) ou \Cle{x} (croix) ou \Cle{+} (plus) ; \hfill~défaut \Cle{o}
- \item \Cle{couleur} qui est la couleur (éventuellement \Cle{couleurA/couleurB} pour les ronds). \hfill~défaut \Cle{blue}
-\end{itemize}
-\end{codecles}
-
-\begin{codetex}[listing only]
-\def\LLX{1994,1995,1996,1997,1998,1999,2000,2001,2002,2004,2005,2006,2007,2008,2009,2010}
-\def\LLY{1718,1710,1708,1700,1698,1697,1691,1688,1683,1679,1671,1670,1663,1661,1656,1649}
-
-\begin{tikzpicture}[...]
- \PLnuagepts[couleur=blue/red]{\LLX}{\LLY}
-\end{tikzpicture}
-~~
-\begin{tikzpicture}[...]
- \PLnuagepts[couleur=ForestGreen,style=x,taille=6pt]{\LLX}{\LLY}
-\end{tikzpicture}
-\end{codetex}
-
-\begin{codesortie}
-\def\LLX{1994,1995,1996,1997,1998,1999,2000,2001,2002,2004,2005,2006,2007,2008,2009,2010}
-\def\LLY{1718,1710,1708,1700,1698,1697,1691,1688,1683,1679,1671,1670,1663,1661,1656,1649}
-\PLreglin{\LLX}{\LLY}
-
-\begin{tikzpicture}[x=0.35cm,y=0.07cm,Ox=1992,xmin=1992,xmax=2012,xgrille=2,xgrilles=1,Oy=1640,ymin=1640,ymax=1730,ygrille=10,ygrilles=5]
- \PLgrilletikz \PLaxestikz
- \PLaxextikz[annee,police=\small]{1992,1994,...,2010}
- \PLaxeytikz{1640,1650,...,1720}
- \PLnuagepts[couleur=blue/red]{\LLX}{\LLY}
-\end{tikzpicture}
-~~
-\begin{tikzpicture}[x=0.35cm,y=0.07cm,Ox=1992,xmin=1992,xmax=2012,xgrille=2,xgrilles=1,Oy=1640,ymin=1640,ymax=1730,ygrille=10,ygrilles=5]
- \PLgrilletikz \PLaxestikz
- \PLaxextikz[annee,police=\small]{1992,1994,...,2010}
- \PLaxeytikz{1640,1650,...,1720}
- \PLnuagepts[couleur=ForestGreen,style=x,taille=6pt]{\LLX}{\LLY}
-\end{tikzpicture}
-\end{codesortie}
-
-%point moyen
-\begin{codetex}[listing only]
-%...code tikz
- \PLnuageptmoy[<options>]
-\end{codetex}
-
-\begin{codecles}
-Cette commande permet de rajouter le point moyen du nuage, calculé par la commande \ctex{PLreglin}, avec les \Cle{clés} :
-
-\begin{itemize}
- \item \Cle{police}, comme précédemment ; \hfill~défaut \Cle{\textbackslash{}normalsize\textbackslash{}normalfont} ;
- \item \Cle{taille}, taille du point moyen ; \hfill~défaut \Cle{4pt}
- \item \Cle{couleur}, couleur du point moyen ; \hfill~défaut \Cle{red}
- \item \Cle{style} parmi \Cle{o} (rond) ou \Cle{x} (croix) ou \Cle{+} (plus) ; \hfill~défaut \Cle{o}
- \item \Cle{xg}, abscisse du point moyen, récupérable via \ctex{PLRegLin} ; \hfill~défaut \Cle{\textbackslash{}LXmoy}
- \item \Cle{yg}, ordonnée du point moyen, récupérable via \ctex{PLRegLin} ; \hfill~défaut \Cle{\textbackslash{}LYmoy}
- \item \Cle{nom}, label du point moyen ; \hfill~défaut \Cle{G}
- \item \Cle{pos} qui est la position du label par rapport au point ; \hfill~défaut \Cle{above}
- \item \Cle{decal} qui est l'éloignement de la position du label par rapport au point ; \hfill~défaut \Cle{0pt}
- \item la booléen \Cle{affnom} qui affiche ou non le libellé.\hfill~défaut \Cle{true}
-\end{itemize}
-\end{codecles}
-
-\begin{codetex}[listing only]
-\def\LLX{1994,1995,1996,1997,1998,1999,2000,2001,2002,2004,2005,2006,2007,2008,2009,2010}
-\def\LLY{1718,1710,1708,1700,1698,1697,1691,1688,1683,1679,1671,1670,1663,1661,1656,1649}
-\PLreglin{\LLX}{\LLY}
-
-\begin{tikzpicture}[...]
- \PLnuagepts[couleur=blue/red]{\LLX}{\LLY}
- \PLnuageptmoy
-\end{tikzpicture}
-~~
-\begin{tikzpicture}[...]
- \PLnuagepts[couleur=ForestGreen,style=x,taille=6pt]{\LLX}{\LLY}
- \PLnuageptmoy[couleur=orange,taille=8pt,style=+,nom={$G_1$}]
-\end{tikzpicture}
-\end{codetex}
-
-\begin{codesortie}
-\def\LLX{1994,1995,1996,1997,1998,1999,2000,2001,2002,2004,2005,2006,2007,2008,2009,2010}
-\def\LLY{1718,1710,1708,1700,1698,1697,1691,1688,1683,1679,1671,1670,1663,1661,1656,1649}
-\PLreglin{\LLX}{\LLY}
-
-\begin{tikzpicture}[x=0.35cm,y=0.07cm,Ox=1992,xmin=1992,xmax=2012,xgrille=2,xgrilles=1,Oy=1640,ymin=1640,ymax=1730,ygrille=10,ygrilles=5]
- \PLgrilletikz \PLaxestikz
- \PLaxextikz[annee,police=\small]{1992,1994,...,2010}
- \PLaxeytikz{1640,1650,...,1720}
- \PLnuagepts[couleur=blue/red]{\LLX}{\LLY}
- \PLnuageptmoy
-\end{tikzpicture}
-~~
-\begin{tikzpicture}[x=0.35cm,y=0.07cm,Ox=1992,xmin=1992,xmax=2012,xgrille=2,xgrilles=1,Oy=1640,ymin=1640,ymax=1730,ygrille=10,ygrilles=5]
- \PLgrilletikz \PLaxestikz
- \PLaxextikz[annee,police=\small]{1992,1994,...,2010}
- \PLaxeytikz{1640,1650,...,1720}
- \PLnuagepts[couleur=ForestGreen,style=x,taille=6pt]{\LLX}{\LLY}
- \PLnuageptmoy[couleur=orange,taille=8pt,style=+,nom={$G_1$},pos=below]
-\end{tikzpicture}
-\end{codesortie}
-
-%courbe
-\begin{codetex}[listing only]
-%...code tikz
- \PLcourbe[<options>]{formule}{domaine}
-\end{codetex}
-
-\begin{codecles}
-Cette commande permet de rajouter une courbe sur le graphique (sans se soucier de la transformation de son expression) avec les arguments :
-
-\begin{itemize}
- \item \Cle{optionnels} qui sont - en \TikZ{} - les paramètres du tracé ;
- \item le premier mandataire, est - en langage \TikZ{} - l'expression de la fonction à tracer, donc avec \ctex{\textbackslash{}x} comme variable ;
- \item le second mandataire est le domaine du tracé , sous la forme \ctex{valxmin:valxmax}.
-\end{itemize}
-\end{codecles}
-
-\begin{codeinfo}
-L'idée principale est de récupérer les variables de la régression linéaire pour tracer la droite d'ajustement \textit{à moindres frais} !
-\end{codeinfo}
-
-\begin{codeinfo}
- Toute courbe peut être tracée sur ce principe, par contre il faudra saisir la fonction \textit{à la main}.
-\end{codeinfo}
-
-\begin{codetex}[listing only]
-\def\LLX{1994,1995,1996,1997,1998,1999,2000,2001,2002,2004,2005,2006,2007,2008,2009,2010}
-\def\LLY{1718,1710,1708,1700,1698,1697,1691,1688,1683,1679,1671,1670,1663,1661,1656,1649}
-\PLreglin{\LLX}{\LLY}
-
-\begin{tikzpicture}[...]
- \PLnuagepts[couleur=blue/red]{\LLX}{\LLY} \PLnuageptmoy
- \PLcourbe[line width=1.25pt,ForestGreen,samples=2]{\COEFFa*\x+\COEFFb}{\xmin:\xmax}
-\end{tikzpicture}
-\end{codetex}
-
-\begin{codesortie}
-\def\LLX{1994,1995,1996,1997,1998,1999,2000,2001,2002,2004,2005,2006,2007,2008,2009,2010}
-\def\LLY{1718,1710,1708,1700,1698,1697,1691,1688,1683,1679,1671,1670,1663,1661,1656,1649}
-\PLreglin{\LLX}{\LLY}
-
-\begin{tikzpicture}[x=0.35cm,y=0.07cm,Ox=1992,xmin=1992,xmax=2012,xgrille=2,xgrilles=1,Oy=1640,ymin=1640,ymax=1730,ygrille=10,ygrilles=5]
- \PLgrilletikz \PLaxestikz
- \PLaxextikz[annee,police=\small]{1992,1994,...,2010}
- \PLaxeytikz{1640,1650,...,1720}
- \PLnuagepts[couleur=blue/red]{\LLX}{\LLY} \PLnuageptmoy
- \PLcourbe[line width=1.25pt,ForestGreen,samples=2]{\COEFFa*\x+\COEFFb}{\xmin:\xmax}
-\end{tikzpicture}
-\end{codesortie}
-
-\begin{codetex}[listing only]
-\def\LLX{1994,1995,1996,1997,1998,1999,2000,2001,2002,2004,2005,2006,2007,2008,2009,2010}
-\def\LLY{1718,1710,1708,1700,1698,1697,1691,1688,1683,1679,1671,1670,1663,1661,1656,1649}
-
-\begin{tikzpicture}[...]
- \PLnuagepts[couleur=blue/red]{\LLX}{\LLY} \PLfenetre %on fixe la fenêtre
- \PLcourbe[line width=1.25pt,orange,samples=500]{-(\x-2000)*(\x-2000)+1700}{\xmin:\xmax}
-\end{tikzpicture}
-\end{codetex}
-
-\begin{codesortie}
-\def\LLX{1994,1995,1996,1997,1998,1999,2000,2001,2002,2004,2005,2006,2007,2008,2009,2010}
-\def\LLY{1718,1710,1708,1700,1698,1697,1691,1688,1683,1679,1671,1670,1663,1661,1656,1649}
-
-\begin{tikzpicture}[x=0.35cm,y=0.07cm,Ox=1992,xmin=1992,xmax=2012,xgrille=2,xgrilles=1,Oy=1640,ymin=1640,ymax=1730,ygrille=10,ygrilles=5]
- \PLgrilletikz \PLaxestikz
- \PLaxextikz[annee,police=\small]{1992,1994,...,2010}
- \PLaxeytikz{1640,1650,...,1720}
- \PLnuagepts[couleur=blue/red]{\LLX}{\LLY} \PLfenetre
- \PLcourbe[line width=1.25pt,orange,samples=500]{-(\x-2000)*(\x-2000)+1700}{\xmin:\xmax}
-\end{tikzpicture}
-\end{codesortie}
-
-\newpage
-
-\section{Boîtes à moustaches}\label{boiteamoustaches}
-
-\subsection{Introduction}
-
-\begin{codeidee}
-L'idée est de proposer une commande, à intégrer dans un environnement \TikZ, pour tracer une boîte à moustaches grâce aux paramètres, saisis par l'utilisateur.
-
-\smallskip
-
-Le code ne calcule pas les paramètres, il ne fait \textit{que} tracer la boîte à moustaches !
-\end{codeidee}
-
-\begin{codetex}[]
-\begin{tikzpicture}
- \PLboitemoust[parametres={10/15/17/19/20}]
-\end{tikzpicture}
-\end{codetex}
-
-\begin{codeinfo}
-Étant donnée que la commande est intégrée dans un environnement \TikZ, les unités peuvent/doivent donc être précisées, \textit{comme d'habitude}, si besoin.
-\end{codeinfo}
-
-\subsection{Clés et options}
-
-\begin{codecles}
-Quelques \Cle{clés} sont disponibles pour cette commande :
-
-\begin{itemize}
- \item la clé \Cle{parametres} qui sont sous la forme \Cle{Min/Q1/Med/Q3/Max} ;
- \item la clé \Cle{couleur} qui est la couleur de la boîte ; \hfill~défaut \Cle{black}
- \item la clé \Cle{elevation} qui est la position verticale (ordonnée des moustaches) de la boîte ; \hfill~défaut \Cle{1.5}
- \item la clé \Cle{hauteur} qui est la hauteur de la boîte ; \hfill~défaut \Cle{1}
- \item la clé \Cle{moyenne} qui est la moyenne (optionnelle) de la série ;
- \item la clé \Cle{epaisseur} qui est l'épaisseur des traits de la boîte ; \hfill~défaut \Cle{thick}
- \item la clé \Cle{remplir} qui est la couleur de remplissage de la boîte ; \hfill~défaut \Cle{white}
- \item le booléen \Cle{affmoyenne} qui permet d'afficher ou non la moyenne (sous forme d'un point) ; \hfill~défaut \Cle{false}
- \item le booléen \Cle{pointilles} qui permet d'afficher des pointillés au niveau des paramètres ; \hfill~défaut \Cle{false}
- \item le booléen \Cle{valeurs} qui permet d'afficher les valeurs des paramètres au niveau des abscisses.\hfill~défaut \Cle{false}
-\end{itemize}
-\end{codecles}
-
-\begin{codetex}[]
-\begin{tikzpicture}
- \PLboitemoust[epaisseur=very thick,parametres={10/15/17/19/20},moyenne=18.5,couleur=blue,affmoyenne,%
- pointilles,valeurs,hauteur=2.25,elevation=2.75]
-\end{tikzpicture}
-\end{codetex}
-
-\begin{codetex}[listing only]
-%une grille a été rajoutée pour visualiser la "position verticale"
-\begin{center}
- \begin{tikzpicture}[x=0.1cm]
- \PLboitemoust[epaisseur=ultra thick,parametres={100/150/170/190/200},couleur=blue]
- \PLboitemoust[epaisseur=thin,elevation=2.5,parametres={80/100/110/120/150},couleur=red]
- \PLboitemoust[elevation=4,parametres={100/140/145/160/210},couleur=ForestGreen,remplir=ForestGreen!25]
-\end{tikzpicture}
-\end{center}
-\end{codetex}
-
-\begin{codesortie}
-\begin{center}
- \begin{tikzpicture}[x=0.1cm]
- \draw[xstep=10,ystep=0.5,very thin,lightgray] (80,0) grid (210,4.5) ;
- \foreach \x in {80,90,...,210} \draw[very thin,lightgray] (\x,3pt)--(\x,-3pt) node[below] {\num{\x}} ;
- \foreach \y in {0,0.5,...,4.5} \draw[very thin,lightgray] ($(210,\y)+(-3pt,0)$)--($(210,\y)+(3pt,0)$) node[right] {\num{\y}} ;
- \PLboitemoust[epaisseur=ultra thick,parametres={100/150/170/190/200},couleur=blue]
- \PLboitemoust[epaisseur=thin,elevation=2.5,parametres={80/100/110/120/150},couleur=red]
- \PLboitemoust[elevation=4,parametres={100/140/145/160/210},couleur=ForestGreen,remplir=ForestGreen!25]
- \end{tikzpicture}
-\end{center}
-\end{codesortie}
-
-\subsection{Commande pour placer un axe horizontal}
-
-\begin{codeidee}
-L'idée est de proposer, en parallèle de la commande précédente, une commande pour tracer un axe horizontal \og sous \fg{} les éventuelles boîtes à moustaches.
-\end{codeidee}
-
-\begin{codetex}[]
-\begin{tikzpicture}
- \PLboitemoustaxe[min=10,max=20]
- \PLboitemoust[parametres={10/15/17/19/20}]
-\end{tikzpicture}
-\end{codetex}
-
-\begin{codetex}[]
-\begin{tikzpicture}
- \PLboitemoustaxe[min=10,max=20,]
- \PLboitemoust[parametres={10/15/17/19/20},valeurs,pointilles]
-\end{tikzpicture}
-\end{codetex}
-
-\begin{codecles}
-Quelques \Cle{clés} sont disponibles pour cette commande :
-
-\begin{itemize}
- \item la clé \Cle{min} qui est la valeur minimale de l'axe horizontal ;
- \item la clé \Cle{max} qui est la valeur minimale de l'axe horizontal ;
- \item la clé \Cle{elargir} qui est le pourcentage l'élargissement de l'axe ;\hfill~défaut \Cle{0.1}
- \item la clé \Cle{epaisseur} qui est l'épaisseur des traits de la boîte ; \hfill~défaut \Cle{thick}
- \item la clé \Cle{valeurs} qui est la liste (compréhensible en \TikZ) des valeurs à afficher.
-\end{itemize}
-\end{codecles}
-
-\begin{codetex}[]
-\begin{tikzpicture}
- \PLboitemoustaxe[min=8,max=21,affvaleurs,valeurs={8,9,...,21},elargir=0.02]
- \PLboitemoust[parametres={10/15/17/19/20},moyenne=18.5,couleur=blue]
- \PLboitemoust[elevation=2.5,parametres={8/10/11/12/15},couleur=red]
- \PLboitemoust[elevation=4,parametres={10/14/14.5/16/21},couleur=ForestGreen,remplir=ForestGreen!25]
-\end{tikzpicture}
-\end{codetex}
-
-\begin{codeinfo}
-Le placement des différentes boîtes n'est pas automatique, donc il faut penser à cela avant de se lancer dans le code.
-
-Sachant que la hauteur par défaut est de 1, il est -- a priori -- intéressant de placer les boîtes à des \Cle{élévations} de \num{1} puis \num{2.5} puis \num{4} etc
-\end{codeinfo}
-
-\newpage
-
-\part{Outils pour les probabilités}
-
-\section{Calculs de probabilités}\label{calcprobas}
-
-\subsection{Introduction}
-
-\begin{codeidee}
-L'idée est de proposer des commandes permettant de calculer des probabilités avec des lois classiques :
-
-\begin{itemize}
- \item binomiale ;
- \item normale ;
- \item exponentielle ;
- \item de Poisson ;
- \item géométrique ;
- \item hypergéométrique.
-\end{itemize}
-\end{codeidee}
-
-\begin{codeinfo}
-Les commandes sont de deux natures :
-
-\begin{itemize}
- \item des commandes pour calculer, grâce au package \ctex{xintexpr} ;
- \item des commandes pour formater le résultat de \ctex{xintexpr}, grâce à \ctex{siunitx}.
-\end{itemize}
-
-De ce fait, les options de \ctex{siunitx} de l'utilisateur affecterons les formatages du résultat, la commande va \og forcer \fg{} les arrondis et l'écriture scientifique.
-\end{codeinfo}
-
-\subsection{Calculs \og simples \fg}
-
-\begin{codetex}[listing only]
-%loi binomiale B(n,p)
-\calcPbinomP{n}{p}{k} %P(X=k)
-\calcPbinomC{n}{p}{a}{b} %P(a<=X<=b)
-
-%loi de Poisson P (l)
-\calcPpoissP{l}{k} %P(X=k)
-\calcPpoissC{l}{a}{b} %P(a<=X<=b)
-
-%loi géométrique G (p)
-\calcPgeomP{p}{k} %P(X=k)
-\calcPgeomC{l}{a}{b} %P(a<=X<=b)
-
-%loi hypergéométrique H (N,n,m)
-\calcPhypergeomP{N}{n}{m}{k} %P(X=k)
-\calcPhypergeomP{N}{n}{m}{a}{b} %P(a<=X<=b)
-
-%loi normale N(m,s)
-\calcPnormC{m}{s}{a}{b} %P(a<=X<=b)
-
-%loi exponentielle E(l)
-\calcPexpoC{l}{a}{b} %P(a<=X<=b)
-\end{codetex}
-
-\begin{codecles}
-Les probabilités calculables sont donc -- comme pour beaucoup de modèles de calculatrices -- les probabilités \textbf{P}onctuelles ($P(X=k)$) et \textbf{C}umulées ($P(a\leqslant X\leqslant b)$).
-
-\smallskip
-
-Pour les probabilités cumulées, on peut utiliser \ctex{*} comme borne ($a$ ou $b$), pour les probabilités du type $P(X\leqslant b)$ et $P(X \geqslant a)$.
-\end{codecles}
-
-\begin{codetex}[listing only]
-% X -> B(5,0.4)
-$P(X=3) \approx \calcPbinomP{5}{0.4}{3}$.
-$P(X\leqslant1) \approx \calcPbinomC{5}{0.4}{*}{1}$.
-
-% X -> B(100,0.02)
-$P(X=10) \approx \calcPbinomP{100}{0.02}{10}$.
-$P(15\leqslant X\leqslant25) \approx \calcPbinomC{100}{0.02}{15}{25}$.
-
-% Y -> P(5)
-$P(Y=3) \approx \calcPpoissP{5}{3}$.
-$P(Y\geqslant2) \approx \calcPpoissC{5}{2}{*}$.
-
-% T -> G(0.5)
-$P(T=100) \approx \calcPgeomP{0.5}{3}$.
-$P(T\leqslant5) \approx \calcPgeomC{0.5}{*}{5}$.
-
-% W -> H(50,10,5)
-$P(W=4) \approx \calcPhypergeomP{50}{10}{5}{4}$.
-$P(1\leqslant W\leqslant3) \approx \calcPhypergeomP{50}{10}{5}{1}{3}$.
-\end{codetex}
-
-\begin{codesortie}[listing only]
-$\bullet~~~~X \hookrightarrow \mathcal{B}(5\,;\,0,4)$ :\\
-$P(X=3) \approx \calcPbinomP{5}{0.4}{3}$.\\
-$P(X\leqslant1) \approx \calcPbinomC{5}{0.4}{*}{1}$.
-
-\medskip
-
-$\bullet~~~~X \hookrightarrow \mathcal{B}(100\,;\,0,02)$ :\\
-$P(X=10) \approx \calcPbinomP{100}{0.02}{10}$.\\
-$P(15\leqslant X\leqslant25) \approx \calcPbinomC{100}{0.02}{15}{25}$.
-
-\medskip
-
-$\bullet~~~~Y \hookrightarrow \mathcal{P}_5$ :\\
-$P(Y=3) \approx \calcPpoissP{5}{3}$.\\
-$P(Y\geqslant2) \approx \calcPpoissC{5}{2}{*}$.
-
-\medskip
-
-$\bullet~~~~T \hookrightarrow \mathcal{G}_{0,5}$ :\\
-$P(T=3) \approx \calcPgeomP{0.5}{3}$.\\
-$P(T\leqslant5) \approx \calcPgeomC{0.5}{*}{5}$.
-
-\medskip
-
-$\bullet~~~~W \hookrightarrow \mathcal{H}(50\,;\,10\,;\,5)$ :\\
-$P(W=4) \approx \calcPhypergeomP{50}{10}{5}{4}$.\\
-$P(1\leqslant W\leqslant3) \approx \calcPhypergeomC{50}{10}{5}{1}{3}$.
-\end{codesortie}
-
-\begin{codetex}[listing only]
-% X -> N(0,1)
-$P(X\leqslant1) \approx \calcPnormC{0}{1}{*}{1}$.
-$P(-1,96\leqslant Z\leqslant1,96) \approx \calcPnormC{0}{1}{-1.96}{1.96}$.
-
-% X -> N(550,30)
-$P(Y\geqslant600) \approx \calcPnormC{550}{30}{600}{*}$.
-$P(500\leqslant Y\leqslant600) \approx \calcPnormC{550}{30}{500}{600}$.
-
-% Z -> E(0.001)
-$P(Z\geqslant400) \approx \calcPexpoC{0.001}{400}{*}$.
-$P(300\leqslant Z\leqslant750) \approx \calcPexpoC{0.001}{300}{750}$.
-\end{codetex}
-
-\begin{codesortie}
-$\bullet~~~~X \hookrightarrow \mathcal{N}(0\,;\,1)$ :\\
-$P(X\leqslant1) \approx \calcPnormC{0}{1}{*}{1}$.\\
-$P(-1,96\leqslant Z\leqslant1,96) \approx \calcPnormC{0}{1}{-1.96}{1.96}$.
-
-\medskip
-
-$\bullet~~~~Y \hookrightarrow \mathcal{N}(550\,;\,30)$ :\\
-$P(Y\geqslant600) \approx \calcPnormC{550}{30}{600}{*}$.\\
-$P(500\leqslant Y\leqslant600) \approx \calcPnormC{550}{30}{500}{600}$.
-
-\medskip
-
-$\bullet~~~~Z \hookrightarrow \mathcal{E}_{0,001}$ :\\
-$P(Z\geqslant400) \approx \calcPexpoC{0.001}{400}{*}$.\\
-$P(300\leqslant Z\leqslant750) \approx \calcPexpoC{0.001}{300}{750}$.
-\end{codesortie}
-
-\subsection{Complément avec sortie \og formaté \fg}
-
-\begin{codeidee}
-L'idée est ensuite de formater le résultat obtenu par \ctex{xintexpr}, pour un affichage homogène.
-
-\smallskip
-
-L'utilisateur peut donc utiliser \og sa \fg{} méthode pour formater les résultats obtenus par \ctex{xintexpr} !
-\end{codeidee}
-
-\begin{codetex}[listing only]
-%avec un formatage manuel
-\num[exponent-mode=scientific]{\calcPbinomP{100}{0.02}{10}}
-\end{codetex}
-
-\begin{codesortie}
-$\bullet~~~~X \hookrightarrow \mathcal{B}(100\,;\,0,02)$ :
-
-$P(X=10) \approx \num[exponent-mode=scientific]{\calcPbinomP{100}{0.02}{10}}$.
-\end{codesortie}
-
-\begin{codeidee}
-Le package \ctex{ProfLycee} propose -- en complément -- des commandes pour formater, grâce à \ctex{siunitx}, le résultat.
-
-Les commandes sont dans ce cas préfixées par \ctex{num} au lieu de \ctex{calc} :
-
-\begin{itemize}
- \item formatage sous forme décimale \textit{pure} : $0,00\ldots$ ;
- \item formatage sous forme scientifique : $n,\ldots\times10^{\ldots}$.
-\end{itemize}
-\end{codeidee}
-
-\begin{codetex}[listing only]
-%loi binomiale B(n,p)
-\numPbinomP(*)[prec]{n}{p}{k} %P(X=k)
-\numPbinomC(*)[prec]{n}{p}{a}{b} %P(a<=X<=b)
-
-%loi de Poisson P (l)
-\numPpoissP(*)[prec]{l}{k} %P(X=k)
-\numPpoissC(*)[prec]{l}{a}{b} %P(a<=X<=b)
-
-%loi géométrique G (p)
-\numPgeomP{p}{k} %P(X=k)
-\numPgeomC{l}{a}{b} %P(a<=X<=b)
-
-%loi hypergéométrique H (N,n,m)
-\numPhypergeomP{N}{n}{m}{k} %P(X=k)
-\numPhypergeomC{N}{n}{m}{a}{b} %P(a<=X<=b)
-
-%loi normale N(m,s)
-\numPnormC(*)[prec]{m}{s}{a}{b} %P(a<=X<=b)
-
-%loi exponentielle E(l)
-\numPexpoC(*)[prec]{l}{a}{b} %P(a<=X<=b)
-\end{codetex}
-
-\begin{codecles}
-Quelques précisions sur les commandes précédentes :
-
-\begin{itemize}
- \item la version étoilée \Cle{*} des commandes formate le résultat en mode scientifique ;
- \item l'argument optionnel (par défaut \Cle{3}) correspond à quant à lui à l'arrondi.
-\end{itemize}
-\end{codecles}
-
-\begin{codetex}[listing only]
-% X -> N(550,30)
-$P(Y\geqslant600) \approx \numPnormC[4]{550}{30}{600}{*}$.
-$P(500\leqslant Y\leqslant600) \approx \numPnormC[4]{550}{30}{500}{600}$.
-% X -> B(100,0.02)
-$P(X=10) \approx \numPbinomP[7]{100}{0.02}{10} \approx \numPbinomP*[7]{100}{0.02}{10}$.
-$P(15\leqslant X\leqslant25) \approx \numPbinomC[10]{100}{0.02}{15}{25} \approx \numPbinomC*[10]{100}{0.02}{15}{25}$.
-% H -> H(50,10,5)
-$P(W=4) \approx \numPhypergeomP[5]{50}{10}{5}{4}$.
-$P(1\leqslant W\leqslant3) \approx \numPhypergeomC[4]{50}{10}{5}{1}{3}$.
-% Z-> E(0,001)$ :
-$P(Z\geqslant400) \approx \numPexpoC{0.001}{400}{*}$.
-$P(300\leqslant Z\leqslant750) \approx \numPexpoC{0.001}{300}{750}$.
-% T -> P(5)
-$P(T=3) \approx \numPpoissP{5}{3}$.
-$P(T\geqslant2) \approx \numPpoissC[4]{5}{2}{*}$.
-\end{codetex}
-
-\begin{codesortie}
-$\bullet~~~~Y \hookrightarrow \mathcal{N}(550\,;\,30)$ :
-
-$P(Y\geqslant600) \approx \numPnormC[4]{550}{30}{600}{*}$.
-
-$P(500\leqslant Y\leqslant600) \approx \numPnormC[4]{550}{30}{500}{600}$.
-
-\medskip
-
-$\bullet~~~~X \hookrightarrow \mathcal{B}(100\,;\,0,02)$ :
-
-$P(X=10) \approx \numPbinomP[7]{100}{0.02}{10} \approx \numPbinomP*[7]{100}{0.02}{10}$.
-
-$P(15\leqslant X\leqslant25) \approx \numPbinomC[10]{100}{0.02}{15}{25} \approx \numPbinomC*[10]{100}{0.02}{15}{25}$.
-
-\medskip
-
-$\bullet~~~~W \hookrightarrow \mathcal{H}(50\,;\,10\,;\,5)$ :
-
-$P(W=4) \approx \numPhypergeomP[5]{50}{10}{5}{4}$.
-
-$P(1\leqslant W\leqslant3) \approx \numPhypergeomC[4]{50}{10}{5}{1}{3}$.
-
-\medskip
-
-$\bullet~~~~Z \hookrightarrow \mathcal{E}_{0,001}$ :
-
-$P(Z\geqslant400) \approx \numPexpoC{0.001}{400}{*}$.
-
-$P(300\leqslant Z\leqslant750) \approx \numPexpoC{0.001}{300}{750}$.
-
-\medskip
-
-$\bullet~~~~T \hookrightarrow \mathcal{P}_5$ :
-
-$P(T=3) \approx \numPpoissP{5}{3}$.
-
-$P(T\geqslant2) \approx \numPpoissC[4]{5}{2}{*}$.
-\end{codesortie}
-
-\begin{codeinfo}
-\hfill~\includegraphics[height=3cm]{./graphics/pl-doc-probas_a}~~\includegraphics[height=3cm]{./graphics/pl-doc-probas_c}~~\includegraphics[height=3cm]{./graphics/pl-doc-probas_e}~~\includegraphics[height=3cm]{./graphics/pl-doc-probas_f}\hfill~
-\end{codeinfo}
-
-\newpage
-
-\section{Arbres de probabilités \og classiques \fg}\label{arbresprobas}
-
-\subsection{Introduction}
-
-\begin{codeidee}
-L'idée est de proposer des commandes pour créer des arbres de probabilités classiques (et homogènes), en \TikZ, de format :
-
-\begin{itemize}
- \item $2\times2$ ou $2\times3$ ;
- \item $3\times2$ ou $3\times3$.
-\end{itemize}
-
-Les (deux) commandes sont donc liées à un environnement \ctex{tikzpicture}, et elles créent les nœuds de l'arbre, pour exploitation ultérieure éventuelle.
-\end{codeidee}
-
-\begin{codetex}[listing only]
-%commande simple pour tracé de l'arbre
-\PLarbre[<options>]{<donnees>}
-
-%environnement pour tracé et exploitation éventuelle
-\begin{PLenvarbre}[<options>]{<donnees>}
- <code tikz supplémentaire>
-\end{PLenvarbre}
-\end{codetex}
-
-\subsection{Options et arguments}
-
-\begin{codeinfo}
-Les \Cle{donnees} seront à préciser sous forme \ctex{<sommet1>/<proba1>/<position1>,<sommet2>/<proba2>/<position2>,...} avec comme \og sens de lecture \fg{} de la gauche vers la droite puis du haut vers le bas (on balaye les \textit{sous-arbres}), avec comme possibilités :
-
-\begin{itemize}
- \item une donnée \Cle{proba} peut être laissée vide ;
- \item une donnée \Cle{position} peut valoir \Cle{above} (au-dessus), \Cle{below} (en-dessous) ou être laissée \Cle{vide} (sur).
-\end{itemize}
-\end{codeinfo}
-
-\begin{codecles}
-Quelques \Cle{Clés} (communes) pour les deux commandes :
-
-\begin{itemize}
- \item la clé \Cle{unite} pour préciser l'unité de l'environnement \TikZ{} ; \hfill~défaut \Cle{1cm}
- \item la clé \Cle{espniv} pour l'espace (H) entre les étages ; \hfill~défaut \Cle{3.25}
- \item la clé \Cle{espfeuille} pour l'espace (V) entre les feuilles ; \hfill~défaut \Cle{1}
- \item la clé \Cle{type} pour le format, parmi \Cle{2x2} ou \Cle{2x3} ou \Cle{3x2} ou \Cle{3x3} ; \hfill~défaut \Cle{2x2}
- \item la clé \Cle{police} pour la police des nœuds ; \hfill~défaut \Cle{\textbackslash{}normalfont\textbackslash{}normalsize}
- \item la clé \Cle{policeprobas} pour la police des probas ; \hfill~défaut \Cle{\textbackslash{}normalfont\textbackslash{}small}
- \item le booléen \Cle{inclineprobas} pour incliner les probas ; \hfill~défaut \Cle{true}
- \item le booléen \Cle{fleche} pour afficher une flèche sur les branches ; \hfill~défaut \Cle{false}
- \item la clé \Cle{styletrait} pour les branches, en langage \TikZ{} ; \hfill~défaut \Cle{vide}
- \item la clé \Cle{eptrait} pour l'épaisseur des branches, en langage \TikZ{} ; \hfill~défaut \Cle{semithick}
-\end{itemize}
-\end{codecles}
-
-\begin{codetex}[listing only]
-\def\ArbreDeuxDeux{
- $A$/\num{0.5}/,
- $B$/\num{0.4}/,
- $\overline{B}$/.../,
- $\overline{A}$/.../,
- $B$/.../,
- $\overline{B}$/$\frac{1}{3}$/
-}
-
-\PLarbre{\ArbreDeuxDeux}
-
-%des éléménts, en gris, ont été rajoutés pour illustrer certaines options
-\end{codetex}
-
-\begin{codesortie}
-\begin{PLenvarbre}{$A$/\num{0.5}/,$B$/\num{0.4}/,$\overline{B}$/.../,$\overline{A}$/.../,$B$/.../,$\overline{B}$/$\frac{1}{3}$/}
- \draw[lightgray] (R) node[left,font=\ttfamily\small] {(R)} ;
- \draw[lightgray] (A11) node[below,font=\ttfamily\small] {(A11)} ;
- \draw[lightgray] (A12) node[below,font=\ttfamily\small] {(A12)} ;
- \draw[lightgray] (A21) node[below,font=\ttfamily\small] {(A21)} ;
- \draw[lightgray] (A22) node[below,font=\ttfamily\small] {(A22)} ;
- \draw[lightgray] (A23) node[below,font=\ttfamily\small] {(A23)} ;
- \draw[lightgray] (A24) node[below,font=\ttfamily\small] {(A24)} ;
- \draw[lightgray,<->] (0,-4) -- (3.25,-4) node[midway,below,font=\ttfamily\small] {espniv} ;
- \draw[lightgray,<->] (3.25,-4) -- (6.5,-4) node[midway,below,font=\ttfamily\small] {espniv} ;
- \draw[lightgray,<->] (7,0) -- (7,-1) node[midway,right,font=\ttfamily\small] {espfeuille} ;
- \draw[lightgray,<->] (7,-1) -- (7,-2) node[midway,right,font=\ttfamily\small] {espfeuille} ;
- \draw[lightgray,<->] (7,-2) -- (7,-3) node[midway,right,font=\ttfamily\small] {espfeuille} ;
-\end{PLenvarbre}
-\end{codesortie}
-
-\begin{codeinfo}
-Les nœuds crées par les commandes sont :
-
-\begin{itemize}
- \item \ctex{R} pour la racine ;
- \item \ctex{A1x} pour les nœuds du 1\up{er} niveau (de haut en bas) ;
- \item \ctex{A2x} pour les nœuds du 2\up{d} niveau (de haut en bas).
-\end{itemize}
-\end{codeinfo}
-
-\subsection{Exemples complémentaires}
-
-\begin{codetex}[listing only]
-\def\ArbreTroisDeux{
- $A_1$/\num{0.5}/above,
- $B$/\num{0.4}/above,
- $\overline{B}$/.../below,
- $A_2$/.../above,
- $B$/.../above,
- $\overline{B}$/$\frac{1}{3}$/below,
- $A_3$/.../below,
- $B$/.../above,
- $\overline{B}$/$\frac{4}{15}$/below
-}
-
-\begin{PLenvarbre}[type=3x2,fleche,espniv=5,espfeuille=1.25]{\ArbreTroisDeux}
- \draw[ForestGreen,->] (A24)--($(A24)+(2.5,0)$) node[right,font=\sffamily] {code tikz rajouté} ;
-\end{PLenvarbre}
-\end{codetex}
-
-\begin{codesortie}
-\begin{PLenvarbre}[type=3x2,fleche,espniv=5,espfeuille=1.25]{$A_1$/\num{0.5}/above,$B$/\num{0.4}/above,$\overline{B}$/.../below,$A_2$/.../above,$B$/.../above,$\overline{B}$/$\frac{1}{3}$/below,$A_3$/.../below,$B$/.../above,$\overline{B}$/$\frac{4}{15}$/below}
- \draw[ForestGreen,->] (A24)--($(A24)+(2.5,0)$) node[right,font=\sffamily] {code tikz rajouté} ;
-\end{PLenvarbre}
-\end{codesortie}
-
-\begin{codetex}[listing only]
-\def\ArbreDeuxTrois{
- $A$/\num{0.05}/above,
- $B_1$/\num{0.4}/above,
- $B_2$/\num{0.35}/,
- $B_3$//below,
- $\overline{A}$/.../below,
- $B_1$/$\frac{2}{15}$/above,
- $B_2$/.../,
- $B_3$/$\frac{1}{3}$/below
-}
-\PLarbre[type=2x3,inclineprobas=false,espfeuille=1.15]{\ArbreDeuxTrois}
-
-\def\ArbreTroisTrois{
- $A_1$/\num{0.05}/,
- $B_1$/{1/3}/,
- $B_2$/{1/3}/,
- $B_3$/{1/3}/,
- $A_2$/\num{0.80}/,
- $B_1$/{1/3}/,
- $B_2$/{1/3}/,
- $B_3$/{1/3}/,
- $A_3$/\num{0.15}/,
- $B_1$/{1/3}/,
- $B_2$/{1/3}/,
- $B_3$/{1/3}/
-}
-
-\PLarbre[type=3x3,styletrait={densely dashed},espfeuille=0.7,policeprobas=\scriptsize,police=\small]{\ArbreTroisTrois}
-\end{codetex}
-
-\begin{codesortie}
-\PLarbre[type=2x3,inclineprobas=false,espfeuille=1.15]{$A$/\num{0.05}/above,$B_1$/\num{0.4}/above,$B_2$/\num{0.35}/,$B_3$//below,$\overline{A}$/.../below,$B_1$/$\frac{2}{15}$/above,$B_2$/.../,$B_3$/$\frac{1}{3}$/below}
-~~
-\PLarbre[type=3x3,styletrait={densely dashed},espfeuille=0.7,policeprobas=\scriptsize,police=\small]{$A_1$/\num{0.05}/,$B_1$/{1/3}/,$B_2$/{1/3}/,$B_3$/{1/3}/,$A_2$/\num{0.80}/,$B_1$/{1/3}/,$B_2$/{1/3}/,$B_3$/{1/3}/,$A_3$/\num{0.15}/,$B_1$/{1/3}/,$B_2$/{1/3}/,$B_3$/{1/3}/}
-\end{codesortie}
-
-\newpage
-
-\section{Petits schémas pour des probabilités continues}\label{schemasprobas}
-
-\subsection{Idée}
-
-\begin{codeidee}
-L'idée est de proposer des commandes pour illustrer, sous forme de schémas en \TikZ, des probabilités avec des lois continues (normales et exponentielles).
-
-\smallskip
-
-Ces \og schémas \fg{} peuvent être insérés en tant que graphique explicatif, ou bien en tant que petite illustration rapide !
-\end{codeidee}
-
-\begin{codetex}[listing only]
-\LoiNormaleGraphe[options]<options tikz>{m}{s}{a}{b}
-
-\LoiExpoGraphe[options]<options tikz>{l}{a}{b}
-\end{codetex}
-
-\begin{codesortie}
-\hfill\LoiNormaleGraphe{100}{20}{80}{120}\hspace{3cm}\LoiExpoGraphe{0.001}{250}{1500}\hfill~
-\end{codesortie}
-
-\begin{codecles}
-Les probabilités \textit{illustrables} sont donc des probabilités \textbf{C}umulées ($P(a\leqslant X\leqslant b)$).
-
-\smallskip
-
-On peut utiliser \ctex{*} comme borne ($a$ ou $b$), pour les probabilités du type $P(X\leqslant b)$ et $P(X \geqslant a)$.
-\end{codecles}
-
-\subsection{Commandes et options}
-
-\begin{codecles}
-Quelques \Cle{Clés} sont disponibles pour ces commandes :
-
-\begin{itemize}
- \item la clé \Cle{CouleurAire} pour l'aire sous la courbe ; \hfill{}défaut \Cle{LightGray}
- \item la clé \Cle{CouleurCourbe} pour la courbe ; \hfill{}défaut \Cle{red}
- \item la clé \Cle{Largeur} qui sera la largeur (en cm) du graphique ; \hfill{}défaut \Cle{2}
- \item la clé \Cle{Hauteur} qui sera la hauteur (en cm) du graphique ; \hfill{}défaut \Cle{1}
- \item un booléen \Cle{AfficheM} qui affiche la moyenne ; \hfill{}défaut \Cle{true}
- \item un booléen \Cle{AfficheCadre} qui affiche un cadre pour délimiter le schéma. \hfill{}défaut \Cle{true}
-\end{itemize}
-\end{codecles}
-
-\begin{codeinfo}
-Les commandes sont donc des environnements \TikZ, sans possibilité de \og rajouter \fg{} des éléments. Ces petis \textit{schémas} sont donc vraiment dédiés à \textit{montrer} rapidement une probabilité continue, sans fioriture.
-\end{codeinfo}
-
-\begin{codetex}
-Avec centrage vertical sur l'axe des abscisses :
-\LoiNormaleGraphe[AfficheM=false,CouleurCourbe=Blue,CouleurAire=LightBlue]<baseline=0pt>{1000}{100}{950}{*}
-\end{codetex}
-
-\begin{codetex}
-Avec quelques modifications :
-
-\LoiNormaleGraphe[Largeur=4,Hauteur=2]{150}{12.5}{122}{160}
-
-\medskip
-
-Avec centrage vertical :
-\LoiNormaleGraphe[Largeur=5,Hauteur=2.5]<baseline=(current bounding box.center)>{200}{5}{204}{*}
-
-\medskip
-
-Avec centrage vertical sur l'axe des abscisses :
-\LoiExpoGraphe[AfficheM=false,CouleurCourbe=Blue,CouleurAire=LightBlue]<baseline=0pt>{0.05}{*}{32}
-
-\medskip
-
-\LoiExpoGraphe[Largeur=4,Hauteur=2]{0.00025}{5000}{*}
-\end{codetex}
-
-\subsection{Remarques et compléments}
-
-\begin{codeinfo}
-Pour le moment, seules les lois (continues) exponentielles et normales sont disponibles, peut-être que d'autres lois seront ajoutées, mais il ne me semble pas très pertinent de proposer des schémas similaires pour des lois discrètes, qui ont des \textit{représentations} assez variables\ldots
-\end{codeinfo}
-
-\newpage
-
-\part{Outils pour l'arithmétique}
-
-\section{Conversions binaire/hexadécimal/décimal}\label{conversions}
-
-\subsection{Idée}
-
-\begin{codeidee}
-L'idée est de \textit{compléter} les possibilités offertes par le package \ctex{xintbinhex}, en mettant en forme quelques conversions :
-
-\begin{itemize}
- \item décimal en binaire avec blocs de 4 chiffres en sortie ;
- \item conversion binaire ou hexadécimal en décimal avec écriture polynomiale.
-\end{itemize}
-\end{codeidee}
-
-\begin{codeinfo}
-Le package \ctex{xintbinhex} est la base de ces macros, puisqu'il permet de faire des conversions directes !
-
-\smallskip
-
-Les macros présentées ici ne font que les intégrer dans un environnement adapté à une correction ou une présentation !
-\end{codeinfo}
-
-\begin{codetex}[listing only]
-\xintDecToHex{100}
-\xintDecToBin{51}
-\xintHexToDec{A4C}
-\xintBinToDec{110011}
-\xintBinToHex{11111111}
-\xintHexToBin{ACDC}
-\xintCHexToBin{3F}
-\end{codetex}
-
-\begin{codesortie}
-\xintDecToHex{100}
-
-\xintDecToBin{51}
-
-\xintHexToDec{A4C}
-
-\xintBinToDec{110011}
-
-\xintBinToHex{11111111}
-
-\xintHexToBin{ACDC}
-
-\xintCHexToBin{3F}
-\end{codesortie}
-
-\subsection{Conversion décimal vers binaire}
-
-\begin{codetex}[listing only]
-\PLconvdecbin(*)[<clés>]{<nombre>}
-\end{codetex}
-
-\begin{codecles}
-Concernant la commande en elle même, peu de paramétrage :
-
-\begin{itemize}
- \item la version \textit{étoilée} qui permet de ne pas afficher de zéros avant pour \og compléter \fg{} ;
- \item le booléen \Cle{affbase} qui permet d'afficher ou non la base des nombres ; \hfill{}défaut \Cle{true}
- \item l'argument, mandataire, est le nombre entier à convertir.
-\end{itemize}
-
-Le formatage est géré par \ctex{sinuitx}, le mieux est donc de positionner la commande dans un environnement mathématique.
-
-\smallskip
-
-Les nombres écrits en binaire sont, par défaut, présentés en bloc(s) de 4 chiffres.
-\end{codecles}
-
-\begin{codetex}[listing only]
-% Conversion avec affichage de la base et par bloc de 4
-$\PLconvdecbin{415}$
-% Conversion avec affichage de la base et sans forcément des blocs de 4
-$\PLconvdecbin*{415}$
-% Conversion sans affichage de la base et par bloc de 4
-$\PLconvdecbin[affbase=false]{415}$
-% Conversion sans affichage de la base et sans forcément des blocs de 4
-$\PLconvdecbin*[affbase=false]{415}$
-\end{codetex}
-
-\begin{codesortie}
-$\PLconvdecbin{415}$
-
-\smallskip
-
-$\PLconvdecbin*{415}$
-
-\smallskip
-
-$\PLconvdecbin[affbase=false]{415}$
-
-\smallskip
-
-$\PLconvdecbin*[affbase=false]{415}$
-\end{codesortie}
-
-\subsection{Conversion binaire vers hexadécimal}
-
-\begin{codeinfo}
-L'idée est ici de présenter la conversion, grâce à la conversion \og directe \fg{} par blocs de 4 chiffres :
-
-\begin{itemize}
- \item la macro rajoute éventuellement les zéros pour compléter ;
- \item elle découpe par blocs de 4 chiffres binaires ;
- \item elle présente la conversion de chacun des blocs de 4 chiffres binaires ;
- \item elle affiche la conversion en binaire.
-\end{itemize}
-\end{codeinfo}
-
-\begin{codetex}[listing only]
-\PLconvbinhex[<clés>]{<nombre>}
-\end{codetex}
-
-\begin{codecles}
-Quelques \Cle{clés} sont disponibles pour cette commande :
-
-\begin{itemize}
- \item le booléen \Cle{affbase} qui permet d'afficher ou non la base des nombres ; \hfill{}défaut \Cle{true}
- \item le booléen \Cle{details} qui permet d'afficher ou le détail par bloc de 4. \hfill{}défaut \Cle{true}
- %\item la clé \Cle{trait} qui permet de modifier l'épaisseur du crochet. \hfill{}défaut \Cle{0.5pt}
-\end{itemize}
-
-Le formatage est géré par le package \ctex{sinuitx}, le mieux est de positionner la commande dans un environnement mathématique.
-\end{codecles}
-
-\begin{codetex}[listing only]
-%conversion avec détails et affichage de la base
-$\PLconvbinhex{110011111}$
-%conversion sans détails et affichage de la base
-$\PLconvbinhex[details=false]{110011111}$
-%conversion sans détails et sans affichage de la base
-$\PLconvbinhex[affbase=false,details=false]{110011111}$
-\end{codetex}
-
-\begin{codesortie}
-$\PLconvbinhex{110011111}$
-
-$\PLconvbinhex[details=false]{110011111}$
-
-$\PLconvbinhex[affbase=false,details=false]{110011111}$
-\end{codesortie}
-
-\pagebreak
-
-\subsection{Conversion binaire ou hexadécimal en décimal}
-
-\begin{codeinfo}
-L'idée est ici de présenter la conversion, grâce à l'écriture polynômiale :
-
-\begin{itemize}
- \item écrit la somme des puissances ;
- \item convertir si besoin les \textit{chiffres} hexadécimal ;
- \item peut ne pas afficher les monômes de coefficient 0.
-\end{itemize}
-\end{codeinfo}
-
-\begin{codetex}[listing only]
-\PLconvtodec[<clés>]{<nombre>}
-\end{codetex}
-
-\begin{codecles}
-Quelques \Cle{clés} sont disponibles pour cette commande :
-
-\begin{itemize}
- \item la clé \Cle{basedep} qui est la base de départ (2 ou 16 !) ; \hfill{}défaut \Cle{2}
- \item le booléen \Cle{affbase} qui permet d'afficher ou non la base des nombres ; \hfill{}défaut \Cle{true}
- \item le booléen \Cle{details} qui permet d'afficher ou le détail par bloc de 4 ; \hfill{}défaut \Cle{true}
- \item le booléen \Cle{zeros} qui affiche les chiffres 0 dans la somme. \hfill{}défaut \Cle{true}
-\end{itemize}
-
-Le formatage est toujours géré par le package \ctex{sinuitx}, le mieux est de positionner la commande dans un environnement mathématique.
-\end{codecles}
-
-\begin{codetex}[listing only]
-%conversion 16->10 avec détails et affichage de la base et zéros
-$\PLconvtodec[basedep=16]{19F}$
-%conversion 2->10 avec détails et affichage de la base et zéros
-$\PLconvtodec{110011}$
-%conversion 2->10 avec détails et affichage de la base et sans zéros
-$\PLconvtodec[zeros=false]{110011}$
-%conversion 16->10 sans détails et affichage de la base et avec zéros
-$\PLconvtodec[basedep=16,details=false]{AC0DC}$
-%conversion 16->10 avec détails et sans affichage de la base et sans zéros
-$\PLconvtodec[zeros=false,basedep=16]{AC0DC}$
-\end{codetex}
-
-\begin{codesortie}
-$\PLconvtodec[basedep=16]{19F}$
-
-$\PLconvtodec{110011}$
-
-$\PLconvtodec[zeros=false]{110011}$
-
-$\PLconvtodec[basedep=16,details=false]{AC0DC}$
-
-$\PLconvtodec[zeros=false,basedep=16]{AC0DC}$
-\end{codesortie}
-
-\newpage
-
-\section{Conversion \og présentée \fg{} d'un nombre en décimal}\label{convrestes}
-
-\subsection{Idée}
-
-\begin{codeidee}
-L'idée est de proposer une \og présentation \fg{} par divisions euclidiennes pour la conversion d'un entier donné en base 10 dans une base quelconque.
-
-\smallskip
-
-Les commandes de la section précédente donne \textit{juste} les résultats, dans cette section il y a en plus la présentation de la conversion.
-
-\smallskip
-
-La commande utilise -- par défaut -- du code \TikZ{} en mode \ctex{overlay}, donc on pourra déclarer -- si ce n'est pas fait -- dans le préambule, la commande qui suit.
-\end{codeidee}
-
-\begin{codetex}[listing only]
-...
-\tikzstyle{every picture}+=[remember picture]
-...
-\end{codetex}
-
-\subsection{Code et clés}
-
-\begin{codetex}[]
-%conversion basique
-\PLconvDepuisDec{78}{2}
-\end{codetex}
-
-\begin{codeinfo}
-La \og tableau \fg, qui est géré par \ctex{array} est inséré dans un \ctex{ensuremath}, donc les \ctex{\$...\$} ne sont pas utiles.
-\end{codeinfo}
-
-\begin{codetex}[listing only]
-\PLconvDepuisDec[<options>]{<nombre en base 10>}{<base d'arrivée>}
-\end{codetex}
-
-\begin{codecles}
-Quelques options pour cette commande :
-
-\begin{itemize}
- \item la clé \Cle{couleur} pour la couleur du \og rectangle \fg{} des restes ; \hfill{}défaut \Cle{red}
- \item la clé \Cle{decalh} pour gérer le décalage H du \og rectangle \fg{}, qui peut être donné soit sous la forme \Cle{esp} ou soit sous la forme \Cle{espgauche/espdroite}; \hfill{}défaut \Cle{2pt}
- \item la clé \Cle{decalv} pour le décalage vertical du \og rectangle \fg{} ; \hfill{}défaut \Cle{3pt}
- \item la clé \Cle{noeud} pour le préfixe du nœud du premier et du dernier reste (pour utilisation en \TikZ) ; \hfill{}défaut \Cle{EEE}
- \item le booléen \Cle{rect} pour afficher ou non le \og rectangle \fg{} des restes ; \hfill{}défaut \Cle{true}
- \item le booléen \Cle{couleurres} pour afficher ou non la conversion en couleur (identique au rectangle). \hfill{}défaut \Cle{false}
-\end{itemize}
-\end{codecles}
-
-\begin{codetex}[listing only]
-%conversion avec changement de couleur
-\PLconvDepuisDec[couleur=DarkBlue]{45}{2}
-
-%conversion sans le rectangle
-Par divisions euclidiennes successives, \PLconvDepuisDec[rect=false]{54}{3}.
-
-%conversion avec gestion du decalh pour le placement précis du rectangle
-\PLconvDepuisDec[couleur=Goldenrod,decalh=6pt/2pt]{1012}{16}
-
-%conversion avec nœud personnalisé et réutilisation
-\PLconvDepuisDec[couleur=ForestGreen,couleurres,noeud=TEST]{100}{9}.
-\begin{tikzpicture}
- \draw[overlay,ForestGreen,thick,->] (TEST2.south east) to[bend right] ++ (3cm,-1cm) node[right] {test } ;
-\end{tikzpicture}
-\end{codetex}
-
-\begin{codesortie}
-\PLconvDepuisDec[couleur=DarkBlue]{45}{2}
-
-\medskip
-
-Par divisions euclidiennes successives, \PLconvDepuisDec[rect=false]{54}{3}.
-
-\medskip
-
-\PLconvDepuisDec[couleur=Goldenrod,decalh=6pt/2pt]{1012}{16}
-
-\medskip
-
-On obtient donc \PLconvDepuisDec[couleur=ForestGreen,couleurres,noeud=TEST]{100}{9}.
-\begin{tikzpicture}
- \draw[overlay,ForestGreen,thick,->] (TEST2.south east) to[bend right] ++ (3cm,-1cm) node[right] {test } ;
-\end{tikzpicture}
-
-\vspace{1.5cm}
-
-~
-\end{codesortie}
-
-\newpage
-
-\section{Algorithme d'Euclide pour le PGCD}\label{prespgcd}
-
-\subsection{Idée}
-
-\begin{codeidee}
-L'idée est de proposer une \og présentation \fg{} de l'algorithme d'Euclide pour le calcul du PGCD de deux entiers.
-
-Le package \ctex{xintgcd} permet déjà de le faire, il s'agit ici de travailler sur la \textit{mise en forme} avec alignement des restes.
-\end{codeidee}
-
-\begin{codetex}[listing only]
-\PresentationPGCD[<options>]{a}{b}
-\end{codetex}
-
-\begin{codetex}[listing only]
-...
-\tikzstyle{every picture}+=[remember picture]
-...
-\PresentationPGCD{150}{27}
-\end{codetex}
-
-\begin{codesortie}
-\PresentationPGCD{150}{27}
-\end{codesortie}
-
-\begin{codeattention}
-La mise en valeur du dernier reste non nul est géré par du code \TikZ, en mode \ctex{overlay}, donc il faut bien penser à déclarer dans le préambule :
-
-\hspace{5mm}\ctex{\textbackslash{}tikzstyle\{every picture\}+=[remember picture]}
-\end{codeattention}
-
-\subsection{Options et clés}
-
-\begin{codecles}
-Quelques options disponibles pour cette commande :
-
-\begin{itemize}
- \item la clé \Cle{Couleur} qui correspond à la couleur pour la mise en valeur ; \hfill{}défaut \Cle{red}
- \item la clé \Cle{DecalRect} qui correspond à l'écartement du rectangle de mise en valeur ; \hfill{}défaut \Cle{2pt}
- \item le booléen \Cle{Rectangle} qui gère l'affichage ou non du rectangle de mise ne valeur ; \hfill{}défaut \Cle{true}
- \item la clé \Cle{Noeud} qui gère le préfixe du nom du nœud \TikZ{} du rectangle (pour exploitation ultérieure) ; \hfill{}défaut \Cle{FFF}
- \item le booléen \Cle{CouleurResultat} pour mettre ou non en couleur de PGCD ; \hfill{}défaut \Cle{false}
- \item le booléen \Cle{AfficheConclusion} pour afficher ou non la conclusion ; \hfill{}défaut \Cle{true}
- \item le booléen \Cle{AfficheDelimiteurs} pour afficher ou non les délimiteurs (accolade gauche et trait droit). \hfill{}défaut \Cle{true}
-\end{itemize}
-
-\medskip
-
-Le rectangle de mise en valeur est donc un nœud \TikZ{} qui sera nommé, par défaut \ctex{FFF1}.
-
-\medskip
-
-La présentation est dans un environnement \ctex{ensuremath} donc les \ctex{\$...\$} ne sont pas indispensables.
-\end{codecles}
-
-\begin{codetex}[]
-\PresentationPGCD[CouleurResultat]{150}{27}
-\end{codetex}
-
-\pagebreak
-
-\begin{codetex}[]
-\PresentationPGCD[CouleurResultat,Couleur=ForestGreen]{1250}{450}.
-
-\PresentationPGCD[CouleurResultat,Couleur=DarkBlue]{13500}{2500}.
-
-\PresentationPGCD[Rectangle=false]{420}{540}.
-
-\medskip
-
-D'après l'algorithme d'Euclide, on a $\left| \PresentationPGCD[Couleur=LightSkyBlue,AfficheConclusion=false,AfficheDelimiteurs=false]{123456789}{9876} \right.$
-\begin{tikzpicture}
- \draw[overlay,LightSkyBlue,thick,<-] (FFF1.east) to[bend right] ++ (2cm,0.75cm) node[right] {dernier reste non nul} ;
-\end{tikzpicture}
-\end{codetex}
-
-\subsection{Compléments}
-
-\begin{codeinfo}
-La présentation des divisions euclidiennes est gérée par un tableau du type \ctex{array}, avec alignement vertical de symboles \ctex{=} et \ctex{+}.
-
-Par défaut, les délimiteurs choisis sont donc l'accolade gauche et le trait droit, mais la clé booléenne \Cle{AfficheDelimiteurs=false} permet de choisir des délimiteurs différents.
-\end{codeinfo}
-
-\begin{codetex}[]
-$\left[ \PresentationPGCD[AfficheConclusion=false,AfficheDelimiteurs=false]{1234}{5} \right]$
-\end{codetex}
-
-\newpage
-
-\part{Outils divers et variés}
-
-\section{Fractions, ensembles}
-
-\subsection{Fractions}\label{convfrac}
-
-\begin{codeidee}
-L'idée est d'obtenir une commande pour \textit{simplifier} un calcul sous forme de fraction irréductible.
-\end{codeidee}
-
-\begin{codetex}[listing only]
-\convertfraction[<option>]{<argument>}
-\end{codetex}
-
-\begin{codecles}
-Peu d'options pour ces commandes :
-
-\begin{itemize}
-\item le premier argument, optionnel, permet de spécifier le mode de sortie de la fraction \textsf{[t]} pour \textsf{tfrac} et \textsf{[d]} pour \textsf{dfrac} ;
-\item le second, mandataire, est le \textsf{calcul} ou la \textsf{division} à convertir.
-\end{itemize}
-
-À noter que la macro est dans un bloc \ctex{ensuremath} donc les \ctex{\$...\$} ne sont pas nécessaires.
-\end{codecles}
-
-\begin{codetex}[listing only]
-\convertfraction{111/2145}
-\convertfraction{111/3}
-$\frac{111}{2145}=\convertfraction{111/2145}$
-$\frac{3}{15}=\convertfraction[]{3/15}$
-$\tfrac{3}{15}=\convertfraction[t]{3/15}$ %formatage en \tfrac
-$\dfrac{3}{15}=\convertfraction[d]{3/15}$ %formatage en \dfrac
-$\dfrac{0,42}{0,015}=\convertfraction[d]{0.42/0.015}$
-$\dfrac{0,41}{0,015}=\convertfraction[d]{0.41/0.015}$
-$\dfrac{1}{7}+\dfrac{3}{8}=\convertfraction[d]{1/7+3/8}$
-$\convertfraction[d]{1+1/2}$
-$\convertfraction{0.1/0.7+30/80}$
-\end{codetex}
-
-\begin{codesortie}
-\begin{multicols}{2}
-\convertfraction{111/2145}
-
-\smallskip
-
-\convertfraction{111/3}
-
-\smallskip
-
-$\frac{111}{2145}=\convertfraction{111/2145}$
-
-\smallskip
-
-$\frac{3}{15}=\convertfraction[]{3/15}$
-
-\smallskip
-
-$\tfrac{3}{15}=\convertfraction[t]{3/15}$
-
-\smallskip
-
-$\dfrac{3}{15}=\convertfraction[d]{3/15}$
-
-\smallskip
-
-$\dfrac{0,42}{0,015}=\convertfraction[d]{0.42/0.015}$
-
-\smallskip
-
-$\dfrac{0,41}{0,015}=\convertfraction[d]{0.41/0.015}$
-
-\smallskip
-
-$\dfrac{1}{7}+\dfrac{3}{8}=\convertfraction[d]{1/7+3/8}$
-
-\smallskip
-
-$\convertfraction[d]{1+1/2}$
-
-\smallskip
-
-$\convertfraction{0.1/0.7+30/80}$
-\end{multicols}
-
-~
-\end{codesortie}
-
-\begin{codeinfo}
-A priori le package \ctex{xint} permet de s'en sortir pour des calculs \og simples \fg, je ne garantis pas que tout calcul ou toute division donne un résultat \textit{satisfaisant} !
-\end{codeinfo}
-
-\pagebreak
-
-\subsection{Ensembles}\label{ensembles}
-
-\begin{codeidee}
-L'idée est d'obtenir une commande pour simplifier l'écriture d'un ensemble d'éléments, en laissant gérer les espaces.
-
-Les délimiteurs de l'ensemble créé sont toujours \textsf{\{~~\}}.
-\end{codeidee}
-
-\begin{codetex}[listing only]
-\ensPL[<clés>]{<liste>}
-\end{codetex}
-
-\begin{codecles}
-Peu d'options pour ces commandes :
-
-\begin{itemize}
-\item le premier argument, optionnel, permet de spécifier les \Cle{Clés} :
-\begin{itemize}
- \item clé \Cle{sep} qui correspond au délimiteur des éléments de l'ensemble ; \hfill{}défaut \Cle{;}
- \item clé \Cle{option} qui est un code (par exemple \textsf{strut}\dots) inséré avant les éléments ;\hfill{}défaut \Cle{vide}
- \item un booléen \Cle{mathpunct} qui permet de préciser si on utilise l'espacement mathématique \textsf{mathpunct};\hfill{}défaut \Cle{true}
-\end{itemize}
-\item le second, mandataire, est la \textsf{liste} des éléments, séparés par \textsf{/}.
-\end{itemize}
-\end{codecles}
-
-\begin{codetex}[listing only]
-$\ensPL{a/b/c/d/e}$
-$\ensPL[mathpunct=false]{a/b/c/d/e}$
-$\ensPL[sep={,}]{a/b/c/d/e}$
-$\ensPL[option={\strut}]{a/b/c/d/e}$ % \strut pour "augmenter" un peu la hauteur des {}
-$\ensPL{ \frac{1}{1+\frac{1}{3}} / b / c / d / \frac{1}{2} }$
-\end{codetex}
-
-\begin{codesortie}
-$\ensPL{a/b/c/d/e}$
-
-\smallskip
-
-$\ensPL[mathpunct=false]{a/b/c/d/e}$
-
-\smallskip
-
-$\ensPL[sep={,}]{a/b/c/d/e}$
-
-\smallskip
-
-$\ensPL[option={\strut}]{a/b/c/d/e}$
-
-\smallskip
-
-$\ensPL{ \displaystyle\frac{1}{1+\frac{1}{3}} / b / c / d / \displaystyle\frac{1}{2} }$
-\end{codesortie}
-
-\begin{codeinfo}
-Attention cependant au comportement de la commande avec des éléments en mode \textsf{mathématique}, ceux-ci peuvent générer une erreur si \textsf{displaystyle} n'est pas utilisé\ldots
-\end{codeinfo}
-
-\newpage
-
-\section{Petits schémas pour le signe d'une fonction affine ou d'un trinôme}\label{aidesigne}
-
-\subsection{Idée}
-
-\begin{codeidee}
-L'idée est d'obtenir une commande pour tracer (en \TikZ) un petit schéma pour \textit{visualiser} le signe d'une fonction affine ou d'un trinôme.
-
-Le code est très largement inspiré de celui du package \ctex{tnsana} même si la philosophie est légèrement différente.
-
-\smallskip
-
-Comme pour les autres commandes \TikZ, l'idée est de laisser l'utilisateur définir et créer son environnement \TikZ, et d'insérer la commande \ctex{aidesignePL} pour afficher le schéma.
-\end{codeidee}
-
-\begin{codetex}[tikz lower]
-%code tikz
-\aidesignePL
-\end{codetex}
-
-\subsection{Commandes}
-
-\begin{codetex}[listing only]
-...
-\begin{tikzpicture}[<options>]
- ...
- \aidesignePL[<clés>]
- ...
-\end{tikzpicture}
-\end{codetex}
-
-\begin{codetex}[listing only]
-... {\tikz[<options>] \aidesignePL[<clés>]}...
-\end{codetex}
-
-\begin{codecles}
-Plusieurs \Cle{Clés} sont disponibles pour cette commande :
-
-\begin{itemize}
- \item la clé \Cle{code} qui permet de définir le type d'expression (voir en-dessous) ;\hfill{}défaut \Cle{da+}
- \item la clé \Cle{couleur} qui donne la couleur de la représentation ;\hfill{}défaut \Cle{red}
- \item la clé \Cle{racines} qui définit la ou les racines ;\hfill{}défaut \Cle{2}
- \item la clé \Cle{largeur} qui est la largeur du schéma ;\hfill{}défaut \Cle{2}
- \item la clé \Cle{hauteur} qui est la hauteur du schéma ;\hfill{}défaut \Cle{1}
- \item un booléen \Cle{cadre} qui affiche un cadre autour du schéma.\hfill{}défaut \Cle{true}
-\end{itemize}
-\end{codecles}
-
-\begin{codecles}
-Pour la clé \Cle{code}, il est construit par le type (\textsf{a} pour affine ou \textsf{p} comme parabole) puis les éléments caractéristiques (\textsf{a+} pour $a>0$, \textsf{d0} pour $\Delta=0$, etc) :
-
-\begin{itemize}
- \item \Cle{code=da+} := une droite croissante ;
- \item \Cle{code=da-} := une droite décroissante ;
- \item \Cle{code=pa+d+} := une parabole \textit{souriante} avec deux racines ;
- \item etc
-\end{itemize}
-\end{codecles}
-
-\pagebreak
-
-\begin{codetex}[listing only]
-\begin{center}
- \begin{tikzpicture}
- \aidesignePL[code=da+,racines=-4]
- \end{tikzpicture}
- ~~~~
- \begin{tikzpicture}
- \aidesignePL[code=da-,racines={h},couleur=blue,largeur=3,cadre=false]
- \end{tikzpicture}
-\end{center}
-%
-\begin{center}
- \begin{tikzpicture}
- \aidesignePL[code=pa+d+,racines={1/2},couleur=orange]
- \end{tikzpicture}
- ~~~~
- \begin{tikzpicture}
- \aidesignePL[code=pa+d-,couleur=ForestGreen]
- \end{tikzpicture}
- ~~~~
- \begin{tikzpicture}
- \aidesignePL[code=pa+d0,racines={5},couleur=purple]
- \end{tikzpicture}
-\end{center}
-%
-\begin{center}
- \begin{tikzpicture}
- \aidesignePL[code=pa-d+,racines={-3/0},couleur=yellow]
- \end{tikzpicture}
- ~~~~
- \begin{tikzpicture}
- \aidesignePL[code=pa-d-,couleur=cyan]
- \end{tikzpicture}
- ~~~~
- \begin{tikzpicture}
- \aidesignePL[code=pa-d0,racines={-1},couleur=magenta]
- \end{tikzpicture}
-\end{center}
-\end{codetex}
-
-\begin{codesortie}
-\begin{center}
- \begin{tikzpicture}
- \aidesignePL[code=da+,racines=-4]
- \end{tikzpicture}
- ~~~~
- \begin{tikzpicture}
- \aidesignePL[code=da-,racines={h},couleur=blue,largeur=3,cadre=false]
- \end{tikzpicture}
-\end{center}
-%
-\begin{center}
- \begin{tikzpicture}
- \aidesignePL[code=pa+d+,racines={1/2},couleur=orange]
- \end{tikzpicture}
- ~~~~
- \begin{tikzpicture}
- \aidesignePL[code=pa+d-,couleur=ForestGreen]
- \end{tikzpicture}
- ~~~~
- \begin{tikzpicture}
- \aidesignePL[code=pa+d0,racines={5},couleur=purple]
- \end{tikzpicture}
-\end{center}
-%
-\begin{center}
- \begin{tikzpicture}
- \aidesignePL[code=pa-d+,racines={-3/0},couleur=yellow]
- \end{tikzpicture}
- ~~~~
- \begin{tikzpicture}
- \aidesignePL[code=pa-d-,couleur=cyan]
- \end{tikzpicture}
- ~~~~
- \begin{tikzpicture}
- \aidesignePL[code=pa-d0,racines={-1},couleur=magenta]
- \end{tikzpicture}
-\end{center}
-\end{codesortie}
-
-\begin{codetex}[tikz lower]
-%code tikz
-\aidesignePL[largeur=3.5,hauteur=1.5,code=da-,racines=\tfrac{-b}{a},couleur=Plum]
-\end{codetex}
-
-\subsection{Intégration avec tkz-tab}
-
-\begin{codeidee}
-Ces schémas peuvent être de plus utilisés, via la commande \ctex{aidesignetkztabPL} pour illustrer les signes obtenus dans un tableau de signes présentés grâce au package \ctex{tkz-tab}.
-
-Pour des raisons internes, le fonctionnement de la commande \ctex{aidesignetkztabPL} est légèrement différent et, pour des raisons que j'ignore, le code est légèrement différent en \textit{interne} (avec une \textit{déconnexion} des caractères \textsf{:} et \textsf{\textbackslash}) pour que la librairie \TikZ{} \ctex{calc} puisse fonctionner (mystère pour le moment\ldots)
-\end{codeidee}
-
-\begin{codetex}[listing only]
-\begin{tikzpicture}
- %commandes tkztab
- \aidesignetkztabPL[<options>]{<numligne>}[<echelle>][<décalage horizontal>]
-\end{tikzpicture}
-\end{codetex}
-
-\begin{codecles}
-Les \Cle{Clés} pour le premier argument optionnel sont les mêmes que pour la version \textit{initiale} de la commande précédente.
-
-En ce qui concerne les autres arguments :
-
-\begin{itemize}
- \item le deuxième argument, mandataire, est le numéro de la ligne à côté de laquelle placer le schéma ;
- \item le troisième argument, optionnel et valant \Cle{0.85} par défaut, est l'échelle à appliquer sur l'ensemble du schéma (à ajuster en fonction de la hauteur de la ligne) ;
- \item le quatrième argument, optionnel et valant \Cle{1.5} par défait, est lié à l'écart horizontal entre le bord de la ligne du tableau et le schéma.
-\end{itemize}
-
-À noter que si l'un des arguments optionnels (le n°3 et/ou le n°4) sont utilisés, il vaut mieux préciser les 2 !
-\end{codecles}
-
-\begin{codetex}[listing only]
-\begin{center}
- \begin{tikzpicture}
- \tkzTabInit[]{$x$/1,$-2x+5$/1,$2x+4$/1,$p(x)$/1}{$-\infty$,$-2$,${2,5}$,$+\infty$}
- \tkzTabLine{,+,t,+,z,-,}
- \tkzTabLine{,-,z,+,t,+,}
- \tkzTabLine{,-,z,+,z,-,}
- \aidesignetkztabPL[code=da-,racines={2,5},couleur=blue]{1}
- \aidesignetkztabPL[code=da+,racines={-2},couleur=purple]{2}
- \aidesignetkztabPL[code=pa-d+,racines={-2/2,5},couleur=orange]{3}[0.85][2]
- \end{tikzpicture}
-\end{center}
-\end{codetex}
-
-\begin{codesortie}
-\begin{center}
- \begin{tikzpicture}
- \tkzTabInit[]{$x$/1,$-2x+5$/1,$2x+4$/1,$p(x)$/1}{$-\infty$,$-2$,${2,5}$,$+\infty$}
- \tkzTabLine{,+,t,+,z,-,}
- \tkzTabLine{,-,z,+,t,+,}
- \tkzTabLine{,-,z,+,z,-,}
- \aidesignetkztabPL[code=da-,racines={2,5},couleur=blue]{1}
- \aidesignetkztabPL[code=da+,racines={-2},couleur=purple]{2}
- \aidesignetkztabPL[code=pa-d+,racines={-2/2,5},couleur=orange]{3}[0.85][2]
- \end{tikzpicture}
-\end{center}
-\end{codesortie}
-
-\newpage
-
-\section{Style \og main levée \fg{} en \TikZ}\label{mainlevee}
-
-\subsection{Idée}
-
-\begin{codeidee}
-L'idée est de \textit{proposer} un style \textit{tout prêt} pour simuler un tracé, en \TikZ, à \og main levée \fg.
-
-Il s'agit d'un style \textit{basique} utilisant la librairie \ctex{decorations} avec \textsf{random steps}.
-\end{codeidee}
-
-\begin{codetex}[listing only]
-\tikzset{%
- mainlevee/.style args={#1et#2}{decorate,decoration={random steps, segment length=#1,amplitude=#2}},
- mainlevee/.default={5mm et 0.6pt}
-}
-\end{codetex}
-
-\subsection{Utilisation basique}
-
-\begin{codeinfo}
-Il s'agit ni plus ni moins d'un style \TikZ{} à intégrer dans les tracés et constructions \TikZ !
-\end{codeinfo}
-
-\begin{codecles}
-Concernant le style en lui-même, deux paramètres peuvent être précisés via \Cle{mainlevee=\#1 et \#2} :
-
-\begin{itemize}
- \item \Cle{\#1} correspond à l'option \textsf{segment length} (longueur des segments \textit{types}) ;\hfill{}défaut \Cle{5mm}
- \item \Cle{\#2} correspond à l'option \textsf{amplitude} (amplitude maximale de la \textit{déformation}).\hfill{}défaut \Cle{0.6pt}
-\end{itemize}
-
-Les valeurs \Cle{mainlevee=5mm et 0.6pt} donnent des résultats -- à mon sens -- satisfaisants, mais l'utilisateur pourra modifier à loisir ces paramètres !
-\end{codecles}
-
-\begin{codetex}[listing only]
-%la grille a été rajoutée pour la sortie
-\begin{tikzpicture}
- \draw[thick,mainlevee] (0,0) --++ (4,0) --++ (0,4) --++ (-4,0) --cycle ;
-\end{tikzpicture}
-
-\begin{tikzpicture}
- \draw[thick,mainlevee=5mm et 2pt] (0,0) --++ (4,0) --++ (0,4) --++ (-4,0) --cycle ;
-\end{tikzpicture}
-
-\begin{tikzpicture}
- \draw[thick,mainlevee=10mm et 3mm] (0,0) --++ (4,0) --++ (0,4) --++ (-4,0) --cycle ;
-\end{tikzpicture}
-\end{codetex}
-
-\begin{codesortie}
-\hfill~\begin{tikzpicture}
- \draw[xstep=0.5,ystep=0.5,ultra thin,lightgray] (0,0) grid (4,4);
- \draw[thick,mainlevee] (0,0) --++ (4,0) --++ (0,4) --++ (-4,0) --cycle ;
-\end{tikzpicture}
-\hspace{1.5cm}
-\begin{tikzpicture}
- \draw[xstep=0.5,ystep=0.5,ultra thin,lightgray] (0,0) grid (4,4);
- \draw[thick,mainlevee=5mm et 2pt] (0,0) --++ (4,0) --++ (0,4) --++ (-4,0) --cycle ;
-\end{tikzpicture}
-\hspace{1.5cm}
-\begin{tikzpicture}
- \draw[xstep=0.5,ystep=0.5,ultra thin,lightgray] (0,0) grid (4,4);
- \draw[thick,mainlevee=10mm et 3mm] (0,0) --++ (4,0) --++ (0,4) --++ (-4,0) --cycle ;
-\end{tikzpicture}
-\hfill~
-\end{codesortie}
-
-\newpage
-
-\section{Écriture d'un trinôme, trinôme aléatoire}\label{trinome}
-
-
-\subsection{Idée}
-
-\begin{codeidee}
-L'idée est de proposer une commande pour écrire, sous forme développée réduite, un trinôme en fonction de ses coefficients $a$, $b$ et $c$ (avec $a\neq0$), avec la gestion des coefficients nuls ou égaux à $\pm1$.
-
-\smallskip
-
-En combinant avec le package \ctex{xfp} et fonction de générateur d'entiers aléatoires, on peut de ce fait proposer une commande pour générer aléatoirement des trinômes à coefficients entiers (pour des fiches d'exercices par exemple).
-
-\smallskip
-
-L'affichage des monômes est géré par le package \ctex{siunitx} et le tout est dans un environnement \ctex{ensuremath}.
-\end{codeidee}
-
-\begin{codetex}[listing only]
-\EcritureTrinome[<options>]{a}{b}{c}
-\end{codetex}
-
-\begin{codetex}[]
-\EcritureTrinome{1}{7}{0}\\
-\EcritureTrinome{1.5}{7.3}{2.56}\\
-\EcritureTrinome{-1}{0}{12}\\
-\EcritureTrinome{-1}{-5}{0}
-\end{codetex}
-
-\subsection{Clés et options}
-
-\begin{codecles}
-Quelques clés et options sont disponibles :
-
-\begin{itemize}
- \item la clé booléenne \Cle{Alea} pour autoriser les coefficients aléatoires (voir plus bas pour la syntaxe) ;\hfill{}défaut \Cle{false}
- \item la clé booléenne \Cle{Anegatif} pour autoriser $a$ à être négatif.\hfill{}défaut \Cle{true}
-\end{itemize}
-\end{codecles}
-
-\begin{codeinfo}
-La clé \Cle{Alea} va modifier la manière de saisir les coefficients, il suffira dans ce cas de préciser les bornes, sous la forme \ctex{valmin,valmax}, de chacun des coefficients. C'est ensuite le package \ctex{xfp} qui va se charger de générer les coefficients.
-\end{codeinfo}
-
-\begin{codetex}[sidebyside]
-Avec $a$ entre 1 et 5 (et signe aléatoire) puis $b$ entre $-2$ et 7 puis $c$ entre $-10$ et 20 :
-
-$f(x)=\EcritureTrinome[Alea]{1,5}{-5,5}{-10,10}$\\
-$g(x)=\EcritureTrinome[Alea]{1,5}{-5,5}{-10,10}$\\
-$h(x)=\EcritureTrinome[Alea]{1,5}{-5,5}{-10,10}$\\
-
-Avec $a$ entre 1 et 10 (forcément positif) puis $b$ entre $-2$ et 2 puis $c$ entre 0 et 4 :
-
-\EcritureTrinome[Alea,Anegatif=false]{1,10}{-2,2}{0,4}\\
-\EcritureTrinome[Alea,Anegatif=false]{1,10}{-2,2}{0,4}\\
-\EcritureTrinome[Alea,Anegatif=false]{1,10}{-2,2}{0,4}
-\end{codetex}
-
-\newpage
-
-\part{Jeux et récréations}
-
-\section{PixelART via un fichier csv, en \TikZ}\label{pixelart}
-
-\subsection{Introduction}
-
-\begin{codeidee}
-L'idée est de \textit{proposer}, dans un environnement \TikZ, une commande permettant de générer des grilles PixelART.
-
-Les données sont \textit{lues} à partir d'un fichier \textsf{csv}, externe au fichier \textsf{tex} ou déclaré en interne grâce à l'environnement \ctex{filecontents}.
-\end{codeidee}
-
-\begin{codeinfo}
-Avant toute chose, quelques petites infos sur les données au format \textsf{csv}, surtout dans l'optique de sa lecture et de son traitement par \ctex{ProfLycee} :
-
-\begin{itemize}
- \item le fichier de données \textsf{csv} doit être formaté avec le séparateur décimal \og , \fg ;
- \item des cases vides seront codées par \og \texttt{-} \fg.
-\end{itemize}
-
-Le fichier \textsf{csv} peut être déclaré directement dans le fichier \textsf{tex}, grâce à l'environnement \ctex{filecontents} (intégré en natif sur les dernières versions de \LaTeX) :
-
-\begin{Verbatim}[tabsize=2,fontsize=\scriptsize]
-\begin{filecontents*}{<nomfichier>.csv}
-A,B,C,D
-A,B,D,C
-B,A,C,D
-B,A,D,C
-\end{filecontents*}
-\end{Verbatim}
-
-À la compilation, le fichier \textsf{<nomfichier>.csv} sera créé automatiquement, et l'option \Cle{[overwrite]} permet (logiquement) de propager les modifications au fichier \textsf{csv}.
-\end{codeinfo}
-
-\subsection{Package csvsimple et option}
-
-\begin{codeinfo}
-Le package \textit{central} est ici \ctex{csvsimple}, qui permet de lire et traiter le fichier \textsf{csv}.
-
-Il est \og disponible \fg{} en version \LaTeXe{} ou en version \LaTeXIII. Par défaut, \ctex{ProfLycee} le charge en version \LaTeXIII{}, mais une \Cle{option} est disponible pour une \textit{rétro-compatibilité} avec la version \LaTeXe.
-
-\smallskip
-
-L'option \Cle{csvii} permet de passer l'appel au package en version \LaTeXe.
-\end{codeinfo}
-
-\begin{codetex}[listing only]
-\usepackage{ProfLycee} %chargement du package version 3
-%qui charge :
-%\RequirePackage{expl3}
-%\RequirePackage[l3]{csvsimple}
-
-\usepackage[csvii]{ProfLycee} %chargement du package version 2
-%qui charge :
-%\RequirePackage[legacy]{csvsimple}
-\end{codetex}
-
-\subsection{Exemple simple, clés et options}
-
-\begin{codetex}[listing only]
-%déclaration du fichier csv
-\begin{filecontents*}[overwrite]{basique.csv}
-A,B,C,D
-A,B,D,C
-B,A,D,C
-C,A,B,D
-\end{filecontents*}
-
-\begin{tikzpicture}%avec lettres
- \PLpixelart[codes=ABCD,style=\large\sffamily]{basique.csv}
-\end{tikzpicture}
-\begin{tikzpicture}%avec chiffres
- \PLpixelart[codes=ABCD,symboles={45,22,1,7},symb,style=\large\sffamily]{basique.csv}
-\end{tikzpicture}
-\begin{tikzpicture}%avec correction
- \PLpixelart[codes=ABCD,couleurs={Black,Green,Yellow,Red},correction]{basique.csv}
-\end{tikzpicture}
-\begin{tikzpicture}%avec correction sans bordure
- \PLpixelart[codes=ABCD,couleurs={Black,Green,Yellow,Red},correction,bordcases=false]{basique.csv}
-\end{tikzpicture}
-\end{codetex}
-
-\begin{codesortie}
-\begin{filecontents*}[overwrite]{basique.csv}
-A,B,C,D
-A,B,D,C
-B,A,D,C
-C,A,B,D
-\end{filecontents*}
-
-\begin{center}
- \begin{tblr}{colspec={*{4}{Q[1.25cm,c,m]}},hlines,vlines,rows={1.15em}}
- \SetCell[c=4]{c} Notice & & & \\
- A & B & C & D \\
- 45 & 22 & 1 & 7 \\
- Noir & Vert & Jaune & Rouge \\
- \end{tblr}
-\end{center}
-
-\hfill\begin{tikzpicture}[scale=0.9]
- %avec lettres
- \PLpixelart[codes=ABCD,style=\large\sffamily]{basique.csv}
-\end{tikzpicture}
-\begin{tikzpicture}[scale=0.9]
- %avec chiffres
- \PLpixelart[codes=ABCD,symboles={45,22,1,7},symb,style=\large\sffamily]{basique.csv}
-\end{tikzpicture}
-\begin{tikzpicture}[scale=0.9]
- %avec correction
- \PLpixelart[codes=ABCD,couleurs={Black,Green,Yellow,Red},correction]{basique.csv}
-\end{tikzpicture}
-\begin{tikzpicture}[scale=0.9]
- %avec correction
- \PLpixelart[codes=ABCD,couleurs={Black,Green,Yellow,Red},correction,bordcases=false]{basique.csv}
-\end{tikzpicture}
-\hfill~
-\end{codesortie}
-
-\begin{codeinfo}
-La commande \ctex{PLpixelart} nécessite de connaître :
-
-\begin{itemize}
- \item le fichier \textsf{csv} à traiter ;
- \item la liste (en fait sous forme de chaîne) des codes utilisés dans le fichier \textsf{csv} (comme \ctex{234679} ou \ctex{ABCDJK}\ldots);
- \item la liste des symboles (éventuellement !) à afficher dans les cases s'il y a ambiguïté, comme \ctex{25,44,12} ou \ctex{AA,AB,AC};
- \item la liste des couleurs (si la correction est demandée), dans le même ordre que la liste des caractères.
-\end{itemize}
-\end{codeinfo}
-
-\begin{codetex}[listing only]
-%environnement tikz
-\PLpixelart[<clés>]{<fichier>.csv}
-\end{codetex}
-
-\begin{codecles}
-Quelques \Cle{Clés} sont nécessaires au bon fonctionnement de la commande :
-
-\begin{itemize}
- \item la clé \Cle{codes} contient la \textsf{chaîne} des codes \textit{simples} du fichier \textsf{csv} ;
- \item la clé \Cle{couleurs} qui contient la \textsf{liste} des couleurs associées ;
- \item la clé \Cle{symboles} qui contient la \textsf{liste éventuelles} des caractères alternatifs à afficher dans les cases ;
- \item la clé booléenne \Cle{correction} qui permet de colorier le PixelART ;\hfill{}défaut \Cle{false}
- \item la clé booléenne \Cle{symb} qui permet d'afficher les caractères \textit{alternatifs} ;\hfill{}défaut \Cle{false}
- \item la clé booléenne \Cle{bordcases} qui permet d'afficher les bords des cases de la correction ;\hfill{}défaut \Cle{true}
- \item la clé \Cle{style} qui permet de spécifier le style des caractères. \hfill{}défaut \Cle{scriptsize}
-\end{itemize}
-\end{codecles}
-
-\begin{codetex}[listing only]
-%codes simples et sans ambiguïté
-%une case vide sera codée par -
-
-\begin{filecontents*}[overwrite]{perroquet.csv}
--,-,-,-,-,-,4,4,4,4,-,-,-,-,-,-
--,-,-,-,4,4,1,1,1,1,4,4,-,-,-,-
--,-,-,4,1,1,1,1,1,1,1,1,4,-,-,-
--,-,4,1,1,1,1,1,1,1,1,1,1,4,-,-
--,-,4,1,1,1,1,1,1,1,1,1,1,4,-,-
--,4,1,9,9,1,1,1,1,1,1,9,9,1,4,-
--,4,9,9,9,9,4,4,4,4,9,9,9,9,4,-
--,4,9,4,9,9,4,4,4,4,9,4,9,9,4,-
--,4,1,9,9,9,4,4,4,4,9,9,9,1,4,-
--,-,4,1,1,9,4,4,4,4,9,1,1,4,-,-
--,-,4,1,1,1,4,4,4,4,1,1,1,4,-,-
--,-,-,4,1,1,1,4,4,1,1,1,4,-,-,-
--,-,4,3,1,1,1,1,1,1,1,1,3,4,-,-
--,4,6,3,1,1,1,1,1,1,1,1,3,6,4,-
--,4,6,6,1,1,1,1,1,1,1,1,6,6,4,-
--,4,6,6,1,1,1,1,1,1,1,1,6,6,4,-
--,4,6,4,1,1,1,4,4,1,1,1,4,6,4,-
-2,2,4,2,4,4,4,2,2,4,4,4,2,4,2,2
-2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2
-2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2
--,-,-,-,-,4,1,1,1,1,4,-,-,-,-,-
--,-,-,-,-,-,4,1,1,4,-,-,-,-,-,-
--,-,-,-,-,-,-,4,4,-,-,-,-,-,-,-
-\end{filecontents*}
-
-\begin{tikzpicture}[x=0.35cm,y=0.35cm]
- \PLpixelart[codes=123469,style=\ttfamily]{perroquet.csv}
-\end{tikzpicture}
-
-\begin{tikzpicture}[x=0.35cm,y=0.35cm]
- \PLpixelart[codes=123469,couleurs={Red,Brown,Yellow,Black,Blue,White},correction]{perroquet.csv}
-\end{tikzpicture}
-\end{codetex}
-
-\subsection{Exemples complémentaires}
-
-\begin{codeinfo}
-Les symboles affichés dans les cases sont situés aux nœuds de coordonnées $(c\,;\,-l)$ où $l$ et $c$ sont les numéros de ligne et de colonne correspondants à la position de la donnée dans le fichier \textsf{csv}.
-\end{codeinfo}
-
-\begin{codesortie}
-\begin{filecontents*}[overwrite]{perroquet.csv}
--,-,-,-,-,-,4,4,4,4,-,-,-,-,-,-
--,-,-,-,4,4,1,1,1,1,4,4,-,-,-,-
--,-,-,4,1,1,1,1,1,1,1,1,4,-,-,-
--,-,4,1,1,1,1,1,1,1,1,1,1,4,-,-
--,-,4,1,1,1,1,1,1,1,1,1,1,4,-,-
--,4,1,9,9,1,1,1,1,1,1,9,9,1,4,-
--,4,9,9,9,9,4,4,4,4,9,9,9,9,4,-
--,4,9,4,9,9,4,4,4,4,9,4,9,9,4,-
--,4,1,9,9,9,4,4,4,4,9,9,9,1,4,-
--,-,4,1,1,9,4,4,4,4,9,1,1,4,-,-
--,-,4,1,1,1,4,4,4,4,1,1,1,4,-,-
--,-,-,4,1,1,1,4,4,1,1,1,4,-,-,-
--,-,4,3,1,1,1,1,1,1,1,1,3,4,-,-
--,4,6,3,1,1,1,1,1,1,1,1,3,6,4,-
--,4,6,6,1,1,1,1,1,1,1,1,6,6,4,-
--,4,6,6,1,1,1,1,1,1,1,1,6,6,4,-
--,4,6,4,1,1,1,4,4,1,1,1,4,6,4,-
-2,2,4,2,4,4,4,2,2,4,4,4,2,4,2,2
-2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2
-2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2
--,-,-,-,-,4,1,1,1,1,4,-,-,-,-,-
--,-,-,-,-,-,4,1,1,4,-,-,-,-,-,-
--,-,-,-,-,-,-,4,4,-,-,-,-,-,-,-
-\end{filecontents*}
-
-\begin{center}
- \begin{tblr}{colspec={*{6}{Q[1.25cm,c,m]}},hlines,vlines,rows={1.15em}}
- \SetCell[c=6]{c} Notice & & & & & \\
- 1 & 2 & 3 & 5 & 6 & 9 \\
- Rouge & Marron & Jaune & Noir & Bleu & Blanc \\
- \end{tblr}
-% \renewcommand\arraystretch{1.25}
-% \begin{tabular}{|c|c|c|c|c|c|}
-% \hline
-% \multicolumn{6}{|c|}{Notice} \\ \hline
-% 1 & 2 & 3 & 5 & 6 & 9 \\ \hline
-% Rouge & Marron & Jaune & Noir & Bleu & Blanc \\ \hline
-% \end{tabular}
-\end{center}
-
-\begin{center}
- \begin{tikzpicture}[x=0.35cm,y=0.35cm]
- \PLpixelart[codes=123469,style=\ttfamily]{perroquet.csv}
- \end{tikzpicture}
- \begin{tikzpicture}[x=0.35cm,y=0.35cm]
- \PLpixelart[codes=123469,couleurs={Red,Brown,Yellow,Black,Blue,White},correction]{perroquet.csv}
- \end{tikzpicture}
-\end{center}
-
-\begin{center}
- \begin{tikzpicture}[x=0.35cm,y=0.35cm]
- \draw[very thin,gray,xstep=1,ystep=1] (0,0) grid (17,-24) ;
- \foreach \x in {0,1,...,17} \draw[very thin,gray] (\x,-3pt)--(\x,3pt) node[above,font=\scriptsize\sffamily] {\x} ;
- \foreach \y in {0,-1,...,-24} \draw[very thin,gray] (3pt,\y)--(-3pt,\y) node[left,font=\scriptsize\sffamily] {\y} ;
- \PLpixelart[codes=123469,couleurs={Red,Brown,Yellow,Black,Blue,White},correction]{perroquet.csv}
- \filldraw[Blue] (14,-1) circle[radius=1] ;
- \filldraw[Yellow] (14,-1) circle[radius=0.8] ;
- \draw[ForestGreen,very thick,<-] (15,-1) to[bend left=30] (18,-2) node[right,font=\scriptsize\sffamily] {rajouté en \TikZ} ;
- \end{tikzpicture}
-\end{center}
-\end{codesortie}
-
-\begin{codetex}[listing only]
-%code tikz et pixelart
-\filldraw[Blue] (14,-1) circle[radius=1] ;
-\filldraw[Yellow] (14,-1) circle[radius=0.8] ;
-\draw[ForestGreen,very thick,<-] (15,-1) to[bend left=30] (18,-2) node[right,font=\scriptsize\sffamily] {rajouté en \TikZ} ;
-\end{codetex}
-
-\pagebreak
-
-\begin{codetex}[listing only]
-%codes avec ambiguïté
-
-\begin{filecontents*}[overwrite]{cap.csv}
--,-,-,-,-,-,-,-,D,-,D,-,D,-,-,-,-,-,-,-,-,-
--,D,D,-,-,-,-,D,D,D,D,D,D,-,-,D,D,D,D,-,-,-
-D,-,-,D,-,D,D,F,F,F,F,F,F,D,D,-,-,-,-,D,-,-
--,D,-,-,D,F,F,F,-,-,F,F,F,F,F,D,-,D,D,-,-,-
--,-,D,D,F,F,F,-,F,F,-,F,F,F,F,F,D,D,-,-,-,-
--,-,-,D,F,F,F,F,F,F,F,F,F,F,F,F,D,-,-,-,-,-
--,-,-,D,F,J,J,J,J,J,J,J,F,F,F,F,D,-,-,-,-,-
--,-,-,D,J,-,-,-,J,-,-,-,J,J,F,F,D,-,-,-,-,-
--,-,-,D,J,-,D,-,J,-,D,-,J,J,B,B,D,-,-,-,-,-
--,-,-,D,J,-,-,-,J,-,-,-,J,J,B,B,D,-,-,-,-,-
--,-,-,D,C,J,J,J,J,J,J,J,J,C,C,C,D,-,-,-,-,-
--,-,-,D,C,C,C,C,C,C,C,C,C,C,C,D,D,D,-,-,-,-
--,-,-,D,C,C,C,D,D,D,D,D,D,C,D,A,A,A,D,-,-,-
--,-,-,D,F,C,C,C,C,C,C,C,C,D,A,-,-,-,A,D,-,-
--,-,-,D,F,C,F,C,C,C,C,F,D,A,-,A,A,A,-,A,D,-
--,-,D,C,F,F,F,F,C,C,F,D,A,-,A,F,F,F,A,-,A,D
--,-,D,C,F,F,F,F,F,F,F,D,A,-,A,F,-,F,A,-,A,D
--,-,D,A,D,-,A,-,A,-,A,D,A,-,A,F,F,F,A,-,A,D
--,-,-,D,D,-,A,-,A,-,A,-,D,A,-,A,A,A,-,A,D,-
--,-,-,-,-,D,D,F,D,D,D,D,F,D,A,-,-,-,A,D,-,-
--,-,-,-,-,-,D,A,D,-,-,D,-,-,D,A,A,A,D,-,-,-
--,-,-,-,-,-,D,D,D,-,-,D,D,D,D,D,D,D,-,-,-,-
-\end{filecontents*}
-
-\begin{tikzpicture}[x=0.35cm,y=0.35cm]
- \PLpixelart[codes=ABCDFJ,symboles={1,2,3,4,6,10},symb,style=\tiny\sffamily]{cap.csv}
-\end{tikzpicture}
-
-\begin{tikzpicture}[x=0.35cm,y=0.35cm]
- \PLpixelart[codes=ABCDFJ,couleurs={Red,Brown,Yellow,Black,Blue,Gray},correction]{cap.csv}
-\end{tikzpicture}
-\end{codetex}
-
-\begin{codesortie}
-\begin{filecontents*}[overwrite]{cap.csv}
--,-,-,-,-,-,-,-,D,-,D,-,D,-,-,-,-,-,-,-,-,-
--,D,D,-,-,-,-,D,D,D,D,D,D,-,-,D,D,D,D,-,-,-
-D,-,-,D,-,D,D,F,F,F,F,F,F,D,D,-,-,-,-,D,-,-
--,D,-,-,D,F,F,F,-,-,F,F,F,F,F,D,-,D,D,-,-,-
--,-,D,D,F,F,F,-,F,F,-,F,F,F,F,F,D,D,-,-,-,-
--,-,-,D,F,F,F,F,F,F,F,F,F,F,F,F,D,-,-,-,-,-
--,-,-,D,F,J,J,J,J,J,J,J,F,F,F,F,D,-,-,-,-,-
--,-,-,D,J,-,-,-,J,-,-,-,J,J,F,F,D,-,-,-,-,-
--,-,-,D,J,-,D,-,J,-,D,-,J,J,B,B,D,-,-,-,-,-
--,-,-,D,J,-,-,-,J,-,-,-,J,J,B,B,D,-,-,-,-,-
--,-,-,D,C,J,J,J,J,J,J,J,J,C,C,C,D,-,-,-,-,-
--,-,-,D,C,C,C,C,C,C,C,C,C,C,C,D,D,D,-,-,-,-
--,-,-,D,C,C,C,D,D,D,D,D,D,C,D,A,A,A,D,-,-,-
--,-,-,D,F,C,C,C,C,C,C,C,C,D,A,-,-,-,A,D,-,-
--,-,-,D,F,C,F,C,C,C,C,F,D,A,-,A,A,A,-,A,D,-
--,-,D,C,F,F,F,F,C,C,F,D,A,-,A,F,F,F,A,-,A,D
--,-,D,C,F,F,F,F,F,F,F,D,A,-,A,F,-,F,A,-,A,D
--,-,D,A,D,-,A,-,A,-,A,D,A,-,A,F,F,F,A,-,A,D
--,-,-,D,D,-,A,-,A,-,A,-,D,A,-,A,A,A,-,A,D,-
--,-,-,-,-,D,D,F,D,D,D,D,F,D,A,-,-,-,A,D,-,-
--,-,-,-,-,-,D,A,D,-,-,D,-,-,D,A,A,A,D,-,-,-
--,-,-,-,-,-,D,D,D,-,-,D,D,D,D,D,D,D,-,-,-,-
-\end{filecontents*}
-
-\begin{center}
- \begin{tikzpicture}[x=0.35cm,y=0.35cm]
- \PLpixelart[codes=ABCDFJ,symboles={1,2,3,4,6,10},symb,style=\tiny\sffamily]{cap.csv}
- \end{tikzpicture}
- ~~
- \begin{tikzpicture}[x=0.35cm,y=0.35cm]
- \PLpixelart[codes=ABCDFJ,couleurs={Red,Brown,Yellow,Black,Blue,Gray},correction]{cap.csv}
- \end{tikzpicture}
-\end{center}
-\end{codesortie}
-
-\newpage
-
-\section{SudoMaths, en \TikZ}\label{sudomaths}
-
-\subsection{Introduction}
-
-\begin{codeidee}
-L'idée est de \textit{proposer} un environnement \TikZ, une commande permettant de tracer des grilles de SudoMaths.
-
-L'environnement créé, lié à \TikZ, trace la grille de SudoMaths (avec les blocs démarqués), et peut la remplir avec une liste d'éléments.
-\end{codeidee}
-
-\begin{codetex}[listing only]
-%grille classique non remplie, avec légendes H et V
-%les {} non nécessaires pour préciser que les cases seront "vides"
-\PLsudomaths{}
-\end{codetex}
-
-\begin{codesortie}
-\PLsudomaths{}
-\end{codesortie}
-
-\begin{codeinfo}
-La commande \ctex{PLsudomaths} crée donc la grille (remplie ou non), dans un environnement \TikZ, c'est \textit{c'est tout} !
-
-\smallskip
-
-Si on veut exploiter le tracé de la grille, on peut utiliser l'\textit{environnement} \ctex{PLenvsudomaths} dans lequel on peut rajouter toute commande en \TikZ{} !
-\end{codeinfo}
-
-\begin{codetex}[listing only]
-%grille "toute seule"
-\PLsudomaths[<options>]{<liste>}
-
-%grille avec ajout de code
-\begin{PLenvsudomaths}[<options>]{<grille>}
- <commandes tikz> ;
-\end{PLenvsudomaths}
-\end{codetex}
-
-\pagebreak
-
-\subsection{Clés et options}
-
-\begin{codecles}
-Quelques \Cle{clés} sont disponibles pour cette commande :
-
-\begin{itemize}
- \item la clé \Cle{epaisseurg} pour gérer l'épaisseur des traits épais ; \hfill~défaut \Cle{1.5pt}
- \item la clé \Cle{epaisseur} pour gérer l'épaisseur des traits fins ; \hfill~défaut \Cle{0.5pt}
- \item la clé \Cle{unite} qui est l'unité graphique de la figure ; \hfill~défaut \Cle{1cm}
- \item la clé \Cle{couleurcase} pour la couleur (éventuelles) des cases ; \hfill~défaut \Cle{LightBlue!50}
- \item la clé \Cle{couleurtexte} pour gérer la couleur du label des cases ; \hfill~défaut \Cle{blue}
- \item la clé \Cle{nbcol} qui est le nombre de colonnes ; \hfill~défaut \Cle{9}
- \item la clé \Cle{nbsubcol} qui est le nombre de sous-colonnes ; \hfill~défaut \Cle{3}
- \item la clé \Cle{nblig} qui est le nombre de lignes ; \hfill~défaut \Cle{9}
- \item la clé \Cle{nbsublig} qui est le nombre de sous-colonnes ; \hfill~défaut \Cle{3}
- \item la clé \Cle{police} qui formatte le label des cases ; \hfill~défaut \Cle{\textbackslash{}normalfont\textbackslash{}normalsize}
- \item le booléen \Cle{legendes} qui affiche ou non les légendes (H et V) des cases ; \hfill~défaut \Cle{true}
- \item la clé \Cle{policeleg} qui formatte le label des légendes ; \hfill~défaut \Cle{\textbackslash{}normalfont\textbackslash{}normalsize}
- \item la clé \Cle{listelegv} qui est la liste de la légende verticale ; \hfill~défaut \Cle{ABCD...WXYZ}
- \item la clé \Cle{listelegh} qui est la liste de la légende horizontale ; \hfill~défaut \Cle{abcd...wxyz}
- \item la clé \Cle{decallegende} qui est le décalage de la légende par rapport à la grille. \hfill~défaut \Cle{0.45}
-\end{itemize}
-\end{codecles}
-
-\begin{codeinfo}
-La liste éventuelle des éléments à rentrer dans le tableau est traitée par le package \ctex{listofitems}, et se présente sous la forme suivante : \ctex{ / / / ... / / § / / / ... / / § ... § / / / ... / / }
-
-\smallskip
-
-Il peut donc être intéressant de \textit{déclarer} la liste au préalable pour simplifier la saisie de la commande !
-\end{codeinfo}
-
-\begin{codeinfo}
-La \Cle{couleurcase} est gérée -- en interne -- par le caractère \ctex{*} qui permet de préciser qu'on veut que la case soit coloriée.
-\end{codeinfo}
-
-\begin{codetex}[listing only]
-%grille 6x6 avec blocs 2x3, avec coloration de cases (présentée sous forme de "cases")
-\def\grilleSuMa{%
- (a)* / (b)* / / / (c)* / (d)* §%
- (e)* / / / (f)* / (g)* / (h)* §%
- / / (i)* / / / (j)* §%
- / / (k)* / / (l)* / (m)* §%
- (n)* / / (o)* / / / (p)* §%
- / / / (q)* / / §%
-}
-
-\PLsudomaths[unite=0.75cm,nbcol=6,nbsubcol=2,nblig=6,nbsublig=3,police=\small\bfseries\ttfamily,%
- couleurtexte=red,couleurcase=yellow!50,legendes=false]{\grilleSuMa}
-\end{codetex}
-
-\begin{codesortie}
-\def\grilleSuMa{%
- (a)* / (b)* / / / (c)* / (d)* §%
- (e)* / / / (f)* / (g)* / (h)* §%
- / / (i)* / / / (j)* §%
- / / (k)* / / (l)* / (m)* §%
- (n)* / / (o)* / / / (p)* §%
- / / / (q)* / / §%
-}
-
-\PLsudomaths[unite=0.75cm,nbcol=6,nbsubcol=2,nblig=6,nbsublig=3,police=\small\bfseries\ttfamily,couleurtexte=red,couleurcase=yellow!50,legendes=false]{\grilleSuMa}
-\end{codesortie}
-
-\pagebreak
-
-\begin{codeinfo}
-La grille, créée en \TikZ, est portée par le rectangle de \og coins \fg{} $(0\,;\,0)$ et $(\text{nbcol}\,;\,-\text{nblig})$, de sorte que les labels des cases sont situés au nœuds de coordonnées $(x,5\,;\,-y,5)$.
-\end{codeinfo}
-
-\begin{codetex}[listing only]
-%grille classique avec coloration de cases et commande tikz
-%graduations rajoutées pour la lecture des coordonnées
-\def\grilleSuMaB{%
- */////4///§%
- /*///3////§%
- //*//////§%
- ///*/////§%
- ////*////§%
- /////*///§%
- //5*/////*/§%
- /////B///*§%
- *///9////Q/§%
-}
-
-\begin{PLenvsudomaths}[%
- unite=0.66cm,police=\footnotesize\bfseries\ttfamily,couleurcase=ForestGreen!50,%
- listelegv=QSDFGHJKL,listelegh=poiuytrez]{\grilleSuMaB}
- \draw[red,very thick,<-] (7.5,-4.5) to[bend right] ++ (4,-1) node[right] {code rajouté...} ;
-\end{PLenvsudomaths}
-\end{codetex}
-
-\begin{codesortie}
-\def\grilleSuMaB{%
- */////4///§%
- /*///3////§%
- //*//////§%
- ///*/////§%
- ////*////§%
- /////*///§%
- //5*/////*/§%
- /////B///*§%
- *///9////Q/§%
-}
-
-\begin{PLenvsudomaths}[%
- unite=0.66cm,police=\footnotesize\bfseries\ttfamily,couleurcase=ForestGreen!50,%
- listelegv=QSDFGHJKL,listelegh=poiuytrez]{\grilleSuMaB}
- \draw[red,very thick,<-] (7.5,-4.5) to[bend right] ++ (4,-1) node[right] {code rajouté pour montrer la case \textsf{Ge}} ;
- \foreach \x in {0,1,...,9} \draw[lightgray] (\x,-9) node[below,font=\scriptsize\ttfamily] {\x} ;
- \foreach \y in {-1,-2,...,-9} \draw[lightgray] (9,\y) node[right,font=\scriptsize\ttfamily] {\y} ;
- \draw[lightgray] (9,0) node[right,font=\scriptsize\ttfamily] {~0} ;
-\end{PLenvsudomaths}
-\end{codesortie}
-
-\newpage
-
-\part{Historique}
-
-{\small \bverb|v1.3.8|~:~~~~Chargement du package \textsf{piton} uniquement si compilation en \LuaLaTeX{} (page \pageref{pythonpiton})
-
-{\small \bverb|v1.3.7|~:~~~~Commandes pour du code python via piton, en compilation \LuaLaTeX{} (page \pageref{pythonpiton})
-
-{\small \bverb| |~:~~~~Corrections et modifications mineures de la documentation
-
-{\small \bverb|v1.3.6|~:~~~~Présentation de l'algorithme d'Euclide pour le PGCD (page \pageref{prespgcd})
-
-{\small \bverb| |~:~~~~Affichage d'un trinôme par coefficients, aléatoires ou non (page \pageref{trinome})
-
-{\small \bverb|v1.3.5|~:~~~~Correction d'un bug avec la loi géométrique (page \pageref{calcprobas})
-
-{\small \bverb|v1.3.4|~:~~~~Ajout de petits schémas, en \TikZ{}, de lois normales et exponentielles (page \pageref{schemasprobas})
-
-{\small \bverb| |~:~~~~Calculs de probas avec les lois géométriques et hypergéométriques (page \pageref{calcprobas})
-
-{\small \bverb|v1.3.3|~:~~~~Ajout d'un environnement pour des arbres de probas classiques, en \TikZ{} (page \pageref{arbresprobas})
-
-{\small \bverb|v1.3.2|~:~~~~Correction d'un bug sur les conversions bintohex avec lualatex (page \pageref{conversions})
-
-{\small \bverb|v1.3.1|~:~~~~Ajout d'une option pour ne pas afficher les bordures des corrections de pixelart (page \pageref{pixelart})
-
-{\small \bverb|v1.3.0|~:~~~~Commande pour présenter une conversion depuis la base 10 (page \pageref{convrestes})
-
-{\small \bverb|v1.2.9|~:~~~~Correction des commandes avec \textsf{simplekv}
-
-{\small \bverb|v1.2.8|~:~~~~Ajout d'une librairie \TikZ{} oubliée, et remise en forme de la documentation
-
-{\small \bverb|v1.2.7|~:~~~~Ajout de commandes pour des calculs de probabilités (page \pageref{calcprobas})
-
-{\small \bverb|v1.2.6|~:~~~~Ajout d'un environnement pour des SudoMaths (page \pageref{sudomaths})
-
-{\small \bverb|v1.2.5|~:~~~~Ajout de commandes pour des boîtes à moustaches (page \pageref{boiteamoustaches})
-
-{\small \bverb|v1.2.4|~:~~~~Correction de quelques bugs mineurs, et mise à jour de la doc
-
-{\small \bverb|v1.2.3|~:~~~~Commandes pour du code python "simple", sans compilation particulière (page \pageref{pythonsimple})
-
-{\small \bverb|v1.2.2|~:~~~~Commandes pour travailler sur des stats à 2 variables (page \pageref{statsdeuxvars})
-
-{\small \bverb|v1.2.1|~:~~~~Amélioration de la gestion du csv pour Pixelart
-
-{\small \bverb|v1.2.0|~:~~~~Correction d'un \textit{méchant} bug sur Pixelart
-
-{\small \bverb|v1.1.9|~:~~~~Pixelart en \TikZ{} (page \pageref{pixelart})
-
-{\small \bverb|v1.1.8|~:~~~~Style "Mainlevée" basique pour \TikZ (page \pageref{mainlevee})
-
-{\small \bverb|v1.1.7|~:~~~~Conversions bin/hex/dec (basées sur \textsf{xintbinhex}) avec quelques détails (page \pageref{conversions})
-
-{\small \bverb|v1.1.6|~:~~~~Ajout d'une commande pour déterminer les paramètres d'une régression linéaire par moindres carrés (page \pageref{reglin})
-
-{\small \bverb|v1.1.5|~:~~~~Ajout de deux commandes pour, en \TikZ, créer des petits schémas \og de signe \fg{} (page \pageref{aidesigne})
-
-{\small \bverb|v1.1.4|~:~~~~Ajout d'une commande pour, en \TikZ, créer facilement un cercle trigo avec \textit{options} (page \pageref{cercletrigo})
-
-{\small \bverb|v1.1.3|~:~~~~Ajout des commandes pour fractions, ensembles et récurrence (pages \pageref{convfrac}, \pageref{ensembles} et \pageref{recurr})
-
-{\small \bverb|v1.1.1|~:~~~~Modification mineure de l'environnement calcul formel, avec prise de charge de la taille du texte
-
-{\small \bverb|v1.1.0|~:~~~~Ajout d'une commande pour créer des tétraèdres (avec nœuds) en \TikZ{} (page \pageref{tetra})
-
-{\small \bverb|v1.0.9|~:~~~~Ajout d'une commande pour créer des pavés droits (avec nœuds) en \TikZ{} (page \pageref{pave})
-
-{\small \bverb|v1.0.8|~:~~~~Ajout d'une commande pour créer des cartouches de lien "comme capytale" (page \pageref{capytale})
-
-{\small \bverb|v1.0.7|~:~~~~Ajout d'une option \textsf{build} pour placer certains fichiers auxiliaires dans un répertoire externe
-
-{\small \bverb|v1.0.6|~:~~~~Ajout d'une option \textsf{nominted} pour ne pas charger (pas besoin de compiler avec \textsf{shell-escape})
-
-{\small \bverb|v1.0.5|~:~~~~Ajout d'un environnement pour Python (\textsf{minted}) (page \pageref{pytminted})
-
-{\small \bverb|v1.0.4|~:~~~~Ajout des environnements pour Terminal (win, osx, unix) (page \pageref{terms})
-
-{\small \bverb|v1.0.3|~:~~~~Ajout des environnements pour PseudoCode (page \pageref{pseudocode})
-
-{\small \bverb|v1.0.2|~:~~~~Ajout des environnements pour Python (\textsf{pythontex}) (page \pageref{pythontex})
-
-{\small \bverb|v1.0.1|~:~~~~Modification mineure liée au chargement de \textsf{xcolor}
-
-{\small \bverb|v1.0 |~:~~~~Version initiale}
-
-\end{document} \ No newline at end of file
diff --git a/macros/latex/contrib/proflycee/tex/ProfLycee-old.sty b/macros/latex/contrib/proflycee/tex/ProfLycee-old.sty
deleted file mode 100644
index dc3c35fdd7..0000000000
--- a/macros/latex/contrib/proflycee/tex/ProfLycee-old.sty
+++ /dev/null
@@ -1,3125 +0,0 @@
-% Author : C. Pierquet
-% licence : Released under the LaTeX Project Public License v1.3c
-% or later, see http://www.latex-project.org/lppl.txtf
-
-\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{ProfLycee-old}[2022/11/06 v1.3.8 - Aide pour l'utilisation de LaTeX en lycee]
-% 1.3.8 Chargement de Piton uniquement en cas de compilation en lua
-% 1.3.7 Ajout d'un environnement simplifié pour du code python via piton
-% 1.3.6 Ajout d'un "générateur" de trinômes (ou mise en forme basique)
-% 1.3.5 Correction de bugs sur les calculs de probas (loi géométrique)
-% 1.3.4 Ajout des calculs de probas geomtriques et hypergeometriques + petits schémas probas
-% 1.3.3 Ajout de commandes pour des arbres de probas classiques, en tikz
-% 1.3.2 Correction d'une commande liée à la conversion bintohex (suppression clé trait)
-% 1.3.1 Ajout d'une option pour ne pas afficher les bords des cases en pixelart
-% 1.3.0 Ajout d'une commande pour mettre en forme une conversion depuis la base 10
-% 1.2.9 Correction d'une incompatibilité avec simplekv (clés vides...)
-% 1.2.8 Correction de l'oubli d'une librairie tikz et remise en forme de la documentation
-% 1.2.7 Calculs de probas pour des lois classiques
-% 1.2.6 Ajout d'un environnement tikz pour des sudomaths personnalisés
-% 1.2.5 Ajout d'une commande pour des boites à moustaches, en tikz
-% 1.2.4 Correction de quelques bugs mineurs, et mise à jour de la doc
-% 1.2.3 Ajout d'un environnement simplifié pour du code python
-% 1.2.2 Ajouts de commandes pour des stats à 2 variables
-% 1.2.1 Amélioration de la gestion du csv pour les pixelart
-% 1.2 Correction d'un méchant bug avec pixelart, erf...
-% 1.1.9 Commande pour du pixelart en tikz (avec option csvii pour compatibilité)
-% 1.1.8 Ajout d'un style mainlevee pour tikz
-% 1.1.7 Ajout de commandes pour des conversions bin/dec/hex
-% 1.1.6 Ajout d'une commande pour déterminer les paramètres d'un régression linéaire par moindres carrés
-% 1.1.5 Ajout de commandes pour "visualiser" le signe de ax+b ou de ax2+bx+c (cf tnsana !)
-% 1.1.4 Ajout d'une commande cercletrigoPL pour, en \TikZ, créer facilement un cercle trigo avec options
-% 1.1.3 Ajout d'une commande ensemble pour créer un ensemble à partir d'une liste
-% 1.1.2 Modifs mineures
-% 1.1.1 Modification mineure de l'environnement CF, avec prise de charge de la taille du texte !
-% 1.1.0 Ajout d'une commande tetraPL pour un tetraèdre dans un environnement TikZ
-% 1.0.9 Ajout d'une commande pavePL pour un pave droit dans un environnement TikZ
-% 1.0.8 Ajout d'une commande liencapytale pour créer un cartouche "comme sur capytale"
-% 1.0.7 Option [build] pour placer les fichiers temporaires dans un répertoire build (désactivée par défaut)
-% 1.0.6 Option [nominted] pour éviter de charger minted & nettoyage amssymb
-% 1.0.5 Environnement code python avec minted
-% 1.0.4 Environnement pour simuler terminal windows & linux
-% 1.0.3 Environnement pour présenter du pseudocode
-% 1.0.2 Environnement pour présenter du code python (avec pythontex)
-% 1.0.1 Modif mineure du chargement de xcolor (compatibilité avec d'autres packages notamment...)
-% 1.0 Version initiale
-
-%------Option(s)
-\newif\if@nominted \@nomintedfalse
-\DeclareOption{nominted}{\@nomintedtrue}
-\newif\if@build \@buildfalse
-\DeclareOption{build}{\@buildtrue}
-\newif\if@csvii \@csviifalse
-\DeclareOption{csvii}{\@csviitrue}
-\DeclareOption*{}
-\ProcessOptions\relax
-
-%------Packages utiles
-\RequirePackage[table,svgnames]{xcolor}%Gestion des couleurs
-\RequirePackage{tikz}
-\RequirePackage{tkz-tab}
-\RequirePackage{mathtools}
-\RequirePackage{pgf,pgffor}
-\RequirePackage{ifthen}
-\RequirePackage{xparse}
-\RequirePackage{xkeyval}
-\RequirePackage{xfp}
-\RequirePackage{xstring}
-\RequirePackage{xintexpr}
-\RequirePackage{xintbinhex}
-\RequirePackage{simplekv}
-\RequirePackage{listofitems}
-\RequirePackage{tabularray}
-\RequirePackage{siunitx} %test avec v3
-\sisetup{%
- locale=FR,%
- mode = match, propagate-math-font = true,%
- reset-math-version = false, reset-text-family = false,%
- reset-text-series = false, reset-text-shape = false,%
- text-family-to-math = true, text-series-to-math = true,%
- output-decimal-marker={,},%
- group-minimum-digits=4%
-}%
-\RequirePackage{fontawesome5}
-\if@csvii
- \RequirePackage[legacy]{csvsimple}
-\else
- \RequirePackage{expl3}
- \RequirePackage[l3]{csvsimple}
-\fi
-%librairies tikz
-\usetikzlibrary{calc}
-\usetikzlibrary{decorations}
-\usetikzlibrary{decorations.pathreplacing}
-\usetikzlibrary{decorations.markings}
-\usetikzlibrary{arrows,arrows.meta}
-\usetikzlibrary{babel}
-\usetikzlibrary{shapes.geometric}
-\usetikzlibrary{decorations.pathmorphing}
-%tcolorbox
-\RequirePackage[most]{tcolorbox}
-%divers
-\RequirePackage{iftex}
-%python
-\RequirePackage{fancyvrb}
-\RequirePackage[gobble=auto]{pythontex}
-\setpythontexlistingenv{pythont} %pour ne pas télescoper lstlistings (?)
-\if@build
- \setpythontexoutputdir{./build/pythontex-files-\jobname} %essai de modif pythontex répertoire build
-\fi
-
-%---------------SPLINES----------------------
-%------commande utile pour extraire des infos d'une liste
-\newcommand\extractcoeff[2]{% #1=liste & #2=numero
- \setsepchar{§}%
- \readlist\lcoeffs{#1}
- \ifnum \lcoeffslen=1
- \def\COEFFA{#1}
- \def\COEFFB{#1}
- \else
- \itemtomacro\lcoeffs[#2]\COEFF
- \IfSubStr{\COEFF}{/}%
- {\StrCut{\COEFF}{/}{\COEFFA}{\COEFFB}}%
- {\def\COEFFA{\COEFF}\def\COEFFB{\COEFF}}
- \fi
-}
-
-%------splines en tikz avec ..controls
-\defKV[spline]{%
- liste=\def\SPLliste{#1},%
- width=\def\SPLepaisseur{#1},%
- couleur=\def\SPLcouleur{#1},%
- coeffs=\def\SPLcoeffs{#1},%
- couleurpoints=\def\SPLcouleurpoints{#1},%
- taillepoints=\def\SPLtaillepoints{#1},%
- style=\def\SPLstyle{#1}
-}
-
-\setKVdefault[spline]{%
- spline={},%
- width=1.25pt,%
- couleur=red,%
- coeffs=3,%
- couleurpoints=black,%
- taillepoints=2pt,%
- affpoints=false,%
- style={}
-}
-
-\newcommand\splinetikz[1][]{%
- \useKVdefault[spline]
- \setKV[spline]{#1}% on paramètres les nouvelles clés et on les simplifie
- %on lit la liste des points/nbderivés et on stocke dans \listepoints
- \setsepchar[.]{§./}%
- \readlist\SPLlistepoints\SPLliste
- \def\SPLnbsplines{\inteval{\SPLlistepointslen-1}}
- %si uniquement deux points, pas de boucle...
- \ifnum \SPLlistepointslen=2
- %extraction des coeffs de compensation
- \extractcoeff{\SPLcoeffs}{1}%
- %extraction des coordonnées
- \itemtomacro\SPLlistepoints[1,1]\xa
- \itemtomacro\SPLlistepoints[1,2]\ya
- \itemtomacro\SPLlistepoints[1,3]\fprimea
- \itemtomacro\SPLlistepoints[2,1]\xb
- \itemtomacro\SPLlistepoints[2,2]\yb
- \itemtomacro\SPLlistepoints[2,3]\fprimeb
- \draw[line width=\SPLepaisseur,\SPLcouleur,\SPLstyle] (\xa,\ya) ..controls +({atan \fprimea}:{(\xb-\xa)/\COEFFA}) and +({-180 + atan \fprimeb}:{(\xb-\xa)/\COEFFA}).. (\xb,\yb) ;%
- %sinon on construit bout par bout !
- \else
- \foreach \i in {1,2,...,\SPLnbsplines}{
- %extraction des coeffs de compensation
- \extractcoeff{\SPLcoeffs}{\i}
- \def\j{\inteval{\i+1}}
- \itemtomacro\SPLlistepoints[\i,1]\xa
- \itemtomacro\SPLlistepoints[\i,2]\ya
- \itemtomacro\SPLlistepoints[\i,3]\fprimea
- \itemtomacro\SPLlistepoints[\j,1]\xb
- \itemtomacro\SPLlistepoints[\j,2]\yb
- \itemtomacro\SPLlistepoints[\j,3]\fprimeb
- \draw[line width=\SPLepaisseur,\SPLcouleur,\SPLstyle] (\xa,\ya) ..controls +({atan \fprimea}:{(\xb-\xa)/\COEFFA}) and +({-180 + atan \fprimeb}:{(\xb-\xa)/\COEFFB}).. (\xb,\yb) ;%
- }
- \fi
- \ifboolKV[spline]{affpoints}%on affiche les points de contrôle
- {%
- \foreach \i in {1,2,...,\SPLlistepointslen}{%
- \itemtomacro\SPLlistepoints[\i,1]\xa
- \itemtomacro\SPLlistepoints[\i,2]\ya
- \filldraw[\SPLcouleurpoints] (\xa,\ya) circle[radius=\SPLtaillepoints] ;%
- }
- }
- {}
-}
-
-%------tangente(s) en TikZ, avec point/dérivée ou liste points/dérivées
-\defKV[tgte]{%
- liste=\def\TGTliste{#1},%
- width=\def\TGTepaisseur{#1},%
- couleur=\def\TGTcouleur{#1},%
- xl=\def\TGTXL{#1},%
- xr=\def\TGTXR{#1},%
- style=\def\TGTstyle{#1},%
- point=\def\TGTnumpt{#1}
-}
-
-\setKVdefault[tgte]{
- liste={},%
- width=1.25pt,%
- couleur=red,%
- xl=0.5,xr=0.5,%
- style={},%
- point=1
-}
-
-\newcommand\tangentetikz[1][]{%
- \useKVdefault[tgte]%
- \setKV[tgte]{#1}% on paramètres les nouvelles clés et on les simplifie
- \setsepchar[.]{§./}%
- \readlist\TGTlistepoints\TGTliste
- \itemtomacro\TGTlistepoints[\TGTnumpt,1]\xa
- \itemtomacro\TGTlistepoints[\TGTnumpt,2]\ya
- \itemtomacro\TGTlistepoints[\TGTnumpt,3]\fprimea
- \def\TGTDEB{\fpeval{\xa-\TGTXL}}\def\TGTFIN{\fpeval{\xa+\TGTXR}}%
- \draw[line width=\TGTepaisseur,\TGTcouleur,domain=\TGTDEB:\TGTFIN,\TGTstyle] plot (\x,{\fprimea*(\x-\xa)+\ya}) ;%
-}
-
-%----------------FENÊTRE CALCUL FORMEL
-\newcommand\CFchap{\textasciicircum}
-\newcounter{CFnum}
-%def des clés
-\defKV[paramfenxcas]{%
- larg=\def\CFlarg{#1},%
- esplg=\def\CFesplg{#1},%
- premcol=\def\CFpremcol{#1},%
- hpremcol=\def\CFhpremcol{#1},%
- taille=\def\CFtaille{#1},%
- couleur=\def\CFcouleur{#1},%
- tailletitre=\def\CFtailletitre{#1},%
- couleurcmd=\def\CFcoulcmd{#1},%
- couleurres=\def\CFcoulres{#1},%
- poscmd=\def\CFposcmd{#1},%
- posres=\def\CFposres{#1},%
- labeltitre=\def\CFlabeltitre{#1}%
-}
-\setKVdefault[paramfenxcas]{%
- larg=16,esplg=2pt,premcol=0.3,hpremcol=0.4,%
- couleur=darkgray,menu=true,titre=false,tailletitre=\normalsize,taille=\normalsize,%
- sep=true,posres=centre,poscmd=gauche,%
- couleurcmd=red,couleurres=blue,%
- labeltitre={Résultats obtenus avec un logiciel de Calcul Formel}}
-\newcommand\paramCF[1][]{%
- \setcounter{CFnum}{0}
- \useKVdefault[paramfenxcas]%
- \setKV[paramfenxcas]{#1}% on paramètres les nouvelles clés et on les simplifie
-}
-%def des clés
-\defKV[paramlgxcas]{%
- hc=\def\CFhle{#1},%
- hr=\def\CFhlr{#1}
-}
-\setKVdefault[paramlgxcas]{hc=0.75,hr=0.75}
-\newcommand\ligneCF[3][]{%
- \addtocounter{CFnum}{1}
- \def\CFL{\theCFnum}
- \def\CFLA{\inteval{\CFL-1}}%
- \useKVdefault[paramlgxcas]%
- \setKV[paramlgxcas]{#1}% on paramètres les nouvelles clés et on les simplifie
- \def\CFLA{\inteval{\CFL-1}}%
- %DÉCLARATION DES NŒUDS (les "6" coins des lignes commande et résultat)
- \xintifboolexpr{\CFL == 1}%si c'est la première ligne
- {\coordinate (A0\CFL) at (0,0);}
- {\coordinate (A0\CFL) at ($(A2\CFLA) + (0,{-\CFesplg})$);}
- \coordinate (A1\CFL) at ($(A0\CFL) + (0,{-\CFhle})$);
- \coordinate (A2\CFL) at ($(A1\CFL) + (0,{-\CFhlr})$);
- \coordinate (A3\CFL) at ($(A0\CFL) + ({\CFlarg},0)$);
- \coordinate (A4\CFL) at ($(A1\CFL) + ({\CFlarg},0)$);
- \coordinate (A5\CFL) at ($(A2\CFL) + ({\CFlarg},0)$);
- %DÉCLARATION DES NŒUDS INTERMÉDIAIRES (pour les commandes et les résultats)
- \coordinate (C1\CFL) at ($(A0\CFL) + (0,{-0.5*\CFhle})$);
- \coordinate (C2\CFL) at ($(A0\CFL) + ({0.5*\CFlarg},{-0.5*\CFhle})$);
- \coordinate (C3\CFL) at ($(A0\CFL) + ({\CFlarg},{-0.5*\CFhle})$);
- \coordinate (R1\CFL) at ($(A1\CFL) + (0,{-0.5*\CFhlr})$);
- \coordinate (R2\CFL) at ($(A1\CFL) + ({0.5*\CFlarg},{-0.5*\CFhlr})$);
- \coordinate (R3\CFL) at ($(A1\CFL) + ({\CFlarg},{-0.5*\CFhlr})$);
- %RECTANGLE DE BASE
- \draw[\CFcouleur] (A0\CFL) rectangle (A5\CFL) ;
- %LA COMMANDE EN ROUGE
- \IfStrEq{\CFposcmd}{centre}%si poscmd=center
- {\draw (C2\CFL) node[\CFcoulcmd,font=\CFtaille] {#2} ;}
- {}
- \IfStrEq{\CFposcmd}{gauche}%si poscmd=left
- {\draw (C1\CFL) node[right,\CFcoulcmd,font=\CFtaille] {#2} ;}
- {}
- \IfStrEq{\CFposcmd}{right}%si poscmd=right
- {\draw (C3\CFL) node[left,\CFcoulcmd,font=\CFtaille] {#2} ;}
- {}
- %LA LIGNE DE SÉPARATION
- \ifboolKV[paramfenxcas]{sep}%si sep=true
- {\draw[\CFcouleur] (A1\CFL) -- (A4\CFL);}
- {}
- %LE RÉSULTAT
- \IfStrEq{\CFposres}{centre}%si posrep=center
- {\draw (R2\CFL) node[\CFcoulres,font=\CFtaille] {#3} ;}
- {}
- \IfStrEq{\CFposres}{gauche}%si posrep=left
- {\draw (R1\CFL) node[right,\CFcoulres,font=\CFtaille] {#3} ;}
- {}
- \IfStrEq{\CFposres}{right}%si posrep=right
- {\draw (R3\CFL) node[left,\CFcoulres,font=\CFtaille] {#3} ;}
- {}
- \ifboolKV[paramfenxcas]{sep}%si sep=true
- {\draw[\CFcouleur] (A1\CFL) -- (A4\CFL);}%
- {}
- %LE PETIT NUMÉRO
- \draw[\CFcouleur] (A0\CFL) rectangle ++ ({-\CFpremcol},{-\CFhpremcol}) node[\CFcouleur,midway,font=\small\sffamily\bfseries] {\CFL} ;
- %LE RECTANGLE "MENU"
- \ifboolKV[paramfenxcas]{menu}%si menu=true
- {\draw[\CFcouleur,fill=\CFcouleur!25] (A5\CFL) rectangle ++ (-0.65,0.25) node[black,midway,font=\tiny\sffamily\bfseries] {MENU} ;}%
- {}
- %LE BLOC "TITRE"
- \ifboolKV[paramfenxcas]{titre}%si titre=true
- {\draw[\CFcouleur,fill=lightgray!25,rounded corners] ($(A01) + (0,2pt)$) rectangle ++ ($({\CFlarg},2em)$) node[ForestGreen!50!\CFcouleur,midway,font=\CFtailletitre\ttfamily\bfseries] {\CFlabeltitre};}
- {}
-}
-
-%=========CONSOLEPYTHON=========== OK !!
-\defKV[envpythonconsole]{%
- largeur=\def\CSPYlargeur{#1},%
- centre=\testboolKV{#1}
- {\def\hookcenterpre{\begin{center}}\def\hookcenterpost{\end{center}}}
- {\def\hookcenterpre{\begin{flushleft}}\def\hookcenterpost{\end{flushleft}}}
-}
-
-\setKVdefault[envpythonconsole]{%
- largeur=\linewidth,%
- centre=true,%
- label=true
-}
-
-\newenvironment{envconsolepythontex}[1][]{%
- \useKVdefault[envpythonconsole]%
- \setKV[envpythonconsole]{#1}% on paramètres les nouvelles clés et on les simplifie
- \VerbatimEnvironment
- \hookcenterpre
- \begin{minipage}{\CSPYlargeur}
- \ifboolKV[envpythonconsole]{label}%si sep=true
- {\begin{pyconsole}[][%
- framesep=3mm,frame=single,fontsize=\footnotesize,framerule=1pt,rulecolor=\color{ForestGreen},label={[\scriptsize Début de la console python]\scriptsize Fin de la console python}]}%
- {\begin{pyconsole}[][%
- framesep=3mm,frame=single,fontsize=\footnotesize,framerule=1pt,rulecolor=\color{ForestGreen}]}
- }
- {
- \end{pyconsole}
- \end{minipage}
- \hookcenterpost
-}
-
-%=========CODEPYTHONTEX=========== OK!!
-\defKV[envpythonverb]{%
- largeur=\def\CODPYlargeur{#1},%
- centre=\testboolKV{#1}
- {\def\verbcenterpre{\begin{center}}\def\verbcenterpost{\end{center}}}
- {\def\verbcenterpre{}\def\verbcenterpost{}}
-}
-
-\setKVdefault[envpythonverb]{%
- largeur=\linewidth,%
- centre=true,%
- lignes=true
-}
-
-\tcbset{stylepythontex/.style={%
- enhanced,boxrule=1.25pt,%
- sharp corners=downhill,arc=12pt,
- before skip=12pt,after skip=12pt,%
- top=10pt,bottom=1mm,rightupper=4pt,%leftupper=25pt,
- attach boxed title to top right={yshift=-\tcboxedtitleheight},
- boxed title style={
- size=small,colback=ForestGreen!25,boxrule=1.25pt,
- colframe=Green,boxsep=1.25pt,
- sharp corners=downhill,
- arc=12pt,
- top=2pt,bottom=1pt,left=6pt,right=6pt
- },
- fonttitle=\color{ForestGreen}\itshape\ttfamily\footnotesize,
- title={\scriptsize\faPython}\:Code Python\vphantom{p},
- watermark text={\faPython},watermark opacity=0.175,watermark zoom=0.50,
- }
-}
-
-\tcbset{stylepythonnolineos/.style={%
- stylepythontex,leftupper=10pt,
- colframe=Green,colback=ForestGreen!5,%
- fontlower=\small,%
- before upper = \renewcommand\theFancyVerbLine{\scriptsize\ttfamily\color{Green}\arabic{FancyVerbLine}}
- }
-}
-
-\tcbset{stylepythonlineos/.style={%
- stylepythontex,leftupper=25pt,
- colframe=Green,colback=ForestGreen!5,%
- fontlower=\small,%
- before upper = \renewcommand\theFancyVerbLine{\scriptsize\ttfamily\color{Green}\arabic{FancyVerbLine}}
- }
-}
-
-\newtcolorbox{tcpythontexcode}[1][\linewidth]{%
- width=#1,stylepythonlineos
-}
-
-\newtcolorbox{tcpythontexcodeno}[1][\linewidth]{%
- width=#1,stylepythonnolineos
-}
-
-\newenvironment{envcodepythontex}[1][]{%
- \useKVdefault[envpythonverb]%
- \setKV[envpythonverb]{#1}% on paramètres les nouvelles clés et on les simplifie
- \VerbatimEnvironment
- \verbcenterpre
- \ifboolKV[envpythonverb]{lignes}%si lignes=true
- {\begin{tcpythontexcode}[\CODPYlargeur]}
- {\begin{tcpythontexcodeno}[\CODPYlargeur]}
- \ifboolKV[envpythonverb]{lignes}%si lignes=true
- {\begin{pyverbatim}[][fontsize=\footnotesize,numbers=left,numbersep=10pt,commandchars=\\\{\},mathescape]}
- {\begin{pyverbatim}[][numbers=none,numbersep=0pt,fontsize=\footnotesize,commandchars=\\\{\},mathescape]}
- }
- {
- \end{pyverbatim}
- \ifboolKV[envpythonverb]{lignes}%si lignes=true
- {\end{tcpythontexcode}}
- {\end{tcpythontexcodeno}}
- \verbcenterpost
-}
-
-%=========PYTHONMINTED========= OK !!
-\if@nominted
- %on ne charge pas minted et la librairie tcbox
-\else
- \if@build
- %on charge minted avec le répertoire build
- \RequirePackage[outputdir=build]{minted}
- \fi
- %on charge minted via la librairie tcbox
- \tcbuselibrary{minted}
-\fi
-
-\tcbset{pytmintedno/.style={%
- listing engine=minted,minted style=colorful,
- minted language=python,listing only,
- minted options={tabsize=4,fontsize=\small,autogobble},
- }
-}
-
-\tcbset{pytminted/.style={%
- listing engine=minted,minted style=colorful,
- minted language=python,listing only,
- minted options={tabsize=4,fontsize=\small,autogobble,xleftmargin=16pt,linenos,numbersep=10pt},
- }
-}
-
-\DeclareTCBListing{envcodepythonminted}{ s O{12cm} O{} }{% étoilée sans numéro, taille puis option...
- \IfBooleanTF{#1}{pytmintedno}{pytminted},
- enhanced,width=#2,#3,
- colframe=Green,colback=ForestGreen!5,%
- boxrule=1.25pt,
- sharp corners=downhill,arc=12pt,
- before skip=12pt,after skip=12pt,%
- leftupper=8pt,top=10pt,bottom=4pt,rightupper=4pt,%
- attach boxed title to top right={yshift=-\tcboxedtitleheight},
- boxed title style={
- size=small,colback=ForestGreen!25,boxrule=1.25pt,
- colframe=Green,boxsep=1.25pt,
- sharp corners=downhill,
- arc=12pt,
- top=2pt,bottom=1pt,left=6pt,right=6pt
- },
- fonttitle=\color{ForestGreen}\itshape\ttfamily\footnotesize,
- title={\scriptsize\faPython}\:Code Python\vphantom{y},
- watermark text={\faPython},watermark opacity=0.175,watermark zoom=0.50,
- before upper = \renewcommand{\theFancyVerbLine}{\scriptsize\ttfamily\color{Green}\arabic{FancyVerbLine}}
-}
-
-%=======STYLE ALGO LST========= OK !
-\ifluatex
- \tcbuselibrary{listings}
- \lstdefinelanguage{langnat}{%
- keywords={},
- inputencoding=utf8,
- comment=[l]{}}
- \lstdefinestyle{PLpython}{%
- language = python,
- inputencoding = utf8,
- basicstyle = \ttfamily\footnotesize,
- keywordstyle = \color{ForestGreen},
- keywordstyle = [2]\color{magenta},
- commentstyle = \color{gray}\itshape,
- stringstyle = \color{red!75},
- numberstyle = \scriptsize\ttfamily\color{Green},
- aboveskip = 4pt,
- belowskip = 1pt,
- tabsize = 4,
- showstringspaces = false,
- columns = fullflexible,
- keepspaces = true,
- breaklines = true,
- breakatwhitespace = true
- }
-\else
- \tcbuselibrary{listingsutf8}
- \lstdefinelanguage{langnat}{%
- keywords={},
- inputencoding=utf8/latin1,
- comment=[l]{}}
- \lstdefinestyle{PLpython}{%
- language = python,
- inputencoding = utf8/latin1,
- basicstyle = \ttfamily\footnotesize,
- keywordstyle = \color{ForestGreen},
- keywordstyle = [2]\color{magenta},
- commentstyle = \color{gray}\itshape,
- stringstyle = \color{red!75},
- numberstyle = \scriptsize\ttfamily\color{Green},
- aboveskip = 4pt,
- belowskip = 1pt,
- tabsize = 4,
- showstringspaces = false,
- columns = fullflexible,
- keepspaces = true,
- breaklines = true,
- breakatwhitespace = true
- }
-\fi
-
-%=======PYTHONLISTINGS========= OK !!
-\tcbset{stylepythonlst/.style={%
- enhanced,boxrule=1.25pt,%
- leftupper=10pt,
- sharp corners=downhill,arc=12pt,
- before skip=12pt,after skip=12pt,%
- top=10pt,bottom=1mm,rightupper=4pt,%leftupper=25pt,
- attach boxed title to top right={yshift=-\tcboxedtitleheight},
- boxed title style={
- size=small,colback=ForestGreen!25,boxrule=1.25pt,
- colframe=Green,boxsep=1.25pt,
- sharp corners=downhill,
- arc=12pt,
- top=2pt,bottom=1pt,left=6pt,right=6pt
- },
- colframe=Green,colback=ForestGreen!5,%
- fonttitle=\color{ForestGreen}\itshape\ttfamily\footnotesize,
- title={\scriptsize\faPython}\:Code Python\vphantom{p},
- watermark text={\faPython},watermark opacity=0.175,watermark zoom=0.50,
- listing only,listing engine=listings,%
- }
-}
-
-\tcbset{stylepythonlstnolineos/.style={%
- stylepythonlst,
- listing options={style=PLpython,xleftmargin=0pt,numbers=none}
- }
-}
-
-\tcbset{stylepythonlstlineos/.style={%
- stylepythonlst,
- listing options={style=PLpython,xleftmargin=16pt,numbers=left}
- }
-}
-
-\DeclareTCBListing{envcodepython}{ s O{\linewidth} m }{% * off pour numéros de lignes + {largeur} + <options tcbox>
- \IfBooleanTF{#1}{stylepythonlstnolineos}{stylepythonlstlineos},
- width=#2,#3
-}
-
-\NewTCBInputListing{\envcodepythonfichier}{ s O{\linewidth} m m }{
- \IfBooleanTF{#1}{stylepythonlstnolineos}{stylepythonlstlineos},
- width=#2,#3,
- listing file={#4}}
-
-%=========PYTHONPITON========== OK !!
-\defKV[envpiton]{%
- Largeur=\def\CODPITlargeur{#1},%
- Alignement=\def\CODPITalign{#1}
-}
-
-\setKVdefault[envpiton]{%
- Largeur=\linewidth,%
- Alignement=center,%
- Lignes=true
-}
-\ifluatex
- \RequirePackage{piton}
- \NewPitonEnvironment{envcodepiton}{ O{} }%
- {%
- \useKVdefault[envpiton]%
- \setKV[envpiton]{#1}% on paramètres les nouvelles clés et on les simplifie
- \ifboolKV[envpiton]{Lignes}%si lignes=true
- {\PitonOptions{left-margin=12.75pt,line-numbers}}%
- {\PitonOptions{}}%
- \begin{tcolorbox}[stylepythontex,leftupper=8pt,colframe=Green,colback=ForestGreen!5,width=\CODPITlargeur,fontlower=\small,\CODPITalign]
- }%
- {%
- \end{tcolorbox}%
- }
-\fi
-
-%=========PSEUDOCODE=========== OK !!
-%language pseudocode listings
-\lstdefinestyle{pseudocodePL}{%
- language=langnat,
- basicstyle=\footnotesize\ttfamily,
- numberstyle=\scriptsize\ttfamily\color{gray},
- keywordstyle=\bfseries,
- stringstyle=\color{red!75},
- keepspaces=true,
- tabsize=4,numbersep=10pt,
- xleftmargin=14pt,
- numbers=left,
- morestring=[b]",
- showstringspaces=false,
- %showtabs=false,
- escapeinside={(*}{*)}
-}
-
-\lstdefinestyle{pseudocodenoPL}{%
- language=langnat,
- basicstyle=\footnotesize\ttfamily,
- numberstyle=\scriptsize\ttfamily\color{gray},
- keywordstyle=\bfseries,
- stringstyle=\color{red!75},
- keepspaces=true,
- tabsize=4,numbersep=10pt,
- numbers=none,
- showstringspaces=false,
- morestring=[b]",
- %showtabs=true,
- escapeinside={(*}{*)}
-}
-
-%style tcbox pseudocode avec bannière hautdroite
-\tcbset{stylepseudocodePL/.style={%
- %fontupper=\small\sffamily,%
- enhanced,boxrule=1.25pt,sharp corners=downhill,arc=12pt,
- before skip=12pt,after skip=12pt,leftupper=10pt,top=8pt,bottom=2pt,rightupper=4pt,%
- attach boxed title to top right={yshift=-\tcboxedtitleheight},
- boxed title style={
- size=small,colback=gray!25,boxrule=1.25pt,
- colframe=darkgray,boxsep=1.25pt,
- sharp corners=downhill,
- arc=12pt,
- top=2pt,bottom=1pt,left=6pt,right=6pt
- },
- fonttitle=\color{darkgray}\ttfamily\footnotesize,
- title={\scriptsize\faFileCode}\:\textit{Pseudo-Code}\vphantom{p},
- watermark text={\faCode},watermark opacity=0.175,watermark zoom=0.50,
- }
-}
-
-\ifluatex
- \newcommand\algomathttPL[1]{\symtt{#1}}
-\else
- \newcommand\algomathttPL[1]{\mathtt{#1}}
-\fi
-
-\DeclareTCBListing{envpseudocode}{ s O{12cm} !O{} }{% étoilée sans numéro, taille puis option...
- width=#2,#3,
- stylepseudocodePL,
- listing only,listing engine=listings,
- listing options={
- style=\IfBooleanTF{#1}{pseudocodenoPL}{pseudocodePL},%version étoilée sans numéro de lignes
- aboveskip=2pt,belowskip=2pt,
- columns=fullflexible,
- literate={é}{{\'e}}1 {í}{{\'i}}1 {ó}{{\'o}}1%
- {ú}{{\'u}}1 {Á}{{\'A}}1 {É}{{\'E}}1 {Í}{{\'I}}1 {Ó}{{\'O}}1 {Ú}{{\'U}}1%
- {è}{{\`e}}1 {ì}{{\`i}}1 {ò}{{\`o}}1 {ù}{{\`u}}1%
- {À}{{\`A}}1 {È}{{\'E}}1 {Ì}{{\`I}}1 {Ò}{{\`O}}1 {Ù}{{\`U}}1%
- {ä}{{\"a}}1 {ë}{{\"e}}1 {ï}{{\"i}}1 {ö}{{\"o}}1 {ü}{{\"u}}1%
- {Ä}{{\"A}}1 {Ë}{{\"E}}1 {Ï}{{\"I}}1 {Ö}{{\"O}}1 {Ü}{{\"U}}1%
- {â}{{\^a}}1 {ê}{{\^e}}1 {î}{{\^i}}1 {ô}{{\^o}}1 {û}{{\^u}}1%
- {Â}{{\^A}}1 {Ê}{{\^E}}1 {Î}{{\^I}}1 {Ô}{{\^O}}1 {Û}{{\^U}}1%
- {œ}{{\oe}}1 {Œ}{{\OE}}1 {æ}{{\ae}}1 {Æ}{{\AE}}1 {ß}{{\ss}}1%
- {ű}{{\H{u}}}1 {Ű}{{\H{U}}}1 {ő}{{\H{o}}}1 {Ő}{{\H{O}}}1%
- {ç}{{\c c}}1 {Ç}{{\c C}}1 {ø}{{\o}}1 {å}{{\r a}}1 {Å}{{\r A}}1%
- {€}{{\texteuro}}1 {£}{{\pounds}}1%
- {=}{\textleftarrow}1 {==}{=}1%
- {*}{$\algomathttPL{\times}$}{1}%
- }
-}
-
-%============FakeTerm=========== OK !!
-%couleurs (inspirées par termsim !)
-\definecolor{PLmpurple}{RGB}{48,10,36}
-\definecolor{PLmgray}{RGB}{70,72,67}
-\definecolor{PLogray}{RGB}{148,147,141}
-\definecolor{PLoorange}{RGB}{233,101,56}
-\definecolor{PLterminal}{RGB}{80,78,70}
-\definecolor{PLlinux}{RGB}{0,39,51}
-\definecolor{PLwinblue}{HTML}{1883D7}
-\definecolor{PLosxgray}{HTML}{D8D6D9}
-
-%WINDOWS
-\tcbset{PLfaketermwin/.style={%
- enhanced,boxrule=1pt,sharp corners,before skip=12pt,after skip=12pt,%
- colframe=PLwinblue,colback=black,colbacktitle=white,colupper=white,coltitle=black,%
- titlerule=0.4pt,left=2pt,top=2pt,bottom=2pt,right=2pt,middle=2pt,%
- fonttitle=\bfseries\small\sffamily
- }
-}
-
-\setKVdefault[fakeTERMwin]{titre={Terminal Windows}}
-
-\newcommand\PLcommandeswin{%
- \begin{tikzpicture}[thick,scale=0.66]
- \draw (0,0)--(1em,0) ; \draw (2em,0) rectangle (3em,1em) ; \draw (4em,1em)--(5em,0) (4em,0)--(5em,1em) ;
- \end{tikzpicture}%
-}
-
-\newcommand\termwintitre[1][]{%
- \restoreKV[fakeTERMwin]
- \setKV[fakeTERMwin]{#1}
- \begin{tblr}{colsep=0pt,rowsep=0pt,width=\linewidth,colspec={X[l]r}}
- {\footnotesize\faTerminal}~~\useKV[fakeTERMwin]{titre} & \PLcommandeswin \\ %
- \end{tblr}
-}
-
-\DeclareTCBListing{PLtermwin}{ O{\linewidth} m !O{} }{%[taille] puis {titre=...} puis [option]
- PLfaketermwin,title={\termwintitre[#2]},%
- listing only,listing engine=listings,%
- listing options={style=tcblatex,language={},basicstyle=\footnotesize\ttfamily},%
- width=#1,#3
-}
-
-%LINUX
-\newcommand{\PLUbuntuWhite}{%
- \begin{tikzpicture}[thick,anchor=base,baseline]
- \filldraw[PLmgray] (0,0.25em) circle[radius=0.5em] ;
- \end{tikzpicture}%
-}
-\newcommand{\PLUbuntuMin}{%
- \begin{tikzpicture}[thick,anchor=base,baseline]
- \filldraw[color=PLogray!50!white] (0,0.25em) circle[radius=0.5em];
- \draw[PLterminal](-0.35em,0.25em)--(0.35em,0.25em);
- \end{tikzpicture}%
-}
-\newcommand{\PLUbuntuClose}{%
- \begin{tikzpicture}[thick,anchor=base,baseline]
- \filldraw[color=PLoorange!70!white] (0,0.25em) circle[radius=0.5em];
- \draw[PLterminal] (-0.32em,-0.07em)--(0.32em,0.57em);
- \draw[PLterminal] (-0.32em,0.57em)--(0.32em,-0.07em);
- \end{tikzpicture}%
-}
-\newcommand{\PLUbuntuMax}{%
- \begin{tikzpicture}[thick,anchor=base,baseline]
- \filldraw[color=PLogray!50!white] (0,0.25em) circle[radius=0.5em];
- \draw[PLterminal] (-0.32em,0.5em) rectangle (0.32em,0);
- \end{tikzpicture}%
-}
-
-\tcbset{PLtermlinux/.style={%
- enhanced,boxrule=1pt,arc=4pt,before skip=12pt,after skip=12pt,%
- colframe=PLmgray,colback=PLmpurple,colbacktitle=PLmgray,colupper=white,coltitle=white,%
- titlerule=0.4pt,left=2pt,top=2pt,bottom=2pt,right=2pt,middle=2pt,%
- fonttitle=\bfseries\small\sffamily
- }
-}
-
-\setKVdefault[fakeTERMnux]{titre={Terminal UNiX}}
-
-\newcommand\termnuxtitre[1][]{%
- \restoreKV[fakeTERMnux]
- \setKV[fakeTERMnux]{#1}
- \begin{tblr}{colsep=0pt,rowsep=0pt,width=\linewidth,colspec={lX[c]r}}
- \PLUbuntuWhite~~\PLUbuntuWhite~~\PLUbuntuWhite & \vphantom{p}\useKV[fakeTERMnux]{titre} & \PLUbuntuMin~~\PLUbuntuMax~~\PLUbuntuClose \\
- \end{tblr}
-}
-
-\DeclareTCBListing{PLtermunix}{ O{\linewidth} m !O{} }{%[taille] puis {titre=...} puis [option]
- PLtermlinux,title={\termnuxtitre[#2]},%
- listing only,listing engine=listings,%
- listing options={style=tcblatex,language={},basicstyle=\footnotesize\ttfamily},%
- width=#1,#3
-}
-
-%OSX
-\tcbset{PLfaketermosx/.style={%
- enhanced,boxrule=1pt,arc=6pt,before skip=12pt,after skip=12pt,%
- colframe=PLosxgray,colback=lightgray!15,colbacktitle=PLosxgray,colupper=black,coltitle=black,%
- titlerule=0.4pt,left=2pt,top=2pt,bottom=2pt,right=2pt,middle=2pt,%
- fonttitle=\bfseries\small\sffamily
- }
-}
-
-\newcommand{\PLOSXRed}{%
- \begin{tikzpicture}[thick,anchor=base,baseline]
- \filldraw[red] (0,0.25em) circle[radius=0.45em] ;
- \end{tikzpicture}%
-}
-
-\newcommand{\PLOSXOrange}{%
- \begin{tikzpicture}[thick,anchor=base,baseline]
- \filldraw[orange] (0,0.25em) circle[radius=0.45em] ;
- \end{tikzpicture}%
-}
-
-\newcommand{\PLOSXGreen}{%
- \begin{tikzpicture}[thick,anchor=base,baseline]
- \filldraw[ForestGreen] (0,0.25em) circle[radius=0.45em] ;
- \end{tikzpicture}%
-}
-
-\newcommand{\PLOSXLG}{%
- \begin{tikzpicture}[thick,anchor=base,baseline]
- \filldraw[PLosxgray] (0,0.25em) circle[radius=0.45em] ;
- \end{tikzpicture}%
-}
-
-\setKVdefault[fakeTERMosx]{titre={Terminal OSX}}
-
-\newcommand\termosxtitre[1][]{%
- \restoreKV[fakeTERMosx]
- \setKV[fakeTERMosx]{#1}
- \begin{tblr}{colsep=0pt,rowsep=0pt,width=\linewidth,colspec={lX[c]r}}
- \PLOSXRed~\PLOSXOrange~\PLOSXGreen & \vphantom{p}\useKV[fakeTERMosx]{titre} & \PLOSXLG~\PLOSXLG~\PLOSXLG \\
- \end{tblr}
-}
-
-\DeclareTCBListing{PLtermosx}{ O{\linewidth} m !O{} }{%[taille] puis {titre=...} puis [option]
- PLfaketermosx,title={\termosxtitre[#2]},%
- listing only,listing engine=listings,%
- listing options={style=tcblatex,language={},basicstyle=\footnotesize\ttfamily},%
- width=#1,#3
-}
-
-%============CartoucheCapytale========= OK !!
-\definecolor{vertcapyt}{rgb}{0.0,0.5,0.0}
-%\definecolor{vertcapyt}{HTML}{008000}
-\DeclareTotalTCBox{\liencapytale}{ s O{} m }
- {enhanced,size=fbox,on line,arc=3pt,colback=vertcapyt,colframe=vertcapyt,fontupper=\IfBooleanTF{#1}{\ttfamily}{\sffamily}\bfseries,colupper=white}%
- {#3#2~{\scriptsize\faLink}}
-
-%============PaveDroitTikZ============= OK !!
-\defKV[paramspave]{%
- largeur=\xdef\PFPaveLg{#1},%
- profondeur=\xdef\PFPavePf{#1},%
- hauteur=\xdef\PFPaveHt{#1},%
- angle=\xdef\PFPaveAngl{#1},%
- fuite=\xdef\PFPaveFuite{#1},%
- sommets=\def\PFPaveSommets{#1},%
- epaisseur=\xdef\PFPaveThick{#1}
-}
-\setKVdefault[paramspave]{%
- aff=false,%
- plein=false,%
- largeur=2,%
- profondeur=1,%
- hauteur=1.25,%
- angle=30,%
- fuite=0.5,%
- epaisseur=thick,%
- sommets=A§B§C§D§E§F§G§H,%
- cube=false
-}
-
-\newcommand\pavePL[1][]{%
- \useKVdefault[paramspave]%
- \setKV[paramspave]{#1}%
- \ifboolKV[paramspave]{cube}
- {\xdef\PFPavePf{\PFPaveLg}%
- \xdef\PFPaveHt{\PFPaveLg}}
- {}
- \setsepchar{§}%
- \readlist\PFListeSommets\PFPaveSommets
- \itemtomacro\PFListeSommets[1]\PaveA
- \itemtomacro\PFListeSommets[2]\PaveB
- \itemtomacro\PFListeSommets[3]\PaveC
- \itemtomacro\PFListeSommets[4]\PaveD
- \itemtomacro\PFListeSommets[5]\PaveE
- \itemtomacro\PFListeSommets[6]\PaveF
- \itemtomacro\PFListeSommets[7]\PaveG
- \itemtomacro\PFListeSommets[8]\PaveH
- %les nœuds du pave
- \coordinate (\PaveA) at (0,0) ;
- \coordinate (\PaveB) at ({\PFPaveLg},0) ;
- \coordinate (\PaveC) at ($(\PaveB) + ({\PFPaveAngl}:{\PFPaveFuite*\PFPavePf})$) ;
- \coordinate (\PaveD) at ($(\PaveA) + ({\PFPaveAngl}:{\PFPaveFuite*\PFPavePf})$) ;
- \coordinate (\PaveE) at ($(\PaveA) + (0,{\PFPaveHt})$) ;
- \coordinate (\PaveF) at ($(\PaveB) + (0,{\PFPaveHt})$) ;
- \coordinate (\PaveG) at ($(\PaveC) + (0,{\PFPaveHt})$) ;
- \coordinate (\PaveH) at ($(\PaveD) + (0,{\PFPaveHt})$) ;
- \ifboolKV[paramspave]{aff}
- {\draw (\PaveA) node[below left] {\PaveA} ;
- \draw (\PaveB) node[below right] {\PaveB} ;
- \draw (\PaveC) node[above right] {\PaveC} ;
- \ifboolKV[paramspave]{plein}
- {}
- {\draw (\PaveD) node[above left] {\PaveD} ;}
- \draw (\PaveE) node[below left] {\PaveE} ;
- \draw (\PaveF) node[below right] {\PaveF} ;
- \draw (\PaveG) node[above right] {\PaveG} ;
- \draw (\PaveH) node[above left] {\PaveH} ;}
- {}%on affiche rien
- \draw[\PFPaveThick] (\PaveA)--(\PaveB)--(\PaveF)--(\PaveE)--cycle
- (\PaveB)--(\PaveC)--(\PaveG)--(\PaveF)--cycle
- (\PaveG)--(\PaveH)--(\PaveE) ;
- \ifboolKV[paramspave]{plein}
- {}
- {\draw[dashed,\PFPaveThick] (\PaveA)--(\PaveD)--(\PaveC)
- (\PaveD)--(\PaveH) ;}
-}
-
-%============TétraèdreTikZ============= OK !!
-\defKV[paramstetra]{%
- largeur=\xdef\PFTetraLg{#1},%
- profondeur=\xdef\PFTetraPf{#1},%
- hauteur=\xdef\PFTetraHt{#1},%
- alpha=\xdef\PFTetraAlpha{#1},%
- beta=\xdef\PFTetraBeta{#1},%
- sommets=\def\PFTetraSommets{#1},%
- epaisseur=\xdef\PFTetraThick{#1}
-}
-\setKVdefault[paramstetra]{%
- aff=false,%
- plein=false,%
- largeur=4,%
- profondeur=1.25,%
- hauteur=3,%
- alpha=40,%
- beta=60,%
- epaisseur=thick,%
- sommets=A§B§C§D,%
-}
-
-\newcommand\tetraPL[1][]{%
- \useKVdefault[paramstetra]%
- \setKV[paramstetra]{#1}%
- \setsepchar{§}%
- \readlist\PFListeSommets\PFTetraSommets
- \itemtomacro\PFListeSommets[1]\TetraA
- \itemtomacro\PFListeSommets[2]\TetraB
- \itemtomacro\PFListeSommets[3]\TetraC
- \itemtomacro\PFListeSommets[4]\TetraD
- %les nœuds du tétraèdre
- \coordinate (\TetraA) at (0,0) ;
- \coordinate (\TetraB) at ($(\TetraA) + ({-\PFTetraAlpha}:{\PFTetraPf})$) ;
- \coordinate (\TetraC) at ({\PFTetraLg},0) ;
- \coordinate (\TetraD) at ($(\TetraA) + ({\PFTetraBeta}:{\PFTetraHt})$) ;
- \ifboolKV[paramstetra]{aff}
- {\draw (\TetraA) node[left] {\TetraA} ;
- \draw (\TetraB) node[below] {\TetraB} ;
- \draw (\TetraC) node[right] {\TetraC} ;
- \draw (\TetraD) node[above] {\TetraD} ;}
- {}%on affiche rien
- \draw[\PFTetraThick] (\TetraA)--(\TetraD)--(\TetraC)--(\TetraB)--cycle
- (\TetraD)--(\TetraB) ;
- \ifboolKV[paramstetra]{plein}
- {}
- {\draw[dashed,\PFTetraThick] (\TetraA)--(\TetraC) ;}
-}
-
-%============EnsembleList============== OK !!
-\defKV[kvensemble]{%
- sep=\def\PLenssep{#1},%
- option=\def\PLensopt{#1}
-}
-
-\setKVdefault[kvensemble]{%
- sep={;},%
- mathpunct=true,%
- option={}
-}
-
-\newcommand\ensPL[2][1]{%
- \useKVdefault[kvensemble]%
- \setKV[kvensemble]{#1}%
- \ifboolKV[kvensemble]{mathpunct}%
- {\left\lbrace \PLensopt{} \mathpunct{} \StrSubstitute{#2}{/}{\mathpunct{}{\PLenssep}\mathpunct{}} \mathpunct{} \right\rbrace}%
- {\left\lbrace \PLensopt{} \StrSubstitute{#2}{/}{{\PLenssep}} \right\rbrace}
-}
-
-%===============SimplFrac============== OK !!
-\DeclareDocumentCommand\convertfraction{ O{} m }{% argument optionnel [d ou t] puis argument mandataire {calcul ou fraction}
- \def\calculargument{\xintPRaw{\xintIrr{\xinteval{#2}}}}%on calcule et on transforme en A/B
- \IfSubStr{\calculargument}{/}%on teste si le symbole / apparaît
- {%si oui := fraction
- \StrBefore{\calculargument}{/}[\numerateur]%on extrait le numérateur
- \StrBehind{\calculargument}{/}[\denominateur]%on extrait le dénominateur
- \ifblank{#1}{\ensuremath{\frac{\numerateur}{\denominateur}}}{}%si l'argument optionnel est vide
- \IfStrEq{#1}{d}{\ensuremath{\dfrac{\numerateur}{\denominateur}}}{}%si l'arg opt est d
- \IfStrEq{#1}{t}{\ensuremath{\tfrac{\numerateur}{\denominateur}}}{}%si l'arg opt est t
- }{%si non := entier
- \num{\calculargument}%on affiche l'entier, avec le package siunitx
- }
-}
-
-%================CabWeb================ OK !!
-\defKV[webrecurr]{%
- fct=\def\PLRecurfct{#1},%
- nom=\def\PLRecurnom{#1},%
- no=\def\PLRecurno{#1},%
- nb=\def\PLRecurnb{#1},%
- uno=\def\PLRecuruno{#1},%
- poslabel=\def\PLRecurposlab{#1},%
- decallabel=\def\PLRecuroffset{#1},%
- taillelabel=\def\PLRecurlabelsize{#1},%
-}
-
-\setKVdefault[webrecurr]{
- no=0,%
- nom=u,%
- nb=5,%
- afftermes=true,%
- poslabel=below,%
- decallabel=6pt,%
- taillelabel=\small
-}
-
-%\newcommand\recurr[1][]{%
- \NewDocumentCommand\recurrPL{ O{} O{thick,color=magenta} O{dotted} }{
- %<clés> + <style cabweb> + <style supplémentaire pointillés>
- \useKVdefault[webrecurr]%
- \setKV[webrecurr]{#1}% on paramètres les nouvelles clés et on les simplifie
- \foreach \i [remember=\i as \x (initially \PLRecuruno)] in {1,...,\PLRecurnb}{%
- \def\y{\fpeval{\PLRecurfct}}
- %test de la position courbe / bissectrice ?
- \ifnum \i=1
- \newdimen \X
- \newdimen \Y
- \X = \x pt
- \Y = \y pt
- \ifdim \Y < \X
- \draw[#2] (\x,\y)--(\y,\y) ;
- \else
- \draw[#2] (\x,\x)--(\x,\y)--(\y,\y) ;
- \fi
- \else
- \draw[#2] (\x,\x)--(\x,\y)--(\y,\y) ;
- \fi
- \ifboolKV[webrecurr]{afftermes}
- {\def\indice{\fpeval{\i+\PLRecurno-1}}
- \draw[#2,#3] (\x,\y)--(\x,0) node[\PLRecurposlab=\PLRecuroffset,font=\PLRecurlabelsize]{$\PLRecurnom_\indice$};}
- {}
- \def\i{\fpeval{\y}}%
- }
- }
-
-%================CercleTrigo=========== OK !!
-\defKV[cercletrigo]{%
- rayon=\def\PLcerclerayon{#1},%
- epaisseur=\def\PLcerclethick{#1},%
- epaisseursol=\def\PLcerclesolthick{#1},%
- marge=\def\PLcerclemarge{#1},%
- taillevaleurs=\def\PLcerclevaleurs{#1},%
- tailleangles=\def\PLcercleangles{#1},%
- couleurfond=\def\PLcerclefond{#1},%
- decal=\def\PLcercledecal{#1},%
- cos=\def\PLcerclevalcos{#1},%
- sin=\def\PLcerclevalsin{#1},%
- couleursol=\def\PLcerclecoleq{#1}
-}
-
-\setKVdefault[cercletrigo]{
- rayon=3,%
- marge=0.25,%
- decal=10pt,%
- epaisseur=thick,%
- epaisseursol=very thick,%
- affangles=true,%
- afftraits=true,%
- affvaleurs=true,%
- moinspi=true,%
- taillevaleurs=\scriptsize,%
- tailleangles=\footnotesize,%
- couleurfond=white,%
- equationcos=false,%
- equationsin=false,%
- cos=45,%
- sin=30,%
- couleursol=blue
-}
-
-\newcommand\cercletrigoPL[1][]{%
- \useKVdefault[cercletrigo]
- \setKV[cercletrigo]{#1}
- \tikzset{PLval/.style={inner sep=1pt,font=\PLcerclevaleurs,fill=\PLcerclefond}}
- \tikzset{PLagl/.style={inner sep=1pt,font=\PLcercleangles,fill=\PLcerclefond}}
- %valeurs remarquables
- \ifboolKV[cercletrigo]{affangles}
- {%valeursdudessus
- \draw ({\PLcerclerayon},0) node[above right=2pt,font=\PLcercleangles] {0} ;
- \draw ($(30:{\PLcerclerayon})+(30:\PLcercledecal)$) node[PLagl] {$\tfrac{\pi}{6}$} ;
- \draw ($(45:{\PLcerclerayon})+(45:\PLcercledecal)$) node[PLagl] {$\tfrac{\pi}{4}$} ;
- \draw ($(60:{\PLcerclerayon})+(60:\PLcercledecal)$) node[PLagl] {$\tfrac{\pi}{3}$} ;
- \draw (0,{\PLcerclerayon}) node[above right=2pt,PLagl] {$\tfrac{\pi}{2}$} ;
- \draw ({-\PLcerclerayon},0) node[above left=2pt,PLagl] {$\pi$} ;
- \draw ($(150:{\PLcerclerayon})+(150:\PLcercledecal)$) node[PLagl] {$\tfrac{5\pi}{6}$} ;
- \draw ($(135:{\PLcerclerayon})+(135:\PLcercledecal)$) node[PLagl] {$\tfrac{3\pi}{4}$} ;
- \draw ($(120:{\PLcerclerayon})+(120:\PLcercledecal)$) node[PLagl] {$\tfrac{2\pi}{3}$} ;
- \draw ($(30:{\PLcerclerayon})+(30:\PLcercledecal)$) node[PLagl] {$\tfrac{\pi}{6}$} ;
- %valeursdudessous
- \draw ($(-30:{\PLcerclerayon})+(-30:\PLcercledecal)$) node[PLagl] {$\tfrac{\ifboolKV[cercletrigo]{moinspi}{-}{11}\pi}{6}$} ;
- \draw ($(-45:{\PLcerclerayon})+(-45:\PLcercledecal)$) node[PLagl] {$\tfrac{\ifboolKV[cercletrigo]{moinspi}{-}{7}\pi}{4}$} ;
- \draw ($(-60:{\PLcerclerayon})+(-60:\PLcercledecal)$) node[PLagl] {$\tfrac{\ifboolKV[cercletrigo]{moinspi}{-}{5}\pi}{3}$} ;
- \draw (0,{-\PLcerclerayon}) node[below right=2pt,PLagl] {$\tfrac{\ifboolKV[cercletrigo]{moinspi}{-}{3}\pi}{2}$} ;
- \draw ($(-120:{\PLcerclerayon})+(-120:\PLcercledecal)$) node[PLagl] {$\tfrac{\ifboolKV[cercletrigo]{moinspi}{-2}{4}\pi}{3}$} ;
- \draw ($(-135:{\PLcerclerayon})+(-135:\PLcercledecal)$) node[PLagl] {$\tfrac{\ifboolKV[cercletrigo]{moinspi}{-3}{5}\pi}{4}$} ;
- \draw ($(-150:{\PLcerclerayon})+(-150:\PLcercledecal)$) node[PLagl] {$\tfrac{\ifboolKV[cercletrigo]{moinspi}{-5}{7}\pi}{6}$} ;
- \ifboolKV[cercletrigo]{moinspi}
- {\draw ({-\PLcerclerayon},0) node[below left=2pt,PLagl] {$-\pi$} ;}
- {\draw ({\PLcerclerayon},0) node[below right=2pt,PLagl] {$2\pi$} ;}
- }%
- {}
- %tracés
- \draw[\PLcerclethick,->] ({-\PLcerclerayon-\PLcerclemarge},0)--({\PLcerclerayon+\PLcerclemarge},0) ;
- \draw[\PLcerclethick,->] (0,{-\PLcerclerayon-\PLcerclemarge})--(0,{\PLcerclerayon+\PLcerclemarge}) ;
- \draw[\PLcerclethick] (0,0) circle[radius=\PLcerclerayon] ;
- \draw (0,0) node[below left=2pt,PLval] {0} ;
- %equations
- \ifboolKV[cercletrigo]{equationcos}
- {%traitsdeconstructioncos
- \draw[\PLcerclethick,dotted,gray] (-45:\PLcerclerayon) -- (135:\PLcerclerayon)
- (-135:\PLcerclerayon) -- (45:\PLcerclerayon)
- (30:\PLcerclerayon) -- (150:\PLcerclerayon)
- (-30:\PLcerclerayon) -- (-150:\PLcerclerayon)
- (-60:\PLcerclerayon)--(60:\PLcerclerayon)
- (-120:\PLcerclerayon)--(120:\PLcerclerayon) ;
- \draw[\PLcerclesolthick,\PLcerclecoleq] ({\PLcerclevalcos}:\PLcerclerayon)--({-\PLcerclevalcos}:\PLcerclerayon) ;
- \filldraw[\PLcerclecoleq] ({\PLcerclevalcos}:\PLcerclerayon) circle[radius=2pt] ({-\PLcerclevalcos}:\PLcerclerayon) circle[radius=2pt] ;%
- }
- {}
- \ifboolKV[cercletrigo]{equationsin}
- {%traitsdeconstructioncos
- \draw[\PLcerclethick,dotted,gray] (-45:\PLcerclerayon) -- (135:\PLcerclerayon)
- (-135:\PLcerclerayon) -- (45:\PLcerclerayon)
- (30:\PLcerclerayon) -- (150:\PLcerclerayon)
- (-30:\PLcerclerayon) -- (-150:\PLcerclerayon)
- (-60:\PLcerclerayon)--(60:\PLcerclerayon)
- (-120:\PLcerclerayon)--(120:\PLcerclerayon) ;
- \draw[\PLcerclesolthick,\PLcerclecoleq] ({\PLcerclevalsin}:\PLcerclerayon)--({180-\PLcerclevalsin}:\PLcerclerayon) ;
- \filldraw[\PLcerclecoleq] ({\PLcerclevalsin}:\PLcerclerayon) circle[radius=2pt] ({180-\PLcerclevalsin}:\PLcerclerayon) circle[radius=2pt] ;%
- }
- {}
- %valeurs
- \ifboolKV[cercletrigo]{affvaleurs}
- {%
- \draw ({0.5*\PLcerclerayon},0) node[below=2pt,PLval] {$\tfrac{1}{2}$} ;
- \draw ({-0.5*\PLcerclerayon},0) node[below=2pt,PLval] {$-\tfrac{1}{2}$} ;
- \draw (0,{0.5*\PLcerclerayon}) node[left=2pt,PLval] {$\tfrac{1}{2}$} ;
- \draw (0,{-0.5*\PLcerclerayon}) node[left=2pt,PLval] {$-\tfrac{1}{2}$} ;
- \draw ({0.866*\PLcerclerayon},0) node[below=2pt,PLval] {$\tfrac{\sqrt{3}}{2}$} ;
- \draw ({-0.866*\PLcerclerayon},0) node[below=2pt,PLval] {$-\tfrac{\sqrt{3}}{2}$} ;
- \draw (0,{0.866*\PLcerclerayon}) node[left=2pt,PLval] {$\tfrac{\sqrt{3}}{2}$} ;
- \draw (0,{-0.866*\PLcerclerayon}) node[left=2pt,PLval] {$-\tfrac{\sqrt{3}}{2}$} ;
- \draw ({0.707*\PLcerclerayon},0) node[above=2pt,PLval] {$\tfrac{\sqrt{2}}{2}$} ;
- \draw ({-0.707*\PLcerclerayon},0) node[above=2pt,PLval] {$-\tfrac{\sqrt{2}}{2}$} ;
- \draw (0,{0.707*\PLcerclerayon}) node[right=2pt,PLval] {$\tfrac{\sqrt{2}}{2}$} ;
- \draw (0,{-0.707*\PLcerclerayon}) node[right=2pt,PLval] {$-\tfrac{\sqrt{2}}{2}$} ;
- }%
- {}
- %valeurs remarquables en dernier
- \ifboolKV[cercletrigo]{afftraits}
- {%
- \draw[\PLcerclethick,dotted,gray] (-120:\PLcerclerayon) rectangle (60:\PLcerclerayon) ;
- \draw[\PLcerclethick,dotted,gray] (-150:\PLcerclerayon) rectangle (30:\PLcerclerayon) ;
- \draw[\PLcerclethick,dotted,gray] (-135:\PLcerclerayon) rectangle (45:\PLcerclerayon) ;
- \draw[\PLcerclethick,dotted,gray] (-120:\PLcerclerayon)--(60:\PLcerclerayon) ;
- \draw[\PLcerclethick,dotted,gray] (-150:\PLcerclerayon)--(30:\PLcerclerayon) ;
- \draw[\PLcerclethick,dotted,gray] (-135:\PLcerclerayon)--(45:\PLcerclerayon) ;
- \draw[\PLcerclethick,dotted,gray] (120:\PLcerclerayon)--(-60:\PLcerclerayon) ;
- \draw[\PLcerclethick,dotted,gray] (150:\PLcerclerayon)--(-30:\PLcerclerayon) ;
- \draw[\PLcerclethick,dotted,gray] (135:\PLcerclerayon)--(-45:\PLcerclerayon) ;
- }%
- {}
-}
-
-%==================AideTds============= OK !!
-\defKV[aidetds]{%
- code=\def\tdsparam{#1},%
- couleur=\def\tdscouleur{#1},%
- racines=\def\tdsracine{#1},%
- largeur=\def\tdslarg{#1},%
- hauteur=\def\tdshaut{#1}
-}
-
-\setKVdefault[aidetds]{%
- code=da+,
- couleur=red,%
- largeur=2,%
- hauteur=1,%
- cadre=true,%
- racines=2
-}
-
-\NewDocumentCommand\schematdsaff{ s m m m m }{%pour les droites (interne)
- % * = étoilée -> a négatif
- % #2 = couleur
- % #3 = largeur
- % #4 = hauteur
- % #5 = racine
- \IfBooleanTF{#1}%si étoile := droite qui descend
- {%
- \def\possgnavant{above right}\def\possgnapres{below left}\def\sgnavant{\strut+}\def\sgnapres{\strut-}%
- \draw[thick,#2] ({-0.5*#3},{0.5*#4})--({0.5*#3},{-0.5*#4});
- }
- {%
- \def\possgnavant{below right}\def\possgnapres{above left}\def\sgnavant{\strut-}\def\sgnapres{\strut+}%
- \draw[thick,#2] ({-0.5*#3},{-0.5*#4})--({0.5*#3},{0.5*#4});
- }
- \draw[#2] ({-0.5*#3},0) node[inner sep=0pt,\possgnavant=1pt,font=\scriptsize] {\textcircled{$\sgnavant$}};
- \draw[#2] ({0.5*#3},0) node[inner sep=0pt,\possgnapres=1pt,font=\scriptsize] {\textcircled{$\sgnapres$}};
- \draw[#2] (0,0) node[inner sep=0pt,above=3pt,font=\scriptsize] {$\strut#5$} ;
- \filldraw[#2] (0,0) circle[radius=2pt] ;
-}
-
-\NewDocumentCommand\schematdsparab{ m m m m m o }{%pour les paraboles (interne)
- % #1 = signe de a (1 ou -1) ?
- % #2 = couleur
- % #3 = largeur
- % #4 = hauteur
- % #5 = nb racine
- % #6 = liste racines (option)
- \xintifboolexpr{ #1 > 0 'and' #5 == 2 } %a>0 et delta>0
- {%
- \StrCut{#6}{/}{\xun}{\xdeux}
- \draw[thick,#2] ({-0.375*#3},{0.5*#4}) parabola bend (0,{-0.5*#4}) ({0.375*#3},{0.5*#4}) ;
- \draw[#2] ({-0.5*#3},0) node[above right=1pt,inner sep=0pt,font=\scriptsize] {\textcircled{$\strut+$}};
- \draw[#2] ({0.5*#3},0) node[above left=1pt,inner sep=0pt,font=\scriptsize] {\textcircled{$\strut+$}};
- \draw[#2] (0,0) node[below=1pt,inner sep=0pt,font=\scriptsize] {\textcircled{$\strut-$}};
- \filldraw[#2] ({0.2625*#3},0) circle[radius=2pt] node[below right=1pt,inner sep=0pt,font=\scriptsize] {$\strut\xdeux$};
- \filldraw[#2] ({-0.2625*#3},0) circle[radius=2pt] node[below left=1pt,inner sep=0pt,font=\scriptsize] {$\strut\xun$};%
- }
- {}
- \xintifboolexpr{ #1 < 0 'and' #5 == 2 } %a<0 et delta>0
- {%
- \StrCut{#6}{/}{\xun}{\xdeux}
- \draw[thick,#2] ({-0.375*#3},{-0.5*#4}) parabola bend (0,{0.5*#4}) ({0.375*#3},{-0.5*#4}) ;
- \draw[#2] ({-0.5*#3},0) node[below right=1pt,inner sep=0pt,font=\scriptsize] {\textcircled{$\strut-$}};
- \draw[#2] ({0.5*#3},0) node[below left=1pt,inner sep=0pt,font=\scriptsize] {\textcircled{$\strut-$}};
- \draw[#2] (0,0) node[above=1pt,inner sep=0pt,font=\scriptsize] {\textcircled{$\strut+$}};
- \filldraw[#2] ({0.2625*#3},0) circle[radius=2pt] node[above right=1pt,inner sep=0pt,font=\scriptsize] {$\strut\xdeux$};
- \filldraw[#2] ({-0.2625*#3},0) circle[radius=2pt] node[above left=1pt,inner sep=0pt,font=\scriptsize] {$\strut\xun$};%
- }
- {}
- \xintifboolexpr{ #1 > 0 'and' #5 == 1 } %a>0 et delta=0
- {%
- \draw[thick,#2] ({-0.375*#3},{0.5*#4}) parabola bend (0,0) ({0.375*#3},{0.5*#4}) ;
- \filldraw[#2] (0,0) circle[radius=2pt] node[below=3pt,inner sep=1pt,font=\scriptsize] {$#6$};
- \draw[#2] (0,0) node[above=3pt,inner sep=0pt,font=\scriptsize] {\textcircled{$\strut+$}};
- }
- {}
- \xintifboolexpr{ #1 < 0 'and' #5 == 1 } %a>0 et delta=0
- {%
- \draw[thick,#2] ({-0.375*#3},{-0.5*#4}) parabola bend (0,0) ({0.375*#3},{-0.5*#4}) ;
- \filldraw[#2] (0,0) circle[radius=2pt] node[above=3pt,inner sep=0pt,font=\scriptsize] {$#6$};
- \draw[#2] (0,0) node[below=3pt,inner sep=0pt,font=\scriptsize] {\textcircled{$\strut-$}};
- }
- {}
- \xintifboolexpr{ #1 > 0 'and' #5 == 0 } %a>0 et delta<0
- {%
- \draw[thick,#2] ({-0.375*#3},{0.5*#4}) parabola bend (0,{0.075*#4}) ({0.375*#3},{0.5*#4}) ;
- \draw[#2] (0,{0.075*#4}) node[above=2pt,inner sep=0pt,font=\scriptsize] {\textcircled{$\strut+$}};
- }
- {}
- \xintifboolexpr{ #1 < 0 'and' #5 == 0 } %a>0 et delta<0
- {%
- \draw[thick,#2] ({-0.375*#3},{-0.5*#4}) parabola bend (0,{-0.075*#4}) ({0.375*#3},{-0.5*#4}) ;
- \draw[#2] (0,{-0.075*#4}) node[below=2pt,inner sep=0pt,font=\scriptsize] {\textcircled{$\strut-$}};
- }
- {}
-}
-
-\newcommand\aidesignePL[1][]{%
- \useKVdefault[aidetds]
- \setKV[aidetds]{#1}
- %simplification des codes
- \IfEq{\tdsparam}{da+}{\def\xcode{1}}{}
- \IfEq{\tdsparam}{da-}{\def\xcode{-1}}{}
- \IfEq{\tdsparam}{pa+d+}{\def\xcode{12}}{}
- \IfEq{\tdsparam}{pa-d+}{\def\xcode{-12}}{}
- \IfEq{\tdsparam}{pa+d0}{\def\xcode{11}}{}
- \IfEq{\tdsparam}{pa-d0}{\def\xcode{-11}}{}
- \IfEq{\tdsparam}{pa+d-}{\def\xcode{10}}{}
- \IfEq{\tdsparam}{pa-d-}{\def\xcode{-10}}{}
- %cadre si booléen true
- \ifboolKV[aidetds]{cadre}
- {\draw[lightgray] ({-0.5*\tdslarg},{-0.5*\tdshaut}) rectangle ({0.55*\tdslarg},{0.5*\tdshaut}) ;}
- {}
- %restriction de la petite fenêtre
- \clip ({-0.5*\tdslarg},{-0.5*\tdshaut}) rectangle ({0.55*\tdslarg},{0.5*\tdshaut}) ;
- %axe (Ox)
- \draw[thick,->] ({-0.5*\tdslarg},0)--({0.55*\tdslarg},0);
- %1er degré a+ code = 1
- \ifnum\xcode=1
- \schematdsaff{\tdscouleur}{\tdslarg}{\tdshaut}{\tdsracine}
- \fi
- %1er degré a- code = -1
- \ifnum\xcode=-1
- \schematdsaff*{\tdscouleur}{\tdslarg}{\tdshaut}{\tdsracine}
- \fi
- %2d degré a+delta+ code = 12
- \ifnum\xcode=12
- \schematdsparab{1}{\tdscouleur}{\tdslarg}{\tdshaut}{2}[\tdsracine]
- \fi
- %2d degré a-delta+ code = -12
- \ifnum\xcode=-12
- \schematdsparab{-1}{\tdscouleur}{\tdslarg}{\tdshaut}{2}[\tdsracine]
- \fi
- %2d degré a+delta0 code = 11
- \ifnum\xcode=11
- \schematdsparab{1}{\tdscouleur}{\tdslarg}{\tdshaut}{1}[\tdsracine]
- \fi
- %2d degré a-delta0 code = -11
- \ifnum\xcode=-11
- \schematdsparab{-1}{\tdscouleur}{\tdslarg}{\tdshaut}{1}[\tdsracine]
- \fi
- %2d degré a+delta- code = 10
- \ifnum\xcode=10
- \schematdsparab{1}{\tdscouleur}{\tdslarg}{\tdshaut}{0}
- \fi
- %2d degré a-delta- code = -10
- \ifnum\xcode=-10
- \schematdsparab{-1}{\tdscouleur}{\tdslarg}{\tdshaut}{0}
- \fi
-}
-
-%pour l'interaction avec tkz-tab
-\defKV[aidetdstkz]{%
- echelle=\def\tdstkzscale{#1},%
- decal=\def\tdstkzoffset{#1}
-}
-
-\setKVdefault[aidetdstkz]{%
- echelle=1,%
- decal=1.25
-}
-
-\NewDocumentCommand\aidesignetkztabPL{ o m O{0.85} O{1.5} }{%
- %#1 = codeaidetikz
- %#2 = numligne
- %#3 = échelle
- %#4 = décalage
- %\shorthandoff{:}\shorthandoff{!} %bizzzzzzzzare
- %\NoAutoSpacing
- \coordinate (Z) at ($(T2#2)!.5!(T2\the\numexpr#2+1\relax)$) ;
- %\shorthandon{:}\shorthandon{!}
- \path (Z.east) + (#4,0) pic[right,scale=#3,every node/.style={scale=#3}] {code={\aidesignePL[#1]}} ;
-}
-
-%=============RegressionLinéaire======= OK !!
-%calcul des paramètres
-\defKV[coeffreglin]{%
- nomcoeffa=\def\RegLinCoeffa{#1},%
- nomcoeffb=\def\RegLinCoeffb{#1},%
- nomcoeffr=\def\RegLinCoeffr{#1},%
- nomcoeffrd=\def\RegLinCoeffrd{#1},%
- nomxmin=\def\RegLinCoeffXmin{#1},%
- nomxmax=\def\RegLinCoeffXmax{#1}
-}
-
-\setKVdefault[coeffreglin]{%
- nomcoeffa=COEFFa,%
- nomcoeffb=COEFFb,%
- nomcoeffr=COEFFr,%
- nomcoeffrd=COEFFrd,%
- nomxmin=LXmin,%
- nomxmax=LXmax
-}
-
-\newcommand\PLreglin[3][]{
- \useKVdefault[coeffreglin]
- \setKV[coeffreglin]{#1}% on paramètres les nouvelles clés et on les simplifie
- %xmin et xmax
- \expandafter\def\csname\RegLinCoeffXmin\endcsname{\fpeval{min(#2)}}
- \expandafter\def\csname\RegLinCoeffXmax\endcsname{\fpeval{max(#2)}}
- %listes des données
- \def\xliste{#2}
- \def\yliste{#3}
- \readlist*\LX{\xliste}
- \readlist*\LY{\yliste}
- %taille des listes
- \def\LNB{\inteval{\LXlen}}
- %somme des LX et des LY OK
- \xdef\LXSomme{0}
- \xdef\LYSomme{0}
- \foreach \i in {1,2,...,\LNB}{
- \xdef\LXSomme{\fpeval{\LXSomme+\LX[\i]}}
- }
- \foreach \i in {1,2,...,\LNB}{
- \xdef\LYSomme{\fpeval{\LYSomme+\LY[\i]}}
- }
- %moyenne des LX et des LY OK
- \xdef\LXmoy{\fpeval{\LXSomme/\LNB}}
- \xdef\LYmoy{\fpeval{\LYSomme/\LNB}}
- %variance des LX et des LY OK
- \xdef\LXvar{0}
- \foreach \i in {1,2,...,\LNB}{
- \xdef\LXvar{\fpeval{\LXvar+(\LX[\i]-\LXmoy)*(\LX[\i]-\LXmoy)}}
- }
- \xdef\LXvar{\fpeval{\LXvar/\LNB}}
- \xdef\LYvar{0}
- \foreach \i in {1,2,...,\LNB}{
- \xdef\LYvar{\fpeval{\LYvar+(\LY[\i]-\LYmoy)*(\LY[\i]-\LYmoy)}}
- }
- \xdef\LYvar{\fpeval{\LYvar/\LNB}}
- %covariance des XY OK
- \xdef\LXYvar{0}
- \foreach \i in {1,2,...,\LNB}{
- \xdef\LXYvar{\fpeval{\LXYvar+(\LX[\i]-\LXmoy)*(\LY[\i]-\LYmoy)}}
- }
- \xdef\LXYvar{\fpeval{\LXYvar/\LNB}}
- %COEFFS OK
- \expandafter\def\csname\RegLinCoeffa\endcsname{\fpeval{\LXYvar/\LXvar}}
- \expandafter\def\csname\RegLinCoeffb\endcsname{\fpeval{\LYmoy-\csname\RegLinCoeffa\endcsname*\LXmoy}}
- \expandafter\def\csname\RegLinCoeffr\endcsname{\fpeval{\LXYvar/sqrt(\LXvar*\LYvar)}}
- \expandafter\def\csname\RegLinCoeffrd\endcsname{\fpeval{\csname\RegLinCoeffr\endcsname*\csname\RegLinCoeffr\endcsname}}
-}
-
-%pour un nuage en TiKz
-\defKV[nuagereglin]{%
- couleur=\def\RegLinNuageCouleur{#1},%
- taille=\def\RegLinNuageTaille{#1},
- Ox=\def\RegLinNuageOx{#1},%
- Oy=\def\RegLinNuageOy{#1},%
-}
-
-\setKVdefault[nuagereglin]{%
- couleur=teal,%
- taille=2pt,%
- Ox=0,%
- Oy=0
-}
-
-\newcommand\PLreglinpts[3][]{%
- \useKVdefault[nuagereglin]
- \setKV[nuagereglin]{#1}% on paramètres les nouvelles clés et on les simplifie
- \def\xliste{#2}
- \def\yliste{#3}
- \readlist*\LX{\xliste}
- \readlist*\LY{\yliste}
- %taille des listes
- \def\LNB{\inteval{\LXlen}}
- \foreach \i in {1,2,...,\LNB} {\filldraw[\RegLinNuageCouleur] ({\LX[\i]-\RegLinNuageOx},{\LY[\i]-\RegLinNuageOy}) circle[radius=\RegLinNuageTaille] ;}
-}
-
-%=============ConversionsBases========= OK !!
-%dec->bin avec blocs de 4 chiffres
-\setKVdefault[CONVDECBIN]{%
- affbase=true
-}
-\NewDocumentCommand\PLconvdecbin{ s O{} m }{%
- \useKVdefault[CONVDECBIN]
- \setKV[CONVDECBIN]{#2}% on paramètres les nouvelles clés et on les simplifie
- \def\resbrut{\xintDecToBin{#3}}
- \StrLen{\resbrut}[\nbchiffres]
- \def\nbgrp{\fpeval{4*ceil(\nbchiffres/4,0)}}
- \IfBooleanTF{#1}
- {\num{#3}\ifboolKV[CONVDECBIN]{affbase}{_{10}}{}=\num[digit-group-size=4]{\resbrut}\ifboolKV[CONVDECBIN]{affbase}{_{2}}{}}
- {\num{#3}\ifboolKV[CONVDECBIN]{affbase}{_{10}}{}=\num[digit-group-size=4,minimum-integer-digits=\nbgrp]{\resbrut}\ifboolKV[CONVDECBIN]{affbase}{_{2}}{}}
-}
-
-%bin->hexa avec blocs de 4 chiffres
-%\defKV[CONVBINHEX]{%
-% trait=\def\epcrochet{#1}
-%}
-\setKVdefault[CONVBINHEX]{%
- %trait=0.5pt,%
- affbase=true,%
- details=true
-}
-%bourrage de 0 avant
-\ExplSyntaxOn
-\NewExpandableDocumentCommand{\PLstrzeros}{m}
-{
- \int_compare:nT { #1 > 0 }
- {
- 0 \prg_replicate:nn { #1 - 1 } { 0 }
- }
-}
-\ExplSyntaxOff
-
-
-%la conversion complète
-\newcommand\PLconvbinhex[2][]{%
- \useKVdefault[CONVBINHEX]
- \setKV[CONVBINHEX]{#1}% on paramètres les nouvelles clés et on les simplifie
- \def\chbrut{#2}
- \StrLen{\chbrut}[\nbchiffres] %nb de chiffres du binaire
- \xdef\nbgrp{\fpeval{4*ceil(\nbchiffres/4,0)}} %nb de chiffres avec blocs de 4
- \xdef\nbblocs{\fpeval{\nbgrp/4}} %nb de blocs
- %on rajoute des zeros si besoin := OK
- \xdef\resinter{\chbrut}
- \num[digit-group-size=4]{\chbrut}\ifboolKV[CONVBINHEX]{affbase}{_{2}}{}=
- \ifboolKV[CONVBINHEX]{details}{%
- \ifnum\nbchiffres<\nbgrp
- \xdef\nbz{\inteval{\nbgrp-\nbchiffres}}
- \xdef\resinter{\PLstrzeros{\nbz}\chbrut}
- \num[digit-group-size=4,minimum-integer-digits=\nbgrp]{\resinter}=
- \fi
- %découpage par blocs et conversion en hexa := OK
- \newcount\cpt
- \cpt0
- \loop\ifnum \cpt<\nbblocs
- \def\iinit{\fpeval{4*\cpt+1}}%
- \def\ifinal{\fpeval{4*(\cpt+1)}}%
- \StrMid{\resinter}{\iinit}{\ifinal}[\blocinter]%
- {\underbracket{\blocinter}_{\xintBinToHex{\blocinter}}\,}
- \advance\cpt by 1
- \repeat
- \!=
- }%
- {}
- \xintBinToHex{\chbrut}\ifboolKV[CONVBINHEX]{affbase}{_{16}}{}
-}
-
-%bin/hexa/bin->dec avec écriture polynomiale
-\defKV[CONVTODEC]{%
- basedep=\def\basedepart{#1}
-}
-\setKVdefault[CONVTODEC]{%
- basedep=2,%
- affbase=true,%
- details=true,%
- zeros=true
-}
-
-\ExplSyntaxOn
-\newcommand\convertbasetobasedix[2]{%
- \int_from_base:nn {#1}{#2}
-}
-\ExplSyntaxOff
-
-\newcommand\PLconvtodec[2][]{%
- \useKVdefault[CONVTODEC]
- \setKV[CONVTODEC]{#1}% on paramètres les nouvelles clés et on les simplifie
- \def\nbdepart{#2}
- \StrLen{\nbdepart}[\nbchiffres]
- \StrChar{\nbdepart}{1}[\chiffre]
- %si on est en base 16
- \xintifboolexpr{\basedepart == 16}%
- {%
- \nbdepart\ifboolKV[CONVTODEC]{affbase}{_{\basedepart}}{} =
- \ifboolKV[CONVTODEC]{details}{%
- \xintHexToDec{\chiffre}\times\basedepart^{\inteval{\nbchiffres-1}}%
- \newcount\cpt
- \cpt2
- \loop\ifnum \cpt<\inteval{\nbchiffres+1}
- \def\puiss{\inteval{\nbchiffres-\cpt}}
- \StrChar{\nbdepart}{\cpt}[\chiffre]
- \ifboolKV[CONVTODEC]{zeros}%
- {%
- +\xintHexToDec{\chiffre}\times\basedepart^{\puiss}%
- }
- {
- \ifnum\xintHexToDec{\chiffre} > 0
- +\xintHexToDec{\chiffre}\times\basedepart^{\puiss}%
- \fi
- }
- \advance\cpt by 1
- \repeat
- =
- }
- {}
- \num{\xintHexToDec{\nbdepart}}\ifboolKV[CONVTODEC]{affbase}{_{10}}{}
- }%
- {}
- \xintifboolexpr{\basedepart == 2}%
- {%
- \num[digit-group-size=4]{\nbdepart}\ifboolKV[CONVTODEC]{affbase}{_{\basedepart}}{} =
- \ifboolKV[CONVTODEC]{details}{%
- \chiffre\times\basedepart^{\inteval{\nbchiffres-1}}%
- \newcount\cpt
- \cpt2
- \loop\ifnum \cpt<\inteval{\nbchiffres+1}
- \def\puiss{\inteval{\nbchiffres-\cpt}}
- \StrChar{\nbdepart}{\cpt}[\chiffre]
- \ifboolKV[CONVTODEC]{zeros}%
- {%
- +\chiffre\times\basedepart^{\puiss}%
- }
- {
- \ifnum\chiffre > 0
- +\chiffre\times\basedepart^{\puiss}%
- \fi
- }
- \advance\cpt by 1
- \repeat
- =
- }
- {}
- \num{\xintBinToDec{\nbdepart}}\ifboolKV[CONVTODEC]{affbase}{_{10}}{}
- }%
- {}
-}
-
-\newcommand\PLconvversdix[3][]{%1=options,%2=nb,%3=basedep
- \useKVdefault[CONVTODEC]
- \setKV[CONVTODEC]{#1}% on paramètres les nouvelles clés et on les simplifie
- \def\NBdepart{#2}
- \def\basedepart{#3}
- \StrLen{\NBdepart}[\nbchiffres]
- \StrChar{\NBdepart}{1}[\chiffre]
- \NBdepart\ifboolKV[CONVTODEC]{affbase}{_{\basedepart}}{} =
- \ifboolKV[CONVTODEC]{details}{%
- \xintHexToDec{\chiffre}\times\basedepart^{\inteval{\nbchiffres-1}}%
- \newcount\cpt
- \cpt2
- \loop\ifnum \cpt<\inteval{\nbchiffres+1}
- \def\puiss{\inteval{\nbchiffres-\cpt}}
- \StrChar{\NBdepart}{\cpt}[\chiffre]
- \ifboolKV[CONVTODEC]{zeros}%
- {%
- +\xintHexToDec{\chiffre}\times\basedepart^{\puiss}%
- }
- {
- \ifnum\xintHexToDec{\chiffre} > 0
- +\xintHexToDec{\chiffre}\times\basedepart^{\puiss}%
- \fi
- }
- \advance\cpt by 1
- \repeat
- =
- }
- {}
- \num{\convertbasetobasedix{#2}{#3}}\ifboolKV[CONVTODEC]{affbase}{_{10}}{}
-}
-
-%==============MainLevée TikZ========== OK !!
-\tikzset{%
- mainlevee/.style args={#1et#2}{decorate,decoration={random steps, segment length=#1,amplitude=#2}},
- mainlevee/.default={5mm et 0.6pt}
-}
-
-%==============PixelArt TikZ=========== OK !!
-\defKV[pixelarttkz]{%
- codes=\def\PATlettres{#1},%
- couleurs=\def\PATcouleurs{#1},%
- symboles=\def\PATchiffres{#1},%
- style=\def\PATtaille{#1}
-}
-
-\setKVdefault[pixelarttkz]{%
- style=\scriptsize,%
- correction=false,%
- symb=false,%
- bordcases=true
-}
-
-\newcommand\PLpixelart[2][]{%
- \useKVdefault[pixelarttkz]
- \setKV[pixelarttkz]{#1}
- %affichage du corrigé
- \ifboolKV[pixelarttkz]{correction}
- {%
- \csvloop{file=#2,no head,command={%
- \foreach \l [count=\n] in \csvline {%
- \StrDel{\l}{ }[\l]
- \setsepchar{,}
- \readlist\LCPA\PATcouleurs
- \StrPosition{\PATlettres}{\l}[\pixcnt]%
- \xintifboolexpr{\pixcnt>0}%
- {%
- \itemtomacro\LCPA[\pixcnt]\pixcol%
- \ifboolKV[pixelarttkz]{bordcases}%
- {\draw[fill=\pixcol] ({\n-0.5},{-\thecsvrow+0.5}) rectangle ({\n+0.5},{-\thecsvrow-0.5}) ;}%
- {\filldraw[\pixcol] ({\n-0.5},{-\thecsvrow+0.5}) rectangle ({\n+0.5},{-\thecsvrow-0.5}) ;}%
- %
- }%
- {}
- }
- }
- }
- }
- {%
- \ifboolKV[pixelarttkz]{symb}
- {%affichage du pixelart versions chiffres si besoin
- \csvloop{file=#2,no head,command={%
- \foreach \l [count=\n] in \csvline {%
- \StrDel{\l}{ }[\l]
- \setsepchar{,}
- \readlist\LCNA\PATchiffres
- \StrPosition{\PATlettres}{\l}[\pixpos]%
- \xintifboolexpr{\pixpos>0}%
- {%
- \itemtomacro\LCNA[\pixpos]\pixchf%
- \draw ({\n-0.5},{-\thecsvrow+0.5}) rectangle ({\n+0.5},{-\thecsvrow-0.5}) node[inner sep=0,midway,font=\PATtaille] {\pixchf} ;%
- }
- {}%
- }
- }
- }
- }
- {%affichage du pixelart versions lettres ou chiffres simples (<=9)
- \csvloop{file=#2,no head,command={%
- \foreach \l [count=\n] in \csvline {%
- \StrDel{\l}{ }[\l]
- \IfSubStr{\PATlettres}{\l}%
- {%
- \draw ({\n-0.5},{-\thecsvrow+0.5}) rectangle ({\n+0.5},{-\thecsvrow-0.5}) node[inner sep=0,midway,font=\PATtaille] {\l};}
- {}
- }
- }
- }
- }
- }
-}
-
-%=========STATS2VAR=========
-%variables directement dans tikzpicture
-\tikzset{%
- Ox/.store in=\axexOx,Ox/.default=0,Ox=0,%essai
- Oy/.store in=\axeyOy,Oy/.default=0,Oy=0,%essai
- xmin/.store in=\xmin,xmin/.default=-5,xmin=-5,
- xmax/.store in=\xmax,xmax/.default=5,xmax=5,
- ymin/.store in=\ymin,ymin/.default=-5,ymin=-5,
- ymax/.store in=\ymax,ymax/.default=5,ymax=5,
- xgrille/.store in=\xgrille,xgrille/.default=1,xgrille=1,
- xgrilles/.store in=\xgrilles,xgrilles/.default=0.5,xgrilles=0.5,
- ygrille/.store in=\ygrille,ygrille/.default=1,ygrille=1,
- ygrilles/.store in=\ygrilles,ygrilles/.default=0.5,ygrilles=0.5,
- xunit/.store in=\xunit,xunit/.default=1,xunit=1,
- yunit/.store in=\yunit,yunit/.default=1,yunit=1
-}
-
-%style point croix
-\tikzset{pics/PLdotcross/.style args={#1/#2}{
- code={
- \draw[line width={0.5*#1},rotate=#2] (-#1,0) -- (#1,0);
- \draw[line width={0.5*#1},rotate=#2] (0,-#1) -- (0, #1);
- }
- },
- pics/PLdotcross/.default={4pt/0}
-}
-
-%axeOx
-\defKV[PLaxextkz]{%
- epaisseur=\def\axexwidth{#1},%
- police=\def\axexfont{#1},%
- hautgrad=\def\axextickwidth{#1},%
- posgrad=\def\axexposlabel{#1}
-}
-
-\setKVdefault[PLaxextkz]{%
- epaisseur=1.25pt,%
- police=\normalsize\normalfont,%
- posgrad=below,%
- hautgrad=4pt,%
- affgrad=true,%
- afforigine=true,%
- annee=false
-}
-
-\DeclareDocumentCommand\PLaxextikz{ O{} m }{%
- \useKVdefault[PLaxextkz]
- \setKV[PLaxextkz]{#1}% on paramètres les nouvelles clés et on les simplifie
- %formatage des années
- \IfSubStr{\axextickwidth}{/}
- {\StrCut{\axextickwidth}{/}{\axextickwidthA}{\axextickwidthB}}
- {\def\axextickwidthA{\axextickwidth}\def\axextickwidthB{\axextickwidth}}
- \foreach \x in {#2}{%
- \draw[line width=\axexwidth] ({\x-\axexOx},{\axextickwidthA}) -- ({\x-\axexOx},{-\axextickwidthB})%
- \ifboolKV[PLaxextkz]{affgrad}%on affiche les graduations
- {%
- \ifboolKV[PLaxextkz]{afforigine}%si on demande d'afficher l'origine
- {node[\axexposlabel,font=\axexfont]
- {\ifboolKV[PLaxextkz]{annee}%
- {\num[group-digits=none]{\x}}%
- {\num[text-family-to-math=true,text-series-to-math=true]{\x}}%
- }
- }
- {\xintifboolexpr{\x==\axexOx}{}{node[\axexposlabel,font=\axexfont] {\ifboolKV[PLaxextkz]{annee}%
- {\num[group-digits=none]{\x}}%
- {\num[text-family-to-math=true,text-series-to-math=true]{\x}}%
- }
- }
- }
- }
- {}
- ;}
-}
-
-%axeOy
-\defKV[PLaxeytkz]{%
- epaisseur=\def\axeywidth{#1},%
- police=\def\axeyfont{#1},%
- hautgrad=\def\axeytickwidth{#1},%
- posgrad=\def\axeyposlabel{#1}
-}
-
-\setKVdefault[PLaxeytkz]{%
- epaisseur=1.25pt,%
- police=\normalsize\normalfont,%
- posgrad=left,%
- hautgrad=4pt,%
- affgrad=true,%
- afforigine=true,%
- annee=false
-}
-
-\DeclareDocumentCommand\PLaxeytikz{ O{} m }{%
- \useKVdefault[PLaxeytkz]
- \setKV[PLaxeytkz]{#1}% on paramètres les nouvelles clés et on les simplifie
- \IfSubStr{\axeytickwidth}{/}
- {\StrCut{\axeytickwidth}{/}{\axeytickwidthA}{\axeytickwidthB}}
- {\def\axeytickwidthA{\axeytickwidth}\def\axeytickwidthB{\axeytickwidth}}
- \foreach \y in {#2}{%
- \draw[line width=\axeywidth] ({\axeytickwidthA},{\y-\axeyOy}) -- ({-\axeytickwidthB},{\y-\axeyOy})%
- \ifboolKV[PLaxeytkz]{affgrad}%on affiche les graduations
- {%
- \ifboolKV[PLaxeytkz]{afforigine}%si on demande d'afficher l'origine
- {node[\axeyposlabel,font=\axeyfont]
- {\ifboolKV[PLaxeytkz]{annee}%
- {\num[group-digits=none]{\y}}%
- {\num[text-family-to-math=true,text-series-to-math=true]{\y}}%
- }
- }
- {\xintifboolexpr{\y==\axeyOy}{}{node[\axeyposlabel,font=\axeyfont] {\ifboolKV[PLaxeytkz]{annee}%
- {\num[group-digits=none]{\y}}%
- {\num[text-family-to-math=true,text-series-to-math=true]{\y}}%
- }
- }
- }
- }
- {}
- ;}
-}
-
-%axes
-\defKV[PLaxestkz]{%
- epaisseur=\def\axeswidth{#1},%
- police=\def\axesfont{#1},%
- labelx=\def\axeslabelx{#1},%
- labely=\def\axeslabely{#1},%
- poslabelx=\def\axesposlabelx{#1},%
- poslabely=\def\axesposlabely{#1},%
- echellefleche=\def\axesechellefleche{#1},%
- typefleche=\def\axestypefleche{#1},%
- afflabel=\def\axesafflabel{#1}
-}
-
-\setKVdefault[PLaxestkz]{%
- epaisseur=1.25pt,%
- police=\normalsize\normalfont,%
- labelx=$x$,%
- labely=$y$,%
- afflabel=z,%
- poslabelx=right,%
- poslabely=above,%
- echellefleche=1,%
- typefleche=>
-}
-
-\DeclareDocumentCommand\PLaxestikz{ O{} }{%
- \useKVdefault[PLaxestkz]
- \setKV[PLaxestkz]{#1}%
- %on affiche les deux axes
- \draw[line width=\axeswidth,-{\axestypefleche[scale=\axesechellefleche]}] ({\xmin-\axexOx},0) -- ({\xmax-\axexOx},0) ;
- \draw[line width=\axeswidth,-{\axestypefleche[scale=\axesechellefleche]}] (0,{\ymin-\axeyOy}) -- (0,{\ymax-\axeyOy}) ;
- %les labels éventuels
- \IfSubStr{\axesafflabel}{x}%
- {\draw ({\xmax-\axexOx},0) node[\axesposlabelx,font=\axesfont] {\axeslabelx} ;}
- {}
- \IfSubStr{\axesafflabel}{y}%
- {\draw (0,{\ymax-\axeyOy}) node[\axesposlabely,font=\axesfont] {\axeslabely} ;}
- {}
-}
-
-%fenêtre clippée
-\newcommand\PLfenetre{%
- \clip ({\xmin-\axexOx},{\ymin-\axeyOy}) rectangle ({\xmax-\axexOx},{\ymax-\axeyOy}) ;
-}
-
-%origine
-\defKV[PLaxesorig]{%
- police=\def\axesorfont{#1},%
- pos=\def\axesorpos{#1},%
- decal=\def\axesordecal{#1},%
- valeur=\def\axesorval{#1}
-}
-
-\setKVdefault[PLaxesorig]{%
- police=\normalsize\normalfont,%
- pos={below left},%
- decal=2pt,%
- valeur=0
-}
-
-\DeclareDocumentCommand\PLorigine{ O{} }{%
- \useKVdefault[PLaxesorig]
- \setKV[PLaxesorig]{#1}%
- \draw (0,0) node[\axesorpos=\axesordecal,font=\axesorfont] {\axesorval} ;
-}
-
-%grilles
-\setKVdefault[PLgrillestkz]{%
- affp=true,%
- affs=true
-}
-
-\DeclareDocumentCommand\PLgrilletikz{ O{} O{thin,lightgray} O{ultra thin,lightgray} }{%
- \useKVdefault[PLgrillestkz]
- \setKV[PLgrillestkz]{#1}%
- \ifboolKV[PLgrillestkz]{affs}
- {\draw[xstep=\xgrilles,ystep=\ygrilles,#3] ({\xmin-\axexOx},{\ymin-\axeyOy}) grid ({\xmax-\axexOx},{\ymax-\axeyOy});}
- {}
- \ifboolKV[PLgrillestkz]{affp}
- {\draw[xstep=\xgrille,ystep=\ygrille,#2] ({\xmin-\axexOx},{\ymin-\axeyOy}) grid ({\xmax-\axexOx},{\ymax-\axeyOy});}
- {}
-}
-
-%point(s) avec changement origines
-\defKV[PLpts]{%
- taille=\def\ptstaille{#1},%
- couleur=\def\ptscouleur{#1},%
- style=\def\ptsstyle{#1}
-}
-
-\setKVdefault[PLpts]{%
- taille=2pt,%
- couleur=blue,%
- style=o
-}
-
-\newcommand\PLnuagepoints[2][]{%
- \useKVdefault[PLpts]
- \setKV[PLpts]{#1}%
- \setsepchar{§}%
- \readlist\listepointsaffiches{#2}
- \foreachitem\point\in\listepointsaffiches{%
- \StrBetween{\point}{(}{,}[\XPT]
- \StrBetween{\point}{,}{)}[\YPT]
- \IfStrEq{\ptsstyle}{o}%
- {\filldraw[\ptscouleur] ({\XPT-\axexOx},{\YPT-\axeyOy}) circle[radius=\ptstaille] ;}
- {}
- \IfStrEq{\ptsstyle}{x}%
- {\draw[\ptscouleur] ({\XPT-\axexOx},{\YPT-\axeyOy}) pic {PLdotcross=\ptstaille/45} ;}
- {}
- \IfStrEq{\ptsstyle}{+}%
- {\draw[\ptscouleur] ({\XPT-\axexOx},{\YPT-\axeyOy}) pic {PLdotcross=\ptstaille/0} ;}
- {}
- }
-}
-
-\newcommand\PLnuagepts[3][]{%
- \useKVdefault[PLpts]
- \setKV[PLpts]{#1}% on paramètres les nouvelles clés et on les simplifie
- \def\xliste{#2}
- \def\yliste{#3}
- \readlist*\LX{\xliste}
- \readlist*\LY{\yliste}
- %taille des listes
- \def\LNB{\inteval{\LXlen}}
- \foreach \i in {1,2,...,\LNB} {
- \IfStrEq{\ptsstyle}{o}%
- {
- \IfSubStr{\ptscouleur}{/}
- {\StrCut{\ptscouleur}{/}{\ptscouleurA}{\ptscouleurB}\draw[thick,\ptscouleurA,fill=\ptscouleurB] ({\LX[\i]-\axexOx},{\LY[\i]-\axeyOy}) circle[radius=\ptstaille] ;}
- {\draw[\ptscouleur,fill=\ptscouleur] ({\LX[\i]-\axexOx},{\LY[\i]-\axeyOy}) circle[radius=\ptstaille] ;}
- }
- {}
- \IfStrEq{\ptsstyle}{x}%
- {\draw[\ptscouleur] ({\LX[\i]-\axexOx},{\LY[\i]-\axeyOy}) pic {PLdotcross=\ptstaille/45} ;}
- {}
- \IfStrEq{\ptsstyle}{+}%
- {\draw[\ptscouleur] ({\LX[\i]-\axexOx},{\LY[\i]-\axeyOy}) pic {PLdotcross=\ptstaille/0} ;}
- {}
- }
-}
-
-\defKV[PLptmoy]{%
- police=\def\ptmoyfont{#1},%
- taille=\def\ptmoytaille{#1},%
- couleur=\def\ptmoycouleur{#1},%
- style=\def\ptmoystyle{#1},%
- xg=\def\ptmoyx{#1},%
- yg=\def\ptmoyy{#1},%
- nom=\def\ptmoynom{#1},%
- pos=\def\ptmoypos{#1},%
- decal=\def\ptmoydecal{#1},%
-}
-
-\setKVdefault[PLptmoy]{%
- police=\normalsize\normalfont,%
- taille=4pt,%
- couleur=red,%
- style=x,%
- xg=\LXmoy,%
- yg=\LYmoy,%
- nom=G,%
- pos=above,%
- decal=0pt,%
- affnom=true
-}
-
-\newcommand\PLnuageptmoy[1][]{%
- \useKVdefault[PLptmoy]
- \setKV[PLptmoy]{#1}% on paramètres les nouvelles clés et on les simplifie
- \IfStrEq{\ptmoystyle}{o}%
- {
- \IfSubStr{\ptmoycouleur}{/}
- {\StrCut{\ptmoycouleur}{/}{\ptmoycouleurA}{\ptmoycouleurB}\draw[thick,\ptmoycouleurA,fill=\ptmoycouleurB] ({\ptmoyx-\axexOx},{\ptmoyy-\axeyOy}) circle[radius=\ptmoytaille] ;}
- {\draw[\ptmoycouleur,fill=\ptmoycouleur] ({\ptmoyx-\axexOx},{\ptmoyy-\axeyOy}) circle[radius=\ptmoytaille] ;}
- }
- {}
- \IfStrEq{\ptmoystyle}{x}%
- {\draw[\ptmoycouleur] ({\ptmoyx-\axexOx},{\ptmoyy-\axeyOy}) pic {PLdotcross=\ptmoytaille/45} ;}
- {}
- \IfStrEq{\ptmoystyle}{+}%
- {\draw[\ptmoycouleur] ({\ptmoyx-\axexOx},{\ptmoyy-\axeyOy}) pic {PLdotcross=\ptmoytaille/0} ;}
- {}
- \ifboolKV[PLptmoy]{affnom}
- {\draw ({\ptmoyx-\axexOx},{\ptmoyy-\axeyOy}) node[\ptmoypos={\ptmoytaille+\ptmoydecal},font=\ptmoyfont] {\ptmoynom} ;}
- {}
-
-}
-
-%courbe ?
-\newcommand\PLcourbe[3][]{%
- \setsepchar{:}%
- \readlist\PLdomaine{#3}
- \itemtomacro\PLdomaine[1]\PLDm
- \itemtomacro\PLdomaine[2]\PLDM
- \saveexpandmode\noexpandarg
- \StrSubstitute{#2}{\x}{(\x+\axexOx)}[\fctdecx]
- \restoreexpandmode % restore the previous mode
- \draw[#1] plot[domain={\PLDm-\axexOx}:{\PLDM-\axexOx}] (\x,{\fctdecx-\axeyOy}) ;
-}
-
-\setKVdefault[PLsimplewindow]{%
- axes=true,%
- grille=true,%
-}
-
-\DeclareDocumentCommand\PLfenetresimple{ O{} D<>{} m D<>{} m }{%
- \useKVdefault[PLsimplewindow]
- \setKV[PLsimplewindow]{#1}% on paramètres les nouvelles clés et on les simplifie
- \ifboolKV[PLsimplewindow]{grille}
- {\PLgrilletikz}
- {}
- \ifboolKV[PLsimplewindow]{axes}
- {\PLaxestikz\PLaxextikz[#2]{#3}\PLaxeytikz[#4]{#5}}
- {}
-}
-
-\NewDocumentEnvironment{PLstats}{ O{} }
-{%
- \begin{tikzpicture}[#1]
- }%
- {%
- \end{tikzpicture}%
-}
-
-%=============BOITES MOUSTACHES======== OK !!
-\defKV[boiteamoustaches]{%
- parametres=\def\BaMListe{#1},%
- couleur=\def\BaMCouleur{#1},%
- elevation=\def\BaMElevation{#1},%
- hauteur=\def\BaMHauteur{#1},%
- moyenne=\def\BaMMoyenne{#1},%
- epaisseur=\def\BaMEpaisseur{#1},%
- remplir=\def\BaMRemplissage{#1}
-}
-
-\setKVdefault[boiteamoustaches]{%
- couleur=black,%
- elevation=1,%
- hauteur=1,%
- affmoyenne=false,%
- epaisseur=thick,%
- pointilles=false,%
- valeurs=false,%
- remplir=white
-}
-
-\defKV[boiteamoustachesaxe]{%
- min=\def\BaMAxeMin{#1},%
- max=\def\BaMAxeMax{#1},%
- elargir=\def\BaMAxeElarg{#1},%
- epaisseur=\def\BaMAxeEpaisseur{#1},%
- valeurs=\def\BaMAxeValeurs{#1}
-}
-
-\setKVdefault[boiteamoustachesaxe]{%
- elargir=0.05,%
- epaisseur=thick,%
- affvaleurs=false
-}
-
-\newcommand\PLboitemoustaxe[1][]{
- \useKVdefault[boiteamoustachesaxe]
- \setKV[boiteamoustachesaxe]{#1}
- \def\BaMaxelargeur{\fpeval{\BaMAxeMax-\BaMAxeMin}}
- \def\BaMaxexmin{\fpeval{\BaMAxeMin-\BaMAxeElarg*\BaMaxelargeur}}
- \def\BaMaxexmax{\fpeval{\BaMAxeMax+\BaMAxeElarg*\BaMaxelargeur}}
- \draw[\BaMAxeEpaisseur,->] (\BaMaxexmin,0) -- (\BaMaxexmax,0) ;
- \ifboolKV[boiteamoustachesaxe]{affvaleurs}
- {\foreach \x in \BaMAxeValeurs \draw[\BaMAxeEpaisseur] (\x,3pt)--(\x,-3pt) node[below=3pt] {\num{\x}} ;}
- {}
-}
-
-\newcommand\PLboitemoust[1][]{
- \useKVdefault[boiteamoustaches]
- \setKV[boiteamoustaches]{#1}
- \setsepchar[.]{/}%
- \readlist*\BaMListeparams\BaMListe%
- \itemtomacro\BaMListeparams[1]\BaMmin%
- \itemtomacro\BaMListeparams[2]\BaMqu%
- \itemtomacro\BaMListeparams[3]\BaMmed%
- \itemtomacro\BaMListeparams[4]\BaMqt%
- \itemtomacro\BaMListeparams[5]\BaMmax%
- \draw[draw,\BaMEpaisseur,\BaMCouleur,fill=\BaMRemplissage] ({\BaMqu},{\BaMElevation-0.5*\BaMHauteur}) rectangle ({\BaMqt},{\BaMElevation+0.5*\BaMHauteur}) ;
- \draw[\BaMEpaisseur,\BaMCouleur] (\BaMmin,{\BaMElevation-0.5*\BaMHauteur})--(\BaMmin,{\BaMElevation+0.5*\BaMHauteur}) (\BaMmax,{\BaMElevation-0.5*\BaMHauteur})--(\BaMmax,{\BaMElevation+0.5*\BaMHauteur}) (\BaMmed,{\BaMElevation-0.5*\BaMHauteur})--(\BaMmed,{\BaMElevation+0.5*\BaMHauteur});
- \draw[\BaMEpaisseur,\BaMCouleur] ({\BaMmin},{\BaMElevation})--({\BaMqu},{\BaMElevation}) ({\BaMqt},{\BaMElevation})--({\BaMmax},{\BaMElevation}) ;
- \ifboolKV[boiteamoustaches]{affmoyenne}
- {\filldraw[\BaMCouleur] ({\BaMMoyenne},{\BaMElevation}) circle[radius=2.5pt] ;}
- {}
- \ifboolKV[boiteamoustaches]{pointilles}
- {
- \draw[\BaMEpaisseur,densely dashed] (\BaMmin,{\BaMElevation-0.5*\BaMHauteur}) -- (\BaMmin,0) ;
- \draw[\BaMEpaisseur,densely dashed] (\BaMqu,{\BaMElevation-0.5*\BaMHauteur}) -- (\BaMqu,0) ;
- \draw[\BaMEpaisseur,densely dashed] (\BaMmed,{\BaMElevation-0.5*\BaMHauteur}) -- (\BaMmed,0) ;
- \draw[\BaMEpaisseur,densely dashed] (\BaMqt,{\BaMElevation-0.5*\BaMHauteur}) -- (\BaMqt,0) ;
- \draw[\BaMEpaisseur,densely dashed] (\BaMmax,{\BaMElevation-0.5*\BaMHauteur}) -- (\BaMmax,0) ;
- }
- {}
- \ifboolKV[boiteamoustaches]{valeurs}
- {
- \filldraw (\BaMmin,0) circle[radius=2pt] node[below=4pt] {\num{\BaMmin}} ;
- \filldraw (\BaMqu,0) circle[radius=2pt] node[below=4pt] {\num{\BaMqu}} ;
- \filldraw (\BaMmed,0) circle[radius=2pt] node[below=4pt] {\num{\BaMmed}} ;
- \filldraw (\BaMqt,0) circle[radius=2pt] node[below=4pt] {\num{\BaMqt}} ;
- \filldraw (\BaMmax,0) circle[radius=2pt] node[below=4pt] {\num{\BaMmax}} ;
- }
- {}
-}
-
-%================SUDOMATHS============= OK !!
-\defKV[PLTIKZSUDOM]{%
- couleurtexte=\def\PLSMcoultexte{#1},%
- epaisseur=\def\PLSMepf{#1},%
- epaisseurg=\def\PLSMepg{#1},%
- unite=\def\PLSMunite{#1},%
- couleurcase=\def\PLSMcoulcase{#1},%
- nbcol=\def\PLSMnbcol{#1},%
- nbsubcol=\def\PLSMnbsubcol{#1},%
- nblig=\def\PLSMnblig{#1},%
- nbsublig=\def\PLSMnbsublig{#1},%
- police=\def\PLSMfonte{#1},%
- policeleg=\def\PLSMfonteleg{#1},%
- listelegv=\def\PLSMlistelegv{#1},%
- listelegh=\def\PLSMlistelegh{#1},%
- decallegende=\def\PLSMdecalleg{#1}
-}
-
-\setKVdefault[PLTIKZSUDOM]{%
- epaisseurg=1.5pt,%
- epaisseur=0.5pt,%
- unite=1cm,%
- couleurcase=LightBlue!50,%
- couleurtexte=blue,%
- nbcol=9,%
- nbsubcol=3,%
- nblig=9,%
- nbsublig=3,
- police=\normalfont\normalsize,%
- policeleg=\normalfont\sffamily,%
- legendes=true,%
- listelegv=ABCDEFGHIJKLMNOPQRSTUVWXYZ,%
- listelegh=abcdefghijklmnopqrstuvwxyz,%
- decallegende=0.45
-}
-
-\NewDocumentEnvironment{PLenvsudomaths}{ O{} m }
- {
- \useKVdefault[PLTIKZSUDOM]
- \setKV[PLTIKZSUDOM]{#1}% on paramètres les nouvelles clés et on les simplifie
- %calculs intermédiaires
- \def\larcolinter{\inteval{\PLSMnbcol/\PLSMnbsubcol}}
- \def\larliginter{\inteval{\PLSMnblig/\PLSMnbsublig}}
- %lecture liste
- \IfEq{#2}{}{}%
- {%
- \setsepchar[.]{§./}%
- \readlist*\SPGrilleSudoMaths{#2}%
- }
- %débt envtik
- \begin{tikzpicture}[x=\PLSMunite,y=\PLSMunite,line join=miter]
- %cases
- \IfEq{#2}{}{}%
- {%
- \foreach \i in {1,2,...,\PLSMnblig}{%
- \foreach \j in {1,2,...,\PLSMnbcol}{%
- \itemtomacro\SPGrilleSudoMaths[\i,\j]\SMcase
- \IfSubStr{\SMcase}{*}%si on veut colorier via *
- {%
- \StrDel{\SMcase}{*}[\SMcaseb]%
- \draw[draw=none,fill=\PLSMcoulcase] ({\j-1},{1-\i}) rectangle++ (1,-1) node[inner sep=0pt,outer sep=0pt,\PLSMcoultexte,font=\PLSMfonte,midway] {\SMcaseb} ;%
- }
- {%
- \draw ({\j-0.5},{0.5-\i}) node[inner sep=0pt,outer sep=0pt,\PLSMcoultexte,font=\PLSMfonte] {\SMcase} ;%
- }
- }
- }%
- }
- %grilles
- \draw[line width=\PLSMepg] (0,0) rectangle ({\PLSMnbcol},{-\PLSMnblig}) ;
- \draw[line width=\PLSMepf,xstep=1,ystep=1] (0,0) grid ({\PLSMnbcol},{-\PLSMnblig}) ;
- \draw[line width=\PLSMepg,xstep=\larcolinter,ystep=\larliginter] (0,0) grid ({\PLSMnbcol},{-\PLSMnblig}) ;
- %légendes
- \ifboolKV[PLTIKZSUDOM]{legendes}
- {%
- \foreach \i in {1,2,...,\PLSMnbcol}{\draw ({\i-0.5},{\PLSMdecalleg}) node[inner sep=0pt,outer sep=0pt,font=\PLSMfonteleg] {\strut\StrChar{\PLSMlistelegh}{\i}} ;}
- \foreach \j in {1,2,...,\PLSMnblig}{\draw ({-\PLSMdecalleg},{0.5-\j}) node[inner sep=0pt,outer sep=0pt,font=\PLSMfonteleg] {\StrChar{\PLSMlistelegv}{\j}} ;}
- }{}
- }
- {
- \end{tikzpicture}
- }
-
-\NewDocumentCommand\PLsudomaths{ O{} m }{%
- \useKVdefault[PLTIKZSUDOM]
- \setKV[PLTIKZSUDOM]{#1}% on paramètres les nouvelles clés et on les simplifie
- %calculs intermédiaires
- \def\larcolinter{\inteval{\PLSMnbcol/\PLSMnbsubcol}}
- \def\larliginter{\inteval{\PLSMnblig/\PLSMnbsublig}}
- %lecture liste
- \IfEq{#2}{}{}%
- {%
- \setsepchar[.]{§./}%
- \readlist*\SPGrilleSudoMaths{#2}%
- }
- %débt envtik
- \begin{tikzpicture}[x=\PLSMunite,y=\PLSMunite,line join=miter]
- %cases
- \IfEq{#2}{}{}%
- {%
- \foreach \i in {1,2,...,\PLSMnblig}{%
- \foreach \j in {1,2,...,\PLSMnbcol}{%
- \itemtomacro\SPGrilleSudoMaths[\i,\j]\SMcase
- \IfSubStr{\SMcase}{*}%si on veut colorier via *
- {%
- \StrDel{\SMcase}{*}[\SMcaseb]%
- \draw[draw=none,fill=\PLSMcoulcase] ({\j-1},{1-\i}) rectangle++ (1,-1) node[inner sep=0pt,outer sep=0pt,\PLSMcoultexte,font=\PLSMfonte,midway] {\SMcaseb} ;%
- }
- {%
- \draw ({\j-0.5},{0.5-\i}) node[inner sep=0pt,outer sep=0pt,\PLSMcoultexte,font=\PLSMfonte] {\SMcase} ;%
- }
- }
- }%
- }
- %grilles
- \draw[line width=\PLSMepg] (0,0) rectangle ({\PLSMnbcol},{-\PLSMnblig}) ;
- \draw[line width=\PLSMepf,xstep=1,ystep=1] (0,0) grid ({\PLSMnbcol},{-\PLSMnblig}) ;
- \draw[line width=\PLSMepg,xstep=\larcolinter,ystep=\larliginter] (0,0) grid ({\PLSMnbcol},{-\PLSMnblig}) ;
- %légendes
- \ifboolKV[PLTIKZSUDOM]{legendes}
- {%
- \foreach \i in {1,2,...,\PLSMnbcol}{\draw ({\i-0.5},{\PLSMdecalleg}) node[inner sep=0pt,outer sep=0pt,font=\PLSMfonteleg] {\strut\StrChar{\PLSMlistelegh}{\i}} ;}
- \foreach \j in {1,2,...,\PLSMnblig}{\draw ({-\PLSMdecalleg},{0.5-\j}) node[inner sep=0pt,outer sep=0pt,font=\PLSMfonteleg] {\StrChar{\PLSMlistelegv}{\j}} ;}
- }{}
- \end{tikzpicture}
-}
-
-%================LOISPROBAS============ OK !!
-%calculs "simples"
-\newcommand\calcPbinomP[3]{%npk
- \xintFloatToDecimal{\xintfloateval{binomial(#1,#3)*#2^#3*(1-#2)^(#1-#3)}}
-}
-\newcommand\calcPbinomC[4]{%npab
- \def\BorneInf{#3}\def\BorneSup{#4}
- \ifthenelse{\equal{#3}{*}}%
- {\def\BorneInf{0}}
- {}
- \ifthenelse{\equal{#4}{*}}%
- {\def\BorneSup{#1}}
- {}
- \xintFloatToDecimal{\xintfloateval{add(binomial(#1,i)*#2^i*(1-#2)^(#1-i), i=\BorneInf..\BorneSup)}}
-}
-\newcommand\calcPgeomP[2]{%pk
- \xintFloatToDecimal{\xintfloateval{(1-#1)^(#2-1)*(#1)}}
-}
-\newcommand\calcPgeomC[3]{%pab
- \def\BorneInf{#2}\def\BorneSup{#3}
- \ifthenelse{\equal{#2}{*}}%
- {\def\BorneInf{1}}
- {}
- \ifthenelse{\equal{#3}{*}}%
- {\def\BorneSup{\fpeval{trunc(1/#1*10,0)}}}
- {}
- \xintFloatToDecimal{\xintfloateval{add((1-#1)^(i-1)*(#1), i=\BorneInf..\BorneSup)}}
-}
-\newcommand\calcPhypergeomP[4]{%Nnmk
- \xintFloatToDecimal{\xintfloateval{binomial(#3,#4)*binomial(#1-#3,#2-#4)/binomial(#1,#2)}}
-}
-\newcommand\calcPhypergeomC[5]{%Nnmab
- \def\BorneInf{#4}\def\BorneSup{#5}
- \ifthenelse{\equal{#4}{*}}%
- {\def\BorneInf{0}}
- {}
- \ifthenelse{\equal{#5}{*}}%
- {\def\BorneSup{#1}}
- {}
- \xintFloatToDecimal{\xintfloateval{add(binomial(#3,i)*binomial(#1-#3,#2-i)/binomial(#1,#2), i=\BorneInf..\BorneSup)}}
-}
-\newcommand\calcPpoissP[2]{%lk
- \xintFloatToDecimal{\xintfloateval{exp(-#1)*#1^#2/factorial(#2)}}
-}
-\newcommand\calcPpoissC[3]{%lab
- \def\BorneInf{#2}\def\BorneSup{#3}
- \ifthenelse{\equal{#2}{*}}%
- {\def\BorneInf{0}}
- {}
- \ifthenelse{\equal{#3}{*}}%
- {\def\BorneSup{10*#1}}
- {}
- \xintFloatToDecimal{\xintfloateval{add(exp(-#1)*#1^i/factorial(i), i=\BorneInf..\BorneSup)}}
-}
-%utiles idée de https://tex.stackexchange.com/questions/355574/im-searching-for-a-table-with-cdf-of-standard-normal-distribution
-\xintdeffloatvar a_1,a_2,a_3,a_4,a_5,a_6 :=
-0.0705230784,0.0422820123,0.0092705272,0.0001520143,0.0002765672,0.0000430638;
-\xintdeffloatvar rac2inv := sqrt(2)/2 ;
-\xintdeffloatfunc erfc(x) := % uniquement pour x positif
-((((((a_6*x+a_5)*x+a_4)*x+a_3)*x+a_2)*x+a_1)*x+1)**-16 ; % fin de définition de erfc(x)
-\xintdeffloatfunc Phi(z) := (z>=0)?{1 - 0.5 * erfc(rac2inv * z)}{0.5 * erfc(-rac2inv * z)};
-
-\newcommand\calcPnormC[4]{%msab
- %def des bornes de l'intervalle suivant l'absence de a ou de b...
- \def\BorneInf{#3}\def\BorneSup{#4}
- \ifthenelse{\equal{#3}{*}}%
- {\def\BorneInf{#4-10*#2}}
- {}
- \ifthenelse{\equal{#4}{*}}%
- {\def\BorneSup{#3+10*#2}}
- {}
- \xintFloatToDecimal{\xintfloateval{Phi((\BorneSup-#1)/#2)-Phi((\BorneInf-#1)/#2)}}
-}
-%calculs "simples" fiabilite
-\newcommand\calcPexpoC[3]{%lab
- \def\BorneInf{#2}\def\BorneSup{#3}
- \ifthenelse{\equal{#2}{*}}%
- {\def\BorneInf{0}}
- {}
- \ifthenelse{\equal{#3}{*}}%
- {\def\BorneSup{100/#1}}
- {}
- \xintFloatToDecimal{\xintfloateval{exp(-#1*\BorneInf)-exp(-#1*\BorneSup)}}
-}
-
-%calculs formatés
-\NewDocumentCommand{\numPbinomP}{ s O{3} m m m }{%*=sci,2=prec,3=n,4=p,5=k
- \IfBooleanTF{#1}%
- {%
- \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(binomial(#3,#5)*#4^#5*(1-#4)^(#3-#5),#2)}}}
- }%
- {%
- \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(binomial(#3,#5)*#4^#5*(1-#4)^(#3-#5),#2)}}}
- }
-}
-
-\NewDocumentCommand{\numPbinomC}{ s O{3} m m m m }{%*=sci,2=prec,3=n,4=p,5=a,6=b
- \def\BorneInf{#5}\def\BorneSup{#6}
- \ifthenelse{\equal{#5}{*}}%
- {\def\BorneInf{0}}
- {}
- \ifthenelse{\equal{#6}{*}}%
- {\def\BorneSup{#3}}
- {}
- \IfBooleanTF{#1}%
- {%
- \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(add(binomial(#3,i)*#4^i*(1-#4)^(#3-i), i=\BorneInf..\BorneSup),#2)}}}
- }%
- {%
- \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(add(binomial(#3,i)*#4^i*(1-#4)^(#3-i), i=\BorneInf..\BorneSup),#2)}}}
- }
-}
-
-\NewDocumentCommand{\numPgeomP}{ s O{3} m m }{%*=sci,2=prec,3=p,4=k
- \IfBooleanTF{#1}%
- {%
- \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round((1-#3)^(#4-1)*(#3),#2)}}}
- }%
- {%
- \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round((1-#3)^(#4-1)*(#3),#2)}}}
- }
-}
-
-\NewDocumentCommand{\numPgeomC}{ s O{3} m m m }{%*=sci,2=prec,3=p,4=a,5=b
- \def\BorneInf{#4}\def\BorneSup{#5}
- \ifthenelse{\equal{#4}{*}}%
- {\def\BorneInf{1}}
- {}
- \ifthenelse{\equal{#5}{*}}%
- {\def\BorneSup{\fpeval{trunc(1/#3*10,0)}}}
- {}
- \IfBooleanTF{#1}%
- {%
- \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(add((1-#3)^(i-1)*(#3), i=\BorneInf..\BorneSup),#2)}}}
- }%
- {%
- \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(add((1-#3)^(i-1)*(#3), i=\BorneInf..\BorneSup),#2)}}}
- }
-}
-
-\NewDocumentCommand{\numPhypergeomP}{ s O{3} m m m m }{%*=sci,2=prec,3=N,4=n,5=m,6=k
- \IfBooleanTF{#1}%
- {%
- \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(binomial(#5,#6)*binomial(#3-#5,#4-#6)/binomial(#3,#4),#2)}}}
- }%
- {%
- \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(binomial(#5,#6)*binomial(#3-#5,#4-#6)/binomial(#3,#4),#2)}}}
- }
-}
-
-\NewDocumentCommand{\numPhypergeomC}{ s O{3} m m m m m }{%*=sci,2=prec,3=N,4=n,5=m,6=a,7=b
- \def\BorneInf{#6}\def\BorneSup{#7}
- \ifthenelse{\equal{#6}{*}}%
- {\def\BorneInf{0}}
- {}
- \ifthenelse{\equal{#7}{*}}%
- {\def\BorneSup{#3}}
- {}
- \IfBooleanTF{#1}%
- {%
- \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(add(binomial(#5,i)*binomial(#3-#5,#4-i)/binomial(#3,#4), i=\BorneInf..\BorneSup),#2)}}}
- }%
- {%
- \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(add(binomial(#5,i)*binomial(#3-#5,#4-i)/binomial(#3,#4), i=\BorneInf..\BorneSup),#2)}}}
- }
-}
-
-\NewDocumentCommand{\numPpoissP}{ s O{3} m m }{%*=sci,2=prec,3=lbda,4=k
- \IfBooleanTF{#1}%
- {%
- \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(exp(-#3)*#3^#4/factorial(#4),#2)}}}
- }%
- {%
- \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(exp(-#3)*#3^#4/factorial(#4),#2)}}}
- }
-}
-
-\NewDocumentCommand{\numPpoissC}{ s O{3} m m m }{%*=ing,2=prec,3=lbda,4=a,5=b
- \def\BorneInf{#4}\def\BorneSup{#5}
- \ifthenelse{\equal{#4}{*}}%
- {\def\BorneInf{0}}
- {}
- \ifthenelse{\equal{#5}{*}}%
- {\def\BorneSup{10*#3}}
- {}
- \IfBooleanTF{#1}%
- {%
- \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(add(exp(-#3)*#3^i/factorial(i), i=\BorneInf..\BorneSup),#2)}}}
- }%
- {%
- \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(add(exp(-#3)*#3^i/factorial(i), i=\BorneInf..\BorneSup),#2)}}}
- }
-}
-
-\NewDocumentCommand{\numPnormC}{ s O{3} m m m m }{%
- %*=ing,2=prec,3=mu,4=sigma,5=a,6=b
- %def des bornes de l'intervalle suivant l'absence de a ou de b...
- \def\BorneInf{#5}\def\BorneSup{#6}
- \ifthenelse{\equal{#5}{*}}%
- {\def\BorneInf{#6-10*#4}}
- {}
- \ifthenelse{\equal{#6}{*}}%
- {\def\BorneSup{#5+10*#4}}
- {}
- \IfBooleanTF{#1}%
- {%
- \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(Phi((\BorneSup-#3)/#4)-Phi((\BorneInf-#3)/#4),#2)}}}
- }%
- {%
- \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(Phi((\BorneSup-#3)/#4)-Phi((\BorneInf-#3)/#4),#2)}}}
- }
-}
-
-\NewDocumentCommand{\numPexpoC}{ s O{3} m m m }{%*=ing,2=prec,3=lbda,4=a,5=b
- \def\BorneInf{#4}\def\BorneSup{#5}
- \ifthenelse{\equal{#4}{*}}%
- {\def\BorneInf{0}}
- {}
- \ifthenelse{\equal{#5}{*}}%
- {\def\BorneSup{100/#3}}
- {}
- \IfBooleanTF{#1}%
- {%
- \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(exp(-#3*\BorneInf)-exp(-#3*\BorneSup),#2)}}}
- }%
- {%
- \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintFloatToDecimal{\xintfloateval{round(exp(-#3*\BorneInf)-exp(-#3*\BorneSup),#2)}}}}
- }
-}
-
-%===============CONVFROMDEC============ OK !!
-\newcommand\PLnoeud[2]{\tikz[remember picture,baseline=(#1.base)]\node[shape=rectangle,inner sep=0pt](#1){#2};}
-\ExplSyntaxOn
-\newcommand\convertbasedixtobase[2]{%
- \int_to_Base:nn {#1}{#2}
-}
-\ExplSyntaxOff
-
-\defKV[convfromten]{%
- couleur=\def\PLConvCouleur{#1},%
- decalh=\def\PLConvDecalH{#1},%
- decalv=\def\PLConvDecalV{#1},%
- noeud=\def\PLConvNoeud{#1}
-}
-
-\setKVdefault[convfromten]{%
- couleur=red,%
- decalh=2pt,%
- decalv=3pt,%
- rect=true,%
- noeud=EEE,%
- couleurres=false
-}
-
-\newcommand\PLconvDepuisDec[3][]{%
- \useKVdefault[convfromten]%
- \setKV[convfromten]{#1}%
- \xdef\ValRes{\xintDecToHex{#2}}%
- \xdef\ValA{#2}\xdef\ValB{#3}%
- \xdef\ValTMP{#2}%
- \xdef\ValMU{\inteval{#3-1}}%
- \ensuremath{%
- \left\lbrace\begin{array}{@{\,}r@{\;=\;}l@{\;+\;}r}
- %1ere division
- \xdef\ValQ{\fpeval{trunc(\ValTMP/#3,0)}}\xdef\ValR{\fpeval{\ValTMP-#3*\ValQ}}
- \num{\ValTMP}\uppercase{&}\num{\ValB}\times\num{\ValQ}\uppercase{&}\PLnoeud{\PLConvNoeud1}{\num{\ValR}}%
- \xdef\ValTMP{\ValQ}%
- \whiledo {\ValTMP > \ValMU}%
- {%
- \xdef\ValQ{\fpeval{trunc(\ValTMP/#3,0)}}\xdef\ValR{\fpeval{\ValTMP-#3*\ValQ}}%
- \\ \num{\ValTMP}\uppercase{&}\num{\ValB}\times\num{\ValQ}\uppercase{&}\num{\ValR}
- \xdef\ValTMP{\ValQ}%
- }
- %dernière
- \xdef\ValQ{\fpeval{trunc(\ValTMP/#3,0)}}\xdef\ValR{\fpeval{\ValTMP-#3*\ValQ}}%
- \\ \num{\ValTMP}\uppercase{&}\num{\ValB}\times\num{\ValQ}\uppercase{&}\PLnoeud{\PLConvNoeud2}{\num{\ValR}}
- \end{array} \right| \Rightarrow \num{#2}_{10}=\ifboolKV[convfromten]{couleurres}{\mathcolor{\PLConvCouleur}{\convertbasedixtobase{#2}{#3}_{#3}}}{\convertbasedixtobase{#2}{#3}_{#3}}}%
- \ifboolKV[convfromten]{rect}%
- {%
- \IfSubStr{\PLConvDecalH}{/}%
- {\StrCut{\PLConvDecalH}{/}{\PLConvDecalHg}{\PLConvDecalHd}}%
- {\def\PLConvDecalHg{\PLConvDecalH}\def\PLConvDecalHd{\PLConvDecalH}}%
- \begin{tikzpicture}
- \draw[overlay,rounded corners=4pt,\PLConvCouleur,thick] ($(\PLConvNoeud1.north west)+(-\PLConvDecalHg,\PLConvDecalV)$) rectangle ($(\PLConvNoeud2.south east)+(\PLConvDecalHd,-\PLConvDecalV)$) ;
- \draw[overlay,rounded corners=4pt,\PLConvCouleur,thick,->,>=latex] ($(\PLConvNoeud2.east)+(\PLConvDecalHd,0)$)--++(0,{0.75\baselineskip}) ;
- \end{tikzpicture}%
- }{}%
-}
-
-%===============ARBRESPROBAS=========== OK !!
-\defKV[PLTIKZARBRE]{%
- unite=\def\PLAPunite{#1},%
- espniv=\def\PLAPespniv{#1},%
- espfeuille=\def\PLAPespfeuille{#1},%
- type=\def\PLAPtype{#1},%
- police=\def\PLAPfont{#1},%
- policeprobas=\def\PLAPfontproba{#1},%
- styletrait=\def\PLAPtypetrait{#1},%
- eptrait=\def\PLAPeptrait{#1}
-}
-
-\setKVdefault[PLTIKZARBRE]{%
- unite=1cm,%
- espniv=3.25,%
- espfeuille=1,%
- type=2x2,%
- police=\normalfont\normalsize,%
- policeprobas=\normalfont\small,%
- inclineprobas=true,%
- fleche=false,%
- styletrait={},%
- eptrait=semithick
-}
-
-\NewDocumentCommand\PLarbre{ O{} m }{%1=options,2=libellés
- \useKVdefault[PLTIKZARBRE]%
- \setKV[PLTIKZARBRE]{#1}%
- \setsepchar[.]{,./}%
- \readlist*\PLARBREDONNES{#2}%
- \begin{tikzpicture}[x=\PLAPunite,y=\PLAPunite]
- %styles
- \tikzstyle{noeud} = [font=\PLAPfont]
- \tikzstyle{probas}= [font=\PLAPfontproba]
- \ifboolKV[PLTIKZARBRE]{inclineprobas}
- {\tikzstyle{PLetiquette}=[pos=0.525,sloped,fill=white]}
- {\tikzstyle{PLetiquette}=[pos=0.525,fill=white]}
- \ifboolKV[PLTIKZARBRE]{fleche}
- {\tikzstyle{PLfleche}=[->,>=latex,\PLAPtypetrait,\PLAPeptrait]}
- {\tikzstyle{PLfleche}=[\PLAPtypetrait,\PLAPeptrait]}
- %arbre2x2
- \IfEq{\PLAPtype}{2x2}
- {%
- \coordinate (R) at ({0*\PLAPespniv},{-1.5*\PLAPespfeuille}) ;
- \node[noeud] (A11) at ({1*\PLAPespniv},{-0.5*\PLAPespfeuille}) {\PLARBREDONNES[1,1]};
- \node[noeud] (A21) at ({2*\PLAPespniv},{-0*\PLAPespfeuille}) {\PLARBREDONNES[2,1]};
- \node[noeud] (A22) at ({2*\PLAPespniv},{-1*\PLAPespfeuille}) {\PLARBREDONNES[3,1]};
- \node[noeud] (A12) at ({1*\PLAPespniv},{-2.5*\PLAPespfeuille}) {\PLARBREDONNES[4,1]};
- \node[noeud] (A23) at ({2*\PLAPespniv},{-2*\PLAPespfeuille}) {\PLARBREDONNES[5,1]};
- \node[noeud] (A24) at ({2*\PLAPespniv},{-3*\PLAPespfeuille}) {\PLARBREDONNES[6,1]};
- \IfEq{\PLARBREDONNES[1,2]}{}
- {\draw[PLfleche] (R)--(A11) ;}
- {\draw[PLfleche] (R)--(A11) node[probas,PLetiquette,{\PLARBREDONNES[1,3]}] {{\PLARBREDONNES[1,2]}} ;}
- \IfEq{\PLARBREDONNES[2,2]}{}
- {\draw[PLfleche] (A11)--(A21) ;}
- {\draw[PLfleche] (A11)--(A21) node[probas,PLetiquette,{\PLARBREDONNES[2,3]}] {{\PLARBREDONNES[2,2]}} ;}
- \IfEq{\PLARBREDONNES[3,2]}{}
- {\draw[PLfleche] (A11)--(A22) ;}
- {\draw[PLfleche] (A11)--(A22) node[probas,PLetiquette,{\PLARBREDONNES[3,3]}] {{\PLARBREDONNES[3,2]}} ;}
- \IfEq{\PLARBREDONNES[4,2]}{}
- {\draw[PLfleche] (R)--(A12) ;}
- {\draw[PLfleche] (R)--(A12) node[probas,PLetiquette,{\PLARBREDONNES[4,3]}] {{\PLARBREDONNES[4,2]}} ;}
- \IfEq{\PLARBREDONNES[5,2]}{}
- {\draw[PLfleche] (A12)--(A23) ;}
- {\draw[PLfleche] (A12)--(A23) node[probas,PLetiquette,{\PLARBREDONNES[5,3]}] {{\PLARBREDONNES[5,2]}} ;}
- \IfEq{\PLARBREDONNES[6,2]}{}
- {\draw[PLfleche] (A12)--(A24) ;}
- {\draw[PLfleche] (A12)--(A24) node[probas,PLetiquette,{\PLARBREDONNES[6,3]}] {{\PLARBREDONNES[6,2]}} ;}
- }{}
- %arbre3x2
- \IfEq{\PLAPtype}{3x2}
- {%
- %sommets
- \coordinate (R) at ({0*\PLAPespniv},{-2.5*\PLAPespfeuille}) ;
- \node[noeud] (A11) at ({1*\PLAPespniv},{-0.5*\PLAPespfeuille}) {\PLARBREDONNES[1,1]};
- \node[noeud] (A21) at ({2*\PLAPespniv},{-0*\PLAPespfeuille}) {\PLARBREDONNES[2,1]};
- \node[noeud] (A22) at ({2*\PLAPespniv},{-1*\PLAPespfeuille}) {\PLARBREDONNES[3,1]};
- \node[noeud] (A12) at ({1*\PLAPespniv},{-2.5*\PLAPespfeuille}) {\PLARBREDONNES[4,1]};
- \node[noeud] (A23) at ({2*\PLAPespniv},{-2*\PLAPespfeuille}) {\PLARBREDONNES[5,1]};
- \node[noeud] (A24) at ({2*\PLAPespniv},{-3*\PLAPespfeuille}) {\PLARBREDONNES[6,1]};
- \node[noeud] (A13) at ({1*\PLAPespniv},{-4.5*\PLAPespfeuille}) {\PLARBREDONNES[7,1]};
- \node[noeud] (A25) at ({2*\PLAPespniv},{-4*\PLAPespfeuille}) {\PLARBREDONNES[8,1]};
- \node[noeud] (A26) at ({2*\PLAPespniv},{-5*\PLAPespfeuille}) {\PLARBREDONNES[9,1]};
- %branches
- \IfEq{\PLARBREDONNES[1,2]}{}
- {\draw[PLfleche] (R)--(A11) ;}
- {\draw[PLfleche] (R)--(A11) node[probas,PLetiquette,{\PLARBREDONNES[1,3]}] {{\PLARBREDONNES[1,2]}} ;}
- \IfEq{\PLARBREDONNES[2,2]}{}
- {\draw[PLfleche] (A11)--(A21) ;}
- {\draw[PLfleche] (A11)--(A21) node[probas,PLetiquette,{\PLARBREDONNES[2,3]}] {{\PLARBREDONNES[2,2]}} ;}
- \IfEq{\PLARBREDONNES[3,2]}{}
- {\draw[PLfleche] (A11)--(A22) ;}
- {\draw[PLfleche] (A11)--(A22) node[probas,PLetiquette,{\PLARBREDONNES[3,3]}] {{\PLARBREDONNES[3,2]}} ;}
- \IfEq{\PLARBREDONNES[4,2]}{}
- {\draw[PLfleche] (R)--(A12) ;}
- {\draw[PLfleche] (R)--(A12) node[probas,PLetiquette,{\PLARBREDONNES[4,3]}] {{\PLARBREDONNES[4,2]}} ;}
- \IfEq{\PLARBREDONNES[5,2]}{}
- {\draw[PLfleche] (A12)--(A23) ;}
- {\draw[PLfleche] (A12)--(A23) node[probas,PLetiquette,{\PLARBREDONNES[5,3]}] {{\PLARBREDONNES[5,2]}} ;}
- \IfEq{\PLARBREDONNES[6,2]}{}
- {\draw[PLfleche] (A12)--(A24) ;}
- {\draw[PLfleche] (A12)--(A24) node[probas,PLetiquette,{\PLARBREDONNES[6,3]}] {{\PLARBREDONNES[6,2]}} ;}
- \IfEq{\PLARBREDONNES[7,2]}{}
- {\draw[PLfleche] (R)--(A13) ;}
- {\draw[PLfleche] (R)--(A13) node[probas,PLetiquette,{\PLARBREDONNES[7,3]}] {{\PLARBREDONNES[7,2]}} ;}
- \IfEq{\PLARBREDONNES[8,2]}{}
- {\draw[PLfleche] (A13)--(A25) ;}
- {\draw[PLfleche] (A13)--(A25) node[probas,PLetiquette,{\PLARBREDONNES[8,3]}] {{\PLARBREDONNES[8,2]}} ;}
- \IfEq{\PLARBREDONNES[9,2]}{}
- {\draw[PLfleche] (A13)--(A26) ;}
- {\draw[PLfleche] (A13)--(A26) node[probas,PLetiquette,{\PLARBREDONNES[9,3]}] {{\PLARBREDONNES[9,2]}} ;}
- }{}
- %arbre2x3
- \IfEq{\PLAPtype}{2x3}
- {%
- %sommets
- \coordinate (R) at ({0*\PLAPespniv},{-2.5*\PLAPespfeuille}) ;
- \node[noeud] (A11) at ({1*\PLAPespniv},{-1*\PLAPespfeuille}) {\PLARBREDONNES[1,1]};
- \node[noeud] (A12) at ({1*\PLAPespniv},{-4*\PLAPespfeuille}) {\PLARBREDONNES[5,1]};
- \node[noeud] (A21) at ({2*\PLAPespniv},{-0*\PLAPespfeuille}) {\PLARBREDONNES[2,1]};
- \node[noeud] (A22) at ({2*\PLAPespniv},{-1*\PLAPespfeuille}) {\PLARBREDONNES[3,1]};
- \node[noeud] (A23) at ({2*\PLAPespniv},{-2*\PLAPespfeuille}) {\PLARBREDONNES[4,1]};
- \node[noeud] (A24) at ({2*\PLAPespniv},{-3*\PLAPespfeuille}) {\PLARBREDONNES[6,1]};
- \node[noeud] (A25) at ({2*\PLAPespniv},{-4*\PLAPespfeuille}) {\PLARBREDONNES[7,1]};
- \node[noeud] (A26) at ({2*\PLAPespniv},{-5*\PLAPespfeuille}) {\PLARBREDONNES[8,1]};
- %branches
- \IfEq{\PLARBREDONNES[1,2]}{}
- {\draw[PLfleche] (R)--(A11) ;}
- {\draw[PLfleche] (R)--(A11) node[probas,PLetiquette,{\PLARBREDONNES[1,3]}] {{\PLARBREDONNES[1,2]}} ;}
- \IfEq{\PLARBREDONNES[5,2]}{}
- {\draw[PLfleche] (R)--(A12) ;}
- {\draw[PLfleche] (R)--(A12) node[probas,PLetiquette,{\PLARBREDONNES[5,3]}] {{\PLARBREDONNES[5,2]}} ;}
- \IfEq{\PLARBREDONNES[2,2]}{}
- {\draw[PLfleche] (A11)--(A21) ;}
- {\draw[PLfleche] (A11)--(A21) node[probas,PLetiquette,{\PLARBREDONNES[2,3]}] {{\PLARBREDONNES[2,2]}} ;}
- \IfEq{\PLARBREDONNES[3,2]}{}
- {\draw[PLfleche] (A11)--(A22) ;}
- {\draw[PLfleche] (A11)--(A22) node[probas,PLetiquette,{\PLARBREDONNES[3,3]}] {{\PLARBREDONNES[3,2]}} ;}
- \IfEq{\PLARBREDONNES[4,2]}{}
- {\draw[PLfleche] (A11)--(A23) ;}
- {\draw[PLfleche] (A11)--(A23) node[probas,PLetiquette,{\PLARBREDONNES[4,3]}] {{\PLARBREDONNES[4,2]}} ;}
- \IfEq{\PLARBREDONNES[6,2]}{}
- {\draw[PLfleche] (A12)--(A24) ;}
- {\draw[PLfleche] (A12)--(A24) node[probas,PLetiquette,{\PLARBREDONNES[6,3]}] {{\PLARBREDONNES[6,2]}} ;}
- \IfEq{\PLARBREDONNES[7,2]}{}
- {\draw[PLfleche] (A12)--(A25) ;}
- {\draw[PLfleche] (A12)--(A25) node[probas,PLetiquette,{\PLARBREDONNES[7,3]}] {{\PLARBREDONNES[7,2]}} ;}
- \IfEq{\PLARBREDONNES[8,2]}{}
- {\draw[PLfleche] (A12)--(A26) ;}
- {\draw[PLfleche] (A12)--(A26) node[probas,PLetiquette,{\PLARBREDONNES[8,3]}] {{\PLARBREDONNES[8,2]}} ;}
- }{}
- %arbre2x3
- \IfEq{\PLAPtype}{3x3}
- {%
- %sommets
- \coordinate (R) at ({0*\PLAPespniv},{-4*\PLAPespfeuille}) ;
- \node[noeud] (A11) at ({1*\PLAPespniv},{-1*\PLAPespfeuille}) {\PLARBREDONNES[1,1]};
- \node[noeud] (A12) at ({1*\PLAPespniv},{-4*\PLAPespfeuille}) {\PLARBREDONNES[5,1]};
- \node[noeud] (A13) at ({1*\PLAPespniv},{-7*\PLAPespfeuille}) {\PLARBREDONNES[10,1]};
- \node[noeud] (A21) at ({2*\PLAPespniv},{-0*\PLAPespfeuille}) {\PLARBREDONNES[2,1]};
- \node[noeud] (A22) at ({2*\PLAPespniv},{-1*\PLAPespfeuille}) {\PLARBREDONNES[3,1]};
- \node[noeud] (A23) at ({2*\PLAPespniv},{-2*\PLAPespfeuille}) {\PLARBREDONNES[4,1]};
- \node[noeud] (A24) at ({2*\PLAPespniv},{-3*\PLAPespfeuille}) {\PLARBREDONNES[6,1]};
- \node[noeud] (A25) at ({2*\PLAPespniv},{-4*\PLAPespfeuille}) {\PLARBREDONNES[7,1]};
- \node[noeud] (A26) at ({2*\PLAPespniv},{-5*\PLAPespfeuille}) {\PLARBREDONNES[8,1]};
- \node[noeud] (A27) at ({2*\PLAPespniv},{-6*\PLAPespfeuille}) {\PLARBREDONNES[10,1]};
- \node[noeud] (A28) at ({2*\PLAPespniv},{-7*\PLAPespfeuille}) {\PLARBREDONNES[11,1]};
- \node[noeud] (A29) at ({2*\PLAPespniv},{-8*\PLAPespfeuille}) {\PLARBREDONNES[12,1]};
- %branches
- \IfEq{\PLARBREDONNES[1,2]}{}
- {\draw[PLfleche] (R)--(A11) ;}
- {\draw[PLfleche] (R)--(A11) node[probas,PLetiquette,{\PLARBREDONNES[1,3]}] {{\PLARBREDONNES[1,2]}} ;}
- \IfEq{\PLARBREDONNES[5,2]}{}
- {\draw[PLfleche] (R)--(A12) ;}
- {\draw[PLfleche] (R)--(A12) node[probas,PLetiquette,{\PLARBREDONNES[5,3]}] {{\PLARBREDONNES[5,2]}} ;}
- \IfEq{\PLARBREDONNES[9,2]}{}
- {\draw[PLfleche] (R)--(A13) ;}
- {\draw[PLfleche] (R)--(A13) node[probas,PLetiquette,{\PLARBREDONNES[9,3]}] {{\PLARBREDONNES[9,2]}} ;}
- %N2
- \IfEq{\PLARBREDONNES[2,2]}{}
- {\draw[PLfleche] (A11)--(A21) ;}
- {\draw[PLfleche] (A11)--(A21) node[probas,PLetiquette,{\PLARBREDONNES[2,3]}] {{\PLARBREDONNES[2,2]}} ;}
- \IfEq{\PLARBREDONNES[3,2]}{}
- {\draw[PLfleche] (A11)--(A22) ;}
- {\draw[PLfleche] (A11)--(A22) node[probas,PLetiquette,{\PLARBREDONNES[3,3]}] {{\PLARBREDONNES[3,2]}} ;}
- \IfEq{\PLARBREDONNES[4,2]}{}
- {\draw[PLfleche] (A11)--(A23) ;}
- {\draw[PLfleche] (A11)--(A23) node[probas,PLetiquette,{\PLARBREDONNES[4,3]}] {{\PLARBREDONNES[4,2]}} ;}
- \IfEq{\PLARBREDONNES[6,2]}{}
- {\draw[PLfleche] (A12)--(A24) ;}
- {\draw[PLfleche] (A12)--(A24) node[probas,PLetiquette,{\PLARBREDONNES[6,3]}] {{\PLARBREDONNES[6,2]}} ;}
- \IfEq{\PLARBREDONNES[7,2]}{}
- {\draw[PLfleche] (A12)--(A25) ;}
- {\draw[PLfleche] (A12)--(A25) node[probas,PLetiquette,{\PLARBREDONNES[7,3]}] {{\PLARBREDONNES[7,2]}} ;}
- \IfEq{\PLARBREDONNES[8,2]}{}
- {\draw[PLfleche] (A12)--(A26) ;}
- {\draw[PLfleche] (A12)--(A26) node[probas,PLetiquette,{\PLARBREDONNES[8,3]}] {{\PLARBREDONNES[8,2]}} ;}
- \IfEq{\PLARBREDONNES[10,2]}{}
- {\draw[PLfleche] (A13)--(A27) ;}
- {\draw[PLfleche] (A13)--(A27) node[probas,PLetiquette,{\PLARBREDONNES[10,3]}] {{\PLARBREDONNES[10,2]}} ;}
- \IfEq{\PLARBREDONNES[11,2]}{}
- {\draw[PLfleche] (A13)--(A28) ;}
- {\draw[PLfleche] (A13)--(A28) node[probas,PLetiquette,{\PLARBREDONNES[11,3]}] {{\PLARBREDONNES[11,2]}} ;}
- \IfEq{\PLARBREDONNES[12,2]}{}
- {\draw[PLfleche] (A13)--(A29) ;}
- {\draw[PLfleche] (A13)--(A29) node[probas,PLetiquette,{\PLARBREDONNES[12,3]}] {{\PLARBREDONNES[12,2]}} ;}
- }{}
- \end{tikzpicture}
-}
-
-\NewDocumentEnvironment{PLenvarbre}{ O{} m }%1=options,2=libellés
-{
- \useKVdefault[PLTIKZARBRE]
- \setKV[PLTIKZARBRE]{#1}
- \setsepchar[.]{,./}%
- \readlist*\PLARBREDONNES{#2}
- \begin{tikzpicture}[x=\PLAPunite,y=\PLAPunite]
- %styles
- \tikzstyle{noeud} = [font=\PLAPfont]
- \tikzstyle{probas}= [font=\PLAPfontproba]
- \ifboolKV[PLTIKZARBRE]{inclineprobas}
- {\tikzstyle{PLetiquette}=[pos=0.525,sloped,fill=white]}
- {\tikzstyle{PLetiquette}=[pos=0.525,fill=white]}
- \ifboolKV[PLTIKZARBRE]{fleche}
- {\tikzstyle{PLfleche}=[->,>=latex,\PLAPtypetrait,\PLAPeptrait]}
- {\tikzstyle{PLfleche}=[\PLAPtypetrait,\PLAPeptrait]}
- %arbre2x2
- \IfEq{\PLAPtype}{2x2}
- {%
- \coordinate (R) at ({0*\PLAPespniv},{-1.5*\PLAPespfeuille}) ;
- \node[noeud] (A11) at ({1*\PLAPespniv},{-0.5*\PLAPespfeuille}) {\PLARBREDONNES[1,1]};
- \node[noeud] (A21) at ({2*\PLAPespniv},{-0*\PLAPespfeuille}) {\PLARBREDONNES[2,1]};
- \node[noeud] (A22) at ({2*\PLAPespniv},{-1*\PLAPespfeuille}) {\PLARBREDONNES[3,1]};
- \node[noeud] (A12) at ({1*\PLAPespniv},{-2.5*\PLAPespfeuille}) {\PLARBREDONNES[4,1]};
- \node[noeud] (A23) at ({2*\PLAPespniv},{-2*\PLAPespfeuille}) {\PLARBREDONNES[5,1]};
- \node[noeud] (A24) at ({2*\PLAPespniv},{-3*\PLAPespfeuille}) {\PLARBREDONNES[6,1]};
- \IfEq{\PLARBREDONNES[1,2]}{}
- {\draw[PLfleche] (R)--(A11) ;}
- {\draw[PLfleche] (R)--(A11) node[probas,PLetiquette,{\PLARBREDONNES[1,3]}] {{\PLARBREDONNES[1,2]}} ;}
- \IfEq{\PLARBREDONNES[2,2]}{}
- {\draw[PLfleche] (A11)--(A21) ;}
- {\draw[PLfleche] (A11)--(A21) node[probas,PLetiquette,{\PLARBREDONNES[2,3]}] {{\PLARBREDONNES[2,2]}} ;}
- \IfEq{\PLARBREDONNES[3,2]}{}
- {\draw[PLfleche] (A11)--(A22) ;}
- {\draw[PLfleche] (A11)--(A22) node[probas,PLetiquette,{\PLARBREDONNES[3,3]}] {{\PLARBREDONNES[3,2]}} ;}
- \IfEq{\PLARBREDONNES[4,2]}{}
- {\draw[PLfleche] (R)--(A12) ;}
- {\draw[PLfleche] (R)--(A12) node[probas,PLetiquette,{\PLARBREDONNES[4,3]}] {{\PLARBREDONNES[4,2]}} ;}
- \IfEq{\PLARBREDONNES[5,2]}{}
- {\draw[PLfleche] (A12)--(A23) ;}
- {\draw[PLfleche] (A12)--(A23) node[probas,PLetiquette,{\PLARBREDONNES[5,3]}] {{\PLARBREDONNES[5,2]}} ;}
- \IfEq{\PLARBREDONNES[6,2]}{}
- {\draw[PLfleche] (A12)--(A24) ;}
- {\draw[PLfleche] (A12)--(A24) node[probas,PLetiquette,{\PLARBREDONNES[6,3]}] {{\PLARBREDONNES[6,2]}} ;}
- }{}
- %arbre3x2
- \IfEq{\PLAPtype}{3x2}
- {%
- %sommets
- \coordinate (R) at ({0*\PLAPespniv},{-2.5*\PLAPespfeuille}) ;
- \node[noeud] (A11) at ({1*\PLAPespniv},{-0.5*\PLAPespfeuille}) {\PLARBREDONNES[1,1]};
- \node[noeud] (A21) at ({2*\PLAPespniv},{-0*\PLAPespfeuille}) {\PLARBREDONNES[2,1]};
- \node[noeud] (A22) at ({2*\PLAPespniv},{-1*\PLAPespfeuille}) {\PLARBREDONNES[3,1]};
- \node[noeud] (A12) at ({1*\PLAPespniv},{-2.5*\PLAPespfeuille}) {\PLARBREDONNES[4,1]};
- \node[noeud] (A23) at ({2*\PLAPespniv},{-2*\PLAPespfeuille}) {\PLARBREDONNES[5,1]};
- \node[noeud] (A24) at ({2*\PLAPespniv},{-3*\PLAPespfeuille}) {\PLARBREDONNES[6,1]};
- \node[noeud] (A13) at ({1*\PLAPespniv},{-4.5*\PLAPespfeuille}) {\PLARBREDONNES[7,1]};
- \node[noeud] (A25) at ({2*\PLAPespniv},{-4*\PLAPespfeuille}) {\PLARBREDONNES[8,1]};
- \node[noeud] (A26) at ({2*\PLAPespniv},{-5*\PLAPespfeuille}) {\PLARBREDONNES[9,1]};
- %branches
- \IfEq{\PLARBREDONNES[1,2]}{}
- {\draw[PLfleche] (R)--(A11) ;}
- {\draw[PLfleche] (R)--(A11) node[probas,PLetiquette,{\PLARBREDONNES[1,3]}] {{\PLARBREDONNES[1,2]}} ;}
- \IfEq{\PLARBREDONNES[2,2]}{}
- {\draw[PLfleche] (A11)--(A21) ;}
- {\draw[PLfleche] (A11)--(A21) node[probas,PLetiquette,{\PLARBREDONNES[2,3]}] {{\PLARBREDONNES[2,2]}} ;}
- \IfEq{\PLARBREDONNES[3,2]}{}
- {\draw[PLfleche] (A11)--(A22) ;}
- {\draw[PLfleche] (A11)--(A22) node[probas,PLetiquette,{\PLARBREDONNES[3,3]}] {{\PLARBREDONNES[3,2]}} ;}
- \IfEq{\PLARBREDONNES[4,2]}{}
- {\draw[PLfleche] (R)--(A12) ;}
- {\draw[PLfleche] (R)--(A12) node[probas,PLetiquette,{\PLARBREDONNES[4,3]}] {{\PLARBREDONNES[4,2]}} ;}
- \IfEq{\PLARBREDONNES[5,2]}{}
- {\draw[PLfleche] (A12)--(A23) ;}
- {\draw[PLfleche] (A12)--(A23) node[probas,PLetiquette,{\PLARBREDONNES[5,3]}] {{\PLARBREDONNES[5,2]}} ;}
- \IfEq{\PLARBREDONNES[6,2]}{}
- {\draw[PLfleche] (A12)--(A24) ;}
- {\draw[PLfleche] (A12)--(A24) node[probas,PLetiquette,{\PLARBREDONNES[6,3]}] {{\PLARBREDONNES[6,2]}} ;}
- \IfEq{\PLARBREDONNES[7,2]}{}
- {\draw[PLfleche] (R)--(A13) ;}
- {\draw[PLfleche] (R)--(A13) node[probas,PLetiquette,{\PLARBREDONNES[7,3]}] {{\PLARBREDONNES[7,2]}} ;}
- \IfEq{\PLARBREDONNES[8,2]}{}
- {\draw[PLfleche] (A13)--(A25) ;}
- {\draw[PLfleche] (A13)--(A25) node[probas,PLetiquette,{\PLARBREDONNES[8,3]}] {{\PLARBREDONNES[8,2]}} ;}
- \IfEq{\PLARBREDONNES[9,2]}{}
- {\draw[PLfleche] (A13)--(A26) ;}
- {\draw[PLfleche] (A13)--(A26) node[probas,PLetiquette,{\PLARBREDONNES[9,3]}] {{\PLARBREDONNES[9,2]}} ;}
- }{}
- %arbre2x3
- \IfEq{\PLAPtype}{2x3}
- {%
- %sommets
- \coordinate (R) at ({0*\PLAPespniv},{-2.5*\PLAPespfeuille}) ;
- \node[noeud] (A11) at ({1*\PLAPespniv},{-1*\PLAPespfeuille}) {\PLARBREDONNES[1,1]};
- \node[noeud] (A12) at ({1*\PLAPespniv},{-4*\PLAPespfeuille}) {\PLARBREDONNES[5,1]};
- \node[noeud] (A21) at ({2*\PLAPespniv},{-0*\PLAPespfeuille}) {\PLARBREDONNES[2,1]};
- \node[noeud] (A22) at ({2*\PLAPespniv},{-1*\PLAPespfeuille}) {\PLARBREDONNES[3,1]};
- \node[noeud] (A23) at ({2*\PLAPespniv},{-2*\PLAPespfeuille}) {\PLARBREDONNES[4,1]};
- \node[noeud] (A24) at ({2*\PLAPespniv},{-3*\PLAPespfeuille}) {\PLARBREDONNES[6,1]};
- \node[noeud] (A25) at ({2*\PLAPespniv},{-4*\PLAPespfeuille}) {\PLARBREDONNES[7,1]};
- \node[noeud] (A26) at ({2*\PLAPespniv},{-5*\PLAPespfeuille}) {\PLARBREDONNES[8,1]};
- %branches
- \IfEq{\PLARBREDONNES[1,2]}{}
- {\draw[PLfleche] (R)--(A11) ;}
- {\draw[PLfleche] (R)--(A11) node[probas,PLetiquette,{\PLARBREDONNES[1,3]}] {{\PLARBREDONNES[1,2]}} ;}
- \IfEq{\PLARBREDONNES[5,2]}{}
- {\draw[PLfleche] (R)--(A12) ;}
- {\draw[PLfleche] (R)--(A12) node[probas,PLetiquette,{\PLARBREDONNES[5,3]}] {{\PLARBREDONNES[5,2]}} ;}
- \IfEq{\PLARBREDONNES[2,2]}{}
- {\draw[PLfleche] (A11)--(A21) ;}
- {\draw[PLfleche] (A11)--(A21) node[probas,PLetiquette,{\PLARBREDONNES[2,3]}] {{\PLARBREDONNES[2,2]}} ;}
- \IfEq{\PLARBREDONNES[3,2]}{}
- {\draw[PLfleche] (A11)--(A22) ;}
- {\draw[PLfleche] (A11)--(A22) node[probas,PLetiquette,{\PLARBREDONNES[3,3]}] {{\PLARBREDONNES[3,2]}} ;}
- \IfEq{\PLARBREDONNES[4,2]}{}
- {\draw[PLfleche] (A11)--(A23) ;}
- {\draw[PLfleche] (A11)--(A23) node[probas,PLetiquette,{\PLARBREDONNES[4,3]}] {{\PLARBREDONNES[4,2]}} ;}
- \IfEq{\PLARBREDONNES[6,2]}{}
- {\draw[PLfleche] (A12)--(A24) ;}
- {\draw[PLfleche] (A12)--(A24) node[probas,PLetiquette,{\PLARBREDONNES[6,3]}] {{\PLARBREDONNES[6,2]}} ;}
- \IfEq{\PLARBREDONNES[7,2]}{}
- {\draw[PLfleche] (A12)--(A25) ;}
- {\draw[PLfleche] (A12)--(A25) node[probas,PLetiquette,{\PLARBREDONNES[7,3]}] {{\PLARBREDONNES[7,2]}} ;}
- \IfEq{\PLARBREDONNES[8,2]}{}
- {\draw[PLfleche] (A12)--(A26) ;}
- {\draw[PLfleche] (A12)--(A26) node[probas,PLetiquette,{\PLARBREDONNES[8,3]}] {{\PLARBREDONNES[8,2]}} ;}
- }{}
- %arbre2x3
- \IfEq{\PLAPtype}{3x3}
- {%
- %sommets
- \coordinate (R) at ({0*\PLAPespniv},{-4*\PLAPespfeuille}) ;
- \node[noeud] (A11) at ({1*\PLAPespniv},{-1*\PLAPespfeuille}) {\PLARBREDONNES[1,1]};
- \node[noeud] (A12) at ({1*\PLAPespniv},{-4*\PLAPespfeuille}) {\PLARBREDONNES[5,1]};
- \node[noeud] (A13) at ({1*\PLAPespniv},{-7*\PLAPespfeuille}) {\PLARBREDONNES[10,1]};
- \node[noeud] (A21) at ({2*\PLAPespniv},{-0*\PLAPespfeuille}) {\PLARBREDONNES[2,1]};
- \node[noeud] (A22) at ({2*\PLAPespniv},{-1*\PLAPespfeuille}) {\PLARBREDONNES[3,1]};
- \node[noeud] (A23) at ({2*\PLAPespniv},{-2*\PLAPespfeuille}) {\PLARBREDONNES[4,1]};
- \node[noeud] (A24) at ({2*\PLAPespniv},{-3*\PLAPespfeuille}) {\PLARBREDONNES[6,1]};
- \node[noeud] (A25) at ({2*\PLAPespniv},{-4*\PLAPespfeuille}) {\PLARBREDONNES[7,1]};
- \node[noeud] (A26) at ({2*\PLAPespniv},{-5*\PLAPespfeuille}) {\PLARBREDONNES[8,1]};
- \node[noeud] (A27) at ({2*\PLAPespniv},{-6*\PLAPespfeuille}) {\PLARBREDONNES[10,1]};
- \node[noeud] (A28) at ({2*\PLAPespniv},{-7*\PLAPespfeuille}) {\PLARBREDONNES[11,1]};
- \node[noeud] (A29) at ({2*\PLAPespniv},{-8*\PLAPespfeuille}) {\PLARBREDONNES[12,1]};
- %branches
- \IfEq{\PLARBREDONNES[1,2]}{}
- {\draw[PLfleche] (R)--(A11) ;}
- {\draw[PLfleche] (R)--(A11) node[probas,PLetiquette,{\PLARBREDONNES[1,3]}] {{\PLARBREDONNES[1,2]}} ;}
- \IfEq{\PLARBREDONNES[5,2]}{}
- {\draw[PLfleche] (R)--(A12) ;}
- {\draw[PLfleche] (R)--(A12) node[probas,PLetiquette,{\PLARBREDONNES[5,3]}] {{\PLARBREDONNES[5,2]}} ;}
- \IfEq{\PLARBREDONNES[9,2]}{}
- {\draw[PLfleche] (R)--(A13) ;}
- {\draw[PLfleche] (R)--(A13) node[probas,PLetiquette,{\PLARBREDONNES[9,3]}] {{\PLARBREDONNES[9,2]}} ;}
- %N2
- \IfEq{\PLARBREDONNES[2,2]}{}
- {\draw[PLfleche] (A11)--(A21) ;}
- {\draw[PLfleche] (A11)--(A21) node[probas,PLetiquette,{\PLARBREDONNES[2,3]}] {{\PLARBREDONNES[2,2]}} ;}
- \IfEq{\PLARBREDONNES[3,2]}{}
- {\draw[PLfleche] (A11)--(A22) ;}
- {\draw[PLfleche] (A11)--(A22) node[probas,PLetiquette,{\PLARBREDONNES[3,3]}] {{\PLARBREDONNES[3,2]}} ;}
- \IfEq{\PLARBREDONNES[4,2]}{}
- {\draw[PLfleche] (A11)--(A23) ;}
- {\draw[PLfleche] (A11)--(A23) node[probas,PLetiquette,{\PLARBREDONNES[4,3]}] {{\PLARBREDONNES[4,2]}} ;}
- \IfEq{\PLARBREDONNES[6,2]}{}
- {\draw[PLfleche] (A12)--(A24) ;}
- {\draw[PLfleche] (A12)--(A24) node[probas,PLetiquette,{\PLARBREDONNES[6,3]}] {{\PLARBREDONNES[6,2]}} ;}
- \IfEq{\PLARBREDONNES[7,2]}{}
- {\draw[PLfleche] (A12)--(A25) ;}
- {\draw[PLfleche] (A12)--(A25) node[probas,PLetiquette,{\PLARBREDONNES[7,3]}] {{\PLARBREDONNES[7,2]}} ;}
- \IfEq{\PLARBREDONNES[8,2]}{}
- {\draw[PLfleche] (A12)--(A26) ;}
- {\draw[PLfleche] (A12)--(A26) node[probas,PLetiquette,{\PLARBREDONNES[8,3]}] {{\PLARBREDONNES[8,2]}} ;}
- \IfEq{\PLARBREDONNES[10,2]}{}
- {\draw[PLfleche] (A13)--(A27) ;}
- {\draw[PLfleche] (A13)--(A27) node[probas,PLetiquette,{\PLARBREDONNES[10,3]}] {{\PLARBREDONNES[10,2]}} ;}
- \IfEq{\PLARBREDONNES[11,2]}{}
- {\draw[PLfleche] (A13)--(A28) ;}
- {\draw[PLfleche] (A13)--(A28) node[probas,PLetiquette,{\PLARBREDONNES[11,3]}] {{\PLARBREDONNES[11,2]}} ;}
- \IfEq{\PLARBREDONNES[12,2]}{}
- {\draw[PLfleche] (A13)--(A29) ;}
- {\draw[PLfleche] (A13)--(A29) node[probas,PLetiquette,{\PLARBREDONNES[12,3]}] {{\PLARBREDONNES[12,2]}} ;}
- }{}
- }
- {
- \end{tikzpicture}
-}
-
-%==============SCHEMASPROBAS============= OK!
-%densites utiles
-\def\densnorm#1{1/(sqrt(2*pi))*exp(-0.5*(#1*#1))}
-\def\densexpo#1{exp(-#1)}
-
-\defKV[GRPHPROBCONTINUES]{%
- CouleurAire=\def\GRPHPROBcoulsurf{#1},%
- CouleurCourbe=\def\GRPHPROBcoulcbe{#1},%
- Largeur=\def\GRPHPROBlarg{#1},%
- Hauteur=\def\GRPHPROBhauteur{#1}
-}
-
-\setKVdefault[GRPHPROBCONTINUES]{%
- CouleurAire=LightGray,%
- CouleurCourbe=red,%
- Largeur=2,%
- Hauteur=1,%
- AfficheM=true,%
- AfficheCadre=true
-}
-
-\NewDocumentCommand\LoiNormaleGraphe{ O{} D<>{} m m m m }{%1=options,2=optionstikz,3=m,4=s,5=a,6=b
- %simplekv
- \useKVdefault[GRPHPROBCONTINUES]%
- \setKV[GRPHPROBCONTINUES]{#1}%
- %unites
- \def\UNITEX{\fpeval{\GRPHPROBlarg/8}}\def\UNITEY{\fpeval{\GRPHPROBhauteur/0.5}}%
- %bornes
- \def\BorneInf{\fpeval{(#5-#3)/#4}}\def\BorneSup{\fpeval{(#6-#3)/#4}}%
- \ifthenelse{\equal{#5}{*}}{\def\BorneInf{-4}}{}%
- \ifthenelse{\equal{#6}{*}}{\def\BorneSup{4}}{}%
- %tikzpicture
- \begin{tikzpicture}[x=\UNITEX cm,y=\UNITEY cm,#2]
- \ifboolKV[GRPHPROBCONTINUES]{AfficheM}%
- {\draw (0,-0.0375) node[font=\tiny,scale={2*\UNITEX}] {#3} ;}
- {}
- \ifboolKV[GRPHPROBCONTINUES]{AfficheCadre}%
- {\draw[Gray] (-4,-0.075) rectangle (4,0.425) ;}
- {}
- \clip (-4,-0.075) rectangle (4,0.425) ;
- \draw[black,semithick,fill=\GRPHPROBcoulsurf] ({\BorneInf},0) -- plot [domain={\BorneInf}:{\BorneSup},samples=100] (\x,{\densnorm{\x}}) -- ({\BorneSup},0) -- cycle;
- \draw[thick,->,>=stealth] (-4,0)--(4,0) ;
- \draw[thick,densely dotted] (0,0)--(0,0.39894) ;
- \draw[thick,domain=-4:4,samples=100,\GRPHPROBcoulcbe] plot (\x,{\densnorm{\x}}) ;
- \end{tikzpicture}
-}
-
-\NewDocumentCommand\LoiExpoGraphe{ O{} D<>{} m m m }{%1=options,2=optionstikz,3=l,4=a,5=b
- %simplekv
- \useKVdefault[GRPHPROBCONTINUES]%
- \setKV[GRPHPROBCONTINUES]{#1}%
- %unites
- \def\UNITEX{\fpeval{\GRPHPROBlarg/4}}\def\UNITEY{\fpeval{\GRPHPROBhauteur/1}}%
- \def\MOYENNE{\fpeval{trunc(1/#3,0)}}%
- %bornes
- \def\BorneInf{\fpeval{#3*#4}}\def\BorneSup{\fpeval{#3*#5}}%
- \ifthenelse{\equal{#4}{*}}{\def\BorneInf{0}}{}%
- \ifthenelse{\equal{#5}{*}}{\def\BorneSup{4}}{}%
- %tikzpicture
- \begin{tikzpicture}[x=\UNITEX cm,y=\UNITEY cm,#2]
- \ifboolKV[GRPHPROBCONTINUES]{AfficheCadre}%
- {\draw[Gray] (-0.2,-0.15) rectangle (3.8,0.85) ;}
- {}
- \clip (-0.2,-0.15) rectangle (3.8,0.85) ;
- \draw[black,semithick,fill=\GRPHPROBcoulsurf] ({\BorneInf},0) -- plot [domain={\BorneInf}:{\BorneSup},samples=100] (\x,{0.7*\densexpo{\x}}) -- ({\BorneSup},0) -- cycle;
- \ifboolKV[GRPHPROBCONTINUES]{AfficheM}%
- {\draw (1,-0.075) node[font=\tiny,scale={\UNITEX}] {\MOYENNE} ;
- \draw[thick,densely dotted] (1,0)--(1,{0.7*\densexpo{1}}) ;}
- {}
- \draw[thick,->,>=stealth] (-0.2,0)--(3.8,0) ;
- \draw[thick,->,>=stealth] (0,-0.15)--(0,0.85) ;
- \draw[thick,domain=0:3.8,samples=100,\GRPHPROBcoulcbe] plot (\x,{0.7*\densexpo{\x}}) ;
- \end{tikzpicture}
-}
-
-%===============TRINOMEALEA============== OK!
-\setKVdefault[trinomealea]{%
- Alea=false,%
- Anegatif=true
-}
-
-\NewDocumentCommand\EcritureTrinome{ O{} m m m }{%
- \useKVdefault[trinomealea]%
- \setKV[trinomealea]{#1}%
- \ifboolKV[trinomealea]{Alea}%
- {%
- \xdef\Coeffa{\fpeval{randint(#2)}}\xdef\Coeffb{\fpeval{randint(#3)}}\xdef\Coeffc{\fpeval{randint(#4)}}%
- \xdef\AleaSigneA{\fpeval{randint(1,2)}}%
- \ifboolKV[trinomealea]{Anegatif}%
- {\xintifboolexpr{\AleaSigneA == 1}{\def\TriSigneA{}}{\def\TriSigneA{-}}}%
- {\def\TriSigneA{}}%forcément a>0
- }%
- {%
- \xdef\Coeffa{#2}\xdef\Coeffb{#3}\xdef\Coeffc{#4}%
- \def\TriSigneA{}%
- }%
- \def\TriPartieA{\num{\TriSigneA\Coeffa} x^2}%
- \xintifboolexpr{\Coeffa == 1}%
- {\def\TriPartieA{x^2}}{}%
- \xintifboolexpr{\Coeffa == -1}%
- {\def\TriPartieA{-x^2}}{}%
- \def\TriPartieB{\num[print-implicit-plus]{\Coeffb}x}%
- \xintifboolexpr{\Coeffb == 0}%
- {\def\TriPartieB{}}{}%
- \xintifboolexpr{\Coeffb == 1}%
- {\def\TriPartieB{+x}}{}%
- \xintifboolexpr{\Coeffb == -1}%
- {\def\TriPartieB{-x}}{}%
- \xintifboolexpr{\Coeffc == 0}%
- {\def\TriPartieC{}}{\def\TriPartieC{\num[print-implicit-plus]{\Coeffc}}}%
- %formatage
- \ensuremath{\TriPartieA\TriPartieB\TriPartieC}%
-}
-
-
-%=================PRESPGCD=============== OK!
-\DeclareMathOperator{\PLpgcd}{PGCD}
-\defKV[prespgcd]{%
- Couleur=\def\PLPGCDCouleur{#1},%
- DecalRect=\def\PLPGCDDecal{#1},%
- Noeud=\def\PLPGCDNoeud{#1}
-}
-
-\setKVdefault[prespgcd]{%
- Couleur=red,%
- DecalRect=2pt,%
- Rectangle=true,%
- Noeud=FFF,%
- CouleurResultat=false,%
- AfficheConclusion=true,%
- AfficheDelimiteurs=true
-}
-
-\newcommand\PresentationPGCD[3][]{%
- \useKVdefault[prespgcd]%
- \setKV[prespgcd]{#1}%
- \xdef\respgcd{\xinteval{gcd(#2,#3)}}
- \xdef\ValA{#2}\xdef\ValB{#3}%on stocke les valeurs du départ
- \ensuremath{%
- \ifboolKV[prespgcd]{AfficheDelimiteurs}%
- {\left\lbrace}%
- {}%
- \begin{array}{@{\,}r@{\;=\;}l@{\;+\;}r}
- %1ère division
- \xdef\ValQ{\fpeval{trunc(\ValA/\ValB,0)}}\xdef\ValR{\fpeval{\ValA-\ValB*\ValQ}}
- \num{\ValA}\uppercase{&}\num{\ValB}\times\num{\ValQ}\uppercase{&}%
- \xintifboolexpr{\ValR == \respgcd}%
- {\PLnoeud{\PLPGCDNoeud1}{\num{\ValR}}}%noeud si c'est le pgcd
- {\num{\ValR}}%
- \xdef\ValA{\ValB}\xdef\ValB{\ValR}%nouvelles valeurs
- \whiledo {\ValR > 0}%
- {%
- \xdef\ValQ{\fpeval{trunc(\ValA/\ValB,0)}}\xdef\ValR{\fpeval{\ValA-\ValB*\ValQ}}%
- \\%
- \num{\ValA}\uppercase{&}\num{\ValB}\times\num{\ValQ}\uppercase{&}%
- \xintifboolexpr{\ValR == \respgcd}%
- {\PLnoeud{\PLPGCDNoeud1}{\num{\ValR}}}%noeud si c'est le pgcd
- {\num{\ValR}}%
- \xdef\ValA{\ValB}\xdef\ValB{\ValR}%nouvelles valeurs
- }%
- \end{array}%
- \ifboolKV[prespgcd]{AfficheDelimiteurs}%
- {\right|}%
- {}%
- \ifboolKV[prespgcd]{AfficheConclusion}%
- {%
- \Rightarrow \PLpgcd\left(\num{#2}\mathpunct{};\num{#3}\right)=\ifboolKV[prespgcd]{CouleurResultat}{\mathcolor{\PLPGCDCouleur}{\num{\respgcd}}}{\num{\respgcd}}%
- }%
- {}%
- }%
- \ifboolKV[prespgcd]{Rectangle}%
- {%
- \begin{tikzpicture}
- \draw[overlay,rounded corners=4pt,\PLPGCDCouleur,thick] ($(\PLPGCDNoeud1.north west)+(-\PLPGCDDecal,\PLPGCDDecal)$) rectangle ($(\PLPGCDNoeud1.south east)+(\PLPGCDDecal,-\PLPGCDDecal)$) ;
- \end{tikzpicture}%
- }{}%
-}
-
-\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/proflycee/tex/ProfLycee.sty b/macros/latex/contrib/proflycee/tex/ProfLycee.sty
index bed6473cca..d2c18333cf 100644
--- a/macros/latex/contrib/proflycee/tex/ProfLycee.sty
+++ b/macros/latex/contrib/proflycee/tex/ProfLycee.sty
@@ -3,7 +3,8 @@
% or later, see http://www.latex-project.org/lppl.txtf
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{ProfLycee}[2023/06/15 2.7.0 Aide pour l'utilisation de LaTeX en lycee]
+\ProvidesPackage{ProfLycee}[2023/08/08 2.7.1 Aide pour l'utilisation de LaTeX en lycee]
+% 2.7.1 Modification du chargement de tcolorbox
% 2.7.0 Ajout de la clé [Frac] pour \AxeyTikz + \FonctionRepartTikz
% 2.6.9 Correction de bugs et améliorations des boîtes de codes
% 2.6.8 Ajout d'une grille (manuelle) pour les histogrammes non réguliers
@@ -105,7 +106,9 @@
\usetikzlibrary{shapes.geometric}
\usetikzlibrary{decorations.pathmorphing}
%tcolorbox
-\RequirePackage[most]{tcolorbox}
+%\RequirePackage[most]{tcolorbox}
+\RequirePackage{tcolorbox}%
+\tcbuselibrary{breakable,fitting,skins,listings,listingsutf8,hooks}
%divers
\RequirePackage{iftex}
diff --git a/macros/latex/contrib/verbatimbox/verbatimbox.pdf b/macros/latex/contrib/verbatimbox/verbatimbox.pdf
index 494eb02444..1f8c180599 100644
--- a/macros/latex/contrib/verbatimbox/verbatimbox.pdf
+++ b/macros/latex/contrib/verbatimbox/verbatimbox.pdf
Binary files differ
diff --git a/macros/latex/contrib/verbatimbox/verbatimbox.sty b/macros/latex/contrib/verbatimbox/verbatimbox.sty
index dbfda1e387..de3e9a83ea 100644
--- a/macros/latex/contrib/verbatimbox/verbatimbox.sty
+++ b/macros/latex/contrib/verbatimbox/verbatimbox.sty
@@ -1,6 +1,6 @@
-\def\verbatimboxVersionNumber{v3.13 }
+\def\verbatimboxVersionNumber{v3.2}
\ProvidesPackage{verbatimbox}
- [2014/03/12 \verbatimboxVersionNumber
+ [2023/08/08 \verbatimboxVersionNumber\
Routines for placing verbatim text into boxes, useful in places where
the verbatim environment is inaccessible. Secondarily, for adding
vertical buffer around an object.]
@@ -44,7 +44,10 @@ vertical buffer around an object.]
% -When using two lengths in \addvbuffer optional argument,
% they MUST be individually in {}, rather than "~" or "\ " between
% 3.13 -Corrected residual bug from V3.11, when \addvbuffer called
-% without an optional argument,
+% without an optional argument.
+% 3.2 -Reworked \addvbuffer definition completely, to avoid use of
+% deprecated \getargsC reference. Instead, new approach employs
+% listofitems package to decode optional argument.
\NeedsTeXFormat{LaTeX2e}
\@ifundefined{verbatim@processline}{\RequirePackage{verbatim}}{}
\usepackage{readarray}
@@ -171,7 +174,7 @@ vertical buffer around an object.]
\if #1t%
% The t option is for outputting the savedverbbox inside a tabular
% environment (else insufficent vertical space above box)
- \addvbuffer[{\boxtopsep} {\boxbottomsep}]{\usebox{\savedverbbox}}%
+ \addvbuffer[\boxtopsep{} \boxbottomsep]{\usebox{\savedverbbox}}%
\else%
\usebox{\savedverbbox}%
\fi%
@@ -198,13 +201,17 @@ vertical buffer around an object.]
\global\newlength\boxtop@sep
\global\newlength\boxbottom@sep
-\newcommand\addvbuffer[2][{\boxtopsep} {\boxbottomsep}]{%
- \getargsC{#1}%
- \setlength\boxtop@sep{\argi}%
- \if1\narg\setlength\boxbottom@sep{\argi}\else%
- \setlength\boxbottom@sep{\argii}\fi%
+\newcommand\addvbuffer[2][\boxtopsep{} \boxbottomsep]{\bgroup%
+ \setsepchar{ }%
+ \readlist\tmplist{#1}%
+ \setlength\boxtop@sep{\tmplist[1]}%
+ \ifnum\listlen\tmplist[]=1
+ \setlength\boxbottom@sep{\tmplist[1]}%
+ \else%
+ \setlength\boxbottom@sep{\tmplist[2]}%
+ \fi%
\add@vbuffer{#2}%
-}
+\egroup}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% The following two "nobox" commands are basically versions of
diff --git a/macros/latex/contrib/verbatimbox/verbatimbox.tex b/macros/latex/contrib/verbatimbox/verbatimbox.tex
index 6ae4998898..c9863c8261 100644
--- a/macros/latex/contrib/verbatimbox/verbatimbox.tex
+++ b/macros/latex/contrib/verbatimbox/verbatimbox.tex
@@ -69,7 +69,7 @@ for adding vertical buffer around an object.
\end{minipage}
}\\
\rule{0em}{2.7em}\large Steven B. Segletes\\
-steven.b.segletes.civ@mail.mil\\
+SSegletes@verizon.net\\
\rule{0em}{1.7em}\today\\
\verbatimboxVersionNumber
\end{center}
@@ -107,10 +107,12 @@ follows:\\\itshape
\tvb\lb\texttt{\upshape t}\rb\\
\bts\eq length\\
\bbs\eq length\\
- \avb\lb length \lb below length\rb\rb\lbr object\rbr\\
+ \avb\lb length\rb\lbr object\rbr{} \textup{OR}\\
+ \mbox{}\hspace{3ex}\avb\lb above-length below-length\rb\lbr object\rbr\\
\bgn\lbr\vrnobox\rbr\lb pre-commands\rb\ldots\edng\lbr\vrnobox\rbr\\
\vbfnobox\lb pre-commands\rb\lbr filename\rbr
-}}\\\upshape
+}}\\[10pt]
+\upshape
In addition, there is a counter, \vln\margenv{\vln}, which contains the
current verbatim line number being processed. It's use as part of
the optional pre-commands to \vrbox, \myvrbox, or {\vbfbox} (in the form
@@ -341,19 +343,20 @@ adding negative buffer \verb|\fbox{\addvbuffer[-5pt -5pt]{A test}}|:
This ability to work on a variety of objects makes {\avb} a powerful
command in many applications.
-\textbf{ATTENTION. This paragraph represents a change as of V3.11, and
-can break backward compatibilty}.
Likewise, if two length variables are to be used in the optional
-argument, the two lengths must be separately braced, with a space in between:
+argument, a non-absorbed space must exist between them.
+Thus, if the first of the two lengths is a macro or length register,
+ an empty group \verb|{}| should be placed at the end of it, so that
+ the subsequent space is not absorbed:
\begin{verbatim}
- \fbox{\addvbuffer[{\baselineskip} {.5\baselineskip}]{A test}}
+ \fbox{\addvbuffer[\baselineskip{} .5\baselineskip]{A test}}
\end{verbatim}
-\rl\fbox{\addvbuffer[{\baselineskip} {.5\baselineskip}]{A test}}
+\rl\fbox{\addvbuffer[\baselineskip{} .5\baselineskip]{A test}}
-{\bfseries One may no longer use a ``\verb|\ |'' hard space to separate the
-two arguments.}
+One may not use a ``\verb|\ |'' hard space to separate the
+two arguments, but instead the method prescribed above.
\subsection{The ``nobox'' Alternatives}
diff --git a/macros/latex/contrib/writeongrid/doc/WriteOnGrid-doc-en.pdf b/macros/latex/contrib/writeongrid/doc/WriteOnGrid-doc-en.pdf
index ea99e67782..8fd6d57bd4 100644
--- a/macros/latex/contrib/writeongrid/doc/WriteOnGrid-doc-en.pdf
+++ b/macros/latex/contrib/writeongrid/doc/WriteOnGrid-doc-en.pdf
Binary files differ
diff --git a/macros/latex/contrib/writeongrid/doc/WriteOnGrid-doc-en.tex b/macros/latex/contrib/writeongrid/doc/WriteOnGrid-doc-en.tex
index 43d5f7ec15..a4eb7773f4 100644
--- a/macros/latex/contrib/writeongrid/doc/WriteOnGrid-doc-en.tex
+++ b/macros/latex/contrib/writeongrid/doc/WriteOnGrid-doc-en.tex
@@ -45,8 +45,8 @@
\setlength{\parindent}{0pt}
\definecolor{LightGray}{gray}{0.9}
-\def\TPversion{0.1.3}
-\def\TPdate{18/03/2023}
+\def\TPversion{0.1.4}
+\def\TPdate{09/08/2023}
\usepackage[most]{tcolorbox}
\tcbuselibrary{minted}
@@ -168,10 +168,14 @@ It’s mostly compatible with \textsf{latex}, \textsf{pdflatex}, \textsf{lualate
\medskip
+For a better compatibility, \texttt{xcolor} isn't charged anymore with options, so the usefull colors are directly defined within the package.
+
+\medskip
+
It loads the following packages and libraries :
\begin{itemize}
- \item \texttt{xcolor} with options \Cle{table,svgnames} ;
+ %\item \texttt{xcolor} with options \Cle{table,svgnames} ;
\item \texttt{tikz} with the librairies \Cle{calc} and \Cle{positionning} ;
\item \texttt{xstring}, \texttt{xparse} and \texttt{simplekv}.
\end{itemize}
@@ -202,7 +206,7 @@ For example, a $5\times5$ grid :
\item with a size 24x5 squares ;
\item with an overtaking by \textcolor{red}{2 squares at the left} and \textcolor{blue}{3 squares at the right} ;
\item with a global margin of \textcolor{orange}{1 square} ;
- \item with a \textcolor{ForestGreen}{\textit{border}} to show the \textit{basis} grid.
+ \item with a \textcolor{green!50!black}{\textit{border}} to show the \textit{basis} grid.
\end{itemize}
\medskip
@@ -215,16 +219,16 @@ For example, a $5\times5$ grid :
\draw[blue,thick,decorate,decoration={brace,amplitude=8pt,mirror}] ({0.5*24},{-0.5*5-0.25})--({0.5*24+3*0.5},{-0.5*5-0.25}) node[midway,below=8pt,font=\small\sffamily] {3C} ;
\draw[thick,decorate,decoration={brace,amplitude=8pt}] ({0.5*24+3*0.5+0.25},0)--({0.5*24+3*0.5+0.25},{-0.5*5}) node[midway,right=8pt,font=\small\sffamily] {5C} ;
\draw[very thick,orange,densely dashed] ({0.5*1},0)--({0.5*1},{-0.5*5}) ;
- \draw[ForestGreen,thick] (0,0) rectangle ({0.5*24},{-0.5*5}) ;
+ \draw[green!50!black,thick] (0,0) rectangle ({0.5*24},{-0.5*5}) ;
\end{tikzpicture}
\vspace{1.25cm}
-The \texttt{tikzpicture} is \textit{bounded} by the \textcolor{ForestGreen}{\textit{border}}, in order to specify overtakings or alignment.
+The \texttt{tikzpicture} is \textit{bounded} by the \textcolor{green!50!black}{\textit{border}}, in order to specify overtakings or alignment.
\smallskip
-Le left-border of the \textcolor{ForestGreen}{\textit{border}} is aligned on the left-margin of the page, so take care of the \texttt{\textbackslash parindent}.
+Le left-border of the \textcolor{green!50!black}{\textit{border}} is aligned on the left-margin of the page, so take care of the \texttt{\textbackslash parindent}.
\subsection{Predefined colors}
@@ -232,10 +236,20 @@ The package \textsf{WriteOnGrid} proposes "shortcuts" for classic colors !
\begin{PresentationCode}{listing only}
\definecolor{TyrianPurple}{rgb}{0.4,0.01,0.24}
+\definecolor{PapierRose}{HTML}{E6B8E6}
+\definecolor{PapierGris}{HTML}{D7E2EE}
%Colors for Seyes
-\def\ColSeyes{Plum!75/LightSteelBlue!50}
+\def\ColSeyes{PapierRose/PapierGris}
%Colors for Ruled
-\def\ColRuled{LightSteelBlue!50/TyrianPurple}
+\def\ColRuled{PapierGris/TyrianPurple}
+\end{PresentationCode}
+
+\begin{PresentationCode}{text only}
+{\tikz \filldraw[TyrianPurple] (0,0) rectangle++ (6,1) node[midway,font=\bfseries\large,text=white] {\verb+TyrianPurple+};}
+
+{\tikz \filldraw[PapierRose] (0,0) rectangle++ (6,1) node[midway,font=\bfseries\large,text=black] {\verb+PapierRose+};}
+
+{\tikz \filldraw[PapierGris] (0,0) rectangle++ (6,1) node[midway,font=\bfseries\large,text=black] {\verb+PapierGris+};}
\end{PresentationCode}
\pagebreak
@@ -275,8 +289,8 @@ The second argument, \textit{optional}, between \texttt{<...>} is the color(s) o
%18x4 big squares, w/o overtaking, Seyes colors, w/o margin/bar
\DispGrid[NumSquares=18x4,Grid=Seyes,DispBar=false]<\ColSeyes>
-%36x8 small squares, overtakings 3/3, LightSteelBlue color
-\DispGrid[NumSquares=36x8,Enlarge=3/3]<LightSteelBlue>
+%36x8 small squares, overtakings 3/3, PapierGris color
+\DispGrid[NumSquares=36x8,Enlarge=3/3]<PapierGris>
%12x3 lines "Ruled", w/o overtakins, Ruled colors, centered, with 2-margin
\begin{center}
@@ -290,7 +304,7 @@ The second argument, \textit{optional}, between \texttt{<...>} is the color(s) o
\medskip
-\DispGrid[NumSquares=36x8,Enlarge=3/3]<LightSteelBlue>
+\DispGrid[NumSquares=36x8,Enlarge=3/3]<PapierGris>
\smallskip
@@ -336,8 +350,8 @@ The second argument, \textit{optional}, between \texttt{<...>} is the color(s) o
\begin{EnvGrid}[NumSquares=18x4,Grid=Seyes,Margin=3]<\ColSeyes>
\end{EnvGrid}
-%36x8 small squares, overtakings 3/3, LightSteelBlue color
-\begin{EnvGrid}[NumSquares=36x8,Enlarge=3/3]<LightSteelBlue>
+%36x8 small squares, overtakings 3/3, PapierGris color
+\begin{EnvGrid}[NumSquares=36x8,Enlarge=3/3]<PapierGris>
\end{EnvGrid}
%12x3 lines "Ruled", w/o overtakins, Ruled colors, centered, with 2-margin
@@ -354,7 +368,7 @@ The second argument, \textit{optional}, between \texttt{<...>} is the color(s) o
\smallskip
-\begin{EnvGrid}[NumSquares=36x8,Enlarge=3/3]<LightSteelBlue>
+\begin{EnvGrid}[NumSquares=36x8,Enlarge=3/3]<PapierGris>
\end{EnvGrid}
\smallskip
@@ -393,7 +407,7 @@ The fisrt argument, \textit{optional}, between \texttt{[...]} give the \Cle{keys
\item \Cle{Scale} to specify the scale of the given text.\hfill~default : \Cle{1}
\end{itemize}
-the second argument, \textit{optional}, between \texttt{<...>} is the horizontal alignment (\Cle{left/center/right}) of the text in the basis \textcolor{ForestGreen}{\textit{border}}, \Cle{left} by default.
+the second argument, \textit{optional}, between \texttt{<...>} is the horizontal alignment (\Cle{left/center/right}) of the text in the basis \textcolor{green!50!black}{\textit{border}}, \Cle{left} by default.
\medskip
@@ -454,7 +468,7 @@ To sum up, they create full paper grid (by preference for \texttt{\textbf{a4pape
\LignePapierRuled[Echelle=1.25,Ligne=1]{C. PIERQUET \hfill LaTeX}
\LignePapierRuled[Echelle=1.25,Ligne=2,Couleur=red]<center>{\underline{\cursive\bfseries Evaluation 3}}
\CadreNoteRuled{3}
- \LignePapierRuled[Echelle=1.25,Ligne=8,Couleur=ForestGreen]{\sffamily\underline{Exercise 1 :}}
+ \LignePapierRuled[Echelle=1.25,Ligne=8,Couleur=green!50!black]{\sffamily\underline{Exercise 1 :}}
\ParagraphePapierRuled[Ligne=9]{\cursive\lipsum[1]}
\ParagraphePapierRuled[Ligne=22]
{%
@@ -473,7 +487,7 @@ To sum up, they create full paper grid (by preference for \texttt{\textbf{a4pape
\LignePapierRuled[Echelle=1.25,Ligne=1]{C. PIERQUET \hfill LaTeX}
\LignePapierRuled[Echelle=1.25,Ligne=2,Couleur=red]<center>{\underline{\cursive\bfseries Evaluation 3}}
\CadreNoteRuled{3}
- \LignePapierRuled[Echelle=1.25,Ligne=8,Couleur=ForestGreen]{\sffamily\underline{Exercise 1 :}}
+ \LignePapierRuled[Echelle=1.25,Ligne=8,Couleur=green!50!black]{\sffamily\underline{Exercise 1 :}}
\ParagraphePapierRuled[Ligne=9]{\cursive\lipsum[1]}
\ParagraphePapierRuled[Ligne=22]
{%
@@ -485,9 +499,10 @@ To sum up, they create full paper grid (by preference for \texttt{\textbf{a4pape
\pagebreak
-
\part*{History}
+\verb|v0.1.4|~:~~~~\texttt{xcolor} isn't loadeed with \textsf{[table,svgnames]})
+
\verb|v0.1.3|~:~~~~Command to display a grid (w/o writing on it)
\verb|v0.1.2|~:~~~~Shortcuts for default colors + small bugfixes
diff --git a/macros/latex/contrib/writeongrid/doc/WriteOnGrid-doc-fr.pdf b/macros/latex/contrib/writeongrid/doc/WriteOnGrid-doc-fr.pdf
index 192f3003b0..4d2e8e30a7 100644
--- a/macros/latex/contrib/writeongrid/doc/WriteOnGrid-doc-fr.pdf
+++ b/macros/latex/contrib/writeongrid/doc/WriteOnGrid-doc-fr.pdf
Binary files differ
diff --git a/macros/latex/contrib/writeongrid/doc/WriteOnGrid-doc-fr.tex b/macros/latex/contrib/writeongrid/doc/WriteOnGrid-doc-fr.tex
index 9de5e053b8..f8eb908f45 100644
--- a/macros/latex/contrib/writeongrid/doc/WriteOnGrid-doc-fr.tex
+++ b/macros/latex/contrib/writeongrid/doc/WriteOnGrid-doc-fr.tex
@@ -48,8 +48,8 @@
\setlength{\parindent}{0pt}
\definecolor{LightGray}{gray}{0.9}
-\def\TPversion{0.1.3}
-\def\TPdate{18 Mars 2023}
+\def\TPversion{0.1.4}
+\def\TPdate{09 août 2023}
\usepackage[most]{tcolorbox}
\tcbuselibrary{minted}
@@ -180,12 +180,16 @@ Il est compatible avec les compilations usuelles en \textsf{latex}, \textsf{pdfl
\medskip
+Pour des soucis de compatibilité, \texttt{xcolor} n'est pas chargé avec des options spécifiques, les couleurs utiles ont été définies directement dans le package.
+
+\medskip
+
Il charge les packages et librairies suivantes :
\begin{itemize}
- \item \texttt{xcolor} avec les options \Cle{table,svgnames} ;
+ %\item \texttt{xcolor} avec les options \Cle{table,svgnames} ;
\item \texttt{tikz} avec les librairies \Cle{calc} et \Cle{positionning} ;
- \item \texttt{xstring}, \texttt{xparse} et \texttt{simplekv}.
+ \item \texttt{xstring} et \texttt{simplekv}.
\end{itemize}
\subsection{\og Philosophie \fg{} du package}
@@ -214,7 +218,7 @@ Ci-dessous on représente une grille $5\times5$ :
\item de taille 24x5 ;
\item avec un élargissement de \textcolor{red}{2 carreaux à gauche} et \textcolor{blue}{3 carreaux à droite} ;
\item en commençant à écrire au niveau du \textcolor{orange}{1\up{er} carreau} ;
- \item un \textcolor{ForestGreen}{\textit{cadre}} est rajouté pour visualiser la grille \textit{de base}.
+ \item un \textcolor{green!50!black}{\textit{cadre}} est rajouté pour visualiser la grille \textit{de base}.
\end{itemize}
\medskip
@@ -227,16 +231,18 @@ Ci-dessous on représente une grille $5\times5$ :
\draw[blue,thick,decorate,decoration={brace,amplitude=8pt,mirror}] ({0.5*24},{-0.5*5-0.25})--({0.5*24+3*0.5},{-0.5*5-0.25}) node[midway,below=8pt,font=\small\sffamily] {3C} ;
\draw[thick,decorate,decoration={brace,amplitude=8pt}] ({0.5*24+3*0.5+0.25},0)--({0.5*24+3*0.5+0.25},{-0.5*5}) node[midway,right=8pt,font=\small\sffamily] {5C} ;
\draw[very thick,orange,densely dashed] ({0.5*1},0)--({0.5*1},{-0.5*5}) ;
- \draw[ForestGreen,thick] (0,0) rectangle ({0.5*24},{-0.5*5}) ;
+ \draw[green!50!black,thick] (0,0) rectangle ({0.5*24},{-0.5*5}) ;
\end{tikzpicture}
\vspace{1.5cm}
-Il est à noter que le figure \texttt{tikzpicture} est \textit{délimitée} par le \textcolor{ForestGreen}{\textit{cadre}}, afin de pouvoir gérer les débordements et l'alignement de l'environnement !
+Il est à noter que le figure \texttt{tikzpicture} est \textit{délimitée} par le \textcolor{green!50!black}{\textit{cadre}}, afin de pouvoir gérer les débordements et l'alignement de l'environnement !
\smallskip
-De plus, le bord gauche du \textcolor{ForestGreen}{\textit{cadre}} est aligné sur la marge gauche de la page, donc la position du quadrillage dépend en partie de la configuration de \texttt{\textbackslash parindent}.
+De plus, le bord gauche du \textcolor{green!50!black}{\textit{cadre}} est aligné sur la marge gauche de la page, donc la position du quadrillage dépend en partie de la configuration de \texttt{\textbackslash parindent}.
+
+\pagebreak
\subsection{Couleurs prédéfinies}
@@ -244,12 +250,24 @@ Le package \textsf{WriteOnGrid} définit également des couleurs pour une saisie
\begin{PresentationCode}{listing only}
\definecolor{TyrianPurple}{rgb}{0.4,0.01,0.24}
+\definecolor{PapierRose}{HTML}{E6B8E6}
+\definecolor{PapierGris}{HTML}{D7E2EE}
%Couleurs adaptées pour le Seyes
-\def\CoulSeyes{Plum!75/LightSteelBlue!50}
+\def\CoulSeyes{PapierRose/PapierGris}
%Couleurs adaptées pour le Ruled
-\def\CoulRuled{LightSteelBlue!50/TyrianPurple}
+\def\CoulRuled{PapierGris/TyrianPurple}
+\end{PresentationCode}
+
+\begin{PresentationCode}{text only}
+{\tikz \filldraw[TyrianPurple] (0,0) rectangle++ (6,1) node[midway,font=\bfseries\large,text=white] {\verb+TyrianPurple+};}
+
+{\tikz \filldraw[PapierRose] (0,0) rectangle++ (6,1) node[midway,font=\bfseries\large,text=black] {\verb+PapierRose+};}
+
+{\tikz \filldraw[PapierGris] (0,0) rectangle++ (6,1) node[midway,font=\bfseries\large,text=black] {\verb+PapierGris+};}
\end{PresentationCode}
+
+
\pagebreak
\section{Grilles individuelles}
@@ -290,8 +308,8 @@ Le second argument, \textit{optionnel}, entre \texttt{<...>} correspond quant à
%18x4 grands carreaux, sans dépassement, couleurs adaptées, sans marge/barre
\AffQuadrillage[NbCarreaux=18x4,Grille=Seyes,AffBarre=false]<\CoulSeyes>
-%36x8 petits carreaux, avec débordements 3/3, couleur LightSteelBlue!50
-\AffQuadrillage[NbCarreaux=36x8,Elargir=3/3]<LightSteelBlue!50>
+%36x8 petits carreaux, avec débordements 3/3, couleur PapierGris
+\AffQuadrillage[NbCarreaux=36x8,Elargir=3/3]<PapierGris>
%12x3 lignes "Ruled", sans débordements, couleur Ruled, centré, avec marge
\begin{center}
@@ -305,7 +323,7 @@ Le second argument, \textit{optionnel}, entre \texttt{<...>} correspond quant à
\medskip
-\AffQuadrillage[NbCarreaux=36x8,Elargir=3/3]<LightSteelBlue!50>
+\AffQuadrillage[NbCarreaux=36x8,Elargir=3/3]<PapierGris>
\begin{center}
\AffQuadrillage[NbCarreaux=12x3,Elargir=2/2,Grille=Ruled,Marge=2]<\CoulRuled>
@@ -352,8 +370,8 @@ Le second argument, \textit{optionnel}, entre \texttt{<...>} correspond quant à
\begin{EnvQuadrillage}[NbCarreaux=18x4,Grille=Seyes,Marge=3]<\CoulSeyes>
\end{EnvQuadrillage}
-%36x8 petits carreaux, avec débordements 3/3, couleur LightSteelBlue!50
-\begin{EnvQuadrillage}[NbCarreaux=36x8,Elargir=3/3]<LightSteelBlue!50>
+%36x8 petits carreaux, avec débordements 3/3, couleur PapierGris
+\begin{EnvQuadrillage}[NbCarreaux=36x8,Elargir=3/3]<PapierGris>
\end{EnvQuadrillage}
%12x3 lignes "Ruled", sans débordements, couleur Ruled, centré, avec marge
@@ -370,7 +388,7 @@ Le second argument, \textit{optionnel}, entre \texttt{<...>} correspond quant à
\smallskip
-\begin{EnvQuadrillage}[NbCarreaux=36x8,Elargir=3/3,Cadre]<LightSteelBlue!50>
+\begin{EnvQuadrillage}[NbCarreaux=36x8,Elargir=3/3,Cadre]<PapierGris>
\end{EnvQuadrillage}
\begin{center}
@@ -407,7 +425,7 @@ Le premier argument, entre \texttt{[...]} propose les \Cle{clés} :
\item \Cle{Echelle} pour spécifier l'échelle du texte à écrire.\hfill~défaut : \Cle{1}
\end{itemize}
-Le deuxième argument, \textit{optionnel}, entre \texttt{<...>} permet de spécifier l'alignement horizontal (parmi \Cle{left/center/right}) du texte dans le \textcolor{ForestGreen}{\textit{cadre}} de base, \Cle{left} par défaut.
+Le deuxième argument, \textit{optionnel}, entre \texttt{<...>} permet de spécifier l'alignement horizontal (parmi \Cle{left/center/right}) du texte dans le \textcolor{green!50!black}{\textit{cadre}} de base, \Cle{left} par défaut.
\medskip
@@ -484,8 +502,8 @@ Tout le placement est géré grâce à un point (fictif), nommé \texttt{(SeyesO
Pour l'environnement de création de la grille, l'argument, \textit{optionnel} et entre \texttt{[...]}, propose :
\begin{itemize}
- \item la clé \Cle{CouleurP} pour la couleur des \textit{gros traits} ;\hfill~défaut : \Cle{Plum!66}
- \item la clé \Cle{CouleurS} pour la couleur des \textit{petits traits} ;\hfill~défaut : \Cle{LightSteelBlue!33}
+ \item la clé \Cle{CouleurP} pour la couleur des \textit{gros traits} ;\hfill~défaut : \Cle{PapierRose}
+ \item la clé \Cle{CouleurS} pour la couleur des \textit{petits traits} ;\hfill~défaut : \Cle{PapierGris}
\item la clé \Cle{CouleurMarge} pour la couleur du trait de la marge ;\hfill~défaut : \Cle{red!75}
\item le booléen \Cle{NumLignes} pour afficher le numéro des lignes (pour aider !). \hfill~défaut : \Cle{false}
\end{itemize}
@@ -539,7 +557,7 @@ La commande \texttt{ParagraphePapierSeyes} permet de saisir des commandes \texti
\ParagraphePapierSeyes[options]<alignement>(ajustement){texte}
\end{PresentationCode}
-\faBomb{} Cet aspect \textit{multilignes} pourra sans doute être problématique pour un placement optimal, donc doit être utilisée avec précautions\ldots
+\faBomb{} Cet aspect \textit{multilignes} pourra sans doute être problématique pour un placement optimal, donc doit être utilisé avec précautions\ldots
\smallskip
@@ -577,7 +595,7 @@ Un exemple \textit{détaillé}, avec le rendu en page suivante, avec quelques co
%cadre de notes
\CadreNoteSeyes{3}
%ligne pour un petit titre
- \LignePapierSeyes[Echelle=1.5,Ligne=9,Couleur=ForestGreen]{\sffamily\underline{Exercice 1 :}}
+ \LignePapierSeyes[Echelle=1.5,Ligne=9,Couleur=green!50!black]{\sffamily\underline{Exercice 1 :}}
%un paragraphe de quelques lignes
\ParagraphePapierSeyes[Ligne=10]{\cursive\lipsum[1]}
%un paragraphe avec des maths
@@ -617,7 +635,7 @@ Un exemple \textit{détaillé}, avec le rendu en page suivante, avec quelques co
%cadre de notes
\CadreNoteSeyes{3}
%ligne pour un petit titre
- \LignePapierSeyes[Echelle=1.5,Ligne=9,Couleur=ForestGreen]{\sffamily\underline{Exercice 1 :}}
+ \LignePapierSeyes[Echelle=1.5,Ligne=9,Couleur=green!50!black]{\sffamily\underline{Exercice 1 :}}
%un paragraphe de quelques lignes
\ParagraphePapierSeyes[Ligne=10]{\cursive\lipsum[1]}
%un paragraphe avec des maths
@@ -687,7 +705,7 @@ Les exemples des pages suivantes ont été obtenus de la même manière que celu
\LignePapierCinqCinq[Echelle=1.25,Ligne=1]{C. PIERQUET \hfill LaTeX}
\LignePapierCinqCinq[Echelle=1.25,Ligne=3,Couleur=red]<center>{\underline{\cursive\bfseries Devoir 2}}
\CadreNoteCinqCinq{4}
- \LignePapierCinqCinq[Echelle=1.25,Ligne=9,Couleur=ForestGreen]{\sffamily\underline{Exercice 1 :}}
+ \LignePapierCinqCinq[Echelle=1.25,Ligne=9,Couleur=green!50!black]{\sffamily\underline{Exercice 1 :}}
\ParagraphePapierCinqCinq[Ligne=11]{\cursive\lipsum[1]}
\ParagraphePapierCinqCinq[Ligne=30]
{%
@@ -704,7 +722,7 @@ Les exemples des pages suivantes ont été obtenus de la même manière que celu
\LignePapierRuled[Echelle=1.25,Ligne=1]{C. PIERQUET \hfill LaTeX}
\LignePapierRuled[Echelle=1.25,Ligne=2,Couleur=red]<center>{\underline{\cursive\bfseries Devoir 3}}
\CadreNoteRuled{3}
- \LignePapierRuled[Echelle=1.25,Ligne=8,Couleur=ForestGreen]{\sffamily\underline{Exercice 1 :}}
+ \LignePapierRuled[Echelle=1.25,Ligne=8,Couleur=green!50!black]{\sffamily\underline{Exercice 1 :}}
\ParagraphePapierRuled[Ligne=9]{\cursive\lipsum[1]}
\ParagraphePapierRuled[Ligne=22]
{%
@@ -722,7 +740,7 @@ Les exemples des pages suivantes ont été obtenus de la même manière que celu
\LignePapierCinqCinq[Echelle=1.25,Ligne=1]{C. PIERQUET \hfill LaTeX}
\LignePapierCinqCinq[Echelle=1.25,Ligne=3,Couleur=red]<center>{\underline{\cursive\bfseries Devoir 2}}
\CadreNoteCinqCinq{4}
- \LignePapierCinqCinq[Echelle=1.25,Ligne=9,Couleur=ForestGreen]{\sffamily\underline{Exercice 1 :}}
+ \LignePapierCinqCinq[Echelle=1.25,Ligne=9,Couleur=green!50!black]{\sffamily\underline{Exercice 1 :}}
\ParagraphePapierCinqCinq[Ligne=11]{\cursive\lipsum[1]}
\ParagraphePapierCinqCinq[Ligne=30]
{%
@@ -739,7 +757,7 @@ Les exemples des pages suivantes ont été obtenus de la même manière que celu
\LignePapierRuled[Echelle=1.25,Ligne=1]{C. PIERQUET \hfill LaTeX}
\LignePapierRuled[Echelle=1.25,Ligne=2,Couleur=red]<center>{\underline{\cursive\bfseries Devoir 3}}
\CadreNoteRuled{3}
- \LignePapierRuled[Echelle=1.25,Ligne=8,Couleur=ForestGreen]{\sffamily\underline{Exercice 1 :}}
+ \LignePapierRuled[Echelle=1.25,Ligne=8,Couleur=green!50!black]{\sffamily\underline{Exercice 1 :}}
\ParagraphePapierRuled[Ligne=9]{\cursive\lipsum[1]}
\ParagraphePapierRuled[Ligne=22]
{%
@@ -752,6 +770,8 @@ Les exemples des pages suivantes ont été obtenus de la même manière que celu
\section{Historique}
+\verb|v0.1.4|~:~~~~Modification de la gestion des couleurs (\texttt{xcolor} n'est plus chargé avec \textsf{[table,svgnames]})
+
\verb|v0.1.3|~:~~~~Ajout d'une commande pour afficher (sans écrire dessus) une grille
\verb|v0.1.2|~:~~~~Ajustement au niveau des couleurs + raccourcis couleurs par défaut
diff --git a/macros/latex/contrib/writeongrid/tex/WriteOnGrid.sty b/macros/latex/contrib/writeongrid/tex/WriteOnGrid.sty
index 3936233bff..f5a6f6adf9 100644
--- a/macros/latex/contrib/writeongrid/tex/WriteOnGrid.sty
+++ b/macros/latex/contrib/writeongrid/tex/WriteOnGrid.sty
@@ -2,28 +2,37 @@
% licence : Released under the LaTeX Project Public License v1.3c or later, see http://www.latex-project.org/lppl.txtf
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{WriteOnGrid}[2023/03/18 v0.1.3 package to write on grid lines]
+\ProvidesPackage{WriteOnGrid}[2023/08/09 v0.1.4 package to write on grid lines]
+% 0.1.4 Suppression des options de xcolor (définition manuelle des couleurs)
% 0.1.3 Ajout de commandes simples pour des mini-quadrillages autonomes, sans texte
% 0.1.2 Modification locale des couleurs + raccourcis couleurs Seyes / Ruled
% 0.1.1 Ajout de la couleur + modifications mineures + grille "Ruled" + grilles pleine page !
% 0.1.0 Version initiale [fr] & [en]
%------Packages utiles
-\RequirePackage[table,svgnames]{xcolor}
+%\RequirePackage[table,svgnames]{xcolor}
\RequirePackage{tikz}
\RequirePackage{simplekv}
\RequirePackage{xstring}
-\RequirePackage{xparse}
%librairies tikz
\usetikzlibrary{calc,positioning}
%------Variables
\newcounter{lgquadri}%compteur des lignes, qui sera incrémenté
+
+%-----Couleurs utiles
\definecolor{TyrianPurple}{rgb}{0.4,0.01,0.24}
-\def\CoulSeyes{Plum!75/LightSteelBlue!50}
-\def\CoulRuled{LightSteelBlue!50/TyrianPurple}
-\def\ColSeyes{Plum!75/LightSteelBlue!50}
-\def\ColRuled{LightSteelBlue!50/TyrianPurple}
+\definecolor{PapierRose}{HTML}{E6B8E6}
+\definecolor{PapierGris}{HTML}{D7E2EE}
+\def\CoulSeyes{PapierRose/PapierGris}
+\def\CoulRuled{PapierGris/TyrianPurple}
+\def\ColSeyes{PapierRose/PapierGris}
+\def\ColRuled{PapierGris/TyrianPurple}
+
+% \def\CoulSeyes{Plum!75/LightSteelBlue!50}
+% \def\CoulRuled{LightSteelBlue!50/TyrianPurple}
+% \def\ColSeyes{Plum!75/LightSteelBlue!50}
+% \def\ColRuled{LightSteelBlue!50/TyrianPurple}
%------Commandes [fr]
\newcommand\PasseLigne{\addtocounter{lgquadri}{1}}%passer une ligne
@@ -299,8 +308,8 @@
CouleurMarge=\xdef\SeyesFullCoulM{#1}
}
\setKVdefault[SeyesFull]{%
- CouleurP=Plum!66,%
- CouleurS=LightSteelBlue!33,%
+ CouleurP=PapierRose,%
+ CouleurS=PapierGris,%
CouleurMarge=red!75,
NumLignes=false
}
@@ -465,7 +474,7 @@
CouleurMarge=\xdef\RuledFullCoulMarge{#1}
}
\setKVdefault[RuledFull]{%
- Couleur=LightSteelBlue!50,%
+ Couleur=PapierGris,%
CouleurMarge=TyrianPurple,%
NumLignes=false
}
diff --git a/macros/luatex/latex/lualinalg/README.txt b/macros/luatex/latex/lualinalg/README.txt
index b53ec649cc..243edf9cca 100644
--- a/macros/luatex/latex/lualinalg/README.txt
+++ b/macros/luatex/latex/lualinalg/README.txt
@@ -1,5 +1,5 @@
# The lualinalg package
-# version 1.5
+# version 1.6
# Authors: Chetan Shirore and Ajit Kumar
# Email: mathsbeauty@gmail.com
diff --git a/macros/luatex/latex/lualinalg/lualinalg.pdf b/macros/luatex/latex/lualinalg/lualinalg.pdf
index 8998c757a2..24f78d5052 100644
--- a/macros/luatex/latex/lualinalg/lualinalg.pdf
+++ b/macros/luatex/latex/lualinalg/lualinalg.pdf
Binary files differ
diff --git a/macros/luatex/latex/lualinalg/lualinalg.sty b/macros/luatex/latex/lualinalg/lualinalg.sty
index b98046f629..5d3e502a8d 100644
--- a/macros/luatex/latex/lualinalg/lualinalg.sty
+++ b/macros/luatex/latex/lualinalg/lualinalg.sty
@@ -1,18 +1,15 @@
-
-% The lualinalg package
-% Authors: Chetan Shirore and Ajit Kumar
-% version 1.5, Date=07-Aug-2023
+% The lualinalg package
+% Authors: Chetan Shirore and Ajit Kumar
+% Version 1.6, Date=09-Aug-2023
% Licensed under LaTeX Project Public License v1.3c or later. The complete license text is available at http://www.latex-project.org/lppl.txt.
-
-\ProvidesPackage{lualinalg}[1.5]
+\ProvidesPackage{lualinalg}[1.6]
\RequirePackage{xkeyval}
\RequirePackage{amsmath}
\RequirePackage{luamaths}
\RequirePackage{luacode}
\begin{luacode*}
-
-- matrices part
matrices = {}
@@ -21,903 +18,904 @@ matrix = {} --module
local matrix_meta = {}
function matrix.new(matrix, rows, columns)
- if type(rows) == "table" then
- for i = 1, #rows do
- if #rows[1] ~= #rows[i] then
- error("Check input matrix.")
- end
- end
- return setmetatable(rows, matrix_meta)
- end
- local mtx = {}
- if columns == "I" then
- for i = 1, rows do
- mtx[i] = {}
- for j = 1, rows do
- if i == j then
- mtx[i][j] = 1
- else
- mtx[i][j] = 0
- end
+ if type(rows) == "table" then
+ for i = 1, #rows do
+ if #rows[1] ~= #rows[i] then
+ error("Check input matrix.")
+ end
+ end
+ return setmetatable(rows, matrix_meta)
+ end
+ local mtx = {}
+ if columns == "I" then
+ for i = 1, rows do
+ mtx[i] = {}
+ for j = 1, rows do
+ if i == j then
+ mtx[i][j] = 1
+ else
+ mtx[i][j] = 0
end
- end
- return setmetatable(mtx, matrix_meta)
- end
+ end
+ end
+ return setmetatable(mtx, matrix_meta)
+ end
end
setmetatable(
- matrix,
- {__call = function(...)
- return matrix.new(...)
- end}
+matrix,
+{__call = function(...)
+return matrix.new(...)
+end}
)
function matrix.add(m1, m2)
- local mtx = {}
- for i = 1, #m1 do
- local m3i = {}
- mtx[i] = m3i
- for j = 1, #m1[1] do
- m3i[j] = m1[i][j] + m2[i][j]
- end
- end
- return setmetatable(mtx, matrix_meta)
+ local mtx = {}
+ for i = 1, #m1 do
+ local m3i = {}
+ mtx[i] = m3i
+ for j = 1, #m1[1] do
+ m3i[j] = m1[i][j] + m2[i][j]
+ end
+ end
+ return setmetatable(mtx, matrix_meta)
end
+
function matrix.sub(m1, m2)
- local mtx = {}
- for i = 1, #m1 do
- local m3i = {}
- mtx[i] = m3i
- for j = 1, #m1[1] do
- m3i[j] = m1[i][j] - m2[i][j]
- end
- end
- return setmetatable(mtx, matrix_meta)
+ local mtx = {}
+ for i = 1, #m1 do
+ local m3i = {}
+ mtx[i] = m3i
+ for j = 1, #m1[1] do
+ m3i[j] = m1[i][j] - m2[i][j]
+ end
+ end
+ return setmetatable(mtx, matrix_meta)
end
function matrix.mulnum(m1, num)
- local mtx = {}
- -- multiply elements with number
- for i = 1, #m1 do
- mtx[i] = {}
- for j = 1, #m1[1] do
- mtx[i][j] = m1[i][j] * num
- end
- end
- return setmetatable(mtx, matrix_meta)
+ local mtx = {}
+ -- multiply elements with number
+ for i = 1, #m1 do
+ mtx[i] = {}
+ for j = 1, #m1[1] do
+ mtx[i][j] = m1[i][j] * num
+ end
+ end
+ return setmetatable(mtx, matrix_meta)
end
function matrix.mul(m1, m2)
- local mtx = {}
- for i = 1, #m1 do
- mtx[i] = {}
- for j = 1, #m2[1] do
- local num = m1[i][1] * m2[1][j]
- for n = 2, #m1[1] do
- num = num + m1[i][n] * m2[n][j]
- end
- mtx[i][j] = num
- end
- end
- return setmetatable(mtx, matrix_meta)
+ local mtx = {}
+ for i = 1, #m1 do
+ mtx[i] = {}
+ for j = 1, #m2[1] do
+ local num = m1[i][1] * m2[1][j]
+ for n = 2, #m1[1] do
+ num = num + m1[i][n] * m2[n][j]
+ end
+ mtx[i][j] = num
+ end
+ end
+ return setmetatable(mtx, matrix_meta)
end
function matrix.swapRows(m1, p, q)
- local mtx = {}
- for i = 1, #m1 do
- mtx[i] = {}
- for j = 1, #m1[1] do
- mtx[i][j] = m1[i][j]
- end
- end
- for j = 1, #m1[1] do
- rowHold = m1[p][j]
- mtx[p][j] = m1[q][j]
- mtx[q][j] = rowHold
- end
- return setmetatable(mtx, matrix_meta)
+ local mtx = {}
+ for i = 1, #m1 do
+ mtx[i] = {}
+ for j = 1, #m1[1] do
+ mtx[i][j] = m1[i][j]
+ end
+ end
+ for j = 1, #m1[1] do
+ rowHold = m1[p][j]
+ mtx[p][j] = m1[q][j]
+ mtx[q][j] = rowHold
+ end
+ return setmetatable(mtx, matrix_meta)
end
function matrix.swapCols(m1, p, q)
- local mtx = {}
- for i = 1, #m1 do
- mtx[i] = {}
- for j = 1, #m1[1] do
- mtx[i][j] = m1[i][j]
- end
- end
- for j = 1, #m1 do
- rowHold = m1[j][p]
- mtx[j][p] = m1[j][q]
- mtx[j][q] = rowHold
- end
- return setmetatable(mtx, matrix_meta)
+ local mtx = {}
+ for i = 1, #m1 do
+ mtx[i] = {}
+ for j = 1, #m1[1] do
+ mtx[i][j] = m1[i][j]
+ end
+ end
+ for j = 1, #m1 do
+ rowHold = m1[j][p]
+ mtx[j][p] = m1[j][q]
+ mtx[j][q] = rowHold
+ end
+ return setmetatable(mtx, matrix_meta)
end
function matrix.mulRow(m1, p, k)
- local mtx = {}
- for i = 1, #m1 do
- mtx[i] = {}
- for j = 1, #m1[1] do
- mtx[i][j] = m1[i][j]
- end
- end
- for j = 1, #m1[1] do
- mtx[p][j] = k * m1[p][j]
- end
- return setmetatable(mtx, matrix_meta)
+ local mtx = {}
+ for i = 1, #m1 do
+ mtx[i] = {}
+ for j = 1, #m1[1] do
+ mtx[i][j] = m1[i][j]
+ end
+ end
+ for j = 1, #m1[1] do
+ mtx[p][j] = k * m1[p][j]
+ end
+ return setmetatable(mtx, matrix_meta)
end
function matrix.mulAddRow(m1, k, p, q)
- if p == q then
- error("Can't operate on same row.")
- end
- local mtx = {}
- for i = 1, #m1 do
- mtx[i] = {}
- for j = 1, #m1[1] do
- mtx[i][j] = m1[i][j]
- end
- end
- for j = 1, #m1[1] do
- mtx[q][j] = k * (mtx[p][j]) + mtx[q][j]
- end
- return setmetatable(mtx, matrix_meta)
+ if p == q then
+ error("Can't operate on same row.")
+ end
+ local mtx = {}
+ for i = 1, #m1 do
+ mtx[i] = {}
+ for j = 1, #m1[1] do
+ mtx[i][j] = m1[i][j]
+ end
+ end
+ for j = 1, #m1[1] do
+ mtx[q][j] = k * (mtx[p][j]) + mtx[q][j]
+ end
+ return setmetatable(mtx, matrix_meta)
end
function matrix.mulCol(m1, p, k)
- local mtx = {}
- for i = 1, #m1 do
- mtx[i] = {}
- for j = 1, #m1[1] do
- mtx[i][j] = m1[i][j]
- end
- end
- for j = 1, #m1 do
- mtx[j][p] = k * m1[j][p]
- end
- return setmetatable(mtx, matrix_meta)
+ local mtx = {}
+ for i = 1, #m1 do
+ mtx[i] = {}
+ for j = 1, #m1[1] do
+ mtx[i][j] = m1[i][j]
+ end
+ end
+ for j = 1, #m1 do
+ mtx[j][p] = k * m1[j][p]
+ end
+ return setmetatable(mtx, matrix_meta)
end
function matrix.mulAddCol(m1, k, p, q)
- if p == q then
- error("Can't operate on same column.")
- end
- local mtx = {}
- for i = 1, #m1 do
- mtx[i] = {}
- for j = 1, #m1[1] do
- mtx[i][j] = m1[i][j]
- end
- end
- for j = 1, #m1 do
- mtx[j][q] = k * mtx[j][p] + mtx[j][q]
- end
- return setmetatable(mtx, matrix_meta)
+ if p == q then
+ error("Can't operate on same column.")
+ end
+ local mtx = {}
+ for i = 1, #m1 do
+ mtx[i] = {}
+ for j = 1, #m1[1] do
+ mtx[i][j] = m1[i][j]
+ end
+ end
+ for j = 1, #m1 do
+ mtx[j][q] = k * mtx[j][p] + mtx[j][q]
+ end
+ return setmetatable(mtx, matrix_meta)
end
function matrix.transpose(m1)
- local mtx = {}
- for i = 1, #m1[1] do
- mtx[i] = {}
- for j = 1, #m1 do
- mtx[i][j] = m1[j][i]
- end
- end
- return setmetatable(mtx, matrix_meta)
+ local mtx = {}
+ for i = 1, #m1[1] do
+ mtx[i] = {}
+ for j = 1, #m1 do
+ mtx[i][j] = m1[j][i]
+ end
+ end
+ return setmetatable(mtx, matrix_meta)
end
function matrix.subm(m1, i1, j1, i2, j2)
- local mtx = {}
- for i = i1, i2 do
- local _i = i - i1 + 1
- mtx[_i] = {}
- for j = j1, j2 do
- local _j = j - j1 + 1
- mtx[_i][_j] = m1[i][j]
- end
- end
- return setmetatable(mtx, matrix_meta)
+ local mtx = {}
+ for i = i1, i2 do
+ local _i = i - i1 + 1
+ mtx[_i] = {}
+ for j = j1, j2 do
+ local _j = j - j1 + 1
+ mtx[_i][_j] = m1[i][j]
+ end
+ end
+ return setmetatable(mtx, matrix_meta)
end
function matrix.concath(m1, m2)
- if #m1 ~= #m2 then
- error("No. of rows must be equal.")
- end
- local mtx = {}
- local offset = #m1[1]
- for i = 1, #m1 do
- mtx[i] = {}
- for j = 1, offset do
- mtx[i][j] = m1[i][j]
- end
- for j = 1, #m2[1] do
- mtx[i][j + offset] = m2[i][j]
- end
- end
- return setmetatable(mtx, matrix_meta)
+ if #m1 ~= #m2 then
+ error("No. of rows must be equal.")
+ end
+ local mtx = {}
+ local offset = #m1[1]
+ for i = 1, #m1 do
+ mtx[i] = {}
+ for j = 1, offset do
+ mtx[i][j] = m1[i][j]
+ end
+ for j = 1, #m2[1] do
+ mtx[i][j + offset] = m2[i][j]
+ end
+ end
+ return setmetatable(mtx, matrix_meta)
end
function matrix.concatv(m1, m2)
- if #m1[1] ~= #m2[1] then
- error("No. of columns must be equal.")
- end
- local mtx = {}
- for i = 1, #m1 do
- mtx[i] = {}
- for j = 1, #m1[1] do
- mtx[i][j] = m1[i][j]
- end
- end
- local offset = #mtx
- for i = 1, #m2 do
- local _i = i + offset
- mtx[_i] = {}
- for j = 1, #m2[1] do
- mtx[_i][j] = m2[i][j]
- end
- end
- return setmetatable(mtx, matrix_meta)
+ if #m1[1] ~= #m2[1] then
+ error("No. of columns must be equal.")
+ end
+ local mtx = {}
+ for i = 1, #m1 do
+ mtx[i] = {}
+ for j = 1, #m1[1] do
+ mtx[i][j] = m1[i][j]
+ end
+ end
+ local offset = #mtx
+ for i = 1, #m2 do
+ local _i = i + offset
+ mtx[_i] = {}
+ for j = 1, #m2[1] do
+ mtx[_i][j] = m2[i][j]
+ end
+ end
+ return setmetatable(mtx, matrix_meta)
end
function matrix.rows(mtx)
- return #mtx
+ return #mtx
end
function matrix.columns(mtx)
- return #mtx[1]
+ return #mtx[1]
end
setmetatable(
- matrix,
- {__call = function(...)
- return matrix.new(...)
- end}
+matrix,
+{__call = function(...)
+return matrix.new(...)
+end}
)
function matrix.getelement(mtx, i, j)
- if mtx[i] and mtx[i][j] then
- return mtx[i][j]
- end
+ if mtx[i] and mtx[i][j] then
+ return mtx[i][j]
+ end
end
function matrix.setelement(mtx, i, j, value)
- if matrix.getelement(mtx, i, j) then
- mtx[i][j] = value
- return value
- end
+ if matrix.getelement(mtx, i, j) then
+ mtx[i][j] = value
+ return value
+ end
end
function matrix.invert(m1)
- if #m1 ~= #m1[1] then
- error("matrix not square")
- end
- if matrix.det(m1) == 0 then
- error("matrix not invertible")
- end
- local mtx = {}
- local idnt = matrix(#m1, "I")
- mtx = matrix.subm(matrix.rref(matrix.concath(m1, idnt)), 1, #m1 + 1, #m1, #m1 + #m1)
- return mtx
+ if #m1 ~= #m1[1] then
+ error("matrix not square")
+ end
+ if matrix.det(m1) == 0 then
+ error("matrix not invertible")
+ end
+ local mtx = {}
+ local idnt = matrix(#m1, "I")
+ mtx = matrix.subm(matrix.rref(matrix.concath(m1, idnt)), 1, #m1 + 1, #m1, #m1 + #m1)
+ return mtx
end
function matrix.trace(m1)
- if #m1 ~= #m1[1] then
- error("matrix not square")
- end
- local sum = 0
+ if #m1 ~= #m1[1] then
+ error("matrix not square")
+ end
+ local sum = 0
- for i = 1, #m1 do
- for j = 1, #m1[1] do
- if i == j then
- sum = sum + m1[i][j]
- end
- end
- end
+ for i = 1, #m1 do
+ for j = 1, #m1[1] do
+ if i == j then
+ sum = sum + m1[i][j]
+ end
+ end
+ end
- return sum
+ return sum
end
function matrix.normF(mtx)
- local result = 0
- for i = 1, #mtx do
- for j = 1, #mtx[1] do
- local e = mtx[i][j]
- result = result + complex.abs(complex(e)) ^ 2
- end
- end
- return complex.sqrt(complex(result))
+ local result = 0
+ for i = 1, #mtx do
+ for j = 1, #mtx[1] do
+ local e = mtx[i][j]
+ result = result + complex.abs(complex(e)) ^ 2
+ end
+ end
+ return complex.sqrt(complex(result))
end
function matrix.normmax(mtx)
- local result = 0
- for i = 1, #mtx do
- for j = 1, #mtx[1] do
- local e = complex.abs(complex(mtx[i][j]))
- if e > result then
- result = e
- end
- end
- end
- return result
+ local result = 0
+ for i = 1, #mtx do
+ for j = 1, #mtx[1] do
+ local e = complex.abs(complex(mtx[i][j]))
+ if e > result then
+ result = e
+ end
+ end
+ end
+ return result
end
function matrix.norminfty(mtx)
- local e = 0
- local result = 0
- for i = 1, #mtx do
- local e = 0
- for j = 1, #mtx[1] do
- e = e + complex.abs(complex(mtx[i][j]))
- end
- if e > result then
- result = e
- end
- end
- return result
+ local e = 0
+ local result = 0
+ for i = 1, #mtx do
+ local e = 0
+ for j = 1, #mtx[1] do
+ e = e + complex.abs(complex(mtx[i][j]))
+ end
+ if e > result then
+ result = e
+ end
+ end
+ return result
end
function matrix.norm1(mtx)
- local e = 0
- local result = 0
- for i = 1, #mtx[1] do
- local e = 0
- for j = 1, #mtx do
- e = e + complex.abs(complex(mtx[j][i]))
- end
- if e > result then
- result = e
- end
- end
- return result
+ local e = 0
+ local result = 0
+ for i = 1, #mtx[1] do
+ local e = 0
+ for j = 1, #mtx do
+ e = e + complex.abs(complex(mtx[j][i]))
+ end
+ if e > result then
+ result = e
+ end
+ end
+ return result
end
function matrix.conjugate(m1)
- local mtx = matrix.copy(m1)
- for i = 1, #mtx do
- for j = 1, #mtx[1] do
- mtx[i][j] = complex.conjugate(complex(mtx[i][j]))
- end
- end
- return setmetatable(mtx, matrix_meta)
+ local mtx = matrix.copy(m1)
+ for i = 1, #mtx do
+ for j = 1, #mtx[1] do
+ mtx[i][j] = complex.conjugate(complex(mtx[i][j]))
+ end
+ end
+ return setmetatable(mtx, matrix_meta)
end
function matrix.conjugateT(m1)
- local mtx = {}
- for i = 1, #m1[1] do
- mtx[i] = {}
- for j = 1, #m1 do
- mtx[i][j] = complex.conjugate(complex(m1[j][i]))
- end
- end
- return setmetatable(mtx, matrix_meta)
+ local mtx = {}
+ for i = 1, #m1[1] do
+ mtx[i] = {}
+ for j = 1, #m1 do
+ mtx[i][j] = complex.conjugate(complex(m1[j][i]))
+ end
+ end
+ return setmetatable(mtx, matrix_meta)
end
function copy(x)
- return type(x) == "table" and x.copy(x) or x
+ return type(x) == "table" and x.copy(x) or x
end
function matrix.pow(m1, num)
- assert(num == math.floor(num), "exponent not an integer")
- if num == 0 then
- return matrix:new(#m1, "I")
- end
- if num < 0 then
- local rank
- m1, rank = matrix.invert(m1)
- if not m1 then
- return m1, rank
- end -- singular
- num = -num
- end
- local mtx = matrix.copy(m1)
- for i = 2, num do
- mtx = matrix.mul(mtx, m1)
- end
- return mtx
+ assert(num == math.floor(num), "exponent not an integer")
+ if num == 0 then
+ return matrix:new(#m1, "I")
+ end
+ if num < 0 then
+ local rank
+ m1, rank = matrix.invert(m1)
+ if not m1 then
+ return m1, rank
+ end -- singular
+ num = -num
+ end
+ local mtx = matrix.copy(m1)
+ for i = 2, num do
+ mtx = matrix.mul(mtx, m1)
+ end
+ return mtx
end
function matrix.createrandom(nrow, ncol, start, stop)
- mtx = {}
- for i = 1, nrow do
- mtx[i] = {}
- for j = 1, ncol do
- mtx[i][j] = math.random(start, stop)
- mtx[i][j] = mtx[i][j] + math.min(math.random(), math.abs(mtx[i][j] - start), math.abs(stop - mtx[i][j]))
- end
- end
- return setmetatable(mtx, matrix_meta)
+ mtx = {}
+ for i = 1, nrow do
+ mtx[i] = {}
+ for j = 1, ncol do
+ mtx[i][j] = math.random(start, stop)
+ mtx[i][j] = mtx[i][j] + math.min(math.random(), math.abs(mtx[i][j] - start), math.abs(stop - mtx[i][j]))
+ end
+ end
+ return setmetatable(mtx, matrix_meta)
end
function matrix.process(m1)
- --m1=load("return "..m1)()
- return matrix.mulnum(m1, 1)
+ --m1=load("return "..m1)()
+ return matrix.mulnum(m1, 1)
end
function matrix.det(m1)
- assert(#m1 == #m1[1], "matrix not square")
-
- local size = #m1
-
- if size == 1 then
- return m1[1][1]
- end
-
- if size == 2 then
- return m1[1][1] * m1[2][2] - m1[2][1] * m1[1][2]
- end
-
- if size == 3 then
- return (m1[1][1] * m1[2][2] * m1[3][3] + m1[1][2] * m1[2][3] * m1[3][1] + m1[1][3] * m1[2][1] * m1[3][2] -
- m1[1][3] * m1[2][2] * m1[3][1] -
- m1[1][1] * m1[2][3] * m1[3][2] -
- m1[1][2] * m1[2][1] * m1[3][3])
- end
-
- local e = m1[1][1]
- local zero = type(e) == "table" and e.zero or 0
- local norm2 = type(e) == "table" and e.norm2 or number_norm2
-
- local mtx = matrix.copy(m1)
- local det = 1
-
- for j = 1, #mtx[1] do
- local rows = #mtx
- local subdet, xrow
- for i = 1, rows do
- local e = mtx[i][j]
- if not subdet then
- if e ~= zero then
- subdet, xrow = e, i
- end
- elseif e ~= zero and math.abs(norm2(e) - 1) < math.abs(norm2(subdet) - 1) then
- subdet, xrow = e, i
+ assert(#m1 == #m1[1], "matrix not square")
+
+ local size = #m1
+
+ if size == 1 then
+ return m1[1][1]
+ end
+
+ if size == 2 then
+ return m1[1][1] * m1[2][2] - m1[2][1] * m1[1][2]
+ end
+
+ if size == 3 then
+ return (m1[1][1] * m1[2][2] * m1[3][3] + m1[1][2] * m1[2][3] * m1[3][1] + m1[1][3] * m1[2][1] * m1[3][2] -
+ m1[1][3] * m1[2][2] * m1[3][1] -
+ m1[1][1] * m1[2][3] * m1[3][2] -
+ m1[1][2] * m1[2][1] * m1[3][3])
+ end
+
+ local e = m1[1][1]
+ local zero = type(e) == "table" and e.zero or 0
+ local norm2 = type(e) == "table" and e.norm2 or number_norm2
+
+ local mtx = matrix.copy(m1)
+ local det = 1
+
+ for j = 1, #mtx[1] do
+ local rows = #mtx
+ local subdet, xrow
+ for i = 1, rows do
+ local e = mtx[i][j]
+ if not subdet then
+ if e ~= zero then
+ subdet, xrow = e, i
end
- end
- if subdet then
- if xrow ~= rows then
- mtx[rows], mtx[xrow] = mtx[xrow], mtx[rows]
- det = -det
+ elseif e ~= zero and math.abs(norm2(e) - 1) < math.abs(norm2(subdet) - 1) then
+ subdet, xrow = e, i
+ end
+ end
+ if subdet then
+ if xrow ~= rows then
+ mtx[rows], mtx[xrow] = mtx[xrow], mtx[rows]
+ det = -det
+ end
+
+ for i = 1, rows - 1 do
+ if mtx[i][j] ~= zero then
+ local factor = mtx[i][j] / subdet
+ for n = j + 1, #mtx[1] do
+ mtx[i][n] = mtx[i][n] - factor * mtx[rows][n]
+ end
end
+ end
+ if math.fmod(rows, 2) == 0 then
+ det = -det
+ end
+ det = det * subdet
+ table.remove(mtx)
+ else
+ return det * 0
+ end
+ end
- for i = 1, rows - 1 do
- if mtx[i][j] ~= zero then
- local factor = mtx[i][j] / subdet
- for n = j + 1, #mtx[1] do
- mtx[i][n] = mtx[i][n] - factor * mtx[rows][n]
- end
- end
- end
- if math.fmod(rows, 2) == 0 then
- det = -det
- end
- det = det * subdet
- table.remove(mtx)
- else
- return det * 0
- end
- end
-
- return det
+ return det
end
function matrix.copy(m1)
- local mtx = {}
- for i = 1, #m1 do
- mtx[i] = {}
- for j = 1, #m1[1] do
- mtx[i][j] = m1[i][j]
- end
- end
- return setmetatable(mtx, matrix_meta)
+ local mtx = {}
+ for i = 1, #m1 do
+ mtx[i] = {}
+ for j = 1, #m1[1] do
+ mtx[i][j] = m1[i][j]
+ end
+ end
+ return setmetatable(mtx, matrix_meta)
end
norm2 = type(e) == "table" and e.norm2 or number_norm2
function number_norm2(x)
- return x * x
+ return x * x
end
function matrix.op(exp)
- return load("return " .. exp, exp, "t", matrices)()
+ return load("return " .. exp, exp, "t", matrices)()
end
function matrix.rref(mtx)
- local mtx = matrix.copy(mtx)
- step = 1
- lead = 1
- rowCount = #mtx
- columnCount = #mtx[1]
- for r = 1, rowCount do
- if lead > columnCount then
- return mtx
- end
- i = r
- while (mtx[i][lead] == 0) do
- i = i + 1
- if (i - 1 == rowCount) then
- i = r
- if (columnCount == lead) then
- return mtx
- end
- lead = lead + 1
- end
- end
-
- if i ~= r then
- mtx = matrix.swapRows(mtx, i, r)
- end
-
- local m = mtx[r][lead]
- if (mtx[r][lead] ~= 0) then
- for u = 1, columnCount do
- mtx[r][u] = mtx[r][u] / m
+ local mtx = matrix.copy(mtx)
+ step = 1
+ lead = 1
+ rowCount = #mtx
+ columnCount = #mtx[1]
+ for r = 1, rowCount do
+ if lead > columnCount then
+ return mtx
+ end
+ i = r
+ while (mtx[i][lead] == 0) do
+ i = i + 1
+ if (i - 1 == rowCount) then
+ i = r
+ if (columnCount == lead) then
+ return mtx
end
- end
- for i = 1, rowCount do
- local m = mtx[i][lead]
- if (i ~= r) then
- for v = 1, columnCount do
- mtx[i][v] = mtx[i][v] + ((-m) * (mtx[r][v]))
- end
+ lead = lead + 1
+ end
+ end
+
+ if i ~= r then
+ mtx = matrix.swapRows(mtx, i, r)
+ end
+
+ local m = mtx[r][lead]
+ if (mtx[r][lead] ~= 0) then
+ for u = 1, columnCount do
+ mtx[r][u] = mtx[r][u] / m
+ end
+ end
+ for i = 1, rowCount do
+ local m = mtx[i][lead]
+ if (i ~= r) then
+ for v = 1, columnCount do
+ mtx[i][v] = mtx[i][v] + ((-m) * (mtx[r][v]))
end
- end
- lead = lead + 1
- end
- return mtx
+ end
+ end
+ lead = lead + 1
+ end
+ return mtx
end
function matrix.rref0E(mtx, fom, dignum)
- local strng = ""
- truncate = truncate or 6
- local mtx = matrix.copy(mtx)
- step = 1
- lead = 1
- stepCnt = 0
- rowCount = #mtx
- columnCount = #mtx[1]
- for r = 1, rowCount do
- if lead > columnCount then
- return mtx
- end
- i = r
- while (mtx[i][lead] == 0) do
- i = i + 1
- if (i - 1 == rowCount) then
- i = r
- if (columnCount == lead) then
- if stepCnt == 0 then
- stepCnt = stepCnt + 1
- strng = strng .. "Step " .. tostring(stepCnt) ".$$" .. tostring(matrix.show(mtx, fom, dignum))
- return strng
- end
- return strng
- end
- lead = lead + 1
+ local strng = ""
+ truncate = truncate or 6
+ local mtx = matrix.copy(mtx)
+ step = 1
+ lead = 1
+ stepCnt = 0
+ rowCount = #mtx
+ columnCount = #mtx[1]
+ for r = 1, rowCount do
+ if lead > columnCount then
+ return mtx
+ end
+ i = r
+ while (mtx[i][lead] == 0) do
+ i = i + 1
+ if (i - 1 == rowCount) then
+ i = r
+ if (columnCount == lead) then
+ if stepCnt == 0 then
+ stepCnt = stepCnt + 1
+ strng = strng .. "Step " .. tostring(stepCnt) ".$$" .. tostring(matrix.show(mtx, fom, dignum))
+ return strng
+ end
+ return strng
end
- end
-
- if i ~= r then
- mtx = matrix.swapRows(mtx, i, r)
- stepCnt = stepCnt + 1
- strng =
- strng ..
- "Step " ..
- tostring(stepCnt) ..
- ": Interchange rows " ..
- tostring(i) ..
- " and " .. tostring(r) .. ".$$" .. tostring(matrix.show(mtx, fom, dignum)) .. "$$"
- end
-
- local m = mtx[r][lead]
- if (mtx[r][lead] ~= 0) then
- for u = 1, columnCount do
- mtx[r][u] = mtx[r][u] / m
+ lead = lead + 1
+ end
+ end
+
+ if i ~= r then
+ mtx = matrix.swapRows(mtx, i, r)
+ stepCnt = stepCnt + 1
+ strng =
+ strng ..
+ "Step " ..
+ tostring(stepCnt) ..
+ ": Interchange rows " ..
+ tostring(i) ..
+ " and " .. tostring(r) .. ".$$" .. tostring(matrix.show(mtx, fom, dignum)) .. "$$"
+ end
+
+ local m = mtx[r][lead]
+ if (mtx[r][lead] ~= 0) then
+ for u = 1, columnCount do
+ mtx[r][u] = mtx[r][u] / m
+ end
+ if m ~= 1.0 then
+ if m ~= complex("1.0") then
+ stepCnt = stepCnt + 1
+ strng =
+ strng ..
+ "Step " ..
+ tostring(stepCnt) ..
+ ": Divide row " ..
+ tostring(r) ..
+ " by $" ..
+ tostring(complex.round(complex(m), dignum)) ..
+ "$.$$" .. tostring(matrix.show(mtx, fom, dignum)) .. "$$"
end
- if m ~= 1.0 then
- if m ~= complex("1.0") then
- stepCnt = stepCnt + 1
- strng =
- strng ..
- "Step " ..
- tostring(stepCnt) ..
- ": Divide row " ..
- tostring(r) ..
- " by $" ..
- tostring(complex.round(complex(m), dignum)) ..
- "$.$$" .. tostring(matrix.show(mtx, fom, dignum)) .. "$$"
- end
+ end
+ end
+ for i = 1, rowCount do
+ local m = mtx[i][lead]
+ if (i ~= r) then
+ for v = 1, columnCount do
+ mtx[i][v] = mtx[i][v] + ((-m) * (mtx[r][v]))
end
- end
- for i = 1, rowCount do
- local m = mtx[i][lead]
- if (i ~= r) then
- for v = 1, columnCount do
- mtx[i][v] = mtx[i][v] + ((-m) * (mtx[r][v]))
- end
- if m ~= 0 then
- if m ~= complex("0.0") then
- stepCnt = stepCnt + 1
- strng =
- strng ..
- "Step " ..
- tostring(stepCnt) ..
- ": Multiply row " ..
- tostring(r) ..
- " by $" ..
- tostring(complex.round(complex(m), dignum)) ..
- "$ and subtract it from row " ..
- tostring(i) ..
- ".$$" .. tostring(matrix.show(mtx, fom, dignum)) .. "$$"
- end
- end
+ if m ~= 0 then
+ if m ~= complex("0.0") then
+ stepCnt = stepCnt + 1
+ strng =
+ strng ..
+ "Step " ..
+ tostring(stepCnt) ..
+ ": Multiply row " ..
+ tostring(r) ..
+ " by $" ..
+ tostring(complex.round(complex(m), dignum)) ..
+ "$ and subtract it from row " ..
+ tostring(i) ..
+ ".$$" .. tostring(matrix.show(mtx, fom, dignum)) .. "$$"
+ end
end
- end
- lead = lead + 1
- end
- return strng
+ end
+ end
+ lead = lead + 1
+ end
+ return strng
end
function matrix.GaussJordan(mtx, augmt)
- local mtx = matrix.copy(mtx)
- local augmt = matrix.copy(augmt)
- step = 1
- lead = 1
- rowCount = #mtx
- columnCount = #mtx[1]
- for r = 1, rowCount do
- if lead > columnCount then
- return matrix.concath(mtx, augmt)
- end
- i = r
- while (mtx[i][lead] == 0) do
- i = i + 1
- if (i - 1 == rowCount) then
- i = r
- if (columnCount == lead) then
- return matrix.concath(mtx, augmt)
- end
- lead = lead + 1
+ local mtx = matrix.copy(mtx)
+ local augmt = matrix.copy(augmt)
+ step = 1
+ lead = 1
+ rowCount = #mtx
+ columnCount = #mtx[1]
+ for r = 1, rowCount do
+ if lead > columnCount then
+ return matrix.concath(mtx, augmt)
+ end
+ i = r
+ while (mtx[i][lead] == 0) do
+ i = i + 1
+ if (i - 1 == rowCount) then
+ i = r
+ if (columnCount == lead) then
+ return matrix.concath(mtx, augmt)
end
- end
-
- if i ~= r then
- mtx = matrix.swapRows(mtx, i, r)
- augmt = matrix.swapRows(augmt, i, r)
- end
-
- local m = mtx[r][lead]
- if (mtx[r][lead] ~= 0) then
- for u = 1, columnCount do
- mtx[r][u] = mtx[r][u] / m
- end
- augmt[r][1] = augmt[r][1] / m
- end
- for i = 1, rowCount do
- local m = mtx[i][lead]
- if (i ~= r) then
- for v = 1, columnCount do
- mtx[i][v] = mtx[i][v] - m * mtx[r][v]
- end
- augmt[i][1] = augmt[i][1] - m * augmt[r][1]
+ lead = lead + 1
+ end
+ end
+
+ if i ~= r then
+ mtx = matrix.swapRows(mtx, i, r)
+ augmt = matrix.swapRows(augmt, i, r)
+ end
+
+ local m = mtx[r][lead]
+ if (mtx[r][lead] ~= 0) then
+ for u = 1, columnCount do
+ mtx[r][u] = mtx[r][u] / m
+ end
+ augmt[r][1] = augmt[r][1] / m
+ end
+ for i = 1, rowCount do
+ local m = mtx[i][lead]
+ if (i ~= r) then
+ for v = 1, columnCount do
+ mtx[i][v] = mtx[i][v] - m * mtx[r][v]
end
- end
- lead = lead + 1
- end
- return matrix.concath(mtx, augmt)
+ augmt[i][1] = augmt[i][1] - m * augmt[r][1]
+ end
+ end
+ lead = lead + 1
+ end
+ return matrix.concath(mtx, augmt)
end
function matrix.gauss0E(mtx, augmt, fom, dignum)
- local strng = ""
- truncate = truncate or 6
- local mtx = matrix.copy(mtx)
- local augmt = matrix.copy(augmt)
- if matrix.columns(augmt) ~= 1 then
- error("The second matrix should have only 1 column.")
- end
- step = 1
- lead = 1
- stepCnt = 0
- rowCount = #mtx
- columnCount = #mtx[1]
- for r = 1, rowCount do
- if lead > columnCount then
- return mtx
- end
- i = r
- while (mtx[i][lead] == 0) do
- i = i + 1
- if (i - 1 == rowCount) then
- i = r
- if (columnCount == lead) then
- if stepCnt == 0 then
- stepCnt = stepCnt + 1
- strng =
- strng ..
- "Step " ..
- tostring(stepCnt) ".$$" ..
- tostring(matrix.show(matrix.concath(mtx, augmt), fom, dignum))
- return strng
- end
- return strng
- end
- lead = lead + 1
+ local strng = ""
+ truncate = truncate or 6
+ local mtx = matrix.copy(mtx)
+ local augmt = matrix.copy(augmt)
+ if matrix.columns(augmt) ~= 1 then
+ error("The second matrix should have only 1 column.")
+ end
+ step = 1
+ lead = 1
+ stepCnt = 0
+ rowCount = #mtx
+ columnCount = #mtx[1]
+ for r = 1, rowCount do
+ if lead > columnCount then
+ return mtx
+ end
+ i = r
+ while (mtx[i][lead] == 0) do
+ i = i + 1
+ if (i - 1 == rowCount) then
+ i = r
+ if (columnCount == lead) then
+ if stepCnt == 0 then
+ stepCnt = stepCnt + 1
+ strng =
+ strng ..
+ "Step " ..
+ tostring(stepCnt) ".$$" ..
+ tostring(matrix.show(matrix.concath(mtx, augmt), fom, dignum))
+ return strng
+ end
+ return strng
end
- end
-
- if i ~= r then
- mtx = matrix.swapRows(mtx, i, r)
- augmt = matrix.swapRows(augmt, i, r)
- stepCnt = stepCnt + 1
- strng =
- strng ..
- "Step " ..
- tostring(stepCnt) ..
- ": Interchange rows " ..
- tostring(i) ..
- " and " .. tostring(r) .. ".$$" .. tostring(matrix.show(mtx, fom, dignum)) .. "$$"
- end
-
- local m = mtx[r][lead]
- if (mtx[r][lead] ~= 0) then
- for u = 1, columnCount do
- mtx[r][u] = mtx[r][u] / m
+ lead = lead + 1
+ end
+ end
+
+ if i ~= r then
+ mtx = matrix.swapRows(mtx, i, r)
+ augmt = matrix.swapRows(augmt, i, r)
+ stepCnt = stepCnt + 1
+ strng =
+ strng ..
+ "Step " ..
+ tostring(stepCnt) ..
+ ": Interchange rows " ..
+ tostring(i) ..
+ " and " .. tostring(r) .. ".$$" .. tostring(matrix.show(mtx, fom, dignum)) .. "$$"
+ end
+
+ local m = mtx[r][lead]
+ if (mtx[r][lead] ~= 0) then
+ for u = 1, columnCount do
+ mtx[r][u] = mtx[r][u] / m
+ end
+ augmt[r][1] = augmt[r][1] / m
+ if m ~= 1.0 then
+ if m ~= complex("1.0") then
+ stepCnt = stepCnt + 1
+ strng =
+ strng ..
+ "Step " ..
+ tostring(stepCnt) ..
+ ": Divide row " ..
+ tostring(r) ..
+ " by $" ..
+ tostring(complex.round(complex(m), dignum)) ..
+ "$. $$" ..
+ tostring(matrix.show(matrix.concath(mtx, augmt), fom, dignum)) ..
+ "$$"
end
- augmt[r][1] = augmt[r][1] / m
- if m ~= 1.0 then
- if m ~= complex("1.0") then
- stepCnt = stepCnt + 1
- strng =
- strng ..
- "Step " ..
- tostring(stepCnt) ..
- ": Divide row " ..
- tostring(r) ..
- " by $" ..
- tostring(complex.round(complex(m), dignum)) ..
- "$. $$" ..
- tostring(matrix.show(matrix.concath(mtx, augmt), fom, dignum)) ..
- "$$"
- end
+ end
+ end
+ for i = 1, rowCount do
+ local m = mtx[i][lead]
+ if (i ~= r) then
+ for v = 1, columnCount do
+ mtx[i][v] = mtx[i][v] - m * mtx[r][v]
end
- end
- for i = 1, rowCount do
- local m = mtx[i][lead]
- if (i ~= r) then
- for v = 1, columnCount do
- mtx[i][v] = mtx[i][v] - m * mtx[r][v]
- end
- augmt[i][1] = augmt[i][1] - m * augmt[r][1]
- if m ~= 0 then
- if m ~= complex("0.0") then
- stepCnt = stepCnt + 1
- strng =
- strng ..
- "Step " ..
- tostring(stepCnt) ..
- ": Multiply row " ..
- tostring(r) ..
- " by $" ..
- tostring(complex.round(complex(m), dignum)) ..
- "$ and subtract it from row " ..
- tostring(i) ..
- ".$$" ..
- tostring(
- matrix.show(matrix.concath(mtx, augmt), fom, dignum)
- ) ..
- "$$"
- end
- end
+ augmt[i][1] = augmt[i][1] - m * augmt[r][1]
+ if m ~= 0 then
+ if m ~= complex("0.0") then
+ stepCnt = stepCnt + 1
+ strng =
+ strng ..
+ "Step " ..
+ tostring(stepCnt) ..
+ ": Multiply row " ..
+ tostring(r) ..
+ " by $" ..
+ tostring(complex.round(complex(m), dignum)) ..
+ "$ and subtract it from row " ..
+ tostring(i) ..
+ ".$$" ..
+ tostring(
+ matrix.show(matrix.concath(mtx, augmt), fom, dignum)
+ ) ..
+ "$$"
+ end
end
- end
- lead = lead + 1
- end
- return strng
+ end
+ end
+ lead = lead + 1
+ end
+ return strng
end
function matrix.rank(m1)
- local mtx = {}
- mtx = matrix.rref(m1)
- rank = #mtx
- for i = 1, #mtx do
- if CheckEqual(mtx[i], 0) then
- rank = rank - 1
- end
- end
- return rank
+ local mtx = {}
+ mtx = matrix.rref(m1)
+ rank = #mtx
+ for i = 1, #mtx do
+ if CheckEqual(mtx[i], 0) then
+ rank = rank - 1
+ end
+ end
+ return rank
end
function CheckEqual(Values, Number)
- local CheckEqual = true
- local i = 1
+ local CheckEqual = true
+ local i = 1
- while (CheckEqual and (i <= #Values)) do
- if Values[i] == Number then
- i = i + 1
- else
- CheckEqual = false
- end
- end
+ while (CheckEqual and (i <= #Values)) do
+ if Values[i] == Number then
+ i = i + 1
+ else
+ CheckEqual = false
+ end
+ end
- return CheckEqual
+ return CheckEqual
end
function matrix.replace(m1, func, ...)
- local mtx = {}
- for i = 1, #m1 do
- local m1i = m1[i]
- local mtxi = {}
- for j = 1, #m1i do
- mtxi[j] = func(m1i[j], ...)
- end
- mtx[i] = mtxi
- end
- return setmetatable(mtx, matrix_meta)
+ local mtx = {}
+ for i = 1, #m1 do
+ local m1i = m1[i]
+ local mtxi = {}
+ for j = 1, #m1i do
+ mtxi[j] = func(m1i[j], ...)
+ end
+ mtx[i] = mtxi
+ end
+ return setmetatable(mtx, matrix_meta)
end
function matrix.show(mtx, format, dig)
- mtx = matrix.process(mtx)
- local format = format or "bmatrix"
- local dig = dig or 6
- local str = "\\begin{" .. format .. "}"
- for i = 1, #mtx do
- str = str .. "\t" .. complex.round(complex(mtx[i][1]), dig)
- for j = 2, #mtx[1] do
- str = str .. " & " .. complex.round(complex(mtx[i][j]), dig)
- end
- if i == #mtx then
- str = str .. " \\\\ "
- else
- str = str .. " \\\\ "
- end
- end
- return str .. "\\end{" .. format .. "} "
+ mtx = matrix.process(mtx)
+ local format = format or "bmatrix"
+ local dig = dig or 6
+ local str = "\\begin{" .. format .. "}"
+ for i = 1, #mtx do
+ str = str .. "\t" .. complex.round(complex(mtx[i][1]), dig)
+ for j = 2, #mtx[1] do
+ str = str .. " & " .. complex.round(complex(mtx[i][j]), dig)
+ end
+ if i == #mtx then
+ str = str .. " \\\\ "
+ else
+ str = str .. " \\\\ "
+ end
+ end
+ return str .. "\\end{" .. format .. "} "
end
matrix_meta.__tostring = function(...)
- return matrix.show(...)
+ return matrix.show(...)
end
matrix_meta.__add = function(...)
- return matrix.add(...)
+ return matrix.add(...)
end
matrix_meta.__sub = function(...)
- return matrix.sub(...)
+ return matrix.sub(...)
end
matrix_meta.__mul = function(m1, m2)
- if getmetatable(m1) ~= matrix_meta then
- return matrix.mulnum(m2, m1)
- elseif getmetatable(m2) ~= matrix_meta then
- return matrix.mulnum(m1, m2)
- end
- return matrix.mul(m1, m2)
+ if getmetatable(m1) ~= matrix_meta then
+ return matrix.mulnum(m2, m1)
+ elseif getmetatable(m2) ~= matrix_meta then
+ return matrix.mulnum(m1, m2)
+ end
+ return matrix.mul(m1, m2)
end
matrix_meta.__div = function(m1, m2)
- if getmetatable(m1) ~= matrix_meta then
- return matrix.mulnum(matrix.invert(m2), m1)
- elseif getmetatable(m2) ~= matrix_meta then
- return matrix.divnum(m1, m2)
- end
- return matrix.div(m1, m2)
+ if getmetatable(m1) ~= matrix_meta then
+ return matrix.mulnum(matrix.invert(m2), m1)
+ elseif getmetatable(m2) ~= matrix_meta then
+ return matrix.divnum(m1, m2)
+end
+ return matrix.div(m1, m2)
end
matrix_meta.__unm = function(mtx)
- return matrix.mulnum(mtx, -1)
+ return matrix.mulnum(mtx, -1)
end
local option = {
- ["*"] = function(m1)
- return matrix.conjugate(m1)
- end,
- ["T"] = function(m1)
- return matrix.transpose(m1)
- end
+ ["*"] = function(m1)
+ return matrix.conjugate(m1)
+end,
+["T"] = function(m1)
+ return matrix.transpose(m1)
+end
}
matrix_meta.__pow = function(m1, opt)
- return option[opt] and option[opt](m1) or matrix.pow(m1, opt)
+ return option[opt] and option[opt](m1) or matrix.pow(m1, opt)
end
-- vector part
@@ -950,10 +948,10 @@ function vector.new(vector, rows, columns, n)
end
setmetatable(
- vector,
- {__call = function(...)
- return vector.new(...)
- end}
+vector,
+{__call = function(...)
+return vector.new(...)
+end}
)
function vector.add(v1, v2)
@@ -1241,9 +1239,9 @@ end
vector_meta.__mul = function(v1, v2)
if getmetatable(v1) ~= vector_meta then
- return vector.mulnum(v2, v1)
+ return vector.mulnum(v2, v1)
elseif getmetatable(v2) ~= vector_meta then
- return vector.mulnum(v1, v2)
+ return vector.mulnum(v1, v2)
end
return vector.dot(v1, v2)
end
@@ -1259,9 +1257,9 @@ end
% matrix latex commands
\newcommand\matrixNew[2]{%
- \directlua{%
- matrices['#1'] = matrix(#2)
- }%
+\directlua{%
+matrices['#1'] = matrix(#2)
+}%
}
% ========= KEY DEFINITIONS =========
@@ -1271,222 +1269,210 @@ end
\setkeys{matrixop}{type=bmatrix,truncate=6}%
\newcommand{\matrixPrint}[2][]{%
- \begingroup%
- \setkeys{matrixop}{#1}
- \directlua{tex.sprint(matrix.show(matrices['#2'],"\mop@type",\mop@truncate))}
- %
- \endgroup%
+\begingroup%
+\setkeys{matrixop}{#1}
+\directlua{tex.sprint(matrix.show(matrices['#2'],"\mop@type",\mop@truncate))}
+%
+\endgroup%
}
\newcommand\matrixOp[2]{%
- \directlua{%
- matrices['#1'] = matrix.op('#2')
- }%
+\directlua{%
+matrices['#1'] = matrix.op('#2')
+}%
}
\newcommand\matrixAdd[3]{%
- \directlua{%
- matrices['#1'] = matrix.add(matrices['#2'],matrices['#3'])
- }%
+\directlua{%
+matrices['#1'] = matrix.add(matrices['#2'],matrices['#3'])
+}%
}
\newcommand\matrixSub[3]{%
- \directlua{%
- matrices['#1'] = matrix.sub(matrices['#2'],matrices['#3'])
- }%
+\directlua{%
+matrices['#1'] = matrix.sub(matrices['#2'],matrices['#3'])
+}%
}
\newcommand\matrixMulNum[3]{%
- \directlua{%
- matrices['#1'] = matrix.mulnum(matrices['#3'],#2)
- }%
+\directlua{%
+matrices['#1'] = matrix.mulnum(matrices['#3'],#2)
+}%
}
\newcommand\matrixMul[3]{%
- \directlua{%
- matrices['#1'] = matrix.mul(matrices['#2'],matrices['#3'])
- }%
+\directlua{%
+matrices['#1'] = matrix.mul(matrices['#2'],matrices['#3'])
+}%
}
\newcommand\matrixSwapRows[4]{%
- \directlua{%
- matrices['#1'] = matrix.swapRows(matrices['#2'],#3,#4)
- }%
+\directlua{%
+matrices['#1'] = matrix.swapRows(matrices['#2'],#3,#4)
+}%
}
\newcommand\matrixSwapCols[4]{%
- \directlua{%
- matrices['#1'] = matrix.swapCols(matrices['#2'],#3,#4)
- }%
+\directlua{%
+matrices['#1'] = matrix.swapCols(matrices['#2'],#3,#4)
+}%
}
\newcommand\matrixMulRow[4]{%
- \directlua{%
- matrices['#1'] = matrix.mulRow(matrices['#2'],#3,#4)
- }%
+\directlua{%
+matrices['#1'] = matrix.mulRow(matrices['#2'],#3,#4)
+}%
}
\newcommand\matrixMulCol[4]{%
- \directlua{%
- matrices['#1'] = matrix.mulCol(matrices['#2'],#3,#4)
- }%
+\directlua{%
+matrices['#1'] = matrix.mulCol(matrices['#2'],#3,#4)
+}%
}
\newcommand\matrixMulAddRow[5]{%
- \directlua{%
- matrices['#1'] = matrix.mulAddRow(matrices['#2'],#4,#3,#5)
- }%
+\directlua{%
+matrices['#1'] = matrix.mulAddRow(matrices['#2'],#4,#3,#5)
+}%
}
\newcommand\matrixMulAddCol[5]{%
- \directlua{%
- matrices['#1'] = matrix.mulAddCol(matrices['#2'],#4,#3,#5)
- }%
+\directlua{%
+matrices['#1'] = matrix.mulAddCol(matrices['#2'],#4,#3,#5)
+}%
}
\newcommand\matrixTranspose[2]{%
- \directlua{%
- matrices['#1'] = matrix.transpose(matrices['#2'])
- }%
+\directlua{%
+matrices['#1'] = matrix.transpose(matrices['#2'])
+}%
}
\newcommand\matrixSubmatrix[6]{%
- \directlua{%
- matrices['#1'] = matrix.subm(matrices['#2'],#3,#4,#5,#6)
- }%
+\directlua{%
+matrices['#1'] = matrix.subm(matrices['#2'],#3,#4,#5,#6)
+}%
}
\newcommand\matrixConcatH[3]{%
- \directlua{%
- matrices['#1'] = matrix.concath(matrices['#2'],matrices['#3'])
- }%
+\directlua{%
+matrices['#1'] = matrix.concath(matrices['#2'],matrices['#3'])
+}%
}
\newcommand\matrixConcatV[3]{%
- \directlua{%
- matrices['#1'] = matrix.concatv(matrices['#2'],matrices['#3'])
- }%
+\directlua{%
+matrices['#1'] = matrix.concatv(matrices['#2'],matrices['#3'])
+}%
}
\newcommand\matrixNumRows[1]{%
- \directlua{%
- tex.sprint(tostring(matrix.rows(matrices['#1'])))
- }%
+\directlua{%
+tex.sprint(tostring(matrix.rows(matrices['#1'])))
+}%
}
\newcommand\matrixNumCols[1]{%
- \directlua{%
- tex.sprint(tostring(matrix.columns(matrices['#1'])))
- }%
+\directlua{%
+tex.sprint(tostring(matrix.columns(matrices['#1'])))
+}%
}
\newcommand\matrixGetElement[3]{%
- \directlua{%
- tex.sprint(tostring(matrix.getelement(matrices['#1'],#2,#3)))
- }%
+\directlua{%
+tex.sprint(tostring(matrix.getelement(matrices['#1'],#2,#3)))
+}%
}
\newcommand\matrixSetElement[4]{%
- \directlua{%
- matrix.setelement(matrices['#1'],#2,#3,#4)
- }%
+\directlua{%
+matrix.setelement(matrices['#1'],#2,#3,#4)
+}%
}
\newcommand\matrixInvert[2]{%
- \directlua{%
- matrices['#1'] = matrix.invert(matrices['#2'])
- }%
+\directlua{%
+matrices['#1'] = matrix.invert(matrices['#2'])
+}%
}
\newcommand\matrixPow[3]{%
- \directlua{%
- matrices['#1'] = matrix.pow(matrices['#2'],#3)
- }%
+\directlua{%
+matrices['#1'] = matrix.pow(matrices['#2'],#3)
+}%
}
\newcommand\matrixCreateRandom[5]{%
- \directlua{%
- matrices['#1'] = matrix.createrandom(#2,#3,#4,#5)
- }%
+\directlua{%
+matrices['#1'] = matrix.createrandom(#2,#3,#4,#5)
+}%
}
\newcommand\matrixDet[1]{%
- \directlua{%
- tex.sprint(tostring(matrix.det(matrices['#1'])))
- }%
+\directlua{%
+tex.sprint(tostring(matrix.det(matrices['#1'])))
+}%
}
\newcommand\matrixTrace[1]{%
- \directlua{%
- tex.sprint(tostring(matrix.trace(matrices['#1'])))
- }%
+\directlua{%
+tex.sprint(tostring(matrix.trace(matrices['#1'])))
+}%
}
\newcommand\matrixNormOne[1]{%
- \directlua{%
- tex.sprint(tostring(matrix.norm1(matrices['#1'])))
- }%
+\directlua{%
+tex.sprint(tostring(matrix.norm1(matrices['#1'])))
+}%
}
\newcommand\matrixNormInfty[1]{%
- \directlua{%
- tex.sprint(tostring(matrix.norminfty(matrices['#1'])))
- }%
+\directlua{%
+tex.sprint(tostring(matrix.norminfty(matrices['#1'])))
+}%
}
\newcommand\matrixNormMax[1]{%
- \directlua{%
- tex.sprint(tostring(matrix.normmax(matrices['#1'])))
- }%
+\directlua{%
+tex.sprint(tostring(matrix.normmax(matrices['#1'])))
+}%
}
\newcommand\matrixNormF[1]{%
- \directlua{%
- tex.sprint(tostring(matrix.normF(matrices['#1'])))
- }%
+\directlua{%
+tex.sprint(tostring(matrix.normF(matrices['#1'])))
+}%
}
\newcommand\matrixCopy[2]{%
- \directlua{%
- matrices['#1'] = matrix.copy(matrices['#2'])
- }%
+\directlua{%
+matrices['#1'] = matrix.copy(matrices['#2'])
+}%
}
\newcommand\matrixRREF[2]{%
- \directlua{%
- matrices['#1'] = matrix.rref(matrices['#2'])
- }%
+\directlua{%
+matrices['#1'] = matrix.rref(matrices['#2'])
+}%
}
\newcommand\matrixConjugate[2]{%
- \directlua{%
- matrices['#1'] = matrix.conjugate(matrices['#2'])
- }%
+\directlua{%
+matrices['#1'] = matrix.conjugate(matrices['#2'])
+}%
}
\newcommand\matrixConjugateT[2]{%
- \directlua{%
- matrices['#1'] = matrix.conjugateT(matrices['#2'])
- }%
+\directlua{%
+matrices['#1'] = matrix.conjugateT(matrices['#2'])
+}%
}
\newcommand\matrixRank[1]{%
- \directlua{%
- tex.sprint(tostring(matrix.rank(matrices['#1'])))
- }%
-}
-
-\newcommand\matrixRREFERR[1]{%
- \directlua{%
- tex.sprint(tostring(matrix.rref0E(matrices['#1'])))
- }%
-}
-
-\newcommand\matrixRREFE[1]{%
- \directlua{%
- tex.sprint(tostring(matrix.rref0E(matrices['#1'])))
- }%
+\directlua{%
+tex.sprint(tostring(matrix.rank(matrices['#1'])))
+}%
}
% ========= KEY DEFINITIONS =========
@@ -1497,35 +1483,35 @@ end
\setkeys{matrixrr}{type=bmatrix,truncate=6}%
\newcommand{\matrixRREFSteps}[2][]{%
- \begingroup%
- \setkeys{matrixrr}{#1}
- \directlua{%
- tex.sprint(matrix.rref0E(matrices['#2'],"\moprr@type",\moprr@truncate))}
- %
- \endgroup%
+\begingroup%
+\setkeys{matrixrr}{#1}
+\directlua{%
+tex.sprint(matrix.rref0E(matrices['#2'],"\moprr@type",\moprr@truncate))}
+%
+\endgroup%
}
\newcommand\matrixGaussJordan[3]{%
- \directlua{%
- matrices['#1'] = matrix.GaussJordan(matrices['#2'],matrices['#3'])
- }%
+\directlua{%
+matrices['#1'] = matrix.GaussJordan(matrices['#2'],matrices['#3'])
+}%
}
\newcommand{\matrixGaussJordanSteps}[3][]{%
- \begingroup%
- \setkeys{matrixrr}{#1}
- \directlua{%
- tex.sprint(matrix.gauss0E(matrices['#2'],matrices['#3'],"\moprr@type",\moprr@truncate))}
- %
- \endgroup%
+\begingroup%
+\setkeys{matrixrr}{#1}
+\directlua{%
+tex.sprint(matrix.gauss0E(matrices['#2'],matrices['#3'],"\moprr@type",\moprr@truncate))}
+%
+\endgroup%
}
% vector latex commands
\newcommand\vectorNew[2]{%
- \directlua{%
- vectors['#1'] = vector(#2)
- }%
+\directlua{%
+vectors['#1'] = vector(#2)
+}%
}
% ========= KEY DEFINITIONS =========
@@ -1535,107 +1521,107 @@ end
\setkeys{vectorop}{truncate=6}%
\newcommand{\vectorPrint}[2][]{%
- \begingroup%
- \setkeys{vectorop}{#1}
- \directlua{tex.sprint(vector.show(vectors['#2'],\vop@truncate))}
- %
- \endgroup%
+\begingroup%
+\setkeys{vectorop}{#1}
+\directlua{tex.sprint(vector.show(vectors['#2'],\vop@truncate))}
+%
+\endgroup%
}
\newcommand\vectorParse[1]{%
- \directlua{%
- tex.sprint(tostring(vector.parse(vectors['#1'])))
- }%
+\directlua{%
+tex.sprint(tostring(vector.parse(vectors['#1'])))
+}%
}
\newcommand\vectorOp[2]{%
- \directlua{%
- vectors['#1'] = vector.op('#2')
- }%
+\directlua{%
+vectors['#1'] = vector.op('#2')
+}%
}
\newcommand\vectorAdd[3]{%
- \directlua{%
- vectors['#1'] = vector.add(vectors['#2'],vectors['#3'])
- }%
+\directlua{%
+vectors['#1'] = vector.add(vectors['#2'],vectors['#3'])
+}%
}
\newcommand\vectorSub[3]{%
- \directlua{%
- vectors['#1'] = vector.sub(vectors['#2'],vectors['#3'])
- }%
+\directlua{%
+vectors['#1'] = vector.sub(vectors['#2'],vectors['#3'])
+}%
}
\newcommand\vectorDot[2]{%
- \directlua{%
- tex.sprint(tostring(vector.dot(vectors['#1'],vectors['#2'])))
- }%
+\directlua{%
+tex.sprint(tostring(vector.dot(vectors['#1'],vectors['#2'])))
+}%
}
\newcommand\vectorMulNum[3]{%
- \directlua{%
- vectors['#1'] = vector.mulnum(vectors['#2'],#3)
- }%
+\directlua{%
+vectors['#1'] = vector.mulnum(vectors['#2'],#3)
+}%
}
\newcommand\vectorCross[3]{%
- \directlua{%
- vectors['#1'] = vector.cross(vectors['#2'],vectors['#3'])
- }%
+\directlua{%
+vectors['#1'] = vector.cross(vectors['#2'],vectors['#3'])
+}%
}
\newcommand\vectorSumNorm[1]{%
- \directlua{%
- tex.sprint(tostring(vector.sumnorm(vectors['#1'])))
- }%
+\directlua{%
+tex.sprint(tostring(vector.sumnorm(vectors['#1'])))
+}%
}
\newcommand\vectorEuclidNorm[1]{%
- \directlua{%
- tex.sprint(tostring(vector.euclidnorm(vectors['#1'])))
- }%
+\directlua{%
+tex.sprint(tostring(vector.euclidnorm(vectors['#1'])))
+}%
}
\newcommand\vectorSupNorm[1]{%
- \directlua{%
- tex.sprint(tostring(vector.supnorm(vectors['#1'])))
- }%
+\directlua{%
+tex.sprint(tostring(vector.supnorm(vectors['#1'])))
+}%
}
\newcommand\vectorpNorm[2]{%
- \directlua{%
- tex.sprint(tostring(vector.pnorm(vectors['#1'],#2)))
- }%
+\directlua{%
+tex.sprint(tostring(vector.pnorm(vectors['#1'],#2)))
+}%
}
\newcommand\vectorCreateRandom[4]{%
- \directlua{%
- vectors['#1'] = vector.createrandom(#2,#3,#4)
- }%
+\directlua{%
+vectors['#1'] = vector.createrandom(#2,#3,#4)
+}%
}
\newcommand\vectorCopy[2]{%
- \directlua{%
- vectors['#1'] = vector.copy(vectors['#2'])
- }%
+\directlua{%
+vectors['#1'] = vector.copy(vectors['#2'])
+}%
}
\newcommand\vectorGetCoordinate[2]{%
- \directlua{%
- tex.sprint(tostring(vector.getcoordinate(vectors['#1'],#2)))
- }%
+\directlua{%
+tex.sprint(tostring(vector.getcoordinate(vectors['#1'],#2)))
+}%
}
\newcommand\vectorSetCoordinate[3]{%
- \directlua{%
- tex.sprint(tostring(vector.setcoordinate(vectors['#1'],#2,#3)))
- }%
+\directlua{%
+tex.sprint(tostring(vector.setcoordinate(vectors['#1'],#2,#3)))
+}%
}
\newcommand\vectorGetAngle[2]{%
- \directlua{%
- tex.sprint(tostring(vector.getangle(vectors['#1'],vectors['#2'])))
- }%
+\directlua{%
+tex.sprint(tostring(vector.getangle(vectors['#1'],vectors['#2'])))
+}%
}
% ========= KEY DEFINITIONS =========
@@ -1645,34 +1631,34 @@ end
% ========= KEY DEFAULTS =========
\setkeys{vecrr}{brckt=round,truncate=6}%
\newcommand{\vectorGramSchmidt}[2][]{%
- \begingroup%
- \setkeys{vecrr}{#1}
- \directlua{%
- local tbl = #2
- local outTbl={}
- local sum = 0
- for i=1,table.getn(tbl) do
- outTbl[i] = vectors[tbl[i]]
- end
-
- tex.sprint(vector.gs(outTbl,"\voprr@brckt",\voprr@truncate))}
- %
- \endgroup%
+\begingroup%
+\setkeys{vecrr}{#1}
+\directlua{%
+local tbl = #2
+local outTbl={}
+local sum = 0
+for i=1,table.getn(tbl) do
+outTbl[i] = vectors[tbl[i]]
+end
+
+tex.sprint(vector.gs(outTbl,"\voprr@brckt",\voprr@truncate))}
+%
+\endgroup%
}
\newcommand{\vectorGramSchmidtSteps}[2][]{%
- \begingroup%
- \setkeys{vecrr}{#1}
- \directlua{%
- local tbl = #2
- local outTbl={}
- local sum = 0
- for i=1,table.getn(tbl) do
- outTbl[i] = vectors[tbl[i]]
- end
- tex.sprint(vector.gsX(outTbl,"\voprr@brckt",\voprr@truncate))}
- %
- \endgroup%
+\begingroup%
+\setkeys{vecrr}{#1}
+\directlua{%
+local tbl = #2
+local outTbl={}
+local sum = 0
+for i=1,table.getn(tbl) do
+outTbl[i] = vectors[tbl[i]]
+end
+tex.sprint(vector.gsX(outTbl,"\voprr@brckt",\voprr@truncate))}
+%
+\endgroup%
}
\endinput
diff --git a/macros/luatex/latex/lualinalg/lualinalg.tex b/macros/luatex/latex/lualinalg/lualinalg.tex
index 7c49480d27..250acd1544 100644
--- a/macros/luatex/latex/lualinalg/lualinalg.tex
+++ b/macros/luatex/latex/lualinalg/lualinalg.tex
@@ -1,7 +1,7 @@
\documentclass{article}
\usepackage{listings,color,parskip,booktabs,longtable,array,
-hyperref,multirow,multicol,url,amsmath,amssymb,framed,graphicx,lualinalg,tikz,tikz-3dplot,float}
-\usepackage[top=1in, bottom=1in, left=1in, right=1in]{geometry}
+hyperref,multirow,multicol,url,amsmath,amssymb,framed,lualinalg,tikz,tikz-3dplot}
+\usepackage[top=1.1in, bottom=1.1in, left=1in, right=1in]{geometry}
\usetikzlibrary{calc,3d,arrows}
\hypersetup{colorlinks,urlcolor=blue}
\lstset{frame=none,
@@ -390,7 +390,7 @@ The \verb|lualinalg| package can be used with other packages that have facility
\end{tikzpicture}
\end{lstlisting}
Listing \ref{code:luavecplot} produces figure \ref{fig:2dvecplot}.
-\begin{figure}[H]
+\begin{figure}
\centering
\tdplotsetmaincoords{0}{0}
\begin{tikzpicture}[scale=1,
@@ -463,7 +463,7 @@ Listing \ref{code:luavecplot2} illustrates plotting of vectors in 3-D plane by u
\end{lstlisting}
Listing \ref{code:luavecplot2} produces figure \ref{fig:3dvecplot}.
-\begin{figure}[H]
+\begin{figure}
\centering
\tdplotsetmaincoords{60}{120}
\begin{tikzpicture}[scale=1,
@@ -526,7 +526,7 @@ I = \(\matrixPrint{mtx}\)
\subsection{Commands for operations on matrices}
Table \ref{tbl:luamtxcmd} lists all commands for operations on matrices in the \verb|lualinalg| package.
-\begin{longtable}{m{7cm}m{7cm}}
+\begin{longtable}{m{7cm}m{7.5cm}}
\toprule
\multicolumn{1}{c}{\textcolor{blue}{Command Format}} & \multicolumn{1}{c}{\textcolor{blue}{Description}} \\
\toprule
@@ -677,7 +677,7 @@ Defines a new matrix obtained by copying values from matrix1. \\
\matrixCreateRandom
{m}{i}{j}{k}{l}
\end{lstlisting}&
-Creates a new matrix m with random numbers. Here \(i,j\) denotes the number of rows and columns, and \(k, l\) denotes the start and end integers between which random numbers are generated. \\
+Creates a new matrix m with random numbers. Here \(i, j\) denotes the number of rows and columns, and \(k, l\) denotes the start and end integers between which random numbers are generated. \\
\midrule
\multicolumn{2}{c}{Elementary row operations on matrices} \\
\midrule
diff --git a/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl b/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
index d05a00e093..51dbbd2570 100644
--- a/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
+++ b/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
@@ -114,9 +114,6 @@ $mirrors = {
'https://fosszone.csd.auth.gr/CTAN/' => 1,
'https://ftp.cc.uoc.gr/mirrors/CTAN/' => 1,
},
- 'Hungary' => {
- 'https://mirror.szerverem.hu/ctan/' => 1,
- },
'Italy' => {
'https://ctan.mirror.garr.it/mirrors/ctan/' => 1,
},
@@ -172,7 +169,6 @@ $mirrors = {
},
'North America' => {
'Canada' => {
- 'https://ctan.math.ca/tex-archive/' => 1,
'https://ctan.mirror.globo.tech/' => 1,
'https://ctan.mirror.rafal.ca/' => 1,
'https://mirror.csclub.uwaterloo.ca/CTAN/' => 1,
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb b/systems/texlive/tlnet/tlpkg/texlive.tlpdb
index 0942223116..a2bedf1934 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb
@@ -26,11 +26,11 @@ depend container_split_src_files/1
depend frozen/0
depend minrelease/2016
depend release/2023
-depend revision/67852
+depend revision/67868
name 00texlive.image
category TLCore
-revision 67840
+revision 67868
shortdesc TeX Live files only in the source repository
longdesc The files here are not copied by the installer and containers
longdesc are not built for them; they exist only in the source
@@ -4580,6 +4580,7 @@ runfiles size=13036
tlpkg/tlpsrc/witharrows.tlpsrc
tlpkg/tlpsrc/wnri-latex.tlpsrc
tlpkg/tlpsrc/wnri.tlpsrc
+ tlpkg/tlpsrc/wordcloud.tlpsrc
tlpkg/tlpsrc/wordcount.tlpsrc
tlpkg/tlpsrc/wordle.tlpsrc
tlpkg/tlpsrc/wordlike.tlpsrc
@@ -4774,7 +4775,7 @@ depend setting_available_architectures:aarch64-linux amd64-freebsd amd64-netbsd
name 00texlive.installer
category TLCore
-revision 67842
+revision 67854
shortdesc TeX Live standalone installer package
longdesc This package defines the files to go into the installer
longdesc archives (install-tl-unx.tar.gz, install-tl.zip) built by the
@@ -24369,7 +24370,7 @@ catalogue-topics font font-cjk font-ttf
name arraycols
category Package
-revision 61719
+revision 67862
shortdesc New column types for array and tabular environments
relocated 1
longdesc This small package provides new column types for array and
@@ -24379,14 +24380,14 @@ longdesc columns width can be fixed or calculated like in tabularx
longdesc environments. Macros for drawing vertical and horizontal rules
longdesc of variable thickness are also provided.
containersize 1320
-containerchecksum 3f97d2424091e5690feb3e1e290d1135332ab146019c1b290e8c69ea7f048ecd779dd81c9b3d3f9a0d7c919f1bc9bb949bdccfb3939148a426b336cd22993398
-doccontainersize 459328
-doccontainerchecksum bab50fccd4ec8bbcc64684208eb8ad60b17ee55b534f287d0640562bbe1f1e2ef25698ee2fb80baca9e984e79e36fabb8411e6fa330bb33fad680b00ede665e4
-docfiles size=113
+containerchecksum b5495e0994bdc5dae4c1b301a52c5d6d2360ca66b4044c75c0a9b8f252186664a013f3639abcd2628e6352b268dfbe4692b4c7f3e58ecd83192128e4b8b6fc87
+doccontainersize 464040
+doccontainerchecksum 131d9f16f5731257a88716671b42593047dfa5babcf033d5d8bbb9b8ebd2aee34bfea003b4b55e28b77d7b9d648f97e256694b0aced6b73a9578fd8efdfb5d6d
+docfiles size=115
RELOC/doc/latex/arraycols/README.md details="Readme"
RELOC/doc/latex/arraycols/arraycols.pdf details="Package documentation"
-srccontainersize 6264
-srccontainerchecksum e19bc42fa9a0d2bdd843eed789275f4d5a987adf9061535090f9d56ed182a19bd3950b10730c5cbe640f0261b545cf09212cb771b9a9a44163c6fc052b8c08fd
+srccontainersize 6752
+srccontainerchecksum f458b30ad5a7864baa90defa1b535b948821930bcd42d6e1ae3e417b0799309e343874d7acb2ef219014cfda941a434950716116a3fa68df2d14f4beaa96aec8
srcfiles size=6
RELOC/source/latex/arraycols/arraycols.dtx
RELOC/source/latex/arraycols/arraycols.ins
@@ -24395,7 +24396,7 @@ runfiles size=1
catalogue-ctan /macros/latex/contrib/arraycols
catalogue-license lppl1.3
catalogue-topics table alignment alignment-supp
-catalogue-version 1.2
+catalogue-version 1.3
name arrayjobx
category Package
@@ -72779,7 +72780,7 @@ containerchecksum 951e172129275fa2cb7ccea6bf23f27484503533ebee4c3bef7d2f4ddda594
name collection-pictures
category Collection
-revision 67297
+revision 67868
shortdesc Graphics, pictures, diagrams
relocated 1
longdesc Including TikZ, pict, etc., but MetaPost and PStricks are
@@ -73024,12 +73025,13 @@ depend utfsym
depend venndiagram
depend visualpstricks
depend wheelchart
+depend wordcloud
depend worldflags
depend xistercian
depend xpicture
depend xypic
-containersize 1596
-containerchecksum 76d88fa2e5fa2f0e9adcb2a7b8aba440bf1bd5eb2dbef35a637667e9af1d2eb6ab2725169e64a33954a125ab5f0f84a4e8947120fe214f363511e641437fdd4d
+containersize 1600
+containerchecksum b5feb822c35367c26a4c9c71b9b3359ee18a29457256eb7d8725377f878bc8cfb5bf0a22530a01ce792ffca9748b274f0626cc26fd0c69520ee332511eaf3e16
name collection-plaingeneric
category Collection
@@ -145354,7 +145356,7 @@ catalogue-version 1.1.2
name huawei
category Package
-revision 67803
+revision 67863
shortdesc Template for Huawei documents
relocated 1
longdesc This unofficial package provides a class for creating documents
@@ -145398,17 +145400,17 @@ depend transparent
depend trimspaces
depend wrapfig
depend xcolor
-containersize 260332
-containerchecksum 4ed3f4fe37d0c5c37076c2df36ce6d7fd60a8a4fd4c99371b31a1382b29040aa738e53777d8146957df1b5ac1921b012b18ca7f63e5424f6fb0cfbb12c69010d
-doccontainersize 780892
-doccontainerchecksum 2145a2cdd5bdfc571f80a90535b1fa92f0c740df7d86d374d2de3b3927af44e5b9be0b832771400b7166856d063a7d897e8387b7d5c1b1881dd867e1c9028ca5
+containersize 260348
+containerchecksum 68f929bf3770c6f9659212a2a56ed427bd8b70dd97d989812908fd1fbf941c3d7bb37498dcf4ebdd597f93c5ba2ab783e5b146ce08eebc2f99f74e86088d8ec7
+doccontainersize 781064
+doccontainerchecksum 3dfcfef8f07927c835202913eb1390c61861437f18627d69a0ae4e9045800b309bcf18373ca4804d7d3fee28d8a6d81afc5efff20fe762e6e0dbc19c6759dd9f
docfiles size=201
RELOC/doc/latex/huawei/DEPENDS.txt
RELOC/doc/latex/huawei/LICENSE.txt
RELOC/doc/latex/huawei/README.md details="Readme"
RELOC/doc/latex/huawei/huawei.pdf details="Package documentation"
-srccontainersize 10460
-srccontainerchecksum f4d1b846a229ce3613229a02e2720b6b66c84459f73c0a517ed0a9860ce9870bc8a1425e2cb68a2827bf7b89bbd2d67744dca1a28d054ad3e844899c1d026ba6
+srccontainersize 10588
+srccontainerchecksum 8b985b0893a19b210224d7fd02cd955f984b53b7f0bcc33476d3fb9d5441ad312ea0cf49c4a0eca767e76638cee7e2f24e6fb592f0de33a13ac47a597865d4b7
srcfiles size=10
RELOC/source/latex/huawei/huawei.dtx
RELOC/source/latex/huawei/huawei.ins
@@ -145419,7 +145421,7 @@ catalogue-contact-home https://github.com/yegor256/huawei.cls
catalogue-ctan /macros/latex/contrib/huawei
catalogue-license mit
catalogue-topics class misc-paper
-catalogue-version 0.17.0
+catalogue-version 0.18.0
name huaz
category Package
@@ -196222,7 +196224,7 @@ catalogue-version 2.75
name lualinalg
category Package
-revision 67840
+revision 67867
shortdesc A linear algebra package for LuaLaTeX
relocated 1
longdesc The lualinalg package is developed to perform operations on
@@ -196240,20 +196242,20 @@ longdesc from other software (which may not be in LaTeX-compatible
longdesc format) and to use them in a tex file. The vectors and matrices
longdesc of reasonable size can be handled with ease. The package can be
longdesc modified or extended by writing custom Lua programs.
-containersize 6520
-containerchecksum d50164f416fa7bb5a13f614f1f927c58ed326a1ff532060066c27d2859d5693fa5702108f6199ae543ba022fb3195348c4d05830b0894ccf9afeed83ac46685d
-doccontainersize 198152
-doccontainerchecksum 069ccd88dd8538efe219a92da84a31b027950013152255dc2b6e2fbb725723877904147a3716f741aadcc23ff735b1ad1eb33210447d4e72e0a7847b35ac5e59
+containersize 6436
+containerchecksum b9c653d2a65bb88cc28e77827f3b9e31449fc9031e85a02926425fa76d83e09949ab26d91256544399b5ab26de5699e27fdd9d6f476da2f2d923ffbba47e9b0b
+doccontainersize 198024
+doccontainerchecksum 29a36b6a35b9dd4ea17f862aa7dbfbb5d6e8d6ddb3a8715921eca2f34cb56fbab1746eee166c75f4fe6e81f81b89532f03af6fd1b7c20bd19ee5cc9c90d7e9bf
docfiles size=79
RELOC/doc/lualatex/lualinalg/README.txt details="Readme"
RELOC/doc/lualatex/lualinalg/lualinalg.pdf details="Package documentation"
RELOC/doc/lualatex/lualinalg/lualinalg.tex
-runfiles size=11
+runfiles size=10
RELOC/tex/lualatex/lualinalg/lualinalg.sty
catalogue-ctan /macros/luatex/latex/lualinalg
catalogue-license lppl1.3c
catalogue-topics luatex maths
-catalogue-version 1.5
+catalogue-version 1.6
name luamathalign
category Package
@@ -257708,7 +257710,7 @@ catalogue-version 1.0
name proflycee
category Package
-revision 67374
+revision 67864
shortdesc A LaTeX package for French maths teachers in high school
relocated 1
longdesc This package provides some commands to help French mathematics
@@ -257717,19 +257719,17 @@ longdesc create splines with "derivative control";
longdesc \CalculFormelParametres and \CalculFormelLigne in order to
longdesc create an xcas-windows-like; \CodePythonLstFichier to create
longdesc code presentation and code execution with pythontex.
-containersize 41708
-containerchecksum ff3825eaa2b119868702547a69905e5291b5f7c0ad5dfec0fbfadf649bd522d79d6be43d727b981a4ef4f64575a401300c776e2df3feb17ea200a0c2c4ff89c0
-doccontainersize 1975724
-doccontainerchecksum 22366a868a2235ddb1e0b76510da1ac61e3ffd5aa8eb7264be35ee182e3f3e6f1c781331a3ad946a256df6e039e43ee3b5c01bb87a32c231a6d9a57d1514f5c2
-docfiles size=638
+containersize 35900
+containerchecksum 7a069932cc5048ea2d652ccdda138c943a197d9e94a394e6eacdb0bb6ad5e594bcfa499d31ae8058423f7d45629306f3126f21b72290a981088109a22a0d127e
+doccontainersize 1333388
+doccontainerchecksum 6574c0e5077d5c12e539d334df10d8d0da329530206661dcfa2e18d39f18c03458ed6661aef161d9099e2ca328b2646fb56b08bb2e589c7600dfa3f3eff27e99
+docfiles size=415
RELOC/doc/latex/proflycee/ProfLycee-doc.pdf details="Package documentation" language="fr"
RELOC/doc/latex/proflycee/ProfLycee-doc.tex
RELOC/doc/latex/proflycee/ProfLycee-exemples-pyluatex.pdf details="Examples using pyluatex" language="fr"
RELOC/doc/latex/proflycee/ProfLycee-exemples-pyluatex.tex
RELOC/doc/latex/proflycee/ProfLycee-exemples-pythontex.pdf details="Examples using python" language="fr"
RELOC/doc/latex/proflycee/ProfLycee-exemples-pythontex.tex
- RELOC/doc/latex/proflycee/ProfLycee-old-doc.pdf
- RELOC/doc/latex/proflycee/ProfLycee-old-doc.tex
RELOC/doc/latex/proflycee/README.md details="Readme"
RELOC/doc/latex/proflycee/graphics/integr_nwks_a.png
RELOC/doc/latex/proflycee/graphics/integr_nwks_b.png
@@ -257750,8 +257750,7 @@ docfiles size=638
RELOC/doc/latex/proflycee/graphics/pl-solve_c.png
RELOC/doc/latex/proflycee/graphics/pl-solve_d.png
RELOC/doc/latex/proflycee/testscript.py
-runfiles size=93
- RELOC/tex/latex/proflycee/ProfLycee-old.sty
+runfiles size=65
RELOC/tex/latex/proflycee/ProfLycee.sty
RELOC/tex/latex/proflycee/proflycee-tools-aleatoire.tex
RELOC/tex/latex/proflycee/proflycee-tools-analyse.tex
@@ -257773,7 +257772,7 @@ catalogue-contact-repository https://github.com/cpierquet/ProfLycee
catalogue-ctan /macros/latex/contrib/proflycee
catalogue-license lppl1.3c
catalogue-topics maths french teaching expl3 pgf-tikz
-catalogue-version 2.7.0
+catalogue-version 2.7.1
name profmaquette
category Package
@@ -313933,7 +313932,7 @@ docfiles size=376
name texlive-scripts
category TLCore
-revision 67842
+revision 67854
shortdesc TeX Live infrastructure programs
longdesc Includes install-tl, tl-portable, rungs, etc.; not needed for
longdesc tlmgr to run but still ours. Not included in tlcritical.
@@ -313941,10 +313940,10 @@ depend texlive-scripts.ARCH
depend texlive.infra
execute addMap mathpple.map
postaction shortcut type=menu name="TeX Live command-line" cmd=TEXDIR/tlpkg/installer/tl-cmd.bat
-containersize 114120
-containerchecksum 233b6753b175da96c5c072827251c5e0d0f6949d87dc2f15cc27d2c25185f721ce28608b442f762ec680ba6f86cd9ff1a59679fa779e359c14e239bd515e6e86
+containersize 114096
+containerchecksum 997746027b46a664aa0c1c1f1daa779017e39e03cda19ec13297e37642ec272b15356475a25d20de57cf506d9945d07090cf57cafbb090c96078abb1bd726b9d
doccontainersize 428316
-doccontainerchecksum 4d932855bf842d855564af1929e49070c85296d4d2c0996f525c997c20325404cd09675e8b036bb27a9f388bb8e62e8f47cb539967956583fd624201b3ce25bd
+doccontainerchecksum 59b1a5e798c35c0c3ee6242ffe739f99745e1de5c587f886587d7ae1f23ca1a7698147670d3e72267d644509352d5fedc8bba8d6216a43cd7df6f03712ac9d68
docfiles size=548
doc.html
texmf-dist/doc/man/man1/fmtutil-sys.1
@@ -345410,7 +345409,7 @@ catalogue-version 1.1
name verbatimbox
category Package
-revision 33197
+revision 67865
shortdesc Deposit verbatim text in a box
relocated 1
longdesc The package provides a verbbox environment (which uses
@@ -345423,11 +345422,11 @@ longdesc valuable use is in places where the standard verbatim
longdesc environment (which is based on a trivlist) may not appear. The
longdesc package makes use of the verbatim package (which is a required
longdesc part of any LaTeX distribution).
-containersize 3472
-containerchecksum dc686ec1e86c877a6f1467f4935f2337aedfaec32bdf867985ef05405569572c72d3593e75580c72a7bb3ee698798813094eabf738b3157194517839fbe47de5
-doccontainersize 246384
-doccontainerchecksum 9f8fa05294b68fb0994f01e36b468d341b76aa97bde983c7eab781c92c8bfd898033235a328a1fa858dee457f515d6640f780b330600418f2a7eb0fb45f0ef3f
-docfiles size=69
+containersize 3544
+containerchecksum a2520d96ed713f3e82135395c7437f1bdce04f539ca924feb1468af6a9afb9a2707edba554f073175bf01d279576d7f3b96cd8a69ff7cd6b82f6fd9dde537f3e
+doccontainersize 242340
+doccontainerchecksum c9c4a8a720a9dd1381a128480312ee416e6332d7bb4cd6f59c3f3c13f2c4ba5e9445f5659ff4b64cb40059fb117ce79b27b62c07b70a81ad7e3fe987f7dbbc41
+docfiles size=71
RELOC/doc/latex/verbatimbox/README details="Readme"
RELOC/doc/latex/verbatimbox/verbatimbox.pdf details="package documentation"
RELOC/doc/latex/verbatimbox/verbatimbox.tex
@@ -345437,7 +345436,7 @@ catalogue-also fancyvrb
catalogue-ctan /macros/latex/contrib/verbatimbox
catalogue-license lppl
catalogue-topics verbatim boxing
-catalogue-version 3.13
+catalogue-version 3.2
name verbatimcopy
category Package
@@ -349995,6 +349994,40 @@ catalogue-license gpl2
catalogue-topics font-supp
catalogue-version 1.0b
+name wordcloud
+category Package
+revision 67868
+shortdesc Drawing wordclouds with MetaPost and Lua
+relocated 1
+longdesc This MetaPost and LuaLaTeX package allows drawing wordclouds
+longdesc from a list of words and weights. The algorithm is implemented
+longdesc with MetaPost whereas Lua is used to parse LaTeX commands, to
+longdesc build the list of words and weights from a text file and to
+longdesc generate MetaPost code interpreted by luamplib.
+containersize 6888
+containerchecksum 7625a122e8cc2d94ce70f2731525121b3e77203311964b4860d817cbc77a1a9ab58ea579d92794bd4055e99c7c7912481a46d3c8d9bfa88ceed270bd7d040679
+doccontainersize 122556
+doccontainerchecksum efccdca1f04f0486c592906f0006c83a84c0dd15b712055381d1d552f223822d17569642cd5e46f8a00c186125f606e9126c2b5eee3bb8056c9132f5326d867c
+docfiles size=40
+ RELOC/doc/metapost/wordcloud/README.md details="Readme"
+ RELOC/doc/metapost/wordcloud/ctan.bib
+ RELOC/doc/metapost/wordcloud/doc-wc.pdf
+ RELOC/doc/metapost/wordcloud/fond.pdf
+ RELOC/doc/metapost/wordcloud/wordcloud-doc-en.pdf details="Package documentation"
+ RELOC/doc/metapost/wordcloud/wordcloud-doc-en.tex
+ RELOC/doc/metapost/wordcloud/wordcloud-preamble.tex
+runfiles size=8
+ RELOC/metapost/wordcloud/wordcloud.mp
+ RELOC/tex/latex/wordcloud/wordcloud.lua
+ RELOC/tex/latex/wordcloud/wordcloud.sty
+catalogue-contact-bugs https://github.com/chupinmaxime/wordcloud/issues
+catalogue-contact-home https://plmlab.math.cnrs.fr/mchupin/wordcloud
+catalogue-contact-repository https://github.com/chupinmaxime/wordcloud
+catalogue-ctan /graphics/metapost/contrib/macros/wordcloud
+catalogue-license lppl1.3c fdl
+catalogue-topics luatex mp-use
+catalogue-version 0.1
+
name wordcount
category Package
revision 46165
@@ -350627,16 +350660,16 @@ catalogue-version 0.3
name writeongrid
category Package
-revision 66603
+revision 67866
shortdesc Write on grid lines
relocated 1
longdesc An environment to create grids (type 5x5 or Seyes or Ruled) and
longdesc commands to write texts "right" on the lines.
-containersize 3908
-containerchecksum 6f5d3a2aa8f2430ea563c77305befd81cf2fb8e6c181c43a404795d136c7e40f924b2c862c678ff3ceaf7b0211885b014e55d8c52c18de81b43673c207447139
-doccontainersize 953624
-doccontainerchecksum f6fa678e49482b664bd921ef819e2290c7d53d939b24fcef339dd4245e4d86380b2d2fb128ed0061a16b583681278cb6f39e24ae280e01f2f705a86bb16a7662
-docfiles size=270
+containersize 3984
+containerchecksum e16000cca6af3b3c6b9492516990b534ea884b0eb0108a843be88004a34dabbfa563a9d63d1d9051be8191ffe895920e3683e378c75e2825680be90a8c433e6d
+doccontainersize 983540
+doccontainerchecksum 0ef755cdae71ab882d841d72833c4523a95f82e1be1626bc4bd82e8e8ea528d8521b0fa4cbfe315964c5fb4edde34c06b2e46f351fdcb15d1dd66829f381cfdf
+docfiles size=284
RELOC/doc/latex/writeongrid/README.md details="Readme"
RELOC/doc/latex/writeongrid/WriteOnGrid-doc-en.pdf details="Package documentation (English)"
RELOC/doc/latex/writeongrid/WriteOnGrid-doc-en.tex
@@ -350649,7 +350682,7 @@ catalogue-contact-repository https://github.com/cpierquet/WriteOnGrid
catalogue-ctan /macros/latex/contrib/writeongrid
catalogue-license lppl1.3c
catalogue-topics typeset-grid pgf-tikz
-catalogue-version 0.1.3
+catalogue-version 0.1.4
name wsemclassic
category Package
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
index 4eea657660..2cfd4131ac 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
@@ -1 +1 @@
-5102f41a29329dccb409a9b8263c8ef7 texlive.tlpdb
+52f324fba3e876dfb8f3449e4d8cfbbb texlive.tlpdb
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
index 8f6e8eb9e6..2736708497 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
@@ -1 +1 @@
-f652c76b96b6d70bd1a267f8f9e199d998f46f41733837e1fbd4360d137bf26a2281a6a79be8c51d3742f67b1d5f8c5ce1f32ee8aff2fece5daec74a49694659 texlive.tlpdb
+afffe9d06f2f1844be2bca40c4d50d9cf53ba2a8e35618daa0776c9c1484c0623cf5b0be7726806f0eb0441a6169735bcd50be95049867f8614b63da972199bc texlive.tlpdb
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
index 0d2a738787..ec5aa80865 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
@@ -1,11 +1,11 @@
-----BEGIN PGP SIGNATURE-----
-iQEzBAEBCgAdFiEE2PL4YFeoV+QqiBBqTOGHfhlDjHAFAmTS038ACgkQTOGHfhlD
-jHDsJAf/VEDy6qEed3eQmYx7GxGokbxi5wLK7rqhaUnqFmBKqkH0iP22LUe/D2OE
-hXnzCpYH+RISfS0lFNJ7AV1YT5/+KJA6pQ/U3p4dW8kbuQQnsG9+N5SN8CjiU7SP
-IWECaXYHP/CiAnaSldNd8mxkaKx5/MZe5wiNBneNDCRNxqXBfd4UB+9f1v/pyeI6
-N6NoeAOYulaw0VDP9gHi1LF3TpMwj5wrQwg2i+vOU4RuPOvijuiAr/+SaNuA54YN
-Trl52Cmk9vHgpk5Myrv67PeuEyi0UDpMyv5KeqCrfN9c+XOA33riPRMiCBy00+vY
-9Nsp5jgTr1dPb9hP0AL7o/g2PQiTzQ==
-=aWAx
+iQEzBAEBCgAdFiEE2PL4YFeoV+QqiBBqTOGHfhlDjHAFAmTUJREACgkQTOGHfhlD
+jHBVfAf8DA2SlakiuLbPBvQi1cKPN5M3sMrJqEurnxzLfk4Duux7lWLQRIybBu4j
+HbyoDKQtb+CrUnGz2Uy4ZidS71RVaJRToKz4t8m8ZVcOEq+Gjk9SM6BA1TR1KbHd
++X+U9gVCyhs18Tz6QB+wHTXr4qwVRJ2vWvMDfCntkEHv1nSvPKOWzyHNZCL7G86o
+lHW3sVMg15Aw5CqL8toUCkdppkKIHHxe3hdIZqoM5+DlGwj8Z60FPZj9ce2NpGlN
+hPAc7xZqVfasOANZsGobHY2jPPWEgIK1JR8p5a84PIwxK3P/9MzZEilUyIftwjUM
+QDo96PCV+LiX0HkGjwEi+kiBv63x0A==
+=zU/x
-----END PGP SIGNATURE-----
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
index 3105dc7118..d33cd72f14 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
Binary files differ
diff --git a/timestamp b/timestamp
index 45012ee8cb..ebe990423d 100644
--- a/timestamp
+++ b/timestamp
@@ -2,4 +2,4 @@
# The source CTAN of this site's material:
dante.ctan.org
# The year-month-day-hour-minute of this site's material:
-2023-08-09-02-02
+2023-08-10-02-02
diff --git a/usergrps/gutenberg/FAQ_leaflet.pdf b/usergrps/gutenberg/FAQ_leaflet.pdf
deleted file mode 100644
index 73e55e0e21..0000000000
--- a/usergrps/gutenberg/FAQ_leaflet.pdf
+++ /dev/null
Binary files differ
diff --git a/usergrps/gutenberg/README b/usergrps/gutenberg/README
index 3e13ab70bf..2fff3083d1 100644
--- a/usergrps/gutenberg/README
+++ b/usergrps/gutenberg/README
@@ -7,7 +7,8 @@ For information requests about GUTenberg: <secretariat@gutenberg.eu.org>
Finally, for questions regarding LaTeX use, our list of Frequently Asked Questions
is a good starting point:
-https://www.latex-fr.net/
+https://faq.gutenberg-asso.fr/
+https://www.latex-fr.net/ (current)
These files are released under license CC BY 4.0 (Creative Commons Attribution,
https://creativecommons.org/licenses/by/4.0/legalcode ).
@@ -18,15 +19,15 @@ we surely have way more interesting material.
Ce répertoire contient des informations générales à propos de GUTenberg,
le groupe francophone des utilisateurs de TeX.
-
https://www.gutenberg-asso.fr/
En cas de problème avec ces fichiers: Jérémy Just <jeremy@jejust.fr>
-Pour toute demande d'information à propos de GUTenberg: <secretariat@gutenberg.eu.org>
+Pour toute demande d'informations à propos de GUTenberg: <secretariat@gutenberg.eu.org>
Enfin, pour les questions à propos de l'utilisation de LaTeX,
notre Foire aux Questions est un bon point de départ:
-https://www.latex-fr.net/
+https://faq.gutenberg-asso.fr/
+https://www.latex-fr.net/ (actuelle)
Ces fichiers sont publiés sous la licence CC BY 4.0 (Creative Commons Attribution,
https://creativecommons.org/licenses/by/4.0/legalcode.fr ).
diff --git a/usergrps/gutenberg/VERSION b/usergrps/gutenberg/VERSION
index d24651da30..ff9175f65b 100644
--- a/usergrps/gutenberg/VERSION
+++ b/usergrps/gutenberg/VERSION
@@ -1 +1 @@
-2023-06-14
+2023-08-06
diff --git a/usergrps/gutenberg/plaquette_gutenberg.pdf b/usergrps/gutenberg/plaquette_gutenberg.pdf
index 2d0aee15ca..55873f7ea7 100644
--- a/usergrps/gutenberg/plaquette_gutenberg.pdf
+++ b/usergrps/gutenberg/plaquette_gutenberg.pdf
Binary files differ
diff --git a/usergrps/gutenberg/plaquette_latex.pdf b/usergrps/gutenberg/plaquette_latex.pdf
index b7655d0c02..a6bdb680e2 100644
--- a/usergrps/gutenberg/plaquette_latex.pdf
+++ b/usergrps/gutenberg/plaquette_latex.pdf
Binary files differ