From dab4e7c261c34234f9d9f1ac92923d6f903046ef Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Sun, 29 Jan 2023 03:01:53 +0000 Subject: CTAN sync 202301290301 --- macros/latex/contrib/bmstu/README.md | 12 +- macros/latex/contrib/bmstu/bmstu-appendix.sty | 37 + macros/latex/contrib/bmstu/bmstu-biblio.sty | 23 + macros/latex/contrib/bmstu/bmstu-defabbr.sty | 51 + macros/latex/contrib/bmstu/bmstu-essay.sty | 68 + macros/latex/contrib/bmstu/bmstu-figure.sty | 52 + macros/latex/contrib/bmstu/bmstu-listing.sty | 63 + macros/latex/contrib/bmstu/bmstu-logo.pdf | Bin 0 -> 129396 bytes macros/latex/contrib/bmstu/bmstu-title.sty | 269 + macros/latex/contrib/bmstu/bmstu-toc.sty | 23 + macros/latex/contrib/bmstu/bmstu.cls | 6 +- .../contrib/bmstu/examples/bmstu-examples.pdf | Bin 0 -> 877742 bytes .../contrib/bmstu/examples/bmstu-examples.tex | 148 + macros/latex/contrib/bmstu/examples/examples.pdf | Bin 877742 -> 0 bytes macros/latex/contrib/bmstu/examples/examples.tex | 155 - macros/latex/contrib/bmstu/img/bmstu-logo.pdf | Bin 129396 -> 0 bytes macros/latex/contrib/bmstu/manifest.txt | 9 + macros/latex/contrib/bmstu/sty/bmstu-appendix.sty | 37 - macros/latex/contrib/bmstu/sty/bmstu-biblio.sty | 23 - macros/latex/contrib/bmstu/sty/bmstu-defabbr.sty | 51 - macros/latex/contrib/bmstu/sty/bmstu-essay.sty | 68 - macros/latex/contrib/bmstu/sty/bmstu-figure.sty | 52 - macros/latex/contrib/bmstu/sty/bmstu-listing.sty | 63 - macros/latex/contrib/bmstu/sty/bmstu-title.sty | 247 - macros/latex/contrib/bmstu/sty/bmstu-toc.sty | 23 - macros/latex/contrib/fixdif/fixdif-zh-cn.pdf | Bin 163584 -> 159497 bytes macros/latex/contrib/fixdif/fixdif-zh-cn.tex | 75 +- macros/latex/contrib/fixdif/fixdif.dtx | 191 +- macros/latex/contrib/fixdif/fixdif.pdf | Bin 97610 -> 92154 bytes macros/latex/contrib/hvfloat/Changes | 3 + .../contrib/hvfloat/doc/examples/after1s1c.pdf | Bin 80294 -> 80292 bytes .../contrib/hvfloat/doc/examples/after1s1c.tex | 10 +- .../contrib/hvfloat/doc/examples/after2s2c.pdf | Bin 86722 -> 86842 bytes .../contrib/hvfloat/doc/examples/after2s2c.tex | 10 +- .../latex/contrib/hvfloat/doc/examples/capPos.pdf | Bin 95389 -> 98124 bytes .../latex/contrib/hvfloat/doc/examples/capVPos.inc | 32 +- .../contrib/hvfloat/doc/examples/default1s1c.pdf | Bin 81991 -> 82105 bytes .../contrib/hvfloat/doc/examples/default1s1c.tex | 10 +- .../contrib/hvfloat/doc/examples/default1s2c.pdf | Bin 83275 -> 83450 bytes .../contrib/hvfloat/doc/examples/default1s2c.tex | 6 +- .../contrib/hvfloat/doc/examples/default2s1c.pdf | Bin 79445 -> 79548 bytes .../contrib/hvfloat/doc/examples/default2s1c.tex | 10 +- .../contrib/hvfloat/doc/examples/default2s2c.pdf | Bin 85824 -> 85983 bytes .../contrib/hvfloat/doc/examples/default2s2c.tex | 10 +- .../hvfloat/doc/examples/doublefullpage2s2c.pdf | Bin 0 -> 1759640 bytes .../hvfloat/doc/examples/doublefullpage2s2c.tex | 802 +++ .../hvfloat/doc/examples/doublepage2s1c.pdf | Bin 2314853 -> 2318150 bytes .../hvfloat/doc/examples/doublepage2s1c.tex | 7 +- .../hvfloat/doc/examples/doublepage2s2c.pdf | Bin 619030 -> 617080 bytes .../contrib/hvfloat/doc/examples/even1s1c.pdf | Bin 77658 -> 77798 bytes .../contrib/hvfloat/doc/examples/even1s1c.tex | 10 +- .../contrib/hvfloat/doc/examples/even1s2c.pdf | Bin 86404 -> 86556 bytes .../contrib/hvfloat/doc/examples/even1s2c.tex | 10 +- .../contrib/hvfloat/doc/examples/even2s1c.pdf | Bin 84813 -> 84573 bytes .../contrib/hvfloat/doc/examples/even2s1c.tex | 10 +- .../contrib/hvfloat/doc/examples/even2s2c.pdf | Bin 85098 -> 85253 bytes .../contrib/hvfloat/doc/examples/even2s2c.tex | 10 +- .../contrib/hvfloat/doc/examples/fullpage1s1c.pdf | Bin 0 -> 85743 bytes .../contrib/hvfloat/doc/examples/fullpage1s1c.tex | 64 + .../contrib/hvfloat/doc/examples/fullpage1s2c.pdf | Bin 86773 -> 84722 bytes .../contrib/hvfloat/doc/examples/fullpage1s2c.tex | 6 +- .../contrib/hvfloat/doc/examples/inner1s2c.pdf | Bin 84020 -> 84306 bytes .../contrib/hvfloat/doc/examples/inner1s2c.tex | 10 +- .../contrib/hvfloat/doc/examples/inner2s1c.pdf | Bin 83977 -> 84127 bytes .../contrib/hvfloat/doc/examples/inner2s1c.tex | 10 +- .../contrib/hvfloat/doc/examples/inner2s2c.pdf | Bin 84013 -> 84232 bytes .../contrib/hvfloat/doc/examples/inner2s2c.tex | 10 +- .../contrib/hvfloat/doc/examples/left2s2c.pdf | Bin 85512 -> 85692 bytes .../contrib/hvfloat/doc/examples/left2s2c.tex | 10 +- .../hvfloat/doc/examples/multi-after1s1c.pdf | Bin 142624 -> 142671 bytes .../hvfloat/doc/examples/multi-after1s1c.tex | 10 +- .../hvfloat/doc/examples/multi-default1s1c.pdf | Bin 146172 -> 146434 bytes .../hvfloat/doc/examples/multi-default1s1c.tex | 10 +- .../hvfloat/doc/examples/multi-default1s2c.pdf | Bin 94586 -> 94782 bytes .../hvfloat/doc/examples/multi-default1s2c.tex | 10 +- .../hvfloat/doc/examples/multi-default2s1c.pdf | Bin 146343 -> 146566 bytes .../hvfloat/doc/examples/multi-default2s1c.tex | 10 +- .../hvfloat/doc/examples/multi-default2s2c.pdf | Bin 92182 -> 92370 bytes .../hvfloat/doc/examples/multi-default2s2c.tex | 10 +- .../hvfloat/doc/examples/multi-inner2s2c.pdf | Bin 89784 -> 89748 bytes .../hvfloat/doc/examples/multi-inner2s2c.tex | 10 +- .../hvfloat/doc/examples/multi-outer2s2c.pdf | Bin 92984 -> 93075 bytes .../hvfloat/doc/examples/multi-outer2s2c.tex | 10 +- .../hvfloat/doc/examples/multi-right1s1c.pdf | Bin 145736 -> 146003 bytes .../hvfloat/doc/examples/multi-right1s1c.tex | 10 +- .../latex/contrib/hvfloat/doc/examples/odd1s1c.pdf | Bin 77805 -> 77702 bytes .../latex/contrib/hvfloat/doc/examples/odd1s1c.tex | 10 +- .../latex/contrib/hvfloat/doc/examples/odd1s2c.pdf | Bin 86523 -> 86699 bytes .../latex/contrib/hvfloat/doc/examples/odd1s2c.tex | 10 +- .../latex/contrib/hvfloat/doc/examples/odd2s1c.pdf | Bin 174218 -> 173970 bytes .../latex/contrib/hvfloat/doc/examples/odd2s1c.tex | 10 +- .../latex/contrib/hvfloat/doc/examples/odd2s2c.pdf | Bin 85566 -> 85689 bytes .../latex/contrib/hvfloat/doc/examples/odd2s2c.tex | 10 +- .../contrib/hvfloat/doc/examples/outer1s2c.pdf | Bin 86318 -> 86575 bytes .../contrib/hvfloat/doc/examples/outer1s2c.tex | 10 +- .../contrib/hvfloat/doc/examples/outer2s1c.pdf | Bin 84292 -> 84447 bytes .../contrib/hvfloat/doc/examples/outer2s1c.tex | 10 +- .../contrib/hvfloat/doc/examples/outer2s2c.pdf | Bin 84680 -> 84939 bytes .../contrib/hvfloat/doc/examples/outer2s2c.tex | 10 +- .../hvfloat/doc/examples/paper-after1s1c.pdf | Bin 79267 -> 78972 bytes .../hvfloat/doc/examples/paper-after1s1c.tex | 10 +- .../hvfloat/doc/examples/paper-after2s2c.pdf | Bin 0 -> 89816 bytes .../hvfloat/doc/examples/paper-after2s2c.tex | 81 + .../hvfloat/doc/examples/paper-default1s1c.pdf | Bin 79967 -> 81234 bytes .../hvfloat/doc/examples/paper-default1s1c.tex | 13 +- .../hvfloat/doc/examples/paper-default1s2c.pdf | Bin 90508 -> 90660 bytes .../hvfloat/doc/examples/paper-default1s2c.tex | 10 +- .../hvfloat/doc/examples/paper-default2s1c.pdf | Bin 87935 -> 88153 bytes .../hvfloat/doc/examples/paper-default2s1c.tex | 8 +- .../hvfloat/doc/examples/paper-default2s2c.pdf | Bin 90332 -> 90479 bytes .../hvfloat/doc/examples/paper-default2s2c.tex | 10 +- .../hvfloat/doc/examples/paper-even2s1c.pdf | Bin 0 -> 87462 bytes .../hvfloat/doc/examples/paper-even2s1c.tex | 81 + .../hvfloat/doc/examples/paper-inner2s2c.pdf | Bin 87855 -> 88039 bytes .../hvfloat/doc/examples/paper-inner2s2c.tex | 10 +- .../contrib/hvfloat/doc/examples/paper-odd2s1c.pdf | Bin 0 -> 87342 bytes .../contrib/hvfloat/doc/examples/paper-odd2s1c.tex | 81 + .../hvfloat/doc/examples/paper-right1s1c.pdf | Bin 80290 -> 81413 bytes .../hvfloat/doc/examples/paper-right1s1c.tex | 10 +- .../doc/examples/paper-twocolcaption-after2s2c.pdf | Bin 0 -> 1615749 bytes .../doc/examples/paper-twocolcaption-after2s2c.tex | 81 + .../contrib/hvfloat/doc/examples/preamble.ltx | 3 + .../contrib/hvfloat/doc/examples/right1s1c.pdf | Bin 80126 -> 80120 bytes .../contrib/hvfloat/doc/examples/right1s1c.tex | 10 +- .../contrib/hvfloat/doc/examples/right1s2c.pdf | Bin 89340 -> 89638 bytes .../contrib/hvfloat/doc/examples/right1s2c.tex | 10 +- .../contrib/hvfloat/doc/examples/right2s1c.pdf | Bin 81033 -> 81082 bytes .../contrib/hvfloat/doc/examples/right2s1c.tex | 10 +- .../contrib/hvfloat/doc/examples/right2s2c.pdf | Bin 85585 -> 85693 bytes .../contrib/hvfloat/doc/examples/right2s2c.tex | 10 +- .../latex/contrib/hvfloat/doc/examples/runAll.sh | 2 +- .../latex/contrib/hvfloat/doc/examples/runEXA.sh | 3 +- .../contrib/hvfloat/doc/examples/sub-after1s1c.pdf | Bin 143952 -> 144213 bytes .../contrib/hvfloat/doc/examples/sub-after1s1c.tex | 10 +- .../contrib/hvfloat/doc/examples/sub-after2s2c.pdf | Bin 144771 -> 145001 bytes .../contrib/hvfloat/doc/examples/sub-after2s2c.tex | 10 +- .../hvfloat/doc/examples/sub-default1s1c.pdf | Bin 144003 -> 144288 bytes .../hvfloat/doc/examples/sub-default1s1c.tex | 10 +- .../hvfloat/doc/examples/sub-default1s2c.pdf | Bin 144217 -> 144422 bytes .../hvfloat/doc/examples/sub-default1s2c.tex | 10 +- .../hvfloat/doc/examples/sub-default2s2c.pdf | Bin 143517 -> 143782 bytes .../hvfloat/doc/examples/sub-default2s2c.tex | 10 +- .../contrib/hvfloat/doc/examples/sub-right1s1c.pdf | Bin 143873 -> 144144 bytes .../contrib/hvfloat/doc/examples/sub-right1s1c.tex | 10 +- .../contrib/hvfloat/doc/examples/sub-right1s2c.pdf | Bin 144879 -> 145100 bytes .../contrib/hvfloat/doc/examples/sub-right1s2c.tex | 10 +- .../contrib/hvfloat/doc/examples/sub-right2s2c.pdf | Bin 144315 -> 144505 bytes .../contrib/hvfloat/doc/examples/sub-right2s2c.tex | 10 +- .../contrib/hvfloat/doc/examples/wide1s2c.pdf | Bin 120949 -> 120723 bytes .../contrib/hvfloat/doc/examples/wide2s2c.pdf | Bin 121917 -> 121738 bytes macros/latex/contrib/hvfloat/doc/hvfloat.pdf | Bin 7372289 -> 5163692 bytes macros/latex/contrib/hvfloat/doc/hvfloat.tex | 9 +- macros/latex/contrib/hvfloat/latex/hvfloat.sty | 268 +- macros/latex/contrib/moodle/README.md | 37 +- macros/latex/contrib/moodle/moodle.dtx | 5719 +++++++++++++------- macros/latex/contrib/moodle/moodle.ins | 4 +- macros/latex/contrib/moodle/moodle.pdf | Bin 260933 -> 369655 bytes .../contrib/profcollege/doc/ProfCollege-doc.pdf | Bin 9585861 -> 9671406 bytes .../contrib/profcollege/latex/ProfCollege.sty | 1651 ++++-- .../profcollege/metapost/PfCCalculatrice.mp | 9 +- macros/latex/contrib/ufrgscca/README.md | 5 +- macros/latex/contrib/ufrgscca/doc/ufrgscca.pdf | 646 +-- macros/latex/contrib/ufrgscca/doc/ufrgscca.tex | 2 +- .../latex/contrib/ufrgscca/latex/ufrgscca-abnt.sty | 8 +- .../contrib/ufrgscca/latex/ufrgscca-coord.sty | 6 +- .../latex/contrib/ufrgscca/latex/ufrgscca-core.sty | 6 +- .../contrib/ufrgscca/latex/ufrgscca-cover.sty | 6 +- .../contrib/ufrgscca/latex/ufrgscca-curr-graph.sty | 6 +- .../contrib/ufrgscca/latex/ufrgscca-curr-tab.sty | 6 +- .../latex/contrib/ufrgscca/latex/ufrgscca-curr.sty | 6 +- .../contrib/ufrgscca/latex/ufrgscca-en-base.def | 6 +- .../contrib/ufrgscca/latex/ufrgscca-en-coord.def | 6 +- .../contrib/ufrgscca/latex/ufrgscca-en-core.def | 6 +- .../contrib/ufrgscca/latex/ufrgscca-en-forms.def | 6 +- .../contrib/ufrgscca/latex/ufrgscca-forms.sty | 6 +- .../latex/contrib/ufrgscca/latex/ufrgscca-gen.sty | 6 +- .../contrib/ufrgscca/latex/ufrgscca-lists.sty | 6 +- .../latex/contrib/ufrgscca/latex/ufrgscca-ppc.sty | 6 +- .../contrib/ufrgscca/latex/ufrgscca-ptBR-base.def | 6 +- .../contrib/ufrgscca/latex/ufrgscca-ptBR-coord.def | 6 +- .../contrib/ufrgscca/latex/ufrgscca-ptBR-core.def | 6 +- .../contrib/ufrgscca/latex/ufrgscca-ptBR-forms.def | 6 +- macros/latex/contrib/ufrgscca/latex/ufrgscca.cls | 6 +- 183 files changed, 8000 insertions(+), 3941 deletions(-) create mode 100644 macros/latex/contrib/bmstu/bmstu-appendix.sty create mode 100644 macros/latex/contrib/bmstu/bmstu-biblio.sty create mode 100644 macros/latex/contrib/bmstu/bmstu-defabbr.sty create mode 100644 macros/latex/contrib/bmstu/bmstu-essay.sty create mode 100644 macros/latex/contrib/bmstu/bmstu-figure.sty create mode 100644 macros/latex/contrib/bmstu/bmstu-listing.sty create mode 100644 macros/latex/contrib/bmstu/bmstu-logo.pdf create mode 100644 macros/latex/contrib/bmstu/bmstu-title.sty create mode 100644 macros/latex/contrib/bmstu/bmstu-toc.sty create mode 100644 macros/latex/contrib/bmstu/examples/bmstu-examples.pdf create mode 100644 macros/latex/contrib/bmstu/examples/bmstu-examples.tex delete mode 100644 macros/latex/contrib/bmstu/examples/examples.pdf delete mode 100644 macros/latex/contrib/bmstu/examples/examples.tex delete mode 100644 macros/latex/contrib/bmstu/img/bmstu-logo.pdf create mode 100644 macros/latex/contrib/bmstu/manifest.txt delete mode 100644 macros/latex/contrib/bmstu/sty/bmstu-appendix.sty delete mode 100644 macros/latex/contrib/bmstu/sty/bmstu-biblio.sty delete mode 100644 macros/latex/contrib/bmstu/sty/bmstu-defabbr.sty delete mode 100644 macros/latex/contrib/bmstu/sty/bmstu-essay.sty delete mode 100644 macros/latex/contrib/bmstu/sty/bmstu-figure.sty delete mode 100644 macros/latex/contrib/bmstu/sty/bmstu-listing.sty delete mode 100644 macros/latex/contrib/bmstu/sty/bmstu-title.sty delete mode 100644 macros/latex/contrib/bmstu/sty/bmstu-toc.sty create mode 100644 macros/latex/contrib/hvfloat/doc/examples/doublefullpage2s2c.pdf create mode 100644 macros/latex/contrib/hvfloat/doc/examples/doublefullpage2s2c.tex create mode 100644 macros/latex/contrib/hvfloat/doc/examples/fullpage1s1c.pdf create mode 100644 macros/latex/contrib/hvfloat/doc/examples/fullpage1s1c.tex create mode 100644 macros/latex/contrib/hvfloat/doc/examples/paper-after2s2c.pdf create mode 100644 macros/latex/contrib/hvfloat/doc/examples/paper-after2s2c.tex create mode 100644 macros/latex/contrib/hvfloat/doc/examples/paper-even2s1c.pdf create mode 100644 macros/latex/contrib/hvfloat/doc/examples/paper-even2s1c.tex create mode 100644 macros/latex/contrib/hvfloat/doc/examples/paper-odd2s1c.pdf create mode 100644 macros/latex/contrib/hvfloat/doc/examples/paper-odd2s1c.tex create mode 100644 macros/latex/contrib/hvfloat/doc/examples/paper-twocolcaption-after2s2c.pdf create mode 100644 macros/latex/contrib/hvfloat/doc/examples/paper-twocolcaption-after2s2c.tex mode change 100644 => 100755 macros/latex/contrib/hvfloat/doc/examples/runAll.sh mode change 100644 => 100755 macros/latex/contrib/hvfloat/doc/examples/runEXA.sh (limited to 'macros/latex/contrib') diff --git a/macros/latex/contrib/bmstu/README.md b/macros/latex/contrib/bmstu/README.md index e62cb3cd35..86a659290d 100644 --- a/macros/latex/contrib/bmstu/README.md +++ b/macros/latex/contrib/bmstu/README.md @@ -1,21 +1,21 @@ # bmstu package -Release 2022-01-24 (v1.0.0) +Release 2023-01-28 (v2.0.0) ## Overview The class defines commands and environments for creating reports and explanatory notes in Bauman Moscow State Technical University (Russia). -Generated files correspond to [requirements of Bauman Moscow State Technical University](https://mf.bmstu.ru/info/uu/ot/norm_docs/docs/polozhenie_normcontrol_pril1.pdf) and [GOST 7.32-2017](https://docs.cntd.ru/document/1200157208). Explanatory notes to graduate qualification works are successfully tested by [TestVKR](https://vkr.bmstu.ru/) (build 203). +Generated files correspond to requirements of Bauman Moscow State Technical University and GOST 7.32-2017. Explanatory notes to graduate qualification works are successfully tested by TestVKR (build 216). Please go to the official repository at https://github.com/Orianti/bmstu-latex-class to submit bug reports, request new features, etc. ## License -This work (except `bmstu-logo.pdf`) is distributed under The LaTeX Project Public License. +Files listed in manifest.txt are distributed under The LaTeX Project Public License. -File `bmstu-logo.pdf` is a logo of Bauman Moscow State Technical University and complies with fair use (article 1274 of the Russian Civil Code). +File bmstu-logo.pdf is a logo of Bauman Moscow State Technical University and complies with fair use (article 1274 of the Russian Civil Code). --- -Copyright © 2020-2022 Mikael Novikov
-All rights reserved. \ No newline at end of file +Copyright © 2020-2023 Mikael Novikov
+All rights reserved. diff --git a/macros/latex/contrib/bmstu/bmstu-appendix.sty b/macros/latex/contrib/bmstu/bmstu-appendix.sty new file mode 100644 index 0000000000..c5dae6e270 --- /dev/null +++ b/macros/latex/contrib/bmstu/bmstu-appendix.sty @@ -0,0 +1,37 @@ +%% bmstu_appendix.sty +%% Copyright 2023 Mikael Novikov +% +% This work may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2005/12/01 or later. +% +% This work has the LPPL maintenance status `maintained'. +% +% The Current Maintainer of this work is Mikael Novikov. +% +% This work consists of all files listed in manifest.txt. + +% Установка заголовков приложений +\RequirePackage[ + titletoc, + title, +]{appendix} +\AtBeginDocument{\renewcommand{\appendixname}{ПРИЛОЖЕНИЕ}} + +% Создание приложений +\let\oldappendices\appendices +\let\oldendappendices\endappendices +\renewenvironment{appendices} +{ + \titleformat{\chapter}{\large\bfseries}{\appendixname~\thechapter}{0pt}{\centering\large\bfseries\\} + \setcounter{appendixchapters}{0} + \oldappendices + \renewcommand{\thechapter}{\Asbuk{chapter}} +} +{ + \oldendappendices +} diff --git a/macros/latex/contrib/bmstu/bmstu-biblio.sty b/macros/latex/contrib/bmstu/bmstu-biblio.sty new file mode 100644 index 0000000000..1000df7eb4 --- /dev/null +++ b/macros/latex/contrib/bmstu/bmstu-biblio.sty @@ -0,0 +1,23 @@ +%% bmstu_biblio.sty +%% Copyright 2023 Mikael Novikov +% +% This work may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2005/12/01 or later. +% +% This work has the LPPL maintenance status `maintained'. +% +% The Current Maintainer of this work is Mikael Novikov. +% +% This work consists of all files listed in manifest.txt. + +% Создание списка использованных источников +\newcommand{\makebibliography} +{ + \printbibliography[title=СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ] + \addcontentsline{toc}{chapter}{СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ} +} \ No newline at end of file diff --git a/macros/latex/contrib/bmstu/bmstu-defabbr.sty b/macros/latex/contrib/bmstu/bmstu-defabbr.sty new file mode 100644 index 0000000000..e9c7851556 --- /dev/null +++ b/macros/latex/contrib/bmstu/bmstu-defabbr.sty @@ -0,0 +1,51 @@ +%% bmstu_defabbr.sty +%% Copyright 2023 Mikael Novikov +% +% This work may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2005/12/01 or later. +% +% This work has the LPPL maintenance status `maintained'. +% +% The Current Maintainer of this work is Mikael Novikov. +% +% This work consists of all files listed in manifest.txt. + +% Создание элемента +\RequirePackage{enumitem} +\newcommand{\definition}[2] +{ + \item \noindent #1 --- #2 +} + +% Создание страницы определений +\newenvironment{definitions} +{ + \chapter*{ОПРЕДЕЛЕНИЯ} + \addcontentsline{toc}{chapter}{ОПРЕДЕЛЕНИЯ} + + В настоящей расчетно-пояснительной записке применяют следующие термины с соответствующими определениями. + + \begin{description}[leftmargin=0pt] + } + { + \end{description} +} + +% Создание страницы обозначений и сокращений +\newenvironment{abbreviations} +{ + \chapter*{ОБОЗНАЧЕНИЯ И СОКРАЩЕНИЯ} + \addcontentsline{toc}{chapter}{ОБОЗНАЧЕНИЯ И СОКРАЩЕНИЯ} + + В настоящей расчетно-пояснительной записке применяют следующие сокращения и обозначения. + + \begin{description}[leftmargin=0pt] + } + { + \end{description} +} \ No newline at end of file diff --git a/macros/latex/contrib/bmstu/bmstu-essay.sty b/macros/latex/contrib/bmstu/bmstu-essay.sty new file mode 100644 index 0000000000..316623de2f --- /dev/null +++ b/macros/latex/contrib/bmstu/bmstu-essay.sty @@ -0,0 +1,68 @@ +%% bmstu_essay.sty +%% Copyright 2023 Mikael Novikov +% +% This work may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2005/12/01 or later. +% +% This work has the LPPL maintenance status `maintained'. +% +% The Current Maintainer of this work is Mikael Novikov. +% +% This work consists of all files listed in manifest.txt. + +% Подсчет количества страниц +\RequirePackage{lastpage} + +% Подсчет количества рисунков и таблиц +\RequirePackage{etoolbox} +\newcounter{totfigures} +\newcounter{tottables} +\providecommand\totfig{} +\providecommand\tottab{} +\makeatletter +\AtEndDocument{% + \addtocounter{totfigures}{\value{figure}}% + \addtocounter{tottables}{\value{table}}% + \immediate\write\@mainaux{% + \string\gdef\string\totfig{\number\value{totfigures}}% + \string\gdef\string\tottab{\number\value{tottables}}% + }% +} +\makeatother +\pretocmd{\chapter}{\addtocounter{totfigures}{\value{figure}}\setcounter{figure}{0}}{}{} +\pretocmd{\chapter}{\addtocounter{tottables}{\value{table}}\setcounter{table}{0}}{}{} + +% Подсчет количества использованных источников +\newcounter{totbibentries} +\newcommand*{\listcounted}{} +\providecommand\totbib{} +\makeatletter +\AtDataInput{% + \xifinlist{\abx@field@entrykey}\listcounted% + {}% + {\stepcounter{totbibentries}% + \listxadd\listcounted{\abx@field@entrykey}}% +}% +\makeatother + +% Подсчет количества приложений +\usepackage{totcount, assoccnt} +\newcounter{appendixchapters} +\DeclareAssociatedCounters{chapter}{appendixchapters} +\regtotcounter{appendixchapters} + +% Создание страницы реферата +\newenvironment{essay}[1] +{ + \chapter*{РЕФЕРАТ} + \addcontentsline{toc}{chapter}{РЕФЕРАТ} + + Расчетно-пояснительная записка \begin{NoHyper}\pageref{LastPage}\end{NoHyper}~с., \totfig~рис., \tottab~табл., \thetotbibentries~источн., \total{appendixchapters}~прил. + + \noindent \MakeUppercase{#1} \par +}{} \ No newline at end of file diff --git a/macros/latex/contrib/bmstu/bmstu-figure.sty b/macros/latex/contrib/bmstu/bmstu-figure.sty new file mode 100644 index 0000000000..dde6c6b2bc --- /dev/null +++ b/macros/latex/contrib/bmstu/bmstu-figure.sty @@ -0,0 +1,52 @@ +%% bmstu_figure.sty +%% Copyright 2023 Mikael Novikov +% +% This work may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2005/12/01 or later. +% +% This work has the LPPL maintenance status `maintained'. +% +% The Current Maintainer of this work is Mikael Novikov. +% +% This work consists of all files listed in manifest.txt. + +% Подключения пакетов фигур +\RequirePackage{graphicx} +\RequirePackage{float} +\RequirePackage{wrapfig} +\RequirePackage{tikzscale} + +% Подключения пакета графиков +\RequirePackage{pgfplots} +\pgfplotsset{compat=newest} + +% Команда создания рисунка +\newcommand{\includeimage}[5] +{ + \ifthenelse{\equal{#2}{f}} + { + \begin{figure}[#3] + \center{\includegraphics[width=#4]{inc/img/#1}} + \caption{#5} + \label{img:#1} + \end{figure} + } + { + \ifthenelse{\equal{#2}{w}} + { + \begin{wrapfigure}{#3}{#4} + \center{\includegraphics[width=#4]{inc/img/#1}} + \caption{#5} + \label{img:#1} + \end{wrapfigure} + } + { + \PackageError{bmstu}{unknown image type}{} + } + } +} \ No newline at end of file diff --git a/macros/latex/contrib/bmstu/bmstu-listing.sty b/macros/latex/contrib/bmstu/bmstu-listing.sty new file mode 100644 index 0000000000..b4a0c0148a --- /dev/null +++ b/macros/latex/contrib/bmstu/bmstu-listing.sty @@ -0,0 +1,63 @@ +%% bmstu_listing.sty +%% Copyright 2023 Mikael Novikov +% +% This work may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2005/12/01 or later. +% +% This work has the LPPL maintenance status `maintained'. +% +% The Current Maintainer of this work is Mikael Novikov. +% +% This work consists of all files listed in manifest.txt. + +% Настройка листингов +\RequirePackage{listings} +\RequirePackage{listingsutf8} +\lstset{ + inputencoding=utf8/koi8-r, + basicstyle=\small\ttfamily, + rulecolor=\color{black}, + escapeinside={\%*}{*)}, + breaklines=true, + breakatwhitespace=true, + tabsize=4, + showstringspaces=false, + float=h!, + abovecaptionskip=-5pt, +} + +% Команда создания простого листинга +\newcommand{\includelisting}[2] +{ + \lstinputlisting[ + frame=single, + caption={#2}, + label={lst:#1}, + ]{inc/lst/#1} +} + +\definecolor{numbers}{rgb}{0.5, 0.5, 0.5} +\definecolor{keywords}{rgb}{0.13, 0.13, 1} +\definecolor{comments}{rgb}{0, 0.5, 0} +\definecolor{strings}{rgb}{0.9, 0, 0} + +% Команда создания листинга с подсветкой синтаксиса и нумерацией строк +\newcommand{\includelistingpretty}[3] +{ + \lstinputlisting[ + language={#2}, + keywordstyle=\color{keywords}, + stringstyle=\color{strings}, + commentstyle=\color{comments}, + frame=leftline, + numbers=left, + numberstyle=\footnotesize\color{numbers}, + caption={#3}, + label={lst:#1}, + ]{inc/lst/#1} +} \ No newline at end of file diff --git a/macros/latex/contrib/bmstu/bmstu-logo.pdf b/macros/latex/contrib/bmstu/bmstu-logo.pdf new file mode 100644 index 0000000000..226943b0b4 Binary files /dev/null and b/macros/latex/contrib/bmstu/bmstu-logo.pdf differ diff --git a/macros/latex/contrib/bmstu/bmstu-title.sty b/macros/latex/contrib/bmstu/bmstu-title.sty new file mode 100644 index 0000000000..d2dea47245 --- /dev/null +++ b/macros/latex/contrib/bmstu/bmstu-title.sty @@ -0,0 +1,269 @@ +%% bmstu_title.sty +%% Copyright 2023 Mikael Novikov +% +% This work may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2005/12/01 or later. +% +% This work has the LPPL maintenance status `maintained'. +% +% The Current Maintainer of this work is Mikael Novikov. +% +% This work consists of all files listed in manifest.txt. + +% Установка мета-данных выходного файла +\newcommand{\documentmeta}[4] +{ + \hypersetup{ + pdftitle={#1 #2 #3}, + pdfsubject={#4}, + pdfauthor={#2} + } +} + +% Cоздание полей +\RequirePackage[normalem]{ulem} +\RequirePackage{stackengine} +\newcommand{\longunderline}[1] +{ + \uline{#1\hfill\mbox{}} +} +\newcommand{\fixunderline}[3] +{ + $\underset{\text{#3}}{\text{\uline{\stackengine{0pt}{\hspace{#2}}{\text{#1}}{O}{c}{F}{F}{L}}}}$ +} + +% Создание горизонтальной линии +\makeatletter +\newcommand{\vhrulefill}[1] +{ + \leavevmode\leaders\hrule\@height#1\hfill \kern\z@ +} +\makeatother + +% Создание шапки титульной страницы +\newcommand{\titlepageheader}[2] +{ + \begin{wrapfigure}[7]{l}{0.14\linewidth} + \vspace{3.4mm} + \hspace{-8mm} + \includegraphics[width=0.89\linewidth]{bmstu-logo} + \end{wrapfigure} + + { + \singlespacing \small + Министерство науки и высшего образования Российской Федерации \\ + Федеральное государственное бюджетное образовательное учреждение \\ + высшего образования \\ + <<Московский государственный технический университет \\ + имени Н.~Э.~Баумана \\ + (национальный исследовательский университет)>> \\ + (МГТУ им. Н.~Э.~Баумана) \\ + } + + \vspace{-4.2mm} + \vhrulefill{0.9mm} \\ + \vspace{-7mm} + \vhrulefill{0.2mm} \\ + \vspace{2.8mm} + + { + \small + ФАКУЛЬТЕТ \longunderline{<<#1>>} \\ + \vspace{3.3mm} + КАФЕДРА \longunderline{<<#2>>} \\ + } +} + +% Установка заголовков отчета по НИР +\newcommand{\titlepageresearchtitle}[1] +{ + { + \LARGE \bfseries + РАСЧЕТНО-ПОЯСНИТЕЛЬНАЯ ЗАПИСКА \\ + } + \vspace{5mm} + { + \Large \itshape + К НАУЧНО-ИССЛЕДОВАТЕЛЬСКОЙ РАБОТЕ \\ + \vspace{5mm} + НА ТЕМУ: \\ + <<#1>> \\ + } +} + +% Установка заголовков РПЗ +\newcommand{\titlepagenotetitle}[2] +{ + { + \LARGE \bfseries + РАСЧЕТНО-ПОЯСНИТЕЛЬНАЯ ЗАПИСКА \\ + } + \vspace{5mm} + { + \Large \itshape + #1 \\ + \vspace{5mm} + НА ТЕМУ: \\ + <<#2>> \\ + } +} + +% Установка заголовков отчета +\newcommand{\titlepagereporttitle}[4] +{ + \textbf{ОТЧЕТ} \\ + по #1 \\ + \ifthenelse{\isempty{#2}}{}{по курсу <<#2>> \\} + \ifthenelse{\isempty{#3}}{}{на тему: <<#3>> \\} + \ifthenelse{\isempty{#4}}{}{Вариант №~#4 \\} +} + +% Создание поля студента +\RequirePackage{pgffor} + +\newcommand*\titlepagestudentscontent{} + +\newcommand{\maketitlepagestudent}[1] +{ + \foreach \s/\g in {#1} { + \gappto\titlepagestudentscontent{Студент \fixunderline} + \xappto\titlepagestudentscontent{{\g}} + \gappto\titlepagestudentscontent{{25mm}{(Группа)} &} + \gappto\titlepagestudentscontent{\fixunderline{}{40mm}{(Подпись, дата)} \vspace{1.3mm} &} + \gappto\titlepagestudentscontent{\fixunderline} + \xappto\titlepagestudentscontent{{\s}} + \gappto\titlepagestudentscontent{{40mm}{(И.~О.~Фамилия)} \\} + } +} + +% Создание прочих полей +\newcommand*\titlepageotherscontent{} + +\newcommand{\maketitlepageothers}[2] +{ + \foreach \c in {#2} { + \gappto\titlepagestudentscontent{#1 &} + \gappto\titlepagestudentscontent{\fixunderline{}{40mm}{(Подпись, дата)} \vspace{1.3mm} &} + \gappto\titlepagestudentscontent{\fixunderline} + \xappto\titlepagestudentscontent{{\c}} + \gappto\titlepagestudentscontent{{40mm}{(И.~О.~Фамилия)} \\} + } +} + +% Установка исполнителей работы +\newcommand{\titlepageauthors}[5] +{ + { + \renewcommand{\titlepagestudentscontent}{} + \maketitlepagestudent{#1} + + \renewcommand{\titlepageotherscontent}{} + \maketitlepageothers{#2}{#3} + \maketitlepageothers{Консультант}{#4} + \maketitlepageothers{Нормоконтролер}{#5} + + \small + \begin{tabularx}{\textwidth}{@{}>{\hsize=.5\hsize}X>{\hsize=.25\hsize}X>{\hsize=.25\hsize}X@{}} + \titlepagestudentscontent + + \titlepageotherscontent + \end{tabularx} + } +} + +% Создание титульной страницы РПЗ к ВКР +\newcommand{\makethesistitle}[7] +{ + \documentmeta{РПЗ к ВКР}{#4}{}{#3} + + \begin{titlepage} + \centering + + \titlepageheader{#1}{#2} + \vspace{15.8mm} + + \titlepagenotetitle{К ВЫПУСКНОЙ КВАЛИФИКАЦИОННОЙ РАБОТЕ}{#3} + \vfill + + \titlepageauthors{#4}{Руководитель ВКР}{#5}{#6}{#7} + \vspace{14mm} + + \textit{{\the\year} г.} + \end{titlepage} + + \setcounter{page}{2} +} + +% Создание титульной страницы отчета по НИР +\newcommand{\makeresearchtitle}[6] +{ + \documentmeta{Отчет по НИР}{#4}{}{#3} + + \begin{titlepage} + \centering + + \titlepageheader{#1}{#2} + \vspace{15.8mm} + + \titlepageresearchtitle{#3} + \vfill + + \titlepageauthors{#4}{Руководитель НИР}{#5}{#6}{} + \vspace{14mm} + + \textit{{\the\year} г.} + \end{titlepage} + + \setcounter{page}{2} +} + +% Создание титульной страницы РПЗ к КР +\newcommand{\makecourseworktitle}[6] +{ + \documentmeta{РПЗ к КР}{#4}{}{#3} + + \begin{titlepage} + \centering + + \titlepageheader{#1}{#2} + \vspace{15.8mm} + + \titlepagenotetitle{К КУРСОВОЙ РАБОТЕ}{#3} + \vfill + + \titlepageauthors{#4}{Руководитель курсовой работы}{#5}{#6}{} + \vspace{14mm} + + \textit{{\the\year} г.} + \end{titlepage} + + \setcounter{page}{2} +} + +% Создание титульной страницы отчета +\newcommand{\makereporttitle}[8] +{ + \documentmeta{Отчет}{#7}{по #3 по курсу #4}{#5} + + \begin{titlepage} + \centering + + \titlepageheader{#1}{#2} + \vspace{15.8mm} + + \titlepagereporttitle{#3}{#4}{#5}{#6} + \vfill + + \titlepageauthors{#7}{Преподаватель}{#8}{}{} + \vspace{14mm} + + \textit{{\the\year} г.} + \end{titlepage} + + \setcounter{page}{2} +} diff --git a/macros/latex/contrib/bmstu/bmstu-toc.sty b/macros/latex/contrib/bmstu/bmstu-toc.sty new file mode 100644 index 0000000000..c3c86c6a02 --- /dev/null +++ b/macros/latex/contrib/bmstu/bmstu-toc.sty @@ -0,0 +1,23 @@ +%% bmstu_toc.sty +%% Copyright 2023 Mikael Novikov +% +% This work may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2005/12/01 or later. +% +% This work has the LPPL maintenance status `maintained'. +% +% The Current Maintainer of this work is Mikael Novikov. +% +% This work consists of all files listed in manifest.txt. + +% Создание содержания +\newcommand{\maketableofcontents} +{ + \renewcommand\contentsname{СОДЕРЖАНИЕ} + \tableofcontents +} \ No newline at end of file diff --git a/macros/latex/contrib/bmstu/bmstu.cls b/macros/latex/contrib/bmstu/bmstu.cls index 10f59f876d..48bca7b78c 100644 --- a/macros/latex/contrib/bmstu/bmstu.cls +++ b/macros/latex/contrib/bmstu/bmstu.cls @@ -1,5 +1,5 @@ %% bmstu.cls -%% Copyright 2022 Mikael Novikov +%% Copyright 2023 Mikael Novikov % % This work may be distributed and/or modified under the % conditions of the LaTeX Project Public License, either version 1.3 @@ -17,10 +17,10 @@ \NeedsTeXFormat{LaTeX2e} -\ProvidesClass{bmstu}[2022/01/24 v1.0.0 BMSTU class] +\ProvidesClass{bmstu}[2023/01/28 v2.0.0 BMSTU class] % Установка базового класса -\LoadClass[14pt]{extreport} +\LoadClass[a4paper,oneside,14pt]{extreport} % Настройка кодировки и языков \RequirePackage[T1,T2A]{fontenc} diff --git a/macros/latex/contrib/bmstu/examples/bmstu-examples.pdf b/macros/latex/contrib/bmstu/examples/bmstu-examples.pdf new file mode 100644 index 0000000000..89f3f3d602 Binary files /dev/null and b/macros/latex/contrib/bmstu/examples/bmstu-examples.pdf differ diff --git a/macros/latex/contrib/bmstu/examples/bmstu-examples.tex b/macros/latex/contrib/bmstu/examples/bmstu-examples.tex new file mode 100644 index 0000000000..1f846d4aaa --- /dev/null +++ b/macros/latex/contrib/bmstu/examples/bmstu-examples.tex @@ -0,0 +1,148 @@ +\documentclass{bmstu} + +\begin{document} + +% Аргументы, помеченные как необязательные, могут быть пустыми. В таком случае соответствующее этому аргументу поле (например, ФИО консультанта) добавлено не будет. + +% Титульная страница + +% Отчет + +\makereporttitle + {Информатика, искусственный интеллект и системы управления} % Название факультета + {Программное обеспечение ЭВМ и информационные технологии} % Название кафедры + {лабораторной работе №~1} % Название работы (в дат. падеже) + {Операционные системы} % Название курса (необязательный аргумент) + {Обработчик прерывания от системного таймера} % Тема работы + {} % Номер варианта (необязательный аргумент) + {Иванов~И.~И./ИУ7-51Б} % Номер группы/ФИО студента (если авторов несколько, их необходимо разделить запятой) + {Петров~П.~П.} % ФИО преподавателя + +% Расчетно-пояснительная записка к курсовой работе + +\makecourseworktitle + {Информатика, искусственный интеллект и системы управления} % Название факультета + {Программное обеспечение ЭВМ и информационные технологии} % Название кафедры + {Исследование распределения памяти в многопоточных приложениях Linux} % Тема работы + {Иванов~И.~И./ИУ7-71Б} % Номер группы/ФИО студента (если авторов несколько, их необходимо разделить запятой) + {Петров~П.~П.} % ФИО научного руководителя + {Сидоров~С.~С.,Кузнецов~К.~К.} % ФИО консультанта (необязательный аргумент; если консультантов несколько, их необходимо разделить запятой) + +% Отчет по научно-исследовательской работе + +\makeresearchtitle + {Информатика, искусственный интеллект и системы управления} % Название факультета + {Программное обеспечение ЭВМ и информационные технологии} % Название кафедры + {Исследование методов генерации исходного кода} % Тема работы + {Иванов~И.~И./ИУ7-81Б,Сергеев~С.~С./ИУ7-82Б} % Номер группы/ФИО студента (если авторов несколько, их необходимо разделить запятой) + {Петров~П.~П.} % ФИО научного руководителя + {} % ФИО консультанта (необязательный аргумент; если консультантов несколько, их необходимо разделить запятой) + +% Расчетно-пояснительная записка к выпускной квалификационной работе + +\makethesistitle + {Информатика, искусственный интеллект и системы управления} % Название факультета + {Программное обеспечение ЭВМ и информационные технологии} % Название кафедры + {Метод обнаружения спутников как точечных объектов на изображении} % Тема работы + {Иванов~И.~И./ИУ7-81Б} % Номер группы/ФИО студента (если авторов несколько, их необходимо разделить запятой) + {Петров~П.~П.} % ФИО научного руководителя + {Сидоров~С.~С.} % ФИО консультанта (необязательный аргумент; если консультантов несколько, их необходимо разделить запятой) + {Кузнецов~К.~К.} % ФИО нормоконтролера + +% Рисунок + +% Рисункам, добавленным следующими командами, присваивается метка `img:<имя файла без расширения>`. + +% Без обтекание текста + +На~рисунке~\ref{img:tux} символ семейства Unix-подобных операционных систем Linux. +Он отличается от~<<обычных>> пингвинов желтым цветом клюва и~лап. + +\includeimage + {tux} % Имя файла без расширения (файл должен быть расположен в директории inc/img/) + {f} % Обтекание (без обтекания) + {h} % Положение рисунка (см. figure из пакета float) + {0.25\textwidth} % Ширина рисунка + {Символ Linux (Tux)} % Подпись рисунка + +Cоздатель официального талисмана Linux~--- Ларри Юинг~--- американский программист и~дизайнер. +Известен также как создатель логотипа компании Ximian. +Живёт в~Остине (штат~Техас) вместе со~своей женой Евой и~дочерью Кристи. + +% С обтеканием текста + +\includeimage + {tuz} % Имя файла без расширения (файл должен быть расположен в директории inc/img/) + {w} % Обтекание (с обтеканием) + {r} % Положение рисунка (см. wrapfigure из пакета wrapfig) + {0.33\textwidth} % Ширина рисунка + {Tuz} % Подпись рисунка + +История Tux началась в~1996~году, когда в~списке рассылки разработчиков ядра Linux появились первые разговоры о~талисмане. +Среди множества предложений можно было выделить либо пародии на~логотипы других ОС, либо~стандартных животных. +Дискуссии несколько утихли после того, как Линус Торвальдс случайно обмолвился о~том, что ему нравятся пингвины. +Было несколько попыток нарисовать пингвинов в~разных позах, после чего поступило предложение логотипа в~виде пингвина, держащего Землю. + +В~качестве символа ядра~версии 2.6.29 принят тасманский дьявол Tuz (см.~рисунок~\ref{img:tuz}), изображение которого ранее служило талисманом конференции linux.conf.au 2009. +На~этой конференции Линус Торвальдс провёл успешную акцию по~благотворительной продаже игрушек Linux Tasmanian devil за~сохранение популяции Тасманского дьявола. \newpage + +% Листинг + +% Листингам, добавленным следующими командами, присваивается метка `lst:<имя файла с расширением>`. + +% Простой + +% C подсветкой синтаксиса и нумерацией строк + +% Обратите внимание, что добавление подсветки синтаксиса и нумерации строк приводит к ошибкам TestVKR. При этом ГОСТ 7.32-2017 не регулирует оформление исходного кода программ. + +% Если не будет указан язык программирования или указанный язык не поддерживается, подсветка синтаксиса работать не будет. + +На~листингах представлен исходный код программы Hello World на~языке программирования C в~двух вариантах оформления. + +\includelisting + {main.c} % Имя файла с расширением (файл должен быть расположен в директории inc/lst/) + {Исходный код программы Hello World} % Подпись листинга + +\includelistingpretty + {main.c} % Имя файла с расширением (файл должен быть расположен в директории inc/lst/) + {c} % Язык программирования (необязательный аргумент) + {Исходный код программы Hello World} % Подпись листинга + +% Заголовки + +\chapter{Операционные системы} + +\section{Unix} + +Unix (<> является зарегистрированной торговой маркой организации The~Open~Group) --- семейство переносимых, многозадачных и~многопользовательских операционных систем, которые основаны на~идеях оригинального проекта AT\&T Unix, разработанного в~1970-х~годах в~исследовательском центре Bell Labs Кеном Томпсоном, Деннисом Ритчи и~другими. + +\subsection{Обзор} + +Первая система Unix была разработана в подразделении Bell~Labs компании AT\&T. С~тех пор было создано большое количество различных Unix-систем. + +Юридически право называться <> имеют лишь те операционные системы, которые прошли сертификацию на~соответствие стандарту Single UNIX Specification. +Остальные~же, хотя и~используют сходные концепции и~технологии, называются Unix-подобными операционными системами (англ.~Unix-like). + +\subsubsection{Особенности} + +Основное отличие Unix-подобных систем от~других операционных систем заключается в~том, что это изначально многопользовательские многозадачные системы. +В~Unix может одновременно работать сразу много людей, каждый за~своим терминалом, при этом каждый из~них может выполнять множество различных вычислительных процессов, которые будут использовать ресурсы именно этого компьютера. \newpage + +% Формулы + +\begin{equation}\label{equ:matrix} + \frac{n!}{k!(n-k)!} = \binom{n}{k} +\end{equation} + +\begin{equation*} + A_{m,n} = + \begin{pmatrix} + a_{1,1} & a_{1,2} & \cdots & a_{1,n} \\ + a_{2,1} & a_{2,2} & \cdots & a_{2,n} \\ + \vdots & \vdots & \ddots & \vdots \\ + a_{m,1} & a_{m,2} & \cdots & a_{m,n} + \end{pmatrix} +\end{equation*} + +\end{document} diff --git a/macros/latex/contrib/bmstu/examples/examples.pdf b/macros/latex/contrib/bmstu/examples/examples.pdf deleted file mode 100644 index 89f3f3d602..0000000000 Binary files a/macros/latex/contrib/bmstu/examples/examples.pdf and /dev/null differ diff --git a/macros/latex/contrib/bmstu/examples/examples.tex b/macros/latex/contrib/bmstu/examples/examples.tex deleted file mode 100644 index f95b1fc21f..0000000000 --- a/macros/latex/contrib/bmstu/examples/examples.tex +++ /dev/null @@ -1,155 +0,0 @@ -\documentclass{bmstu} - -\begin{document} - -% Аргументы, помеченные как необязательные, могут быть пустыми. В таком случае соответствующее этому аргументу поле (например, ФИО консультанта) добавлено не будет. - -% Титульная страница - -% Отчет - -\makereporttitle - {Информатика, искусственный интеллект и системы управления} % Название факультета - {Программное обеспечение ЭВМ и информационные технологии} % Название кафедры - {лабораторной работе №~1} % Название работы (в дат. падеже) - {Операционные системы} % Название курса (необязательный аргумент) - {Обработчик прерывания от системного таймера} % Тема работы - {} % Номер варианта (необязательный аргумент) - {ИУ7-51Б} % Номер группы - {Иванов~И.~И.} % ФИО студента - {Петров~П.~П.} % ФИО преподавателя - -% Расчетно-пояснительная записка к курсовой работе - -\makecourseworktitle - {Информатика, искусственный интеллект и системы управления} % Название факультета - {Программное обеспечение ЭВМ и информационные технологии} % Название кафедры - {Исследование распределения памяти в многопоточных приложениях Linux} % Тема работы - {ИУ7-71Б} % Номер группы - {Иванов~И.~И.} % ФИО студента - {Петров~П.~П.} % ФИО научного руководителя - {Сидоров~С.~С.} % ФИО консультанта (необязательный аргумент) - {Кузнецов~К.~К.} % ФИО консультанта (необязательный аргумент) - -% Отчет по научно-исследовательской работе - -\makeresearchtitle - {Информатика, искусственный интеллект и системы управления} % Название факультета - {Программное обеспечение ЭВМ и информационные технологии} % Название кафедры - {Исследование методов генерации исходного кода} % Тема работы - {ИУ7-81Б} % Номер группы - {Иванов~И.~И.} % ФИО студента - {Петров~П.~П.} % ФИО научного руководителя - {} % ФИО консультанта (необязательный аргумент) - {} % ФИО консультанта (необязательный аргумент) - -% Расчетно-пояснительная записка к выпускной квалификационной работе - -\makethesistitle - {Информатика, искусственный интеллект и системы управления} % Название факультета - {Программное обеспечение ЭВМ и информационные технологии} % Название кафедры - {Метод обнаружения спутников как точечных объектов на изображении} % Тема работы - {ИУ7-81Б} % Номер группы - {Иванов~И.~И.} % ФИО студента - {Петров~П.~П.} % ФИО научного руководителя - {Сидоров~С.~С.} % ФИО консультанта (необязательный аргумент) - {} % ФИО консультанта (необязательный аргумент) - {Кузнецов~К.~К.} % ФИО нормоконтролера - -% Рисунок - -% Рисункам, добавленным следующими командами, присваивается метка `img:<имя файла без расширения>`. - -% Без обтекание текста - -На~рисунке~\ref{img:tux} символ семейства Unix-подобных операционных систем Linux. -Он отличается от~<<обычных>> пингвинов желтым цветом клюва и~лап. - -\includeimage - {tux} % Имя файла без расширения (файл должен быть расположен в директории inc/img/) - {f} % Обтекание (без обтекания) - {h} % Положение рисунка (см. figure из пакета float) - {0.25\textwidth} % Ширина рисунка - {Символ Linux (Tux)} % Подпись рисунка - -Cоздатель официального талисмана Linux~--- Ларри Юинг~--- американский программист и~дизайнер. -Известен также как создатель логотипа компании Ximian. -Живёт в~Остине (штат~Техас) вместе со~своей женой Евой и~дочерью Кристи. - -% С обтеканием текста - -\includeimage - {tuz} % Имя файла без расширения (файл должен быть расположен в директории inc/img/) - {w} % Обтекание (с обтеканием) - {r} % Положение рисунка (см. wrapfigure из пакета wrapfig) - {0.33\textwidth} % Ширина рисунка - {Tuz} % Подпись рисунка - -История Tux началась в~1996~году, когда в~списке рассылки разработчиков ядра Linux появились первые разговоры о~талисмане. -Среди множества предложений можно было выделить либо пародии на~логотипы других ОС, либо~стандартных животных. -Дискуссии несколько утихли после того, как Линус Торвальдс случайно обмолвился о~том, что ему нравятся пингвины. -Было несколько попыток нарисовать пингвинов в~разных позах, после чего поступило предложение логотипа в~виде пингвина, держащего Землю. - -В~качестве символа ядра~версии 2.6.29 принят тасманский дьявол Tuz (см.~рисунок~\ref{img:tuz}), изображение которого ранее служило талисманом конференции linux.conf.au 2009. -На~этой конференции Линус Торвальдс провёл успешную акцию по~благотворительной продаже игрушек Linux Tasmanian devil за~сохранение популяции Тасманского дьявола. \newpage - -% Листинг - -% Листингам, добавленным следующими командами, присваивается метка `lst:<имя файла с расширением>`. - -% Простой - -% C подсветкой синтаксиса и нумерацией строк - -% Обратите внимание, что добавление подсветки синтаксиса и нумерации строк приводит к ошибкам TestVKR. При этом ГОСТ 7.32-2017 не регулирует оформление исходного кода программ. - -% Если не будет указан язык программирования или указанный язык не поддерживается, подсветка синтаксиса работать не будет. - -На~листингах представлен исходный код программы Hello World на~языке программирования C в~двух вариантах оформления. - -\includelisting - {main.c} % Имя файла с расширением (файл должен быть расположен в директории inc/lst/) - {Исходный код программы Hello World} % Подпись листинга - -\includelistingpretty - {main.c} % Имя файла с расширением (файл должен быть расположен в директории inc/lst/) - {c} % Язык программирования (необязательный аргумент) - {Исходный код программы Hello World} % Подпись листинга - -% Заголовки - -\chapter{Операционные системы} - -\section{Unix} - -Unix (<> является зарегистрированной торговой маркой организации The~Open~Group) --- семейство переносимых, многозадачных и~многопользовательских операционных систем, которые основаны на~идеях оригинального проекта AT\&T Unix, разработанного в~1970-х~годах в~исследовательском центре Bell Labs Кеном Томпсоном, Деннисом Ритчи и~другими. - -\subsection{Обзор} - -Первая система Unix была разработана в подразделении Bell~Labs компании AT\&T. С~тех пор было создано большое количество различных Unix-систем. - -Юридически право называться <> имеют лишь те операционные системы, которые прошли сертификацию на~соответствие стандарту Single UNIX Specification. -Остальные~же, хотя и~используют сходные концепции и~технологии, называются Unix-подобными операционными системами (англ.~Unix-like). - -\subsubsection{Особенности} - -Основное отличие Unix-подобных систем от~других операционных систем заключается в~том, что это изначально многопользовательские многозадачные системы. -В~Unix может одновременно работать сразу много людей, каждый за~своим терминалом, при этом каждый из~них может выполнять множество различных вычислительных процессов, которые будут использовать ресурсы именно этого компьютера. \newpage - -% Формулы - -\begin{equation}\label{equ:matrix} - \frac{n!}{k!(n-k)!} = \binom{n}{k} -\end{equation} - -\begin{equation*} - A_{m,n} = - \begin{pmatrix} - a_{1,1} & a_{1,2} & \cdots & a_{1,n} \\ - a_{2,1} & a_{2,2} & \cdots & a_{2,n} \\ - \vdots & \vdots & \ddots & \vdots \\ - a_{m,1} & a_{m,2} & \cdots & a_{m,n} - \end{pmatrix} -\end{equation*} - -\end{document} \ No newline at end of file diff --git a/macros/latex/contrib/bmstu/img/bmstu-logo.pdf b/macros/latex/contrib/bmstu/img/bmstu-logo.pdf deleted file mode 100644 index 226943b0b4..0000000000 Binary files a/macros/latex/contrib/bmstu/img/bmstu-logo.pdf and /dev/null differ diff --git a/macros/latex/contrib/bmstu/manifest.txt b/macros/latex/contrib/bmstu/manifest.txt new file mode 100644 index 0000000000..ba4982966c --- /dev/null +++ b/macros/latex/contrib/bmstu/manifest.txt @@ -0,0 +1,9 @@ +bmstu.cls +bmstu_appendix.sty +bmstu_defabbr.sty +bmstu_figure.sty +bmstu_title.sty +bmstu_biblio.sty +bmstu_essay.sty +bmstu_listing.sty +bmstu_toc.sty diff --git a/macros/latex/contrib/bmstu/sty/bmstu-appendix.sty b/macros/latex/contrib/bmstu/sty/bmstu-appendix.sty deleted file mode 100644 index a276edec33..0000000000 --- a/macros/latex/contrib/bmstu/sty/bmstu-appendix.sty +++ /dev/null @@ -1,37 +0,0 @@ -%% bmstu_appendix.sty -%% Copyright 2022 Mikael Novikov -% -% This work may be distributed and/or modified under the -% conditions of the LaTeX Project Public License, either version 1.3 -% of this license or (at your option) any later version. -% The latest version of this license is in -% http://www.latex-project.org/lppl.txt -% and version 1.3 or later is part of all distributions of LaTeX -% version 2005/12/01 or later. -% -% This work has the LPPL maintenance status `maintained'. -% -% The Current Maintainer of this work is Mikael Novikov. -% -% This work consists of all files listed in manifest.txt. - -% Установка заголовков приложений -\RequirePackage[ - titletoc, - title, -]{appendix} -\AtBeginDocument{\renewcommand{\appendixname}{ПРИЛОЖЕНИЕ}} - -% Создание приложений -\let\oldappendices\appendices -\let\oldendappendices\endappendices -\renewenvironment{appendices} -{ - \titleformat{\chapter}{\large\bfseries}{\appendixname~\thechapter}{0pt}{\centering\large\bfseries\\} - \setcounter{appendixchapters}{0} - \oldappendices - \renewcommand{\thechapter}{\Asbuk{chapter}} -} -{ - \oldendappendices -} diff --git a/macros/latex/contrib/bmstu/sty/bmstu-biblio.sty b/macros/latex/contrib/bmstu/sty/bmstu-biblio.sty deleted file mode 100644 index 0b08161c90..0000000000 --- a/macros/latex/contrib/bmstu/sty/bmstu-biblio.sty +++ /dev/null @@ -1,23 +0,0 @@ -%% bmstu_biblio.sty -%% Copyright 2022 Mikael Novikov -% -% This work may be distributed and/or modified under the -% conditions of the LaTeX Project Public License, either version 1.3 -% of this license or (at your option) any later version. -% The latest version of this license is in -% http://www.latex-project.org/lppl.txt -% and version 1.3 or later is part of all distributions of LaTeX -% version 2005/12/01 or later. -% -% This work has the LPPL maintenance status `maintained'. -% -% The Current Maintainer of this work is Mikael Novikov. -% -% This work consists of all files listed in manifest.txt. - -% Создание списка использованных источников -\newcommand{\makebibliography} -{ - \printbibliography[title=СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ] - \addcontentsline{toc}{chapter}{СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ} -} \ No newline at end of file diff --git a/macros/latex/contrib/bmstu/sty/bmstu-defabbr.sty b/macros/latex/contrib/bmstu/sty/bmstu-defabbr.sty deleted file mode 100644 index 9c557ac6bd..0000000000 --- a/macros/latex/contrib/bmstu/sty/bmstu-defabbr.sty +++ /dev/null @@ -1,51 +0,0 @@ -%% bmstu_defabbr.sty -%% Copyright 2022 Mikael Novikov -% -% This work may be distributed and/or modified under the -% conditions of the LaTeX Project Public License, either version 1.3 -% of this license or (at your option) any later version. -% The latest version of this license is in -% http://www.latex-project.org/lppl.txt -% and version 1.3 or later is part of all distributions of LaTeX -% version 2005/12/01 or later. -% -% This work has the LPPL maintenance status `maintained'. -% -% The Current Maintainer of this work is Mikael Novikov. -% -% This work consists of all files listed in manifest.txt. - -% Создание элемента -\RequirePackage{enumitem} -\newcommand{\definition}[2] -{ - \item \noindent #1 --- #2 -} - -% Создание страницы определений -\newenvironment{definitions} -{ - \chapter*{ОПРЕДЕЛЕНИЯ} - \addcontentsline{toc}{chapter}{ОПРЕДЕЛЕНИЯ} - - В настоящей расчетно-пояснительной записке применяют следующие термины с соответствующими определениями. - - \begin{description}[leftmargin=0pt] - } - { - \end{description} -} - -% Создание страницы обозначений и сокращений -\newenvironment{abbreviations} -{ - \chapter*{ОБОЗНАЧЕНИЯ И СОКРАЩЕНИЯ} - \addcontentsline{toc}{chapter}{ОБОЗНАЧЕНИЯ И СОКРАЩЕНИЯ} - - В настоящей расчетно-пояснительной записке применяют следующие сокращения и обозначения. - - \begin{description}[leftmargin=0pt] - } - { - \end{description} -} \ No newline at end of file diff --git a/macros/latex/contrib/bmstu/sty/bmstu-essay.sty b/macros/latex/contrib/bmstu/sty/bmstu-essay.sty deleted file mode 100644 index 55766d9058..0000000000 --- a/macros/latex/contrib/bmstu/sty/bmstu-essay.sty +++ /dev/null @@ -1,68 +0,0 @@ -%% bmstu_essay.sty -%% Copyright 2022 Mikael Novikov -% -% This work may be distributed and/or modified under the -% conditions of the LaTeX Project Public License, either version 1.3 -% of this license or (at your option) any later version. -% The latest version of this license is in -% http://www.latex-project.org/lppl.txt -% and version 1.3 or later is part of all distributions of LaTeX -% version 2005/12/01 or later. -% -% This work has the LPPL maintenance status `maintained'. -% -% The Current Maintainer of this work is Mikael Novikov. -% -% This work consists of all files listed in manifest.txt. - -% Подсчет количества страниц -\RequirePackage{lastpage} - -% Подсчет количества рисунков и таблиц -\RequirePackage{etoolbox} -\newcounter{totfigures} -\newcounter{tottables} -\providecommand\totfig{} -\providecommand\tottab{} -\makeatletter -\AtEndDocument{% - \addtocounter{totfigures}{\value{figure}}% - \addtocounter{tottables}{\value{table}}% - \immediate\write\@mainaux{% - \string\gdef\string\totfig{\number\value{totfigures}}% - \string\gdef\string\tottab{\number\value{tottables}}% - }% -} -\makeatother -\pretocmd{\chapter}{\addtocounter{totfigures}{\value{figure}}\setcounter{figure}{0}}{}{} -\pretocmd{\chapter}{\addtocounter{tottables}{\value{table}}\setcounter{table}{0}}{}{} - -% Подсчет количества использованных источников -\newcounter{totbibentries} -\newcommand*{\listcounted}{} -\providecommand\totbib{} -\makeatletter -\AtDataInput{% - \xifinlist{\abx@field@entrykey}\listcounted% - {}% - {\stepcounter{totbibentries}% - \listxadd\listcounted{\abx@field@entrykey}}% -}% -\makeatother - -% Подсчет количества приложений -\usepackage{totcount, assoccnt} -\newcounter{appendixchapters} -\DeclareAssociatedCounters{chapter}{appendixchapters} -\regtotcounter{appendixchapters} - -% Создание страницы реферата -\newenvironment{essay}[1] -{ - \chapter*{РЕФЕРАТ} - \addcontentsline{toc}{chapter}{РЕФЕРАТ} - - Расчетно-пояснительная записка \begin{NoHyper}\pageref{LastPage}\end{NoHyper}~с., \totfig~рис., \tottab~табл., \thetotbibentries~источн., \total{appendixchapters}~прил. - - \noindent \MakeUppercase{#1} \par -}{} \ No newline at end of file diff --git a/macros/latex/contrib/bmstu/sty/bmstu-figure.sty b/macros/latex/contrib/bmstu/sty/bmstu-figure.sty deleted file mode 100644 index d2817ca668..0000000000 --- a/macros/latex/contrib/bmstu/sty/bmstu-figure.sty +++ /dev/null @@ -1,52 +0,0 @@ -%% bmstu_figure.sty -%% Copyright 2022 Mikael Novikov -% -% This work may be distributed and/or modified under the -% conditions of the LaTeX Project Public License, either version 1.3 -% of this license or (at your option) any later version. -% The latest version of this license is in -% http://www.latex-project.org/lppl.txt -% and version 1.3 or later is part of all distributions of LaTeX -% version 2005/12/01 or later. -% -% This work has the LPPL maintenance status `maintained'. -% -% The Current Maintainer of this work is Mikael Novikov. -% -% This work consists of all files listed in manifest.txt. - -% Подключения пакетов фигур -\RequirePackage{graphicx} -\RequirePackage{float} -\RequirePackage{wrapfig} -\RequirePackage{tikzscale} - -% Подключения пакета графиков -\RequirePackage{pgfplots} -\pgfplotsset{compat=newest} - -% Команда создания рисунка -\newcommand{\includeimage}[5] -{ - \ifthenelse{\equal{#2}{f}} - { - \begin{figure}[#3] - \center{\includegraphics[width=#4]{inc/img/#1}} - \caption{#5} - \label{img:#1} - \end{figure} - } - { - \ifthenelse{\equal{#2}{w}} - { - \begin{wrapfigure}{#3}{#4} - \center{\includegraphics[width=#4]{inc/img/#1}} - \caption{#5} - \label{img:#1} - \end{wrapfigure} - } - { - \PackageError{bmstu}{unknown image type}{} - } - } -} \ No newline at end of file diff --git a/macros/latex/contrib/bmstu/sty/bmstu-listing.sty b/macros/latex/contrib/bmstu/sty/bmstu-listing.sty deleted file mode 100644 index 1f39686a0e..0000000000 --- a/macros/latex/contrib/bmstu/sty/bmstu-listing.sty +++ /dev/null @@ -1,63 +0,0 @@ -%% bmstu_listing.sty -%% Copyright 2022 Mikael Novikov -% -% This work may be distributed and/or modified under the -% conditions of the LaTeX Project Public License, either version 1.3 -% of this license or (at your option) any later version. -% The latest version of this license is in -% http://www.latex-project.org/lppl.txt -% and version 1.3 or later is part of all distributions of LaTeX -% version 2005/12/01 or later. -% -% This work has the LPPL maintenance status `maintained'. -% -% The Current Maintainer of this work is Mikael Novikov. -% -% This work consists of all files listed in manifest.txt. - -% Настройка листингов -\RequirePackage{listings} -\RequirePackage{listingsutf8} -\lstset{ - inputencoding=utf8/koi8-r, - basicstyle=\small\ttfamily, - rulecolor=\color{black}, - escapeinside={\%*}{*)}, - breaklines=true, - breakatwhitespace=true, - tabsize=4, - showstringspaces=false, - float=h!, - abovecaptionskip=-5pt, -} - -% Команда создания простого листинга -\newcommand{\includelisting}[2] -{ - \lstinputlisting[ - frame=single, - caption={#2}, - label={lst:#1}, - ]{inc/lst/#1} -} - -\definecolor{numbers}{rgb}{0.5, 0.5, 0.5} -\definecolor{keywords}{rgb}{0.13, 0.13, 1} -\definecolor{comments}{rgb}{0, 0.5, 0} -\definecolor{strings}{rgb}{0.9, 0, 0} - -% Команда создания листинга с подсветкой синтаксиса и нумерацией строк -\newcommand{\includelistingpretty}[3] -{ - \lstinputlisting[ - language={#2}, - keywordstyle=\color{keywords}, - stringstyle=\color{strings}, - commentstyle=\color{comments}, - frame=leftline, - numbers=left, - numberstyle=\footnotesize\color{numbers}, - caption={#3}, - label={lst:#1}, - ]{inc/lst/#1} -} \ No newline at end of file diff --git a/macros/latex/contrib/bmstu/sty/bmstu-title.sty b/macros/latex/contrib/bmstu/sty/bmstu-title.sty deleted file mode 100644 index ea707bdc7a..0000000000 --- a/macros/latex/contrib/bmstu/sty/bmstu-title.sty +++ /dev/null @@ -1,247 +0,0 @@ -%% bmstu_title.sty -%% Copyright 2022 Mikael Novikov -% -% This work may be distributed and/or modified under the -% conditions of the LaTeX Project Public License, either version 1.3 -% of this license or (at your option) any later version. -% The latest version of this license is in -% http://www.latex-project.org/lppl.txt -% and version 1.3 or later is part of all distributions of LaTeX -% version 2005/12/01 or later. -% -% This work has the LPPL maintenance status `maintained'. -% -% The Current Maintainer of this work is Mikael Novikov. -% -% This work consists of all files listed in manifest.txt. - -% Установка мета-данных выходного файла -\newcommand{\documentmeta}[4] -{ - \hypersetup{ - pdftitle={#1 #2 #3}, - pdfsubject={#4}, - pdfauthor={#2} - } -} - -% Cоздание полей -\RequirePackage[normalem]{ulem} -\RequirePackage{stackengine} -\newcommand{\longunderline}[1] -{ - \uline{#1\hfill\mbox{}} -} -\newcommand{\fixunderline}[3] -{ - $\underset{\text{#3}}{\text{\uline{\stackengine{0pt}{\hspace{#2}}{\text{#1}}{O}{c}{F}{F}{L}}}}$ -} - -% Создание горизонтальной линии -\makeatletter -\newcommand{\vhrulefill}[1] -{ - \leavevmode\leaders\hrule\@height#1\hfill \kern\z@ -} -\makeatother - -% Создание шапки титульной страницы -\newcommand{\titlepageheader}[2] -{ - \begin{wrapfigure}[7]{l}{0.14\linewidth} - \vspace{3.4mm} - \hspace{-8mm} - \includegraphics[width=0.89\linewidth]{img/bmstu-logo} - \end{wrapfigure} - - { - \singlespacing \small - Министерство науки и высшего образования Российской Федерации \\ - Федеральное государственное бюджетное образовательное учреждение \\ - высшего образования \\ - <<Московский государственный технический университет \\ - имени Н.~Э.~Баумана \\ - (национальный исследовательский университет)>> \\ - (МГТУ им. Н.~Э.~Баумана) \\ - } - - \vspace{-4.2mm} - \vhrulefill{0.9mm} \\ - \vspace{-7mm} - \vhrulefill{0.2mm} \\ - \vspace{2.8mm} - - { - \small - ФАКУЛЬТЕТ \longunderline{<<#1>>} \\ - \vspace{3.3mm} - КАФЕДРА \longunderline{<<#2>>} \\ - } -} - -% Установка заголовков отчета по НИР -\newcommand{\titlepageresearchtitle}[1] -{ - { - \LARGE \bfseries - ОТЧЕТ \\ - } - \vspace{5mm} - { - \Large \itshape - ПО НАУЧНО-ИССЛЕДОВАТЕЛЬСКОЙ РАБОТЕ \\ - \vspace{5mm} - НА ТЕМУ: \\ - <<#1>> \\ - } -} - -% Установка заголовков РПЗ -\newcommand{\titlepagenotetitle}[2] -{ - { - \LARGE \bfseries - РАСЧЕТНО-ПОЯСНИТЕЛЬНАЯ ЗАПИСКА \\ - } - \vspace{5mm} - { - \Large \itshape - #1 \\ - \vspace{5mm} - НА ТЕМУ: \\ - <<#2>> \\ - } -} - -% Установка заголовков отчета -\newcommand{\titlepagereporttitle}[4] -{ - \textbf{ОТЧЕТ} \\ - по #1 \\ - \ifthenelse{\isempty{#2}}{}{по курсу <<#2>> \\} - \ifthenelse{\isempty{#3}}{}{на тему: <<#3>> \\} - \ifthenelse{\isempty{#4}}{}{Вариант №~#4 \\} -} - -% Создание поля студента -\newcommand{\titlepagestudent}[2] -{ - Студент \fixunderline{#1}{25mm}{(Группа)} & - \fixunderline{}{40mm}{(Подпись, дата)} \vspace{1.3mm} & - \fixunderline{#2}{40mm}{(И.~О.~Фамилия)} \\ -} - -% Создание прочих полей -\newcommand{\titlepageothers}[2] -{ - #1 & - \fixunderline{}{40mm}{(Подпись, дата)} \vspace{1.3mm} & - \fixunderline{#2}{40mm}{(И.~О.~Фамилия)} \\ -} - -% Установка исполнителей работы -\newcommand{\titlepageauthors}[7] -{ - { - \small - \begin{tabularx}{\textwidth}{@{}>{\hsize=.5\hsize}X>{\hsize=.25\hsize}X>{\hsize=.25\hsize}X@{}} - \titlepagestudent{#1}{#2} - \titlepageothers{#3}{#4} - \ifthenelse{\isempty{#5}}{}{\titlepageothers{Консультант}{#5}} - \ifthenelse{\isempty{#6}}{}{\titlepageothers{Консультант}{#6}} - \ifthenelse{\isempty{#7}}{}{\titlepageothers{Нормоконтролер}{#7}} - \end{tabularx} - } -} - -% Создание титульной страницы РПЗ к ВКР -\newcommand{\makethesistitle}[9] -{ - \documentmeta{РПЗ к ВКР}{#5}{#4}{#3} - - \begin{titlepage} - \centering - - \titlepageheader{#1}{#2} - \vspace{15.8mm} - - \titlepagenotetitle{К ВЫПУСКНОЙ КВАЛИФИКАЦИОННОЙ РАБОТЕ}{#3} - \vfill - - \titlepageauthors{#4}{#5}{Руководитель ВКР}{#6}{#7}{#8}{#9} - \vspace{14mm} - - \textit{{\the\year} г.} - \end{titlepage} - - \setcounter{page}{2} -} - -% Создание титульной страницы отчета по НИР -\newcommand{\makeresearchtitle}[8] -{ - \documentmeta{Отчет по НИР}{#5}{#4}{#3} - - \begin{titlepage} - \centering - - \titlepageheader{#1}{#2} - \vspace{15.8mm} - - \titlepageresearchtitle{#3} - \vfill - - \titlepageauthors{#4}{#5}{Руководитель НИР}{#6}{#7}{#8}{} - \vspace{14mm} - - \textit{{\the\year} г.} - \end{titlepage} - - \setcounter{page}{2} -} - -% Создание титульной страницы РПЗ к КР -\newcommand{\makecourseworktitle}[8] -{ - \documentmeta{РПЗ к КР}{#5}{#4}{#3} - - \begin{titlepage} - \centering - - \titlepageheader{#1}{#2} - \vspace{15.8mm} - - \titlepagenotetitle{К КУРСОВОЙ РАБОТЕ}{#3} - \vfill - - \titlepageauthors{#4}{#5}{Руководитель курсовой работы}{#6}{#7}{#8}{} - \vspace{14mm} - - \textit{{\the\year} г.} - \end{titlepage} - - \setcounter{page}{2} -} - -% Создание титульной страницы отчета -\newcommand{\makereporttitle}[9] -{ - \documentmeta{Отчет}{#8}{#3 #4}{#5} - - \begin{titlepage} - \centering - - \titlepageheader{#1}{#2} - \vspace{15.8mm} - - \titlepagereporttitle{#3}{#4}{#5}{#6} - \vfill - - \titlepageauthors{#7}{#8}{Преподаватель}{#9}{}{}{} - \vspace{14mm} - - \textit{{\the\year} г.} - \end{titlepage} - - \setcounter{page}{2} -} \ No newline at end of file diff --git a/macros/latex/contrib/bmstu/sty/bmstu-toc.sty b/macros/latex/contrib/bmstu/sty/bmstu-toc.sty deleted file mode 100644 index 809698a170..0000000000 --- a/macros/latex/contrib/bmstu/sty/bmstu-toc.sty +++ /dev/null @@ -1,23 +0,0 @@ -%% bmstu_toc.sty -%% Copyright 2022 Mikael Novikov -% -% This work may be distributed and/or modified under the -% conditions of the LaTeX Project Public License, either version 1.3 -% of this license or (at your option) any later version. -% The latest version of this license is in -% http://www.latex-project.org/lppl.txt -% and version 1.3 or later is part of all distributions of LaTeX -% version 2005/12/01 or later. -% -% This work has the LPPL maintenance status `maintained'. -% -% The Current Maintainer of this work is Mikael Novikov. -% -% This work consists of all files listed in manifest.txt. - -% Создание содержания -\newcommand{\maketableofcontents} -{ - \renewcommand\contentsname{СОДЕРЖАНИЕ} - \tableofcontents -} \ No newline at end of file diff --git a/macros/latex/contrib/fixdif/fixdif-zh-cn.pdf b/macros/latex/contrib/fixdif/fixdif-zh-cn.pdf index 576280efef..079be1bc7f 100644 Binary files a/macros/latex/contrib/fixdif/fixdif-zh-cn.pdf and b/macros/latex/contrib/fixdif/fixdif-zh-cn.pdf differ diff --git a/macros/latex/contrib/fixdif/fixdif-zh-cn.tex b/macros/latex/contrib/fixdif/fixdif-zh-cn.tex index 4c4793742d..851065ebc8 100644 --- a/macros/latex/contrib/fixdif/fixdif-zh-cn.tex +++ b/macros/latex/contrib/fixdif/fixdif-zh-cn.tex @@ -1,10 +1,12 @@ \documentclass[letterpaper,11pt]{article} -\date{2023/01/27\quad Version 1.6% +\usepackage{fixdif} +\date{2023/01/31\quad Version 2.0% \thanks{源代码见~\hyperref{https://github.com/AlphaZTX/fixdif}{}{}{GitHub} 或~\hyperref{https://www.ctan.org/pkg/fixdif}{}{}{CTAN}。} } \ifcsname XeTeXversion\endcsname\else\errmessage{本文档需使用 xelatex 编译}\fi -\usepackage{indentfirst,enumitem} +\usepackage{indentfirst,enumitem,multicol} +\columnsep20pt\columnseprule.4pt \usepackage{manfnt,marginnote} \newcounter{fixdifattention} \newcommand\attention[1][1]{\setcounter{fixdifattention}{1}% @@ -27,8 +29,8 @@ \renewcommand\abstractname{摘\hskip.8em 要} \renewcommand\contentsname{目\hskip.8em 录} \DeclareRobustCommand\zhemph{\CJKunderdot} -\usepackage{unicode-math} -\setmathfont{STIX Two Math} +%\usepackage{unicode-math} +%\setmathfont{STIX Two Math} \usepackage{hyperref} \hypersetup{pdffitwindow, pdftitle = {fixdif 宏包}, @@ -71,7 +73,6 @@ \gdef\@author{\Uchar"5F20\Uchar"5EAD\Uchar"7444} \makeatother \pagestyle{plain} -\usepackage{fixdif} \linespread{1.2} \parskip8pt plus 4pt minus 2pt \parindent2em @@ -87,14 +88,18 @@ 本宏包在 \xelatex{} 和 \lualatex{} 下兼容 \pkg{unicode-math} 宏包。 \end{abstract} -{\parskip0pt\tableofcontents} +\section*{\contentsname} +\begin{multicols}{2} +\parskip0pt +\csname @starttoc\endcsname{toc} +\end{multicols} \section{背景} 我们一般更推荐在微分算符与前面的内容之间留出一个比较小的间距\footnote{% 见 \hyperref{https://tex.stackexchange.com/questions/14821/whats-the-% proper-way-to-typeset-a-differential-operator}{}{}{\TeX.SX}。},比如在下面展示的 两种情况中,右边的比左边的更好: -\[f(x)\mathrm{d}x\qquad\text{\&}\qquad f(x)\d x.\] +\[f(x)\mathrm{d}x \qquad\hbox{\&}\qquad f(x)\d x.\] 微分算符 $\d{}$ 与其前面的表达式之间的间距可认为是乘积的一种表示。 有些用户习惯使用下面的方法定义一个宏: @@ -191,41 +196,16 @@ texhash 会得到 \[f(x)\d x,\quad \frac{\d y}{\d x},\quad \d y/\d x,\quad a^{y\d x}.\] -\subsection{对 \pkg{unicode-math} 宏包的兼容} -如果你在文档中使用了 \pkg{unicode-math} 宏包(编译方式为 \xelatex{} 或 -\lualatex{}),需注意以下几点: -\begin{itemize} -\item 如需使用 \pkg{amsmath} 宏包,请在 \pkg{unicode-math} \zhemph{之前}% -载入 \pkg{amsmath}。 - -\item 在载入 \pkg{unicode-math} 后通过 \cs{setmathfont} 指定数学字体。 -若使用默认的数学字体,建议显式指明 |\setmathfont{Latin Modern Math}|, -这样可以避免在用斜杠表示的分式中产生不好的间距; - -\item \pkg{fixdif} 宏包需要在 \pkg{unicode-math} 宏包\zhemph{后}载入。 -\end{itemize} -从而,导言区正确的顺序是: -\begin{Verbatim} -\usepackage[..]{amsmath} -\usepackage[..]{unicode-math} -\setmathfont{...}[...] -\usepackage{fixdif} -\end{Verbatim} - -\subsection{对 \pkg{hyperref} 宏包的兼容} -如果你使用了 \pkg{hyperref} 宏包,需注意 \pkg{fixdif} 宏包需要在 \pkg{hyperref} -之后载入,否则会引起冲突。 - -\subsection{基本命令及宏包选项} -\DescribeMacro{\d} -\pkg{fixdif} 宏包提供了 \cs{d} 命令用于在数学模式中得到微分算符“$\d{}$”。 +\subsection{基本的 \cs{d} 命令} +\DescribeMacro{\d}% +\pkg{fixdif} 宏包提供了 \cs{d} 命令用于在数学模式中得到微分算符“$\d$”。 在正文中,\cs{d} 会保留其原有的重音符号的功能。例如: \begin{Verbatim} $\d x$ 和 \d x \end{Verbatim} 以上代码会得到“$\d x$ 和 \d x”。 -\paragraph{设置 \cs{d} 的字体} +\subsection{设置 \cs{d} 的字体} 本宏包提供了两个选项来控制 \cs{d} 的字体,分别为 \opt{rm} 和 \opt{normal}。 其中,\opt{rm} 为默认值,表示 \cs{d} 的字体为罗马体(\cs{mathrm}); \opt{normal} 表示 \cs{d} 的字体为数学模式下的常规体(\cs{mathnormal}), @@ -243,8 +223,8 @@ $\d x$ 和 \d x \end{Verbatim} 在此设置下,正文中的 |\d x| 会得到 $\mathsf{d}x$。 -\paragraph{\cs{partial} 的行为} -\DescribeMacro{\partial} +\subsection{\cs{partial} 的行为} +\DescribeMacro{\partial}% \pkg{fixdif} 宏包将 \cs{partial} 归为微分算符,正文中的 \cs{partial} 前面也会有 自动的间距。例如 |$\partial x\partial y$| 会得到 $\partial x\partial y$。 若不需要将 \cs{partial} 视为微分算符,可以开启 \opt{nopartial} 选项: @@ -310,7 +290,7 @@ $\d x$ 和 \d x \noindent\textcolor{titlecolor}{\cs{newdif}\marg{cmd}\marg{multi-cmd}}% \DescribeMacro{\newdif}\hfill(仅限在导言区使用,后无矫正)\\ \noindent\textcolor{titlecolor}{\cs{newdif*}\marg{cmd}\marg{multi-cmd}}% -\DescribeMacro{\newdif*}\hfill(仅限在导言区使用,后有矫正) +\hfill(仅限在导言区使用,后有矫正) 上面两个命令的第一个参数 \meta{cmd} 是新定义的微分算符命令,第二个参数 \meta{multi-cmd} 是超过一个字(token)的命令组合或字符串。举个例子,在 @@ -331,9 +311,9 @@ $\d x$ 和 \d x \cs{newdif}(\texttt{*}) 会检查第一个参数 \meta{cmd} 是否已经被定义,若 \meta{cmd} 已被定义,则会报错。 -\noindent\textcolor{titlecolor}{\cs{renewdif}\marg{cmd}\marg{multi-cmd}}\DescribeMacro{\renewdif} -\hfill(仅限在导言区使用,后无矫正)\\ -\noindent\textcolor{titlecolor}{\cs{renewdif*}\marg{cmd}\marg{multi-cmd}}\DescribeMacro{\renewdif*} +\noindent\textcolor{titlecolor}{\cs{renewdif}\marg{cmd}\marg{multi-cmd}}% +\DescribeMacro{\renewdif}\hfill(仅限在导言区使用,后无矫正)\\ +\noindent\textcolor{titlecolor}{\cs{renewdif*}\marg{cmd}\marg{multi-cmd}}% \hfill(仅限在导言区使用,后有矫正) 这两个命令用于将 \meta{cmd} 重定义为微分算符命令。 @@ -343,7 +323,7 @@ $\d x$ 和 \d x \noindent\textcolor{titlecolor}{\cs{mathdif}\marg{symbol}}% \DescribeMacro{\mathdif}\hfill(仅限在数学模式使用,后无矫正)\\ \noindent\textcolor{titlecolor}{\cs{mathdif*}\marg{symbol}}% -\DescribeMacro{\mathdif*}\hfill(仅限在数学模式使用,后有矫正) +\hfill(仅限在数学模式使用,后有矫正) 如需在正文中少量使用某一数学符号作为微分算符,可以使用上面的两个命令。 例如,\verb|$x\mathdif{\Delta}\psi$| 会得到 $x\mathdif{\Delta}\psi$。 @@ -367,15 +347,6 @@ $\d x$ 和 \d x \begin{Verbatim} \letdif{\laplacian}{Delta} \end{Verbatim} -如果你比较擅长使用 \pkg{xparse} 宏包(2020 年 10 月后已被集成进 \LaTeXe{} 内核) -的接口,你也可以采用下面的方法: -\begin{Verbatim} -\letdif{\nabla}{nabla} -\DeclareDocumentCommand{ \laplacian }{ s }{ - \IfBooleanTF { #1 } { \mathdif{\Delta} } { \nabla^2 } -} -\end{Verbatim} -这样,|\laplacian| 会得到 $\nabla^2$,|\laplacian*| 会得到 $\Delta$。 \paragraph{处理正负号与微分算符之间的间距} 输入 |$-\d x$| 会得到 $-\d x$。如果你不希望在正负号与微分算符之间保留 diff --git a/macros/latex/contrib/fixdif/fixdif.dtx b/macros/latex/contrib/fixdif/fixdif.dtx index c6dfc5a236..e6f37a330f 100644 --- a/macros/latex/contrib/fixdif/fixdif.dtx +++ b/macros/latex/contrib/fixdif/fixdif.dtx @@ -131,7 +131,7 @@ Copyright (C) 2022-2023 by Zhang Tingxuan . % % %<*driver> -\ProvidesFile{fixdif.dtx}[2023/01/27 (c) Copyright 2022-2023 by Zhang Tingxuan] +\ProvidesFile{fixdif.dtx}[2023/01/31 (c) Copyright 2022-2023 by Zhang Tingxuan] \documentclass{ltxdoc} \usepackage{xcolor} @@ -150,7 +150,7 @@ Copyright (C) 2022-2023 by Zhang Tingxuan . \title{The \pkg{fixdif} Package} \author{Zhang Tingxuan} -\date{2023/01/27\quad Version 1.6\thanks{\url{https://github.com/AlphaZTX/fixdif}}} +\date{2023/01/31\quad Version 2.0\thanks{\url{https://github.com/AlphaZTX/fixdif}}} \usepackage{hyperref} \hypersetup{ @@ -188,7 +188,6 @@ Copyright (C) 2022-2023 by Zhang Tingxuan . \g@addto@macro{\UrlBreaks}{\UrlDigits} \ifdefined\Umathcode \usepackage{unicode-math} - \setmathfont{Latin Modern Math} \fi \makeatother @@ -215,7 +214,7 @@ Copyright (C) 2022-2023 by Zhang Tingxuan . % in \XeTeX{} and \LuaTeX. % \end{abstract} % -% \tableofcontents +% {\parskip1pt plus 1pt\tableofcontents} % % \section{The background} % It's usually recommended that one should reserve a small skip between @@ -258,39 +257,14 @@ Copyright (C) 2022-2023 by Zhang Tingxuan . % \begin{Verbatim} % \usepackage{fixdif} % \end{Verbatim} -% in the preamble. In your document, +% in the preamble (\pkg{fixdif} allows you to write this line anywhere in the +% preamble since version 2.0). In your document, % \begin{Verbatim} % \[ f(x)\d x,\quad\frac{\d y}{\d x},\quad\d y/\d x,\quad a^{y\d x}. \] % \end{Verbatim} % will produce % \[f(x)\d x,\quad \frac{\d y}{\d x},\quad \d y/\d x,\quad a^{y\d x}.\] % -% \subsection{When using \pkg{unicode-math}} -% If you are using \pkg{unicode-math} package with \XeTeX/\LuaTeX{} -% in your document, you must pay attention to the following items: -% \begin{itemize} -% \item If you want to use \pkg{amsmath} package, make sure that the -% \pkg{unicode-math} package is loaded \emph{after} \pkg{amsmath}. -% -% \item You had better specify the math font through the \cs{setmathfont} -% command provided by \pkg{unicode-math} in order to avoid bad skip in -% text fraction like $\d y/\d x$. -% -% \item Load the \pkg{fixdif} package \emph{after} \pkg{unicode-math}. -% \end{itemize} -% Therefore the correct order is -% \begin{Verbatim} -% \usepackage{amsmath} -% \usepackage{unicode-math} -% \setmathfont{...}[...] -% \usepackage{fixdif} -% \end{Verbatim} -% -% \subsection{When using \pkg{hyperref}} -% If you want to use the \pkg{hyperref} package simultaneously, -% remember to load \pkg{hyperref} \emph{before} the \pkg{fixdif} package, -% otherwise the \pkg{hyperref} package will cause conflicts. -% % \subsection{Basic commands and package options} % \DescribeMacro{\d} % The \pkg{fixdif} package provides a \cs{d} command for the differential @@ -362,7 +336,7 @@ Copyright (C) 2022-2023 by Zhang Tingxuan . % For example, in default, \DescribeMacro{\partialnondif}\cs{partialnondif} % yields the old partial symbol ``$\partialnondif$''. % -% \noindent\textcolor{titlecolor}{\cs{letdif*}\marg{cmd}\marg{csname}}\DescribeMacro{\letdif*} +% \noindent\textcolor{titlecolor}{\cs{letdif*}\marg{cmd}\marg{csname}} % \hfill(preamble only) % % This command is basically the same as \cs{letdif}, but this command will @@ -385,7 +359,7 @@ Copyright (C) 2022-2023 by Zhang Tingxuan . % % \noindent\textcolor{titlecolor}{\cs{newdif}\marg{cmd}\marg{multi-cmd}}\DescribeMacro{\newdif} % \hfill(without correction, preamble only)\\ -% \noindent\textcolor{titlecolor}{\cs{newdif*}\marg{cmd}\marg{multi-cmd}}\DescribeMacro{\newdif*} +% \noindent\textcolor{titlecolor}{\cs{newdif*}\marg{cmd}\marg{multi-cmd}} % \hfill(with correction, preamble only) % % The first argument of these commands is the newly-defined command; and the @@ -409,7 +383,7 @@ Copyright (C) 2022-2023 by Zhang Tingxuan . % % \noindent\textcolor{titlecolor}{\cs{renewdif}\marg{cmd}\marg{multi-cmd}}\DescribeMacro{\renewdif} % \hfill(without correction, preamble only)\\ -% \noindent\textcolor{titlecolor}{\cs{renewdif*}\marg{cmd}\marg{multi-cmd}}\DescribeMacro{\renewdif*} +% \noindent\textcolor{titlecolor}{\cs{renewdif*}\marg{cmd}\marg{multi-cmd}} % \hfill(with correction, preamble only) % % These two commands are basically the same as \cs{newdif} and \cs{newdif*}. @@ -421,7 +395,7 @@ Copyright (C) 2022-2023 by Zhang Tingxuan . % % \noindent\textcolor{titlecolor}{\cs{mathdif}\marg{symbol}}\DescribeMacro{\mathdif} % \hfill(without correction, in math mode only)\\ -%\noindent\textcolor{titlecolor}{\cs{mathdif*}\marg{symbol}}\DescribeMacro{\mathdif*} +%\noindent\textcolor{titlecolor}{\cs{mathdif*}\marg{symbol}} % \hfill(with correction, in math mode only) % % These two commands can be used in math mode only, more specifically, @@ -473,62 +447,68 @@ Copyright (C) 2022-2023 by Zhang Tingxuan . % Check the \TeX{} format and provides the package name. % \begin{macrocode} \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{fixdif}[2023/01/27 Interface for defining differential operators.] +\ProvidesPackage{fixdif}[2023/01/31 Interface for defining differential operators.] % \end{macrocode} % % \subsection{Control the skip between slashes and differential operator} % Change the math code of slash ($/$) and backslash ($\backslash$) so that the skip % between slashes and differential operators can be ignored. -% \begin{macrocode} -\@ifpackageloaded{unicode-math}{\AtBeginDocument{% -% \end{macrocode} -% If the \pkg{unicode-math} package has been loaded, use the \XeTeX/\LuaTeX{} primitive +% +% If the \pkg{unicode-math} package was loaded, use the \XeTeX/\LuaTeX{} primitive % \cs{Umathcode} to change the type of slashes. The numeral ``4'' stands for ``open''. +% If \pkg{unicode-math} was not loaded but \pkg{fontspec} loaded, check if +% \pkg{fontspec} had reset math fonts, that is to say, the |no-math| option. % \begin{macrocode} - \Umathcode`\/="4 \symoperators "002F - \Umathcode"2044="4 \symoperators "2044 - \Umathcode"2215="4 \symoperators "2215 - \Umathcode"2F98="4 \symoperators "2F98 - \Umathcode`\\="4 \symoperators "005C - \Umathcode"2216="4 \symoperators "2216 - \Umathcode"29F5="4 \symoperators "29F5 - \Umathcode"29F9="4 \symoperators "29F9 -}}{ +\AtBeginDocument{% +\ifcsname symbf\endcsname% + \csname bool_if:cF\endcsname{g__um_main_font_defined_bool}% + {\csname __um_load_lm:\endcsname}% + \Umathcode`\/="4 \symoperators "002F% + \Umathcode"2044="4 \symoperators "2044% + \Umathcode"2215="4 \symoperators "2215% + \Umathcode"2F98="4 \symoperators "2F98% + \Umathcode`\\="4 \symoperators "005C% + \Umathcode"2216="4 \symoperators "2216% + \Umathcode"29F5="4 \symoperators "29F5% + \Umathcode"29F9="4 \symoperators "29F9% +\else\ifcsname fontspec\endcsname + \csname bool_if:cT\endcsname{g__fontspec_math_bool}% + {% + \everymath{\mathcode`\/="413D\relax}% + \PackageWarning{fixdif}{Requires `no-math' option of fontspec!\MessageBreak}% + }% fontspec only influences "/" +\fi\fi} % \end{macrocode} -% If the \pkg{unicode-math} package has not been loaded, use the \TeX{} primitive -% \cs{mathcode} to change the type of slashes. The \cs{backslash} needs to be redefined -% through \cs{delimiter} primitive too. +% Use \cs{mathcode} to change the type of slashes. The \cs{backslash} needs to be +% redefined through \cs{delimiter} too. % \begin{macrocode} - \mathcode`\/="413D - \mathcode`\\="426E % \backslash - \def\backslash{\delimiter"426E30F\relax} -} +\mathcode`\/="413D +\mathcode`\\="426E% \backslash +\protected\def\backslash{\delimiter"426E30F\relax} % \end{macrocode} % % \subsection{Patch the skips around the differential operator} -% \DescribeMacro{\mup@tch} -% The following \cs{mup@tch} patches the skip after the differential operator. +% \DescribeMacro{\fd@mu@p} +% The following \cs{fd@mu@p} patches the skip after the differential operator. % \begin{macrocode} -\def\mup@tch{\mathchoice{\mskip-\thinmuskip}{\mskip-\thinmuskip}{}{}{}} +\def\fd@mu@p{\mathchoice{\mskip-\thinmuskip}{\mskip-\thinmuskip}{}{}{}} % \end{macrocode} -% The \cs{s@beforep@tch} patches the commands with star (\cs{letdif*}, etc). +% The \cs{s@fd@mu@p} patches the commands with star (\cs{letdif*}, etc). % \begin{macrocode} -\def\s@beforep@tch{\mathchoice{}{}{\mbox{}}{\mbox{}}} +\def\s@fd@mu@p{\mathchoice{}{}{\hbox{}}{\hbox{}}} % \end{macrocode} % % \subsection{Declare the package options} -% Declare the options of the package and execute them. % \begin{macrocode} -\DeclareOption{rm}{\@ifpackageloaded{unicode-math} - {\def\@@dif{\symrm{d}}}{\def\@@dif{\mathrm{d}}}} -\DeclareOption{normal}{\def\@@dif{d}} +\DeclareOption{rm}{% + \AtBeginDocument{\ifcsname symbf\endcsname% + \gdef\@fd@dif{\symrm{d}}\fi}% + \gdef\@fd@dif{\mathrm{d}}} +\DeclareOption{normal}{\gdef\@fd@dif{d}} \DeclareOption{partial}{\@tempswatrue} \DeclareOption{nopartial}{\@tempswafalse} \ExecuteOptions{rm,partial} \ProcessOptions\relax -% \end{macrocode} -% Control the behavior of \cs{partial}. -% \begin{macrocode} \if@tempswa \AtEndOfPackage{\letdif{\partial}{partial}} \fi @@ -536,47 +516,41 @@ Copyright (C) 2022-2023 by Zhang Tingxuan . % \DescribeMacro{\resetdfont} % Define the \cs{resetdfont} command. % \begin{macrocode} -\gdef\resetdfont#1{\let\@@dif\relax% - \def\@@dif{#1{d}}} +\gdef\resetdfont#1{\AtBeginDocument{\let\@fd@dif\relax\gdef\@fd@dif{#1{d}}}} % \end{macrocode} % % \subsection{Deal with the \cs{d} command} -% \DescribeMacro{\@dif} -% \cs{@dif} is the differential operator produced by \cs{d} in math mode. +% \DescribeMacro{\fd@dif} +% \cs{fd@dif} is the differential operator produced by \cs{d} in math mode. % Here we prefer \cs{mathinner} to |\mathbin| to make the skip. % \begin{macrocode} -\def\@dif{\mathinner{\@@dif}\mup@tch} +\def\fd@dif{\mathinner{\@fd@dif}\fd@mu@p} % \end{macrocode} -% \DescribeMacro{\d@accent} -% Restore the \cs{d} command in text by \cs{d@accent} with the \cs{let} -% primitive. +% \DescribeMacro{\fd@d@acc} +% Restore the \cs{d} command in text by \cs{fd@d@acc} with \cs{let}. % \begin{macrocode} -\AtBeginDocument{\let\d@accent\d +\AtBeginDocument{\let\fd@d@acc\d % \end{macrocode} % \DescribeMacro{\d} % Redefine the \cs{d} command. In text, we need to expand the stuffs after \cs{d} % \begin{macrocode} - \DeclareRobustCommand\d{\ifmmode\@dif\else\expandafter\d@accent\fi}} + \DeclareRobustCommand\d{\ifmmode\fd@dif\else\expandafter\fd@d@acc\fi}} % \end{macrocode} % % \subsection{User's interface for defining new differential operators} -% \DescribeMacro{\letdif}\DescribeMacro{\letdif*} -% Define the \cs{letdif} and \cs{letdif*} command. The internal version of \cs{letdif} -% is \cs{@letdif}, of \cs{letdif*} is \cs{s@letdif}. -% \begin{macrocode} -\def\@letdif#1#2{\AtBeginDocument{% -% \end{macrocode} +% \DescribeMacro{\letdif} +% Define the \cs{letdif} command. The internal version of \cs{letdif} +% is \cs{@letdif} and \cs{s@letdif}. +% % |#1| is the final command; |#2| is the ``control sequence name'' of |#1|'s initial definition. % Here we create a command (\cs{csname}|#2nonfif|\cs{endcsname}) to restore |#2|. % \begin{macrocode} +\def\@letdif#1#2{\AtBeginDocument{% \ifcsname #2nondif\endcsname\else% \expandafter\let\csname #2nondif\expandafter\endcsname \csname #2\endcsname% \fi% -% \end{macrocode} -% Finally let |#1| be the new command. -% \begin{macrocode} - \gdef#1{\mathinner{\csname #2nondif\endcsname}\mup@tch}% + \DeclareRobustCommand#1{\mathinner{\csname #2nondif\endcsname}\fd@mu@p}% }} % \end{macrocode} % The definition of \cs{s@letdif} is similar, but with the patch for negative skips. @@ -586,56 +560,59 @@ Copyright (C) 2022-2023 by Zhang Tingxuan . \expandafter\let\csname #2nondif\expandafter\endcsname \csname #2\endcsname% \fi% - \gdef#1{\mathinner{\s@beforep@tch\csname #2nondif\endcsname\hbox{}}\mup@tch}% + \DeclareRobustCommand#1{\mathinner{\s@fd@mu@p\csname #2nondif\endcsname\hbox{}}\fd@mu@p}% }} -\def\letdif{\@ifstar\s@letdif\@letdif} +\DeclareRobustCommand\letdif{\@ifstar\s@letdif\@letdif} +\@onlypreamble\letdif % \end{macrocode} -% \DescribeMacro{\newdif}\DescribeMacro{\newdif*} -% Define the \cs{newdif} and \cs{newdif*} commands. |#1| is the final command; |#2| is the ``long'' argument. +% \DescribeMacro{\newdif} +% Define the \cs{newdif} command. |#1| is the final command; |#2| is the ``long'' argument. % \begin{macrocode} \long\def\@newdif#1#2{\AtBeginDocument{% \ifdefined#1 - \PackageError{fixdif}{\string#1 is already defined.} + \PackageError{fixdif}{\string#1 is already defined} {Try another command instead of \string#1.}% \else - \long\gdef#1{\mathinner{#2}\mup@tch}% + \DeclareRobustCommand#1{\mathinner{#2}\fd@mu@p}% \fi% }} \long\def\s@newdif#1#2{\AtBeginDocument{% \ifdefined#1 - \PackageError{fixdif}{\string#1 is already defined.} + \PackageError{fixdif}{\string#1 is already defined} {Try another command instead of \string#1.}% \else - \long\gdef#1{\s@beforep@tch\mathinner{#2\mbox{}}\mup@tch}% + \DeclareRobustCommand#1{\s@fd@mu@p\mathinner{#2\hbox{}}\fd@mu@p}% \fi% }} -\def\newdif{\@ifstar\s@newdif\@newdif} +\DeclareRobustCommand\newdif{\@ifstar\s@newdif\@newdif} +\@onlypreamble\newdif % \end{macrocode} -% \DescribeMacro{\renewdif}\DescribeMacro{\renewdif*} -% Define the \cs{renewdif} and \cs{renewdif*} commands. +% \DescribeMacro{\renewdif} +% Define the \cs{renewdif} command. % \begin{macrocode} \long\def\@renewdif#1#2{\AtBeginDocument{% \ifdefined#1 - \long\gdef#1{\mathinner{#2}\mup@tch}% + \DeclareRobustCommand#1{\mathinner{#2}\fd@mu@p}% \else - \PackageError{fixdif}{\string#1 has not been defined yet.} + \PackageError{fixdif}{\string#1 has not been defined yet} {You should use \string\newdif instead of \string\renewdif.}% \fi% }} \long\def\s@renewdif#1#2{\AtBeginDocument{% \ifdefined#1 - \long\gdef#1{\s@beforep@tch\mathinner{#2\mbox{}}\mup@tch}% + \DeclareRobustCommand#1{\s@fd@mu@p\mathinner{#2\hbox{}}\fd@mu@p}% \else - \PackageError{fixdif}{\string#1 has not been defined yet.} + \PackageError{fixdif}{\string#1 has not been defined yet} {You should use \string\newdif instead of \string\renewdif.}% \fi% }} -\def\renewdif{\@ifstar\s@renewdif\@renewdif} +\DeclareRobustCommand\renewdif{\@ifstar\s@renewdif\@renewdif} +\@onlypreamble\renewdif % \end{macrocode} -% \subsection{In-document commands: \cs{mathdif} and \cs{mathdif*}} +% \subsection{In-document commands: \cs{mathdif}} % \begin{macrocode} -\def\@mathdif#1{\mathinner{#1}\mup@tch} -\def\s@mathdif#1{\s@beforep@tch\mathinner{#1\mbox{}}\mup@tch} +\def\@mathdif#1{\mathinner{#1}\fd@mu@p} +\def\s@mathdif#1{\s@fd@mu@p\mathinner{#1\mbox{}}\fd@mu@p} \DeclareRobustCommand\mathdif{\@ifstar\s@mathdif\@mathdif} % \end{macrocode} % End of the package. diff --git a/macros/latex/contrib/fixdif/fixdif.pdf b/macros/latex/contrib/fixdif/fixdif.pdf index c01f1bc78f..8e80606dd3 100644 Binary files a/macros/latex/contrib/fixdif/fixdif.pdf and b/macros/latex/contrib/fixdif/fixdif.pdf differ diff --git a/macros/latex/contrib/hvfloat/Changes b/macros/latex/contrib/hvfloat/Changes index bd624f8ca0..c19902eff3 100644 --- a/macros/latex/contrib/hvfloat/Changes +++ b/macros/latex/contrib/hvfloat/Changes @@ -1,4 +1,7 @@ hvfloat.sty: +2.45 2023-01-28 - bugfix for doubleFULLPAGE images which followed + fullpage images ... + - added option "forceLeft" for doublepage flloats 2.44 2022-11-21 - support "floats" with caption in the margin 2.43 2022-11-07 - fix for empty caption: don't use \caption 2.42 2022-10-02 - fix for twoColumnCaption and multi(sub)floats diff --git a/macros/latex/contrib/hvfloat/doc/examples/after1s1c.pdf b/macros/latex/contrib/hvfloat/doc/examples/after1s1c.pdf index 40854d1f72..872dc973c0 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/after1s1c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/after1s1c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/after1s1c.tex b/macros/latex/contrib/hvfloat/doc/examples/after1s1c.tex index bdb9db7170..3a1f4a581e 100644 --- a/macros/latex/contrib/hvfloat/doc/examples/after1s1c.tex +++ b/macros/latex/contrib/hvfloat/doc/examples/after1s1c.tex @@ -1,5 +1,5 @@ \documentclass{scrartcl} -%% $Id: after1s1c.tex 72 2021-05-02 11:40:10Z herbert $ +%% $Id: after1s1c.tex 318 2021-11-20 07:30:54Z herbert $ \input{preamble.ltx} @@ -22,7 +22,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage0} \end{lstlisting} @@ -35,7 +35,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage0} @@ -50,7 +50,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage1} \end{lstlisting} @@ -63,7 +63,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage1} diff --git a/macros/latex/contrib/hvfloat/doc/examples/after2s2c.pdf b/macros/latex/contrib/hvfloat/doc/examples/after2s2c.pdf index 6a3f002998..06949359a1 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/after2s2c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/after2s2c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/after2s2c.tex b/macros/latex/contrib/hvfloat/doc/examples/after2s2c.tex index 8c9f998931..a8b363d559 100644 --- a/macros/latex/contrib/hvfloat/doc/examples/after2s2c.tex +++ b/macros/latex/contrib/hvfloat/doc/examples/after2s2c.tex @@ -1,5 +1,5 @@ \documentclass[twoside,twocolumn]{scrartcl} -%% $Id: after2s2c.tex 72 2021-05-02 11:40:10Z herbert $ +%% $Id: after2s2c.tex 318 2021-11-20 07:30:54Z herbert $ \input{preamble.ltx} \setlength\columnseprule{0.4pt} @@ -28,7 +28,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage0} \end{lstlisting} @@ -41,7 +41,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage0} @@ -54,7 +54,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage1} \end{lstlisting} @@ -67,7 +67,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage1} diff --git a/macros/latex/contrib/hvfloat/doc/examples/capPos.pdf b/macros/latex/contrib/hvfloat/doc/examples/capPos.pdf index 630a337a53..c206501682 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/capPos.pdf and b/macros/latex/contrib/hvfloat/doc/examples/capPos.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/capVPos.inc b/macros/latex/contrib/hvfloat/doc/examples/capVPos.inc index 10ef70e88c..5e76aaface 100644 --- a/macros/latex/contrib/hvfloat/doc/examples/capVPos.inc +++ b/macros/latex/contrib/hvfloat/doc/examples/capVPos.inc @@ -19,7 +19,7 @@ justification= \hvFloat[capPos=right]{figure}{\includegraphics{frose}}{\capShortText}{} \end{lstlisting} -\hvFloat[capPos=right]{figure}{\includegraphics{frose}}{\capShortText}{} +\hvFloat[capPos=right]{figure}{\includegraphics{frose}}{\capShortText~\protect\parencite{aksin}}{} \blindtext @@ -27,15 +27,15 @@ justification= \hvFloat[capPos=right,capFormat={singlelinecheck=off}]{figure}{\includegraphics{frose}}{\capShortText}{} \end{lstlisting} -\hvFloat[capPos=right,capFormat={singlelinecheck=off}]{figure}{\includegraphics{frose}}{\capShortText}{} +\hvFloat[capPos=right,capFormat={singlelinecheck=off}]{figure}{\includegraphics{frose}}{\capShortText~\protect\parencite{aksin}}{} \blindtext \begin{lstlisting} -\hvFloat[capPos=right]{figure}{\includegraphics{frose}}{\capLongText}{} +\hvFloat[capPos=right]{figure}{\includegraphics{frose}}{\capLongText~\protect\parencite{aksin}}{} \end{lstlisting} -\hvFloat[capPos=right]{figure}{\includegraphics{frose}}{\capLongText}{} +\hvFloat[capPos=right]{figure}{\includegraphics{frose}}{\capLongText~\protect\parencite{aksin}}{} \blindtext @@ -47,10 +47,10 @@ justification= \subsection{\texttt{capVPos=top}} \begin{lstlisting} -\hvFloat[capPos=right,capVPos=top]{figure}{\includegraphics{frose}}{\capShortText}{} +\hvFloat[capPos=outer,capVPos=top]{figure}{\includegraphics{frose}}{\capShortText}{} \end{lstlisting} -\hvFloat[capPos=right,capVPos=top]{figure}{\includegraphics{frose}}{\capShortText}{} +\hvFloat[capPos=outer,capVPos=top]{figure}{\includegraphics{frose}}{\capShortText~\protect\parencite{aksin}}{} \blindtext @@ -65,10 +65,10 @@ justification= \begin{lstlisting} -\hvFloat[capPos=right,capVPos=top]{figure}{\includegraphics{frose}}{\capLongText}{} +\hvFloat[capPos=inner,capVPos=top]{figure}{\includegraphics{frose}}{\capLongText}{} \end{lstlisting} -\hvFloat[capPos=right,capVPos=top]{figure}{\includegraphics{frose}}{\capLongText}{} +\hvFloat[capPos=inner,capVPos=top]{figure}{\includegraphics{frose}}{\capLongText}{} \blindtext @@ -78,10 +78,10 @@ justification= \subsection{\texttt{capVPos=bottom}} \begin{lstlisting} -\hvFloat[capPos=right,capVPos=bottom]{figure}{\includegraphics{frose}}{\capShortText}{} +\hvFloat[capPos=outer,capVPos=bottom]{figure}{\includegraphics{frose}}{\capShortText}{} \end{lstlisting} -\hvFloat[capPos=right,capVPos=bottom]{figure}{\includegraphics{frose}}{\capShortText}{} +\hvFloat[capPos=outer,capVPos=bottom]{figure}{\includegraphics{frose}}{\capShortText}{} \blindtext @@ -95,10 +95,10 @@ justification= \blindtext \begin{lstlisting} -\hvFloat[capPos=right,capVPos=bottom]{figure}{\includegraphics{frose}}{\capLongText}{} +\hvFloat[capPos=inner,capVPos=bottom]{figure}{\includegraphics{frose}}{\capLongText}{} \end{lstlisting} -\hvFloat[capPos=right,capVPos=bottom]{figure}{\includegraphics{frose}}{\capLongText}{} +\hvFloat[capPos=inner,capVPos=bottom]{figure}{\includegraphics{frose}}{\capLongText}{} \blindtext \NewColumn @@ -107,10 +107,10 @@ justification= \subsection{\texttt{capPos=center}} \begin{lstlisting} -\hvFloat[capPos=right,capVPos=center]{figure}{\includegraphics{frose}}{\capShortText}{} +\hvFloat[capPos=outer,capVPos=center]{figure}{\includegraphics{frose}}{\capShortText}{} \end{lstlisting} -\hvFloat[capPos=right,capVPos=center]{figure}{\includegraphics{frose}}{\capShortText}{} +\hvFloat[capPos=outer,capVPos=center]{figure}{\includegraphics{frose}}{\capShortText}{} \blindtext @@ -123,10 +123,10 @@ justification= \blindtext \begin{lstlisting} -\hvFloat[capPos=right,capVPos=center]{figure}{\includegraphics{frose}}{\capLongText}{} +\hvFloat[capPos=inner,capVPos=center]{figure}{\includegraphics{frose}}{\capLongText}{} \end{lstlisting} -\hvFloat[capPos=right,capVPos=center]{figure}{\includegraphics{frose}}{\capLongText}{} +\hvFloat[capPos=inner,capVPos=center]{figure}{\includegraphics{frose}}{\capLongText}{} \blindtext diff --git a/macros/latex/contrib/hvfloat/doc/examples/default1s1c.pdf b/macros/latex/contrib/hvfloat/doc/examples/default1s1c.pdf index 861efc9ac7..062639ee53 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/default1s1c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/default1s1c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/default1s1c.tex b/macros/latex/contrib/hvfloat/doc/examples/default1s1c.tex index 357a8c7543..a974d118a3 100644 --- a/macros/latex/contrib/hvfloat/doc/examples/default1s1c.tex +++ b/macros/latex/contrib/hvfloat/doc/examples/default1s1c.tex @@ -1,5 +1,5 @@ \documentclass{scrartcl} -%% $Id: default1s1c.tex 72 2021-05-02 11:40:10Z herbert $ +%% $Id: default1s1c.tex 318 2021-11-20 07:30:54Z herbert $ \input{preamble.ltx} @@ -27,7 +27,7 @@ The fullpage image~\vref{fig:fullpage1} has a caption~\vpageref{fig:fullpage1-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage0} \end{lstlisting} @@ -40,7 +40,7 @@ The fullpage image~\vref{fig:fullpage1} has a caption~\vpageref{fig:fullpage1-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage0} @@ -53,7 +53,7 @@ The fullpage image~\vref{fig:fullpage1} has a caption~\vpageref{fig:fullpage1-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage1} \end{lstlisting} @@ -66,7 +66,7 @@ The fullpage image~\vref{fig:fullpage1} has a caption~\vpageref{fig:fullpage1-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage1} diff --git a/macros/latex/contrib/hvfloat/doc/examples/default1s2c.pdf b/macros/latex/contrib/hvfloat/doc/examples/default1s2c.pdf index 60e3cb94ca..bbc7c107e0 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/default1s2c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/default1s2c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/default1s2c.tex b/macros/latex/contrib/hvfloat/doc/examples/default1s2c.tex index 86c3b0a898..79f9f8b101 100644 --- a/macros/latex/contrib/hvfloat/doc/examples/default1s2c.tex +++ b/macros/latex/contrib/hvfloat/doc/examples/default1s2c.tex @@ -1,5 +1,5 @@ \documentclass[twocolumn]{scrartcl} -%% $Id: default1s2c.tex 72 2021-05-02 11:40:10Z herbert $ +%% $Id: default1s2c.tex 318 2021-11-20 07:30:54Z herbert $ \input{preamble.ltx} \setlength\columnseprule{0.4pt} @@ -21,7 +21,7 @@ [A float with the default caption setting]% {A default caption of a ``default'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:0} \end{lstlisting} @@ -32,7 +32,7 @@ [A float with the default caption setting]% {A default caption of a ``default'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:0} diff --git a/macros/latex/contrib/hvfloat/doc/examples/default2s1c.pdf b/macros/latex/contrib/hvfloat/doc/examples/default2s1c.pdf index 33ac8dd876..d7e0bfce8b 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/default2s1c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/default2s1c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/default2s1c.tex b/macros/latex/contrib/hvfloat/doc/examples/default2s1c.tex index 282925826d..449cb5d9c1 100644 --- a/macros/latex/contrib/hvfloat/doc/examples/default2s1c.tex +++ b/macros/latex/contrib/hvfloat/doc/examples/default2s1c.tex @@ -1,5 +1,5 @@ \documentclass[twoside]{scrartcl} -%% $Id: default2s1c.tex 72 2021-05-02 11:40:10Z herbert $ +%% $Id: default2s1c.tex 318 2021-11-20 07:30:54Z herbert $ \input{preamble.ltx} @@ -22,7 +22,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage0} \end{lstlisting} @@ -35,7 +35,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage0} @@ -48,7 +48,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage1} \end{lstlisting} @@ -61,7 +61,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage1} diff --git a/macros/latex/contrib/hvfloat/doc/examples/default2s2c.pdf b/macros/latex/contrib/hvfloat/doc/examples/default2s2c.pdf index 1291839ce8..8b2bb2a448 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/default2s2c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/default2s2c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/default2s2c.tex b/macros/latex/contrib/hvfloat/doc/examples/default2s2c.tex index 45278e1e8d..0055c3c570 100644 --- a/macros/latex/contrib/hvfloat/doc/examples/default2s2c.tex +++ b/macros/latex/contrib/hvfloat/doc/examples/default2s2c.tex @@ -1,5 +1,5 @@ \documentclass[twoside,twocolumn]{scrartcl} -%% $Id: default2s2c.tex 72 2021-05-02 11:40:10Z herbert $ +%% $Id: default2s2c.tex 318 2021-11-20 07:30:54Z herbert $ \input{preamble.ltx} \setlength\columnseprule{0.4pt} @@ -28,7 +28,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage0} \end{lstlisting} @@ -41,7 +41,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage0} @@ -54,7 +54,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage1} \end{lstlisting} @@ -67,7 +67,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage1} diff --git a/macros/latex/contrib/hvfloat/doc/examples/doublefullpage2s2c.pdf b/macros/latex/contrib/hvfloat/doc/examples/doublefullpage2s2c.pdf new file mode 100644 index 0000000000..9c890e3706 Binary files /dev/null and b/macros/latex/contrib/hvfloat/doc/examples/doublefullpage2s2c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/doublefullpage2s2c.tex b/macros/latex/contrib/hvfloat/doc/examples/doublefullpage2s2c.tex new file mode 100644 index 0000000000..46ae9406ba --- /dev/null +++ b/macros/latex/contrib/hvfloat/doc/examples/doublefullpage2s2c.tex @@ -0,0 +1,802 @@ +\errorcontextlines=100 +%\documentclass[final]{ltugboat} +\documentclass[twoside,twocolumn,american]{scrartcl} +%% $Id: doublepage2s2c.tex 92 2021-05-18 09:46:55Z herbert $ + +\input{preamble.ltx} +\usepackage{xcolor,marginnote} + +\usepackage{marginnote,showframe} +\setcounter{tocdepth}{2} + +\begin{document} +\title{Examples for doublepage floats \newline with bind correction} +\author{Herbert Voß} +\maketitle + +\tableofcontents + + +\onecolumn +\listoffigures + +\newpage\null +\twocolumn +\part{Argument \texttt{doubleFULLPAGE}} +\section{Definition on an odd page} + +\Blindtext\hvblindtext + +\hvblindtext + +\subsection{The default -- in the first column} + +\begin{lstlisting} +\hvFloat[doubleFULLPAGE]% + {figure}% + {\includegraphics[doubleFULLPAGE]{images/rheinsberg}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doubleFULLPAGE}}% + {fig:doubleFULLPAGE0} +\end{lstlisting} + + +\marginnote{Fig. \ref{fig:doubleFULLPAGE0}} +\hvFloat[doubleFULLPAGE]% + {figure}% + {\includegraphics[doubleFULLPAGE]{images/rheinsberg}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doubleFULLPAGE}}% + {fig:doubleFULLPAGE0} + +\Blindtext + +\Blindtext + +%\Blindtext + +\hvblindtext + +\hvblindtext +\hvblindtext + +\subsection{The default -- in the second column} + + +\begin{lstlisting} +\hvFloat[doubleFULLPAGE]% + {figure}% + {\includegraphics[doubleFULLPAGE]{images/rheinsberg}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doubleFULLPAGE}}% + {fig:doubleFULLPAGE02nd} +\end{lstlisting} + + +\marginnote{Fig. \ref{fig:doubleFULLPAGE02nd}} +\hvFloat[doubleFULLPAGE]% + {figure}% + {\includegraphics[doubleFULLPAGE]{images/rheinsberg}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doubleFULLPAGE}}% + {fig:doubleFULLPAGE02nd} + +\Blindtext + +%\Blindtext + +%\Blindtext + +\hvblindtext + +\hvblindtext +\hvblindtext + +\subsection{\texttt{bindCorr=1cm} -- first column} + +\begin{lstlisting} +\hvFloat[doubleFULLPAGE,capWidth=n,capPos=right,bindCorr=1cm]% + {figure}% + {\includegraphics[doubleFULLPAGEbindCorr]{images/rheinsberg}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doubleFULLPAGE}}% + {fig:doubleFULLPAGE1} +\end{lstlisting} + +\marginnote{Fig. \ref{fig:doubleFULLPAGE1}} +\hvFloat[doubleFULLPAGE,capWidth=n,capPos=right,bindCorr=1cm]% + {figure}% + {\includegraphics[doubleFULLPAGEbindCorr]{images/rheinsberg}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doubleFULLPAGE}}% + {fig:doubleFULLPAGE1} + +\hvblindtext + +%\Blindtext + +\Blindtext + +\Blindtext + +%\Blindtext + +\hvblindtext + +\hvblindtext + +\hvblindtext + +\subsection{\texttt{bindCorr=1cm} -- second column} + +\begin{lstlisting} +\hvFloat[doubleFULLPAGE,capWidth=n,capPos=right,bindCorr=1cm]% + {figure}% + {\includegraphics[doubleFULLPAGEbindCorr]{images/rheinsberg}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doubleFULLPAGE}}% + {fig:doubleFULLPAGE12nd} +\end{lstlisting} + +\marginnote{Fig. \ref{fig:doubleFULLPAGE12nd}} +\hvFloat[doubleFULLPAGE,capWidth=n,capPos=right,bindCorr=1cm]% + {figure}% + {\includegraphics[doubleFULLPAGEbindCorr]{images/rheinsberg}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doubleFULLPAGE}}% + {fig:doubleFULLPAGE12nd} + +\hvblindtext + +%\Blindtext + +\Blindtext + +%\Blindtext + +\hvblindtext +\hvblindtext + +\hvblindtext + + + +\subsection{\texttt{bindCorr=3mm} -- first column} +\begin{lstlisting} +\hvFloat[doubleFULLPAGE,capWidth=n,capPos=right,bindCorr=3mm]% + {figure}% + {\includegraphics[doubleFULLPAGEbindCorr]{images/rheinsberg}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doubleFULLPAGE}}% + {fig:doubleFULLPAGE2} +\end{lstlisting} + +\marginnote{Fig. \ref{fig:doubleFULLPAGE2}} +\hvFloat[doubleFULLPAGE,capWidth=n,capPos=right,bindCorr=3mm]% + {figure}% + {\includegraphics[doubleFULLPAGEbindCorr]{images/rheinsberg}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doubleFULLPAGE}}% + {fig:doubleFULLPAGE2} + + +\Blindtext + +\Blindtext + +%\Blindtext +%\Blindtext + +\hvblindtext + +\hvblindtext +\hvblindtext + + + + +\subsection{\texttt{bindCorr=3mm} -- second column} +\begin{lstlisting} +\hvFloat[doubleFULLPAGE,capWidth=n,capPos=right,bindCorr=3mm]% + {figure}% + {\includegraphics[doubleFULLPAGEbindCorr]{images/rheinsberg}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doubleFULLPAGE}}% + {fig:doubleFULLPAGE22nd} +\end{lstlisting} + +\marginnote{Fig. \ref{fig:doubleFULLPAGE22nd}} +\hvFloat[doubleFULLPAGE,capWidth=n,capPos=right,bindCorr=3mm]% + {figure}% + {\includegraphics[doubleFULLPAGEbindCorr]{images/rheinsberg}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doubleFULLPAGE}}% + {fig:doubleFULLPAGE22nd} + + +\Blindtext + +%\Blindtext + +%\Blindtext + +\hvblindtext +\hvblindtext + +\hvblindtext + + +\subsection{\texttt{bindCorr=} -- first column} + +\begin{lstlisting} +\hvFloat[doubleFULLPAGE,capWidth=n,bindCorr=\the\dimexpr1in+\oddsidemargin]% + {figure}% + {\includegraphics[doubleFULLPAGEbindCorr]{images/rheinsberg}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doubleFULLPAGE}}% + {fig:doubleFULLPAGE3} +\end{lstlisting} + +\marginnote{Fig. \ref{fig:doubleFULLPAGE3}} +\hvFloat[doubleFULLPAGE,capWidth=n,bindCorr=\the\dimexpr1in+\oddsidemargin]% + {figure}% + {\includegraphics[doubleFULLPAGEbindCorr]{images/rheinsberg}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doubleFULLPAGE}}% + {fig:doubleFULLPAGE3} + + +\Blindtext + +\Blindtext + +%\Blindtext + +\hvblindtext + +\hvblindtext +\hvblindtext + +\hvblindtext + +\subsection{\texttt{bindCorr=} -- second column} + +\begin{lstlisting} +\hvFloat[doubleFULLPAGE,capWidth=n,bindCorr=\the\dimexpr1in+\oddsidemargin]% + {figure}% + {\includegraphics[doubleFULLPAGEbindCorr]{images/rheinsberg}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doubleFULLPAGE}}% + {fig:doubleFULLPAGE32nd} +\end{lstlisting} + +\marginnote{Fig. \ref{fig:doubleFULLPAGE32nd}} +\hvFloat[doubleFULLPAGE,capWidth=n,bindCorr=\the\dimexpr1in+\oddsidemargin,capPos=after]% + {figure}% + {\includegraphics[doubleFULLPAGEbindCorr]{images/rheinsberg}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doubleFULLPAGE}}% + {fig:doubleFULLPAGE32nd} + + +%\Blindtext + +\hvblindtext + +\hvblindtext + +%\hvblindtext + + + + +\section{Definition on an even page} + + +\subsection{The default -- first column} +\begin{lstlisting} +\hvFloat[doubleFULLPAGE]% + {figure}% + {\includegraphics[height=\paperheight]{images/rheinsberg}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doubleFULLPAGE}}% + {fig:doubleFULLPAGE0a} +\end{lstlisting} + + +\marginnote{Fig. \ref{fig:doubleFULLPAGE0a}} +\hvFloat[doubleFULLPAGE]% + {figure}% + {\includegraphics[height=\paperheight]{images/rheinsberg}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doubleFULLPAGE}}% + {fig:doubleFULLPAGE0a} + + +\Blindtext + +\Blindtext + +%\Blindtext + +\hvblindtext +%\Blindtext + +\hvblindtext + +\hvblindtext +\hvblindtext + +\subsection{The default -- second column} +\begin{lstlisting} +\hvFloat[doubleFULLPAGE]% + {figure}% + {\includegraphics[height=\paperheight]{images/rheinsberg}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doubleFULLPAGE}}% + {fig:doubleFULLPAGE0a2nd} +\end{lstlisting} + + +\marginnote{Fig. \ref{fig:doubleFULLPAGE0a2nd}} +\hvFloat[doubleFULLPAGE]% + {figure}% + {\includegraphics[height=\paperheight]{images/rheinsberg}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doubleFULLPAGE}}% + {fig:doubleFULLPAGE0a2nd} + + +\hvblindtext +\hvblindtext + +\hvblindtext + +\Blindtext + +%\Blindtext + +%\Blindtext + + + + +\subsection{\texttt{bindCorr=1cm} -- first column} + +\begin{lstlisting} +\hvFloat[doubleFULLPAGE,capWidth=n,capPos=right,bindCorr=1cm]% + {figure}% + {\includegraphics[doubleFULLPAGEbindCorr]{images/rheinsberg}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doubleFULLPAGE}}% + {fig:doubleFULLPAGE1a} +\end{lstlisting} + +\marginnote{Fig. \ref{fig:doubleFULLPAGE1a}} +\hvFloat[doubleFULLPAGE,capWidth=n,capPos=right,bindCorr=1cm]% + {figure}% + {\includegraphics[doubleFULLPAGEbindCorr]{images/rheinsberg}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doubleFULLPAGE}}% + {fig:doubleFULLPAGE1a} + +%\hvblindtext + +\Blindtext + +\Blindtext + +%\Blindtext +%\Blindtext + +\hvblindtext + +\hvblindtext +\hvblindtext + +\hvblindtext + + +\subsection{\texttt{bindCorr=1cm} -- second column} + +\begin{lstlisting} +\hvFloat[doubleFULLPAGE,capWidth=n,capPos=right,bindCorr=1cm]% + {figure}% + {\includegraphics[doubleFULLPAGEbindCorr]{images/rheinsberg}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doubleFULLPAGE}}% + {fig:doubleFULLPAGE1a2nd} +\end{lstlisting} + +\marginnote{Fig. \ref{fig:doubleFULLPAGE1a2nd}} +\hvFloat[doubleFULLPAGE,capWidth=n,capPos=right,bindCorr=1cm]% + {figure}% + {\includegraphics[doubleFULLPAGEbindCorr]{images/rheinsberg}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doubleFULLPAGE}}% + {fig:doubleFULLPAGE1a2nd} + +\hvblindtext + +%\Blindtext + +\Blindtext + +%\Blindtext + +\hvblindtext + +\hvblindtext + + + + +\subsection{\texttt{bindCorr=3mm} -- first column} + +\begin{lstlisting} +\hvFloat[doubleFULLPAGE,capWidth=n,capPos=right,bindCorr=3mm]% + {figure}% + {\includegraphics[doubleFULLPAGEbindCorr]{images/rheinsberg}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doubleFULLPAGE}}% + {fig:doubleFULLPAGE2a} +\end{lstlisting} + +\marginnote{Fig. \ref{fig:doubleFULLPAGE2a}} +\hvFloat[doubleFULLPAGE,capWidth=n,capPos=right,bindCorr=3mm]% + {figure}% + {\includegraphics[doubleFULLPAGEbindCorr]{images/rheinsberg}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doubleFULLPAGE}}% + {fig:doubleFULLPAGE2a} + + +\Blindtext + +\Blindtext + +%\Blindtext +%\Blindtext + +\hvblindtext + +\hvblindtext + +\hvblindtext + +\hvblindtext + + +\subsection{\texttt{bindCorr=3mm} -- second column} + +\begin{lstlisting} +\hvFloat[doubleFULLPAGE,capWidth=n,capPos=right,bindCorr=3mm]% + {figure}% + {\includegraphics[doubleFULLPAGEbindCorr]{images/rheinsberg}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doubleFULLPAGE}}% + {fig:doubleFULLPAGE2a2nd} +\end{lstlisting} + +\marginnote{Fig. \ref{fig:doubleFULLPAGE2a2nd}} +\hvFloat[doubleFULLPAGE,capWidth=n,capPos=right,bindCorr=3mm]% + {figure}% + {\includegraphics[doubleFULLPAGEbindCorr]{images/rheinsberg}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doubleFULLPAGE}}% + {fig:doubleFULLPAGE2a2nd} + + +\Blindtext + +%\Blindtext + +%\Blindtext + +%\hvblindtext + +\hvblindtext + +\hvblindtext + +\hvblindtext + + + +\subsection{\texttt{bindCorr=} -- first column} + +\begin{lstlisting} +\hvFloat[doubleFULLPAGE,capWidth=n,bindCorr=\the\dimexpr1in+\oddsidemargin]% + {figure}% + {\includegraphics[doubleFULLPAGEbindCorr]{images/rheinsberg}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doubleFULLPAGE}}% + {fig:doubleFULLPAGE3a} +\end{lstlisting} + +\marginnote{Fig. \ref{fig:doubleFULLPAGE3a}} +\hvFloat[doubleFULLPAGE,capWidth=n,bindCorr=\the\dimexpr1in+\oddsidemargin]% + {figure}% + {\includegraphics[doubleFULLPAGEbindCorr]{images/rheinsberg}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doubleFULLPAGE}}% + {fig:doubleFULLPAGE3a} + + +\Blindtext + +\Blindtext + +%\Blindtext + +\hvblindtext + +\hvblindtext + +%\hvblindtext + +%\hvblindtext + + +\subsection{\texttt{bindCorr=} -- second column} + +\begin{lstlisting} +\hvFloat[doubleFULLPAGE,capWidth=n,bindCorr=\the\dimexpr1in+\oddsidemargin]% + {figure}% + {\includegraphics[doubleFULLPAGEbindCorr]{images/rheinsberg}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doubleFULLPAGE}}% + {fig:doubleFULLPAGE3a2nd} +\end{lstlisting} + +\marginnote{Fig. \ref{fig:doubleFULLPAGE3a2nd}} +\hvFloat[doubleFULLPAGE,capWidth=n,bindCorr=\the\dimexpr1in+\oddsidemargin,capPos=after]% + {figure}% + {\includegraphics[doubleFULLPAGEbindCorr]{images/rheinsberg}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doubleFULLPAGE}}% + {fig:doubleFULLPAGE3a2nd} + + +\Blindtext + +\Blindtext + +\Blindtext + +\hvblindtext + + + +%\cleardoublepage + + +\hvblindtext + +\hvblindtext + +\Blindtext + +\hvblindtext + +\section{Full height, but no complete double page} +\subsection{The default -- in the first column} + +\begin{lstlisting} +\hvFloat[doubleFULLPAGE,capPos=right]% + {figure}% + {\includegraphics[height=\paperheight]{images/rheinsberg}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doubleFULLPAGE}}% + {fig:doubleFULLPAGE0n} +\end{lstlisting} + + +\marginnote{Fig. \ref{fig:doubleFULLPAGE0n}} +\hvFloat[doubleFULLPAGE,capPos=right]% + {figure}% + {\includegraphics[height=\paperheight]{images/rheinsberg}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doubleFULLPAGE}}% + {fig:doubleFULLPAGE0n} + +\Blindtext + +\Blindtext + +%\Blindtext + +\clearpage +\Blindtext +%\hvblindtext + +%\hvblindtext + +\Blindtext + +\hvblindtext +\Blindtext + +\subsection{The default -- in the second column} + + +\begin{lstlisting} +\hvFloat[doubleFULLPAGE,capPos=before]% + {figure}% + {\includegraphics[height=\paperheight]{images/rheinsberg}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doubleFULLPAGE}}% + {fig:doubleFULLPAGE02ndn} +\end{lstlisting} + + +\marginnote{Fig. \ref{fig:doubleFULLPAGE02ndn}} +\hvFloat[doubleFULLPAGE,capPos=before] + {figure}% + {\includegraphics[height=\paperheight]{images/rheinsberg}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doubleFULLPAGE}}% + {fig:doubleFULLPAGE02ndn} + +\Blindtext + +\Blindtext + +\Blindtext + +%\hvblindtext + +\Blindtext + +%\Blindtext + + +\subsection{The default -- in the second column} + + +\begin{lstlisting} +\hvFloat[doubleFULLPAGE,capPos=after,twoColumnCaption]% + {figure}% + {\includegraphics[doubleFULLPAGE]{images/rheinsberg}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed on the right side of the + right-hand part of the illustration. The illustration begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doubleFULLPAGE}}% + {fig:doubleFULLPAGE02ndnn} +\end{lstlisting} + + +\marginnote{Fig. \ref{fig:doubleFULLPAGE02ndnn}} +\hvFloat[doubleFULLPAGE,capPos=after,twoColumnCaption]% + {figure}% + {\includegraphics[doubleFULLPAGE]{images/rheinsberg}}% + [A doublepage image with a caption on the right side of the right part.]% + {A caption for a double-sided image that will be placed + at the bottom of the following page. The doublepage image begins on the left edge of + the paper. A short form is used for the LOF. + The parameter is \texttt{doubleFULLPAGE}}% + {fig:doubleFULLPAGE02ndnn} + +\Blindtext + +\Blindtext + +\Blindtext + +\hvblindtext + +\hvblindtext +\hvblindtext + + + +\end{document} \ No newline at end of file diff --git a/macros/latex/contrib/hvfloat/doc/examples/doublepage2s1c.pdf b/macros/latex/contrib/hvfloat/doc/examples/doublepage2s1c.pdf index 0d3e2713ef..ab1c658dbd 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/doublepage2s1c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/doublepage2s1c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/doublepage2s1c.tex b/macros/latex/contrib/hvfloat/doc/examples/doublepage2s1c.tex index 656cbe68c8..ebd703e964 100644 --- a/macros/latex/contrib/hvfloat/doc/examples/doublepage2s1c.tex +++ b/macros/latex/contrib/hvfloat/doc/examples/doublepage2s1c.tex @@ -1,5 +1,5 @@ \documentclass[twoside]{scrartcl} -%% $Id: doublepage2s1c.tex 92 2021-05-18 09:46:55Z herbert $ +%% $Id: doublepage2s1c.tex 299 2021-10-09 14:05:35Z herbert $ \input{preamble.ltx} \usepackage{blindtext,xcolor,marginnote} @@ -166,10 +166,11 @@ \hvblindtext \hvblindtext +\hvblindtext \subsection{Definition on an even page} \subsubsection{The default} -\begin{lstlisting} +\begin{verbatim} \hvFloat[doublePage,capWidth=n,capPos=right]% {figure}% {\includegraphics[width=2\textwidth]{images/sonne-meer}}% @@ -179,7 +180,7 @@ the paper. A short form is used for the LOF. The parameter is \texttt{doublePage}}% {fig:doublePage0a} -\end{lstlisting} +\end{verbatim} \marginnote{Fig. \ref{fig:doublePage0a}} diff --git a/macros/latex/contrib/hvfloat/doc/examples/doublepage2s2c.pdf b/macros/latex/contrib/hvfloat/doc/examples/doublepage2s2c.pdf index 1578d673ff..40ca90301e 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/doublepage2s2c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/doublepage2s2c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/even1s1c.pdf b/macros/latex/contrib/hvfloat/doc/examples/even1s1c.pdf index 7be7a1cb5b..be7272292e 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/even1s1c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/even1s1c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/even1s1c.tex b/macros/latex/contrib/hvfloat/doc/examples/even1s1c.tex index 75eb2bf872..d042b90863 100644 --- a/macros/latex/contrib/hvfloat/doc/examples/even1s1c.tex +++ b/macros/latex/contrib/hvfloat/doc/examples/even1s1c.tex @@ -1,5 +1,5 @@ \documentclass{scrartcl} -%% $Id: even1s1c.tex 72 2021-05-02 11:40:10Z herbert $ +%% $Id: even1s1c.tex 318 2021-11-20 07:30:54Z herbert $ \input{preamble.ltx} @@ -22,7 +22,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage0} \end{lstlisting} @@ -35,7 +35,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage0} @@ -48,7 +48,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage1} \end{lstlisting} @@ -61,7 +61,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage1} diff --git a/macros/latex/contrib/hvfloat/doc/examples/even1s2c.pdf b/macros/latex/contrib/hvfloat/doc/examples/even1s2c.pdf index e98663ed09..a15479bc59 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/even1s2c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/even1s2c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/even1s2c.tex b/macros/latex/contrib/hvfloat/doc/examples/even1s2c.tex index da5d013c40..2965b47502 100644 --- a/macros/latex/contrib/hvfloat/doc/examples/even1s2c.tex +++ b/macros/latex/contrib/hvfloat/doc/examples/even1s2c.tex @@ -1,5 +1,5 @@ \documentclass[twocolumn]{scrartcl} -%% $Id: even1s2c.tex 72 2021-05-02 11:40:10Z herbert $ +%% $Id: even1s2c.tex 318 2021-11-20 07:30:54Z herbert $ \input{preamble.ltx} \setlength\columnseprule{0.4pt} @@ -28,7 +28,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage0} \end{lstlisting} @@ -41,7 +41,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage0} @@ -54,7 +54,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage1} \end{lstlisting} @@ -67,7 +67,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage1} diff --git a/macros/latex/contrib/hvfloat/doc/examples/even2s1c.pdf b/macros/latex/contrib/hvfloat/doc/examples/even2s1c.pdf index 09a417c031..16fba17ceb 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/even2s1c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/even2s1c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/even2s1c.tex b/macros/latex/contrib/hvfloat/doc/examples/even2s1c.tex index 1ee584c81a..0e794a30e7 100644 --- a/macros/latex/contrib/hvfloat/doc/examples/even2s1c.tex +++ b/macros/latex/contrib/hvfloat/doc/examples/even2s1c.tex @@ -1,5 +1,5 @@ \documentclass[twoside]{scrartcl} -%% $Id: even2s1c.tex 72 2021-05-02 11:40:10Z herbert $ +%% $Id: even2s1c.tex 318 2021-11-20 07:30:54Z herbert $ \input{preamble.ltx} @@ -27,7 +27,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage0} \end{lstlisting} @@ -39,7 +39,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage0} @@ -54,7 +54,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage1} \end{lstlisting} @@ -67,7 +67,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage1} diff --git a/macros/latex/contrib/hvfloat/doc/examples/even2s2c.pdf b/macros/latex/contrib/hvfloat/doc/examples/even2s2c.pdf index e2898a14ae..c128ab6de6 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/even2s2c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/even2s2c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/even2s2c.tex b/macros/latex/contrib/hvfloat/doc/examples/even2s2c.tex index ce3206c075..6952e4e45e 100644 --- a/macros/latex/contrib/hvfloat/doc/examples/even2s2c.tex +++ b/macros/latex/contrib/hvfloat/doc/examples/even2s2c.tex @@ -1,5 +1,5 @@ \documentclass[twoside,twocolumn]{scrartcl} -%% $Id: even2s2c.tex 72 2021-05-02 11:40:10Z herbert $ +%% $Id: even2s2c.tex 318 2021-11-20 07:30:54Z herbert $ \input{preamble.ltx} \setlength\columnseprule{0.4pt} @@ -28,7 +28,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage0} \end{lstlisting} @@ -41,7 +41,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage0} @@ -54,7 +54,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage1} \end{lstlisting} @@ -67,7 +67,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage1} diff --git a/macros/latex/contrib/hvfloat/doc/examples/fullpage1s1c.pdf b/macros/latex/contrib/hvfloat/doc/examples/fullpage1s1c.pdf new file mode 100644 index 0000000000..3ce06c022f Binary files /dev/null and b/macros/latex/contrib/hvfloat/doc/examples/fullpage1s1c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/fullpage1s1c.tex b/macros/latex/contrib/hvfloat/doc/examples/fullpage1s1c.tex new file mode 100644 index 0000000000..1b95fbaa03 --- /dev/null +++ b/macros/latex/contrib/hvfloat/doc/examples/fullpage1s1c.tex @@ -0,0 +1,64 @@ +\documentclass{scrartcl} +%% $Id: fullpage1s1c.tex 72 2021-05-02 11:40:10Z herbert $ + +\input{preamble.ltx} +\setlength\columnseprule{0.4pt} + +\begin{document} +\title{Example for fullpage floats} +\author{Herbert Voß} +\maketitle + +\tableofcontents + +\section{The fullpage optional arguments} +\Blindtext + +\subsection{\texttt{fullpage}} +\blindtext +\blindtext +\verb|\includegraphics[fullpage]{tiger}| + +\includegraphics[fullpage]{tiger} + +\Blindtext +\subsection{\texttt{FullPage}} +\blindtext + +\verb|\includegraphics[FullPage]{tiger}| +\begin{figure*}[p] +\includegraphics*[FullPage]{tiger} +\end{figure*} + +\Blindtext + +\Blindtext + +\subsection{\texttt{FULLPAGE}} +\blindtext + +\verb|\includegraphics[FULLPAGE]{tiger}| + +\begin{figure*}[p] + \vspace*{\the\dimexpr-1in-\voffset+\topskip-\headheight-0.5\baselineskip}% + \if@twoside + \leavevmode\checkoddpage + \ifoddpage + \hspace*{\the\dimexpr-\oddsidemargin-\parindent-1in}% + \else + \hspace*{\the\dimexpr-\evensidemargin-\parindent-1in}% + \fi + \else + \hspace*{\the\dimexpr-\oddsidemargin-\parindent-1in}% + \fi + \put(0,0){\usebox\hvObjectBox}% + \AtBeginShipoutNext{\thispagestyle{empty}}% +\includegraphics*[FULLPAGE]{tiger} +\end{figure*} + +\Blindtext + +\blindtext + + +\end{document} \ No newline at end of file diff --git a/macros/latex/contrib/hvfloat/doc/examples/fullpage1s2c.pdf b/macros/latex/contrib/hvfloat/doc/examples/fullpage1s2c.pdf index e0e787f994..936972b835 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/fullpage1s2c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/fullpage1s2c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/fullpage1s2c.tex b/macros/latex/contrib/hvfloat/doc/examples/fullpage1s2c.tex index 799aa9ed6b..c7a9a0ec13 100644 --- a/macros/latex/contrib/hvfloat/doc/examples/fullpage1s2c.tex +++ b/macros/latex/contrib/hvfloat/doc/examples/fullpage1s2c.tex @@ -1,5 +1,5 @@ \documentclass[twocolumn]{scrartcl} -%% $Id: fullpage1s2c.tex 72 2021-05-02 11:40:10Z herbert $ +%% $Id: fullpage1s2c.tex 676 2023-01-28 19:47:00Z herbert $ \input{preamble.ltx} \setlength\columnseprule{0.4pt} @@ -16,12 +16,12 @@ \subsection{\texttt{fullpage}} \blindtext -\blindtext \verb|\includegraphics[fullpage]{tiger}| \includegraphics[fullpage]{tiger} -\Blindtext +\Blindtext[2] + \subsection{\texttt{FullPage}} \blindtext diff --git a/macros/latex/contrib/hvfloat/doc/examples/inner1s2c.pdf b/macros/latex/contrib/hvfloat/doc/examples/inner1s2c.pdf index 73a49d0a07..f1ec08ccaf 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/inner1s2c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/inner1s2c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/inner1s2c.tex b/macros/latex/contrib/hvfloat/doc/examples/inner1s2c.tex index 6960658c3b..eae3c5ce67 100644 --- a/macros/latex/contrib/hvfloat/doc/examples/inner1s2c.tex +++ b/macros/latex/contrib/hvfloat/doc/examples/inner1s2c.tex @@ -1,5 +1,5 @@ \documentclass{scrartcl} -%% $Id: inner1s2c.tex 72 2021-05-02 11:40:10Z herbert $ +%% $Id: inner1s2c.tex 318 2021-11-20 07:30:54Z herbert $ \input{preamble.ltx} \setlength\columnseprule{0.4pt} @@ -27,7 +27,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca {\includegraphics[fullpage]{frose}}% [A float which needs the complete page width and height.]% {A Caption on the inner side of a twosided document. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.} {fig:fullpage0} \end{lstlisting} @@ -38,7 +38,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca {\includegraphics[fullpage]{frose}}% [A float which needs the complete page width and height.]% {A Caption on the inner side of a twosided document. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.} {fig:fullpage0} @@ -52,7 +52,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca {\includegraphics[fullpage]{frose}}% [A float which needs the complete page width and height.]% {A Caption on the inner side of a twosided document. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.} {fig:fullpage1} \end{lstlisting} @@ -64,7 +64,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca {\includegraphics[fullpage]{frose}}% [A float which needs the complete page width and height.]% {A Caption on the inner side of a twosided document. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.} {fig:fullpage1} diff --git a/macros/latex/contrib/hvfloat/doc/examples/inner2s1c.pdf b/macros/latex/contrib/hvfloat/doc/examples/inner2s1c.pdf index 3cd80ae131..6a1325e58e 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/inner2s1c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/inner2s1c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/inner2s1c.tex b/macros/latex/contrib/hvfloat/doc/examples/inner2s1c.tex index 15b6508111..60b226c085 100644 --- a/macros/latex/contrib/hvfloat/doc/examples/inner2s1c.tex +++ b/macros/latex/contrib/hvfloat/doc/examples/inner2s1c.tex @@ -1,5 +1,5 @@ \documentclass[twoside]{scrartcl} -%% $Id: inner2s1c.tex 72 2021-05-02 11:40:10Z herbert $ +%% $Id: inner2s1c.tex 318 2021-11-20 07:30:54Z herbert $ \input{preamble.ltx} @@ -26,7 +26,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca {\includegraphics[fullpage]{frose}}% [A float which needs the complete page width and height.]% {A Caption on the inner side of a twosided document. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.} {fig:fullpage0} \end{lstlisting} @@ -37,7 +37,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca {\includegraphics[fullpage]{frose}}% [A float which needs the complete page width and height.]% {A Caption on the inner side of a twosided document. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.} {fig:fullpage0} @@ -51,7 +51,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca {\includegraphics[fullpage]{frose}}% [A float which needs the complete page width and height.]% {A Caption on the inner side of a twosided document. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.} {fig:fullpage1} \end{lstlisting} @@ -63,7 +63,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca {\includegraphics[fullpage]{frose}}% [A float which needs the complete page width and height.]% {A Caption on the inner side of a twosided document. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.} {fig:fullpage1} diff --git a/macros/latex/contrib/hvfloat/doc/examples/inner2s2c.pdf b/macros/latex/contrib/hvfloat/doc/examples/inner2s2c.pdf index 6b794b3732..cc0cf680f6 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/inner2s2c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/inner2s2c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/inner2s2c.tex b/macros/latex/contrib/hvfloat/doc/examples/inner2s2c.tex index 0f4a3856c8..04627efaa8 100644 --- a/macros/latex/contrib/hvfloat/doc/examples/inner2s2c.tex +++ b/macros/latex/contrib/hvfloat/doc/examples/inner2s2c.tex @@ -1,5 +1,5 @@ \documentclass[twoside,twocolumn]{scrartcl} -%% $Id: inner2s2c.tex 72 2021-05-02 11:40:10Z herbert $ +%% $Id: inner2s2c.tex 318 2021-11-20 07:30:54Z herbert $ \input{preamble.ltx} \setlength\columnseprule{0.4pt} @@ -27,7 +27,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca {\includegraphics[fullpage]{frose}}% [A float which needs the complete page width and height.]% {A Caption on the inner side of a twosided document. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.} {fig:fullpage0} \end{lstlisting} @@ -38,7 +38,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca {\includegraphics[fullpage]{frose}}% [A float which needs the complete page width and height.]% {A Caption on the inner side of a twosided document. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.} {fig:fullpage0} @@ -52,7 +52,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca {\includegraphics[fullpage]{frose}}% [A float which needs the complete page width and height.]% {A Caption on the inner side of a twosided document. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.} {fig:fullpage1} \end{lstlisting} @@ -64,7 +64,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca {\includegraphics[fullpage]{frose}}% [A float which needs the complete page width and height.]% {A Caption on the inner side of a twosided document. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.} {fig:fullpage1} diff --git a/macros/latex/contrib/hvfloat/doc/examples/left2s2c.pdf b/macros/latex/contrib/hvfloat/doc/examples/left2s2c.pdf index 4e6b0cfae7..e9c4adf340 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/left2s2c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/left2s2c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/left2s2c.tex b/macros/latex/contrib/hvfloat/doc/examples/left2s2c.tex index d415c7e343..56ea72912e 100644 --- a/macros/latex/contrib/hvfloat/doc/examples/left2s2c.tex +++ b/macros/latex/contrib/hvfloat/doc/examples/left2s2c.tex @@ -1,5 +1,5 @@ \documentclass[twoside,twocolumn]{scrartcl} -%% $Id: left2s2c.tex 72 2021-05-02 11:40:10Z herbert $ +%% $Id: left2s2c.tex 318 2021-11-20 07:30:54Z herbert $ \input{preamble.ltx} \setlength\columnseprule{0.4pt} @@ -28,7 +28,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage0} \end{lstlisting} @@ -41,7 +41,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage0} @@ -54,7 +54,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage1} \end{lstlisting} @@ -67,7 +67,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage1} diff --git a/macros/latex/contrib/hvfloat/doc/examples/multi-after1s1c.pdf b/macros/latex/contrib/hvfloat/doc/examples/multi-after1s1c.pdf index bc345dc15b..a17ff0ea75 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/multi-after1s1c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/multi-after1s1c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/multi-after1s1c.tex b/macros/latex/contrib/hvfloat/doc/examples/multi-after1s1c.tex index a01561d840..6238a6f910 100644 --- a/macros/latex/contrib/hvfloat/doc/examples/multi-after1s1c.tex +++ b/macros/latex/contrib/hvfloat/doc/examples/multi-after1s1c.tex @@ -1,5 +1,5 @@ \documentclass{scrartcl} -%% $Id: multi-after1s1c.tex 112 2021-06-14 08:01:42Z herbert $ +%% $Id: multi-after1s1c.tex 318 2021-11-20 07:30:54Z herbert $ \input{preamble.ltx} @@ -27,7 +27,7 @@ The fullpage multifloat~\vref{img:demo0} has a caption~\vpageref{img:demo0-cap}. +{figure}{\includegraphics[width=\linewidth]{CTAN}}%% no 1 [Short caption A]% {A Caption A of a ``fullpage'' object, which follows on the left or - right column. This can be an even or odd page. And some more text whch has no + right column. This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {img:demo0}% +{table}{\begin{tabular}{lrcp{3cm}}\hline % no 2 @@ -56,7 +56,7 @@ The fullpage multifloat~\vref{img:demo0} has a caption~\vpageref{img:demo0-cap}. +{figure}{\includegraphics[width=\linewidth]{CTAN}}%% no 1 [Short caption A]% {A Caption A of a ``fullpage'' object, which follows on the left or - right column. This can be an even or odd page. And some more text whch has no + right column. This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {img:demo0}% +{table}{\begin{tabular}{lrcp{3cm}}\hline % no 2 @@ -88,7 +88,7 @@ The fullpage multifloat~\vref{img:demo0} has a caption~\vpageref{img:demo0-cap}. +{figure}{\includegraphics[width=\linewidth]{CTAN}}%% no 1 [Short caption A]% {A Caption A of a ``fullpage'' object, which follows on the left or - right column. This can be an even or odd page. And some more text whch has no + right column. This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {img:demo3}% +{table}{\begin{tabular}{lrcp{3cm}}\hline % no 2 @@ -116,7 +116,7 @@ The fullpage multifloat~\vref{img:demo0} has a caption~\vpageref{img:demo0-cap}. +{figure}{\includegraphics[width=\linewidth]{CTAN}}%% no 1 [Short caption A]% {A Caption A of a ``fullpage'' object, which follows on the left or - right column. This can be an even or odd page. And some more text whch has no + right column. This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {img:demo3}% +{table}{\begin{tabular}{lrcp{3cm}}\hline % no 2 diff --git a/macros/latex/contrib/hvfloat/doc/examples/multi-default1s1c.pdf b/macros/latex/contrib/hvfloat/doc/examples/multi-default1s1c.pdf index e37e60e626..d1dd9d195b 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/multi-default1s1c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/multi-default1s1c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/multi-default1s1c.tex b/macros/latex/contrib/hvfloat/doc/examples/multi-default1s1c.tex index 1c4e98195f..655d8fd062 100644 --- a/macros/latex/contrib/hvfloat/doc/examples/multi-default1s1c.tex +++ b/macros/latex/contrib/hvfloat/doc/examples/multi-default1s1c.tex @@ -1,5 +1,5 @@ \documentclass{scrartcl} -%% $Id: multi-default1s1c.tex 72 2021-05-02 11:40:10Z herbert $ +%% $Id: multi-default1s1c.tex 318 2021-11-20 07:30:54Z herbert $ \input{preamble.ltx} @@ -28,7 +28,7 @@ The fullpage multifloat~\vref{img:demo0} has a caption~\vpageref{img:demo0-cap}. +{figure}{\includegraphics[width=\linewidth]{CTAN}}%% no 1 [Short caption A]% {A Caption A of a ``fullpage'' object, which follows on the left or - right column. This can be an even or odd page. And some more text whch has no + right column. This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {img:demo0}% +{table}{\begin{tabular}{lrcp{3cm}}\hline % no 2 @@ -56,7 +56,7 @@ The fullpage multifloat~\vref{img:demo0} has a caption~\vpageref{img:demo0-cap}. +{figure}{\includegraphics[width=\linewidth]{CTAN}}%% no 1 [Short caption A]% {A Caption A of a ``fullpage'' object, which follows on the left or - right column. This can be an even or odd page. And some more text whch has no + right column. This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {img:demo0}% +{table}{\begin{tabular}{lrcp{3cm}}\hline % no 2 @@ -88,7 +88,7 @@ The fullpage multifloat~\vref{img:demo0} has a caption~\vpageref{img:demo0-cap}. +{figure}{\includegraphics[width=\linewidth]{CTAN}}%% no 1 [Short caption A]% {A Caption A of a ``fullpage'' object, which follows on the left or - right column. This can be an even or odd page. And some more text whch has no + right column. This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {img:demo3}% +{table}{\begin{tabular}{lrcp{3cm}}\hline % no 2 @@ -116,7 +116,7 @@ The fullpage multifloat~\vref{img:demo0} has a caption~\vpageref{img:demo0-cap}. +{figure}{\includegraphics[width=\linewidth]{CTAN}}%% no 1 [Short caption A]% {A Caption A of a ``fullpage'' object, which follows on the left or - right column. This can be an even or odd page. And some more text whch has no + right column. This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {img:demo3}% +{table}{\begin{tabular}{lrcp{3cm}}\hline % no 2 diff --git a/macros/latex/contrib/hvfloat/doc/examples/multi-default1s2c.pdf b/macros/latex/contrib/hvfloat/doc/examples/multi-default1s2c.pdf index 614b2fcf30..fd40d114af 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/multi-default1s2c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/multi-default1s2c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/multi-default1s2c.tex b/macros/latex/contrib/hvfloat/doc/examples/multi-default1s2c.tex index f42bc85ae5..a46ae56938 100644 --- a/macros/latex/contrib/hvfloat/doc/examples/multi-default1s2c.tex +++ b/macros/latex/contrib/hvfloat/doc/examples/multi-default1s2c.tex @@ -1,5 +1,5 @@ \documentclass[twocolumn]{scrartcl} -%% $Id: multi-default1s2c.tex 72 2021-05-02 11:40:10Z herbert $ +%% $Id: multi-default1s2c.tex 318 2021-11-20 07:30:54Z herbert $ \input{preamble.ltx} \setlength\columnseprule{0.4pt} @@ -29,7 +29,7 @@ The fullpage multifloat~\vref{multi:demo0} has a caption~\vpageref{multi:demo0-c +{figure}{\includegraphics[height=0.4\textheight]{rose}}%% no 1 [Short caption A]% {A Caption A of a ``fullpage'' object, which follows on the left or - right column. This can be an even or odd page. And some more text whch has no + right column. This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {multi:demo0}% +{table}{\begin{tabular}{lr}\hline % no 2 @@ -54,7 +54,7 @@ The fullpage multifloat~\vref{multi:demo0} has a caption~\vpageref{multi:demo0-c +{figure}{\includegraphics[height=0.4\textheight]{rose}}%% no 1 [Short caption A]% {A Caption A of a ``fullpage'' object, which follows on the left or - right column. This can be an even or odd page. And some more text whch has no + right column. This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {multi:demo0}% +{table}{\begin{tabular}{lr}\hline % no 2 @@ -84,7 +84,7 @@ The fullpage multifloat~\vref{multi:demo0} has a caption~\vpageref{multi:demo0-c +{figure}{\includegraphics[height=0.4\textheight]{rose}}%% no 1 [Short caption A]% {A Caption A of a ``fullpage'' object, which follows on the left or - right column. This can be an even or odd page. And some more text whch has no + right column. This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {multi:demo2}% +{table}{\begin{tabular}{lr}\hline % no 2 @@ -109,7 +109,7 @@ The fullpage multifloat~\vref{multi:demo0} has a caption~\vpageref{multi:demo0-c +{figure}{\includegraphics[height=0.4\textheight]{rose}}%% no 1 [Short caption A]% {A Caption A of a ``fullpage'' object, which follows on the left or - right column. This can be an even or odd page. And some more text whch has no + right column. This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {multi:demo2}% +{table}{\begin{tabular}{lr}\hline % no 2 diff --git a/macros/latex/contrib/hvfloat/doc/examples/multi-default2s1c.pdf b/macros/latex/contrib/hvfloat/doc/examples/multi-default2s1c.pdf index e2ec474cb7..dbed0dc9ab 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/multi-default2s1c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/multi-default2s1c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/multi-default2s1c.tex b/macros/latex/contrib/hvfloat/doc/examples/multi-default2s1c.tex index 8725520a26..8ceae45750 100644 --- a/macros/latex/contrib/hvfloat/doc/examples/multi-default2s1c.tex +++ b/macros/latex/contrib/hvfloat/doc/examples/multi-default2s1c.tex @@ -1,5 +1,5 @@ \documentclass[twoside]{scrartcl} -%% $Id: multi-default2s1c.tex 72 2021-05-02 11:40:10Z herbert $ +%% $Id: multi-default2s1c.tex 318 2021-11-20 07:30:54Z herbert $ \input{preamble.ltx} @@ -27,7 +27,7 @@ The fullpage multifloat~\vref{img:demo0} has a caption~\vpageref{img:demo0-cap}. +{figure}{\includegraphics[width=\linewidth]{CTAN}}%% no 1 [Short caption A]% {A Caption A of a ``fullpage'' object, which follows on the left or - right column. This can be an even or odd page. And some more text whch has no + right column. This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {img:demo0}% +{table}{\begin{tabular}{lrcp{3cm}}\hline % no 2 @@ -55,7 +55,7 @@ The fullpage multifloat~\vref{img:demo0} has a caption~\vpageref{img:demo0-cap}. +{figure}{\includegraphics[width=\linewidth]{CTAN}}%% no 1 [Short caption A]% {A Caption A of a ``fullpage'' object, which follows on the left or - right column. This can be an even or odd page. And some more text whch has no + right column. This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {img:demo0}% +{table}{\begin{tabular}{lrcp{3cm}}\hline % no 2 @@ -87,7 +87,7 @@ The fullpage multifloat~\vref{img:demo0} has a caption~\vpageref{img:demo0-cap}. +{figure}{\includegraphics[width=\linewidth]{CTAN}}%% no 1 [Short caption A]% {A Caption A of a ``fullpage'' object, which follows on the left or - right column. This can be an even or odd page. And some more text whch has no + right column. This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {img:demo3}% +{table}{\begin{tabular}{lrcp{3cm}}\hline % no 2 @@ -115,7 +115,7 @@ The fullpage multifloat~\vref{img:demo0} has a caption~\vpageref{img:demo0-cap}. +{figure}{\includegraphics[width=\linewidth]{CTAN}}%% no 1 [Short caption A]% {A Caption A of a ``fullpage'' object, which follows on the left or - right column. This can be an even or odd page. And some more text whch has no + right column. This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {img:demo3}% +{table}{\begin{tabular}{lrcp{3cm}}\hline % no 2 diff --git a/macros/latex/contrib/hvfloat/doc/examples/multi-default2s2c.pdf b/macros/latex/contrib/hvfloat/doc/examples/multi-default2s2c.pdf index 23fdd5f04f..5023af475d 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/multi-default2s2c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/multi-default2s2c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/multi-default2s2c.tex b/macros/latex/contrib/hvfloat/doc/examples/multi-default2s2c.tex index 4ce8149cda..3848015a92 100644 --- a/macros/latex/contrib/hvfloat/doc/examples/multi-default2s2c.tex +++ b/macros/latex/contrib/hvfloat/doc/examples/multi-default2s2c.tex @@ -1,5 +1,5 @@ \documentclass[twoside,twocolumn]{scrartcl} -%% $Id: multi-default2s2c.tex 72 2021-05-02 11:40:10Z herbert $ +%% $Id: multi-default2s2c.tex 318 2021-11-20 07:30:54Z herbert $ \input{preamble.ltx} \setlength\columnseprule{0.4pt} @@ -29,7 +29,7 @@ The fullpage multifloat~\vref{multi:demo0} has a caption~\vpageref{multi:demo0-c +{figure}{\includegraphics[height=0.4\textheight]{rose}}%% no 1 [Short caption A]% {A Caption A of a ``fullpage'' object, which follows on the left or - right column. This can be an even or odd page. And some more text whch has no + right column. This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {multi:demo0}% +{table}{\begin{tabular}{lr}\hline % no 2 @@ -54,7 +54,7 @@ The fullpage multifloat~\vref{multi:demo0} has a caption~\vpageref{multi:demo0-c +{figure}{\includegraphics[height=0.4\textheight]{rose}}%% no 1 [Short caption A]% {A Caption A of a ``fullpage'' object, which follows on the left or - right column. This can be an even or odd page. And some more text whch has no + right column. This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {multi:demo0}% +{table}{\begin{tabular}{lr}\hline % no 2 @@ -84,7 +84,7 @@ The fullpage multifloat~\vref{multi:demo0} has a caption~\vpageref{multi:demo0-c +{figure}{\includegraphics[height=0.4\textheight]{rose}}%% no 1 [Short caption A]% {A Caption A of a ``fullpage'' object, which follows on the left or - right column. This can be an even or odd page. And some more text whch has no + right column. This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {multi:demo2}% +{table}{\begin{tabular}{lr}\hline % no 2 @@ -109,7 +109,7 @@ The fullpage multifloat~\vref{multi:demo0} has a caption~\vpageref{multi:demo0-c +{figure}{\includegraphics[height=0.4\textheight]{rose}}%% no 1 [Short caption A]% {A Caption A of a ``fullpage'' object, which follows on the left or - right column. This can be an even or odd page. And some more text whch has no + right column. This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {multi:demo2}% +{table}{\begin{tabular}{lr}\hline % no 2 diff --git a/macros/latex/contrib/hvfloat/doc/examples/multi-inner2s2c.pdf b/macros/latex/contrib/hvfloat/doc/examples/multi-inner2s2c.pdf index 3f79249b52..98fd85f954 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/multi-inner2s2c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/multi-inner2s2c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/multi-inner2s2c.tex b/macros/latex/contrib/hvfloat/doc/examples/multi-inner2s2c.tex index 668da0a147..ee91984d4a 100644 --- a/macros/latex/contrib/hvfloat/doc/examples/multi-inner2s2c.tex +++ b/macros/latex/contrib/hvfloat/doc/examples/multi-inner2s2c.tex @@ -1,6 +1,6 @@ \errorcontextlines=200 \documentclass[twoside]{scrartcl} -%% $Id: multi-inner2s2c.tex 103 2021-05-31 12:37:11Z herbert $ +%% $Id: multi-inner2s2c.tex 318 2021-11-20 07:30:54Z herbert $ \input{preamble.ltx} \setlength\columnseprule{0.4pt} @@ -31,7 +31,7 @@ The fullpage multifloat~\vref{multi:demo0} has a caption~\vpageref{multi:demo0-c +{figure}{\includegraphics[height=0.4\textheight]{rose}}%% no 1 [Short caption A]% {A Caption A of a ``fullpage'' object, which follows on the left or - right column. This can be an even or odd page. And some more text whch has no + right column. This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {multi:demo0}% +{table}{\begin{tabular}{lr}\hline % no 2 @@ -58,7 +58,7 @@ The fullpage multifloat~\vref{multi:demo0} has a caption~\vpageref{multi:demo0-c +{figure}{\includegraphics[height=0.4\textheight]{rose}}%% no 1 [Short caption A]% {A Caption A of a ``fullpage'' object, which follows on the left or - right column. This can be an even or odd page. And some more text whch has no + right column. This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {multi:demo0}% +{table}{\begin{tabular}{lr}\hline % no 2 @@ -90,7 +90,7 @@ The fullpage multifloat~\vref{multi:demo0} has a caption~\vpageref{multi:demo0-c +{figure}{\includegraphics[height=0.4\textheight]{rose}}%% no 1 [Short caption A]% {A Caption A of a ``fullpage'' object, which follows on the left or - right column. This can be an even or odd page. And some more text whch has no + right column. This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {multi:demo2}% +{table}{\begin{tabular}{lr}\hline % no 2 @@ -117,7 +117,7 @@ The fullpage multifloat~\vref{multi:demo0} has a caption~\vpageref{multi:demo0-c +{figure}{\includegraphics[height=0.4\textheight]{rose}}%% no 1 [Short caption A]% {A Caption A of a ``fullpage'' object, which follows on the left or - right column. This can be an even or odd page. And some more text whch has no + right column. This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {multi:demo2}% +{table}{\begin{tabular}{lr}\hline % no 2 diff --git a/macros/latex/contrib/hvfloat/doc/examples/multi-outer2s2c.pdf b/macros/latex/contrib/hvfloat/doc/examples/multi-outer2s2c.pdf index 7ebd9bd69a..6421ab72fe 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/multi-outer2s2c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/multi-outer2s2c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/multi-outer2s2c.tex b/macros/latex/contrib/hvfloat/doc/examples/multi-outer2s2c.tex index fef798e1e9..306762846e 100644 --- a/macros/latex/contrib/hvfloat/doc/examples/multi-outer2s2c.tex +++ b/macros/latex/contrib/hvfloat/doc/examples/multi-outer2s2c.tex @@ -1,6 +1,6 @@ \errorcontextlines=100 \documentclass[twoside]{scrartcl} -%% $Id: multi-outer2s2c.tex 103 2021-05-31 12:37:11Z herbert $ +%% $Id: multi-outer2s2c.tex 318 2021-11-20 07:30:54Z herbert $ \input{preamble.ltx} \setlength\columnseprule{0.4pt} @@ -32,7 +32,7 @@ The fullpage multifloat~\vref{multi:demo0} has a caption~\vpageref{multi:demo0-c +{figure}{\includegraphics[height=0.4\textheight]{rose}}%% no 1 [Short caption A]% {A Caption A of a ``fullpage'' object, which follows on the left or - right column. This can be an even or odd page. And some more text whch has no + right column. This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {multi:demo0}% +{table}{\begin{tabular}{lr}\hline % no 2 @@ -57,7 +57,7 @@ The fullpage multifloat~\vref{multi:demo0} has a caption~\vpageref{multi:demo0-c +{figure}{\includegraphics[height=0.4\textheight]{rose}}%% no 1 [Short caption A]% {A Caption A of a ``fullpage'' object, which follows on the left or - right column. This can be an even or odd page. And some more text whch has no + right column. This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {multi:demo0}% +{table}{\begin{tabular}{lr}\hline % no 2 @@ -88,7 +88,7 @@ The fullpage multifloat~\vref{multi:demo0} has a caption~\vpageref{multi:demo0-c +{figure}{\includegraphics[height=0.4\textheight]{rose}}%% no 1 [Short caption A]% {A Caption A of a ``fullpage'' object, which follows on the left or - right column. This can be an even or odd page. And some more text whch has no + right column. This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {multi:demo2}% +{table}{\begin{tabular}{lr}\hline % no 2 @@ -115,7 +115,7 @@ The fullpage multifloat~\vref{multi:demo0} has a caption~\vpageref{multi:demo0-c +{figure}{\includegraphics[height=0.4\textheight]{rose}}%% no 1 [Short caption A]% {A Caption A of a ``fullpage'' object, which follows on the left or - right column. This can be an even or odd page. And some more text whch has no + right column. This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {multi:demo2}% +{table}{\begin{tabular}{lr}\hline % no 2 diff --git a/macros/latex/contrib/hvfloat/doc/examples/multi-right1s1c.pdf b/macros/latex/contrib/hvfloat/doc/examples/multi-right1s1c.pdf index 23f3c0b60c..f318e337ea 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/multi-right1s1c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/multi-right1s1c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/multi-right1s1c.tex b/macros/latex/contrib/hvfloat/doc/examples/multi-right1s1c.tex index 1b78f0fba6..fae07fc364 100644 --- a/macros/latex/contrib/hvfloat/doc/examples/multi-right1s1c.tex +++ b/macros/latex/contrib/hvfloat/doc/examples/multi-right1s1c.tex @@ -1,5 +1,5 @@ \documentclass{scrartcl} -%% $Id: multi-right1s1c.tex 103 2021-05-31 12:37:11Z herbert $ +%% $Id: multi-right1s1c.tex 318 2021-11-20 07:30:54Z herbert $ \input{preamble.ltx} @@ -27,7 +27,7 @@ The fullpage multifloat~\vref{img:demo0} has a caption~\vpageref{img:demo0-cap}. +{figure}{\includegraphics[width=\linewidth]{CTAN}}%% no 1 [Short caption A]% {A Caption A of a ``fullpage'' object, which follows on the left or - right column. This can be an even or odd page. And some more text whch has no + right column. This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {img:demo0}% +{table}{\begin{tabular}{lrcp{3cm}}\hline % no 2 @@ -55,7 +55,7 @@ The fullpage multifloat~\vref{img:demo0} has a caption~\vpageref{img:demo0-cap}. +{figure}{\includegraphics[width=\linewidth]{CTAN}}%% no 1 [Short caption A]% {A Caption A of a ``fullpage'' object, which follows on the left or - right column. This can be an even or odd page. And some more text whch has no + right column. This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {img:demo0}% +{table}{\begin{tabular}{lrcp{3cm}}\hline % no 2 @@ -87,7 +87,7 @@ The fullpage multifloat~\vref{img:demo0} has a caption~\vpageref{img:demo0-cap}. +{figure}{\includegraphics[width=\linewidth]{CTAN}}%% no 1 [Short caption A]% {A Caption A of a ``fullpage'' object, which follows on the left or - right column. This can be an even or odd page. And some more text whch has no + right column. This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {img:demo3}% +{table}{\begin{tabular}{lrcp{3cm}}\hline % no 2 @@ -115,7 +115,7 @@ The fullpage multifloat~\vref{img:demo0} has a caption~\vpageref{img:demo0-cap}. +{figure}{\includegraphics[width=\linewidth]{CTAN}}%% no 1 [Short caption A]% {A Caption A of a ``fullpage'' object, which follows on the left or - right column. This can be an even or odd page. And some more text whch has no + right column. This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {img:demo3}% +{table}{\begin{tabular}{lrcp{3cm}}\hline % no 2 diff --git a/macros/latex/contrib/hvfloat/doc/examples/odd1s1c.pdf b/macros/latex/contrib/hvfloat/doc/examples/odd1s1c.pdf index 9a8f796d02..1983a9375a 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/odd1s1c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/odd1s1c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/odd1s1c.tex b/macros/latex/contrib/hvfloat/doc/examples/odd1s1c.tex index 2d93d7b2b5..bc70f79b05 100644 --- a/macros/latex/contrib/hvfloat/doc/examples/odd1s1c.tex +++ b/macros/latex/contrib/hvfloat/doc/examples/odd1s1c.tex @@ -1,5 +1,5 @@ \documentclass{scrartcl} -%% $Id: odd1s1c.tex 119 2021-06-20 13:28:09Z herbert $ +%% $Id: odd1s1c.tex 318 2021-11-20 07:30:54Z herbert $ \input{preamble.ltx} @@ -23,7 +23,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage0} \end{lstlisting} @@ -36,7 +36,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage0} @@ -55,7 +55,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage1} \end{lstlisting} @@ -68,7 +68,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage1} diff --git a/macros/latex/contrib/hvfloat/doc/examples/odd1s2c.pdf b/macros/latex/contrib/hvfloat/doc/examples/odd1s2c.pdf index eae0be6b8d..145c1ecdce 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/odd1s2c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/odd1s2c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/odd1s2c.tex b/macros/latex/contrib/hvfloat/doc/examples/odd1s2c.tex index 8454f4198b..636a8366d5 100644 --- a/macros/latex/contrib/hvfloat/doc/examples/odd1s2c.tex +++ b/macros/latex/contrib/hvfloat/doc/examples/odd1s2c.tex @@ -1,5 +1,5 @@ \documentclass[twocolumn]{scrartcl} -%% $Id: odd1s2c.tex 72 2021-05-02 11:40:10Z herbert $ +%% $Id: odd1s2c.tex 318 2021-11-20 07:30:54Z herbert $ \input{preamble.ltx} \setlength\columnseprule{0.4pt} @@ -28,7 +28,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage0} \end{lstlisting} @@ -41,7 +41,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage0} @@ -54,7 +54,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage1} \end{lstlisting} @@ -67,7 +67,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage1} diff --git a/macros/latex/contrib/hvfloat/doc/examples/odd2s1c.pdf b/macros/latex/contrib/hvfloat/doc/examples/odd2s1c.pdf index ef5b9fd7ab..9226490ffe 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/odd2s1c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/odd2s1c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/odd2s1c.tex b/macros/latex/contrib/hvfloat/doc/examples/odd2s1c.tex index ee0e69c74e..d14f499615 100644 --- a/macros/latex/contrib/hvfloat/doc/examples/odd2s1c.tex +++ b/macros/latex/contrib/hvfloat/doc/examples/odd2s1c.tex @@ -1,5 +1,5 @@ \documentclass[twoside]{scrartcl} -%% $Id: odd2s1c.tex 107 2021-06-09 06:43:25Z herbert $ +%% $Id: odd2s1c.tex 318 2021-11-20 07:30:54Z herbert $ \input{preamble.ltx} @@ -27,7 +27,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage0} \end{lstlisting} @@ -39,7 +39,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage0} @@ -54,7 +54,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage1} \end{lstlisting} @@ -67,7 +67,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage1} diff --git a/macros/latex/contrib/hvfloat/doc/examples/odd2s2c.pdf b/macros/latex/contrib/hvfloat/doc/examples/odd2s2c.pdf index 6aa3ac83cf..73d3a810f3 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/odd2s2c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/odd2s2c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/odd2s2c.tex b/macros/latex/contrib/hvfloat/doc/examples/odd2s2c.tex index f044fa127c..98dfd6c84b 100644 --- a/macros/latex/contrib/hvfloat/doc/examples/odd2s2c.tex +++ b/macros/latex/contrib/hvfloat/doc/examples/odd2s2c.tex @@ -1,5 +1,5 @@ \documentclass[twoside,twocolumn]{scrartcl} -%% $Id: odd2s2c.tex 72 2021-05-02 11:40:10Z herbert $ +%% $Id: odd2s2c.tex 318 2021-11-20 07:30:54Z herbert $ \input{preamble.ltx} \setlength\columnseprule{0.4pt} @@ -28,7 +28,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage0} \end{lstlisting} @@ -41,7 +41,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage0} @@ -54,7 +54,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage1} \end{lstlisting} @@ -67,7 +67,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage1} diff --git a/macros/latex/contrib/hvfloat/doc/examples/outer1s2c.pdf b/macros/latex/contrib/hvfloat/doc/examples/outer1s2c.pdf index c6676e1291..06c3a32f05 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/outer1s2c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/outer1s2c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/outer1s2c.tex b/macros/latex/contrib/hvfloat/doc/examples/outer1s2c.tex index f6444f614c..e0302a6b77 100644 --- a/macros/latex/contrib/hvfloat/doc/examples/outer1s2c.tex +++ b/macros/latex/contrib/hvfloat/doc/examples/outer1s2c.tex @@ -1,5 +1,5 @@ \documentclass[twocolumn]{scrartcl} -%% $Id: outer1s2c.tex 72 2021-05-02 11:40:10Z herbert $ +%% $Id: outer1s2c.tex 318 2021-11-20 07:30:54Z herbert $ \input{preamble.ltx} \setlength\columnseprule{0.4pt} @@ -26,7 +26,7 @@ The fullpage image~\vref{fig:full0} has a caption~\vpageref{fig:full0-cap}. {\includegraphics[fullpage]{frose}}% [A float which needs the complete page width and height.]% {A Caption on the outer side of a twosided document. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:full0} \end{lstlisting} @@ -37,7 +37,7 @@ The fullpage image~\vref{fig:full0} has a caption~\vpageref{fig:full0-cap}. {\includegraphics[fullpage]{frose}}% [A float which needs the complete page width and height.]% {A Caption on the outer side of a twosided document. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:full0} @@ -51,7 +51,7 @@ The fullpage image~\vref{fig:full0} has a caption~\vpageref{fig:full0-cap}. {\includegraphics[fullpage]{frose}}% [A float which needs the complete page width and height.]% {A Caption on the outer side of a twosided document. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage1} \end{lstlisting} @@ -63,7 +63,7 @@ The fullpage image~\vref{fig:full0} has a caption~\vpageref{fig:full0-cap}. {\includegraphics[fullpage]{frose}}% [A float which needs the complete page width and height.]% {A Caption on the outer side of a twosided document. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage1} diff --git a/macros/latex/contrib/hvfloat/doc/examples/outer2s1c.pdf b/macros/latex/contrib/hvfloat/doc/examples/outer2s1c.pdf index a7d55f4c80..25b6f1174c 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/outer2s1c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/outer2s1c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/outer2s1c.tex b/macros/latex/contrib/hvfloat/doc/examples/outer2s1c.tex index d30d66e8fa..68cd510976 100644 --- a/macros/latex/contrib/hvfloat/doc/examples/outer2s1c.tex +++ b/macros/latex/contrib/hvfloat/doc/examples/outer2s1c.tex @@ -1,5 +1,5 @@ \documentclass[twoside]{scrartcl} -%% $Id: outer2s1c.tex 72 2021-05-02 11:40:10Z herbert $ +%% $Id: outer2s1c.tex 318 2021-11-20 07:30:54Z herbert $ \input{preamble.ltx} @@ -26,7 +26,7 @@ The fullpage image~\vref{fig:full0} has a caption~\vpageref{fig:full0-cap}. {\includegraphics[fullpage]{frose}}% [A float which needs the complete page width and height.]% {A Caption on the outer side of a twosided document. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:full0} \end{lstlisting} @@ -37,7 +37,7 @@ The fullpage image~\vref{fig:full0} has a caption~\vpageref{fig:full0-cap}. {\includegraphics[fullpage]{frose}}% [A float which needs the complete page width and height.]% {A Caption on the outer side of a twosided document. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:full0} @@ -51,7 +51,7 @@ The fullpage image~\vref{fig:full0} has a caption~\vpageref{fig:full0-cap}. {\includegraphics[fullpage]{frose}}% [A float which needs the complete page width and height.]% {A Caption on the outer side of a twosided document. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage1} \end{lstlisting} @@ -63,7 +63,7 @@ The fullpage image~\vref{fig:full0} has a caption~\vpageref{fig:full0-cap}. {\includegraphics[fullpage]{frose}}% [A float which needs the complete page width and height.]% {A Caption on the outer side of a twosided document. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage1} diff --git a/macros/latex/contrib/hvfloat/doc/examples/outer2s2c.pdf b/macros/latex/contrib/hvfloat/doc/examples/outer2s2c.pdf index 204d0dad65..bc0c66a59f 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/outer2s2c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/outer2s2c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/outer2s2c.tex b/macros/latex/contrib/hvfloat/doc/examples/outer2s2c.tex index 84b3dc0cf5..4ac33b7478 100644 --- a/macros/latex/contrib/hvfloat/doc/examples/outer2s2c.tex +++ b/macros/latex/contrib/hvfloat/doc/examples/outer2s2c.tex @@ -1,5 +1,5 @@ \documentclass[twoside,twocolumn]{scrartcl} -%% $Id: outer2s2c.tex 72 2021-05-02 11:40:10Z herbert $ +%% $Id: outer2s2c.tex 318 2021-11-20 07:30:54Z herbert $ \input{preamble.ltx} \setlength\columnseprule{0.4pt} @@ -26,7 +26,7 @@ The fullpage image~\vref{fig:full0} has a caption~\vpageref{fig:full0-cap}. {\includegraphics[fullpage]{frose}}% [A float which needs the complete page width and height.]% {A Caption on the outer side of a twosided document. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:full0} \end{lstlisting} @@ -37,7 +37,7 @@ The fullpage image~\vref{fig:full0} has a caption~\vpageref{fig:full0-cap}. {\includegraphics[fullpage]{frose}}% [A float which needs the complete page width and height.]% {A Caption on the outer side of a twosided document. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:full0} @@ -51,7 +51,7 @@ The fullpage image~\vref{fig:full0} has a caption~\vpageref{fig:full0-cap}. {\includegraphics[fullpage]{frose}}% [A float which needs the complete page width and height.]% {A Caption on the outer side of a twosided document. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage1} \end{lstlisting} @@ -63,7 +63,7 @@ The fullpage image~\vref{fig:full0} has a caption~\vpageref{fig:full0-cap}. {\includegraphics[fullpage]{frose}}% [A float which needs the complete page width and height.]% {A Caption on the outer side of a twosided document. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage1} diff --git a/macros/latex/contrib/hvfloat/doc/examples/paper-after1s1c.pdf b/macros/latex/contrib/hvfloat/doc/examples/paper-after1s1c.pdf index a65718b90a..90d4253358 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/paper-after1s1c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/paper-after1s1c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/paper-after1s1c.tex b/macros/latex/contrib/hvfloat/doc/examples/paper-after1s1c.tex index 90e4ac9196..c847c531c5 100644 --- a/macros/latex/contrib/hvfloat/doc/examples/paper-after1s1c.tex +++ b/macros/latex/contrib/hvfloat/doc/examples/paper-after1s1c.tex @@ -1,5 +1,5 @@ \documentclass{scrartcl} -%% $Id: paper-after1s1c.tex 72 2021-05-02 11:40:10Z herbert $ +%% $Id: paper-after1s1c.tex 318 2021-11-20 07:30:54Z herbert $ \usepackage{pdfpages} \input{preamble.ltx} @@ -29,7 +29,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage0} \end{lstlisting} @@ -42,7 +42,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage0} @@ -57,7 +57,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage1} \end{lstlisting} @@ -70,7 +70,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage1} diff --git a/macros/latex/contrib/hvfloat/doc/examples/paper-after2s2c.pdf b/macros/latex/contrib/hvfloat/doc/examples/paper-after2s2c.pdf new file mode 100644 index 0000000000..18b1c6e2b2 Binary files /dev/null and b/macros/latex/contrib/hvfloat/doc/examples/paper-after2s2c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/paper-after2s2c.tex b/macros/latex/contrib/hvfloat/doc/examples/paper-after2s2c.tex new file mode 100644 index 0000000000..ab7faa4b9d --- /dev/null +++ b/macros/latex/contrib/hvfloat/doc/examples/paper-after2s2c.tex @@ -0,0 +1,81 @@ +\documentclass[twocolumn]{scrartcl} +%% $Id: paper-default2s2c.tex 318 2021-11-20 07:30:54Z herbert $ + +\input{preamble.ltx} +\setlength\columnseprule{0.4pt} + +\begin{document} +\title{Example for FULLPAGE floats} +\author{Herbert Voß} +\maketitle + +\tableofcontents + +\blinddocument + +\section{File \texttt{\jobname}} + +\begin{lstlisting} +The FULLPAGE image~\vref{fig:FULLPAGE0} has a caption~\vpageref{fig:FULLPAGE0-cap}. +\end{lstlisting} + +The FULLPAGE image~\vref{fig:FULLPAGE0} has a caption~\vpageref{fig:FULLPAGE0-cap}. + +\begin{lstlisting} +\hvFloat*[FULLPAGE,capPos=after]% + {figure}% + {\includegraphics[FULLPAGE]{frose}}% + [A FULLPAGE float with the default caption setting]% + {A default caption of a ``FULLPAGE'' object with the default setting, which + is a ``left'' caption which means that it always appears before the object. + This can be an even or odd page. And some more text which has no + real meaning because it fills only the space for a long caption.}% + {fig:FULLPAGE0} +\end{lstlisting} + + +\Float[default] +\hvFloat*[FULLPAGE,capPos=after]% + {figure}% + {\includegraphics[FULLPAGE]{frose}}% + [A FULLPAGE float with the default caption setting]% + {A default caption of a ``FULLPAGE'' object with the default setting, which + is a ``left'' caption which means that it always appears before the object. + This can be an even or odd page. And some more text which has no + real meaning because it fills only the space for a long caption.}% + {fig:FULLPAGE0} + +\blinddocument + +\begin{lstlisting} +\hvFloat*[FULLPAGE,capPos=after]% + {figure}% + {\includegraphics[FULLPAGE]{frose}}% + [A FULLPAGE float with the default caption setting]% + {A default caption of a ``FULLPAGE'' object with the default setting, which + is a ``left'' caption which means that it always appears before the object. + This can be an even or odd page. And some more text which has no + real meaning because it fills only the space for a long caption.}% + {fig:FULLPAGE1} +\end{lstlisting} + + +\Float[default] +\hvFloat*[FULLPAGE,capPos=after]% + {figure}% + {\includegraphics[FULLPAGE]{frose}}% + [A FULLPAGE float with the default caption setting]% + {A default caption of a ``FULLPAGE'' object with the default setting, which + is a ``left'' caption which means that it always appears before the object. + This can be an even or odd page. And some more text which has no + real meaning because it fills only the space for a long caption.}% + {fig:FULLPAGE1} + +\blinddocument + +\Blindtext + +\blindtext + + +\end{document} \ No newline at end of file diff --git a/macros/latex/contrib/hvfloat/doc/examples/paper-default1s1c.pdf b/macros/latex/contrib/hvfloat/doc/examples/paper-default1s1c.pdf index fd27f7ca54..d73336bd0b 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/paper-default1s1c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/paper-default1s1c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/paper-default1s1c.tex b/macros/latex/contrib/hvfloat/doc/examples/paper-default1s1c.tex index bb789ab593..a6304754cb 100644 --- a/macros/latex/contrib/hvfloat/doc/examples/paper-default1s1c.tex +++ b/macros/latex/contrib/hvfloat/doc/examples/paper-default1s1c.tex @@ -1,9 +1,10 @@ \documentclass{scrartcl} -%% $Id: paper-default1s1c.tex 72 2021-05-02 11:40:10Z herbert $ +%% $Id: paper-default1s1c.tex 584 2022-07-20 18:29:58Z herbert $ \usepackage{pdfpages} \input{preamble.ltx} + \begin{document} \title{Example for fullpage floats} \author{Herbert Voß} @@ -12,7 +13,7 @@ \tableofcontents \Blindtext -\blindtext +\Blindtext \section{File \texttt{\jobname}} @@ -29,7 +30,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage0} \end{lstlisting} @@ -42,7 +43,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage0} @@ -57,7 +58,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage1} \end{lstlisting} @@ -70,7 +71,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage1} diff --git a/macros/latex/contrib/hvfloat/doc/examples/paper-default1s2c.pdf b/macros/latex/contrib/hvfloat/doc/examples/paper-default1s2c.pdf index 6e06341ad5..40740a8ccf 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/paper-default1s2c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/paper-default1s2c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/paper-default1s2c.tex b/macros/latex/contrib/hvfloat/doc/examples/paper-default1s2c.tex index 73701e6c1e..61cc027864 100644 --- a/macros/latex/contrib/hvfloat/doc/examples/paper-default1s2c.tex +++ b/macros/latex/contrib/hvfloat/doc/examples/paper-default1s2c.tex @@ -1,5 +1,5 @@ \documentclass[twocolumn]{scrartcl} -%% $Id: paper-default1s2c.tex 72 2021-05-02 11:40:10Z herbert $ +%% $Id: paper-default1s2c.tex 318 2021-11-20 07:30:54Z herbert $ \input{preamble.ltx} \setlength\columnseprule{0.4pt} @@ -28,7 +28,7 @@ The FULLPAGE image~\vref{fig:FULLPAGE0} has a caption~\vpageref{fig:FULLPAGE0-ca [A FULLPAGE float with the default caption setting]% {A default caption of a ``FULLPAGE'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:FULLPAGE0} \end{lstlisting} @@ -41,7 +41,7 @@ The FULLPAGE image~\vref{fig:FULLPAGE0} has a caption~\vpageref{fig:FULLPAGE0-ca [A FULLPAGE float with the default caption setting]% {A default caption of a ``FULLPAGE'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:FULLPAGE0} @@ -54,7 +54,7 @@ The FULLPAGE image~\vref{fig:FULLPAGE0} has a caption~\vpageref{fig:FULLPAGE0-ca [A FULLPAGE float with the default caption setting]% {A default caption of a ``FULLPAGE'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:FULLPAGE1} \end{lstlisting} @@ -67,7 +67,7 @@ The FULLPAGE image~\vref{fig:FULLPAGE0} has a caption~\vpageref{fig:FULLPAGE0-ca [A FULLPAGE float with the default caption setting]% {A default caption of a ``FULLPAGE'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:FULLPAGE1} diff --git a/macros/latex/contrib/hvfloat/doc/examples/paper-default2s1c.pdf b/macros/latex/contrib/hvfloat/doc/examples/paper-default2s1c.pdf index c9cd842897..cc73cf951b 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/paper-default2s1c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/paper-default2s1c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/paper-default2s1c.tex b/macros/latex/contrib/hvfloat/doc/examples/paper-default2s1c.tex index 4db0220481..20cea7741e 100644 --- a/macros/latex/contrib/hvfloat/doc/examples/paper-default2s1c.tex +++ b/macros/latex/contrib/hvfloat/doc/examples/paper-default2s1c.tex @@ -28,7 +28,7 @@ The FULLPAGE image~\vref{fig:FULLPAGE0} has a caption~\vpageref{fig:FULLPAGE0-ca [A FULLPAGE float with the default caption setting]% {A default caption of a ``FULLPAGE'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:FULLPAGE0} \end{lstlisting} @@ -41,7 +41,7 @@ The FULLPAGE image~\vref{fig:FULLPAGE0} has a caption~\vpageref{fig:FULLPAGE0-ca [A FULLPAGE float with the default caption setting]% {A default caption of a ``FULLPAGE'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:FULLPAGE0} @@ -54,7 +54,7 @@ The FULLPAGE image~\vref{fig:FULLPAGE0} has a caption~\vpageref{fig:FULLPAGE0-ca [A FULLPAGE float with the default caption setting]% {A default caption of a ``FULLPAGE'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:FULLPAGE1} \end{lstlisting} @@ -67,7 +67,7 @@ The FULLPAGE image~\vref{fig:FULLPAGE0} has a caption~\vpageref{fig:FULLPAGE0-ca [A FULLPAGE float with the default caption setting]% {A default caption of a ``FULLPAGE'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:FULLPAGE1} diff --git a/macros/latex/contrib/hvfloat/doc/examples/paper-default2s2c.pdf b/macros/latex/contrib/hvfloat/doc/examples/paper-default2s2c.pdf index 330a7425ca..10d3957581 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/paper-default2s2c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/paper-default2s2c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/paper-default2s2c.tex b/macros/latex/contrib/hvfloat/doc/examples/paper-default2s2c.tex index 64b430652b..a9b5b15bef 100644 --- a/macros/latex/contrib/hvfloat/doc/examples/paper-default2s2c.tex +++ b/macros/latex/contrib/hvfloat/doc/examples/paper-default2s2c.tex @@ -1,5 +1,5 @@ \documentclass[twocolumn]{scrartcl} -%% $Id: paper-default2s2c.tex 72 2021-05-02 11:40:10Z herbert $ +%% $Id: paper-default2s2c.tex 318 2021-11-20 07:30:54Z herbert $ \input{preamble.ltx} \setlength\columnseprule{0.4pt} @@ -28,7 +28,7 @@ The FULLPAGE image~\vref{fig:FULLPAGE0} has a caption~\vpageref{fig:FULLPAGE0-ca [A FULLPAGE float with the default caption setting]% {A default caption of a ``FULLPAGE'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:FULLPAGE0} \end{lstlisting} @@ -41,7 +41,7 @@ The FULLPAGE image~\vref{fig:FULLPAGE0} has a caption~\vpageref{fig:FULLPAGE0-ca [A FULLPAGE float with the default caption setting]% {A default caption of a ``FULLPAGE'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:FULLPAGE0} @@ -54,7 +54,7 @@ The FULLPAGE image~\vref{fig:FULLPAGE0} has a caption~\vpageref{fig:FULLPAGE0-ca [A FULLPAGE float with the default caption setting]% {A default caption of a ``FULLPAGE'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:FULLPAGE1} \end{lstlisting} @@ -67,7 +67,7 @@ The FULLPAGE image~\vref{fig:FULLPAGE0} has a caption~\vpageref{fig:FULLPAGE0-ca [A FULLPAGE float with the default caption setting]% {A default caption of a ``FULLPAGE'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:FULLPAGE1} diff --git a/macros/latex/contrib/hvfloat/doc/examples/paper-even2s1c.pdf b/macros/latex/contrib/hvfloat/doc/examples/paper-even2s1c.pdf new file mode 100644 index 0000000000..a7274de0f2 Binary files /dev/null and b/macros/latex/contrib/hvfloat/doc/examples/paper-even2s1c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/paper-even2s1c.tex b/macros/latex/contrib/hvfloat/doc/examples/paper-even2s1c.tex new file mode 100644 index 0000000000..9b8436d697 --- /dev/null +++ b/macros/latex/contrib/hvfloat/doc/examples/paper-even2s1c.tex @@ -0,0 +1,81 @@ +\documentclass{scrartcl} +%% $Id: paper-default2s2c.tex 72 2021-05-02 11:40:10Z herbert $ + +\input{preamble.ltx} +\setlength\columnseprule{0.4pt} + +\begin{document} +\title{Example for FULLPAGE floats} +\author{Herbert Voß} +\maketitle + +\tableofcontents + +\blinddocument + +\section{File \texttt{\jobname}} + +\begin{lstlisting} +The FULLPAGE image~\vref{fig:FULLPAGE0} has a caption~\vpageref{fig:FULLPAGE0-cap}. +\end{lstlisting} + +The FULLPAGE image~\vref{fig:FULLPAGE0} has a caption~\vpageref{fig:FULLPAGE0-cap}. + +\begin{lstlisting} +\hvFloat[FULLPAGE,capPos=evenPage]% + {figure}% + {\includegraphics[FULLPAGE]{frose}}% + [A FULLPAGE float with the default caption setting]% + {A default caption of a ``FULLPAGE'' object with the default setting, which + is a ``left'' caption which means that it always appears before the object. + This can be an even or odd page. And some more text which has no + real meaning because it fills only the space for a long caption.}% + {fig:FULLPAGE0} +\end{lstlisting} + + +\Float[default] +\hvFloat[FULLPAGE,capPos=evenPage]% + {figure}% + {\includegraphics[FULLPAGE]{frose}}% + [A FULLPAGE float with the default caption setting]% + {A caption of a \texttt{FULLPAGE} object with \texttt{capPos=evenPage}, + so it appears on an even-numbered page. + And some more text which has no + meaning because it merely fills the space for a long caption.}% + {fig:FULLPAGE0} + +\blinddocument + +\begin{lstlisting} +\hvFloat[FULLPAGE,capPos=evenPage]% + {figure}% + {\includegraphics[FULLPAGE]{frose}}% + [A FULLPAGE float with the default caption setting]% + {A default caption of a ``FULLPAGE'' object with the default setting, which + is a ``left'' caption which means that it always appears before the object. + This can be an even or odd page. And some more text which has no + real meaning because it fills only the space for a long caption.}% + {fig:FULLPAGE1} +\end{lstlisting} + + +\Float[default] +\hvFloat[FULLPAGE,capPos=evenPage]% + {figure}% + {\includegraphics[FULLPAGE]{frose}}% + [A FULLPAGE float with the default caption setting]% + {A default caption of a ``FULLPAGE'' object with the default setting, which + is a ``left'' caption which means that it always appears before the object. + This can be an even or odd page. And some more text which has no + real meaning because it fills only the space for a long caption.}% + {fig:FULLPAGE1} + +\blinddocument + +\Blindtext + +\blindtext + + +\end{document} diff --git a/macros/latex/contrib/hvfloat/doc/examples/paper-inner2s2c.pdf b/macros/latex/contrib/hvfloat/doc/examples/paper-inner2s2c.pdf index b0792355fb..89d0b46c04 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/paper-inner2s2c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/paper-inner2s2c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/paper-inner2s2c.tex b/macros/latex/contrib/hvfloat/doc/examples/paper-inner2s2c.tex index 1cb218ac79..b7a6880d36 100644 --- a/macros/latex/contrib/hvfloat/doc/examples/paper-inner2s2c.tex +++ b/macros/latex/contrib/hvfloat/doc/examples/paper-inner2s2c.tex @@ -1,5 +1,5 @@ \documentclass[twoside,twocolumn]{scrartcl} -%% $Id: paper-inner2s2c.tex 72 2021-05-02 11:40:10Z herbert $ +%% $Id: paper-inner2s2c.tex 318 2021-11-20 07:30:54Z herbert $ \input{preamble.ltx} \setlength\columnseprule{0.4pt} @@ -28,7 +28,7 @@ The FULLPAGE image~\vref{fig:FULLPAGE0} has a caption~\vpageref{fig:FULLPAGE0-ca [A FULLPAGE float with the default caption setting]% {A default caption of a ``FULLPAGE'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:FULLPAGE0} \end{lstlisting} @@ -41,7 +41,7 @@ The FULLPAGE image~\vref{fig:FULLPAGE0} has a caption~\vpageref{fig:FULLPAGE0-ca [A FULLPAGE float with the default caption setting]% {A default caption of a ``FULLPAGE'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:FULLPAGE0} @@ -54,7 +54,7 @@ The FULLPAGE image~\vref{fig:FULLPAGE0} has a caption~\vpageref{fig:FULLPAGE0-ca [A FULLPAGE float with the default caption setting]% {A default caption of a ``FULLPAGE'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:FULLPAGE1} \end{lstlisting} @@ -67,7 +67,7 @@ The FULLPAGE image~\vref{fig:FULLPAGE0} has a caption~\vpageref{fig:FULLPAGE0-ca [A FULLPAGE float with the default caption setting]% {A default caption of a ``FULLPAGE'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:FULLPAGE1} diff --git a/macros/latex/contrib/hvfloat/doc/examples/paper-odd2s1c.pdf b/macros/latex/contrib/hvfloat/doc/examples/paper-odd2s1c.pdf new file mode 100644 index 0000000000..7325a59fea Binary files /dev/null and b/macros/latex/contrib/hvfloat/doc/examples/paper-odd2s1c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/paper-odd2s1c.tex b/macros/latex/contrib/hvfloat/doc/examples/paper-odd2s1c.tex new file mode 100644 index 0000000000..be6c896aa8 --- /dev/null +++ b/macros/latex/contrib/hvfloat/doc/examples/paper-odd2s1c.tex @@ -0,0 +1,81 @@ +\documentclass{scrartcl} +%% $Id: paper-default2s2c.tex 72 2021-05-02 11:40:10Z herbert $ + +\input{preamble.ltx} +\setlength\columnseprule{0.4pt} + +\begin{document} +\title{Example for FULLPAGE floats} +\author{Herbert Voß} +\maketitle + +\tableofcontents + +\blinddocument + +\section{File \texttt{\jobname}} + +\begin{lstlisting} +The FULLPAGE image~\vref{fig:FULLPAGE0} has a caption~\vpageref{fig:FULLPAGE0-cap}. +\end{lstlisting} + +The FULLPAGE image~\vref{fig:FULLPAGE0} has a caption~\vpageref{fig:FULLPAGE0-cap}. + +\begin{lstlisting} +\hvFloat[FULLPAGE,capPos=oddPage]% + {figure}% + {\includegraphics[FULLPAGE]{frose}}% + [A FULLPAGE float with the default caption setting]% + {A default caption of a ``FULLPAGE'' object with the default setting, which + is a ``left'' caption which means that it always appears before the object. + This can be an even or odd page. And some more text which has no + real meaning because it fills only the space for a long caption.}% + {fig:FULLPAGE0} +\end{lstlisting} + + +\Float[default] +\hvFloat[FULLPAGE,capPos=oddPage]% + {figure}% + {\includegraphics[FULLPAGE]{frose}}% + [A FULLPAGE float with the default caption setting]% + {A default caption of a ``FULLPAGE'' object with the default setting, which + is a ``left'' caption which means that it always appears before the object. + This can be an even or odd page. And some more text which has no + real meaning because it fills only the space for a long caption.}% + {fig:FULLPAGE0} + +\blinddocument + +\begin{lstlisting} +\hvFloat[FULLPAGE,capPos=oddPage]% + {figure}% + {\includegraphics[FULLPAGE]{frose}}% + [A FULLPAGE float with the default caption setting]% + {A default caption of a ``FULLPAGE'' object with the default setting, which + is a ``left'' caption which means that it always appears before the object. + This can be an even or odd page. And some more text which has no + real meaning because it fills only the space for a long caption.}% + {fig:FULLPAGE1} +\end{lstlisting} + + +\Float[default] +\hvFloat[FULLPAGE,capPos=oddPage]% + {figure}% + {\includegraphics[FULLPAGE]{frose}}% + [A FULLPAGE float with the default caption setting]% + {A default caption of a ``FULLPAGE'' object with the default setting, which + is a ``left'' caption which means that it always appears before the object. + This can be an even or odd page. And some more text which has no + real meaning because it fills only the space for a long caption.}% + {fig:FULLPAGE1} + +\blinddocument + +\Blindtext + +\blindtext + + +\end{document} \ No newline at end of file diff --git a/macros/latex/contrib/hvfloat/doc/examples/paper-right1s1c.pdf b/macros/latex/contrib/hvfloat/doc/examples/paper-right1s1c.pdf index 5ed8ec5a71..acc1a64f49 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/paper-right1s1c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/paper-right1s1c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/paper-right1s1c.tex b/macros/latex/contrib/hvfloat/doc/examples/paper-right1s1c.tex index f285704496..41595db224 100644 --- a/macros/latex/contrib/hvfloat/doc/examples/paper-right1s1c.tex +++ b/macros/latex/contrib/hvfloat/doc/examples/paper-right1s1c.tex @@ -1,5 +1,5 @@ \documentclass{scrartcl} -%% $Id: paper-right1s1c.tex 72 2021-05-02 11:40:10Z herbert $ +%% $Id: paper-right1s1c.tex 318 2021-11-20 07:30:54Z herbert $ \usepackage{pdfpages} \input{preamble.ltx} @@ -29,7 +29,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage0} \end{lstlisting} @@ -42,7 +42,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage0} @@ -57,7 +57,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage1} \end{lstlisting} @@ -70,7 +70,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage1} diff --git a/macros/latex/contrib/hvfloat/doc/examples/paper-twocolcaption-after2s2c.pdf b/macros/latex/contrib/hvfloat/doc/examples/paper-twocolcaption-after2s2c.pdf new file mode 100644 index 0000000000..b827c1a130 Binary files /dev/null and b/macros/latex/contrib/hvfloat/doc/examples/paper-twocolcaption-after2s2c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/paper-twocolcaption-after2s2c.tex b/macros/latex/contrib/hvfloat/doc/examples/paper-twocolcaption-after2s2c.tex new file mode 100644 index 0000000000..9da31571a3 --- /dev/null +++ b/macros/latex/contrib/hvfloat/doc/examples/paper-twocolcaption-after2s2c.tex @@ -0,0 +1,81 @@ +\documentclass[twocolumn]{scrartcl} +%% $Id: paper-default2s2c.tex 318 2021-11-20 07:30:54Z herbert $ + +\input{preamble.ltx} +\setlength\columnseprule{0.4pt} + +\begin{document} +\title{Example for FULLPAGE floats} +\author{Herbert Voß} +\maketitle + +\tableofcontents + +\blinddocument + +\section{File \texttt{\jobname}} + +\begin{lstlisting} +The FULLPAGE image~\vref{fig:FULLPAGE0} has a caption~\vpageref{fig:FULLPAGE0-cap}. +\end{lstlisting} + +The FULLPAGE image~\vref{fig:FULLPAGE0} has a caption~\vpageref{fig:FULLPAGE0-cap}. + +\begin{lstlisting} +\hvFloat*[doubleFULLPAGE,capPos=after,twoColumnCaption]% + {figure}% + {\includegraphics[doubleFULLPAGE]{rheinsberg}}% + [A doubleFULLPAGE float with the default caption setting]% + {A default caption of a ``doubleFULLPAGE'' object with the default setting, which + is a ``left'' caption which means that it always appears before the object. + This can be an even or odd page. And some more text which has no + real meaning because it fills only the space for a long caption.}% + {fig:doubleFULLPAGE0} +\end{lstlisting} + + +\Float[default] +\hvFloat*[doubleFULLPAGE,capPos=after,twoColumnCaption]% + {figure}% + {\includegraphics[doubleFULLPAGE]{rheinsberg}}% + [A doubleFULLPAGE float with the default caption setting]% + {A default caption of a ``doubleFULLPAGE'' object with the default setting, which + is a ``left'' caption which means that it always appears before the object. + This can be an even or odd page. And some more text which has no + real meaning because it fills only the space for a long caption.}% + {fig:doubleFULLPAGE0} + +\blinddocument + +\begin{lstlisting} +\hvFloat*[doubleFULLPAGE,capPos=after,twoColumnCaption]% + {figure}% + {\includegraphics[doubleFULLPAGE]{rheinsberg}}% + [A doubleFULLPAGE float with the default caption setting]% + {A default caption of a ``doubleFULLPAGE'' object with the default setting, which + is a ``left'' caption which means that it always appears before the object. + This can be an even or odd page. And some more text which has no + real meaning because it fills only the space for a long caption.}% + {fig:doubleFULLPAGE1} +\end{lstlisting} + + +\Float[default] +\hvFloat*[doubleFULLPAGE,capPos=after,twoColumnCaption]% + {figure}% + {\includegraphics[doubleFULLPAGE]{rheinsberg}}% + [A doubleFULLPAGE float with the default caption setting]% + {A default caption of a ``doubleFULLPAGE'' object with the default setting, which + is a ``left'' caption which means that it always appears before the object. + This can be an even or odd page. And some more text which has no + real meaning because it fills only the space for a long caption.}% + {fig:doubleFULLPAGE1} + +\blinddocument + +\Blindtext + +\blindtext + + +\end{document} \ No newline at end of file diff --git a/macros/latex/contrib/hvfloat/doc/examples/preamble.ltx b/macros/latex/contrib/hvfloat/doc/examples/preamble.ltx index 525725c6c0..075d72bba0 100644 --- a/macros/latex/contrib/hvfloat/doc/examples/preamble.ltx +++ b/macros/latex/contrib/hvfloat/doc/examples/preamble.ltx @@ -41,6 +41,9 @@ \captionsetup{labelfont={red,sf},font={red,sf},format=plain} \usepackage{blindtext} +\usepackage[style=authoryear]{biblatex} +\addbibresource{biblatex-examples.bib} + \def\hvblindtext{\textcolor{black!30}{Hello, here is some text without a meaning. This text should show what a printed text will look like at this place. If you read this text, you will get no information. Really? diff --git a/macros/latex/contrib/hvfloat/doc/examples/right1s1c.pdf b/macros/latex/contrib/hvfloat/doc/examples/right1s1c.pdf index c6c6bd27bd..ac72bcbebd 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/right1s1c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/right1s1c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/right1s1c.tex b/macros/latex/contrib/hvfloat/doc/examples/right1s1c.tex index 4ad53de6b9..58dbd7869e 100644 --- a/macros/latex/contrib/hvfloat/doc/examples/right1s1c.tex +++ b/macros/latex/contrib/hvfloat/doc/examples/right1s1c.tex @@ -1,5 +1,5 @@ \documentclass{scrartcl} -%% $Id: right1s1c.tex 72 2021-05-02 11:40:10Z herbert $ +%% $Id: right1s1c.tex 318 2021-11-20 07:30:54Z herbert $ \input{preamble.ltx} @@ -22,7 +22,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage0} \end{lstlisting} @@ -35,7 +35,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage0} @@ -50,7 +50,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage1} \end{lstlisting} @@ -63,7 +63,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage1} diff --git a/macros/latex/contrib/hvfloat/doc/examples/right1s2c.pdf b/macros/latex/contrib/hvfloat/doc/examples/right1s2c.pdf index dfd03e566c..f754b73cf7 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/right1s2c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/right1s2c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/right1s2c.tex b/macros/latex/contrib/hvfloat/doc/examples/right1s2c.tex index ada1d0b186..26de3dc0bc 100644 --- a/macros/latex/contrib/hvfloat/doc/examples/right1s2c.tex +++ b/macros/latex/contrib/hvfloat/doc/examples/right1s2c.tex @@ -1,5 +1,5 @@ \documentclass[twocolumn]{scrartcl} -%% $Id: right1s2c.tex 72 2021-05-02 11:40:10Z herbert $ +%% $Id: right1s2c.tex 318 2021-11-20 07:30:54Z herbert $ \input{preamble.ltx} \setlength\columnseprule{0.4pt} @@ -28,7 +28,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage0} \end{lstlisting} @@ -41,7 +41,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage0} @@ -54,7 +54,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage1} \end{lstlisting} @@ -67,7 +67,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage1} diff --git a/macros/latex/contrib/hvfloat/doc/examples/right2s1c.pdf b/macros/latex/contrib/hvfloat/doc/examples/right2s1c.pdf index dbb63e5fac..d513759ef8 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/right2s1c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/right2s1c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/right2s1c.tex b/macros/latex/contrib/hvfloat/doc/examples/right2s1c.tex index 6672586390..f1a07efd74 100644 --- a/macros/latex/contrib/hvfloat/doc/examples/right2s1c.tex +++ b/macros/latex/contrib/hvfloat/doc/examples/right2s1c.tex @@ -1,5 +1,5 @@ \documentclass[twoside]{scrartcl} -%% $Id: right2s1c.tex 72 2021-05-02 11:40:10Z herbert $ +%% $Id: right2s1c.tex 318 2021-11-20 07:30:54Z herbert $ \input{preamble.ltx} @@ -22,7 +22,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage0} \end{lstlisting} @@ -35,7 +35,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage0} @@ -48,7 +48,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage1} \end{lstlisting} @@ -61,7 +61,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage1} diff --git a/macros/latex/contrib/hvfloat/doc/examples/right2s2c.pdf b/macros/latex/contrib/hvfloat/doc/examples/right2s2c.pdf index e269a747a3..591a3fdc5c 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/right2s2c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/right2s2c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/right2s2c.tex b/macros/latex/contrib/hvfloat/doc/examples/right2s2c.tex index eaaed1d57c..7c7cf4e67d 100644 --- a/macros/latex/contrib/hvfloat/doc/examples/right2s2c.tex +++ b/macros/latex/contrib/hvfloat/doc/examples/right2s2c.tex @@ -1,5 +1,5 @@ \documentclass[twoside,twocolumn]{scrartcl} -%% $Id: right2s2c.tex 72 2021-05-02 11:40:10Z herbert $ +%% $Id: right2s2c.tex 318 2021-11-20 07:30:54Z herbert $ \input{preamble.ltx} \setlength\columnseprule{0.4pt} @@ -28,7 +28,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage0} \end{lstlisting} @@ -41,7 +41,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage0} @@ -54,7 +54,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage1} \end{lstlisting} @@ -67,7 +67,7 @@ The fullpage image~\vref{fig:fullpage0} has a caption~\vpageref{fig:fullpage0-ca [A fullpage float with the default caption setting]% {A default caption of a ``fullpage'' object with the default setting, which is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no + This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% {fig:fullpage1} diff --git a/macros/latex/contrib/hvfloat/doc/examples/runAll.sh b/macros/latex/contrib/hvfloat/doc/examples/runAll.sh old mode 100644 new mode 100755 index 0cecd6a0c2..836c85d33e --- a/macros/latex/contrib/hvfloat/doc/examples/runAll.sh +++ b/macros/latex/contrib/hvfloat/doc/examples/runAll.sh @@ -16,5 +16,5 @@ do then TEST=0 fi done - rm -fr $MAIN.aux $MAIN.log $MAIN.out $MAIN.toc + rm -fr $MAIN.aux $MAIN.log $MAIN.out $MAIN.toc $MAIN.lof $MAIN.run.xml $MAIN.bcf $MAIN.lot $MAIN.idx done diff --git a/macros/latex/contrib/hvfloat/doc/examples/runEXA.sh b/macros/latex/contrib/hvfloat/doc/examples/runEXA.sh old mode 100644 new mode 100755 index de0ad052ec..b9a7d536cf --- a/macros/latex/contrib/hvfloat/doc/examples/runEXA.sh +++ b/macros/latex/contrib/hvfloat/doc/examples/runEXA.sh @@ -16,5 +16,6 @@ do then TEST=0 fi done - rm -fr $MAIN.aux $MAIN.log $MAIN.out $MAIN.toc $MAIN.lof $MAIN.lot $MAIN.idx + rm -fr $MAIN.aux $MAIN.log $MAIN.out $MAIN.toc $MAIN.lof $MAIN.run.xml $MAIN.bcf $MAIN.lot $MAIN.idx + done diff --git a/macros/latex/contrib/hvfloat/doc/examples/sub-after1s1c.pdf b/macros/latex/contrib/hvfloat/doc/examples/sub-after1s1c.pdf index f75bb23f56..69f39ce9c3 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/sub-after1s1c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/sub-after1s1c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/sub-after1s1c.tex b/macros/latex/contrib/hvfloat/doc/examples/sub-after1s1c.tex index 660e942090..a0cdbcde18 100644 --- a/macros/latex/contrib/hvfloat/doc/examples/sub-after1s1c.tex +++ b/macros/latex/contrib/hvfloat/doc/examples/sub-after1s1c.tex @@ -1,5 +1,5 @@ \documentclass{scrartcl} -%% $Id: sub-after1s1c.tex 103 2021-05-31 12:37:11Z herbert $ +%% $Id: sub-after1s1c.tex 318 2021-11-20 07:30:54Z herbert $ \input{preamble.ltx} @@ -27,7 +27,7 @@ subimage~~\vref{sub:demo1} has a caption~\vpageref{sub:demo1}. \hvFloat[fullpage,capPos=after,objectFrame,subFloat,vFill]% +{figure}{}[Short main caption of the objects]% main short lsi entry {The main caption of a ``fullpage'' object, which follows on the left or - right column. This can be an even or odd page. And some more text whch has no + right column. This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% main caption {sub:demo0}% +{}{\includegraphics[width=\linewidth]{CTAN}}% @@ -50,7 +50,7 @@ subimage~~\vref{sub:demo1} has a caption~\vpageref{sub:demo1}. \hvFloat[fullpage,capPos=after,objectFrame,subFloat,vFill]% +{figure}{}[Short main caption of the objects]% main short lsi entry {The main caption of a ``fullpage'' object, which follows on the left or - right column. This can be an even or odd page. And some more text whch has no + right column. This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% main caption {sub:demo0}% +{}{\includegraphics[width=\linewidth]{CTAN}}% @@ -77,7 +77,7 @@ subimage~~\vref{sub:demo1} has a caption~\vpageref{sub:demo1}. \hvFloat[fullpage,capPos=after,objectFrame,subFloat,vFill]% +{figure}{}[Short main caption of the objects]% main short lsi entry {The main caption of a ``fullpage'' object, which follows on the left or - right column. This can be an even or odd page. And some more text whch has no + right column. This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% main caption {sub:demo4}% +{}{\includegraphics[width=\linewidth]{CTAN}}% @@ -100,7 +100,7 @@ subimage~~\vref{sub:demo1} has a caption~\vpageref{sub:demo1}. \hvFloat[fullpage,capPos=after,objectFrame,subFloat,vFill]% +{figure}{}[Short main caption of the objects]% main short lsi entry {The main caption of a ``fullpage'' object, which follows on the left or - right column. This can be an even or odd page. And some more text whch has no + right column. This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% main caption {sub:demo4}% +{}{\includegraphics[width=\linewidth]{CTAN}}% diff --git a/macros/latex/contrib/hvfloat/doc/examples/sub-after2s2c.pdf b/macros/latex/contrib/hvfloat/doc/examples/sub-after2s2c.pdf index 00554afc00..76baea7cfe 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/sub-after2s2c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/sub-after2s2c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/sub-after2s2c.tex b/macros/latex/contrib/hvfloat/doc/examples/sub-after2s2c.tex index 761faa2c4b..d610aff9cd 100644 --- a/macros/latex/contrib/hvfloat/doc/examples/sub-after2s2c.tex +++ b/macros/latex/contrib/hvfloat/doc/examples/sub-after2s2c.tex @@ -1,5 +1,5 @@ \documentclass[twocolumn]{scrartcl} -%% $Id: sub-after2s2c.tex 103 2021-05-31 12:37:11Z herbert $ +%% $Id: sub-after2s2c.tex 318 2021-11-20 07:30:54Z herbert $ \input{preamble.ltx} \setlength\columnseprule{0.4pt} @@ -27,7 +27,7 @@ subimage~~\vref{sub:demo1} has a caption~\vpageref{sub:demo1}. \hvFloat[fullpage,capPos=after,objectFrame,subFloat,vFill]% +{figure}{}[Short main caption of the objects]% main short lsi entry {The main caption of a ``fullpage'' object, which follows on the left or - right column. This can be an even or odd page. And some more text whch has no + right column. This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% main caption {sub:demo0}% +{}{\includegraphics[width=\linewidth]{CTAN}}% @@ -50,7 +50,7 @@ subimage~~\vref{sub:demo1} has a caption~\vpageref{sub:demo1}. \hvFloat[fullpage,capPos=after,objectFrame,subFloat,vFill]% +{figure}{}[Short main caption of the objects]% main short lsi entry {The main caption of a ``fullpage'' object, which follows on the left or - right column. This can be an even or odd page. And some more text whch has no + right column. This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% main caption {sub:demo0}% +{}{\includegraphics[width=\linewidth]{CTAN}}% @@ -77,7 +77,7 @@ subimage~~\vref{sub:demo1} has a caption~\vpageref{sub:demo1}. \hvFloat[fullpage,capPos=after,objectFrame,subFloat,vFill]% +{figure}{}[Short main caption of the objects]% main short lsi entry {The main caption of a ``fullpage'' object, which follows on the left or - right column. This can be an even or odd page. And some more text whch has no + right column. This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% main caption {sub:demo4}% +{}{\includegraphics[width=\linewidth]{CTAN}}% @@ -100,7 +100,7 @@ subimage~~\vref{sub:demo1} has a caption~\vpageref{sub:demo1}. \hvFloat[fullpage,capPos=after,objectFrame,subFloat,vFill]% +{figure}{}[Short main caption of the objects]% main short lsi entry {The main caption of a ``fullpage'' object, which follows on the left or - right column. This can be an even or odd page. And some more text whch has no + right column. This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% main caption {sub:demo4}% +{}{\includegraphics[width=\linewidth]{CTAN}}% diff --git a/macros/latex/contrib/hvfloat/doc/examples/sub-default1s1c.pdf b/macros/latex/contrib/hvfloat/doc/examples/sub-default1s1c.pdf index efea15759c..3ec3881e00 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/sub-default1s1c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/sub-default1s1c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/sub-default1s1c.tex b/macros/latex/contrib/hvfloat/doc/examples/sub-default1s1c.tex index ec371418a7..374a2fa0f1 100644 --- a/macros/latex/contrib/hvfloat/doc/examples/sub-default1s1c.tex +++ b/macros/latex/contrib/hvfloat/doc/examples/sub-default1s1c.tex @@ -1,5 +1,5 @@ \documentclass{scrartcl} -%% $Id: sub-default1s1c.tex 72 2021-05-02 11:40:10Z herbert $ +%% $Id: sub-default1s1c.tex 318 2021-11-20 07:30:54Z herbert $ \input{preamble.ltx} @@ -28,7 +28,7 @@ subimage~~\vref{sub:demo1} has a caption~\vpageref{sub:demo1}. \hvFloat[fullpage,capPos=l,objectFrame,subFloat]% +{figure}{}[Short main caption of the objects]% main short lsi entry {The main caption of a ``fullpage'' object, which follows on the left or - right column. This can be an even or odd page. And some more text whch has no + right column. This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% main caption {sub:demo0}% +{}{\includegraphics[width=\linewidth]{CTAN}}% @@ -51,7 +51,7 @@ subimage~~\vref{sub:demo1} has a caption~\vpageref{sub:demo1}. \hvFloat[fullpage,capPos=l,objectFrame,subFloat]% +{figure}{}[Short main caption of the objects]% main short lsi entry {The main caption of a ``fullpage'' object, which follows on the left or - right column. This can be an even or odd page. And some more text whch has no + right column. This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% main caption {sub:demo0}% +{}{\includegraphics[width=\linewidth]{CTAN}}% @@ -78,7 +78,7 @@ subimage~~\vref{sub:demo1} has a caption~\vpageref{sub:demo1}. \hvFloat[fullpage,capPos=l,objectFrame,subFloat]% +{figure}{}[Short main caption of the objects]% main short lsi entry {The main caption of a ``fullpage'' object, which follows on the left or - right column. This can be an even or odd page. And some more text whch has no + right column. This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% main caption {sub:demo4}% +{}{\includegraphics[width=\linewidth]{CTAN}}% @@ -101,7 +101,7 @@ subimage~~\vref{sub:demo1} has a caption~\vpageref{sub:demo1}. \hvFloat[fullpage,capPos=l,objectFrame,subFloat]% +{figure}{}[Short main caption of the objects]% main short lsi entry {The main caption of a ``fullpage'' object, which follows on the left or - right column. This can be an even or odd page. And some more text whch has no + right column. This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% main caption {sub:demo4}% +{}{\includegraphics[width=\linewidth]{CTAN}}% diff --git a/macros/latex/contrib/hvfloat/doc/examples/sub-default1s2c.pdf b/macros/latex/contrib/hvfloat/doc/examples/sub-default1s2c.pdf index 8d48919902..9c2150972b 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/sub-default1s2c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/sub-default1s2c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/sub-default1s2c.tex b/macros/latex/contrib/hvfloat/doc/examples/sub-default1s2c.tex index c9307aecef..33c1c8ad40 100644 --- a/macros/latex/contrib/hvfloat/doc/examples/sub-default1s2c.tex +++ b/macros/latex/contrib/hvfloat/doc/examples/sub-default1s2c.tex @@ -1,5 +1,5 @@ \documentclass[twocolumn]{scrartcl} -%% $Id: sub-default1s2c.tex 72 2021-05-02 11:40:10Z herbert $ +%% $Id: sub-default1s2c.tex 318 2021-11-20 07:30:54Z herbert $ \input{preamble.ltx} \setlength\columnseprule{0.4pt} @@ -29,7 +29,7 @@ subimage~~\vref{sub:demo1} has a caption~\vpageref{sub:demo1}. \hvFloat[fullpage,capPos=l,objectFrame,subFloat]% +{figure}{}[Short main caption of the objects]% main short lsi entry {The main caption of a ``fullpage'' object, which follows on the left or - right column. This can be an even or odd page. And some more text whch has no + right column. This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% main caption {sub:demo0}% +{}{\includegraphics[width=\linewidth]{CTAN}}% @@ -52,7 +52,7 @@ subimage~~\vref{sub:demo1} has a caption~\vpageref{sub:demo1}. \hvFloat[fullpage,capPos=l,objectFrame,subFloat]% +{figure}{}[Short main caption of the objects]% main short lsi entry {The main caption of a ``fullpage'' object, which follows on the left or - right column. This can be an even or odd page. And some more text whch has no + right column. This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% main caption {sub:demo0}% +{}{\includegraphics[width=\linewidth]{CTAN}}% @@ -79,7 +79,7 @@ subimage~~\vref{sub:demo1} has a caption~\vpageref{sub:demo1}. \hvFloat[fullpage,capPos=l,objectFrame,subFloat]% +{figure}{}[Short main caption of the objects]% main short lsi entry {The main caption of a ``fullpage'' object, which follows on the left or - right column. This can be an even or odd page. And some more text whch has no + right column. This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% main caption {sub:demo4}% +{}{\includegraphics[width=\linewidth]{CTAN}}% @@ -102,7 +102,7 @@ subimage~~\vref{sub:demo1} has a caption~\vpageref{sub:demo1}. \hvFloat[fullpage,capPos=l,objectFrame,subFloat]% +{figure}{}[Short main caption of the objects]% main short lsi entry {The main caption of a ``fullpage'' object, which follows on the left or - right column. This can be an even or odd page. And some more text whch has no + right column. This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% main caption {sub:demo4}% +{}{\includegraphics[width=\linewidth]{CTAN}}% diff --git a/macros/latex/contrib/hvfloat/doc/examples/sub-default2s2c.pdf b/macros/latex/contrib/hvfloat/doc/examples/sub-default2s2c.pdf index 84ab3d56cc..6bc68c681c 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/sub-default2s2c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/sub-default2s2c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/sub-default2s2c.tex b/macros/latex/contrib/hvfloat/doc/examples/sub-default2s2c.tex index cd6d370b80..9ecb891836 100644 --- a/macros/latex/contrib/hvfloat/doc/examples/sub-default2s2c.tex +++ b/macros/latex/contrib/hvfloat/doc/examples/sub-default2s2c.tex @@ -1,5 +1,5 @@ \documentclass[twoside,twocolumn]{scrartcl} -%% $Id: sub-default2s2c.tex 72 2021-05-02 11:40:10Z herbert $ +%% $Id: sub-default2s2c.tex 318 2021-11-20 07:30:54Z herbert $ \input{preamble.ltx} \setlength\columnseprule{0.4pt} @@ -29,7 +29,7 @@ subimage~~\vref{sub:demo1} has a caption~\vpageref{sub:demo1}. \hvFloat[fullpage,capPos=l,objectFrame,subFloat]% +{figure}{}[Short main caption of the objects]% main short lsi entry {The main caption of a ``fullpage'' object, which follows on the left or - right column. This can be an even or odd page. And some more text whch has no + right column. This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% main caption {sub:demo0}% +{}{\includegraphics[width=\linewidth]{CTAN}}% @@ -52,7 +52,7 @@ subimage~~\vref{sub:demo1} has a caption~\vpageref{sub:demo1}. \hvFloat[fullpage,capPos=l,objectFrame,subFloat]% +{figure}{}[Short main caption of the objects]% main short lsi entry {The main caption of a ``fullpage'' object, which follows on the left or - right column. This can be an even or odd page. And some more text whch has no + right column. This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% main caption {sub:demo0}% +{}{\includegraphics[width=\linewidth]{CTAN}}% @@ -79,7 +79,7 @@ subimage~~\vref{sub:demo1} has a caption~\vpageref{sub:demo1}. \hvFloat[fullpage,capPos=l,objectFrame,subFloat]% +{figure}{}[Short main caption of the objects]% main short lsi entry {The main caption of a ``fullpage'' object, which follows on the left or - right column. This can be an even or odd page. And some more text whch has no + right column. This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% main caption {sub:demo4}% +{}{\includegraphics[width=\linewidth]{CTAN}}% @@ -102,7 +102,7 @@ subimage~~\vref{sub:demo1} has a caption~\vpageref{sub:demo1}. \hvFloat[fullpage,capPos=l,objectFrame,subFloat]% +{figure}{}[Short main caption of the objects]% main short lsi entry {The main caption of a ``fullpage'' object, which follows on the left or - right column. This can be an even or odd page. And some more text whch has no + right column. This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% main caption {sub:demo4}% +{}{\includegraphics[width=\linewidth]{CTAN}}% diff --git a/macros/latex/contrib/hvfloat/doc/examples/sub-right1s1c.pdf b/macros/latex/contrib/hvfloat/doc/examples/sub-right1s1c.pdf index b319265630..246117205e 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/sub-right1s1c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/sub-right1s1c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/sub-right1s1c.tex b/macros/latex/contrib/hvfloat/doc/examples/sub-right1s1c.tex index e4fea43506..5717edc39e 100644 --- a/macros/latex/contrib/hvfloat/doc/examples/sub-right1s1c.tex +++ b/macros/latex/contrib/hvfloat/doc/examples/sub-right1s1c.tex @@ -1,5 +1,5 @@ \documentclass{scrartcl} -%% $Id: sub-right1s1c.tex 103 2021-05-31 12:37:11Z herbert $ +%% $Id: sub-right1s1c.tex 318 2021-11-20 07:30:54Z herbert $ \input{preamble.ltx} @@ -27,7 +27,7 @@ subimage~~\vref{sub:demo1} has a caption~\vpageref{sub:demo1}. \hvFloat[fullpage,capPos=right,objectFrame,subFloat,vFill]% +{figure}{}[Short main caption of the objects]% main short lsi entry {The main caption of a ``fullpage'' object, which follows on the left or - right column. This can be an even or odd page. And some more text whch has no + right column. This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% main caption {sub:demo0}% +{}{\includegraphics[width=\linewidth]{CTAN}}% @@ -50,7 +50,7 @@ subimage~~\vref{sub:demo1} has a caption~\vpageref{sub:demo1}. \hvFloat[fullpage,capPos=right,objectFrame,subFloat,vFill]% +{figure}{}[Short main caption of the objects]% main short lsi entry {The main caption of a ``fullpage'' object, which follows on the left or - right column. This can be an even or odd page. And some more text whch has no + right column. This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% main caption {sub:demo0}% +{}{\includegraphics[width=\linewidth]{CTAN}}% @@ -77,7 +77,7 @@ subimage~~\vref{sub:demo1} has a caption~\vpageref{sub:demo1}. \hvFloat[fullpage,capPos=right,objectFrame,subFloat,vFill]% +{figure}{}[Short main caption of the objects]% main short lsi entry {The main caption of a ``fullpage'' object, which follows on the left or - right column. This can be an even or odd page. And some more text whch has no + right column. This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% main caption {sub:demo4}% +{}{\includegraphics[width=\linewidth]{CTAN}}% @@ -100,7 +100,7 @@ subimage~~\vref{sub:demo1} has a caption~\vpageref{sub:demo1}. \hvFloat[fullpage,capPos=right,objectFrame,subFloat,vFill]% +{figure}{}[Short main caption of the objects]% main short lsi entry {The main caption of a ``fullpage'' object, which follows on the left or - right column. This can be an even or odd page. And some more text whch has no + right column. This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% main caption {sub:demo4}% +{}{\includegraphics[width=\linewidth]{CTAN}}% diff --git a/macros/latex/contrib/hvfloat/doc/examples/sub-right1s2c.pdf b/macros/latex/contrib/hvfloat/doc/examples/sub-right1s2c.pdf index 72ca919045..103bff8ed2 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/sub-right1s2c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/sub-right1s2c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/sub-right1s2c.tex b/macros/latex/contrib/hvfloat/doc/examples/sub-right1s2c.tex index d1073b7838..0e085d56da 100644 --- a/macros/latex/contrib/hvfloat/doc/examples/sub-right1s2c.tex +++ b/macros/latex/contrib/hvfloat/doc/examples/sub-right1s2c.tex @@ -1,5 +1,5 @@ \documentclass[twocolumn]{scrartcl} -%% $Id: sub-right1s2c.tex 103 2021-05-31 12:37:11Z herbert $ +%% $Id: sub-right1s2c.tex 318 2021-11-20 07:30:54Z herbert $ \input{preamble.ltx} \setlength\columnseprule{0.4pt} @@ -27,7 +27,7 @@ subimage~~\vref{sub:demo1} has a caption~\vpageref{sub:demo1}. \hvFloat[fullpage,capPos=after,objectFrame,subFloat,vFill]% +{figure}{}[Short main caption of the objects]% main short lsi entry {The main caption of a ``fullpage'' object, which follows on the left or - right column. This can be an even or odd page. And some more text whch has no + right column. This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% main caption {sub:demo0}% +{}{\includegraphics[width=\linewidth]{CTAN}}% @@ -50,7 +50,7 @@ subimage~~\vref{sub:demo1} has a caption~\vpageref{sub:demo1}. \hvFloat[fullpage,capPos=after,objectFrame,subFloat,vFill]% +{figure}{}[Short main caption of the objects]% main short lsi entry {The main caption of a ``fullpage'' object, which follows on the left or - right column. This can be an even or odd page. And some more text whch has no + right column. This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% main caption {sub:demo0}% +{}{\includegraphics[width=\linewidth]{CTAN}}% @@ -77,7 +77,7 @@ subimage~~\vref{sub:demo1} has a caption~\vpageref{sub:demo1}. \hvFloat[fullpage,capPos=after,objectFrame,subFloat,vFill]% +{figure}{}[Short main caption of the objects]% main short lsi entry {The main caption of a ``fullpage'' object, which follows on the left or - right column. This can be an even or odd page. And some more text whch has no + right column. This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% main caption {sub:demo4}% +{}{\includegraphics[width=\linewidth]{CTAN}}% @@ -100,7 +100,7 @@ subimage~~\vref{sub:demo1} has a caption~\vpageref{sub:demo1}. \hvFloat[fullpage,capPos=after,objectFrame,subFloat,vFill]% +{figure}{}[Short main caption of the objects]% main short lsi entry {The main caption of a ``fullpage'' object, which follows on the left or - right column. This can be an even or odd page. And some more text whch has no + right column. This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% main caption {sub:demo4}% +{}{\includegraphics[width=\linewidth]{CTAN}}% diff --git a/macros/latex/contrib/hvfloat/doc/examples/sub-right2s2c.pdf b/macros/latex/contrib/hvfloat/doc/examples/sub-right2s2c.pdf index 23e0a03ee7..c51e8fc121 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/sub-right2s2c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/sub-right2s2c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/sub-right2s2c.tex b/macros/latex/contrib/hvfloat/doc/examples/sub-right2s2c.tex index a6e556161c..0e8b0b6744 100644 --- a/macros/latex/contrib/hvfloat/doc/examples/sub-right2s2c.tex +++ b/macros/latex/contrib/hvfloat/doc/examples/sub-right2s2c.tex @@ -1,5 +1,5 @@ \documentclass[twocolumn]{scrartcl} -%% $Id: sub-right2s2c.tex 103 2021-05-31 12:37:11Z herbert $ +%% $Id: sub-right2s2c.tex 318 2021-11-20 07:30:54Z herbert $ \input{preamble.ltx} \setlength\columnseprule{0.4pt} @@ -27,7 +27,7 @@ subimage~~\vref{sub:demo1} has a caption~\vpageref{sub:demo1}. \hvFloat[fullpage,capPos=right,objectFrame,subFloat,vFill]% +{figure}{}[Short main caption of the objects]% main short lsi entry {The main caption of a ``fullpage'' object, which follows on the left or - right column. This can be an even or odd page. And some more text whch has no + right column. This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% main caption {sub:demo0}% +{}{\includegraphics[width=\linewidth]{CTAN}}% @@ -50,7 +50,7 @@ subimage~~\vref{sub:demo1} has a caption~\vpageref{sub:demo1}. \hvFloat[fullpage,capPos=right,objectFrame,subFloat,vFill]% +{figure}{}[Short main caption of the objects]% main short lsi entry {The main caption of a ``fullpage'' object, which follows on the left or - right column. This can be an even or odd page. And some more text whch has no + right column. This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% main caption {sub:demo0}% +{}{\includegraphics[width=\linewidth]{CTAN}}% @@ -77,7 +77,7 @@ subimage~~\vref{sub:demo1} has a caption~\vpageref{sub:demo1}. \hvFloat[fullpage,capPos=right,objectFrame,subFloat,vFill]% +{figure}{}[Short main caption of the objects]% main short lsi entry {The main caption of a ``fullpage'' object, which follows on the left or - right column. This can be an even or odd page. And some more text whch has no + right column. This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% main caption {sub:demo4}% +{}{\includegraphics[width=\linewidth]{CTAN}}% @@ -100,7 +100,7 @@ subimage~~\vref{sub:demo1} has a caption~\vpageref{sub:demo1}. \hvFloat[fullpage,capPos=right,objectFrame,subFloat,vFill]% +{figure}{}[Short main caption of the objects]% main short lsi entry {The main caption of a ``fullpage'' object, which follows on the left or - right column. This can be an even or odd page. And some more text whch has no + right column. This can be an even or odd page. And some more text which has no real meaning because it fills only the space for a long caption.}% main caption {sub:demo4}% +{}{\includegraphics[width=\linewidth]{CTAN}}% diff --git a/macros/latex/contrib/hvfloat/doc/examples/wide1s2c.pdf b/macros/latex/contrib/hvfloat/doc/examples/wide1s2c.pdf index b81fedc701..33a218d07a 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/wide1s2c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/wide1s2c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/wide2s2c.pdf b/macros/latex/contrib/hvfloat/doc/examples/wide2s2c.pdf index a95470d1eb..2cd33a23f3 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/wide2s2c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/wide2s2c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/hvfloat.pdf b/macros/latex/contrib/hvfloat/doc/hvfloat.pdf index 4322700b01..441b3d86a2 100644 Binary files a/macros/latex/contrib/hvfloat/doc/hvfloat.pdf and b/macros/latex/contrib/hvfloat/doc/hvfloat.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/hvfloat.tex b/macros/latex/contrib/hvfloat/doc/hvfloat.tex index 8b5da27591..6c38e880e3 100644 --- a/macros/latex/contrib/hvfloat/doc/hvfloat.tex +++ b/macros/latex/contrib/hvfloat/doc/hvfloat.tex @@ -1,16 +1,17 @@ -%% $Id: hvfloat.tex 653 2022-11-20 21:54:52Z herbert $ +%% $Id: hvfloat.tex 676 2023-01-28 19:47:00Z herbert $ \listfiles \errorcontextlines=100 \documentclass[twoside,paper=a4,usegeometry]{scrartcl} \usepackage{fontspec} -\usepackage{libertinus} +\usepackage[silent]{libertinus-otf} %\usepackage[scaled=0.85]{beramono} \setmonofont[Scale=MatchLowercase,FakeStretch=0.9]{DejaVu Sans Mono} \usepackage{microtype} \usepackage[english]{babel} -\usepackage[marginparwidth=3cm,bottom=2cm,top=1cm,includeheadfoot,showframe]{geometry} +\usepackage[marginparwidth=3cm,bottom=2cm,top=1cm,includeheadfoot%,showframe +]{geometry} \usepackage[automark]{scrlayer-scrpage} @@ -397,6 +398,8 @@ There are the following keywords: \Lkeyword{doublePage} & false & \rowvsp Use the text area on a doublepage with additional text.\\ \Lkeyword{doublePAGE} & false & \rowvsp Use the text area on a doublepage without additional text.\\ \Lkeyword{doubleFULLPAGE} & false & \rowvsp Use the paperwidth on a doublepage without additional text.\\ +\Lkeyword{forceLeft} & false & \rowvsp In some cases a doublepage float starts on an odd page. With \Lkeyword{forceLeft} it + uses only one \Lcs{afterpage} instead of two to force a start on an even page. \\ \Lkeyword{vFill} & false & \rowvsp Put a \Lcs{vfill} between every two objects in a multi- or subfloat.\\ \Lkeyword{sameHeight} & false & \rowvsp use the same text height on both pages for a \Lkeyword{doublePage} object.\\ \end{xltabular} diff --git a/macros/latex/contrib/hvfloat/latex/hvfloat.sty b/macros/latex/contrib/hvfloat/latex/hvfloat.sty index c1d78c0db7..394fc869ed 100644 --- a/macros/latex/contrib/hvfloat/latex/hvfloat.sty +++ b/macros/latex/contrib/hvfloat/latex/hvfloat.sty @@ -1,4 +1,4 @@ -%% $Id: hvfloat.sty 653 2022-11-20 21:54:52Z herbert $ +%% $Id: hvfloat.sty 676 2023-01-28 19:47:00Z herbert $ %% %% %% IMPORTANT NOTICE: @@ -6,7 +6,7 @@ %% This is file `hvfloat.sty', %% %% Herbert Voss -%% Copyright (C) 2003-22 +%% Copyright (C) 2003-23 %% %% This program can be redistributed and/or modified under the terms %% of the LaTeX Project Public License Distributed from CTAN archives @@ -16,8 +16,8 @@ %% `hvfloat' offers rotating of captions and objects for floats %% \NeedsTeXFormat{LaTeX2e} -\def\fileversion{2.44} -\def\filedate{2022/11/21} +\def\fileversion{2.45} +\def\filedate{2023/01/28} \ProvidesPackage{hvfloat}[\filedate\space v\fileversion\space special floating objects (hv)] \let\hvFloatFileVersion\fileversion % @@ -25,6 +25,7 @@ \newif\ifhv@hyperref \hv@hyperreffalse \newif\ifhv@nostfloats \hv@nostfloatsfalse \newif\ifhv@tugboat \hv@tugboatfalse +\newif\ifhv@forceLeft \hv@forceLeftfalse \DeclareOption{fbox}{\hv@fboxtrue\setlength\fboxsep{1pt}} \DeclareOption{hyperref}{\hv@hyperreftrue} @@ -67,6 +68,7 @@ % \global\@namedef{\number\@currbox @float}{\thispagestyle{#1}}\relax %} +\providecommand\hvfloat@typeout[1]{\ifhv@Debug\typeout{>>>> #1}\fi} \providecommand*\LenToUnit[1]{\strip@pt\dimexpr#1*\p@/\unitlength} \newlength\hvObjectWidth @@ -180,6 +182,7 @@ \define@boolkey{hvSet}[hv@]{inMargin}[true]{}% use of the hvOBox contents \define@boolkey{hvSet}[hv@]{onlyText}[true]{}% Write the caption only as text \define@boolkey{hvSet}[hv@]{wide}[true]{}% Write the caption only as text +\define@boolkey{hvSet}[hv@]{forceLeft}[true]{}% use only one \afterpage instead of \afterpage{\afterpage{.. \define@boolkey{hvSet}[hv@]{twoColumnCaption}[true]\global\@nameuse{hv@twoColumnCaption#1}{}% Write the caption only as text \define@boolkey{hvSet}[hv@]{sameHeight}[true]{\@nameuse{hv@sameHeight#1}}% Write the caption only as text \define@boolkey{hvSet}[hv@]{Debug}[true]{}% give more infos in the terminal @@ -203,11 +206,36 @@ \newlength\hv@floatCapSep \newlength\hvSet@bindCorr -\define@key{hvSet}{fullpage}[true]{\global\@nameuse{hv@fullpage#1}}% -\define@key{hvSet}{FULLPAGE}[true]{\global\@nameuse{hv@FULLPAGE#1}} -\define@key{hvSet}{doubleFULLPAGE}[true]{\global\@nameuse{hv@doubleFULLPAGE#1}\hv@doublePagefalse\hv@doublePAGEfalse} -\define@key{hvSet}{doublePAGE}[true]{\global\@nameuse{hv@doublePAGE#1}\hv@doublePagefalse\hv@doubleFULLPAGEfalse} -\define@key{hvSet}{doublePage}[true]{\global\@nameuse{hv@doublePage#1}\hv@doublePAGEfalse\hv@doubleFULLPAGEfalse} +\define@key{hvSet}{fullpage}[true]{% + \global\@nameuse{hv@fullpage#1}% + \hv@doublePagefalse\hv@doublePAGEfalse\hv@doubleFULLPAGEfalse + \hv@FULLPAGEfalse + \hvfloat@typeout{>>>>Option fullpage}% +} +\define@key{hvSet}{FULLPAGE}[true]{% + \global\@nameuse{hv@FULLPAGE#1}% + \hv@doublePagefalse\hv@doublePAGEfalse\hv@doubleFULLPAGEfalse + \hv@fullpagefalse + \hvfloat@typeout{>>>>Option FULLPAGE}% +} +\define@key{hvSet}{doubleFULLPAGE}[true]{% + \global\@nameuse{hv@doubleFULLPAGE#1}% + \hv@doublePagefalse\hv@doublePAGEfalse + \hv@fullpagefalse\hv@FULLPAGEfalse + \hvfloat@typeout{>>>>Option doubleFULLPAGE->True / doublePAGE->False}% +} +\define@key{hvSet}{doublePAGE}[true]{% + \global\@nameuse{hv@doublePAGE#1}% + \hv@doublePagefalse\hv@doubleFULLPAGEfalse + \hv@fullpagefalse\hv@FULLPAGEfalse + \hvfloat@typeout{>>>>Option doublePAGE->True / doubleFULLPAGE->False}% +} +\define@key{hvSet}{doublePage}[true]{% + \global\@nameuse{hv@doublePage#1}% + \hv@doublePAGEfalse\hv@doubleFULLPAGEfalse + \hv@fullpagefalse\hv@FULLPAGEfalse + \hvfloat@typeout{>>>>Option doublepage->True / doubleFULLPAGE->False}% +} \define@key{hvSet}{bindCorr}[0pt]{% \def\hv@temp{#1}% \ifx\hv@temp\hv@Inner @@ -251,7 +279,7 @@ \hv@set{% floatPos=, rotAngle=0, capWidth=n, capAngle=0, objectAngle=0, capPos=bottom, capVPos=center, objectPos=center, capHPos=center, - floatCapSep=5pt, useOBox=false, + floatCapSep=5pt, useOBox=false, forceLeft=false, onlyText=false, wide=false, fullpage=false, FULLPAGE=false, doubleFULLPAGE=false, doublePage=false, doublePAGE=false, multiFloat=false,subFloat=false,inMargin=false, @@ -267,13 +295,12 @@ \let\hvFloatSetDefaults\setDefaults \hvFloatSetDefaults% onyl for first loading of the package -\providecommand\hv@typeout[1]{\ifhv@Debug\typeout{>>>> #1}\fi} \providecommand\@tugclass{\@empty} \ifx\@tugclass\@empty \else \hv@tugboattrue % special page handling - \hv@typeout{>>> we are using a TUGboat class}% + \hvfloat@typeout{>>> we are using a TUGboat class}% \fi \newcommand\reset@special@float{% @@ -575,26 +602,33 @@ \global\hv@floatCapSep=\hvSet@floatCapSep% % \ifhv@fullpage + \hvfloat@typeout{>>>> do@@hvFloat: fullpage true}% \def\hvSet@CapWidth{n}% relative value \do@@@@hvFloat% fullpage with caption on other page \else \ifhv@FULLPAGE + \hvfloat@typeout{>>>> do@@hvFloat: FULLPAGE true}% \def\hvSet@CapWidth{n}% relative value \do@@@@hvFloat% fullpage with caption on other page \else \ifhv@doubleFULLPAGE + \hvfloat@typeout{>>>> do@@hvFloat: doubleFULLPAGE true}% \setlength\hvCapWidth{\textheight}% \expandafter\do@hvFloat@doubleFULLPAGE\@@temp% fullpage with caption rotated or under on an odd page \else \ifhv@doublePAGE + \hvfloat@typeout{>>>> do@@hvFloat: doublePAGE true}% \expandafter\do@hvFloat@doublePAGE\@@temp% fullpage with caption rotated or under on an odd page \else \ifhv@doublePage + \hvfloat@typeout{>>>> do@@hvFloat: doublePage true}% \expandafter\do@hvFloat@doublePage\@@temp% fullpage with caption rotated or under on an odd page \else \ifhv@inMargin + \hvfloat@typeout{>>>> do@@hvFloat: inMargin true}% \do@@@hvFloatInMargin \else + \hvfloat@typeout{>>>> do@@hvFloat: no special caption}% \do@@@hvFloat \fi \fi @@ -1156,8 +1190,6 @@ }% end marginnote \endgroup}% end of \marginnote and \@@@hvFloatInMargin - - % \newenvironment{hvFloatEnv}[1][\textwidth] {\minipage{#1}} @@ -1173,6 +1205,7 @@ \ExplSyntaxOff \def\do@@@@hvFloat{% special float page: caption <-> fullpage images + \hvfloat@typeout{>>>do@@@@hvFloat: special float page}% \ifx\hvSet@capPos\hv@After \global\hv@@capPos=1 \else \ifx\hvSet@capPos\hv@Even \global\hv@@capPos=2 @@ -1195,60 +1228,88 @@ \fi \fi \fi + \hvfloat@typeout{>>>do@@@@hvFloat: hv@capPos is \the\hv@@capPos}% \checkoddpage + \hvfloat@typeout{>>>do@@@@hvFloat: set floattype}% \set@caption@object{\hv@floatType}% set caption and object into a box \ifcase\hv@@capPos% caption before object 0-> _always_ left + \hvfloat@typeout{>>>do@@@@hvFloat: setBottomCaption and setPageObject (0)}% \setBottomCaption\setPageObject \or% caption after object 1-> _always_ right + \hvfloat@typeout{>>>do@@@@hvFloat: setPageObject and setBottomCaption (1)}% \setPageObject\setBottomCaption \or% caption on even page 2-> left page \ifoddpage + \hvfloat@typeout{>>>do@@@@hvFloat: afterpage-> oddpage/setBottomCaption and setPageObject (2)}% \afterpage{\setBottomCaption\setPageObject}% \else% we are on an even page + \hvfloat@typeout{>>>do@@@@hvFloat: evenpage/setBottomCaption and setPageObject (2)}% \setBottomCaption\setPageObject \fi \or% caption on odd page 3->right page \if@twoside + \hvfloat@typeout{>>>do@@@@hvFloat: twoside and caption on oddpage (3)}% \if@twocolumn + \hvfloat@typeout{>>>do@@@@hvFloat: twoside/twocolumn and caption on oddpage (3)}% \ifoddpage + \hvfloat@typeout{>>>do@@@@hvFloat: twoside/twocolumn/oddpage and caption on oddpage (3)}% \if@firstcolumn% on right side + \hvfloat@typeout{>>>do@@@@hvFloat: twoside/twocolumn/oddpage/firstcolumn and caption on oddpage (3)}% \setBottomCaption\setPageObject \else + \hvfloat@typeout{>>>do@@@@hvFloat: afterpage->twoside/twocolumn/oddpage/secondcolumn and caption on oddpage (3)}% \afterpage{\setPageObject\setBottomCaption}% start next column \fi \else% left (even) page + \hvfloat@typeout{>>>do@@@@hvFloat: twoside/twocolumn/oddpage and caption on evenpage (3)}% \if@firstcolumn + \hvfloat@typeout{>>>do@@@@hvFloat: afterpage->twoside/twocolumn/evenpage/firstcolumn and caption on oddpage (3)}% \afterpage{\setPageObject\setBottomCaption}% start next column \else + \hvfloat@typeout{>>>do@@@@hvFloat: twoside/twocolumn/evenage/secondcolumn and caption on oddpage (3)}% \setPageObject\setBottomCaption \fi \fi \else% onecolumn + \hvfloat@typeout{>>>do@@@@hvFloat: twoside/onecolumn and caption on oddpage (3)}% \ifoddpage + \hvfloat@typeout{>>>do@@@@hvFloat: twoside/onecolumn/oddpage and caption on oddpage (3)}% \setPageObject\setBottomCaption \else% even page + \hvfloat@typeout{>>>do@@@@hvFloat: afterpage->twoside/onecolumn/evenpage and caption on oddpage (3)}% \afterpage{\setPageObject\setBottomCaption}% \fi \fi \else% oneside + \hvfloat@typeout{>>>do@@@@hvFloat: oneside and caption on oddpage (3)}% \if@twocolumn + \hvfloat@typeout{>>>do@@@@hvFloat: oneside/twocolumn and caption on oddpage (3)}% \ifoddpage + \hvfloat@typeout{>>>do@@@@hvFloat: oneside/twocolumn/oddpage and caption on oddpage (3)}% \if@firstcolumn% on right side + \hvfloat@typeout{>>>do@@@@hvFloat: oneside/twocolumn/oddpage/firstcolumn and caption on oddpage (3)}% \setBottomCaption\setPageObject \else + \hvfloat@typeout{>>>do@@@@hvFloat: oneside/twocolumn/oddpage/secondcolumn and caption on oddpage (3)}% \setPageObject\setBottomCaption \fi \else + \hvfloat@typeout{>>>do@@@@hvFloat: oneside/twocolumn/evenpage and caption on oddpage (3)}% \if@firstcolumn% on left side + \hvfloat@typeout{>>>do@@@@hvFloat: afterpage->oneside/twocolumn/evenpage/firstcolumn and caption on oddpage (3)}% \afterpage{\setPageObject\setBottomCaption}% \else + \hvfloat@typeout{>>>do@@@@hvFloat: oneside/twocolumn/evenpage/secondcolumn and caption on oddpage (3)}% \setPageObject\setBottomCaption \fi \fi \else % onecolumn + \hvfloat@typeout{>>>do@@@@hvFloat: oneside/onecolumn and caption on oddpage (3)}% \ifoddpage + \hvfloat@typeout{>>>do@@@@hvFloat: oneside/onecolumn/oddpage and caption on oddpage (3)}% \setBottomCaption\setPageObject \else + \hvfloat@typeout{>>>do@@@@hvFloat: afterpage->oneside/onecolumn/evenpage and caption on oddpage (3)}% \afterpage{\setBottomCaption\setPageObject}% \fi \fi @@ -1256,35 +1317,50 @@ \or% caption on the inner column 4->inner % \set@caption@object \if@twocolumn + \hvfloat@typeout{>>>do@@@@hvFloat: twocolumn and caption on inner column (4)}% \ifoddpage + \hvfloat@typeout{>>>do@@@@hvFloat: twoside/oddpage and caption on inner column (4)}% \if@firstcolumn% on right side + \hvfloat@typeout{>>>do@@@@hvFloat: twoside/oddpage/firstcolumn and caption on inner column (4)}% \setBottomCaption\setPageObject \else % right column on right side + \hvfloat@typeout{>>>do@@@@hvFloat: twoside/oddpage/secondcolumn and caption on inner column (4)}% \setPageObject\setBottomCaption% start next firstcolumn next page \fi \else + \hvfloat@typeout{>>>do@@@@hvFloat: twoside/evenpage and caption on inner column (4)}% \if@firstcolumn% on left side + \hvfloat@typeout{>>>do@@@@hvFloat: afterpage^2 -> twoside/evenpage/firstcolumn and caption on inner column (4)}% \afterpage{\afterpage{\setBottomCaption\setPageObject}}% start next page/first column \else% left page/column + \hvfloat@typeout{>>>do@@@@hvFloat: twoside/evenpage/secondcolumn and caption on inner column (4)}% \setBottomCaption\setPageObject% start on same page/column \fi \fi \else% onecolumn + \hvfloat@typeout{>>>do@@@@hvFloat: onecolumn and caption on inner column (4)}% \setBottomCaption\setPageObject \fi \or% caption on the outer column 5->outer % \set@caption@object \if@twocolumn + \hvfloat@typeout{>>>do@@@@hvFloat: twocolumn and caption on outer column (5)}% \ifoddpage + \hvfloat@typeout{>>>do@@@@hvFloat: twocolumn/oddpage and caption on outer column (5)}% \if@firstcolumn + \hvfloat@typeout{>>>do@@@@hvFloat: afterpage^2 -> firstcolumn/oddpage/twocolumn and caption on outer column (5)}% \afterpage{\afterpage{\setBottomCaption\setPageObject}}% \else + \hvfloat@typeout{>>>do@@@@hvFloat: afterpage -> twocolumn/oddpage/secondcolumn and caption on outer column (5)}% \afterpage{\setBottomCaption\setPageObject}% \fi \else% even page (left) + \hvfloat@typeout{>>>do@@@@hvFloat: twocolumn/evenpage and caption on outer column (5)}% \if@firstcolumn + \hvfloat@typeout{>>>do@@@@hvFloat: twocolumn/evenpage/firstcolumn and caption on outer column (5)}% \setBottomCaption\setPageObject \else + \hvfloat@typeout{>>>do@@@@hvFloat: twocolumn/evenpage/secondolumn and caption on outer column (5)}% %%% !!!! to-do: !!!! \fi \fi @@ -1293,22 +1369,30 @@ \fi \or% caption after object on same page 6->right for twocolumn \if@twocolumn + \hvfloat@typeout{>>>do@@@@hvFloat: twocolumn and caption after object (6)}% \if@firstcolumn + \hvfloat@typeout{>>>do@@@@hvFloat: afterpage -> twocolumn/firstcolumn and caption after object (6)}% \afterpage{\setPageObject\setBottomCaption}% \else + \hvfloat@typeout{>>>do@@@@hvFloat: twocolumn/secondcolumn and caption after object (6)}% \setPageObject\setBottomCaption \fi \else% always caption _after_ object for onecolumn + \hvfloat@typeout{>>>do@@@@hvFloat: onecolumn and caption after object (6)}% \setPageObject\setBottomCaption \fi \or% caption before object on same page 7->left for twocolumn \if@twocolumn + \hvfloat@typeout{>>>do@@@@hvFloat: twocolumn and caption before object (7)}% \if@firstcolumn + \hvfloat@typeout{>>>do@@@@hvFloat: twocolumn/firstcolumn and caption before object (7)}% \setBottomCaption\setPageObject \else + \hvfloat@typeout{>>>do@@@@hvFloat: afterpage -> twocolumn/secondcolumn and caption before object (7)}% \afterpage{\setBottomCaption\setPageObject}% \fi \else% onecolumn -> same as before + \hvfloat@typeout{>>>do@@@@hvFloat: onecolumn and caption before object (7)}% \setBottomCaption\setPageObject \fi \fi @@ -1322,7 +1406,8 @@ % \def\do@hvFloat@doublePage#1{% image on left and right page with caption on the right page % #1-> 0/1 caption under/right - \hv@typeout{>>>doublePage: start with definitions of \hv@floatObject}% + \hvfloat@typeout{----------------------------- do@hvFloat@doublePage#1 --------------------------}% + \hvfloat@typeout{>>>do@hvFloat@doublePage: begin with definitions of \hv@floatObject}% \global\hv@leftPageObjectWidth=\the\dimexpr\paperwidth-1in-\evensidemargin-\hvSet@bindCorrection\relax \global\hv@tempWidthA=\the\dimexpr1in+\oddsidemargin-\hvSet@bindCorrection\relax \xdef\hv@caption@format@temp{\hv@caption@format}% it gets lost otherwise for next afterpage @@ -1339,35 +1424,37 @@ \endminipage}% \savebox\hvObjectBox{\ifhv@useOBox\usebox{\hvOBox}\else\hv@floatObject\fi}% \ifnum#1=0\relax % no rotation, caption below - \hv@typeout{Texthöhe: \the\textheight}% - \hv@typeout{Objekthöhe: \the\ht\hvObjectBox}% - \hv@typeout{Captionhöhe: \the\ht\hvCaptionBox}% + \hvfloat@typeout{Texthöhe: \the\textheight}% + \hvfloat@typeout{Objekthöhe: \the\ht\hvObjectBox}% + \hvfloat@typeout{Captionhöhe: \the\ht\hvCaptionBox}% \@tempdima=\dimexpr\ht\hvObjectBox+\ht\hvCaptionBox+\abovecaptionskip+\belowcaptionskip +\textfloatsep\relax%+\floatsep\relax - \hv@typeout{Summe: \the\@tempdima}% + \hvfloat@typeout{Summe: \the\@tempdima}% \ifdim\@tempdima > \dimexpr\textheight-\hv@minTextlines\relax - \hv@typeout{hvfloat: switched to floattype p}% + \hvfloat@typeout{hvfloat: switched to floattype p}% \hv@switchTypetrue \fi \fi - \hv@typeout{do@hvFloat@doublePage:hv@tempWidthA=\the\hv@tempWidthA}% + \hvfloat@typeout{do@hvFloat@doublePage:hv@tempWidthA=\the\hv@tempWidthA}% \ifhv@forceOutput \do@hvFloat@doublePAGECaptionRight{#1}% no cheque \else \checkoddpage \ifoddpage + \hvfloat@typeout{do@hvFloat@doublePage:oddpage}% \if@twocolumn + \hvfloat@typeout{do@hvFloat@doublePage: oddpage/twocolumn}% \if@firstcolumn - \hv@typeout{do@hvFloat@doublePage:oddpage->twocolumn->firstcolumn}% + \hvfloat@typeout{do@hvFloat@doublePage:oddpage->twocolumn->firstcolumn}% \ifhv@switchType - \hv@typeout{hvfloat: switched to floattype p}% + \hvfloat@typeout{hvfloat: switched to floattype p}% \afterpage{\do@hvFloat@doublePAGECaptionRight{#1}}% \else - \hv@typeout{calling do@hvFloat@doublePageCaptionRight}% + \hvfloat@typeout{calling do@hvFloat@doublePageCaptionRight}% %\afterpage{ \afterpage{\do@hvFloat@doublePageCaptionRight{#1}}%}% \fi \else - \hv@typeout{do@hvFloat@doublePage:oddpage->twocolumn->secondcolumn}% + \hvfloat@typeout{do@hvFloat@doublePage:oddpage->twocolumn->secondcolumn}% \ifhv@tugboat \do@hvFloat@doublePageCaptionRight{#1}% \else @@ -1378,14 +1465,22 @@ \fi \fi \fi - \else + \else% onecolumn + \hvfloat@typeout{do@hvFloat@doublePage: oddpage/onecolumn}% \ifhv@switchType + \hvfloat@typeout{do@hvFloat@doublePage: oddpage/onecolumn/switchType}% \do@hvFloat@doublePAGECaptionRight{#1}% \else - \afterpage{\do@hvFloat@doublePageCaptionRight{#1}}% + \hvfloat@typeout{do@hvFloat@doublePage: call do@hvFloat@doublePageCaptionRight #1}% + \ifhv@forceLeft + \do@hvFloat@doublePageCaptionRight{#1}% no \afterpage + \else + \afterpage{\do@hvFloat@doublePageCaptionRight{#1}}% + \fi \fi \fi \else% we have an even page + \hvfloat@typeout{do@hvFloat@doublePage:evenpage -> (\thepage)}% \if@twocolumn \if@firstcolumn \ifhv@switchType @@ -1401,33 +1496,42 @@ \fi \fi \else% onecolumn + \hvfloat@typeout{do@hvFloat@doublePage:evenpage/onecolumn -> (\thepage)}% \ifhv@switchType + \hvfloat@typeout{do@hvFloat@doublePage:evenpage/onecolumn/switchType -> (\thepage)}% \afterpage{\do@hvFloat@doublePAGECaptionRight{#1}}% \else - \afterpage{\afterpage{\do@hvFloat@doublePageCaptionRight{#1}}}% + \hvfloat@typeout{do@hvFloat@doublePage:evenpage/onecolumn/noSwitchType -> (\thepage)}% + \ifhv@forceLeft + \hvfloat@typeout{do@hvFloat@doublePage:evenpage/onecolumn/noSwitchType/forceLeft -> (\thepage)}% + \afterpage{\do@hvFloat@doublePageCaptionRight{#1}}% + \else + \afterpage{\afterpage{\do@hvFloat@doublePageCaptionRight{#1}}}% + \fi \fi \fi \fi - \let\c@fptop\hv@fptop + \let\@fptop\hv@fptop \fi \endgroup% started at main macro \hvFloat + \hvfloat@typeout{----------------------------- do@hvFloat@doublePage#1 ... Ende ----------------------}% } % \def\do@hvFloat@doublePageCaptionRight#1{% image on left and right page with caption on the right page ---------------------------------- - \hv@typeout{do@hvFloat@doublePageCaptionRight->start}% + \hvfloat@typeout{do@hvFloat@doublePageCaptionRight->start}% \do@hvFloat@doublePageCaptionRightObjectLeft{0pt}% \afterpage{\do@hvFloat@doublePageCaptionRightObjectRight{#1}}% } % \def\do@hvFloat@doublePageCaptionRightObjectLeft#1{% left part of the object - \begin{\hv@floatType*}[!t] - \hv@typeout{>>>doublePage: start with left side of the object \hv@floatObject}% + \begin{\hv@floatType}[!t] + \hvfloat@typeout{>>>doublePage: begin with left side of the object \hv@floatObject}% \hv@set@noverticalSpace \hfuzz=\maxdimen \let\c@hv@tempCNTfigA\c@figure \let\c@hv@tempCNTtabA\c@table \expandafter\hvFloatSet\expandafter{\hv@save@setting}% - \hv@typeout{Float position parameter is for left page: !t}% + \hvfloat@typeout{Float position parameter is for left page: !t}% \global\savebox{\hvObjectBox}{\ifhv@useOBox\usebox{\hvOBox}\else\hv@floatObject\fi}% \clipbox*{0 -\depth{} \hv@leftPageObjectWidth{} \height}{\usebox\hvObjectBox}% \ifx\hv@label\@empty @@ -1440,16 +1544,18 @@ \label{\hv@label}% \fi \ifhv@global@sameHeight - \hv@typeout{text should be of same height of both pages}% + \hvfloat@typeout{text should be of same height of both pages}% \par\noindent\phantom{\parbox{\textwidth}{\caption*{\hv@longCap}}}% % \vspace{-2pt}% \fi \hv@reset@noverticalSpace - \end{\hv@floatType*}% + \hvfloat@typeout{>>>doublePage: end with left side of the object \hv@floatObject}% + \end{\hv@floatType}% } + \def\do@hvFloat@doublePageCaptionRightObjectRight#1{% right part of the object \begin{\hv@floatType*}[!t] - \hv@typeout{>>>doublePage: start with right side of the object \hv@floatObject}% + \hvfloat@typeout{>>>doublePage: begin with right side of the object \hv@floatObject}% \hv@set@noverticalSpace \hfuzz=\maxdimen \expandafter\hvFloatSet\expandafter{\hv@save@setting}% @@ -1459,8 +1565,8 @@ \hv@leftPageObjectWidth=\the\dimexpr\paperwidth-1in-\evensidemargin-\hvSet@bindCorrection\relax% FÜR FTK \savebox\hv@rightBox{\clipbox*{\hv@leftPageObjectWidth{} -\depth{} \width{} \height{}}{\usebox\hvObjectBox}}% \hv@tempWidthB=\dimexpr\textwidth-\wd\hv@rightBox-\hvSet@bindCorrection+1in+\oddsidemargin-\hv@floatCapSep\relax - \hv@typeout{Height of right box: \the\ht\hv@rightBox}% - \hv@typeout{Depth of right box : \the\dp\hv@rightBox}% + \hvfloat@typeout{Height of right box: \the\ht\hv@rightBox}% + \hvfloat@typeout{Depth of right box : \the\dp\hv@rightBox}% \ifdim\dp\hv@rightBox > \z@ \raisebox{\depth}{\usebox\hv@rightBox}% \else @@ -1482,7 +1588,7 @@ \c@figure=\numexpr\c@hv@tempCNTfigB-1\relax \c@table=\numexpr\c@hv@tempCNTtabB-1\relax \ifnum#1>\z@ % caption on the right - \hv@typeout{doublePage: capAngle=\hvSet@capAngle}% + \hvfloat@typeout{doublePage: capAngle=\hvSet@capAngle}% \ifnum\hvSet@capAngle > \z@ \hspace{\hv@floatCapSep}% \rlap{\rotatebox{\hvSet@capAngle}{\parbox[b]{\the\dimexpr\ht\hvObjectBox+\dp\hvObjectBox}{% @@ -1519,6 +1625,7 @@ \fi \vspace{0pt}% \hv@reset@noverticalSpace + \hvfloat@typeout{>>>doublePage: end with right side of the object \hv@floatObject}% \end{\hv@floatType*} } % @@ -1537,20 +1644,20 @@ \expandafter\global\expandafter\savebox\expandafter\hv@boxRightPage\expandafter{\clipbox*{\hv@leftPageObjectWidth{} -\depth{} \width{} \height}{\usebox\hvObjectBox}}% \checkoddpage \ifoddpage - \hv@typeout{do@hvFloat@doublePAGE: oddpage}% + \hvfloat@typeout{do@hvFloat@doublePAGE: oddpage}% \if@twocolumn \if@firstcolumn - \hv@typeout{do@hvFloat@doublePAGE: ifoddpage->twocolumn->firstcolumn}% + \hvfloat@typeout{do@hvFloat@doublePAGE: ifoddpage->twocolumn->firstcolumn}% \afterpage{\do@hvFloat@doublePAGECaptionRight{#1}}% \else - \hv@typeout{do@hvFloat@doublePAGE: ifoddpage->twocolumn->secondcolumn}% + \hvfloat@typeout{do@hvFloat@doublePAGE: ifoddpage->twocolumn->secondcolumn}% \do@hvFloat@doublePAGECaptionRight{#1}% \fi \else \do@hvFloat@doublePAGECaptionRight{#1}% \fi \else - \hv@typeout{do@hvFloat@doublePAGE: evenpage}% + \hvfloat@typeout{do@hvFloat@doublePAGE: evenpage}% \if@twocolumn \if@firstcolumn \afterpage{\afterpage{\afterpage{\do@hvFloat@doublePAGECaptionRight{#1}}}}% @@ -1566,7 +1673,7 @@ % \def\do@hvFloat@doublePAGECaptionRight#1{% image on left and right page with caption on the right ---------------------------------- % #1-> 0/1 caption under/right - \hv@typeout{do@hvFloat@doublePAGECaptionRight->start}% + \hvfloat@typeout{do@hvFloat@doublePAGECaptionRight->start}% \afterpage{% \hfuzz=\maxdimen \expandafter\hvFloatSet\expandafter{\hv@save@setting}% @@ -1626,6 +1733,7 @@ % \def\do@hvFloat@doubleFULLPAGE#1{% image on left and right page with caption before/below/right/after % #1-> 0/1 caption under/right + \hvfloat@typeout{>>> do@hvFloat@doubleFULLPAGE: #1}% \expandafter\hvFloatSet\expandafter{\hv@save@setting}% \ifx\hvSet@capPos\hv@After \global\hv@@capPos=1 \else @@ -1642,47 +1750,55 @@ % \savebox\hv@rightBox{\clipbox*{\the\hv@leftPageObjectWidth{} \depth{} \width{} \height}{\usebox\hvObjectBox}}% % \expandafter\captionsetup\expandafter{\hv@caption@format}% \ifoddpage - \hv@typeout{do@hvFloat@doubleFULLPAGE: ifoddpage=true}% + \hvfloat@typeout{do@hvFloat@doubleFULLPAGE: oddpage}% \ifcase\hv@@capPos % =0 Caption before - \hv@typeout{do@hvFloat@doubleFULLPAGE: caption before}% + \hvfloat@typeout{do@hvFloat@doubleFULLPAGE: oddpage/caption before (0)}% \if@twocolumn - \hv@typeout{do@hvFloat@doubleFULLPAGE: twocolumn=true}% + \hvfloat@typeout{do@hvFloat@doubleFULLPAGE: oddpage/caption before/twocolumn}% \if@firstcolumn - \hv@typeout{do@hvFloat@doubleFULLPAGE: firstcolumn=true}% + \hvfloat@typeout{do@hvFloat@doubleFULLPAGE: oddpage/caption before/twocolumn/firstcolumn}% \ifhv@twoColumnCaption - \hv@typeout{do@hvFloat@doubleFULLPAGE: twoColumnCaption=true}% + \hvfloat@typeout{do@hvFloat@doubleFULLPAGE: afterpage -> oddpage/caption before/twocolumn/firstcolumn/twoColumnCaption}% \set@Normal@Bottom@Caption* \afterpage{\do@hvFloat@doubleFULLPAGE@CaptionBefore}% \else + \hvfloat@typeout{do@hvFloat@doubleFULLPAGE: afterpage -> oddpage/caption before/twocolumn/firstcolumn/oneColCaption}% \afterpage{\set@Normal@Bottom@Caption\do@hvFloat@doubleFULLPAGE@CaptionBefore}% \fi - \else% \if@firstcolumn + \else + \hvfloat@typeout{do@hvFloat@doubleFULLPAGE: oddpage/caption before/twocolumn/secondcolumn}% \set@Normal@Bottom@Caption \do@hvFloat@doubleFULLPAGE@CaptionBefore \fi - \else% \if@twocolumn + \else + \hvfloat@typeout{do@hvFloat@doubleFULLPAGE: oddpage/caption before/onecolumn}% \set@Normal@Bottom@Caption \do@hvFloat@doubleFULLPAGE@CaptionBefore \fi \or % =1 Caption after - \hv@typeout{do@hvFloat@doubleFULLPAGE: caption after}% + \hvfloat@typeout{do@hvFloat@doubleFULLPAGE: oddpage/caption after (1)}% \ifhv@twoColumnCaption - \hv@typeout{do@hvFloat@doubleFULLPAGE: twoColumnCaption=true}% + \hvfloat@typeout{do@hvFloat@doubleFULLPAGE: oddpage/caption after/twoColCaption (1)}% \if@firstcolumn - \hv@typeout{do@hvFloat@doubleFULLPAGE: firstcolumn=true}% + \hvfloat@typeout{do@hvFloat@doubleFULLPAGE: oddpage/caption after/firstcolumn (1)}% \afterpage{\do@hvFloat@doubleFULLPAGE@CaptionAfterTwoCol}% \else - \hv@typeout{do@hvFloat@doubleFULLPAGE: firstcolumn=false}% + \hvfloat@typeout{do@hvFloat@doubleFULLPAGE: oddpage/caption after/secondcolumn (1)}% \do@hvFloat@doubleFULLPAGE@CaptionAfterTwoCol \fi \else + \hvfloat@typeout{do@hvFloat@doubleFULLPAGE: oddpage/caption after/oneColCaption (1)}% \if@twocolumn + \hvfloat@typeout{do@hvFloat@doubleFULLPAGE: oddpage/caption after/twoColCaption/twocolumn (1)}% \if@firstcolumn + \hvfloat@typeout{do@hvFloat@doubleFULLPAGE: afterpage -> oddpage/caption after/twoColCaption/twocolumn/firstcolumn (1)}% \afterpage{\do@hvFloat@doubleFULLPAGE@CaptionAfter}% \else + \hvfloat@typeout{do@hvFloat@doubleFULLPAGE: oddpage/caption after/twoColCaption/twocolumn/secondcolumn (1)}% \do@hvFloat@doubleFULLPAGE@CaptionAfter \fi \else + \hvfloat@typeout{do@hvFloat@doubleFULLPAGE: oddpage/caption after/twoColCaption/onecolumn (1)}% \do@hvFloat@doubleFULLPAGE@CaptionAfter \fi \fi @@ -1698,36 +1814,53 @@ \fi \fi% \ifcase \else% we have an even page + \hvfloat@typeout{do@hvFloat@doubleFULLPAGE: evenpage (1 -- \thepage)}% \ifcase\hv@@capPos% Before + \hvfloat@typeout{do@hvFloat@doubleFULLPAGE: evenpage/caption before (0 -- \thepage)}% \if@twocolumn + \hvfloat@typeout{do@hvFloat@doubleFULLPAGE: evenpage/caption before/twocolumn (0 -- \thepage)}% \if@firstcolumn + \hvfloat@typeout{do@hvFloat@doubleFULLPAGE: evenpage/caption before/twocolumn/firstcolumn (0 -- \thepage)}% \ifhv@twoColumnCaption + \hvfloat@typeout{do@hvFloat@doubleFULLPAGE: afterpage^2->evenpage/caption before/twocolumn/firstcolumn/twocolCap (0 -- \thepage)}% \afterpage{\afterpage\set@Normal@Bottom@Caption*\afterpage{\do@hvFloat@doubleFULLPAGE@CaptionBefore{#1}}}% \else + \hvfloat@typeout{do@hvFloat@doubleFULLPAGE: afterpage^2 -> evenpage/caption before/twocolumn/firstcolumn/oneColCap (0 -- \thepage)}% \afterpage{\afterpage{\afterpage{\set@Normal@Bottom@Caption\do@hvFloat@doubleFULLPAGE@CaptionBefore{#1}}}}% \fi \else + \hvfloat@typeout{do@hvFloat@doubleFULLPAGE: afterpage^2->evenpage/caption before/twocolumn/secondcolumn (0 -- \thepage)}% \afterpage{\afterpage{\set@Normal@Bottom@Caption\do@hvFloat@doubleFULLPAGE@CaptionBefore{#1}}}% \fi - \else% \if@twocolumn + \else + \hvfloat@typeout{do@hvFloat@doubleFULLPAGE: afterpage -> evenpage/caption before/onecolumn (0 -- \thepage)}% \afterpage{\set@Normal@Bottom@Caption\do@hvFloat@doubleFULLPAGE@CaptionBefore}% \fi \or % capPos after + \hvfloat@typeout{do@hvFloat@doubleFULLPAGE: evenpage/caption after (1 -- \thepage)}% \if@twocolumn + \hvfloat@typeout{do@hvFloat@doubleFULLPAGE: evenpage/caption after/twocolumn (1 -- \thepage)}% \if@firstcolumn + \hvfloat@typeout{do@hvFloat@doubleFULLPAGE: evenpage/caption after/twocolumn/firstcolumn (1 -- \thepage)}% \ifhv@twoColumnCaption + \hvfloat@typeout{do@hvFloat@doubleFULLPAGE: afterpage -> evenpage/caption after/twocolumn/firstcolumn/twoColCaption (1 -- \thepage)}% \afterpage{\afterpage\afterpage{\do@hvFloat@doubleFULLPAGE@CaptionAfterTwoCol{#1}}}% \else + \hvfloat@typeout{do@hvFloat@doubleFULLPAGE: afterpage -> evenpage/caption after/twocolumn/firstcolumn/oneColCaption (1 -- \thepage)}% \afterpage{\afterpage\afterpage{\do@hvFloat@doubleFULLPAGE@CaptionAfter{#1}}}% \fi \else + \hvfloat@typeout{do@hvFloat@doubleFULLPAGE: evenpage/caption after/twocolumn/secondcolumn (1 -- \thepage)}% \ifhv@twoColumnCaption + \hvfloat@typeout{do@hvFloat@doubleFULLPAGE: afterpage1 2 -> evenpage/caption after/twocolumn/secondcolumn/twoColCaption (1 -- \thepage)}% \afterpage{\afterpage{\do@hvFloat@doubleFULLPAGE@CaptionAfterTwoCol{#1}}}% \else + \hvfloat@typeout{do@hvFloat@doubleFULLPAGE: afterpage1 2 -> evenpage/caption after/twocolumn/secondcolumn/oneColCaption (1 -- \thepage)}% \afterpage{\afterpage{\do@hvFloat@doubleFULLPAGE@CaptionAfter{#1}}}% \fi \fi - \else% \if@twocolumn + \else + \hvfloat@typeout{do@hvFloat@doubleFULLPAGE: afterpage -> evenpage/caption after/onecolumn (1 -- \thepage)}% \afterpage{\do@hvFloat@doubleFULLPAGE@CaptionAfter}% \fi \else % \ifcase Any other caption @@ -1861,9 +1994,9 @@ } \def\do@hvFloat@doubleFULLPAGE@CaptionAfterTwoCol{% - \hv@typeout{do@hvFloat@doubleFULLPAGE@CaptionAfterTwoCol: start} % + \hvfloat@typeout{do@hvFloat@doubleFULLPAGE@CaptionAfterTwoCol: start} % \afterpage{% - \hv@typeout{do@hvFloat@doubleFULLPAGE@CaptionAfterTwoCol: afterpage start} % + \hvfloat@typeout{do@hvFloat@doubleFULLPAGE@CaptionAfterTwoCol: afterpage start} % \global\savebox{\hvObjectBox}{\ifhv@useOBox\usebox{\hvOBox}\else\hv@floatObject\fi}% \vspace*{\the\dimexpr-1in-\voffset-\topmargin-\headheight-\headsep-\baselineskip-\parskip+1.5\lineskip}% no interlineskip \hspace*{\the\dimexpr-\evensidemargin-\parindent-1in}% @@ -1876,7 +2009,7 @@ \ifx\hv@label\@empty\else\label{\hv@label}\fi \clipbox*{0 0 \the\hv@leftPageObjectWidth{} \height}{\usebox\hvObjectBox}% \newpage\if@twocolumn\null\newpage\fi - \hv@typeout{do@hvFloat@doubleFULLPAGE@CaptionAfterTwoCol: insert newpage} % + \hvfloat@typeout{do@hvFloat@doubleFULLPAGE@CaptionAfterTwoCol: insert newpage} % \global\savebox{\hvObjectBox}{\ifhv@useOBox\usebox{\hvOBox}\else\hv@floatObject\fi}% \thispagestyle{empty}% \vspace*{\the\dimexpr-1in-\voffset-\topmargin-\headheight-\headsep-\baselineskip-\parskip+1.5\lineskip}% -0.5\paperheight+0.5\ht\hvObjectBox @@ -1906,7 +2039,7 @@ \ifx\hv@label\@empty\else\label{\hv@label-cap}\fi \end{\hv@floatType*}% }% - \hv@typeout{do@hvFloat@doubleFULLPAGE@CaptionAfterTwoCol: afterpage done} % + \hvfloat@typeout{do@hvFloat@doubleFULLPAGE@CaptionAfterTwoCol: afterpage done} % } \def\do@hvFloat@doubleFULLPAGE@CaptionOther#1{% @@ -2013,6 +2146,8 @@ } \def\setPageObject{% + \hvfloat@typeout{>>>> setPageObject/start environment ...}% + \afterpage{\checkoddpage}% \ifhv@star \begin{\hv@floatType*}[p]% \else @@ -2021,25 +2156,32 @@ \hv@tempcnt=\@floatpenalty% suppress "float too big" message \hfuzz=\maxdimen \expandafter\hvFloatSet\expandafter{\hv@save@setting}% - \ifhv@FULLPAGE + \ifhv@FULLPAGE + \hvfloat@typeout{>>>> setPageObject/FULLPAGE}% \@floatpenalty=\z@% no message that float too large \vspace*{\the\dimexpr-1in-\voffset-\topmargin-\headheight-\headsep}%-0.5\baselineskip% - \checkoddpage \if@twoside + \hvfloat@typeout{>>>> setPageObject/FULLPAGE/twoside}% \ifoddpage + \hvfloat@typeout{>>>> setPageObject/FULLPAGE/twoside/oddpage (\thepage)}% \hspace*{\the\dimexpr-\oddsidemargin-\parindent-1in}% \else + \hvfloat@typeout{>>>> setPageObject/FULLPAGE/twoside/evenpage (\thepage)}% \hspace*{\the\dimexpr-\evensidemargin-\parindent-1in}% \fi \else + \hvfloat@typeout{>>>> setPageObject/FULLPAGE/oneside}% \hspace*{\the\dimexpr-\oddsidemargin-\parindent-1in}% \fi + \hvfloat@typeout{>>>> setPageObject/FULLPAGE/set pagestyle empty}% \AtBeginShipoutNext{\thispagestyle{empty}}% to prevent heading/footer % \afterpage{\AddToHookNext{shipout/after}{\thispagestyle{empty}}}% \usebox\hvObjectBox \else + \hvfloat@typeout{>>>> setPageObject/NO FULLPAGE}% \usebox\hvObjectBox \fi + \hvfloat@typeout{>>>> setPageObject/stop environment}% \ifhv@star \end{\hv@floatType*}% \else diff --git a/macros/latex/contrib/moodle/README.md b/macros/latex/contrib/moodle/README.md index 30e1b4a976..f6d06f6f5f 100644 --- a/macros/latex/contrib/moodle/README.md +++ b/macros/latex/contrib/moodle/README.md @@ -10,11 +10,11 @@ part of all distributions of LaTeX version 2005/12/01 or later. Original contents (2016): [Anders O.F. Hendrickson](/author/hendrickson) ([contact](mailto:anders.o.f.hendricksonATgmail.com)) -2019-2021: [Matthieu Guerquin-Kern](/author/guerquin-kern) ([contact](mailto:guerquin-kernATcrans.org)) +2019-2023: [Matthieu Guerquin-Kern](/author/guerquin-kern) ([contact](mailto:guerquin-kernATcrans.org)) # Contents -This work, under version number 0.8, consists of the files +This work, under version number 1.0, consists of the files [`moodle.dtx`](/tex-archive/macros/latex/contrib/moodle/moodle.dtx), [`moodle.ins`](/tex-archive/macros/latex/contrib/moodle/moodle.ins), and the derived documentation file [`moodle.pdf`](/tex-archive/macros/latex/contrib/moodle/moodle.pdf). @@ -24,7 +24,7 @@ Details on how to generate derived files from the sources are given in Section " A TDS archive [moodle.tds.zip](http://mirrors.ctan.org/install/macros/latex/contrib/moodle.tds.zip) is also available to be conveniently expanded in your local texmf directory. -It contains the derived file `moodle.sty` and a set of test files. +It contains the derived files `moodle.sty`, `moodle.pdf` and a set of test files. # Requirements @@ -38,25 +38,35 @@ This package (`moodle.sty`) requires the following packages: - [`xpatch`](pkg/xpatch), - [`array`](pkg/array), - [`ifplatform`](/pkg/ifplatform), +- [`shellesc`](pkg/shellesc), +- [`readprov`](pkg/readprov), - [`fancybox`](pkg/fancybox), and - [`getitems`](pkg/getitems). -In order to manipulate images, the package relies on the following external tools: +The package option `handout` requires: +- [`randomlist`](pkg/randomlist). + +In order to manipulate images, the package relies on the following tools: +- [`graphics`](pkg/graphics), - [GhostScript](www.ghostscript.com), - [ImageMagick](www.imagemagick.org), and - [optipng](http://optipng.sourceforge.net/). -In addition, to compile the documentation, the following LaTeX packages are +Instead, to compile the documentation, the following LaTeX packages are necessary: - [`amssymb`](pkg/amssymb), -- [`metalogo`](pkg/metalogo), -- [`multirow`](pkg/multirow), -- [`threeparttable`](pkg/threeparttable), +- [`babel`](pkg/babel), - [`booktabs`](pkg/booktabs), +- [`changelog`](pkg/changelog), +- [`dtxdescribe`](pkg/dtxdescribe), +- [`eurosym`](pkg/eurosym), - [`hyperref`](pkg/hyperref), +- [`longtable`](pkg/longtable), +- [`minted`](pkg/minted), +- [`microtype`](pkg/microtype), - [`tikz`](pkg/tikz), -- [`minted`](pkg/minted), and -- [`microtype`](pkg/microtype). +- [`threeparttable`](pkg/threeparttable), and +- [`varioref`](pkg/varioref). # Building @@ -64,8 +74,11 @@ The file `moodle.sty` can be generated using the command ```bash latex moodle.ins ```` -The documentation file `moodle.pdf` can be generated by running twice the command +The documentation file `moodle.pdf` can be generated by running +successively the three commands: ```bash -lualatex -shell-escape moodle.dtx +lualatex -halt-on-error -shell-escape moodle.dtx +makeindex -s gglo.ist -o moodle.gls moodle.glo +lualatex -halt-on-error -shell-escape moodle.dtx ``` (n.b. the requirements in the previous section) diff --git a/macros/latex/contrib/moodle/moodle.dtx b/macros/latex/contrib/moodle/moodle.dtx index 9e932fb576..9f20c6c95a 100644 --- a/macros/latex/contrib/moodle/moodle.dtx +++ b/macros/latex/contrib/moodle/moodle.dtx @@ -1,8 +1,8 @@ % \iffalse meta-comment % % moodle.dtx -% Copyright 2016 by Anders O.F. Hendrickson (anders.o.f.hendrickson AT gmail.com) -% and 2019-2021 by Matthieu Guerquin-Kern (guerquin-kern AT crans.org). +% Copyright 2016 by Anders O.F. Hendrickson (anders.o.f.hendrickson AT gmail DOT com) +% and 2019-2021 by Matthieu Guerquin-Kern (guerquin-kern AT crans DOT org). % % This work may be distributed and/or modified under the % conditions of the LaTeX Project Public License, either version 1.3 @@ -13,7 +13,7 @@ % version 2005/12/01 or later. % % This work has the LPPL maintenance status `maintained'. -% +% % The Current Maintainer of this work is Matthieu Guerquin-Kern. % % This work consists of the files moodle.dtx and moodle.ins @@ -28,38 +28,45 @@ %\NeedsTeXFormat{LaTeX2e}[1999/12/01] %\ProvidesPackage{moodle} %<*package> - [2021/02/07 v0.9 Moodle quiz XML generation] + [2023/01/28 v1.0 Moodle quiz XML generation] % % %<*driver> -\documentclass[a4paper]{ltxdoc} +\documentclass[10pt,a4paper]{ltxdoc} +%\usepackage[draft]{moodle} \usepackage{iftex} \ifPDFTeX \usepackage[utf8]{inputenc} % necessary \usepackage[T1]{fontenc} % necessary - \usepackage[protrusion=true,expansion]{microtype} - \usepackage[ttscale=.875]{libertine} + \usepackage{libertine} + \usepackage[scaled=0.83]{beramono} \else % assuming LuaLaTeX or XeLaTeX \usepackage{fontspec} - \setmainfont[Mapping=tex-text]{Linux Libertine O} + \setmainfont{Linux Libertine O} \fi -%\usepackage{moodle}[2020/07/09] -\usepackage{amssymb,metalogo,multirow,threeparttable,booktabs} -\usepackage{hyperref,tikz,minted,changelog} -\usetikzlibrary{arrows,positioning,decorations.text} +\usepackage{microtype} +\usepackage{dtxdescribe,varioref} +\addtolength\marginparwidth{30pt} +\addtolength\oddsidemargin{20pt} +\addtolength\evensidemargin{20pt} +\usepackage[main=english,french,german]{babel} +\usepackage{amssymb,threeparttable,booktabs} +\usepackage{eurosym,longtable,tikz,minted,changelog} +%\usepackage[pdfpagelabels]{hyperref}% now loaded by ltxdoc +\usetikzlibrary{arrows,positioning,decorations.text,calc} %\usemintedstyle{Wombat} -\EnableCrossrefs +\EnableCrossrefs \CodelineIndex \OnlyDescription \RecordChanges +\setcounter{IndexColumns}{2} \begin{document} \DocInput{moodle.dtx} - %\PrintChanges \end{document} % % \fi % -% \CheckSum{7729} ^^A Comment \OnlyDescription above to adjust +% \CheckSum{10269} ^^A Comment \OnlyDescription above to adjust % % \CharacterTable % {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z @@ -81,170 +88,199 @@ % \GetFileInfo{\jobname.dtx} % % \DoNotIndex{\newcommand,\newenvironment,\def} -% % -% \title{The \textsf{moodle} package: \\ -% generating Moodle quizzes via \LaTeX% -% \thanks{This document -% corresponds to \textsf{moodle.sty}~\fileversion, dated \filedate.}} -% \author{Anders Hendrickson\footnote{original author of the package (\texttt{v0.5}), inactive.}\\ -% \texttt{anders.o.f.hendrickson AT gmail.com} \and -% Matthieu Guerquin-Kern\footnote{current maintainer, author of the updates (\texttt{v0.6} -% to \texttt{v0.9}), partially funded in 2019 by \href{https://www.ensea.fr/en/}{ENSEA Graduate School}, France.}\\ -% \href{mailto:guerquin-kern AT crans.org}{guerquin-kern AT crans.org}} -% \date{February 7, 2021} -% +% \providecommand\TikZ{\mbox{Ti\emph{k}Z}}% +% \providecommand\Moodle{\mbox{\brand{Moodle}}}% +% \providecommand\LMS{\mbox{\acro{LMS}}}% +% \providecommand\XML{\mbox{\acro{XML}}}% +% +% \title{% +% The \pkg{moodle} package: \\ +% generating \Moodle\ quizzes via \LaTeX% +% \thanks{This document corresponds to \pkg{moodle.sty}~\fileversion, dated \filedate.} +% }% +% +% \author{% +% Anders Hendrickson\footnote{original author of the package (\texttt{v0.5}), inactive.}\\ +% \texttt{anders.o.f.hendrickson AT gmail DOT com} \and +% Matthieu Guerquin-Kern\footnote{current maintainer, % +% author of the updates (\texttt{v0.6} to \texttt{\fileversion}).}\\ +% \href{mailto:guerquin-kernATcransDOTorg}{\texttt{guerquin-kern AT crans DOT org}}% +% }% +% +% \date{\today} +% % \maketitle % -% \providecommand\TikZ{Ti\emph{k}Z} +% \begin{abstract} +% This document describes the \pkg{moodle} package, made for writing \Moodle\ +% quizzes in \LaTeX. In addition to typesetting the quizzes for proofreading or +% giving to students as handout, the package generates an \XML\ file to be uploaded +% to a \Moodle\ server. +% \end{abstract} +% +% \tableofcontents % -% \section{Motivation} +% \section{Introduction} +% \subsection{Motivation} % -% The acronym Moodle stands for ``Modular Object-Oriented Dynamic Learning Environment.'' -% It is an open source learning management system (LMS) employed by many universities, +% The acronym \acro{Moodle} stands for ``Modular Object-Oriented Dynamic Learning Environment.'' +% It is an open source learning management system (\LMS) employed by many universities, % colleges, and high schools to provide digital access to course materials, such as % notes, video lectures, forums, and the like; see -% \url{https://moodle.com/moodle-lms/} for more information. +% \url{https://moodle.com/moodle-lms/} for more information. % One of the many useful -% features of Moodle is that mathematical and scientific notation can be entered in +% features of \Moodle\ is that mathematical and scientific notation can be entered in % \LaTeX\ or \TeX\ code, which will be typeset either through a built-in \TeX\ filter % or by invoking MathJax. -% +% % For instructors who want to give students frequent feedback, -% but lack the time to do so, a particularly valuable module in Moodle -% is the \emph{quiz}. A Moodle quiz can consist of several different types of -% questions---not only multiple choice or true/false questions, but also -% questions requiring a short phrase or numerical answer, and even essay -% questions. All but the essay questions are automatically graded by the -% system, and the instructor has full control over how often the quiz may be +% but lack the time to do so, a particularly valuable module in \Moodle\ +% is the \emph{quiz}. A \Moodle\ quiz can consist of several different types of +% questions---not only multiple choice or true/false questions, but also +% questions requiring a short phrase or numerical answer, and even essay +% questions. All but the essay questions are automatically graded by the +% system, and the instructor has full control over how often the quiz may be % attempted, its duration, and so forth. Feedback can be tailored to specific % mistakes the student makes. -% -% All these features make Moodle quizzes very useful tools for instructors +% +% All these features make \Moodle\ quizzes very useful tools for instructors % who have access to them. -% Unfortunately, the primary way to create or edit a Moodle quiz +% Unfortunately, the primary way to create or edit a \Moodle\ quiz % is through a web-based interface that can be slow to operate. % To users of \LaTeX, accustomed to the speed of typing source code on % a keyboard alone, the agonizing slowness of switching between mouse and keyboard % to navigate a web form with its myriad dropdown boxes, radio buttons, -% compounded with a perceptible time lag as one's Moodle server responds to requests, -% can produce a very frustrating experience. Moreover, editing is entirely +% compounded with a perceptible time lag as one's \Moodle\ server responds to requests, +% can produce a very frustrating experience. Moreover, editing is entirely % impossible without network access. -% -% Once the quiz is written, there is no easy way to view and proofread all the +% +% Once the quiz is written, there is no easy way to view and proofread all the % information of which it is made. Each question is edited on a separate webpage, -% which is so full of options that it cannot be viewed on a single screen. -% An instructor has to spend much time checking over the newly created quiz in +% which is so full of options that it cannot be viewed on a single screen. +% An instructor has to spend much time checking over the newly created quiz in % order to be confident there are no errors. -% +% % Added to all this is the frustration of managing graphics. % If a question requires an image---say, asking a calculus student to interpret % the graph of a function---the image must first be produced as a standalone file -% (e.g., in JPG or PNG format), uploaded to Moodle, and then chosen in a web-based -% HTML editor. Great is the vexation of the instructor who decided to alter a -% question, as there are more and more possibilities of error whenever multiple +% (e.g., in \JPG\ or \PNG\ format), uploaded to \Moodle, and then chosen in a web-based +% \HTML\ editor. Great is the vexation of the instructor who decided to alter a +% question, as there are more and more possibilities of error whenever multiple % files must be kept synchronized. -% -% Users of \LaTeX\ are also accustomed to the speed and flexibility that +% +% Users of \LaTeX\ are also accustomed to the speed and flexibility that % comes from defining their own macros, which may be as brief as writing -% |\R| instead of |\mathbb{R}| +% \cmd{\R} instead of |\mathbb{R}| % or as complex as macros that generate entire paragraphs of text. -% The Moodle editor, by contrast, requires you to type |\mathbb{R}| +% The \Moodle\ editor, by contrast, requires you to type |\mathbb{R}| % every single time you want $\mathbb{R}$. -% +% % Finally, there is the question of archiving and reusing one's work. -% Much, much work goes into creating Moodle quizzes, which then reside -% on a Moodle server somewhere in the cloud in a format neither easily browsable +% Much, much work goes into creating \Moodle\ quizzes, which then reside +% on a \Moodle\ server somewhere in the cloud in a format neither easily browsable % nor easily modifiable. -% -% \LaTeX\ itself has the power to solve all these difficulties: +% +% \LaTeX\ itself has the power to solve all these difficulties: % it is swift to edit and swifter to compile a \LaTeX\ document, -% and the PDF may be previewed onscreen or printed out for ease of proofreading. +% and the \PDF\ may be previewed onscreen or printed out for ease of proofreading. % Mathematical graphics can be integrated within the main file through \TikZ, % and of course \LaTeX\ macros can be customized. -% Using the present \textsf{moodle} package, -% a quiz author can type a quiz using familiar \LaTeX\ syntax and document +% Using the present \pkg{moodle} package, +% a quiz author can type a quiz using familiar \LaTeX\ syntax and document % structure. Upon compilation, \LaTeX\ will generate both a well-organized -% PDF that is easy to proofread and an XML file that can be uploaded directly -% to Moodle. The entire process is far faster than using Moodle's own -% web-based editor, makes it easier to catch one's mistakes, -% and the ultimate source code of one's work is a human-readable |.tex| file +% \PDF\ that is easy to proofread and an \XML\ file that can be uploaded directly +% to \Moodle. The entire process is far faster than using \Moodle's own +% web-based editor, makes it easier to catch one's mistakes, +% and the ultimate source code of one's work is a human-readable \filenm{.tex} file % that can be archived, versioned, browsed, and edited offline. -% -% Strictly speaking, the \textsf{moodle} package does not generate quizzes: -% it generates question banks that can be imported in the LMS. The teacher +% +% Strictly speaking, the \pkg{moodle} package does not generate quizzes: +% it generates question banks that can be imported in the \LMS. The teacher % still needs to compose manually a quiz from the question banks. Hopefully, -% two Moodle features supported by the package make this task easier: +% two \Moodle\ features supported by the package make this task easier: % categories and tags. % -% In this documentation the LMS is referred to as Moodle (uppercase M and -% roman font) while the \LaTeX\ package that is documented here is referred -% to as \textsf{moodle} (all lower case and sans serif font). -% -% \section{Workflow} -% The process of creating a quiz in Moodle using this package is depicted in -% Figure~\ref{fig:workflow}. It follows a few steps: -% \begin{enumerate} -% \item Write a \LaTeX\ document using |\usepackage{moodle}| as described -% below. -% \item Compile the document to PDF using pdf\LaTeX\, \XeLaTeX\ or \LuaLaTeX. -% This will also produce the file \meta{jobname}|-moodle.xml|. -% \item Open Moodle, navigate to the desired course, -% and under ``Question bank'' select ``Import.'' -% \item Select ``Moodle XML format,'' choose the XML file to upload, and press ``Import.'' -% \item After Moodle verifies that the questions have been imported correctly, -% you may add them to your quizzes. -% \end{enumerate} -% \begin{figure}[tbp] +% In this documentation the \LMS\ is referred to as \Moodle\ +% (uppercase letters and roman font) while the \LaTeX\ package +% is referred to as \pkg{moodle} (lower case and sans serif font). +% +% \subsection{Workflow} +% +%% \begin{figure}[bp] % \centering -% \begin{tikzpicture}[node distance=1,auto,bend -% angle=45,box/.style={rectangle,draw=blue!50,rounded corners=3,top -% color=white,bottom color=black!20,thick,align=center,text +% \begin{tikzpicture}[node distance=1,auto,bend +% angle=45,box/.style={rectangle,draw=blue!50,rounded corners=3,top +% color=white,bottom color=black!20,thick,align=center,text % width=2.5cm},elmt/.style={font=\itshape,align=left}, % cmnt/.style={font=\footnotesize,align=center}, % bigcmnt/.style={font=\normalsize,align=center},pre/.style={<-,>=stealth',thick}, % post/.style={->,>=stealth',thick}, prepost/.style={<->,>=stealth',thick}] % \draw[white,fill=orange!20,rounded corners=10] -% (-1.5,-.7)--++(0,1.4)--++(10.3,0)--++(0,-3.3)--++(-6.7,0)--++(-.25,1.725)--cycle; -% \node[orange!80!black,above] (dev) at (7.5,-2.6) {\textit{Developpement}}; +% (-1.5,-.7)--++(0,1.4)--++(10.3,0)--++(0,-2.3)--++(-6.7,0)--++(-.25,.725)--cycle; +% \node[orange!80!black,above] (dev) at (7.5,-1.6) {\textit{Development}}; % \fill[green,fill opacity=.2,rounded corners=10] -% (-1.5,.7)--++(3,0)--++(0.5,-3.4)--++(6.8,0)--++(0,-2)--++(-10.3,0)--cycle; -% \node[green!80!black,below] (dev) at (7.5,-2.7) {\textit{Publishing}}; -% \node[box,text width=2cm] (tex) {\texttt{.tex} source file}; -% \node[rectangle,fill=white,draw,align=center,text +% (-1.5,.7)--++(3,0)--++(0.5,-2.4)--++(6.8,0)--++(0,-3)--++(-10.3,0)--cycle; +% \node[green!80!black,below] (dev) at (7.5,-1.7) {\textit{Publishing}}; +% \node[box,text width=2cm] (tex) {\filenm{.tex} source file}; +% \node[rectangle,fill=white,draw,align=center,text % width=1.5cm,below=of tex] (compfinal) {\LaTeX{}\\ engine}; % \node[rectangle,fill=white,draw,align=center,text width=1.5cm,right=of tex,xshift=4.5cm] % (compdraft) {\LaTeX{}\\ engine}; -% \node[box,right=of compfinal,xshift=.5cm] (pdf) {\texttt{.pdf} file for proofreading}; -% \node[rectangle,fill=white,draw,align=center,text width=2cm,below=of compfinal] (extern) +% \draw ($(tex)!.5!(compdraft)+(0,-.7)$) node[box] (pdf) {\filenm{.pdf} file for proofreading}; +% \node[box,below=of pdf,yshift=.1cm] (pdfhandout) {\filenm{.pdf} file for students}; +% \node[rectangle,fill=white,draw,align=center,text width=2cm,below=of compfinal] (extern) % {Picture\\processing}; -% \draw (pdf|-extern) node[box,anchor=center] (xml) {\texttt{.xml} file\\\footnotesize(pictures embedded)}; +% \draw (pdf|-extern) node[box,anchor=center] (xml) {\filenm{.xml} file\\\footnotesize(pictures embedded)}; +% \draw (compdraft|-pdfhandout) +% node[rectangle,fill=white,draw,align=center,text width=1.5cm,anchor=center] (students) +% {Students}; % \draw (compdraft|-xml) -% node[rectangle,fill=white,draw,align=center,text width=1.5cm,anchor=center] (moodle) -% {Moodle\\Server}; -% \draw (tex) edge [post,bend right=10] node[cmnt,pos=.5,left] {\texttt{final}} (compfinal); -% \draw (tex) edge [post,bend left=10] node[cmnt,pos=.5,below] {\texttt{draft}} (compdraft); +% node[rectangle,fill=white,draw,align=center,text width=1.5cm,anchor=center] (moodle) +% {\Moodle\ \\Server}; +% \draw (tex) edge [post,bend right=10] node[cmnt,pos=.5,left] {\optn{final}} +% node[cmnt,pos=.5,right] {\optn{handout}} (compfinal); +% \draw (tex) edge [post,bend left=10] node[cmnt,pos=.5,below] {\optn{draft}} (compdraft); % \draw (compdraft) edge [post,bend left=10] (pdf); -% \draw (compfinal) edge [post] (pdf); -% \draw (compfinal) edge [post,bend left=10] (xml); -% \draw (compfinal) edge [post,bend right=30] node[cmnt,black!40,pos=.5,text width=1cm,left] -% {\texttt{tikz}, \texttt{.png}, \texttt{.jpg}} (extern); -% \draw (extern) edge [post,green,bend right=30] node[cmnt,black!40,pos=.5,below,right] -% {\texttt{base64}} (compfinal); -% \draw (pdf) edge [post,red,bend right=15] node[sloped,cmnt,pos=.5,above] {improve} (tex); +% \draw (compfinal) edge [post] node[cmnt,pos=.5,above,sloped] +% {\footnotesize(\optn{handout})} (pdfhandout); +% \draw[dashed] (compfinal) edge [post] (pdf); +% \draw (compfinal) edge [post,bend left=0] node[cmnt,pos=.55,below,sloped] +% {\footnotesize(\optn{final})} (xml); +% \draw (compfinal) edge [post,bend right=15] node[cmnt,black!40,pos=.5,text width=1cm,left] +% {\optn{tikz}, \filenm{.png}, \filenm{.jpg}} (extern); +% \draw (extern) edge [post,green,bend right=15] node[cmnt,black!40,pos=.5,below,right] +% {\prog{base64}} (compfinal); +% \draw (pdf) edge [post,red,bend left=15] node[sloped,cmnt,pos=.5,above] {improve} (tex); +% \draw (pdfhandout) edge [post,red] node[cmnt,pos=.5,below] {distribute} (students); % \draw (xml) edge [post,red] node[cmnt,pos=.5,below] {import} (moodle); % \end{tikzpicture} -% \caption{Block diagram describing a typical workflow using the \textsf{moodle} package.} +% \caption{Block diagram describing a typical workflow using the \pkg{moodle} package.} % \label{fig:workflow} % \end{figure} % +% The process of creating a quiz in \Moodle\ using this package is depicted in +% Figure~\vref{fig:workflow}. It follows a few +% steps: +% \begin{enumerate} +% \item Write a \LaTeX\ document using |\usepackage{moodle}| as described +% below. +% \item Compile the document to \PDF\ using pdf\LaTeX\ (\acro{ASCII} characters only), +% \XeLaTeX, or \LuaLaTeX. +% This will also produce the file \meta{jobname}\filenm{-moodle.xml}. +% \item navigate to your course on \Moodle\ and, under ``Question bank'', select ``Import.'' +% \item Select ``Moodle \XML\ format,'' choose the \XML\ file to upload, and press ``Import.'' +% \item After \Moodle\ verifies that the questions have been imported correctly, +% you may add them to your quizzes. +% \end{enumerate} +% % \section{Usage}\label{sect:usage} % The following pages presume the reader already has some familiarity with creating -% and editing Moodle quizzes through the web interface. -% Users that are not familiar with Moodle quizzes can learn more in the Moodle -% documentation. For instance, \url{https://docs.moodle.org/310/en/Question_types}. +% and editing \Moodle\ quizzes through the web interface. +% Users that are not familiar with \Moodle\ quizzes can learn more in the \Moodle\ +% documentation. For instance, \url{https://docs.moodle.org/en/Question_types}. % -% The |xkeyval| package is used to provide a key-value interface. +% The \pkg{xkeyval} package is used to provide a key-value interface. % % \subsection{Example Document} % @@ -256,6 +292,8 @@ % \newcommand\monomial[1]{x^{#1}} % \newcommand\sillyanswer{What!?} % \begin{document} +% Quiz generated \LaTeX's \textsf{moodle} (\moodleversion, \moodledate). +% Import the derived file \texttt{\jobname-moodle.xml} on Moodle. % \begin{quiz}{My first quiz} % \begin{numerical}[points=2]{Basic addition} % What is $8+3$? @@ -277,103 +315,132 @@ % \end{document} % \end{VerbatimOut} % \inputminted[gobble=2,frame=lines]{latex}{minted.doc.out} -% Key features to note in this first example are that a |quiz| environment +% Key features to note in this first example are that a \env{quiz} environment % contains several question environments. -% Each question takes a name as a mandatory argument, +% Each question takes a name as a mandatory argument, % and it may also take optional key-value arguments within brackets. % The question environments resemble list environments -% such as |itemize| or |enumerate|, in that answers are set off by -% |\item|'s, but the question itself is the text that occurs before -% the first |\item|. +% such as \env{itemize} or \env{enumerate}, in that answers are set off by +% \cmd{\item}'s, but the question itself is the text that occurs before +% the first \cmd{\item}. % -%^^A \DescribeMacro{\moodleregisternewcommands}\DescribeMacro{\htmlregister} -%^^A Calling |\moodleregisternewcommands| tells the package to treat +%^^A \DescribeMacro[moodle]{\moodleregisternewcommands} +%^^A \DescribeMacro[moodle]{\htmlregister} +%^^A Calling \cmb{\moodleregisternewcommands} tells the package to treat %^^A specifically the macros defined subsequently. -%^^A This way, the macros that Moodle's \LaTeX\ renderer does not know -%^^A about can be properly expanded in the XML file. -%^^A This mechanism applies only to the macros defined using |\newcommand| +%^^A This way, the macros that \Moodle's \LaTeX\ renderer does not know +%^^A about can be properly expanded in the \XML\ file. +%^^A This mechanism applies only to the macros defined using \cmd{\newcommand} %^^A and \emph{without} optional argument. -%^^A Using |\htmlregister|\marg{macroname}, lets you declare a specific +%^^A Using \cmd{\htmlregister}\marg{macroname}, lets you declare a specific %^^A macro for expansion. This mechanism, instead, also applies to the -%^^A macros defined using \TeX's primitive |\def|. -% +%^^A macros defined using \TeX's primitive \cmd{\def}. +% % \subsection{Package Options} -% \DescribeMacro{draft} -% \DescribeMacro{final} -% If the package option |draft| is invoked, by calling -% |\usepackage[draft]{moodle}| or |\documentclass[draft]{...}|, then no -% XML file will be generated. This is especially useful while editing a -% quiz containing graphics, so as to avoid the time spent converting -% image files. The package option |final| might be useful if one wants -% to avoid the option |draft| to be inherited from the |documentclass|. -% -% \DescribeMacro{handout} -% If the package option |handout| is invoked (|\usepackage[handout]{moodle}|), -% the PDF file is generated clean from teacher-only information (answers, -% points, penalty, feedback, tags) and, hence, can be given to students for -% classroom work. In particular, as would Moodle do, answers in -% \texttt{matching} questions are shuffled and the option \texttt{shuffle} -% triggers the shuffling of choices offered (\texttt{multi} and -% \texttt{matching}). This is achieved thanks to the package -% \texttt{randomlist}, loaded if the option is invoked. -% The XML file is generated as usual. -% -% \DescribeMacro{nostamp} +% +% \DescribeOption[moodle]{draft} If the package option \optn{draft} is invoked, +% by calling |\usepackage[draft]{moodle}| or |\documentclass[draft]{...}|, +% then no \XML\ file will be generated. This is especially useful while +% editing a quiz containing graphics, so as to avoid the time spent +% converting image files. +% \DescribeOption[moodle]{final} The package option \optn{final} might be +% useful if one wants to avoid the option \optn{draft} to be inherited from +% the \cmd{\documentclass}. +% +% \DescribeOption[moodle]{handout} +% If the package option \optn{handout} is invoked (|\usepackage[handout]{moodle}|), +% the \PDF\ file is generated clean from teacher-only information (answers, +% points, penalty, feedback, tags) and, hence, can be given to students +% for classroom work. In particular, as would \Moodle\ do, answers in +% \env{matching} questions are shuffled and the option \optn{shuffle} +% triggers the shuffling of choices offered (\env{multi} and +% \env{matching}). This is achieved thanks to the package +% \pkg{randomlist}, loaded if the option is invoked. The seed of its +% random generator is controlled by the macro \cmd{\RLsetrandomseed}\marg{integer} +% \DescribeMacro[randomlist]{\RLsetrandomseed}. +% This option does not interfere with the generation of the \XML\ file. +% +% \DescribeOption[moodle]{samepage}^^A\watchout[experimental] +% If the package option \optn{samepage} is invoked, preferably used together +% with \optn{handout} (|\usepackage[handout,samepage]{moodle}|), the package +% will try to keep every question on the same page. Very bad spacing +% can result from this. +% This option is experimental. Subquestions inside a \env{cloze} question +% are protected but the \env{cloze} question itself is not protected. +% +% \DescribeOption[moodle]{nostamp} % By default, the package will output a stamp as a comment in the XML -% file. This stamp contains information gathered about the TeX engine, -% the operating system used and the package version. For instance: +% file. This stamp contains information gathered about the \TeX\ engine, +% the platform used and the package version. For instance:% % \begin{quote}\small -% ||\\ -% || +% \makeatletter\def\today{\the\year-\two@digits\month-\two@digits\day}\makeatother +% \newcount\hour\hour=\time +% \divide\hour by 60\relax +% \newcount\minute\minute=\hour +% \multiply\minute by -60\relax +% \advance\minute by \time\relax +% ||\\ +% ||\\ +% || % \end{quote} -% The package option -% |nostamp| prevents this stamp to be written in the XML file. -% -% \DescribeMacro{section} -% \DescribeMacro{section*} -% \DescribeMacro{subsection} -% \DescribeMacro{subsection*} -% If the package option |section| is invoked (|\usepackage[section]{moodle}|), -% then each quiz is represented by a different \LaTeX\ section. Starred -% variants correspond to unnumbered sections or subsections. To preserve -% compatibility with Version 0.5 of this package, the default is |subsection*|. -% Consequently, |\usepackage{moodle}| is equivalent to -% |\usepackage[subsection*]{moodle}|. -% -% \DescribeMacro{tikz} The package option \texttt{tikz} is described in section -% \ref{subsec:tikz}. -% -% \DescribeMacro{svg} The package option \texttt{svg} is described in section -% \ref{subsec:svg}. +% The package option |nostamp| prevents this +% stamp from being written in the \XML\ file. +% +% \DescribeOption[moodle]{section}\DescribeOption[moodle]{subsection} +% \DescribeOption[moodle]{section*}\DescribeOption[moodle]{subsection*} +% The package options \optn{section} and \optn{subsection} place each quiz as a +% new section or subsection, respectively. Starred variants +% correspond to unnumbered sections or subsections. To preserve +% compatibility with Version 0.5 of this package, the default is +% \optn{subsection*}. Consequently, |\usepackage[subsection*]{moodle}| is equivalent +% to |\usepackage{moodle}| . +% +% \DescribeOption[moodle]{tikz} +% The package option \optn{tikz} is described in Section~\vref{subsec:tikz}. +% +% \DescribeOption[moodle]{svg}^^A\watchout[experimental] +% The package option \optn{svg} is described in Section~\vref{subsec:svg}. +% +% \DescribeOption[moodle]{LMS}\texttt{=}\meta{\texttt{X.Y}} +% \DescribeDefault{warn only} lets you specify version numbers +% for the target \Moodle\ LMS instance (\texttt{X} and \texttt{Y} are +% major and minor version integers). When version numbers are provided, +% the use of recent quiz features is secured by a compatibility +% check and \pkg{moodle} raises relevant errors. The XML stamp +% (see \optn{nostamp} above) also mentions \Moodle's target version. +% By default, \pkg{moodle} will just issue warnings when recent quiz +% features are used. % % \subsection{Quiz and Question Environments} -% -% \DescribeMacro{quiz} -% A |.tex| document to generate Moodle quizzes contains one or more -% |quiz| environments, within which various question environments are nested. -% The required argument to the |quiz| environment names a category for Moodles +% +% A \filenm{.tex} document to generate \Moodle\ quizzes contains one or more +% \env{quiz} environments. +% +% \DescribeEnv[moodle]{quiz}\oarg{common options}\marg{category name} +% defines a quiz, within which various question environments are nested. +% The mandatory argument, \meta{category name}, names a category for \Moodle's % ``question bank'': after import, the questions defined in this environment % will be gathered in this category. -% \begin{center} -% |\begin{quiz}|\oarg{options}\marg{category name}% -% \end{center} -% There are no |quiz|-specific options, -% but any \meta{options} set with |\begin{quiz}| -% will be inherited by all questions contained within that |quiz| environment. -% -% \DescribeMacro{\moodleset} -% Options may also be set outside question environments with -% |\moodleset|\marg{options}; these changes are local to \TeX-groups. -% -% \DescribeMacro{\setcategory}\DescribeMacro{\setsubcategory} -% Although the |quiz| environment defines a category by its own, one can change -% the current category inside the quiz environment and in between questions, -% using the macro |\setcategory|\marg{category name}. A subcategory can also be -% defined with |\setsubcategory|\marg{subcategory name}. The categories and -% subcategories are reflected in the PDF file as sections, subsections, or -% subsubsections, in accordance to the package setting |section|, |section*|, -% |subsection|, or |subsection*|. -% +% Using the optional argument, options can be set at the quiz level. +% Although there are no \env{quiz}-specific options, any \meta{common options} set +% with the quiz will be inherited by all questions contained within that environment. +% +% \DescribeMacro[moodle]{\moodleset}\marg{options} +% is to be used to set options outside question environments; the option +% settings are local to \TeX-groups. +% +% \DescribeMacro[moodle]{\setcategory}\marg{category name} +% is to be used to change the current category inside a quiz environment and +% in between questions. Note that the \env{quiz} environment defines a category +% by its own. +% +% \DescribeMacro[moodle]{\setsubcategory}\marg{subcategory name} +% does the same with subcategories. + +% The categories and subcategories are reflected in the \PDF\ file as sections, subsections, or +% subsubsections, in accordance to the package setting \optn{section}, \optn{section*}, +% \optn{subsection}, or \optn{subsection*}. +% % The syntax for each question environment is % \begin{quote} % |\begin|\marg{question type}\oarg{question options}\marg{question name} \\ @@ -386,28 +453,29 @@ % The meaning of the \meta{item}s varies depending on the question type, % but they usually are answers to the question. % Details will be given below. -% +% % The following key-value options may be set for all questions: -% -% \DescribeMacro{points}\DescribeMacro{default grade} +% +% \DescribeKey[quiz,question]{points}\DescribeDefault{1} +% \DescribeKey[quiz,question]{default grade} % By default, each question is worth 1 point on the quiz. -% This may be changed with the |points| key or its synonym, |default grade|; -% for example, |points=2| makes that question worth two points. -% -% \DescribeMacro{penalty} -% The |penalty| is the fraction of points that is taken off for each wrong attempt; +% This setting may be changed with the \optn{points} key or its synonym, \optn{default grade}. +% For example, \optn{points=2} makes that question worth two points. +% +% \DescribeKey[quiz,question]{penalty}\DescribeDefault{0.1} +% The \optn{penalty} is the fraction of points that is taken off for each wrong attempt; % it may be set to any value between 0 and 1. -% The default is |penalty=0.10|. -% -% \DescribeMacro{fraction} +% +% \DescribeKey[answer]{fraction}^^A\DescribeDefault{0} % In most question types, it is possible to designate some answers as being % worth partial credit---that is, some fraction of a completely correct answer. -% The |fraction| key may be set to any of the values given in Table~\ref{tab:fraction}, -% from |0| (entirely wrong) to |100| (entirely correct). -% +% The \optn{fraction} key may be set to any of the values given in Table~\vref{tab:fraction}, +% from \texttt{0} (entirely wrong) to \texttt{100} (entirely correct). +% % \begin{table}[tbp] % \centering -% \caption{\href{https://github.com/moodle/moodle/blob/MOODLE\_310\_STABLE/question/engine/bank.php\#L339}{Valid positive options} for the \texttt{fraction} key: $100\cdot(p/q)$.} +% \caption{\href{https://github.com/moodle/moodle/blob/MOODLE\_310\_STABLE/question/engine/bank.php\#L339} +% {Admissible positive values} for the \optn{fraction} key outside \env{cloze} environments: $100\cdot(p/q)$.} % \label{tab:fraction} % \footnotesize % \begin{tabular}{l*{10}{l}} @@ -432,38 +500,41 @@ % \bottomrule % \end{tabular} % \end{table} -% In questions where several choices can be selected (see |multi| with the option -% |multiple|), positive fractions must sum up to exactly 100. It is also possible to set +% +% In questions where several choices can be selected (see \env{multi} with option +% \optn{multiple}), positive fractions must add up to exactly 100. It is also possible to set % negative fractions (from -100 to 0) for wrong choices, in order to prevent the % selection of all choices from leading to a good grade. % In this case, the value ranging from -100 to 0 must be the opposite of one of the -% values listed in Table~\ref{tab:fraction}. -% -% \DescribeMacro{fractiontol} -% The package tries to match the |fraction| key to one of the admissible values. -% To this end, the tolerance is controlled by the |fractiontol| key. It defaults -% to |0.01| but may be changed. When no admissible fraction value is matched, the -% package throws an error. -% -% \DescribeMacro{feedback} -% The |feedback| key sets text that will appear to the student after completing the quiz. -% For example, one might set +% values listed in Table~\vref{tab:fraction}. +% +% \DescribeKey[answer]{fractiontol}\DescribeDefault{0.01} +% The package tries to match the \optn{fraction} key to one of the admissible values. +% To this end, the tolerance is controlled by the \optn{fractiontol} key. The default +% value, \texttt{0.01}, may be changed. When no admissible fraction value is matched, the +% package raises an error. +% +% \DescribeKey{feedback} +% The \optn{feedback} key sets text that will appear to the student after completing the quiz. +% For example, one might set % \begin{center} % |feedback={This question might show up in the final exam.}| % \end{center} % The desired feedback should be included in braces. -% -% Two kinds of feedback can be given. If the |feedback| key is set for a -% question, then that feedback will appear to each student regardless of the student's answer. +% +% \DescribeKey[question]{feedback}If the \optn{feedback} key is set for a question, +% then that feedback will appear to each student regardless of the student's answer. +% +% \DescribeKey[answer]{feedback} % Answer-specific feedback (perhaps explaining a common mistake) -% may also be given by setting the |feedback| key \emph{at the individual answer}. +% may also be given by setting the \optn{feedback} key \emph{at the individual answer}. % -% \DescribeMacro{tags} -% The |tags| key sets a list of keywords for the question that will be taken into account -% by Moodle for filtering purposes or classification of questions inside the question bank. +% \DescribeKey{tags} +% The \optn{tags} key sets a list of keywords for the question that will be taken into account +% by \Moodle\ for filtering purposes or classification of questions inside the question bank. % It is possible for instance to build a quiz with questions cherry-picked among the set of % questions holding a particular tag. -% For example, one might set +% For example, one might set % \begin{center} % |tags={easy}| % \end{center} @@ -473,22 +544,27 @@ % |tags={tag1,tag2,{ leading whitespace},{including, comma}}| % \end{center} % -% Tags can be assigned at two levels. If the |tags| key is set at the quiz level, +% \DescribeKey[quiz]{tags} +% If the \optn{tags} key is set at the quiz level, % then that tag list will serve as a default for each question of the quiz. -% Question-specific tags can be assigned by setting the |tags| key \emph{at the question level}. -% The question-level |tags| key overrides eventual quiz-level tags. -% +% +% \DescribeKey[question]{tags} +% Question-specific tags can be assigned by setting the \optn{tags} key \emph{at the question level}. +% The question-level \optn{tags} key overrides eventual quiz-level tags. +% % Users willing to specify a same tag for all questions of the quiz could -% also rely on Moodle's category mechanism. -% +% also consider relying on \Moodle's category mechanism. +% % \subsection{\href{https://docs.moodle.org/en/Question_types}{Question Types}} -% -% We next discuss the various question types supported by \textsf{moodle} +% +% We next discuss the various question types supported by \pkg{moodle} % and the options that may be set. % %\subsubsection{\href{https://docs.moodle.org/en/True/False_question_type}{True/False}} -% -% \DescribeMacro{truefalse} +% +% \DescribeEnv[quiz]{truefalse}\oarg{question options}\marg{question name} +% is an environment that defines a \emph{True/False} question. +% % The syntax for a True/False question is as follows: % \begin{quote} % |\begin{truefalse}|\oarg{question options}\marg{question name} \\ @@ -497,7 +573,7 @@ % \rule{2em}{0pt}|\item| \meta{feedback when ``false" is chosen} \\ % |\end{truefalse}| % \end{quote} -% The correct answer is designated by the asterisk |*| after the |\item|; +% The correct answer is designated by the asterisk \texttt{*} after the \cmd{\item}; % it need not appear first in the list. % % Answer-specific feedback can also be defined as an item option, similarly to @@ -510,47 +586,67 @@ % \end{quote} % Note that, in this example, no feedback is defined for the incorrect answer % ``False": the corresponding item can be omitted. -% +% % With the True/False question type, the |penalty| key has no effect. % -% \subsubsection{\href{https://docs.moodle.org/310/Multiple_Choice_question_type}{Multiple Choice}} -% -% \DescribeMacro{multi} +% \subsubsection{\href{https://docs.moodle.org/en/Multiple_Choice_question_type}{Multiple Choice}} +% \label{subsec:multi} +% +% \DescribeEnv[quiz]{multi}\oarg{question options}\marg{question name} +% is an environment that defines a \emph{Multiple Choice} question. +% % The syntax for a classic multiple choice question, % with only one correct answer, is as follows: % \begin{quote} % |\begin{multi}|\oarg{question options}\marg{question name} \\ % \rule{2em}{0pt}\meta{question text} \\ -% \rule{2em}{0pt}|\item*| \meta{correct answer} \\ -% \rule{2em}{0pt}|\item|\oarg{options} \meta{wrong answer} \\ +% \rule{2em}{0pt}|\item|\oarg{answer options}|*| \meta{correct answer} \\ +% \rule{2em}{0pt}|\item|\oarg{answer options} \meta{wrong answer} \\ % \rule{2em}{0pt}\quad$\vdots$ \\ -% \rule{2em}{0pt}|\item|\oarg{options} \meta{wrong answer} \\ +% \rule{2em}{0pt}|\item|\oarg{answer options} \meta{wrong answer} \\ % |\end{multi}| % \end{quote} -% The correct answer is designated by the asterisk |*| after the |\item|; +% The correct answer is designated by the asterisk \texttt{*} after the \cmd{\item}; % it need not appear first in the list. -% -% -% \DescribeMacro{shuffle} -% The boolean key |shuffle| determines whether Moodle will +% +% +% \DescribeBoolean[multi]{shuffle}\DescribeDefault{true} +% The Boolean key \optn{shuffle} determines whether \Moodle\ will % rearrange the possible answers in a random order. -% Setting |shuffle=false| will guarantee that the answer appear -% in the order they were typed; the default is |shuffle=true|. -% -% \DescribeMacro{numbering} -% Moodle offers different options for numbering the possible answers. -% You may set the |numbering| key to any of the following values, -% which mirror the usual \LaTeX\ syntax: -% |alph|, |Alph|, |arabic|, |roman|, |Roman|, and |none|. -% Calling |numbering=none| produces an unnumbered list of answers. -% The Moodle syntax of |abc|, |ABCD|, |123|, |iii|, and |IIII| is also -% acceptable, -% but note that it requires \emph{four} capital letters to obtain -% upper-case Roman or alphabetic numerals this way. -% -% \DescribeMacro{fraction} -% The |fraction| key can be used to designate some wrong answers -% as being worth partial credit. For example, a question might read thus: +% Setting \optn{shuffle=false} will guarantee that the answers will +% be presented to the student in the order they were typed. +% +% \DescribeKey[multi]{numbering}\DescribeDefault{abc} +% \Moodle\ offers different options for numbering the possible answers. +% You may set the \optn{numbering} key to any of the values listed in +% Table~\vref{tab:numbering_options}. +% \begin{table}[tbp] +% \centering +% \caption{Numbering modalities offered for \env{multi} questions.} +% \label{tab:numbering_options} +% \begin{tabular}{rllllll} +% \toprule +% Sample & a., b., \dots & A., B., \dots & 1., 2., \dots & i., ii., \dots & +% I., II., \dots & $\bullet$ \\ +% \cmidrule(lr){2-2}\cmidrule(lr){3-3}\cmidrule(lr){4-4}\cmidrule(lr){5-5}\cmidrule(lr){6-6} +% \cmidrule(lr){7-7} +% \LaTeX\ syntax & \optn{alph} & \optn{Alph} & \optn{arabic} & \optn{roman} & \optn{Roman} & \optn{none}\\ +% \Moodle\ syntax & \optn{abc} & \optn{ABCD} & \optn{123} & \optn{iii} & \optn{IIII} & \optn{none} \\ +% \bottomrule +% \end{tabular} +% \end{table} +% \optn{numbering=none} produces an unnumbered list of answers. +% Note the \emph{four} capital letters required by \Moodle's syntax +% to obtain upper-case Roman or alphabetic numerals. +% +% \DescribeKey[item]{fraction}\DescribeDefault{0} +% \DescribeKey[item*]{fraction}\DescribeDefault{100} +% The \optn{fraction} key may be automatically set depending on the +% presence of an asterisk \texttt{*} right after the \cmd{\item}. By default, +% Starred items designate correct answers (\optn{fraction=100}) while +% bare items designate incorrect answers (\optn{fraction=0}). +% The key can be used to designate some wrong answers as being worth +% partial credit or sanction. For example, a question might read % \begin{VerbatimOut}[gobble=1]{minted.doc.out} % \begin{multi}{my question} % Compute $\int 4x^3\,dx$. @@ -560,87 +656,116 @@ % \end{multi} % \end{VerbatimOut} % \inputminted[gobble=2,frame=lines]{latex}{minted.doc.out} -% Thus the asterisk |*| is shorthand for |fraction=100|, -% whereas a bare |\item| sets |fraction=0|. -% -% \DescribeMacro{single} -% By default, the |multi| environment produces -% a multiple choice question with only one correct answer; -% this is called |single| mode, and on Moodle it appears with radio buttons. -% -% \DescribeMacro{multiple} -% It is also possible to write questions with possibly more than one correct answer, -% asking the user to check all correct answers. To do this, use the key |multiple| -% or |single=false|. -% The worth of each correct answers in |multiple| mode may be set by |fraction|, -% but Moodle asks that all the fractions add up to \emph{exactly} 100. -% If you simply designate each correct answer with |\item*|, then \textsf{moodle} -% will divide equally among those answers the points lefts for a sum of 100\%. -% Items that are not given a |fraction| are considered incorrect and selecting them -% results in negative points such that the sum of all incorrect answers is -100\%. +% +% \DescribeBoolean[multi]{single}\DescribeDefault{true} +% By default, the \env{multi} environment produces a multiple choice +% question where only one answer can be selected. This is called +% \optn{single} mode. +%^^A On \Moodle, the choices are displayed with radio +%^^A buttons and only one of them can be selected by the student. +% +% In \optn{single} mode, the teacher can set negative fractions for +% incorrect choices. This way, the expected grade of a student +% picking up choices randomly across a quiz is lowered. +% By default, incorrect answers that do not have a fraction +% specified correspond to \optn{fraction=0}. +% \DescribeKey[quiz,multi]{sanction}\DescribeDefault{0} However, +% if the \optn{sanction} key is set to a positive value, at quiz or +% question levels, such incorrect answers are sanctioned as if +% \optn{fraction=-}\meta{sanction value} was set for each of them. +% +% \DescribeKey[multi]{multiple} +% It is also possible to write questions with possibly more than +% one correct answer, asking the user to check all correct answers. +% To do this, use the key \optn{multiple} or \optn{single=false}. +% For this kind of question, the student gets a grade that +% corresponds to the total of the weights of the answers selected. +% Users may rely on two modalities to set the weights of the answers: +% \begin{enumerate} +% \item the \emph{advanced mode} applies whenever a \optn{fraction} key +% is set among the proposed answers. In this case, it is recommended +% that the user sets manually everything. Answers that are left with +% no fraction set are considered as neutral, selecting them will +% not change the grade. If \cmd{\item*} is used to designate some correct +% answers, \pkg{moodle} will distribute equally among those answers +% the points that are left for a total of 100\% (only positive +% fractions count here). Note that doing so will easily yield +% situations where the weights are inadmissible (see +% Table~\vref{tab:fraction}). +% \item the \emph{automatic mode} applies when correct answers are +% designated using \cmd{\item*} and no answer has a \optn{fraction} key set. +% In this case, each correct answer is weighted to bring the same +% fraction of the maximum grade and each incorrect answer is +% weighted to cancel the benefits of the selection of one correct +% answer. +% \end{enumerate} % For example, the following two examples are equivalent: % \begin{VerbatimOut}[gobble=1]{minted.doc.out} -% \begin{multi}[multiple]{my question} +% \begin{multi}[multiple]{Automatic Mode} % Which numbers are prime? -% \item[fraction=20] 2 +% \item 2 % \item* 5 % \item* 7 -% \item[fraction=-10] 1 +% \item 1 % \item 6 -% \item 8 % \end{multi} -% -% \begin{multi}[multiple]{my question} +% \begin{multi}[multiple]{Advanced Mode} % Which numbers are prime? -% \item[fraction=20] 2 -% \item[fraction=40] 5 -% \item[fraction=40] 7 -% \item[fraction=-10] 1 -% \item[fraction=-45] 6 -% \item[fraction=-45] 8 +% \item[fraction=-50] 2 +% \item[fraction=50] 5 +% \item[fraction=50] 7 +% \item[fraction=-50] 1 +% \item[fraction=-50] 6 % \end{multi} % \end{VerbatimOut} % \inputminted[gobble=2,frame=lines]{latex}{minted.doc.out} -% Note that, in this example, negative fractions are set for wrong choices. This -% prevents students selecting all options to obtain a good grade with no merit. -% -% \DescribeMacro{allornothing} +% Note that, in this example, negative fractions are set for wrong +% choices. This prevents students from obtaining a good grade with +% no merit if they select all answers. +% +% Contrarily to the \optn{single} mode where questions with negative fractions may +% lead to a overall negative grade, when multiple choices can be selected, the +% lowest grade \Moodle\ will take into account for the question is 0. +% +% \DescribeKey[multi]{allornothing} % There also exists a \href{https://moodle.org/plugins/qtype_multichoiceset} -% {``All-or-Nothing Multiple Choice''} plugin for Moodle that introduces a +% {``All-or-Nothing Multiple Choice''} plugin for \Moodle\ that introduces a % question type similar to a multiple choice with multiple correct answers, % with the specificity that the points are given if and only if the student % selects all correct answers. This kind of question is set up using the -% |allornothing| key. -% The recommended way for designating correct answers is with |\item*|. If instead -% the |fraction| is used, \textsf{moodle} moodle will consider that non-negative +% \optn{allornothing} key. +% The recommended way for designating correct answers is with \cmd{\item*}. If instead +% the \optn{fraction} is used, \pkg{moodle} will consider that non-negative % fractions ($>0$) designate correct answers and negative fractions ($\leq 0$) % designate incorrect choices. -% The option |allornothing| supersedes the options |multiple| and |single|. -% To the best of our knowledge, Moodle does not offer the all-or-nothing behavior -% for multiple choice questions embedded inside a cloze question. -% +% The option \optn{allornothing} supersedes the options \optn{multiple} and \optn{single}. +% To the best of our knowledge, \Moodle\ does not offer the all-or-nothing behavior +% for multiple choice questions embedded inside a \env{cloze} question. +% % \subsubsection{\href{https://docs.moodle.org/en/Numerical_question_type}{Numerical}} % -% A numerical question in Moodle requires the student +% \DescribeEnv[quiz]{numerical}\oarg{question options}\marg{question name} +% is an environment that defines a \emph{Numerical} question which, in \Moodle, requires the student % to input a real number in decimal form. -% Its typical format is +% +% The typical format for this question type is: % \begin{quote} % |\begin{numerical}|\oarg{question options}\marg{question name} \\ % \rule{2em}{0pt}\meta{question text} \\ -% \rule{2em}{0pt}|\item|\oarg{options} \meta{correct answer} \\ +% \rule{2em}{0pt}|\item|\oarg{answer options} \meta{correct answer} \\ % |\end{numerical}| % \end{quote} -% If there is more than one correct answer, additional |\item|'s may be included. +% If there is more than one correct answer, additional \cmd{\item}'s may be included. % Because this is not a multiple choice question, there is no need to provide -% incorrect answers. There may nevertheless be reasons to include incorrect answers. -% For example, partially correct answers may be specified by setting the |fraction| key. +% incorrect answers. There may nevertheless be reasons to include incorrect answers. +% For example, partially correct answers may be specified by setting the \optn{fraction} key. % Feedback for a common mistake may be given by including the incorrect answer like this: % \begin{quote}\footnotesize -% |\item[fraction=0,feedback={You forgot to antidifferentiate!}]| \meta{incorrect answer} +% |\item[fraction=0,feedback={Forgot to antidifferentiate?}]| \meta{incorrect answer} % \end{quote} % -% \DescribeMacro{tolerance} -% The |tolerance| key can be used to specify the validity of answers within some margin. +% \DescribeKey[numerical]{tolerance}\DescribeDefault{0} +% The \optn{tolerance} key can be used to specify the validity of answers within some margin. % This key can be set at different levels: quiz, question, item. % For example, with the question % \begin{VerbatimOut}[gobble=1]{minted.doc.out} @@ -662,31 +787,34 @@ % \end{itemize} % % When feedback is to be given for any non-specified answer, one can add a \emph{last} answer -% item containing the wilcard character |*| only. In this case, the |tolerance| key is irrelevant. -% -% Both answers and tolerance can be specified with the comma (|,|) as a decimal separator. -% Exponent notation is accepted. After import, Moodle will recognize indifferently |0.000165|, -% |0,000165|, |1.65E-4|, |1.65e-4|, |1,65E-4|, and |1,65e-4|. +% item containing the wildcard character \texttt{*} only. In this case, the \optn{tolerance} key is irrelevant. % -% If the \textsf{siunitx} package is loaded, \textsf{moodle} will detect it and -% numbers will be rendered nicely in the PDF output. -% -% Units, unit-handling and multipliers are currently unsupported. +% Both answers and tolerance can be specified with the comma (\texttt{,}) as a decimal separator. +% Exponent notation is accepted. After import, \Moodle\ will recognize indifferently \texttt{0.000165}, +% \texttt{0,000165}, \texttt{1.65E-4}, \texttt{1.65e-4}, \texttt{1,65E-4}, and \texttt{1,65e-4}. +% +% If the \pkg{siunitx} package is loaded, \pkg{moodle} will detect it and +% numbers will be rendered nicely in the \PDF\ output. +% +% Units, unit-handling and multipliers are currently unsupported.\watchout % % \subsubsection{\href{https://docs.moodle.org/en/Short-Answer_question_type}{Short Answer}} -% A short answer question resembles a numerical question: the student is to fill -% in a text box with a missing word or phrase. +% +% \DescribeEnv[quiz]{shortanswer}\oarg{question options}\marg{question name} +% is an environment that defines a \emph{Short Answer} question. It resembles +% a \env{numerical} question: the student is to fill in a text box with a +% missing word or phrase. % \begin{quote} % |\begin{shortanswer}|\oarg{question options}\marg{question name} \\ % \rule{2em}{0pt}\meta{question text} \\ -% \rule{2em}{0pt}|\item|\oarg{options} \meta{correct answer} \\ +% \rule{2em}{0pt}|\item|\oarg{answer options} \meta{correct answer} \\ % \rule{2em}{0pt}\quad$\vdots$ \\ -% \rule{2em}{0pt}|\item|\oarg{options} \meta{correct answer} \\ +% \rule{2em}{0pt}|\item|\oarg{answer options} \meta{correct answer} \\ % |\end{shortanswer}| % \end{quote} -% You can make the text box appear as part of the question with the -% control sequence |\blank|. For example, -% your question might read +% You can make the text box appear as part of the question with the +% control sequence \cmd{\blank}. For example, +% your question might read % \begin{VerbatimOut}[gobble=1]{minted.doc.out} % \begin{shortanswer}{Leibniz} % Newton's rival was Gottfried Wilhelm \blank. @@ -695,146 +823,176 @@ % \end{shortanswer} % \end{VerbatimOut} % \inputminted[gobble=2,frame=lines]{latex}{minted.doc.out} -% Note that as the blank occurred at the end of a sentence, -% we included two answers, +% Note that as the blank occurred at the end of a sentence, +% we included two answers, % lest students get the question wrong merely by % including or omitting a period. -% -% \DescribeMacro{case sensitive}\DescribeMacro{usecase} -% The default setting when creating a Short Answer question in Moodle +% +% \DescribeBoolean[shortanswer]{case sensitive}\DescribeDefault{false} +% The default setting when creating a Short Answer question in \Moodle\ % is to ignore the distinction between upper- and lower-case letters % when grading a short answer question. This default is preserved by -% \textsf{moodle}. -% You can make a question case-sensitive with the key |case sensitive| -% or its shorter synonym |usecase|. +% \pkg{moodle}. +% You can make a question case-sensitive with the Boolean key +% \optn{case sensitive} or its shorter synonym \optn{usecase}\DescribeBoolean[shortanswer]{usecase}. % -% The wildcard character |*| can used to grab answers that match -% a specific pattern. For instance: -% \begin{itemize} -% \item ``\emph{Sir Isaac Newton}'', ``\emph{Isaac Newton}'' and -% ``\emph{Newton}'' will match the pattern |*Newton|, -% \item ``\emph{Gaston}'' and ``\emph{Wellington}'' will match the -% pattern |*ton|, -% \item ``\emph{Isaac}'' and ``\emph{Isaac Newton}'' will match the -% pattern |Isaac*|, -% \item any non empty answer will match the pattern |*| (wildcard alone). +% The \href{https://docs.moodle.org/en/Short-Answer_question_type#Wildcard_usage}% +% {wildcard character} \texttt{*} can used to grab answers that match +% a specific pattern. Following the order of answers, the first match will lead +% to the corresponding score and eventual feedback. As an example, take the +% following question +% \begin{VerbatimOut}[gobble=1]{minted.doc.out} +% \begin{shortanswer}[usecase]{Newton's name} +% What was Newton's first name? +% \item Isaac +% \item[fraction=0,feedback={Simply Isaac!}] Isaa* +% \item[fraction=0,feedback={This one is Leibniz!}] *Gottfried* +% \item[fraction=0,feedback={First name, not title!}] Sir* +% \item[fraction=0,feedback={No\dots}] * +% \end{shortanswer} +% \end{VerbatimOut} +% \inputminted[gobble=2,frame=lines]{latex}{minted.doc.out} +% \begin{itemize}\def\answ#1{\framebox{\texttt{#1}}}% +% \item the answer \answ{Isaac} is the only one that gets rewarded, +% \item answers \answ{Isaac Leibniz}, \answ{Isaac Newton}, and \answ{Isaak} yield +% the feedback \emph{Simply Isaac!}, +% \item answers \answ{Sir Gottfried Wilhelm}, \answ{Sir Gottfried}, +% \answ{Gottfried Wilhem}, and \answ{Gottfried} yield +% the feedback \emph{This one is Leibniz!}, +% \item answers \answ{Sir Isaac}, and \answ{Sir} yield +% the feedback \emph{First name, not title!}, +% \item any answer that does not match the previous patterns +% yields the feedback \emph{No\dots}. % \end{itemize} -% +% % \subsubsection{\href{https://docs.moodle.org/en/Essay_question_type}{Essay}}\label{subsubsect:essay} -% Instructors may ask essay questions on a Moodle quiz, -% although Moodle's software is not up to the task of grading them! -% Instead each essay question answer must be graded manually by the +% +% \DescribeEnv[quiz]{essay}\oarg{question options}\marg{question name} +% is an environment that defines an \emph{Essay} question. +% +% Instructors may ask essay questions on a \Moodle\ quiz, +% although \Moodle's software is not up to the task of grading them! +% Instead, each essay question answer must be graded manually by the % instructor or a teaching assistant. % \begin{quote} % |\begin{essay}|\oarg{question options}\marg{question name} \\ % \rule{2em}{0pt}\meta{question text} \\ -% \rule{2em}{0pt}|\item|\oarg{options} \meta{notes for grader} \\ +% \rule{2em}{0pt}|\item| \meta{information 1 for grader} \\ % \rule{2em}{0pt}\quad$\vdots$ \\ -% \rule{2em}{0pt}|\item|\oarg{options} \meta{notes for grader} \\ +% \rule{2em}{0pt}|\item| \meta{information $n$ for grader} \\ % |\end{essay}| % \end{quote} -% Instead of containing answers, the |\item| tags for the |essay| question -% contain notes that will appear to whoever is grading the question manually. -% -% \DescribeMacro{response required} -% Although Moodle cannot grade the content of an essay question, +% Instead of containing answers, the \cmd{\item} entries included in the \env{essay} +% question contain notes that will appear to whoever is grading the question manually. +% Contrarily to other question types, \cmd{\item} in \env{essay} questions +% do not take options. +% +% \DescribeBoolean[essay]{response required}\DescribeDefault{false} +% Although \Moodle\ cannot grade the content of an essay question, % it can at least determine whether the question has been left blank. -% If the |response required| key is set, Moodle will insist that the student +% If the \optn{response required} key is set, \Moodle\ will insist that the student % enter something in the blank before accepting the quiz as completed. -% -% \DescribeMacro{response format} -% Moodle offers five different ways for students to enter and/or upload their -% answers to an essay question. You may choose one of these five options: +% +% \DescribeKey[essay]{response format}\DescribeDefault{html} +% \Moodle\ offers five different ways for students to enter and/or upload their +% answers to an essay question. You may choose one of these five options: % \begin{description} -% \item[{\ttfamily html}] An editor with the ability to format HTML responses +% \ItemDescribeOther[response format]{html} An editor with the ability to format \HTML\ responses % including markup for italics, boldface, etc. This is the default. -% \item[{\ttfamily file}] A file picker allowing the student to upload a -% file, such as a PDF or DOC file, containing the essay. -% \item[{\ttfamily html+file}] The same HTML editor as above, but with the -% ability to upload files as well. This permits some students to type -% answers directly into the web form, and others to compose their +% \ItemDescribeOther[response format]{file} A file picker allowing the student to upload a +% file, such as a \PDF\ or DOC file, containing the essay. +% \ItemDescribeOther[response format]{html+file} The same \HTML\ editor as above, but with the +% ability to upload files as well. This permits some students to type +% answers directly into the web form, and others to compose their % essays in another program first. -% \item[{\ttfamily text}] This editor allows only for entering plain text +% \ItemDescribeOther[response format]{text} This editor allows only for entering plain text % without any markup. -% \item[{\ttfamily monospaced}] This yields a plain text editor, without any -% markup, and with a fixed-width font. This could be useful for +% \ItemDescribeOther[response format]{monospaced} This yields a plain text editor, without any +% markup, and with a fixed-width font. This could be useful for % entering code snippets, for example. % \end{description} -% -% \DescribeMacro{response field lines} -% The key |response field lines| controls the height of the input box. -% For Moodle, the admissible values are: 5, 10, 15, 20, 25, 30, 35, and 40. -% If the value set is not admissible, \textsf{moodle} will approximate the value: +% +% \DescribeKey[essay]{response field lines}\DescribeDefault{15} +% The key \optn{response field lines} controls the height of the input box. +% For \Moodle, the admissible values are: 5, 10, 15, 20, 25, 30, 35, and 40. +% If the value set is not admissible, \pkg{moodle} will approximate the value: % \begin{itemize} % \item with either 5 or 40 if the value set was out of range, or % \item with the next multiple of 5 otherwise. % \end{itemize} -% The default is |response field lines=15|. -% -% \DescribeMacro{attachments allowed} -% The |attachments allowed| key controls \emph{how many} attachments a student is -% allowed to upload. Permissible values are |0|, |1|, |2|, |3|, or |unlimited|. -% -% \DescribeMacro{attachments required} +% +% \DescribeKey[essay]{attachments allowed}\DescribeDefault{0} +% The \optn{attachments allowed} key controls \emph{how many} attachments a student is +% allowed to upload. Admissible values are \texttt{0}, \texttt{1}, \texttt{2}, +% \texttt{3}, or \texttt{unlimited}. +% +% \DescribeKey[essay]{attachments required}\DescribeDefault{0} % You may also require the student to upload a certain number of attachments -% by setting |attachments required| to |0|, |1|, |2|, or |3|. -% -% \DescribeMacro{template} +% by setting \optn{attachments required} to \texttt{0}, \texttt{1}, \texttt{2}, or \texttt{3}. +% +% \DescribeKey[essay]{template} % Finally, you may preload the essay question with a template that the student -% will edit and/or type over, with the key |template=|\marg{template}. +% will edit and/or type over, with the key \optn{template=}\marg{template}. % The \meta{template} should be enclosed in braces. -% +% % \subsubsection{\href{https://docs.moodle.org/en/Matching_question_type}{Matching}} -% -% A matching question offers a series of subquestions -% and a set of possible answers from which to choose. -% If there are $m$ questions and $n\geq m$ possible answers, -% a matching question will look like this: -% +% +% \DescribeEnv[quiz]{matching}\oarg{question options}\marg{question name} +% is an environment that defines a \emph{Matching} question. It typically +% looks like this: % \begin{quote} % |\begin{matching}|\oarg{question options}\marg{question name} \\ % \rule{2em}{0pt}\meta{question text} \\ -% \rule{2em}{0pt}|\item|\oarg{options} \meta{question 1} |\answer| \meta{answer 1}\\ -% \rule{2em}{0pt}|\item|\oarg{options} \meta{question 2} |\answer| \meta{answer 2}\\ +% \rule{2em}{0pt}|\item| \meta{item 1} |\answer| \meta{match 1}\\ +% \rule{2em}{0pt}|\item| \meta{item 2} |\answer| \meta{match 2}\\ % \rule{2em}{0pt}\quad$\vdots$ \\ -% \rule{2em}{0pt}|\item|\oarg{options} \meta{question $m$} |\answer| \meta{answer $m$}\\ -% \rule{2em}{0pt}|\item|\oarg{options} |\answer| \meta{answer $m+1$}\\ +% \rule{2em}{0pt}|\item| \meta{item $m$} |\answer| \meta{match $m$}\\ +% \rule{2em}{0pt}|\item| |\answer| \meta{no match $1$}\\ % \rule{2em}{0pt}\quad$\vdots$ \\ -% \rule{2em}{0pt}|\item|\oarg{options} |\answer| \meta{answer $n$}\\ +% \rule{2em}{0pt}|\item| |\answer| \meta{no match $n$}\\ % |\end{matching}| % \end{quote} -% Answers $1$ through $m$ correspond to questions $1$ through $m$; -% answers $m+1$ through $n$ are ``decoy'' answers. -% If multiple questions should have the same answer, -% be sure your typed answer match exactly, so that Moodle will not -% create duplicate copies of the same answer! -% -% \DescribeMacro{shuffle} -% The |matching| question accepts the option of |shuffle| to randomly -% permute the questions and answers; by default |shuffle=true|. -% -% \DescribeMacro{drag and drop}\DescribeMacro{dd} -% The standard matching question offered by Moodle corresponds to -% a dropdown box for choosing the answer to each question. -% There also exists a \href{https://docs.moodle.org/310/en/Drag_and_drop_matching_question_type} -% {``drag and drop matching''} plugin for Moodle that -% shows all questions in one column, -% all answers in a second column, and allows students to drag the correct -% answer to the question using a mouse. +% \meta{match}es $1$ through $m$ are separated from their corresponding +% \meta{item}s by the command \cmd{\answer}\DescribeMacro[matching]{\answer}. +% Answers that match no item can be proposed at the end of the list, +% preceded by an empty item. +% +% After import, \Moodle\ will recognize matches that are \emph{exact} +% duplicates. If you intend multiple questions to have the same match, +% make sure that they are entered identically. +% +% \DescribeBoolean[matching]{shuffle}\DescribeDefault{true} +% When students take a matching question, \Moodle\ always displays +% the proposed matches in random order. +% The \env{matching} question accepts the option |shuffle| to also +% randomly permute the items. +% +% \DescribeBoolean[matching]{drag and drop}\DescribeDefault{false} +% The standard matching question offered by \Moodle\ corresponds to +% a dropdown box for choosing the match for each item. +% There also exists a \href{https://docs.moodle.org/en/Drag_and_drop_matching_question_type} +% {``drag and drop matching''} plugin for \Moodle\ that +% shows all items in a column (left), all proposed matches in a second column +% (right), and asks students to drag the correct +% match to each item with the mouse. % In this package, to enable drag-and-drop matching, use the key -% `|drag and drop|' or `|dd|' for short. The default is |dd=false|. -% If you choose the standard format, then due to the limitations of -% dropdown boxes, no \LaTeX\ or HTML code can be used in the answers. -% +% \optn{drag and drop} or \optn{dd}\DescribeKey[matching]{dd}\ for short. +% Beware that, with the standard format (\optn{drag and drop=false}), due +% to the limitations of dropdown boxes, \Moodle\ will not render \LaTeX\ +% or \HTML\ code passed in the answers. +% % \subsubsection{\href{https://docs.moodle.org/en/Embedded_Answers_(Cloze)_question_type} % {Cloze Questions and Subquestions}} -% -% A ``cloze question'' has one or more subquestions embedded within a passage of text. +% +% \DescribeEnv[quiz]{cloze}\oarg{question options}\marg{question name} +% is an environment that defines a \emph{Cloze} question. +% +% A ``cloze question'' has one or more subquestions embedded within a passage of text. % For example, you might ask students to fill in several missing words within % a sentence, or calculate several coefficients of a polynomial. % To encode cloze questions in \LaTeX\ using this package is easy: -% you simply nest one or more |multi|, |shortanswer|, or |numerical| environments -% within a |cloze| environment, as in the following example: +% you simply nest one or more \env{multi}, \env{numerical}, or \env{shortanswer} environments +% within a \env{cloze} environment, as in the following example: % \begin{VerbatimOut}[gobble=1]{minted.doc.out} % \begin{cloze}{my cloze question} % Thanks to calculus, invented by Isaac @@ -855,44 +1013,84 @@ % \end{cloze} % \end{VerbatimOut} % \inputminted[gobble=2,frame=lines]{latex}{minted.doc.out} -% Note that when used as a subquestion within a cloze question, -% |\begin{multi}| is \emph{not} followed by name in braces; -% the same is true for the |shortanswer| and |numerical| -% environments. -% -% \DescribeMacro{single=true}\DescribeMacro{single=false}\DescribeMacro{multiple} -% Before Moodle version 3.5, within a cloze question, a multiple choice question -% was necessarily of type |single|, i.e. with a single good answer. If you intend -% to export your quiz to Moodle 3.5+, the option |multiple| can be used, when -% multiple good answers are to be found. -% -% \DescribeMacro{vertical}\DescribeMacro{horizontal}\DescribeMacro{inline} -% Within a cloze question, by default, a multiple choice question is implemented -% as an |inline| dropdown box. This is visually compact, but it also prevents -% the use of mathematical or HTML formatting. -% Adding the option |vertical| displays the subquestion as a vertical column -% of radio buttons instead; likewise the option |horizontal| creates a horizontal -% row of radio buttons. -% The option |inline| is incompatible with |multiple| or |single=false| +% +% Note that, when used as a subquestion within a \env{cloze} question, +% the question environments are \emph{not} followed by a question +% name in braces. +% \begin{description} +% \ItemDescribeEnv[cloze]{multi}\oarg{subquestion options} defines a +% Multiple Choice question inside a Cloze question, +% \ItemDescribeEnv[cloze]{numerical}\oarg{subquestion options} defines a +% Numerical question inside a Cloze question, and +% \ItemDescribeEnv[cloze]{shortanswer}\oarg{subquestion options} defines a +% Shortanswer question inside a Cloze question, +% \end{description} +% +% \DescribeKey[cloze]{points}\DescribeDefault{1} +% \DescribeKey[cloze]{default grade} +% Inside \env{cloze} environments, the \optn{points} or \optn{default grade} +% keys can be used to weight the worth of each subquestion. A specific +% constraint applies: the values should be positive integers. +% +% \DescribeKey[cloze]{fraction} +% Inside \env{cloze} environments, the \optn{fraction} key can be used to give +% partial credit or sanction for certain answers. The values +% specified must be integers and are independent of the admissible +% values listed in Table~\vref{tab:fraction}. +% +% \DescribeBoolean[cloze]{single}\DescribeDefault{true} +% \DescribeKey[cloze]{multiple} +% Prior to \Moodle\ version 3.5, within a \env{cloze} question, a multiple choice question +% was necessarily of type \optn{single}, i.e. with a single good answer. If you intend +% to export your quiz to \Moodle\ 3.5+, the option \optn{multiple} can be used for +% questions where students must be able to select several answers. +% The modalities described in Section~\vref{subsec:multi} for setting the +% weight of answers apply. The only difference occurs in \emph{advanced mode}: +% the sum of positive fractions may not be 100\%. In this case, after +% importing the \XML\ file, \Moodle\ will automatically scale the positive +% fractions for a total of 100\% and leave intact the negative fractions. +% ^^A\footnote{\url{https://tracker.moodle.org/browse/MDL-3782?focusedCommentId=421564\#comment-421564}}. +% +% ^^A\DescribeKey[cloze]{vertical}\DescribeKey[cloze]{horizontal}\DescribeKey[cloze]{inline} +% ^^A\DescribeDefault{inline} +% Within a \env{cloze} question, a multiple choice question may be displayed in three +% different modes: +% \begin{description} +% \ItemDescribeKey[cloze]{inline} The inline dropdown box is the default choice +% when only one answer is to be selected (option \optn{single}). The dropdown box +% is visually compact, but also prevents the use of mathematical or \HTML\ formatting. +% This option is incompatible\watchout\ with \optn{multiple} or \optn{single=false} % (dropdown boxes don't let you pick up several answers!). +% \ItemDescribeKey[cloze]{vertical} displays the subquestion as a vertical column +% of radio buttons instead. This is the default when several items can +% be selected (options \optn{multiple} or \optn{single=false}). +% \ItemDescribeKey[cloze]{horizontal} creates a horizontal row of radio buttons. +% This option works well when the possible answers are short. The result is more +% compact than what \optn{vertical} gives. +% \end{description} % -% \DescribeMacro{shuffle} -% Starting from Moodle version 3.0, within a cloze question, the items of a -% multiple choice question can be shuffled. Setting |shuffle=false| will +% \DescribeBoolean[cloze]{shuffle} +% Starting from \Moodle\ version 3.0, within a \env{cloze} question, the items of a +% multiple choice question can be shuffled. Setting \optn{shuffle=false} will % guarantee that the answer appear in the order they were typed; the -% default is |shuffle=true|. +% default is \optn{shuffle=true}. +% +% \DescribeBoolean[cloze]{case sensitive}\DescribeDefault{false} +% \DescribeBoolean[cloze]{usecase} +% Within a \env{cloze} question, the \env{shortanswer} question can be made case sensitive. +% This option, disabled by default, is selected with \optn{case sensitive} or \optn{usecase}. % -% \DescribeMacro{case sensitive}\DescribeMacro{usecase} -% Within a cloze question, the short answer question can be made case sensitive. -% This option, disabled by default, is selected with |case sensitive| or |usecase|. -% %\subsubsection{\href{https://docs.moodle.org/en/Description_question_type}{Description}} -% -% The Moodle description type is not really a question. It is more like a label. -% One can set a |feedback| that the student gets when reviewing the submission. +% +% \DescribeEnv[quiz]{description}\oarg{question options}\marg{question name} +% is an environment that defines a so-called \emph{Description} question. +% +% The \Moodle\ description type is not really a question. It is more like a label. +% One can set a \optn{feedback} that the student gets when reviewing the submission. % Tags can be set as well. -% -% For descriptions, \textsf{moodle} redefines the existing |description| environment. +% +% For descriptions, \pkg{moodle} redefines \LaTeX's \env{description} environment. +% The scope of this redefinition is limited to the \env{quiz} environment. % % The syntax for a Description question is as follows: % \begin{quote} @@ -902,11 +1100,11 @@ % \end{quote} % % \subsection{Summary of the Key Options} -% -% Table~\ref{tab:key-options} summarizes the key options available at the question -% and answer levels depending on the question type. For the essay questions, -% please refer to section~\ref{subsubsect:essay}. -% +% +% Table~\vref{tab:key-options}, summarizes +% the key options available at the question and answer levels depending on the +% question type. For the essay questions, please refer to Section~\vref{subsubsect:essay}. +% % \begin{table}[tbp] % \centering % \caption{Options offered at the question and answer levels for each question type.} @@ -916,17 +1114,17 @@ % \toprule % & \multicolumn{11}{l}{Question} & \multicolumn{3}{l}{Answer}\\ % \cmidrule(lr){2-12}\cmidrule(lr){13-15} -% Question type & \rotatebox{90}{points} & -% \rotatebox{90}{penalty} & \rotatebox{90}{feedback} & \rotatebox{90}{tags} & +% Question type & \rotatebox{90}{points} & +% \rotatebox{90}{penalty} & \rotatebox{90}{feedback} & \rotatebox{90}{tags} & % \rotatebox{90}{shuffle} & \rotatebox{90}{numbering} & \rotatebox{90}{multiple} & % \rotatebox{90}{allornothing} &\rotatebox{90}{usecase} & \rotatebox{90}{tolerance} & -% \rotatebox{90}{dd} & \rotatebox{90}{fraction} & \rotatebox{90}{feedback} & +% \rotatebox{90}{dd} & \rotatebox{90}{fraction} & \rotatebox{90}{feedback} & % \rotatebox{90}{tolerance}\\\cmidrule(lr){1-1}\cmidrule(lr){2-2}\cmidrule(lr){3-3} % \cmidrule(lr){4-4}\cmidrule(lr){5-5}\cmidrule(lr){6-6}\cmidrule(lr){7-7} % \cmidrule(lr){8-8}\cmidrule(lr){9-9}\cmidrule(lr){10-10}\cmidrule(lr){11-11} % \cmidrule(lr){12-12}\cmidrule(lr){13-13}\cmidrule(lr){14-14}\cmidrule(lr){15-15} -% \href{https://docs.moodle.org/35/en/Multiple_Choice_question_type} -% {Multichoice} & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & +% \href{https://docs.moodle.org/35/en/Multiple_Choice_question_type} +% {Multichoice} & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & % $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & & & & $\bullet$ & $\bullet$ \\ % \href{https://docs.moodle.org/35/en/Numerical_question_type}{Numerical} % & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & & & & @@ -935,12 +1133,12 @@ % Answer} & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & & & & % & $\bullet$ & & & $\bullet$ & $\bullet$ \\ % \href{https://docs.moodle.org/35/en/Matching_question_type}{Matching} -% & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & & & -% & & & $\bullet$ & $\bullet$ & \\ +% & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & & & +% & & & $\bullet$ & & \\ % \href{https://docs.moodle.org/35/en/True/False_question_type} % {True/False} & $\bullet$ & & $\bullet$ & $\bullet$ & & & & % & & & & & $\bullet$ \\ -% \href{https://docs.moodle.org/35/en/Description_question_type} +% \href{https://docs.moodle.org/35/en/Description_question_type} % {Description} & & & $\bullet$ & $\bullet$ & & & & % & & & & & \\ % ^^A\href{https://docs.moodle.org/35/en/Essay_question_type}{Essay} & \\\hline% @@ -953,322 +1151,779 @@ % & $\bullet$ & & & $\bullet$ & $\bullet$ \\ % \hspace{1em}Multi (inline) & $\bullet$ & & & & $\bullet$ & & & % & & & & $\bullet$ & $\bullet$ \\ -% \hspace{1em}Multi (horizontal)& $\bullet$ & & & & $\bullet$ & & $\bullet$ +% \hspace{1em}Multi (horiz.) & $\bullet$ & & & & $\bullet$ & & $\bullet$ % & & & & & $\bullet$ & $\bullet$ \\ -% \hspace{1em}Multi (vertical)& $\bullet$ & & & & $\bullet$ & & $\bullet$ +% \hspace{1em}Multi (vert.) & $\bullet$ & & & & $\bullet$ & & $\bullet$ % & & & & & $\bullet$ & $\bullet$ \\ % \bottomrule % \end{tabular} % \end{table} +% +% \subsection{Automated Generation of Questions} % -% \section{Conversion to HTML} +% \Moodle's \href{https://docs.moodle.org/en/Calculated_question_type} +% {Calculated Questions} types are not supported by this package. +% +% However, much more flexibly, a scripting language can be used in +% combination with \pkg{moodle} to generate a large set of questions, +% based on a prototype. +% +% In this case, the teacher building a quiz often wants one of the questions +% to be randomly picked up and presented to the student. To achieve this, +% we suggest to apply a specific tag to the questions sharing the same prototype. +% After import in \Moodle, when creating a quiz, this tag can be selected to +% narrow down a random selection of questions. +% +% This way, the feature of calculated questions can be reproduced, while +% benefiting from the flexibility given by your favorite scripting language. +% +% In this Section, two possible approaches are presented. % -% Questions should be typed as usual for \LaTeX, -% including |\$| to obtain dollar signs, |$|'s or |\(|...|\)| for math shifts, -% |$$|'s or |\[|...|\]| for display math, et cetera. -% The package \textsf{moodle.sty} automatically converts -% this \LaTeX\ code into HTML for web display. +% \subsubsection{Script Generating \TeX\ Code} +% +% Here are two examples inspired from the work of +% \href{https://github.com/avohns/python-latex-moodle-quiz}{A. Vohns}. +% The first one relies on the +% native \prog{Lua} capabilities of \LuaLaTeX. +% \begin{VerbatimOut}[gobble=1]{minted.doc.out} +% \begin{quiz}[tags={calculated}]{Example Quiz} +% \directlua{ +% \end{VerbatimOut} +% \inputminted[gobble=2,frame=topline]{latex}{minted.doc.out} +% \vspace{-.7cm} +% \begin{VerbatimOut}[gobble=1]{minted.doc.out} +% function clozenum_print(pair,op,result) +% tex.print("\\begin{numerical}$"..pair[1].." "..op.." "..pair[2].." +% =$".."\\item ",result,"\\end{numerical}") +% end +% function cloze_print(pair,points) +% tex.print("\\begin{cloze}[points="..points.."]{Arithmetic Quiz +% ("..pair[1]..", "..pair[2]..")}Solve the following tasks!\\\\") +% clozenum_print(pair,"+",pair[1]+pair[2]) +% clozenum_print(pair,"-",pair[1]-pair[2]) +% clozenum_print(pair,"*",pair[1]*pair[2]) +% if pair[1]/pair[2]==math.floor(pair[1]/pair[2]) then +% clozenum_print(pair,":",math.floor(pair[1]/pair[2])) +% end +% tex.print("\\end{cloze}") +% end +% for x = 2,4 do +% for y = 2,4 do +% if x>y then +% if x/y==math.floor(x/y) then points=1 else points=2 end +% cloze_print({x,y},points) +% end +% end +% end +% \end{VerbatimOut} +% \inputminted[]{lua}{minted.doc.out} +% \vspace{-.7cm} +% \begin{VerbatimOut}[gobble=1]{minted.doc.out} +% } +% \end{quiz} +% \end{VerbatimOut} +% \inputminted[gobble=2,frame=bottomline]{latex}{minted.doc.out} +% The second example makes use of the \pkg{python} package (|\usepackage{python}|). +% \begin{VerbatimOut}[gobble=1]{minted.doc.out} +% \begin{quiz}[tags={calculated}]{Example Quiz} +% \begin{python} +% \end{VerbatimOut} +% \inputminted[gobble=2,frame=topline]{latex}{minted.doc.out} +% \vspace{-.7cm} +% \begin{VerbatimOut}[gobble=1]{minted.doc.out} +% def clozenum_print(pair,op,result): +% print(rf"""\begin{{numerical}} +% ${pair[0]} {op} {pair[1]} =$\item {result} +% \end{{numerical}}""") +% def cloze_print(pair,points): +% print(rf"""\begin{{cloze}}[points={points}]{{Arithmetic Quiz +% {(pair[0],pair[1])}}}Solve the following tasks!\\""") +% clozenum_print([x,y],"+",x+y) +% clozenum_print([x,y],"-",x-y) +% clozenum_print([x,y],"*",x*y) +% if pair[0]/pair[1] == pair[0]//pair[1]: +% clozenum_print([x,y],":",x//y) +% print("\end{cloze}") +% for x in range(2,5): +% for y in range(2,5): +% if x > y: +% if x/y == x//y: +% points=1 +% else: +% points=2 +% cloze_print([x,y],points) +% \end{VerbatimOut} +% \inputminted[]{python}{minted.doc.out} +% \vspace{-.7cm} +% \begin{VerbatimOut}[gobble=1]{minted.doc.out} +% \end{python} +% \end{quiz} +% \end{VerbatimOut} +% \inputminted[gobble=2,frame=bottomline]{latex}{minted.doc.out} +% These two example codes yield the same \XML\ content. +% +% \subsubsection{\TeX\ Code As a Template} +% +% Instead of mixing \TeX\ and scripting code into the same file, it is probably +% a better practice to write a |.tex| template file with predefined variables and +% manipulate the latter using an external script. +% +% The \pkg{moodle} package facilitates the development of question templates. +% Specific control sequences (e.g.~\TeX\ commands) can be used in place of answers +% or other parameters to the questions. In \optn{draft} mode, this should be +% possible even where \pkg{moodle} expects numerical values (e.g.~answers of +% numerical questions). +% After drafting and question development, the control sequences can then be +% substituted, by means of a scripting language, with instances of the variables +% pulled from a database (e.g. |*.csv| file). +% This way, complex quizzes, with parameterized TikZ pictures for instance, can be produced. +% +% This approach, briefly presented in the rest of this section, is demonstrated by +% C. Caprani in \href{https://github.com/ccaprani/genquiz}{genquiz}, +% with Python for scripting and Jinja as a templating engine. +% +% The specific control sequence of the template is the \TeX\ command |\VAR|, taking +% the variable name to be substituted from the database as an argument. In order to +% highlight the fields for template development, in \optn{draft} mode, this command is +% defined to typeset the variable name in bold red font. When generating the \XML\ +% question bank, in \optn{final} mode, the variable values are substituted for the +% specific control sequence. Variables can be used to define numerical answers, +% tolerances, and even parameterize TikZ pictures. % -% Table~\ref{tab:html} lists \LaTeX\ macros, commands, and environments that -% are specifically converted to HTML. +% \begin{VerbatimOut}[gobble=1]{minted.doc.out} +% \documentclass{article} +% \usepackage[draft]{moodle} +% \usepackage{tikz} +% \newcommand*{\VAR}[1]{\textcolor{red}{\textbf{#1}}} +% \begin{document} +% \begin{quiz}{Disk or Square} +% \begin{cloze}[tags={disk area}] +% {Area of the Disk QID00\VAR{qidx}} +% \begin{tikzpicture} +% \draw[fill=black!20] circle[radius=1]; +% \draw[<->] (0,0)--(1,0)node[above,midway]{\VAR{radius}}; +% \end{tikzpicture} +% A disk has radius \VAR{radius}, what is its area? +% \begin{numerical}[points=1,penalty=0] +% \item[tolerance = \VAR{areatol}] \VAR{area} +% \item[fraction=0,feedback={Note the units.}] * % incorrect +% \end{numerical} +% Provide your answers to 3 significant digits. +% \end{cloze} +% \end{quiz} +% \end{document} +% \end{VerbatimOut} +% \inputminted[gobble=1,frame=lines]{latex}{minted.doc.out} +% +% A small python code that reads the template and renders the actual |*.tex| file +% is shown below. In this example, the template file is called |quiz_template.tex| and +% the variables are hard-coded as a list of Python dictionaries. But nothing prevents +% you from generating them on-the-fly or picking them from a database. +% It is worth noting that \prog{jinja2} will process all |\VAR{|\meta{name}|}| occurrences, +% regardless of \TeX\ comments. +% +% \begin{VerbatimOut}[gobble=1]{minted.doc.out} +% import os +% import jinja2 +% +% # Tell jinja what to look for in the template +% # (from web.archive.org/web/20121024021221/http://e6h.de/post/11/) +% latex_jinja_env = jinja2.Environment( +% variable_start_string=r"\VAR{", +% variable_end_string=r"}", +% comment_start_string=r"\#{", +% comment_end_string="}", +% loader=jinja2.FileSystemLoader(os.path.abspath(".")), +% ) +% +% # Load the template +% template = latex_jinja_env.get_template("quiz_template.tex") +% +% # Prepare the variables or read from a database +% database = [ +% {"qidx": 1, "radius": 2, "areatol": 0.1, "area": 12.57}, +% {"qidx": 2, "radius": 3, "areatol": 0.2, "area": 28.27}, +% {"qidx": 3, "radius": 4, "areatol": 0.4, "area": 50.26}, +% ] +% +% for row in database: +% # combine template and variables +% document = template.render(**row) +% +% # XML files are generated by moodle.sty in "final" mode +% document = document.replace(r"\usepackage[draft]{moodle}", +% r"\usepackage{moodle}") +% +% # write document +% with open(f"{row['qidx']}.tex","w",encoding="utf-8") as outfile: +% outfile.write(document) +% \end{VerbatimOut} +% \inputminted[gobble=1,frame=lines]{python}{minted.doc.out} +% +% Executing this Python code will result in three new |.tex| files in the current directory. +% These can then be compiled with a \TeX\ engine to produce the individual \XML\ files. +% Of course, for a large number of quizzes it is preferable to automate this compilation, +% and to combine the large number of resulting \XML\ files into a single \XML\ file for upload +% to Moodle. See \href{https://github.com/ccaprani/genquiz}{genquiz} for more details. +% +% Naturally, the concept of templating, demonstrated here with Python, may be orchestrated +% using other scripting languages. +% +% \section{Conversion to HTML} +% +% \subsection{Level of Support} +% +% The package \pkg{moodle.sty} tries to automatically +% convert the \LaTeX\ code included in the questions +% into \HTML\ for web display. +% +% With this aim, a number of \TeX\ and \LaTeX\ macros, +% commands, and environments undergo a tailored treatment +% when \pkg{moodle} generates the \XML\ file. A few tables +% describe the current level of support: +% \begin{enumerate} +% \item text mode diacritic macros (e.g.~|\"u|) in Table~\vref{tab:diacritics}, +% \item text mode macros for ligatures (e.g.~\cmd{\oe}) and other glyphs (e.g.~\cmd{\aa}) in +% Table~\vref{tab:ligatures_and_glyphs}, +% \item horizontal spacing (e.g.~\cmd{\quad}) and line breaking (e.g.~\cmd{\\}) macros in +% Table~\vref{tab:spacing}, +% \item text mode symbols (e.g.~\cmd{\$}) and punctuation (e.g.~\cmd{\textexclamdown}) macros in +% Table~\vref{tab:symbols_and_punctuation}, and finally +% \item other \LaTeX\ commands (e.g.~\cmd{\emph}) and environments (e.g.~\env{center}) +% in Table~\vref{tab:commands_and_environments}. +% \end{enumerate} +%^^A \pagebreak +% +%^^A Inspired by https://tex.stackexchange.com/a/163717/228515 % \begin{table}[tbp] % \centering -% \caption{Conversion of \LaTeX\ material to HTML.} -% \label{tab:html} -% \begin{tabular}{llll} +% \caption{Text mode diacritic macros undergoing a tailored conversion to \HTML.} +% \label{tab:diacritics} +% \begin{threeparttable} +% \begin{tabular}{clll} % \toprule -% \multicolumn{2}{l}{Macros} & Commands & Environnments \\ -% \cmidrule(lr){1-2}\cmidrule(lr){3-3}\cmidrule(lr){4-4} -% |\%| & |\#| &|\emph{}| & |\begin{center}|\\ -% |\$| & |\&| &|\textbf{}| & |\begin{enumerate}|\\ -% |\\| & |\par| &|\textit{}| & |\begin{itemize}|\\ -% |\&| & |\S| & |\texttt{}| & |\begin{tikzpicture}|\\ -% |\{| & |\}| & |\textsc{}| & \\ -% |\|\textvisiblespace & |\relax| & |\underline{}| &\\ -% |\,| & |\thinspace| & |\textsuperscript{}| & \\ -% |\dots| & |\ldots| & |\up{}| & \\ -% |\euro| & |\texteuro| & |\fup{}| & \\ -% |\TeX| & |\LaTeX|& |\textsubscript{}| & \\ -% |\_| & |\textbackslash| & |\url{}| & \\ -% |~| & & |\href{}{}| & \\ -% & & |\tikz[]{}| & \\ -% & & |\includegraphics[]{}| & \\ -% & & |\verbatiminput{}| & \\ -% & & |\VerbatimInput[]{}| & \\ -% & & |\LVerbatimInput[]{}| & \\ -% & & |\BVerbatimInput[]{}| & \\ -% & & |\inputminted[]{}{}| & \\ +% Definition & Letter List\tnote{1} & Description & Samples\\ +% \cmidrule(lr){1-1}\cmidrule(lr){2-2}\cmidrule(lr){3-3}\cmidrule(lr){4-4} +% \cmd{\"}\marg{letter} & a, e, i, o, u, y & +% \href{https://en.wikipedia.org/wiki/Diaeresis_(diacritic)}{umlaut or diaeresis} +% & \"{a} \"{A} \"{e} \"{E} \"{i} \"{I} \"{o} \"{O} \dots\ \"{Y}\\ +% \cmd{\'}\marg{letter} & a, e, i, o, u & +% \href{https://en.wikipedia.org/wiki/Acute\_accent}{acute accent} +% & \'{a} \'{A} \'{e} \'{E} \'{i} \'{I} \'{o} \'{O} \'{u} \'{U}\\ +% \cmd{\.}\marg{letter} & c, e, g, i, z & +% \href{https://en.wikipedia.org/wiki/Dot_(diacritic)#Overdot}{overdot} +% & \.{c} \.{C} \.{e} \.{E} \.{g} \.{G} \.{i} \.{I} \.{z} \.{Z}\\ +% \cmd{\=}\marg{letter} & a, e, g, i, o, u, y & +% \href{https://en.wikipedia.org/wiki/Macron_(diacritic)}{macron} +% & \={a} \={A} \={e} \={E} \={g} \={G} \={i} \={I} \dots\ \={Y}\\ +% \cmd{\^}\marg{letter} & a, e, i, o, u & +% \href{https://en.wikipedia.org/wiki/Circumflex}{circumflex} & +% \^{a} \^{A} \^{e} \^{E} \^{i} \^{I} \^{o} \^{O} \^{u} \^{U}\\ +% \cmd{\`}\marg{letter} & a, e, i, o, u & +% \href{https://en.wikipedia.org/wiki/Grave\_accent}{grave accent} +% & \`{a} \`{A} \`{e} \`{E} \`{i} \`{I} \`{o} \`{O} \`{u} \`{U}\\ +% \cmd{\~}\marg{letter} & a, n, o & +% \href{https://en.wikipedia.org/wiki/Tilde}{tilde} +% & \~{a} \~{A} \~{n} \~{N} \~{o} \~{O}\\ +% \cmd{\b}\marg{letter} & b, d, k, l, n, t, z & +% \href{https://en.wikipedia.org/wiki/Macron_below}{macron below} +% & \b{b} \b{B} \b{d} \b{D} \b{k} \b{K} \b{l} \dots\ \b{Z}\\ +% \cmd{\c}\marg{letter} & c, s, t & +% \href{https://en.wikipedia.org/wiki/Cedilla}{cedilla} +% & \c{c} \c{C} \c{s} \c{S} \c{t} \c{T}\\ +% \cmd{\d}\marg{letter} & a, b & +% \href{https://en.wikipedia.org/wiki/Dot_(diacritic)#Underdot}{underdot} +% & \d{a} \d{A} \d{b} \d{B}\\ +% \cmd{\H}\marg{letter} & o, u & +% \href{https://en.wikipedia.org/wiki/Double\_acute\_accent}{double acute accent} +% & \H{o} \H{O} \H{u} \H{U}\\ +% \cmd{\k}\marg{letter} & a, e, i, o, u & +% \href{https://en.wikipedia.org/wiki/Ogonek}{ogonek} +% & \k{a} \k{A} \k{e} \k{E} \k{i} \k{I} \k{o} \k{O} \k{u} \k{U}\\ +% \cmd{\r}\marg{letter} & a, u & +% \href{https://en.wikipedia.org/wiki/Ring_(diacritic)#Overring}{overring} +% & \r{a} \r{A} \r{u} \r{U} \\ +%^^A \cmd{\t}\marg{letter} & a, b, c & tie-after accent & \t{oo}\\ +% \cmd{\u}\marg{letter} & a, e, g, i\tnote{2}, \i, o, u & +% \href{https://en.wikipedia.org/wiki/Breve}{breve} +% & \u{a} \u{A} \u{e} \u{E} \u{i} \u{\i} \u{I} \u{o} \u{O} \u{u} \u{U}\\ +% \cmd{\v}\marg{letter} & c, d, e, l, n, r, s, t, z & +% \href{https://en.wikipedia.org/wiki/Caron}{caron or h\'a\v{c}ek} +% & \v{c} \v{C} \v{d} \v{D} \v{e} \v{E} \v{l} \dots\ \v{Z}\\ +% \bottomrule +% \end{tabular} +% \begin{tablenotes} +% \item[1] The lowercase letters listed also stand for their uppercase +% equivalent. +% \item[2] pdf\TeX\ v3.14159265 typesets |\u{i}| with an objectionable tittle. +% Use |\u{\i}|. +% \end{tablenotes} +% \end{threeparttable} +% \end{table} +% +% \begin{table}[tbp] +% \centering +% \caption{Text mode ligature and glyph macros undergoing a tailored conversion +% to \HTML.} +% \label{tab:ligatures_and_glyphs} +% \begin{threeparttable} +% \begin{tabular}{cccc} +% \toprule +% \multicolumn{2}{c}{Lowercase} & \multicolumn{2}{c}{Uppercase} \\ +% \cmidrule(lr){1-2}\cmidrule(lr){3-4} +% Definition & Sample & Definition & Sample \\ +% \cmidrule(lr){1-1}\cmidrule(lr){2-2}\cmidrule(lr){3-3}\cmidrule(lr){4-4} +% \cmd{\aa} & \aa & \cmd{\AA} & \AA \\ +% \cmd{\ae} & \ae & \cmd{\AE} & \AE \\ +% \cmd{\dh} & \dh & \cmd{\DH} & \DH \\ +% \cmd{\dj} & \dj & \cmd{\DJ} & \DJ \\ +% \cmd{\i} & \i & & \\ +% \cmd{\ij} & \ij & \cmd{\IJ} & \IJ \\ +% \cmd{\j} & \j & & \\ +% \cmd{\l} & \l & \cmd{\L} & \L \\ +% \cmd{\ng} & \ng & \cmd{\NG} & \NG \\ +% \cmd{\o} & \o & \cmd{\O} & \O \\ +% \cmd{\oe} & \oe & \cmd{\OE} & \OE \\ +% \cmd{\ss} & \ss & \cmd{\SS}\tnote{1} & \SS\tnote{2} \\ +% \cmd{\th} & \th & \cmd{\TH} & \TH \\ +% \bottomrule +% \end{tabular} +% \begin{tablenotes} +% \item[1] Contrarily to most fonts, Libertine, used in this documentation and +% available for instance via the package \pkg{libertine}, defines the glyph +% \SS. +% \item[2] \LaTeX\ defines the \cmd{\SS} macro but pdf\TeX\ renders it as a +% doubled capital S. +% \end{tablenotes} +% \end{threeparttable} +% \end{table} +% +% \begin{table}[tbp] +% \centering +% \caption{Text mode horizontal spacing and line breaking macros undergoing a +% tailored conversion to \HTML.} +% \label{tab:spacing} +%^^A Inspired by https://tex.stackexchange.com/a/74354/228515 +% \begin{threeparttable} +% \begin{tabular}{ll} +% \toprule +% Definition & Description \\ +% \cmidrule(lr){1-1}\cmidrule(lr){2-2} +% \cmd{\,} or \cmd{\thinspace} & narrow non-breaking space \\ +% |~| or \texttt{\textbackslash\textvisiblespace} & non-breaking space \\ +% \cmd{\>}\tnote{1},{ } \cmd{\:}{}\tnote{2}{ } or \cmd{\medspace}\tnote{2} & mid space \\ +% \cmd{\;}\tnote{2}{ } or \cmd{\thickspace}\tnote{2} & thick space \\ +% \cmd{\enspace} & nut (1en wide space)\\ +% \cmd{\quad} & mutton (1em wide space)\\ +% \cmd{\qquad} & doubled mutton (2em wide space)\\ +% \cmd{\textvisiblespace} & sample: \textvisiblespace \\ +% \cmd{\\} or \cmd{\newline} & start a new line \\ +% |\par| or \meta{blank line} & start a new paragraph \\ +% \bottomrule +% \end{tabular} +% \begin{tablenotes} +% \item[1] \cmd{\>} is defined in math-mode only. +% \item[2] \cmd{\:}, \cmd{\medspace}, \cmd{\;}, and \cmd{\thickspace} require the package +% \pkg{amsmath}. +% \end{tablenotes} +% \end{threeparttable} +% \end{table} +% +% \begin{table}[tbp] +% \centering +% \caption{Text mode punctuation marks and symbol macros undergoing a tailored +% conversion to \HTML. A baseline is represented in the samples of quotations +% marks, in order to draw attention to their vertical positioning.} +% \label{tab:symbols_and_punctuation} +% \newsavebox\textbox +% \newcommand\showbaseline[1]{\leavevmode\sbox\textbox{#1} +% \rlap{\rule{\wd\textbox}{.1pt}}\usebox\textbox} +% \begin{threeparttable} +% \begin{tabular}{llc} +% \toprule +% Package & Definition & Sample \\ +% \cmidrule(lr){1-1}\cmidrule(lr){2-2}\cmidrule(lr){3-3} +% \LaTeX\ base & \cmd{\%} & \% \\ +% & \cmd{\#} & \# \\ +% & \cmd{\_} & \_ \\ +% & \cmd{\textbackslash} & \textbackslash \\ +% & \cmd{\$} & \$ \\ +% & \cmd{\&} & \& \\ +% & \cmd{\S} & \S \\ +% & |\{| & \{ \\ +% & |\}| & \} \\ +% & \cmd{\texteuro} & \texteuro \\ +% & \cmd{\dots} or \cmd{\ldots} & \dots \\ +% & \cmd{\textexclamdown} & \textexclamdown \\ +% & \cmd{\textquestiondown} & \textquestiondown \\ +% & |--| & -- \\ +% & |=| & = \\ +% & |`| and |'|\tnote{1} & \showbaseline{` '} \\ +% & \cmd{\textquoteleft} and \cmd{\textquoteright} +% & \showbaseline{\textquoteleft\ \textquoteright} \\ +% & |``| and |''|\tnote{1,2} & \showbaseline{`` ''} \\ +% & \cmd{\textquotedblleft} and \cmd{\textquotedblright} +% & \showbaseline{\textquotedblleft\ \textquotedblright} \\ +% & \cmd{\textquotesingle} & \showbaseline{\textquotesingle\ } \\ +% & |"| & \showbaseline{" }\tnote{2} \\ +% & \cmd{\textquotedbl} & \showbaseline{\textquotedbl\ }\\ +% & \cmd{\guilsinglleft} and \cmd{\guilsinglright} +% & \showbaseline{\guilsinglleft\ \guilsinglright} \\ +% & \cmd{\guillemotleft} and \cmd{\guillemotright} +% & \showbaseline{\guillemotleft\ \guillemotright}\\ +% & \cmd{\quotesinglbase} & \showbaseline{\quotesinglbase\ }\\ +% & \cmd{\quotedblbase} & \showbaseline{\quotedblbase\ } \\ +% \cmidrule(lr){1-1} +% \pkg{eurosym} & \cmd{\euro} & \euro\\ +% \cmidrule(lr){1-1} +% \pkg{babel} & \cmd{\flq} and \cmd{\frq} & \showbaseline{\flq\ \frq} \\ +% & \cmd{\flqq} and \cmd{\frqq} & \showbaseline{\flqq\ \frqq} \\ +% \cmidrule(lr){1-1} +% \pkg{babel}, opt. \optn{french} & \cmd{\og} and \cmd{\fg}\tnote{3} +% & \showbaseline{\flqq\ \frqq} \\ +% \cmidrule(lr){1-1} +% \pkg{babel}, opt. \optn{german} & \cmd{\glq} and \cmd{\grq} +% & \showbaseline{\glq\ \grq} \\ +% & \cmd{\dq} & \showbaseline{\dq\ }\tnote{2} \\ +% & \cmd{\glqq} and \cmd{\grqq} & \showbaseline{\glqq\ \grqq} \\ +% \bottomrule +% \end{tabular} +% \begin{tablenotes} +% \item[1] When placed in math mode, the single straight quote (\texttt{'}) is +% passed as-is to the \XML, even when doubled (double prime symbol). +% \item[2] In roman type, \LuaLaTeX\ and \XeLaTeX\ typeset the double straight +% quote symbol (\texttt{"}) and the command \cmd{\dq} as a double right quote +% (\textquotedblright). Instead, \pkg{moodle} follows pdf\LaTeX: whatever +% the \TeX\ engine used, the double straight quote (\texttt{"}) is passed to the \XML. +% \item[3] The way \cmd{\og} and \cmd{\fg} are typeset in the \PDF\ depends on the +% current babel language. Regardless, \pkg{moodle} passes the symbols +% \texttt{\guillemotleft} and \texttt{\guillemotright} to the \XML. +% \end{tablenotes} +% \end{threeparttable} +% \end{table} +% +% \begin{table}[tbp] +% \centering +% \caption{\LaTeX\ commands and environments undergoing a tailored conversion +% to \HTML.} +% \label{tab:commands_and_environments} +% \begin{tabular}{lll} +% \toprule +% Package & Commands & Environments \\ +% \cmidrule(lr){1-1}\cmidrule(lr){2-2}\cmidrule(lr){3-3} +% \LaTeX\ base & |{}|& |$|$\cdots$|$| (inline math) \\ +% & \cmd{\relax} & |\(|$\cdots$|\)| (inline math) \\ +% & \cmd{\LaTeX} & |$$|$\cdots$|$$| (display math) \\ +% & \cmd{\TeX} & \cmd{\[}$\cdots$\cmd{\]} (display math) \\ +% & \cmd{\emph}\marg{\dots} & \env{center} \\ +% & \cmd{\textbf}\marg{\dots} & \env{enumerate} \\ +% & \cmd{\textit}\marg{\dots} & \env{itemize} \\ +% & \cmd{\textsc}\marg{\dots} & \env{quote} \\ +% & \cmd{\textsuperscript}\marg{\dots} & \env{quotation}\\ +% & \cmd{\textsubscript}\marg{\dots} &\\ +% & \cmd{\texttt}\marg{\dots} &\\ +% & \cmd{\underline}\marg{\dots} &\\ +% \cmidrule(lr){1-1} +% \pkg{hyperref} & \cmd{\href}\marg{\dots}\marg{\dots} &\\ +% \pkg{url} or \pkg{hyperref} & \cmd{\url}\marg{\dots} &\\ +% \cmidrule(lr){1-1} +% \pkg{babel}, opt. \optn{french} & \cmd{\fup}\marg{\dots} &\\ +% & \cmd{\up}\marg{\dots} &\\ +% \cmidrule(lr){1-1} +% \pkg{graphics} or \pkg{graphicx} & +% \cmd{\includegraphics}\oarg{\dots}\marg{\dots} \\ +% \cmidrule(lr){1-1} +% \pkg{tikz} & \cmd{\tikz}\oarg{\dots}\marg{\dots} & \env{tikzpicture}\oarg{\dots} \\ +% \cmidrule(lr){1-1} +% \pkg{verbatim} & \cmd{\verbatiminput}\marg{\dots} &\\ +% \cmidrule(lr){1-1} +% \pkg{fancyverb} or +% \pkg{fvextra}& \cmd{\VerbatimInput}\oarg{\dots}\marg{\dots} &\\ +% & \cmd{\LVerbatimInput}\oarg{\dots}\marg{\dots} &\\ +% & \cmd{\BVerbatimInput}\oarg{\dots}\marg{\dots}& \\ +% \cmidrule(lr){1-1} +% \pkg{minted} & \cmd{\inputminted}\oarg{\dots}\marg{\dots}\marg{\dots} &\\ % \bottomrule % \end{tabular} % \end{table} -% Single and double quotation marks (with german variants), french quotation marks, -% inverted exclamation and question marks, and the diacritical -% commands |\^|, |\'|, |\`|, |\"|, |\~|, |\c|, |\H|, |\k|, |\u| and |\v| are -% also handled, as are the characters |\aa|, |\ae|, |\l|, |\oe|, -% |\o|, |\ss|, and their capitalizations. See Tables~\ref{tab:diacritical}, -% \ref{tab:ligatures}, and \ref{tab:other} for more details. -% -% In addition, |<| and |>| will be converted to |<| and |>| \emph{within math mode only}. -% If they should be typed outside of math mode, they will be passed as typed to -% the HTML, and probably interpreted by students' browsers as HTML tags -% or other unpredicated results. -% A doubled dash will be converted to en-dash |–| \emph{outside math mode}. % -% Be aware that \emph{\textsf{moodle} does not know how to convert any -% other \TeX\ or \LaTeX\ commands to HTML.} -% If other sequences are used, they may be passed verbatim to the XML file -% or may cause unpredicted results. +% In addition, |<| and |>| will be converted to their HTML equivalents |<| +% and |>| in the \XML\ file. This prevents portions of the code to be +% interpreted by \Moodle\ as \HTML\ tags. % -% \DescribeMacro{\htmlonly}The |\htmlonly|\oarg{Content for traditional output} -% \marg{HTML content} command is to be used inside question environments (text, -% answers, or feedback). It lets you pass directly code to the XML file while being -% ignored for the traditional output (PDF). The HTML content passed as an argument +% A doubled dash will be converted to en-dash |–| \emph{outside math mode}. +% Empty groups |{}| will be passed to the XML only \emph{in math mode}. +% +% Be aware that, apart what is described previously, \pkg{moodle} \emph{does +% not know how to convert any other \TeX\ or \LaTeX\ commands to \HTML.} +% If other sequences are used, they may be passed verbatim to the \XML\ file +% or may cause unpredicted results. +% +% If you think of another \LaTeX\ command that should be changed to an HTML +% equivalent, please have a look at Section~\vref{sec:dev}. +% +% \DescribeMacro[question,answer,feedback]{\htmlonly}\oarg{Content for traditional output} +% \marg{HTML content} is a command to be used inside question environments (text, +% answers, or feedback). It lets you pass directly code to the \XML\ file while being +% ignored for the traditional output (\PDF). The \HTML\ content passed as an argument % is subject to no particular processing and users should not expect to be able to % pass dangerous characters like |\|, |%|, or |#|. An optional argument allows to % pass contents to be processed for the traditional output. This argument is -% ignored for the XML output. +% ignored for the \XML\ output. % For instance, one can write code like this in a question environment % \begin{quote} % |\htmlonly[\fbox{PDF contents}]{|\\ -% |
|\\ +% |
|\\ % \rule{10em}{0pt}|HTML contents
|\\ % |}| % \end{quote} % -% \DescribeMacro{\htmlregister}The |\htmlregister| command lets you specify -% the macros that must be expanded in the XML file. It works only when no -% optional argument is used. -% -% \DescribeMacro{\moodleregisternewcommands} -% When the list of macros is long, it becomes cumbersome to record them -% individually for expansion. -% Calling |\moodleregisternewcommands| triggers the automatic -% expansion of macros defined subsequently using |\newcommand|, -% |\renewcommand|, |\providecommand|, or their starred variants. +% \DescribeMacro[moodle]{\htmlregister}\marg{command} is a command that lets you +% specify a macro that must be expanded in the \XML\ file. It works only when +% the macro is defined without optional argument.\watchout +% +% \DescribeMacro[moodle]{\moodleregisternewcommands} +% When the list of user-defined macros is long, it becomes cumbersome to +% record them individually for expansion. Calling \cmd{\moodleregisternewcommands} +% watches for subsequent calls to \cmd{\newcommand}, \cmd{\renewcommand}, +% \cmd{\providecommand}, and their starred variants such that the corresponding +% commands are automatically expanded by \pkg{moodle}. % Again, this works only if the macros are defined \emph{without} optional -% argument. -% -% If you think of another \LaTeX\ command that should be changed to an HTML -% equivalent, please have a look at Section~\ref{sec:dev}. -% -% \section{Graphics} -% The \textsf{moodle} package can handle two kinds of graphics seamlessly. -% External graphics files may be included with the |\includegraphics| command -% from the |graphicx| package, and graphics may be generated internally using \TikZ. +% argument.\watchout +% +% \subsection{Graphics} +% The \pkg{moodle} package can handle two kinds of graphics seamlessly. +% External graphics files may be included with the \cmd{\includegraphics} command +% from the \pkg{graphicx} package, and graphics may be generated internally using \TikZ. % In either case, the graphics will be embedded in base-64 encoding directly within -% the Moodle~XML produced. This prevents the hassle of managing separate -% graphics files on the Moodle server, as Moodle will store the picture +% the \Moodle\ \XML\ produced. This prevents the hassle of managing separate +% graphics files on the \Moodle\ server, as \Moodle\ will store the picture % within the question in the question bank. -% -% \subsection{Default \texttt{includegraphics}} -% \DescribeMacro{\includegraphics}\DescribeMacro{height}\DescribeMacro{width} -% When using |\includegraphics|, the only options currently supported -% are |height| and |width|. Attempts to use other |\includegraphics| options, -% such as |scale| or |angle|, will affect the PDF but not the XML output. -% The dimensions set by |height| and |width| are \TeX\ dimensions such as \texttt{4\,in} -% or \texttt{2.3\,cm}. -% In order to prepare the image for web viewing, this package converts those -% dimensions to pixels using a default of +% +% \subsubsection{Default \texttt{includegraphics}} +% +% \DescribeMacro[graphics,graphicx]{\includegraphics}\oarg{options}\marg{file} can be used to +% include graphic files in both \PDF\ and the \XML\ outputs. +% The only options currently supported are \optn{height}\DescribeKey[includegraphics]{height}\ +% and \optn{width}\DescribeKey[includegraphics]{width}. Attempts to use other +% \cmd{\includegraphics} options, such as \optn{scale} or \optn{angle}, will affect the \PDF\ +% but not the \XML\ output. +% The dimensions set by \optn{height} and \optn{width} are \TeX\ dimensions such as +% \texttt{4\,in} or \texttt{2.3\,cm}. +% In order to prepare the image for web viewing, this package converts those +% dimensions to pixels using a default of % 103 pixels per inch.\footnote{This -% number was selected because an image with -% || showed up as almost exactly 1 inch -% tall and 1 inch wide on several of this author's devices and browsers +% number was selected because an image with +% || showed up as almost exactly 1 inch +% tall and 1 inch wide on several of this author's devices and browsers % as of January 2016.} -% \DescribeMacro{ppi} -% That value may be changed by setting the |ppi| key (e.g., |ppi=72|); -% this is probably best done for the entire document with a |\moodleset| command, +% \DescribeKey[includegraphics]{ppi} +% That value may be changed by setting the \optn{ppi} key (e.g., \texttt{ppi=72}); +% this is probably best done for the entire document with a \cmd{\moodleset} command, % rather than image-by-image. -% \DescribeMacro{\graphicspath} -% You can use |\graphicspath{{|\emph{path}|}}| to specify a directory where the -% pictures to be included are located. -% -% A special rule was added for the inclusion of GIF pictures (|.gif| extension). -% These files are passed as-is to the XML, preserving potential animations. -% However, as pdf\TeX\ engines do not support the GIF format, the picture is -% passed to the PDF output after a conversion to the PNG format. When the GIF -% file is animated, only its first frame is passed to the PDF. -% -%^^A \DescribeMacro{\DeclareGraphicsAlien} Users may declare other graphic -%^^A formats with the command |\DeclareGraphicsAlien|\marg{alien extension} +% +% \DescribeMacro[graphics,graphicx]{\graphicspath}|{{|\meta{path1}|},{|\meta{path2}|},...}| can be +% used to specify the locations of the pictures to be included. +% +% A special rule was added for the inclusion of \GIF\ pictures (\filenm{.gif} extension). +% These files are passed as-is to the \XML, preserving potential animations. +% However, as pdf\TeX\ engines do not support the \GIF\ format, the picture is +% passed to the \PDF\ output after a conversion to the \PNG\ format. When the \GIF\ +% file is animated, only its first frame is passed to the \PDF. +% +%^^A \DescribeMacro[moodle]{\DeclareGraphicsAlien} Users may declare other graphic +%^^A formats with the command \cmd{\DeclareGraphicsAlien}\marg{alien extension} %^^A \marg{native extension}\marg{command line for conversion}. % -% \subsection{\TikZ\ Pictures} -% \TikZ\ is a user-friendly syntax layer for PGF, the macro \LaTeX\ package for creating -% graphics. Users that are not familiar with TikZ\ can learn more here: -% \url{https://ctan.org/pkg/pgf}. -% -% When \TikZ\ is loaded and used to define pictures, \textsf{moodle} invokes -% the |external| \TikZ\ library, so that each |tikzpicture| environment is compiled -% to a freestanding PDF file. +% \subsubsection{\TikZ\ Pictures} +% \TikZ\ is a user-friendly syntax layer for \acro{PGF}, the macro \LaTeX\ package for creating +% graphics. More information on \TikZ\ can be found at \url{https://ctan.org/pkg/pgf}. % -% \subsection{Package Option \texttt{tikz}}\label{subsec:tikz} -% \DescribeMacro{tikz} -% The \textsf{moodle} package admits a \texttt{tikz} option which has the following effects: +% When \TikZ\ is loaded and used to define pictures, \pkg{moodle} invokes +% the \pkg{external} \TikZ\ library, so that each \env{tikzpicture} environment is compiled +% to a freestanding \PDF\ file. +% +% \subsubsection{Package Option \optn{tikz}}\label{subsec:tikz} +% \DescribeOption[moodle]{tikz} +% The \pkg{moodle} package admits a \optn{tikz} option which has the following effects: % \begin{itemize} -% \item the package \texttt{tikz} is loaded. -% \item \texttt{includegraphics} is embedded in a \TikZ\ picture. Consequences are that +% \item the package \pkg{tikz} is loaded. +% \item \DescribeMacro[tikz]{\includegraphics}\cmd{\includegraphics} embeds graphics in a \TikZ\ picture. Consequences are that % \begin{itemize} -% \item the pictures encoded in the XML file are resampled. This prevents encoding -% images at a higher resolution than rendered by Moodle. -% \item the full set of \texttt{includegraphics} options is accessible, -% e.g.~|scale=.5|, |angle=90|, or |width=.2\textwidth|. +% \item the pictures encoded in the \XML\ file are resampled. This prevents encoding +% images at a higher resolution than rendered by \Moodle. +% \item the full set of \cmd{\includegraphics} options is accessible, +% e.g.~\optn{scale=.5}, \optn{angle=90}, or |width=.2\textwidth|. % \end{itemize} -% \item \DescribeMacro{\embedaspict} a macro |\embedaspict{...}| is provided for the -% inclusion of inline \LaTeX\ material as images. This can serve as a workaround to -% overcome limitations of this package---like the conversion of tabulars to HTML--- -% or limitations of Moodle itself. -% For the definition of this macro, the package \texttt{varwidth} is loaded. -% \item optimizations of the \TikZ-external library are disabled. Compilation might get +% \item \DescribeMacro[tikz]{\embedaspict} a macro \cmd{\embedaspict}\marg{\LaTeX\ contents} +% is provided for the conversion of inline \LaTeX\ material as images. This can serve +% as a workaround to overcome limitations of this package---like the conversion of +% \emph{tabular}s to HTML--- or limitations of \Moodle\ itself. +% For the definition of this macro, the package \pkg{varwidth} is loaded. +% \item optimizations of the \TikZ-external library are disabled: compilation might get % sensibly slower. % \end{itemize} % -% \subsection{External Tools} + +% \subsubsection{External Tools} % The mechanisms used for handling graphics are somewhat fragile and rely upon % three free external programs. % \begin{enumerate} -% \item GhostScript (\url{www.ghostscript.com}) is used to convert the PDF output -% from \TikZ\ into a PNG raster graphics file. -% The default command line is presumed to be |gswin64c.exe| -% (if |\ifwindows| from the |ifplatform| package returns true) -% or |gs| (if |\ifwindows| returns false). -% If your system requires a different command line to invoke Ghostscript, -% \DescribeMacro{\ghostscriptcommand} +% \item \prog{GhostScript} (\url{www.ghostscript.com}) is used to convert the \PDF\ output +% from \TikZ\ into a \PNG\ raster graphics file. +% The default command line is presumed to be \prog{gswin64c.exe} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% (if |\ifwindows| from the \pkg{ifplatform} package returns true) +% or \prog{gs} (if |\ifwindows| returns false). +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% If your system requires a different command line to invoke \prog{Ghostscript}, +% \DescribeMacro[moodle]{\ghostscriptcommand} % you may change it by invoking: % \begin{quote} % |\ghostscriptcommand|\marg{executable filename} % \end{quote} -% \item When external graphics files such as PDF are included, -% the open-source ImageMagick software (\url{www.imagemagick.org}) -% converts each file to PNG format. -% The command line for ImageMagick is the nondescript word |convert|, -% \DescribeMacro{\imagemagickcommand} -% but may be changed by invoking |\imagemagickcommand|\marg{executable filename}. -% \item OptiPNG (\url{http://optipng.sourceforge.net/}) is used to optimize the PNG images. -% The command line is presumed to be |optipng|, but can be changed with -% \DescribeMacro{\optipngcommand} |\optipngcommand|\marg{executable filename}. +% \item When external graphics files such as \PDF\ are included, +% the \prog{ImageMagick} software (\url{www.imagemagick.org}) +% converts each file to \PNG\ format. +% The command line for \prog{ImageMagick} is the nondescript word \progcode{convert}, +% \DescribeMacro[moodle]{\imagemagickcommand} +% but may be changed by invoking \cmd{\imagemagickcommand}\marg{executable filename}. +% \item \prog{OptiPNG} (\url{http://optipng.sourceforge.net/}) is used to optimize the \PNG\ images. +% The command line is presumed to be \prog{optipng}, but can be changed with +% \DescribeMacro[moodle]{\optipngcommand}\cmd{\optipngcommand}\marg{executable filename}. % \end{enumerate} -% + +% % Please note the following vital points to make the graphics handling work: % \begin{itemize} -% \item As of now, graphics are only supported when compiling directly to a PDF -% with |pdflatex|. Including PS graphics or using \TikZ\ with the DVI$\to$PS workflow is not +% \item As of now, graphics are only supported when compiling directly to a \PDF\ +% with (\prog{pdf}$\mid$\prog{xe}$\mid$\prog{lua})\prog{latex}. Including \acro{PS} graphics or using \TikZ\ with the \DVI$\to$\acro{PS} workflow is not % yet supported. %^^A \item Filenames should not contains spaces or, under windows, special characters like |_| or |\|. -% \item You must have Ghostscript and ImageMagick installed on your system -% to fully use the graphics-handling capabilities of \textsf{moodle}. -% \item If OptiPNG is not installed, the corresponding system calls will fail with otherwise no -% impact on the compilation process: PNG files are passed unoptimized to the XML output. -% \item \LaTeX\ must be able to call system commands; that is, |\write18| must be enabled. -% For Mik\TeX, this means adding |--enable-write18| to the command line of |pdflatex|; -% for \TeX Live, this means adding |--shell-escape=true|. -% \item Due to security issues with old versions of Ghostcript, some systems default to a -% policy that prevents the conversion of PDF and PS to PNG. Assuming that, as a user of -% \textsf{moodle} which requires shell escape capabilities, you either use a sandboxed +% \item You must have \prog{Ghostscript} and \prog{ImageMagick} installed on your system +% to fully use the graphics-handling capabilities of \pkg{moodle}. +% \item If \prog{OptiPNG} is not installed, the corresponding system calls will fail with otherwise no +% impact on the compilation process: \PNG\ files are passed unoptimized to the \XML\ output. +% \item \LaTeX\ must be able to call system commands; that is, \cmd{\write18} must be enabled. +% For Mik\TeX, this means adding \progcode{--enable-write18} to the command line of +% (\prog{pdf}$\mid$\prog{xe}$\mid$\prog{lua})\prog{latex}; for \TeX\ Live, this means adding \progcode{--shell-escape=true}. +% \item Due to security issues with old versions of \prog{Ghostcript}, some systems default to a +% policy that prevents the conversion of \PDF\ and \acro{PS} to \PNG. Assuming that, as a user of +% \pkg{moodle} which requires shell escape capabilities, you either use a sandboxed % environment or trust the files handled at the system-level, you may want to disable this -% over-zelous security policy. For example, +% over-zealous security policy. For example, % \href{https://stackoverflow.com/a/52661288/14608059}{see this}. -% \item Users of the |circuitikz| package (\url{https://www.ctan.org/pkg/circuitikz}) must +% \item Users of the \pkg{circuitikz} package (\url{https://www.ctan.org/pkg/circuitikz}) must % enclose their circuits' \TikZ\ code in the |tikzpicture| environment instead of -% the historical |circuitikz| environment. That is required, as of \TikZ\ 2.1, -% by the |external| library. +% the historical \env{circuitikz} environment. That is required, as of \TikZ\ 2.1, +% by the \pkg{external} library. % \end{itemize} % -% \subsection{Package Option \texttt{svg}}\label{subsec:svg} +% \subsubsection{Package Option \optn{svg}}\label{subsec:svg} % -% \paragraph{Important Notice} \emph{The \texttt{svg} option is an experimental feature -% introduced in \textsf{moodle} v0.8. It has been tested exclusively under Linux, with -% TeXLive 2020, Inkscape v1.0.1 and Scour 0.38.2.} -% -% \DescribeMacro{svg} The \textsf{moodle} package admits an experimental \texttt{svg} -% option which has the following effects: +% \paragraph{Important Notice}\watchout[experimental] \emph{The \optn{svg} option is +% an experimental feature introduced in \pkg{moodle} v0.8. It has been tested only +% under Linux and Windows, with TeX Live 2020, Inkscape v1.0.1 and Scour 0.38.2.} +% +% \DescribeOption[moodle]{svg} The \pkg{moodle} package admits an experimental +% \optn{svg} option which has the following effects: % \begin{itemize} -% \item |\includegraphics| can be used to import SVG graphic files directly -% (extension |.svg| or |.SVG|). In this case, the SVG file is passed as-is to the -% XML output and is converted using \href{https://inkscape.org/} -% {Inkscape} (must be installed) for inclusion in the PDF output. -% \item the graphic files in PDF format are converted to the SVG format using -% \href{https://inkscape.org/}{Inkscape} (must be installed), rather than beeing -% rasterized. Before inclusion to the XML output, the SVG file is optimized using +% \item \DescribeMacro[svg]{\includegraphics}\cmd{\includegraphics} can be used to import +% \SVG\ graphic files directly (extension \filenm{.svg} or \filenm{.SVG}). In this case, the \SVG\ file +% is passed as-is to the \XML\ output and is converted using \href{https://inkscape.org/} +% {\prog{Inkscape}} (must be installed) for inclusion in the \PDF\ output. +% \item the graphic files in \PDF\ format are converted to the \SVG\ format using +% \href{https://inkscape.org/}{Inkscape} (must be installed), rather than being +% rasterized. Before inclusion to the \XML\ output, the \SVG\ file is optimized using % the \href{https://github.com/scour-project/scour}{Scour} utility. This % optimization step is optional in the sense that, if the Scour call fails, -% the unoptimized SVG file will be passed to the XML output. -% Two processes benefit from this PDF$\to$SVG conversion: +% the un-optimized \SVG\ file will be passed to the \XML\ output. +% Two processes benefit from this \PDF$\to$\SVG\ conversion: % \begin{itemize} -% \item inclusion of PDF graphics with |\includegraphics|, and -% \item Tikz pictures that are externalized. +% \item inclusion of \PDF\ graphics with \cmd{\includegraphics}, and +% \item \TikZ\ pictures that are externalized. % \end{itemize} % \end{itemize} % -% \DescribeMacro{\PDFtoSVGcommand}\DescribeMacro{\SVGtoPDFcommand} -% \DescribeMacro{\optiSVGcommand} The call of external tools can be changed using -% the macros |\PDFtoSVGcommand| \marg{\dots}, |\SVGtoPDFcommand|\marg{\dots} and -% |\optiSVGcommand|\marg{\dots}. % -% \section{Verbatim Code} -% Because, for HTML translation, \textsf{moodle} parses the body of questions, the use of +% The call of external \SVG\ manipulation utilities can be modified using the macros: +% \begin{description} +% \item \ItemDescribeMacro[svg]{\PDFtoSVGcommand}\ for conversion +% from \PDF\ to \SVG, +% \item \ItemDescribeMacro[svg]{\SVGtoPDFcommand}\ for conversion +% from \SVG\ to \PDF, and +% \item \ItemDescribeMacro[svg]{\optiSVGcommand}\ for the +% optimization of \SVG\ files. +% \end{description} +% +% \subsection{Verbatim Code} +% +% Because, for \HTML\ translation, \pkg{moodle} parses the body of questions, the use of % verbatim code results in compilation errors. This is why the use of |\verb|, -% |\begin{verbatim}| and other standard utilities is not supported. +% \env{verbatim} and other standard utilities is not supported. % % However, using the following three utilities, verbatim code can be imported from an external file: % \begin{enumerate} -% \item \DescribeMacro{\verbatiminput}|\verbatiminput|\marg{filename} from the \textsf{verbatim} -% package inserts verbatim code in both the PDF and the XML for moodle, without fancy additions. -% \item \DescribeMacro{\VerbatimInput}The macro |\VerbatimInput|\marg{options}\marg{filename} from -% \textsf{fancyvrb} or \textsf{fvextra} does more, with several options and settings offered -% (see below). -% The variants \DescribeMacro{\BVerbatimInput}|\VBerbatimInput| and -% \DescribeMacro{\LVerbatimInput}|\LVerbatimInput| are also supported, with identical -% effect on the XML output. +% \item \cmd{\verbatiminput}\marg{filename}\DescribeMacro[verbatim]{\verbatiminput}\ +% from the \pkg{verbatim} package inserts verbatim code in both the \PDF\ and the +% \acro{XML} for \Moodle, without fancy additions. +% \item The macro \cmd{\VerbatimInput}\marg{options}\marg{filename} +% \DescribeMacro[fancyvrb,fvextra]{\VerbatimInput}\ from +% \pkg{fancyvrb} or \pkg{fvextra} does more, with several options and settings +% offered (see below). +% The variants \DescribeMacro[fancyvrb,fvextra]{\BVerbatimInput}\cmd{\VBerbatimInput} and +% \DescribeMacro[fancyvrb,fvextra]{\LVerbatimInput}\cmd{\LVerbatimInput} are also supported, +% with no difference on the \XML\ output. % The variants with a star are unsupported and result in errors when used. -% \item \DescribeMacro{\inputminted}On top of that |\inputminted|\oarg{options}\marg{lang} -% \marg{filename}from the \textsf{minted} package offers syntaxic highlighting tailored to the -% specified language. +% \item On top of that \cmd{\inputminted}\oarg{options}\marg{lang}\marg{filename}\ +% \DescribeMacro[minted]{\inputminted} from the \pkg{minted} package offers syntax +% highlighting tailored to the specified language. % \end{enumerate} -% The \textsf{moodle} package handles these three commands to pass the code in the output XML. -% With |\inputminted|, an external Python tool, \textsc{pygmentize}, performs syntax analysis and -% its HTML formatter is used to populate the XML. With the other commands, the contents of the -% file is passed as-is to the XML. A drawback of this approach, is that characters |<|, |>|, -% |&|, |'|, and |"| are likely to mislead the web browser rendering the question on Moodle. +% The \pkg{moodle} package handles these three commands to pass the code in the output \XML. +% With \cmd{\inputminted}, an external Python tool, \prog{pygmentize}, performs syntax analysis and +% its \HTML\ formatter is used to populate the \XML. With the other commands, the contents of the +% file is passed almost as-is to the XML: in order to survive \Moodle\ import and \HTML\ rendering, +% characters |<|, |>|, |&|, |'|, and |"| are converted to \HTML\ equivalents. % -% With |\VerbatimInput| and |\inputminted|, the options that are taken care of for XML -% generation are listed in Table~\ref{tab:verbatim-options}. Using |\fvset|\marg{key=value,...}, -% options can be set globally. Equivalently, with \textsf{minted}, -% |\setminted|\oarg{lang}\marg{key=value,...} is available. +% With \cmd{\VerbatimInput} and \cmd{\inputminted}, the options that are taken care of for XML +% generation are listed in Table~\vref{tab:verbatim-options}. +% Using \cmd{\fvset}\marg{key=value,\dots}, options can be set globally. Equivalently, with \pkg{minted}, +% \cmd{\setminted}\oarg{lang}\marg{key=value,\dots} is available. % % \begin{table}[tbp] % \centering % \begin{threeparttable}[b] -% \caption{Options and corresponding values considered for XML generation of verbatim material -% with \texttt{VerbatimInput} and \texttt{inputminted}.} +% \caption{Options and corresponding values considered for \XML\ generation of verbatim material +% with \cmd{\VerbatimInput} and \cmd{\inputminted}.} % \label{tab:verbatim-options} % \begin{tabular}{ll} % \toprule % Option keys & Possible values\\\cmidrule(lr){1-1}\cmidrule(lr){2-2} -% ^^A\texttt{commentchar} & \meta{character}\\ -% \texttt{gobble} & \meta{integer}\\ -% \texttt{autogobble}\tnote{1} & \texttt{true} or \texttt{false}\\ -% \texttt{tabsize} & \meta{integer}\\ -% \texttt{numbers} & \texttt{none}, \texttt{left}, \texttt{right}, or \texttt{both}\tnote{2}\\ -% \texttt{firstnumber} & \texttt{auto}, \texttt{last}, or \meta{integer}\\ -% \texttt{firstline} & \meta{integer}\\ -% \texttt{lastline} & \meta{integer}\\ -% \texttt{numberblanklines} & \texttt{true} or \texttt{false}\\ -% \texttt{highlightlines}\tnote{2} & \marg{coma-separated list of integers or ranges}\\ -% \texttt{style}\tnote{1} & \meta{string}\\ +% ^^A\optn{commentchar} & \meta{character}\\ +% \optn{gobble} & \meta{integer}\\ +% \optn{autogobble}\tnote{1} & \texttt{true} or \texttt{false}\\ +% \optn{tabsize} & \meta{integer}\\ +% \optn{numbers} & \texttt{none}, \texttt{left}, \texttt{right}, or \texttt{both}\tnote{2}\\ +% \optn{firstnumber} & \texttt{auto}, \texttt{last}, or \meta{integer}\\ +% \optn{firstline} & \meta{integer}\\ +% \optn{lastline} & \meta{integer}\\ +% \optn{numberblanklines} & \texttt{true} or \texttt{false}\\ +% \optn{highlightlines}\tnote{2} & \marg{coma-separated list of integers or ranges}\\ +% \optn{style}\tnote{1} & \meta{string}\\ % \bottomrule % \end{tabular} %\begin{tablenotes} -%\item[1] \texttt{autogobble}, \texttt{numbers=both}, and \texttt{style} are offered only by \textsf{minted}. -%\item[2] line highlighting is offered only with \textsf{fvextra} or \textsf{minted} loaded. +%\item[1] \optn{autogobble}, \optn{numbers=both}, and \optn{style} are from \pkg{minted}. +%\item[2] line highlighting is offered only with \pkg{fvextra} or \pkg{minted} loaded. %\end{tablenotes} %\end{threeparttable} %\end{table} % % In order to define the verbatim code from the \LaTeX\ document itself, it is still possible -% to use, outside the scope of the \textsf{moodle} questions, the environments |filecontents*| (from the -% \textsf{filecontents} package or \LaTeX\ kernel itself since 2019) or |VerbatimOut| -% (from the \textsf{fancyvrb} and \textsf{fvextra} packages). -% +% to use, outside the scope of the \pkg{moodle} questions, the environments \env{filecontents*} +% (from the \pkg{filecontents} package or \LaTeX\ kernel itself since 2019) or \env{VerbatimOut} +% (from the \pkg{fancyvrb} and \pkg{fvextra} packages). +% % Here is an example: % \begin{VerbatimOut}[gobble=2]{minted.doc.out} % \documentclass[12pt,a4paper]{article} @@ -1294,12 +1949,9 @@ % \inputminted[numbers=left]{latex}{excerpt.tex} % On which line is the class loaded? % \item[feedback={ -% yes! \inputminted[highlightlines={4}]{latex}{excerpt.tex} -% } ] 4 -% \item[feedback={No. On line 3, there is only a comment.}, -% fraction=0] 3 -% \item[feedback={No. On line 5, the package \texttt{moodle} is loaded.}, -% fraction=0] 5 +% yes! \inputminted[highlightlines={4}]{latex}{excerpt.tex} }] 4 +% \item[feedback={Line 3 is just a comment.},fraction=0] 3 +% \item[feedback={Line 5 loads the package \texttt{moodle}},fraction=0] 5 % \end{numerical} % \begin{multi}[single]{IDE} % Consider the following \LaTeX\ code excerpt.\\ @@ -1315,117 +1967,184 @@ % \end{document} % \end{VerbatimOut} % \inputminted[gobble=2,frame=lines]{latex}{minted.doc.out} -% -% When code decorated with left-side line numbers is placed in question items, the output PDF could -% show a collision between numbers of the item and the first line. To avoid this, |\LVerbatimInput| or -% |\BVerbatimInput| can be used. Instead, when \textsf{minted} is used, the ``left-right'' mode can be +% +% When code decorated with left-side line numbers is placed in question items, the output \PDF\ could +% show a collision between numbers of the item and the first line. To avoid this, \cmd{\LVerbatimInput} or +% \cmd{\BVerbatimInput} can be used. Instead, when \pkg{minted} is used, the ``left-right'' mode can be % enforced with the \LaTeX\ command: % \begin{quote} % |\RecustomVerbatimEnvironment{Verbatim}{LVerbatim}{}| % \end{quote} % -% When using utilities from \textsf{fancyvrb}, \textsf{fvextra}, or \textsf{minted}, \textsf{moodle} -% sets framing options for the display of code in the output PDF: +% When using utilities from \pkg{fancyvrb}, \pkg{fvextra}, or \pkg{minted}, \pkg{moodle} +% sets framing options for the display of code in the output \PDF: +% \begin{quote} +% |\fvset{frame=lines,label={[Beginning of code]End of code},|\\ +% | framesep=3mm,numbersep=9pt}| +% \end{quote} +% These settings can be overridden using \cmd{\fvset} after the preamble. +% +% \section{Internationalization} +% +% This section is intended for authors of \Moodle\ quizzes writing in one or several +% languages other than English. It seems reasonable to assume that those users have heard +% of the packages \pkg{babel} or \pkg{polyglossia} (\XeTeX\ or \LuaTeX\ only), that +% both aim at enforcing language-related rules to \LaTeX\ documents. +% +% The contents of the \XML\ file that is generated by \pkg{moodle} depends entirely +% on the user input and \Moodle's \XML\ syntax: there is little room for \pkg{moodle} to +% internationalize something here. Instead, the focus of this section is the \PDF\ +% typesetting that is determined by \pkg{moodle}, where some internalization +% efforts can be of help. +% +% Both \pkg{babel} and \pkg{polyglossia} provide ways of specifiying a language for +% the document or a part of it. If one of these packages is loaded in the preamble, +% \pkg{moodle} will automatically load the package \pkg{translator} and rely on it +% to provide translations of its keys (see Table~\vref{tab:language_keys}) in +% different languages, with some knowledge on aliases. The package +% \pkg{translations} does a very similar job and can be loaded in the preamble +% to serve, if desired, as a replacement for \pkg{translator}. +% +% Currently, full-support is provided for English, French, German, Italian, and +% Spanish. Very limited support is provided for Catalan, Croatian, Czech, Danish, Dutch, +% Estonian, Finnish, Hungarian, Icelandic, Lithuanian, Norsk, Polish, Portuguese, +% Romanian, Swedish, and Turkish. +% +% Users may define their own translations in the preamble. For instance % \begin{quote} -% |\fvset{frame=lines,label={[Beginning of code]End of code},|\\ -% | framesep=3mm,numbersep=9pt}| +% |\AfterEndPreamble{|\\ +% | \DeclareTranslation|\marg{babel language name}|{True}{Foo}%|\\ +% | \DeclareTranslation|\marg{babel language name}|{False}{Bar}%|\\ +% |}| % \end{quote} -% These settings can be overidden using |\fvset| after the preamble. +% Note that, when the package \pkg{translations} is loaded, +% \cmd{\AfterEndPreamble} must not be used. % -% \section{Calculated Questions} -% Moodle's calculated questions are not supported by this package. -% -% However, as \href{https://github.com/avohns/python-latex-moodle-quiz}{demonstrated by A. -% Vohns}, an advanced scripting language may be used to generate a series of questions sharing -% the same prototype. -% -% We suggest to apply a specific tag to these questions. After import in Moodle, when creating -% a quizz, this tag can be selected to narrow down a random selection of questions. -% This would mimic the behavior of calculated questions while bringing the flexibility of your -% favorite scripting language. -% -% Here are two examples inspired from the work of A. Vohns. The first one relies on the -% native Lua capabilities of \LuaLaTeX. -% \begin{VerbatimOut}[gobble=1]{minted.doc.out} -% \begin{quiz}[tags={calculated}]{Example Quiz} -% \directlua{ -% \end{VerbatimOut} -% \inputminted[gobble=2,frame=topline]{latex}{minted.doc.out} -% \begin{VerbatimOut}[gobble=1]{minted.doc.out} -% function clozenum_print(pair,op,result) -% tex.print("\\begin{numerical}$"..pair[1].." "..op.." "..pair[2].." -% =$".."\\item ",result,"\\end{numerical}") -% end -% function cloze_print(pair,points) -% tex.print("\\begin{cloze}[points="..points.."]{Arithmetic Quiz -% ("..pair[1]..", "..pair[2]..")}Solve the following tasks!\\\\") -% clozenum_print(pair,"+",pair[1]+pair[2]) -% clozenum_print(pair,"-",pair[1]-pair[2]) -% clozenum_print(pair,"*",pair[1]*pair[2]) -% if pair[1]/pair[2]==math.floor(pair[1]/pair[2]) then -% clozenum_print(pair,":",math.floor(pair[1]/pair[2])) -% end -% tex.print("\\end{cloze}") -% end -% for x = 2,4 do -% for y = 2,4 do -% if x>y then -% if x/y==math.floor(x/y) then points=4 else points=3 end -% cloze_print({x,y},points) -% end -% end -% end -% \end{VerbatimOut} -% \inputminted[]{lua}{minted.doc.out} -% \begin{VerbatimOut}[gobble=1]{minted.doc.out} -% } -% \end{quiz} -% \end{VerbatimOut} -% \inputminted[gobble=2,frame=bottomline]{latex}{minted.doc.out} -% The second example makes use of the \textsf{python} package (|\usepackage{python}|). -% \begin{VerbatimOut}[gobble=1]{minted.doc.out} -% \begin{quiz}[tags={calculated}]{Example Quiz} -% \begin{python} -% \end{VerbatimOut} -% \inputminted[gobble=2,frame=topline]{latex}{minted.doc.out} -% \begin{VerbatimOut}[gobble=1]{minted.doc.out} -% def clozenum_print(pair,op,result): -% print(rf"""\begin{{numerical}} -% ${pair[0]} {op} {pair[1]} =$\item {result} -% \end{{numerical}}""") -% def cloze_print(pair,points): -% print(rf"""\begin{{cloze}}[points={points}]{{Arithmetic Quiz -% {(pair[0],pair[1])}}}Solve the following tasks!\\""") -% clozenum_print([x,y],"+",x+y) -% clozenum_print([x,y],"-",x-y) -% clozenum_print([x,y],"*",x*y) -% if pair[0]/pair[1] == pair[0]//pair[1]: -% clozenum_print([x,y],":",x//y) -% print("\end{cloze}") -% for x in range(2,5): -% for y in range(2,5): -% if x > y: -% if x/y == x//y: -% points=4 -% else: -% points=3 -% cloze_print([x,y],points) -% \end{VerbatimOut} -% \inputminted[]{python}{minted.doc.out} -% \begin{VerbatimOut}[gobble=1]{minted.doc.out} -% \end{python} -% \end{quiz} -% \end{VerbatimOut} -% \inputminted[gobble=2,frame=bottomline]{latex}{minted.doc.out} -% These two codes yield the same XML content. -% -% \section{Known Limitations and Call for Bug Reports} -% Table~\ref{tab:support-limitations} lists some features supported, limitations, and -% bugs. +% Contributions to improve or broaden the linguistic support are very welcome. +% +% \begin{center} +% \begin{longtable}{ l p{.55\textwidth} } +% \caption{\pkg{moodle}'s language keys for internationalization of the \PDF\ typesetting.} +% \label{tab:language_keys}\\ +% \toprule +% Key & Context\\ +% \cmidrule(lr){1-1}\cmidrule(lr){2-2} +% \endfirsthead +% \multicolumn{2}{c}% +% {\tablename\ \thetable\ -- \textit{Continued from previous page}} \\ +% \hline +% Key & Context\\ +% \cmidrule(lr){1-1}\cmidrule(lr){2-2} +% \endhead +% \hline\multicolumn{2}{r}{\textit{Continued on next page}} \\ +% \endfoot +% \bottomrule +% \endlastfoot +% \optn{True} & indicates option ``True'' in a True/False question.\\ +% \optn{False} & indicates option ``False'' in a True/False question.\\ +% \optn{cloze} & tag indicating a ``cloze'' question.\\ +% \optn{description} & tag indicating a ``description'' question.\\ +% \optn{essay} & tag indicating an ``essay'' question.\\ +% \optn{matching} & tag indicating a ``matching'' question.\\ +% \optn{multi} & tag indicating a ``multichoice'' question.\\ +% \optn{numerical} & tag indicating a ``numerical'' question.\\ +% \optn{shortanswer} & tag indicating a ``shortanswer'' question.\\ +% \optn{truefalse} & tag indicating a ``true/false'' question.\\ +% \optn{Shuffle} & tag indicating that options offered will be shuffled in a +% ``multichoice'' or ``matching'' question.\\ +% \optn{Single} & tag indicating that only one option can be selected in a +% ``multichoice'' question.\\ +% \optn{Multiple} & tag indicating that several options can be selected in a +% ``multichoice'' question.\\ +% \optn{marked out of} & tag indicating the weight of the question (maximum +% number of points), followed by a number.\\ +% \optn{penalty} & tag indicating the penalty factor applied for each wrong +% attempt in adaptive mode.\\ +% \optn{tags} & indicates the beginning of a tag list characterizing the +% question.\\ +% \optn{All-or-nothing} & tag indicating that all correct options must be +% selected to get credited a good answer.\\ +% \optn{Case-Sensitive} & tag indicating that the case of characters matters +% for a ``Shortanswer'' question.\\ +% \optn{Case-Insensitive} & tag indicating that the case of characters +% does not matter for a ``Shortanswer'' question.\\ +% \optn{Drag and drop} & tag indicating that a ``matching'' question relies +% on the Drag-and-drop plugin.\\ +% \optn{Information for graders} & indicates the beginning of a paragraph +% where instructions for the graders of an ``essay'' question are given.\\ +% \optn{Response template} & indicates the beginning of a paragraph where +% the answer template of an ``essay'' question is represented.\\ +% \optn{editor} & tag indicating that, for answering an essay question, an +% editor with \HTML\ support will be proposed.\\ +% \optn{editorfilepicker} & tag indicating that, for answering an essay question, +% an editor with \HTML\ support and a file picker will be proposed.\\ +% \optn{plain} & tag indicating that, for answering an essay question, an +% editor with no markup support will be proposed.\\ +% \optn{monospaced} & tag indicating that, for answering an essay question, +% an editor with fixed-width font and no markup support will be proposed.\\ +% \optn{noinline} & tag indicating that, for answering an essay question, a file +% picker will be proposed.\\ +% \optn{Total of marks} & at the end of the quiz, indicates the sum of the +% weights of all questions, followed by a colon and a number. \\ +% \end{longtable} +% \end{center} +% +% \section{Package Development}\label{sec:dev} +% +% \subsection{Feature Requests, Bug Reports, and Contributions} +% +% This package is developed as a collaborative project, currently hosted +% on the Gitlab server instance \url{https://framagit.org/mattgk/moodle}. +% The project's activity can be monitored there: reported issues, last +% modifications, \dots +% +% Contributions, either bug reports or fixes, are welcome. Users willing to +% help can either sign-in with an existing \brand{GitHub}, \brand{Gitlab.com}, or +% \brand{Bitbucket} account or register a new account. +% +% Of course, getting in touch with the package maintainer by +% \href{mailto:guerquin-kernATcrans.org}{email} works as well. +% +% The authors have used this package together with a limited number of colleagues +% for a few semesters of teaching. If other users adopt this package, we fully expect them +% to find bugs. +% +% When experiencing a problem and before reporting it, please check whether +% or not something similar has already been filed as an issue +% \href{https://framagit.org/mattgk/moodle/-/issues?scope=all&state=all}{here}. +% If the problem appears to be new, please report it by following these steps: +% \begin{enumerate} +% \item Prepare a \emph{minimal} working example, i.e. a \filenm{.tex} file shrunk down +% to the strict minimum (loaded packages, code, \dots) while still showing the +% faulty behavior upon compilation. +% \item Gather and send the \filenm{*.tex}, \filenm{*.log} and \filenm{*-moodle.xml} files together +% with an explanation about +% \begin{itemize} +% \item your local working environment (\TeX\ engine and distribution, platform, +% external tools used, \dots), +% \item the version of the \Moodle\ instance you are using +% (for instance see the file |https://|\meta{server-domain}|/lib/upgrade.txt| ) +% \item the faulty behavior, and +% \item what you expected instead. +% \end{itemize} +% \end{enumerate} +% +% \subsection{Known Limitations} +% +% When using with pdf\TeX\ for compilation, \pkg{moodle} supports +% question contents with \acro{ASCII} characters only. The use of +% non-\acro{ASCII} characters may work in some cases but will most +% probably yield compilation errors or undesired \XML\ contents. +% +% Instead, \pkg{moodle} will work flawlessly when \XeTeX\ and +% \LuaTeX\ are used to compile \UTF-8 encoded documents. +% +% Table~\vref{tab:support-limitations} lists +% some features supported, limitations, and bugs. %\begin{table}[tbp] %\centering %\begin{threeparttable}[b] -%\caption{Content enrichment (pictures, equations) support after XML import in Moodle v3.5.7, +%\caption{Content enrichment (pictures, equations) support after \XML\ import in \Moodle\ v3.5.7, % depending on the question type.} %\label{tab:support-limitations} %\begin{tabular}{lccc} @@ -1433,23 +2152,23 @@ % & \multicolumn{3}{l}{XML rendering in\dots}\\\cmidrule(lr){2-4} %Question type & Question & Answer & Feedback\\\cmidrule(lr){1-1}\cmidrule(lr){2-2} %\cmidrule(lr){3-3}\cmidrule(lr){4-4} -% \href{https://docs.moodle.org/35/en/Multiple_Choice_question_type}{Multichoice} +% \href{https://docs.moodle.org/en/Multiple_Choice_question_type}{Multichoice} %& yes & yes & yes \\ -% \href{https://docs.moodle.org/35/en/Numerical_question_type}{Numerical} +% \href{https://docs.moodle.org/en/Numerical_question_type}{Numerical} %& yes & no\tnote{1} & yes \\ -% \href{https://docs.moodle.org/35/en/Short-Answer_question_type}{Short Answer} +% \href{https://docs.moodle.org/en/Short-Answer_question_type}{Short Answer} % & yes & no\tnote{1} & yes \\ -% Matching (\href{https://docs.moodle.org/35/en/Matching_question_type}{std}) +% Matching (\href{https://docs.moodle.org/en/Matching_question_type}{std}) %& yes & no\tnote{2} & no\tnote{3} \\ -% Matching (\href{https://docs.moodle.org/35/en/Drag_and_drop_matching_question_type}{dd}) +% Matching (\href{https://docs.moodle.org/en/Drag_and_drop_matching_question_type}{dd}) % & yes & yes\tnote{4} & no\tnote{3} \\ -% \href{https://docs.moodle.org/35/en/Essay_question_type}{Essay} +% \href{https://docs.moodle.org/en/Essay_question_type}{Essay} %& yes & yes\tnote{5,6} & yes\tnote{5} \\ -% \href{https://docs.moodle.org/35/en/True/False_question_type}{True/False} +% \href{https://docs.moodle.org/en/True/False_question_type}{True/False} %& yes & no & yes \\ -% \href{https://docs.moodle.org/35/en/Description_question_type}{Description} +% \href{https://docs.moodle.org/en/Description_question_type}{Description} %& yes & $\varnothing$ & yes \\ -%\href{https://docs.moodle.org/35/en/Embedded_Answers_(Cloze)_question_type}{Cloze} & +%\href{https://docs.moodle.org/en/Embedded_Answers_(Cloze)_question_type}{Cloze} & %yes & $\varnothing$& $\varnothing$ \\\cmidrule(lr){1-1} %\hspace{1em}Numerical & yes & no\tnote{1} & yes \\ %\hspace{1em}Short Answer & yes & no\tnote{1} & yes\tnote{7} \\ @@ -1458,258 +2177,189 @@ %\hspace{1em}Multi (vertical) & yes & yes & yes \\\bottomrule %\end{tabular} %\begin{tablenotes} -%\item[1] Moodle prompts the student for an answer and then compares it to the +%\item[1] \Moodle\ prompts the student for an answer and then compares it to the %solutions provided. This is text-only. -%\item[2] Moodle uses a dropdown list to let one choose among the possible +%\item[2] \Moodle\ uses a dropdown list to let one choose among the possible %answers. This forbids either picture inclusion and \LaTeX\ rendering. -%\item[3] Not supported by Moodle (in this context, answer-specific feedback +%\item[3] Not supported by \Moodle\ (in this context, answer-specific feedback %represents lots of possible combinations). -%\item[4] The drag-and-drop-matching plugin seems broken before version 1.6 -%20190409. Moodle's XML import fails with a \textsf{dmlwriteexception} when -%the field content exceeds few hundreds characters. This prevents the inclusion +%\item[4] The drag-and-drop-matching plugin seems broken before version 1.6 +%20190409. \Moodle's \XML\ import fails with a \texttt{dmlwriteexception} when +%the field content exceeds few hundreds characters. This prevents the inclusion %of most base64 images and maybe some complicated equations. -%\item[5] For this question type and in the context of XML generation, the -%Answer column represents the ``template" while the Feedback column represents -%the ``notes for the grader". Obviously, the grading process is not automatic +%\item[5] For this question type and in the context of \XML\ generation, the +%Answer column represents the ``template" while the Feedback column represents +%the ``notes for the grader". Obviously, the grading process is not automatic %and there is no answer-specific feedback. -%\item[6] Picture and \LaTeX\ rendering could be done, but only after +%\item[6] Picture and \LaTeX\ rendering could be done, but only after %submission and only if the keyval ``response format" is set to ``html". -%\item[7] Moodle only reveals the feedback when hovering the checkmark or X +%\item[7] \Moodle\ only reveals the feedback when hovering the checkmark or X %mark with the mouse. %\end{tablenotes} %\end{threeparttable} %\end{table} -% Tables~\ref{tab:diacritical}, \ref{tab:ligatures}, and \ref{tab:other} describe the current -% state of support special characters, accents and other diacritical marks. -%\begin{table}[tbp] -% \centering -% \caption{Support for diacritical marks -% in a UTF8-coded \TeX~document compiled with (pdf)\LaTeX\ (packages -% \texttt{inputenc} with option \texttt{utf8} and \texttt{fontenc} with option \texttt{T1}), -% \LuaLaTeX\ or \XeLaTeX\ (package \texttt{fontspec}).} -% \label{tab:diacritical} -% \begin{threeparttable}[t] -% \begin{tabular}{*{6}{l}} -% \toprule -% \multicolumn{4}{l}{Input type} & \multicolumn{2}{l}{Engine support}\\ -% \cmidrule(lr){1-4}\cmidrule(lr){5-6} -% \multicolumn{2}{l}{Unicode} & \multicolumn{2}{l}{\LaTeX} & \XeLaTeX\ or \LuaLaTeX & (pdf)\LaTeX \\ -% \cmidrule(lr){1-2}\cmidrule(lr){3-4}\cmidrule(lr){5-5}\cmidrule(lr){6-6} -% \aa & \AA & \verb|\aa| & \verb|\AA| & Unicode and \LaTeX & Unicode and \LaTeX \\ -% \`a & \`A & \verb|\`a| & \verb|\`A| & Unicode and \LaTeX & Unicode and \LaTeX \\ -% \^a & \^A & \verb|\^a| & \verb|\^A| & Unicode and \LaTeX & Unicode and \LaTeX \\ -% \~a & \~A & \verb|\~a| & \verb|\~A| & Unicode and \LaTeX & Unicode and \LaTeX \\ -% \'e & \'E & \verb|\'e| & \verb|\'E| & Unicode and \LaTeX & Unicode and \LaTeX \\ -% \`e & \`E & \verb|\`e| & \verb|\`E| & Unicode and \LaTeX & Unicode and \LaTeX \\ -% \"e & \"E & \verb|\"e| & \verb|\"E| & Unicode and \LaTeX & Unicode and \LaTeX \\ -% \^e & \^E & \verb|\^e| & \verb|\^E| & Unicode and \LaTeX & Unicode and \LaTeX \\ -% \^i & \^I & \verb|\^i| & \verb|\^I| & Unicode and \LaTeX & Unicode and \LaTeX \\ -% \"i & \"I & \verb|\"i| & \verb|\"I| & Unicode and \LaTeX & Unicode and \LaTeX \\ -% \~n & \~N & \verb|\~n| & \verb|\~N| & Unicode and \LaTeX & Unicode and \LaTeX \\ -% \~o & \~O & \verb|\~o| & \verb|\~O| & Unicode and \LaTeX & Unicode and \LaTeX \\ -% \"o & \"O & \verb|\"o| & \verb|\"O| & Unicode and \LaTeX & Unicode and \LaTeX \\ -% \^o & \^O & \verb|\^o| & \verb|\^O| & Unicode and \LaTeX & Unicode and \LaTeX \\ -% \`u & \`U & \verb|\`u| & \verb|\`U| & Unicode and \LaTeX & Unicode and \LaTeX \\ -% \"u & \"U & \verb|\"u| & \verb|\"U| & Unicode and \LaTeX & Unicode and \LaTeX \\ -% \^u & \^U & \verb|\^u| & \verb|\^U| & Unicode and \LaTeX & Unicode and \LaTeX \\ -% \c{c} & \c{C} & \verb|\c{c}| & \verb|\c{C}| & Unicode and \LaTeX & Unicode and \LaTeX \\ -% \c{s} & \c{S} & \verb|\c{s}| & \verb|\c{S}| & Unicode and \LaTeX & \LaTeX\ only\\ -% \c{t} & \c{T} & \verb|\c{t}| & \verb|\c{T}| & Unicode and \LaTeX & \LaTeX\ only\\ -% \H{o} & \H{O} & \verb|\H{o}| & \verb|\H{O}| & Unicode and \LaTeX & \LaTeX\ only\\ -% \H{u} & \H{U} & \verb|\H{u}| & \verb|\H{U}| & Unicode and \LaTeX & \LaTeX\ only\\ -% \"y & \"Y & \verb|\"y| & \verb|\"Y| & Unicode and \LaTeX & \LaTeX only\\ -% \k{a} & \k{A} & \verb|\k{a}| & \verb|\k{A}| & Unicode and \LaTeX & \LaTeX\ only\\ -% \k{e} & \k{E} & \verb|\k{e}| & \verb|\k{E}| & Unicode and \LaTeX & \LaTeX\ only\\ -% \k{i} & \k{I} & \verb|\k{i}| & \verb|\k{I}| & Unicode and \LaTeX & \LaTeX\ only\\ -% \k{o} & \k{O} & \verb|\k{o}| & \verb|\k{O}| & Unicode and \LaTeX & \LaTeX\ only\\ -% \k{u} & \k{U} & \verb|\k{u}| & \verb|\k{U}| & Unicode and \LaTeX & \LaTeX\ only\\ -% \u{a} & \u{A} & \verb|\u{a}| & \verb|\u{A}| & Unicode and \LaTeX & \LaTeX\ only\\ -% \u{e} & \u{E} & \verb|\u{e}| & \verb|\u{E}| & Unicode and \LaTeX & \LaTeX\ only\\ -% \u{g} & \u{G} & \verb|\u{g}| & \verb|\u{G}| & Unicode and \LaTeX & \LaTeX\ only\\ -% \u{\i} & \u{I} & \verb|\u{\i}| & \verb|\u{I}| & Unicode and \LaTeX & \LaTeX\ only\tnote{1}\\ -% \u{o} & \u{O} & \verb|\u{o}| & \verb|\u{O}| & Unicode and \LaTeX & \LaTeX\ only\\ -% \v{c} & \v{C} & \verb|\v{c}| & \verb|\v{C}| & Unicode and \LaTeX & \LaTeX\ only\\ -% \v{d} & \v{D} & \verb|\v{d}| & \verb|\v{D}| & Unicode and \LaTeX & \LaTeX\ only\\ -% \v{e} & \v{E} & \verb|\v{e}| & \verb|\v{E}| & Unicode and \LaTeX & \LaTeX\ only\\ -% \v{l} & \v{L} & \verb|\v{l}| & \verb|\v{L}| & Unicode and \LaTeX & \LaTeX\ only\\ -% \v{n} & \v{N} & \verb|\v{n}| & \verb|\v{N}| & Unicode and \LaTeX & \LaTeX\ only\\ -% \v{r} & \v{R} & \verb|\v{r}| & \verb|\v{R}| & Unicode and \LaTeX & \LaTeX\ only\\ -% \v{s} & \v{S} & \verb|\v{s}| & \verb|\v{S}| & Unicode and \LaTeX & \LaTeX\ only\\ -% \v{t} & \v{T} & \verb|\v{t}| & \verb|\v{T}| & Unicode and \LaTeX & \LaTeX\ only\\ -% \v{z} & \v{Z} & \verb|\v{z}| & \verb|\v{Z}| & Unicode and \LaTeX & \LaTeX\ only\\ -% \bottomrule -% \end{tabular} -% \begin{tablenotes} -% \item[1] The rendering of |\u{i}| is flawed in (pdf)\LaTeX's traditional output. -% ^^A \XeLaTeX\ renders correctly |\u{i}|, that is, without a superscript dot. -% ^^A Instead, with (pdf)\LaTeX\ the rendering of |\u{i}| is flawed by the -% ^^A superposition of the superscript dot and the breve diacritical mark. -% ^^A Both engines render |\u{\i}| as expected. -% \end{tablenotes} -% \end{threeparttable} -% \end{table} -% -%\begin{table}[tbp] -% \centering -% \begin{threeparttable}[t] -% \caption{Support for ligatures in a UTF8-coded \TeX~document compiled with (pdf)\LaTeX\ (packages -% \texttt{inputenc} with option \texttt{utf8}, \texttt{fontenc} with option \texttt{T1}), -% \LuaLaTeX\ or \XeLaTeX\ (package \texttt{fontspec}).} -% \label{tab:ligatures} -% \begin{tabular}{llllll} -% \toprule -% \multicolumn{4}{l}{Input type} & \multicolumn{2}{l}{Engine support}\\ -% \cmidrule(lr){1-4}\cmidrule(lr){5-6} -% \multicolumn{2}{l}{Unicode} & \multicolumn{2}{l}{\LaTeX} & \XeLaTeX \ or \LuaLaTeX& (pdf)\LaTeX \\ -% \cmidrule(lr){1-2}\cmidrule(lr){3-4}\cmidrule(lr){5-6}\cmidrule(lr){6-6} -% \ae & \AE & \verb|\ae| & \verb|\AE| & Unicode and \LaTeX & \LaTeX\ only\\ -% \oe & \OE & \verb|\oe| & \verb|\OE| & Unicode and \LaTeX & \LaTeX\ only\\ -% \ss & \SS & \verb|\ss| & \verb|\SS| & Unicode and \LaTeX\tnote{1} & \LaTeX\ only\tnote{2}\\ -% \bottomrule -% \end{tabular} -% \begin{tablenotes}[b] -% \item[1] the Libertine font, used in this documentation and available for instance via the -% package |libertine|, defines the glyph \SS. Most fonts do not define this glyph. -% \item[2] \LaTeX\ defines the \verb|\SS| macro but (pdf)\LaTeX\ renders it as a doubled capital S. -% \end{tablenotes} -% \end{threeparttable} -% \end{table} -% -%\begin{table}[tbp] -% \centering -% \begin{threeparttable}[b] -% \caption{Support for other glyphs and punctuation marks in a UTF8-coded \TeX~document compiled -% with (pdf)\LaTeX\ (packages \texttt{inputenc} with option \texttt{utf8}, \texttt{fontenc} with -% option \texttt{T1}), \LuaLaTeX\ or \XeLaTeX\ (package \texttt{fontspec}).} -% \label{tab:other} -% \begin{tabular}{llllll} -% \toprule -% \multicolumn{4}{l}{Input type} & \multicolumn{2}{l}{Engine support}\\ -% \cmidrule(lr){1-4}\cmidrule(lr){5-6} -% \multicolumn{2}{l}{Unicode} & \multicolumn{2}{l}{\LaTeX} & \XeLaTeX\ or \LuaLaTeX & (pdf)\LaTeX \\ -% \cmidrule(lr){1-2}\cmidrule(lr){3-4}\cmidrule(lr){5-5}\cmidrule(lr){6-6} -% \l & \L & \verb|\l| & \verb|\L| & Unicode and \LaTeX & \LaTeX\ only\\ -% \o & \O & \verb|\o| & \verb|\O| & Unicode and \LaTeX & \LaTeX\ only\\ -% « & & \verb|\guillemotleft|\tnote{1} & & Unicode and \LaTeX & \LaTeX\ only\\ -% » & & \verb|\guillemotright|\tnote{1} & & Unicode and \LaTeX & \LaTeX\ only\\ -% ¿ & & \verb|\textquestiondown| & & Unicode and \LaTeX & \LaTeX\ only\\ -% ¡ & & \verb|\textexclamdown| & & Unicode and \LaTeX & \LaTeX\ only\\ -% \bottomrule -% \end{tabular} -% \begin{tablenotes} -% \item[1] for the same symbols the package |babel| defines |\flqq| and |\frqq|, and -% if loaded with option |french| defines |\og| and |\fg|. These commands -% are also supported by \textsf{moodle}. -% \end{tablenotes} -% \end{threeparttable} -% \end{table} % -% Some features of Moodle quizzes have not yet been implemented in \textsf{moodle}. +% Some features of \Moodle\ quizzes have not yet been implemented in \pkg{moodle}. % Here is a non-exhaustive list. % \begin{itemize} -% \item Moodle's feature of designating feedback for correct, +% \item \Moodle's feature of designating feedback for correct, % partially correct, and incorrect answers. -%^^A \item Calculated questions; that is, automatically generated numerical questions +%^^A \item Calculated questions; that is, automatically generated \env{numerical} questions %^^A using randomly chosen numbers. % \item Hints -% \item Units handling in numerical questions +% \item Units handling in \env{numerical} questions % \end{itemize} -% The authors have used this package together with a limited number of colleagues -% for a few semesters of teaching. If other users adopt this package, we fully expect them -% to find bugs. If you run into a problem, please have a look at Section~\ref{sec:dev}. -% -% \section{Compatibility} -% This package has been originally written for and tested with the implementation of -% Moodle 2.9 run by Moodlerooms for St.~Norbert College in January 2016. -% Since then, it has been successfully combined with Moodle 3.5. -% Future versions of this package might include some support for -% specifying your version of Moodle in the |.tex| file to help ensure compatibility. -% -% As the ultimate purpose of this package is the generation of XML files, -% future versions of \textsf{moodle} will attempt to maintain backwards -% compatibility with earlier versions regarding the XML output, apart from +% +% \subsection{Compatibility} +% This package has been originally written for and tested with the implementation of +% \Moodle\ 2.9 run by Moodlerooms for St.~Norbert College in January 2016. +% Since then, it has been successfully combined with \Moodle\ 3.5. +% +% The package option \optn{LMS} lets you specify the targeted \Moodle\ version +% and helps ensuring compatibility. +% +% As the ultimate purpose of this package is the generation of \XML\ files, +% future versions of \pkg{moodle} will attempt to maintain backwards +% compatibility with earlier versions regarding the \XML\ output, apart from % bug fixes. -% Backwards compatibility of the PDF output is not yet guaranteed, however, -% in case the author or users discover better ways for the PDF to display -% the underlying XML data to be proofread. -% -% In other words, compiling your current |.tex| file with a future version -% of \textsf{moodle} should produce the same XML file it does now +% Backwards compatibility of the \PDF\ output is not yet guaranteed, however, +% in case the author or users discover better ways for the \PDF\ to display +% the underlying \XML\ data to be proofread. +% +% In other words, compiling your current \filenm{.tex} file with a future version +% of \pkg{moodle} should produce the same \XML\ file it does now % (apart from bug fixes), % but it might produce a more informative, and hence different, -% PDF output. -% -% -% \section{Unrelated Tip: Quality of Moodle \TeX\ Images} -% This has nothing to do with \textsf{moodle}, but is a Frequently Asked Question +% \PDF\ output. +% +% \subsection{Unrelated Tip: Quality of \Moodle\ \TeX\ Images} +% This has nothing to do with \pkg{moodle}, but is a Frequently Asked Question % in is own right. -% On some servers, at least, Moodle's default ``\TeX\ Filter'' for +% On some servers, at least, \Moodle's default ``\TeX\ Filter'' for % displaying mathematical notation is of abysmally poor quality, rending mathematics -% as low-resolution PNG's. One solution that has worked for me is to go +% as low-resolution \PNG's. One solution that has worked for me is to go % to ``Course Administration $\to$ Filters,'' turn ``\TeX\ Notation'' \emph{off}, % but turn ``MathJax'' \emph{on}. This forces \TeX\ code to be rendered by MathJax -% instead of Moodle, producing much higher-quality results. -% -% \clearpage -% \section{Package Development}\label{sec:dev} -% This package is developed as a collaborative project, currently hosted -% on the Gitlab server instance \url{https://framagit.org/mattgk/moodle}. -% The project's activity can be monitored there: reported issues, last -% modifications, \dots -% -% Contributions, either bug reports or fixes, are welcome. Users willing to -% help can either sign-in with an existing \textsf{GitHub}, \textsf{Gitlab.com}, or -% \textsf{Bitbucket} account or register a new account. -% -% Of course, getting in touch with the package maintainer by -% \href{mailto:guerquin-kernATcrans.org}{email} works as well. +% instead of \Moodle, producing much higher-quality results. % -% When experiencing a problem and before reporting it, please check whether -% or not something similar has already been filed as an issue -% \href{https://framagit.org/mattgk/moodle/-/issues?scope=all&state=all}{here}. -% If the problem appears to be new, please report it by following these steps: -% \begin{enumerate} -% \item Prepare a \emph{minimal} working example, i.e. a |.tex| file shunk down -% to the strict minimum (loaded packages, code, \dots) while still showing the -% faulty behavior upon compilation. -% \item Gather and send the |*.tex|, |*.log| and |*-moodle.xml| files together -% with an explanation about -% \begin{itemize} -% \item your working environment (\TeX\ engine and distribution, operating -% system, \dots), -% \item the faulty behavior, and -% \item what you expected instead. -% \end{itemize} -% \end{enumerate} -% % ^^A\clearpage % \changes{v0.5}{2016/01/05}{Initial version} -% \changes{v0.6}{2019/02/18}{Bux-fixing release} +% \changes{v0.6}{2019/02/18}{Bug-fixing release} % \changes{v0.7}{2020/07/09}{Feature extensions} % \changes{v0.8}{2021/01/04}{Bug fixes and feature extensions} % \changes{v0.9}{2021/02/07}{Bug fixes and feature extensions} -% \begin{changelog}[title={Version History},author={Matthieu Guerquin-Kern}] +% \changes{v1.0}{2023/01/28}{Bug fixes and feature extensions} +% \begin{changelog}[title={Version History},sectioncmd=\section*,author={Matthieu Guerquin-Kern}] +% ^^A \begin{version}[version=\fileversion,]^^Adate=] +% ^^A \end{version} +% \begin{version}[version=1.0,date=2023-01-28] +% \added +% ^^A \item A section describing the use of templates for generating large number +% ^^A of quizzes has been added (courtesy of Colin Caprani). +% \item For templating purposes, in \optn{draft} mode, general TeX code can +% now be used in items and |tolerance| key of numerical questions +% (courtesy of Colin Caprani). +% \item Support for the \env{quote} and \env{quotation} environments in the HTML +% conversion process (courtesy of Gerald Teschl). +% \item Experimental package option \optn{pluginfile} mimics the way +% \Moodle\ embeds pictures in the \XML. +% \item Answer box for Essay questions with \optn{handout}. +% \item Key-value package option \optn{LMS} to target a specific version +% of \Moodle. +% \item Support for more text mode diacritic and horizontal spacing +% commands. +% \item Macros \cmd{\moodleversion} and \cmd{\moodledate} are defined. +% \item Experimental package option \optn{samepage} to avoid splitting +% questions across multiple pages. +% \item \optn{sanction} key to set default mark for incorrect answers. +% \item Started the internationalization of the package based on +% \pkg{translator} (optionally \pkg{translations}). English, +% French, German, Italian, and Spanish +% are fully supported (with help from J\"urgen Vollmer for German +% and Romano Giannetti for Italian and Spanish). Contributions are welcome. +% \item Warn user of the \pkg{babel} package set for Turkish +% that using the shorthands will not play well with \pkg{moodle}. +% \item Support for \cmd{\i} in conversion to \HTML. +% \item \SVG\ option support for Windows (courtesy of Wolf M\"uller). +% \changed +% \item In Cloze \env{multi} subquestions, the default mode is +% \optn{inline} when only one answer is to be selected and +% \optn{vertical} when several answers can be selected. +% \item Single straight quotes (apostrophe) in math mode are passed as-is +% to the \XML\ (with help from Keno Wehr). +% \item Empty groups |{}| in math-mode are passed as-is to the \XML\ +% (with help from Keno Wehr). +% \item Inside \env{cloze} subquestions, \optn{points} are forced to the +% nearest positive integer. ^^AA warning is issued when the user setting +% ^^Ais modified. +% \item \XML\ stamp exposes compilation time. +% \item Labels of proposed answers now following \Moodle's convention +% (\emph{1., 2., \dots}) in the \PDF\ typesetting of \env{multi} questions. +% \item Automatic sanction mechanism for incorrect choices in \env{multi} +% questions with multiple answers allowed. Now applies also inside +% \env{cloze} questions. +% \item In \env{cloze} subquestions, non-integer fractions are rounded. +% \item Rewording of some indications in the \PDF, related to internationalization. +% \item The answers of \env{matching} questions are now converted to \HTML\ +% (accents and \cmd{\htmlonly} in mind). +% \removed +% \item Support for non-\acro{ASCII} characters abandoned when compiling +% with \prog{pdflatex}. +% \fixed +% \item In math-mode, \cmd{\underline} is no longer translated to \HTML. +% \item Preexisting pictures no longer get deleted when including graphics +% without specifying the extension (courtesy of Colin Caprani). +% \item In answers of \env{matching} questions, some \TeX\ macros will not +% break compilation. A problem with curly braces persists. +% \item The cloze subquestions now inherit \optn{points} set at +% the higher levels. +% \item Option \optn{single=false} now works in Cloze \env{multi} questions. +% \item Undesired trailing spaces are removed from offered answers in +% \env{matching} question. +% \item Compatibility with \pkg{siunitx} version 3. +% \item Compatibility with \pkg{minted} starting from 2021/12/24 v2.6. +% \item Different issues with graphics handling on Windows (\prog{magick}, +% \prog{del}, \prog{move},\dots). +% \item Symbols |<| and |>| are translated to \HTML\ equivalents, also in +% text-mode. +% \item Warning german-writing and (Xe$\mid$Lua)\TeX\ users about troubles +% caused by text-mode umlauts. +% \item In \env{cloze} subquestions items and outside math environments, +% the equal symbol (|=|) no longer interferes with the Cloze syntax. +% \item A pagebreak occuring inside cloze shortanswers would reset page numbers. +% \item The redefinition of the \env{description} environment is limited to +% the scope of the \env{quiz}. +% \item PDF typesetting of matching answers (line breaks, repeated matches). +% \item Symbols \cmd{\%} found inside math mode are escaped for \HTML. +% \item The \optn{fraction} keys specified inside \env{cloze} questions are +% forced to integer values as required by \Moodle's \XML\ format. +% \item True/False no longer broken when \pkg{hyperref} is loaded. +% \item Tolerances in \env{numerical} answers now correctly displayed in \PDF. +% \item Warning for users running a too old version of \pkg{graphics}. +% \item In the code included with \pkg{verbatim}, \pkg{fancyvrb}, or +% \pkg{fvextra}, characters that matter for \HTML\ are escaped. +% \end{version} % \begin{version}[version=0.9,date=2021-02-07] % \added -% \item Support for \href{https://docs.moodle.org/310/en/All_or_nothing_multiple_choice_question_type} +% \item Support for \href{https://docs.moodle.org/en/All_or_nothing_multiple_choice_question_type} % {all-or-nothing multiple choice} questions. -% \item Support for the ogonek diacritical mark via |\k|\marg{\dots}. -% \item Warn user of the \texttt{babel} package set for a German-related language -% that using the character |"| will not play well with \textsf{moodle}. -% \item Support for \textsf{babel} commands related to German quotes. +% \item Support for the ogonek diacritical mark via \cmd{\k}\marg{\dots}. +% \item Warn user of the \pkg{babel} package set for a German-related language +% that using the character |"| will not play well with \pkg{moodle}. +% \item Support for \pkg{babel} commands related to German quotes. % \item Support for en-dash (--) outside of math mode. -% \item Support for |\%| in conversion to HTML. -% \item Command |\htmlonly[]{}| to pass HTML contents directly to the XML file. +% \item Support for \cmd{\%} in conversion to \HTML. +% \item Command |\htmlonly[]{}| to pass \HTML\ contents directly to the \XML\ file. % \changed % \item An error is issued when a graphics conversion step fails. -% \item Irrelevant points are no longer written at the cloze question level in PDF and XML. -% \item The total number of marks is shown in the PDF at the end of each quiz. -% \item The |tags| key can now be used to specify a comma-separated list of tags. +% \item Irrelevant points are no longer written at the \env{cloze} question level in \PDF\ and \XML. +% \item The total number of marks is shown in the \PDF\ at the end of each quiz. +% \item The \optn{tags} key can now be used to specify a comma-separated list of tags. % \fixed -% \item Answer text of shortanswer questions is converted to HTML. -% \item Paragraph breaks in multi and essay items no longer break compilation. -% \item Question text in Essays was not shown in PDF file. -% \item Commands |\textsc|, |\underline|, |\url|, and |\href| yielded HTML code with +% \item Answer text of \env{shortanswer} questions is converted to \HTML. +% \item Paragraph breaks in \env{multi} and \env{essay} items no longer break compilation. +% \item Question text in Essays was not shown in \PDF\ file. +% \item Commands \cmd{\textsc}, \cmd{\underline}, \cmd{\url}, and \cmd{\href} yielded \HTML\ code with % inadequate double quotation marks. % \item Broken base64-encoding pipeline for images under Windows (thanks to Andreas Vohns). % \item Repeated single right quotation marks no longer merged in math mode @@ -1717,64 +2367,64 @@ % \end{version} % \begin{version}[version=0.8,date=2021-01-04] % \added -% \item Support for inclusion of GIF pictures. -% \item Added package option |svg| to avoid the rasterization of vector graphics. -% \item New macro |\setsubcategory| to define subcategories, reflected in PDF and XML. -% \item Package option |handout| for sharing PDF with students. +% \item Support for inclusion of \GIF\ pictures. +% \item Added package option \optn{svg} to avoid the rasterization of vector graphics. +% \item New macro \cmd{\setsubcategory} to define subcategories, reflected in \PDF\ and \XML. +% \item Package option \optn{handout} for sharing \PDF\ with students. % \item Extensions can be omitted when including pictures. % \item Description question type. -% \item \LuaLaTeX\ is now supported (and recommended for UTF8-coded sources). +% \item \LuaLaTeX\ is now supported (and recommended for \UTF-8 coded sources). % \item Examples of ways to reproduce the behavior of calculated questions. % \item Command to trigger the automatic recording of new commands. -% \item Mechanism to match |fraction| key to values accepted by Moodle. -% \item A |fractiontol| key to control the tolerance in this mechanism. +% \item Mechanism to match \optn{fraction} key to values accepted by \Moodle. +% \item A \optn{fractiontol} key to control the tolerance in this mechanism. % \item Support for inverted punctuation marks |¿| and |¡|. -% \item Support for |\_| and |\textbackslash|. -% \item Support for the wildcard character as an answer in numerical questions. +% \item Support for \cmd{\_} and \cmd{\textbackslash}. +% \item Support for the wildcard character as an answer in \env{numerical} questions. % \changed -% \item Template of Essay questions is now shown in PDF. -% \item The macro |\setcategory| is reflected by a new section in PDF. -% \item In matching questions, warnings are raised if the number of items is insufficient. -% \item Improved display of matching questions in PDF. -% \item The package \textsf{iftex} is now required. -% \item An error is thrown when |fraction| is set to an invalid value. -% \item In numerical questions, the tolerance can be set in exponent form. -% \item Nicer PDF rendering of numbers in numerical questions if \textsf{siunitx} is loaded. -% \item Included PNG and JPEG files are now directly converted to base64. +% \item Template of Essay questions is now shown in \PDF. +% \item The macro \cmd{\setcategory} is reflected by a new section in \PDF. +% \item In \env{matching} questions, warnings are raised if the number of items is insufficient. +% \item Improved display of \env{matching} questions in \PDF. +% \item The package \pkg{iftex} is now required. +% \item An error is thrown when \optn{fraction} is set to an invalid value. +% \item In \env{numerical} questions, the tolerance can be set in exponent form. +% \item Nicer \PDF\ rendering of numbers in \env{numerical} questions if \pkg{siunitx} is loaded. +% \item Included \PNG\ and \acro{JPEG} files are now directly converted to base64. % \fixed -% \item TeX's inline math (|$...$|) can now contain escaped dollar signs (|\$|). -% \item Closing braces escaped in cloze subquestions outside math environment. -% \item The scope of the |tolerance| key is now respected. +% \item TeX's inline math (\texttt{$...$}) can now contain escaped dollar signs (\cmd{\$}). +% \item Closing braces escaped in \env{cloze} subquestions outside math environment. +% \item The scope of the \optn{tolerance} key is now respected. % \end{version} % \begin{version}[version=0.7,date=2020-09-06] % \added % \item Support for inclusion of verbatim code. -% \item Package option \texttt{tikz}. -% \item Support for |\"Y| and |\"y|. -% \item New commands converted to XML. -% \item Adding a stamp comment in XML, package option offered to disable +% \item Package option \optn{tikz}. +% \item Support for \cmd{\"Y} and \cmd{\"y}. +% \item New commands converted to \XML. +% \item Adding a stamp comment in \XML, package option offered to disable % this behavior. -% \item Support for the |\tikz| command. +% \item Support for the \cmd{\tikz} command. % \item A different directory can be specified for picture inclusion. -% \item Warn user of the \texttt{babel} package set for french that autospacing +% \item Warn user of the \pkg{babel} package set for French that autospacing % must be deactivated. % \item Square bracket math delimiters are recognized and converted properly. % \item Support of breve and caron diacritical marks. % \changed -% \item In multi with multiple answers allowed, choosing all options no longer +% \item In \env{multi} with multiple answers allowed, choosing all options no longer % results in a good grade. An automatic penalty mechanism is introduced. % Can be overridden by manually setting fractions. % \removed -% \item Irrelevant \texttt{penalty} tag in cloze subquestions. +% \item Irrelevant \optn{penalty} tag in \env{cloze} subquestions. % \fixed -% \item Non-integer fractions can now be specified in cloze subquestions. -% \item Significantly squeeze PNG images size by skipping ancillary data. +% \item Non-integer fractions can now be specified in \env{cloze} subquestions. +% \item Significantly squeeze \PNG\ images size by skipping ancillary data. % \item Enumerate or itemize environment can now be nested in question items. % \item Several pictures can be included in a question without being mixed -% in the XML file. +% in the \XML\ file. % \item Management and rendering of fraction in questions. % \item Correctly handling a \LaTeX\ command starting the last item of a question. -% \item Closing braces escaped in cloze subquestions. This allows \LaTeX\ +% \item Closing braces escaped in \env{cloze} subquestions. This allows \LaTeX\ % equations or images to be included. % \item Image inclusion with macOS. % \end{version} @@ -1782,47 +2432,51 @@ % \added % \item New package options to set section or subsection at the quiz level. % \item True/False question type is now supported. -% \item Moodle tags can now be specified for questions (and rendered in PDF +% \item \Moodle\ tags can now be specified for questions (and rendered in \PDF\ % as well). -% \item In cloze questions, the \texttt{multiresponse} subquestion type is +% \item In \env{cloze} questions, the multiresponse subquestion type is % now supported. % \removed -% \item External dependency on \texttt{OpenSSL}. -% \item Irrelevant tags were written in XML for matching questions. +% \item External dependency on \prog{OpenSSL}. +% \item Irrelevant tags were written in \XML\ for \env{matching} questions. % \fixed % \item \TikZ\ externalization now works when using \XeLaTeX. % \item It is now possible to set points manually among several correct % answers in multichoice questions. -% \item General feedbacks can now contain backslashes. +% \item General feedback can now contain backslashes. % \item Several quizzes can now be defined in a single source file, each -% specifying a category for Moodle's question bank. -% \item Correct encoding information is now written in XML depending on +% specifying a category for \Moodle's question bank. +% \item Correct encoding information is now written in \XML\ depending on % the \LaTeX\ compiler used. % \end{version} % \begin{version}[version=0.6a,date=2019-06-21] % \added -% \item \XeLaTeX\ is now recommended when using UTF8-encoded sources (support +% \item \XeLaTeX\ is now recommended when using \UTF-8 encoded sources (support % of accents). -% \item Feedbacks are now displayed in the PDF file produced. -% \item The \texttt{optipng} utility is used to reduce the size -% of images embedded in the XML file. -% \item Question options and settings are now displayed in the PDF file +% \item Feedbacks are now displayed in the \PDF\ file produced. +% \item The \prog{OptiPNG} utility is used to reduce the size +% of images embedded in the \XML\ file. +% \item Question options and settings are now displayed in the \PDF\ file % \item Supporting more \LaTeX\ macros for symbols and accents (mostly % diacritical marks and ligatures). % \item Introduce shuffle options in cloze-multi subquestions. -% \item Package option \texttt{final}. +% \item Package option \optn{final}. % \changed % \item In draft mode, \TikZ\ externalization is no longer triggered. % \fixed % \item In the different question types, the feedback fields are now converted -% for HTML allowing \LaTeX\ equation and images. +% for \HTML\ allowing \LaTeX\ equations and images. % \item Documentation improvements (limitations and previously undocumented % features). % \end{version} % \shortversion{version=0.5,date=2016-01-05,simple,changes=Initial version,author={Anders O.F. Hendrickson}} % \end{changelog} -% -% \StopEventually{} +% \addcontentsline{toc}{section}{Version History}% +% \PrintIndex +% \addcontentsline{toc}{section}{Index}% +% \StopEventually{% +%^^A \PrintChanges +% } % % \section{Implementation} % \subsection{Packages, Options, and Utilities} @@ -1836,18 +2490,36 @@ \newif\ifmoodle@section \newif\ifmoodle@subsection \newif\ifmoodle@numbered +\newif\ifmoodle@international +\newif\ifmoodle@feedbackLeft% contribution of Juergen Vollmer, 2021-03-05 +\newif\ifmoodle@samepage% contribution of Romano Giannetti, 2021-03-07 +\newif\ifmoodle@pluginfile% + +%% Moodle version +\RequirePackage{xkeyval}%For key-handling +\newcount\moodle@LMSmajor% major version number of the LMS targeted +\newcount\moodle@LMSminor% minor version number of the LMS targeted %%DECLARATION OF OPTIONS -\DeclareOption{draft}{\moodle@draftmodetrue} -\DeclareOption{handout}{\moodle@handouttrue} -\DeclareOption{final}{\moodle@draftmodefalse} -\DeclareOption{nostamp}{\moodle@stampmodefalse} -\DeclareOption{tikz}{\moodle@tikztrue} -\DeclareOption{svg}{\moodle@svgtrue} -\DeclareOption{section}{\moodle@sectiontrue\moodle@numberedtrue} -\DeclareOption{section*}{\moodle@sectiontrue\moodle@numberedfalse} -\DeclareOption{subsection}{\moodle@sectionfalse\moodle@numberedtrue} -\DeclareOption{subsection*}{\moodle@sectionfalse\moodle@numberedfalse} +\DeclareOptionX{draft}{\moodle@draftmodetrue}% +\DeclareOptionX{handout}{\moodle@handouttrue}% +\DeclareOptionX{final}{\moodle@draftmodefalse}% +\DeclareOptionX{nostamp}{\moodle@stampmodefalse}% +\DeclareOptionX{tikz}{\moodle@tikztrue}% +\DeclareOptionX{svg}{\moodle@svgtrue}% +\DeclareOptionX{section}{\moodle@sectiontrue\moodle@numberedtrue}% +\DeclareOptionX{section*}{\moodle@sectiontrue\moodle@numberedfalse}% +\DeclareOptionX{subsection}{\moodle@sectionfalse\moodle@numberedtrue}% +\DeclareOptionX{subsection*}{\moodle@sectionfalse\moodle@numberedfalse}% +\DeclareOptionX{feedbackleft}{\moodle@feedbackLefttrue}% contribution of Juergen Vollmer, 2021-03-05 +\DeclareOptionX{feedbackright}{\moodle@feedbackLeftfalse}% default +\DeclareOptionX{samepage}{\moodle@samepagetrue}% contribution of Romano Giannetti, 2021-03-07 +\DeclareOptionX{LMS}[0.0]{% + \filename@parse{#1}% + \moodle@LMSmajor=\filename@base + \moodle@LMSminor=\filename@ext +}% +\DeclareOptionX{pluginfile}{\moodle@pluginfiletrue}% \moodle@draftmodefalse \moodle@handoutfalse @@ -1857,16 +2529,27 @@ \moodle@svgfalse \moodle@subsectiontrue \moodle@numberedfalse +\moodle@feedbackLeftfalse% contribution of Juergen Vollmer, 2021-03-05 +\moodle@samepagefalse% contribution of Romano Giannetti, 2021-03-07 +\moodle@pluginfilefalse -\ProcessOptions +\ProcessOptionsX*% the star allows to inherit 'draft' and 'final' from the class + +\ifmoodle@samepage + \def\moodle@begin@samepage{\minipage[t]{\linewidth}} + \def\moodle@end@samepage{\endminipage\vskip 0pt plus 50pt\relax} +\else + % defining to relax is safer versus adding spurious spaces + \def\moodle@begin@samepage{\relax} + \def\moodle@end@samepage{\relax} +\fi \RequirePackage{environ} %To be able to take environment body as a macro argument -\RequirePackage{xkeyval} %For key-handling \RequirePackage{amssymb} %For \checkmark symbol %\RequirePackage{trimspaces} %To remove extra spaces from strings (loaded by environ) \@ifpackageloaded{iftex}{}{\RequirePackage{iftex}} % iftex already required by recent versions of ifplatform. Needed to know: -% 1) whether we can convert output from PDF to PNG (ifpdf), +% 1) whether we can convert output from PDF to \PNG\ (ifpdf), % 2) when output pdf is latin1-encoded (ifpdf) % 3) when output xml is utf8-encoded (if?tex) \@ifundefined{ifeTeX}{% version of 'iftex' prior to November 2019. @@ -1878,11 +2561,12 @@ \fi } \RequirePackage{etoolbox}%List management -\RequirePackage{xpatch} %To patch commands easily in HTML mode +\RequirePackage{xpatch} %To patch commands easily in \HTML\ mode \RequirePackage{array} %For formatting tables in the LaTeX mode of Clozes \RequirePackage{ifplatform} % To choose Ghostscript commands \@ifundefined{ifpdf}{\RequirePackage{ifpdf}}{}% old iftex would not define the conditional \RequirePackage{shellesc} %Luatex-compatible way of getting system access +\RequirePackage{readprov} %To gather information on the package (version, date, ...) \RequirePackage{fancybox} %For fancy LaTeX tags \RequirePackage{getitems} %To gather the header and items \ifmoodle@handout @@ -1892,6 +2576,10 @@ \RequirePackage{graphicx} %To include graphics \fi +\GetFileInfo{moodle.sty}% +\edef\moodledate{\filedate}% +\edef\moodleversion{\fileversion}% + \let\xa=\expandafter \def\@star{*}% \def\@hundred{100}% @@ -1903,12 +2591,12 @@ % Taken from https://tex.stackexchange.com/questions/47576/combining-ifxetex-and-ifluatex-with-the-logical-or-operation \@ifundefined{ifTUTeX}{ \newif\ifTUTeX % a new conditional starts as false - \ifnum 0\ifXeTeX 1\fi\ifLuaTeX 1\fi>0% + \ifnum 0\ifXeTeX 1\fi\ifLuaTeX 1\fi>0\relax \TUTeXtrue \fi }{}% \newif\ifpdfoutput % a new conditional starts as false -\ifnum 0\ifTUTeX 1\fi\ifPDFTeX\ifpdf 1\fi\fi>0% +\ifnum 0\ifTUTeX 1\fi\ifPDFTeX\ifpdf 1\fi\fi>0\relax \pdfoutputtrue \fi % \end{macrocode} @@ -1942,7 +2630,7 @@ \jobnamewithsuffixtomacro{\outputfilename}{-moodle.xml} % \end{macrocode} -% Next, we create macros to open and close the Moodle XML file +% Next, we create macros to open and close the Moodle \XML\ file % we will be writing. % \begin{macrocode} \newwrite\moodle@outfile @@ -1959,7 +2647,17 @@ \fi \fi \ifmoodle@stampmode - \def\moodle@stamp{This file was generated on \the\year-\two@digits\month-\two@digits\day} + \def\moodle@stamp{This is a question bank made for Moodle } + \ifnum\the\moodle@LMSmajor\the\moodle@LMSminor=\z@\else + \g@addto@macro{\moodle@stamp}{\the\moodle@LMSmajor.\the\moodle@LMSminor.\space} + \fi + \writetomoodle{}% + \newcount\hour\hour=\time + \divide\hour by 60\relax + \newcount\minute\minute=\hour + \multiply\minute by -60\relax + \advance\minute by \time\relax + \def\moodle@stamp{It was generated on \the\year-\two@digits\month-\two@digits\day\space \the\hour:\the\minute} \ifPDFTeX % pdflatex or latex \ifpdf % pdflatex \g@addto@macro{\moodle@stamp}{ by pdfLaTeX }% @@ -1977,9 +2675,9 @@ \fi \fi \fi - \writetomoodle{}% - \def\moodle@stamp{running on \platformname}% - \g@addto@macro{\moodle@stamp}{ with the package moodle v0.9 }% + \writetomoodle{}% + \def\moodle@stamp{on \platformname}% + \g@addto@macro{\moodle@stamp}{ with the package moodle \moodleversion\space (\moodledate) }% \writetomoodle{}% \fi \immediate\write\moodle@outfile{}% @@ -1991,30 +2689,31 @@ \immediate\closeout\moodle@outfile }% % \end{macrocode} -% -% To both make this |.sty| file and the XML output more readable, +% +% To both make this \filenm{.sty} file and the \XML\ output more readable, % we create a mechanism for writing to the output file with indents. -% The macro |\calculateindent|\marg{$n$} globally defines +% The macro |\calculateindent|\marg{$n$} globally defines % |\moodle@indent| to be a string of \meta{$n$} |\otherspace|'s. % \begin{macrocode} +\newcount\moodle@indentnum \def\calculateindent#1{% \bgroup - \count0=\number#1\relax + \moodle@indentnum=\number#1\relax \gdef\moodle@indent{}% \calculateindent@int \egroup }% \def\calculateindent@int{% - \ifnum\count0>0\relax + \ifnum\moodle@indentnum>0\relax \g@addto@macro{\moodle@indent}{\otherspace}% - \advance\count0 by -1\relax + \advance\moodle@indentnum by -1\relax \expandafter \calculateindent@int \fi }% % \end{macrocode} -% Now the command |\writetomoodle|\oarg{n}\marg{stuff} adds the line -% ``\meta{stuff}'' to the XML file +% Now the command |\writetomoodle|\oarg{n}\marg{stuff} adds the line +% ``\meta{stuff}'' to the \XML\ file % preceded by an indent of \meta{n} spaces. % Note that this command |\edef|'s its second argument. % \begin{macrocode} @@ -2029,7 +2728,7 @@ }% % \end{macrocode} % We now create the main |quiz| environment that will contain -% the questions we write. It outputs to XML as a || tag. +% the questions we write. It outputs to \XML\ as a || tag. % \begin{macrocode} {\catcode`\$=12\catcode`\ =12% in this context we cannot indent with spaces... \gdef\moodle@write@category@xml#1{% @@ -2044,7 +2743,8 @@ }{}% }}% \newcommand*\@enumeratename{enumerate}% -\newdimen\moodle@totalmarks \moodle@totalmarks=0pt% +\newdimen\moodle@totalmarks +\gdef\moodle@currentcategory{}% \newenvironment{quiz}[2][]{% \setkeys{moodle}{#1}% \gdef\setcategory##1{% @@ -2069,7 +2769,7 @@ \subsection*{##1}% \fi \fi - \begin{enumerate}% + \begin{enumerate}\renewcommand\labelenumi{(\theenumi)}% }% \gdef\setsubcategory##1{% \def\@noitemerr{}%\@latex@warning{Empty question list} @@ -2088,17 +2788,18 @@ \subsubsection*{##1}% \fi \fi - \begin{enumerate}% + \begin{enumerate}\renewcommand\labelenumi{(\theenumi)}% }% \setcategory{#2}% + \moodle@totalmarks=0pt% }{% \end{enumerate}% - \emph{Total of marks: \strip@pt\moodle@totalmarks}% + \emph{\GetTranslation{Total of marks}: \strip@pt\moodle@totalmarks}% \let\setcategory\relax \let\setsubcategory\relax }% -% \end{macrocode} +% \end{macrocode} % The next utility takes a single macro control sequence |#1|, % and allows that macro's current value to persist % after the next |\egroup|, |}|, or |\endgroup|. @@ -2107,17 +2808,17 @@ \xa\xa\xa\gdef\xa\xa\csname moodle@remember@\string#1\endcsname\xa{\xa\def\xa#1\xa{#1}}% \xa\aftergroup\csname moodle@remember@\string#1\endcsname } -% \end{macrocode} +% \end{macrocode} +% +% \subsubsection{Main Switch: to create \XML\ or not} % -% \subsubsection{Main Switch: to create XML or not} -% % \begin{macrocode} \long\def\@moodle@ifgeneratexml#1#2{% - % If we are generating XML, do #1; otherwise do #2. + % If we are generating \XML, do #1; otherwise do #2. \tikzifexternalizing{% - % This run of LaTeX is currently ONLY generating a Tikz image + % This run of LaTeX is currently ONLY generating a TikZ image % to be saved in an external file. We do NOT want to waste time - % generating XML, and moreover trying to do so would cause errors + % generating \XML, and moreover trying to do so would cause errors % because of file dependencies. #2% }{% @@ -2144,7 +2845,7 @@ % \end{macrocode} % % \subsection{Key-Value Pairs for Quiz Questions} -% +% % The various options are set using key-value syntax of |xkeyval|. % \begin{macrocode} \def\moodleset#1{\setkeys{moodle}{#1}}% @@ -2153,13 +2854,13 @@ % Calling |\generate@moodle@write@code|\marg{name}|<|\meta{HTML tag}|>|\marg{text to write} % creates a macro |\moodle@write|\meta{name}, taking no parameters, % which writes the code |<|\meta{HTML tag}|>...| -% to the output XML file. -% +% to the output \XML\ file. +% % The ordinary version |\generate@moodle@write@code| passes its output text |#3| -% through the HTMLizer, producing HTML code, while the starred variant +% through the HTMLizer, producing \HTML\ code, while the starred variant % |\generate@moodle@write@code*| passes |#3| verbatim as text. -% -% For example, +% +% For example, % |\generate@moodle@write@code{excuse}{\theexcuse}| % would expand to % \begin{Verbatim}[gobble=4,frame=single] @@ -2175,7 +2876,7 @@ % \fi % }% % \end{Verbatim} -% but +% but % |\generate@moodle@write@code*{excuse}{\theexcuse}| % would expand only to % \begin{Verbatim}[gobble=4,frame=single] @@ -2190,7 +2891,7 @@ \def\generate@moodle@write@html#1<#2>#3{% % #1 = NAME for \moodle@writeNAME - % #2 = HTML tag + % #2 = \HTML\ tag % #3 = what, exactly, to write \xa\gdef\csname moodle@write#1\endcsname{% \xa\def\xa\test@iii\xa{#3}% @@ -2200,32 +2901,38 @@ \xa\converttohtmlmacro\xa\moodle@htmltowrite\xa{#3}% \writetomoodle[2]{ <#2 format="html">}% \writetomoodle[4]{ \moodle@htmltowrite

]]>
}% + \ifmoodle@pluginfile + \writetomoodle[0]{\htmlize@embeddedfiletags}% + \fi \writetomoodle[2]{ }% \fi }% }% \def\generate@moodle@write@html@noptag#1<#2>#3{% - % No

..

introduced - % #1 = NAME for \moodle@writeNAME - % #2 = HTML tag - % #3 = what, exactly, to write - \xa\gdef\csname moodle@write#1\endcsname{% - \xa\def\xa\test@iii\xa{#3}% - \ifx\test@iii\@moodle@empty - \writetomoodle[2]{ <#2 format="html">}% - \else - \xa\converttohtmlmacro\xa\moodle@htmltowrite\xa{#3}% - \writetomoodle[2]{ <#2 format="html">}% - \writetomoodle[4]{ }% - \writetomoodle[2]{ }% - \fi - }% + % No

..

introduced + % #1 = NAME for \moodle@writeNAME + % #2 = \HTML\ tag + % #3 = what, exactly, to write + \xa\gdef\csname moodle@write#1\endcsname{% + \xa\def\xa\test@iii\xa{#3}% + \ifx\test@iii\@moodle@empty + \writetomoodle[2]{ <#2 format="html">}% + \else + \xa\converttohtmlmacro\xa\moodle@htmltowrite\xa{#3}% + \writetomoodle[2]{ <#2 format="html">}% + \writetomoodle[4]{ }% + \ifmoodle@pluginfile + \writetomoodle[0]{\htmlize@embeddedfiletags}% + \fi + \writetomoodle[2]{ }% + \fi + }% }% \def\generate@moodle@write@data*#1<#2>#3{% % #1 = NAME for \moodle@writeNAME - % #2 = HTML tag + % #2 = \HTML\ tag % #3 = what, exactly, to write \xa\gdef\csname moodle@write#1\endcsname{% \writetomoodle[2]{ <#2>#3}% @@ -2250,7 +2957,7 @@ \def\moodle@latex@writetags{% \xa\xdef\xa\test@iii\xa{\moodle@tags}% \ifx\test@iii\@moodle@empty\relax\else - \hfill tags: % + \hfill \GetTranslation{tags}: % \renewcommand*{\do}[1]{\ifmoodle@firsttag\moodle@firsttagfalse\else, \fi\texttt{##1}}% \xa\docsvlist\xa{\test@iii}% \fi @@ -2291,8 +2998,8 @@ % and feedback tailored to each right or wrong answer. % We shall use the key 'feedback' to record both kinds of feedback, % relying on TeX's grouping mechanism to keep them apart. - % When it comes time to write them to XML, - % \moodle@writegeneralfeedback uses the HTML tag + % When it comes time to write them to \XML, + % \moodle@writegeneralfeedback uses the \HTML\ tag % whereas \moodle@writefeedback uses the tag . % Note that the general feedback is NOT inherited by each answer! \define@cmdkey{moodle}[moodle@]{feedback}[]{}% @@ -2306,7 +3013,7 @@ %Key calls like [default grade=7] set \moodle@defaultgrade. \define@cmdkey{moodle}[moodle@]{default grade}[1.0]{}% %Next, makes 'points' a synonym for 'default grade' - \define@key{moodle}{points}[1.0]{\xa\def\csname moodle@default grade\endcsname{#1}} + \define@key{moodle}{points}[1.0]{\xa\def\csname moodle@default grade\endcsname{#1}}% \generate@moodle@write@code*{defaultgrade}{\csname moodle@default grade\endcsname}% \moodleset{default grade=1.0} %This sets the default. @@ -2337,7 +3044,7 @@ %% FRACTION -- how much this answer is worth out of 100 percent \define@cmdkey{moodle}[moodle@]{fraction}[100]{}% %We do not create \moodle@writefraction, because the fraction occurs in - %the XML within the answer tag, like . + %the \XML\ within the answer tag, like . \moodleset{fraction=100} %This sets the default. % \end{macrocode} % \begin{macrocode} @@ -2365,6 +3072,10 @@ \define@boolkey{moodle}[moodle@]{allornothing}[true]{}% \moodleset{allornothing=false}% +%% SANCTION -- how much shall incorrect choices by sanctioned in multichoice questions (single) + \define@cmdkey{moodle}[moodle@]{sanction}[]{}% + \moodleset{sanction=0} %This sets the default. + %% TODO: CORRECTFEEDBACK %% TODO: PARTIALLYCORRECTFEEDBACK %% TODO: INCORRECTFEEDBACK @@ -2392,18 +3103,18 @@ \def\moodle@numbering{IIII}\fi }% %'answer numbering' will be a synonym to 'numbering' - \define@key{moodle}{answer numbering}[abc]{\setkeys{moodle}{numbering={#1}}}% + \define@key{moodle}{answer numbering}[abc]{\setkeys{moodle}{numbering={#1}}}% \generate@moodle@write@code*{answernumbering}{\moodle@numbering}% %N.B. if we did not set the default here, then \moodle@numbering would be undefined, causing problems. - \moodleset{answer numbering=abc}% - + \moodleset{answer numbering=abc}% + \def\@moodle@alpha{alpha}% \def\@moodle@Alpha{Alpha}% \def\@moodle@alph{alph}% \def\@moodle@Alph{Alph}% \def\@moodle@arabic{arabic}% \def\@moodle@roman{roman}% - \def\@moodle@Roman{Roman}% + \def\@moodle@Roman{Roman}% \def\@moodle@abc{abc}% \def\@moodle@ABCD{ABCD}% \def\@moodle@arabicnumbers{123}% @@ -2411,6 +3122,7 @@ \def\@moodle@IIII{IIII}% \def\@moodle@none{none}% \def\moodle@obeynumberingstyle{% + \renewcommand\labelenumii{\theenumii.}% follow Moodle's labeling convention \ifx\moodle@numbering\@moodle@abc \renewcommand\theenumii{\alph{enumii}}% \fi @@ -2430,14 +3142,14 @@ \renewcommand\labelenumii{$\bullet$~}% \fi } - %TODO: * In the PDF, how should 'none' in a multi look different from + %TODO: * In the PDF, how should 'none' in a multi look different from % short answer or numerical options? % * Instead of \theenumi and \labelenumi, % use \@enumdepth to automatically set the correct depth. - + %% DISPLAY MODE -- affects Cloze multiple choice questions only. % 0 = inline, 1 = vertical, 2 = horizontal - \def\moodle@multi@mode{0}% + \def\moodle@multi@mode{\ifmoodle@single 0\else 1\fi}% \define@key{moodle}{inline}[]{\def\moodle@multi@mode{0}}% \define@key{moodle}{vertical}[]{\def\moodle@multi@mode{1}}% \define@key{moodle}{horizontal}[]{\def\moodle@multi@mode{2}}% @@ -2447,7 +3159,7 @@ %% TOLERANCE \define@cmdkey{moodle}[moodle@]{tolerance}[0]{}% \moodleset{tolerance=0}% - %There is no \moodle@writetolerance, because in the XML the + %There is no \moodle@writetolerance, because in the \XML\ the %tolerance is given within the answer tag, %like . @@ -2456,17 +3168,17 @@ % \subsubsection{Keys for short answer questions} % \begin{macrocode} %% CASE SENSITIVE - \define@boolkey{moodle}[moodle@]{case sensitive}[true]{}% - \generate@moodle@write@code*{usecase}{\csname ifmoodle@case sensitive\endcsname 1\else 0\fi}% - % We make 'usecase' a synonym for 'case sensitive'. - \define@boolkey{moodle}[moodle@]{usecase}[true]{\ifmoodle@usecase\csname moodle@case sensitivetrue\endcsname\else\csname moodle@case sensitivefalse\endcsname\fi}% - \moodleset{case sensitive=false}% + \define@boolkey{moodle}[moodle@]{usecase}[true]{}% + \generate@moodle@write@code*{usecase}{\ifmoodle@usecase 1\else 0\fi}% + % We make 'case sensitive' a synonym for 'usecase'. + \define@boolkey{moodle}[moodle@]{case sensitive}[true]{\ifcsname moodle@case sensitive\endcsname \moodle@usecasetrue\else\moodle@usecasefalse\fi}% + \moodleset{usecase=false}% % \end{macrocode} % \subsubsection{Keys for matching questions} % \begin{macrocode} %% DRAG-AND-DROP FORMAT \define@boolkey{moodle}[moodle@]{draganddrop}[true]{}% - % We make 'dd' and 'dragdrop' and 'drag and drop' synonyms for 'draganddrop'. + % We make 'dd' and 'draganddrop' and 'drag and drop' synonyms for 'draganddrop'. \define@boolkey{moodle}[moodle@]{dd}[true]{\ifmoodle@dd\moodle@draganddroptrue\else\moodle@draganddropfalse\fi}% \define@boolkey{moodle}[moodle@]{drag and drop}[true]{\moodle@ddsynonym}% \def\moodle@ddsynonym{% @@ -2492,11 +3204,11 @@ {html,html+file,text,monospaced,file}[html]% {\def\test@i{#1}% \ifx\test@i\@moodle@html - % HTML Editor - \def\moodle@responseformat{editor}% + % \HTML\ Editor + \def\moodle@responseformat{editor}% \fi \ifx\test@i\@moodle@htmlfile - % HTML Editor with File Picker + % \HTML\ Editor with File Picker \def\moodle@responseformat{editorfilepicker}% \fi \ifx\test@i\@moodle@text @@ -2521,7 +3233,7 @@ \fi }% \generate@moodle@write@code*{responseformat}{\moodle@responseformat}% - \moodleset{response format=html}% + \moodleset{response format=html}% %N.B. if we did not set a default, then \moodle@responseformat would be undefined, causing problems. %% RESPONSE REQUIRED @@ -2584,12 +3296,12 @@ % \end{macrocode} % % \subsection{Answer handling} -% +% % \begin{macrocode} -%The Answers XML depends heavily on the question type. +%The Answers \XML\ depends heavily on the question type. %Each type of question defines how it obtains answers from the LaTeX input, -%how it typesets those in a PDF or DVI, and how it writes them as XML code. -%It will write that XML to the macro \moodle@answers@xml, +%how it typesets those in a \PDF\ or \DVI, and how it writes them as \XML\ code. +%It will write that \XML\ to the macro \moodle@answers@xml, %which them gets written to the file when \moodle@writeanswers %is invoked. @@ -2600,8 +3312,8 @@ \newcommand\addto@xml[3][0]{% % #1 = spaces to indent (default=0) - % #2 = macro containing XML code (possibly empty) - % #3 = XML text to be appended to that macro (will be \edef'd) + % #2 = macro containing \XML\ code (possibly empty) + % #3 = \XML\ text to be appended to that macro (will be \edef'd) \calculateindent{#1}% \edef\xml@to@add{\moodle@indent\trim@pre@space{#3}}% \ifx#2\@moodle@empty @@ -2614,7 +3326,7 @@ % \end{macrocode} % % \subsubsection{Not yet implemented} -% +% % \begin{macrocode} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -2623,32 +3335,43 @@ % TODO: I don't think I really want to handle this. Not now. % \end{macrocode} - +% +% \subsection{Typesetting options} +% This section provides the tools to allow on to control how the quiz gets typeset +% in the resulting PDF file. +% \begin{macrocode} +\ifmoodle@feedbackLeft% contribution of Juergen Vollmer, 2021-03-05 + \newcommand{\moodle@preFeedback}{\\}% +\else% + \newcommand{\moodle@preFeedback}{\hfill}% +\fi +% \end{macrocode} +% % \subsection{Front Ends} % This section creates the user interface for the various question types. -% First, we define a generic command to create +% First, we define a generic command to create % a front-end environment for a Moodle question type. % In order to function, the following macros must be hard-coded: % \begin{itemize} -% \item |\moodle@|\meta{type}|@latexprocessing|: +% \item |\moodle@|\meta{type}|@latexprocessing|: % Loops through the saved |\item|'s to typeset them in LaTeX, % usually inside an itemize or enumerate environment. -% \item |\save|\meta{type}|answer#1|: +% \item |\save|\meta{type}|answer#1|: % Processes the text of a single |\item| to save the information to memory, % usually inside |\moodle@answers@xml|. % \item |\write|\meta{type}|question|: % Writes the information, hitherto saved only in macros, -% into the XML file. +% into the \XML\ file. % \end{itemize} % For example, to create the `shortanswer' question type, -% we shall call +% we shall call % \begin{Verbatim}[gobble=5,frame=single] % \moodle@makefrontend{shortanswer} % \def\moodle@shortanswer@latexprocessing{...} % \def\saveshortansweranswer#1{...} % \def\writeshortanswerquestion{...} % \end{Verbatim} -% +% % \begin{macrocode} \def\moodle@makelatextagbox#1{% @@ -2664,18 +3387,20 @@ }% \def\moodle@makelatextag@qtype#1{% - \doublebox{\tiny \textsc{#1}} + \doublebox{\tiny \textsc{\GetTranslation{#1}}} }% \def\moodle@makelatextag@value#1#2{% - \moodle@makelatextagbox{\csname moodle@#1\endcsname~#2} + \moodle@makelatextagbox{\GetTranslation{#2}~\csname moodle@#1\endcsname}% }% \def\moodle@makelatextag@key#1{% - \moodle@makelatextagbox{\csname moodle@#1\endcsname} + \moodle@makelatextagbox{\GetTranslation{#1}} }% -\def\moodle@marks#1{point\ifdim#1pt=1pt \else s\fi} +\def\moodle@makelatextag@other#1{% + \moodle@makelatextagbox{\GetTranslation{#1}} +}% \def\moodle@makefrontend#1#2{% \NewEnviron{#1}[2][]{% @@ -2685,22 +3410,23 @@ \expandafter\gatheritems\xa{\BODY}% \let\moodle@questionheader=\gatheredheader %First, the LaTeX processing - \item \textbf{\moodle@questionname} + \item \moodle@begin@samepage \textbf{\moodle@questionname} \ifmoodle@handout \moodle@makelatextag@qtype{#1} \else \moodle@latex@writetags \par \noindent - \moodle@makelatextag@qtype{#1} - \moodle@makelatextag@value{default grade}{\moodle@marks{\csname moodle@default grade\endcsname}} - \moodle@makelatextag@value{penalty}{penalty} + \moodle@makelatextag@qtype{#1}% + \moodle@makelatextag@value{default grade}{marked out of} + \moodle@makelatextag@value{penalty}{penalty}% \fi #2\par \noindent \moodle@questionheader \edef\moodle@generalfeedback{\expandonce\moodle@feedback} \csname moodle@#1@latexprocessing\endcsname + \moodle@end@samepage %Now, writing information to XML \@moodle@ifgeneratexml{% \xa\questiontext\xa{\moodle@questionheader}% Save the question text. @@ -2728,10 +3454,9 @@ % Description blocks can be empty. In this case, nothing is done. % % \begin{macrocode} -\AfterEndPreamble{% in case something like \usepackage[french]{babel} is loaded +\AtBeginEnvironment{quiz}{% protect existing description outside of quiz \let\description\relax% remove the meaning of existing \description and \enddescription \let\enddescription\relax - \NewEnviron{description}[2][]{% \bgroup \setkeys{moodle}{#1,questionname={#2}}% @@ -2739,7 +3464,7 @@ \trim@spaces@in\moodle@questiontext \ifx\moodle@questiontext\@empty\relax\else% %First, the LaTeX processing. - \item \textbf{\moodle@questionname} + \item \moodle@begin@samepage\textbf{\moodle@questionname} \ifmoodle@handout\else \moodle@latex@writetags \par @@ -2750,9 +3475,10 @@ \moodle@questiontext\par \ifmoodle@handout\else \ifx\moodle@feedback\@empty\relax\else - \fbox{\parbox{\linewidth}{\emph{\moodle@feedback}}}% + \fbox{\parbox{.96\linewidth}{\emph{\moodle@feedback}}}% \fi \fi + \moodle@end@samepage %Now, writing information to memory. \@moodle@ifgeneratexml{% \writetomoodle{}% @@ -2769,31 +3495,31 @@ % \subsubsection{Essay Question Front-End} % The front end is not yet created by |\moodle@makefrontend| because of % what must must be done with the |\item|'s. -% +% % \begin{macrocode} \def\moodle@essay@latexprocessing{% - % Moodle cannot automatically grade an essay, + % Moodle cannot automatically grade an essay, % but if the user puts \item's in, we can list them in an itemize as notes. - \par\noindent \emph{Notes for grader:} + \par\noindent \emph{\GetTranslation{Information for graders}:} \ifnum\c@numgathereditems>0\relax \begin{itemize} \setlength\itemsep{0pt}\setlength\parskip{0pt}% \loopthroughitemswithcommand{\moodle@print@essay@answer}% \end{itemize}% \fi \ifx\moodle@generalfeedback\@empty\relax\else% - \fbox{\parbox{\linewidth}{\emph{\moodle@generalfeedback}}}% + \fbox{\parbox{.96\linewidth}{\emph{\moodle@generalfeedback}}}% \fi } \NewEnviron{essay}[2][]{% \bgroup \setkeys{moodle}{#1,questionname={#2}}% - \global\advance\moodle@totalmarks by \csname moodle@default grade\endcsname pt + \global\advance\moodle@totalmarks by \csname moodle@default grade\endcsname pt% \moodle@checkresponsefieldlines \expandafter\gatheritems\expandafter{\BODY}% \let\moodle@questionheader=\gatheredheader %First, the LaTeX processing. - \item \textbf{\moodle@questionname} + \item \moodle@begin@samepage\textbf{\moodle@questionname} \ifmoodle@handout \moodle@makelatextag@qtype{essay} \else @@ -2801,22 +3527,26 @@ \par \noindent \moodle@makelatextag@qtype{essay} - \moodle@makelatextag@value{default grade}{\moodle@marks{\csname moodle@default grade\endcsname}} + \moodle@makelatextag@value{default grade}{marked out of} \moodle@makelatextag@value{penalty}{penalty} - \moodle@makelatextag@key{responseformat} + \xa\moodle@makelatextag@key\xa{\moodle@responseformat} \fi \par \noindent \moodle@questionheader \long\def\@lempty{}% \ifx\moodle@responsetemplate\@lempty\else - \par\noindent \emph{Template:} - \par\fbox{\parbox{\linewidth}{\moodle@responsetemplate}}\par + \par\noindent\emph{\GetTranslation{Response template}:} + \par\noindent\fbox{\parbox{.96\linewidth}{\moodle@responsetemplate}}\par \fi \edef\moodle@generalfeedback{\expandonce\moodle@feedback} - \ifmoodle@handout\else + \ifmoodle@handout + \par\noindent + \fbox{\parbox[t][\csname moodle@response field lines\endcsname\baselineskip]{.96\linewidth}{\phantom{Moodle}}}% + \else \csname moodle@essay@latexprocessing\endcsname \fi + \moodle@end@samepage %Now, writing information to memory. \@moodle@ifgeneratexml{% \xa\questiontext\xa{\moodle@questionheader}% Save the question text. @@ -2840,7 +3570,7 @@ % \passvalueaftergroup{\moodle@answers@xml}% \egroup - \moodle@writeanswers% The 'answers' XML really contains the grader info. + \moodle@writeanswers% The 'answers' \XML\ really contains the grader info. \moodle@writeresponsetemplate% \moodle@writetags% \writetomoodle{}% @@ -2851,18 +3581,18 @@ \def\moodle@checkresponsefieldlines{% \newcount\a\a=\number\csname moodle@response field lines\endcsname \newcount\b\b=5% - \ifnum\the\a>40% if the value was more than 40 + \ifnum\the\a>40\relax% if the value was more than 40 \a=40% \fi - \ifnum\the\a<5% if the value was less than 5 + \ifnum\the\a<5\relax% if the value was less than 5 \a=5% \fi \divide\a by\b% integer division by 5 \multiply\a by\b% multiply by 5 - \ifnum\a=\csname moodle@response field lines\endcsname% equality holds if we had 5, 10, 15, 20, 25, 30, or 40 + \ifnum\a=\csname moodle@response field lines\endcsname\relax% equality holds if we had 5, 10, 15, 20, 25, 30, or 40 \else - \ifnum\csname moodle@response field lines\endcsname>5% - \ifnum\csname moodle@response field lines\endcsname<40% + \ifnum\csname moodle@response field lines\endcsname>5\relax% + \ifnum\csname moodle@response field lines\endcsname<40\relax% \advance\a by\b% approximate with the next multiple of 5 \fi \fi @@ -2885,7 +3615,7 @@ %%%% 1. if \c@numgathereditems=0, we don't do anything. %%%% 2. it calls a preamble and postamble around the \loopthroughitemswithcommand. %%%% Like this: -%%%% +%%%% %%%% \@moodle@ifgeneratexml{% %%%% \xa\questiontext\xa{\moodle@questionheader}% Save the question text. %%%% \bgroup @@ -2904,7 +3634,7 @@ %%%% \egroup %%%% \csname write#1question\endcsname %%%% }{}% -%%%% The \@ifundefined lines should automatically define the +%%%% The \@ifundefined lines should automatically define the %%%% \...@preamble \...@postamble macros to be \relax if they don't exist already. \gdef\writeessayquestion{% @@ -2921,19 +3651,7 @@ \item #1% }% - \long\def\moodle@savegraderinfo#1{% - %\def\ds{#1}\show\ds - \bgroup - \moodle@savegraderinfo@int#1\moodle@answer@rdelim - \passvalueaftergroup{\moodle@answers@xml}% - \egroup -}% -\newcommand\moodle@savegraderinfo@int[1][]{% - \setkeys{moodle}{fraction=0,#1}% - \moodle@savegraderinfo@int@int% -}% -\long\def\moodle@savegraderinfo@int@int#1\moodle@answer@rdelim{% \def\moodle@answertext{#1} \xa\converttohtmlmacro\xa\moodle@answertext@html\xa{\moodle@answertext}% %\trim@spaces@in\moodle@answertext @@ -2946,12 +3664,8 @@ % \end{macrocode} % % \subsubsection{Short Answer Question Front-End} -% +% % \begin{macrocode} -\def\blank{\rule{1in}{0.5pt}}% -% TODO: Make an optional argument for width? This wouldn't affect Moodle, -% only the appearance in the PDF. It doesn't seem worth it. - %\NewEnviron{shortanswer}[2][]{% % \bgroup % \setkeys{moodle}{#1,questionname={#2}}% @@ -2973,7 +3687,7 @@ % \bgroup % \gdef\moodle@answers@xml{}% % \setkeys{moodle}{feedback={}}% -% \xa\loopthroughitemswithcommand\xa{\csname +% \xa\loopthroughitemswithcommand\xa{\csname % saveshortansweranswer\endcsname}% % \passvalueaftergroup{\moodle@answers@xml}% % \egroup @@ -2987,10 +3701,10 @@ % LATEX PROCESSING \def\moodle@makelatextag@shortanswer{% - \csname ifmoodle@case sensitive\endcsname - \moodle@makelatextagbox{Case-Sensitive}\relax + \ifmoodle@usecase + \moodle@makelatextag@other{Case-Sensitive}\relax \else - \moodle@makelatextagbox{Case-Insensitive}\relax + \moodle@makelatextag@other{Case-Insensitive}\relax \fi } @@ -3002,7 +3716,7 @@ \loopthroughitemswithcommand{\moodle@print@shortanswer@answer}% \end{itemize}% \ifx\moodle@generalfeedback\@empty\relax\else% - \fbox{\parbox{\linewidth}{\emph{\moodle@generalfeedback}}}% + \fbox{\parbox{.96\linewidth}{\emph{\moodle@generalfeedback}}}% \fi } \fi @@ -3023,7 +3737,7 @@ \item #1$~(\moodle@fraction\%)$% \fi \ifx\moodle@feedback\@empty\relax\else - \hfill \emph{$\rightarrow$ \moodle@feedback} + \moodle@preFeedback \emph{$\rightarrow$ \moodle@feedback} \fi }% @@ -3045,15 +3759,18 @@ \addto@xml[2]{\moodle@answers@xml}{}% \xa\converttohtmlmacro\xa\moodle@answertext@html\xa{\moodle@answertext}% \addto@xml[4]{\moodle@answers@xml}{ \moodle@answertext@html}% + \ifmoodle@pluginfile + \writetomoodle[0]{\htmlize@embeddedfiletags}% + \fi \ifx\moodle@feedback\@empty\relax\else \trim@spaces@in\moodle@feedback \xa\converttohtmlmacro\xa\moodle@feedback@html\xa{\moodle@feedback}% - \addto@xml[4]{\moodle@answers@xml}{ \moodle@feedback@html

]]>
}% + \addto@xml[4]{\moodle@answers@xml}{ \moodle@feedback@html

]]>
\ifmoodle@pluginfile\htmlize@embeddedfiletags\fi
}% \fi \addto@xml[2]{\moodle@answers@xml}{
}% }% -% WRITING QUESTION TO XML FILE +% WRITING QUESTION TO \XML\ FILE \gdef\writeshortanswerquestion{% \writetomoodle{}% \moodle@writecommondata% @@ -3062,7 +3779,7 @@ % \end{macrocode} % % \subsubsection{Numerical Question Front-End} -% +% % \begin{macrocode} \moodle@makefrontend{numerical}{\moodle@makelatextag@numerical}% @@ -3071,7 +3788,8 @@ \def\moodle@makelatextag@numerical{} \AtEndPreamble{ - \@ifpackageloaded{siunitx}{\def\moodle@printnum{\num[omit-uncertainty,copy-decimal-marker]}}{\let\moodle@printnum\trim@spaces}% + \@ifpackageloaded{siunitx}{\def\moodle@printnum{\num[omit-uncertainty]}}%,copy-decimal-marker + {\let\moodle@printnum\trim@spaces}% } \ifmoodle@handout @@ -3082,7 +3800,7 @@ \loopthroughitemswithcommand{\moodle@print@numerical@answer}% \end{itemize}% \ifx\moodle@generalfeedback\@empty\relax\else% - \fbox{\parbox{\linewidth}{\emph{\moodle@generalfeedback}}}% + \fbox{\parbox{.96\linewidth}{\emph{\moodle@generalfeedback}}}% \fi } \fi @@ -3098,13 +3816,14 @@ \moodle@print@numerical@answer@int@int% }% \def\moodle@print@numerical@answer@int@int#1\@rdelim{% - \xdef\test@i{\trim@spaces{#1}}% + \gdef\test@i{#1}% + \trim@spaces@in\test@i \ifx\test@i\@star \item \test@i \else \item \moodle@printnum{#1}% - \ifnum\z@=\moodle@tolerance\else - $\,\pm\,$\moodle@printnum{\moodle@tolerance}% + \ifx\moodle@tolerance\moodle@zero\else + $\,\pm\,$\moodle@printnum{\expandonce\moodle@tolerance}% \fi \fi \ifx\moodle@fraction\@hundred @@ -3114,7 +3833,7 @@ $~(\moodle@fraction\%)$% \fi \ifx\moodle@feedback\@empty\relax\else - \hfill \emph{$\rightarrow$ \moodle@feedback}% + \moodle@preFeedback \emph{$\rightarrow$ \moodle@feedback}% \fi }% @@ -3135,19 +3854,23 @@ \moodle@checkfraction \addto@xml[2]{\moodle@answers@xml}{}% \addto@xml[4]{\moodle@answers@xml}{ \moodle@answertext}% + \ifx\moodle@answertext\@star\else \addto@xml[4]{\moodle@answers@xml}{ \moodle@tolerance}% \fi + \ifmoodle@pluginfile + \writetomoodle[0]{\htmlize@embeddedfiletags}% + \fi \ifx\moodle@feedback\@empty\relax\else \trim@spaces@in\moodle@feedback \xa\converttohtmlmacro\xa\moodle@feedback@html\xa{\moodle@feedback}% - \addto@xml[4]{\moodle@answers@xml}{ \moodle@feedback@html

]]>
}% + \addto@xml[4]{\moodle@answers@xml}{ \moodle@feedback@html

]]>
\ifmoodle@pluginfile\htmlize@embeddedfiletags\fi
}% \fi \addto@xml[2]{\moodle@answers@xml}{
}% }% -% WRITING QUESTION TO XML FILE +% WRITING QUESTION TO \XML\ FILE \gdef\writenumericalquestion{% \writetomoodle{}% \moodle@writecommondata% @@ -3155,7 +3878,7 @@ % \end{macrocode} % % \subsubsection{Multiple Choice Question Front-End} -% +% % \begin{macrocode} %Multiple choice has the structure % \begin{multi}[options]{name}% @@ -3175,27 +3898,25 @@ \PackageError{moodle}{Unsupported option "allornothing" for a multichoice subquestion} {Please set "allornothing=false"}% \else - \moodle@makelatextagbox{All-or-nothing}% + \moodle@makelatextag@other{All-or-nothing}% \fi \else - \ifmoodle@multiple - \moodle@makelatextagbox{Multiple}% + \ifmoodle@single + \moodle@makelatextag@other{Single}% \else - \moodle@makelatextagbox{Single}% + \moodle@makelatextag@other{Multiple}% \fi \fi \ifmoodle@handout\else \ifmoodle@shuffle - \moodle@makelatextagbox{Shuffle}\relax% + \moodle@makelatextag@other{Shuffle}\relax% \fi \fi } \def\moodle@multi@latexprocessing{% - \ifmoodle@allornothing - \moodle@singletrue - \fi - \moodle@countcorrectanswers% + \ifmoodle@allornothing\moodle@singletrue\fi + \ifmoodle@single\relax\else\moodle@InspectMultipleAnswers\fi \ifmoodle@handout\NewList{answerlist}\fi \begin{enumerate}\moodle@obeynumberingstyle% %\renewcommand{\theenumi}{\alph{enumi}}% @@ -3212,7 +3933,7 @@ \end{enumerate}% \ifmoodle@handout\else \ifx\moodle@generalfeedback\@empty\relax\else% - \fbox{\parbox{\linewidth}{\emph{\moodle@generalfeedback}}}% + \fbox{\parbox{.96\linewidth}{\emph{\moodle@generalfeedback}}}% \fi \fi } @@ -3234,7 +3955,7 @@ \ifmoodle@single% \setkeys{moodle}{fraction=100}% \else - \setkeys{moodle}{fraction=\moodle@autopoints}% + \setkeys{moodle}{fraction=\moodle@AutoScore}% \fi \else \g@addto@macro\moodle@answertext{#1#2}% @@ -3244,7 +3965,11 @@ \ifmoodle@handout\else \ifmoodle@single% \ifx\moodle@fraction\@empty\relax% - \setkeys{moodle}{fraction=0}% + \ifdim0pt<\moodle@sanction pt\relax + \setkeys{moodle}{fraction=-\moodle@sanction}% + \else + \setkeys{moodle}{fraction=0}% + \fi \fi \moodle@checkfraction \ifx\moodle@fraction\@hundred% @@ -3257,7 +3982,11 @@ \fi \else% multiple \ifx\moodle@fraction\@empty\relax% - \setkeys{moodle}{fraction=\moodle@autosanctions}% + \ifmoodle@AdvancedScoreMode + \setkeys{moodle}{fraction=0}% + \else + \setkeys{moodle}{fraction=-\moodle@AutoScore}% + \fi \fi \moodle@checkfraction \g@addto@macro\moodle@answertext{$~(\moodle@fraction\%)$}% @@ -3268,142 +3997,142 @@ \xa\temp\xa{\moodle@answertext}% \else \ifx\moodle@feedback\@empty\relax\else% - \g@addto@macro\moodle@answertext{\hfill \emph{$\rightarrow$ \moodle@feedback}}% + \g@addto@macro\moodle@answertext{\moodle@preFeedback \emph{$\rightarrow$ \moodle@feedback}}% \fi \moodle@answertext \fi }% -% COMMON UTILITY: COUNTING CORRECT ANSWERS (AND A BIT MORE...) - \newcounter{moodle@numcorrectanswers}% count the stars - \newcounter{moodle@numincorrectanswers}% count the items without fraction key indicated - \newlength{\moodle@pointspercorrect}% - \newlength{\moodle@pointsperincorrect}% - \newlength{\moodle@sumofpositivefractions}% sums user-set positive fractions - \newlength{\moodle@sumofnegativefractions}% sums user-set negative fractions - \def\moodle@countcorrectanswers{% - \setcounter{moodle@numcorrectanswers}{0}% - \setcounter{moodle@numincorrectanswers}{0}% - \global\setlength{\moodle@pointspercorrect}{100pt}% - \global\setlength{\moodle@pointsperincorrect}{-100pt}% - \global\setlength{\moodle@sumofpositivefractions}{0pt}% - \global\setlength{\moodle@sumofnegativefractions}{0pt}% - \loopthroughitemswithcommand{\moodle@countcorrectanswers@a}% - \global\advance\moodle@pointspercorrect by-\moodle@sumofpositivefractions\relax% - \def\ds{\strip@pt\moodle@sumofpositivefractions}% - \ifnum0=\c@moodle@numcorrectanswers\relax% - % autopoints will never be used but we check if the sum of positive fractions is 100% - \ifdim\moodle@pointspercorrect<-\moodle@fractiontol pt\relax% - \PackageWarning{moodle}{Positive fractions sum up to more than 100 (here: \ds)}% - \else - \ifdim\moodle@pointspercorrect>\moodle@fractiontol pt\relax% - \PackageError{moodle}{Positive fractions sum up to less than 100 (here: \ds)}% - \fi - \fi - \else - \ifdim0pt<\moodle@pointspercorrect\relax\else% - % we have starred items so the sum of user-set positive fractions must be less than 100% - % otherwise, starred items would lead to penalties - \PackageError{moodle}{Positive fractions sum up to 100 or more (here: \ds): - there is no positive points left to be given to starred items.}% - \fi - \global\divide\moodle@pointspercorrect by \c@moodle@numcorrectanswers\relax% - \fi - \gdef\moodle@autopoints{\strip@pt\moodle@pointspercorrect}% - \global\advance\moodle@pointsperincorrect by-\moodle@sumofnegativefractions\relax% - \def\ds{\strip@pt\moodle@sumofnegativefractions}% - \ifnum0=\c@moodle@numincorrectanswers\relax% - % autosanctions will never be used and - % we do not care about the sum of negative fractions (might be less than -100) - \else - \ifdim0pt<\moodle@pointsperincorrect\relax% - % we have items without fractions set: to prevent auto sanctions from becoming bonuses, - % such items are neutralized. - \PackageWarning{moodle}{Negative fractions sum up to -100 or less (here: \ds): - items with no fraction key set will be considered as neutral.}% - \global\setlength{\moodle@pointsperincorrect}{0pt}% - \fi - \global\divide\moodle@pointsperincorrect by \c@moodle@numincorrectanswers\relax% - \fi - \gdef\moodle@autosanctions{\strip@pt\moodle@pointsperincorrect}% - } - \long\def\moodle@countcorrectanswers@a#1{% - %The grouping is to keep key answer-specific key changes local. - \bgroup - \moodle@countcorrectanswers@b#1\moodle@answer@rdelim - \egroup - }% - \newcommand\moodle@countcorrectanswers@b[1][]{% - %\ifx&% - \let\moodle@fraction\@empty% - \setkeys{moodle}{#1}% - \moodle@countcorrectanswers@c% - %\fi - }% - \long\def\moodle@countcorrectanswers@c#1#2\moodle@answer@rdelim{% - \def\test@i{#1}% - \ifx\test@i\@star - \stepcounter{moodle@numcorrectanswers}% - \else - \ifx\moodle@fraction\@empty\relax% - \stepcounter{moodle@numincorrectanswers}% - \else - \ifdim0pt<\moodle@fraction pt\relax% - \global\addtolength{\moodle@sumofpositivefractions}{\moodle@fraction pt}% - \else - \global\addtolength{\moodle@sumofnegativefractions}{\moodle@fraction pt}% - \fi - \fi - \fi - }% - \newlength{\test@fraction}% - \newlength{\test@lower}% - \newlength{\test@upper}% - \def\moodle@fractionerror{% - \def\ds{\moodle@fraction}% - \PackageError{moodle}{the current fraction is not a valid value (here: \ds)}% - } - {\catcode`|=3\relax - \gdef\moodle@validfractionlist{0|5|10|11.11111|12.5|14.28571|16.66667|20|25|30|33.33333|40|50|60|66.66667|70|75|80|83.33333|90|100}}% - \def\moodle@isfractionnear#1{% - \setlength{\test@lower}{#1 pt}% - \addtolength{\test@lower}{-\moodle@fractiontol pt}% - \setlength{\test@upper}{#1 pt}% - \addtolength{\test@upper}{\moodle@fractiontol pt}% - \ifdim\test@upper>\test@fraction\relax - \ifdim\test@lower<\test@fraction\relax - \gdef\test@fractionmatched{#1}% - \fi - \fi - } - \def\moodle@checkfraction{% - \ifmoodle@allornothing - \ifnum\moodle@fraction>0% - \setkeys{moodle}{fraction=100}% - \fi - \ifnum\moodle@fraction<0% - \setkeys{moodle}{fraction=0}% - \fi - \else - %\def\test@i{#1}% - \setlength{\test@fraction}{\moodle@fraction pt}% - % take the absolute value - \ifdim0pt>\test@fraction\relax% - \setlength{\test@fraction}{-\moodle@fraction pt}% - \fi - % test if the fraction is an admissible value - \let\test@fractionmatched\@empty - \forlistloop{\moodle@isfractionnear}{\moodle@validfractionlist}% - \ifx\test@fractionmatched\@empty\relax - \moodle@fractionerror% - \fi - \ifdim\moodle@fraction pt<-\moodle@fractiontol pt\relax% - \setkeys{moodle}{fraction=-\test@fractionmatched}% - \else - \setkeys{moodle}{fraction=\test@fractionmatched}% - \fi - \fi - } +% COMMON UTILITY: Inspecting answers of multiple choice questions (for option 'multiple') +\newcounter{moodle@NumStarredAnswers}% count the stars +\newdimen\moodle@autoscore@tmp% +\newdimen\moodle@TotalPositiveFractions% Total of user-set positive fractions +\newdimen\moodle@PositiveScoreFactor% scaling factor to impose the fractions of +%correct answers to add up to 100% +\newif\ifmoodle@AdvancedScoreMode% + +\def\moodle@InspectMultipleAnswers{% + \setcounter{moodle@NumStarredAnswers}{0}% + \moodle@autoscore@tmp=100pt\relax% temporary variable + \moodle@TotalPositiveFractions=0pt\relax% + \moodle@PositiveScoreFactor=1pt\relax + \moodle@AdvancedScoreModefalse + \loopthroughitemswithcommand{\moodle@InspectMultipleAnswers@a}% + \ifmoodle@AdvancedScoreMode% advanced mode + \ifx\endmulti\endclozemulti% inside cloze + \divide\moodle@TotalPositiveFractions by 100\relax + \advance\moodle@TotalPositiveFractions by \c@moodle@NumStarredAnswers pt\relax + \moodle@PositiveScoreFactor=1 pt\relax + \moodle@PositiveScoreFactor=\dimexpr 1 pt * \moodle@PositiveScoreFactor / \moodle@TotalPositiveFractions\relax% + \global\def\moodle@OtherScore{% for multianswer questions in cloze, with advanced mode + \ifdim0pt<\moodle@fraction pt\relax + \moodle@fraction + \else + \moodle@autoscore@tmp=\moodle@PositiveScoreFactor\relax% + \multiply\moodle@autoscore@tmp by \moodle@fraction\relax% + \strip@pt\moodle@autoscore@tmp + \fi + }% + \else% outside cloze + \advance\moodle@autoscore@tmp by-\moodle@TotalPositiveFractions\relax% + \def\ds{\strip@pt\moodle@TotalPositiveFractions}% + \ifnum0=\c@moodle@NumStarredAnswers\relax% + % autopoints will never be used but we check if the sum of positive fractions is 100% + \ifdim\moodle@autoscore@tmp<-\moodle@fractiontol pt\relax% + \PackageWarning{moodle}{Positive fractions add up to more than 100 (here: \ds)}% + % Here we issue only a warning because Moodle accepts the \XML\ without error. + \else + \ifdim\moodle@autoscore@tmp>\moodle@fractiontol pt\relax% + \PackageError{moodle}{Positive fractions add up to less than 100 (here: \ds)}% + \fi + \fi + \else% there are starred items + \ifdim0pt<\moodle@autoscore@tmp\relax\else% + % we have starred items so the sum of user-set positive fractions must be less than 100% + % otherwise, starred items would lead to penalties + \PackageError{moodle}{Positive fractions add up to 100 or more (here: \ds): + there is no positive points left to be given to starred items.}% + \fi + \divide\moodle@autoscore@tmp by \c@moodle@NumStarredAnswers\relax% + \fi + \fi + \else% automatic score (not in advanced score mode) + \global\divide\moodle@autoscore@tmp by \c@moodle@NumStarredAnswers\relax% + \fi + \xdef\moodle@AutoScore{\strip@pt\moodle@autoscore@tmp}% +} +\long\def\moodle@InspectMultipleAnswers@a#1{% + %The grouping is to keep key answer-specific key changes local. + \bgroup + \moodle@InspectMultipleAnswers@b#1\moodle@answer@rdelim + \egroup +}% +\newcommand\moodle@InspectMultipleAnswers@b[1][]{% + %\ifx&% + \let\moodle@fraction\@empty% + \setkeys{moodle}{#1}% + \moodle@InspectMultipleAnswers@c% + %\fi +}% +\long\def\moodle@InspectMultipleAnswers@c#1#2\moodle@answer@rdelim{% + \def\test@i{#1}% + \ifx\test@i\@star + \stepcounter{moodle@NumStarredAnswers}% + \else + \ifx\moodle@fraction\@empty\else + \global\moodle@AdvancedScoreModetrue + \ifdim0pt<\moodle@fraction pt\relax% + \global\advance\moodle@TotalPositiveFractions by \moodle@fraction pt\relax% + \fi + \fi + \fi +}% +\newdimen\test@fraction% +\newdimen\test@lower% +\newdimen\test@upper% +\def\moodle@fractionerror{% + \def\ds{\moodle@fraction}% + \PackageError{moodle}{the current fraction is not an admissible value (here: \ds)}% +} +{\catcode`|=3\relax +\gdef\moodle@validfractionlist{0|5|10|11.11111|12.5|14.28571|16.66667|20|25|30|33.33333|40|50|60|66.66667|70|75|80|83.33333|90|100}}% +\def\moodle@isfractionnear#1{% + \test@lower=\dimexpr #1 pt - \moodle@fractiontol pt\relax% + \test@upper=\dimexpr #1 pt + \moodle@fractiontol pt\relax% + \ifdim\test@upper>\test@fraction\relax + \ifdim\test@lower<\test@fraction\relax + \gdef\test@fractionmatched{#1}% + \fi + \fi +} +\def\moodle@checkfraction{% + \ifmoodle@allornothing + \ifnum\moodle@fraction>0\relax + \setkeys{moodle}{fraction=100}% + \fi + \ifnum\moodle@fraction<0\relax + \setkeys{moodle}{fraction=0}% + \fi + \else + %\def\test@i{#1}% + \test@fraction=\moodle@fraction pt\relax% + % take the absolute value + \ifdim0pt>\test@fraction\relax% + \test@fraction=-\moodle@fraction pt\relax% + \fi + % test if the fraction is an admissible value + \let\test@fractionmatched\@empty + \forlistloop{\moodle@isfractionnear}{\moodle@validfractionlist}% + \ifx\test@fractionmatched\@empty\relax + \moodle@fractionerror% + \fi + \ifdim\moodle@fraction pt<-\moodle@fractiontol pt\relax% + \xdef\moodle@fraction{-\test@fractionmatched}% + \else + \xdef\moodle@fraction{\test@fractionmatched}% + \fi + \fi +} % TODO: Put these macros in same order as other sections'. % SAVING ANSWERS TO MEMORY @@ -3427,7 +4156,7 @@ \ifmoodle@single \setkeys{moodle}{fraction=100}% \else - \setkeys{moodle}{fraction=\moodle@autopoints}% + \setkeys{moodle}{fraction=\moodle@AutoScore}% \fi \def\moodle@answertext{#2}% \else @@ -3435,9 +4164,17 @@ \fi \ifx\moodle@fraction\@empty\relax% \ifmoodle@single\relax - \setkeys{moodle}{fraction=0}% + \ifdim0pt<\moodle@sanction pt\relax + \setkeys{moodle}{fraction=-\moodle@sanction}% + \else + \setkeys{moodle}{fraction=0}% + \fi \else% multiple - \setkeys{moodle}{fraction=\moodle@autosanctions}% + \ifmoodle@AdvancedScoreMode + \setkeys{moodle}{fraction=0}% + \else + \setkeys{moodle}{fraction=-\moodle@AutoScore}% + \fi \fi \fi \trim@spaces@in\moodle@answertext @@ -3446,17 +4183,19 @@ \addto@xml[2]{\moodle@answers@xml}{}% \xa\converttohtmlmacro\xa\moodle@answertext@html\xa{\moodle@answertext}% \addto@xml[4]{\moodle@answers@xml}{ \moodle@answertext@html

]]>
}% + \ifmoodle@pluginfile + \addto@xml[4]{\moodle@answers@xml}{\htmlize@embeddedfiletags}% + \fi \ifx\moodle@feedback\@empty\relax\else \trim@spaces@in\moodle@feedback \xa\converttohtmlmacro\xa\moodle@feedback@html\xa{\moodle@feedback}% - \addto@xml[4]{\moodle@answers@xml}{ \moodle@feedback@html

]]>
}% + \addto@xml[4]{\moodle@answers@xml}{ \moodle@feedback@html

]]>
\ifmoodle@pluginfile\htmlize@embeddedfiletags\fi
}% \fi \addto@xml[2]{\moodle@answers@xml}{
}% }% -% WRITING QUESTION TO XML FILE +% WRITING QUESTION TO \XML\ FILE \gdef\writemultiquestion{% - \writetomoodle{}% \moodle@writecommondata% \ifmoodle@allornothing\else @@ -3468,7 +4207,7 @@ % \end{macrocode} % % \subsubsection{True/False Question Front-End} -% +% % \begin{macrocode} % True/False has structure % \begin{truefalse}[options]{name}% @@ -3486,7 +4225,7 @@ \expandafter\gatheritems\xa{\BODY}% \let\moodle@questionheader=\gatheredheader %First, the LaTeX processing - \item \textbf{\moodle@questionname} + \item \moodle@begin@samepage\textbf{\moodle@questionname} \ifmoodle@handout \moodle@makelatextag@qtype{truefalse} \else @@ -3494,13 +4233,14 @@ \par \noindent \moodle@makelatextag@qtype{truefalse} - \moodle@makelatextag@value{default grade}{\moodle@marks{\csname moodle@default grade\endcsname}} + \moodle@makelatextag@value{default grade}{marked out of} \fi \par \noindent \moodle@questionheader \edef\moodle@generalfeedback{\expandonce\moodle@feedback} \moodle@truefalse@latexprocessing + \moodle@end@samepage %Now, writing information to XML \@moodle@ifgeneratexml{% \setkeys{moodle}{penalty=1}% @@ -3510,7 +4250,7 @@ \gdef\moodle@answers@xml{}% \setkeys{moodle}{feedback={}}% \xa\loopthroughitemswithcommand\xa{\xa\savetruefalseanswer}% - \ifnum\c@numgathereditems=1\relax% + \ifnum\c@numgathereditems=1\relax \setcounter{currentitemnumber}{2}% \savetruefalseanswer{} \fi @@ -3529,22 +4269,22 @@ % \ifnum\c@numgathereditems>2\relax% % \PackageError{moodle}{Expecting at max two answers with truefalse type} % \fi - \setcounter{moodle@numcorrectanswers}{0}% + \setcounter{moodle@NumStarredAnswers}{0}% \begin{itemize} \setlength\itemsep{0pt}\setlength\parskip{0pt}% \loopthroughitemswithcommand{\moodle@print@truefalse@answer}% - \ifnum\c@currentitemnumber=2% - \item \textbf{False}% + \ifnum\c@currentitemnumber=2\relax + \item \textbf{\GetTranslation{False}}% \fi \end{itemize} \ifmoodle@handout\else \ifx\moodle@generalfeedback\@empty\relax\else% - \fbox{\parbox{\linewidth}{\emph{\moodle@generalfeedback}}}% + \fbox{\parbox{.96\linewidth}{\emph{\moodle@generalfeedback}}}% \fi \fi - \ifnum\c@moodle@numcorrectanswers=0\relax% + \ifnum\c@moodle@NumStarredAnswers=0\relax \PackageError{moodle}{No answer is explicitly marked as correct (*). Be sure one answer leads to points.}% \fi - \ifnum\c@moodle@numcorrectanswers>1\relax% + \ifnum\c@moodle@NumStarredAnswers>1\relax \PackageError{moodle}{Two answers are explicitly marked as correct (*). Be sure only one answer leads to points.}% \fi } @@ -3567,35 +4307,35 @@ \fi }% \def\moodle@print@truefalse@answer@int@int@empty{% - \ifnum\c@currentitemnumber=1% - \def\moodle@answertext{True}% + \ifnum\c@currentitemnumber=1\relax + \def\moodle@answertext{\GetTranslation{True}}% \fi - \ifnum\c@currentitemnumber=2% - \def\moodle@answertext{False}% + \ifnum\c@currentitemnumber=2\relax + \def\moodle@answertext{\GetTranslation{False}}% \fi \item \textbf{\moodle@answertext}% \ifmoodle@handout\else \ifx\moodle@feedback\@empty\relax\else - ~\hfill \emph{$\rightarrow$ \moodle@feedback}% + ~\moodle@preFeedback \emph{$\rightarrow$ \moodle@feedback}% \fi \fi }% \def\moodle@print@truefalse@answer@int@int@int#1#2\@rdelim{% - \ifnum\c@currentitemnumber=1% - \def\moodle@answertext{True}% + \ifnum\c@currentitemnumber=1\relax + \def\moodle@answertext{\GetTranslation{True}}% \fi - \ifnum\c@currentitemnumber=2% - \def\moodle@answertext{False}% + \ifnum\c@currentitemnumber=2\relax + \def\moodle@answertext{\GetTranslation{False}}% \fi \item \textbf{\moodle@answertext}% - \ifnum\c@currentitemnumber<3% + \ifnum\c@currentitemnumber<3\relax \def\test@i{#1}% %\trim@spaces@in\test@i \ifx\test@i\@star \ifmoodle@handout\else ~$\checkmark$% \fi - \stepcounter{moodle@numcorrectanswers}% + \stepcounter{moodle@NumStarredAnswers}% \else ~% \fi @@ -3605,13 +4345,13 @@ \trim@spaces@in\test@ii \ifx\test@ii\@empty\relax\else \ifx\test@i\@star% - \hfill \emph{$\rightarrow$ #2}% + \moodle@preFeedback \emph{$\rightarrow$ #2}% \else% - \hfill \emph{$\rightarrow$ #1#2}% + \moodle@preFeedback \emph{$\rightarrow$ #1#2}% \fi \fi \else - \hfill \emph{$\rightarrow$ \moodle@feedback}% + \moodle@preFeedback \emph{$\rightarrow$ \moodle@feedback}% \fi \fi \fi @@ -3639,19 +4379,22 @@ }% \def\savetruefalseanswer@int@int@empty{% \setkeys{moodle}{fraction=0}% - \ifnum\c@currentitemnumber=1% - \def\moodle@answertext{true}% + \ifnum\c@currentitemnumber=1\relax + \def\moodle@answertext{true}% \fi - \ifnum\c@currentitemnumber=2% - \def\moodle@answertext{false}% + \ifnum\c@currentitemnumber=2\relax + \def\moodle@answertext{false}% \fi - \ifnum\c@currentitemnumber<3% + \ifnum\c@currentitemnumber<3\relax \addto@xml[2]{\moodle@answers@xml}{}% \addto@xml[4]{\moodle@answers@xml}{ \moodle@answertext}% + \ifmoodle@pluginfile + \addto@xml[4]{\moodle@answers@xml}{\htmlize@embeddedfiletags}% + \fi \ifx\moodle@feedback\@empty\relax\else \trim@spaces@in\moodle@feedback \xa\converttohtmlmacro\xa\moodle@feedback@html\xa{\moodle@feedback}% - \addto@xml[4]{\moodle@answers@xml}{ \moodle@feedback@html

]]>
}% + \addto@xml[4]{\moodle@answers@xml}{ \moodle@feedback@html

]]>
\ifmoodle@pluginfile\htmlize@embeddedfiletags\fi
}% \fi \addto@xml[2]{\moodle@answers@xml}{
}% \fi @@ -3663,15 +4406,18 @@ \else \setkeys{moodle}{fraction=0}% \fi - \ifnum\c@currentitemnumber=1% - \def\moodle@answertext{true}% + \ifnum\c@currentitemnumber=1\relax + \def\moodle@answertext{true}% \fi - \ifnum\c@currentitemnumber=2% - \def\moodle@answertext{false}% + \ifnum\c@currentitemnumber=2\relax + \def\moodle@answertext{false}% \fi - \ifnum\c@currentitemnumber<3% + \ifnum\c@currentitemnumber<3\relax \addto@xml[2]{\moodle@answers@xml}{}% \addto@xml[4]{\moodle@answers@xml}{ \moodle@answertext}% + \ifmoodle@pluginfile + \addto@xml[4]{\moodle@answers@xml}{\htmlize@embeddedfiletags}% + \fi \ifx\moodle@feedback\@empty\relax \def\test@ii{#2} \ifx\test@ii\@empty\relax\else @@ -3680,18 +4426,18 @@ \else% \xa\converttohtmlmacro\xa\moodle@feedback@html\xa{#1#2}% \fi% - \addto@xml[4]{\moodle@answers@xml}{ \moodle@feedback@html

]]>
}% + \addto@xml[4]{\moodle@answers@xml}{ \moodle@feedback@html

]]>
\ifmoodle@pluginfile\htmlize@embeddedfiletags\fi
}% \fi \else \trim@spaces@in\moodle@feedback \xa\converttohtmlmacro\xa\moodle@feedback@html\xa{\moodle@feedback}% - \addto@xml[4]{\moodle@answers@xml}{ \moodle@feedback@html

]]>
}% + \addto@xml[4]{\moodle@answers@xml}{ \moodle@feedback@html

]]>
\ifmoodle@pluginfile\htmlize@embeddedfiletags\fi
}% \fi \addto@xml[2]{\moodle@answers@xml}{
}% \fi }% -% WRITING QUESTION TO XML FILE +% WRITING QUESTION TO \XML\ FILE \gdef\writetruefalsequestion{% \writetomoodle{}% \moodle@writecommondata% @@ -3699,7 +4445,7 @@ % \end{macrocode} % % \subsubsection{Matching Question Front-End} -% +% % \begin{macrocode} %\let\answer=\hfill @@ -3710,33 +4456,37 @@ \def\moodle@makelatextag@matching{% \ifmoodle@handout\else \ifmoodle@draganddrop - \moodle@makelatextagbox{Drag and drop}\relax% + \moodle@makelatextag@other{Drag and drop}\relax% \fi \ifmoodle@shuffle - \moodle@makelatextagbox{Shuffle}\relax% + \moodle@makelatextag@other{Shuffle}\relax% \fi \fi } - +\long\def\moodle@matching@left#1{% + \parbox[c]{.9\linewidth}{\raggedleft #1}\hfil\vrule width .5pt$\bullet$% +}% +\long\def\moodle@matching@right#1{% + $\bullet$\vrule width .5pt\hfil\parbox[c]{.9\linewidth}{#1}% +}% \def\moodle@matching@latexprocessing{% \bgroup %\let\answer=\hfill - \par%\noindent + \par\noindent \ifmoodle@handout - \NewList{questionlist} - \NewList{answerlist} + \NewList{questionlist}% + \gdef\matcheslist{}% + \NewList{answerlist}% + \else + \long\def\matching@table@text{}% \fi - \def\matching@table@text{}% - % \ifnum\c@numgathereditems>2\relax% -% \PackageError{moodle}{Expecting at max two answers with truefalse type} -% \fi - \setcounter{moodle@numcorrectanswers}{0}% Here this counter is for "questions" (items on the left column) + \setcounter{moodle@NumStarredAnswers}{0}% Here this counter is for "questions" (items on the left column) \loopthroughitemswithcommand{\moodle@print@matching@answer}% - \ifnum\c@numgathereditems<3% - \PackageWarning{moodle}{Moodle expects at least three "answers" with matching type}% + \ifnum\c@numgathereditems<3\relax + \PackageWarning{moodle}{Moodle expects at least three proposed matches in matching questions}% \fi - \ifnum\c@moodle@numcorrectanswers<2% - \PackageWarning{moodle}{Moodle expects at least two "questions" with the matching type}% + \ifnum\c@moodle@NumStarredAnswers<2\relax + \PackageWarning{moodle}{Moodle expects at least two items in matching questions}% \fi \ifmoodle@handout \ifmoodle@shuffle @@ -3744,23 +4494,25 @@ \else \let\moodle@matching@loop=\ForEachFirstItem \fi - \moodle@matching@loop{questionlist}{Question}{ - \xdef\test@i{\Question}% - \ExtractRandomItem{answerlist}{Answer}% - \ifx\test@i\@empty - \xdef\matching@table@text{\expandonce\matching@table@text & & $\bullet$~\expandonce\Answer\\}% - \else - \xdef\matching@table@text{\expandonce\matching@table@text\expandonce\Question~$\bullet$ & & $\bullet$~\expandonce\Answer\\}% - \fi + \begin{minipage}{.43\linewidth}% + \moodle@matching@loop{questionlist}{Question}{% + \moodle@matching@left{\Question}% + \vskip 4pt\relax }% - \fi - \begin{tabular}{@{}>{\raggedleft}p{.45\linewidth}p{.1\linewidth}p{.45\linewidth}@{}}% - \matching@table@text - \end{tabular}% - \par - \ifmoodle@handout\else + \end{minipage}% + \hfill + \begin{minipage}{.43\linewidth}% + \ForEachFirstItem{answerlist}{Answer}{% + \moodle@matching@right{\Answer}% + \vskip 4pt\relax + }% + \end{minipage}% + \else + \begin{tabular}{@{}p{.43\linewidth}@{}p{.1\linewidth}@{}p{.43\linewidth}@{}}% + \matching@table@text + \end{tabular}% \ifx\moodle@generalfeedback\@empty\relax\else% - \fbox{\parbox{\linewidth}{\emph{\moodle@generalfeedback}}}% + \fbox{\parbox{.96\linewidth}{\emph{\moodle@generalfeedback}}}% \fi \fi \egroup @@ -3777,18 +4529,30 @@ \def\test@i{#1}% \trim@spaces@in\test@i \ifmoodle@handout - \ifx\test@i\@empty - \InsertLastItem{questionlist}{\@empty}% - \else + \ifx\test@i\@empty\else + \stepcounter{moodle@NumStarredAnswers}% \InsertLastItem{questionlist}{#1}% \fi - \InsertLastItem{answerlist}{#2}% + \edef\test@ii{\detokenize{#2}}% + \trim@spaces@in\test@ii + \trim@spaces@in\test@ii% don't know why the 2nd call is required + % add proposed match only if not already in the list + \xifinlist{\expandonce\test@ii}{\matcheslist}{}{% + \listeadd\matcheslist{\expandonce\test@ii}% + % matches are always proposed shuffled + \InsertRandomItem{answerlist}{#2}% + }% \else \ifx\test@i\@empty - \g@addto@macro\matching@table@text{&&$\bullet$~#2\\}% + \xa\g@addto@macro\xa\matching@table@text\xa{% + &&\moodle@matching@right{#2}\\\\\relax% + }% \else - \stepcounter{moodle@numcorrectanswers}% - \xa\g@addto@macro\xa\matching@table@text\xa{\test@i~$\bullet$&\leavevmode\cleaders\hb@xt@.44em{\hss$\cdot$\hss}\hfill\kern\z@&$\bullet$~#2\\}% + \stepcounter{moodle@NumStarredAnswers}% + \xa\g@addto@macro\xa\matching@table@text\xa{% + \moodle@matching@left{#1}&\leavevmode\leaders\hb@xt@.44em{\hss$\cdot$\hss}\hfill\kern\z@% + &\moodle@matching@right{#2}\\\\\relax + }% \fi \fi }% @@ -3812,33 +4576,34 @@ \def\moodle@subanswertext{#2}% \trim@spaces@in\moodle@subquestiontext \xa\converttohtmlmacro\xa\moodle@subquestiontext@htmlized\xa{\moodle@subquestiontext}% - \trim@spaces@in\moodle@subanswertext - \ifmoodle@draganddrop - \xa\converttohtmlmacro\xa\moodle@subanswertext@htmlized\xa{\moodle@subanswertext}% - \fi \addto@xml[2]{\moodle@answers@xml}{}% \ifx\moodle@subquestiontext\@empty \addto@xml[4]{\moodle@answers@xml}{ }% \else - \addto@xml[4]{\moodle@answers@xml}{ \moodle@subquestiontext@htmlized

]]>
}% + \addto@xml[4]{\moodle@answers@xml}{ \moodle@subquestiontext@htmlized

]]>
\ifmoodle@pluginfile\htmlize@embeddedfiletags\fi}% \fi + \trim@spaces@in\moodle@subanswertext + \trim@spaces@in\moodle@subanswertext% don't know why but a second call seems required... + %\ifmoodle@draganddrop + \xa\converttohtmlmacro\xa\moodle@subanswertext@htmlized\xa{\moodle@subanswertext}% + %\fi \ifmoodle@draganddrop % \show\moodle@subanswertext@htmlized - \addto@xml[4]{\moodle@answers@xml}{ \moodle@subanswertext@htmlized

]]>
}% + \addto@xml[4]{\moodle@answers@xml}{ \moodle@subanswertext@htmlized

]]>
\ifmoodle@pluginfile\htmlize@embeddedfiletags\fi
}% \else -% \show\moodle@subanswertext - \addto@xml[4]{\moodle@answers@xml}{ \moodle@subanswertext}% +% \show\moodle@subanswertext@htmlized + \addto@xml[4]{\moodle@answers@xml}{ }% \fi % \ifx\moodle@feedback\@empty\relax\else % \trim@spaces@in\moodle@feedback % \xa\converttohtmlmacro\xa\moodle@feedback@html\xa{\moodle@feedback}% -% \addto@xml[4]{\moodle@answers@xml}{ \moodle@feedback@html

]]>
}% % \fi \addto@xml[2]{\moodle@answers@xml}{
}% }% -% WRITING QUESTION TO XML FILE +% WRITING QUESTION TO \XML\ FILE \gdef\writematchingquestion{% \ifmoodle@draganddrop \writetomoodle{}% @@ -3855,17 +4620,17 @@ % \subsection{Cloze Questions} % Because cloze questions are so complicated, they get their own section of code. % The cloze strategy is as follows. -% +% % All subquestions show up as part of the question body text. % For each type of subquestion, we have a cloze-version environment -% that actually has 2 versions, depending on whether we are doing LaTeX or XML processing. -% So the main environment is quite typical: +% that actually has 2 versions, depending on whether we are doing LaTeX or \XML\ processing. +% So the main environment is quite typical: % \begin{enumerate} % \item Process the body as LaTeX. % During this run, a |\begin{multi}| etc.~will be processed for display onscreen. -% \item Then save the body as the questiontext for XML. +% \item Then save the body as the questiontext for \XML. % During this run, a |\begin{multi}| etc.~will be parsed and turned into -% cloze code as part of the XML questiontext. +% cloze code as part of the \XML\ questiontext. % \end{enumerate} % \begin{macrocode} % LATEX PROCESSING @@ -3880,7 +4645,7 @@ % A cloze question won't have any \item's in it, so we just use \BODY. \moodle@enableclozeenvironments %First, the LaTeX processing. - \item \textbf{\moodle@questionname} + \item \moodle@begin@samepage\textbf{\moodle@questionname} \ifmoodle@handout \moodle@makelatextag@qtype{cloze} \else @@ -3897,12 +4662,13 @@ %\csname moodle@cloze@latexprocessing\endcsname \ifmoodle@handout\else \ifx\moodle@generalfeedback\@empty\relax\else% - \fbox{\parbox{\linewidth}{\emph{\moodle@generalfeedback}}}% + \fbox{\parbox{.96\linewidth}{\emph{\moodle@generalfeedback}}}% \fi \fi + \moodle@end@samepage %Now, writing information to memory. \@moodle@ifgeneratexml{% - \xa\questiontext\xa{\BODY}% Save the question text as HTML. + \xa\questiontext\xa{\BODY}% Save the question text as \HTML. \writeclozequestion }{}% \egroup% @@ -3917,7 +4683,7 @@ \let\endshortanswer=\endclozeshortanswer } -% WRITING QUESTION TO XML FILE +% WRITING QUESTION TO \XML\ FILE \gdef\writeclozequestion{% \writetomoodle{}% \moodle@writequestionname% @@ -3930,14 +4696,53 @@ }% % \end{macrocode} % -% \subsubsection{Cloze Multiple Choice Questions} -% +% Utility to check the validity of fractions and points inside cloze subquestions. % \begin{macrocode} +\newdimen\moodle@tmpdim +\def\moodle@checkclozefraction{% + \moodle@tmpdim=\moodle@fraction pt\relax + % Rounding is performed in three steps: + % 1) round(x)=floor(x+1/2) + \advance\moodle@tmpdim by .5pt\relax + % 2) floor(x)=trunc(x) if x>0, and floor(x)=trunc(x-1) if x<0 + \ifdim\moodle@tmpdim<0pt\relax\advance\moodle@tmpdim by -1pt\fi + % 3) Truncation because the quantum of TeX dimensions is 1/65536-th of a point. + \divide\moodle@tmpdim by 65536\relax\multiply\moodle@tmpdim by 65536\relax + \def\moodle@tmpval{\strip@pt\moodle@tmpdim}% + \ifdim\moodle@tmpdim=\moodle@fraction pt\else + \PackageWarning{moodle}{in cloze questions, fractions must be integers. Rounding \moodle@fraction\space to \moodle@tmpval}% + \fi + \xdef\moodle@fraction{\moodle@tmpval}% in any case, take eventual decimals out (e.g. change 10.0 for 10) +}% +\def\moodle@checkclozegrade{% + \moodle@tmpdim=\csname moodle@default grade\endcsname pt\relax + \ifdim\moodle@tmpdim<1 pt\relax + \PackageWarning{moodle}{for cloze questions, the default grade must be a positive integer. Changing the default grade from \csname moodle@default grade\endcsname\space to 1}% + \csdef{moodle@default grade}{1}% + \else % Rounding is performed in three steps: + % 1) round(x)=floor(x+1/2) + \advance\moodle@tmpdim by .5pt\relax + % 2) floor(x)=trunc(x) if x>0, and floor(x)=trunc(x-1) if x<0 + \ifdim\moodle@tmpdim<0pt\relax\advance\moodle@tmpdim by -1pt\fi + % 3) Truncation because the quantum of TeX dimensions is 1/65536-th of a point. + \divide\moodle@tmpdim by 65536\relax\multiply\moodle@tmpdim by 65536\relax + \def\moodle@tmpval{\strip@pt\moodle@tmpdim}% + \ifdim\moodle@tmpdim=\csname moodle@default grade\endcsname pt\else + \PackageWarning{moodle}{for cloze questions, the default grade must be a positive integer. Rounding \csname moodle@default grade\endcsname\space to \moodle@tmpval}% + \fi + \csedef{moodle@default grade}{\moodle@tmpval}% in any case, take eventual decimals out (e.g. change 10.0 for 10) + \fi +}% +% \end{macrocode} +% +% \subsubsection{Cloze Multiple Choice Questions} +% +% \begin{macrocode} \NewEnviron{clozemulti}[1][]{% \bgroup - \setkeys{moodle}{default grade=1}% \setkeys{moodle}{#1}% + \moodle@checkclozegrade \expandafter\gatheritems\xa{\BODY}% \let\moodle@questionheader=\gatheredheader \ifhtmlizer@active @@ -3946,30 +4751,35 @@ \xa\g@addto@macro\xa\moodle@clozemulti@output\xa{\moodle@questionheader}% \def\clozemulti@coding{}% \edef\clozemulti@coding{\csname moodle@default grade\endcsname:}% - \ifmoodle@multiple - \PackageWarning{moodle}{Cloze Multiresponse only supported by Moodle 3.5+} - \g@addto@macro{\clozemulti@coding}{MULTIRESPONSE}% - \else + \ifmoodle@single \g@addto@macro{\clozemulti@coding}{MULTICHOICE}% + \else + \moodle@WarningOrError{3}{5}{Cloze Multiresponse}% + \g@addto@macro{\clozemulti@coding}{MULTIRESPONSE}% \fi \ifcase\moodle@multi@mode\relax % Case 0: dropdown box style - \ifmoodle@shuffle - \g@addto@macro{\clozemulti@coding}{_}% - \fi + \ifmoodle@single\else + \PackageError{moodle}{Inline mode (dropdown box) incompatible with multiresponse.} + \fi + \ifmoodle@shuffle + \g@addto@macro{\clozemulti@coding}{_}% + \fi \or % Case 1: vertical style - \ifmoodle@multiple - \PackageError{moodle}{Vertical mode (dropdown box) incompatible with multiresponse.} - \else + \ifmoodle@single \g@addto@macro{\clozemulti@coding}{_V}% + \else + \ifmoodle@shuffle + \g@addto@macro{\clozemulti@coding}{_}% + \fi \fi \else % Case 2: horizontal radio buttons \g@addto@macro{\clozemulti@coding}{_H}% \fi \ifmoodle@shuffle - \PackageWarning{moodle}{Cloze Multi Shuffling only supported by Moodle 3.0+} + \moodle@WarningOrError{3}{0}{Cloze Multi Shuffling} \g@addto@macro{\clozemulti@coding}{S:}% \else \g@addto@macro{\clozemulti@coding}{:}% @@ -3991,10 +4801,11 @@ \noindent \moodle@makelatextag@qtype{multi} \ifmoodle@handout\else - \moodle@makelatextag@value{default grade}{\moodle@marks{\csname moodle@default grade\endcsname}} + \moodle@makelatextag@value{default grade}{marked out of} \moodle@makelatextag@multi \fi \def\cloze@multichoice@table@text{}% + \ifmoodle@single\relax\else\moodle@InspectMultipleAnswers\fi \ifmoodle@handout\NewList{answerlist}\fi %\let\moodle@feedback=\@empty \loopthroughitemswithcommand{\moodle@print@clozemultichoice@answer}% @@ -4013,7 +4824,7 @@ \par\noindent \ifmoodle@handout \begin{tabular}[t]{|p{.45\linewidth}|} - \else + \else \begin{tabular}[t]{|p{.45\linewidth}|p{.45\linewidth}|} % answer & feedback \\\hline\hline \fi @@ -4039,13 +4850,15 @@ \egroup% }[\endclozemulti@code]% - \long\def\moodle@print@clozemultichoice@answer#1{% +%\bgroup \let\moodle@feedback=\@empty \moodle@print@clozemultichoice@answer@int#1 \@rdelim% +%\egroup }% \newcommand\moodle@print@clozemultichoice@answer@int[1][]{% - \setkeys{moodle}{fraction=0,#1}% + \let\moodle@fraction\@empty% + \setkeys{moodle}{#1}% \moodle@print@clozemultichoice@answer@int@int% }% \long\def\moodle@print@clozemultichoice@answer@int@int#1#2\@rdelim{% @@ -4070,13 +4883,43 @@ \trim@spaces@in\moodle@answertext \trim@spaces@in\moodle@answertext \ifmoodle@handout\else - \ifx\moodle@fraction\@hundred - \g@addto@macro\moodle@answertext{$~\checkmark$}% - \else - \moodle@checkfraction - \ifdim0pt=\moodle@fraction pt\relax\else - \xdef\moodle@answertext{\expandonce\moodle@answertext$~(\moodle@fraction\%)$}% + \ifmoodle@single% + \ifx\moodle@fraction\@empty\relax% + \ifdim0pt<\moodle@sanction pt\relax + \setkeys{moodle}{fraction=-\moodle@sanction}% + \else + \setkeys{moodle}{fraction=0}% + \fi + \fi + \moodle@checkclozefraction + \ifx\moodle@fraction\@hundred% + \trim@spaces@in\moodle@answertext% + \g@addto@macro\moodle@answertext{$~\checkmark$}% + \else + \ifdim0pt=\moodle@fraction pt\relax\else% + \xdef\moodle@answertext{\expandonce\moodle@answertext$~(\moodle@fraction\%)$}% + \fi + \fi + \else% multiple + \ifx\moodle@fraction\@empty\relax% + \ifmoodle@AdvancedScoreMode + \setkeys{moodle}{fraction=0}% + \else + \setkeys{moodle}{fraction=-\moodle@AutoScore}% + \fi + \else + \ifmoodle@AdvancedScoreMode + \moodle@checkclozefraction + \ifdim0pt<\moodle@fraction pt\relax + \moodle@autoscore@tmp=\moodle@PositiveScoreFactor\relax% + \multiply\moodle@autoscore@tmp by \moodle@fraction\relax% + \xdef\moodle@fraction{\strip@pt\moodle@autoscore@tmp}% + \fi + \else + \setkeys{moodle}{fraction=\moodle@AutoScore}% + \fi \fi + \xdef\moodle@answertext{\expandonce\moodle@answertext$~(\moodle@fraction\%)$}% \fi \fi \ifcase\moodle@multi@mode\relax @@ -4088,7 +4931,7 @@ \or % Case 1 \ifmoodle@handout\else \ifx\moodle@feedback\@empty\relax\else - \xdef\moodle@answertext{\expandonce\moodle@answertext \hfill \expandonce\emph{$\rightarrow$ \expandonce\moodle@feedback}}% + \xdef\moodle@answertext{\expandonce\moodle@answertext \moodle@preFeedback \expandonce\emph{$\rightarrow$ \expandonce\moodle@feedback}}% \fi \fi \else % otherwise @@ -4130,9 +4973,9 @@ \trim@spaces@in\moodle@answertext \trim@spaces@in\moodle@answertext \ifx\moodle@fraction\@hundred - \g@addto@macro\clozemulti@coding{=}% + \g@addto@macro\clozemulti@coding{\clozecorrect}% \else - \moodle@checkfraction + \moodle@checkclozefraction \ifdim0pt=\moodle@fraction pt\relax\else \xdef\clozemulti@coding{\expandonce\clozemulti@coding\otherpercent\moodle@fraction\otherpercent}% \fi @@ -4145,14 +4988,14 @@ % \end{macrocode} % % \subsubsection{Cloze Numerical Questions} -% +% % \begin{macrocode} \NewEnviron{clozenumerical}[1][]{% \bgroup \expandafter\gatheritems\expandafter{\BODY}% \let\moodle@questionheader=\gatheredheader - \setkeys{moodle}{default grade=1}% \setkeys{moodle}{#1}% + \moodle@checkclozegrade \ifhtmlizer@active %HTML version \def\moodle@clozenumerical@output{}% @@ -4175,7 +5018,7 @@ \noindent \moodle@makelatextag@qtype{numerical} \ifmoodle@handout\else - \moodle@makelatextag@value{default grade}{\moodle@marks{\csname moodle@default grade\endcsname}} + \moodle@makelatextag@value{default grade}{marked out of} \moodle@makelatextag@numerical \par \noindent @@ -4205,29 +5048,29 @@ \setkeys{moodle}{#1}% \moodle@print@clozenumerical@answer@int@int% }% +\def\moodle@zero{0}% \def\moodle@print@clozenumerical@answer@int@int#1\@rdelim{% \ifx\moodle@fraction\@hundred \def\moodle@clozenumericalprint@fraction{$~\checkmark$}% \else - \moodle@checkfraction + \moodle@checkclozefraction \edef\moodle@clozenumericalprint@fraction{$(~\moodle@fraction\%)$}% \fi - \ifnum\z@=\moodle@tolerance + \ifx\moodle@zero\moodle@tolerance% \def\moodle@clozenumericalprint@tolerance{}% \else - \edef\moodle@clozenumericalprint@tolerance{$\,\pm\,$\moodle@printnum{\moodle@tolerance}}% + \edef\moodle@clozenumericalprint@tolerance{$\,\pm\,$\moodle@printnum{\expandonce\moodle@tolerance}}% \fi - \xdef\test@i{\trim@spaces{#1}}% + \gdef\test@i{#1}% + \trim@spaces@in\test@i \ifx\test@i\@star - \xdef\moodle@clozenumericalprint@line{#1~\moodle@clozenumericalprint@fraction & \expandonce\emph{\expandonce\moodle@feedback}}% + \xdef\moodle@clozenumericalprint@line{\expandonce\test@i~\moodle@clozenumericalprint@fraction & \expandonce\emph{\expandonce\moodle@feedback}}% \else - \xdef\moodle@clozenumericalprint@line{\moodle@printnum{#1}\moodle@clozenumericalprint@tolerance~\moodle@clozenumericalprint@fraction & \expandonce\emph{\expandonce\moodle@feedback}}% + \xdef\moodle@clozenumericalprint@line{\moodle@printnum{\expandonce\test@i}\expandonce\moodle@clozenumericalprint@tolerance~\moodle@clozenumericalprint@fraction & \expandonce\emph{\expandonce\moodle@feedback}}% \fi \xa\g@addto@macro\xa\cloze@numerical@table@text\xa{\moodle@clozenumericalprint@line \\\hline}% }% - - \def\saveclozenumericalanswer#1{% \bgroup \saveclozenumericalanswer@int#1\moodle@answer@rdelim @@ -4244,9 +5087,9 @@ \def\moodle@answertext{#1}% \trim@spaces@in\moodle@answertext \ifx\moodle@fraction\@hundred - \g@addto@macro\clozenumerical@coding{=}% + \g@addto@macro\clozenumerical@coding{\clozecorrect}% \else - \moodle@checkfraction + \moodle@checkclozefraction \ifdim0pt=\moodle@fraction pt\relax\else \xdef\clozenumerical@coding{\expandonce\clozenumerical@coding\otherpercent\moodle@fraction\otherpercent}% \fi @@ -4264,27 +5107,20 @@ % \end{macrocode} % % \subsubsection{Cloze Short Answer Questions} -% +% % \begin{macrocode} \NewEnviron{clozeshortanswer}[1][]{% \bgroup \expandafter\gatheritems\expandafter{\BODY}% \let\moodle@questionheader=\gatheredheader - \setkeys{moodle}{default grade=1}% \setkeys{moodle}{#1}% - %Because nesting conditionals built by \csname doesn't work well, - %we'll test '\ifmoodle@case sensitive' now and save the result in \count0. - \csname ifmoodle@case sensitive\endcsname - \count0=1\relax - \else - \count0=0\relax - \fi + \moodle@checkclozegrade \ifhtmlizer@active %HTML version \def\moodle@clozeshortanswer@output{}% \xa\g@addto@macro\xa\moodle@clozeshortanswer@output\xa{\moodle@questionheader}% \def\clozeshortanswer@coding{}% - \ifnum\count0=1\relax + \ifmoodle@usecase \edef\clozeshortanswer@coding{\csname moodle@default grade\endcsname:SHORTANSWER_C:}% \else \edef\clozeshortanswer@coding{\csname moodle@default grade\endcsname:SHORTANSWER:}% @@ -4305,7 +5141,7 @@ \noindent \moodle@makelatextag@qtype{shortanswer} \ifmoodle@handout\else - \moodle@makelatextag@value{default grade}{\moodle@marks{\csname moodle@default grade\endcsname}} + \moodle@makelatextag@value{default grade}{marked out of} \moodle@makelatextag@shortanswer \par \noindent @@ -4339,15 +5175,13 @@ \ifx\moodle@fraction\@hundred \def\moodle@clozeshortanswerprint@fraction{$~\checkmark$}% \else - \moodle@checkfraction + \moodle@checkclozefraction \edef\moodle@clozeshortanswerprint@fraction{$~(\moodle@fraction\%)$}% \fi \xdef\moodle@clozeshortanswerprint@line{#1~\moodle@clozeshortanswerprint@fraction & \expandonce\emph{\expandonce\moodle@feedback}}% \xa\g@addto@macro\xa\cloze@shortanswer@table@text\xa{\moodle@clozeshortanswerprint@line \\\hline}% }% - - \def\saveclozeshortansweranswer#1{% \bgroup \saveclozeshortansweranswer@int#1\moodle@answer@rdelim @@ -4364,9 +5198,9 @@ \def\moodle@answertext{#1}% \trim@spaces@in\moodle@answertext \ifx\moodle@fraction\@hundred - \g@addto@macro\clozeshortanswer@coding{=}% + \g@addto@macro\clozeshortanswer@coding{\clozecorrect}% \else - \moodle@checkfraction + \moodle@checkclozefraction \ifdim0pt=\moodle@fraction pt\relax\else \xdef\clozeshortanswer@coding{\expandonce\clozeshortanswer@coding\otherpercent\moodle@fraction\otherpercent}% \fi @@ -4379,9 +5213,9 @@ % \end{macrocode} % % \section{Converting \LaTeX\ to HTML} -% A lot of work must now be done to convert the \LaTeX\ code -% of a question or answer into HTML code with embedded \TeX\ for math. -% +% A lot of work must now be done to convert the \LaTeX\ code +% of a question or answer into \HTML\ code with embedded \TeX\ for math. +% % \subsection{Catcode Setup} % First, we create versions of the special characters with catcode 12, ``other.'' % \begin{macrocode} @@ -4391,8 +5225,9 @@ \catcode`\^=12\gdef\othercaret{^}% \catcode`\$=12\gdef\otherdollar{$}% \catcode`\%=12\gdef\otherpercent{%} - \catcode`\%=12\gdef\otherlbracket{[} - \catcode`\%=12\gdef\otherrbracket{]}}% + \catcode`\[=12\gdef\otherlbracket{[} + \catcode`\]=12\gdef\otherrbracket{]}}% +{\catcode`\=\string=12\gdef\otherequal{=}}% {\catcode`\ =12\gdef\otherspace{ }}% {\ttfamily\catcode`\|=0\catcode`\\=12\relax|gdef|otherbackslash{\}}% {\catcode`\[=1\catcode`\]=2\catcode`\{=12\catcode`\}=12% @@ -4407,11 +5242,12 @@ \edef\@otherdollar{\otherdollar}% \edef\@otherbackslash{\otherbackslash}% \edef\@othertilde{\othertilde}% +\edef\@otherequal{\otherequal}% % \end{macrocode} % % Next, we define commands to change catcodes to a suitable verbatim mode % for transcription. -% +% % \begin{macrocode} { \catcode`\[=1\relax \catcode`\]=2\relax @@ -4459,17 +5295,17 @@ % \end{macrocode} % % \subsection{Detokenization and Retokenization} -% +% % We will be processing a \TeX\ token list. -% Based on its content, sometimes we will want it to be detokenized to +% Based on its content, sometimes we will want it to be detokenized to % individual characters, but other times we want it retokenized so that % \TeX's own parsing mechanism can gather up the parameters of macros. % We use the e\TeX\ primitive command |\scantokens| to do this. -% +% % The following code (catcodes, groupings and all) defines a |\scantokens@to@macro| macro. % That will assemble and disassemble strings of tokens % using any changing schemes of catcodes we desire. -% +% % We define |^^A| to be |\gdef\stm@saved|, while |^^B| and |^^C| are substitutes for |{| and |}|, respectively. % This permits us to define |\scantokens@to@macro| in a peculiar catcode regime. % \begin{macrocode} @@ -4486,7 +5322,7 @@ \catcode`\^^A=13\catcode`\^^B=1\catcode`\^^C=2\relax \xa\def\xa\arg\xa{\xa^^A\xa^^B\texttorescan^^C}% #2% - \catcode\endlinechar=9\relax% + \catcode\endlinechar=9\relax% %\scantokens always sees an end-of-line character at its end and converts it to a space. %The catcode change sets \scantokens to ignore end-of-line chars. %In practice, we're always calling \scantokens on previously scanned text anyway, @@ -4537,9 +5373,9 @@ % \end{macrocode} % % \subsection{Separation} -% +% % This code separates a string of tokens into two parts. -% Its parameters, |#1#2|, consist of tokenized text, +% Its parameters, |#1#2|, consist of tokenized text, % plus one terminal |\@htmlize@stop|. % We are trying to break up the text into its first group and the remainder. % This |\@htmlize@stop| is needed in case |#2| has the form ``|{...}|'', @@ -4560,16 +5396,16 @@ % \end{macrocode} % % The next line creates the macro |\htmlize@remove@stopcode|, -% which removes the characters ``|\@htmlize@stop |'' from the end of a +% which removes the characters ``|\@htmlize@stop |'' from the end of a % detokenized sequence. % Its syntax when called is simply |\htmlize@remove@stopcode |\meta{material}, % with no delimiters, since the ``|\@htmlize@stop |'' is itself the delimiter. % \begin{macrocode} \xa\def\xa\htmlize@remove@stopcode\xa#\xa1\@htmlize@stop@detokenized{#1}% % \end{macrocode} -% +% % \subsection{Main Code: the HTMLizer} -% +% % \begin{macrocode} \newif\ifhtmlizer@active \htmlizer@activefalse @@ -4583,6 +5419,9 @@ \long\def\converttohtmlmacro#1#2{% \grouplevel=0\relax \def\htmlize@output{}% + \ifmoodle@pluginfile + \gdef\htmlize@embeddedfiletags{}% + \fi \htmlizer@activetrue% \converttohtml@int{#2}% \htmlizer@activefalse% @@ -4601,6 +5440,7 @@ \def\@lt{<}% \def\@gt{>}% \def\@dash{-}% +\def\@dq{"}% \long\def\htmlize@recursive@i#1#2#3\htmlize@rdelim@i{% % #1#2#3 is a sequence of tokens. All should be categories 11 (letter) or 12 (other). @@ -4612,24 +5452,28 @@ \let\htmlize@next@i=\relax \else \ifx\test@i\@otherlbrace% - \xa\g@addto@macro\xa\htmlize@output\xa{\otherlbrace}% - \bgroup - \normalcatcodes + \ifx\test@ii\@otherrbrace% + \moodle@ifmathmode{\g@addto@macro\htmlize@output{\otherlbrace\otherrbrace}}{}% + \def\htmlize@next@i{\htmlize@recursive@i#3\htmlize@rdelim@i}% + \else + \xa\g@addto@macro\xa\htmlize@output\xa{\otherlbrace}% + \bgroup + \normalcatcodes %We need to rescan the input as TeX code, % so TeX can automatically pull off the first group in braces. % First, let's get rid of the terminal \@htmlize@stop codes. - {\def\@htmlize@stop{}\xdef\htmlize@scrap{#1#2#3}}% - \let\htmlize@text@to@rescan=\htmlize@scrap% + {\def\@htmlize@stop{}\xdef\htmlize@scrap{#1#2#3}}% + \let\htmlize@text@to@rescan=\htmlize@scrap% % Next, we retokenize the code. - \xa\retokenizenormal@to@macro\xa\htmlize@rescanned\xa{\htmlize@text@to@rescan}% + \xa\retokenizenormal@to@macro\xa\htmlize@rescanned\xa{\htmlize@text@to@rescan}% % Now break it up into two pieces. - \xa\htmlize@grabblock\htmlize@rescanned\@htmlize@stop\htmlize@rdelim@ii% + \xa\htmlize@grabblock\htmlize@rescanned\@htmlize@stop\htmlize@rdelim@ii% % The first piece, \htmlize@blockinbraces, will be passed as a unit to \converttohtml@int. % The second part, \htmlize@remainder, will continue at this depth of grouping. % Therefore we'll detokenize \htmlize@remainder here. - \xa\ultradetokenize@to@macro\xa\htmlize@remainder@detokenized\xa{\htmlize@remainder}% - \edef\htmlize@remainder@detokenized{\xa\htmlize@remove@stopcode\htmlize@remainder@detokenized}% - % + \xa\ultradetokenize@to@macro\xa\htmlize@remainder@detokenized\xa{\htmlize@remainder}% + \edef\htmlize@remainder@detokenized{\xa\htmlize@remove@stopcode\htmlize@remainder@detokenized}% + % % Now build \htmlize@next@i. % When done, should look like % \converttohtml@int{\htmlize@blockinbraces}% @@ -4637,22 +5481,23 @@ % \htmlize@recursive@i\htmlize@remainder@detokenized\@htmlize@stop\@htmlize@stop\@htmlize@stop\htmlize@rdelim@i% % but with all three arguments expanded. % Note that we are running - \gdef\htmlize@scrap{\converttohtml@int}% - \xa\g@addto@macro\xa\htmlize@scrap\xa{\xa{\htmlize@blockinbraces}}% - \g@addto@macro\htmlize@scrap{\g@addto@macro\htmlize@output}% - \ifmoodle@clozemode - \xa\g@addto@macro\xa\htmlize@scrap\xa{\xa{\otherbackslash\otherrbrace}}% + \gdef\htmlize@scrap{\converttohtml@int}% + \xa\g@addto@macro\xa\htmlize@scrap\xa{\xa{\htmlize@blockinbraces}}% + \g@addto@macro\htmlize@scrap{\g@addto@macro\htmlize@output}% + \ifmoodle@clozemode + \xa\g@addto@macro\xa\htmlize@scrap\xa{\xa{\otherbackslash\otherrbrace}}% % \moodle@ifmathmode{\xa\g@addto@macro\xa\htmlize@scrap\xa{\xa{\otherbackslash}}}% % {}% - \else - \xa\g@addto@macro\xa\htmlize@scrap\xa{\xa{\otherrbrace}}% - \fi - \g@addto@macro\htmlize@scrap{\htmlize@recursive@i}% - \xa\g@addto@macro\xa\htmlize@scrap\xa{\htmlize@remainder@detokenized\@htmlize@stop\@htmlize@stop\@htmlize@stop\htmlize@rdelim@i}% + \else + \xa\g@addto@macro\xa\htmlize@scrap\xa{\xa{\otherrbrace}}% + \fi + \g@addto@macro\htmlize@scrap{\htmlize@recursive@i}% + \xa\g@addto@macro\xa\htmlize@scrap\xa{\htmlize@remainder@detokenized\@htmlize@stop\@htmlize@stop\@htmlize@stop\htmlize@rdelim@i}% % Okay, that's done. It's stored in a global macro. % Now we get it out of this group. - \egroup - \let\htmlize@next@i=\htmlize@scrap + \egroup + \let\htmlize@next@i=\htmlize@scrap + \fi \else \ifx\test@i\@otherdollar% % Math shift character. @@ -4669,7 +5514,7 @@ \fi% \ifx\test@ii\@otherdollar % Now we resume work. % The \htmlize@xxxxxxmathshift@replace macro stored the remaining text in \htmlize@remaining@text. - % Note that since we never detokenized and retokenized #1#2#3, + % Note that since we never detokenized and retokenized #1#2#3, % \htmlize@remaining@text still includes the terminating \@htmlize@stop\@htmlize@stop\@htmlize@stop. \def\htmlize@next@i{\xa\htmlize@recursive@i\htmlize@remaining@text\htmlize@rdelim@i}% \else @@ -4687,9 +5532,9 @@ % This may involve work in TeX's stomach (e.g., with counters) % or with external files (e.g., image processing). % The command may directly add material to \htmlize@output, - % but it should not typeset anything and should vanish from the + % but it should not typeset anything and should vanish from the % input stream when it is done. - % When it's done, we somehow need to detokenize and resume + % When it's done, we somehow need to detokenize and resume % processing the remainder of the input stream. % Only commands explicitly crafted (or modified) to work % with moodle.sty can possibly do all this! @@ -4701,10 +5546,10 @@ % Environments: \begin{array} % % #2 is only for items on a specific list. - % #1 is anything that runs in TeX's mouth. + % #1 is anything that runs in TeX's mouth. % We could keep a list and give users a way to add to it. % I could also try expanding macros, using \ifcsmacro from etoolbox.sty - % + % % The first step is to figure out what control sequence we're dealing with. % First, let's get rid of the terminal \@htmlize@stop codes. {\def\@htmlize@stop{}\xdef\htmlize@scrap{#1#2#3}}% @@ -4744,7 +5589,7 @@ %The \bgroup is to active the environments. %The matching \egroup is found in \htmlize@do@actionenv. }{%An environment to pass to the HTML - %We just pass the backslash from "\begin" and move on. + %We just pass the backslash from "\begin" and move on. \g@addto@macro\htmlize@output{#1}% \def\htmlize@next@i{\htmlize@recursive@i#2#3\htmlize@rdelim@i}% }% @@ -4787,7 +5632,7 @@ \xa\ultradetokenize@to@macro\xa\htmlize@remaining@text\xa{\htmlize@scrap}% \def\htmlize@next@i{\xa\htmlize@recursive@i\htmlize@remaining@text\@htmlize@stop\@htmlize@stop\@htmlize@stop\htmlize@rdelim@i}% \else - % control sequence to be transcribed to XML. + % control sequence to be transcribed to \XML. %\edef\ds{Must pass on \xa\string\@htmlize@cs}\show\ds \g@addto@macro\htmlize@output{#1}% \def\htmlize@next@i{\htmlize@recursive@i#2#3\htmlize@rdelim@i}% @@ -4796,8 +5641,9 @@ \fi% \ifx\@htmlize@cs\@@begin@cs \else% \ifx\test@i\@othertilde% - % The ~ becomes non-breaking space   - \g@addto@macro\htmlize@output{\otherampersand nbsp;}% + % The ~ becomes non-breaking space   outside of math mode + \moodle@ifmathmode{\g@addto@macro\htmlize@output{\@othertilde}}% + {\g@addto@macro\htmlize@output{\otherampersand nbsp;}}% \def\htmlize@next@i{\htmlize@recursive@i#2#3\htmlize@rdelim@i}% \else \ifx\test@i\@lsinglequote% @@ -4813,26 +5659,25 @@ \ifx\test@i\@rsinglequote% \ifx\test@ii\@rsinglequote% Double right quote %AAedit 2021.01.06: in math mode, you should write 2 single right quotes, for second derivatives - \moodle@ifmathmode{\g@addto@macro\htmlize@output{\otherampersand rsquo;\otherampersand rsquo;}}% + \moodle@ifmathmode{\g@addto@macro\htmlize@output{''}}% {\g@addto@macro\htmlize@output{\otherampersand rdquo;}}% \def\htmlize@next@i{\htmlize@recursive@i#3\htmlize@rdelim@i}% \else% Single right quote - \g@addto@macro\htmlize@output{\otherampersand rsquo;}% + \moodle@ifmathmode{\g@addto@macro\htmlize@output{'}}% + {\g@addto@macro\htmlize@output{\otherampersand rsquo;}}% \def\htmlize@next@i{\htmlize@recursive@i#2#3\htmlize@rdelim@i}% \fi% \ifx\test@ii\@rsinglequote% \else \ifx\test@i\@doublequote - \g@addto@macro\htmlize@output{\otherampersand rdquo;}% + \g@addto@macro\htmlize@output{\otherampersand quot;}% \def\htmlize@next@i{\htmlize@recursive@i#2#3\htmlize@rdelim@i}% \else \ifx\test@i\@lt - \moodle@ifmathmode{\g@addto@macro\htmlize@output{\otherampersand lt;}}% - {\g@addto@macro\htmlize@output{<}}% + \g@addto@macro\htmlize@output{\otherampersand lt;} \def\htmlize@next@i{\htmlize@recursive@i#2#3\htmlize@rdelim@i}% \else \ifx\test@i\@gt - \moodle@ifmathmode{\g@addto@macro\htmlize@output{\otherampersand gt;}}% - {\g@addto@macro\htmlize@output{>}}% + \g@addto@macro\htmlize@output{\otherampersand gt;}% \def\htmlize@next@i{\htmlize@recursive@i#2#3\htmlize@rdelim@i}% \else \ifx\test@i\@dash @@ -4845,9 +5690,19 @@ \def\htmlize@next@i{\htmlize@recursive@i#2#3\htmlize@rdelim@i}% \fi \else - % Default case: write first token to output, call self on remaining tokens. - \g@addto@macro\htmlize@output{#1}% - \def\htmlize@next@i{\htmlize@recursive@i#2#3\htmlize@rdelim@i}% + \ifx\test@i\@otherequal + \ifmoodle@clozemode + \moodle@ifmathmode{\g@addto@macro\htmlize@output{=}}% + {\g@addto@macro\htmlize@output{\otherampersand\otherhash 61;}}% + \else + \g@addto@macro\htmlize@output{=}% + \fi + \def\htmlize@next@i{\htmlize@recursive@i#2#3\htmlize@rdelim@i}% + \else + % Default case: write first token to output, call self on remaining tokens. + \g@addto@macro\htmlize@output{#1}% + \def\htmlize@next@i{\htmlize@recursive@i#2#3\htmlize@rdelim@i}% + \fi% \ifx\test@i\@otherequal \fi% \ifx\test@i\@dash \fi% \ifx\test@i\@gt \fi% \ifx\test@i\@lt @@ -4866,9 +5721,9 @@ \def\@rsinglequote{'}% \def\@doublequote{"}% % \end{macrocode} -% +% % \subsection{Math Mode handling} -% +% % In the following, note that the |\|\meta{*}|mathrightdelim|'s gobble an argument. % This is so ``|$a$ is...|" can turn into % ``\ldots |a\|\meta{*}|mathrightdelim{} is...|" @@ -4877,9 +5732,9 @@ \edef\inlinemathleftdelim{\otherbackslash(}% \def\inlinemathrightdelim#1{\advancemathmodecounter{-1}% \g@addto@macro\htmlize@output{\otherbackslash)}}% -\edef\displaymathleftdelim{\otherbackslash[}% +\edef\displaymathleftdelim{
\otherbackslash[}% \def\displaymathrightdelim#1{\advancemathmodecounter{-1}% - \g@addto@macro\htmlize@output{\otherbackslash]}}% + \g@addto@macro\htmlize@output{\otherbackslash]
}}% \long\def\htmlize@inlinemath@recursive@i#1#2#3\htmlize@rdelim@i{% % inspired by \htmlize@recursive@i \def\test@i{#1}% @@ -4926,20 +5781,20 @@ } % \end{macrocode} -% +% % \subsection{Engines for Control Sequences} -% +% % There are three kinds of control sequences that need special handling: % \begin{enumerate} % \item Action environments % \item Action command sequences % \item Expansion macros % \end{enumerate} -% +% % \subsubsection{Engine for running action environments} % \begin{macrocode} \long\def\htmlize@do@actionenv#1#2\@htmlize@stop\htmlize@actionsequence@rdelim{% - \bgroup %The corresponding \egroup is given in \htmlize@proceedwiththerest, + \bgroup %The corresponding \egroup is given in \htmlize@proceedwiththerest, %to localize the changes to the environment definitions. \htmlize@activate@environments \gdef\htmlize@afteraction@hook{}% @@ -4950,7 +5805,6 @@ \def\swaptotrueendenvironment#1#2\if@ignore\@ignorefalse\ignorespaces\fi{#2\if@ignore\@ignorefalse\ignorespaces\fi#1}% - \long\def\htmlize@record@environment#1{% \listadd{\htmlize@env@actionlist}{#1}% } @@ -4965,14 +5819,13 @@ }% } - \def\htmlize@activate@environments{}% % \end{macrocode} -% +% % \subsubsection{Engine for running action command sequences} -% +% % The following automatically adds the ``engine'' to do the command -% and then resume processing the \LaTeX\ into HTML. +% and then resume processing the \LaTeX\ into \HTML. % It uses the |xpatch| package, which says it works with anything % defined using |\newcommand| etc. and |\newenvironment| etc. % \begin{macrocode} @@ -4980,7 +5833,7 @@ \long\def\htmlize@do@actioncs#1#2\htmlize@actionsequence@rdelim{% % #1#2 contains the current string to be rendered into HTML; - % N.B. it has been tokenized at this point, + % N.B. it has been tokenized at this point, % so TeX can process it directly. % #1 = the command sequence we need to execute % #2 = the rest of the string @@ -5012,7 +5865,7 @@ %This will contain an extra \@htmlize@stop, so we remove it. \xa\xa\xa\def\xa\xa\xa\htmlize@remainder@detokenized\xa\xa\xa{\xa\htmlize@remove@stopcode\htmlize@remainder@detokenized}% %Now we get back to work transcribing the remainder. - \xa\htmlize@recursive@i\htmlize@remainder@detokenized\@htmlize@stop\@htmlize@stop\@htmlize@stop\htmlize@rdelim@i% + \xa\htmlize@recursive@i\htmlize@remainder@detokenized\@htmlize@stop\@htmlize@stop\@htmlize@stop\htmlize@rdelim@i% } \long\def\htmlize@record@action#1{% @@ -5020,7 +5873,7 @@ } \def\htmlize@activate@css{}% -\def\html@action@def#1{% +\long\def\html@action@def#1{% \htmlize@record@action{#1}% \xa\def\xa\htmlize@scrap\xa{\xa\let\xa#1\csname html@\string#1\endcsname}% \xa\g@addto@macro\xa\htmlize@activate@css\xa{\htmlize@scrap}% @@ -5032,7 +5885,7 @@ \else \xa\html@action@def\csname #1\endcsname{\csname moodle@#1@int\endcsname}% \fi - % Note that \htmlize@do@actioncs will 'patch' this by putting + % Note that \htmlize@do@actioncs will 'patch' this by putting % '\xa\htmlize@proceedwiththerest\htmlize@afteraction@hook' % at the end. We want those 3 tokens to occur instead after % the graphics filename. @@ -5046,18 +5899,18 @@ }% } % \end{macrocode} -% +% % \subsubsection{Engine for expansion control sequences} -% +% % Calling |\htmlize@redefine@expansionmacros| will redefine % the macros for us. It starts out empty. % \begin{macrocode} -\def\htmlize@redefine@expansionmacros{}% +\long\def\htmlize@redefine@expansionmacros{}% % \end{macrocode} % If |\mymacro| needs no changes to be suited for expansion, % you can simply call |\htmlize@record@expand{\mymacro}| % or |\htmlregister{\mymacro}| -% to record that it should be expanded on its way to the HTML. +% to record that it should be expanded on its way to the \HTML. % Examples would be user-built macros such as |\inv|$\to$|^{-1}| % or |\N|$\to$|\mathbb{N}|. % \begin{macrocode} @@ -5073,7 +5926,7 @@ % |\renewcommand|, |\providecommand| or their starred variants. % \begin{macrocode} \def\moodleregisternewcommands{% - %% INSPIRED FROM + %% INSPIRED FROM %https://tex.stackexchange.com/questions/73271/how-to-redefine-or-patch-the-newcommand-command \newcommand*{\saved@ifdefinable}{} \let\saved@ifdefinable\@ifdefinable @@ -5084,8 +5937,8 @@ \let\@@ifdefinable\@ifdefinable }% % \end{macrocode} -% On the other hand, if an alternate version of the macro is -% needed for HTML purposes, you can define its HTML version with +% On the other hand, if an alternate version of the macro is +% needed for \HTML\ purposes, you can define its \HTML\ version with % |\html@def\mymacro...| % Parameters are okay. % An example would be @@ -5098,15 +5951,15 @@ \xa\def\csname html@\string#1\endcsname% } % \end{macrocode} -% Note that when |\html@def| expands out, it ends with |\def\html@\oldcsname| +% Note that when |\html@def| expands out, it ends with |\def\html@\oldcsname| % which abuts directly on the remainder of the definition. -% +% % \subsection{Specific Control Sequences for Action and Expansion} -% +% % Now that we have that machinery in place, -% we define specific environments, action control sequences, and macros to +% we define specific environments, action control sequences, and macros to % expand to accomplish our purposes. -% +% % \subsubsection{Action Environments} % \begin{macrocode} \htmlize@record@environment{clozemulti} @@ -5116,7 +5969,11 @@ \htmlize@record@environment{clozeshortanswer} \htmlize@record@environment{shortanswer} -\html@newenvironment{center}{\xdef\htmlize@afteraction@hook{
\expandonce\BODY
}}% +\html@newenvironment{center}{\xdef\htmlize@afteraction@hook{\noexpand\HTMLtag{CENTER}\expandonce\BODY\noexpand\HTMLtag{/CENTER}}}% + +\html@newenvironment{quote}{\xdef\htmlize@afteraction@hook{\noexpand\HTMLtag{BLOCKQUOTE}\expandonce\BODY\noexpand\HTMLtag{/BLOCKQUOTE}}}% + +\html@newenvironment{quotation}{\xdef\htmlize@afteraction@hook{\noexpand\HTMLtag{BLOCKQUOTE}\expandonce\BODY\noexpand\HTMLtag{/BLOCKQUOTE}}}% \def\moodle@save@getitems@state{% \global\xa\xdef\csname moodle@currentitemnumber@level@\the\moodle@listdepth\xa\endcsname\xa{\thecurrentitemnumber}% @@ -5129,13 +5986,13 @@ \moodle@restoreitems{\thenumgathereditems}% }% \def\moodle@saveitems#1{% - \ifnum#1>0% + \ifnum#1>0\relax \global\csletcs{moodle@level@\the\moodle@listdepth @item@#1}{getitems@item@#1}% \xa\moodle@saveitems\xa{\number\numexpr#1-1\expandafter}% \fi }% \def\moodle@restoreitems#1{% - \ifnum#1>0% + \ifnum#1>0\relax \global\csletcs{getitems@item@#1}{moodle@level@\the\moodle@listdepth @item@#1}% \global\xa\let\csname moodle@level@\the\moodle@listdepth @item@#1\endcsname=\@undefined \xa\moodle@restoreitems\xa{\number\numexpr#1-1\expandafter}% @@ -5146,9 +6003,9 @@ \advance\moodle@listdepth by 1\relax \moodle@save@getitems@state% \xa\gatheritems\xa{\BODY}% - \gdef\htmlize@afteraction@hook{<#2>}% + \gdef\htmlize@afteraction@hook{\HTMLtag{#2}}% \loopthroughitemswithcommand{\moodle@itemtoLI}% - \g@addto@macro\htmlize@afteraction@hook{}% + \g@addto@macro\htmlize@afteraction@hook{\HTMLtag{/#2}}% \moodle@restore@getitems@state% \advance\moodle@listdepth by -1\relax }% @@ -5158,15 +6015,15 @@ \moodle@makelistenv{itemize}{UL}% \def\moodle@itemtoLI#1{% - \g@addto@macro\htmlize@afteraction@hook{
  • #1}% + \g@addto@macro\htmlize@afteraction@hook{\HTMLtag{LI}#1}% \trim@spaces@in\htmlize@afteraction@hook% - \g@addto@macro\htmlize@afteraction@hook{
  • }% + \g@addto@macro\htmlize@afteraction@hook{\HTMLtag{/LI}}% }% % \end{macrocode} -% +% % \subsubsection{Action Control Sequences} -% +% % \begin{macrocode} \def\advancemathmodecounter#1{% \global\advance\moodle@mathmodedepth by #1\relax @@ -5182,26 +6039,34 @@ \htmlize@record@action{\endclozemode}% \htmlize@record@action{\relax}% -\html@action@def\%{\g@addto@macro\htmlize@output{\otherpercent}}% +\html@action@def\HTMLtag#1{% + \xa\g@addto@macro\xa\htmlize@output\xa{<#1>}% + }% +\html@action@def\%{% + \moodle@ifmathmode{\g@addto@macro\htmlize@output{\otherbackslash\otherpercent}}% + {\g@addto@macro\htmlize@output{\otherpercent}}% + }% \html@action@def\#{\g@addto@macro\htmlize@output{\otherhash}}% \html@action@def\&{\g@addto@macro\htmlize@output{\otherampersand}}% -\html@action@def\\{\moodle@ifmathmode{\g@addto@macro\htmlize@output{\otherbackslash\otherbackslash}}% - {\g@addto@macro\htmlize@output{
    }}}% +\html@action@def\\{% + \moodle@ifmathmode{\g@addto@macro\htmlize@output{\otherbackslash\otherbackslash}}% + {\g@addto@macro\htmlize@output{
    }} + }% \html@action@def\{{% \moodle@ifmathmode{\g@addto@macro\htmlize@output{\otherbackslash\otherlbrace}}% {\g@addto@macro\htmlize@output{\otherlbrace}}% }% \html@action@def\}{% \moodle@ifmathmode{\g@addto@macro\htmlize@output{\otherbackslash\otherrbrace}}% - {\ifmoodle@clozemode\g@addto@macro\htmlize@output{\otherbackslash}\fi - \g@addto@macro\htmlize@output{\otherrbrace}}% + {\ifmoodle@clozemode\g@addto@macro\htmlize@output{\otherbackslash\otherrbrace}% + \else\g@addto@macro\htmlize@output{\otherrbrace}\fi}% }% \html@action@def\[{% \advancemathmodecounter{1} - \g@addto@macro\htmlize@output{\otherbackslash\otherlbracket}% + \g@addto@macro\htmlize@output{
    \otherbackslash\otherlbracket}% }% \html@action@def\]{% - \g@addto@macro\htmlize@output{\otherbackslash\otherrbracket}% + \g@addto@macro\htmlize@output{\otherbackslash\otherrbracket
    }% \advancemathmodecounter{-1} }% \html@action@def\({% @@ -5224,15 +6089,64 @@ \moodle@ifmathmode{\g@addto@macro\htmlize@output{\otherbackslash\otherspace}}% {\g@addto@macro\htmlize@output{\otherspace}}% }% +\html@action@def\,{% + \moodle@ifmathmode{\g@addto@macro\htmlize@output{\string\,}}% + {\g@addto@macro\htmlize@output{\otherampersand\otherhash 8239\othersemicol}}% + }% +\html@action@def\thinspace{% + \moodle@ifmathmode{\g@addto@macro\htmlize@output{\string\thinspace\otherspace}}% + {\g@addto@macro\htmlize@output{\otherampersand\otherhash 8239\othersemicol}}% + }% +\html@action@def\>{% + \moodle@ifmathmode{\g@addto@macro\htmlize@output{\otherbackslash\otherampersand gt;}}% + {\g@addto@macro\htmlize@output{\otherampersand emsp14\othersemicol}}% + }% +\html@action@def\:{% + \moodle@ifmathmode{\g@addto@macro\htmlize@output{\string\:}}% + {\g@addto@macro\htmlize@output{\otherampersand emsp14\othersemicol}}% + }% +\html@action@def\medspace{% + \moodle@ifmathmode{\g@addto@macro\htmlize@output{\string\:}}% + {\g@addto@macro\htmlize@output{\otherampersand emsp14\othersemicol}}% + }% +\html@action@def\;{% + \moodle@ifmathmode{\g@addto@macro\htmlize@output{\otherbackslash\othersemicol}}% + {\g@addto@macro\htmlize@output{\otherampersand emsp13\othersemicol}}% + }% +\html@action@def\thickspace{% + \moodle@ifmathmode{\g@addto@macro\htmlize@output{\otherbackslash\othersemicol}}% + {\g@addto@macro\htmlize@output{\otherampersand emsp13\othersemicol}}% + }% +\html@action@def\enspace{% + \moodle@ifmathmode{\g@addto@macro\htmlize@output{\string\enspace\otherspace}}% + {\g@addto@macro\htmlize@output{\otherampersand ensp\othersemicol}}% + }% +\html@action@def\quad{% + \moodle@ifmathmode{\g@addto@macro\htmlize@output{\string\quad\otherspace}}% + {\g@addto@macro\htmlize@output{\otherampersand emsp\othersemicol}}% + }% +\html@action@def\qquad{% + \moodle@ifmathmode{\g@addto@macro\htmlize@output{\string\qquad\otherspace}}% + {\g@addto@macro\htmlize@output{\otherampersand emsp\othersemicol\otherampersand emsp\othersemicol}}% + }% \html@action@def\${% \g@addto@macro\htmlize@output{\otherdollar}% }% +\html@action@def\textquotesingle{% + \g@addto@macro\htmlize@output{'}% + }% \html@action@def\@dquote{% \g@addto@macro\htmlize@output{"}% }% +\html@action@def\textquotedbl{% + \g@addto@macro\htmlize@output{"}% + }% \html@action@def\clozetilde{% \xa\g@addto@macro\xa\htmlize@output\xa{\othertilde}% }% +\html@action@def\clozecorrect{% + \xa\g@addto@macro\xa\htmlize@output\xa{\otherequal}% + }% \html@action@def\clozelbrace{% \openclozemode \xa\g@addto@macro\xa\htmlize@output\xa{\otherlbrace}% @@ -5242,17 +6156,17 @@ \endclozemode }% \html@action@def\TeX{% - \g@addto@macro\htmlize@output{\otherbackslash(\otherbackslash rm\otherbackslash TeX\otherbackslash)} + \g@addto@macro\htmlize@output{\otherbackslash(\otherbackslash rm\otherbackslash TeX\otherbackslash)}% }% \html@action@def\LaTeX{% - \g@addto@macro\htmlize@output{\otherbackslash(\otherbackslash rm\otherbackslash LaTeX\otherbackslash)} + \g@addto@macro\htmlize@output{\otherbackslash(\otherbackslash rm\otherbackslash LaTeX\otherbackslash)}% }% {\catcode`;=12\relax\gdef\othersemicol{;}} %Diacritical marks over vowels {\catcode`|=3\relax - \gdef\htmlize@vowels{a|e|i|o|u|A|E|I|O|U|}} + \gdef\htmlize@vowels{a|e|i|o|u|A|E|I|O|U|}}% \def\htmlize@define@diacritic#1#2{% \htmlize@record@action{#1}% \g@addto@macro\htmlize@activate@css{% @@ -5269,7 +6183,7 @@ %Diaeresis/Tréma/Umlaut {\catcode`|=3\relax - \gdef\htmlize@diaeresis{a|e|i|o|u|y|A|E|I|O|U|Y|}} + \gdef\htmlize@diaeresis{a|e|i|o|u|y|A|E|I|O|U|Y|}}% \html@action@def\"#1{% \ifinlist{#1}{\htmlize@diaeresis}% {\g@addto@macro\htmlize@output{\otherampersand#1uml\othersemicol}}% @@ -5293,7 +6207,7 @@ \ifx\test@i\@u \def\toadd{\otherampersand\otherhash369\othersemicol}% \else - \def\toadd{\otherbackslash\otherlbrace#1\otherrbrace}% + \def\toadd{\otherbackslash H\otherlbrace#1\otherrbrace}% \fi \fi \fi @@ -5305,40 +6219,40 @@ %Cedilla \def\@c{c}\def\@C{C}\def\@s{s}\def\@S{S}\def\@t{t}\def\@T{T}% \html@action@def\c#1{% - \bgroup - \def\test@i{#1}% - \ifx\test@i\@c - \def\toadd{\otherampersand ccedil\othersemicol}% - \else - \ifx\test@i\@C - \def\toadd{\otherampersand Ccedil\othersemicol}% - \else - \ifx\test@i\@s - \def\toadd{\otherampersand\otherhash351\othersemicol}% - \else - \ifx\test@i\@S - \def\toadd{\otherampersand\otherhash350\othersemicol}% - \else - \ifx\test@i\@t - \def\toadd{\otherampersand\otherhash355\othersemicol}% - \else - \ifx\test@i\@T - \def\toadd{\otherampersand\otherhash354\othersemicol}% - \else - \def\toadd{\otherbackslash\otherlbrace#1\otherrbrace}% - \fi - \fi - \fi - \fi - \fi - \fi - \xa\g@addto@macro\xa\htmlize@output\xa{\toadd}% - \egroup + \bgroup + \def\test@i{#1}% + \ifx\test@i\@c + \def\toadd{\otherampersand ccedil\othersemicol}% + \else + \ifx\test@i\@C + \def\toadd{\otherampersand Ccedil\othersemicol}% + \else + \ifx\test@i\@s + \def\toadd{\otherampersand\otherhash351\othersemicol}% + \else + \ifx\test@i\@S + \def\toadd{\otherampersand\otherhash350\othersemicol}% + \else + \ifx\test@i\@t + \def\toadd{\otherampersand\otherhash355\othersemicol}% + \else + \ifx\test@i\@T + \def\toadd{\otherampersand\otherhash354\othersemicol}% + \else + \def\toadd{\otherbackslash c\otherlbrace#1\otherrbrace}% + \fi + \fi + \fi + \fi + \fi + \fi + \xa\g@addto@macro\xa\htmlize@output\xa{\toadd}% + \egroup }% %Tilde over a, n, o {\catcode`|=3\relax - \gdef\htmlize@tilde{A|N|O|a|n|o|}} + \gdef\htmlize@tilde{A|N|O|a|n|o|}}% \html@action@def\~#1{% \ifinlist{#1}{\htmlize@tilde}% {\g@addto@macro\htmlize@output{\otherampersand#1tilde\othersemicol}}% @@ -5347,12 +6261,12 @@ % breve diacritics {\catcode`|=3\relax - \gdef\htmlize@breve{A|G|U|a|g|u|}} + \gdef\htmlize@breve{A|G|U|a|g|u|}}% \def\@e{e}\def\@E{E}\def\@i{i}\def\@ii{\i}\def\@I{I}\def\@o{o}\def\@O{O}% \html@action@def\u#1{% \ifinlist{#1}{\htmlize@breve}% {\g@addto@macro\htmlize@output{\otherampersand#1breve\othersemicol}}% - { + {% \bgroup \def\test@i{#1}% \ifx\test@i\@E @@ -5376,7 +6290,7 @@ \ifx\test@i\@o \def\toadd{\otherampersand\otherhash335\othersemicol}% \else - \def\toadd{\otherbackslash\otherlbrace#1\otherrbrace}% + \def\toadd{\otherbackslash u\otherlbrace#1\otherrbrace}% \fi \fi \fi @@ -5391,7 +6305,7 @@ % caron diacritics {\catcode`|=3\relax - \gdef\htmlize@caron{C|D|E|L|N|R|S|T|Z|c|d|e|l|n|r|s|t|z|}} + \gdef\htmlize@caron{C|D|E|L|N|R|S|T|Z|c|d|e|l|n|r|s|t|z|}}% \html@action@def\v#1{% \ifinlist{#1}{\htmlize@caron}% {\g@addto@macro\htmlize@output{\otherampersand#1caron\othersemicol}}% @@ -5400,11 +6314,11 @@ % Ogonek diacritics {\catcode`|=3\relax - \gdef\htmlize@ogonek{A|E|I|U|a|e|i|u|}} + \gdef\htmlize@ogonek{A|E|I|U|a|e|i|u|}}% \html@action@def\k#1{% \ifinlist{#1}{\htmlize@ogonek}% {\g@addto@macro\htmlize@output{\otherampersand#1ogon\othersemicol}}% - { + {% \bgroup \def\test@i{#1}% \ifx\test@i\@O @@ -5413,84 +6327,292 @@ \ifx\test@i\@o \def\toadd{\otherampersand\otherhash491\othersemicol}% \else - \def\toadd{\otherbackslash\otherlbrace#1\otherrbrace}% + \def\toadd{\otherbackslash k\otherlbrace#1\otherrbrace}% + \fi + \fi + \xa\g@addto@macro\xa\htmlize@output\xa{\toadd}% + \egroup + }% +}% + +% macron diacritics +{\catcode`|=3\relax + \gdef\htmlize@macron{A|E|I|O|U|a|e|i|o|u|}}% +\def\@g{g}\def\@G{G}\def\@y{y}\def\@Y{Y}% +\html@action@def\=#1{% + \ifinlist{#1}{\htmlize@macron}% + {\g@addto@macro\htmlize@output{\otherampersand#1macr\othersemicol}}% + {% + \bgroup + \def\test@i{#1}% + \ifx\test@i\@g + \def\toadd{\otherampersand\otherhash7713\othersemicol}% + \else + \ifx\test@i\@G + \def\toadd{\otherampersand\otherhash7712\othersemicol}% + \else + \ifx\test@i\@y + \def\toadd{\otherampersand\otherhash563\othersemicol}% + \else + \ifx\test@i\@Y + \def\toadd{\otherampersand\otherhash562\othersemicol}% + \else + \def\toadd{\otherbackslash =\otherlbrace#1\otherrbrace}% + \fi + \fi + \fi + \fi + \xa\g@addto@macro\xa\htmlize@output\xa{\toadd}% + \egroup + }% +}% + +% macron below diacritics +\def\@b{b}\def\@B{B}\def\@d{d}\def\@D{D}\def\@k{k}\def\@K{K}\def\@l{l}% +\def\@L{L}\def\@n{n}\def\@N{N}\def\@t{t}\def\@T{T}\def\@z{z}\def\@Z{Z}% +\html@action@def\b#1{% + \bgroup + \def\test@i{#1}% + \ifx\test@i\@b + \def\toadd{\otherampersand\otherhash7687\othersemicol}% + \else + \ifx\test@i\@B + \def\toadd{\otherampersand\otherhash7686\othersemicol}% + \else + \ifx\test@i\@d + \def\toadd{\otherampersand\otherhash7695\othersemicol}% + \else + \ifx\test@i\@D + \def\toadd{\otherampersand\otherhash7694\othersemicol}% + \else + \ifx\test@i\@k + \def\toadd{\otherampersand\otherhash7733\othersemicol}% + \else + \ifx\test@i\@K + \def\toadd{\otherampersand\otherhash7732\othersemicol}% + \else + \ifx\test@i\@l + \def\toadd{\otherampersand\otherhash7739\othersemicol}% + \else + \ifx\test@i\@L + \def\toadd{\otherampersand\otherhash7738\othersemicol}% + \else + \ifx\test@i\@n + \def\toadd{\otherampersand\otherhash7753\othersemicol}% + \else + \ifx\test@i\@N + \def\toadd{\otherampersand\otherhash7752\othersemicol}% + \else + \ifx\test@i\@r + \def\toadd{\otherampersand\otherhash7775\othersemicol}% + \else + \ifx\test@i\@R + \def\toadd{\otherampersand\otherhash7774\othersemicol}% + \else + \ifx\test@i\@t + \def\toadd{\otherampersand\otherhash7791\othersemicol}% + \else + \ifx\test@i\@T + \def\toadd{\otherampersand\otherhash7790\othersemicol}% + \else + \ifx\test@i\@z + \def\toadd{\otherampersand\otherhash7829\othersemicol}% + \else + \ifx\test@i\@Z + \def\toadd{\otherampersand\otherhash7828\othersemicol}% + \else + \def\toadd{\otherbackslash b\otherlbrace#1\otherrbrace}% + \fi + \fi + \fi + \fi + \fi + \fi + \fi + \fi + \fi + \fi + \fi + \fi \fi \fi + \fi + \fi + \xa\g@addto@macro\xa\htmlize@output\xa{\toadd}% + \egroup +}% + +% Overdot diacritics +{\catcode`|=3\relax + \gdef\htmlize@dotabove{C|E|G|I|Z|c|e|g|z|}}% +\def\@i{i}% +\html@action@def\.#1{% + \ifinlist{#1}{\htmlize@dotabove}% + {\g@addto@macro\htmlize@output{\otherampersand#1dot\othersemicol}}% + { + \bgroup + \def\test@i{#1}% + \ifx\test@i\@i + \def\toadd{i}% + \else + \def\toadd{\otherbackslash .\otherlbrace#1\otherrbrace}% + \fi \xa\g@addto@macro\xa\htmlize@output\xa{\toadd}% \egroup }% }% + +% Underdot diacritics +\def\@A{A}\def\@a{a}\def\@B{B}\def\@b{b}% +\html@action@def\d#1{% + \bgroup + \def\test@i{#1}% + \ifx\test@i\@a + \def\toadd{\otherampersand\otherhash7841\othersemicol}% + \else + \ifx\test@i\@A + \def\toadd{\otherampersand\otherhash7840\othersemicol}% + \else + \ifx\test@i\@b + \def\toadd{\otherampersand\otherhash7685\othersemicol}% + \else + \ifx\test@i\@B + \def\toadd{\otherampersand\otherhash7684\othersemicol}% + \else + \def\toadd{\otherbackslash d\otherlbrace#1\otherrbrace}% + \fi + \fi + \fi + \fi + \xa\g@addto@macro\xa\htmlize@output\xa{\toadd}% + \egroup +}% + +% Overring +{\catcode`|=3\relax + \gdef\htmlize@ring{A|U|a|u|}}% +\html@action@def\r#1{% + \ifinlist{#1}{\htmlize@ring}% + {\g@addto@macro\htmlize@output{\otherampersand#1ring\othersemicol}}% + {\xa\g@addto@macro\htmlize@output\xa{\string\r#1}}% +}% % \end{macrocode} -% +% % \subsubsection{Command sequences for Expansion} -% -% \begin{macrocode} -\html@def\underline#1{#1}% -\html@def\emph#1{#1}% -\html@def\textit#1{#1}% -\html@def\textbf#1{#1}% -\html@def\texttt#1{#1}% -\html@def\textsc#1{#1}% -\html@def\url#1{#1}% -\html@def\href#1#2{#2}% -\html@def\textsuperscript#1{#1}% -\html@def\up#1{#1}% -\html@def\fup#1{#1}% -\html@def\textsubscript#1{#1}% +% +% First, commands defined by this package. +% \begin{macrocode} +\def\blank{\rule{1in}{0.5pt}}% +% TODO: Make an optional argument for width? This wouldn't affect Moodle, +% only the appearance in the PDF. It doesn't seem worth it. \html@def\blank{____________}% -\html@def\par{
    }% +\htmlize@record@action\inlinemathrightdelim +\htmlize@record@action\displaymathrightdelim +% \end{macrocode} +% Second, native \LaTeX\ commands. +% \begin{macrocode} +\html@def\emph#1{\HTMLtag{EM}#1\HTMLtag{/EM}}% +\html@def\textbf#1{\HTMLtag{B}#1\HTMLtag{/B}}% +\html@def\textit#1{\HTMLtag{I}#1\HTMLtag{/I}}% +\html@def\textsc#1{\HTMLtag{SPAN STYLE="font-variant: small-caps;"}#1\HTMLtag{/SPAN}}% +\html@def\textsuperscript#1{\HTMLtag{SUP}#1\HTMLtag{/SUP}}% +\html@def\textsubscript#1{\HTMLtag{SUB}#1\HTMLtag{/SUB}}% +\html@def\texttt#1{\HTMLtag{CODE}#1\HTMLtag{/CODE}}% +\html@action@def\underline#1{% + \moodle@ifmathmode{\g@addto@macro\htmlize@output{\string\underline{#1}}}% + {\g@addto@macro\htmlize@output{#1}}% +}% +% \end{macrocode} +% Third, popular \LaTeX\ commands from packages. +% \begin{macrocode} +\html@def\url#1{\HTMLtag{A href=\@dq #1\@dq}#1\HTMLtag{/A}}% url or hyperref +\html@def\href#1#2{\HTMLtag{A href=\@dq #1\@dq}#2\HTMLtag{/A}}% hyperref +\html@def\up#1{\HTMLtag{SUP}#1\HTMLtag{/SUP}}% \pkg{babel}, option \optn{french} +\html@def\fup#1{\HTMLtag{SUP}#1\HTMLtag{/SUP}}% \pkg{babel}, option \optn{french} +% \end{macrocode} +% Fourth, \LaTeX\ commands for ligature and other glyphs. +% \begin{macrocode} \html@def\aa{\å}% \html@def\AA{\Å}% \html@def\ae{\æ}% \html@def\AE{\Æ}% -\html@def\oe{\œ}% -\html@def\OE{\Œ}% -\html@def\S{\§}% -\html@def\euro{\€}% -\html@def\texteuro{\€}% +\html@def\dh{\ð}% +\html@def\DH{\Ð}% +\html@def\dj{\đ}% +\html@def\DJ{\Đ}% +\html@def\i{\ı}% +\html@def\ij{\ij}% +\html@def\IJ{\IJ}% +\html@def\j{\ȷ}% +\html@def\l{\ł}% +\html@def\L{\Ł}% +\html@def\ng{\ŋ}% +\html@def\NG{\Ŋ}% \html@def\o{\ø}% \html@def\O{\Ø}% +\html@def\oe{\œ}% +\html@def\OE{\Œ}% \html@def\ss{\ß}% \html@def\SS{\&\#7838;}% -\html@def\l{\ł}% -\html@def\L{\Ł}% +\html@def\th{\þ}% +\html@def\TH{\Þ}% +% \end{macrocode} +% Fifth, \LaTeX\ commands for horizontal spacing and line breaks. +% In a number of situations, paragraph breaks translated into +% |

    | would bring trouble in the \HTML\ code. Examples: +% \begin{itemize} +% \item fields of cloze subquestions +% \item inside environments like |center|, |itemize|, or |enumerate|. +% \end{itemize} +% \begin{macrocode} +\html@def\space{ }% +\html@def\textvisiblespace{\␣}% +\html@def\newline{\HTMLtag{BR/}}% +\html@def\par{\HTMLtag{BR/}}% +% \end{macrocode} +% Sixth, \LaTeX\ commands for various symbols. +% \begin{macrocode} +\html@def\textbackslash{\&\#92;}% +\html@def\_{\&\#95;}% +\html@def\textquestiondown{\¿}% +\html@def\textexclamdown{\¡}% +\html@def\euro{\€}% +\html@def\texteuro{\€}% +\html@def\S{\§}% +% \end{macrocode} +% Seventh, \LaTeX\ commands for various quotation marks. +% \begin{macrocode} +\html@def\textquoteleft{\‘}% +\html@def\textquoteright{\’}% +\html@def\textquotedblleft{\“}% +\html@def\textquotedblright{\”}% +\html@def\guilsinglleft{\‹}% +\html@def\guilsinglright{\›}% +\html@def\guillemotleft{\«}% +\html@def\guillemotright{\»}% +\html@def\quotesinglbase{\‚}% +\html@def\quotedblbase{\„}% +\html@def\flq{\‹}% +\html@def\frq{\›}% +\html@def\flqq{\«}% +\html@def\frqq{\»}% \html@def\og{\«\&\#8239;}% -\html@def\guillemotleft{\«\&\#8239;}% \html@def\fg{\&\#8239;\»}% -\html@def\guillemotright{\&\#8239;\»}% -\html@def\glqq{\„}% -\html@def\grqq{\“}% \html@def\glq{\‚}% \html@def\grq{\‘}% -\html@def\flqq{\«\&\#8239;}% -\html@def\frqq{\&\#8239;\»}% -\html@def\flq{\‹}% -\html@def\frq{\›}% +\html@def\glqq{\„}% +\html@def\grqq{\“}% \html@def\dq{\"}% -\html@def\,{\&\#8239;}% -\html@def\thinspace{\&\#8239;}% -\html@def\textbackslash{\&\#92;}% -\html@def\_{\&\#95;}% -\html@def\textquestiondown{\¿}% -\html@def\textexclamdown{\¡}% - -% AH CUSTOM MACROS TO EXPAND --- remove these before publishing! -%\htmlize@record@expand{\inv}% -%\htmlize@record@expand{\rec}% - -\htmlize@record@action\inlinemathrightdelim -\htmlize@record@action\displaymathrightdelim - % \end{macrocode} % -% \subsubsection{Passing Code to XML Only} -% Users may want to include pieces of HTML code to the XML file only. +% \subsubsection{Passing Code to \XML\ Only} +% Users may want to include pieces of \HTML\ code to the \XML\ file only. % When producing the traditional output, the optional argument, empty % by default, is used. % \begin{macrocode} \newcommand\htmlonly[2][]{#1}% % \end{macrocode} -% When producing the XML file, the mandatory argument is passed as-is. +% When producing the \XML\ file, the mandatory argument is passed as-is. % \begin{macrocode} \html@action@newcommand{htmlonly}[2][]{% \g@addto@macro\htmlize@output{#2}% @@ -5498,10 +6620,10 @@ % \end{macrocode} % % \subsection{Graphics via {\ttfamily\string\includegraphics}} -% +% % \subsubsection{Finding Media Files} % The following code is adapted from the command |\Ginclude@graphics| as -% found in |graphics.sty|. +% found in \filenm{graphics.sty}. % Calling |\moodle@media@find|\marg{filename} looks for the file the % same way |\includegraphics| does, with or without extension provided, % in the current folder and in folders specified with |\graphicspath{}|. @@ -5513,10 +6635,10 @@ % \begin{macrocode} \AtEndPreamble{% \@ifpackageloaded{graphics}{% - \@ifpackagelater{graphics}{2019/10/08}{}{% - \PackageError{moodle}{`moodle' is made to interact with the `graphics' - package not older than 2019/10/08.}% - }% + \@ifpackagelater{graphics}{2019/10/08 v1.3c}{}% + {\PackageError{moodle}{`moodle' is made to interact with the `graphics'\MessageBreak + package not older than 2019/10/08.}\@eha\endinput}% + }{}% }% \def\moodle@media@find#1{% @@ -5574,7 +6696,7 @@ % begin modified part \xdef\moodle@media@base{\detokenize\xa{\Gin@base}}% \xdef\moodle@media@ext{\detokenize\xa{\Gin@ext}}% - % end modfied part + % end modified part \fi \endgroup } @@ -5635,7 +6757,7 @@ \htmlize@setexecutable@int } \def\htmlize@setexecutable@int#1{% - \egroup + \egroup \expandafter\def\htmlize@executable@macro{#1}% } @@ -5647,30 +6769,41 @@ \def\SVGtoPDFcommand{\htmlize@setexecutable\SVGtoPDF}% \def\optiSVGcommand{\htmlize@setexecutable\optiSVG}% \def\DeleteFilecommand{\htmlize@setexecutable\DeleteFiles}% +\def\MoveFilecommand{\htmlize@setexecutable\MoveFiles}% +\def\DevNullcommand{\htmlize@setexecutable\DevNull}% \ifwindows% \ghostscriptcommand{gswin64c.exe -dBATCH -dNOPAUSE -sDEVICE=pngalpha}% \baselxivcommand{certutil}% + % Uses scour from inkscape default installation + % The \Inkscape\bin directory has to be in the users path and provides both: + % {inkscape,python}.exe the scour-Package which is found by python in Inkscape\lib\python3.x\site-packages\ + \optiSVGcommand{python -m scour.scour -q --enable-id-stripping --enable-comment-stripping + --shorten-ids --indent=none --remove-descriptive-elements}% \DeleteFilecommand{del}% + \MoveFilecommand{move}% + \DevNullcommand{NUL}% + \imagemagickcommand{magick -colorspace RGB}% \else% \ghostscriptcommand{gs -dBATCH -dNOPAUSE -sDEVICE=pngalpha}% \baselxivcommand{base64}% + \optiSVGcommand{scour -q --enable-id-stripping --enable-comment-stripping + --shorten-ids --indent=none --remove-descriptive-elements}% \DeleteFilecommand{rm -f}% + \MoveFilecommand{mv}% + \DevNullcommand{/dev/null}% + \imagemagickcommand{convert -colorspace RGB}% \fi% - -\imagemagickcommand{convert -colorspace RGB}% \optipngcommand{optipng -clobber -strip all -quiet}% \PDFtoSVGcommand{inkscape --export-type=svg --export-area-page --vacuum-defs}%--pdf-poppler % remove the "--pdf-poppler" import option if you want to preserve text (avoid conversion to path) \SVGtoPDFcommand{inkscape --export-type=pdf --export-area-page}% -\optiSVGcommand{scour -q --enable-id-stripping --enable-comment-stripping - --shorten-ids --indent=none --remove-descriptive-elements}% % \end{macrocode} -% +% % \subsubsection{Conversion and inclusion of non-native formats} % \begin{macrocode} \AtEndPreamble{% - \@ifpackageloaded{graphicx}{% + \@ifpackageloaded{graphics}{% \def\@firstofthree#1#2#3{#1}% \def\@secondofthree#1#2#3{#2}% \newcommand{\DeclareGraphicsAlien}[3]{% @@ -5690,11 +6823,11 @@ \csname Gread@\targetfmt\endcsname{\Gin@base\targetext}% }% }% -% Support for GIF files: passed as-is in XML but converted in PNG for PDF output. -% In case the GIF is animated, we pick up the first frame in this conversion. +% Support for \GIF\ files: passed as-is in \XML\ but converted in \PNG\ for PDF output. +% In case the \GIF\ is animated, we pick up the first frame in this conversion. % While the picture will be animated after Moodle import, it will not be in the PDF % output, whatever the viewer is. - \DeclareGraphicsAlien{.gif}{.png}{\htmlize@imagemagick@convert\otherspace '\SourceFile[0]' \OutputFile}% + \DeclareGraphicsAlien{.gif}{.png}{\htmlize@imagemagick@convert\otherspace \SourceFile[0]\otherspace \OutputFile}% }{ \newcommand\includegraphics[2][]{\PackageError{moodle}{"\string\includegraphics" is not defined}% {Add "\string\usepackage{graphicx}" to you preamble.}}{}%}% @@ -5727,7 +6860,7 @@ } \setkeys{moodle@includegraphics}{height=0pt,width=0pt} % \end{macrocode} -% +% % \subsubsection{Graphics conversion to HTML} % If the |tikz| option is loaded, we define the |embedaspict| command. % Furthermore, |includegraphics| is packed into a TikZ node. @@ -5738,16 +6871,16 @@ % \begin{macrocode} \ifmoodle@svg \AtEndPreamble{% -% Declaring SVG to PDF conversion rule for includegraphics +% Declaring \SVG\ to PDF conversion rule for includegraphics % \edef\Gin@extensions{\Gin@extensions,.svg,.SVG}% % \DeclareGraphicsRule{.svg}{pdf}{.pdf}{% % `\SVGtoPDF\otherspace '#1' \noexpand\Gin@base-svg-converted-to.pdf}% % \DeclareGraphicsRule{.SVG}{pdf}{.pdf}{% % `\SVGtoPDF\otherspace '#1' \noexpand\Gin@base-SVG-converted-to.pdf}% \DeclareGraphicsAlien{.svg}{.pdf}{% - \SVGtoPDF\otherspace '\SourceFile' -o '\OutputFile' 2>/dev/null}% + \SVGtoPDF\otherspace \SourceFile\otherspace -o \otherspace\OutputFile\otherspace 2>\DevNull}% \DeclareGraphicsAlien{.SVG}{.pdf}{% - \SVGtoPDF\otherspace '\SourceFile' -o '\OutputFile' 2>/dev/null}% + \SVGtoPDF\otherspace \SourceFile\otherspace -o \otherspace\OutputFile\otherspace 2>\DevNull}% }% \fi \def\moodle@checkconversionsuccess#1#2{% @@ -5780,8 +6913,8 @@ \message{moodle.sty: Processing \string\includegraphics[#1]{#2} for HTML...^^J} \setkeys*{moodle@includegraphics}{#1}% % Height or width should be given in TeX dimensions like cm or pt or in, - % and are converted to pixels for web use using the ppi key. - % TODO: Can we modify \includegraphics to accept height or width in + % and are converted to pixels for web use using the ppi key. + % TODO: Can we modify \includegraphics to accept height or width in % pixels? % TODO: What about \includegraphics[scale=0.7] ? % Other keys: keepaspectratio=true|false, angle (rotation), clip & trim @@ -5817,24 +6950,24 @@ % conversion needed \edef\moodle@media@pdf{\detokenize{.pdf}}% \edef\moodle@media@ext{\detokenize\xa{\moodle@media@ext}}% - \ifnum0\ifx\moodle@media@ext\moodle@media@pdf1\fi\ifmoodle@svg1\fi=11% PDF file and SVG option active - \def\moodle@media@ext@current{.svg}% + \ifnum0\ifx\moodle@media@ext\moodle@media@pdf1\fi\ifmoodle@svg1\fi=11\relax% PDF file and \SVG\ option active + \def\moodle@media@ext@current{-moodle.svg}% \edef\moodle@media@mime@current{\moodle@media@SVGmime}% - \edef\cmdline{\PDFtoSVG\otherspace "\moodle@media@base\moodle@media@ext" -o "\moodle@media@base\moodle@media@ext@current" 2>/dev/null}% + \edef\cmdline{\PDFtoSVG\otherspace "\moodle@media@base\moodle@media@ext" -o "\moodle@media@base\moodle@media@ext@current" 2>\DevNull}% \message{moodle.sty: Converting '#2' to SVG...^^J}% \xa\ShellEscape\xa{\cmdline}% \moodle@checkconversionsuccess{\moodle@media@base\moodle@media@ext@current}{PDFtoSVG conversion}% %Next, optimize inline \ifwindows\else \edef\cmdline{\optiSVG < "\moodle@media@base\moodle@media@ext@current" > - "\moodle@media@base.tmp.svg" && mv "\moodle@media@base.tmp.svg" + "\moodle@media@base.tmp.svg" && \MoveFiles\otherspace "\moodle@media@base.tmp.svg" "\moodle@media@base\moodle@media@ext@current"}% \message{moodle.sty: Optimizing '\moodle@media@base\moodle@media@ext@current'...^^J}% \xa\ShellEscape\xa{\cmdline}% \moodle@checkconversionsuccess{\moodle@media@base\moodle@media@ext@current}{SVG optimization}% \fi \else% call ImageMagick - \def\moodle@media@ext@current{.png}% + \def\moodle@media@ext@current{-moodle.png}% \def\moodle@media@mime@current{image/png}% \edef\cmdline{\htmlize@imagemagick@convert\otherspace "\moodle@media@base\moodle@media@ext" -resize \moodle@graphics@geometry\otherspace "\moodle@media@base\moodle@media@ext@current"}% \message{moodle.sty: Converting '#2' to PNG...^^J}% @@ -5852,17 +6985,42 @@ %Now, save that base64 encoding in a TeX macro \def\moodle@newpic@baselxiv{}% \message{moodle.sty: Reading base64 file '\moodle@media@base.enc'...^^J}% - \openin\baseLXIVdatafile="\moodle@media@base.enc" + \openin\baseLXIVdatafile="\moodle@media@base.enc"\relax + \ifeof\baseLXIVdatafile + \PackageError{moodle}{reading '\moodle@media@base.enc' failed}% + {If the XML file is not of importance to you: use package option "draft"}% + \else \savebaselxivdata@recursive + \fi \closein\baseLXIVdatafile %Clean up files \ifx\moodle@media@ext@current\moodle@media@ext - \ShellEscape{\DeleteFiles\otherspace "\moodle@media@base.enc"}% + \ifwindows + \ShellEscape{powershell.exe "del ""\moodle@media@base.enc"""}% + \else + \ShellEscape{\DeleteFiles\otherspace "\moodle@media@base.enc"}% + \fi \else - \ShellEscape{\DeleteFiles\otherspace "\moodle@media@base.enc" "\moodle@media@base\moodle@media@ext@current"}% + \ifwindows + \ShellEscape{powershell.exe "del ""\moodle@media@base.enc"""}% + \ShellEscape{powershell.exe "del ""\moodle@media@base\moodle@media@ext@current"""}% + \else + \ShellEscape{\DeleteFiles\otherspace "\moodle@media@base.enc" "\moodle@media@base\moodle@media@ext@current"}% + \fi \fi \xa\global\xa\let\csname picbaselxiv@graphics@#2\endcsname=\moodle@newpic@baselxiv% - \edef\htmlize@imagetag{}% + \ifmoodle@pluginfile + \edef\htmlize@imagetag{}% + \xa\filename@parse\xa{\moodle@media@base}% + \xdef\moodle@media@path{\filename@area}% + \xdef\moodle@media@base{\filename@base}% + \xa\g@addto@macro\xa\htmlize@embeddedfiletags\xa{}% + \xa\g@addto@macro\xa\htmlize@embeddedfiletags\xa{\csname picbaselxiv@graphics@#2\endcsname}% + \else + \edef\htmlize@imagetag{}% + \fi \xa\g@addto@macro\xa\htmlize@output\xa{\htmlize@imagetag}% \message{moodle.sty: tag inserted.^^J}% \egroup @@ -5879,7 +7037,7 @@ }% \ifwindows \def\ConvertToBaseLXIV@int#1#2{% - \def\cmdline{\baselxiv\otherspace -encode "#1#2"\otherspace tmp.b64 && findstr /vbc:"---" tmp.b64 > "#1.enc" && del tmp.b64}% + \def\cmdline{\baselxiv\otherspace -encode "#1#2"\otherspace tmp.b64 && findstr /vbc:"---" tmp.b64 > "#1.enc" && powershell.exe "del tmp.b64"}% }% Starting from Windows 7, CertUtil is included by default. There should be no windows XP still running \else \ifmacosx @@ -5893,7 +7051,7 @@ \fi \fi % \end{macrocode} -% The following code accomplishes the reading of an |.enc| file into memory. +% The following code accomplishes the reading of an \filenm{.enc} file into memory. % It is also used by the \TikZ\ code below. % \begin{macrocode} \newread\baseLXIVdatafile @@ -5914,12 +7072,12 @@ \baselxiv@next } % \end{macrocode} -% +% % \subsection{\TikZ\ Picture Handling} -% If the user is not using the \TikZ\ package, there is no need to waste time +% If the user is not using the \TikZ\ package, there is no need to waste time % loading it. Without \TikZ\ loaded, however, many of the following commands % are undefined. -% Our solution is to wait until |\AtBeginDocument| and then test whether +% Our solution is to wait until |\AtBeginDocument| and then test whether % \TikZ\ is loaded. If so, we make the appropriate definitions. % \begin{macro}{TikZ} % \changes{v0.7}{2020/07/14}{Support \emph{tikz}\ command} @@ -5943,24 +7101,38 @@ \def\TikzExportMIME{image/svg+xml}% \ifpdfoutput% tex engines defaulting to PDF output (pdflatex, xelatex, lualatex) \def\ExportTikz{ \message{moodle.sty: Converting picture '\moodle@basename.pdf' to SVG...^^J}% - \edef\cmdline{\PDFtoSVG\otherspace "\moodle@basename.pdf" -o "\moodle@basename\TikzExportExtension" 2>/dev/null}% + \edef\cmdline{\PDFtoSVG\otherspace "\moodle@basename.pdf" -o "\moodle@basename\TikzExportExtension" 2>\DevNull}% +\message{\cmdline} \xa\ShellEscape\xa{\cmdline}% \moodle@checkconversionsuccess{\moodle@basename\TikzExportExtension}{PDFtoSVG conversion}% }% \else % latex \def\ExportTikz{ \message{moodle.sty: Converting picture '\moodle@basename.ps' to SVG...^^J}% - \edef\cmdline{\PDFtoSVG\otherspace "\moodle@basename.ps" -o "\moodle@basename\TikzExportExtension" 2>/dev/null}% - \xa\ShellEscape\xa{\cmdline}% + \edef\cmdline{\PDFtoSVG\otherspace "\moodle@basename.ps" -o "\moodle@basename\TikzExportExtension" 2>\DevNull}% +\message{\cmdline} + \xa\ShellEscape\xa{\cmdline}% \moodle@checkconversionsuccess{\moodle@basename\TikzExportExtension}{PStoSVG conversion}% }% \fi - \def\OptimizeExport{ \message{moodle.sty: Optimizing '\moodle@basename.svg'...^^J}% + \ifwindows + \def\OptimizeExport{ \message{moodle.sty: Optimizing '\moodle@basename.svg'...^^J}% + \edef\cmdline{\optiSVG\otherspace < "\moodle@basename\TikzExportExtension" > + "\moodle@basename.tmp.svg" && powershell.exe "move ""\moodle@basename.tmp.svg""" % + """\moodle@basename\TikzExportExtension"""}% + \message{\cmdline} + \xa\ShellEscape\xa{\cmdline}% + \moodle@checkconversionsuccess{\moodle@basename\TikzExportExtension}{SVG optimization}% + }% + \else + \def\OptimizeExport{ \message{moodle.sty: Optimizing '\moodle@basename.svg'...^^J}% \edef\cmdline{\optiSVG\otherspace < "\moodle@basename\TikzExportExtension" > - "\moodle@basename.tmp.svg" && mv "\moodle@basename.tmp.svg" + "\moodle@basename.tmp.svg" && \MoveFiles\otherspace "\moodle@basename.tmp.svg" "\moodle@basename\TikzExportExtension" }% + \message{\cmdline} \xa\ShellEscape\xa{\cmdline}% \moodle@checkconversionsuccess{\moodle@basename\TikzExportExtension}{SVG optimization}% }% + \fi \else \def\TikzExportExtension{.png}% \def\TikzExportMIME{image/png}% @@ -5993,7 +7165,7 @@ \moodle@oldtikzpicture% }{}% % However, the tikz externalize library does *not* run \end{tikzpicture}. - % In order to run commands after the tikz picture is done compiling, we need to + % In order to run commands after the tikz picture is done compiling, we need to % use a hook into \tikzexternal@closeenvironments. \g@addto@macro{\tikzexternal@closeenvironments}{% \moodle@endtikzpicture@hook @@ -6027,20 +7199,38 @@ \fi % % The HTMLizer version of the tikzpicture environment, - % which writes an tag to the XML file. + % which writes an tag to the \XML\ file. \htmlize@record@environment{tikzpicture}% \g@addto@macro\htmlize@activate@environments{% \let\tikzpicture\relax\let\endtikzpicture\relax \NewEnviron{tikzpicture}[1][]{% \global\advance\numpicturesread by 1\relax - \edef\htmlize@imagetag{}% + \ifmoodle@pluginfile + \edef\htmlize@imagetag{}% + \xa\g@addto@macro\xa\htmlize@embeddedfiletags\xa{}% + \xa\g@addto@macro\xa\htmlize@embeddedfiletags\xa{\csname picbaselxiv@\the\numpicturesread\endcsname}% + \else + \edef\htmlize@imagetag{}% + \fi \xa\g@addto@macro\xa\htmlize@output\xa{\htmlize@imagetag}% }[\htmlize@patchendenvironment]% }% \html@action@newcommand{tikz}[2][]{% % \message{>>> Processing \string\tikz[#1]{...} ^^J} \global\advance\numpicturesread by 1\relax - \edef\htmlize@imagetag{}% + \ifmoodle@pluginfile + \edef\htmlize@imagetag{}% + \xa\g@addto@macro\xa\htmlize@embeddedfiletags\xa{}% + \xa\g@addto@macro\xa\htmlize@embeddedfiletags\xa{\csname picbaselxiv@\the\numpicturesread\endcsname}% + \else + \edef\htmlize@imagetag{}% + \fi \xa\g@addto@macro\xa\htmlize@output\xa{\htmlize@imagetag}% }% \else @@ -6063,7 +7253,12 @@ \def\savebaselxivdata{% \def\moodle@newpic@baselxiv{}% \openin\baseLXIVdatafile=\tikzexternalrealjob-tikztemp-\the\numconvertedpictures.enc\relax + \ifeof\baseLXIVdatafile + \PackageError{moodle}{reading '\moodle@media@base.enc' failed}% + {If the XML file is not of importance to you: use package option "draft"}% + \else \savebaselxivdata@recursive + \fi \closein\baseLXIVdatafile \xa\global\xa\let\csname picbaselxiv@\the\numconvertedpictures\endcsname=\moodle@newpic@baselxiv% } @@ -6076,7 +7271,7 @@ \RequirePackage{varwidth}% for the command |embedaspict| \fi % \end{macrocode} -% Finally, we clean up our mess by deleting the temporary PDF, PNG, and ENC +% Finally, we clean up our mess by deleting the temporary PDF, \PNG, and ENC % files we created. % With XeTeX, we cannot clean pictures pdf's because they are actually included in the final pdf afterwards, by xdvipdfmx. % With LuaTeX, it looks like |\AtEndDocument| is too early to for this cleaning step. @@ -6087,12 +7282,16 @@ \ifXeTeX % we must keep picture pdf's for subsequent linking (xdvipdfmx) \ifwindows - \ShellEscape{powershell.exe -noexit "del * -include \tikzexternalrealjob-tikztemp-*.* -exclude *.pdf}% + \ShellEscape{powershell.exe "del * -include \tikzexternalrealjob-tikztemp-*.* -exclude *.pdf"}% \else \ShellEscape{find . -type f -name "\tikzexternalrealjob-tikztemp-*.*" -not -name "*.pdf" -delete}% \fi \else - \ShellEscape{\DeleteFiles\otherspace \tikzexternalrealjob-tikztemp-*.*}% + \ifwindows + \ShellEscape{powershell.exe "del \tikzexternalrealjob-tikztemp-*.*"}% + \else + \ShellEscape{\DeleteFiles\otherspace \tikzexternalrealjob-tikztemp-*.*}% + \fi \fi }{}% \fi @@ -6105,6 +7304,7 @@ % \subsection{Other Media} % Support for other media comes through the |\url|\marg{link} and |\href|\marg{link}\marg{text} % commands. +% \begin{macrocode} \AtEndPreamble{% \@ifpackageloaded{hyperref}{% \let\oldhref\href @@ -6229,13 +7429,36 @@ % }% }{}% }% +% \end{macrocode} % % \subsection{Verbatim Code} -% +% % We start by defining a macro to parameter a style for code box display in Moodle % \begin{macrocode} \def\xmlDisplayVerbatimBox{border-top: thin solid; border-bottom: thin solid}% % \end{macrocode} +% Then we set a macro to escape some characters that would not play well with \HTML. +% \begin{macrocode} +\begingroup +\catcode`\<=\active\relax +\catcode`\>=\active\relax +\catcode`\"=\active\relax +\catcode`\'=\active\relax +\catcode`\&=\active\relax +\gdef\moodle@HackTML{% + \catcode`\<=\active\relax + \catcode`\>=\active\relax + \catcode`\"=\active\relax + \catcode`\'=\active\relax + \catcode`\&=\active\relax + \gdef<{\otherampersand lt;}% + \gdef>{\otherampersand gt;}% + \gdef"{\otherampersand quot;}% + \gdef'{\otherampersand apos;}% + \gdef&{\otherampersand amp;}% +}% +\endgroup +% \end{macrocode} % First, let us handle |\verbatiminput| from the `verbatim' package % \begin{macrocode} \html@action@def\verbatiminput#1{% @@ -6245,6 +7468,7 @@ \@bsphack \let\do\@makeother\dospecials \catcode`\^^M\active + \moodle@HackTML \def\verbatim@processline{\xa\g@addto@macro\xa\htmlize@output\xa{\the\verbatim@line
    }} \verbatim@readfile{#1}% \@esphack @@ -6261,30 +7485,33 @@ \@ifpackageloaded{fancyvrb}{\PackageError{moodle}{'moodle' should be loaded before 'fancyvrb'.}% {'moodle' loads 'fancybox' which, unfortunately, redefines verbatim commands.}}{\relax}% -\html@action@newcommand{VerbatimInput}[2][]{% - \message{moodle.sty: Processing \string\VerbatimInput[#1]{#2} for HTML ^^J}% - \def\FV@KeyValues{#1}% - \FV@UseKeyValues% import options defined in #1 - \moodle@VerbatimInput{#2}% -}% -\html@action@newcommand{LVerbatimInput}[2][]{% - \message{moodle.sty: Processing \string\LVerbatimInput[#1]{#2} for HTML ^^J}% - \def\FV@KeyValues{#1}% - \FV@UseKeyValues% import options defined in #1 - \moodle@VerbatimInput{#2}% -}% -\html@action@newcommand{BVerbatimInput}[2][]{% - \message{moodle.sty: Processing \string\BVerbatimInput[#1]{#2} for HTML ^^J}% - \def\FV@KeyValues{#1}% - \FV@UseKeyValues% import options defined in #1 - \moodle@VerbatimInput{#2}% -}% +\def\moodle@FV#1{% + \html@action@newcommand{#1}[2][]{% + \message{moodle.sty: Processing \@backslashchar#1[##1]{##2} for HTML ^^J}% + \def\FV@KeyValues{##1}% + \FV@UseKeyValues% import options defined in #1 + \def\FV@Input####1{ + \immediate\openin\FV@InFile ####1\relax + \ifeof\FV@InFile + \FV@Error{No verbatim file ####1}\FV@eha + \immediate\closein\FV@InFile + \else + \FV@CatCodes + \moodle@HackTML + \expandafter\FV@@Input + \fi}% + \moodle@VerbatimInput{##2}% + }% +} +\moodle@FV{VerbatimInput}% +\moodle@FV{LVerbatimInput}% +\moodle@FV{BVerbatimInput}% \def\moodle@VerbatimInput#1{% \g@addto@macro\htmlize@output{

    }%
       %%%%%%%% using material from fancyvrb and fvextra  %%%%%%%%
       %\begingroup
       \def\moodle@verbatim@addlinenumber##1{%
    -    \g@addto@macro\htmlize@output{}%
         \if@FV@NumberBlankLines
    @@ -6294,10 +7521,10 @@
             \xa\g@addto@macro\xa\htmlize@output\xa{\otherampersand nbsp;}%
           \else
             \xa\g@addto@macro\xa\htmlize@output\xa{\the\c@FancyVerbLine}%
    -      \fi 
    +      \fi
         \fi
       }
    -  % redefine the ProcessLine routine ('fancyvrb' and 'fvextra') for XML output
    +  % redefine the ProcessLine routine ('fancyvrb' and 'fvextra') for \XML\ output
       \def\FV@ProcessLine##1{%
         \ifcsname FV@HighlightLine:\number\c@FancyVerbLine\endcsname
           \xdef\moodle@FV@tagB{}% fvextra triggered highlighting for this line
    @@ -6309,7 +7536,7 @@
         \catcode`\`=12%
         \def\FV@Line{##1}%
         \ifx\FV@LeftListNumber\relax
    -    
    +
         \else% line numbers displayed on the left side
           \moodle@verbatim@addlinenumber{text-align: right}%
         \fi
    @@ -6341,13 +7568,16 @@
       }{\relax}%
     }
     %    \end{macrocode}
    -% Third, we patch `minted' so that it also calls pygmentize to generate HTML code.
    +% Third, we patch `minted' so that it also calls pygmentize to generate \HTML\ code.
     %    \begin{macrocode}
     \AtEndPreamble{% this definition should prevail because `minted' gets loaded after `moodle'
     \@ifpackageloaded{minted}{%
       \newcounter{moodle@pygmentizecounter}%
    +  \@ifundefined{minted@defstyle}{% compatibility with minted prior to 2021/12/24 v2.6
    +    \let\minted@defstyle=\minted@checkstyle%
    +  }{}%
       \renewcommand{\minted@pygmentize}[2][\minted@outputdir\minted@jobname.pyg]{%
    -    \minted@checkstyle{\minted@get@opt{style}{default}}%
    +    \minted@defstyle{\minted@get@opt{style}{default}}%
         \stepcounter{minted@pygmentizecounter}%
         \ifthenelse{\equal{\minted@get@opt{autogobble}{false}}{true}}%
           {\def\minted@codefile{\minted@outputdir\minted@jobname.pyg}}%
    @@ -6360,7 +7590,7 @@
         \def\minted@cmdtemplate##1##2{%
           \ifminted@kpsewhich
             \ifwindows
    -          \detokenize{for /f "usebackq tokens=*"}\space\@percentchar\detokenize{a 
    +          \detokenize{for /f "usebackq tokens=*"}\space\@percentchar\detokenize{a
               in (`kpsewhich}\space\minted@codefile\detokenize{`) do}\space
             \fi
           \fi
    @@ -6380,14 +7610,14 @@
           \fi}%
         \def\minted@cmd{\minted@cmdtemplate{latex -P commandprefix=PYG}{\minted@infile}}
         % For debugging, uncomment: %%%%
    -    \immediate\typeout{\minted@cmd}%
    +    %\immediate\typeout{\minted@cmd}%
         % %%%%
    -    \def\minted@cmdHTML{\minted@cmdtemplate{html -P noclasses -P 
    +    \def\minted@cmdHTML{\minted@cmdtemplate{html -P noclasses -P
           nowrap -P hl_lines="\FV@HighlightLinesList" -P
           style="\minted@get@opt{style}{default}"}{\csname minted@infileHTML\the\c@minted@pygmentizecounter\endcsname}}%
    -    \def\minted@cmdPNG{\minted@cmdtemplate{png -P    
    +    \def\minted@cmdPNG{\minted@cmdtemplate{png -P
           line_numbers=True}{\minted@infilePNG}}%
    -    \def\minted@cmdSVG{\minted@cmdtemplate{svg -P 
    +    \def\minted@cmdSVG{\minted@cmdtemplate{svg -P
           linenos=True}{\minted@infileSVG}}%
         \ifthenelse{\boolean{minted@cache}}%
           {%
    @@ -6396,8 +7626,8 @@
               \ifx\XeTeXinterchartoks\minted@undefined
                 \ifthenelse{\equal{\minted@get@opt{autogobble}{false}}{true}}%
                   {\edef\minted@hash{\pdf@filemdfivesum{#1}%
    -                \pdf@mdfivesum{\minted@cmd autogobble(\ifx\FancyVerbStartNum\z@ 
    -                0\else\FancyVerbStartNum\fi-\ifx\FancyVerbStopNum\z@ 
    +                \pdf@mdfivesum{\minted@cmd autogobble(\ifx\FancyVerbStartNum\z@
    +                0\else\FancyVerbStartNum\fi-\ifx\FancyVerbStopNum\z@
                     0\else\FancyVerbStopNum\fi)}}}%
                   {\edef\minted@hash{\pdf@filemdfivesum{#1}%
                     \pdf@mdfivesum{\minted@cmd}}}%
    @@ -6407,7 +7637,7 @@
                   \immediate\write\minted@code{\minted@cmd}%
                   \ifthenelse{\equal{\minted@get@opt{autogobble}{false}}{true}}%
                     {\immediate\write\minted@code{autogobble(\ifx\FancyVerbStartNum\z@
    -                 0\else\FancyVerbStartNum\fi-\ifx\FancyVerbStopNum\z@ 
    +                 0\else\FancyVerbStartNum\fi-\ifx\FancyVerbStopNum\z@
                     0\else\FancyVerbStopNum\fi)}}{}%
                   \immediate\closeout\minted@code
                   \edef\minted@argone@esc{#1}%
    @@ -6421,22 +7651,22 @@
                   \def\minted@hashcmd{%
                     \detokenize{python -c "import hashlib; import os;
                       hasher = hashlib.sha1();
    -                  f = 
    +                  f =
                       open(os.path.expanduser(os.path.expandvars(\"}\minted@tmpfname@esc.mintedcmd\detokenize{\")),
                        \"rb\");
                       hasher.update(f.read());
                       f.close();
    -                  f = 
    +                  f =
                       open(os.path.expanduser(os.path.expandvars(\"}\minted@argone@esc\detokenize{\")),
                        \"rb\");
                       hasher.update(f.read());
                       f.close();
    -                  f = 
    +                  f =
                       open(os.path.expanduser(os.path.expandvars(\"}\minted@tmpfname@esc.mintedmd5\detokenize{\")),
                        \"w\");
    -                  macro = \"\\edef\\minted@hash\" + chr(123) + hasher.hexdigest() 
    +                  macro = \"\\edef\\minted@hash\" + chr(123) + hasher.hexdigest()
                       + chr(125) + \"\";
    -                  f.write(\"\\makeatletter\" + macro + 
    +                  f.write(\"\\makeatletter\" + macro +
                       \"\\makeatother\\endinput\n\");
                       f.close();"}}%
                   \ShellEscape{\minted@hashcmd}%
    @@ -6444,8 +7674,8 @@
                 \else
                   \ifthenelse{\equal{\minted@get@opt{autogobble}{false}}{true}}%
                    {\edef\minted@hash{\mdfivesum file {#1}%
    -                  \mdfivesum{\minted@cmd autogobble(\ifx\FancyVerbStartNum\z@ 
    -                  0\else\FancyVerbStartNum\fi-\ifx\FancyVerbStopNum\z@ 
    +                  \mdfivesum{\minted@cmd autogobble(\ifx\FancyVerbStartNum\z@
    +                  0\else\FancyVerbStartNum\fi-\ifx\FancyVerbStopNum\z@
                       0\else\FancyVerbStopNum\fi)}}}%
                    {\edef\minted@hash{\mdfivesum file {#1}%
                       \mdfivesum{\minted@cmd}}}%
    @@ -6472,10 +7702,10 @@
                 \ifwindows
                   \StrSubstitute{\minted@infile}{/}{\@backslashchar}[\minted@infile@windows]
                   \StrSubstitute{\minted@actualinfile}{/}{\@backslashchar}[\minted@actualinfile@windows]
    -              \ShellEscape{move /y 
    +              \ShellEscape{move /y
                   \minted@outputdir\minted@infile@windows\space\minted@outputdir\minted@actualinfile@windows}%
                 \else
    -              \ShellEscape{mv -f 
    +              \ShellEscape{mv -f
                   \minted@outputdir\minted@infile\space\minted@outputdir\minted@actualinfile}%
                 \fi
                 \let\minted@infile\minted@actualinfile
    @@ -6507,38 +7737,793 @@
       % Since minted is based upon `fvextra' the macro |\moodle@VerbatimInput| works here.
       \minted@configlang{#2}% grab options set for this specific language
       \setkeys{minted@opt@cmd}{#1}% grab options in #1
    -  \minted@fvset% import options 
    +  \minted@fvset% import options
       \stepcounter{moodle@pygmentizecounter}
       \xa\moodle@VerbatimInput\xa{\csname minted@infileHTML\the\c@moodle@pygmentizecounter\endcsname}%
     }%
     %    \end{macrocode}
     %
    -% \subsection{Warning users of \texttt{babel}}
    -% Users of the |babel| package loaded with the 'french' option may experience problems
    -% related to autospacing when using |pdfLaTeX|. We shall warn them.
    +% \subsection{Internationalization}
    +% Here is an attempt to internationalize the PDF typesetting, relying on
    +% the package 'translations'.
     %    \begin{macrocode}
    -\AtBeginDocument{%
    -  \def\moodle@babel@german@warn{\PackageWarning{moodle}{Be careful when using moodle
    -         and German-related babel package options. The symbol " is made active and your umlauts
    -         will confuse moodle. You can either 1) compile with xelatex/lualatex with UTF-8 coded
    -         characters or 2) avoid the babel option.}
    -  }
    -  \@ifpackagewith{babel}{german}{\moodle@babel@german@warn}{\relax}%
    -  \@ifpackagewith{babel}{austrian}{\moodle@babel@german@warn}{\relax}%
    -  \@ifpackagewith{babel}{swissgerman}{\moodle@babel@german@warn}{\relax}%
    -  \@ifpackagewith{babel}{swissgerman.toss}{\moodle@babel@german@warn}{\relax}%
    -  \@ifpackagewith{babel}{ngerman}{\moodle@babel@german@warn}{\relax}%
    -  \@ifpackagewith{babel}{naustrian}{\moodle@babel@german@warn}{\relax}%
    -  \@ifpackagewith{babel}{nswissgerman}{\moodle@babel@german@warn}{\relax}%
    -  \@ifpackagewith{babel}{nswissgerman.toss}{\moodle@babel@german@warn}{\relax}%
    -  \ifPDFTeX % pdflatex or latex
    -    \@ifpackagewith{babel}{french}{%
    -      \PackageWarning{moodle}{Be careful when using LaTeX, moodle, and the babel package with option 'french'. Autospacing produces in undesired symbols in the XML. You can either 1) compile with xelatex/lualatex or 2) add '\NoAutoSpacing' after '\begin{quiz}'.}%
    -    }{\relax}%
    +\AtEndPreamble{%
    +  \@ifpackageloaded{translator}{\moodle@internationaltrue}{}%
    +  \@ifpackageloaded{translations}{\moodle@internationaltrue}{}%
    +  % polyglossia "fakes" babel
    +  \@ifpackageloaded{polyglossia}{%
    +    \moodle@internationaltrue
    +    % The following is commented because \xpg@bloaded is set very late and must be expanded
    +    %\PassOptionsToPackage{\xpg@bloaded}{translator}
    +  }{
    +    \@ifpackageloaded{babel}{%
    +      \moodle@internationaltrue
    +      % The following is commented because some languages of babel,
    +      % like lithuanian, are unknown to translator. Instead we
    +      % copied the aliases below.
    +      %\PassOptionsToPackage{\bbl@loaded}{translator}%
    +    }{}%
    +  }%
    +  \ifmoodle@international
    +    % By default, we load and rely on "translator".
    +    % The package is simple and has limited dependencies.
    +    % Since we borrow the syntax of "translations",
    +    % the switch is easy: just "\usepackage{translations}"
    +    % in the preamble.
    +    %\RequirePackage{translations}%
    +    \@ifpackageloaded{translations}{}{%
    +      \RequirePackage{translator}%
    +      % Borrow the syntax from 'translations'
    +      \newcommand\DeclareTranslation[3]{\deftranslation[to=#1]{#2}{#3}}%
    +      \newcommand\DeclareTranslationFallback[2]{\deftranslation[to=fallback]{#1}{#2}}%
    +      \let\GetTranslation=\translate
    +      % Set a fall-back if a translation is unknown (usually English, see below)
    +      \languagepath{\languagename,fallback}%
    +      % Set aliases (most of them taken directly from translator.sty)
    +      \languagealias{afrikaans} {Afrikaans,Dutch}%
    +      \languagealias{american}  {AmericanEnglish,English}%
    +      \languagealias{austrian}  {Austrian1997,Austrian,German1997,German}%
    +      \languagealias{brazil}    {Brazilian,Portuguese}%
    +      \languagealias{brazilian} {Brazilian,Portuguese}%
    +      \languagealias{british}   {BritishEnglish,English}%
    +      \languagealias{catalan}   {Catalan}% unknown to translator
    +      \languagealias{canadian}  {Canadian,English}%
    +      \languagealias{canadien}  {Canadien,French}%
    +      \languagealias{croatian}  {Croatian}%
    +      \languagealias{czech}     {Czech}%
    +      \languagealias{danish}    {Danish}%
    +      \languagealias{dutch}     {Dutch}%
    +      \languagealias{english}   {English}%
    +      \languagealias{estonian}  {Estonian}%
    +      \languagealias{finnish}   {Finnish}%
    +      \languagealias{french}    {French}%
    +      \languagealias{german}    {German1997,German}%
    +      \languagealias{hungarian} {Hungarian}%
    +      \languagealias{icelandic} {Icelandic}%
    +      \languagealias{italian}   {Italian}%
    +      \languagealias{lithuanian}{Lithuanian}% unknown to translator
    +      \languagealias{magyar}    {Magyar,Hungarian}% added Hungarian
    +      \languagealias{naustrian} {Austrian,German}%
    +      \languagealias{ngerman}   {German}%
    +      \languagealias{norsk}     {Norsk}%
    +      \languagealias{norwegian} {Norsk}% for polyglossia
    +      \languagealias{nynorsk}   {Nynorsk,Norsk}%
    +      \languagealias{polish}    {Polish}%
    +      \languagealias{portuges}  {Portuguese}%
    +      \languagealias{portuguese}{Portuguese}%
    +      \languagealias{romanian}  {Romanian}%
    +      \languagealias{slovak}    {Slovak,Czech}% added Czech
    +      \languagealias{spanish}   {Spanish}%
    +      \languagealias{swedish}   {Swedish}%
    +      \languagealias{turkish}   {Turkish}%
    +      \languagealias{UKenglish} {BritishEnglish,English}%
    +      \languagealias{USenglish} {AmericanEnglish,English}%
    +    }%
    +    \DeclareTranslation{Catalan}{True}{Vertader}%
    +    \DeclareTranslation{Catalan}{False}{Fals}%
    +    %\DeclareTranslation{Catalan}{cloze}{}%
    +    %\DeclareTranslation{Catalan}{description}{}%
    +    %\DeclareTranslation{Catalan}{essay}{}%
    +    %\DeclareTranslation{Catalan}{matching}{}%
    +    %\DeclareTranslation{Catalan}{multi}{}%
    +    %\DeclareTranslation{Catalan}{numerical}{}%
    +    %\DeclareTranslation{Catalan}{shortanswer}{}%
    +    %\DeclareTranslation{Catalan}{truefalse}{}%
    +    %\DeclareTranslation{Catalan}{Shuffle}{}%
    +    %\DeclareTranslation{Catalan}{Single}{}%
    +    %\DeclareTranslation{Catalan}{marked out of}{}%
    +    %\DeclareTranslation{Catalan}{penalty}{}%
    +    %\DeclareTranslation{Catalan}{tags}{}%
    +    %\DeclareTranslation{Catalan}{All-or-nothing}{}%
    +    %\DeclareTranslation{Catalan}{Case-Sensitive}{}%
    +    %\DeclareTranslation{Catalan}{Case-Insensitive}{}%
    +    %\DeclareTranslation{Catalan}{Drag and drop}{}%
    +    %\DeclareTranslation{Catalan}{Information for graders}{}%
    +    %\DeclareTranslation{Catalan}{Response template}{}%
    +    %\DeclareTranslation{Catalan}{editor}{}%
    +    %\DeclareTranslation{Catalan}{editorfilepicker}{}%
    +    %\DeclareTranslation{Catalan}{plain}{}%
    +    %\DeclareTranslation{Catalan}{monospaced}{}%
    +    %\DeclareTranslation{Catalan}{noinline}{}%
    +    %\DeclareTranslation{Catalan}{Total of marks}{}%
    +    \DeclareTranslation{Croatian}{True}{To\v{c}no}%
    +    \DeclareTranslation{Croatian}{False}{Neto\v{c}no}%
    +    %\DeclareTranslation{Croatian}{cloze}{}%
    +    %\DeclareTranslation{Croatian}{description}{}%
    +    %\DeclareTranslation{Croatian}{essay}{}%
    +    %\DeclareTranslation{Croatian}{matching}{}%
    +    %\DeclareTranslation{Croatian}{multi}{}%
    +    %\DeclareTranslation{Croatian}{numerical}{}%
    +    %\DeclareTranslation{Croatian}{shortanswer}{}%
    +    %\DeclareTranslation{Croatian}{truefalse}{}%
    +    %\DeclareTranslation{Croatian}{Shuffle}{}%
    +    %\DeclareTranslation{Croatian}{Single}{}%
    +    %\DeclareTranslation{Croatian}{Multiple}{}%
    +    %\DeclareTranslation{Croatian}{marked out of}{}%
    +    %\DeclareTranslation{Croatian}{penalty}{}%
    +    %\DeclareTranslation{Croatian}{tags}{}%
    +    %\DeclareTranslation{Croatian}{All-or-nothing}{}%
    +    %\DeclareTranslation{Croatian}{Case-Sensitive}{}%
    +    %\DeclareTranslation{Croatian}{Case-Insensitive}{}%
    +    %\DeclareTranslation{Croatian}{Drag and drop}{}%
    +    %\DeclareTranslation{Croatian}{Information for graders}{}%
    +    %\DeclareTranslation{Croatian}{Response template}{}%
    +    %\DeclareTranslation{Croatian}{editor}{}%
    +    %\DeclareTranslation{Croatian}{editorfilepicker}{}%
    +    %\DeclareTranslation{Croatian}{plain}{}%
    +    %\DeclareTranslation{Croatian}{monospaced}{}%
    +    %\DeclareTranslation{Croatian}{noinline}{}%
    +    %\DeclareTranslation{Croatian}{Total of marks}{}%
    +    \DeclareTranslation{Czech}{True}{Pravda}%
    +    \DeclareTranslation{Czech}{False}{Nepravda}%
    +    %\DeclareTranslation{Czech}{cloze}{}%
    +    %\DeclareTranslation{Czech}{description}{}%
    +    %\DeclareTranslation{Czech}{essay}{}%
    +    %\DeclareTranslation{Czech}{matching}{}%
    +    %\DeclareTranslation{Czech}{multi}{}%
    +    %\DeclareTranslation{Czech}{numerical}{}%
    +    %\DeclareTranslation{Czech}{shortanswer}{}%
    +    %\DeclareTranslation{Czech}{truefalse}{}%
    +    %\DeclareTranslation{Czech}{Shuffle}{}%
    +    %\DeclareTranslation{Czech}{Single}{}%
    +    %\DeclareTranslation{Czech}{Multiple}{}%
    +    %\DeclareTranslation{Czech}{marked out of}{}%
    +    %\DeclareTranslation{Czech}{penalty}{}%
    +    %\DeclareTranslation{Czech}{tags}{}%
    +    %\DeclareTranslation{Czech}{All-or-nothing}{}%
    +    %\DeclareTranslation{Czech}{Case-Sensitive}{}%
    +    %\DeclareTranslation{Czech}{Case-Insensitive}{}%
    +    %\DeclareTranslation{Czech}{Drag and drop}{}%
    +    %\DeclareTranslation{Czech}{Information for graders}{}%
    +    %\DeclareTranslation{Czech}{Response template}{}%
    +    %\DeclareTranslation{Czech}{editor}{}%
    +    %\DeclareTranslation{Czech}{editorfilepicker}{}%
    +    %\DeclareTranslation{Czech}{plain}{}%
    +    %\DeclareTranslation{Czech}{monospaced}{}%
    +    %\DeclareTranslation{Czech}{noinline}{}%
    +    %\DeclareTranslation{Czech}{Total of marks}{}%
    +    \DeclareTranslation{Danish}{True}{Sandt}%
    +    \DeclareTranslation{Danish}{False}{Falsk}%
    +    %\DeclareTranslation{Danish}{cloze}{}%
    +    %\DeclareTranslation{Danish}{description}{}%
    +    %\DeclareTranslation{Danish}{essay}{}%
    +    %\DeclareTranslation{Danish}{matching}{}%
    +    %\DeclareTranslation{Danish}{multi}{}%
    +    %\DeclareTranslation{Danish}{numerical}{}%
    +    %\DeclareTranslation{Danish}{shortanswer}{}%
    +    %\DeclareTranslation{Danish}{truefalse}{}%
    +    %\DeclareTranslation{Danish}{Shuffle}{}%
    +    %\DeclareTranslation{Danish}{Single}{}%
    +    %\DeclareTranslation{Danish}{Multiple}{}%
    +    %\DeclareTranslation{Danish}{marked out of}{}%
    +    %\DeclareTranslation{Danish}{penalty}{}%
    +    %\DeclareTranslation{Danish}{tags}{}%
    +    %\DeclareTranslation{Danish}{All-or-nothing}{}%
    +    %\DeclareTranslation{Danish}{Case-Sensitive}{}%
    +    %\DeclareTranslation{Danish}{Case-Insensitive}{}%
    +    %\DeclareTranslation{Danish}{Drag and drop}{}%
    +    %\DeclareTranslation{Danish}{Information for graders}{}%
    +    %\DeclareTranslation{Danish}{Response template}{}%
    +    %\DeclareTranslation{Danish}{editor}{}%
    +    %\DeclareTranslation{Danish}{editorfilepicker}{}%
    +    %\DeclareTranslation{Danish}{plain}{}%
    +    %\DeclareTranslation{Danish}{monospaced}{}%
    +    %\DeclareTranslation{Danish}{noinline}{}%
    +    %\DeclareTranslation{Danish}{Total of marks}{}%
    +    \DeclareTranslation{Dutch}{True}{Waar}%
    +    \DeclareTranslation{Dutch}{False}{Niet waar}%
    +    %\DeclareTranslation{Dutch}{cloze}{}%
    +    %\DeclareTranslation{Dutch}{description}{}%
    +    %\DeclareTranslation{Dutch}{essay}{}%
    +    %\DeclareTranslation{Dutch}{matching}{}%
    +    %\DeclareTranslation{Dutch}{multi}{}%
    +    %\DeclareTranslation{Dutch}{numerical}{}%
    +    %\DeclareTranslation{Dutch}{shortanswer}{}%
    +    %\DeclareTranslation{Dutch}{truefalse}{}%
    +    %\DeclareTranslation{Dutch}{Shuffle}{}%
    +    %\DeclareTranslation{Dutch}{Single}{}%
    +    %\DeclareTranslation{Dutch}{Multiple}{}%
    +    %\DeclareTranslation{Dutch}{marked out of}{}%
    +    %\DeclareTranslation{Dutch}{penalty}{}%
    +    %\DeclareTranslation{Dutch}{tags}{}%
    +    %\DeclareTranslation{Dutch}{All-or-nothing}{}%
    +    %\DeclareTranslation{Dutch}{Case-Sensitive}{}%
    +    %\DeclareTranslation{Dutch}{Case-Insensitive}{}%
    +    %\DeclareTranslation{Dutch}{Drag and drop}{}%
    +    %\DeclareTranslation{Dutch}{Information for graders}{}%
    +    %\DeclareTranslation{Dutch}{Response template}{}%
    +    %\DeclareTranslation{Dutch}{editor}{}%
    +    %\DeclareTranslation{Dutch}{editorfilepicker}{}%
    +    %\DeclareTranslation{Dutch}{plain}{}%
    +    %\DeclareTranslation{Dutch}{monospaced}{}%
    +    %\DeclareTranslation{Dutch}{noinline}{}%
    +    %\DeclareTranslation{Dutch}{Total of marks}{}%
    +    \DeclareTranslation{English}{True}{True}%
    +    \DeclareTranslation{English}{False}{False}%
    +    \DeclareTranslation{English}{cloze}{Embedded answers}%
    +    \DeclareTranslation{English}{description}{Description}%
    +    \DeclareTranslation{English}{essay}{Essay}%
    +    \DeclareTranslation{English}{matching}{Matching}%
    +    \DeclareTranslation{English}{multi}{Multiple choice}%
    +    \DeclareTranslation{English}{numerical}{Numerical}%
    +    \DeclareTranslation{English}{shortanswer}{Short answer}%
    +    \DeclareTranslation{English}{truefalse}{True/False}%
    +    \DeclareTranslation{English}{Shuffle}{Shuffle}%
    +    \DeclareTranslation{English}{Single}{One answer only}%
    +    \DeclareTranslation{English}{Multiple}{Multiple answers allowed}%
    +    \DeclareTranslation{English}{marked out of}{marked out of}%
    +    \DeclareTranslation{English}{penalty}{penalty}%
    +    \DeclareTranslation{English}{tags}{tags}%
    +    \DeclareTranslation{English}{All-or-nothing}{All-or-nothing}%
    +    \DeclareTranslation{English}{Case-Sensitive}{Case-Sensitive}%
    +    \DeclareTranslation{English}{Case-Insensitive}{Case-Insensitive}%
    +    \DeclareTranslation{English}{Drag and drop}{Drag and drop}%
    +    \DeclareTranslation{English}{Information for graders}{Information for graders}%
    +    \DeclareTranslation{English}{Response template}{Response template}%
    +    \DeclareTranslation{English}{editor}{HTML editor}%
    +    \DeclareTranslation{English}{editorfilepicker}{HTML editor + file picker}%
    +    \DeclareTranslation{English}{plain}{Plain text}%
    +    \DeclareTranslation{English}{monospaced}{Plain text, monospaced font}%
    +    \DeclareTranslation{English}{noinline}{File picker}%
    +    \DeclareTranslation{English}{Total of marks}{Total of marks}%
    +    \DeclareTranslation{Estonian}{True}{T\~oene}%
    +    \DeclareTranslation{Estonian}{False}{V\"a\"ar}%
    +    %\DeclareTranslation{Estonian}{cloze}{}%
    +    %\DeclareTranslation{Estonian}{description}{}%
    +    %\DeclareTranslation{Estonian}{essay}{}%
    +    %\DeclareTranslation{Estonian}{matching}{}%
    +    %\DeclareTranslation{Estonian}{multi}{}%
    +    %\DeclareTranslation{Estonian}{numerical}{}%
    +    %\DeclareTranslation{Estonian}{shortanswer}{}%
    +    %\DeclareTranslation{Estonian}{truefalse}{}%
    +    %\DeclareTranslation{Estonian}{Shuffle}{}%
    +    %\DeclareTranslation{Estonian}{Single}{}%
    +    %\DeclareTranslation{Estonian}{Multiple}{}%
    +    %\DeclareTranslation{Estonian}{marked out of}{}%
    +    %\DeclareTranslation{Estonian}{penalty}{}%
    +    %\DeclareTranslation{Estonian}{tags}{}%
    +    %\DeclareTranslation{Estonian}{All-or-nothing}{}%
    +    %\DeclareTranslation{Estonian}{Case-Sensitive}{}%
    +    %\DeclareTranslation{Estonian}{Case-Insensitive}{}%
    +    %\DeclareTranslation{Estonian}{Drag and drop}{}%
    +    %\DeclareTranslation{Estonian}{Information for graders}{}%
    +    %\DeclareTranslation{Estonian}{Response template}{}%
    +    %\DeclareTranslation{Estonian}{editor}{}%
    +    %\DeclareTranslation{Estonian}{editorfilepicker}{}%
    +    %\DeclareTranslation{Estonian}{plain}{}%
    +    %\DeclareTranslation{Estonian}{monospaced}{}%
    +    %\DeclareTranslation{Estonian}{noinline}{}%
    +    %\DeclareTranslation{Estonian}{Total of marks}{}%
    +    \DeclareTranslation{Finnish}{True}{Tosi}%
    +    \DeclareTranslation{Finnish}{False}{Ep\"atosi}%
    +    %\DeclareTranslation{Finnish}{cloze}{}%
    +    %\DeclareTranslation{Finnish}{description}{}%
    +    %\DeclareTranslation{Finnish}{essay}{}%
    +    %\DeclareTranslation{Finnish}{matching}{}%
    +    %\DeclareTranslation{Finnish}{multi}{}%
    +    %\DeclareTranslation{Finnish}{numerical}{}%
    +    %\DeclareTranslation{Finnish}{shortanswer}{}%
    +    %\DeclareTranslation{Finnish}{truefalse}{}%
    +    %\DeclareTranslation{Finnish}{Shuffle}{}%
    +    %\DeclareTranslation{Finnish}{Single}{}%
    +    %\DeclareTranslation{Finnish}{Multiple}{}%
    +    %\DeclareTranslation{Finnish}{marked out of}{}%
    +    %\DeclareTranslation{Finnish}{penalty}{}%
    +    %\DeclareTranslation{Finnish}{tags}{}%
    +    %\DeclareTranslation{Finnish}{All-or-nothing}{}%
    +    %\DeclareTranslation{Finnish}{Case-Sensitive}{}%
    +    %\DeclareTranslation{Finnish}{Case-Insensitive}{}%
    +    %\DeclareTranslation{Finnish}{Drag and drop}{}%
    +    %\DeclareTranslation{Finnish}{Information for graders}{}%
    +    %\DeclareTranslation{Finnish}{Response template}{}%
    +    %\DeclareTranslation{Finnish}{editor}{}%
    +    %\DeclareTranslation{Finnish}{editorfilepicker}{}%
    +    %\DeclareTranslation{Finnish}{plain}{}%
    +    %\DeclareTranslation{Finnish}{monospaced}{}%
    +    %\DeclareTranslation{Finnish}{noinline}{}%
    +    %\DeclareTranslation{Finnish}{Total of marks}{}%
    +    \DeclareTranslation{French}{True}{Vrai}%
    +    \DeclareTranslation{French}{False}{Faux}%
    +    \DeclareTranslation{French}{cloze}{R\'eponses int\'egr\'ees}%
    +    \DeclareTranslation{French}{description}{Description}%
    +    \DeclareTranslation{French}{essay}{Composition}%
    +    \DeclareTranslation{French}{matching}{Appariement}%
    +    \DeclareTranslation{French}{multi}{QCM}%
    +    \DeclareTranslation{French}{numerical}{Num\'erique}%
    +    \DeclareTranslation{French}{shortanswer}{R\'eponse courte}%
    +    \DeclareTranslation{French}{truefalse}{Vrai/Faux}%
    +    \DeclareTranslation{French}{Shuffle}{M\'elanger}%
    +    \DeclareTranslation{French}{Single}{R\'eponse unique}%
    +    \DeclareTranslation{French}{Multiple}{Plusieurs r\'eponses possibles}%
    +    \DeclareTranslation{French}{marked out of}{not\'e sur}%
    +    \DeclareTranslation{French}{penalty}{p\'enalit\'e}%
    +    \DeclareTranslation{French}{tags}{\'etiquettes}%
    +    \DeclareTranslation{French}{All-or-nothing}{Tout ou rien}%
    +    \DeclareTranslation{French}{Case-Sensitive}{Sensible \`a la casse}%
    +    \DeclareTranslation{French}{Case-Insensitive}{Insensible \`a la casse}%
    +    \DeclareTranslation{French}{Drag and drop}{Glisser-d\'eposer}%
    +    \DeclareTranslation{French}{Information for graders}{Information pour les évaluateurs}%
    +    \DeclareTranslation{French}{Response template}{Mod\`ele de r\'eponse}%
    +    \DeclareTranslation{French}{editor}{\'Editeur HTML}%
    +    \DeclareTranslation{French}{editorfilepicker}{\'Editeur \HTML\ + s\'electeur de fichier}%
    +    \DeclareTranslation{French}{plain}{\'Editeur texte}%
    +    \DeclareTranslation{French}{monospaced}{\'Editeur texte, police \`a chasse fixe}%
    +    \DeclareTranslation{French}{noinline}{S\'electeur de fichier}%
    +    \DeclareTranslation{French}{Total of marks}{Total des points}%
    +    \DeclareTranslation{German}{True}{Wahr}%
    +    \DeclareTranslation{German}{False}{Falsch}%
    +    \DeclareTranslation{German}{cloze}{L\"uckentext}%
    +    \DeclareTranslation{German}{description}{Beschreibung}%
    +    \DeclareTranslation{German}{essay}{Freitext}%
    +    \DeclareTranslation{German}{matching}{Zuordnung}%
    +    \DeclareTranslation{German}{multi}{Multiple-Choice}%
    +    \DeclareTranslation{German}{numerical}{Numerisch}%
    +    \DeclareTranslation{German}{shortanswer}{Kurzantwort}%
    +    \DeclareTranslation{German}{truefalse}{Wahr/Falsch}%
    +    \DeclareTranslation{German}{Shuffle}{Mischen}%
    +    \DeclareTranslation{German}{Single}{Nur eine Antwort erlaubt}%
    +    \DeclareTranslation{German}{Multiple}{Mehrere Antworten erlaubt}%
    +    \DeclareTranslation{German}{marked out of}{Punkte:}%
    +    \DeclareTranslation{German}{penalty}{Abzug}%
    +    \DeclareTranslation{German}{tags}{Tags}%
    +    \DeclareTranslation{German}{All-or-nothing}{Alles-oder-nichts}%
    +    \DeclareTranslation{German}{Case-Sensitive}{Gro\ss-/Kleinschreibung muss stimmen}%
    +    \DeclareTranslation{German}{Case-Insensitive}{Gro\ss-/Kleinschreibung unwichtig}%
    +    \DeclareTranslation{German}{Drag and drop}{Drag-and-Drop}%
    +    \DeclareTranslation{German}{Information for graders}{Information zur Bewertung}%
    +    \DeclareTranslation{German}{Response template}{Antwortvorlage}%
    +    \DeclareTranslation{German}{editor}{HTML Editor}%
    +    \DeclareTranslation{German}{editorfilepicker}{HTML Editor mit Dateiauswahl}%
    +    \DeclareTranslation{German}{plain}{Unformatierter Text}%
    +    \DeclareTranslation{German}{monospaced}{Unformatierter Text, Schriftart mit fester Laufweite}%
    +    \DeclareTranslation{German}{noinline}{Kein Textfeld}%
    +    \DeclareTranslation{German}{Total of marks}{Gesamtsumme der Punkte}%
    +    \DeclareTranslation{Hungarian}{True}{Igaz}%
    +    \DeclareTranslation{Hungarian}{False}{Hamis}%
    +    %\DeclareTranslation{Hungarian}{cloze}{}%
    +    %\DeclareTranslation{Hungarian}{description}{}%
    +    %\DeclareTranslation{Hungarian}{essay}{}%
    +    %\DeclareTranslation{Hungarian}{matching}{}%
    +    %\DeclareTranslation{Hungarian}{multi}{}%
    +    %\DeclareTranslation{Hungarian}{numerical}{}%
    +    %\DeclareTranslation{Hungarian}{shortanswer}{}%
    +    %\DeclareTranslation{Hungarian}{truefalse}{}%
    +    %\DeclareTranslation{Hungarian}{Shuffle}{}%
    +    %\DeclareTranslation{Hungarian}{Single}{}%
    +    %\DeclareTranslation{Hungarian}{Multiple}{}%
    +    %\DeclareTranslation{Hungarian}{marked out of}{}%
    +    %\DeclareTranslation{Hungarian}{penalty}{}%
    +    %\DeclareTranslation{Hungarian}{tags}{}%
    +    %\DeclareTranslation{Hungarian}{All-or-nothing}{}%
    +    %\DeclareTranslation{Hungarian}{Case-Sensitive}{}%
    +    %\DeclareTranslation{Hungarian}{Case-Insensitive}{}%
    +    %\DeclareTranslation{Hungarian}{Drag and drop}{}%
    +    %\DeclareTranslation{Hungarian}{Information for graders}{}%
    +    %\DeclareTranslation{Hungarian}{Response template}{}%
    +    %\DeclareTranslation{Hungarian}{editor}{}%
    +    %\DeclareTranslation{Hungarian}{editorfilepicker}{}%
    +    %\DeclareTranslation{Hungarian}{plain}{}%
    +    %\DeclareTranslation{Hungarian}{monospaced}{}%
    +    %\DeclareTranslation{Hungarian}{noinline}{}%
    +    %\DeclareTranslation{Hungarian}{Total of marks}{}%
    +    \DeclareTranslation{Icelandic}{True}{R\'ett}%
    +    \DeclareTranslation{Icelandic}{False}{Rangt}%
    +    %\DeclareTranslation{Icelandic}{cloze}{}%
    +    %\DeclareTranslation{Icelandic}{description}{}%
    +    %\DeclareTranslation{Icelandic}{essay}{}%
    +    %\DeclareTranslation{Icelandic}{matching}{}%
    +    %\DeclareTranslation{Icelandic}{multi}{}%
    +    %\DeclareTranslation{Icelandic}{numerical}{}%
    +    %\DeclareTranslation{Icelandic}{shortanswer}{}%
    +    %\DeclareTranslation{Icelandic}{truefalse}{}%
    +    %\DeclareTranslation{Icelandic}{Shuffle}{}%
    +    %\DeclareTranslation{Icelandic}{Single}{}%
    +    %\DeclareTranslation{Icelandic}{Multiple}{}%
    +    %\DeclareTranslation{Icelandic}{marked out of}{}%
    +    %\DeclareTranslation{Icelandic}{penalty}{}%
    +    %\DeclareTranslation{Icelandic}{tags}{}%
    +    %\DeclareTranslation{Icelandic}{All-or-nothing}{}%
    +    %\DeclareTranslation{Icelandic}{Case-Sensitive}{}%
    +    %\DeclareTranslation{Icelandic}{Case-Insensitive}{}%
    +    %\DeclareTranslation{Icelandic}{Drag and drop}{}%
    +    %\DeclareTranslation{Icelandic}{Information for graders}{}%
    +    %\DeclareTranslation{Icelandic}{Response template}{}%
    +    %\DeclareTranslation{Icelandic}{editor}{}%
    +    %\DeclareTranslation{Icelandic}{editorfilepicker}{}%
    +    %\DeclareTranslation{Icelandic}{plain}{}%
    +    %\DeclareTranslation{Icelandic}{monospaced}{}%
    +    %\DeclareTranslation{Icelandic}{noinline}{}%
    +    %\DeclareTranslation{Icelandic}{Total of marks}{}%
    +    \DeclareTranslation{Italian}{True}{Vero}%
    +    \DeclareTranslation{Italian}{False}{Falso}%
    +    \DeclareTranslation{Italian}{cloze}{Risposte inglobate}%
    +    \DeclareTranslation{Italian}{description}{Descrizione}%
    +    \DeclareTranslation{Italian}{essay}{Tema libero}%
    +    \DeclareTranslation{Italian}{matching}{Corrispondenza}%
    +    \DeclareTranslation{Italian}{multi}{Risposta multipla}%
    +    \DeclareTranslation{Italian}{numerical}{Numerica}%
    +    \DeclareTranslation{Italian}{shortanswer}{Risposta breve}%
    +    \DeclareTranslation{Italian}{truefalse}{Vero/Falso}%
    +    \DeclareTranslation{Italian}{Shuffle}{Ordine casuale}%
    +    \DeclareTranslation{Italian}{Single}{Una sola alternativa}%
    +    \DeclareTranslation{Italian}{Multiple}{Pi\`u alternative}%
    +    \DeclareTranslation{Italian}{marked out of}{punteggio max.}%
    +    \DeclareTranslation{Italian}{penalty}{penalit\`a}%
    +    \DeclareTranslation{Italian}{tags}{etichette}%
    +    \DeclareTranslation{Italian}{All-or-nothing}{Tutto o niente}%
    +    \DeclareTranslation{Italian}{Case-Sensitive}{Sensibile alle maiuscole}%
    +    \DeclareTranslation{Italian}{Case-Insensitive}{Maiuscolo/minuscolo indifferente}%
    +    \DeclareTranslation{Italian}{Drag and drop}{Drag and drop}%
    +    \DeclareTranslation{Italian}{Information for graders}{Informazioni per i valutatori}%
    +    \DeclareTranslation{Italian}{Response template}{Modello di risposta}%
    +    \DeclareTranslation{Italian}{editor}{Editor HTML}%
    +    \DeclareTranslation{Italian}{editorfilepicker}{Editor \HTML\ con file picker}%
    +    \DeclareTranslation{Italian}{plain}{Testo semplice}%
    +    \DeclareTranslation{Italian}{monospaced}{Testo semplice, caratteri a spaziatura fissa}%
    +    \DeclareTranslation{Italian}{noinline}{Solo file picker}%
    +    \DeclareTranslation{Italian}{Total of marks}{Punteggio complessivo}%
    +    \DeclareTranslation{Lithuanian}{True}{Tiesa}%
    +    \DeclareTranslation{Lithuanian}{False}{Netiesa}%
    +    %\DeclareTranslation{Lithuanian}{cloze}{}%
    +    %\DeclareTranslation{Lithuanian}{description}{}%
    +    %\DeclareTranslation{Lithuanian}{essay}{}%
    +    %\DeclareTranslation{Lithuanian}{matching}{}%
    +    %\DeclareTranslation{Lithuanian}{multi}{}%
    +    %\DeclareTranslation{Lithuanian}{numerical}{}%
    +    %\DeclareTranslation{Lithuanian}{shortanswer}{}%
    +    %\DeclareTranslation{Lithuanian}{truefalse}{}%
    +    %\DeclareTranslation{Lithuanian}{Shuffle}{}%
    +    %\DeclareTranslation{Lithuanian}{Single}{}%
    +    %\DeclareTranslation{Lithuanian}{Multiple}{}%
    +    %\DeclareTranslation{Lithuanian}{marked out of}{}%
    +    %\DeclareTranslation{Lithuanian}{penalty}{}%
    +    %\DeclareTranslation{Lithuanian}{tags}{}%
    +    %\DeclareTranslation{Lithuanian}{All-or-nothing}{}%
    +    %\DeclareTranslation{Lithuanian}{Case-Sensitive}{}%
    +    %\DeclareTranslation{Lithuanian}{Case-Insensitive}{}%
    +    %\DeclareTranslation{Lithuanian}{Drag and drop}{}%
    +    %\DeclareTranslation{Lithuanian}{Information for graders}{}%
    +    %\DeclareTranslation{Lithuanian}{Response template}{}%
    +    %\DeclareTranslation{Lithuanian}{editor}{}%
    +    %\DeclareTranslation{Lithuanian}{editorfilepicker}{}%
    +    %\DeclareTranslation{Lithuanian}{plain}{}%
    +    %\DeclareTranslation{Lithuanian}{monospaced}{}%
    +    %\DeclareTranslation{Lithuanian}{noinline}{}%
    +    %\DeclareTranslation{Lithuanian}{Total of marks}{}%
    +    \DeclareTranslation{Norsk}{True}{Riktig}%
    +    \DeclareTranslation{Norsk}{False}{Feil}%
    +    %\DeclareTranslation{Norsk}{cloze}{}%
    +    %\DeclareTranslation{Norsk}{description}{}%
    +    %\DeclareTranslation{Norsk}{essay}{}%
    +    %\DeclareTranslation{Norsk}{matching}{}%
    +    %\DeclareTranslation{Norsk}{multi}{}%
    +    %\DeclareTranslation{Norsk}{numerical}{}%
    +    %\DeclareTranslation{Norsk}{shortanswer}{}%
    +    %\DeclareTranslation{Norsk}{truefalse}{}%
    +    %\DeclareTranslation{Norsk}{Shuffle}{}%
    +    %\DeclareTranslation{Norsk}{Single}{}%
    +    %\DeclareTranslation{Norsk}{Multiple}{}%
    +    %\DeclareTranslation{Norsk}{marked out of}{}%
    +    %\DeclareTranslation{Norsk}{penalty}{}%
    +    %\DeclareTranslation{Norsk}{tags}{}%
    +    %\DeclareTranslation{Norsk}{All-or-nothing}{}%
    +    %\DeclareTranslation{Norsk}{Case-Sensitive}{}%
    +    %\DeclareTranslation{Norsk}{Case-Insensitive}{}%
    +    %\DeclareTranslation{Norsk}{Drag and drop}{}%
    +    %\DeclareTranslation{Norsk}{Information for graders}{}%
    +    %\DeclareTranslation{Norsk}{Response template}{}%
    +    %\DeclareTranslation{Norsk}{editor}{}%
    +    %\DeclareTranslation{Norsk}{editorfilepicker}{}%
    +    %\DeclareTranslation{Norsk}{plain}{}%
    +    %\DeclareTranslation{Norsk}{monospaced}{}%
    +    %\DeclareTranslation{Norsk}{noinline}{}%
    +    %\DeclareTranslation{Norsk}{Total of marks}{}%
    +    \DeclareTranslation{Polish}{True}{Prawda}%
    +    \DeclareTranslation{Polish}{False}{Fa\l sz}%
    +    %\DeclareTranslation{Polish}{cloze}{}%
    +    %\DeclareTranslation{Polish}{description}{}%
    +    %\DeclareTranslation{Polish}{essay}{}%
    +    %\DeclareTranslation{Polish}{matching}{}%
    +    %\DeclareTranslation{Polish}{multi}{}%
    +    %\DeclareTranslation{Polish}{numerical}{}%
    +    %\DeclareTranslation{Polish}{shortanswer}{}%
    +    %\DeclareTranslation{Polish}{truefalse}{}%
    +    %\DeclareTranslation{Polish}{Shuffle}{}%
    +    %\DeclareTranslation{Polish}{Single}{}%
    +    %\DeclareTranslation{Polish}{Multiple}{}%
    +    %\DeclareTranslation{Polish}{marked out of}{}%
    +    %\DeclareTranslation{Polish}{penalty}{}%
    +    %\DeclareTranslation{Polish}{tags}{}%
    +    %\DeclareTranslation{Polish}{All-or-nothing}{}%
    +    %\DeclareTranslation{Polish}{Case-Sensitive}{}%
    +    %\DeclareTranslation{Polish}{Case-Insensitive}{}%
    +    %\DeclareTranslation{Polish}{Drag and drop}{}%
    +    %\DeclareTranslation{Polish}{Information for graders}{}%
    +    %\DeclareTranslation{Polish}{Response template}{}%
    +    %\DeclareTranslation{Polish}{editor}{}%
    +    %\DeclareTranslation{Polish}{editorfilepicker}{}%
    +    %\DeclareTranslation{Polish}{plain}{}%
    +    %\DeclareTranslation{Polish}{monospaced}{}%
    +    %\DeclareTranslation{Polish}{noinline}{}%
    +    %\DeclareTranslation{Polish}{Total of marks}{}%
    +    \DeclareTranslation{Portuguese}{True}{Verdadeiro}%
    +    \DeclareTranslation{Portuguese}{False}{Falso}%
    +    %\DeclareTranslation{Portuguese}{cloze}{}%
    +    %\DeclareTranslation{Portuguese}{description}{}%
    +    %\DeclareTranslation{Portuguese}{essay}{}%
    +    %\DeclareTranslation{Portuguese}{matching}{}%
    +    %\DeclareTranslation{Portuguese}{multi}{}%
    +    %\DeclareTranslation{Portuguese}{numerical}{}%
    +    %\DeclareTranslation{Portuguese}{shortanswer}{}%
    +    %\DeclareTranslation{Portuguese}{truefalse}{}%
    +    %\DeclareTranslation{Portuguese}{Shuffle}{}%
    +    %\DeclareTranslation{Portuguese}{Single}{}%
    +    %\DeclareTranslation{Portuguese}{Multiple}{}%
    +    %\DeclareTranslation{Portuguese}{marked out of}{}%
    +    %\DeclareTranslation{Portuguese}{penalty}{}%
    +    %\DeclareTranslation{Portuguese}{tags}{}%
    +    %\DeclareTranslation{Portuguese}{All-or-nothing}{}%
    +    %\DeclareTranslation{Portuguese}{Case-Sensitive}{}%
    +    %\DeclareTranslation{Portuguese}{Case-Insensitive}{}%
    +    %\DeclareTranslation{Portuguese}{Drag and drop}{}%
    +    %\DeclareTranslation{Portuguese}{Information for graders}{}%
    +    %\DeclareTranslation{Portuguese}{Response template}{}%
    +    %\DeclareTranslation{Portuguese}{editor}{}%
    +    %\DeclareTranslation{Portuguese}{editorfilepicker}{}%
    +    %\DeclareTranslation{Portuguese}{plain}{}%
    +    %\DeclareTranslation{Portuguese}{monospaced}{}%
    +    %\DeclareTranslation{Portuguese}{noinline}{}%
    +    %\DeclareTranslation{Portuguese}{Total of marks}{}%
    +    \DeclareTranslation{Romanian}{True}{Adev\u{a}rat}%
    +    \DeclareTranslation{Romanian}{False}{Fals}%
    +    %\DeclareTranslation{Romanian}{cloze}{}%
    +    %\DeclareTranslation{Romanian}{description}{}%
    +    %\DeclareTranslation{Romanian}{essay}{}%
    +    %\DeclareTranslation{Romanian}{matching}{}%
    +    %\DeclareTranslation{Romanian}{multi}{}%
    +    %\DeclareTranslation{Romanian}{numerical}{}%
    +    %\DeclareTranslation{Romanian}{shortanswer}{}%
    +    %\DeclareTranslation{Romanian}{truefalse}{}%
    +    %\DeclareTranslation{Romanian}{Shuffle}{}%
    +    %\DeclareTranslation{Romanian}{Single}{}%
    +    %\DeclareTranslation{Romanian}{Multiple}{}%
    +    %\DeclareTranslation{Romanian}{marked out of}{}%
    +    %\DeclareTranslation{Romanian}{penalty}{}%
    +    %\DeclareTranslation{Romanian}{tags}{}%
    +    %\DeclareTranslation{Romanian}{All-or-nothing}{}%
    +    %\DeclareTranslation{Romanian}{Case-Sensitive}{}%
    +    %\DeclareTranslation{Romanian}{Case-Insensitive}{}%
    +    %\DeclareTranslation{Romanian}{Drag and drop}{}%
    +    %\DeclareTranslation{Romanian}{Information for graders}{}%
    +    %\DeclareTranslation{Romanian}{Response template}{}%
    +    %\DeclareTranslation{Romanian}{editor}{}%
    +    %\DeclareTranslation{Romanian}{editorfilepicker}{}%
    +    %\DeclareTranslation{Romanian}{plain}{}%
    +    %\DeclareTranslation{Romanian}{monospaced}{}%
    +    %\DeclareTranslation{Romanian}{noinline}{}%
    +    %\DeclareTranslation{Romanian}{Total of marks}{}%
    +    \DeclareTranslation{Spanish}{True}{Verdadero}%
    +    \DeclareTranslation{Spanish}{False}{Falso}%
    +    \DeclareTranslation{Spanish}{cloze}{Respuestas anidadas}%
    +    \DeclareTranslation{Spanish}{description}{Descripci\'on}%
    +    \DeclareTranslation{Spanish}{essay}{Ensayo}%
    +    \DeclareTranslation{Spanish}{matching}{Emparejamiento}%
    +    \DeclareTranslation{Spanish}{multi}{Opci\'on m\'ultiple}%
    +    \DeclareTranslation{Spanish}{numerical}{Num\'erica}%
    +    \DeclareTranslation{Spanish}{shortanswer}{Respuesta corta}%
    +    \DeclareTranslation{Spanish}{truefalse}{Verdadero/Falso}%
    +    \DeclareTranslation{Spanish}{Shuffle}{Barajar al azar}%
    +    \DeclareTranslation{Spanish}{Single}{S\'olo una respuesta}%
    +    \DeclareTranslation{Spanish}{Multiple}{Se permiten varias respuestas}%
    +    \DeclareTranslation{Spanish}{marked out of}{Punt\'ua como}%
    +    \DeclareTranslation{Spanish}{penalty}{penalizaci\'on}%
    +    \DeclareTranslation{Spanish}{tags}{marcas}%
    +    \DeclareTranslation{Spanish}{All-or-nothing}{Todo o nada}%
    +    \DeclareTranslation{Spanish}{Case-Sensitive}{May\'usculas y min\'usculas deben coincidir}%
    +    \DeclareTranslation{Spanish}{Case-Insensitive}{Igual may\'usculas que min\'usculas}%
    +    \DeclareTranslation{Spanish}{Drag and drop}{Arrastrar y soltar}%
    +    \DeclareTranslation{Spanish}{Information for graders}{Informaci\'on para evaluadores}%
    +    \DeclareTranslation{Spanish}{Response template}{Plantilla de respuesta}%
    +    \DeclareTranslation{Spanish}{editor}{Editor HTML}%
    +    \DeclareTranslation{Spanish}{editorfilepicker}{Editor \HTML\ con selector de archivos}%
    +    \DeclareTranslation{Spanish}{plain}{Texto sin formato}%
    +    \DeclareTranslation{Spanish}{monospaced}{Texto sin formato, tipografía monoespaciada}%
    +    \DeclareTranslation{Spanish}{noinline}{Sin texto}%
    +    \DeclareTranslation{Spanish}{Total of marks}{Total de puntos}%
    +    \DeclareTranslation{Swedish}{True}{Sant}%
    +    \DeclareTranslation{Swedish}{False}{Falskt}%
    +    %\DeclareTranslation{Swedish}{cloze}{}%
    +    %\DeclareTranslation{Swedish}{description}{}%
    +    %\DeclareTranslation{Swedish}{essay}{}%
    +    %\DeclareTranslation{Swedish}{matching}{}%
    +    %\DeclareTranslation{Swedish}{multi}{}%
    +    %\DeclareTranslation{Swedish}{numerical}{}%
    +    %\DeclareTranslation{Swedish}{shortanswer}{}%
    +    %\DeclareTranslation{Swedish}{truefalse}{}%
    +    %\DeclareTranslation{Swedish}{Shuffle}{}%
    +    %\DeclareTranslation{Swedish}{Single}{}%
    +    %\DeclareTranslation{Swedish}{Multiple}{}%
    +    %\DeclareTranslation{Swedish}{marked out of}{}%
    +    %\DeclareTranslation{Swedish}{penalty}{}%
    +    %\DeclareTranslation{Swedish}{tags}{}%
    +    %\DeclareTranslation{Swedish}{All-or-nothing}{}%
    +    %\DeclareTranslation{Swedish}{Case-Sensitive}{}%
    +    %\DeclareTranslation{Swedish}{Case-Insensitive}{}%
    +    %\DeclareTranslation{Swedish}{Drag and drop}{}%
    +    %\DeclareTranslation{Swedish}{Information for graders}{}%
    +    %\DeclareTranslation{Swedish}{Response template}{}%
    +    %\DeclareTranslation{Swedish}{editor}{}%
    +    %\DeclareTranslation{Swedish}{editorfilepicker}{}%
    +    %\DeclareTranslation{Swedish}{plain}{}%
    +    %\DeclareTranslation{Swedish}{monospaced}{}%
    +    %\DeclareTranslation{Swedish}{noinline}{}%
    +    %\DeclareTranslation{Swedish}{Total of marks}{}%
    +    \DeclareTranslation{Turkish}{True}{Do\u{g}ru}%
    +    \DeclareTranslation{Turkish}{False}{Yanl\i \c{s}}%
    +    %\DeclareTranslation{Turkish}{cloze}{}%
    +    %\DeclareTranslation{Turkish}{description}{}%
    +    %\DeclareTranslation{Turkish}{essay}{}%
    +    %\DeclareTranslation{Turkish}{matching}{}%
    +    %\DeclareTranslation{Turkish}{multi}{}%
    +    %\DeclareTranslation{Turkish}{numerical}{}%
    +    %\DeclareTranslation{Turkish}{shortanswer}{}%
    +    %\DeclareTranslation{Turkish}{truefalse}{}%
    +    %\DeclareTranslation{Turkish}{Shuffle}{}%
    +    %\DeclareTranslation{Turkish}{Single}{}%
    +    %\DeclareTranslation{Turkish}{Multiple}{}%
    +    %\DeclareTranslation{Turkish}{marked out of}{}%
    +    %\DeclareTranslation{Turkish}{penalty}{}%
    +    %\DeclareTranslation{Turkish}{tags}{}%
    +    %\DeclareTranslation{Turkish}{All-or-nothing}{}%
    +    %\DeclareTranslation{Turkish}{Case-Sensitive}{}%
    +    %\DeclareTranslation{Turkish}{Case-Insensitive}{}%
    +    %\DeclareTranslation{Turkish}{Drag and drop}{}%
    +    %\DeclareTranslation{Turkish}{Information for graders}{}%
    +    %\DeclareTranslation{Turkish}{Response template}{}%
    +    %\DeclareTranslation{Turkish}{editor}{}%
    +    %\DeclareTranslation{Turkish}{editorfilepicker}{}%
    +    %\DeclareTranslation{Turkish}{plain}{}%
    +    %\DeclareTranslation{Turkish}{monospaced}{}%
    +    %\DeclareTranslation{Turkish}{noinline}{}%
    +    %\DeclareTranslation{Turkish}{Total of marks}{}%
    +  \else% neither babel nor polyglossia loaded
    +    \newcommand\DeclareTranslationFallback[2]{\csdef{moodle@fallback@#1}{#2}}% Save fallback keys
    +    \def\GetTranslation#1{\csuse{moodle@fallback@#1}}% Use fallback keys
       \fi
    +  \DeclareTranslationFallback{True}{True}%
    +  \DeclareTranslationFallback{False}{False}%
    +  \DeclareTranslationFallback{cloze}{Embedded answers}%
    +  \DeclareTranslationFallback{description}{Description}%
    +  \DeclareTranslationFallback{essay}{Essay}%
    +  \DeclareTranslationFallback{matching}{Matching}%
    +  \DeclareTranslationFallback{multi}{Multiple choice}%
    +  \DeclareTranslationFallback{numerical}{Numerical}%
    +  \DeclareTranslationFallback{shortanswer}{Short answer}%
    +  \DeclareTranslationFallback{truefalse}{True/False}%
    +  \DeclareTranslationFallback{Shuffle}{Shuffle}%
    +  \DeclareTranslationFallback{Single}{One answer only}%
    +  \DeclareTranslationFallback{Multiple}{Multiple answers allowed}%
    +  \DeclareTranslationFallback{marked out of}{marked out of}%
    +  \DeclareTranslationFallback{penalty}{penalty}%
    +  \DeclareTranslationFallback{tags}{tags}%
    +  \DeclareTranslationFallback{All-or-nothing}{All-or-nothing}%
    +  \DeclareTranslationFallback{Case-Sensitive}{Case-Sensitive}%
    +  \DeclareTranslationFallback{Case-Insensitive}{Case-Insensitive}%
    +  \DeclareTranslationFallback{Drag and drop}{Drag and drop}%
    +  \DeclareTranslationFallback{Information for graders}{Information for graders}%
    +  \DeclareTranslationFallback{Response template}{Response template}%
    +  \DeclareTranslationFallback{editor}{HTML editor}%
    +  \DeclareTranslationFallback{editorfilepicker}{HTML editor + file picker}%
    +  \DeclareTranslationFallback{plain}{Plain text}%
    +  \DeclareTranslationFallback{monospaced}{Plain text, monospaced font}%
    +  \DeclareTranslationFallback{noinline}{File picker}%
    +  \DeclareTranslationFallback{Total of marks}{Total of marks}%
     }%
     %    \end{macrocode}
    -% 
     %
    +% Users of the |babel| package loaded with specific options may experience problems
    +% related to active characters and shorthands. We tell the problems and solutions we know.
    +%    \begin{macrocode}
    +\AtBeginDocument{%
    +  \@ifpackageloaded{babel}{%
    +    \@ifundefined{bbl@loaded}{}{% polyglossia fakes babel
    +      \forcsvlist{\listadd\moodle@babel@german@list}{german,austrian,swissgerman,swissgerman.toss,ngerman,naustrian,nswissgerman,nswissgerman.toss}%
    +      \forcsvlist{\listadd\moodle@babel@french@list}{acadian,french,frenchb,francais}%
    +      \ifPDFTeX
    +        \def\moodle@babel@french@warn{%
    +          \PackageWarning{moodle}{Be careful when using pdflatex, moodle, and the
    +            babel package loaded with a French-related option. Autospacing
    +            yields undesired symbols in the XML. Here are three workarounds:
    +            \MessageBreak 1) compile with xelatex/lualatex,\MessageBreak 2)
    +            add `\NoAutoSpacing' after `\begin{quiz}', or\MessageBreak 3)
    +            avoid the babel option.^^J}}%
    +        \def\moodle@babel@german@warn{%
    +          \PackageWarning{moodle}{Be careful when using pdflatex, moodle, and
    +            the babel package loaded with a German-related option. The symbol
    +            `"' is made active and your umlauts will confuse moodle. Here are
    +            three workarounds:\MessageBreak 1) compile with xelatex/lualatex,
    +            \MessageBreak 2) add `\string\shorthandoff{"}' after `\begin{quiz}',
    +            or\MessageBreak 3) avoid the babel option.^^J}}%
    +      \fi
    +      \def\moodle@babel@turkish@warn{%
    +        \PackageWarning{moodle}{Be careful when using moodle and the babel
    +          package loaded with option `turkish'. Shorthands are likely to
    +          break compilation. Here are three workarounds:\MessageBreak 1)
    +          rely on `polyglossia' (XeTeX or LuaTeX),\MessageBreak 2) add
    +          `\shorthandoff{=:!}' after `\begin{quiz}', or\MessageBreak
    +          3) avoid the babel option.^^J}}%
    +      \def\do#1{%
    +        \ifstrequal{#1}{turkish}{\moodle@babel@turkish@warn}{%
    +          \ifinlist{#1}{\moodle@babel@french@list}%
    +            {\ifPDFTeX\moodle@babel@french@warn\fi}{%
    +              \ifinlist{#1}{\moodle@babel@german@list}{%
    +                \ifPDFTeX\moodle@babel@german@warn\else
    +                  \gdef\moodle@babel@german@warn{%
    +                    \PackageWarning{moodle}{Be careful when using moodle and
    +            the babel package loaded with a German-related option that make the
    +            symbol `"' active. We recommend typing umlauts with UTF-8
    +            characters. By default, `\string\"a' is poorly translated in the XML
    +            file. This is fixed if you define `\string\shorthandoff{"}' after
    +            `\begin{quiz}'. But then `"a` will no longer work as expected.^^J}%
    +                  }%
    +                  \gdef\moodle@babel@german@warn@single{%
    +                    \moodle@babel@german@warn
    +                    \gdef\moodle@babel@german@warn@single{}%\relax
    +                  }%
    +                  \pretocmd{\"}%
    +                    {\moodle@babel@german@warn@single}%
    +                    {}%
    +                    { \PackageWarning{moodle}{Umlaut patch failed.}%
    +                      \moodle@babel@german@warn@single
    +                    }%
    +                \fi
    +              }{}%
    +            }
    +
    +        }
    +      }
    +      \expandafter\docsvlist\expandafter{\bbl@loaded}%
    +    }%
    +  }{}%
    +}%
    +%    \end{macrocode}
    +%
    +% \subsection{Warning and Error Management}
    +%
    +%    \begin{macrocode}
    +\def\moodle@WarningOrError#1#2#3{%
    +  % #1 : major version
    +  % #2 : minor version
    +  % #3 : feature
    +  \ifnum\the\moodle@LMSmajor\the\moodle@LMSminor=\z@\relax
    +    \PackageWarning{moodle}{#3 is only supported by Moodle #1.#2+}%
    +  \else
    +    \ifnum\numexpr 1000*\the\moodle@LMSmajor+\the\moodle@LMSminor\relax<\numexpr 1000*#1+#2\relax
    +      \PackageError{moodle}{#3 is only supported by Moodle #1.#2+
    +       (you declared Moodle \the\moodle@LMSmajor.\the\moodle@LMSminor)}%
    +    \fi
    +  \fi
    +}%
    +%    \end{macrocode}
     % \Finale
     \endinput
    diff --git a/macros/latex/contrib/moodle/moodle.ins b/macros/latex/contrib/moodle/moodle.ins
    index b118c1beab..9a367ff71d 100644
    --- a/macros/latex/contrib/moodle/moodle.ins
    +++ b/macros/latex/contrib/moodle/moodle.ins
    @@ -26,8 +26,8 @@
     
     This is a generated file.
     
    -Copyright 2016 by Anders O.F. Hendrickson (anders.o.f.hendrickson AT gmail.com)
    -and 2019-2021 by Matthieu Guerquin-Kern (guerquin-kern AT crans.org).
    +Copyright 2016 by Anders O.F. Hendrickson (anders.o.f.hendrickson AT gmail DOT com)
    +and 2019-2021 by Matthieu Guerquin-Kern (guerquin-kern AT crans DOT org).
     
     This work may be distributed and/or modified under the
     conditions of the LaTeX Project Public License, either version 1.3
    diff --git a/macros/latex/contrib/moodle/moodle.pdf b/macros/latex/contrib/moodle/moodle.pdf
    index 47a4c2ecca..4c67dab223 100644
    Binary files a/macros/latex/contrib/moodle/moodle.pdf and b/macros/latex/contrib/moodle/moodle.pdf differ
    diff --git a/macros/latex/contrib/profcollege/doc/ProfCollege-doc.pdf b/macros/latex/contrib/profcollege/doc/ProfCollege-doc.pdf
    index f6420bc786..4e59174d84 100644
    Binary files a/macros/latex/contrib/profcollege/doc/ProfCollege-doc.pdf and b/macros/latex/contrib/profcollege/doc/ProfCollege-doc.pdf differ
    diff --git a/macros/latex/contrib/profcollege/latex/ProfCollege.sty b/macros/latex/contrib/profcollege/latex/ProfCollege.sty
    index 97f9f842e8..15a4cd6b73 100644
    --- a/macros/latex/contrib/profcollege/latex/ProfCollege.sty
    +++ b/macros/latex/contrib/profcollege/latex/ProfCollege.sty
    @@ -2,9 +2,9 @@
     % licence    : Released under the LaTeX Project Public License v1.3c
     % or later, see http://www.latex-project.org/lppl.txtf
     \NeedsTeXFormat{LaTeX2e}%
    -\def\filedate{2023/01/01}%
    +\def\filedate{2023/01/23}%
     \let\PfCfiledate\filedate%
    -\def\fileversion{0.99-z-d}%
    +\def\fileversion{0.99-z-e}%
     \let\PfCfileversion\fileversion%
     \ProvidesPackage{ProfCollege}[\filedate\space v\fileversion\space Aide pour utiliser LaTeX au college]
     
    @@ -347,9 +347,665 @@
       \day=\the\PfCrappeljour\relax%
     }
     
    +%%%
    +% Ronde infernale
    +%%%
    +\newcommand\TestNombrePremier[1]{%
    +  % #1 le nombre \`a tester
    +  \newcount\anp\newcount\bnp\newcount\cnp%
    +  \anp=#1\relax
    +  \bnp=2\relax
    +  \premier=-1\relax
    +  \whiledo{\anp > 1}{%
    +    \modulo{\the\anp}{\the\bnp}
    +    \ifnum\remainder=0\relax%
    +      \global\premier=\numexpr\premier+1\relax%
    +      \cnp=\numexpr\anp/\bnp\relax%
    +      \anp=\cnp\relax%
    +    \else%
    +      \bnp=\numexpr\bnp+1\relax%
    +    \fi%
    +  }%
    +}%
    +
    +\newcommand\PfCRIListeDiviseur[1]{%#1 : nombre entier
    +  \newcount\anp\newcount\bnp%
    +  \anp=\fpeval{abs(#1)}%
    +  \bnp=2\relax%
    +  \xdef\PfCRIRetiensListeDiviseurs{}%
    +  \ifnum#1=0%
    +  \xdef\PfCRIRetiensListeDiviseurs{\fpeval{randint(2,5)},\fpeval{randint(6,9)}}%
    +  \else
    +  \whiledo{\bnp<\anp}{%
    +    \modulo{\the\anp}{\the\bnp}{}%
    +    \ifnum\remainder=0%
    +    \ifnum#1>0
    +    \xdef\PfCRIRetiensListeDiviseurs{\PfCRIRetiensListeDiviseurs \the\bnp,}%
    +    \else
    +    \xdef\PfCRIRetiensListeDiviseurs{\PfCRIRetiensListeDiviseurs \the\bnp,-\the\bnp,}%
    +    \fi
    +    \fi%
    +    \bnp=\numexpr\bnp+1%
    +  }%
    +  \ifnum#1>0
    +  \xdef\PfCRIRetiensListeDiviseurs{\PfCRIRetiensListeDiviseurs \the\anp,1}
    +  \else
    +  \xdef\PfCRIRetiensListeDiviseurs{\PfCRIRetiensListeDiviseurs \the\anp,-\the\anp}
    +  \fi
    +  \fi
    +}
    +
    +\setKVdefault[RondeInfernale]{Solution=false,Relatifs=false,Etapes=4,Perso=false,Cles=false,Vide,Rayon=2.5cm,Graines=false,Rectangle=false}%
    +\defKV[RondeInfernale]{Graine=\setKV[RondeInfernale]{Graines}}%
    +\defKV[RondeInfernale]{Cle=\setKV[RondeInfernale]{Cles}\setKV[RondeInfernale]{Vide=false}}%
    +\defKV[RondeInfernale]{ListeOperations=\setKV[RondeInfernale]{Perso}}%
    +\defKV[RondeInfernale]{ListeNombres=\setKV[RondeInfernale]{Perso}}%
    +% 
    +\NewDocumentCommand\RondeInfernale{o}{%
    +  \useKVdefault[RondeInfernale]%
    +  \setKV[RondeInfernale]{#1}%
    +  % Graine
    +  \ifboolKV[RondeInfernale]{Graines}{\PfCGraineAlea{\useKV[RondeInfernale]{Graine}}}{}%
    +  % Nombre clé
    +  \ifboolKV[RondeInfernale]{Cles}{%
    +    \xdef\PfCRINombreCle{\useKV[RondeInfernale]{Cle}}%
    +  }{%
    +    \ifboolKV[RondeInfernale]{Relatifs}{%
    +      \xdef\PfCRIListeNegatifs{-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,1,2,3,4,5,6,7,8,9,10}
    +      \MelangeListe{\PfCRIListeNegatifs}{1}
    +      \readlist*\PfCRIListeCle{\faa}
    +      \xdef\PfCRINombreCle{\PfCRIListeCle[1]}%
    +    }{%
    +      \xdef\PfCRINombreCle{\fpeval{randint(2,9)}}%
    +    }%
    +  }%
    +  \ifboolKV[RondeInfernale]{Perso}{%
    +    \xdef\PfCRIRecupOperations{\useKV[RondeInfernale]{ListeOperations}}%
    +    \xdef\PfCRIRecupNombres{\useKV[RondeInfernale]{ListeNombres}}%
    +  }{%
    +    % On définit les éléments nécessaires
    +    \xdef\PfCRIListeToutesOperations{+,-,*,/}%
    +    \xdef\PfCRIListeOperationsSansDiv{+,-,*}%
    +    \xdef\PfCRIListeOperationsSansMul{+,-,/}%
    +    \xdef\PfCRIListeOperationsSimple{+,-}%
    +    \xdef\PfCRIRecupOperations{}%
    +    \xdef\PfCRIRecupNombres{}%
    +    \xdef\PfCRIRecupResultats{}%
    +    \xdef\PfCRINombreATester{\PfCRINombreCle}%
    +    \xdef\PfCRIRetiensNbEtapes{\useKV[RondeInfernale]{Etapes}}%
    +    \setsepchar{,}\ignoreemptyitems%
    +    % Liste des opérations jusqu'à l'étape n-1
    +    \xintFor* ##1 in{\xintSeq{1}{\fpeval{\useKV[RondeInfernale]{Etapes}-1}}}\do{%
    +      \TestNombrePremier{\PfCRINombreATester}\relax%
    +      \xintifboolexpr{\premier==0}{%
    +        % Définition des opérations
    +        \MelangeListe{\PfCRIListeOperationsSansDiv}{1}%
    +        \readlist*\PfCRIRetiensLoperation{\faa}%
    +        \xdef\PfCRIRecupOperations{\PfCRIRecupOperations \faa}%
    +        \xdef\PfCRIOperateur{\fpeval{randint(2,9)}}%
    +        \xdef\PfCRIRecupNombres{\PfCRIRecupNombres \PfCRIOperateur,}%
    +        \xdef\PfCRIResultat{\fpeval{\PfCRINombreATester\PfCRIRetiensLoperation[1]\PfCRIOperateur}}%
    +        \xdef\PfCRIRecupResultats{\PfCRIRecupResultats \PfCRIResultat,}%
    +        \xdef\PfCRINombreATester{\PfCRIResultat}%
    +      }{%
    +        \MelangeListe{\PfCRIListeToutesOperations}{1}%
    +        \readlist*\PfCRIRetiensLoperation{\faa}%
    +        \xdef\PfCRIRecupOperations{\PfCRIRecupOperations \faa}%
    +        \IfStrEq{\PfCRIRetiensLoperation[1]}{/}{%
    +          \PfCRIListeDiviseur{\PfCRINombreATester}%
    +          \MelangeListe{\PfCRIRetiensListeDiviseurs}{1}%
    +          \readlist*\PfCRIRetiensLeDiviseur{\faa}%
    +          \xdef\PfCRIOperateur{\PfCRIRetiensLeDiviseur[1]}%
    +        }{%
    +          \xdef\PfCRIOperateur{\fpeval{randint(2,9)}}%
    +        }%
    +        \xdef\PfCRIRecupNombres{\PfCRIRecupNombres \PfCRIOperateur,}%
    +        \xdef\PfCRIResultat{\fpeval{\PfCRINombreATester\PfCRIRetiensLoperation[1]\PfCRIOperateur}}%
    +        \xdef\PfCRIRecupResultats{\PfCRIRecupResultats \PfCRIResultat,}%
    +        \xdef\PfCRINombreATester{\PfCRIResultat}%
    +      }%
    +    }%
    +    % Dernière opération
    +    \xintifboolexpr{\fpeval{abs(\PfCRINombreATester)-abs(\PfCRINombreCle)}>0}{%
    +      \modulo{\PfCRINombreATester}{\PfCRINombreCle}{}%
    +      \xintifboolexpr{\remainder==0}{%
    +        \MelangeListe{\PfCRIListeOperationsSansMul}{1}%
    +        \xdef\PfCRIRecupOperations{\PfCRIRecupOperations \faa}%
    +        \ignoreemptyitems%
    +        \readlist*\PfCRIRetiensLoperation{\faa}%
    +        \IfStrEq{\PfCRIRetiensLoperation[1]}{/}{%
    +          \xdef\PfCRINombreATester{\fpeval{\PfCRINombreATester/\PfCRINombreCle}}%
    +        }{%
    +          \IfStrEq{\PfCRIRetiensLoperation[1]}{-}{%
    +            \xdef\PfCRINombreATester{\fpeval{\PfCRINombreATester-\PfCRINombreCle}}%
    +          }{%
    +            \xdef\PfCRINombreATester{\fpeval{\PfCRINombreCle-\PfCRINombreATester}}%
    +          }%
    +        }%
    +        \xdef\PfCRIRecupNombres{\PfCRIRecupNombres \PfCRINombreATester}%
    +      }{%
    +        \MelangeListe{\PfCRIListeOperationsSimple}{1}%
    +        \xdef\PfCRIRecupOperations{\PfCRIRecupOperations \faa}%
    +        \ignoreemptyitems%
    +        \readlist*\PfCRIRetiensLoperation{\faa}%
    +        \IfStrEq{\PfCRIRetiensLoperation[1]}{-}{%
    +          \xdef\PfCRINombreATester{\fpeval{\PfCRINombreATester-\PfCRINombreCle}}%
    +        }{%
    +          \xdef\PfCRINombreATester{\fpeval{\PfCRINombreCle-\PfCRINombreATester}}%
    +        }%
    +        \xdef\PfCRIRecupNombres{\PfCRIRecupNombres \PfCRINombreATester}%
    +      }%
    +    }{%
    +      \xintifboolexpr{\fpeval{abs(\PfCRINombreATester)-abs(\PfCRINombreCle)}==0}{%
    +        \xdef\PfCRIRecupOperations{\PfCRIRecupOperations *}%
    +        \ignoreemptyitems%
    +        \readlist*\PfCRIRIListeOperations{\PfCRIRecupOperations}%
    +        \xdef\PfCRIRecupNombres{\PfCRIRecupNombres 1}%
    +      }{%
    +        \xintifboolexpr{\PfCRINombreATester==0}{%
    +          \MelangeListe{\PfCRIListeOperationsSimple}{1}%
    +          \xdef\PfCRIRecupOperations{\PfCRIRecupOperations \faa}%
    +          \ignoreemptyitems%
    +          \readlist*\PfCRIRetiensLoperation{\faa}%
    +          \IfStrEq{\PfCRIRetiensLoperation[1]}{-}{%
    +            \xdef\PfCRINombreATester{\fpeval{\PfCRINombreATester-\PfCRINombreCle}}%
    +          }{%
    +            \xdef\PfCRINombreATester{\fpeval{\PfCRINombreCle-\PfCRINombreATester}}%
    +          }%
    +          \xdef\PfCRIRecupNombres{\PfCRIRecupNombres \PfCRINombreATester}%
    +        }{%
    +          \modulo{\PfCRINombreCle}{\PfCRINombreATester}{}%
    +          \xintifboolexpr{\remainder==0}{%-1
    +            \MelangeListe{\PfCRIListeToutesOperations}{1}%
    +            \xdef\PfCRIRecupOperations{\PfCRIRecupOperations \faa}%
    +            \readlist*\PfCRIRetiensLoperation{\faa}%
    +            \ignoreemptyitems%
    +            \readlist*\PfCRIRIListeOperations{\PfCRIRecupOperations}%
    +            \IfStrEq{\PfCRIRetiensLoperation[1]}{*}{%
    +              \xdef\PfCRINombreATester{\fpeval{\PfCRINombreCle/\PfCRINombreATester}}%
    +              \xdef\PfCRIRecupNombres{\PfCRIRecupNombres \PfCRINombreATester}%
    +            }{
    +              \IfStrEq{\PfCRIRetiensLoperation[1]}{-}{%
    +                \xdef\PfCRINombreATester{\fpeval{\PfCRINombreATester-\PfCRINombreCle}}%
    +              }{%
    +                \xdef\PfCRINombreATester{\fpeval{\PfCRINombreCle-\PfCRINombreATester}}%
    +              }%
    +              \xdef\PfCRIRecupNombres{\PfCRIRecupNombres \PfCRINombreATester}%
    +            }%
    +          }{%
    +            \MelangeListe{\PfCRIListeOperationsSimple}{1}%
    +            \xdef\PfCRIRecupOperations{\PfCRIRecupOperations \faa}%
    +            \ignoreemptyitems%
    +            \readlist*\PfCRIRIListeOperations{\PfCRIRecupOperations}%
    +            \IfStrEq{\PfCRIRIListeOperations[\PfCRIRetiensNbEtapes]}{-}{%
    +              \xdef\PfCRINombreATester{\fpeval{\PfCRINombreATester-\PfCRINombreCle}}%
    +            }{%
    +              \xdef\PfCRINombreATester{\fpeval{\PfCRINombreCle-\PfCRINombreATester}}%
    +            }%
    +            \xdef\PfCRIRecupNombres{\PfCRIRecupNombres \PfCRINombreATester}%
    +          }%
    +        }%
    +      }%
    +    }%
    +  }%
    +  \ignoreemptyitems%
    +  \readlist*\PfCRIRIOperations{\PfCRIRecupOperations}%
    +  \readlist*\PfCRIRINombres{\PfCRIRecupNombres}%
    +  \reademptyitems%
    +  % On prépare le dessin
    +  \xdef\PfCRINombresDessin{}%
    +  \xdef\PfCRIOperationsDessin{}%
    +  \foreachitem\compteur\in\PfCRIRINombres{%
    +    \xintifboolexpr{\PfCRIRINombres[\compteurcnt]<0}{%
    +      \xdef\PfCRINombresDessin{\PfCRINombresDessin "(\num{\PfCRIRINombres[\compteurcnt]})",}%
    +    }{%
    +      \xdef\PfCRINombresDessin{\PfCRINombresDessin "\num{\PfCRIRINombres[\compteurcnt]}",}%
    +    }%
    +  }%
    +  \foreachitem\compteur\in\PfCRIRIOperations{%
    +    \xdef\PfCRIOperationsDessin{\PfCRIOperationsDessin "\PfCRIRIOperations[\compteurcnt]",}%
    +  }%
    +  % On dessine
    +  \BuildRondeInfernale{\PfCRINombresDessin}{\PfCRIOperationsDessin}%
    +}%
    +
    +\NewDocumentCommand\BuildRondeInfernale{m m}{%
    +  \ifluatex
    +  \mplibforcehmode
    +  \begin{mplibcode}
    +    boolean Vide,Rectangle,Perso;
    +    Vide=\useKV[RondeInfernale]{Vide};
    +    Rectangle=\useKV[RondeInfernale]{Rectangle};
    +    Perso=\useKV[RondeInfernale]{Perso};
    +    if Perso:
    +    string Depart;
    +    Depart=\useKV[RondeInfernale]{Cle};
    +    else:
    +    numeric Depart;
    +    Depart=\PfCRINombreCle;
    +    fi;
    +
    +    numeric Rayon;
    +    Rayon=\useKV[RondeInfernale]{Rayon};
    +
    +    string Nombre[];
    +    
    +    vardef Compte(text t)=%On compte le nb d'étapes et on retient les nombres
    +    nbcase:=0;
    +    for p_=t:
    +    nbcase:=nbcase+1;
    +    Nombre[nbcase]=p_;
    +    endfor;
    +    enddef;
    +
    +    vardef AfficheRonde(text t)=%On fait l'affichage des opérations
    +    n:=0;
    +    for k=1 upto nbcase:
    +    fill cercles(rotation(A[k],O,0.5*(360/nbcase)),5mm) withcolor white;
    +    endfor;
    +    for p_=t:
    +    n:=n+1;
    +    if p_="*":
    +    label(TEX("$\times"&Nombre[n]&"$"),rotation(A[nbcase-n],O,0.5*(360/nbcase)));
    +    elseif p_="/":
    +    label(TEX("$\div"&Nombre[n]&"$"),rotation(A[nbcase-n],O,0.5*(360/nbcase)));
    +    else:
    +    label(TEX("$"&p_&Nombre[n]&"$"),rotation(A[nbcase-n],O,0.5*(360/nbcase)));
    +        fi;
    +    endfor;
    +    enddef;
    +
    +    vardef AfficheRectangle(text t)=%On fait l'affichage des opérations
    +    n:=0;
    +    for p_=t:
    +    n:=n+1;
    +    if n=nbcase:
    +    if p_="*":
    +    label.bot(TEX("$\times"&Nombre[n]&"$"),1/2[A[n-1],A[0]]+u*(0,-1));
    +    elseif p_="/":
    +    label.bot(TEX("$\div"&Nombre[n]&"$"),1/2[A[n-1],A[0]]+u*(0,-1));
    +    else:
    +    label.bot(TEX("$"&p_&Nombre[n]&"$"),1/2[A[n-1],A[0]]+u*(0,-1));
    +    fi;
    +    else:
    +    if p_="*":
    +    label.top(TEX("$\times"&Nombre[n]&"$"),1/2[A[n-1],A[n]]);
    +    elseif p_="/":
    +    label.top(TEX("$\div"&Nombre[n]&"$"),1/2[A[n-1],A[n]]);
    +    else:
    +    label.top(TEX("$"&p_&Nombre[n]&"$"),1/2[A[n-1],A[n]]);
    +    fi;
    +    fi;
    +    endfor;
    +    enddef;
    +
    +    vardef BaseRonde=
    +    pair O,A[];
    +    O=(0,0);
    +    path cc;
    +    cc=cercles(O,Rayon);
    +    A[0]=pointarc(cc,0);
    +    A[nbcase+1]=A[0];
    +    for k=1 upto nbcase:
    +    A[k]=rotation(A[0],O,k*(360/nbcase));
    +    endfor;
    +    for k=0 upto nbcase:
    +    drawarrow reverse(arccercle(A[k],A[k+1],O) cutbefore cercles(A[k],5mm) cutafter cercles(A[k+1],5mm)) withpen pencircle scaled 1.5;
    +    endfor;
    +    for k=0 upto nbcase:
    +    fill cercles(A[k],5mm) withcolor white;
    +    trace cercles(A[k],5mm) withpen pencircle scaled 1.5;
    +    endfor;
    +    enddef;
    +
    +    vardef BoiteRectangle=
    +    save $;
    +    path $;
    +    $=u*(0.9,-0.5){dir 0}..{dir 90}(u*(1,-0.4))--(u*(1,0.4)){dir 90}..{dir180}(u*(0.9,0.5))--u*(-0.9,0.5){dir 180}..{dir-90}(u*(-1,0.4))--(u*(-1,-0.4)){dir-90}..{dir0}(u*(-0.9,-0.5))--cycle;
    +    $
    +    enddef;
    +    
    +    vardef BaseRectangle=
    +    pair O,A[];
    +    O=(0,0);
    +    A[0]=O;
    +    for k=1 upto nbcase:
    +    A[k]-A[k-1]=(Rayon+2cm,0);
    +    endfor;
    +    for k=0 upto nbcase-2:
    +    drawarrow (A[k]--A[k+1]) cutbefore (BoiteRectangle shifted A[k]) cutafter (BoiteRectangle shifted A[k+1]) withpen pencircle scaled 1.5;
    +    endfor;
    +    drawarrow (A[nbcase-1]--(A[nbcase-1]+u*(0,-1))--(A[0]+u*(0,-1))--A[0]) cutbefore (BoiteRectangle shifted A[nbcase-1]) cutafter (BoiteRectangle shifted A[0]) withpen pencircle scaled 1.5;
    +    for k=0 upto nbcase-1:
    +    trace (BoiteRectangle shifted A[k]) withpen pencircle scaled 1.5;
    +    endfor;
    +    enddef;
    +    
    +    Compte(#1);
    +    
    +    if Rectangle:
    +    BaseRectangle;
    +    AfficheRectangle(#2);
    +    else:
    +    BaseRonde;
    +    AfficheRonde(#2);
    +    fi;
    +    if Vide=false:
    +    if Perso:
    +    label(TEX("$"&Depart&"$"),A[0]);
    +    else:
    +    label(TEX("$"&decimal(Depart)&"$"),A[0]);
    +    fi;
    +    fi;
    +  \end{mplibcode}
    +  \else
    +  \begin{mpost}[mpsettings={%
    +      boolean Vide,Rectangle,Perso;Vide=\useKV[RondeInfernale]{Vide};Rectangle=\useKV[RondeInfernale]{Rectangle};Perso=\useKV[RondeInfernale]{Perso};if Perso:string Depart;Depart=\useKV[RondeInfernale]{Cle};else:numeric Depart;Depart=\PfCRINombreCle;fi;numeric Rayon;Rayon=\useKV[RondeInfernale]{Rayon};}]
    +    string Nombre[];
    +    
    +    vardef Compte(text t)=%On compte le nb d'étapes et on retient les nombres
    +    nbcase:=0;
    +    for p_=t:
    +    nbcase:=nbcase+1;
    +    Nombre[nbcase]=p_;
    +    endfor;
    +    enddef;
    +
    +    vardef AfficheRonde(text t)=%On fait l'affichage des opérations
    +    n:=0;
    +    for k=1 upto nbcase:
    +    fill cercles(rotation(A[k],O,0.5*(360/nbcase)),5mm) withcolor white;
    +    endfor;
    +    for p_=t:
    +    n:=n+1;
    +    if p_="*":
    +    label(LATEX("$\times"&Nombre[n]&"$"),rotation(A[nbcase-n],O,0.5*(360/nbcase)));
    +    elseif p_="/":
    +    label(LATEX("$\div"&Nombre[n]&"$"),rotation(A[nbcase-n],O,0.5*(360/nbcase)));
    +    else:
    +    label(LATEX("$"&p_&Nombre[n]&"$"),rotation(A[nbcase-n],O,0.5*(360/nbcase)));
    +    fi;
    +    endfor;
    +    enddef;
    +
    +    vardef AfficheRectangle(text t)=%On fait l'affichage des opérations
    +    n:=0;
    +    for p_=t:
    +    n:=n+1;
    +    if n=nbcase:
    +    if p_="*":
    +    label.bot(LATEX("$\times"&Nombre[n]&"$"),1/2[A[n-1],A[0]]+u*(0,-1));
    +    elseif p_="/":
    +    label.bot(LATEX("$\div"&Nombre[n]&"$"),1/2[A[n-1],A[0]]+u*(0,-1));
    +    else:
    +    label.bot(LATEX("$"&p_&Nombre[n]&"$"),1/2[A[n-1],A[0]]+u*(0,-1));
    +    fi;
    +    else:
    +    if p_="*":
    +    label.top(TEX("$\times"&Nombre[n]&"$"),1/2[A[n-1],A[n]]);
    +    elseif p_="/":
    +    label.top(TEX("$\div"&Nombre[n]&"$"),1/2[A[n-1],A[n]]);
    +    else:
    +    label.top(TEX("$"&p_&Nombre[n]&"$"),1/2[A[n-1],A[n]]);
    +    fi;
    +    fi;
    +    endfor;
    +    enddef;
    +
    +    vardef BaseRonde=
    +    pair O,A[];
    +    O=(0,0);
    +    path cc;
    +    cc=cercles(O,Rayon);
    +    A[0]=pointarc(cc,0);
    +    A[nbcase+1]=A[0];
    +    for k=1 upto nbcase:
    +    A[k]=rotation(A[0],O,k*(360/nbcase));
    +    endfor;
    +    for k=0 upto nbcase:
    +    drawarrow reverse(arccercle(A[k],A[k+1],O) cutbefore cercles(A[k],5mm) cutafter cercles(A[k+1],5mm)) withpen pencircle scaled 1.5;
    +    endfor;
    +    for k=0 upto nbcase:
    +    fill cercles(A[k],5mm) withcolor white;
    +    trace cercles(A[k],5mm) withpen pencircle scaled 1.5;
    +    endfor;
    +    enddef;
    +
    +    vardef BoiteRectangle=
    +    save $;
    +    path $;
    +    $=u*(0.9,-0.5){dir 0}..{dir 90}(u*(1,-0.4))--(u*(1,0.4)){dir 90}..{dir180}(u*(0.9,0.5))--u*(-0.9,0.5){dir 180}..{dir-90}(u*(-1,0.4))--(u*(-1,-0.4)){dir-90}..{dir0}(u*(-0.9,-0.5))--cycle;
    +    $
    +    enddef;
    +    
    +    vardef BaseRectangle=
    +    pair O,A[];
    +    O=(0,0);
    +    A[0]=O;
    +    for k=1 upto nbcase:
    +    A[k]-A[k-1]=(Rayon,0);
    +    endfor;
    +    for k=0 upto nbcase-2:
    +    drawarrow (A[k]--A[k+1]) cutbefore (BoiteRectangle shifted A[k]) cutafter (BoiteRectangle shifted A[k+1]) withpen pencircle scaled 1.5;
    +    endfor;
    +    drawarrow (A[nbcase-1]--(A[nbcase-1]+u*(0,-1))--(A[0]+u*(0,-1))--A[0]) cutbefore (BoiteRectangle shifted A[nbcase-1]) cutafter (BoiteRectangle shifted A[0]) withpen pencircle scaled 1.5;
    +    for k=0 upto nbcase-1:
    +    trace (BoiteRectangle shifted A[k]) withpen pencircle scaled 1.5;
    +    endfor;
    +    enddef;
    +    
    +    Compte(#1);
    +    
    +    if Rectangle:
    +    BaseRectangle;
    +    AfficheRectangle(#2);
    +    else:
    +    BaseRonde;
    +    AfficheRonde(#2);
    +    fi;
    +    if Vide=false:
    +    if Perso:
    +    label(TEX("$"&Depart&"$"),A[0]);
    +    else:
    +    label(TEX("$"&decimal(Depart)&"$"),A[0]);
    +    fi;
    +    fi;
    +  \end{mplibcode}
    +  \fi
    +}%
    +
    +
    +%%%
    +% Message caché
    +%%%
    +\setKVdefault[Hidden]{TLargeur=5,THauteur=3,Solution=false,Hauteur=70pt,Largeur=120pt,Jeu=false,Solution}
    +\defKV[Hidden]{Plateau=\setKV[Hidden]{Jeu}\setKV[Hidden]{Solution=false}}
    +
    +\newlength\PfCHiddenHeight%
    +\newlength\PfCHiddenWidth%
    +
    +\NewDocumentCommand\MessageCache{o m m}{%1 options 2 questions/réponses 3 message
    +  % on récupère les options
    +  \useKVdefault[Hidden]%
    +  \setKV[Hidden]{#1}%
    +  % on définit les dimensions des cases
    +  \setlength{\PfCHiddenHeight}{\useKV[Hidden]{Hauteur}+\tabcolsep}%
    +  \setlength{\PfCHiddenWidth}{\useKV[Hidden]{Largeur}}%
    +  % On récupère les questions
    +  \setsepchar[*]{§*/}%
    +  \readlist*\PfCHiddenQuestions{#2}%
    +  \setsepchar{,}
    +  \ifboolKV[Hidden]{Solution}{%
    +    % On donne les questions et la phrase
    +    \begin{center}
    +      \begin{NiceTabular}{*{\useKV[Hidden]{TLargeur}}{m{\PfCHiddenWidth}}}%[hvlines]
    +        \xintFor* ##1 in{\xintSeq{1}{\useKV[Hidden]{THauteur}}}\do{%
    +          \rule{0pt}{\PfCHiddenHeight}\xintFor* ##2 in {\xintSeq{1}{\useKV[Hidden]{TLargeur}}}\do{%
    +            \Block[draw]{1-1}{\PfCHiddenQuestions[\fpeval{\useKV[Hidden]{THauteur}*(##1-1)+##2},1]}\xintifForLast{}{&}
    +          }\\
    +        }%
    +        \CodeAfter%
    +        \StrGobbleLeft{#3}{0}[\PhraseCorrection]%
    +        \xintFor* ##1 in{\xintSeq{1}{\useKV[Hidden]{THauteur}}}\do{%
    +          \xintFor* ##2 in{\xintSeq{1}{\fpeval{\useKV[Hidden]{TLargeur}-1}}}\do{%
    +            \StrLeft{\PhraseCorrection}{1}[\LettreAAfficher]\StrGobbleLeft{\PhraseCorrection}{1}[\PhraseCorrection]%
    +            \tikz{\node[anchor=south] at (\fpeval{##1+1}-|\fpeval{##2+1}) {\huge\bfseries\LettreAAfficher};}%
    +          }%
    +        }%
    +      \end{NiceTabular}
    +    \end{center}
    +  }{%
    +    % On donne le plateau des solutions
    +    \begin{center}
    +      \begin{NiceTabular}{*{\useKV[Hidden]{TLargeur}}{m{\PfCHiddenWidth}}}%[hvlines]
    +        \xintFor* ##1 in{\xintSeq{1}{\useKV[Hidden]{THauteur}}}\do{%
    +          \rule{0pt}{\PfCHiddenHeight}\xintFor* ##2 in {\xintSeq{1}{\useKV[Hidden]{TLargeur}}}\do{%
    +            \Block[draw]{1-1}{\PfCHiddenQuestions[\fpeval{\useKV[Hidden]{THauteur}*(##1-1)+##2},2]}\xintifForLast{}{&}
    +          }\\
    +        }%
    +      \end{NiceTabular}
    +    \end{center}
    +  }
    +}%
    +
    +%%%
    +% Puzzle Somme Pyramide
    +%%%
    +\setKVdefault[ClesPuzzleP]{Largeur=40pt,Etages=4,Graines=false,Solutions=false,Jeu,EnonceQuestion=false,NbLignes=7}
    +\defKV[ClesPuzzleP]{Graine=\setKV[ClesPuzzleP]{Graines}}%
    +\defKV[ClesPuzzleP]{Solution=\setKV[ClesPuzzleP]{Solutions}\setKV[ClesPuzzleP]{Jeu=false}}%
    +\defKV[ClesPuzzleP]{Questions=\setKV[ClesPuzzleP]{EnonceQuestion}\setKV[ClesPuzzleP]{Jeu=false}}%
    +\newcounter{PfCPuzzlePcpt}
    +\newcounter{PfCPuzzlePavcpt}
    +\newlength{\PfCPuzzleP}
    +
    +\NewDocumentCommand\PuzzlePyramideListeLettres{}{%
    +  \setcounter{PfCPuzzlePcpt}{0}%
    +  \setcounter{PfCPuzzlePavcpt}{\PfCPuzzlePCptLettre[1]}\Alph{PfCPuzzlePavcpt}, \setcounter{PfCPuzzlePavcpt}{\PfCPuzzlePCptLettre[2]}\Alph{PfCPuzzlePavcpt}, \setcounter{PfCPuzzlePavcpt}{\PfCPuzzlePCptLettre[3]}\Alph{PfCPuzzlePavcpt}, \setcounter{PfCPuzzlePavcpt}{\PfCPuzzlePCptLettre[4]}\Alph{PfCPuzzlePavcpt} et \setcounter{PfCPuzzlePavcpt}{\PfCPuzzlePCptLettre[5]}\Alph{PfCPuzzlePavcpt}%
    +}
    +
    +\NewDocumentCommand\PuzzlePyramide{o m}{%
    +  \useKVdefault[ClesPuzzleP]%
    +  \setKV[ClesPuzzleP]{#1}%
    +  \ifboolKV[ClesPuzzleP]{Graines}{\PfCGraineAlea{\useKV[ClesPuzzleP]{Graine}}}{}%
    +  \setsepchar{§}
    +  \readlist*\PfCPuzzlePQuestions{#2}%
    +  \setsepchar{,}
    +  \setlength{\PfCPuzzleP}{\useKV[ClesPuzzleP]{Largeur}}%
    +  \xdef\PfCPuzzlePLettres{1}%
    +  \xintFor* ##1 in{\xintSeq{2}{\fpeval{\useKV[ClesPuzzleP]{Etages}*(\useKV[ClesPuzzleP]{Etages}+1)/2}}}\do{%
    +    \xdef\PfCPuzzlePLettres{\PfCPuzzlePLettres,##1}%
    +  }%
    +  \MelangeListe{\PfCPuzzlePLettres}{\fpeval{\useKV[ClesPuzzleP]{Etages}*(\useKV[ClesPuzzleP]{Etages}+1)/2}}%
    +  \readlist*{\PfCPuzzlePCptLettre}{\faa}%
    +  \xdef\PuzzlePyramideLettres{\PuzzlePyramideListeLettres}%
    +  \setcounter{PfCPuzzlePcpt}{0}%
    +  \ifboolKV[ClesPuzzleP]{Solutions}{%
    +%    % Plateau de jeu
    +    \begin{center}
    +      \begin{NiceTabular}{*{\fpeval{\useKV[ClesPuzzleP]{Etages}*2}}{m{\PfCPuzzleP}}}%[hvlines]
    +        \xintFor* ##1 in {\xintSeq{1}{\fpeval{\useKV[ClesPuzzleP]{Etages}}}}\do{%
    +          \xintifForLast{\Block[draw]{\useKV[ClesPuzzleP]{NbLignes}-2}{\stepcounter{PfCPuzzlePcpt}\setcounter{PfCPuzzlePavcpt}{\PfCPuzzlePCptLettre[\thePfCPuzzlePcpt]}{\Huge\Alph{PfCPuzzlePavcpt}}}&}{\Block[draw]{\useKV[ClesPuzzleP]{NbLignes}-2}{\stepcounter{PfCPuzzlePcpt}\setcounter{PfCPuzzlePavcpt}{\PfCPuzzlePCptLettre[\thePfCPuzzlePcpt]}{\Huge\Alph{PfCPuzzlePavcpt}}}&&}
    +        }\\%
    +        \xintFor* ##1 in {\xintSeq{2}{\useKV[ClesPuzzleP]{NbLignes}}}\do{%
    +          \xintFor* ##2 in {\xintSeq{1}{\fpeval{\useKV[ClesPuzzleP]{Etages}*2}}}\do{%
    +            \xintifForLast{\\}{&}
    +          }%
    +        }%
    +        \xintFor* ##1 in {\xintSeq{1}{\fpeval{\useKV[ClesPuzzleP]{Etages}-1}}}\do{%
    +          \xintFor* ##2 in {\xintSeq{1}{##1}}\do{%
    +            \xintifForFirst{}{&}
    +          }\xintFor* ##2 in {\xintSeq{1}{\fpeval{\useKV[ClesPuzzleP]{Etages}-##1}}}\do{%
    +            &\Block[draw]{\useKV[ClesPuzzleP]{NbLignes}-2}{\stepcounter{PfCPuzzlePcpt}\setcounter{PfCPuzzlePavcpt}{\PfCPuzzlePCptLettre[\thePfCPuzzlePcpt]}{\Huge\Alph{PfCPuzzlePavcpt}}}&
    +          }%
    +          \\
    +          \xintFor* ##3 in {\xintSeq{2}{\useKV[ClesPuzzleP]{NbLignes}}}\do{%
    +            \xintFor* ##4 in {\xintSeq{1}{\fpeval{\useKV[ClesPuzzleP]{Etages}*2}}}\do{%
    +              \xintifForLast{\\}{&}
    +            }%
    +          }%
    +        }%
    +      \end{NiceTabular}
    +    \end{center}
    +  }{%
    +    \ifboolKV[ClesPuzzleP]{EnonceQuestion}{%
    +      % Plateau des questions
    +      \setcounter{PfCPuzzlePcpt}{0}%
    +      \begin{center}
    +        \begin{NiceTabular}{*{10}{m{\PfCPuzzleP}}}%[hvlines]
    +          \xintFor* ##3 in {\xintSeq{1}{\fpeval{ceil(\PfCPuzzlePQuestionslen/5)}}}\do{%
    +            \xintFor* ##1 in {\xintSeq{1}{5}}\do{%
    +              \xintifForLast{%
    +                \Block[draw]{\useKV[ClesPuzzleP]{NbLignes}-2}{%
    +                  \stepcounter{PfCPuzzlePcpt}%
    +                  \xintifboolexpr{\thePfCPuzzlePcpt>\PfCPuzzlePQuestionslen}{}{%
    +                    \xintFor* ##4 in{\xintSeq{1}{\PfCPuzzlePQuestionslen}}\do{%
    +                      \xintifboolexpr{\thePfCPuzzlePcpt==\PfCPuzzlePCptLettre[##4]}{\PfCPuzzlePQuestions[##4]}{}%
    +                    }%
    +                  }%
    +                }&%
    +              }{%
    +                \Block[draw]{\useKV[ClesPuzzleP]{NbLignes}-2}{%
    +                  \stepcounter{PfCPuzzlePcpt}%
    +                  \xintifboolexpr{\thePfCPuzzlePcpt>\PfCPuzzlePQuestionslen}{}{%
    +                    \xintFor* ##4 in{\xintSeq{1}{\PfCPuzzlePQuestionslen}}\do{%
    +                      \xintifboolexpr{\thePfCPuzzlePcpt==\PfCPuzzlePCptLettre[##4]}{\PfCPuzzlePQuestions[##4]}{}%
    +                    }%
    +                  }%
    +                }%
    +                &&%
    +              }%
    +            }\\%
    +            \xintFor* ##1 in {\xintSeq{2}{\useKV[ClesPuzzleP]{NbLignes}}}\do{%
    +              \xintFor* ##2 in {\xintSeq{1}{10}}\do{%
    +                \xintifForLast{\\}{&}
    +              }%
    +            }%
    +          }%
    +          \CodeAfter
    +          \setcounter{PfCPuzzlePcpt}{0}%
    +          \xintFor* ##1 in {\xintSeq{1}{\fpeval{ceil(\PfCPuzzlePQuestionslen/5)}}}\do{%
    +            \xintFor* ##2 in {\xintSeq{1}{5}}\do{%
    +              \tikz{\node[anchor={north west},xshift=1mm,yshift=-1mm] at (\fpeval{(##1-1)*\useKV[ClesPuzzleP]{NbLignes}+1}-|\fpeval{2*##2-1}) {\stepcounter{PfCPuzzlePcpt}\Large\bfseries\Alph{PfCPuzzlePcpt}};}%
    +              \tikz{\node[anchor={south east},xshift=-2mm,yshift=-2mm,rectangle,draw] at (\fpeval{##1*\useKV[ClesPuzzleP]{NbLignes}}-|\fpeval{2*##2+1}) {\large\bfseries\hbox to 1.2\PfCPuzzleP{\rule{0pt}{1.8ex}}};}%
    +            }%
    +          }%
    +        \end{NiceTabular}
    +      \end{center}%
    +    }{%
    +      % Plateau de jeu
    +      \begin{center}
    +        \begin{NiceTabular}{*{\fpeval{\useKV[ClesPuzzleP]{Etages}*2}}{m{\PfCPuzzleP}}}%[hvlines]
    +          \xintFor* ##1 in {\xintSeq{1}{\fpeval{\useKV[ClesPuzzleP]{Etages}}}}\do{%
    +            \xintifForLast{\Block[draw]{\useKV[ClesPuzzleP]{NbLignes}-2}{\stepcounter{PfCPuzzlePcpt}\setcounter{PfCPuzzlePavcpt}{\PfCPuzzlePCptLettre[\thePfCPuzzlePcpt]}{\Huge\Alph{PfCPuzzlePavcpt}}}&}{\Block[draw]{\useKV[ClesPuzzleP]{NbLignes}-2}{\stepcounter{PfCPuzzlePcpt}\setcounter{PfCPuzzlePavcpt}{\PfCPuzzlePCptLettre[\thePfCPuzzlePcpt]}{\Huge\Alph{PfCPuzzlePavcpt}}}&&}
    +          }\\%
    +          \xintFor* ##1 in {\xintSeq{2}{\useKV[ClesPuzzleP]{NbLignes}}}\do{%
    +            \xintFor* ##2 in {\xintSeq{1}{\fpeval{\useKV[ClesPuzzleP]{Etages}*2}}}\do{%
    +              \xintifForLast{\\}{&}
    +            }%
    +          }%
    +          \xintFor* ##1 in {\xintSeq{1}{\fpeval{\useKV[ClesPuzzleP]{Etages}-1}}}\do{%
    +            \xintFor* ##2 in {\xintSeq{1}{##1}}\do{%
    +              \xintifForFirst{}{&}
    +            }\xintFor* ##2 in {\xintSeq{1}{\fpeval{\useKV[ClesPuzzleP]{Etages}-##1}}}\do{%
    +              &\Block[draw]{\useKV[ClesPuzzleP]{NbLignes}-2}{}&
    +            }%
    +            \\
    +            \xintFor* ##3 in {\xintSeq{2}{\useKV[ClesPuzzleP]{NbLignes}}}\do{%
    +              \xintFor* ##4 in {\xintSeq{1}{\fpeval{\useKV[ClesPuzzleP]{Etages}*2}}}\do{%
    +                \xintifForLast{\\}{&}
    +              }%
    +            }%
    +          }%
    +        \end{NiceTabular}
    +      \end{center}
    +    }%
    +  }%
    +}%
    +
     %%%
     % Calisson
    -%
    +%%%
     \setKVdefault[Calisson]{Taille=3,Solution=false,Rayon=5cm,Couleur=red}%
     
     \def\UpdatetoksCalissong#1\nil{\addtotok\tokcalissonlistetracesg{,"#1"}}%
    @@ -2595,8 +3251,13 @@
       \setsepchar[*]{,*/}%
       \ignoreemptyitems
       \readlist*\ListePfCEngrenages{#2}%
    -  \foreachitem\compteur\in\ListePfCEngrenages{\expandafter\UpdatetoksEngrenages\compteur\nil}%
    -  \BuildEngrenages{\the\tokPfCEngrenages}%
    +  \setsepchar{,}
    +  \xdef\PfCFooEngrenages{}
    +  % \foreachitem\compteur\in\ListePfCEngrenages{\expandafter\UpdatetoksEngrenages\compteur\nil}%
    +  \foreachitem\compteur\in\ListePfCEngrenages{%
    +    \xdef\PfCFooEngrenages{\PfCFooEngrenages \ListePfCEngrenages[\compteurcnt,1],\ListePfCEngrenages[\compteurcnt,2],}%
    +  }%
    +  \BuildEngrenages{\PfCFooEngrenages}%
     }%
     
     \NewDocumentCommand\BuildEngrenages{m}{%
    @@ -9212,7 +9873,7 @@ transform canvas={xshift=0em,yshift=0em}},rectangle,rounded corners,ultra thick,
         \StrLen{\ListeMotsEmpiles[\compteurcnt,2]}[\LongueurMot]%
         \xintifboolexpr{\ListeMotsEmpilesMax<\fpeval{\ListeMotsEmpiles[\compteurcnt,1]+\LongueurMot}}{\xdef\ListeMotsEmpilesMax{\fpeval{\ListeMotsEmpiles[\compteurcnt,1]+\LongueurMot}}}{}%
       }%
    -  \begin{NiceTabular}{c|*{\fpeval{\ListeMotsEmpilesMax}}{m{0.5em}}}%
    +  \begin{NiceTabular}{c|*{\fpeval{\ListeMotsEmpilesMax}}{m{10pt}}}%
         \Block{1-\fpeval{\useKV[ClesMotEmpile]{Colonne}+2}}{}\xintFor* ##1 in {\xintSeq {1}{\fpeval{\useKV[ClesMotEmpile]{Colonne}}}}\do{&}&$\downarrow$\xintFor* ##1 in {\xintSeq {1}{\fpeval{\ListeMotsEmpilesMax-\useKV[ClesMotEmpile]{Colonne}-1}}}\do{&}\\
         \xintFor* ##1 in {\xintSeq {1}{\fpeval{\ListeMotsEmpileslen}}}\do{%
           \rule[-1.2ex]{0pt}{3.8ex}\stepcounter{CompteurMotEmpile}\Alph{CompteurMotEmpile}&\Block{1-\fpeval{\ListeMotsEmpiles[##1,1]}}{}\xintFor* ##2 in {\xintSeq {1}{\fpeval{\ListeMotsEmpiles[##1,1]}}}\do{%
    @@ -9660,24 +10321,44 @@ couleur indiquée, le nombre de cases donné par le résultat du calcul.
       }%
     }%
     
    -%%% Dessin Gradue %%%
    -\setKVdefault[DessinGradue]{Lignes=10,Debut=-5,Fin=5,Pas=10,Solution=false,EcartVertical=1.5,LignesIdentiques,Longueur=10,Echelle=1,Droites=false,DemiDroites=false}
    +%%%
    +% Dessin Gradue
    +%%%
    +\setKVdefault[DessinGradue]{Lignes=10,Debut=-5,Fin=5,Pas=10,Solution=false,EcartVertical=1.5,LignesIdentiques,Longueur=10,Echelle=1,Droites=false,DemiDroites=false,OrigineVariable=false,Code=false}
    +\defKV[DessinGradue]{Traces=\setKV[DessinGradue]{Code}}%
     
    -\def\TraceDessinGradue#1#2#3#4#5#6{%
    +\def\TraceDessinGradueComplet#1#2#3{%
       \ifluatex
       \mplibforcehmode
       \begin{mplibcode}
    +    % Paramètres
    +    LongueurLigne=\useKV[DessinGradue]{Longueur};
    +    EcartVertical=\useKV[DessinGradue]{EcartVertical};
    +    Pas:=\useKV[DessinGradue]{Pas};
    +    NbLignes=\useKV[DessinGradue]{Lignes};
    +    Echelle=\useKV[DessinGradue]{Echelle};
    +    Debut:=\useKV[DessinGradue]{Debut};
    +    Fin:=\useKV[DessinGradue]{Fin};
    +    
    +    boolean Solution,Droites,DemiDroites,LignesIdentiques,OrigineVariable,Code;
    +    Solution=\useKV[DessinGradue]{Solution};
    +    LignesIdentiques:=\useKV[DessinGradue]{LignesIdentiques};
    +    OrigineVariable:=\useKV[DessinGradue]{OrigineVariable};
    +    Droites=\useKV[DessinGradue]{Droites};
    +    DemiDroites=\useKV[DessinGradue]{DemiDroites};
    +    Code=\useKV[DessinGradue]{Code};
    +
         pair La,Lb,Lab[];
         pair A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A',B',C',D',E',F',G',H',I',J',K',L',M',N',O',P',Q',R',S',T',U',V',W',X',Y',Z',A'',B'',C'',D'',E'',F'',G'',H'',I'',J'',K'',L'',M'',N'',O'',P'',Q'',R'',S'',T'',U'',V'',W'',X'',Y'',Z'';
    +    
         La=(0,0);
         Lb-La=u*(\useKV[DessinGradue]{Longueur},0);
    -    boolean Solution;
    -    Solution=\useKV[DessinGradue]{Solution};
    -    for k=0 upto #4:
    -    Lab[k]=(k/#4)[La,Lb];
    -    endfor;
    -    picture EnsembleLignes,Lignes;
    -    Lignes=image(
    +
    +    % On définit une fonction pour tracer les lignes en fonction du pas "Partage"
    +    vardef TraceLignes(expr Partage)=
    +    save RecupLigne;
    +    picture RecupLigne;
    +    RecupLigne=image(
         if \useKV[DessinGradue]{Droites}:
         drawarrow 1.05[Lb,La]--1.05[La,Lb];
         elseif \useKV[DessinGradue]{DemiDroites}:
    @@ -9685,259 +10366,275 @@ couleur indiquée, le nombre de cases donné par le résultat du calcul.
         else:
         trace segment(La,Lb);
         fi;
    -    for k=0 upto #4:
    -    trace (Lab[k]+u*(0,-0.1))--(Lab[k]+u*(0,0.1));
    +    for kl=0 upto Partage:
    +    Lab[kl]:=(kl/Partage)[La,Lb];
    +    trace (Lab[kl]+u*(0,-0.1))--(Lab[kl]+u*(0,0.1));
         endfor;
    -    labeloffset:=labeloffset*1.5;
    -    label.top(TEX("\num{"&decimal(#2)&"}"),La);
    -    label.top(TEX("\num{"&decimal(#3)&"}"),Lb);
    -    labeloffset:=labeloffset/1.5;
         );
    -    EnsembleLignes=image(
    -    if Solution:
    -    drawoptions(withcolor 0.5white);
    -    fi;
    -    for k=0 upto #1-1:
    -    trace Lignes shifted(k*u*(0,-\useKV[DessinGradue]{EcartVertical}));
    -    label(TEX("(\num{"&decimal(k+1)&"})"),La+u*(-1.5,-k*\useKV[DessinGradue]{EcartVertical}));
    -    endfor;
    -    drawoptions();
    -    if Solution:
    -    n:=0;
    +    RecupLigne
    +    enddef;
    +
    +    % On définit une fonction pour nommer les points nécessaires.
    +    vardef DefinirPoints(text t)=
         numeric nblignes,nbpas;
    -    for p_=#5:
    +    n:=0;
    +    for p_=t:
         n:=n+1;
         if (n mod 3)=1:
         nblignes:=p_;
         elseif (n mod 3)=2:
         nbpas:=p_;
         elseif (n mod 3)=0:
    -    p_=(nbpas/#4)[La,Lb] shifted(u*(0,(nblignes-1)*(-\useKV[DessinGradue]{EcartVertical})));
    +    p_=(nbpas/TotalPas[nblignes])[La,Lb] shifted(u*(0,(nblignes-1)*(-EcartVertical)));
         fi;
         endfor;
    -    for p_=#6:
    +    enddef;
    +
    +    % On détermine le nombre de lignes et les origines particulières
    +    pair OrigA[],OrigB[];
    +    if LignesIdentiques:
    +    for k=1 upto NbLignes:
    +    TotalPas[k]:=Pas;
    +    OrigA[k]=(Debut,0);
    +    OrigB[k]=(Fin,TotalPas[k]);
    +    endfor;
    +    else:
    +    if OrigineVariable:
    +    n:=0;
    +    for p_=#1:
    +    n:=n+1;
    +    OrigA[n]:=p_;
    +    TotalPas[n]:=Pas;
    +    endfor;
    +    NbLignes:=n/2;
    +    else:
    +    n:=0;
    +    for p_=#1:
    +    n:=n+1;
    +    TotalPas[n]=bluepart(p_);
    +    OrigA[n]=(redpart(p_),0);
    +    OrigB[n]=(greenpart(p_),TotalPas[n]);
    +    endfor;
    +    NbLignes:=n;
    +    fi;
    +    fi;
    +
    +    picture EnsembleLignes;
    +
    +    DefinirPoints(#2);
    +    
    +    EnsembleLignes=image(
    +    if Solution:
    +    drawoptions(withcolor 0.5white);
    +    fi;
    +    % On trace les lignes et on labelise le numéro de la ligne.
    +    for k=0 upto NbLignes-1:
    +    trace TraceLignes(TotalPas[k+1]) shifted(k*u*(0,-EcartVertical));
    +    if Droites:
    +    label.lft(TEX("(\num{"&decimal(k+1)&"})"),1.05[Lb,La] shifted(k*u*(0,-EcartVertical)));
    +    else:
    +    label.lft(TEX("(\num{"&decimal(k+1)&"})"),La shifted(k*u*(0,-EcartVertical)));
    +    fi;
    +    endfor;
    +    % On labelise les origines
    +    labeloffset:=labeloffset*1.5;
    +    for k=0 upto NbLignes-1:
    +    if OrigineVariable:
    +    label.top(TEX("\num{"&decimal(xpart(OrigA[2*k+1]))&"}"),(ypart(OrigA[2*k+1])/Pas)[La,Lb]+u*(0,-k*EcartVertical));
    +    label.top(TEX("\num{"&decimal(xpart(OrigA[2*(k+1)]))&"}"),(ypart(OrigA[2*(k+1)])/Pas)[La,Lb]+u*(0,-k*EcartVertical));
    +    else:
    +    label.top(TEX("\num{"&decimal(xpart(OrigA[k+1]))&"}"),La+u*(0,-k*EcartVertical));
    +    label.top(TEX("\num{"&decimal(xpart(OrigB[k+1]))&"}"),Lb+u*(0,-k*EcartVertical));
    +    fi;
    +    endfor;
    +    drawoptions();
    +    labeloffset:=labeloffset/1.5;
    +
    +    % On trace la solution
    +    if Solution:
    +    for p_=#3:
         trace p_ withpen pencircle scaled 1.5;
         endfor;
         fi;
    +    % On ajoute des tracés si nécessaire
    +    if Code:
    +    \useKV[DessinGradue]{Traces};
    +    fi;
         );
         trace EnsembleLignes scaled \useKV[DessinGradue]{Echelle};
       \end{mplibcode}
       \else
    -  \begin{mpost}[mpsettings={numeric LongueurLigne; LongueurLigne=\useKV[DessinGradue]{Longueur};numeric EcartVertical; EcartVertical=\useKV[DessinGradue]{EcartVertical}; numeric Echelle; Echelle=\useKV[DessinGradue]{Echelle}; boolean Solution,Droites,DemiDroites; Solution=\useKV[DessinGradue]{Solution};Droites=\useKV[DessinGradue]{Droites};DemiDroites=\useKV[DessinGradue]{DemiDroites};}]
    +  \begin{mpost}[mpsettings={%
    +    LongueurLigne=\useKV[DessinGradue]{Longueur};
    +    EcartVertical=\useKV[DessinGradue]{EcartVertical};
    +    Pas:=\useKV[DessinGradue]{Pas};
    +    NbLignes=\useKV[DessinGradue]{Lignes};
    +    Echelle=\useKV[DessinGradue]{Echelle};
    +    Debut:=\useKV[DessinGradue]{Debut};
    +    Fin:=\useKV[DessinGradue]{Fin};
    +    boolean Solution,Droites,DemiDroites,LignesIdentiques,OrigineVariable,Code;
    +    Solution=\useKV[DessinGradue]{Solution};
    +    LignesIdentiques:=\useKV[DessinGradue]{LignesIdentiques};
    +    OrigineVariable:=\useKV[DessinGradue]{OrigineVariable};
    +    Droites=\useKV[DessinGradue]{Droites};
    +    DemiDroites=\useKV[DessinGradue]{DemiDroites};
    +    Code=\useKV[DessinGradue]{Code};
    +    vardef EffectuerLesTraces=
    +    if Code:
    +    \useKV[DessinGradue]{Traces};
    +    fi;
    +    enddef;
    +    }]
         pair La,Lb,Lab[];
         pair A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A',B',C',D',E',F',G',H',I',J',K',L',M',N',O',P',Q',R',S',T',U',V',W',X',Y',Z',A'',B'',C'',D'',E'',F'',G'',H'',I'',J'',K'',L'',M'',N'',O'',P'',Q'',R'',S'',T'',U'',V'',W'',X'',Y'',Z'';
    +    
         La=(0,0);
    -    Lb-La=u*(LongueurLigne,0);
    -    for k=0 upto #4:
    -    Lab[k]=(k/#4)[La,Lb];
    -    endfor;
    -    picture EnsembleLignes,Lignes;
    -    Lignes=image(
    -    if Droites:
    +    Lb-La=u*(\useKV[DessinGradue]{Longueur},0);
    +
    +    % On définit une fonction pour tracer les lignes en fonction du pas "Partage"
    +    vardef TraceLignes(expr Partage)=
    +    save RecupLigne;
    +    picture RecupLigne;
    +    RecupLigne=image(
    +    if \useKV[DessinGradue]{Droites}:
         drawarrow 1.05[Lb,La]--1.05[La,Lb];
    -    elseif DemiDroites:
    +    elseif \useKV[DessinGradue]{DemiDroites}:
         drawarrow La--1.05[La,Lb];
         else:
         trace segment(La,Lb);
         fi;
    -    for k=0 upto #4:
    -    trace (Lab[k]+u*(0,-0.1))--(Lab[k]+u*(0,0.1));
    +    for kl=0 upto Partage:
    +    Lab[kl]:=(kl/Partage)[La,Lb];
    +    trace (Lab[kl]+u*(0,-0.1))--(Lab[kl]+u*(0,0.1));
         endfor;
    -    labeloffset:=labeloffset*1.5;
    -    label.top(LATEX("\num{"&decimal(#2)&"}"),La);
    -    label.top(LATEX("\num{"&decimal(#3)&"}"),Lb);
    -    labeloffset:=labeloffset/1.5;
         );
    -    EnsembleLignes=image(
    -    if Solution:
    -    drawoptions(withcolor 0.5white);
    -    fi;
    -    for k=0 upto #1-1:
    -    trace Lignes shifted(k*u*(0,-EcartVertical));
    -    label(LATEX("(\num{"&decimal(k+1)&"})"),La+u*(-1.5,-k*EcartVertical));
    -    endfor;
    -    drawoptions();
    -    if Solution:
    -    n:=0;
    +    RecupLigne
    +    enddef;
    +
    +    % On définit une fonction pour nommer les points nécessaires.
    +    vardef DefinirPoints(text t)=
         numeric nblignes,nbpas;
    -    for p_=#5:
    +    n:=0;
    +    for p_=t:
         n:=n+1;
         if (n mod 3)=1:
         nblignes:=p_;
         elseif (n mod 3)=2:
         nbpas:=p_;
         elseif (n mod 3)=0:
    -    p_=(nbpas/#4)[La,Lb] shifted(u*(0,(nblignes-1)*(-EcartVertical)));
    +    p_=(nbpas/TotalPas[nblignes])[La,Lb] shifted(u*(0,(nblignes-1)*(-EcartVertical)));
         fi;
         endfor;
    -    for p_=#6:
    -    trace p_ withpen pencircle scaled 1.5;
    -    endfor;
    -    fi;
    -    );
    -    trace EnsembleLignes scaled Echelle;
    -  \end{mpost}
    -  \fi
    -}
    +    enddef;
     
    -\def\TraceDessinGradueMul#1#2#3{%
    -  \ifluatex
    -  \mplibforcehmode
    -  \begin{mplibcode}
    -    pair La,Lb,Lab[];
    -    La=(0,0);
    -    pair A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A',B',C',D',E',F',G',H',I',J',K',L',M',N',O',P',Q',R',S',T',U',V',W',X',Y',Z',A'',B'',C'',D'',E'',F'',G'',H'',I'',J'',K'',L'',M'',N'',O'',P'',Q'',R'',S'',T'',U'',V'',W'',X'',Y'',Z'';
    -    Lb-La=u*(\useKV[DessinGradue]{Longueur},0);
    -    EcartVertical=\useKV[DessinGradue]{EcartVertical};
    -    boolean Solution;
    -    Solution=\useKV[DessinGradue]{Solution};
    -    picture EnsembleLignes,Lignes;
    -    EnsembleLignes=image(
    -    if Solution:
    -    drawoptions(withcolor 0.5white);
    -    fi;
    +    % On détermine le nombre de lignes et les origines particulières
    +    pair OrigA[],OrigB[];
    +    if LignesIdentiques:
    +    for k=1 upto NbLignes:
    +    TotalPas[k]:=Pas;
    +    OrigA[k]=(Debut,0);
    +    OrigB[k]=(Fin,TotalPas[k]);
    +    endfor;
    +    else:
    +    if OrigineVariable:
         n:=0;
    -    m:=0;
         for p_=#1:
         n:=n+1;
    -    if \useKV[DessinGradue]{Droites}:
    -    drawarrow (1.05[Lb,La]--1.05[La,Lb]) shifted((n-1)*u*(0,-EcartVertical));
    -    elseif \useKV[DessinGradue]{DemiDroites}:
    -    drawarrow (La--1.05[La,Lb]) shifted((n-1)*u*(0,-EcartVertical));
    -    else:
    -    trace segment(La,Lb) shifted((n-1)*u*(0,-EcartVertical));
    -    fi;
    -    label(TEX("(\num{"&decimal(n)&"})"),La+u*(-1.5,-(n-1)*EcartVertical));
    -    for k=0 upto bluepart(p_):
    -    m:=bluepart(p_);
    -    retienspas[n]:=m;
    -    Lab[k]:=(k/m)[La,Lb];
    -    trace ((Lab[k]+u*(0,-0.1))--(Lab[k]+u*(0,0.1))) shifted((n-1)*u*(0,-EcartVertical));
    +    OrigA[n]:=p_;
    +    TotalPas[n]:=Pas;
         endfor;
    -    labeloffset:=labeloffset*1.5;
    -    label.top(TEX("\num{"&decimal(redpart(p_))&"}"),La shifted((n-1)*u*(0,-EcartVertical)));
    -    label.top(TEX("\num{"&decimal(greenpart(p_))&"}"),Lb shifted((n-1)*u*(0,-EcartVertical)));
    -    labeloffset:=labeloffset/1.5;
    -    endfor;
    -    drawoptions();
    -    if Solution:
    +    NbLignes:=n/2;
    +    else:
         n:=0;
    -    numeric nblignes,nbpas;
    -    for p_=#2:
    +    for p_=#1:
         n:=n+1;
    -    if (n mod 3)=1:
    -    nblignes:=p_;
    -    elseif (n mod 3)=2:
    -    nbpas:=p_;
    -    elseif (n mod 3)=0:
    -    p_=(nbpas/retienspas[nblignes])[La,Lb] shifted(u*(0,(nblignes-1)*(-\useKV[DessinGradue]{EcartVertical})));
    -    fi;
    -    endfor;
    -    %Differents traces
    -    for p_=#3:
    -    trace p_ withpen pencircle scaled 1.5;
    +    TotalPas[n]=bluepart(p_);
    +    OrigA[n]=(redpart(p_),0);
    +    OrigB[n]=(greenpart(p_),TotalPas[n]);
         endfor;
    +    NbLignes:=n;
         fi;
    -    );
    -    trace EnsembleLignes scaled \useKV[DessinGradue]{Echelle};
    -  \end{mplibcode}
    -  \else
    -  \begin{mpost}[mpsettings={numeric LongueurLigne; LongueurLigne=\useKV[DessinGradue]{Longueur};numeric EcartVertical; EcartVertical=\useKV[DessinGradue]{EcartVertical}; numeric Echelle; Echelle=\useKV[DessinGradue]{Echelle}; boolean Solution,Droites,DemiDroites; Solution=\useKV[DessinGradue]{Solution}; Droites=\useKV[DessinGradue]{Droites}; DemiDroites=\useKV[DessinGradue]{DemiDroites};}]
    -    pair La,Lb,Lab[];
    -    La=(0,0);
    -    pair A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,A',B',C',D',E',F',G',H',I',J',K',L',M',N',O',P',Q',R',S',T',U',V',W',X',Y',Z',A'',B'',C'',D'',E'',F'',G'',H'',I'',J'',K'',L'',M'',N'',O'',P'',Q'',R'',S'',T'',U'',V'',W'',X'',Y'',Z'';
    -    Lb-La=u*(LongueurLigne,0);
    -    picture EnsembleLignes,Lignes;
    +    fi;
    +
    +    picture EnsembleLignes;
    +
    +    DefinirPoints(#2);
    +    
         EnsembleLignes=image(
         if Solution:
         drawoptions(withcolor 0.5white);
         fi;
    -    n:=0;
    -    m:=0;
    -    for p_=#1:
    -    n:=n+1;
    +    % On trace les lignes et on labelise le numéro de la ligne.
    +    for k=0 upto NbLignes-1:
    +    trace TraceLignes(TotalPas[k+1]) shifted(k*u*(0,-EcartVertical));
         if Droites:
    -    drawarrow (1.05[Lb,La]--1.05[La,Lb]) shifted((n-1)*u*(0,-EcartVertical));
    -    elseif DemiDroites:
    -    drawarrow (La--1.05[La,Lb]) shifted((n-1)*u*(0,-EcartVertical));
    +    label.lft(LATEX("(\num{"&decimal(k+1)&"})"),1.05[Lb,La] shifted(k*u*(0,-EcartVertical)));
         else:
    -    trace segment(La,Lb) shifted((n-1)*u*(0,-EcartVertical));
    +    label.lft(LATEX("(\num{"&decimal(k+1)&"})"),La shifted(k*u*(0,-EcartVertical)));
         fi;
    -    label(LATEX("(\num{"&decimal(n)&"})"),La+u*(-1.5,-(n-1)*EcartVertical));
    -    for k=0 upto bluepart(p_):
    -    m:=bluepart(p_);
    -    retienspas[n]:=m;
    -    Lab[k]:=(k/m)[La,Lb];
    -    trace ((Lab[k]+u*(0,-0.1))--(Lab[k]+u*(0,0.1))) shifted((n-1)*u*(0,-EcartVertical));
         endfor;
    +    % On labelise les origines
         labeloffset:=labeloffset*1.5;
    -    label.top(LATEX("\num{"&decimal(redpart(p_))&"}"),La shifted((n-1)*u*(0,-EcartVertical)));
    -    label.top(LATEX("\num{"&decimal(greenpart(p_))&"}"),Lb shifted((n-1)*u*(0,-EcartVertical)));
    -    labeloffset:=labeloffset/1.5;
    +    for k=0 upto NbLignes-1:
    +    if OrigineVariable:
    +    label.top(LATEX("\num{"&decimal(xpart(OrigA[2*k+1]))&"}"),(ypart(OrigA[2*k+1])/Pas)[La,Lb]+u*(0,-k*EcartVertical));
    +    label.top(LATEX("\num{"&decimal(xpart(OrigA[2*(k+1)]))&"}"),(ypart(OrigA[2*(k+1)])/Pas)[La,Lb]+u*(0,-k*EcartVertical));
    +    else:
    +    label.top(LATEX("\num{"&decimal(xpart(OrigA[k+1]))&"}"),La+u*(0,-k*EcartVertical));
    +    label.top(LATEX("\num{"&decimal(xpart(OrigB[k+1]))&"}"),Lb+u*(0,-k*EcartVertical));
    +    fi;
         endfor;
         drawoptions();
    +    labeloffset:=labeloffset/1.5;
    +    
    +    % On trace la solution
         if Solution:
    -    n:=0;
    -    numeric nblignes,nbpas;
    -    for p_=#2:
    -    n:=n+1;
    -    if (n mod 3)=1:
    -    nblignes:=p_;
    -    elseif (n mod 3)=2:
    -    nbpas:=p_;
    -    elseif (n mod 3)=0:
    -    p_=(nbpas/retienspas[nblignes])[La,Lb] shifted(u*(0,(nblignes-1)*(-EcartVertical)));
    -    fi;
    -    endfor;
    -    %Differents traces
         for p_=#3:
         trace p_ withpen pencircle scaled 1.5;
         endfor;
         fi;
    +    % On ajoute des tracés si nécessaire
    +    if Code:
    +    EffectuerLesTraces;
    +    fi;
         );
    -    trace EnsembleLignes scaled Echelle;
    +    trace EnsembleLignes scaled \useKV[DessinGradue]{Echelle};
       \end{mpost}
       \fi
    -}
    +}%
     
    -\def\UpdateLignes#1/#2/#3\nil{\addtotok\toklisteptsgrad{#1,#3,#2,}}
    -\def\UpdateTraces#1\nil{\addtotok\toklistetracesgrad{#1,}}
    -\def\UpdateDefLignes#1/#2/#3\nil{\addtotok\toklistedefligne{(#1,#2,#3),}}
    -\def\UpdateDefDroites#1/#2/#3/#4\nil{\addtotok\toklistedefligne{(#1,#2,#3),#4,}}
    +\def\UpdateLignes#1/#2/#3\nil{\addtotok\toklisteptsgrad{#1,#3,#2,}}%
    +\def\UpdateTraces#1\nil{\addtotok\toklistetracesgrad{#1,}}%
    +\def\UpdateDefLignes#1/#2/#3\nil{\addtotok\toklistedefligne{(#1,#2,#3),}}%
     
     \newcommand\DessinGradue[4][]{%
       \useKVdefault[DessinGradue]%
       \setKV[DessinGradue]{#1}%
    +  \newtoks\toklisteptsgrad%
    +  \newtoks\toklistetracesgrad%
    +  % On retiens les données pour la solution
    +  \setsepchar[*]{,*/}%
    +  \readlist\ListePG{#3}%
    +  \setsepchar[*]{§*/}%
    +  \readlist\ListeTraces{#4}%
    +  \foreachitem\compteur\in\ListePG{\expandafter\UpdateLignes\compteur\nil}%
    +  \foreachitem\compteur\in\ListeTraces{\expandafter\UpdateTraces\compteur\nil}%
       \ifboolKV[DessinGradue]{LignesIdentiques}{%
    -    \newtoks\toklisteptsgrad%
    -    \newtoks\toklistetracesgrad%
    -    \ifboolKV[DessinGradue]{Solution}{%
    -      \setsepchar[*]{,*/}%
    -      \readlist\ListePG{#3}%
    -      \setsepchar[*]{§*/}%
    -      \readlist\ListeTraces{#4}%
    -      \foreachitem\compteur\in\ListePG{\expandafter\UpdateLignes\compteur\nil}%
    -      \foreachitem\compteur\in\ListeTraces{\expandafter\UpdateTraces\compteur\nil}%
    -    }{}%
    -    \TraceDessinGradue{\useKV[DessinGradue]{Lignes}}{\useKV[DessinGradue]{Debut}}{\useKV[DessinGradue]{Fin}}{\useKV[DessinGradue]{Pas}}{\the\toklisteptsgrad}{\the\toklistetracesgrad}%
    +    \TraceDessinGradueComplet{}{\the\toklisteptsgrad}{\the\toklistetracesgrad}%
       }{%
         \setsepchar[*]{,*/}%
         \readlist\ListeDefLigne{#2}%
         \xdef\toklistedefligne{}%
    -    \foreachitem\compteur\in\ListeDefLigne{%
    -      \xdef\toklistedefligne{\toklistedefligne (\ListeDefLigne[\compteurcnt,1],\ListeDefLigne[\compteurcnt,2],\ListeDefLigne[\compteurcnt,3]),}%
    +    \ifboolKV[DessinGradue]{OrigineVariable}{%
    +      \foreachitem\compteur\in\ListeDefLigne{%
    +        \xdef\toklistedefligne{\toklistedefligne (\ListeDefLigne[\compteurcnt,1],\ListeDefLigne[\compteurcnt,2]),(\ListeDefLigne[\compteurcnt,3],\ListeDefLigne[\compteurcnt,4]),}%
    +      }%
    +    }{%
    +      \foreachitem\compteur\in\ListeDefLigne{%
    +        \xdef\toklistedefligne{\toklistedefligne (\ListeDefLigne[\compteurcnt,1],\ListeDefLigne[\compteurcnt,2],\ListeDefLigne[\compteurcnt,3]),}%
    +      }%
         }%
    -    \newtoks\toklisteptsgrad%
    -    \newtoks\toklistetracesgrad%
    -    \ifboolKV[DessinGradue]{Solution}{%
    -      \setsepchar[*]{,*/}%
    -      \readlist\ListePG{#3}%
    -      \setsepchar[*]{§*/}%
    -      \readlist\ListeTraces{#4}%
    -      \foreachitem\compteur\in\ListePG{\expandafter\UpdateLignes\compteur\nil}%
    -      \foreachitem\compteur\in\ListeTraces{\expandafter\UpdateTraces\compteur\nil}%
    -    }{}%
    -    \TraceDessinGradueMul{\toklistedefligne}{\the\toklisteptsgrad}{\the\toklistetracesgrad}%
    +    \TraceDessinGradueComplet{\toklistedefligne}{\the\toklisteptsgrad}{\the\toklistetracesgrad}%
       }%
     }%
     
    @@ -10291,16 +10988,17 @@ couleur indiquée, le nombre de cases donné par le résultat du calcul.
       \mplibforcehmode%
       \begin{mplibcode}%
         input PfCCalculatrice;
    +    LargeurEcran:=\useKV[ClesCalculatrice]{Largeur};
         LCD(#1)(#2)(#3);
       \end{mplibcode}
       \else
    -  \begin{mpost}[mpsettings={input PfCCalculatrice;}]
    +  \begin{mpost}[mpsettings={input PfCCalculatrice;LargeurEcran:=\useKV[ClesCalculatrice]{Largeur};}]
         LCD(#1)(#2)(#3);    
       \end{mpost}
       \fi
     }
     
    -\setKVdefault[ClesCalculatrice]{Ecran=false,NbLignes=0,BL=0.775}
    +\setKVdefault[ClesCalculatrice]{Ecran=false,NbLignes=0,BL=0.775,Largeur=120}
     
     \newcommand\Calculatrice[2][]{%
       \setstackgap{L}{\useKV[ClesCalculatrice]{BL}\baselineskip}%
    @@ -20664,11 +21362,10 @@ Barre=false,Longueur=10cm,Hauteur=5mm,Bicolore=false,EcartBarre=0%Grille est dis
       \fi
     }
     
    -
     %%%
     % Fonction
     %%%
    -\setKVdefault[ClesFonction]{Nom=f,Variable=x,Calcul=x,Tableau=false,Largeur=5mm,Ecriture=false,Definition=false,Points=false,Tangentes=false,PasX=1,PasY=1,UniteX=1,UniteY=1,Prolonge=false,Trace=false,Catmull=false,Epaisseur=1,Couleur=black,PointsCourbe=true,Codes=false}
    +\setKVdefault[ClesFonction]{Nom=f,Variable=x,Calcul=x,Tableau=false,Largeur=5mm,Ecriture=false,Definition=false,Points=false,Tangentes=false,PasX=1,PasY=1,UniteX=1,UniteY=1,Prolonge=false,Trace=false,Catmull=false,Epaisseur=1,Couleur=black,CouleurTrace=black,PointsCourbe=true,Codes=false,Origine={(0,0)},Vide=false}
     \defKV[ClesFonction]{Traces=\setKV[ClesFonction]{Codes}}%
     
     \newtoks\toklistePtsFn%pour la discipline
    @@ -20676,172 +21373,91 @@ Barre=false,Longueur=10cm,Hauteur=5mm,Bicolore=false,EcartBarre=0%Grille est dis
     \def\UpdatePtsFn#1/#2/#3/#4\nil{\addtotok\toklistePtsFn{#1,(#2,#3),#4,}}%
     \def\UpdatePtsFN#1/#2/#3/#4\nil{\addtotok\toklistePtsFn{(#2,#3),}}%
     
    -\def\MPCourbePoints#1#2#3#4#5#6{%
    -  % #1 la liste des points
    -  % #2: pas en x
    -  % #3: pas en y
    -  % #4: unit\'e en x
    -  % #5: unit\'e en y
    -  % #6 : prolongement avant et apr\`es les premier et dernier points ?
    -  \ifluatex
    -  \mplibforcehmode
    -  \begin{mplibcode}
    -    x.u:=#2;
    -    y.u:=#3;
    -    X.u:=#4;
    -    Y.u:=#5;
    -    numeric dirav[],dirap[];
    -    pair Fn[],Gn[];
    -    n=0;
    -    for p_=#1:
    -    Gn[n]=p_;
    -    Fn[n]=cm*(X.u*xpart(p_),Y.u*ypart(p_));
    -    n:=n+1;
    -    endfor;
    -    N:=(n-1);
    -    MinX=999;
    -    MaxX=-999;
    -    MinY=999;
    -    MaxY=-999;
    -    for k=0 upto N:
    -    if xpart(Gn[k])MaxX:
    -    MaxX:=xpart(Gn[k]);
    -    fi;
    -    if ypart(Gn[k])MaxY:
    -    MaxY:=ypart(Gn[k]);
    -    fi;
    -    endfor;
    -    if #6=0:
    -    for k=MinY-1 step y.u until MaxY+1:
    -    draw cm*((MinX-1)*X.u,k*Y.u)--cm*((MaxX+1)*X.u,k*Y.u) withcolor 0.75white;
    -    endfor;
    -    for k=MinX-1 step x.u until MaxX+1:
    -    draw cm*(k*X.u,(MinY-1)*Y.u)--cm*(k*X.u,(MaxY+1)*Y.u) withcolor 0.75white;
    -    endfor;
    -    else:
    -    for k=MinY-1 step y.u until MaxY+1:
    -    draw cm*((MinX)*X.u,k*Y.u)--cm*((MaxX)*X.u,k*Y.u) withcolor 0.75white;
    -    endfor;
    -    for k=MinX step x.u until MaxX:
    -    draw cm*(k*X.u,(MinY-1)*Y.u)--cm*(k*X.u,(MaxY+1)*Y.u) withcolor 0.75white;
    -    endfor;
    -    fi;
    -    if #6=0:
    -    for k=0 upto N:
    -    fill cercles(Fn[k],0.5mm);
    -    endfor;
    -    else:
    -    for k=1 upto N-1:
    -    fill cercles(Fn[k],0.5mm);
    -    endfor;
    -    fi;
    -    if #6=0:
    -    drawarrow (0,(MinY-1)*Y.u*cm)--(0,(MaxY+1)*Y.u*cm);
    -    drawarrow ((MinX-1)*X.u*cm,0)--((MaxX+1)*X.u*cm,0);
    -    else:
    -    drawarrow (0,(MinY-1)*Y.u*cm)--(0,(MaxY+1)*Y.u*cm);
    -    drawarrow ((MinX)*X.u*cm,0)--((MaxX)*X.u*cm,0);
    -    fi;
    -    label.llft(btex O etex,(0,0));
    -    dotlabel.bot(btex 1 etex,cm*X.u*(1,0));
    -    dotlabel.lft(btex 1 etex,cm*Y.u*(0,1));
    -    draw Fn[0]
    -    for k=1 upto N:
    -    ..Fn[k]
    -    endfor withpen pencircle scaled \useKV[ClesFonction]{Epaisseur};
    -  \end{mplibcode}
    -  \else
    -  \begin{mpost}[mpsettings={numeric Epaisseur; Epaisseur=\useKV[ClesFonction]{Epaisseur};}]
    -    x.u:=#2;
    -    y.u:=#3;
    -    X.u:=#4;
    -    Y.u:=#5;
    -    numeric dirav[],dirap[];
    -    pair Fn[],Gn[];
    -    n=0;
    -    for p_=#1:
    -    Gn[n]=p_;
    -    Fn[n]=cm*(X.u*xpart(p_),Y.u*ypart(p_));
    -    n:=n+1;
    -    endfor;
    -    N:=(n-1);
    -    MinX=999;
    -    MaxX=-999;
    -    MinY=999;
    -    MaxY=-999;
    -    for k=0 upto N:
    -    if xpart(Gn[k])MaxX:
    -    MaxX:=xpart(Gn[k]);
    -    fi;
    -    if ypart(Gn[k])MaxY:
    -    MaxY:=ypart(Gn[k]);
    -    fi;
    -    endfor;
    -    if #6=0:
    -    for k=MinY-1 step y.u until MaxY+1:
    -    draw cm*((MinX-1)*X.u,k*Y.u)--cm*((MaxX+1)*X.u,k*Y.u) withcolor 0.75white;
    -    endfor;
    -    for k=MinX-1 step x.u until MaxX+1:
    -    draw cm*(k*X.u,(MinY-1)*Y.u)--cm*(k*X.u,(MaxY+1)*Y.u) withcolor 0.75white;
    -    endfor;
    -    else:
    -    for k=MinY-1 step y.u until MaxY+1:
    -    draw cm*((MinX)*X.u,k*Y.u)--cm*((MaxX)*X.u,k*Y.u) withcolor 0.75white;
    -    endfor;
    -    for k=MinX step x.u until MaxX:
    -    draw cm*(k*X.u,(MinY-1)*Y.u)--cm*(k*X.u,(MaxY+1)*Y.u) withcolor 0.75white;
    -    endfor;
    -    fi;
    -    if #6=0:
    -    for k=0 upto N:
    -    fill cercles(Fn[k],0.5mm);
    -    endfor;
    -    else:
    -    for k=1 upto N-1:
    -    fill cercles(Fn[k],0.5mm);
    -    endfor;
    -    fi;
    -    if #6=0:
    -    drawarrow (0,(MinY-1)*Y.u*cm)--(0,(MaxY+1)*Y.u*cm);
    -    drawarrow ((MinX-1)*X.u*cm,0)--((MaxX+1)*X.u*cm,0);
    -    else:
    -    drawarrow (0,(MinY-1)*Y.u*cm)--(0,(MaxY+1)*Y.u*cm);
    -    drawarrow ((MinX)*X.u*cm,0)--((MaxX)*X.u*cm,0);
    -    fi;
    -    label.llft(btex O etex,(0,0));
    -    dotlabel.bot(btex 1 etex,cm*X.u*(1,0));
    -    dotlabel.lft(btex 1 etex,cm*Y.u*(0,1));
    -    draw Fn[0]
    -    for k=1 upto N:
    -    ..Fn[k]
    -    endfor withpen pencircle scaled Epaisseur;
    -  \end{mpost}
    -  \fi
    -}
    +\NewDocumentCommand\Fonction{o m}{%
    +  \useKVdefault[ClesFonction]%
    +  \setKV[ClesFonction]{#1}%
    +  \ifboolKV[ClesFonction]{Trace}{%
    +    \useKVdefault[TraceG]%
    +    \setKV[TraceG]{#1}%
    +    \MPTraceFonction[#1]{\useKV[ClesFonction]{Calcul}}%
    +  }{%
    +    \ifboolKV[ClesFonction]{Points}{%
    +      \toklistePtsFn{}%
    +      \setsepchar[*]{§*/}%\ignoreemptyitems%
    +      \readlist*\ListePoints{#2}%
    +      \ifboolKV[ClesFonction]{Catmull}{%
    +        \xdef\PfCFooListePoints{(\ListePoints[1,2],\ListePoints[1,3]),}%
    +        \foreachitem\compteur\in\ListePoints{%
    +          \xdef\PfCFooListePoints{\PfCFooListePoints (\ListePoints[\compteurcnt,2],\ListePoints[\compteurcnt,3]),}%
    +        }%
    +        \xdef\PfCFooListePoints{\PfCFooListePoints (\ListePoints[\ListePointslen,2],\ListePoints[\ListePointslen,3]),}%
    +        \MPCatmull{\PfCFooListePoints}{\useKV[ClesFonction]{PasX}}{\useKV[ClesFonction]{PasY}}{\useKV[ClesFonction]{UniteX}}{\useKV[ClesFonction]{UniteY}}%
    +      }{%
    +        \xdef\PfCFooListePoints{}
    +        \ifboolKV[ClesFonction]{Tangentes}{%
    +          \foreachitem\compteur\in\ListePoints{%
    +            % \expandafter\UpdatePtsFn\compteur\nil%
    +            \xdef\PfCFooListePoints{\PfCFooListePoints \ListePoints[\compteurcnt,1],(\ListePoints[\compteurcnt,2],\ListePoints[\compteurcnt,3]),\ListePoints[\compteurcnt,4],}%
    +          }%
    +        }{%
    +          \foreachitem\compteur\in\ListePoints{%
    +            % \expandafter\UpdatePtsFN\compteur\nil%
    +            \xdef\PfCFooListePoints{\PfCFooListePoints (\ListePoints[\compteurcnt,2],\ListePoints[\compteurcnt,3]),}%
    +          }%
    +        }%
    +        \MPCourbeNew{\PfCFooListePoints}%\the\toklistePtsFn}%
    +      }%
    +    }{%
    +      \setsepchar{,}\ignoreemptyitems%
    +      \readlist*\ListeFonction{#2}%
    +      \StrSubstitute{\useKV[ClesFonction]{Calcul}}{\useKV[ClesFonction]{Variable}}{\i}[\temp]%
    +      \StrSubstitute{\useKV[ClesFonction]{Calcul}}{**}{^}[\tempa]%
    +      \StrSubstitute{\tempa}{*}{}[\tempab]%
    +      \ifboolKV[ClesFonction]{Ecriture}{%
    +        \ensuremath{\useKV[ClesFonction]{Nom}(\useKV[ClesFonction]{Variable})=\tempab}%
    +      }{}%
    +      \ifboolKV[ClesFonction]{Definition}{%
    +        \ensuremath{\useKV[ClesFonction]{Nom}:\useKV[ClesFonction]{Variable}\mapsto\tempab}%
    +      }{}%
    +      \ifboolKV[ClesFonction]{Tableau}{%
    +        \buildtabfonction%
    +      }{}%
    +      \reademptyitems%
    +    }%
    +  }%
    +}%
     
    -\def\MPCourbe#1#2#3#4#5#6{%
    +\def\MPCourbeNew#1{%#2#3#4#5#6{%
       \ifluatex
       \mplibforcehmode
       \begin{mplibcode}
    -    x.u:=#2;
    -    y.u:=#3;
    -    X.u:=#4;
    -    Y.u:=#5;
    +    x.u:=\useKV[ClesFonction]{PasX};
    +    y.u:=\useKV[ClesFonction]{PasY};
    +    X.u:=\useKV[ClesFonction]{UniteX};
    +    Y.u:=\useKV[ClesFonction]{UniteY};
    +    Epaisseur:=\useKV[ClesFonction]{Epaisseur};
    +    
    +    boolean Prolonge,Tangentes,PointsCourbe,Codes;
    +    Prolonge=\useKV[ClesFonction]{Prolonge};
    +    Tangentes=\useKV[ClesFonction]{Tangentes};
    +    PointsCourbe=\useKV[ClesFonction]{PointsCourbe};
    +    Codes=\useKV[ClesFonction]{Codes};
    +
    +    color CouleurTrace;
    +    CouleurTrace=\useKV[ClesFonction]{CouleurTrace};
    +
    +    def enplace=
    +    xscaled X.u yscaled Y.u
    +    enddef;
    +
    +    vardef placepoint(expr q,r)=
    +    (q,r)*cm enplace
    +    enddef;
    +    
         numeric dirav[],dirap[];
         pair Fn[],Gn[];
         n=0;
    +    if Tangentes:
         for p_=#1:
         if (n mod 3)=0:
         dirav[n div 3]=p_;
    @@ -20856,6 +21472,14 @@ Barre=false,Longueur=10cm,Hauteur=5mm,Bicolore=false,EcartBarre=0%Grille est dis
         n:=n+1;
         endfor;
         N:=(n-1) div 3;
    +    else:
    +    for p_=#1:
    +    Gn[n]=p_;
    +    Fn[n]=cm*(X.u*xpart(p_),Y.u*ypart(p_));
    +    n:=n+1;
    +    endfor;
    +    N:=(n-1);
    +    fi;
         MinX=999;
         MaxX=-999;
         MinY=999;
    @@ -20874,55 +21498,102 @@ Barre=false,Longueur=10cm,Hauteur=5mm,Bicolore=false,EcartBarre=0%Grille est dis
         MaxY:=ypart(Gn[k]);
         fi;
         endfor;
    -        if #6=0:
    +    if MinY<0:
    +    if MinY<>ceiling(MinY):
    +    MinY:=ceiling(MinY)-1;
    +    fi;
    +    fi;
    +    if MinX<0:
    +    if MinX<>ceiling(MinX):
    +    MinX:=ceiling(MinX)-1;
    +    fi;
    +    fi;
    +    if MaxY<>ceiling(MaxY):
    +    MaxY:=ceiling(MaxY);
    +    fi;
    +    if MaxX<>ceiling(MaxX):
    +    MaxX:=ceiling(MaxX);
    +    fi;
    +    if MaxX<1:
    +    MaxX:=1;
    +    fi;
    +    if MaxY<1:
    +    MaxY:=1;
    +    fi;
    +    if Prolonge:
         for k=MinY-1 step y.u until MaxY+1:
    -    draw cm*((MinX-1)*X.u,k*Y.u)--cm*((MaxX+1)*X.u,k*Y.u) withcolor 0.75white;
    +    draw cm*((MinX)*X.u,k*Y.u)--cm*((MaxX)*X.u,k*Y.u) withcolor 0.75white;
         endfor;
    -    for k=MinX-1 step x.u until MaxX+1:
    +    for k=MinX step x.u until MaxX:
         draw cm*(k*X.u,(MinY-1)*Y.u)--cm*(k*X.u,(MaxY+1)*Y.u) withcolor 0.75white;
         endfor;
         else:
         for k=MinY-1 step y.u until MaxY+1:
    -    draw cm*((MinX)*X.u,k*Y.u)--cm*((MaxX)*X.u,k*Y.u) withcolor 0.75white;
    +    draw cm*((MinX-1)*X.u,k*Y.u)--cm*((MaxX+1)*X.u,k*Y.u) withcolor 0.75white;
         endfor;
    -    for k=MinX step x.u until MaxX:
    +    for k=MinX-1 step x.u until MaxX+1:
         draw cm*(k*X.u,(MinY-1)*Y.u)--cm*(k*X.u,(MaxY+1)*Y.u) withcolor 0.75white;
         endfor;
         fi;
    -    if #6=0:
    -    for k=0 upto N:
    -    fill cercles(Fn[k],0.5mm);
    -    endfor;
    -    else:
    -    for k=1 upto N-1:
    -    fill cercles(Fn[k],0.5mm);
    -    endfor;
    -    fi;
    -    if #6=0:
    -    drawarrow (0,(MinY-1)*Y.u*cm)--(0,(MaxY+1)*Y.u*cm);
    -    drawarrow ((MinX-1)*X.u*cm,0)--((MaxX+1)*X.u*cm,0);
    -    else:
    +    if Prolonge:    
         drawarrow (0,(MinY-1)*Y.u*cm)--(0,(MaxY+1)*Y.u*cm);
         drawarrow ((MinX)*X.u*cm,0)--((MaxX)*X.u*cm,0);
    +    else:
    +    drawarrow (0,(MinY-1)*Y.u*cm)--(0*cm,(MaxY+1)*Y.u*cm);
    +    drawarrow ((MinX-1)*X.u*cm,0*cm)--((MaxX+1)*X.u*cm,0*cm);
         fi;
         label.llft(btex O etex,(0,0));
         dotlabel.bot(btex 1 etex,cm*X.u*(1,0));
         dotlabel.lft(btex 1 etex,cm*Y.u*(0,1));
    -    draw Fn[0]{dir dirap[0]}
    +    draw if Tangentes:
    +    Fn[0]{dir dirap[0]}
         for k=1 upto (N-1):
         ..{dir dirav[k]}Fn[k]{dir dirap[k]}
         endfor
    -    ..{dir dirav[N]}Fn[N] withpen pencircle scaled \useKV[ClesFonction]{Epaisseur};
    +    ..{dir dirav[N]}Fn[N]
    +    else:
    +    Fn[0]
    +    for k=1 upto N:
    +    ..Fn[k]
    +    endfor fi withpen pencircle scaled Epaisseur withcolor CouleurTrace;
    +    if PointsCourbe:
    +    if Prolonge:
    +    for k=1 upto N-1:
    +    fill cercles(Fn[k],0.5mm);
    +    endfor;
    +    else:
    +    for k=0 upto N:
    +    fill cercles(Fn[k],0.5mm);
    +    endfor;
    +    fi;
    +    fi;
    +    if Codes:
    +    \useKV[ClesFonction]{Traces};
    +    fi;
       \end{mplibcode}
       \else
    -  \begin{mpost}[mpsettings={numeric Epaisseur; Epaisseur=\useKV[ClesFonction]{Epaisseur};}]
    -    x.u:=#2;
    -    y.u:=#3;
    -    X.u:=#4;
    -    Y.u:=#5;
    +  \begin{mpost}[mpsettings={%
    +      x.u:=\useKV[ClesFonction]{PasX};y.u:=\useKV[ClesFonction]{PasY};
    +      X.u:=\useKV[ClesFonction]{UniteX};Y.u:=\useKV[ClesFonction]{UniteY};
    +      Epaisseur:=\useKV[ClesFonction]{Epaisseur};
    +      boolean Prolonge,Tangentes,PointsCourbe,Codes;
    +      Prolonge=\useKV[ClesFonction]{Prolonge};
    +      Tangentes=\useKV[ClesFonction]{Tangentes};
    +      PointsCourbe=\useKV[ClesFonction]{PointsCourbe};
    +      Codes=\useKV[ClesFonction]{Codes};
    +      color CouleurTrace;
    +      CouleurTrace=\useKV[ClesFonction]{CouleurTrace};
    +      }]
    +      def enplace=
    +      xscaled X.u yscaled Y.u
    +      enddef;
    +      vardef placepoint(expr q,r)=
    +      (q,r)*cm enplace
    +      enddef;
         numeric dirav[],dirap[];
         pair Fn[],Gn[];
         n=0;
    +    if Tangentes:
         for p_=#1:
         if (n mod 3)=0:
         dirav[n div 3]=p_;
    @@ -20937,6 +21608,14 @@ Barre=false,Longueur=10cm,Hauteur=5mm,Bicolore=false,EcartBarre=0%Grille est dis
         n:=n+1;
         endfor;
         N:=(n-1) div 3;
    +    else:
    +    for p_=#1:
    +    Gn[n]=p_;
    +    Fn[n]=cm*(X.u*xpart(p_),Y.u*ypart(p_));
    +    n:=n+1;
    +    endfor;
    +    N:=(n-1);
    +    fi;
         MinX=999;
         MaxX=-999;
         MinY=999;
    @@ -20955,45 +21634,75 @@ Barre=false,Longueur=10cm,Hauteur=5mm,Bicolore=false,EcartBarre=0%Grille est dis
         MaxY:=ypart(Gn[k]);
         fi;
         endfor;
    -    if #6=0:
    +    if MinY<0:
    +    if MinY<>ceiling(MinY):
    +    MinY:=ceiling(MinY)-1;
    +    fi;
    +    fi;
    +    if MinX<0:
    +    if MinX<>ceiling(MinX):
    +    MinX:=ceiling(MinX)-1;
    +    fi;
    +    fi;
    +    if MaxY<>ceiling(MaxY):
    +    MaxY:=ceiling(MaxY);
    +    fi;
    +    if MaxX<>ceiling(MaxX):
    +    MaxX:=ceiling(MaxX);
    +    fi;
    +    if MaxX<1:
    +    MaxX:=1;
    +    fi;
    +    if MaxY<1:
    +    MaxY:=1;
    +    fi;
    +    if Prolonge:
         for k=MinY-1 step y.u until MaxY+1:
    -    draw cm*((MinX-1)*X.u,k*Y.u)--cm*((MaxX+1)*X.u,k*Y.u) withcolor 0.75white;
    +    draw cm*((MinX)*X.u,k*Y.u)--cm*((MaxX)*X.u,k*Y.u) withcolor 0.75white;
         endfor;
    -    for k=MinX-1 step x.u until MaxX+1:
    +    for k=MinX step x.u until MaxX:
         draw cm*(k*X.u,(MinY-1)*Y.u)--cm*(k*X.u,(MaxY+1)*Y.u) withcolor 0.75white;
         endfor;
         else:
         for k=MinY-1 step y.u until MaxY+1:
    -    draw cm*((MinX)*X.u,k*Y.u)--cm*((MaxX)*X.u,k*Y.u) withcolor 0.75white;
    +    draw cm*((MinX-1)*X.u,k*Y.u)--cm*((MaxX+1)*X.u,k*Y.u) withcolor 0.75white;
         endfor;
    -    for k=MinX step x.u until MaxX:
    +    for k=MinX-1 step x.u until MaxX+1:
         draw cm*(k*X.u,(MinY-1)*Y.u)--cm*(k*X.u,(MaxY+1)*Y.u) withcolor 0.75white;
         endfor;
         fi;
    -    if #6=0:
    -    for k=0 upto N:
    -    fill cercles(Fn[k],0.5mm);
    -    endfor;
    -    else:
    -    for k=1 upto N-1:
    -    fill cercles(Fn[k],0.5mm);
    -    endfor;
    -    fi;
    -    if #6=0:
    -    drawarrow (0,(MinY-1)*Y.u*cm)--(0,(MaxY+1)*Y.u*cm);
    -    drawarrow ((MinX-1)*X.u*cm,0)--((MaxX+1)*X.u*cm,0);
    -    else:
    +    if Prolonge:    
         drawarrow (0,(MinY-1)*Y.u*cm)--(0,(MaxY+1)*Y.u*cm);
         drawarrow ((MinX)*X.u*cm,0)--((MaxX)*X.u*cm,0);
    +    else:
    +    drawarrow (0,(MinY-1)*Y.u*cm)--(0*cm,(MaxY+1)*Y.u*cm);
    +    drawarrow ((MinX-1)*X.u*cm,0*cm)--((MaxX+1)*X.u*cm,0*cm);
         fi;
         label.llft(btex O etex,(0,0));
         dotlabel.bot(btex 1 etex,cm*X.u*(1,0));
         dotlabel.lft(btex 1 etex,cm*Y.u*(0,1));
    -    draw Fn[0]{dir dirap[0]}
    +    draw if Tangentes:
    +    Fn[0]{dir dirap[0]}
         for k=1 upto (N-1):
         ..{dir dirav[k]}Fn[k]{dir dirap[k]}
         endfor
    -    ..{dir dirav[N]}Fn[N] withpen pencircle scaled Epaisseur;
    +    ..{dir dirav[N]}Fn[N]
    +    else:
    +    Fn[0]
    +    for k=1 upto N:
    +    ..Fn[k]
    +    endfor fi withpen pencircle scaled Epaisseur withcolor CouleurTrace;
    +    if PointsCourbe:
    +    if Prolonge:
    +    for k=1 upto N-1:
    +    fill cercles(Fn[k],0.5mm);
    +    endfor;
    +    else:
    +    for k=0 upto N:
    +    fill cercles(Fn[k],0.5mm);
    +    endfor;
    +    fi;
    +    fi;
       \end{mpost}
       \fi
     }
    @@ -21018,6 +21727,14 @@ Barre=false,Longueur=10cm,Hauteur=5mm,Bicolore=false,EcartBarre=0%Grille est dis
         X.u:=#4;
         Y.u:=#5;
     
    +    def enplace=
    +    xscaled X.u yscaled Y.u
    +    enddef;
    +
    +    vardef placepoint(expr q,r)=
    +    (q,r)*cm enplace
    +    enddef;
    +    
         pair Fn[],Gn[];
         n=0;
         for p_=#1:
    @@ -21056,6 +21773,28 @@ Barre=false,Longueur=10cm,Hauteur=5mm,Bicolore=false,EcartBarre=0%Grille est dis
         if MinY>-1:
         MinY:=-2;
         fi;
    +    if MinY<0:
    +    if MinY<>ceiling(MinY):
    +    MinY:=ceiling(MinY)-1;
    +    fi;
    +    fi;
    +    if MinX<0:
    +    if MinX<>ceiling(MinX):
    +    MinX:=ceiling(MinX)-1;
    +    fi;
    +    fi;
    +    if MaxY<>ceiling(MaxY):
    +    MaxY:=ceiling(MaxY);
    +    fi;
    +    if MaxX<>ceiling(MaxX):
    +    MaxX:=ceiling(MaxX);
    +    fi;
    +    if MaxX<1:
    +    MaxX:=1;
    +    fi;
    +    if MaxY<1:
    +    MaxY:=1;
    +    fi;
         %
         path cadreexterieur;
         cadreexterieur=(((MinX-1)*X.u*cm,(MinY-1)*Y.u*cm)--((MaxX+1)*X.u*cm,(MinY-1)*Y.u*cm)--((MaxX+1)*X.u*cm,(MaxY+1)*Y.u*cm)--((MinX-1)*X.u*cm,(MaxY+1)*Y.u*cm)--cycle);
    @@ -21077,6 +21816,7 @@ Barre=false,Longueur=10cm,Hauteur=5mm,Bicolore=false,EcartBarre=0%Grille est dis
         for k=debutbalai upto finbalai:
         fill cercles(Fn[k],0.5mm);
         endfor;
    +    fi;
         drawarrow (0,(MinY-1)*Y.u*cm)--(0,(MaxY+1)*Y.u*cm);
         drawarrow ((MinX-1)*X.u*cm,0)--((MaxX+1)*X.u*cm,0);
         %
    @@ -21084,17 +21824,17 @@ Barre=false,Longueur=10cm,Hauteur=5mm,Bicolore=false,EcartBarre=0%Grille est dis
         label.llft(btex O etex,(0,0));
         dotlabel.bot(btex 1 etex,cm*X.u*(1,0));
         dotlabel.lft(btex 1 etex,cm*Y.u*(0,1));
    -    fi;
         if Code:
         \useKV[ClesFonction]{Traces};
         fi;
       \end{mplibcode}
       \else
       \begin{mpost}[mpsettings={numeric Epaisseur; Epaisseur=\useKV[ClesFonction]{Epaisseur}; color CouleurCourbe; CouleurCourbe=\useKV[ClesFonction]{Couleur};boolean PointsCourbe;PointsCourbe=\useKV[ClesFonction]{PointsCourbe};}]
    -    x.u:=#2;
    +        x.u:=#2;
         y.u:=#3;
         X.u:=#4;
         Y.u:=#5;
    +
         pair Fn[],Gn[];
         n=0;
         for p_=#1:
    @@ -21133,6 +21873,28 @@ Barre=false,Longueur=10cm,Hauteur=5mm,Bicolore=false,EcartBarre=0%Grille est dis
         if MinY>-1:
         MinY:=-2;
         fi;
    +    if MinY<0:
    +    if MinY<>ceiling(MinY):
    +    MinY:=ceiling(MinY)-1;
    +    fi;
    +    fi;
    +    if MinX<0:
    +    if MinX<>ceiling(MinX):
    +    MinX:=ceiling(MinX)-1;
    +    fi;
    +    fi;
    +    if MaxY<>ceiling(MaxY):
    +    MaxY:=ceiling(MaxY);
    +    fi;
    +    if MaxX<>ceiling(MaxX):
    +    MaxX:=ceiling(MaxX);
    +    fi;
    +    if MaxX<1:
    +    MaxX:=1;
    +    fi;
    +    if MaxY<1:
    +    MaxY:=1;
    +    fi;
         %
         path cadreexterieur;
         cadreexterieur=(((MinX-1)*X.u*cm,(MinY-1)*Y.u*cm)--((MaxX+1)*X.u*cm,(MinY-1)*Y.u*cm)--((MaxX+1)*X.u*cm,(MaxY+1)*Y.u*cm)--((MinX-1)*X.u*cm,(MaxY+1)*Y.u*cm)--cycle);
    @@ -21154,6 +21916,7 @@ Barre=false,Longueur=10cm,Hauteur=5mm,Bicolore=false,EcartBarre=0%Grille est dis
         for k=debutbalai upto finbalai:
         fill cercles(Fn[k],0.5mm);
         endfor;
    +    fi;
         drawarrow (0,(MinY-1)*Y.u*cm)--(0,(MaxY+1)*Y.u*cm);
         drawarrow ((MinX-1)*X.u*cm,0)--((MaxX+1)*X.u*cm,0);
         %
    @@ -21161,78 +21924,17 @@ Barre=false,Longueur=10cm,Hauteur=5mm,Bicolore=false,EcartBarre=0%Grille est dis
         label.llft(btex O etex,(0,0));
         dotlabel.bot(btex 1 etex,cm*X.u*(1,0));
         dotlabel.lft(btex 1 etex,cm*Y.u*(0,1));
    -    fi;
       \end{mpost}
       \fi
     }%
     
    -\newcommand\Fonction[2][]{%
    -  \useKVdefault[ClesFonction]%
    -  \setKV[ClesFonction]{#1}%
    -  \ifboolKV[ClesFonction]{Trace}{%
    -    \useKVdefault[TraceG]%
    -    \setKV[TraceG]{#1}%
    -    \MPTraceFonction[#1]{\useKV[ClesFonction]{Calcul}}%
    -  }{%
    -    \ifboolKV[ClesFonction]{Points}{%
    -      \toklistePtsFn{}%
    -      \setsepchar[*]{§*/}%\ignoreemptyitems%
    -      \readlist*\ListePoints{#2}%
    -      \ifboolKV[ClesFonction]{Catmull}{%
    -        \xdef\PfCFooListePoints{(\ListePoints[1,2],\ListePoints[1,3]),}
    -        \foreachitem\compteur\in\ListePoints{%
    -          \xdef\PfCFooListePoints{\PfCFooListePoints (\ListePoints[\compteurcnt,2],\ListePoints[\compteurcnt,3]),}%
    -        }%
    -        \xdef\PfCFooListePoints{\PfCFooListePoints (\ListePoints[\ListePointslen,2],\ListePoints[\ListePointslen,3]),}%
    -        \MPCatmull{\PfCFooListePoints}{\useKV[ClesFonction]{PasX}}{\useKV[ClesFonction]{PasY}}{\useKV[ClesFonction]{UniteX}}{\useKV[ClesFonction]{UniteY}}%
    -      }{%
    -        \ifboolKV[ClesFonction]{Tangentes}{%
    -          \foreachitem\compteur\in\ListePoints{%
    -            \expandafter\UpdatePtsFn\compteur\nil%
    -          }%
    -          \ifboolKV[ClesFonction]{Prolonge}{%
    -            \MPCourbe{\the\toklistePtsFn}{\useKV[ClesFonction]{PasX}}{\useKV[ClesFonction]{PasY}}{\useKV[ClesFonction]{UniteX}}{\useKV[ClesFonction]{UniteY}}{1}%
    -          }{%
    -            \MPCourbe{\the\toklistePtsFn}{\useKV[ClesFonction]{PasX}}{\useKV[ClesFonction]{PasY}}{\useKV[ClesFonction]{UniteX}}{\useKV[ClesFonction]{UniteY}}{0}%
    -          }%
    -        }{%
    -          \foreachitem\compteur\in\ListePoints{%
    -            \expandafter\UpdatePtsFN\compteur\nil%
    -          }%
    -          \ifboolKV[ClesFonction]{Prolonge}{%
    -            \MPCourbePoints{\the\toklistePtsFn}{\useKV[ClesFonction]{PasX}}{\useKV[ClesFonction]{PasY}}{\useKV[ClesFonction]{UniteX}}{\useKV[ClesFonction]{UniteY}}{1}%
    -          }{%
    -            \MPCourbePoints{\the\toklistePtsFn}{\useKV[ClesFonction]{PasX}}{\useKV[ClesFonction]{PasY}}{\useKV[ClesFonction]{UniteX}}{\useKV[ClesFonction]{UniteY}}{0}%
    -          }%
    -        }%
    -      }%
    -    }{%
    -      \setsepchar{,}\ignoreemptyitems%
    -      \readlist*\ListeFonction{#2}%
    -      \StrSubstitute{\useKV[ClesFonction]{Calcul}}{\useKV[ClesFonction]{Variable}}{\i}[\temp]%
    -      \StrSubstitute{\useKV[ClesFonction]{Calcul}}{**}{^}[\tempa]%
    -      \StrSubstitute{\tempa}{*}{}[\tempab]%
    -      \ifboolKV[ClesFonction]{Ecriture}{%
    -        \ensuremath{\useKV[ClesFonction]{Nom}(\useKV[ClesFonction]{Variable})=\tempab}%
    -      }{}%
    -      \ifboolKV[ClesFonction]{Definition}{%
    -        \ensuremath{\useKV[ClesFonction]{Nom}:\useKV[ClesFonction]{Variable}\mapsto\tempab}%
    -      }{}%
    -      \ifboolKV[ClesFonction]{Tableau}{%
    -        \buildtabfonction%
    -      }{}%
    -      \reademptyitems%
    -    }%
    -  }%
    -}%
    -
     \def\buildtabfonction{%
       \[%
         \begin{array}{|>{\columncolor{gray!15}}c|*{\number\numexpr\ListeFonctionlen}{>{\centering\arraybackslash}p{\useKV[ClesFonction]{Largeur}}|}}%
    -      \hline
    +      \hline%
           \useKV[ClesFonction]{Variable}\xintFor* ##1 in {\xintSeq {1}{\ListeFonctionlen}}\do{&\num{\ListeFonction[##1]}}\\
    -      \hline
    -      \useKV[ClesFonction]{Nom}(\useKV[ClesFonction]{Variable})\xintFor* ##1 in {\xintSeq {1}{\ListeFonctionlen}}\do{&  \StrSubstitute{\useKV[ClesFonction]{Calcul}}{\useKV[ClesFonction]{Variable}}{(\ListeFonction[##1])}[\tempab]\num{\fpeval{\tempab}}}
    +      \hline%
    +      \useKV[ClesFonction]{Nom}(\useKV[ClesFonction]{Variable})\xintFor* ##1 in {\xintSeq {1}{\ListeFonctionlen}}\do{&  \StrSubstitute{\useKV[ClesFonction]{Calcul}}{\useKV[ClesFonction]{Variable}}{(\ListeFonction[##1])}[\tempab]\num{\fpeval{\tempab}}}%
           \\\hline
         \end{array}%
       \]%
    @@ -21241,7 +21943,7 @@ Barre=false,Longueur=10cm,Hauteur=5mm,Bicolore=false,EcartBarre=0%Grille est dis
     %%%
     % Diff\'erentes représentations graphiques
     %%%
    -\setKVdefault[TraceG]{Grille=false,Graduations=false,PasGradX=1,PasGradY=1,PasGrilleX=1,PasGrilleY=1,Xmin=-5.5,Xmax=5.5,Xstep=1,Ymin=-5.5,Ymax=5.5,Ystep=1,Bornea=-5.5,Borneb=5.5,LabelX={},LabelY={},LabelC=0.5,NomCourbe={},Origine={(5.5,5.5)},Fonction=false,Points=false,Invisible=false,CouleurPoint=red,CouleurTrace=black,Epaisseur=1,Relie=false,RelieSegment=false,Marque=dot,Code=false}%
    +\setKVdefault[TraceG]{Grille=false,Graduations=false,PasGradX=1,PasGradY=1,PasGrilleX=1,PasGrilleY=1,Xmin=-5.5,Xmax=5.5,Xstep=1,Ymin=-5.5,Ymax=5.5,Ystep=1,Bornea=-5.5,Borneb=5.5,LabelX={},LabelY={},LabelC=0.5,NomCourbe={},Origine={(5.5,5.5)},Fonction=false,Points=false,Invisible=false,CouleurPoint=red,CouleurTrace=black,Epaisseur=1,Relie=false,RelieSegment=false,Marque=dot,Code=false,Vide=false}%
     \defKV[TraceG]{Traces=\setKV[TraceG]{Code}}%
     
     \newcommand\TraceGraphique[2][]{%
    @@ -21468,8 +22170,9 @@ Barre=false,Longueur=10cm,Hauteur=5mm,Bicolore=false,EcartBarre=0%Grille est dis
         pair Origine;
         Origine=(xmin,ymin)+\useKV[TraceG]{Origine};
     
    -    boolean Grille;
    +    boolean Grille,Vide;
         Grille=\useKV[TraceG]{Grille};
    +    Vide=\useKV[TraceG]{Vide};
     
         boolean Graduations;
         Graduations=\useKV[TraceG]{Graduations};
    @@ -21558,6 +22261,8 @@ Barre=false,Longueur=10cm,Hauteur=5mm,Bicolore=false,EcartBarre=0%Grille est dis
         drawarrow (u*(xmin,0)--u*(xmax,0)) shifted (u*(0,ypart(Origine)));
         label.llft(btex 0 etex,u*Origine);
         drawoptions();
    +    if Vide:
    +    else:
         draw courbe1(borneinf,bornesup,100)(#2) withpen (pencircle scaled Epaisseur) withcolor colortrace;
         % labelisation
         numeric t;
    @@ -21573,13 +22278,14 @@ Barre=false,Longueur=10cm,Hauteur=5mm,Bicolore=false,EcartBarre=0%Grille est dis
         if \useKV[TraceG]{Code}:
         \useKV[TraceG]{Traces}
         fi;
    +    fi;
       \end{mplibcode}
       \else
       \mpxcommands{%
         \usepackage{ProfCollege}
         \setKV[TraceG]{#1}
       }
    -  \begin{mpost}[mpsettings={borneinf=\useKV[TraceG]{Bornea};bornesup=\useKV[TraceG]{Borneb};xmin=\useKV[TraceG]{Xmin};xmax=\useKV[TraceG]{Xmax};ymin=\useKV[TraceG]{Ymin};ymax=\useKV[TraceG]{Ymax};pasx=\useKV[TraceG]{Xstep};pasy=\useKV[TraceG]{Ystep};xu=1cm/\useKV[TraceG]{Xstep};yu=1cm/\useKV[TraceG]{Ystep};grillex=\useKV[TraceG]{PasGrilleX};grilley=\useKV[TraceG]{PasGrilleY};pos=\useKV[TraceG]{LabelC};Epaisseur=\useKV[TraceG]{Epaisseur}; color colortrace;colortrace=\useKV[TraceG]{CouleurTrace};boolean Grille;Grille=\useKV[TraceG]{Grille};boolean Graduations;Graduations=\useKV[TraceG]{Graduations};
    +  \begin{mpost}[mpsettings={borneinf=\useKV[TraceG]{Bornea};bornesup=\useKV[TraceG]{Borneb};xmin=\useKV[TraceG]{Xmin};xmax=\useKV[TraceG]{Xmax};ymin=\useKV[TraceG]{Ymin};ymax=\useKV[TraceG]{Ymax};pasx=\useKV[TraceG]{Xstep};pasy=\useKV[TraceG]{Ystep};xu=1cm/\useKV[TraceG]{Xstep};yu=1cm/\useKV[TraceG]{Ystep};grillex=\useKV[TraceG]{PasGrilleX};grilley=\useKV[TraceG]{PasGrilleY};pos=\useKV[TraceG]{LabelC};Epaisseur=\useKV[TraceG]{Epaisseur}; color colortrace;colortrace=\useKV[TraceG]{CouleurTrace};boolean Grille,Vide;Grille=\useKV[TraceG]{Grille};Vide=\useKV[TraceG]{Vide};boolean Graduations;Graduations=\useKV[TraceG]{Graduations};
         pair Origine;
         Origine=(xmin,ymin)+\useKV[TraceG]{Origine};}]
     
    @@ -21657,6 +22363,8 @@ Barre=false,Longueur=10cm,Hauteur=5mm,Bicolore=false,EcartBarre=0%Grille est dis
         drawarrow (u*(0,ymin)--u*(0,ymax)) shifted (u*(xpart(Origine),0));
         drawarrow (u*(xmin,0)--u*(xmax,0)) shifted (u*(0,ypart(Origine)));
         drawoptions();
    +    if Vide:
    +    else:
         draw courbe1(borneinf,bornesup,100)(#2) withpen (pencircle scaled Epaisseur) withcolor colortrace;
     %    % labelisation
         numeric t;
    @@ -21669,6 +22377,7 @@ Barre=false,Longueur=10cm,Hauteur=5mm,Bicolore=false,EcartBarre=0%Grille est dis
         clip currentpicture to polygone(u*(xmin,ymin),u*(xmax,ymin),u*(xmax,ymax),u*(xmin,ymax));
         label.rt(btex \useKV[TraceG]{LabelX} etex,u*(xmax,ypart(Origine)));
         label.top(btex \useKV[TraceG]{LabelY} etex,u*(xpart(Origine),ymax));
    +    fi;
       \end{mpost}
       \fi
     }
    @@ -28242,4 +28951,4 @@ label.lft(LATEX("\noexpand\footnotesize\noexpand\SI{\noexpand\fpeval{"&decimal(V
         draw recap;%
       \end{mpost}
     }{}%
    -\fi%
    \ No newline at end of file
    +\fi%
    diff --git a/macros/latex/contrib/profcollege/metapost/PfCCalculatrice.mp b/macros/latex/contrib/profcollege/metapost/PfCCalculatrice.mp
    index 4e208cf560..406f720594 100644
    --- a/macros/latex/contrib/profcollege/metapost/PfCCalculatrice.mp
    +++ b/macros/latex/contrib/profcollege/metapost/PfCCalculatrice.mp
    @@ -41,7 +41,7 @@ decahoriz:=0;
     vardef Test(expr cptk,cptnt)=
       pair Decalage;
       if nblignes mod 2=0:
    -    Decalage:=u*((20-length(cptnt)+cptk)*6,-8*(nblignes-1));
    +    Decalage:=u*((LargeurEcran,-8*(nblignes-1))-6*(length(cptnt)-cptk,0));
       else:
         Decalage:=u*(decahoriz,-8*(nblignes-1));
         decahoriz:=decahoriz+6;
    @@ -175,7 +175,7 @@ vardef LCD(text nt)(text rep)(expr NB)=
       decahoriz:=0;
       nblignes:=nblignes+1;
       path Ecran;
    -  Ecran:=(u*(0,-1)--u*(120,-1)--u*(120,7)--u*(0,7)--cycle) shifted(u*(0,-8*(nblignes-1)));
    +  Ecran:=(u*(0,-1)--u*(LargeurEcran,-1)--u*(LargeurEcran,7)--u*(0,7)--cycle) shifted(u*(0,-8*(nblignes-1)));
       fill Ecran withcolor if print=true:0.8white else:CouleurEcran fi;
       draw Ecran withcolor if print=true:0.8white else:CouleurEcran fi;
       for k=0 upto length(nt)-1:
    @@ -184,16 +184,15 @@ vardef LCD(text nt)(text rep)(expr NB)=
       endfor;
       for k=1 upto NB:
         nblignes:=nblignes+1;
    -    Ecran:=(u*(0,-1)--u*(120,-1)--u*(120,7)--u*(0,7)--cycle) shifted(u*(0,-8*(nblignes-1)));
    +    Ecran:=(u*(0,-1)--u*(LargeurEcran,-1)--u*(LargeurEcran,7)--u*(0,7)--cycle) shifted(u*(0,-8*(nblignes-1)));
         fill Ecran withcolor if print=true:0.8white else:CouleurEcran fi;
         draw Ecran withcolor if print=true:0.8white else:CouleurEcran fi;
       endfor;
       nblignes:=nblignes+1;
    -  Ecran:=(u*(0,-1)--u*(120,-1)--u*(120,7)--u*(0,7)--cycle) shifted(u*(0,-8*(nblignes-1)));
    +  Ecran:=(u*(0,-1)--u*(LargeurEcran,-1)--u*(LargeurEcran,7)--u*(0,7)--cycle) shifted(u*(0,-8*(nblignes-1)));
       fill Ecran withcolor if print=true:0.8white else:CouleurEcran fi;
       draw Ecran withcolor if print=true:0.8white else:CouleurEcran fi;
       for k=0 upto length(rep)-1:
    -    BlocAffichage;
         Test(k,rep);
       endfor;
     enddef;
    diff --git a/macros/latex/contrib/ufrgscca/README.md b/macros/latex/contrib/ufrgscca/README.md
    index 54013c974a..699abd7d49 100644
    --- a/macros/latex/contrib/ufrgscca/README.md
    +++ b/macros/latex/contrib/ufrgscca/README.md
    @@ -118,7 +118,10 @@ The Current Maintainer of this work is Alceu Frigeri
     -------------
     
     ## Changelog
    -* Version 1.0.7 (this)
    +* Version 1.0.8 (this)
    +    - fixed another counter bug (related to relnum option)
    +
    +* Version 1.0.7
         - fixed a counter bug when mixing annex with appendix environments
     
     * Version 1.0.6
    diff --git a/macros/latex/contrib/ufrgscca/doc/ufrgscca.pdf b/macros/latex/contrib/ufrgscca/doc/ufrgscca.pdf
    index 3987c61a66..ece656a74e 100644
    --- a/macros/latex/contrib/ufrgscca/doc/ufrgscca.pdf
    +++ b/macros/latex/contrib/ufrgscca/doc/ufrgscca.pdf
    @@ -267,29 +267,38 @@ endobj
     /Filter /FlateDecode
     >>
     stream
    -x]KDϯQᒥ*=`l/lxpq뷤RϨJ xF^UV~)MGi&%鋼d,7QVՉ*KJ_XG?wo[R_OUYފ,>BVjӞcVqk{ߝn&:,2O2mU9GD7bL#4">[/e/ nR(DyT(dvämNMua2^l7l}w4ӹӹCw?닞Xstᖵۭi*M
    -[5IG`h[YLJO;݆g()M,Ǽ|s}%χ;=C}Ce^įV=dkܯ;ݥv;޽~ۭlx뉜ti"-)LOo`iFA&~ynҙګ˶_OpMߒvG7⽙
    oxv's/7M7/NhO	ѽ.؋Vñw,lՏf5\YSߙVJ_~ZwgԯQokv3|ўNO՟&J7/~T]T/|W3y1)M6003:4lPKfaC?Ya_Xf|2~O3yƬksye:_ڙ_.^pf{j0X;\y~wkh+S:<}JV~I}u(ϒZdhb>CoGGzS&g16xY=_Ey]Ռ'+dq~񓓟ټeoוCnYwy]V0c0	)QDNtPw^>gUa1B
    -d"9cam8@Mi`%ְ`<c˜ӏvq"'L,t0ݐLxE'8	:;4Y?REX2b:urJ?0*||}6)>d71?=X
    -,'|M`F:_@ʽzPAoa{xAs&
    .*a:חm{4%v:*x0_+I%&T6ngK3gph
    -``RK)oRlI,$sñ,Rdaj%3h[JjAqS"[  4koB#Yh
    -Aj,Rbbar)30HYH3)s'قIb
    Y f B6AHjlӾ Dఞ`Qt1H
    6*O)VYwQ%cՈ\pM\
    -.M{4\pI1H͎Kz4ES9IHip6*ƆGBJDKC
    -*c$*Dgxp1q"b	q|*ȇh#ygê`&Vf%33x`ry.0(@n~=b2c)Yfe77jɥVYF=,N-MuLA5ڳҧV2IEoȚ*<1鎮*+FVdA 0*B`LK8Q	EZ_0*`\Qc<ʃ,.`B`T
    -QB^mD>E'͌ ,e h%Fk; 4Z,QDR,^Ţ
    C,يĢMN,?ŢY,"8r]4dfL"y)�!6rbe$ɝ0bbf!TxF6Oމ
    -Ȗ`Ǘђ8,iĒ-%0ϊCWjٱ6Z>ϰ3#UUV_|D{̒kɦd]5_)*jq?q,;=1p2H|-J)zuo.f
    -IiKIn>7O\$YRNoNyZ$}mG@s
    B6Ο6I[ m6Q"l"n D@&k-!
    'HY6l,YLA}oJHR G,TAaҨaY=pkkXAG<[$x0_9q>[>h^ΣDt}0ڭ<ݬJjE)q[veBt&369J PbMB269${aDBR*6I $c²O6Id $'f욅t6I 8yha4
    B2KڠHQ%Pa=bȹY;I7qiJ&Efu*N&خnKu[].jj݃&qfYi~HRlh|WiΤYfyՍ_x:'i ˥gI6ʤR*+:9>]3jsy:ݞrrnvw[wY/}tFdWh͈Wq%D';?0@8̵{c8+ǚPzmD/XxS]g+*=ƺTiC?X?OƏ{LzmR^{y`#hn\|Kfi?YbvYۖY=JVHfER!-Oފ3iucU54,de:.-Z=wyJA+H~EJyFaF.4ΩuH8DvveVcZd)G·GGwQ.tFa>TM;aM0F6eA8AA!Ax1A8Avp
    +\ouY'F%yb$Z'*QL(:.	Yj1
    m1	Yڮp/t"IMtp*(λpv!i`P	fx%W6О6a	[T,J&/alA6Wg&C'ʶ'((RNCigդ߽;{yQR-$39c_g:~lZâ0
    +gQ:vY]R;[֩hQ(TPeUmB[
    \F"+/Y$Vǂ0:5'/SOWq%KFʃ303܅)(\}I8X`jC9n$*
    +.lf0L@NrC9gJ`vX	d͍99Prqex 8u09).$@Q@X.s^:r6p0
    9,}1@@jL["	5!aiˁ|"e0]	SȿL?I钱6 D&ܴYX0`
    +;8&ri7L3dZ5I<E'8	:;~t
    }cuLl)QxPrH)>f70
    +?=X
    +O	0צ|GaF! ^=0χ axAN	(OEհ:ܘk]l÷|=qTg<
    +/i
    Tؤrw7j,u?Ό)
    +s¥/\UIY+LKŒ%Y5Y_R`j%3h;JlAqSB;  v9KChA#9h
    +AjRb`r)3r0H9H3)jmL~H1†R3bz!
    + Na5B.Pm"8+z=Cu@.r j
    +@5iE2 UMHkz|u}")Mh1Ajv|G$t|oN:s_8c#!5
    jƍ!QPKݸ1"Y62^#Laqkkk*Fi(
    +:A8:ff(UFgYwxL?0f_8/e'=
    +%r;-!`//v!8Q˜eQE[Y񏻬7O.{*8Q^ipc
    +9բӖ]!NY-zD5, ռ?*[q0(1.¢F'ek!pyBs(iq
    +F2qo' 0JB`o8	QJ$+Fi[>Xe]/B(MX2"D`6PYF@0Z7Jv@hXL5f{HE^],0ĒH,ĢS,ښŢ]?L#m/1." +`a(e*SWSVGlkia|`[0v|ϋqn`HJ<#'Dqd_dIStbLےxXgŌ]+V5XiOVHgǙU5(?2%{גMqn`k2ߛ_)}(¿`
    +n¸{VQQGR8DV_jٿE,Gau:@m[-QU5O낐BhvtAHs!I~!LB
    pd]ź uA0`* 6x.H1@ػ]PI
    +$8(P
    5킳6ʡ.
    +a=ÂeeYee{
    +&/]Bdl"=Bz(rgp N΢1`KgP`"mV30v܅hp+3p	`K3O{}Zl3bkҘ /Cg]QRWs,c94?&#l4~:''N0a*xb]}x5[$xF_9q^ʭ8/*.7?qQGv@jhVQoJ]g`9̮B.>pLs.^ $‐A3. $e䀰BY.ɉ 8`<BR~.N:,
    邐’.$|TBukBw]\6ʁ;-.a<rC!wW<iYee)
    +a\DP
    :P2Pȝ-A5wF\lF
    +&'@m	.He%@3ۢML,>ryFcLh$g!Iv8{$g1A2~A{gQ|qLc8GTv	ly>΀
    +X]dv^(J6y_^$oFa~zo]frsb]H'0
    +aB8HB"2Yg;R*$9SBt$<`)xO!H|
    +Ar̟Bl
    +A())&"d
    +ٗ	cqEB0Nl
    +iCS30x0ӄXЫ k0 ī!S0\0lE0LN0,7tBy%vӁp0 H0_8
    9y`N@22{I&,2$-i0:ʇ ԄHPna[<'MhC_&H!:
    +tN 3O^:!H3ma։snKİT4yx-{6pe{J	RX~w{IϗʼGxx!'EaFៗ
     K7|5
    -VKAEore좙@GŮ!kxm[bxC[kH)yƥRT,Pr˷fL4y]S[sΝ1ڇ=$a.A+8L"׵p߿6W5Txcoͳ>R6wr_;6;ý{.{2]ow'5z{;X!stq~ٵw,9,u.+bvaӞYTʕQ?0'gD|rҭw^owq|n;ۦVO@ڮw|>آf(!t~ha_N.
    ;:!CBM,VwvKZ4%tY+6ع	]|||tΆ%m|pٯO^hG㰊cReQ]}H–a'1ɵ0e䬋\^“cLijG'ʛ$$cT)呫gq:
    -U~-xǞN
    @:D	;'*KvյO旣};`8޲R<<ؘkTے#lUoYCۂ*OaKw@ȼQuY=-*TaO?i&2ͱkSe+Q~6һ	|\TiHdJ`_Od$+)quCKFOtȼd΃~>G&4:-?wNɗ4{R]U>J+ÓS:-ږU}TxiCnPP)vviʩY͹\Vۇ8箅3;nmߴuqQ,Ƙ )ĭxXg	j0VT18`c~5v7t~v}:m@W'Tjyg+Q}tN'ݝhնS۟B^po_cnwjx[AV,+Hɔ4J[qkˤ?D:}ٸOQ7,D.st~t*6I!kǏмw{)t$~)D($'^	4nEVs6H
    kF4Fߛbd]m}.X/m镶&
    -/|`ܡG)puOOn	'
    on2cYOرJֹ)diIQU~jrA܂4oMa uG۝I/kH7}&>]]@뢣@G6r_mn3_^8>
    zӚ\/j`8\L7;V=Q,LFBs8*ÖȗrHwpv)V3^‡ !4,-Ѹ/Ugʇ}G+*=e\7VUL
    -BȹB$LUdV[Փ"@7**9ǛuY/Rj~huuyt(hkS'ODF*bP\>/#}:G/4\udhh#+u(̸##mvfFiGgٱ.庌5D;/,,)H6bH3"
    jjbqI-5P",XBd	Y2hs%zG'WetQFe(]]i^t[2lS&xߩ8Caܬ/2C)|FXڢǨv+*De5~mFgQ"tkk|^Dl'fNwFPy·-}ˇg۝fwpM=M/D׾^\ôF|QEu*ؖc_zxO;k?]Ƌ$*s%FUe.™6c$(a+}NO&S3YkWLKgjK*>e>#&z:K~շu [Pqri
    0/uV'7%d,-)mP!.ݣT>%
    VQ_V(3{p&^ԭ;U^-WVw>~}!O$)VC\i9{R6wr_;6;ý{.{2]ow'5z{;X!stq~ٵw,9,u.+bvaӞYTʕQ?0'gD|rҭw^owq|n;ۦVO@ڮw|>آf(!t~ha_N.
    ;:!CBM,VwvKZ4%tY+6ع	]|||tΆ%m|pzJ촡ϵCnW)Enģ3}h#p8hyYbzWqA-R,4e؉}Lrm&{9"WAaxnZo*%		%pJg,@y)YܢΩu_ޱS(P/~Ή''k,#;'6kzZ?[[־жʓ.*|Rxt'P72oTv:@og*s
    ++UOڰLisZdYJ?%MGs o@&U%ؗY-fh>{JD]+В9ݷ2/टOb%0 	xhϝA9ǦTygϟRnKf襁eU='U1^zzڐ@)'T]rlA68E?ors.a"kߵeh`7s]w>˲1&H,q<60VAiY.*/Gs0N19g_lC
    _]c7d`Zky!JBvEEk{pS}w'fmw.[g۝0gpcqKJ~m?ei*>q2%xagg2i~&ĽNOџ|}@ga?~w2f~tsD6_r^
    +͸5e򠮇neΑ·|T뺄p6ST @x::
    +
    #GR#4^
    +E	/_
    +Q
    +	>|߿>l
    1[Qܩ
    <+k)B=ͫX{p9Yz[n*ozmw
    +F+{<S;t>æu)kd8Ils[ఛXfpvuAu
    +YeGZRTߟZ\|: [lȄ@D=fv'C(M;{	jDWWp8h4<\(W̗/}am~B޴&׋gSf͎UOnKû2\4x3ʢ%@d?\e
    +}!.mM1zgKaKr4xU__ƊJ~nv׍UB~G쾐,r.y2	gU5V/1bߴ4
    +CfiKCZ}fi^(
    ++S}X;,WOjHjN|(ы?M:4"WZ8vg!;23#DfF~fQڑYbv,Ku.c*юKl+Kpy%8:ҌHèZX{\Ge26yj%K k0,>YBz*o?\gU6aQJWWݖԲ0pw*ΐ(?f7KPA01t5Q!1ʨ
    +vYq
    2ôuQYTxb; [p޻-h=H!稸2\	WjFDiPk:)#xI8ޣCxem'w;5ao=е>nX7syc
    l{0~>ڋ~G_	vUù=l|99,)[
    TOK"vg]=v{SO90dh&2ѵ0-nࢰa;_Tv]{:ؗSs~&etyb9Is9&b$sQUp
    C	/JJI.Lx5sU@SҙڒOȪ҅_jm~w=l }D.lz\oiKl]ɍr	KKz njȫ+Kch@(;OIUnT0ŗ
    +(5A9/ukxNUW>睏_|Hh+IJuWnO*9f#AZ _+W20wQ>tzl}M7p\
    FwF~+H TdU_i:/0	i<ڛ~N#wy\m5+zoE
     endstream
     endobj
     276 0 obj
    @@ -3801,112 +3820,125 @@ endobj
     658 0 obj
     <<
     /Length1 2055
    -/Length2 24198
    +/Length2 24257
     /Length3 0
    -/Length 25420     
    +/Length 25501     
     /Filter /FlateDecode
     >>
     stream
    -xڴeT˺5J`qh!wwwwwukGg=5zɈ@@1=#7@ZFdoA4qԷ032‘	@"@n)@== ڽ;
    	@;ۿ&f@aß,tt*HZ-FIzz,hY1@PQUT+ʩ+QѿVra%eqZ(JWQR~oBU~']FTYPYC^L'ٟōS@V5P:8p308;;ӛ8;ЃLm,ljfpY?퀖hm>NS
    -@hm$i>w{ßhcoW4Jhomh4  hg̿\v_ԅ@+Ӳtwӷvwlsن k{3{+f?왙_6AY	1Q%e:wYɀާcMWz"NF6]F +wp'b>'++lk06623{#Gk3[Gm3:@[ДOÿ>Ow
    Xif|swt'c:KU]__G-]F@c8Yû$(9iKRV
    -H,]3BԀRʂ-gf/f47s04{%/hmb	|ߖL*v?|4NO_+D
    AFf&f6v+L6%5=`	0PNL#V;AA߈`=^	d0L˙߉X37dzko `}s,2o}6@;3?B?'Kq7d~~7S.ȿN>?a%;P[!2vf.ߏ-ӻٿod	\Xw]L,,K`f\ÿ/񿮌wYA@nyd`T%7UEEZɧ.:Ն-CF$[+׺@,u9|HA`WKQTp4K^/MfɧH2+Wu&%2z,M0OTH`Y%Z^E[+W1uתŠ6hOGU\ʽLIp|֍!W15J[CgVlf]koNU/s'Y'D/ŤwN-go>{k(wv~x9p+%hiIOa̜)U?DysUK1!ҐdpE}W$2akrke&4~O{:Xy8^I16gEB&恞Wq.Ȅӏ]*IƑC'{܂u/,(6ϕ0z1u?E.Ubע'izG
    s77Q5[*ͷΛДJӍVRjG/f۲iXb?ek9]Hu+GbكVZ;;IX桢BH3	@+ie,LJv#7cv<"ڢ&&+O-v,fCȠ}R,[{1ʅ!{o|WNʏJ⍚H;[hD
    -oqO@*`Bo(z|MS;եz+@
    h{h(z7t#v';`sMK
    =~'T~,07J}"48
    -XbӘM 
    6cyb:_:ũO_2 šOU?#"ܘC:6''uj}x2lQ-әFK=pHX.'E"޷0~SXۜ?*GtC8kņ,OK1qUBA 4v>ZY	K|ĈU\EXu3M=H}h4O?NEŽUpbSZo6^S̍EgIK{үϪc&
    C_x9Js
    o6GRg
    z_oS'5hJN
    -BXd5)x<|И	!Y\ډE#co$Dw{[QGA"CޖK X5
    ȻzNJXs&%aך	|l>Nc&MY63SzWL+ MYGJ!/.'pq-š<8qk~1cvIWKj>Xqs$8+JMWBúد
    -sN])!nM{E{>
    =iQinƸMtܖan&FMHE.ǿbxQeoK	ÿ[.:2ᵄhCPTC^"f*M+_-^,<95Y}v6K_!yJSͨg%wΛa5Z!ɰ"=fYODjoftBCqyXAmUVp
    -%ìf
    {Q׿Ӻ–JHMιb	r}%actmhc	15&"xjq'rKYzc@ɟCuzNeh'i"F޺)5Xp`WXM;SW见9`^œaY]ʹx
    -ê_ݯ.W>Do7_"mgZc}Cy].IҍG^3|a>beV
    bhaO[  v4P*=gwq`U	]&EolP榬}~]CQ%iӀ9 m1">3L
    -^	TO_.LؤVV6U +-"WH,,7akAs>vX3eE`6m5/e$ߦ/u3|81ZM1#h `Х/X4vV\= (,H}q	_UM2R ~.qz)1l zKRtYoUב9b|yJx	w*9~e<ˢԟ8}i"oU3#}|>Wƒb$=^[uWO01segS?!H>ݯqRw3Dt2
     v1zЛi"*@&t
    -[ÓwkM̾
    -,>c>u%+#=>ϝm23ڠ|>@<>봱n
    -'mx̲%7=s`0qM%B.66{+
    -?F~O҉<ͅͳ}%hqlK׮ZљnagVj.M>XWN9_Ѱ_GF//K^0%>]ړJGbE: n6KzXy:}v3կ\*3m[P?O	=2\?)lIaץ(+{H}Ǧūg}Dh1UQs#<уC:"9Jpl%ZHpFUGS+tNUaBwkzސL\ΓAL]I2Oa<N	zԤVS.F(FJقHCH-PUR=t*,Q̹eݛ~$s0A)ÙB,U:"jDNQ#ǁo]Pb\X8L|#
    -'fsh_y'f럄~	]D
    -<˥}KL*=wN1OY,`r7* OM^)5?~(;6|JxΎ2הI44`i]}reZ
    -?źbuBamk}V%9dgQ^in7%)
    ނu[Q#,!UtF3`ߗNnlaWgħ&܄#cnV)M_@q	ӓ(DXmw;ԁ|(,/_wtHf3>)Gc8gh#h.ha%cp"D96~LC2(W
    - chI$wL¿-fhU3ĻNg9\v?w&`-@-
    -{h#>c5͗U	T-u'{토$5B?QɄbcUĦįZ3[K[tp&q붆U}[ YЇo: Nl4tFSoV~Wteq.bqw2nbCm#6̇fki>8$ļіr$t̎OYd#Lb͍࿈ó6[8֚ J
    ^dR~oQ^L]'*@@43|)'0
    kZ5X1aDq MMWL2/91U8(0
    Ԡzqhp:3Q#sT'q){c،qNg7NҶmWc'2]^B[_c\&!PE~.ӏ%LS.lGUan̛CSؐ8DtgwO$Mө?L'R2Iu/NY{|9AoSV w<}#QɆLnHe]f/)9mAFC\`	\P
    -3M(1ƈ,o*p46`$mq$=Hk
    -/P7jzf6Z#쵄E&Л%Z	N!z'Wmk-n
    o'bg]%9¹B-=HKSLd%y-!RbnCFsNRsNt;:cLfys2qց!R;(94л`앳,ApVöeJ7W6LSX"}Vd'-7cfr0Jc-AZKĺrqP6#qFeI&~Y
    -v?nQ?f0;>g`ǖS*Fz;bJ`>te)[‡T+w2/p?6YES?n_̰'R7ÑN 
    052"-cꟈ,}os/Zڠ7PFVcGD
    -UypwGK`0V	aÅ~gyF1"
    -+]cpdE(a?u/#_*A}fB8^={`lvƮ߇8!ݿjsS.e+EcUvʯmx;_kɀsm3`}O%&W>YRq<tstM*ɏ"a~}^&\̭18Ǖ^<	[,
    yeo
    -veW]̔EYl"NJ2ĮneP=H꣺LO]I.9OXZPwnϋ
    l'W.$aR)6#ۿ8)^~iw􈒘b=B";үNB,Dsh0;cKwN.:wkueNC~,zͶp0D"GE ?49,KץTx
     F,&k>t|9@q_Eˎ
    -"\ψ!>wyBi0lL()Lݬ0uZ'2\4j+EuɲZ|J3$"ߞ& !%/Kη*6
    -!3!DqoKjpiI>luP⋏τ9-<_R|
    ?D`_mى
    \}fE^ʹJ|i`ChXʧ!{M< Cp%DL\Mrh|p֍omQocx	{Vy0T b.L*M+uL,7bhnۊV=[]XpU1>? ܾ;p}ϤR&e,2}f3c?CCOI
    -QK>C3N~Lˬspavx89ckS!M}&ѐxg
    -DrK?eOŶ0:XβOnRyPFKz~ؑ౗ʿį%%x>^:+GʚY.syZLBbwƨ"x=9uڃ
    -K`^$Rpm̾BQjciY*t%AWDM5)r(1|X6ݢG:}E$$T(mB{Ǫu2bX/<~>rT	xV!tPB?ql"/u8Ne+K2U~qbsy49tq6-qxn&DDh.ɽkČ,o(J㋡Y"
    4c/D.3Ǝz)&LjhfSԐ8MOD{<58A~0NؘTL&DDɛ-noAj*LlӎњQѕ$hпy6N$TC
    T!s6\WXzH'lrmW)|8*yDyWx#*Z54Yf?KRJY]/*n3-HOqЭ0d{=d!:LjSW
    -ύB)m|]:.dW:uT*8ǫ*	k"LzYw
    !KA:FP.rJbNwRb&2"u	Q鏇( ~&P@C_$<4_OY]_ı[(_+
    -""x"gŶa8=GV^"w7{:#C.x6h'p!킺H4~^kZYb#-Lx|ݩQt-FoH'2+
    -{">z~C7^젫"}&=eHp=>"0&unCd
    E.~!Ad)߄y9P*I3ВK\DIËԫWX1w	8c	m}Ti`cDnLohr{ZG3vJJG@.#`9d8DoezӋaLx$ީBPL
    -SI"M,8>1ٌN<>eg5ofLJ!m>]9z)`P	-7IQvwHlM	UKC/.~0LJ]<5
    U
    191-K7CE-k#,vW]ŕbf!#qV
    	%~	Nʮ^Z*CMܗO%
    { {Q:~5g	.$Na6zqF)O5ͯ>1QqAxJyXǑT7q!}oN/=Bp`;/Lbi'ӛU]M5"l_"\w\+W*Wё)U2+wSJ?U4W fҋۍC}N.sq8n'=}P.N:K&J~(:Ov,@fzwՆ	xbuYW3OyM>BvҒg=H3^#MQ͟ʍ+J{iۤiTƗ4g	mKi
    ʲ	=/Ei	\R=vVo8t|AňObXcC4= 4+HodUڛ}rOW~&psn%30rC͞VIA.*0	!n*\W)װW=HޟyCFl=FցƟ-	Em9ڥ
    -r=_7~'Cy#90XYgh~u!F<[rIcXpۛIc90Uv"c`=rXjD^uyx6XGHb/Թ3О4,su4;N3k?!Ln1dq)-Z)0-YGɃ@-NWUis/tz?Vj95lt #3l'S%GHGZ;u5xK=U|l	᳎Aޠfo~A)jC=^vb--ҿyŌ0QdB9i_!+BVD+p%_G4%茑jB/I'yXLTQuUhIC2U@:ϯsŧủ&1vכ9W|BZo+z$0(*VƘ8!%l镖5
    -jzߥxy'1+_><;16|(zzS]j)ʇ
    -sk'S2.)q1$=?gạZn{,\(q*R`D"w]M
    1"?r)(D;vdahpi`QԘ
    -2kW-׫̆(d:gV<8pErt&I'[#_~]ӼG;>,L)(P|[Jy9j	O
    -[1CLJ~6=-:>?'VX'WD܍pƾVˤq_'C3JӤesJYS2>F. *2e8a!24!Dfwk:<2A5~[}Q{dIY$im,		"&Di1ӦٓE3CRMj#hy<3{P1k=x5ҳmlPGt!w/>e'm
    -Z %FfgusVQ7:u}~K\eCPtRcT:9zf]V,v%	o4#dh*Q6-gkD}YdTj9S5]XP;8
    $9ʠn~XΠSpERa `Rn>5Z=FXw<’ѐL
    -h,67I~?RraFp~Wzj\o,5\2
    Eí.ḷkqē,18R2im\5H'bꨳWU+d'޼ Aif\qxT'aT(8(;:s]NdYc^߸pnS("B}W%ePmcUS׷
    P4|)R#*
    -)Z&ՁE6{91ifT)c2v+;QUw>16L[W%3yP*SH?w>aڦX]wh>"Xl-*aﴬ"ed$;Rm*^xNp
    8l""M'zbٸvongSE{W,R|(B{YK*oy\ LFf.9kK&3L@W4<- @e"33C,8Gʿ0z7ǎA$˴KLLG	[D*zaʃAq׋5bru$sM)ۼ)MX(
    5su[qIKuQȆ}S.L2NVk?]Ǣf֩T6QM rvW 1W[GoGגѵ/䴢qҀ+#WyBIEz'9UNN!ꦦ/-~y`4J~jĹ:_xTZ#cԩZ+jG(sGݙSYQUq&2iOzxV|QuM1ÏlX&!y`brc3 A :uy}KCɹӸ9k#h9t2Vg؉RH)G&'mIzc$暫7J
    U7T*
    -2:2	F^}ֆCࠚ8RT~|D%d28is/R8cM6Bw*v"?1'l˃s'9cbfK{cF~xN_wvB*UIJR6#ww(Si@@(铤.0>3C$pdedY>Phu"F"+-=a|I^98,8#'L."qg=$
    -g~i(ƽD-Ȣ_"B%zO%
    -{-ݭeVC"
    "6]~_s7~jݣOB=ox#>G<ɭ!1U!b/::٪˄TFZ&˳|Lwv߰4PM~nC2
    i-UZ)'7ƋP	ER=d8͜b2
    -e7hi:nej }Cڍ1pkfpsN}#gwF9&"r̿]	6c%_9F~l~B{Ea<0/x~0Tu瞅=o%;U_h2p8o#.p-@ON~ѴobC83Jp&N|ҡ(Uԇ-TvdZ$l"p?Jr/Gٍa+GPOa5ctvwm%!)uf?;*^AX@\ʢ-jrPp
    Z8f2
    -M4|rR|8Տڊl"[<=Nm#Βߴ6ӑ{W10NTs#GةUd嚭=s{	6T*۪@viO~S#)0cq).yUfO(ԥ(NjEIVSA^\iuʹBoJ+!vi0.(g$v'׵uI;V3BJf2# oHm:3985bd1Yx
    %ΑC}<J"s_W|n~PQ]yUc'qȃdqah>g0*q'JDõփ)RPM5F8uzb$!^ \ t#\{'VI&a8FaF_)G>\“H!B@ܨ0nA3v˪щf&65pU7
    oؒM)kK#C8o
    -8	G$%^5zTJln=X{|x_Q3#swZ͕=E
    W-l?@Ypx-IBL]oKɞ+Oq"E`?+FxqYP.WGQZjG@RZѬL/{O1^13^(ԣ
    3ML97546[߷¸Erji-cB.4k㜚+a%gb۶m۶mڱvLl۶'V}WWjNuth4!@ip8=I
    [`1[k[3U1l"+.	b\u4\Clgo#07gywh)Z>"l
    -r*eVs(Xc3ec'P
    -9V4yWj\>.Ρ>K%%GLLx=X`'ni笞 z^>'QO˭wX<
    ؊71ZBVP}6SnR-
    ?~`TpҀZy5H	wac>JL/w:
    -t+us ?3_MwH3/dH<֏!~ɤhB\G\Rb1̱T%zpsz~h
    ߞz ߴA+y8PWdԞ8.`F9W?_JӮYxP22]	*Yl"4W臞isVӸ% cTs$gKICU>_!šFC,@󠈩)H+d.:;Tss^_ͻ䯙v+"+66xZ7)_7uёR)0@%1NPx	&!4^{S>shnތ#_reof-*fWU
    -
    J%HYdl"͇/XwoP;
    -Ki=bVu~*;-7
    ?_DA4Fo&f?КNEYԲUL.j3b<vFzGnl\4K!|}T)X8PR1Z0,bԹDԨBh\9w# )tj&Ǵ%&0pGr;͒H|"&<36Ǐ1ZK<>
    -45vxz㝯uT7xߤaw/H͂5l3=BG0,;HՌ;q{W%Wvт36&ګ7aqh**'ȱ[']լځ̓I5lH+.CX41Yi;	
    ga$cl/n.hzDg2\g>S.S1xz?\
    -V"
    [܋e'8J!QdͧU2s㡉E6jj_em1PW~ՠr΅"ǔYG?\L 
    -a[+/~TkZb]:gƱk3y3i˦bF3H$r*aGJG`tGQs"h	lDgRnj?J⪗PwXSQwNN7+v8Bq4e_ĶxYj
    -Og"7"ֆ+wvp0op on
    %/,4͋;sX*5!=YzG&!A_L\?:J+4|Jq'Y,4Wh
    [BsffmW5"%rՌLiU"ҿƾnc>IRMvG;O[=+׏WtjO9gE˺!X*\]
    -Lp@[xbVt@(,eU71f!q(qZcLhl֗r`&;V
    >6s7di귳bev\@c$k@yjM{XIa M+|Mm6}p;^6
    # b6-n\1:jK'X)eV|>baN^0{QP*MwfՓ	5NH$׏F+
    y?1Ga
    -ڐ(CƲG*.QS0P{acYc\e
    2F=E6#6Mxx
    #	|.q%1NC!W`!?3ӦSuYz8Զ9/?̯IroSYVESړq$(Rߟ5cthq+C?7Q\7>(P.!:\Y@.5Brx<\,uWd§Lgo(@,.-]LG_U_BE%_3Ѡµ񲂁Xp!e_(zkĜfY[`/FbX˯L
    -~Ε	5Ur	ŴJds\5G{ƽaI"]*le@yEhLvOQ,t'Y/x{XNAil~
    -x~oA~U>G$M8[88NV`GWxdؼR7Q-\
    -DwRd__1=ч.3!pkNjI
    -ءI!:*@MJ{
    -[9l@c"/sYpi
    -c9:M#umA!CZ4hVaSr)tI筮J!,ދ$U,w6>%N%ոȂ"~#vX!ʈ#HF>F;*F>H-Guw_L=)wk$5;5W%+ivHF\{
    3#){Asm^+GҚT"\F8a,=]2AV_3_n,g:b/o[WbQJ,I
    /$.)?iMdHxTSsTr.{Js*i#οj9YE!>r%>>9U؃KM[lk!jYUE0{ܲ21ߒA*1#rx&S8@:[,&@-hF!AKF<$c0=a"9u-sAXY|("ʦ)8l{3^/"NEq]'pN	.	4$^9@wp{RguouT-8T;="zK'sCigof{bZ=iZDjJKn3="(vʲx0,-T4ZP,1h0F
    -Ag9MGo#n߽j;($:<WlGdBJݘnC+{""PxaEBG&fHU[02@࠹h!b(K2(2պ)l=$,em^N*nf#&WLV JӉ:Ii[=Zo~:垜;iM, GХ/۔F-?y5襨PCpyWeW}ƌ~rVmYT7xWV0݋lBCLc#S7*&7nߢiI&d5I2˞ XP0#w;Jq$ʤC=bkxQΌ#i<%^GzO|]`Y|ϿOc	tދ
    u,Wb~?8Jlq*JtL).lupYk?Fb"bU+Uayx:G/m
    -,FKh8Gt=5%kf;ѳCa9PjwOG*HM8Up&{d[q.G}<,ڀFE}[8 P멄Ÿ+\ʡetZ)0>yx3{7pq&+Hڎ]pmOXh0ZRL[&	,g·H\7M9(!pp%#lEnȎ䎓[q5@T\Fθg.A=,]!Ju:w`A?\{<X䒈}Aݹ#lCSk{Rda1wu(kͩ<jAAU\72=yiDγ ^'Wݶ72h&RJg&&eܥJX:K2DĺtCiW	?4}P)kr!+Q?ɉN-ï̑_̤bG|GpSjLu{pmczɫ7x-#''(K,
    	]3ץGoљi2:g7n%vW3_?>Gzśx䚃ɚO0PF	?W9`nwr)sb#As+IfS{gQB%Ng*Es._d(<PUv.$KnEG[j'ePy]gaJ.Q|?zK 'lNJ9`e: 8OK*~Y6;.k__3|hޟ:iu!ߠ_L[³Mbս?$tHtO_XE`Xnu$H)P7&.Scy51=¡Y-!)%AMc
    -dN
    9q*{P|.G:m%ieVBZP3zKkIA{9s|ORِ7&dL3ņZpWgWJ{.
    mguUO2Cp/dpi	ZY;f5,vO/!inC^"YS3~uiv1
    jHsaf9^T%c߶Xo"_Odz'(O%/fųrc''>Ms#=Om?ބ\M؏jر	Oj	!#CqYipuY@°
    -L36YT
    OI—22fg;:^8Hh
    +ӖqH^4_[e!̎/NZL|XV(A4얅4H̳Ԣ^H*{%egC7\DͰ~9?!kTِv]l[twIkeEodr[@kvuQ(xG{_=&@X}Ut(Du;~m7%{F},P9K[Xa3dCek/!Yܝۯukg^ac(Q: ^(z%N\ǧ[
    -}BžG	(Cݯ3݊r_7cm">C4٢t\_EƠVbr"]{lu2wDyMP'eB}Pu3qIklC
    ldҔN+qJ|m|(2>'?{+,T,^g`or
    -3ZuŃFШQ̾)B*]
    N`ҬۂJ	ߤj;A'ie\3!(U.P8(.~n 6`.4V9wamaj?,j>kN OWV}j.g TOqP7S5Gn~2}6Βlq(|4<84yeCބG[",Y'eY?+*'b
    -A! 
    -pk0arxȀRR7o	2||l,4sZz>I+^4G
    0}B/
    ꐈ
    
    ۫ydIV
    +xڴeTں5LVP%8nE-Z)-Et{72"ѹ5	%9(rpadeb+MXUv&6&JJqg5Av(E"P@79t1QthL 	
    tvҾ=-\`gdSO@8d 750ZY@u6@CMRU
     FVX?\5&@ZCMϫ:፿%@Q[tIuQueIV?k܀`?m3R-A5X8133Y]@ΖLvSAζwg:
    +v omt$I[қ
    OM@2+,7vp:8ޞ@s]Pmev޾&c&`?mr[]XX3kl
    +2Rjos`TMǁ?D%<,V^N˛H%Ao'a6''ᰰv03{sWGf
    k'WY],af_zcfc~#`abZ[&n@+Dsk378X21D@Q}; ;O9Y&	NrS4wW[ER@sek3_v7:X߶/Ɵ#eݷ`dd/ߛ,l`0_iA`PV+Ndn`	`8;x"i&ls_b039\R.3Ÿ
    a0+1qF\fEf/[1V_Fq#
    l`|k`	`|fo	oo q;Bv@q?Hs-l
    BYߘ:1eco'o<f/8\|?a5g-P[!
    +&.z,oǖ'h@l117#2im	lkK+MnP4CXYؤ6INe:ҖM^ɘ ē%
    +	l	ȤgPMmٚT9um"gG"):ɤPEF{$[S1ٖF;辏a|EL!/o[^4ڌl᱌FI<+.ڤOtnθ gLƱ@3Mdkj^Il_pBVxYA)sJl^bQ2;|"6Qִ=5$kTbeW3tUk~ہSdo@U1;5
    +*
    +qB=eog89a %nuhP
    +%)gG<ĔZBbU#QYKST
    +6yخϬ5*m`+nMZ%
    +?ڀ~Eݔ0|@|户1n
    +Ӷ]"!ڠQ+bIz_ڣ+8oAD%H{exYd(6tO3= yk>圫2/MΧD]fc˲-;3(Ly`{'TIrG|	,o쭥Qgnֆ +}rɩ|^}	YXܧ.N͋VY)B~a.=]s	SQhgKS6yiX;6)Ҋ%ZL(BPAéLhƙRѡ
    +gܱ}ҋ⑧_5N[{8
    +;?Q
    +pOw)1"Zz29ȘYBߤ#ҢY
    VRwC*IX6>Gf^2N
    +/:u ƀC$[BW.1W[R'gpb_FќZɖyBׂazfPO@[`qD!&Kݻ"^wBwXMKtyMuh+[@R:D\c
    +B@Kc.æ4XmP{%>jBG>oT&YM?:-YnR֘1}hHWP'{,_+Ě4EK7qkoJȮb*۬ѝuA
    -Vs5~>C`;xxIp8[YMm=UKN\Nic~-oN5noos?	~Go;x;StV>uv*f*NwZi6N=Vd'	sIB|ȅ t:0և-Z{
    +&D`T]P~K~(gN'/)HognlcT†i/MOH'rUtǤf\I~
    _6bnsQJe}M/CIYtuOc'_ "u/cXzt!mYߜGOv}!9|[ZݗNbOi9hH௩Z$7Upfp|[d2y MrNSc2Oò2"lAiSO(H60֡nBi)ݺ$ORz1"fmjNQ3GwС.+;HBtmmj_&7l	*1b0b`s*D2-=БHjݏVauMrXp8kXjfh&CB鮂G铉&yI0{ߗjX$D9_ƇMOhGp6/mพp|;FG8+Lr/-7ށ3w=h% gq܅fZGQ6m@NsHC|kiCqGzS;Ӑ5'w:K˻Q2 VɑN1G?oPyIX_n<7yy&ƓT*f0I?MI.([#ioD
    䱺o h,$Xag|G|81S5"+ItRoYXDсT_ 'nxQ;q0jyϋ|>l=ky3S̩#'e\hv);Y!?tu3掵ʁ"ewq%{n׃϶]_POmR/u6[J>PGsyI_Xj/ݷ
    h*sYɌ̼$~ja䳋R,4&k	)C
    +G*:5sP4cFi!hMrzp V(e)K
    +PVKl9N9q7q
    CϬ-kɟB8	^mrCPSy
    +"?##'LˤCB@_¨1OCv=/%&5|L)!-۔TI?k_3:^P"tg*vl?~[ܲ
    +vŊ׾#246K<ʣZĒ-ZJRUvELb]W=j$eU
    +F|wJF)WaTwaNDp};P=a2-3M{i.Lc EߌQtVfts}]~x7 F7>1a}(dw՜njg1~'[]8ָehe`ŘEIi=œp,D`$'7CJv_:Ͷ!搨[0̼Յeu@
    mCKF
    +JaGa5H%{sv9[\S8u﵃z9{E.G_N͔ԣ[|7]@%!$|tW&2+$J* 5V>\1XHYx44=<
    s"EC7	ñ&o'jqەXxqх˥l"&lYz5P݆^2
    bEMlK_6]P%qxoBX5Lk\8҄O^_]!q
    6`ĭ#a[vtpЫ}L,~Q5'!K<$1W*w^Pώ4}Zb9mnia*ۇ|*H}B79TǕ.~oyO=Q0u|V'`?>b~驗m
    ~$`(Յ6wI&8:f,8BIDPiEf#67O0j<8u<
    +@7XU7*/Md٤t:EiT[]Z>2DlN&T<]w8u=_㡋(&(%4ȩF<{!Iivq%U.cS*Xu+bA#[@uFϼJN!S	Y~v@_{S	n"}>9=)\)`޲:Nv2rz$^!yGv[%<&xc=\a&BT_Fȏ۾!W]ʛ\r
    #
    "{ѭ5ǏKH[:t4~y@LA,
    +$}e}rb|B#˽!.Qvp/ %q`a\ S7n'oX:pgnvQ2%:c:,D^[(߇d}s4t'Nm*Tp#2	AM>O9<}HDWԩ+-YMulv'~D]ŗ^_>QLL#-_(!3^X$XP<=t4=C+BRأM̪jt:yhKL7}쥕w[~.+V6 ]J/#=]fs.,P+'7PA0)|GrOm#Ѧ!+ޮ>*AxdZQ}S
    +*qRgt
    f!R~c糑kmv粂If^{WKN' t)F/llPI]G7,qn|>ۙxmVs0Og/PK?zG0ŵiTj}p\"A#RMشAklQGE%ǐ5v&˃!{:yz`b{TU6zA!rXhyZ
    d/&]̢E00>S@D0	^>M쮌tbx-5rrcwA{ő	CǰJ7o'!ωH츂nEWCο:~[洑
    	CB`;c	&V'[B_1ediφCioSIgnpQa=ZC;	TXzs0b|A`BxnFwq"sn2CD-ɾd=84
    +8bx5ehWӵdӼёJ"t]+6Y/Xs(ګ\T[2qVs5b-^UabB׬ fH]f]B9E>.oyP*(&ݔ?O7YͦX^{8ufHP9K.<,hBpT9{4L!	TZ$z6ҺO~(ǪNA@$:l
    +ےw7	Nbsc1"Bw2'/lsM1v^yÿv܇xRQa{fe%orKJiF\Eזx.+XaOuƤYCTm]E`8
    +NgRDd1z;ʢ5hz7AɂE(%Ĵ4m]GC]CΖo@B~jN4
    +m3Z
    +|=E>Yy,pQ-f!yR*l9 "f`h`$si'DK.(raz>^']hG?SSJJ6En;H3OV開p7fw[#1ƽB++̘WWJb=m=wn
    =_g^b?>{B~6TʍpS/&|TCd['w;v齼݋;4
    +-:Kdمn>`'>FGלp$t'ӆz;'<8᭡Ji8H>ޏWҠYJW:vk#D3{?|\IWJj#g;xTh=͢J=H
    4Pݺr
    b1pl;85zbm#vkz$c5gr"!AXY-WgkۧnT~ n3d{hWb04Hkt_qQ3eZ*9Aw@tzWPvns1,0dR!ɐadl&5"xh\Hs>C~,=+r5JDII;7TAPa|s΃eك;VG@^1;k׵
    +{qHrILl-	*jh;V;wD˦oZ-md!o]TX^j%O’ʋM'*||0[CF%_̯y)~_1ؒh0ٛP
    +'+^U*D^јrJ])xY^̦}$݈4L2Ɣ9aXB$Wr-<Z<B:N^L-b7+\uZug8ź7vDCFiX>O{-׏n$b[ݡGIeC0vǗun:=koaN#-J|_&*nLcb~.k7WK*%8T8B^d@ϋ
    M/6azG..qR;`k^Vua< tClyZOi*)HVhI%}G3]aCRL_앓>zW5^w|U#t=gb(rv!Bx5d$&emނD^=$f؅/nqZ
    w?GZ/г'{ӲUi>{x":V,1|Kd&LCKEײP ŽTۑT"dR&i%F[@?~}#{-׸V)HhyR9_~_TND)2T/'`$WtI9L s#Z!҉9?;ڦ9S`00S%` 9gF0og凉`x̜z}_P],G(S/fYNOX?O]rF>$T-=?ι#*-P68;N^jL^]pc74QRNƈ˞a3"	X&.Kv}Ï|͋Y	KH.<+籬UjZQɷrQ%kîˋ>«šqy"(ש؝_u(8r*~]Շeq;dt%^ph(oe^kLa4	;B{I-^XpRɷ3z+XFG;q"3zZ1ӦO1s*&eZ*oIktˡ{L]&I*qu&
    +hc(4/QED
    v(O~q`K-SYZKV=[4w݃_g32GGL$6b;[Y}=3OT4XY=H"U
    6w5ʱnjƳ	Gz$3jfD%jrvj$RsFvcNhPnaE[Na>ѷ]h2zymjg1Z#?_My$o9"!%s(LB @ԛb0֛V̳G~s1HooJVP݁tG#ےkIIϯ+Gj0s TiQ&aJ^$;![QAwjvd;<’HD>tr\tagߝ&t{Wcrdq'V~5Q+FH1zӲ7OYܾQ#{n
    +_*UFۿXyl8bH$*L~Ix6!11F`)D$vOjw4S&3}w?u<\HߠBX		z3vE?}9(cҞ4ϩ*ꉁ@#B0_b/!.=+	|>D"̖&>]v}Zs6r1*xJ@,P[O*	5?>+~2ՂIWoKT>7oXDr׮ś4&%zHvH}.]>N7}G<*Q(Gd(J('Y'ѤHx[1aYs`516fx5KKvnbQ2d&'_$X*$ԈT$'&t&_Zњ& ӖP1-(_maq~ɫC 57VJfUp<.W_4;壏frt:ym|PR_q=p_D%o1I2hZ*5"5xt$R̝DM}乿}_ItJqRN%]LGջߔ/Է'nƬY$KeIlDܑ*X-kDEa0dc>&V\5ccMGh㜟
    +C_h1]u8N)\]3m/`JiExk1Э
    $ٵA%j=7rDߗ)Jl'ɵ-6##AEwSBr|qWÝeέ	g[?ԛ?T}d萧BrX֝
    'qzEcڬRGqXހ#gw톗۰%pD>Q2(u0m1B´}գ-2ؒXPJz`Dp*vPS:={af硡yu
    !.QEy-}9ԇs<W))YX?d+#.Ϸ
    `$W[UI,'r)}Ϟ0Yw8d_|t"iCj1O(*˘:;]MP!?K:C>a>d~lp#ZTfL~UytDo}W6:cA9*!R6V7n
    )5
    ++,P>tCnR#Ŵ*B+-o?1` [iՄk`
    f]
    fSX4>g84I4|s?.g+/̡d]Q:"|v։M/"&vnϫ?	هbN<:V
    +@:C~z GHZTy^:+U,
    +|c~FVptO$,ֽ;ҙR0wy2?I?T#<)Ne3bK^)ZiҘOFE_͇X+Q_Euku [dxYA`Xܨ}ځᨃRd~er̻N|#Cyߟl!?KW_]rly/|.jx|@`hZj<AwQ~Hjg%M4x{8HF$@aB?,v5YE~8|dMR#+8\-2L¡8:cRG7C,cT3_VaQ-*g"P q3ق7ιyBw@N?V¬U#ROjKɥ
    +nk/mc=QP>ٙUmdYWum#RIN@`A	6ĝ5܇G!-ťɸB8k}7b&j~eZ |`MYt7pHֻi#0+%Œ?N{읨\{w	[ui}SqD[jTÅޞ=}E8&zxi$"3c\-"%lE5˕s*y9p弱iJivLGEh__DZ&R%WhD}To2DF \ceԥ;G_s6(g>ljq;S|UIFo&U
    +y$אaI$ﮑ鲿fcr)7{"6.ydy̺Ii(=Ku6޳h,P	s]dCSҢ&6!Rm)q͗]w9uHK:qqwś3^N@1aN~=K`W#Llx@ɳc|{*XJڜ%$S&n׌I@óS!BM>հ"#/u-zKKcY@_lvsGwvw4XƌxZ-FAwKT\s+^^Nu6N"E=K{ƧaKw
    +=;ł::|QT703WT~n
    D2Rv2LQ-.x;f#vԠyΏlɈŦ*fXiLvԃ/^ǿhr6.7!aEHw4Bϊ'a|W*^Ч$ǽ J8wć1u'fA1hvw9zu2ljdмNSzo]l*B@PKCWR/ݘ}gכE}I,HHP hKsA-Ԙ4
    +(
    E'ؼxnb[M".]H@#}LksM(P:Kl,t_R"NG
    z]c{jA̭Zd%UZ'XQ^&sCUZ51VPP gv@|V}Rah$æ>"=ч:zqwW(x;B`BPT|
    +CРMDUl_D4aqpٮܬڭLOKo
    (-~6L8Ιƨ(l`d׾
    ^^Aٸ"@{j+#w70"H|S9j囬}
    +dr	ڏFV"%#ҩ񱊁M2'OЈ4l\ǧĎ?2cy)۟uBLT40"gwk!]ѝEys>Z1ƒ5r[xߝY.gX1uM }-4%S&i]:%RXʤf`Rr .ܧ,y2fP=FF#ZEj
    Я_yˑSn8JRo%usTM^3OF,w:뵝	y
    d+籄!WR
    +@|/@2?rt=ܯudG-H9Q` ="y+lո0â:5@=MEPֿ\e[P_PZտȊl9K#'dV)5_$Ԗ$I 0چO~ۥZ	
    AS=+MDu")w( ,ƢKԞR=)w8]pj|U|ylus.xzDn]m?:A	V*@	r"*<364Vݻl9c>xi<06:>GQv»V%<5
    %X.-=qX1ϵL%{f=+[ucP_Ŕ1>Ae??~Vrl(y&RK1" PcxuƘ;ܐNŽ]RYf 뜳Fϩy #RK@Oe9ɫH`YӸ9s<5n2řcv7.߉0	iߛxI焆I"6YVh~
    ??72|a>eblyB/tL$z4tk
    FN
    +vQ>jj	`LCX:wi/ݖ=?alAVmd8ZY
    +˞A[qV/e+KhPV̓Y,2DPNFB&h|J+';bӋOx`I
    =?.~W&+0ӿA7]ȯ>qo/CࢎQ8B/=b:G/>țv]e˦3xDvzmo2~\EQqYO?hMr~z{-b+&λ%1Urh|[7;F#7pIS2j۲tb5糴8me7l!$CL{hqDɨ^Tl^^m!(7ҺS[ָYVM1aşiJ4bLDI\Q_NښHI[wmy@"R!-ZfX>X:^S
    +Ni: y7h-Ѫ6eiQ`jkأppM?5&2*o$V~x!C!m is݄ʎjڅFl3AIi"Wl\aQŞrj5r:lۆ(gQ,5DlE
    G|-Q
    +p;iҢP=2+(@485;X|>VLPkcnO5G_6t'XR/Io6Ő9
    +ʔbd(Y#ɗ6%lJ&klCe۝~ưNϜg[Fkw>HHٶ#=	3} d-//(ḧPStD4Bq̛Cjk2Е(.YjC6^,r/}ƋSg1k̰XnU		+1AǼ88UF
    +}]-Ny2+XkTOXt_>%%Q#~DwS:~Ȣ%2eAqx^Z+#J|J=%JJ"-&
    +ksUVJNC8³97Wļ)bomVififa?($Έi&Kkb_1Ol{4p_E5C}p3t`.\;w*l>qsL)[]]Rt٠:xY4%q&Oy*E'Xe~Vsmg"+5agR	
    +	Z13UkGq"2\rLq/;J'{sCḫ2z*
    }
    Q$22J}?-+ 
    _IoMO}-kz;	vXL|!zf̘Fg=HD?gTbIh7:88C\FJ"`C>cՎBstr覰cJ)^pVW`L#"wRWѫ(,ˢZ0f%7C#%]>6='qf!$;㡎YP++}hZ
    ^@
    `IXs9w͇rMfig(y&sf-NCQ+8."1A_{SryWP
    /6Xѱg|1Ͻkc(GWÇ6qWc~Q +wn/;|a-Xj̒xljQ˔Vΰ1|eR![Pk;\
    0hf/F}=ҹwQEa}x@ڱWiMPXd]UOF'v/[3# ZB){alO~P󤬛.J%Q#d=pFj%^:6wv旭Bո}
    +Qqb/cfy)gNlM9ONiuI**
    +nU-a">]㬗+!VDRq+kmKډxAhXQpHߞL
    +-aWD&/Z'vUe% n.'mݹtDZul~DU2֤U,HSS;(y/\i%)?"߳q.pUeCIh/s9RGS7pWs80Cz?y 
    +SZP'Wer݌t~r>X{1Kݵ̐w611/Sh(C>/zڰO1$!'XhSaYwwoc_r2Mg k{wԤ.]J7ۨR?Jom\}B
    >k@6_Eĺy"
    ++s1Ymot"}zpC'M$> V?[YouI
    	k_%6+"HCey6tv[ՌCP>Ad@74
    +:`yk<
    +PN+!Ei0,6{2Oc:cC:o@
    +Id15	J[򌫈ɳr"90o
    &/ҴǷW>9̢%zfFs\n@d^Di|Oe0
    I.񛌪'X]]!Ot;Ύ@rdiwsFS0dȬoMȮ`*HK|u3"[Ϭg%N[JXMr*E$435Ag)K$&Qm2'KJn?
    +#;V[2mQRwQ^<Cddt;2;:T`P,g'R}j3'ڍ7mϒ45npo%\؄$L'np:/"dhemv$n:\^{">m$\b!ĺ\O=!@r<{zfd)*GkZC`CՈ>5f
    +D{9v{Nk)B|\Ħɇ='(ʳa׆n;MEېiu{)lUh9+g=eit_S6)},ҸT
    +̾m<֞lȆvӁFl^Ƅ^mo;Eb%_]	R%Hd1[R!U2}>EoNXdt}mãx@b?8
    +Τ
    s]$Jk[^F3
    +J7vU#bhXߴm^
    +A8)HS${xq8](\P'񣖭cȳ\pˉ~

    : M LY~ļ2˵Z!h}L )C} x,}zEy7Yakb1$tyUj +]k$r += IkO4տc,DK&[SQ/w!oĹe7[z#頹2 ]R;I:Y(p)\cTT\@kyq2{t¤dE%ݩ%{Žτ֑||Ȩtqiuj[1}R*TzV:]IֳK6/"-:o>{FkKϯ#Дh³~:t_ʘE7ˬ#3 3 _>~ZY}lG:w4--B/] !%qȈHd,n0B~,@(\N nqΩr(%ߎoF>TZs@ oQ*I; +XY툹 >D(AU@,^2'iwN{;D@-sK>[]2B_ c~ +p|Y 䊬Fj|)&!ay8组ԓhuOFJeAtZ.u'kF8"hg/)&Ve-"Id-ˎ8S%{fj"ny8F<ݧ}!ZKxɕЍKTW4'UaI 6q?Ro?[:J3Ԋys,hF57Xě-Pp"U+H4z:Hk^̬#Z_\oEJTy1,I <ʙz_=e1[P'ڨ6Oy.2ax3_#xYE H !5奩.+D.''«-_ +Z?n[^c +^or)ʢYg\`ͼ\#p3;q~Hbi x ;Z0{wK( \=t<#~wY d' GQp19CN&TcS9qlLX0-C)r5BaJBQk2^+|*/j]j'EC~n\ʶmܯ$<$U<%U[aߍ=hS,pgWd#yʫ@[cemZˤvT^[xߙ޼814h:-1Ƥ/@-_T @>{G`bHht[t |!ws\ $}kr bCn1XǭXJAړ{yKJ/׵E gEZ@&d\~,gRtQd*+*\;$:f$'X'Y|XQ&cMet&8E`dJKɆ ?N[2RKVfd|taj0KjrcH(6;N9jh;>vOL6+[<0^ja,Oy:'WͫrD"aB ۓ.óJ{V4lVzKkw3}ܺ x߂hXb%YXT~p0pUƾ1CeQ&7ѩבUeY:Qe`dG ! ٺYՄ⠍WI+8;eH{t3Ncm"ggu+!3ܕWS{\;> +Vu־g3z _~D>IA:H\W΋;n)^*)EQb_)n_A`\ 忚"R;_2!g0|Xuu!\K-Wv @S)T֩sm{v={-dC#sJMRDqL=*sm/IX3jNNZEC's-~LzbZrP:]&BTVm(- E3eAвe @5GUxYr>һŠaB2J@k:BEuDI%@!4GSPvaoBe#`gh&ߓuȣRG >`hL `FCrhwmM r(&u~*n߃sr甞K&JU=(A{%jC +bә\Y>b{bL$T?zGؼ>9I6"{3iI_B򇣿mr?[? /31 ȝo?So)I F,ūz!`̽Pja~$*̛r~;`h"OkX (ͅY|0> +SӞ^q`|&PĘ3K5ԙ28율TM0.hVmssBna&D\~uc_JSxKReGp¾6ٚ˯Щu qN{j3sR,o2dTERO:gųzпќDց)GؤtJ1|cD'{fD7/ +D[gI.(e5lsG:%-z"6k Mɳ:bEz>=Nxy' ذi7Bz6xLy׷IV[!E=d FӦNdxKrb!RfLK +%Z㩨}~{rE: ㋧ 8d^ÂRu$}J_.6\}*ƽ1ef~}$suu(hzu֫(ZZ9!.UUq l*NC@Fu~IR̯P}Qq,Èmb=_I98@EQ;w'%'K:^X| /m`ھRX1`?gLAtRD]WiL=b^SC 7.ٗVDr8ҳ0[k@C뇬D] @Ǘk!8I/*T0h{ױj&0쾲iV4l|ִ^k90MEbc |MFl endstream endobj 659 0 obj << /Type /FontDescriptor -/FontName /PVFVJD+LMRoman17-Regular +/FontName /ZUUPOB+LMRoman17-Regular /Flags 4 /FontBBox [-400 -286 1338 1125] /Ascent 683 @@ -3915,7 +3947,7 @@ endobj /ItalicAngle 0 /StemV 18 /XHeight 430 -/CharSet (/P/T/V/a/c/comma/d/e/f/g/h/i/k/m/n/o/one/parenleft/parenright/period/r/s/seven/t/u/x/zero) +/CharSet (/P/T/V/a/c/comma/d/e/eight/f/g/h/i/k/m/n/o/one/parenleft/parenright/period/r/s/t/u/x/zero) /FontFile 658 0 R >> endobj @@ -5222,7 +5254,7 @@ endobj << /Type /Font /Subtype /Type1 -/BaseFont /PVFVJD+LMRoman17-Regular +/BaseFont /ZUUPOB+LMRoman17-Regular /FontDescriptor 659 0 R /FirstChar 40 /LastChar 120 @@ -6411,8 +6443,8 @@ endobj << /Producer (MiKTeX pdfTeX-1.40.24) /Author()/Title()/Subject()/Creator(LaTeX with hyperref)/Keywords() -/CreationDate (D:20230117125556-03'00') -/ModDate (D:20230117125556-03'00') +/CreationDate (D:20230128114247-03'00') +/ModDate (D:20230128114247-03'00') /Trapped /False /PTEX.Fullbanner (This is MiKTeX-pdfTeX 4.13.0 (1.40.24)) >> @@ -6425,175 +6457,175 @@ xref 0000125604 00000 n 0000000015 00000 n 0000026550 00000 n -0000525075 00000 n +0000525156 00000 n 0000000060 00000 n 0000000146 00000 n 0000026610 00000 n -0000525016 00000 n +0000525097 00000 n 0000000194 00000 n 0000000299 00000 n 0000026670 00000 n -0000524892 00000 n +0000524973 00000 n 0000000345 00000 n 0000000445 00000 n 0000031335 00000 n -0000524818 00000 n +0000524899 00000 n 0000000494 00000 n 0000000589 00000 n 0000035598 00000 n -0000524731 00000 n +0000524812 00000 n 0000000638 00000 n 0000000786 00000 n 0000035659 00000 n -0000524657 00000 n +0000524738 00000 n 0000000835 00000 n 0000000953 00000 n 0000035720 00000 n -0000524532 00000 n +0000524613 00000 n 0000000999 00000 n 0000001134 00000 n 0000040061 00000 n -0000524458 00000 n +0000524539 00000 n 0000001183 00000 n 0000001288 00000 n 0000045203 00000 n -0000524371 00000 n +0000524452 00000 n 0000001338 00000 n 0000001425 00000 n 0000048496 00000 n -0000524284 00000 n +0000524365 00000 n 0000001475 00000 n 0000001603 00000 n 0000048557 00000 n -0000524210 00000 n +0000524291 00000 n 0000001653 00000 n 0000001781 00000 n 0000059866 00000 n -0000524085 00000 n +0000524166 00000 n 0000001829 00000 n 0000001964 00000 n 0000059927 00000 n -0000524011 00000 n +0000524092 00000 n 0000002015 00000 n 0000002143 00000 n 0000063711 00000 n -0000523924 00000 n +0000524005 00000 n 0000002194 00000 n 0000002327 00000 n 0000063772 00000 n -0000523850 00000 n +0000523931 00000 n 0000002378 00000 n 0000002521 00000 n 0000063833 00000 n -0000523725 00000 n +0000523806 00000 n 0000002569 00000 n 0000002709 00000 n 0000067279 00000 n -0000523651 00000 n +0000523732 00000 n 0000002760 00000 n 0000002865 00000 n 0000067340 00000 n -0000523577 00000 n +0000523658 00000 n 0000002916 00000 n 0000003026 00000 n 0000067401 00000 n -0000523452 00000 n +0000523533 00000 n 0000003074 00000 n 0000003214 00000 n 0000067461 00000 n -0000523391 00000 n +0000523472 00000 n 0000003265 00000 n 0000003408 00000 n 0000071456 00000 n -0000523266 00000 n +0000523347 00000 n 0000003456 00000 n 0000003596 00000 n 0000071517 00000 n -0000523192 00000 n +0000523273 00000 n 0000003647 00000 n 0000003729 00000 n 0000072384 00000 n -0000523118 00000 n +0000523199 00000 n 0000003780 00000 n 0000003895 00000 n 0000072939 00000 n -0000522990 00000 n +0000523071 00000 n 0000003943 00000 n 0000004210 00000 n 0000073000 00000 n -0000522912 00000 n +0000522993 00000 n 0000004262 00000 n 0000004368 00000 n 0000077670 00000 n -0000522834 00000 n +0000522915 00000 n 0000004420 00000 n 0000004531 00000 n 0000078228 00000 n -0000522703 00000 n +0000522784 00000 n 0000004580 00000 n 0000004858 00000 n 0000078290 00000 n -0000522624 00000 n +0000522705 00000 n 0000004910 00000 n 0000005051 00000 n 0000083162 00000 n -0000522506 00000 n +0000522587 00000 n 0000005103 00000 n 0000005214 00000 n 0000083534 00000 n -0000522427 00000 n +0000522508 00000 n 0000005269 00000 n 0000005388 00000 n 0000090417 00000 n -0000522334 00000 n +0000522415 00000 n 0000005443 00000 n 0000005567 00000 n 0000097235 00000 n -0000522255 00000 n +0000522336 00000 n 0000005622 00000 n 0000005781 00000 n 0000108034 00000 n -0000522123 00000 n +0000522204 00000 n 0000005830 00000 n 0000006142 00000 n 0000108096 00000 n -0000522044 00000 n +0000522125 00000 n 0000006194 00000 n 0000006300 00000 n 0000108158 00000 n -0000521951 00000 n +0000522032 00000 n 0000006352 00000 n 0000006463 00000 n 0000117646 00000 n -0000521872 00000 n +0000521953 00000 n 0000006515 00000 n 0000006603 00000 n 0000117708 00000 n -0000521740 00000 n +0000521821 00000 n 0000006652 00000 n 0000006969 00000 n 0000121925 00000 n -0000521661 00000 n +0000521742 00000 n 0000007021 00000 n 0000007221 00000 n 0000121987 00000 n -0000521582 00000 n +0000521663 00000 n 0000007273 00000 n 0000007427 00000 n 0000125126 00000 n -0000521450 00000 n +0000521531 00000 n 0000007476 00000 n 0000007818 00000 n 0000125188 00000 n -0000521385 00000 n +0000521466 00000 n 0000007870 00000 n 0000008049 00000 n 0000125250 00000 n -0000521267 00000 n +0000521348 00000 n 0000008098 00000 n 0000008450 00000 n 0000125312 00000 n -0000521202 00000 n +0000521283 00000 n 0000008502 00000 n 0000008666 00000 n 0000013194 00000 n @@ -6658,13 +6690,13 @@ xref 0000008716 00000 n 0000017555 00000 n 0000017617 00000 n -0000505220 00000 n -0000504106 00000 n -0000500767 00000 n -0000502992 00000 n -0000515267 00000 n -0000501881 00000 n -0000520588 00000 n +0000505301 00000 n +0000504187 00000 n +0000500848 00000 n +0000503073 00000 n +0000515348 00000 n +0000501962 00000 n +0000520669 00000 n 0000023988 00000 n 0000000249 00000 f 0000024145 00000 n @@ -6699,23 +6731,23 @@ xref 0000017868 00000 n 0000026488 00000 n 0000026178 00000 n -0000507448 00000 n -0000506334 00000 n -0000514150 00000 n -0000510797 00000 n -0000509680 00000 n +0000507529 00000 n +0000506415 00000 n +0000514231 00000 n +0000510878 00000 n +0000509761 00000 n 0000031396 00000 n 0000031154 00000 n 0000026936 00000 n 0000031273 00000 n -0000518451 00000 n -0000517211 00000 n -0000516144 00000 n +0000518532 00000 n +0000517292 00000 n +0000516225 00000 n 0000035781 00000 n 0000035417 00000 n 0000031613 00000 n 0000035536 00000 n -0000511913 00000 n +0000511994 00000 n 0000040308 00000 n 0000039880 00000 n 0000035986 00000 n @@ -6723,7 +6755,7 @@ xref 0000040122 00000 n 0000040184 00000 n 0000040246 00000 n -0000520398 00000 n +0000520479 00000 n 0000045760 00000 n 0000044712 00000 n 0000040553 00000 n @@ -6772,7 +6804,7 @@ xref 0000050104 00000 n 0000050166 00000 n 0000050228 00000 n -0000520705 00000 n +0000520786 00000 n 0000053626 00000 n 0000052270 00000 n 0000050508 00000 n @@ -6852,7 +6884,7 @@ xref 0000059680 00000 n 0000059742 00000 n 0000059804 00000 n -0000519423 00000 n +0000519504 00000 n 0000063894 00000 n 0000063530 00000 n 0000060207 00000 n @@ -6861,7 +6893,7 @@ xref 0000067098 00000 n 0000064058 00000 n 0000067217 00000 n -0000513029 00000 n +0000513110 00000 n 0000073062 00000 n 0000071275 00000 n 0000067726 00000 n @@ -6901,7 +6933,7 @@ xref 0000078042 00000 n 0000078104 00000 n 0000078166 00000 n -0000520822 00000 n +0000520903 00000 n 0000082631 00000 n 0000082787 00000 n 0000084526 00000 n @@ -6929,7 +6961,7 @@ xref 0000084340 00000 n 0000084402 00000 n 0000084464 00000 n -0000508563 00000 n +0000508644 00000 n 0000088724 00000 n 0000089037 00000 n 0000089193 00000 n @@ -7028,7 +7060,7 @@ xref 0000112788 00000 n 0000108424 00000 n 0000112907 00000 n -0000520939 00000 n +0000521020 00000 n 0000117770 00000 n 0000117343 00000 n 0000113172 00000 n @@ -7043,18 +7075,18 @@ xref 0000124945 00000 n 0000122239 00000 n 0000125064 00000 n -0000498921 00000 n +0000499002 00000 n 0000125657 00000 n 0000126178 00000 n -0000499743 00000 n +0000499824 00000 n 0000126425 00000 n 0000126570 00000 n 0000126593 00000 n -0000499499 00000 n +0000499580 00000 n 0000126832 00000 n -0000499574 00000 n +0000499655 00000 n 0000126993 00000 n -0000499680 00000 n +0000499761 00000 n 0000127601 00000 n 0000127626 00000 n 0000128179 00000 n @@ -7078,117 +7110,117 @@ xref 0000208480 00000 n 0000242209 00000 n 0000242737 00000 n -0000268278 00000 n -0000268598 00000 n -0000283147 00000 n -0000283379 00000 n -0000302354 00000 n -0000302670 00000 n -0000320207 00000 n -0000320486 00000 n -0000344782 00000 n -0000345129 00000 n -0000371111 00000 n -0000371485 00000 n -0000374156 00000 n -0000374439 00000 n -0000400337 00000 n -0000400625 00000 n -0000434339 00000 n -0000434633 00000 n -0000468191 00000 n -0000468838 00000 n -0000498547 00000 n -0000499842 00000 n -0000500956 00000 n -0000502070 00000 n -0000503184 00000 n -0000504298 00000 n -0000505412 00000 n -0000506524 00000 n -0000507639 00000 n -0000508754 00000 n -0000509871 00000 n -0000510988 00000 n -0000512103 00000 n -0000513226 00000 n -0000514341 00000 n -0000515463 00000 n -0000516340 00000 n -0000517408 00000 n -0000518642 00000 n -0000519616 00000 n -0000521040 00000 n -0000521126 00000 n -0000525184 00000 n -0000525364 00000 n -0000525542 00000 n -0000525720 00000 n -0000525894 00000 n -0000526064 00000 n -0000526248 00000 n -0000526471 00000 n -0000526694 00000 n -0000526908 00000 n -0000527126 00000 n -0000527343 00000 n -0000527561 00000 n -0000527777 00000 n -0000527995 00000 n -0000528212 00000 n -0000528430 00000 n -0000528648 00000 n -0000528865 00000 n -0000529082 00000 n -0000529300 00000 n -0000529517 00000 n -0000529733 00000 n -0000529951 00000 n -0000530169 00000 n -0000530387 00000 n -0000530603 00000 n -0000530820 00000 n -0000531033 00000 n -0000531243 00000 n -0000531453 00000 n -0000531663 00000 n -0000531873 00000 n -0000532083 00000 n -0000532293 00000 n -0000532503 00000 n -0000532713 00000 n -0000532902 00000 n -0000533072 00000 n -0000533241 00000 n -0000533403 00000 n -0000533613 00000 n -0000533804 00000 n -0000534001 00000 n -0000534211 00000 n -0000534431 00000 n -0000534653 00000 n -0000534873 00000 n -0000535094 00000 n -0000535204 00000 n -0000535322 00000 n -0000535443 00000 n -0000535564 00000 n -0000535685 00000 n -0000535805 00000 n -0000535924 00000 n -0000536042 00000 n -0000536165 00000 n -0000536254 00000 n -0000536370 00000 n -0000536470 00000 n -0000536559 00000 n -0000536597 00000 n -0000536725 00000 n +0000268359 00000 n +0000268679 00000 n +0000283228 00000 n +0000283460 00000 n +0000302435 00000 n +0000302751 00000 n +0000320288 00000 n +0000320567 00000 n +0000344863 00000 n +0000345210 00000 n +0000371192 00000 n +0000371566 00000 n +0000374237 00000 n +0000374520 00000 n +0000400418 00000 n +0000400706 00000 n +0000434420 00000 n +0000434714 00000 n +0000468272 00000 n +0000468919 00000 n +0000498628 00000 n +0000499923 00000 n +0000501037 00000 n +0000502151 00000 n +0000503265 00000 n +0000504379 00000 n +0000505493 00000 n +0000506605 00000 n +0000507720 00000 n +0000508835 00000 n +0000509952 00000 n +0000511069 00000 n +0000512184 00000 n +0000513307 00000 n +0000514422 00000 n +0000515544 00000 n +0000516421 00000 n +0000517489 00000 n +0000518723 00000 n +0000519697 00000 n +0000521121 00000 n +0000521207 00000 n +0000525265 00000 n +0000525445 00000 n +0000525623 00000 n +0000525801 00000 n +0000525975 00000 n +0000526145 00000 n +0000526329 00000 n +0000526552 00000 n +0000526775 00000 n +0000526989 00000 n +0000527207 00000 n +0000527424 00000 n +0000527642 00000 n +0000527858 00000 n +0000528076 00000 n +0000528293 00000 n +0000528511 00000 n +0000528729 00000 n +0000528946 00000 n +0000529163 00000 n +0000529381 00000 n +0000529598 00000 n +0000529814 00000 n +0000530032 00000 n +0000530250 00000 n +0000530468 00000 n +0000530684 00000 n +0000530901 00000 n +0000531114 00000 n +0000531324 00000 n +0000531534 00000 n +0000531744 00000 n +0000531954 00000 n +0000532164 00000 n +0000532374 00000 n +0000532584 00000 n +0000532794 00000 n +0000532983 00000 n +0000533153 00000 n +0000533322 00000 n +0000533484 00000 n +0000533694 00000 n +0000533885 00000 n +0000534082 00000 n +0000534292 00000 n +0000534512 00000 n +0000534734 00000 n +0000534954 00000 n +0000535175 00000 n +0000535285 00000 n +0000535403 00000 n +0000535524 00000 n +0000535645 00000 n +0000535766 00000 n +0000535886 00000 n +0000536005 00000 n +0000536123 00000 n +0000536246 00000 n +0000536335 00000 n +0000536451 00000 n +0000536551 00000 n +0000536640 00000 n +0000536678 00000 n +0000536806 00000 n trailer << /Size 765 /Root 763 0 R /Info 764 0 R -/ID [ ] >> +/ID [ ] >> startxref -536999 +537080 %%EOF diff --git a/macros/latex/contrib/ufrgscca/doc/ufrgscca.tex b/macros/latex/contrib/ufrgscca/doc/ufrgscca.tex index d02cdeae22..92bfc29788 100644 --- a/macros/latex/contrib/ufrgscca/doc/ufrgscca.tex +++ b/macros/latex/contrib/ufrgscca/doc/ufrgscca.tex @@ -12,7 +12,7 @@ %% %% The Current Maintainer of this work is Alceu Frigeri %% -%% This is version 1.0.7 (2023/01/17) +%% This is version 1.0.8 (2023/01/28) %% %% The list of files that compose this work can be found in the README.md file at %% https://ctan.org/pkg/ufrgscca diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca-abnt.sty b/macros/latex/contrib/ufrgscca/latex/ufrgscca-abnt.sty index 849379e0c9..781161b4a3 100644 --- a/macros/latex/contrib/ufrgscca/latex/ufrgscca-abnt.sty +++ b/macros/latex/contrib/ufrgscca/latex/ufrgscca-abnt.sty @@ -12,7 +12,7 @@ %% %% The Current Maintainer of this work is Alceu Frigeri %% -%% This is version 1.0.7 (2023/01/17) +%% This is version 1.0.8 (2023/01/28) %% %% The list of files that compose this work can be found in the README.md file at %% https://ctan.org/pkg/ufrgscca @@ -26,8 +26,8 @@ \def\tc@tmp@packname{ufrgscca-abnt} \def\tc@tmp@altpackname{ufrgsccaabnt} \def\tc@tmp@packdesc{UFRGS/CCA ABNT layout} -\def\tc@tmp@packdate{2023/01/17} -\def\tc@tmp@packversion{1.0.7} +\def\tc@tmp@packdate{2023/01/28} +\def\tc@tmp@packversion{1.0.8} \let\@exp\expandafter \@exp\edef\csname\tc@tmp@altpackname version\endcsname{\tc@tmp@packversion} \@exp\@exp\@exp\ProvidesPackage\@exp\@exp\@exp{\@exp\tc@tmp@packname\@exp}\@exp[\tc@tmp@packdate\space v\tc@tmp@packversion\space\tc@tmp@packdesc] @@ -276,9 +276,11 @@ \iftcif@relnum% \counterwithin{figure}{chapter}% \counterwithin{table}{chapter}% + \counterwithin{equation}{chapter}% \else% \counterwithout{figure}{chapter}% \counterwithout{table}{chapter}% + \counterwithout{equation}{chapter}% \fi \fi %%% diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca-coord.sty b/macros/latex/contrib/ufrgscca/latex/ufrgscca-coord.sty index 3ed99c18d1..00c8ef8757 100644 --- a/macros/latex/contrib/ufrgscca/latex/ufrgscca-coord.sty +++ b/macros/latex/contrib/ufrgscca/latex/ufrgscca-coord.sty @@ -12,7 +12,7 @@ %% %% The Current Maintainer of this work is Alceu Frigeri %% -%% This is version 1.0.7 (2023/01/17) +%% This is version 1.0.8 (2023/01/28) %% %% The list of files that compose this work can be found in the README.md file at %% https://ctan.org/pkg/ufrgscca @@ -26,8 +26,8 @@ \def\tc@tmp@packname{ufrgscca-coord} \def\tc@tmp@altpackname{ufrgsccacoord} \def\tc@tmp@packdesc{UFRGS/CCA coord commands} -\def\tc@tmp@packdate{2023/01/17} -\def\tc@tmp@packversion{1.0.7} +\def\tc@tmp@packdate{2023/01/28} +\def\tc@tmp@packversion{1.0.8} \let\@exp\expandafter \@exp\edef\csname\tc@tmp@altpackname version\endcsname{\tc@tmp@packversion} \@exp\@exp\@exp\ProvidesPackage\@exp\@exp\@exp{\@exp\tc@tmp@packname\@exp}\@exp[\tc@tmp@packdate\space v\tc@tmp@packversion\space\tc@tmp@packdesc] diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca-core.sty b/macros/latex/contrib/ufrgscca/latex/ufrgscca-core.sty index 8851d12122..7861d226ee 100644 --- a/macros/latex/contrib/ufrgscca/latex/ufrgscca-core.sty +++ b/macros/latex/contrib/ufrgscca/latex/ufrgscca-core.sty @@ -12,7 +12,7 @@ %% %% The Current Maintainer of this work is Alceu Frigeri %% -%% This is version 1.0.7 (2023/01/17) +%% This is version 1.0.8 (2023/01/28) %% %% The list of files that compose this work can be found in the README.md file at %% https://ctan.org/pkg/ufrgscca @@ -26,8 +26,8 @@ \def\tc@tmp@packname{ufrgscca-core} \def\tc@tmp@altpackname{ufrgsccacore} \def\tc@tmp@packdesc{UFRGS/CCA core commands} -\def\tc@tmp@packdate{2023/01/17} -\def\tc@tmp@packversion{1.0.7} +\def\tc@tmp@packdate{2023/01/28} +\def\tc@tmp@packversion{1.0.8} \let\@exp\expandafter \@exp\edef\csname\tc@tmp@altpackname version\endcsname{\tc@tmp@packversion} \@exp\@exp\@exp\ProvidesPackage\@exp\@exp\@exp{\@exp\tc@tmp@packname\@exp}\@exp[\tc@tmp@packdate\space v\tc@tmp@packversion\space\tc@tmp@packdesc] diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca-cover.sty b/macros/latex/contrib/ufrgscca/latex/ufrgscca-cover.sty index ac8cd4a7a3..822925aa7c 100644 --- a/macros/latex/contrib/ufrgscca/latex/ufrgscca-cover.sty +++ b/macros/latex/contrib/ufrgscca/latex/ufrgscca-cover.sty @@ -12,7 +12,7 @@ %% %% The Current Maintainer of this work is Alceu Frigeri %% -%% This is version 1.0.7 (2023/01/17) +%% This is version 1.0.8 (2023/01/28) %% %% The list of files that compose this work can be found in the README.md file at %% https://ctan.org/pkg/ufrgscca @@ -26,8 +26,8 @@ \def\tc@tmp@packname{ufrgscca-cover} \def\tc@tmp@altpackname{ufrgsccacover} \def\tc@tmp@packdesc{UFRGS/CCA cover commands} -\def\tc@tmp@packdate{2023/01/17} -\def\tc@tmp@packversion{1.0.7} +\def\tc@tmp@packdate{2023/01/28} +\def\tc@tmp@packversion{1.0.8} \let\@exp\expandafter \@exp\edef\csname\tc@tmp@altpackname version\endcsname{\tc@tmp@packversion} \@exp\@exp\@exp\ProvidesPackage\@exp\@exp\@exp{\@exp\tc@tmp@packname\@exp}\@exp[\tc@tmp@packdate\space v\tc@tmp@packversion\space\tc@tmp@packdesc] diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca-curr-graph.sty b/macros/latex/contrib/ufrgscca/latex/ufrgscca-curr-graph.sty index d7861c137c..3df0a10119 100644 --- a/macros/latex/contrib/ufrgscca/latex/ufrgscca-curr-graph.sty +++ b/macros/latex/contrib/ufrgscca/latex/ufrgscca-curr-graph.sty @@ -12,7 +12,7 @@ %% %% The Current Maintainer of this work is Alceu Frigeri %% -%% This is version 1.0.7 (2023/01/17) +%% This is version 1.0.8 (2023/01/28) %% %% The list of files that compose this work can be found in the README.md file at %% https://ctan.org/pkg/ufrgscca @@ -26,8 +26,8 @@ \def\tc@tmp@packname{ufrgscca-curr-graph} \def\tc@tmp@altpackname{tccurrgraph} \def\tc@tmp@packdesc{UFRGS/CCA graph curricula commands} -\def\tc@tmp@packdate{2023/01/17} -\def\tc@tmp@packversion{1.0.7alpha} +\def\tc@tmp@packdate{2023/01/28} +\def\tc@tmp@packversion{1.0.8alpha} \let\@exp\expandafter \@exp\edef\csname\tc@tmp@altpackname version\endcsname{\tc@tmp@packversion} \@exp\@exp\@exp\ProvidesPackage\@exp\@exp\@exp{\@exp\tc@tmp@packname\@exp}\@exp[\tc@tmp@packdate\space v\tc@tmp@packversion\space\tc@tmp@packdesc] diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca-curr-tab.sty b/macros/latex/contrib/ufrgscca/latex/ufrgscca-curr-tab.sty index b53d7fa259..f724ae90ff 100644 --- a/macros/latex/contrib/ufrgscca/latex/ufrgscca-curr-tab.sty +++ b/macros/latex/contrib/ufrgscca/latex/ufrgscca-curr-tab.sty @@ -12,7 +12,7 @@ %% %% The Current Maintainer of this work is Alceu Frigeri %% -%% This is version 1.0.7 (2023/01/17) +%% This is version 1.0.8 (2023/01/28) %% %% The list of files that compose this work can be found in the README.md file at %% https://ctan.org/pkg/ufrgscca @@ -26,8 +26,8 @@ \def\tc@tmp@packname{ufrgscca-curr-tab} \def\tc@tmp@altpackname{ufrgsccacurrtab} \def\tc@tmp@packdesc{UFRGS/CCA curricula tabular commands} -\def\tc@tmp@packdate{2023/01/17} -\def\tc@tmp@packversion{1.0.7alpha} +\def\tc@tmp@packdate{2023/01/28} +\def\tc@tmp@packversion{1.0.8alpha} \let\@exp\expandafter \@exp\edef\csname\tc@tmp@altpackname version\endcsname{\tc@tmp@packversion} \@exp\@exp\@exp\ProvidesPackage\@exp\@exp\@exp{\@exp\tc@tmp@packname\@exp}\@exp[\tc@tmp@packdate\space v\tc@tmp@packversion\space\tc@tmp@packdesc] diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca-curr.sty b/macros/latex/contrib/ufrgscca/latex/ufrgscca-curr.sty index 631e66b950..bbd53192c1 100644 --- a/macros/latex/contrib/ufrgscca/latex/ufrgscca-curr.sty +++ b/macros/latex/contrib/ufrgscca/latex/ufrgscca-curr.sty @@ -12,7 +12,7 @@ %% %% The Current Maintainer of this work is Alceu Frigeri %% -%% This is version 1.0.7 (2023/01/17) +%% This is version 1.0.8 (2023/01/28) %% %% The list of files that compose this work can be found in the README.md file at %% https://ctan.org/pkg/ufrgscca @@ -26,8 +26,8 @@ \def\tc@tmp@packname{ufrgscca-curr} \def\tc@tmp@altpackname{ufrgsccacurr} \def\tc@tmp@packdesc{UFRGS/CCA curricula commands} -\def\tc@tmp@packdate{2023/01/17} -\def\tc@tmp@packversion{1.0.7beta} +\def\tc@tmp@packdate{2023/01/28} +\def\tc@tmp@packversion{1.0.8beta} \let\@exp\expandafter \@exp\edef\csname\tc@tmp@altpackname version\endcsname{\tc@tmp@packversion} \@exp\@exp\@exp\ProvidesPackage\@exp\@exp\@exp{\@exp\tc@tmp@packname\@exp}\@exp[\tc@tmp@packdate\space v\tc@tmp@packversion\space\tc@tmp@packdesc] diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca-en-base.def b/macros/latex/contrib/ufrgscca/latex/ufrgscca-en-base.def index b95e6805a7..900715a324 100644 --- a/macros/latex/contrib/ufrgscca/latex/ufrgscca-en-base.def +++ b/macros/latex/contrib/ufrgscca/latex/ufrgscca-en-base.def @@ -12,7 +12,7 @@ %% %% The Current Maintainer of this work is Alceu Frigeri %% -%% This is version 1.0.7 (2023/01/17) +%% This is version 1.0.8 (2023/01/28) %% %% The list of files that compose this work can be found in the README.md file at %% https://ctan.org/pkg/ufrgscca @@ -26,8 +26,8 @@ \def\tc@tmp@packname{ufrgscca-en-base} \def\tc@tmp@altpackname{ufrgsccaenbase} \def\tc@tmp@packdesc{UFRGS/CCA English base defs} -\def\tc@tmp@packdate{2023/01/17} -\def\tc@tmp@packversion{1.0.7} +\def\tc@tmp@packdate{2023/01/28} +\def\tc@tmp@packversion{1.0.8} \let\@exp\expandafter \@exp\edef\csname\tc@tmp@altpackname version\endcsname{\tc@tmp@packversion} diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca-en-coord.def b/macros/latex/contrib/ufrgscca/latex/ufrgscca-en-coord.def index 4f1a1452c1..df4ecbef8c 100644 --- a/macros/latex/contrib/ufrgscca/latex/ufrgscca-en-coord.def +++ b/macros/latex/contrib/ufrgscca/latex/ufrgscca-en-coord.def @@ -12,7 +12,7 @@ %% %% The Current Maintainer of this work is Alceu Frigeri %% -%% This is version 1.0.7 (2023/01/17) +%% This is version 1.0.8 (2023/01/28) %% %% The list of files that compose this work can be found in the README.md file at %% https://ctan.org/pkg/ufrgscca @@ -26,8 +26,8 @@ \def\tc@tmp@packname{ufrgscca-en-coord} \def\tc@tmp@altpackname{ufrgsccaencoord} \def\tc@tmp@packdesc{UFRGS/CCA English coord defs} -\def\tc@tmp@packdate{2023/01/17} -\def\tc@tmp@packversion{1.0.7} +\def\tc@tmp@packdate{2023/01/28} +\def\tc@tmp@packversion{1.0.8} \let\@exp\expandafter \@exp\edef\csname\tc@tmp@altpackname version\endcsname{\tc@tmp@packversion} diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca-en-core.def b/macros/latex/contrib/ufrgscca/latex/ufrgscca-en-core.def index a4eb1e1c2f..821ddb44ad 100644 --- a/macros/latex/contrib/ufrgscca/latex/ufrgscca-en-core.def +++ b/macros/latex/contrib/ufrgscca/latex/ufrgscca-en-core.def @@ -12,7 +12,7 @@ %% %% The Current Maintainer of this work is Alceu Frigeri %% -%% This is version 1.0.7 (2023/01/17) +%% This is version 1.0.8 (2023/01/28) %% %% The list of files that compose this work can be found in the README.md file at %% https://ctan.org/pkg/ufrgscca @@ -26,8 +26,8 @@ \def\tc@tmp@packname{ufrgscca-en-core} \def\tc@tmp@altpackname{ufrgsccaencore} \def\tc@tmp@packdesc{UFRGS/CCA English core defs} -\def\tc@tmp@packdate{2023/01/17} -\def\tc@tmp@packversion{1.0.7} +\def\tc@tmp@packdate{2023/01/28} +\def\tc@tmp@packversion{1.0.8} \let\@exp\expandafter \@exp\edef\csname\tc@tmp@altpackname version\endcsname{\tc@tmp@packversion} diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca-en-forms.def b/macros/latex/contrib/ufrgscca/latex/ufrgscca-en-forms.def index 07037e65a1..5511df38a0 100644 --- a/macros/latex/contrib/ufrgscca/latex/ufrgscca-en-forms.def +++ b/macros/latex/contrib/ufrgscca/latex/ufrgscca-en-forms.def @@ -12,7 +12,7 @@ %% %% The Current Maintainer of this work is Alceu Frigeri %% -%% This is version 1.0.7 (2023/01/17) +%% This is version 1.0.8 (2023/01/28) %% %% The list of files that compose this work can be found in the README.md file at %% https://ctan.org/pkg/ufrgscca @@ -26,8 +26,8 @@ \def\tc@tmp@packname{ufrgscca-en-forms} \def\tc@tmp@altpackname{ufrgsccaenforms} \def\tc@tmp@packdesc{UFRGS/CCA English forms defs} -\def\tc@tmp@packdate{2023/01/17} -\def\tc@tmp@packversion{1.0.7} +\def\tc@tmp@packdate{2023/01/28} +\def\tc@tmp@packversion{1.0.8} \let\@exp\expandafter \@exp\edef\csname\tc@tmp@altpackname version\endcsname{\tc@tmp@packversion} diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca-forms.sty b/macros/latex/contrib/ufrgscca/latex/ufrgscca-forms.sty index f511db2c89..0279da3894 100644 --- a/macros/latex/contrib/ufrgscca/latex/ufrgscca-forms.sty +++ b/macros/latex/contrib/ufrgscca/latex/ufrgscca-forms.sty @@ -12,7 +12,7 @@ %% %% The Current Maintainer of this work is Alceu Frigeri %% -%% This is version 1.0.7 (2023/01/17) +%% This is version 1.0.8 (2023/01/28) %% %% The list of files that compose this work can be found in the README.md file at %% https://ctan.org/pkg/ufrgscca @@ -26,8 +26,8 @@ \def\tc@tmp@packname{ufrgscca-forms} \def\tc@tmp@altpackname{ufrgsccaforms} \def\tc@tmp@packdesc{UFRGS/CCA forms commands} -\def\tc@tmp@packdate{2023/01/17} -\def\tc@tmp@packversion{1.0.7} +\def\tc@tmp@packdate{2023/01/28} +\def\tc@tmp@packversion{1.0.8} \let\@exp\expandafter \@exp\edef\csname\tc@tmp@altpackname version\endcsname{\tc@tmp@packversion} \@exp\@exp\@exp\ProvidesPackage\@exp\@exp\@exp{\@exp\tc@tmp@packname\@exp}\@exp[\tc@tmp@packdate\space v\tc@tmp@packversion\space\tc@tmp@packdesc] diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca-gen.sty b/macros/latex/contrib/ufrgscca/latex/ufrgscca-gen.sty index 365ceea3c3..8853eb05b4 100644 --- a/macros/latex/contrib/ufrgscca/latex/ufrgscca-gen.sty +++ b/macros/latex/contrib/ufrgscca/latex/ufrgscca-gen.sty @@ -12,7 +12,7 @@ %% %% The Current Maintainer of this work is Alceu Frigeri %% -%% This is version 1.0.7 (2023/01/17) +%% This is version 1.0.8 (2023/01/28) %% %% The list of files that compose this work can be found in the README.md file at %% https://ctan.org/pkg/ufrgscca @@ -26,8 +26,8 @@ \def\tc@tmp@packname{ufrgscca-gen} \def\tc@tmp@altpackname{ufrgsccagen} \def\tc@tmp@packdesc{UFRGS/CCA generic/miscellany commands} -\def\tc@tmp@packdate{2023/01/17} -\def\tc@tmp@packversion{1.0.7} +\def\tc@tmp@packdate{2023/01/28} +\def\tc@tmp@packversion{1.0.8} \let\@exp\expandafter \@exp\edef\csname\tc@tmp@altpackname version\endcsname{\tc@tmp@packversion} \@exp\@exp\@exp\ProvidesPackage\@exp\@exp\@exp{\@exp\tc@tmp@packname\@exp}\@exp[\tc@tmp@packdate\space v\tc@tmp@packversion\space\tc@tmp@packdesc] diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca-lists.sty b/macros/latex/contrib/ufrgscca/latex/ufrgscca-lists.sty index e85b553335..d1ede0441d 100644 --- a/macros/latex/contrib/ufrgscca/latex/ufrgscca-lists.sty +++ b/macros/latex/contrib/ufrgscca/latex/ufrgscca-lists.sty @@ -12,7 +12,7 @@ %% %% The Current Maintainer of this work is Alceu Frigeri %% -%% This is version 1.0.7 (2023/01/17) +%% This is version 1.0.8 (2023/01/28) %% %% The list of files that compose this work can be found in the README.md file at %% https://ctan.org/pkg/ufrgscca @@ -26,8 +26,8 @@ \def\tc@tmp@packname{ufrgscca-lists} \def\tc@tmp@altpackname{ufrgsccalists} \def\tc@tmp@packdesc{UFRGS/CCA auxiliary lists commands} -\def\tc@tmp@packdate{2023/01/17} -\def\tc@tmp@packversion{1.0.7} +\def\tc@tmp@packdate{2023/01/28} +\def\tc@tmp@packversion{1.0.8} \let\@exp\expandafter \@exp\edef\csname\tc@tmp@altpackname version\endcsname{\tc@tmp@packversion} \@exp\@exp\@exp\ProvidesPackage\@exp\@exp\@exp{\@exp\tc@tmp@packname\@exp}\@exp[\tc@tmp@packdate\space v\tc@tmp@packversion\space\tc@tmp@packdesc] diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca-ppc.sty b/macros/latex/contrib/ufrgscca/latex/ufrgscca-ppc.sty index 67d38ad08b..6cb73c4d0c 100644 --- a/macros/latex/contrib/ufrgscca/latex/ufrgscca-ppc.sty +++ b/macros/latex/contrib/ufrgscca/latex/ufrgscca-ppc.sty @@ -12,7 +12,7 @@ %% %% The Current Maintainer of this work is Alceu Frigeri %% -%% This is version 1.0.7 (2023/01/17) +%% This is version 1.0.8 (2023/01/28) %% %% The list of files that compose this work can be found in the README.md file at %% https://ctan.org/pkg/ufrgscca @@ -26,8 +26,8 @@ \def\tc@tmp@packname{ufrgscca-ppc} \def\tc@tmp@altpackname{ufrgsccappc} \def\tc@tmp@packdesc{UFRGS/CCA PPC commands} -\def\tc@tmp@packdate{2023/01/17} -\def\tc@tmp@packversion{1.0.7} +\def\tc@tmp@packdate{2023/01/28} +\def\tc@tmp@packversion{1.0.8} \let\@exp\expandafter \@exp\edef\csname\tc@tmp@altpackname version\endcsname{\tc@tmp@packversion} \@exp\@exp\@exp\ProvidesPackage\@exp\@exp\@exp{\@exp\tc@tmp@packname\@exp}\@exp[\tc@tmp@packdate\space v\tc@tmp@packversion\space\tc@tmp@packdesc] diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca-ptBR-base.def b/macros/latex/contrib/ufrgscca/latex/ufrgscca-ptBR-base.def index 393dcf9c99..65911451af 100644 --- a/macros/latex/contrib/ufrgscca/latex/ufrgscca-ptBR-base.def +++ b/macros/latex/contrib/ufrgscca/latex/ufrgscca-ptBR-base.def @@ -12,7 +12,7 @@ %% %% The Current Maintainer of this work is Alceu Frigeri %% -%% This is version 1.0.7 (2023/01/17) +%% This is version 1.0.8 (2023/01/28) %% %% The list of files that compose this work can be found in the README.md file at %% https://ctan.org/pkg/ufrgscca @@ -26,8 +26,8 @@ \def\tc@tmp@packname{ufrgscca-ptBR-base} \def\tc@tmp@altpackname{ufrgsccaptbrbase} \def\tc@tmp@packdesc{UFRGS/CCA Portuguese base defs} -\def\tc@tmp@packdate{2023/01/17} -\def\tc@tmp@packversion{1.0.7} +\def\tc@tmp@packdate{2023/01/28} +\def\tc@tmp@packversion{1.0.8} \let\@exp\expandafter \@exp\edef\csname\tc@tmp@altpackname version\endcsname{\tc@tmp@packversion} diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca-ptBR-coord.def b/macros/latex/contrib/ufrgscca/latex/ufrgscca-ptBR-coord.def index 45e2edb24f..beaa46302b 100644 --- a/macros/latex/contrib/ufrgscca/latex/ufrgscca-ptBR-coord.def +++ b/macros/latex/contrib/ufrgscca/latex/ufrgscca-ptBR-coord.def @@ -12,7 +12,7 @@ %% %% The Current Maintainer of this work is Alceu Frigeri %% -%% This is version 1.0.7 (2023/01/17) +%% This is version 1.0.8 (2023/01/28) %% %% The list of files that compose this work can be found in the README.md file at %% https://ctan.org/pkg/ufrgscca @@ -26,8 +26,8 @@ \def\tc@tmp@packname{ufrgscca-ptBR-coord} \def\tc@tmp@altpackname{ufrgsccaptbrcoord} \def\tc@tmp@packdesc{UFRGS/CCA Portuguese coord defs} -\def\tc@tmp@packdate{2023/01/17} -\def\tc@tmp@packversion{1.0.7} +\def\tc@tmp@packdate{2023/01/28} +\def\tc@tmp@packversion{1.0.8} \let\@exp\expandafter \@exp\edef\csname\tc@tmp@altpackname version\endcsname{\tc@tmp@packversion} diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca-ptBR-core.def b/macros/latex/contrib/ufrgscca/latex/ufrgscca-ptBR-core.def index b99093c89a..74264ac975 100644 --- a/macros/latex/contrib/ufrgscca/latex/ufrgscca-ptBR-core.def +++ b/macros/latex/contrib/ufrgscca/latex/ufrgscca-ptBR-core.def @@ -12,7 +12,7 @@ %% %% The Current Maintainer of this work is Alceu Frigeri %% -%% This is version 1.0.7 (2023/01/17) +%% This is version 1.0.8 (2023/01/28) %% %% The list of files that compose this work can be found in the README.md file at %% https://ctan.org/pkg/ufrgscca @@ -26,8 +26,8 @@ \def\tc@tmp@packname{ufrgscca-ptBR-core} \def\tc@tmp@altpackname{ufrgsccaptbrcore} \def\tc@tmp@packdesc{UFRGS/CCA Portuguese core defs} -\def\tc@tmp@packdate{2023/01/17} -\def\tc@tmp@packversion{1.0.7} +\def\tc@tmp@packdate{2023/01/28} +\def\tc@tmp@packversion{1.0.8} \let\@exp\expandafter \@exp\edef\csname\tc@tmp@altpackname version\endcsname{\tc@tmp@packversion} diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca-ptBR-forms.def b/macros/latex/contrib/ufrgscca/latex/ufrgscca-ptBR-forms.def index f64f5a5956..41e42c8874 100644 --- a/macros/latex/contrib/ufrgscca/latex/ufrgscca-ptBR-forms.def +++ b/macros/latex/contrib/ufrgscca/latex/ufrgscca-ptBR-forms.def @@ -12,7 +12,7 @@ %% %% The Current Maintainer of this work is Alceu Frigeri %% -%% This is version 1.0.7 (2023/01/17) +%% This is version 1.0.8 (2023/01/28) %% %% The list of files that compose this work can be found in the README.md file at %% https://ctan.org/pkg/ufrgscca @@ -26,8 +26,8 @@ \def\tc@tmp@packname{ufrgscca-ptBR-forms} \def\tc@tmp@altpackname{ufrgsccaptbrforms} \def\tc@tmp@packdesc{UFRGS/CCA Portuguese forms defs} -\def\tc@tmp@packdate{2023/01/17} -\def\tc@tmp@packversion{1.0.7} +\def\tc@tmp@packdate{2023/01/28} +\def\tc@tmp@packversion{1.0.8} \let\@exp\expandafter \@exp\edef\csname\tc@tmp@altpackname version\endcsname{\tc@tmp@packversion} diff --git a/macros/latex/contrib/ufrgscca/latex/ufrgscca.cls b/macros/latex/contrib/ufrgscca/latex/ufrgscca.cls index d3d95d7002..7110085826 100644 --- a/macros/latex/contrib/ufrgscca/latex/ufrgscca.cls +++ b/macros/latex/contrib/ufrgscca/latex/ufrgscca.cls @@ -12,7 +12,7 @@ %% %% The Current Maintainer of this work is Alceu Frigeri %% -%% This is version 1.0.7 (2023/01/17) +%% This is version 1.0.8 (2023/01/28) %% %% The list of files that compose this work can be found in the README.md file at %% https://ctan.org/pkg/ufrgscca @@ -26,8 +26,8 @@ \def\tc@tmp@packname{ufrgscca} \def\tc@tmp@altpackname{ufrgscca} \def\tc@tmp@packdesc{UFRGS/CCA class} -\def\tc@tmp@packdate{2023/01/17} -\def\tc@tmp@packversion{1.0.7} +\def\tc@tmp@packdate{2023/01/28} +\def\tc@tmp@packversion{1.0.8} \let\@exp\expandafter \@exp\edef\csname\tc@tmp@altpackname version\endcsname{\tc@tmp@packversion} \@exp\@exp\@exp\ProvidesPackage\@exp\@exp\@exp{\@exp\tc@tmp@packname\@exp}\@exp[\tc@tmp@packdate\space v\tc@tmp@packversion\space\tc@tmp@packdesc] -- cgit v1.2.3