summaryrefslogtreecommitdiff
path: root/macros/latex
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2021-06-06 03:02:43 +0000
committerNorbert Preining <norbert@preining.info>2021-06-06 03:02:43 +0000
commit4338972cc175be565a3441c4ae8a6aa0dfcbe9f9 (patch)
tree9ec52a5d0d9c8a00b1a6801cc82248c0c008465d /macros/latex
parent4e703bdd2f304028698cd4ab92b0dda0b95a95a8 (diff)
CTAN sync 202106060302
Diffstat (limited to 'macros/latex')
-rw-r--r--macros/latex/contrib/bjfuthesis/README.md20
-rw-r--r--macros/latex/contrib/bjfuthesis/bjfuthesis.cls86
-rw-r--r--macros/latex/contrib/bjfuthesis/example/bibliography.bib492
-rw-r--r--macros/latex/contrib/bjfuthesis/example/contents/abstract.tex8
-rw-r--r--macros/latex/contrib/bjfuthesis/example/contents/mainbody.tex72
-rw-r--r--macros/latex/contrib/bjfuthesis/example/cover.pdfbin207622 -> 208783 bytes
-rw-r--r--macros/latex/contrib/bjfuthesis/example/figures/admin-knowledge-graph.pngbin445624 -> 382656 bytes
-rw-r--r--macros/latex/contrib/bjfuthesis/example/figures/admin-movie.pngbin88861 -> 90221 bytes
-rw-r--r--macros/latex/contrib/bjfuthesis/example/figures/admin-navigation.pngbin180215 -> 293686 bytes
-rw-r--r--macros/latex/contrib/bjfuthesis/example/figures/anonymous-category.pngbin716372 -> 717008 bytes
-rw-r--r--macros/latex/contrib/bjfuthesis/example/figures/anonymous-details.pngbin545274 -> 545702 bytes
-rw-r--r--macros/latex/contrib/bjfuthesis/example/figures/anonymous-index.pngbin762316 -> 718715 bytes
-rw-r--r--macros/latex/contrib/bjfuthesis/example/figures/anonymous-search.pngbin515568 -> 487115 bytes
-rw-r--r--macros/latex/contrib/bjfuthesis/example/figures/general-details.pngbin503309 -> 508974 bytes
-rw-r--r--macros/latex/contrib/bjfuthesis/example/thesis.pdfbin4808696 -> 4830593 bytes
-rw-r--r--macros/latex/contrib/bmstu-iu8/LICENSE21
-rw-r--r--macros/latex/contrib/bmstu-iu8/README.md12
-rw-r--r--macros/latex/contrib/bmstu-iu8/bmstu-example.pdfbin0 -> 177037 bytes
-rw-r--r--macros/latex/contrib/bmstu-iu8/bmstu-example.tex (renamed from macros/latex/contrib/bmstu-iu8/example.tex)0
-rw-r--r--macros/latex/contrib/bmstu-iu8/bmstu-iu8/BMSTU-IU8.cls (renamed from macros/latex/contrib/bmstu-iu8/BMSTU-IU8.cls)3
-rw-r--r--macros/latex/contrib/bmstu-iu8/bmstu-iu8/inc/bmstu.png (renamed from macros/latex/contrib/bmstu-iu8/inc/bmstu.png)bin53203 -> 53203 bytes
-rw-r--r--macros/latex/contrib/bmstu-iu8/bmstu-iu8/styles/01-IU8-base.sty (renamed from macros/latex/contrib/bmstu-iu8/styles/01-IU8-base.sty)3
-rw-r--r--macros/latex/contrib/bmstu-iu8/bmstu-iu8/styles/02-IU8-construction.sty (renamed from macros/latex/contrib/bmstu-iu8/styles/02-IU8-construction.sty)2
-rw-r--r--macros/latex/contrib/bmstu-iu8/bmstu-iu8/styles/03-IU8-numbering.sty (renamed from macros/latex/contrib/bmstu-iu8/styles/03-IU8-numbering.sty)2
-rw-r--r--macros/latex/contrib/bmstu-iu8/bmstu-iu8/styles/04-IU8-section-numbering.sty (renamed from macros/latex/contrib/bmstu-iu8/styles/04-IU8-section-numbering.sty)2
-rw-r--r--macros/latex/contrib/bmstu-iu8/bmstu-iu8/styles/05-IU8-figures.sty (renamed from macros/latex/contrib/bmstu-iu8/styles/05-IU8-figures.sty)2
-rw-r--r--macros/latex/contrib/bmstu-iu8/bmstu-iu8/styles/06-IU8-tables.sty (renamed from macros/latex/contrib/bmstu-iu8/styles/06-IU8-tables.sty)2
-rw-r--r--macros/latex/contrib/bmstu-iu8/bmstu-iu8/styles/07-IU8-footnotes.sty (renamed from macros/latex/contrib/bmstu-iu8/styles/07-IU8-footnotes.sty)2
-rw-r--r--macros/latex/contrib/bmstu-iu8/bmstu-iu8/styles/08-IU8-formulas.sty (renamed from macros/latex/contrib/bmstu-iu8/styles/08-IU8-formulas.sty)2
-rw-r--r--macros/latex/contrib/bmstu-iu8/bmstu-iu8/styles/09-IU8-cites.sty (renamed from macros/latex/contrib/bmstu-iu8/styles/09-IU8-cites.sty)2
-rw-r--r--macros/latex/contrib/bmstu-iu8/bmstu-iu8/styles/10-IU8-titlepage.sty (renamed from macros/latex/contrib/bmstu-iu8/styles/10-IU8-titlepage.sty)2
-rw-r--r--macros/latex/contrib/bmstu-iu8/bmstu-iu8/styles/11-IU8-performers.sty5
-rw-r--r--macros/latex/contrib/bmstu-iu8/bmstu-iu8/styles/12-IU8-abstract.sty (renamed from macros/latex/contrib/bmstu-iu8/styles/12-IU8-abstract.sty)4
-rw-r--r--macros/latex/contrib/bmstu-iu8/bmstu-iu8/styles/13-IU8-contents.sty (renamed from macros/latex/contrib/bmstu-iu8/styles/13-IU8-contents.sty)2
-rw-r--r--macros/latex/contrib/bmstu-iu8/bmstu-iu8/styles/14-IU8-terms-and-definitions.sty (renamed from macros/latex/contrib/bmstu-iu8/styles/14-IU8-terms-and-definitions.sty)11
-rw-r--r--macros/latex/contrib/bmstu-iu8/bmstu-iu8/styles/15-IU8-list-of-abbreviations.sty (renamed from macros/latex/contrib/bmstu-iu8/styles/15-IU8-list-of-abbreviations.sty)2
-rw-r--r--macros/latex/contrib/bmstu-iu8/bmstu-iu8/styles/16-IU8-references.sty (renamed from macros/latex/contrib/bmstu-iu8/styles/16-IU8-references.sty)13
-rw-r--r--macros/latex/contrib/bmstu-iu8/bmstu-iu8/styles/17-IU8-appendices.sty (renamed from macros/latex/contrib/bmstu-iu8/styles/17-IU8-appendices.sty)8
-rw-r--r--macros/latex/contrib/bmstu-iu8/bmstu-iu8/styles/18-IU8-extra.sty (renamed from macros/latex/contrib/bmstu-iu8/styles/18-IU8-extra.sty)4
-rw-r--r--macros/latex/contrib/bmstu-iu8/bmstu-iu8/styles/19-IU8-counters.sty (renamed from macros/latex/contrib/bmstu-iu8/styles/19-IU8-counters.sty)2
-rw-r--r--macros/latex/contrib/bmstu-iu8/bmstu-iu8/styles/20-IU8-listing.sty38
-rw-r--r--macros/latex/contrib/bmstu-iu8/bmstu-iu8/styles/21-IU8-math.sty (renamed from macros/latex/contrib/bmstu-iu8/styles/21-IU8-math.sty)2
-rw-r--r--macros/latex/contrib/bmstu-iu8/bmstu-iu8/styles/22-IU8-algorithms.sty (renamed from macros/latex/contrib/bmstu-iu8/styles/22-IU8-algorithms.sty)2
-rw-r--r--macros/latex/contrib/bmstu-iu8/example.pdfbin192899 -> 0 bytes
-rw-r--r--macros/latex/contrib/bmstu-iu8/styles/11-IU8-performers.sty5
-rw-r--r--macros/latex/contrib/bmstu-iu8/styles/20-IU8-listing.sty43
-rw-r--r--macros/latex/contrib/easybook/easybook.dtx103
-rw-r--r--macros/latex/contrib/easybook/easybook.pdfbin315303 -> 315305 bytes
-rw-r--r--macros/latex/contrib/eq-pin2corr/README.md11
-rw-r--r--macros/latex/contrib/eq-pin2corr/doc/eq-pin2corr.pdfbin256673 -> 101085 bytes
-rw-r--r--macros/latex/contrib/eq-pin2corr/doc/eqpin2corrman.pdfbin245015 -> 426168 bytes
-rw-r--r--macros/latex/contrib/eq-pin2corr/doc/eqpin2corrman.tex376
-rw-r--r--macros/latex/contrib/eq-pin2corr/eq-pin2corr.dtx328
-rw-r--r--macros/latex/contrib/eq-pin2corr/examples/get-hash-string.pdfbin83433 -> 78863 bytes
-rw-r--r--macros/latex/contrib/eq-pin2corr/examples/get-hash-string.tex18
-rw-r--r--macros/latex/contrib/eq-pin2corr/examples/qz-p2c.pdfbin0 -> 141525 bytes
-rw-r--r--macros/latex/contrib/eq-pin2corr/examples/qz-p2c.tex (renamed from macros/latex/contrib/eq-pin2corr/examples/qz-pin-to-correct.tex)6
-rw-r--r--macros/latex/contrib/eq-pin2corr/examples/qz-pin-to-correct.pdfbin171609 -> 0 bytes
-rw-r--r--macros/latex/contrib/hyperref/ChangeLog.txt7
-rw-r--r--macros/latex/contrib/hyperref/README.md2
-rw-r--r--macros/latex/contrib/hyperref/doc/backref.pdfbin198815 -> 198815 bytes
-rw-r--r--macros/latex/contrib/hyperref/doc/hyperref-doc.html1808
-rw-r--r--macros/latex/contrib/hyperref/doc/hyperref-doc.pdfbin298211 -> 298609 bytes
-rw-r--r--macros/latex/contrib/hyperref/doc/hyperref-doc.tex4
-rw-r--r--macros/latex/contrib/hyperref/doc/hyperref.pdfbin2426117 -> 2427494 bytes
-rw-r--r--macros/latex/contrib/hyperref/doc/nameref.pdfbin188802 -> 188802 bytes
-rw-r--r--macros/latex/contrib/hyperref/hluatex.dtx4
-rw-r--r--macros/latex/contrib/hyperref/hyperref.dtx12
-rw-r--r--macros/latex/contrib/hyperref/xr-hyper.sty2
-rw-r--r--macros/latex/contrib/nicematrix/nicematrix-french.pdfbin462481 -> 462567 bytes
-rw-r--r--macros/latex/contrib/nicematrix/nicematrix-french.tex2
-rw-r--r--macros/latex/contrib/nicematrix/nicematrix.dtx229
-rw-r--r--macros/latex/contrib/nicematrix/nicematrix.pdfbin1248363 -> 1305091 bytes
-rw-r--r--macros/latex/contrib/profcollege/doc/ProfCollege-doc.pdfbin2781147 -> 2784308 bytes
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCEquationComposition2.tex157
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCEquationLaurent1.tex144
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCEquationPose1.tex152
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCEquationSoustraction2.tex164
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCEquationSymbole1.tex89
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCEquationTerme1.tex201
-rw-r--r--macros/latex/contrib/profcollege/latex/ProfCollege.sty1132
-rw-r--r--macros/latex/contrib/suftesi/suftesi.dtx109
-rw-r--r--macros/latex/contrib/suftesi/suftesi.pdfbin837570 -> 847077 bytes
-rw-r--r--macros/latex/contrib/tabularray/tabularray-2021.sty4218
-rw-r--r--macros/latex/contrib/tabularray/tabularray.pdfbin399433 -> 426537 bytes
-rw-r--r--macros/latex/contrib/tabularray/tabularray.sty955
-rw-r--r--macros/latex/contrib/tabularray/tabularray.tex36
-rw-r--r--macros/latex/required/firstaid/changes.txt7
-rw-r--r--macros/latex/required/firstaid/firstaid.ins13
-rw-r--r--macros/latex/required/firstaid/latex2e-first-aid-for-external-files.dtx127
-rw-r--r--macros/latex/required/firstaid/latex2e-first-aid-for-external-files.pdfbin205202 -> 228448 bytes
91 files changed, 8741 insertions, 2551 deletions
diff --git a/macros/latex/contrib/bjfuthesis/README.md b/macros/latex/contrib/bjfuthesis/README.md
index fa2538417a..a05d7929a8 100644
--- a/macros/latex/contrib/bjfuthesis/README.md
+++ b/macros/latex/contrib/bjfuthesis/README.md
@@ -1,10 +1,12 @@
# 北京林业大学 (BJFU) 毕业论文模板 (LaTeX)
Copyright (C) 2021 Liu Changxin
-Version 1.0.1 (2021-06-03)
+Version 1.0.2 (2021-06-05)
## Abstract
-The bjfuthesis class is a LaTeX document class intended for students in Beijing Forestry University (BJFU) to write their theses. It follows the thesis specification of Beijing Forestry University.
+This is a class file for producing dissertations and theses according to the Beijing Forestry University (BJFU) Guidelines for Undergraduate Theses and Dissertations.
+
+The class should meet all current requirements and is updated whenever the university guidelines change.
## 简介
bjfuthesis是北京林业大学 (BJFU) 毕业生撰写毕业论文使用的LaTeX模板。使用该模板可以快速编写出符合论文格式要求的论文。该模板精心编写,具有使用简单、便捷、可靠的优点。
@@ -12,16 +14,10 @@ bjfuthesis是北京林业大学 (BJFU) 毕业生撰写毕业论文使用的LaTeX
## 使用方法
1. 下载并安装MiKTeX:https://miktex.org/download
1. 下载并安装Perl:macOS与Linux操作系统已内置Perl,无需安装。使用Windows的用户需下载并安装:https://strawberryperl.com
-1. 下载并安装TeXstudio:https://www.texstudio.org
-1. 配置TeXstudio:
- 1. 点击 Options -> Configure TeXstudio 以打开设置界面
- 1. 在 General -> Language 中选择 zh_CN (Chinese) 将界面设为中文
- 1. 点击 OK 使设置生效
- 1. 再次打开设置
- 1. 勾选左下角的 显示高级选项
- 1. 在 构建 -> 默认编译器 中输入值 txs:///latexmk -xelatex
- 1. 点击绿色三角形的构建按钮(有两个构建按钮,左侧的是构建并查看,右侧的是仅构建。请根据需要自行选择)
- 1. 当底部的消息栏中显示完成时,你应该便可以看到生成的PDF文件了
+1. 下载并安装LyX:https://www.lyx.org/Download
+1. 配置LyX:
+ 1. 点击 文件 -> 打开 以
+ 1. 在工具栏中
## Contribute
You can contribute to the template in
diff --git a/macros/latex/contrib/bjfuthesis/bjfuthesis.cls b/macros/latex/contrib/bjfuthesis/bjfuthesis.cls
index ed02764f98..ef1690a7b2 100644
--- a/macros/latex/contrib/bjfuthesis/bjfuthesis.cls
+++ b/macros/latex/contrib/bjfuthesis/bjfuthesis.cls
@@ -23,7 +23,7 @@
\def\keywords@label@zh{关键词:}
\def\keywords@label@en{Keywords: }
\def\chartnote@label{注:}
-\ProvidesClass{bjfuthesis}[2021/05/30 LaTeX document style for BJFU thesis]
+\ProvidesClass{bjfuthesis}[2021/06/05 A thesis class for Beijing Forestry University]
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{ctexbook}}
\ProcessOptions*
\LoadClass[a4paper,oneside,fontset=none]{ctexbook}
@@ -69,6 +69,8 @@
\renewcommand\headrulewidth{.5pt}
\fancypagestyle{plain}{\fancyhead[C]{\fontsize{9}{12}\selectfont\header@text}\renewcommand\headrulewidth{.5pt}}
\renewcommand\floatpagefraction{1}
+\RequirePackage[style=gb7714-2015]{biblatex}
+\addbibresource{bibliography.bib}
\RequirePackage{titlesec}
\titleformat{\chapter}{\centering\fontsize{16}{30}\bfseries}{\thechapter}{.5em}{}
\titleformat{\section}{\fontsize{14}{37}\bfseries}{\thesection}{.5em}{}
@@ -82,12 +84,88 @@
\titlecontents{chapter}[0em]{\fontsize{10.5}{21}\bfseries}{\thecontentslabel~}{\thecontentslabel}{\hspace{.5em}\titlerule*{.}\contentspage}
\titlecontents{section}[1em]{\fontsize{10.5}{21}}{\thecontentslabel~}{\thecontentslabel}{\hspace{.5em}\titlerule*{.}\contentspage}
\titlecontents{subsection}[2em]{\fontsize{10.5}{21}}{\thecontentslabel~}{\thecontentslabel}{\hspace{.5em}\titlerule*{.}\contentspage}
-\RequirePackage[hidelinks]{hyperref}
-\RequirePackage[gbpub=false,style=gb7714-2015]{biblatex}
-\addbibresource{bibliography.bib}
\renewcommand\topfraction{1}
\renewcommand\bottomfraction{1}
\renewcommand\textfraction{0}
+\RequirePackage{xpatch}
+\RequirePackage[hidelinks]{hyperref}
+
+\letbibmacro{oldtitle}{title}
+\renewbibmacro*{title}{%
+\ifentrytype{inproceedings}{
+ \ifboolexpr{
+ test {\iffieldundef{title}}
+ and
+ test {\iffieldundef{subtitle}}
+ }
+ {}
+ \printtext[title]{%
+ \printfield[titlecase]{title}}}{\usebibmacro{oldtitle}}}
+\letbibmacro{oldbooktitle}{booktitle}
+\renewbibmacro*{booktitle}{%
+\ifentrytype{inproceedings}{
+ \ifboolexpr{
+ test {\iffieldundef{booktitle}}
+ and
+ test {\iffieldundef{booksubtitle}}
+ }
+ {}
+ {\printtext[booktitle]{\bibtitlefont%
+ \printfield[titlecase]{booktitle}\printtext{[C]}%
+ \setunit{\subtitlepunct}%
+ \printfield[titlecase]{booksubtitle}}%
+ \newunit%标点换成下一句
+ \setunit{\subtitlepunct}}%
+ \printfield{booktitleaddon}}{\usebibmacro{oldbooktitle}}}
+\DeclareBibliographyDriver{inproceedings}{%
+ \usebibmacro{bibindex}%
+ \usebibmacro{begentry}%
+ \usebibmacro{author/translator+others}%
+ \setunit{\printdelim{nametitledelim}}\newblock
+ \usebibmacro{title}\printtext{[A]}
+ \unspace
+% \nobreak
+% \setunit{[A]}
+ \usebibmacro{in:}%
+ \usebibmacro{editor}%
+ \newunit\newblock
+ \usebibmacro{maintitle+booktitle}%%
+ \newunit\newblock
+ \usebibmacro{event+venue+date}%
+ \newunit\newblock
+% \iffieldundef{maintitle}
+ % {\printfield{volume}%
+ % \printfield{part}}
+ % {}%
+ \newunit
+ \printfield{volumes}%
+ \newunit\newblock
+ \usebibmacro{series+number}%
+ \newunit\newblock
+ \printfield{note}%
+ \newunit\newblock
+ \printlist{organization}%
+ \newunit
+ \usebibmacro{publisher+location+date}%
+ \newunit\newblock
+ \usebibmacro{chapter+pages}%
+ \newunit\newblock
+ \iftoggle{bbx:isbn}
+ {\printfield{isbn}}
+ {}%
+ \newunit\newblock
+ \usebibmacro{doi+eprint+url}%
+ \newunit\newblock
+ \usebibmacro{addendum+pubstate}%
+ \setunit{\bibpagerefpunct}\newblock
+ \usebibmacro{pageref}%
+ \newunit\newblock
+ \iftoggle{bbx:related}
+ {\usebibmacro{related:init}%
+ \usebibmacro{related}}
+ {}%
+ \usebibmacro{finentry}}
+
\newenvironment{abstract}{\kaiti}{\vskip \baselinestretch\baselineskip\par}
\newcommand\keywordscn[1]{\noindent\fontsize{12}{21}\selectfont\textbf{\keywords@label@zh}#1\par}
\newcommand\keywordsen[1]{\noindent\fontsize{12}{21}\selectfont\textbf{\keywords@label@en}#1\par}
diff --git a/macros/latex/contrib/bjfuthesis/example/bibliography.bib b/macros/latex/contrib/bjfuthesis/example/bibliography.bib
index ad383a0c4e..58cb349066 100644
--- a/macros/latex/contrib/bjfuthesis/example/bibliography.bib
+++ b/macros/latex/contrib/bjfuthesis/example/bibliography.bib
@@ -1,317 +1,367 @@
-@article{su2009survey,
- title={A survey of collaborative filtering techniques},
- author={Su, Xiaoyuan and Khoshgoftaar, Taghi M},
- journal={Advances in artificial intelligence},
- volume={2009},
- year={2009},
- publisher={Hindawi}
+@inproceedings{he2017neural,
+ title = {Neural collaborative filtering},
+ author = {He, Xiangnan and Liao, Lizi and Zhang, Hanwang and Nie, Liqiang and Hu, Xia and Chua, Tat-Seng},
+ booktitle = {Proceedings of the 26th international conference on world wide web},
+ pages = {173--182},
+ year = {2017},
+ editor = {Rick Barrett},
+ publisher = {Association for Computing Machinery},
+ location = {New York City}
}
@article{sun2017collaborative,
- title={Collaborative intent prediction with real-time contextual data},
- author={Sun, Yu and Yuan, Nicholas Jing and Xie, Xing and McDonald, Kieran and Zhang, Rui},
- journal={ACM Transactions on Information Systems (TOIS)},
- volume={35},
- number={4},
- pages={1--33},
- year={2017},
- publisher={ACM New York, NY, USA}
+ title = {Collaborative intent prediction with real-time contextual data},
+ author = {Sun, Yu and Yuan, Nicholas Jing and Xie, Xing and McDonald, Kieran and Zhang, Rui},
+ journal = {ACM Transactions on Information Systems (TOIS)},
+ volume = {35},
+ number = {4},
+ pages = {1--33},
+ year = {2017},
+ publisher = {ACM New York, NY, USA}
}
@inproceedings{zou2020survey,
- title={A survey on application of knowledge graph},
- author={Zou, Xiaohan},
- booktitle={Journal of Physics: Conference Series},
- volume={1487},
- number={1},
- pages={012016},
- year={2020},
- organization={IOP Publishing}
-}
-
-@misc{karlgren1990algebra,
- title={An algebra for recommendations: Using reader data as a basis for measuring document proximity},
- author={Karlgren, Jussi},
- year={1990},
- publisher={Department of Computer and Systems Sciences, Stockholm University}
-}
-
-@book{karlgren1994newsgroup,
- title={Newsgroup clustering based on user behavior-a recommendation algebra},
- author={Karlgren, Jussi},
- year={1994},
- publisher={Swedish Institute of Computer Science}
+ title = {A survey on application of knowledge graph},
+ author = {Zou, Xiaohan},
+ booktitle = {Journal of Physics: Conference Series},
+ volume = {1487},
+ number = {1},
+ pages = {12--16},
+ year = {2020},
+ publisher = {IOP Publishing},
+ location = {Bristol},
+ editor = {JPCS}
}
@article{jafarkarimi2012naive,
- title={A naive recommendation model for large databases},
- author={Jafarkarimi, Hosein and Sim, Alex Tze Hiang and Saadatdoost, Robab},
- journal={International Journal of Information and Education Technology},
- volume={2},
- number={3},
- pages={216},
- year={2012},
- publisher={IACSIT Press}
+ title = {A naive recommendation model for large databases},
+ author = {Jafarkarimi, Hosein and Sim, Alex Tze Hiang and Saadatdoost, Robab},
+ journal = {International Journal of Information and Education Technology},
+ volume = {2},
+ number = {3},
+ pages = {216--219},
+ year = {2012},
+ publisher = {IACSIT Press}
}
@article{singhal2012introducing,
- title={Introducing the knowledge graph: things, not strings},
- author={Singhal, Amit},
- journal={Official google blog},
- volume={5},
- pages={16},
- year={2012}
+ title = {Introducing the knowledge graph: things, not strings},
+ author = {Singhal, Amit},
+ journal = {Official google blog},
+ volume = {5},
+ pages = {1--16},
+ year = {2012}
}
@inproceedings{bordes2013translating,
- title={Translating embeddings for modeling multi-relational data},
- author={Bordes, Antoine and Usunier, Nicolas and Garcia-Duran, Alberto and Weston, Jason and Yakhnenko, Oksana},
- booktitle={Neural Information Processing Systems (NIPS)},
- pages={1--9},
- year={2013}
+ title = {Translating embeddings for modeling multi-relational data},
+ author = {Bordes, Antoine and Usunier, Nicolas and Garcia-Duran, Alberto and Weston, Jason and Yakhnenko, Oksana},
+ booktitle = {Neural Information Processing Systems (NIPS)},
+ pages = {1--9},
+ year = {2013},
+ location = {Lake Tahoe},
+ publisher = {Curran},
+ editor = { Burges, C}
}
@inproceedings{wang2014knowledge,
- title={Knowledge graph embedding by translating on hyperplanes},
- author={Wang, Zhen and Zhang, Jianwen and Feng, Jianlin and Chen, Zheng},
- booktitle={Proceedings of the AAAI Conference on Artificial Intelligence},
- volume={28},
- number={1},
- year={2014}
-}
-
-@inproceedings{lin2015learning,
- title={Learning entity and relation embeddings for knowledge graph completion},
- author={Lin, Yankai and Liu, Zhiyuan and Sun, Maosong and Liu, Yang and Zhu, Xuan},
- booktitle={Proceedings of the AAAI Conference on Artificial Intelligence},
- volume={29},
- number={1},
- year={2015}
+ title = {Knowledge graph embedding by translating on hyperplanes},
+ author = {Wang, Zhen and Zhang, Jianwen and Feng, Jianlin and Chen, Zheng},
+ booktitle = {Proceedings of the Twenty-Eighth AAAI Conference on Artificial Intelligence},
+ pages = {1112--1119},
+ volume = {28},
+ number = {1},
+ year = {2014},
+ publisher = {AAAI Press},
+ editor = {AAAI},
+ location = {Menlo Park}
+}
+
+@article{lin2017learning,
+ title = {Learning Entity and Relation Embeddings for Knowledge Resolution},
+ author = {Lin, Hailun and Liu, Yong and Wang, Weiping and Yue, Yinliang and Lin, Zheng},
+ journal = {Procedia Computer Science},
+ volume = {108},
+ pages = {345--354},
+ year = {2017},
+ publisher = {Elsevier}
}
@article{yang2014embedding,
- title={Embedding entities and relations for learning and inference in knowledge bases},
- author={Yang, Bishan and Yih, Wen-tau and He, Xiaodong and Gao, Jianfeng and Deng, Li},
- journal={arXiv preprint arXiv:1412.6575},
- year={2014}
+ title = {Embedding Entities and Relations for Learning and Inference in Knowledge Bases},
+ author = {Yang, Bishan and Yih, Wen-tau and He, Xiaodong and Gao, Jianfeng and Deng, Li},
+ journal = {arXiv e-prints},
+ pages = {1412--1423},
+ year = {2014}
}
@article{lin2015modeling,
- title={Modeling relation paths for representation learning of knowledge bases},
- author={Lin, Yankai and Liu, Zhiyuan and Luan, Huanbo and Sun, Maosong and Rao, Siwei and Liu, Song},
- journal={arXiv preprint arXiv:1506.00379},
- year={2015}
+ title = {Modeling Relation Paths for Representation Learning of Knowledge Bases},
+ author = {Lin, Yankai and Liu, Zhiyuan and Luan, Huanbo and Sun, Maosong and Rao, Siwei and Liu, Song},
+ journal = {arXiv e-prints},
+ pages = {1506--1515},
+ year = {2015}
}
-@article{guu2015traversing,
- title={Traversing knowledge graphs in vector space},
- author={Guu, Kelvin and Miller, John and Liang, Percy},
- journal={arXiv preprint arXiv:1506.01094},
- year={2015}
+@inproceedings{guu2015traversing,
+ title = {Traversing Knowledge Graphs in Vector Space},
+ author = {Guu, Kelvin and Miller, John and Liang, Percy},
+ booktitle = {Proceedings of the 2015 Conference on Empirical Methods in Natural Language Processing},
+ pages = {318--327},
+ year = {2015},
+ publisher = {Association for Computational Linguistics},
+ location = {Lisbon},
+ editor = {Lluís Màrquez, Chris Callison-Burch, Jian Su}
}
@inproceedings{toutanova2016compositional,
- title={Compositional learning of embeddings for relation paths in knowledge base and text},
- author={Toutanova, Kristina and Lin, Xi Victoria and Yih, Wen-tau and Poon, Hoifung and Quirk, Chris},
- booktitle={Proceedings of the 54th Annual Meeting of the Association for Computational Linguistics (Volume 1: Long Papers)},
- pages={1434--1444},
- year={2016}
+ title = {Compositional learning of embeddings for relation paths in knowledge base and text},
+ author = {Toutanova, Kristina and Lin, Xi Victoria and Yih, Wen-tau and Poon, Hoifung and Quirk, Chris},
+ booktitle = {Proceedings of the 54th Annual Meeting of the Association for Computational Linguistics (Volume 1: Long Papers)},
+ pages = {1434--1444},
+ year = {2016},
+ location = {Berlin},
+ editor = {Katrin Erk},
+ publisher = {Association for Computational Linguistics}
}
@book{fielding2000architectural,
- title={Architectural styles and the design of network-based software architectures},
- author={Fielding, Roy T},
- volume={7},
- year={2000},
- publisher={University of California, Irvine Irvine}
+ title = {Architectural styles and the design of network-based software architectures},
+ author = {Fielding, Roy T},
+ volume = {7},
+ year = {2000},
+ publisher = {University of California, Irvine Irvine},
+ pages = {1--4},
+ location = {Berkeley},
}
@inproceedings{koren2008factorization,
- title={Factorization meets the neighborhood: a multifaceted collaborative filtering model},
- author={Koren, Yehuda},
- booktitle={Proceedings of the 14th ACM SIGKDD international conference on Knowledge discovery and data mining},
- pages={426--434},
- year={2008}
+ title = {Factorization meets the neighborhood: a multifaceted collaborative filtering model},
+ author = {Koren, Yehuda},
+ booktitle = {Proceedings of the 14th ACM SIGKDD international conference on Knowledge discovery and data mining},
+ pages = {426--434},
+ year = {2008},
+ publisher = {Association for Computing Machinery},
+ editor = {Ying Li},
+ location = {New York}
}
@inproceedings{wang2018shine,
- title={Shine: Signed heterogeneous information network embedding for sentiment link prediction},
- author={Wang, Hongwei and Zhang, Fuzheng and Hou, Min and Xie, Xing and Guo, Minyi and Liu, Qi},
- booktitle={Proceedings of the Eleventh ACM International Conference on Web Search and Data Mining},
- pages={592--600},
- year={2018}
+ title = {Shine: Signed heterogeneous information network embedding for sentiment link prediction},
+ author = {Wang, Hongwei and Zhang, Fuzheng and Hou, Min and Xie, Xing and Guo, Minyi and Liu, Qi},
+ booktitle = {Proceedings of the Eleventh ACM International Conference on Web Search and Data Mining},
+ pages = {592--600},
+ year = {2018},
+ publisher = {Association for Computing Machinery},
+ editor = {Yi Chang},
+ location = {New York}
}
@inproceedings{wang2018dkn,
- title={DKN: Deep knowledge-aware network for news recommendation},
- author={Wang, Hongwei and Zhang, Fuzheng and Xie, Xing and Guo, Minyi},
- booktitle={Proceedings of the 2018 world wide web conference},
- pages={1835--1844},
- year={2018}
+ title = {DKN: Deep knowledge-aware network for news recommendation},
+ author = {Wang, Hongwei and Zhang, Fuzheng and Xie, Xing and Guo, Minyi},
+ booktitle = {Proceedings of the 2018 world wide web conference},
+ pages = {1835--1844},
+ year = {2018},
+ publisher = {
+International World Wide Web Conferences Steering Committee},
+ location = {Republic and Canton of Geneva},
+ editor = {Pierre-Antoine Champin}
}
@article{sun2017collaborative,
- title={Collaborative intent prediction with real-time contextual data},
- author={Sun, Yu and Yuan, Nicholas Jing and Xie, Xing and McDonald, Kieran and Zhang, Rui},
- journal={ACM Transactions on Information Systems (TOIS)},
- volume={35},
- number={4},
- pages={1--33},
- year={2017},
- publisher={ACM New York, NY, USA}
+ title = {Collaborative intent prediction with real-time contextual data},
+ author = {Sun, Yu and Yuan, Nicholas Jing and Xie, Xing and McDonald, Kieran and Zhang, Rui},
+ journal = {ACM Transactions on Information Systems (TOIS)},
+ volume = {35},
+ number = {4},
+ pages = {1--33},
+ year = {2017},
+ publisher = {ACM New York, NY, USA}
}
@inproceedings{zhang2016collaborative,
- title={Collaborative knowledge base embedding for recommender systems},
- author={Zhang, Fuzheng and Yuan, Nicholas Jing and Lian, Defu and Xie, Xing and Ma, Wei-Ying},
- booktitle={Proceedings of the 22nd ACM SIGKDD international conference on knowledge discovery and data mining},
- pages={353--362},
- year={2016}
+ title = {Collaborative knowledge base embedding for recommender systems},
+ author = {Zhang, Fuzheng and Yuan, Nicholas Jing and Lian, Defu and Xie, Xing and Ma, Wei-Ying},
+ booktitle = {Proceedings of the 22nd ACM SIGKDD international conference on knowledge discovery and data mining},
+ pages = {353--362},
+ year = {2016},
+ editor = {Balaji Krishnapuram},
+ location = {New York},
+ publisher = {Association for Computing Machinery}
}
@inproceedings{wang2018shine,
- title={Shine: Signed heterogeneous information network embedding for sentiment link prediction},
- author={Wang, Hongwei and Zhang, Fuzheng and Hou, Min and Xie, Xing and Guo, Minyi and Liu, Qi},
- booktitle={Proceedings of the Eleventh ACM International Conference on Web Search and Data Mining},
- pages={592--600},
- year={2018}
+ title = {Shine: Signed heterogeneous information network embedding for sentiment link prediction},
+ author = {Wang, Hongwei and Zhang, Fuzheng and Hou, Min and Xie, Xing and Guo, Minyi and Liu, Qi},
+ booktitle = {Proceedings of the Eleventh ACM International Conference on Web Search and Data Mining},
+ pages = {592--600},
+ year = {2018}
}
@inproceedings{yu2014personalized,
- title={Personalized entity recommendation: A heterogeneous information network approach},
- author={Yu, Xiao and Ren, Xiang and Sun, Yizhou and Gu, Quanquan and Sturt, Bradley and Khandelwal, Urvashi and Norick, Brandon and Han, Jiawei},
- booktitle={Proceedings of the 7th ACM international conference on Web search and data mining},
- pages={283--292},
- year={2014}
+ title = {Personalized entity recommendation: A heterogeneous information network approach},
+ author = {Yu, Xiao and Ren, Xiang and Sun, Yizhou and Gu, Quanquan and Sturt, Bradley and Khandelwal, Urvashi and Norick, Brandon and Han, Jiawei},
+ booktitle = {Proceedings of the 7th ACM international conference on Web search and data mining},
+ pages = {283--292},
+ year = {2014},
+ editor = {Yi Chang},
+ location = {New York},
+ publisher = {Association for Computing Machinery}
}
@article{rendle2012factorization,
- title={Factorization machines with libfm},
- author={Rendle, Steffen},
- journal={ACM Transactions on Intelligent Systems and Technology (TIST)},
- volume={3},
- number={3},
- pages={1--22},
- year={2012},
- publisher={ACM New York, NY, USA}
+ title = {Factorization machines with libfm},
+ author = {Rendle, Steffen},
+ journal = {ACM Transactions on Intelligent Systems and Technology (TIST)},
+ volume = {3},
+ number = {3},
+ pages = {1--22},
+ year = {2012},
+ publisher = {ACM New York, NY, USA}
}
@inproceedings{cheng2016wide,
- title={Wide \& deep learning for recommender systems},
- author={Cheng, Heng-Tze and Koc, Levent and Harmsen, Jeremiah and Shaked, Tal and Chandra, Tushar and Aradhye, Hrishi and Anderson, Glen and Corrado, Greg and Chai, Wei and Ispir, Mustafa and others},
- booktitle={Proceedings of the 1st workshop on deep learning for recommender systems},
- pages={7--10},
- year={2016}
+ title = {Wide \& deep learning for recommender systems},
+ author = {Cheng, Heng-Tze and Koc, Levent and Harmsen, Jeremiah and Shaked, Tal and Chandra, Tushar and Aradhye, Hrishi and Anderson, Glen and Corrado, Greg and Chai, Wei and Ispir, Mustafa and others},
+ booktitle = {Proceedings of the 1st workshop on deep learning for recommender systems},
+ pages = {7--10},
+ year = {2016},
+ editor = {Alexandros Karatzoglou},
+ location = {New York},
+ publisher = {Association for Computing Machinery}
}
@inproceedings{wang2018dkn,
- title={DKN: Deep knowledge-aware network for news recommendation},
- author={Wang, Hongwei and Zhang, Fuzheng and Xie, Xing and Guo, Minyi},
- booktitle={Proceedings of the 2018 world wide web conference},
- pages={1835--1844},
- year={2018}
+ title = {DKN: Deep knowledge-aware network for news recommendation},
+ author = {Wang, Hongwei and Zhang, Fuzheng and Xie, Xing and Guo, Minyi},
+ booktitle = {Proceedings of the 2018 world wide web conference},
+ pages = {1835--1844},
+ year = {2018},
+ editor = {Pierre-Antoine Champin},
+ location = {Republic and Canton of Geneva},
+ publisher = {International World Wide Web Conferences Steering Committee}
}
@article{漆桂林2017知识图谱研究进展,
- title={知识图谱研究进展},
- author={漆桂林 and 高桓 and 吴天星},
- journal={情报工程},
- volume={3},
- number={1},
- pages={004--025},
- year={2017}
+ title = {知识图谱研究进展},
+ author = {漆桂林 and 高桓 and 吴天星},
+ journal = {情报工程},
+ volume = {3},
+ number = {1},
+ pages = {004--025},
+ year = {2017}
}
@article{徐增林2016知识图谱技术综述,
- title={知识图谱技术综述},
- author={徐增林 and 盛泳潘 and 贺丽荣 and 王雅芳},
- year={2016},
- publisher={电子科技大学学报自然版}
+ title = {知识图谱技术综述},
+ author = {徐增林,盛泳潘,贺丽荣,王雅芳},
+ journal = {电子科技大学学报},
+ volume = {1},
+ number = {4},
+ pages = {589-606}
}
@article{李涓子2017知识图谱研究综述,
- title={知识图谱研究综述},
- author={李涓子 and 侯磊 and others},
- journal={山西大学学报 (自然科学版)},
- number={2017 年 03},
- pages={454--459},
- year={2017},
- publisher={山西大学}
+ title = {知识图谱研究综述},
+ author = {李涓子 and 侯磊 and others},
+ journal = {山西大学学报 (自然科学版)},
+ number = {03},
+ pages = {454--459},
+ year = {2017},
+ publisher = {山西大学}
}
@article{曹倩2015知识图谱的技术实现流程及相关应用,
- title={知识图谱的技术实现流程及相关应用},
- author={曹倩 and 赵一鸣},
- journal={情报理论与实践},
- volume={38},
- number={12},
- pages={13--18},
- year={2015}
+ title = {知识图谱的技术实现流程及相关应用},
+ author = {曹倩 and 赵一鸣},
+ journal = {情报理论与实践},
+ volume = {38},
+ number = {12},
+ pages = {13--18},
+ year = {2015}
}
@inproceedings{tang2019akupm,
- title={AKUPM: Attention-enhanced knowledge-aware user preference model for recommendation},
- author={Tang, Xiaoli and Wang, Tengyun and Yang, Haizhi and Song, Hengjie},
- booktitle={Proceedings of the 25th ACM SIGKDD International Conference on Knowledge Discovery \& Data Mining},
- pages={1891--1899},
- year={2019}
+ title = {AKUPM: Attention-enhanced knowledge-aware user preference model for recommendation},
+ author = {Tang, Xiaoli and Wang, Tengyun and Yang, Haizhi and Song, Hengjie},
+ booktitle = {Proceedings of the 25th ACM SIGKDD International Conference on Knowledge Discovery \& Data Mining},
+ pages = {1891--1899},
+ year = {2019},
+ editor = {Ankur Teredesai},
+ publisher = {Association for Computing Machinery},
+ location = {New York}
}
@inproceedings{cao2019unifying,
- title={Unifying knowledge graph learning and recommendation: Towards a better understanding of user preferences},
- author={Cao, Yixin and Wang, Xiang and He, Xiangnan and Hu, Zikun and Chua, Tat-Seng},
- booktitle={The world wide web conference},
- pages={151--161},
- year={2019}
+ title = {Unifying knowledge graph learning and recommendation: Towards a better understanding of user preferences},
+ author = {Cao, Yixin and Wang, Xiang and He, Xiangnan and Hu, Zikun and Chua, Tat-Seng},
+ booktitle = {The world wide web conference},
+ pages = {151--161},
+ year = {2019},
+ editor = {Ling Liu},
+ publisher = {Association for Computing Machinery},
+ location = {New York}
}
@inproceedings{zhao2017meta,
- title={Meta-graph based recommendation fusion over heterogeneous information networks},
- author={Zhao, Huan and Yao, Quanming and Li, Jianda and Song, Yangqiu and Lee, Dik Lun},
- booktitle={Proceedings of the 23rd ACM SIGKDD International Conference on Knowledge Discovery and Data Mining},
- pages={635--644},
- year={2017}
+ title = {Meta-graph based recommendation fusion over heterogeneous information networks},
+ author = {Zhao, Huan and Yao, Quanming and Li, Jianda and Song, Yangqiu and Lee, Dik Lun},
+ booktitle = {Proceedings of the 23rd ACM SIGKDD International Conference on Knowledge Discovery and Data Mining},
+ pages = {635--644},
+ year = {2017},
+ editor = {Stan Matwin},
+ publisher = {Association for Computing Machinery},
+ location = {New York}
}
@inproceedings{sun2018recurrent,
- title={Recurrent knowledge graph embedding for effective recommendation},
- author={Sun, Zhu and Yang, Jie and Zhang, Jie and Bozzon, Alessandro and Huang, Long-Kai and Xu, Chi},
- booktitle={Proceedings of the 12th ACM Conference on Recommender Systems},
- pages={297--305},
- year={2018}
+ title = {Recurrent knowledge graph embedding for effective recommendation},
+ author = {Sun, Zhu and Yang, Jie and Zhang, Jie and Bozzon, Alessandro and Huang, Long-Kai and Xu, Chi},
+ booktitle = {Proceedings of the 12th ACM Conference on Recommender Systems},
+ pages = {297--305},
+ year = {2018},
+ editor = {Sole Pera},
+ publisher = {Association for Computing Machinery},
+ location = {New York}
}
@inproceedings{wang2018ripplenet,
- title={Ripplenet: Propagating user preferences on the knowledge graph for recommender systems},
- author={Wang, Hongwei and Zhang, Fuzheng and Wang, Jialin and Zhao, Miao and Li, Wenjie and Xie, Xing and Guo, Minyi},
- booktitle={Proceedings of the 27th ACM International Conference on Information and Knowledge Management},
- pages={417--426},
- year={2018}
+ title = {Ripplenet: Propagating user preferences on the knowledge graph for recommender systems},
+ author = {Wang, Hongwei and Zhang, Fuzheng and Wang, Jialin and Zhao, Miao and Li, Wenjie and Xie, Xing and Guo, Minyi},
+ booktitle = {Proceedings of the 27th ACM International Conference on Information and Knowledge Management},
+ pages = {417--426},
+ year = {2018},
+ editor = {Alfredo Cuzzocrea},
+ publisher = {Association for Computing Machinery},
+ location = {New York}
}
@article{黄立威2018基于深度学习的推荐系统研究综述,
- title={基于深度学习的推荐系统研究综述},
- author={黄立威 and 江碧涛 and 吕守业 and 刘艳博 and 李德毅},
- journal={计算机学报},
- volume={41},
- number={7},
- pages={1619--1647},
- year={2018}
+ title = {基于深度学习的推荐系统研究综述},
+ author = {黄立威 and 江碧涛 and 吕守业 and 刘艳博 and 李德毅},
+ journal = {计算机学报},
+ volume = {41},
+ number = {7},
+ pages = {1619--1647},
+ year = {2018}
}
@article{常亮2019知识图谱的推荐系统综述,
- title={知识图谱的推荐系统综述},
- author={常亮 and 张伟涛 and 古天龙 and 孙文平 and 宾辰忠 and others},
- journal={智能系统学报},
- volume={14},
- number={2},
- pages={207--216},
- year={2019}
-}
-
-@mastersthesis{王一鸣2018基于知识图谱的推荐技术研究及应用,
- title={基于知识图谱的推荐技术研究及应用},
- author={王一鸣},
- year={2018},
- school={电子科技大学}
+ title = {知识图谱的推荐系统综述},
+ author = {常亮 and 张伟涛 and 古天龙 and 孙文平 and 宾辰忠 and others},
+ journal = {智能系统学报},
+ volume = {14},
+ number = {2},
+ pages = {207--216},
+ year = {2019}
+}
+
+@article{秦川2020基于知识图谱的推荐系统研究综述,
+ title = {基于知识图谱的推荐系统研究综述},
+ author = {秦川 and 祝恒书 and 庄福振 and 郭庆宇 and 张琦 and 张乐 and 王超 and 陈恩红 and 熊辉},
+ journal = {中国科学:信息科学},
+ number = {7},
+ pages = {937-956},
+ year = {2020}
}
diff --git a/macros/latex/contrib/bjfuthesis/example/contents/abstract.tex b/macros/latex/contrib/bjfuthesis/example/contents/abstract.tex
index 7e116d91e5..12c5ecc161 100644
--- a/macros/latex/contrib/bjfuthesis/example/contents/abstract.tex
+++ b/macros/latex/contrib/bjfuthesis/example/contents/abstract.tex
@@ -2,13 +2,13 @@
\begin{abstract}
随着在线电影数量不断增加,用户选择电影的时间成本不断上升,准确的推荐算法成为了必然要求。为解决协同过滤推荐算法中的稀缺性问题与冷启动问题,研究人员用商品属性或社交网络等信息来辅助推荐算法。现有的将知识图谱作为辅助信息的推荐算法包括基于嵌入的方法和基于路径的方法,但这两种方法均存在一些缺陷,没有充分有效地利用知识图谱中的相关信息,推荐的准确度较低。
- 本文实现了基于“涟漪网络”知识图谱的推荐算法。“涟漪网络”算法的核心是利用现实生活中雨滴产生的涟漪在水面上不断扩散的思路,来模拟用户偏好的扩散。对于每一个用户,涟漪网络将其过往偏好作为知识图谱中的一个种子集,然后沿知识图谱中的关系路径不断地拓展用户偏好,进而发现该用户对某个候选物品以等级划分的潜在兴趣,其中多个“涟漪”重叠形成知识图谱中的用户偏好分布。该算法的实验结果和以往的CKE、DKN、PER等模型结果相比,表现出更优的性能。利用该算法,本文设计并实现了一个基于知识图谱的电影推荐系统,该系统包括管理员用户和普通用户,管理员能新增、编辑和删除电影与用户,普通用户能浏览、收藏与购买电影。该系统可以高效准确地为用户推荐电影,方便用户选择满足自己偏好的电影。
+ 本文实现了基于知识图谱的“涟漪网络”推荐算法。“涟漪网络”算法的核心是利用现实生活中雨滴产生的涟漪在水面上不断扩散的思路,来模拟用户偏好的扩散。对于每一个用户,涟漪网络将其过往偏好作为知识图谱中的一个种子集,然后沿知识图谱中的关系路径不断地拓展用户偏好,进而发现该用户对某个候选物品以等级划分的潜在兴趣,其中多个“涟漪”重叠形成知识图谱中的用户偏好分布。该算法的实验结果和以往的CKE、DKN、PER等模型结果相比,表现出更优的性能。利用该算法,本文设计并实现了一个基于知识图谱的电影推荐系统,该系统包括管理员用户和普通用户,管理员能新增、编辑和删除电影与用户,普通用户能浏览、收藏与购买电影。该系统可以高效准确地为用户推荐电影,方便用户选择满足自己偏好的电影。
\end{abstract}
\keywordscn{知识图谱,推荐系统,涟漪网络,用户偏好,电影商店}
\chapter*{Abstract}
\begin{abstract}
- As the number of online movies continues to increase and the time cost for users to choose movies continues to rise, accurate recommendation algorithms have become an inevitable requirement. In order to address the scarcity and cold start problem of collaborative filtering, researchers usually make use of side information, such as product attributes or social networks as side information to assist the recommendation. The existing recommendation algorithms that use knowledge graph as side information include embedding-based methods and path-based methods, but both methods have some shortcomings. They do not make full and effective use of the relevant information in the knowledge graph, and the accuracy of recommendation is relatively low.
+ As the number of online movies continues to increase and the time cost for users to choose movies continues to rise, accurate recommendation algorithms have become an necessary requirement. In order to address the scarcity and cold start problem of collaborative filtering, researchers usually make use of side information, such as product attributes or social networks as side information to assist the recommendation. The existing recommendation algorithms that use knowledge graph as side information include embedding-based methods and path-based methods, but both methods have some shortcomings. They do not make full and effective use of the relevant information in the knowledge graph, and the accuracy of recommendation is relatively low.
- This paper implements a recommendation algorithm based on Ripple Network. The core of the Ripple Network algorithm is to use the idea that the ripples produced by raindrops in real life continue to spread on the water surface to stimulate the spread of user preferences. For each user, Ripple Network uses its past preference as a seed set in the knowledge graph, and then continuously expands the user’s preferences along the relationship path in the knowledge graph, and then discovers his hierarchical potential interests concerning a certain candidate item. Multiple ``ripples" overlap to form the user preference distribution in the knowledge graph. Compared with previous model results of CKE, DKN, PER, etc., the experimental results of this algorithm show better performance. Using this algorithm, this paper designs and implements a recommendation system based on the movie knowledge graph. The system includes administrator users and general users. The administrator can add, edit and delete movies and users, and general users can browse, collect and purchase films. The system can provide users with an efficient movie recommendation function, which is convenient for users to choose movies that suit their preferences.
+ This paper implements a recommendation algorithm, ``Ripple Network", based on knowledge graph. The core of the Ripple Network algorithm is to use the idea that the ripples produced by raindrops in real life continue to spread on the water surface to stimulate the spread of user preferences. For each user, Ripple Network uses its past preference as a seed set in the knowledge graph, and then continuously expands the user's preferences along the relationship path in the knowledge graph, and then discovers his hierarchical potential interests concerning a certain candidate item. Multiple ``ripples'' overlap to form the user preference distribution in the knowledge graph. Compared with previous model results of CKE, DKN, PER, etc., the experimental results of this algorithm show better performance. Using this algorithm, this paper designs and implements a recommendation system based on the movie knowledge graph. The system includes administrator users and general users. The administrator can add, edit and delete movies and users, and general users can browse, collect and purchase films. The system can provide users with an efficient movie recommendation function, which is convenient for users to choose movies that match their preferences.
\end{abstract}
-\keywordsen{Knowledge graph, recommendation system, Ripple Network, user preferences, movie store}
+\keywordsen{Knowledge graph, recommender system, Ripple Network, user preferences, movie store}
diff --git a/macros/latex/contrib/bjfuthesis/example/contents/mainbody.tex b/macros/latex/contrib/bjfuthesis/example/contents/mainbody.tex
index 2b8ff0cb50..54bbd920ca 100644
--- a/macros/latex/contrib/bjfuthesis/example/contents/mainbody.tex
+++ b/macros/latex/contrib/bjfuthesis/example/contents/mainbody.tex
@@ -1,6 +1,6 @@
\chapter{绪论}
\section{研究背景与意义}
-一直以来,电影推荐都是在线流媒体播放平台发展中的一个重要问题,做好电影推荐可以使用户能在海量电影中选择满足其偏好的电影,提高用户满意度,从而提高在线流媒体播放平台的流量转化率及购买率,并最终提高在线流媒体播放平台的经济收益。近年来,随着电影行业及互联网行业的不断发展,在线电影数量不断增加,用户在海量电影中选择满足其偏好的电影的难度不断上升,性能优异的推荐算法成为了必然要求。自从在线流媒体播放平台出现以来,人们便开始尝试利用推荐算法来提高平台流量转化率,出现了诸如协同过滤的推荐算法\cite{su2009survey}。但这些算法未能解决数据稀缺性及冷启动问题,并不能为在线流媒体播放平台提供良好的推荐性能。为此,人们尝试将辅助信息融入推荐算法中以解决数据稀缺性及冷启动问题\cite{sun2017collaborative},并提高推荐性能。
+一直以来,电影推荐都是在线流媒体播放平台发展中的一个重要问题,做好电影推荐可以使用户能在海量电影中选择满足其偏好的电影,提高用户满意度,从而提高在线流媒体播放平台的流量转化率及购买率,并最终提高在线流媒体播放平台的经济收益。近年来,随着电影行业及互联网行业的不断发展,在线电影数量不断增加,用户在海量电影中选择满足其偏好的电影的难度不断上升,性能优异的推荐算法成为了必然要求。自从在线流媒体播放平台出现以来,人们便开始尝试利用推荐算法来提高平台流量转化率,出现了诸如协同过滤的推荐算法\cite{he2017neural}。但这些算法未能解决数据稀缺性及冷启动问题,并不能为在线流媒体播放平台提供良好的推荐性能。为此,人们尝试将辅助信息融入推荐算法中以解决数据稀缺性及冷启动问题\cite{sun2017collaborative},并提高推荐性能。
知识图谱是一种结构化的语义知识库,被用于迅速提供对物理世界中的概念和相互关系的描述,为解决推荐问题提供了新的方法\cite{zou2020survey},近年来受到国内外研究人员的广泛关注,成为了当前的研究热点。知识图谱通过对复杂的原始数据进行加工、处理及整合,转化成简单可靠、清晰明了的“实体,关系,实体”三元组,汇聚了大量的知识信息,从而能实现基于知识信息的响应和推理。
@@ -11,7 +11,7 @@
对于海量的电影数据,为了实现准确地推荐给用户其感兴趣的电影,基于协同过滤的传统推荐算法是满足了不用户需求的,特别是对新注册用户,推荐的准确度无法得到保证。所以,本文旨在以知识图谱作为辅助信息,构建一个合适的电影推荐系统,并利用知识图谱中包含的丰富的辅助信息,最终实现一个电影推荐系统,为用户提供有效的、准确的电影推荐,从而提高用户满意度,提高平台收益。
\section{国内外研究现状}
\subsection{推荐系统研究现状}
-推荐系统由Jussi Karlgren于哥伦比亚大学在一份技术报告中以“数字书架”的名称被首次提及\cite{karlgren1990algebra},而后自1994年起被在SICS的Jussi Karlgren\cite{karlgren1994newsgroup}、由Pattie Maes于MIT领导的研究团队、位于Bellcore的Will Hill以及同样位于MIT的Paul Resnick大规模实现并在技术性报告及出版物大量出现,以上人员与GroupLens的工作被授予了2010年ACM软件系统奖。
+推荐系统由Jussi Karlgren于哥伦比亚大学在一份技术报告中以“数字书架”的名称被首次提及,而后自1994年起被在SICS的Jussi Karlgren、由Pattie Maes于MIT领导的研究团队、位于Bellcore的Will Hill以及同样位于MIT的Paul Resnick大规模实现并在技术性报告及出版物大量出现,以上人员与GroupLens的工作被授予了2010年ACM软件系统奖。
自从在90年代中期首批有关协同过滤的论文出现后推荐系统便成为了重要的研究领域。工业界与学术界出现了众多有关建设新的推荐系统的工作。由于该领域包含众多的研究问题及其能帮助用户解决在过多信息中提供个性化推荐的实际应用,因此研究人员对该领域的兴趣依旧很高。
@@ -41,7 +41,7 @@
事实学习分为有监督的事实学习、半监督的事实学习以及无监督的事实学习。有监督的事实学习通过人为标注的语料信息输入以及深度学习方法来完成知识图谱的构建,而半监督的事实学习方法使用启发式地自动标注文本,但缺陷是训练数据集中可能含有大量的噪声数据。而无监督的学习方法主要使用基于深度学习模型的自然语言处理(NLP)的方法,无须人为干预,由训练模型自动完成信息抽取、信息整合。随着深度学习算法的发展,目前基于无监督的事实学习逐渐成为主流\cite{李涓子2017知识图谱研究综述}。
-目前出现了诸多使用以上理论方法设计的知识图谱嵌入算法:基于翻译的TransE\cite{bordes2013translating}、TransH\cite{wang2014knowledge}、TransR\cite{lin2015learning}和基于语义分析的DistMult\cite{yang2014embedding}等。
+目前出现了诸多使用以上理论方法设计的知识图谱嵌入算法:基于翻译的TransE\cite{bordes2013translating}、TransH\cite{wang2014knowledge}、TransR\cite{lin2017learning}和基于语义分析的DistMult\cite{yang2014embedding}等。
目前,知识图谱在业界的应用已经取得了巨大成功\cite{曹倩2015知识图谱的技术实现流程及相关应用}:
@@ -53,7 +53,7 @@
\subsection{基于知识图谱的推荐系统研究现状}
由于传统的推荐系统无法解决稀缺性问题和冷启动问题,因此研究人员企图将辅助信息加入到推荐算法中以改善推荐性能。而这类辅助信息有社交网络、用户/物品属性、图像与上下文等。
-在数种类型的辅助信息中,知识图谱通常包含有更丰富的信息以及物品间的联系。图~\ref{fig:enhanced-recommendation}中说明了知识图谱提供丰富的信息与物品间的连接,有利于提高推荐结果的准确性、多样性和可解释性。知识图谱可以从以下三个方面提高推荐性能:
+在数种类型的辅助信息中,知识图谱通常包含有更丰富的信息以及物品间的联系。图\ref{fig:enhanced-recommendation}中说明了知识图谱提供丰富的信息与物品间的连接,有利于提高推荐结果的准确性、多样性和可解释性。知识图谱可以从以下三个方面提高推荐性能:
\begin{figure}
\includegraphics[width=\textwidth]{enhanced-recommendation}
\bicaption{基于知识图谱的电影推荐系统}{Knowledge graph enhanced movie recommendation system}\label{fig:enhanced-recommendation}
@@ -81,7 +81,7 @@ SHINE设计深度自编码器来嵌入语义网络,社交网络并进行推荐
(1)对推荐系统所需的数据进行采集和处理,使用“MovieLens 1M Dataset”作为数据集,此外还从IMDb及豆瓣网爬取了相关电影数据并进行处理,作为本文的研究对象。
-(2)根据文献\parencite{wang2018ripplenet}提出的算法,实现了基于知识图谱的涟漪网络推荐算法,该算法能根据用户的历史行为为用户进行电影推荐。此外,将涟漪网络算法与其他基于知识图谱的推荐算法(DKN\cite{wang2018dkn}、CKE\cite{zhang2016collaborative} 、PER\cite{yu2014personalized}、SHINE\cite{wang2018shine}、LibFM\cite{rendle2012factorization}和Wide\&Deep\cite{cheng2016wide}等)进行了性能比较。
+(2)根据文献\parencite{wang2018ripplenet}提出的算法,实现了基于知识图谱的涟漪网络推荐算法,此算法能根据用户的历史行为为用户进行电影推荐。不同于文献\parencite{wang2018ripplenet}中仅使用用户评分计算用户偏好,本文在用户偏好的计算过程中还结合了用户收藏,这在一定程度上缓解了冷启动问题并改进了推荐性能。此外,将涟漪网络算法与其他基于知识图谱的推荐算法(DKN\cite{wang2018dkn}、CKE\cite{zhang2016collaborative} 、PER\cite{yu2014personalized}、SHINE\cite{wang2018shine}、LibFM\cite{rendle2012factorization}和Wide\&Deep\cite{cheng2016wide}等)进行了性能比较。
(3)实现了一个基于知识图谱的电影推荐系统,该系统能够根据用户的历史行为(评分、收藏等)来为用户进行电影推荐。该系统分为管理员、未登录用户、普通登录用户。管理员能增加、修改和删除电影和普通用户;未登录用户能根据电影分类查看电影列表以及查看电影详情;普通登录用户除了能进行未登录用户的所有操作外,还能购买、收藏及为电影评分。
\section{论文结构}
@@ -125,7 +125,7 @@ SHINE设计深度自编码器来嵌入语义网络,社交网络并进行推荐
基于内容的推荐与基于协同过滤的推荐各有优缺点。潘多拉音乐所使用的基于内容推荐的推荐算法是根据物品本身的性质来进行推荐的,因此不需要用户信息就可以有较好的准确度。但该算法严重依赖物品本身的特性,因此局限性较大,推荐的内容都是与种子集相关的,推荐结果的多样性较低。而“终级fm”使用的协同过滤算法需要根据用户与物品的交互来生成推荐结果,因此需要大量的用户数据,存在数据稀缺性问题与冷启动问题。
\subsection{基于知识图谱的推荐系统}
-基于内容推荐与协同过滤推荐两者均存在一些局限性,为了提高推荐的准确性,解决传统推荐算法的数据稀缺性与冷启动问题,研究者将一些辅助信息加入至推荐算法中,通常这些辅助信息包括上下文信息、用户或物品的属性、图片和社交网络\cite{常亮2019知识图谱的推荐系统综述}\cite{王一鸣2018基于知识图谱的推荐技术研究及应用}。
+基于内容推荐与协同过滤推荐两者均存在一些局限性,为了提高推荐的准确性,解决传统推荐算法的数据稀缺性与冷启动问题,研究者将一些辅助信息加入至推荐算法中,通常这些辅助信息包括上下文信息、用户或物品的属性、图片和社交网络\cite{常亮2019知识图谱的推荐系统综述}\cite{秦川2020基于知识图谱的推荐系统研究综述}。
而随着知识图谱的发展,将知识图谱作为辅助信息来提高推荐系统的性能已经成为了热门的研究方向。将知识图谱作为辅助信息加入推荐算法的优点有:
@@ -135,7 +135,7 @@ SHINE设计深度自编码器来嵌入语义网络,社交网络并进行推荐
目前主要的基于知识图谱的推荐算法有基于嵌入的方法、基于路径的方法以及混合式方法:
-(1)基于嵌入的方法。基于嵌入的方法使用知识图谱的信息来完善实体的嵌入表示。为了将知识图谱中的信息添加至推荐算法中来辅助推荐,需要使用知识图谱嵌入表示算法(Knowledge Graph Embedding, KGE)表计算实体嵌入(实体嵌入指由知识图谱中的信息得到的在低维向量空间中的向量表示)。KGE算法有TransE\cite{bordes2013translating}、TransH\cite{wang2014knowledge}、TransR\cite{lin2015learning}和DistMult\cite{yang2014embedding}等。而推荐算法利用该嵌入表示来进行相关计算,从而对用户进行物品推荐。
+(1)基于嵌入的方法。基于嵌入的方法使用知识图谱的信息来完善实体的嵌入表示。为了将知识图谱中的信息添加至推荐算法中来辅助推荐,需要使用知识图谱嵌入表示算法(Knowledge Graph Embedding, KGE)表计算实体嵌入(实体嵌入指由知识图谱中的信息得到的在低维向量空间中的向量表示)。KGE算法有TransE\cite{bordes2013translating}、TransH\cite{wang2014knowledge}、TransR\cite{lin2017learning}和DistMult\cite{yang2014embedding}等。而推荐算法利用该嵌入表示来进行相关计算,从而对用户进行物品推荐。
(2)基于路径的方法\cite{lin2015modeling}\cite{guu2015traversing}\cite{toutanova2016compositional}。基于路径的方法将知识图谱视为异构信息网络。而推荐系统利用该异构信息网络寻找实体间的关系,从而完成推荐。
@@ -161,7 +161,8 @@ MongoDB是一个新兴的非关系型存储的分布式存储数据的数据库
Neo4j是一个具有高性能的图数据库,它将结构化的数据信息储存在网络上而不是存储在表中。它具有健壮和成熟的数据库的所有特点。虽然Neo4j是一个新兴的数据库,但它已在具有超过1亿节点、关系和属性的产品中得到了应用,充分体现了其高性能、高可靠性的特点。
-在本系统中,知识图谱的有关信息被存储在Neo4j中,由于知识图谱本身图的特性,这充分利用了Neo4j作为图数据库的特点,可以提供良好的性能支持。
+在本系统中,最终需存储的图结点有182011个,需存储的边有1241995条。如果将它们存储在传统的关系型数据库中,会因大量的连接查询导致极大的性能开销,表现为查询耗时久。Neo4j对图数据处理做了优化,因此查询等操作可以在较短的时间内完成,故本系统将知识图谱数据存储在Neo4j中而不是关系型数据库中。
+
\subsection{后端技术}
本系统使用Flask框架作为网站后端框架。Flask是一个Python编写的轻量级微框架。它具有轻量、便捷、可扩展等特点。系统使用Flask框架充分利用了其便捷、可扩展以及开发便捷的特点,与本系统要求相符。
@@ -176,7 +177,7 @@ Neo4j是一个具有高性能的图数据库,它将结构化的数据信息储
\label{ch:offline-recommendation}
\section{涟漪网络}
\subsection{架构}
-涟漪网络的总体架构如图~\ref{fig:ripplenet-framework}所示,图上方的知识图谱中展示了由用户交互产生的涟漪。涟漪网络以一个用户$u$和一个电影$v$作为输入,并输出用户$u$与电影$v$之间产生交互的概率。对输入用户$u$而言,其历史交互记录$V_u$是知识图谱中的种子集,而后沿着知识图谱中的关系边形成多个涟漪集$S_u^{k}\ (k=1, 2, \dots, H)$。第k个涟漪集是种子集$V_u$经过$k$跳得到的知识三元组。然后迭代地利用这些涟漪集与电影$v$的嵌入表示(黄色的块)计算出用户$u$对电影$v$的的响应(绿色的块),最后结合得到用户的最终嵌入表示(灰色的块)。最终,利用用户$u$与电影$v$的嵌入表示计算出用户$u$对电影$v$感兴趣的预测概率$y_{uv}$。
+涟漪网络的总体架构如图\ref{fig:ripplenet-framework}所示,图上方的知识图谱中展示了由用户交互产生的涟漪。涟漪网络以一个用户$u$和一个电影$v$作为输入,并输出用户$u$与电影$v$之间产生交互的概率。对输入用户$u$而言,其历史交互记录$V_u$是知识图谱中的种子集,而后沿着知识图谱中的关系边形成多个涟漪集$S_u^{k}\ (k=1, 2, \dots, H)$。第k个涟漪集是种子集$V_u$经过$k$跳得到的知识三元组。然后迭代地利用这些涟漪集与电影$v$的嵌入表示(黄色的块)计算出用户$u$对电影$v$的的响应(绿色的块),最后结合得到用户的最终嵌入表示(灰色的块)。最终,利用用户$u$与电影$v$的嵌入表示计算出用户$u$对电影$v$感兴趣的预测概率$y_{uv}$。
\begin{figure}
\includegraphics[width=\textwidth]{ripplenet-framework}
\bicaption{涟漪网络的总体架构}{The overall framework of the Ripple Network}\label{fig:ripplenet-framework}
@@ -186,7 +187,7 @@ Neo4j是一个具有高性能的图数据库,它将结构化的数据信息储
\includegraphics[width=\textwidth]{illustration-of-ripple-sets}
\bicaption{电影知识图谱中由“阿甘正传”激发的涟漪集}{Sets of ripples of “Forest Gump” in Knowledge Graph of movies}\label{fig:illustration-of-ripple-sets}
\end{figure}
-知识图谱常常含有丰富的事实信息与实体间的联系。比如,图~\ref{fig:illustration-of-ripple-sets}(图中不同颜色的圆圈表示不同跳数的涟漪集,越浅的蓝色代表种子集与该区域内实体的关联程度越低)中电影“阿甘正传”与“罗伯特·泽米吉斯”相连,它们之间的联系为“罗伯特·泽米吉斯”是电影“阿甘正传”的导演。而“回到未来”也与“罗伯特·泽米吉斯”相连。因此,如果一个用户与电影“阿甘正传”交互过,则他很有可能也对“回到未来”感兴趣。为了描述用户在知识图谱中分层次的潜在偏好集,递归定义用户$u$的$k$跳相关实体如下:
+知识图谱常常含有丰富的事实信息与实体间的联系。比如,图\ref{fig:illustration-of-ripple-sets}(图中不同颜色的圆圈表示不同跳数的涟漪集,越浅的蓝色代表种子集与该区域内实体的关联程度越低)中电影“阿甘正传”与“罗伯特·泽米吉斯”相连,它们之间的联系为“罗伯特·泽米吉斯”是电影“阿甘正传”的导演。而“回到未来”也与“罗伯特·泽米吉斯”相连。因此,如果一个用户与电影“阿甘正传”交互过,则他很有可能也对“回到未来”感兴趣。为了描述用户在知识图谱中分层次的潜在偏好集,递归定义用户$u$的$k$跳相关实体如下:
\textbf{定义1(相关实体集) } 给定交互矩阵$\Upsilon$与知识图谱$G$,则用户$u$的$k$跳相关实体集的定义为式\eqref{relevant-entities}。
@@ -204,7 +205,7 @@ Neo4j是一个具有高性能的图数据库,它将结构化的数据信息储
S_u^k = \{(h, r, t)|(h, r, t)\in G \text{且} h\in E^{k-1}_u\}, k = 1, 2, \dots, H\label{ripple-set}
\end{equation}
-“涟漪”这个词有两重意思:(1)对由多个雨点产生的真实涟漪的模拟,用户对电影的潜在兴趣集在知识图谱中由近及远地传递。这一过程如图~\ref{fig:illustration-of-ripple-sets}所示。(2)用户的潜在兴趣随着知识图谱中传递的跳数$k$的增大逐渐递减。图~\ref{fig:illustration-of-ripple-sets}中蓝色的变浅显示了潜在兴趣递减的过程。
+“涟漪”这个词有两重意思:(1)对由多个雨点产生的真实涟漪的模拟,用户对电影的潜在兴趣集在知识图谱中由近及远地传递。这一过程如图\ref{fig:illustration-of-ripple-sets}所示。(2)用户的潜在兴趣随着知识图谱中传递的跳数$k$的增大逐渐递减。图\ref{fig:illustration-of-ripple-sets}中蓝色的变浅显示了潜在兴趣递减的过程。
一个可能出现的问题是在跳数$k$增加的过程中涟漪集的大小可能过大。为了解决这个问题,注意到:
@@ -219,7 +220,7 @@ Neo4j是一个具有高性能的图数据库,它将结构化的数据信息储
\label{sec:osum}
传统的协同过滤算法是通过学习用户与物品间的潜在联系来完成推荐,而在涟漪网络算法中,这一过程是通过偏好扩散完成的:对每个用户,涟漪网络将他的过往兴趣视为知识图谱中的种子集,然后沿知识图谱中的路径不断地拓展用户的潜在兴趣集,进而得到按等级划分的关于候选物品的潜在兴趣集。我们利用现实生活中的由雨滴产生的涟漪在水面上扩散来模拟偏好扩散的过程,其中多个“涟漪”重叠形成基于知识图谱的用户偏好分布。
-如图~\ref{fig:ripplenet-framework},每部电影都有一个嵌入表示$v$,$v\in \mathbb{R}^{d}$,其中$\mathbb{R}$是实数集,$d$是嵌入表示向量的维数。给定电影的嵌入表示$v$以及用户$1$跳涟漪集$S_u^{1}$,可以利用电影$v$、$S_u^{1}$中的三元组中头节点$head_i$以及该三元组中的关系$r_i$来计算出电影$v$和实体$head_i$之间的相关度,如式\eqref{eq:item-entity-relevance}所示。
+如图\ref{fig:ripplenet-framework},每部电影都有一个嵌入表示$v$,$v\in \mathbb{R}^{d}$,其中$\mathbb{R}$是实数集,$d$是嵌入表示向量的维数。给定电影的嵌入表示$v$以及用户$1$跳涟漪集$S_u^{1}$,可以利用电影$v$、$S_u^{1}$中的三元组中头节点$head_i$以及该三元组中的关系$r_i$来计算出电影$v$和实体$head_i$之间的相关度,如式\eqref{eq:item-entity-relevance}所示。
\begin{equation}
p_i=softmax(v^TR_ih_i)=\frac{exp(v^TR_ih_i)}{\sum_{(h, r, t)\in S_u^1} exp(v^TRh)}\label{eq:item-entity-relevance}
@@ -292,9 +293,9 @@ Neo4j是一个具有高性能的图数据库,它将结构化的数据信息储
直接求解上式来得到参数$\Gamma$是不可能的,因此可以使用随机梯度下降算法递归地优化损失函数来求解模型参数,而后再计算参数$\Gamma$的损失函数的梯度,并根据采样得到的一小批数据反向传递,然后更新参数并最终得到参数$\Gamma$。
\section{分析}
\subsection{可解释性}
-可解释的推荐系统旨在阐释为什么用户会对一件物品感兴趣,这帮助提升用户对推荐结果的满意度以及对推荐系统的信任。对推荐结果的解释通常基于标签、语义分析等。因为涟漪网络探索用户基于知识图谱的兴趣,因此它提供了一种基于知识图谱中的关系路径来阐述推荐结果的全新方式。比如,在图~\ref{fig:illustration-of-ripple-sets}中,当用户对“幸福终点站”感兴趣,则该用户也可能对“荒岛余生”感兴趣。因为在知识图谱中,“汤姆·汉克斯”与“幸福终点站”相连,关系是演员,而“汤姆·汉克斯”与“荒岛余生”也相连,关系也是演员,换句话说,“荒岛余生”与“幸福终点站”有相同的演员。这便解释了用户对“幸福终点站”和“荒岛余生”同时感兴趣的原因。涟漪网络算法通过在知识图谱中寻找与用户交互过的电影(种子集)相连的物品,并不断扩散,最终确保推荐结果具有较高的准确性。
+可解释的推荐系统旨在阐释为什么用户会对一件物品感兴趣,这帮助提升用户对推荐结果的满意度以及对推荐系统的信任。对推荐结果的解释通常基于标签、语义分析等。因为涟漪网络探索用户基于知识图谱的兴趣,因此它提供了一种基于知识图谱中的关系路径来阐述推荐结果的全新方式。比如,在图\ref{fig:illustration-of-ripple-sets}中,当用户对“幸福终点站”感兴趣,则该用户也可能对“荒岛余生”感兴趣。因为在知识图谱中,“汤姆·汉克斯”与“幸福终点站”相连,关系是演员,而“汤姆·汉克斯”与“荒岛余生”也相连,关系也是演员,换句话说,“荒岛余生”与“幸福终点站”有相同的演员。这便解释了用户对“幸福终点站”和“荒岛余生”同时感兴趣的原因。涟漪网络算法通过在知识图谱中寻找与用户交互过的电影(种子集)相连的物品,并不断扩散,最终确保推荐结果具有较高的准确性。
\subsection{涟漪重叠}
-在涟漪网络中,一个可能的问题是涟漪集中的电影非常多,从而在偏好传递的过程中不可避免地导致用户的真实潜在偏好信息被稀释。然而,用户点击记录中不同的电影常常高度重叠(从种子集出发到达一部电影常常有不止一条路径),这在很大程度上避免了真实潜在偏好信息被稀释的问题。比如,在图~\ref{fig:illustration-of-ripple-sets}中,如果一个用户喜欢“阿甘正传”,则他也可能喜欢“荒岛余生”。在该知识图谱中,从“阿甘正传”到“荒岛余生”有两条路径:“阿甘正传-U.S.-荒岛余生”与“阿甘正传-汤姆·汉克斯-荒岛余生”,这正是涟漪重叠的表现。
+在涟漪网络中,一个可能的问题是涟漪集中的电影非常多,从而在偏好传递的过程中不可避免地导致用户的真实潜在偏好信息被稀释。然而,用户点击记录中不同的电影常常高度重叠(从种子集出发到达一部电影常常有不止一条路径),这在很大程度上避免了真实潜在偏好信息被稀释的问题。比如,在图\ref{fig:illustration-of-ripple-sets}中,如果一个用户喜欢“阿甘正传”,则他也可能喜欢“荒岛余生”。在该知识图谱中,从“阿甘正传”到“荒岛余生”有两条路径:“阿甘正传-U.S.-荒岛余生”与“阿甘正传-汤姆·汉克斯-荒岛余生”,这正是涟漪重叠的表现。
\section{测试}
\subsection{数据集}
本测试使用“MovieLens 1M Dataset”数据集。该数据集由电影信息、用户信息以及用户对电影的评分三部分组成。其中,含有电影数据3883条、用户数据6040条以及1000209条用户对电影的评分数据。因该数据集数据量适中,数据准确可靠,因此在推荐系统的性能测试中被广泛使用。
@@ -305,7 +306,7 @@ Neo4j是一个具有高性能的图数据库,它将结构化的数据信息储
DKN\cite{wang2018dkn}是由微软团队在WWW2018会议上发表的。它是一个主要针对新闻任务提出的框架,知识图谱用于辅助计算新闻标题的嵌入表示。DKN提出对新闻标题内每一个关键实体,在知识图谱内找到其实体嵌入和上下文嵌入。
-CKE\cite{zhang2016collaborative}是微软在KDD2016年发表的,其模型结构在原有系统过滤得到 $U$,$V$向量的基础上,将物品的嵌入与其他描述信息相结合,这些信息主要有:
+CKE\cite{zhang2016collaborative}是微软在KDD2016年发表的,其模型结构在原有系统过滤得到$U$,$V$向量的基础上,将物品的嵌入与其他描述信息相结合,这些信息主要有:
采用TransR算法计算知识图谱嵌入表示,知识图谱内每个实体嵌入表示被提取为物品的结构化向量信息。
采用SDAE模型得到物品描述性文本的文本性嵌入表示。
采用SCAE模型得到物品相关图像的视觉嵌入表示。
@@ -320,7 +321,7 @@ Wide\&Deep\cite{cheng2016wide}是一个结合线性路径的推荐模型。类
\subsection{测试步骤}
在涟漪网络中,设置跳数$H=2$。根据实验结果,较大的跳数几乎无法提高性能却会造成较大的计算开销。我们将数据划分为训练集、评估集与测试集,按照6:2:2的比例进行分配。实验进行5次,计算准确度以及AUC然后取平均值。
\subsection{结果}
-测试结果如表~\ref{tab:acc-auc}中所示,总体上涟漪网络算法的性能最佳,其次是Wide\&Deep算法,说明他们可以充分利用知识图谱中的有效信息来辅助推荐算法。而表现最差的是PER算法,这可能是因为手工定义的元路径在电影推荐方面效果较差。
+测试结果如表\ref{tab:acc-auc}中所示,总体上涟漪网络算法的性能最佳,其次是Wide\&Deep算法,说明他们可以充分利用知识图谱中的有效信息来辅助推荐算法。而表现最差的是PER算法,这可能是因为手工定义的元路径在电影推荐方面效果较差。
\begin{table}
\bicaption{在兴趣预测计算中的AUC和准确度}{AUC and ACC in interest prediction}\label{tab:acc-auc}
\begin{tabular}{lcl}
@@ -404,14 +405,14 @@ Wide\&Deep\cite{cheng2016wide}是一个结合线性路径的推荐模型。类
}
\end{verbatim}
-Neo4j数据库用于存储推荐算法使用的知识图谱,其中的数据结构可表示为:
+Neo4j数据库用于存储推荐算法使用的知识图谱,含有182011个结点、1241995条边,其数据结构可表示为:
\begin{verbatim}
- node: actor | country | director | film | genre | language
- | person_or_entity_appearing_in_film | rating | star
+ node: actor | country | director | film | genre | language
+ | person_or_entity_appearing_in_film | rating | star
| writer
relationship: actor.film | director.film | film.country
- film.director | film.genre | film.language | film.rating
- film.star | film.writer | genre.film
+ | film.director | film.genre | film.language | film.rating
+ | film.star | film.writer | genre.film
| person_or_entity_appearing_in_film.film | writer.film
edge = (node) - [relationship] -> (node)
\end{verbatim}
@@ -420,9 +421,9 @@ Neo4j数据库用于存储推荐算法使用的知识图谱,其中的数据结
\includegraphics{use-case}
\bicaption{系统功能用例图}{Use case diagram for the system }\label{fig:use-case}
\end{figure}
-本系统用户角色分为未登录用户、普通用户与管理员用户,其用例说明如图~\ref{fig:use-case}。
+本系统用户角色分为未登录用户、普通用户与管理员用户,其用例说明如图\ref{fig:use-case}。
\subsection{系统导航}
-本系统使用浮动侧边栏作为导航方式,如图~\ref{fig:admin-navigation}。点击侧导航栏右下角的固定的按钮可以将浮动侧边栏设为固定,再次点击后将取消固定。
+本系统使用浮动侧边栏作为导航方式,如图\ref{fig:admin-navigation}。点击侧导航栏右下角的固定的按钮可以将浮动侧边栏设为固定,再次点击后将取消固定。
\begin{figure}
\fbox{\includegraphics[width=.94\textwidth]{admin-navigation}}
\bicaption{系统侧导航栏(管理员)}{Side navigation panel of the system (for administrators)}\label{fig:admin-navigation}
@@ -433,7 +434,7 @@ Neo4j数据库用于存储推荐算法使用的知识图谱,其中的数据结
\noindent (1)接收随机的电影推荐
-未登录用户首页随机显示50部电影,如图~\ref{fig:anonymous-index}。
+未登录用户首页随机显示50部电影,如图\ref{fig:anonymous-index}。
\begin{figure}
\fbox{\includegraphics[width=.94\textwidth]{anonymous-index}}
\bicaption{未登录用户首页}{Index page for anonymous user }\label{fig:anonymous-index}
@@ -441,7 +442,7 @@ Neo4j数据库用于存储推荐算法使用的知识图谱,其中的数据结
\noindent (2)按分类查看电影
-未登录用户可以根据电影的分类来查看电影,如图~\ref{fig:anonymous-category}。
+未登录用户可以根据电影的分类来查看电影,如图\ref{fig:anonymous-category}。
\begin{figure}
\fbox{\includegraphics[width=.94\textwidth]{anonymous-category}}
\bicaption{未登录用户分类页面}{Category page for anonymous user }\label{fig:anonymous-category}
@@ -449,7 +450,7 @@ Neo4j数据库用于存储推荐算法使用的知识图谱,其中的数据结
\noindent (3)查看电影详情
-未登录用户可以查看电影详情,如图~\ref{fig:anonymous-details}。点击页面上的“添加至心愿单”和“购买”会跳转至登录界面。
+未登录用户可以查看电影详情,如图\ref{fig:anonymous-details}。点击页面上的“添加至心愿单”和“购买”会跳转至登录界面。
\begin{figure}
\fbox{\includegraphics[height=.7\textheight]{anonymous-details}}
\bicaption{未登录用户电影详情页面}{Movie details page for anonymous user }\label{fig:anonymous-details}
@@ -457,7 +458,7 @@ Neo4j数据库用于存储推荐算法使用的知识图谱,其中的数据结
\noindent (4)搜索电影
-未登录用户可以在应用栏右部的搜索框搜索电影,如图~\ref{fig:anonymous-search}。本系统支持模糊搜索,与此同时,随着用户搜索内容的不断输入,系统会在搜索框下方显示候选的匹配词条,方便用户直接点击查看,此外,用户也能通过回车跳转至完整的搜索结果页面。
+未登录用户可以在应用栏右部的搜索框搜索电影,如图\ref{fig:anonymous-search}。本系统支持模糊搜索,与此同时,随着用户搜索内容的不断输入,系统会在搜索框下方显示候选的匹配词条,方便用户直接点击查看,此外,用户也能通过回车跳转至完整的搜索结果页面。
\begin{figure}
\fbox{\includegraphics[width=.94\textwidth]{anonymous-search}}
\bicaption{未登录用户电影搜索界面(侧导航栏已固定)}{Movie search page for anonymous user (side navigation panel pinned)}\label{fig:anonymous-search}
@@ -483,7 +484,7 @@ Neo4j数据库用于存储推荐算法使用的知识图谱,其中的数据结
\noindent (3)评分
-已登录用户能在电影详情页面给电影评分。电影评分功能位于电影详情页面,如图~\ref{fig:general-details}所示。
+已登录用户能在电影详情页面给电影评分。电影评分功能位于电影详情页面,如图\ref{fig:general-details}所示。
\begin{figure}
\fbox{\includegraphics[width=.94\textwidth]{general-details}}
@@ -500,7 +501,7 @@ Neo4j数据库用于存储推荐算法使用的知识图谱,其中的数据结
\subsection{管理员用户}
\noindent (1)管理电影信息
-管理员能增加电影、删除电影与修改电影信息,如图~\ref{fig:admin-movie}所示。
+管理员能增加电影、删除电影与修改电影信息,如图\ref{fig:admin-movie}所示。
\begin{figure}
\fbox{\includegraphics[width=.94\textwidth]{admin-movie}}
\bicaption{管理电影页面}{Movie administration page}\label{fig:admin-movie}
@@ -512,20 +513,21 @@ Neo4j数据库用于存储推荐算法使用的知识图谱,其中的数据结
\noindent (3)管理知识图谱
-管理员能增加、删除、修改以及查找知识图谱中的结点与关系,如图~\ref{fig:admin-knowledge-graph}所示。该界面中的结点及关系可以以动态的方式呈现,同时支持以填写选项的方式以及使用Cypher语句的方式来增加、删除、修改以及查找知识图谱中的结点与关系。当鼠标悬浮于某一节点或关系之上时,将显示有关这一节点或关系的有关信息。
+管理员能增加、删除、修改以及查找知识图谱中的结点与关系,如图\ref{fig:admin-knowledge-graph}所示。该界面中的结点及关系可以以动态的方式呈现,同时支持以填写选项的方式以及使用Cypher语句的方式来增加、删除、修改以及查找知识图谱中的结点与关系。当鼠标悬浮于某一节点或关系之上时,将显示有关这一节点或关系的有关信息。
\begin{figure}
\fbox{\includegraphics[width=.94\textwidth]{admin-knowledge-graph}}
\bicaption{管理知识图谱页面}{Knowledge graph administration page}\label{fig:admin-knowledge-graph}
\end{figure}
\section{电影推荐流程}
-本系统的推荐流程分为离线推荐与实时推荐,如图~\ref{fig:recommendation-procedure}所示。
+本系统的推荐流程分为离线推荐与实时推荐,如图\ref{fig:recommendation-procedure}所示。
\begin{figure}
\includegraphics{recommendation-procedure}
\bicaption{电影推荐流程}{Movie recommendation procedure }\label{fig:recommendation-procedure}
\end{figure}
-其中,离线推荐使用第\ref{ch:offline-recommendation}章中所述的涟漪网络算法,而实时推荐机制作为补充,描述如下:
+其中,离线推荐使用第\ref{ch:offline-recommendation}章所述的涟漪网络算法,此算法是基于文献\parencite{wang2018ripplenet}实现的。不同于文献\parencite{wang2018ripplenet}中仅使用用户评分计算用户偏好,本推荐系统在用户偏好的计算过程中还结合了用户收藏,这在一定程度上缓解了冷启动问题并改进了推荐性能。
+此外,本推荐系统还结合了实时推荐机制作为补充,描述如下:
(1)离线推荐服务器定期运行涟漪网络算法。离线推荐服务器从MongoDB数据库服务器获取用户信息与电影评分、电影是否加入心愿单等数据以及从Neo4j数据库服务器获取知识图谱数据信息。然后执行涟漪网络算法。最后离线推荐服务器将计算得到的各用户推荐列表存入MongoDB数据库中,等待用户访问时将该结果推荐给用户。
@@ -533,7 +535,7 @@ Neo4j数据库用于存储推荐算法使用的知识图谱,其中的数据结
上述步骤中,(1)中的离线推荐准确度高,但算法运算时间长,无法做到即时响应用户请求。(2)中的实时推荐方法准确度低,但算法运算快,可以做到实时响应请求并即时发出响应。两者相互补充组成了本系统的电影推荐算法。
\section{系统安全性}
-本系统对已登录普通用户与管理员在前后端交互过程中使用JSON网络令牌(JSON Web Token, JWT)实现授权与认证(Authorization and Authentication),以此保证系统的安全性,本系统的总体安全性设计如图~\ref{fig:jwt}所示。
+本系统对已登录普通用户与管理员在前后端交互过程中使用JSON网络令牌(JSON Web Token, JWT)实现授权与认证(Authorization and Authentication),以此保证系统的安全性,本系统的总体安全性设计如图\ref{fig:jwt}所示。
\begin{figure}
\includegraphics{jwt}
@@ -555,7 +557,7 @@ Neo4j数据库用于存储推荐算法使用的知识图谱,其中的数据结
(1)使用基于Scrapy框架的爬虫从IMDb和豆瓣网上爬取了3684条电影数据。其中,从IMDb爬取了3494条电影数据,从豆瓣网爬取了190条电影数据(由于豆瓣网限制了每IP访问量故爬取的数据较少)。这些电影数据包括电影封面图片、电影情节介绍、电影预告片图片、电影演员列表、导演以及剧本作家等信息。
-(2)根据文献\parencite{wang2018ripplenet}实现了基于知识图谱的涟漪网络推荐算法,通过使用“MovieLens 1M Dataset”数据集以及从IMDb和豆瓣网上爬取的电影数据,实现了基于用户心愿单和用户评分并以知识图谱为辅助信息的推荐算法。并对实现的推荐算法进行了试验,计算了其AUC和准确度两个关键的性能指标,将该指标与DKN\cite{wang2018dkn}、CKE\cite{zhang2016collaborative}、PER\cite{yu2014personalized}、SHINE\cite{wang2018shine}、LibFM\cite{rendle2012factorization}以及Wide\&Deep\cite{cheng2016wide}算法的进行了对比。并以此发现,涟漪网络算法的性能最优。
+(2)根据文献\parencite{wang2018ripplenet}实现了基于知识图谱的涟漪网络推荐算法,通过使用“MovieLens 1M Dataset”数据集以及从IMDb和豆瓣网上爬取的电影数据,实现了基于用户心愿单和用户评分并以知识图谱为辅助信息的推荐算法。不同于文献\parencite{wang2018ripplenet}中仅使用用户评分计算用户偏好,本文在用户偏好的计算过程中还结合了用户收藏,这在一定程度上缓解了冷启动问题并改进了推荐性能。并对实现的推荐算法进行了实验,计算了其AUC和准确度两个关键的性能指标,将该指标与DKN\cite{wang2018dkn}、CKE\cite{zhang2016collaborative}、PER\cite{yu2014personalized}、SHINE\cite{wang2018shine}、LibFM\cite{rendle2012factorization}以及Wide\&Deep\cite{cheng2016wide}算法的进行了对比。并以此发现,涟漪网络算法的性能最优。
(3)基于涟漪网络算法实现了基于知识图谱的电影推荐系统。该系统为未登录用户提供按分类查看电影、查看电影详情的功能;为普通用户提供电影推荐、按分类查看电影、查看电影详情、电影评分、将电影加入心愿单以及购买电影功能;为管理员提供增加、删除、修改、查找电影及用户的功能。同时使用JSON网络令牌、HTTPS以及哈希化密码等手段保障系统的安全性。
\section{工作展望}
@@ -567,6 +569,6 @@ Neo4j数据库用于存储推荐算法使用的知识图谱,其中的数据结
\noindent (2)涟漪网络算法有待进一步改进
-涟漪网络算法目前仅适用于离线推荐,而无法用于实时推荐,这使它的适用场景受到了限制。未来可考虑改造该算法,使其能满足实时推荐的需求。
+尽管涟漪网络算法相比于传统的推荐算法在准确度上有所提升,但涟漪网络算法目前仅适用于离线推荐,而无法用于实时推荐,这使它的适用场景受到了限制。未来可考虑改造该算法,使其能满足实时推荐的需求。
对于以上提及的问题,未来还需要更深入地学习有关知识图谱、推荐算法、深度学习的有关知识,对系统进行改进,从而使其更完善。
diff --git a/macros/latex/contrib/bjfuthesis/example/cover.pdf b/macros/latex/contrib/bjfuthesis/example/cover.pdf
index 6ab70639e4..ad03632921 100644
--- a/macros/latex/contrib/bjfuthesis/example/cover.pdf
+++ b/macros/latex/contrib/bjfuthesis/example/cover.pdf
Binary files differ
diff --git a/macros/latex/contrib/bjfuthesis/example/figures/admin-knowledge-graph.png b/macros/latex/contrib/bjfuthesis/example/figures/admin-knowledge-graph.png
index 9603818183..72deea5c06 100644
--- a/macros/latex/contrib/bjfuthesis/example/figures/admin-knowledge-graph.png
+++ b/macros/latex/contrib/bjfuthesis/example/figures/admin-knowledge-graph.png
Binary files differ
diff --git a/macros/latex/contrib/bjfuthesis/example/figures/admin-movie.png b/macros/latex/contrib/bjfuthesis/example/figures/admin-movie.png
index 938bb9f6f1..12b2c1a961 100644
--- a/macros/latex/contrib/bjfuthesis/example/figures/admin-movie.png
+++ b/macros/latex/contrib/bjfuthesis/example/figures/admin-movie.png
Binary files differ
diff --git a/macros/latex/contrib/bjfuthesis/example/figures/admin-navigation.png b/macros/latex/contrib/bjfuthesis/example/figures/admin-navigation.png
index 2f03defee7..ef2ef0d66c 100644
--- a/macros/latex/contrib/bjfuthesis/example/figures/admin-navigation.png
+++ b/macros/latex/contrib/bjfuthesis/example/figures/admin-navigation.png
Binary files differ
diff --git a/macros/latex/contrib/bjfuthesis/example/figures/anonymous-category.png b/macros/latex/contrib/bjfuthesis/example/figures/anonymous-category.png
index 0e7e85fb23..947c99499d 100644
--- a/macros/latex/contrib/bjfuthesis/example/figures/anonymous-category.png
+++ b/macros/latex/contrib/bjfuthesis/example/figures/anonymous-category.png
Binary files differ
diff --git a/macros/latex/contrib/bjfuthesis/example/figures/anonymous-details.png b/macros/latex/contrib/bjfuthesis/example/figures/anonymous-details.png
index d493e7d33c..59778b77ed 100644
--- a/macros/latex/contrib/bjfuthesis/example/figures/anonymous-details.png
+++ b/macros/latex/contrib/bjfuthesis/example/figures/anonymous-details.png
Binary files differ
diff --git a/macros/latex/contrib/bjfuthesis/example/figures/anonymous-index.png b/macros/latex/contrib/bjfuthesis/example/figures/anonymous-index.png
index 51128da916..092a222810 100644
--- a/macros/latex/contrib/bjfuthesis/example/figures/anonymous-index.png
+++ b/macros/latex/contrib/bjfuthesis/example/figures/anonymous-index.png
Binary files differ
diff --git a/macros/latex/contrib/bjfuthesis/example/figures/anonymous-search.png b/macros/latex/contrib/bjfuthesis/example/figures/anonymous-search.png
index 003d373cc9..ff5de424a2 100644
--- a/macros/latex/contrib/bjfuthesis/example/figures/anonymous-search.png
+++ b/macros/latex/contrib/bjfuthesis/example/figures/anonymous-search.png
Binary files differ
diff --git a/macros/latex/contrib/bjfuthesis/example/figures/general-details.png b/macros/latex/contrib/bjfuthesis/example/figures/general-details.png
index e462e58ebb..f099fc18bf 100644
--- a/macros/latex/contrib/bjfuthesis/example/figures/general-details.png
+++ b/macros/latex/contrib/bjfuthesis/example/figures/general-details.png
Binary files differ
diff --git a/macros/latex/contrib/bjfuthesis/example/thesis.pdf b/macros/latex/contrib/bjfuthesis/example/thesis.pdf
index af8b072dc1..cb1aabbe44 100644
--- a/macros/latex/contrib/bjfuthesis/example/thesis.pdf
+++ b/macros/latex/contrib/bjfuthesis/example/thesis.pdf
Binary files differ
diff --git a/macros/latex/contrib/bmstu-iu8/LICENSE b/macros/latex/contrib/bmstu-iu8/LICENSE
deleted file mode 100644
index b9a8428a7d..0000000000
--- a/macros/latex/contrib/bmstu-iu8/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-MIT License
-
-Copyright (c) 2021 CatInCosmicSpace/latex-template repo contributors
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/macros/latex/contrib/bmstu-iu8/README.md b/macros/latex/contrib/bmstu-iu8/README.md
index 4fb70940ea..2520f3d40c 100644
--- a/macros/latex/contrib/bmstu-iu8/README.md
+++ b/macros/latex/contrib/bmstu-iu8/README.md
@@ -1,3 +1,13 @@
# IU8 package
-This package consist of class file and style files for writing reports at the IU8 department of IU faculty of BMSTU (Bauman Moscow State Technical University).
+This package consist of class file and style files for writing
+reports at the IU8 department of IU faculty of BMSTU
+(Bauman Moscow State Technical University).
+
+This class defines all headings, structure elements and other things
+in respect of russian standard GOST 7.32-2017. But there are
+correctives to be compatible with our local IU8 department
+requirements.
+
+The package and any later version of this package is published under the MIT
+license.
diff --git a/macros/latex/contrib/bmstu-iu8/bmstu-example.pdf b/macros/latex/contrib/bmstu-iu8/bmstu-example.pdf
new file mode 100644
index 0000000000..05d3aa0669
--- /dev/null
+++ b/macros/latex/contrib/bmstu-iu8/bmstu-example.pdf
Binary files differ
diff --git a/macros/latex/contrib/bmstu-iu8/example.tex b/macros/latex/contrib/bmstu-iu8/bmstu-example.tex
index 0d2499d7bd..0d2499d7bd 100644
--- a/macros/latex/contrib/bmstu-iu8/example.tex
+++ b/macros/latex/contrib/bmstu-iu8/bmstu-example.tex
diff --git a/macros/latex/contrib/bmstu-iu8/BMSTU-IU8.cls b/macros/latex/contrib/bmstu-iu8/bmstu-iu8/BMSTU-IU8.cls
index e3c4748c0d..63c4d910d9 100644
--- a/macros/latex/contrib/bmstu-iu8/BMSTU-IU8.cls
+++ b/macros/latex/contrib/bmstu-iu8/bmstu-iu8/BMSTU-IU8.cls
@@ -25,7 +25,6 @@
\RequirePackage[utf8]{inputenc}
\RequirePackage[russian]{babel}
\RequirePackage{hyphsubst}
-\RequirePackage{csquotes}
\RequirePackage{01-IU8-base}
\RequirePackage{02-IU8-construction}
@@ -50,4 +49,6 @@
\RequirePackage{21-IU8-math}
\RequirePackage{22-IU8-algorithms}
+\RequirePackage{csquotes}
+
\makeglossaries
diff --git a/macros/latex/contrib/bmstu-iu8/inc/bmstu.png b/macros/latex/contrib/bmstu-iu8/bmstu-iu8/inc/bmstu.png
index 469c7d9797..469c7d9797 100644
--- a/macros/latex/contrib/bmstu-iu8/inc/bmstu.png
+++ b/macros/latex/contrib/bmstu-iu8/bmstu-iu8/inc/bmstu.png
Binary files differ
diff --git a/macros/latex/contrib/bmstu-iu8/styles/01-IU8-base.sty b/macros/latex/contrib/bmstu-iu8/bmstu-iu8/styles/01-IU8-base.sty
index 2ade498ef7..07b54647a3 100644
--- a/macros/latex/contrib/bmstu-iu8/styles/01-IU8-base.sty
+++ b/macros/latex/contrib/bmstu-iu8/bmstu-iu8/styles/01-IU8-base.sty
@@ -1,6 +1,6 @@
% Author: CatInCosmicSpace
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{01-IU8-base}[2021/03/21 v1.0 Общие требования]
+\ProvidesPackage{01-IU8-base}[2021/03/21 v1.1 Общие требования]
% 6.1.1 Изложение текста и оформление отчета выполняют в соответствии с
% требованиями настоящего стандарта. Страницы текста отчета о НИР и включенные в
@@ -15,6 +15,7 @@
% Цвет шрифта должен быть черным, размер шрифта - не менее 12 пт.
% Рекомендуемый тип шрифта для основного текста отчета - Times New Roman.
+\RequirePackage{anyfontsize}
\RequirePackage[fontsize=14pt]{scrextend}
% Но у Times New Roman нет открытой реализации, так что будет стандартный
% Или можете попробовать xelatex:
diff --git a/macros/latex/contrib/bmstu-iu8/styles/02-IU8-construction.sty b/macros/latex/contrib/bmstu-iu8/bmstu-iu8/styles/02-IU8-construction.sty
index ebf8957a62..a8cb987208 100644
--- a/macros/latex/contrib/bmstu-iu8/styles/02-IU8-construction.sty
+++ b/macros/latex/contrib/bmstu-iu8/bmstu-iu8/styles/02-IU8-construction.sty
@@ -1,6 +1,6 @@
% Author: CatInCosmicSpace
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{02-IU8-construction}[2021/03/21 v1.0 Построение отчета]
+\ProvidesPackage{02-IU8-construction}[2021/03/21 v1.1 Построение отчета]
% 6.2.1 Наименования структурных элементов отчета:
% "СПИСОК ИСПОЛНИТЕЛЕЙ", % у нас не используется
diff --git a/macros/latex/contrib/bmstu-iu8/styles/03-IU8-numbering.sty b/macros/latex/contrib/bmstu-iu8/bmstu-iu8/styles/03-IU8-numbering.sty
index b9ebc5b699..2cfb8b4f82 100644
--- a/macros/latex/contrib/bmstu-iu8/styles/03-IU8-numbering.sty
+++ b/macros/latex/contrib/bmstu-iu8/bmstu-iu8/styles/03-IU8-numbering.sty
@@ -1,6 +1,6 @@
% Author: CatInCosmicSpace
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{03-IU8-numbering}[2021/03/21 v1.0 Нумерация страниц отчета]
+\ProvidesPackage{03-IU8-numbering}[2021/03/21 v1.1 Нумерация страниц отчета]
% 6.3.1 Страницы отчета следует нумеровать арабскими цифрами, соблюдая сквозную
% нумерацию по всему тексту отчета, включая приложения. Номер страницы
diff --git a/macros/latex/contrib/bmstu-iu8/styles/04-IU8-section-numbering.sty b/macros/latex/contrib/bmstu-iu8/bmstu-iu8/styles/04-IU8-section-numbering.sty
index de614468c4..efd706e2d1 100644
--- a/macros/latex/contrib/bmstu-iu8/styles/04-IU8-section-numbering.sty
+++ b/macros/latex/contrib/bmstu-iu8/bmstu-iu8/styles/04-IU8-section-numbering.sty
@@ -1,6 +1,6 @@
% Author: CatInCosmicSpace
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{04-IU8-section-numbering}[2021/03/21 v1.0 Нумерация разделов, подразделов, пунктов, подпунктов и книг отчета]
+\ProvidesPackage{04-IU8-section-numbering}[2021/03/21 v1.1 Нумерация разделов, подразделов, пунктов, подпунктов и книг отчета]
% 6.4.1 Разделы должны иметь порядковые номера в пределах всего отчета,
% обозначенные арабскими цифрами без точки и расположенные с абзацного отступа.
diff --git a/macros/latex/contrib/bmstu-iu8/styles/05-IU8-figures.sty b/macros/latex/contrib/bmstu-iu8/bmstu-iu8/styles/05-IU8-figures.sty
index c0f50267de..4875fdec8e 100644
--- a/macros/latex/contrib/bmstu-iu8/styles/05-IU8-figures.sty
+++ b/macros/latex/contrib/bmstu-iu8/bmstu-iu8/styles/05-IU8-figures.sty
@@ -1,6 +1,6 @@
% Author: CatInCosmicSpace
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{05-IU8-figures}[2021/03/21 v1.0 Иллюстрации]
+\ProvidesPackage{05-IU8-figures}[2021/03/21 v1.1 Иллюстрации]
% 6.5.1 Иллюстрации (чертежи, графики, схемы, компьютерные распечатки, диаграммы,
% фотоснимки) следует располагать в отчете непосредственно после текста отчета,
diff --git a/macros/latex/contrib/bmstu-iu8/styles/06-IU8-tables.sty b/macros/latex/contrib/bmstu-iu8/bmstu-iu8/styles/06-IU8-tables.sty
index fd08b71fb9..28ffc3cd97 100644
--- a/macros/latex/contrib/bmstu-iu8/styles/06-IU8-tables.sty
+++ b/macros/latex/contrib/bmstu-iu8/bmstu-iu8/styles/06-IU8-tables.sty
@@ -1,6 +1,6 @@
% Author: CatInCosmicSpace
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{06-IU8-tables}[2021/03/21 v1.0 Таблицы]
+\ProvidesPackage{06-IU8-tables}[2021/03/21 v1.1 Таблицы]
% Пакеты, которые скорее всего пригодятся
\RequirePackage{tabularx}
diff --git a/macros/latex/contrib/bmstu-iu8/styles/07-IU8-footnotes.sty b/macros/latex/contrib/bmstu-iu8/bmstu-iu8/styles/07-IU8-footnotes.sty
index a485d0d0af..f7abd6cce9 100644
--- a/macros/latex/contrib/bmstu-iu8/styles/07-IU8-footnotes.sty
+++ b/macros/latex/contrib/bmstu-iu8/bmstu-iu8/styles/07-IU8-footnotes.sty
@@ -1,6 +1,6 @@
% Author: CatInCosmicSpace
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{07-IU8-footnotes}[2021/03/21 v1.0 Примечания и сноски]
+\ProvidesPackage{07-IU8-footnotes}[2021/03/21 v1.1 Примечания и сноски]
% 6.7.1 Примечания приводят в отчете, если необходимы пояснения или справочные
% данные к содержанию текста, таблиц или графического материала.
diff --git a/macros/latex/contrib/bmstu-iu8/styles/08-IU8-formulas.sty b/macros/latex/contrib/bmstu-iu8/bmstu-iu8/styles/08-IU8-formulas.sty
index 5370ea82a6..26ec05640d 100644
--- a/macros/latex/contrib/bmstu-iu8/styles/08-IU8-formulas.sty
+++ b/macros/latex/contrib/bmstu-iu8/bmstu-iu8/styles/08-IU8-formulas.sty
@@ -1,5 +1,5 @@
% Author: CatInCosmicSpace
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{08-IU8-formulas}[2021/03/21 v1.0 Формулы]
+\ProvidesPackage{08-IU8-formulas}[2021/03/21 v1.1 Формулы]
% Настройки по умолчанию в целом соответствуют ГОСТ \ No newline at end of file
diff --git a/macros/latex/contrib/bmstu-iu8/styles/09-IU8-cites.sty b/macros/latex/contrib/bmstu-iu8/bmstu-iu8/styles/09-IU8-cites.sty
index 8a42ee23f6..7343648925 100644
--- a/macros/latex/contrib/bmstu-iu8/styles/09-IU8-cites.sty
+++ b/macros/latex/contrib/bmstu-iu8/bmstu-iu8/styles/09-IU8-cites.sty
@@ -1,6 +1,6 @@
% Author: CatInCosmicSpace
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{09-IU8-cites}[2021/03/21 v1.0 Ссылки]
+\ProvidesPackage{09-IU8-cites}[2021/03/21 v1.1 Ссылки]
% 6.9.1 В отчете о НИР рекомендуется приводить ссылки на использованные
% источники. При нумерации ссылок на документы, использованные при составлении
diff --git a/macros/latex/contrib/bmstu-iu8/styles/10-IU8-titlepage.sty b/macros/latex/contrib/bmstu-iu8/bmstu-iu8/styles/10-IU8-titlepage.sty
index 1d1cc37751..2d52ce93e1 100644
--- a/macros/latex/contrib/bmstu-iu8/styles/10-IU8-titlepage.sty
+++ b/macros/latex/contrib/bmstu-iu8/bmstu-iu8/styles/10-IU8-titlepage.sty
@@ -1,6 +1,6 @@
% Author: CatInCosmicSpace
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{10-IU8-titlepage}[2021/03/21 v1.0 Титульный лист]
+\ProvidesPackage{10-IU8-titlepage}[2021/03/21 v1.1 Титульный лист]
% Поля для заполнения для ВКР
\def\student#1{\gdef\@student{#1}}
diff --git a/macros/latex/contrib/bmstu-iu8/bmstu-iu8/styles/11-IU8-performers.sty b/macros/latex/contrib/bmstu-iu8/bmstu-iu8/styles/11-IU8-performers.sty
new file mode 100644
index 0000000000..5fab88f372
--- /dev/null
+++ b/macros/latex/contrib/bmstu-iu8/bmstu-iu8/styles/11-IU8-performers.sty
@@ -0,0 +1,5 @@
+% Author: CatInCosmicSpace
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{11-IU8-performers}[2021/03/21 v1.1 Список исполниетелей]
+
+% Т.к. у нас это не используется, я оставляю это пустымы \ No newline at end of file
diff --git a/macros/latex/contrib/bmstu-iu8/styles/12-IU8-abstract.sty b/macros/latex/contrib/bmstu-iu8/bmstu-iu8/styles/12-IU8-abstract.sty
index c674c5efac..ab068e8c49 100644
--- a/macros/latex/contrib/bmstu-iu8/styles/12-IU8-abstract.sty
+++ b/macros/latex/contrib/bmstu-iu8/bmstu-iu8/styles/12-IU8-abstract.sty
@@ -1,6 +1,6 @@
% Author: CatInCosmicSpace
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{12-IU8-abstract}[2021/03/21 v1.0 Реферат]
+\ProvidesPackage{12-IU8-abstract}[2021/03/21 v1.1 Реферат]
% 6.12.1 Сведения об общем объеме отчета, количестве книг отчета, иллюстраций,
% таблиц, использованных источников, приложений являются первой компонентой
@@ -17,7 +17,7 @@
\RequirePackage{lastpage}
\renewcommand{\abstract}{
- \structure*{РЕФЕРАТ}
+ \structure{РЕФЕРАТ}
Отчёт содержит \pageref{LastPage} стр.\ifnum
\TotalValue{totalfigures}>0, \TotalValue{totalfigures} рис.\fi\ifnum
diff --git a/macros/latex/contrib/bmstu-iu8/styles/13-IU8-contents.sty b/macros/latex/contrib/bmstu-iu8/bmstu-iu8/styles/13-IU8-contents.sty
index 4bba4deb7e..3fa1170610 100644
--- a/macros/latex/contrib/bmstu-iu8/styles/13-IU8-contents.sty
+++ b/macros/latex/contrib/bmstu-iu8/bmstu-iu8/styles/13-IU8-contents.sty
@@ -1,6 +1,6 @@
% Author: CatInCosmicSpace
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{13-IU8-contents}[2021/03/21 v1.0 Содержание]
+\ProvidesPackage{13-IU8-contents}[2021/03/21 v1.1 Содержание]
% Каждую запись содержания оформляют как отдельный абзац, выровненный влево.
% Номера страниц указывают выровненными по правому краю поля и соединяют
diff --git a/macros/latex/contrib/bmstu-iu8/styles/14-IU8-terms-and-definitions.sty b/macros/latex/contrib/bmstu-iu8/bmstu-iu8/styles/14-IU8-terms-and-definitions.sty
index ea679bd6c5..0d19fcc37d 100644
--- a/macros/latex/contrib/bmstu-iu8/styles/14-IU8-terms-and-definitions.sty
+++ b/macros/latex/contrib/bmstu-iu8/bmstu-iu8/styles/14-IU8-terms-and-definitions.sty
@@ -1,6 +1,6 @@
% Author: CatInCosmicSpace
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{14-IU8-terms-and-definitions}[2021/03/21 v1.0 Содержание]
+\ProvidesPackage{14-IU8-terms-and-definitions}[2021/03/21 v1.1 Содержание]
\RequirePackage[
acronym,
@@ -33,12 +33,3 @@
nonumberlist
]
}
-
-% \newglossarystyle{definitions}{%
-% \renewenvironment{theglossary}{}{}
-% \renewcommand*{\glossentry}[2]{
-% \noindent\glstarget{##1}{\glossentryname{##1}}~\textemdash~\glossentrydesc{##1}
-% \newline
-% }
-% \renewcommand*{\glsgroupskip}{}%
-% }
diff --git a/macros/latex/contrib/bmstu-iu8/styles/15-IU8-list-of-abbreviations.sty b/macros/latex/contrib/bmstu-iu8/bmstu-iu8/styles/15-IU8-list-of-abbreviations.sty
index 8440aac950..2e7931ccb7 100644
--- a/macros/latex/contrib/bmstu-iu8/styles/15-IU8-list-of-abbreviations.sty
+++ b/macros/latex/contrib/bmstu-iu8/bmstu-iu8/styles/15-IU8-list-of-abbreviations.sty
@@ -1,6 +1,6 @@
% Author: CatInCosmicSpace
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{15-IU8-list-of-abbreviations}[2021/03/21 v1.0 Содержание]
+\ProvidesPackage{15-IU8-list-of-abbreviations}[2021/03/21 v1.1 Содержание]
\RequirePackage[abbreviations]{glossaries-extra}
diff --git a/macros/latex/contrib/bmstu-iu8/styles/16-IU8-references.sty b/macros/latex/contrib/bmstu-iu8/bmstu-iu8/styles/16-IU8-references.sty
index 65c710c41f..6d441e098c 100644
--- a/macros/latex/contrib/bmstu-iu8/styles/16-IU8-references.sty
+++ b/macros/latex/contrib/bmstu-iu8/bmstu-iu8/styles/16-IU8-references.sty
@@ -1,6 +1,6 @@
% Author: CatInCosmicSpace
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{16-IU8-references}[2021/03/21 v1.0 Список использованных источников]
+\ProvidesPackage{16-IU8-references}[2021/03/21 v1.1 Список использованных источников]
% Сведения об источниках следует располагать в порядке появления ссылок на
% источники в тексте отчета и нумеровать арабскими цифрами с точкой и печатать
@@ -8,6 +8,7 @@
\usepackage[
backend=biber,
style=gost-numeric,
+ sorting=none,
% refsection=structure,
% sorting=ynt,
]{biblatex}
@@ -15,13 +16,3 @@
\addto{\captionsrussian}{%
\renewcommand{\contentsname}{СОДЕРЖАНИЕ}
}
-
-% \bibliographystyle{ugost2008}
-% \renewcommand{\@biblabel}[1]{#1.}
-
- % \usepackage{natbib}
-% \renewcommand\bibsection{%
-% \structure*{{\normalsize\underline{\refname}}\@mkboth{\MakeUppercase{\refname}}{\MakeUppercase{\refname}}}%
-% }%
-% \def\bibheading{bibliography}{\section*{Bibliography}}
-% \usepackage[nottoc,numbib]{tocbibind} \ No newline at end of file
diff --git a/macros/latex/contrib/bmstu-iu8/styles/17-IU8-appendices.sty b/macros/latex/contrib/bmstu-iu8/bmstu-iu8/styles/17-IU8-appendices.sty
index 26f692b165..58556e4987 100644
--- a/macros/latex/contrib/bmstu-iu8/styles/17-IU8-appendices.sty
+++ b/macros/latex/contrib/bmstu-iu8/bmstu-iu8/styles/17-IU8-appendices.sty
@@ -1,6 +1,6 @@
% Author: CatInCosmicSpace
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{17-IU8-appendices}[2021/03/21 v1.0 Приложения]
+\ProvidesPackage{17-IU8-appendices}[2021/03/21 v1.1 Приложения]
\newcommand{\appendixsection}[1]{
\stepcounter{apps}
@@ -17,7 +17,9 @@
\setcounter{figure}{0}
\setcounter{table}{0}
\setcounter{equation}{0}
+ \setcounter{lstlisting}{0}
\renewcommand\thefigure{\Asbuk{apps}.\arabic{figure}}
- \renewcommand\thetable{\Asbuk{apps}.\arabic{figure}}
- \renewcommand\theequation{\Asbuk{apps}.\arabic{figure}}
+ \renewcommand\thetable{\Asbuk{apps}.\arabic{table}}
+ \renewcommand\theequation{\Asbuk{apps}.\arabic{equation}}
+ \renewcommand\thelstlisting{\Asbuk{apps}.\arabic{lstlisting}}
}
diff --git a/macros/latex/contrib/bmstu-iu8/styles/18-IU8-extra.sty b/macros/latex/contrib/bmstu-iu8/bmstu-iu8/styles/18-IU8-extra.sty
index c456e8e8fd..6548337ceb 100644
--- a/macros/latex/contrib/bmstu-iu8/styles/18-IU8-extra.sty
+++ b/macros/latex/contrib/bmstu-iu8/bmstu-iu8/styles/18-IU8-extra.sty
@@ -1,11 +1,9 @@
% Author: CatInCosmicSpace
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{18-IU8-extra}[2021/03/21 v1.0 Разные улучшения]
+\ProvidesPackage{18-IU8-extra}[2021/03/21 v1.1 Разные улучшения]
\RequirePackage{graphicx}
-\RequirePackage[none]{hyphenat} % Отключим переносы, так красивее
-
\RequirePackage[all, defaultlines=4]{nowidow} % Запрет "висячих" слов
\sloppy % Запретить выход текста за поля
diff --git a/macros/latex/contrib/bmstu-iu8/styles/19-IU8-counters.sty b/macros/latex/contrib/bmstu-iu8/bmstu-iu8/styles/19-IU8-counters.sty
index 35253a1b2d..f0eb7762d1 100644
--- a/macros/latex/contrib/bmstu-iu8/styles/19-IU8-counters.sty
+++ b/macros/latex/contrib/bmstu-iu8/bmstu-iu8/styles/19-IU8-counters.sty
@@ -1,6 +1,6 @@
% Author: CatInCosmicSpace
\NeedsTeXFormat{LaTeX2e}[1995/12/01]
-\ProvidesPackage{19-IU8-counters}[2021/03/21 v1.0 Счётчики]
+\ProvidesPackage{19-IU8-counters}[2021/03/21 v1.1 Счётчики]
\RequirePackage{calc}
\RequirePackage{xassoccnt}
diff --git a/macros/latex/contrib/bmstu-iu8/bmstu-iu8/styles/20-IU8-listing.sty b/macros/latex/contrib/bmstu-iu8/bmstu-iu8/styles/20-IU8-listing.sty
new file mode 100644
index 0000000000..e0e7f96251
--- /dev/null
+++ b/macros/latex/contrib/bmstu-iu8/bmstu-iu8/styles/20-IU8-listing.sty
@@ -0,0 +1,38 @@
+% Author: CatInCosmicSpace
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesPackage{20-IU8-listing}[2021/03/21 v1.1 Листинги]
+
+\RequirePackage{listings}
+\RequirePackage{xcolor}
+
+% http://latexcolor.com/
+\definecolor{seashell}{rgb}{1.0, 0.96, 0.93}
+
+\lstdefinestyle{IU8}{
+ frame=single,
+ backgroundcolor=\color{seashell},
+ commentstyle=\color{blue},
+ keywordstyle=\color{magenta},
+ basicstyle=\ttfamily\footnotesize,
+ breakatwhitespace=false,
+ breaklines=true,
+ captionpos=tl,
+ keepspaces=false,
+ showspaces=false,
+ showstringspaces=false,
+ showtabs=false,
+ extendedchars=\true,
+ tabsize=2,
+}
+\lstset{style=IU8}
+
+\DeclareCaptionFormat{listing}{#1#2#3}
+\captionsetup[lstlisting]{
+ format=listing,
+ singlelinecheck=false,
+ labelsep=endash,
+}
+
+\newcommand{\listing}[2][]{%
+ \lstinputlisting[caption={\texttt{\detokenize{#2}}},#1]{#2}%
+}
diff --git a/macros/latex/contrib/bmstu-iu8/styles/21-IU8-math.sty b/macros/latex/contrib/bmstu-iu8/bmstu-iu8/styles/21-IU8-math.sty
index 00b85e1c24..13b0e75ab1 100644
--- a/macros/latex/contrib/bmstu-iu8/styles/21-IU8-math.sty
+++ b/macros/latex/contrib/bmstu-iu8/bmstu-iu8/styles/21-IU8-math.sty
@@ -1,6 +1,6 @@
% Author: CatInCosmicSpace
\NeedsTeXFormat{LaTeX2e}[1995/12/01]
-\ProvidesPackage{21-IU8-math}[2021/03/21 v1.0 Математика]
+\ProvidesPackage{21-IU8-math}[2021/03/21 v1.1 Математика]
\RequirePackage{amsthm}
\theoremstyle{definition}
diff --git a/macros/latex/contrib/bmstu-iu8/styles/22-IU8-algorithms.sty b/macros/latex/contrib/bmstu-iu8/bmstu-iu8/styles/22-IU8-algorithms.sty
index e7ede15997..9733ec195e 100644
--- a/macros/latex/contrib/bmstu-iu8/styles/22-IU8-algorithms.sty
+++ b/macros/latex/contrib/bmstu-iu8/bmstu-iu8/styles/22-IU8-algorithms.sty
@@ -1,6 +1,6 @@
% Author: CatInCosmicSpace
\NeedsTeXFormat{LaTeX2e}[1995/12/01]
-\ProvidesPackage{22-IU8-algorithms}[2021/03/21 v1.0 Алгоритмы]
+\ProvidesPackage{22-IU8-algorithms}[2021/03/21 v1.1 Алгоритмы]
\RequirePackage[linesnumbered,boxruled]{algorithm2e}
\SetAlCapSty{}
diff --git a/macros/latex/contrib/bmstu-iu8/example.pdf b/macros/latex/contrib/bmstu-iu8/example.pdf
deleted file mode 100644
index bbf0887362..0000000000
--- a/macros/latex/contrib/bmstu-iu8/example.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/latex/contrib/bmstu-iu8/styles/11-IU8-performers.sty b/macros/latex/contrib/bmstu-iu8/styles/11-IU8-performers.sty
deleted file mode 100644
index 8ba0ce8458..0000000000
--- a/macros/latex/contrib/bmstu-iu8/styles/11-IU8-performers.sty
+++ /dev/null
@@ -1,5 +0,0 @@
-% Author: CatInCosmicSpace
-\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{10-IU8-performes}[2021/03/21 v1.0 Список исполниетелей]
-
-% Т.к. у нас это не используется, я оставляю это пустымы \ No newline at end of file
diff --git a/macros/latex/contrib/bmstu-iu8/styles/20-IU8-listing.sty b/macros/latex/contrib/bmstu-iu8/styles/20-IU8-listing.sty
deleted file mode 100644
index a2d817a0fb..0000000000
--- a/macros/latex/contrib/bmstu-iu8/styles/20-IU8-listing.sty
+++ /dev/null
@@ -1,43 +0,0 @@
-% Author: CatInCosmicSpace
-\NeedsTeXFormat{LaTeX2e}[1995/12/01]
-\ProvidesPackage{20-IU8-listing}[2021/03/21 v1.0 Листинги]
-
-\RequirePackage{listings}
-\RequirePackage{xcolor}
-
-\definecolor{codegreen}{rgb}{0,0.6,0}
-\definecolor{codegray}{rgb}{0.5,0.5,0.5}
-\definecolor{codepurple}{rgb}{0.58,0,0.82}
-\definecolor{backcolour}{rgb}{0.95,0.95,0.92}
-
-\lstdefinestyle{IU8}{
- % backgroundcolor=\color{backcolour},
- % commentstyle=\color{codegreen},
- % keywordstyle=\color{magenta},
- numberstyle=\tiny\color{black},
- % stringstyle=\color{codepurple},
- basicstyle=\ttfamily\footnotesize,
- breakatwhitespace=false,
- breaklines=true,
- captionpos=tl,
- xleftmargin=0.5\parindent,
- keepspaces=true,
- numbers=left,
- numbersep=5pt,
- showspaces=false,
- showstringspaces=false,
- showtabs=false,
- tabsize=2,
-}
-\lstset{style=IU8}
-
-\DeclareCaptionFormat{listing}{#1#2#3}
-\captionsetup[lstlisting]{
- format=listing,
- singlelinecheck=false,
- labelsep=endash,
-}
-
-\newcommand{\listing}[2][]{%
- \lstinputlisting[caption={\texttt{\detokenize{#2}}},#1]{#2}%
-}
diff --git a/macros/latex/contrib/easybook/easybook.dtx b/macros/latex/contrib/easybook/easybook.dtx
index c1a4a44dc4..f1143d2b36 100644
--- a/macros/latex/contrib/easybook/easybook.dtx
+++ b/macros/latex/contrib/easybook/easybook.dtx
@@ -23,12 +23,12 @@
%
% \changes{v1.20}{2021/01/09}{修改和完善用户文档。}
% \changes{v1.20}{2021/01/09}{模板更改为使用 CC-BY 许可协议。}
-% \changes{v1.25s}{2021/05/03}{取消附带的示例文件,可查看历史版本及其它来源的使用样例。}
-% \changes{v1.25s}{2021/06/02}{将模块的代码独立出来为 \pkg{easybase} 宏包,适用于 \CTeX 文档类。}
+% \changes{v1.25t}{2021/05/03}{取消附带的示例文件,可查看历史版本及其它来源的使用样例。}
+% \changes{v1.25t}{2021/06/02}{将模块的代码独立出来为 \pkg{easybase} 宏包,适用于 \CTeX 文档类。}
%
% \title{\sffamily easybook 文档类手册}
% \author{瞿毅}
-% \date{2021/06/04\hskip\ccwd\relax v1.25s\thanks{\url{https://gitee.com/texl3/easybook}}}
+% \date{2021/06/05\hskip\ccwd\relax v1.25t\thanks{\url{https://gitee.com/texl3/easybook}}}
%
% \maketitle
% \begin{abstract}
@@ -134,7 +134,7 @@
% \end{syntax}
% 传递给 \cls{ctexbook} 设置字体,最好不要使用原有的 \opt{fontset} 选项,默认情况下使用自定义字体而不开启这个选项,可根据安装的字体及电脑系统选取。\opt{noto} 与 \opt{none} 选项的相关描述见小节 \ref{subsec:font settings},\opt{overleaf} 是一个各系统通用选项,会检测系统环境选取对应字体。
% \changes{v1.21}{2021/01/12}{默认字体与 \CTeX 一致,不再是自定义字体。}
-% \changes{v1.25s}{2021/05/04}{修复使用 \pkg{xeCJK} 与 \pkg{fontspec} 宏包的字体设置命令在 \hologo{LuaLaTeX} 下失效的问题。}
+% \changes{v1.25t}{2021/05/04}{修复使用 \pkg{xeCJK} 与 \pkg{fontspec} 宏包的字体设置命令在 \hologo{LuaLaTeX} 下失效的问题。}
% \end{function}
%
% \begin{function}[rEXP,added = 2021-01-05,updated = 2021-01-13]{paper}
@@ -184,7 +184,7 @@
% \tn{listoflstlistings*+}\oarg{键值列表}
% \end{syntax}
% \tn{listoffigures} 命令输出图片目录,\tn{listoftables} 输出表格目录,\tn{listoflstlistings} 输出代码目录。带有星号的目录命令不将标题添加进主文档目录,带有+号的目录命令可以使当前标题编号。\tn{tableofcontents+} 与其它命令不同是用于输出双语目录,需要与双语目录标题命令 \tn{bichapter} 等或设置图片、表格和代码等英文目录的标题配合使用,附加代码是中文与英文目录之间的代码,可以插入文本和换页命令等。目录的键值列表选项如下
-% \changes{v1.25s}{2021/05/05}{命令 \tn{tableofcontents} 可以输出双语目录。}
+% \changes{v1.25t}{2021/05/05}{命令 \tn{tableofcontents} 可以输出双语目录。}
% \end{function}
%
% \begin{function}{multoc,columns,title,format,aftertitle,pagestyle,book,article}
@@ -201,7 +201,7 @@
% 在书籍模式且 \opt{book} 选项开启或者文章模式的情况下,\opt{format} 用于设置目录标题的格式,\opt{aftertitle} 选项的代码将被插入到目录标题内容之后,\opt{pagestyle} 是目录标题所在页的页面格式,除此之外还支持 \opt{ctexset/chapter} 或 \opt{ctexset/section} 所有的章节标题样式选项。\opt{book} 选项使目录标题按照 chapter 级别输出,\opt{article} 选项使目录标题按照 section 级别输出,默认为 chapter 级别。
% \changes{v1.23}{2021/03/15}{为几个目录增加键值列表的选项,可设置标题输出级别以及是否加入主目录。}
% \changes{v1.24}{2021/04/04}{目录命令的可选参数增加标题键值。}
-% \changes{v1.25s}{2021/06/02}{目录可设置多栏,并在 article 模式仍然生效。}
+% \changes{v1.25t}{2021/06/02}{目录可设置多栏,并在 article 模式仍然生效。}
% \end{function}
%
% \subsubsection{标题命令}
@@ -217,7 +217,7 @@
% 双语目录的标题命令目前设置了常用的三个级别,它们将中文标题正常输出,并使中英文标题加入双语目录,这个功能是为国内一些大学的学位论文模板的要求设计,在一般情况和英文模式下不需要使用。
%
% 它们的星号变体命令使文中标题不编号,但是仍然加入双语目录,若英文标题参数空置那么仅加入中文目录而不加入英文目录,这一特点与 \tn{chapter*} 等命令的行为不太一样,在一些情况下会用到。可选参数是目录中的中文标题,默认与中文标题一致,正文标题过长时可用它设置在目录中显示的标题。双语目录的格式是一致的,共享使用 \tn{tocset} 的设置,英文目录的章级别标题名及编号的修改方式如下
-% \changes{v1.25s}{2021/05/05}{增加与双语目录配合的标题命令。}
+% \changes{v1.25t}{2021/05/05}{增加与双语目录配合的标题命令。}
% \end{function}
%
% \begin{function}{biname,binmuber}
@@ -317,7 +317,7 @@
% \changes{v1.10}{2021/01/08}{修复了 \opt{linktopage} 选项关闭时目录中标题编号无超链接的问题。}
% \changes{v1.23}{2021/03/19}{修复在 \pkg{ctex} v2.5.6 更新后 \cls{easybook} 与 \pkg{hyperref} 冲突问题。}
% \changes{v1.24}{2021/04/05}{增加 \pkg{hyperref} 超链接选项完整的支持。}
-% \changes{v1.25s}{2021/05/06}{模块名 \opt{link} 改为 \opt{refset},\opt{link} 作为兼容性保留。}
+% \changes{v1.25t}{2021/05/06}{模块名 \opt{link} 改为 \opt{refset},\opt{link} 作为兼容性保留。}
% \end{function}
%
% \begin{optdesc}
@@ -374,7 +374,7 @@
% \ding{229} 以上选项路径为 \opt{subfont/...}
% \changes{v1.10}{2021/01/08}{加入自定义非正文字体选项。}
% \changes{v1.23}{2021/02/08}{修复使用 \tn{zihao} 命令设置字体失效的问题。}
-% \changes{v1.25s}{2021/05/31}{其它字体模块名由 \opt{elsefont} 改为 \opt{subfont},并增加数学字体的选项 \opt{subfont/math}。}
+% \changes{v1.25t}{2021/05/31}{其它字体模块名由 \opt{elsefont} 改为 \opt{subfont},并增加数学字体的选项 \opt{subfont/math}。}
% \end{function}
%
% \begin{optdesc}
@@ -399,7 +399,7 @@
% \changes{v1.21}{2021/01/11}{增加 \opt{bibset} 选项,可以使用 \hologo{BibTeX} 或 \hologo{biber} 编译参考文献。}
% \changes{v1.23}{2021/02/23}{使用 \opt{bibset} 选项时可设置标注风格。}
% \changes{v1.24}{2021/04/09}{可以不载入参考文献包手动配置参考文献格式。}
-% \changes{v1.25s}{2021/05/12}{取消 \opt{bib-loadpkg} 选项,由是否设置参考文献数据库来决定载入宏包。}
+% \changes{v1.25t}{2021/05/12}{取消 \opt{bib-loadpkg} 选项,由是否设置参考文献数据库来决定载入宏包。}
% \end{function}
%
% \begin{optdesc}
@@ -605,7 +605,7 @@
% 上面几个选项用于设置脚注格式,\opt{fnparskip} 和 \opt{fnparindent} 选项仅在 \opt{fnhang = true} 时有效。\opt{fnhang} 用于将脚注设置为悬挂缩进的格式,\opt{fnmark-pos} 选项设置脚注编号的位置,正常文本或是上标形式。\opt{fnmark-num} 选项设置脚注编号的格式,默认为原生样式 \opt{plain},还可以改为 \opt{pifont} 的各个版本,从左往右依次为普通版、阴文衬线版、阳文无衬线版和阴文无衬线版,缺点是它们的编号仅包括1-10。
%
% \opt{fnmark-form} 是脚注标记的格式,在此设置字体命令会覆盖 \opt{subfont/footnote} 的设置,最后一个格式命令可以带有一个参数,这个参数接受脚注编号,一般配合 \opt{fnmark-num = plain} 使用。\opt{afterfnmark} 是脚注标记后的代码,一般用于设置标记与文本间的距离。
-% \changes{v1.25s}{2021/05/12}{增加脚注样式设置选项。}
+% \changes{v1.25t}{2021/05/12}{增加脚注样式设置选项。}
% \end{function}
%
% \subsection{目录样式}
@@ -624,7 +624,7 @@
% \opt{format} 是目录中标题的格式,可以设置字体和加入垂直间距等,垂直间距最好使用无间距重合的 \tn{addvspace} 命令,带有加号的 \opt{format+} 选项用于在已有的格式命令后附加内容。\opt{indent} 是目录中标题在页面左侧的缩进距离,应该有长度单位。\opt{rule} 选项中一般应当使用 \tn{tocrule} 命令,将会在接下来介绍。\opt{numsep} 是有编号的标题在目录中编号与标题的间距。
% \changes{v1.21}{2021/01/13}{增加配置目录样式的选项。}
% \changes{v1.24}{2021/04/20}{增加目录中编号与标题的间距选项 \opt{numsep}。}
-% \changes{v1.25s}{2021/05/14}{可以分别设置图片、表格和代码目录的格式。}
+% \changes{v1.25t}{2021/05/14}{可以分别设置图片、表格和代码目录的格式。}
% \end{function}
%
% \begin{function}[added = 2021-01-13,updated = 2021-04-20]{\tocrule,\EbNumberLine}
@@ -709,7 +709,7 @@
% \tn{end}\marg{环境名}
% \end{syntax}
% \pkg{tabularray} 是一个较新的宏包,不仅提供了 \pkg{tabularx}、\pkg{multirow}、和 \pkg{booktabs} 宏包的功能,并且不依赖其它宏包与它们同时使用不会产生冲突,还实现了用简便的键值列表方式设置表格样式。目前除了表头斜线以及跨页功能存在不足,其它方面已满足对表格绝大多数格式的需求,具体用法可见宏包的说明文档。
-% \changes{v1.25s}{2021/05/17}{使用功能更便捷齐全的 \pkg{tabularray} 宏包设置表格样式。}
+% \changes{v1.25t}{2021/05/17}{使用功能更便捷齐全的 \pkg{tabularray} 宏包设置表格样式。}
% \end{function}
%
% \subsection{列表}
@@ -873,7 +873,7 @@
% \tn{qtyrange}\oarg{键值列表}\marg{数字1}\marg{数字2}\marg{单位}
% \end{syntax}
% \pkg{siunitx} 宏包的 \tn{num} 命令可以输出以科学计数法表示的数值,单位格式化命令 \tn{unit} 包含文字项目(例如字母或数字)时,使用 . 和 \~{} 放置在单元乘积中间,并使用 \_ 和 \^{} 正确放置指定的下标和上标。格式化方法可在数学和文本模式下使用。而 \tn{qty} 命令可用来输出带有单位的量,\tn{qtyrange} 可以输出带有范围和单位的量。
-% \changes{v1.25s}{2021/05/18}{\pkg{siunitx} 宏包 v3.0.0 更新后用法改变,修改相关配置选项。}
+% \changes{v1.25t}{2021/05/18}{\pkg{siunitx} 宏包 v3.0.0 更新后用法改变,修改相关配置选项。}
% \end{function}
%
% \begin{ctexexam}
@@ -1011,7 +1011,7 @@
%<*class>
\NeedsTeXFormat{LaTeX2e}[2020/10/01]
\RequirePackage{l3keys2e}
-\ProvidesExplClass{easybook}{2021/06/04}{1.25s}{beta}
+\ProvidesExplClass{easybook}{2021/06/05}{1.25t}{beta}
\bool_set_false:N \l__eb_compile_draft_bool
\bool_set_false:N \l__eb_title_newline_bool
@@ -1255,7 +1255,7 @@
%<*package>
\NeedsTeXFormat{LaTeX2e}[2020/10/01]
\RequirePackage{etoolbox}
-\ProvidesExplPackage{easybase}{2021/06/04}{1.25s}{beta}
+\ProvidesExplPackage{easybase}{2021/06/05}{1.25t}{beta}
\cs_generate_variant:Nn \eb_ctex_define:nn { nx }
\cs_generate_variant:Nn \int_to_arabic:n { v }
@@ -1288,12 +1288,24 @@
}
\NewDocumentCommand{\eb@package@load}{O{}m}
{
- \seq_set_from_clist:No \l__eb_package_name_seq {#2}
+ \seq_set_split:Nnn \l__eb_package_name_seq { + } {#2}
\int_compare:oNnT
{ \seq_count:N \l__eb_package_name_seq } = { 1 }
{ \PassOptionsToPackage{#1}{#2} }
\seq_map_inline:Nn \l__eb_package_name_seq
- { \@ifpackageloaded{##1}{}{\RequirePackage{##1}} }
+ {
+ \regex_match:nnTF { [^\w] } {##1}
+ {
+ \regex_split:nnNT { \[ } {##1} \l_tmpa_seq
+ { \seq_pop_left:NN \l_tmpa_seq \l_tmpa_tl }
+ \@ifpackageloaded{\l_tmpa_tl}{}
+ {
+ \exp_last_unbraced:Nx \RequirePackage
+ { [\seq_use:Nn \l_tmpa_seq { , } }{\l_tmpa_tl}
+ }
+ }
+ { \@ifpackageloaded{##1}{}{\RequirePackage{##1}} }
+ }
}
\cs_new_protected:Npn \eb_at_end_preamble:n
{ \ctex_gadd_ltxhook:nn { env/document/before } }
@@ -1323,12 +1335,8 @@
\clist_map_inline:nn
{
- { svgnames } { xcolor },
- { stable,bottom } { footmisc },
- { normalem } { ulem },
{ protrusion = false } { microtype },
{ list = off } { bicaption },
- { shortlabels,inline } { enumitem },
{ many } { tcolorbox },
{ xindy } { imakeidx },
{ CJKmath } { xeCJK },
@@ -1401,15 +1409,17 @@
\eb@package@load
{
- xcolor,
- footmisc,setspace,
- amsmath,amsthm,thmtools,
- chemformula,siunitx,ulem,pifont,
- geometry,marginnote,nccfoots,
- pdfpages,graphicx,multicol,
- fancyhdr,titletoc,caption,
- tabularray,
- enumitem,
+ xcolor[svgnames]+
+ footmisc[stable,bottom]+
+ ulem[normalem]+
+ enumitem[shortlabels,inline]+
+ amsmath+amsthm+thmtools+
+ chemformula+siunitx+pifont+
+ geometry+marginnote+nccfoots+
+ pdfpages+multicol+
+ fancyhdr+titletoc+caption+
+ tabularray+
+ setspace+
listings
}
\cs_new_protected:Npn \eb_package_later_bool:nn #1#2
@@ -1759,14 +1769,14 @@
\ctex_define:n { tocset/#1 .meta:nn = { ctex/tocset/#1 } {##1} }
\eb_ctex_define:nn { tocset }
{
- #1/format .tl_set:c = l__eb_toc_#1_format_tl,
- #1/format+ .code:n =
+ #1/format .tl_set:c = l__eb_toc_#1_format_tl,
+ #1/format+ .code:n =
{ \tl_put_right:cn { l__eb_toc_#1_format_tl } {##1} },
- #1/format~+ .code:n =
+ #1/format~+ .code:n =
{ \tl_put_right:cn { l__eb_toc_#1_format_tl } {##1} },
- #1/indent .tl_set:c = l__eb_toc_#1_indent_tl,
- #1/rule .tl_set:c = l__eb_toc_#1_rule_tl,
- #1/numsep .tl_set:c = eb@toc@#1@numsep
+ #1/indent .dim_set:c = l__eb_toc_#1_indent_dim,
+ #1/rule .tl_set:c = l__eb_toc_#1_rule_tl,
+ #1/numsep .tl_set:c = eb@toc@#1@numsep
}
\seq_if_in:NnF \c__eb_toc_heading_level_seq { subsection }
{
@@ -1775,8 +1785,8 @@
}
\seq_pop:NN \c__eb_toc_heading_level_seq \l_tmpa_tl
\titlecontents{#1}
- [\use:c { l__eb_toc_#1_indent_tl }]
- {\use:c { l__eb_toc_#1_format_tl }}
+ [\dim_use:c { l__eb_toc_#1_indent_dim }]
+ {\tl_use:c { l__eb_toc_#1_format_tl }}
{
\ifbool{eb@titletoc@hang@fix}
{
@@ -1789,7 +1799,7 @@
}
}{}
}{}
- {\use:c { l__eb_toc_#1_rule_tl }}
+ {\tl_use:c { l__eb_toc_#1_rule_tl }}
}
\seq_map_function:NN
\c__eb_toc_heading_level_seq \eb_toc_assign_keys:n
@@ -2108,8 +2118,8 @@
{ \bisection{\eb@toc@title}{\eb@bitoc@title} }
}{
\IfBooleanTF{#2}
- {\eb_title_mark_notoc:n {\eb@toc@title}}
- {\eb_title_mark_intoc:n {\eb@toc@title}}
+ {\eb_title_mark_notoc:n { \eb@toc@title }}
+ {\eb_title_mark_intoc:n { \eb@toc@title }}
}
}
\cs_new_protected:Npn \eb_biber_title_level_bool:n #1
@@ -2310,7 +2320,7 @@
\c__eb_subfont_math_charter_tl
{ \eb_put_newtxmath:n { charter,noOT1 } }
}
- { \eb@package@load{newtxmath,bm} }
+ { \eb@package@load{newtxmath+bm} }
}
\fp_new:N \l__eb_spread_line_fp
@@ -2407,10 +2417,10 @@
}
\skip_set:Nn \parskip { 0pt plus 2pt minus 1pt }
-\skip_set:Nn \floatsep { 12pt plus 2pt minus 2pt }
\skip_set:Nn \intextsep { 14pt plus 2pt minus 2pt }
\skip_set:Nn \textfloatsep { 16pt plus 2pt minus 4pt }
\skip_set:Nn \multicolsep { 10pt plus 4pt minus 3pt }
+\skip_set:Nn \dbltextfloatsep { 16pt plus 2pt minus 4pt }
\setcounter{topnumber}{4}
\setcounter{bottomnumber}{4}
\setcounter{totalnumber}{8}
@@ -2418,6 +2428,7 @@
\tl_gset:Nn \topfraction { 0.8 }
\tl_gset:Nn \bottomfraction { 0.8 }
\tl_gset:Nn \floatpagefraction { 0.9 }
+\tl_gset:Nn \dblfloatpagefraction { 0.9 }
\tl_gset:Nn \ULthickness { 0.75pt }
\allowdisplaybreaks[4]
\DeclareGraphicsExtensions{.pdf,.png,.jpg,.eps,.tif}
@@ -2534,7 +2545,7 @@
\eb_at_end_preamble:n
{
\exp_last_unbraced:No
- \declaretheoremstyle{\c__eb_thmtools_keyval_tl}{easy-theorem}
+ \declaretheoremstyle { \c__eb_thmtools_keyval_tl }{easy-theorem}
\eb_thmname_set:nnn { exercise } { Exercise } { 练习 }
\cs_undefine:N \proof
\clist_map_inline:nn
@@ -2753,7 +2764,7 @@
{
standard~jigsaw,
nobeforeafter,tcbox~raise~base,
- top = 1.25st,bottom = 1.25st,left = 1.25st,right = 1.25st,
+ top = 1.25tt,bottom = 1.25tt,left = 1.25tt,right = 1.25tt,
boxrule = 0.75pt,arc = 1pt,
colback = #1,opacityback = 0.12,colframe = #1,#3
}{#2}
diff --git a/macros/latex/contrib/easybook/easybook.pdf b/macros/latex/contrib/easybook/easybook.pdf
index 58e5a92952..35cf9e4b5a 100644
--- a/macros/latex/contrib/easybook/easybook.pdf
+++ b/macros/latex/contrib/easybook/easybook.pdf
Binary files differ
diff --git a/macros/latex/contrib/eq-pin2corr/README.md b/macros/latex/contrib/eq-pin2corr/README.md
index 78c08c4d5f..7e20ddd9d4 100644
--- a/macros/latex/contrib/eq-pin2corr/README.md
+++ b/macros/latex/contrib/eq-pin2corr/README.md
@@ -1,6 +1,6 @@
The eq-pin2corr package
Author: D. P. Story
-Dated: 2021-02-20
+Dated: 2021-05-29
This package is an add-on to the quiz environment of the exerquiz
package (part of the acrotex bundle). It adds PIN security to a quiz created by
@@ -11,6 +11,15 @@ the students effort on that quiz.
The package works for a the usual workflows
+What's New (2021-05-29) Added (optional) PIN security to the Begin Quiz button.
+ Added (an optional) `warn and freeze' feature to a quiz. Added (an optional)
+ \qzResetTally field that holds the number of times a student retakes any given
+ quiz. Add (an optional) feature where the document author can set the maximum
+ number of times a student can retake a quiz. Demo files for these
+ features are found on the AcroTeX Blog site:
+ http://www.acrotex.net/blog/?p=1516
+ http://www.acrotex.net/blog/?p=1519
+
D. P. Story
www.acrotex.net
blog.acrotex.net
diff --git a/macros/latex/contrib/eq-pin2corr/doc/eq-pin2corr.pdf b/macros/latex/contrib/eq-pin2corr/doc/eq-pin2corr.pdf
index 92c3cec32b..bd008ba7f1 100644
--- a/macros/latex/contrib/eq-pin2corr/doc/eq-pin2corr.pdf
+++ b/macros/latex/contrib/eq-pin2corr/doc/eq-pin2corr.pdf
Binary files differ
diff --git a/macros/latex/contrib/eq-pin2corr/doc/eqpin2corrman.pdf b/macros/latex/contrib/eq-pin2corr/doc/eqpin2corrman.pdf
index 0103c028ca..55e7438520 100644
--- a/macros/latex/contrib/eq-pin2corr/doc/eqpin2corrman.pdf
+++ b/macros/latex/contrib/eq-pin2corr/doc/eqpin2corrman.pdf
Binary files differ
diff --git a/macros/latex/contrib/eq-pin2corr/doc/eqpin2corrman.tex b/macros/latex/contrib/eq-pin2corr/doc/eqpin2corrman.tex
index aa2f13dbc9..a660f2c3bb 100644
--- a/macros/latex/contrib/eq-pin2corr/doc/eqpin2corrman.tex
+++ b/macros/latex/contrib/eq-pin2corr/doc/eqpin2corrman.tex
@@ -6,16 +6,27 @@
\documentclass[10pt]{article}
\usepackage[fleqn]{amsmath}
%\usepackage{hyperref}
-\usepackage[
- web={centertitlepage,designv,forcolorpaper,latextoc,pro},
+\usepackage[%
+ web={centertitlepage,
+ designv,
+ forcolorpaper,
+ latextoc,
+% uselatexparts,
+ extended
+ },
exerquiz,
% linktoattachments,
aebxmp
]{aeb_pro}
+\usepackage{aeb_mlink}
\usepackage[!showscore]{eq-pin2corr}
%\previewOn\pmpvOn
+%\tocPartTitle{\protect\makebox[0pt][r]{\thepart\hspace{.5em}}#1}
+\tocPartTitle{\tops{\protect\makebox[0pt][r]{\thepart\hspace{.5em}}}{\thepart\space}#1}
+
+
\useBeginQuizButton[\CA{Begin}]
\useEndQuizButton[\CA{End}]
\useMCCircles
@@ -115,8 +126,8 @@
email={dpstory@acrotex.net},
subject={Documentation for the eq-pin2corr package from AcroTeX: Apply PIN security to quizzes},
talksite={\url{www.acrotex.net}},
- version={0.5, 2021/15/06},
- Keywords={AcroTeX, mini-toc},
+ version={2.0, 2021/05/29},
+ Keywords={AcroTeX, PIN security},
copyrightStatus=True,
copyrightNotice={Copyright (C) \the\year, D. P. Story},
copyrightInfoURL={http://www.acrotex.net}
@@ -146,7 +157,7 @@
if (resp != null) {
var f=this.getField("txt");
f.value=Collab.hashString(resp);
- }
+ }
\end{defineJS}
@@ -204,6 +215,13 @@ _path=_path.substring(0,pos)+"/"+manualfilename;
\hypersetup{linktocpage}
+\part{Version 1.0}\label{prt:One}
+
+In this part of the manual, we document the features of the \pkg{eq-pin2corr} package
+as they originally appeared. In addition to the features documented here, version~2.0
+adds a number of features, some of which were suggested by Tahir Y. These additional features
+are documented in \hyperref[prt:Two]{Part~\ref*{prt:Two}} on page~\pageref{prt:Two} of this manual.
+
\section{Introduction}
This package is an add-on to the \env{quiz} environment of the \pkg{exerquiz}
@@ -297,7 +315,7 @@ The minimal preamble for documents that use the \pkg{eq-pin2corr} package.
\begin{Verbatim}[xleftmargin=\amtIndent,fontsize=\small,commandchars=!()]
!1\documentclass{article}
!2\usepackage[!ameta(options)]{web}
-\usepackage[!ameta(options)]{exerquiz}!textbf([2021/02/17])
+\usepackage[!ameta(options)]{exerquiz}!textbf([2021/04/27])
\usepackage[!ameta(options)]{eq-pin2corr}
...
\declPINId{!ameta(pin-num)}{!ameta(hash-string)}
@@ -305,14 +323,14 @@ The minimal preamble for documents that use the \pkg{eq-pin2corr} package.
...
\begin{document}
\end{Verbatim}
-\eVerb A recent version of \pkg{exerquiz} (2021/02/17 or later) is required;
-\pkg{eq-pin2corr} brings in the \pkg{eq-save} package (2021/02/17 or later).
+\eVerb A recent version of \pkg{exerquiz} (2021/05/29 or later) is required;
+\pkg{eq-pin2corr} brings in the \pkg{eq-save} package (2021/04/27 or later).
\section{Package options}
There are two options for this package: \opt{showscore} and \opt{!showscore}.
If you took the test on page~3, you will have noticed that when \uif{End
-Quiz} control is pressed the phase \textsf{"Success! Now save and send to the
+Quiz} control is pressed the phrase \textsf{"Success! Now save and send to the
instructor"} appears in the \cs{ScoreField} or the \cs{PointsField}, this is
the default behavior. Passing \FmtMP{\opt{showscore}}\opt{showscore} in the
optional argument list of \pkg{eq-key2corr} causes the actual score to appear
@@ -330,24 +348,32 @@ Refer to the \texttt{eformsman.pdf} for a discussion of \cs{flJSStr}.
\paragraph*{Local controls.} The two options can be turned off and on locally with \FmtMP{\cs{showScoreOff}}\cs{showScoreOff} and
\FmtMP{\cs{showScoreOn}}\cs{showScoreOn} commands.
-\section{Setting the pin-hash values}
+\section{Setting the pin-hash values}\label{s:pin-hash}
In the preamble, as indicated above, are two commands, the first is required,
the second is optional.
\bVerb\takeMeasure{\string\declPINId\darg{\ameta{pin-num}}\darg{\ameta{hash-string}}}%
%\setlength{\dimen0}{\wd\webtempboxi+2\fboxsep+2\fboxrule}%
-\def\1{\rlap{\sffamily\hskip\linewidth(optional)}}
+%\def\1{\rlap{\sffamily\hskip\linewidth(\cs{numPINId} expands to \ameta{pin-num})}}
+\def\2{\rlap{\sffamily\hskip\linewidth(optional)}}
\begin{dCmd}[commandchars=!()]{\bxSize}
\declPINId{!ameta(pin-num)}{!ameta(hash-string)}
-!1\classPINVar{!ameta(class-pin-var)}
+\numPINId
+!2\classPINVar{!ameta(class-pin-var)}
\end{dCmd}
-\eVerb It is through the \cs{declPINId} command that the PIN security is set up.
-
-\paragraph*{\cs{declPINId\darg{\ameta{pin-num}}\darg{\ameta{hash-string}}}} The \ameta{pin-num} is a number, perhaps four digits,
-that is used to pass through the security of the \uif{Correct} button.\footnote{The \ameta{pin-num} does not have to be a number,
-it can be any password (passcode) that is easy to remember. I prefer a four digit number.} Once you decide on the
-PIN number, you need to generate the corresponding \emph{hash-string}. The hash-string is obtained from the demo file
-\texttt{get-hash-string.pdf}, the contents of that files is reproduced below.
+\eVerb It is through the \cs{declPINId} command that the PIN security is set
+up. The command \cs{numPINId} expands to \ameta{pin-num} is not normally
+typeset into the document, but is used for documentation or demonstration
+purposes, such as in this document.
+
+\paragraph*{\cs{declPINId\darg{\ameta{pin-num}}\darg{\ameta{hash-string}}}}
+The \ameta{pin-num} is a number, perhaps four digits, that is used to pass
+through the security of the \uif{Correct} button.\footnote{The
+\ameta{pin-num} does not have to be a number, it can be any password
+(passcode) that is easy to remember. I prefer a four digit number.} Once you
+decide on the PIN number, you need to generate the corresponding
+\emph{hash-string}. The hash-string is obtained from the demo file
+\texttt{get-hash-string.pdf}, the contents of that file is reproduced below.
\begin{aebQuote}
\pushButton[\CA{Push}\AAmouseup{\btnAct}]{btn}{}{11bp}\olBdry
\textField[\textSize{8}]{txt}{2in}{11bp}\olBdry
@@ -416,6 +442,318 @@ commands.
\eVerb These can placed anywhere outside a \env{quiz} environment. The
commands take effect beginning at the next quiz in the document.
+\part{Version 2.0}\label{prt:Two}
+
+\section{Introduction}
+
+Version~2 of this package provides additional security options for the
+document author (instructor or professor).
+
+\newtopic\noindent The source files (TEX) for the working examples in this
+part of the manual may be found on the {\AcroTeX} Blog web site:
+\begin{itemize}
+ \item \href{http://www.acrotex.net/blog/?p=1516}{\pkg{eq-pin2corr}: PIN security with warning and freezing}\footnote
+ {\url{http://www.acrotex.net/blog/?p=1516}}
+ \item \href{http://www.acrotex.net/blog/?p=1519}{\protect\pkg{eq-pin2corr}:
+ PIN security on \protect\uif{Begin Quiz} and tracking retakes of a quiz}\footnote
+ {\url{http://www.acrotex.net/blog/?p=1519}}
+\end{itemize}
+
+\section{Security with warn and freeze on \tops{\protect\uif}{}{End Quiz}}
+
+When the student presses the \uif{End Quiz} control, an alert dialog box
+opens which warns\FmtMP{warn and freeze} the user that quiz will be `frozen'
+which means active form fields are made readonly, except for the \uif{Ans}
+button. The user has a choice of responding \uif{Yes} or \uif{No}, in the
+later case, the student can continue with the quiz. If the student presses
+\uif{Yes}, the quiz is frozen, all the student can do is to save the file and
+to send it to the instructor.
+\bVerb\takeMeasure{\uif{Click 'Yes' to end the quiz or 'No' to continue working on the quiz.}\}}%
+\settowidth{\eflength}{\cs{useWarnEndQuiz}}
+\def\1{\leavevmode\rlap{\hspace{\eflength} \%\sffamily{ use with \cs{usePINCorrBtn}}}}%
+\def\2{\leavevmode\rlap{\sffamily\hskip\linewidth(Turn off PIN security)}}%
+\begin{dCmd}[commandchars=!()]{\bxSize}
+!1\useWarnEndQuiz
+\restoreEndQuiz
+\flJSStr{\EndQuizG@te@Msg}{!uif(Warning:)
+!uif(Are you sure you want to end this quiz?)\r\r
+!uif(The quiz will be frozen and no more changes will be allowed.)
+!uif(Click 'Yes' to end the quiz or 'No' to continue working on the quiz.)}
+\end{dCmd}
+\eVerb Expand \cs{useWarnEndQuiz} prior to the quiz for which the `warn and
+freeze' security is to be employed. After the quiz, optionally expand
+\cs{restoreEndQuiz} to its original definition.
+
+\useWarnEndQuiz
+
+\newtopic\noindent
+Prior to the following quiz, \cs{usePINCorrBtn}\cs{useWarnEndQuiz} are
+expanded.
+\begin{quiz*}{qz2}
+Solve each, passing is 100\%.
+\begin{questions}
+ \item The sum of 1 and 1 is \dots
+\begin{answers}{8}
+\bChoices
+ \Ans0 0\eAns
+ \Ans0 1\eAns
+ \Ans1 2\eAns
+ \Ans0 3\eAns
+ \Ans0 4\eAns
+\eChoices
+\end{answers}
+ \item $ \cos(\pi) = \RespBoxMath{-1}{1}{.0001}{[0,1]}\cgBdry[1bp]
+\CorrAnsButton{-1} $
+
+\item $\displaystyle\frac{d}{dx}{\sin(x)}=\RespBoxMath{cos(x)}{4}{.0001}{[0,1]}\cgBdry[1bp]
+\CorrAnsButton{cos(x)} $
+\end{questions}
+\end{quiz*}\quad\ScoreField[\rectW{2.25in}]\currQuiz\olBdry\CorrButton{\currQuiz} (PIN: \numPINId)
+
+\noindent
+Answers: \AnswerField\currQuiz
+
+\section{PIN security with freeze on \tops{\protect\uif}{}{Correct}}
+
+In the previous section, the quiz is made readonly (frozen) when the student
+presses the \uif{End Quiz} control. We can also freeze the quiz when the
+\uif{Correct} control is pressed.
+
+This strategy allows the student to take and retake the quiz if the score is
+not to his liking; assuming the \texttt{showscore} option is in effect.
+Freezing the quiz on the \uif{Correct} control allows the quiz to be marked
+up and returned to the student, without fear the student will later modify
+his answers and complain to the teacher that the score is incorrect.
+
+\newtopic\noindent To freeze the quiz when the \uif{Correct} control is pressed,
+expand \cs{FreezeThisQuiz}.
+\bVerb\takeMeasure{\string\FreezeThisQuizNot}%
+\def\1{\rlap{\sffamily\hskip\linewidth(use with \cs{usePINCorrBtn})}}
+\begin{dCmd}[commandchars=!()]{\bxSize}
+!1\FreezeThisQuiz
+\FreezeThisQuizNot
+\end{dCmd}
+\eVerb There are two methods of expanding \cs{FreezeThisQuiz}: (1) expand
+prior to the quiz (and expand \cs{FreezeThisQuizNot} following the quiz); or
+(2) pass \cs{FreezeThisQuiz} through the optional argument of the
+\cs{CorrButton} (the \uif{Correct} control) using the syntax
+\verb|\CorrButton[\cmd{\FreezeThisQuiz}]{\currQuiz}|. The latter method make
+the change local, hence \cs{FreezeThisQuizNot} is not needed following the
+quiz.
+
+\showScoreOn
+\restoreEndQuiz
+
+\newtopic\noindent
+The following quiz uses \verb|\CorrButton[\cmd{\FreezeThisQuiz}]{\currQuiz}|
+at the end of the quiz. Prior to this quiz, \cs{showScoreOn} and
+\cs{restoreEndQuiz} are expanded, the later to recover from `warn and freeze'
+of the previous quiz.
+\begin{quiz*}{qz3}
+Solve each, passing is 100\%.
+\begin{questions}
+ \item The sum of 1 and 1 is \dots
+\begin{answers}{8}
+\bChoices
+ \Ans0 0\eAns
+ \Ans0 1\eAns
+ \Ans1 2\eAns
+ \Ans0 3\eAns
+ \Ans0 4\eAns
+\eChoices
+\end{answers}
+ \item $ \cos(\pi) = \RespBoxMath{-1}{1}{.0001}{[0,1]}\cgBdry[1bp]
+\CorrAnsButton{-1} $
+
+\item $\displaystyle\frac{d}{dx}{\sin(x)}=\RespBoxMath{cos(x)}{4}{.0001}{[0,1]}\cgBdry[1bp]
+\CorrAnsButton{cos(x)} $
+\end{questions}
+\end{quiz*}\quad\ScoreField[\rectW{2.25in}]\currQuiz\olBdry\CorrButton[\cmd{\FreezeThisQuiz}]{\currQuiz} (PIN: \numPINId)
+
+\noindent
+Answers: \AnswerField\currQuiz
+
+\section{Tallying the number of retakes of a quiz}
+
+One problem with digital PDF quizzes (\`a la Acro\negthinspace\TeX) is a
+student takes and retakes a quiz until a desired score of 100\% is attained,
+assuming no PIN security is on the \uif{Correct} control. This problem is
+partially mitigated by the PIN security on the \uif{Correct} control, but
+still, teachers, when administering an exam for credit, do not like to see
+student retaking the quiz multiple times. The \pkg{eq-pin2corr} package now offers
+the following commands:
+\bVerb\takeMeasure{\string\qzResetTally[\ameta{options}]}%
+\def\1{\rlap{\sffamily\hskip\linewidth(optionally, use with \cs{usePINCorrBtn})}}
+\begin{dCmd}[commandchars=!()]{\bxSize}
+!1\useBeginQuizCnt
+\restorBeginQuiz
+\qzResetTally[!ameta(options)]
+\end{dCmd}
+\eVerb Expanding \cs{useBeginQuizCnt} modifies the action of the \uif{Begin
+Quiz} control to count the number of times the student as retaken the same
+quiz. The count show up in the readonly text field created by
+\cs{qzResetTally}. Restore the original action of the \uif{Begin Quiz} control
+by expanding \cs{restorBeginQuiz}.
+
+This next quiz has PIN security with freeze on the \uif{Correct} control. The
+\uif{Begin Quiz} controls tracks the number of times the student
+\emph{re-takes the quiz}. Prior to the quiz we expand
+\cs{showScoreOn}\cs{useBeginQuizPIN}\cs{useBeginQuizCnt}. The
+\cs{qzResetTally} field is place to the right of the \cs{CorrButton} command.
+Speaking of the \cs{CorrButton}, \verb|\cmd{\FreezeThisQuiz}| is passed to
+this command through its optional argument so that the quiz is frozen when
+the instructor presses the \uif{Correct} control and successfully enters the
+PIN.
+
+\showScoreOn
+\useBeginQuizPIN
+\useBeginQuizCnt
+%\restorBeginQuiz
+
+\begin{quiz*}{qz4}
+\textbf{Instructions:} Take and retake this quiz until you obtain 100\%.
+\begin{questions}
+ \item The sum of 1 and 1 is \dots
+\begin{answers}{8}
+\bChoices
+ \Ans0 0\eAns
+ \Ans0 1\eAns
+ \Ans1 2\eAns
+ \Ans0 3\eAns
+ \Ans0 4\eAns
+\eChoices
+\end{answers}
+ \item $ \cos(\pi) = \RespBoxMath{-1}{1}{.0001}{[0,1]}\cgBdry[1bp]
+\CorrAnsButton{-1} $
+
+\item $\displaystyle\frac{d}{dx}{\sin(x)}=\RespBoxMath{cos(x)}{4}{.0001}{[0,1]}\cgBdry[1bp]
+\CorrAnsButton{cos(x)} $
+\end{questions}
+\end{quiz*}\quad\ScoreField[\rectW{2.25in}]\currQuiz\olBdry\CorrButton[\cmd{\FreezeThisQuiz}]{\currQuiz} (PIN: \numPINId)\hfill\qzResetTally
+
+\noindent
+Answers: \AnswerField\currQuiz
+
+\section{Setting the maximum number of retakes}
+
+This quiz has PIN security on the \uif{Correct} control. The \uif{Begin Quiz} controls
+tracks the number of times the student \emph{re-takes the quiz}. It also sets the maximum
+number of times the student retake the quiz.
+\bVerb\takeMeasure{\string\setMaxRetakes\darg{\ameta{qz-name}\darg{\ameta{num}}}}%
+\def\1{\rlap{\sffamily\hskip\linewidth(use with \cs{usePINCorrBtn})}}
+\begin{dCmd}[commandchars=!()]{\bxSize}
+\setMaxRetakes{!ameta(qz-name)}{!ameta(num)}
+\nMaxRetakes{!ameta(qz-name)}
+\end{dCmd}
+\eVerb When declared prior to the quiz whose name is \ameta{qz-name},
+\cs{setMaxRetakes} sets the maximum of times a student can \emph{retake the same
+quiz} to \ameta{num}, where \ameta{num} is a nonnegative integer. Declaring
+\cs{setMaxRetakes\darg{\ameta{qz-name}}\darg{0}} means the student may only
+take the quiz once (no retakes allowed); \cs{setMaxRetakes\darg{\ameta{qz-name}}\darg{2}} means he
+can retake the quiz twice (for a total of three times).
+
+The command \cs{nMaxRetakes\darg{\ameta{qz-name}}} is a way of typesetting
+the number \ameta{num} into the document as part of the instructions for the
+quiz, for example.
+
+\showScoreOn
+\useBeginQuizCnt
+\setMaxRetakes{qz5}{2}
+
+\newtopic\noindent The following quiz has PIN security with freeze under the \uif{Correct} control and it
+allows the student to retake the quiz at most \nMaxRetakes{qz5}~times.
+
+\begin{quiz*}{qz5}
+Solve each, passing is 100\%. Be aware that you will be allowed to
+\emph{retake} this quiz at most \nMaxRetakes{qz5}~times.
+\begin{questions}
+ \item The sum of 1 and 1 is \dots
+\begin{answers}{8}
+\bChoices
+ \Ans0 0\eAns
+ \Ans0 1\eAns
+ \Ans1 2\eAns
+ \Ans0 3\eAns
+ \Ans0 4\eAns
+\eChoices
+\end{answers}
+ \item $ \cos(\pi) = \RespBoxMath{-1}{1}{.0001}{[0,1]}\cgBdry[1bp]
+\CorrAnsButton{-1} $
+
+\item $\displaystyle\frac{d}{dx}{\sin(x)}=\RespBoxMath{cos(x)}{4}{.0001}{[0,1]}\cgBdry[1bp]
+\CorrAnsButton{cos(x)} $
+\end{questions}
+\end{quiz*}\quad\ScoreField[\rectW{2.25in}]\currQuiz\olBdry\CorrButton[\cmd{\FreezeThisQuiz}]{\currQuiz} (PIN: \numPINId)\hfill\qzResetTally
+
+\noindent
+Answers: \AnswerField\currQuiz
+
+\section{PIN Security for \tops{\protect\uif}{}{Begin Quiz} and \tops{\protect\uif}{}{Correct}}
+
+For this final example, the student can see his quiz score (which can be
+optionally changed by expanding \cs{showScoreOff}); however, to retake the
+quiz a PIN must be entered when the \uif{Begin Quiz} button is pressed. The
+PIN under the \uif{Begin Quiz} control is (usually) different from the PIN
+under the \uif{Correct} button.
+\bVerb\takeMeasure{\string\flJSStr\darg{\string\BeginQuizG@te@Msgii}\{\uif{Press the Begin Quiz}}%
+%\def\1{\rlap{\sffamily\hskip\linewidth(\cs{numRePINId} expands to \ameta{pin-num})}}
+\begin{dCmd}[commandchars=!()]{\bxSize}
+\declRePINId{!ameta(pin-num)}{!ameta(hash-string)}
+\numRePINId
+\flJSStr{\BeginQuizG@te@Msgi}{!uif(Enter the PIN number)
+!uif(to retake this quiz)}
+\flJSStr{\BeginQuizG@te@Msgii}{!uif(Press the Begin Quiz)
+!uif(control to begin the quiz again)}
+\end{dCmd}
+\eVerb \cs{declRePINId} is used to declare the PIN number for retaking the
+quiz, as well as the corresponding hash string. Refer to \cs{declPINId} above
+(\hyperref[s:pin-hash]{Section~\ref{s:pin-hash}}) for information of how to
+acquire the hash string for the PIN.
+
+The command \cs{numREPINId} expands to \ameta{pin-num} is not normally
+typeset into the document, but is used for documentation or demonstration
+purposes, such as in this document.
+
+The final two, \cs{BeginQuizG@te@Msgi} and \cs{BeginQuizG@te@Msgii} expand to
+the messages the respondent reads. These may be redefined as desired.
+
+\newtopic\noindent
+The PIN for the \uif{Begin Quiz} button is \numRePINId. The \uif{Begin Quiz}
+button does not need a PIN for the first time it is pressed. It requires a
+PIN after the first press.
+
+\showScoreOn
+\useBeginQuizPIN
+
+\begin{quiz*}{qz6}
+Solve each, passing is 100\%.
+\begin{questions}
+ \item The sum of 1 and 1 is \dots
+\begin{answers}{8}
+\bChoices
+ \Ans0 0\eAns
+ \Ans0 1\eAns
+ \Ans1 2\eAns
+ \Ans0 3\eAns
+ \Ans0 4\eAns
+\eChoices
+\end{answers}
+ \item $ \cos(\pi) = \RespBoxMath{-1}{1}{.0001}{[0,1]}\cgBdry[1bp]
+\CorrAnsButton{-1} $
+
+\item $\displaystyle\frac{d}{dx}{\sin(x)}=\RespBoxMath{cos(x)}{4}{.0001}{[0,1]}\cgBdry[1bp]
+\CorrAnsButton{cos(x)} $
+\end{questions}
+\end{quiz*}\quad\ScoreField[\rectW{2.25in}]\currQuiz\olBdry\CorrButton{\currQuiz} (PIN: \numPINId)\hfill\qzResetTally
+
+\noindent
+Answers: \AnswerField\currQuiz\vcgBdry[6pt]
+
+This kind of security is best when the students are taking a quiz in a
+computer lab with a proctor in the room. The student can ask the proctor to
+reset the quiz. Note that we keep a tally on the number of requests as the
+proctor may not write it down or remember.
+
\medbreak\noindent
Now, I really must get back to retirement.\enspace\dps
diff --git a/macros/latex/contrib/eq-pin2corr/eq-pin2corr.dtx b/macros/latex/contrib/eq-pin2corr/eq-pin2corr.dtx
index 091ba8a94f..537bc48894 100644
--- a/macros/latex/contrib/eq-pin2corr/eq-pin2corr.dtx
+++ b/macros/latex/contrib/eq-pin2corr/eq-pin2corr.dtx
@@ -16,7 +16,7 @@
%</copyright>
%<package>\NeedsTeXFormat{LaTeX2e}
%<package>\ProvidesPackage{eq-pin2corr}
-%<package> [2021/02/20 v1.0 Applies PIN security to quizzes]
+%<package> [2021/05/29 v2.0 Applies PIN security to quizzes]
%<*driver>
\documentclass{ltxdoc}
%\usepackage[colorlinks,hyperindex=false,linktocpage,bookmarksnumbered]{hyperref}
@@ -52,6 +52,19 @@
{-3.5ex \@plus -1ex \@minus -.2ex}%
{2.3ex \@plus.2ex}%
{\normalfont\Large\bfseries}}
+\renewcommand{\subsection}
+ {\renewcommand{\@seccntformat}[1]{\thesubsection\quad}%
+ \@startsection {subsection}{1}{\z@}%
+ {-3.5ex \@plus -1ex \@minus -.2ex}%
+ {2.3ex \@plus.2ex}%
+ {\normalfont\large\bfseries}}
+\renewcommand{\subsubsection}
+ {\renewcommand{\@seccntformat}[1]{\thesubsubsection\quad}%
+ \@startsection {subsubsection}{1}{\z@}%
+ {-3.5ex \@plus -1ex \@minus -.2ex}%
+ {2.3ex \@plus.2ex}%
+ {\normalfont\large\bfseries}}
+%
\renewcommand{\paragraph}
{\renewcommand{\@seccntformat}[1]{\theparagraph\unskip\,}%
\@startsection{paragraph}{4}{0pt}{6pt}{-3pt}{\bfseries}}
@@ -63,8 +76,9 @@
{\list{}{\leftmargin\amtIndent}%
\item\relax}
{\endlist}
+\let\@latex@warning\@gobble
\makeatother
-\InputIfFileExists{aebdocfmt.def}{\PackageWarning{eq-pin2corr}{Inputting aebdocfmt.def}}
+\InputIfFileExists{aebdocfmt.def}{\PackageInfo{eq-pin2corr}{Inputting aebdocfmt.def}}
{\def\IndexOpt{\DescribeMacro}\def\IndexKey{\DescribeMacro}\let\setupFullwidth\relax
\PackageInfo{eq-pin2corr}{aebdocfmt.def cannot be found}}
\begin{document}
@@ -147,8 +161,8 @@
\DeclareOption{showscore}{\PINshowScoretrue}
\DeclareOption{!showscore}{\PINshowScorefalse}
\ProcessOptions\relax
-\RequirePackage{exerquiz}[2021/02/17]
-\RequirePackage{eq-save}[2021/02/17]
+\RequirePackage{exerquiz}[2021/05/21]
+\RequirePackage{eq-save}[2021/04/27]
% \end{macrocode}
% \section{Package commands}
% Implement local versions\DescribeMacro{\showScoreOn}\DescribeMacro{\showScoreOff}{} of the package options \opt{showscore} and \opt{!showscore},
@@ -157,37 +171,38 @@
\def\showScoreOn{\PINshowScoretrue}
\def\showScoreOff{\PINshowScorefalse}
% \end{macrocode}
+% \subsection{PIN security on the \textsf{Correct} control}
% Define \DescribeMacro{\SaveAndSendMsg} a message that appears on the console when the PIN entered is not correct.
% \begin{macrocode}
\flJSStr[noquotes]{\SaveAndSendMsg}{Success! %
Now save and send to the instructor}
% \end{macrocode}
-% Make changes to the \uif{End Quiz} control and to the \uif{Correct} control.
-% Begin by modifying the \DescribeMacro{\postSubmitQuiz}\cs{postSubmitQuiz} command, which is a hook within the executing
-% code of the \uif{End Quiz} control.
+% \DescribeMacro\postSubmitQuizPIN
+% Begin by modifying the \cs{postSubmitQuiz} command,
+% which is a hook within the executing code of the \uif{End Quiz} control.
% \begin{macrocode}
-\begin{defineJS*}[\makeesc\@\makecmt\%]{\postSubmitQuiz}
+\begin{defineJS*}[\makeesc\@\makecmt\%]{\postSubmitQuizPIN}
// Begin post submit quiz code%
@ifPINSecurity%
@ifPINshowScore@else
- var f = this.getField("ScoreField.@oField");
- if ( f!=null ) {
- f.textSize=0;
- f.value = "@SaveAndSendMsg";
- } else {
- var f = this.getField("PointsField.@oField");
- if (f!=null) {
+ var f = this.getField("ScoreField.@oField");
+ if ( f!=null ) {
f.textSize=0;
- f.value = "Success! Now save and send to instructor";
- }
- }@fi@fi
- oRecordOfQuizData["ScoreData.@oField"]=%
+ f.value = "@SaveAndSendMsg";
+ } else {
+ var f = this.getField("PointsField.@oField");
+ if (f!=null) {
+ f.textSize=0;
+ f.value = "@SaveAndSendMsg";
+ }
+ }@fi@fi
+ oRecordOfQuizData["ScoreData.@oField"]=%
[1*Score,1*NQuestions,1*ptScore,1*NPointTotal];
- oRecordOfQuizData["RightWrong.@oField"]=%
+ oRecordOfQuizData["RightWrong.@oField"]=%
eval(RightWrong.toSource());
- oRecordOfQuizData["ProbDist.@oField"]=%
+ oRecordOfQuizData["ProbDist.@oField"]=%
eval(ProbDist.toSource());
- cntCorrectResponses();
+ cntCorrectResponses();
\end{defineJS*}
% \end{macrocode}
% The command name for the action of the \uif{End Quiz} control is
@@ -195,10 +210,15 @@ eval(ProbDist.toSource());
% We save this and pre-pend a single code line, as needed.
% \begin{macrocode}
\let\eQzBtnActnsSave\eQzBtnActns
-\def\eQzBtnActns{\ifPINshowScore\else
+\def\makeEndQuizPIN{%
+ \let\eQzBtnActns\eQzBtnActnsPIN
+ \let\postSubmitQuiz\postSubmitQuizPIN
+}
+\def\eQzBtnActnsPIN{\ifPINshowScore\else
var bDisplaySilent=true;\r\fi
\eQzBtnActnsSave
}
+%\makeEndQuizPIN
% \end{macrocode}
% The command name for the action of the \uif{Correct} control is \cs{CorrBtnActionsJS}
% we save this and later modify it.
@@ -210,8 +230,10 @@ eval(ProbDist.toSource());
% \begin{macrocode}
\newif\ifPINSecurity \PINSecurityfalse
\def\usePINCorrBtn{\PINSecuritytrue
+ \makeEndQuizPIN % dps5-25
\let\CorrBtnActionsJS\CorrBtnActionsPwdJS}
\def\restoreCorrBtn{\PINshowScoretrue\PINSecurityfalse
+ \restoreEndQuiz % dps5-25
\let\CorrBtnActionsJS\CorrBtnActionsJSSave}
% \end{macrocode}
% The instructor can tediously press the \uif{Correction} button, or place
@@ -226,18 +248,31 @@ eval(ProbDist.toSource());
%and string hash values. The \DescribeMacro\classPINVar\cs{classPINVar} is a convenient
%way of declaring the PIN variable name; eg, if |\classPINVar{_PinCode1}| is declared
%prior to the \env{quiz} environment, the instructor need not manually enter the PIN.
+%\changes{v1.1}{2021/05/22}{Added \string\cs{ifFreezeQuiz} switch and \string\cs{FreezeThisQuiz}
+%convenience macro}
% \begin{macrocode}
\def\classPINVar#1{\def\PINclassPV{#1}}
\let\PINclassPV\@empty
% \end{macrocode}
+% \DescribeMacro\FreezeThisQuiz
+% Causes the interactive parts of a quiz to be readonly. This can be passed
+% into the \uif{End Quiz} control so that when the student presses \uif{End Quiz}
+% the quiz will be frozen (after a warning); or through the \uif{Correct} button,
+% then the returned quiz will be readonly.
+% \begin{macrocode}
+\newif\ifFreezeQuiz\FreezeQuizfalse
+\def\FreezeThisQuiz{\FreezeQuiztrue}
+\def\FreezeThisQuizNot{\FreezeQuizfalse}
+% \end{macrocode}
+% \DescribeMacro\CorrBtnActionsPwdJS
% The modified action for the \uif{Correct} button.
% we save this and later modify it.
% \begin{macrocode}
-\begin{defineJS*}[\makeesc\!\makecmt\%]{\CorrBtnActionsPwdJS}
-!ifx!PINclassPV!@empty%
-var userPIN = "";!else%
-var userPIN = "!PINclassPV";!fi
-if (userPIN == "" ) userPIN = undefined;
+\begin{defineJS*}[\makeesc\|\makecmt\%]{\CorrBtnActionsPwdJS}
+|ifx|PINclassPV|@empty%
+var userPIN = "";|else%
+var userPIN = "|PINclassPV";|fi
+if (userPIN == "") userPIN = undefined;
try {
if ( typeof eval(userPIN) == "undefined") userPIN = undefined;
} catch(e) { userPIN = undefined; }
@@ -247,34 +282,245 @@ if (typeof userPIN == "undefined") {
cTitle: "View Answers",
bPassword: true
});
- var _resp=Collab.hashString(resp);
- var _bQzResults = ( _resp ==_PinCode );
+ var _resp=Collab.hashString(resp);
+ if (resp != null) var _bQzResults = ( _resp ==_PinCode );
} else var _bQzResults = ( eval(userPIN) ==_PinCode );
if (_bQzResults) {
- RightWrong=eval("RightWrong.!currQuiz");
- ProbDist=eval("ProbDist.!currQuiz");
- correctQuiz("!currQuiz",3);
- DisplayQuizResults("!currQuiz",3,3);
- if (typeof correctSumryTbl == "function")
- correctSumryTbl("!currQuiz",3);
+% \end{macrocode}
+% (2021/05/24) Do nothing if no quiz data
+% \begin{macrocode}
+ if (typeof oRecordOfQuizData["ScoreData.|currQuiz"]!="undefined") {
+ RightWrong=eval("RightWrong.|currQuiz");
+ ProbDist=eval("ProbDist.|currQuiz");
+ correctQuiz("|currQuiz",3);
+ DisplayQuizResults("|currQuiz",3,3);
+ if (typeof correctSumryTbl == "function")
+ correctSumryTbl("|currQuiz",3);%
+% \end{macrocode}
+% (2021/05/22) If \cs{ifFreezeQuiz} is true, we add some code to freeze all operational
+% components of this quiz.
+% \begin{macrocode}
+|ifFreezeQuiz
+ var aFrzExt=new Array("obj.","grpobj.","essay.",%
+"beginQuiz.","endQuiz.");
+ for (var i=0; i<aFrzExt.length; i++) {
+ var f=this.getField(aFrzExt[i]+"|currQuiz");
+ if (f!=null) f.readonly=true;
+ }|fi
+ } else {
+ var retn=app.alert({%
+cMsg: "No quiz data, do you want to mark it anyway?",%
+cTitle: "AcroTeX", nIcon: 2, nType: 2});
+ if (retn==4) {
+ var bDisplaySilent=false;
+ InitializeQuiz("|currQuiz",1,0);
+ var f=this.getField("ScoreData.|currQuiz");
+ f.value="0;0;0;0";
+ cntCorrectResponses();
+ correctQuiz("|currQuiz",3);
+ DisplayQuizResults("|currQuiz",3,3,false);
+ if (typeof correctSumryTbl == "function")
+ correctSumryTbl("|currQuiz",3);
+ }
+ }
} else {
- console.println("Something went wrong, \\
-you entered an incorrect PIN Id, \\
+ if (resp != null) {
+ console.clear()
+ console.println("Something went wrong, %
+you entered an incorrect PIN Id, %
or the class PIN Id (\\\\classPINVar) was incorrect or undefined");
- console.show();
+ app.beep(0);
+ console.show();
+ }
}
\end{defineJS*}
% \end{macrocode}
-% \DescribeMacro\declPINId\hskip-\marginparsep\texttt{\darg{\ameta{PIN-Id}}\darg{\ameta{hash-str}}}
-% Set the basic parameters of this PIN security scheme: the pin-id and its corresponding hash-string.
+%
+% \subsection{Declare PIN for \textsf{Correction} and \textsf{Begin Quiz} controls}
+% Two PIN-related commands are defined: (1) \cs{declPINId} is for security on the
+% \uif{Correct} control; (2) \cs{declRePINId} is for security on the \uif{Begin Quiz}
+% control.\medskip
+%
+% \noindent\DescribeMacro\declPINId\hskip-\marginparsep\texttt{\darg{\ameta{PIN-Id}}\darg{\ameta{hash-str}}}
+% Set the basic parameters of this PIN security scheme for the \uif{Correct} control:
+% the pin-id and its corresponding hash-string.
% \begin{macrocode}
\def\declPINId#1#2{\def\numPINId{#1}\def\hashPINId{#2}}
\@onlypreamble\declPINId
\declPINId{5243}{02JRVZdRgYgCA-Rtje8VkD} % PIN Id, hash-str
+% \end{macrocode}
+% \DescribeMacro\declRePINId\hskip-\marginparsep\texttt{\darg{\ameta{PIN-Id}}\darg{\ameta{hash-str}}}
+% Set the basic parameters of this PIN security scheme on the \uif{Begin Quiz} control:
+% the pin-id and its corresponding hash-string.
+% \begin{macrocode}
+\def\declRePINId#1#2{\def\numRePINId{#1}\def\hashRePINId{#2}}
+\@onlypreamble\declRePINId
+\declRePINId{1234}{By9mbLF0NJMA2sN2x4D0VB}
\begin{insDLJS}{pin}{Pin Code}
var _PinCode = "\hashPINId";
+var _rePinCode = "\hashRePINId";
\end{insDLJS}
% \end{macrocode}
+% \subsection{Warn and Freeze on \textsf{End Quiz}}
+% \DescribeMacro\useWarnEndQuiz
+% (2021/05/22) Optional modifications to the \uif{End Quiz} control.
+% \changes{v1.1}{2021/05/22}{Define \string\cs{useWarnEndQuiz} and
+% \string\cs{EndQuizG@tePIN}}
+% \begin{macrocode}
+\def\useWarnEndQuiz{\let\EndQuizG@te\EndQuizG@tePIN}
+\flJSStr{\EndQuizG@te@Msg}{Warning:
+Are you sure you want to end this quiz?\r\r
+The quiz will be frozen and no more changes will be allowed.
+Click 'Yes' to end the quiz or 'No' to continue working on the quiz.}
+\def\PINgobii#1#2{}
+\begin{defineJS}[\makeesc\|\makecmt\%]{\EndQuizG@tePIN}
+// Begin insertion of new code
+ var retn=app.alert({cMsg: |EndQuizG@te@Msg,%
+cTitle: "AcroTeX", nIcon: 2, nType: 2});
+ if (retn==4) {
+% \end{macrocode}
+% Freeze this quiz; we make a relevant fields readonly.
+% \begin{macrocode}
+ var aFrzExt=new Array("mc.","obj.","grpobj.",%
+"beginQuiz.","endQuiz.");
+ for (var i=0; i<aFrzExt.length; i++) {
+ var f=this.getField(aFrzExt[i]+"|currQuiz");
+ if (f!=null) f.readonly=true;
+ }%
+|PINgobii
+\end{defineJS}
+% \end{macrocode}
+% The \cs{PINglobii} vacuums up `\verb*! {!', which appears in \cs{eQzBtnActns} of
+% \pkg{exerquiz}, in the line \verb*!*EndQuizG@te {!.
+%
+% \subsection{PIN Security on \textsf{Begin Quiz}}
+%
+% \DescribeMacro\useBeginQuizPIN (2021/05/29) This command redefines the \uif{Begin Quiz} control to
+% require PIN security to retake the quiz.
+% \changes{v2.0}{2021/05/29}{Define \string\cs{useBeginQuizPIN}}
+% \begin{macrocode}
+\def\useBeginQuizPIN{%
+ \ifx\BeginQuizG@te\BeginQuizG@tePIN\else
+ \let\BeginQuizG@te\BeginQuizG@tePIN\fi}
+% \end{macrocode}
+% \cs{restoreBeginQuiz} is defined in \pkg{exerquiz}, but because of a typo,
+% it was originally defined as \cs{restorBeginQuiz} (no `e'); until the changes trickle
+% through the system, we cover ourselves by \cs{let}ing \cs{restoreBeginQuiz}
+% to \cs{restorBeginQuiz}, if the correct spelling of the command does not already
+% exist.
+% \begin{macrocode}
+\@ifundefined{restoreBeginQuiz}{\let\restoreBeginQuiz\restorBeginQuiz}{}
+% \end{macrocode}
+% \begin{macrocode}
+\flJSStr{\BeginQuizG@te@Msgi}{Enter the PIN number
+to retake this quiz}
+\flJSStr{\BeginQuizG@te@Msgii}{Press the Begin Quiz control to begin
+the quiz again}
+\def\PINgobiii#1#2#3{}
+% \end{macrocode}
+% \begin{macrocode}
+\begin{defineJS}[\makeesc\|\makecmt\%]{\BeginQuizG@tePIN}
+if (typeof oRecordOfQuizData["ScoreData.|currQuiz"] != "undefined" ) {
+ var resp=app.response({
+ cQuestion: |BeginQuizG@te@Msgi,
+ cTitle: "AcroTeX",
+ bPassword: true
+ });
+ var _respHash=_resp=Collab.hashString(resp);
+ if (_resp == _rePinCode) {
+ oRecordOfQuizData["ScoreData.|currQuiz"]=undefined;
+ app.alert(|BeginQuizG@te@Msgii);
+ var f=this.getField("tallyresets.|currQuiz");
+ if (f!=null) f.value=1+f.value;
+ }
+} else {
+|PINgobiii
+\end{defineJS}
+% \end{macrocode}
+% \cs{PINglobiii} gobbles the three tokens `\verb*! {\jsR!', which appear in the definition of \cs{@initQuiz} in
+% \pkg{exerquiz}, in the line \verb*!\BeginQuizG@te\space\jsLB\jsR\jsT!.
+%
+% \section{Tracking the number of \textsf{Begin Quiz} events}
+% A command \cs{qzResetTally} is defined to hold the number of times a user has taken
+% the same quiz. This field is readonly, and does not reset, unless you have know how to do it.
+% \begin{macrocode}
+% \end{macrocode}
+% \DescribeMacro{\qzResetTally}\hskip-\marginparsep\texttt{[\ameta{options}]}
+% The \cs{qzResetTally} text field, similar to \cs{sqTallyTotal}, is used to
+% count the number of times a student needs to retake the same quiz.
+% \begin{macrocode}
+% \end{macrocode}
+% The default appearance of \cs{qzResetTally}
+% \begin{macrocode}
+\def\qzTallyTotalDefaults{%
+ \rawPDF{}\W{1}\BC{0 0 0}\S{I}\textColor{1 0 0 rg}
+ \Q{2}}
+% \end{macrocode}
+% The definition of \cs{qzResetTally}
+% \begin{macrocode}
+\newcommand\qzResetTally[1][]{%
+ \textField[\presets{\qzTallyTotalDefaults}#1\DV{0}\V{0}
+ \Ff{\FfReadOnly}
+ ]{tallyresets.\currQuiz}{\TBW}{\DefaultHeightOfWidget}}
+% \end{macrocode}
+% \subsection{Placing a maximum on the number of resets}
+% The next level of complication is to add a restriction onto the number of
+% times the user can retake the quiz.\medskip\par
+%
+% \noindent
+% \DescribeMacro\setMaxRetakes\hskip-\marginparsep\texttt{\darg{\ameta{qz-name}}\darg{\ameta{num}}}
+% A command that sets the maximum number of retakes \ameta{num} (nonneg integer) by declaring \cs{setMaxRetakes} prior
+% to the quiz \ameta{qz-name}. \DescribeMacro\nMaxRetakes\cs{nMaxRetakes\darg{\ameta{qz-name}}}
+% is a public macro that expands to the max number of retakes (\ameta{num}).
+% \begin{macrocode}
+\newcommand{\setMaxRetakes}[2]{\expandafter
+ \def\csname1MaxReset#1\endcsname{#2}}
+\def\nMaxRetakes#1{\@nameuse{1MaxReset#1}}
+% \end{macrocode}
+% \subsection{JavaScript support for tracking}
+% \DescribeMacro\useBeginQuizCnt Modifies \cs{BeginQuizG@te} (\pkg{exerquiz}, 2021/05/21 or later).
+% \cs{useBeginQuizPIN} also modifies \cs{BeginQuizG@te}. These two are incompatible;
+% one will overwrite the other. \cs{restoreBeginQuiz} retores \uif{Begin Quiz} to its default definition.
+% \changes{v2.0}{2021/05/29}{Define \string\cs{useBeginQuizCnt}}
+% \begin{macrocode}
+\def\useBeginQuizCnt{%
+ \ifx\BeginQuizG@te\BeginQuizG@teCNT\else
+ \let\BeginQuizG@te\BeginQuizG@teCNT\fi}
+% \end{macrocode}
+% \DescribeMacro\maxRetake@Msg The message that appears in an alert dialog box
+% after the student has started the quiz more than the max number, as set by
+% \cs{setMaxRetakes}.
+% \begin{macrocode}
+\flJSStr[noquotes]{\maxRetake@Msg}{You have taken the quiz the maximum
+number of times permitted ("+nMaxReset+"). You will not be allowed to
+continue to re-take this quiz. Move on with your life.}
+% \end{macrocode}
+% The action added to \uif{Begin Quiz}, it determines if \cs{qzResetTally} is present for the current quiz
+% and if so, increments the current value.
+% \begin{macrocode}
+\begin{defineJS}[\makeesc\|\makecmt\%]{\BeginQuizG@teCNT}
+if (typeof oRecordOfQuizData["ScoreData.|currQuiz"] != "undefined" )
+{
+ var _bOKReset=true;
+ var f=this.getField("tallyresets.|currQuiz");
+ if (f!=null) var value=1*f.value;%
+|expandafter|ifx|csname1MaxReset|currQuiz|endcsname|relax|else
+ var nMaxReset=|csname1MaxReset|currQuiz|endcsname;
+ if (f!=null && value==nMaxReset) {
+ app.alert("|maxRetake@Msg");
+ _bOKReset=false;
+ }|fi
+ if (_bOKReset) {
+ oRecordOfQuizData["ScoreData.|currQuiz"]=undefined;
+ app.alert(|BeginQuizG@te@Msgii);
+ if (f!=null) f.value=1+value;
+ }
+} else {
+|PINgobiii
+\end{defineJS}
+% \end{macrocode}
+% \cs{PINglobiii} gobbles the three tokens `\verb*! {\jsR!', which appear in the definition of \cs{@initQuiz} in
+% \pkg{exerquiz}, in the line \verb*!\BeginQuizG@te\space\jsLB\jsR\jsT!.
% \begin{macrocode}
%</package>
% \end{macrocode}
diff --git a/macros/latex/contrib/eq-pin2corr/examples/get-hash-string.pdf b/macros/latex/contrib/eq-pin2corr/examples/get-hash-string.pdf
index c1920bddba..20b55a7bd9 100644
--- a/macros/latex/contrib/eq-pin2corr/examples/get-hash-string.pdf
+++ b/macros/latex/contrib/eq-pin2corr/examples/get-hash-string.pdf
Binary files differ
diff --git a/macros/latex/contrib/eq-pin2corr/examples/get-hash-string.tex b/macros/latex/contrib/eq-pin2corr/examples/get-hash-string.tex
index 29422f836b..3e41710a69 100644
--- a/macros/latex/contrib/eq-pin2corr/examples/get-hash-string.tex
+++ b/macros/latex/contrib/eq-pin2corr/examples/get-hash-string.tex
@@ -3,6 +3,7 @@
\usepackage{eforms}
%\previewOn\pmpvOn
+\def\cs#1{\texttt{\eqbs#1}}
\begin{defineJS}{\btnHashStrAct}
var resp=app.response({
@@ -17,6 +18,10 @@ if (resp !=null) {
f.value=resp;
f=this.getField("txtdeclPINId");
f.value = "\\\\declPINId{"+resp+"}{"+hashStr+"}";
+ f=this.getField("txtdeclPINId");
+ var g=this.getField("txtdeclRePINId");
+ g.value = "\\\\declRePINId{"+resp+"}{"+hashStr+"}";
+
}
\end{defineJS}
@@ -30,10 +35,13 @@ if (resp !=null) {
Push the button and enter the four digit number you just created into the response box.
When you press the \textsf{OK} button,
the hash string of the PIN number you entered appears in the text field. The PIN number goes in as the
-first argument of \verb|\declPINId|, and the hash string is the second argument of \verb|\declPINId|; eg,
+first argument of \verb|\declPINId| (\verb|\declRePINId|), and the hash string is the second argument of
+\verb|\declPINId| (\verb|\declRePINId|); eg,
\begin{verbatim}
-\declPINId{5243}{02JRVZdRgYgCA-Rtje8VkD} % PIN number, hash string
+\declPINId{5243}{02JRVZdRgYgCA-Rtje8VkD} % PIN/hash string (default)
+\declRePINId{1234}{By9mbLF0NJMA2sN2x4D0VB} % PIN/hash string (default)
\end{verbatim}
+Normally, the PIN numbers for \cs{declPINId} and \cs{declRePINId} are different.\medskip
\textbf{Brief Instructions.} Press \textsf{Push}, enter your PIN, press \textsf{OK}.\medskip\par\noindent
\pushButton[\CA{Push}\AAmouseup{\btnHashStrAct}]{btn}{}{11bp}\olBdry
@@ -44,9 +52,13 @@ Save these two values as arguments of \verb|\declPINId| and place in the preambl
quiz document.\medskip
\noindent
-Copy to quiz document: \textField[\textSize{8}]{txtdeclPINId}{3in}{13bp}\olBdry
+For \cs{declPINId}, copy to quiz document:\\[6pt]\null
+ \hspace{15pt}\textField[\textSize{8}]{txtdeclPINId}{3in}{13bp}\vcgBdry[6pt]
+For \cs{declRePINId}, copy to quiz document:\\[6pt]\null
+ \hspace{15pt}\textField[\textSize{8}]{txtdeclRePINId}{3in}{13bp}\vcgBdry[6pt]
\pushButton[\CA{Reset}\AAmouseup{this.resetForm();}]{reset}{}{13bp}
+
\end{document}
diff --git a/macros/latex/contrib/eq-pin2corr/examples/qz-p2c.pdf b/macros/latex/contrib/eq-pin2corr/examples/qz-p2c.pdf
new file mode 100644
index 0000000000..18ec5466cb
--- /dev/null
+++ b/macros/latex/contrib/eq-pin2corr/examples/qz-p2c.pdf
Binary files differ
diff --git a/macros/latex/contrib/eq-pin2corr/examples/qz-pin-to-correct.tex b/macros/latex/contrib/eq-pin2corr/examples/qz-p2c.tex
index b084b55c5a..23642d4d6b 100644
--- a/macros/latex/contrib/eq-pin2corr/examples/qz-pin-to-correct.tex
+++ b/macros/latex/contrib/eq-pin2corr/examples/qz-p2c.tex
@@ -1,5 +1,5 @@
\documentclass{article}
-\usepackage[designv,forcolorpaper]{web}
+\usepackage[designv]{web} %,forcolorpaper
\usepackage{exerquiz}[2021/02/17]
\usepackage[!showscore]{eq-pin2corr}
@@ -27,8 +27,8 @@
\section*{PIN Security for Quizzes}
-This demo file implements a feature that prevents that student from
-correcting his/her own quiz. The \uif{Correct} button appears at the end of
+This demo file implements a feature that prevents students from
+correcting their own quiz. The \uif{Correct} button appears at the end of
the quiz, but a PIN number is needed for it to execute. For the purpose of
this demo files, the PIN number is given to the right of the \uif{Correct}
button; of course, the PIN is not given to the student. \verb~:-{)~ Test it
diff --git a/macros/latex/contrib/eq-pin2corr/examples/qz-pin-to-correct.pdf b/macros/latex/contrib/eq-pin2corr/examples/qz-pin-to-correct.pdf
deleted file mode 100644
index 1fca51e00a..0000000000
--- a/macros/latex/contrib/eq-pin2corr/examples/qz-pin-to-correct.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/latex/contrib/hyperref/ChangeLog.txt b/macros/latex/contrib/hyperref/ChangeLog.txt
index 551ab35ccd..ba313e8abe 100644
--- a/macros/latex/contrib/hyperref/ChangeLog.txt
+++ b/macros/latex/contrib/hyperref/ChangeLog.txt
@@ -1,7 +1,12 @@
+2021-06-05 Ulrike Fischer/David Carlisle
+ * handle non-ascii labels, issue #185
+ * suppress break points after whatsits issue #187
+ * correct longtable check, issue #193
+
2021-02-27 Ulrike Fischer/David Carlisle
* rename puenc-greek.def to puenc-greekbasic.def to resolve
name conflict with a file in greek-fontenc, issue #177
- * some documentation improvements (PR #174)
+ * some documentation improvements (PR #174)
2021-02-10 Ulrike Fischer/David Carlisle
* moved the PU-declarations for greek to an extra file
diff --git a/macros/latex/contrib/hyperref/README.md b/macros/latex/contrib/hyperref/README.md
index 0bde5da6a8..7c883e7808 100644
--- a/macros/latex/contrib/hyperref/README.md
+++ b/macros/latex/contrib/hyperref/README.md
@@ -1,6 +1,6 @@
# README for hyperref bundle
-Version 2021-02-27 v7.00k
+Version 2021-06-05 v7.00l
## INTRODUCTION
diff --git a/macros/latex/contrib/hyperref/doc/backref.pdf b/macros/latex/contrib/hyperref/doc/backref.pdf
index ce167800fc..5d94d8f215 100644
--- a/macros/latex/contrib/hyperref/doc/backref.pdf
+++ b/macros/latex/contrib/hyperref/doc/backref.pdf
Binary files differ
diff --git a/macros/latex/contrib/hyperref/doc/hyperref-doc.html b/macros/latex/contrib/hyperref/doc/hyperref-doc.html
index 04fc7b7c3b..83fa1d4537 100644
--- a/macros/latex/contrib/hyperref/doc/hyperref-doc.html
+++ b/macros/latex/contrib/hyperref/doc/hyperref-doc.html
@@ -25,7 +25,7 @@ href="https://github.com/latex3/hyperref/issues" class="url" ><span
class="ec-lmvtt-10x-x-120">https://github.com/latex3/hyperref/issues</span></a><span
class="ec-lmr-12">)</span></div><br />
<div class="date" ><span
-class="ec-lmr-12">2021-02-27 v7.00k</span></div>
+class="ec-lmr-12">2021-06-05 v7.00l</span></div>
</div>
<h3 class="likesectionHead"><a
id="x1-1000"></a>Contents</h3>
@@ -228,38 +228,48 @@ href="hyperref-doc3.html#fn2x0"><sup class="textsuperscript">2</sup></a></span><
says that conformant viewers/translators must recognize the following set of <span
class="ec-lmvtt-10">\special </span>constructs:
<dl class="description"><dt class="description">
+ <!--l. 204--><p class="noindent" >
<span
class="ec-lmbx-10">href:</span> </dt><dd
-class="description"><span class="obeylines-h"><span class="verb"><span
+class="description">
+ <!--l. 204--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="ec-lmvtt-10">html:&#x003C;a</span><span
class="ec-lmvtt-10">&#x00A0;href</span><span
class="ec-lmvtt-10">&#x00A0;=</span><span
class="ec-lmvtt-10">&#x00A0;"href_string"&#x003E;</span></span></span>
</dd><dt class="description">
+ <!--l. 205--><p class="noindent" >
<span
class="ec-lmbx-10">name:</span> </dt><dd
-class="description"><span class="obeylines-h"><span class="verb"><span
+class="description">
+ <!--l. 205--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="ec-lmvtt-10">html:&#x003C;a</span><span
class="ec-lmvtt-10">&#x00A0;name</span><span
class="ec-lmvtt-10">&#x00A0;=</span><span
class="ec-lmvtt-10">&#x00A0;"name_string"&#x003E;</span></span></span>
</dd><dt class="description">
+ <!--l. 206--><p class="noindent" >
<span
class="ec-lmbx-10">end:</span> </dt><dd
-class="description"><span class="obeylines-h"><span class="verb"><span
+class="description">
+ <!--l. 206--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="ec-lmvtt-10">html:&#x003C;/a&#x003E;</span></span></span>
</dd><dt class="description">
+ <!--l. 207--><p class="noindent" >
<span
class="ec-lmbx-10">image:</span> </dt><dd
-class="description"><span class="obeylines-h"><span class="verb"><span
+class="description">
+ <!--l. 207--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="ec-lmvtt-10">html:&#x003C;img</span><span
class="ec-lmvtt-10">&#x00A0;src</span><span
class="ec-lmvtt-10">&#x00A0;=</span><span
class="ec-lmvtt-10">&#x00A0;"href_string"&#x003E;</span></span></span>
</dd><dt class="description">
+ <!--l. 208--><p class="noindent" >
<span
class="ec-lmbx-10">base_name:</span> </dt><dd
-class="description"><span class="obeylines-h"><span class="verb"><span
+class="description">
+ <!--l. 208--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="ec-lmvtt-10">html:&#x003C;base</span><span
class="ec-lmvtt-10">&#x00A0;href</span><span
class="ec-lmvtt-10">&#x00A0;=</span><span
@@ -272,7 +282,8 @@ between sections of documents. The <span
class="ec-lmri-10">image </span>command is intended (as with current HTML
viewers) to place an image of arbitrary graphical format on the page in the current location.
The <span
-class="ec-lmri-10">base_name </span>command is be used to communicate to the DVI viewer the full (URL)
+class="ec-lmri-10">base_name </span>command is be used to communicate to the DVI viewer the full (URL)
+
location of the current document so that files specified by relative URLs may be retrieved
correctly.
<!--l. 220--><p class="indent" > The <span
@@ -301,21 +312,21 @@ class="ec-lmvtt-10">"</span></span></span>&#8217;
characters should be escaped with a backslash (<span
class="lmsy-10">\</span>), and if it looks like a URL name it may cause
problems.
-
-
<!--l. 236--><p class="indent" > However, the drivers intended to produce <span
class="ec-lmri-10">only </span>PDF use literal PostScript or PDF <span class="obeylines-h"><span class="verb"><span
class="ec-lmvtt-10">\special</span></span></span>
commands. The commands are defined in configuration files for different drivers, selected by package
options; at present, the following drivers are supported:
<dl class="description"><dt class="description">
+ <!--l. 242--><p class="noindent" >
<span
class="ec-lmbx-10">hypertex</span> </dt><dd
-class="description">DVI processors conforming to the HyperTeX&#x00A0;guidelines (i.e.&#x00A0;<span
+class="description">
+ <!--l. 242--><p class="noindent" >DVI processors conforming to the HyperTeX&#x00A0;guidelines (i.e.&#x00A0;<span
class="ec-lmss-10">xdvi</span>, <span
class="ec-lmss-10">dvips </span>(with the <span
-class="ec-lmss-10">-z</span>
- option), <span class="HoLogo-OzTeX"><span
+class="ec-lmss-10">-z </span>option),
+ <span class="HoLogo-OzTeX"><span
class="ec-lmss-10">O</span><span class="HoLogo-z"><span
class="ec-lmss-10">z</span></span><span class="HoLogo-TeX"><span
class="ec-lmss-10">T</span><span class="HoLogo-e"><span
@@ -323,74 +334,100 @@ class="ec-lmss-10">E</span></span><span
class="ec-lmss-10">X</span></span></span>, and <span
class="ec-lmss-10">Textures</span>)
</dd><dt class="description">
+ <!--l. 244--><p class="noindent" >
<span
class="ec-lmbx-10">dvips</span> </dt><dd
-class="description">produces <span class="obeylines-h"><span class="verb"><span
+class="description">
+ <!--l. 244--><p class="noindent" >produces <span class="obeylines-h"><span class="verb"><span
class="ec-lmvtt-10">\special</span></span></span> commands tailored for <span
class="ec-lmss-10">dvips</span>
</dd><dt class="description">
+ <!--l. 245--><p class="noindent" >
<span
class="ec-lmbx-10">dvipsone</span> </dt><dd
-class="description">produces <span class="obeylines-h"><span class="verb"><span
+class="description">
+ <!--l. 245--><p class="noindent" >produces <span class="obeylines-h"><span class="verb"><span
class="ec-lmvtt-10">\special</span></span></span> commands tailored for <span
class="ec-lmss-10">dvipsone</span>
</dd><dt class="description">
+ <!--l. 246--><p class="noindent" >
<span
class="ec-lmbx-10">ps2pdf</span> </dt><dd
-class="description">a special case of output suitable for processing by earlier versions of Ghostscript&#8217;s PDF
+class="description">
+ <!--l. 246--><p class="noindent" >a special case of output suitable for processing by earlier versions of Ghostscript&#8217;s PDF
writer; this is basically the same as that for <span
class="ec-lmss-10">dvips</span>, but a few variations remained before
version 5.21
</dd><dt class="description">
+ <!--l. 248--><p class="noindent" >
<span
class="ec-lmbx-10">tex4ht</span> </dt><dd
-class="description">produces <span class="obeylines-h"><span class="verb"><span
+class="description">
+ <!--l. 248--><p class="noindent" >produces <span class="obeylines-h"><span class="verb"><span
class="ec-lmvtt-10">\special</span></span></span> commands for use with <span
class="ec-lmss-10">TeX4ht</span>
</dd><dt class="description">
+ <!--l. 249--><p class="noindent" >
<span
class="ec-lmbx-10">pdftex</span> </dt><dd
-class="description">pdfTeX, Hn Th&#x1ebf; Thnh&#8217;s TeX variant that writes PDF directly
+class="description">
+ <!--l. 249--><p class="noindent" >pdfTeX, Hn Th&#x1ebf; Thnh&#8217;s TeX variant that writes PDF directly
+
+
</dd><dt class="description">
+ <!--l. 250--><p class="noindent" >
<span
class="ec-lmbx-10">luatex</span> </dt><dd
-class="description">luaTeX, Unicode TeX variant that writes PDF directly
+class="description">
+ <!--l. 250--><p class="noindent" >luaTeX, Unicode TeX variant that writes PDF directly
</dd><dt class="description">
+ <!--l. 251--><p class="noindent" >
<span
class="ec-lmbx-10">dvipdfm</span> </dt><dd
-class="description">produces <span class="obeylines-h"><span class="verb"><span
+class="description">
+ <!--l. 251--><p class="noindent" >produces <span class="obeylines-h"><span class="verb"><span
class="ec-lmvtt-10">\special</span></span></span> commands for Mark Wicks&#8217; DVI to PDF driver <span
class="ec-lmss-10">dvipdfm</span>
</dd><dt class="description">
+ <!--l. 252--><p class="noindent" >
<span
class="ec-lmbx-10">dvipdfmx</span> </dt><dd
-class="description">produces <span class="obeylines-h"><span class="verb"><span
+class="description">
+ <!--l. 252--><p class="noindent" >produces <span class="obeylines-h"><span class="verb"><span
class="ec-lmvtt-10">\special</span></span></span> commands for driver <span
class="ec-lmss-10">dvipdfmx</span>, a successor of <span
class="ec-lmss-10">dvipdfm</span>
</dd><dt class="description">
+ <!--l. 254--><p class="noindent" >
<span
class="ec-lmbx-10">dviwindo</span> </dt><dd
-class="description">produces <span class="obeylines-h"><span class="verb"><span
-class="ec-lmvtt-10">\special</span></span></span> commands that Y&amp;Y&#8217;s Windows previewer interprets as hypertext
- jumps within the previewer
+class="description">
+ <!--l. 254--><p class="noindent" >produces <span class="obeylines-h"><span class="verb"><span
+class="ec-lmvtt-10">\special</span></span></span> commands that Y&amp;Y&#8217;s Windows previewer interprets as hypertext jumps
+ within the previewer
</dd><dt class="description">
+ <!--l. 255--><p class="noindent" >
<span
class="ec-lmbx-10">vtex</span> </dt><dd
-class="description">produces <span class="obeylines-h"><span class="verb"><span
+class="description">
+ <!--l. 255--><p class="noindent" >produces <span class="obeylines-h"><span class="verb"><span
class="ec-lmvtt-10">\special</span></span></span> commands that MicroPress&#8217; HTML and PDF-producing TeX&#x00A0;variants
interpret as hypertext jumps within the previewer
</dd><dt class="description">
+ <!--l. 258--><p class="noindent" >
<span
class="ec-lmbx-10">textures</span> </dt><dd
-class="description">produces <span class="obeylines-h"><span class="verb"><span
-class="ec-lmvtt-10">\special</span></span></span> commands that <span
-class="ec-lmss-10">Textures </span>interprets as hypertext jumps within the
+class="description">
+ <!--l. 258--><p class="noindent" >produces <span class="obeylines-h"><span class="verb"><span
+class="ec-lmvtt-10">\special</span></span></span> commands that <span
+class="ec-lmss-10">Textures </span>interprets as hypertext jumps within the
previewer
</dd><dt class="description">
+ <!--l. 259--><p class="noindent" >
<span
class="ec-lmbx-10">xetex</span> </dt><dd
-class="description">produces <span class="obeylines-h"><span class="verb"><span
+class="description">
+ <!--l. 259--><p class="noindent" >produces <span class="obeylines-h"><span class="verb"><span
class="ec-lmvtt-10">\special</span></span></span> commands for XeTeX</dd></dl>
<!--l. 262--><p class="indent" > Output from <span
class="ec-lmss-10">dvips </span>or <span
@@ -405,13 +442,16 @@ class="ec-lmss-10">dvips -z</span>, but the DVI file is not portable. The main a
HyperTeX&#x00A0;<span
class="ec-lmvtt-10">\special </span>commands is that you can also use the document in hypertext DVI viewers, such as
<span
-class="ec-lmss-10">xdvi</span>.
+class="ec-lmss-10">xdvi</span>.
+
<dl class="description"><dt class="description">
+ <!--l. 273--><p class="noindent" >
<span
class="ec-lmbx-10">driverfallback</span> </dt><dd
-class="description">If a driver is not given and cannot be autodetected, then use the driver option, given as
- value to this option <span
+class="description">
+ <!--l. 273--><p class="noindent" >If a driver is not given and cannot be autodetected, then use the driver option, given as value to
+ this option <span
class="ec-lmss-10">driverfallback</span>. Example:
<blockquote class="quote">
<!--l. 278--><p class="noindent" ><span
@@ -476,7 +516,8 @@ in <span class="obeylines-h"><span class="verb"><span
class="ec-lmvtt-10">\hypersetup</span></span></span> as the option settings are processed as the package is read.
<!--l. 331--><p class="indent" > As an example, the behavior of a particular file could be controlled by:
<ul class="itemize1">
- <li class="itemize">a site-wide <span
+ <li class="itemize">
+ <!--l. 334--><p class="noindent" >a site-wide <span
class="ec-lmvtt-10">hyperref.cfg </span>setting up the look of links, adding backreferencing, and setting a
PDF display default:
@@ -488,7 +529,8 @@ class="ec-lmvtt-10">hyperref.cfg </span>setting up the look of links, adding bac
</pre>
<!--l. 341--><p class="nopar" >
</li>
- <li class="itemize">A global option in the file, which is passed down to <span
+ <li class="itemize">
+ <!--l. 343--><p class="noindent" >A global option in the file, which is passed down to <span
class="ec-lmss-10">hyperref</span>:
@@ -497,7 +539,8 @@ class="ec-lmss-10">hyperref</span>:
</pre>
<!--l. 348--><p class="nopar" >
</li>
- <li class="itemize">File-specific options in the <span
+ <li class="itemize">
+ <!--l. 350--><p class="noindent" >File-specific options in the <span
class="ec-lmvtt-10">\usepackage </span>commands, which override the ones set in
<span
class="ec-lmvtt-10">hyperref.cfg</span>:
@@ -624,16 +667,21 @@ by a dot. Example for the fourth chapter:
class="ec-lmvtt-10">chapter.4</span></span></span></blockquote>
<!--l. 409--><p class="noindent" >This scheme is used by:
<dl class="description"><dt class="description">
+ <!--l. 411--><p class="noindent" >
<span
class="ec-lmvtk-10">\autoref</span> </dt><dd
-class="description">displays the description label for the reference depending on the counter name.
+class="description">
+ <!--l. 411--><p class="noindent" >displays the description label for the reference depending on the counter name.
+
+
</dd><dt class="description">
+ <!--l. 413--><p class="noindent" >
<span
class="ec-lmvtk-10">\hyperpage</span> </dt><dd
-class="description">is used by the index to get page links. Page anchor setting (<span class="obeylines-h"><span class="verb"><span
-class="ec-lmvtt-10">pageanchor</span></span></span>) must not
- be turned off.</dd></dl>
-
+class="description">
+ <!--l. 413--><p class="noindent" >is used by the index to get page links. Page anchor setting (<span class="obeylines-h"><span class="verb"><span
+class="ec-lmvtt-10">pageanchor</span></span></span>) must not be turned
+ off.</dd></dl>
<!--l. 418--><p class="indent" > It is very important that the destination names are unique, because two destinations must not share
the same name. The counter value <span
class="ec-lmvtt-10">\the&#x003C;counter&#x003E; </span>is not always unique for the counter. For example,
@@ -939,20 +987,24 @@ wrong and displaced.
id="x1-80003.4"></a>Backend drivers</h4>
<!--l. 563--><p class="noindent" >If no driver is specified, the package tries to find a driver in the following order:
<ol class="enumerate1" >
- <li
- class="enumerate" id="x1-8002x1">Autodetection, some TeX&#x00A0;processors can be detected at TeX&#x00A0;macro level (pdfTeX, XeTeX,
+<li
+ class="enumerate" id="x1-8002x1">
+ <!--l. 566--><p class="noindent" >Autodetection, some TeX&#x00A0;processors can be detected at TeX&#x00A0;macro level (pdfTeX, XeTeX,
VTeX).
</li>
- <li
- class="enumerate" id="x1-8004x2">Option <span
+<li
+ class="enumerate" id="x1-8004x2">
+ <!--l. 568--><p class="noindent" >Option <span
class="ec-lmss-10">driverfallback</span>. If this option is set, its value is taken as driver option.
</li>
- <li
- class="enumerate" id="x1-8006x3">Macro <span
+<li
+ class="enumerate" id="x1-8006x3">
+ <!--l. 570--><p class="noindent" >Macro <span
class="ec-lmvtt-10">\Hy@defaultdriver</span>. The macro takes a driver file name (without file extension).
</li>
- <li
- class="enumerate" id="x1-8008x4">Package default is <span
+<li
+ class="enumerate" id="x1-8008x4">
+ <!--l. 572--><p class="noindent" >Package default is <span
class="ec-lmss-10">hypertex</span>.</li></ol>
<!--l. 574--><p class="noindent" >Many distributions are using a driver file <span
class="ec-lmvtt-10">hypertex.cfg </span>that define <span
@@ -968,6 +1020,8 @@ generation.
><colgroup id="TBL-5-1g"><col
id="TBL-5-1"><col
id="TBL-5-2"></colgroup>
+
+
<tr
style="vertical-align:baseline;" id="TBL-5-1-"><td style="white-space:nowrap; text-align:left;" id="TBL-5-1-1"
class="td01"><span
@@ -1019,8 +1073,6 @@ class="td10">
<!--l. 586--><p class="noindent" >Sets up <span
class="ec-lmss-10">hyperref </span>for use with the <span
class="ec-lmss-10">dviwindo </span>Windows previewer. </td>
-
-
</tr><tr
style="vertical-align:baseline;" id="TBL-5-8-"><td style="white-space:nowrap; text-align:left;" id="TBL-5-8-1"
class="td01"><span
@@ -1358,33 +1410,30 @@ class="td10">
<!--l. 649--><p class="noindent" >Use small caps instead of color for links. </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-6-21-"><td style="white-space:nowrap; text-align:left;" id="TBL-6-21-1"
-class="td01"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-6-21-2"
-class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-6-21-3"
-class="td11"> </td><td style="white-space:normal; text-align:left;" id="TBL-6-21-4"
-class="td10"></td></tr>
-<tr
- style="vertical-align:baseline;" id="TBL-6-22-"><td style="white-space:nowrap; text-align:left;" id="TBL-6-22-1"
class="td01"><span
-class="ec-lmvtt-10">hidelinks </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-6-22-2"
-class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-6-22-3"
-class="td11"> </td><td style="white-space:normal; text-align:left;" id="TBL-6-22-4"
+class="ec-lmvtt-10">hidelinks </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-6-21-2"
+class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-6-21-3"
+class="td11"> </td><td style="white-space:normal; text-align:left;" id="TBL-6-21-4"
class="td10">
<!--l. 650--><p class="noindent" >Hide links (removing color and border). </td>
</tr><tr
+ style="vertical-align:baseline;" id="TBL-6-22-"><td style="white-space:nowrap; text-align:left;" id="TBL-6-22-1"
+class="td01"> </td>
+</tr><tr
style="vertical-align:baseline;" id="TBL-6-23-"><td style="white-space:nowrap; text-align:left;" id="TBL-6-23-1"
-class="td01"> </td>
+class="td01"> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-6-24-"><td style="white-space:nowrap; text-align:left;" id="TBL-6-24-1"
-class="td01"> </td>
+class="td01"> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-6-25-"><td style="white-space:nowrap; text-align:left;" id="TBL-6-25-1"
-class="td01"> </td>
+class="td01"> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-6-26-"><td style="white-space:nowrap; text-align:left;" id="TBL-6-26-1"
-class="td01"> </td>
-</tr><tr
- style="vertical-align:baseline;" id="TBL-6-27-"><td style="white-space:nowrap; text-align:left;" id="TBL-6-27-1"
-class="td01"> </td></tr>
+class="td01"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-6-26-2"
+class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-6-26-3"
+class="td11"> </td><td style="white-space:normal; text-align:left;" id="TBL-6-26-4"
+class="td10"></td></tr>
</table></div>
<!--l. 653--><p class="noindent" >Note that all color names must be defined before use, following the normal system of the standard
LaTeX&#x00A0;<span
@@ -1625,7 +1674,7 @@ id="TBL-8-4"></colgroup>
<tr
style="vertical-align:baseline;" id="TBL-8-1-"><td style="white-space:nowrap; text-align:left;" id="TBL-8-1-1"
class="td01"><span
-class="ec-lmvtt-10">baseurl </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-1-2"
+class="ec-lmvtt-10">baseurl </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-1-2"
class="td11">
<!--l. 716--><p class="noindent" >URL </td><td style="white-space:nowrap; text-align:left;" id="TBL-8-1-3"
class="td11"> </td><td style="white-space:normal; text-align:left;" id="TBL-8-1-4"
@@ -1634,7 +1683,7 @@ class="td10">
</tr><tr
style="vertical-align:baseline;" id="TBL-8-2-"><td style="white-space:nowrap; text-align:left;" id="TBL-8-2-1"
class="td01"><span
-class="ec-lmvtt-10">pdfpagemode </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-2-2"
+class="ec-lmvtt-10">pdfpagemode </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-2-2"
class="td11">
<!--l. 717--><p class="noindent" >name </td><td style="white-space:nowrap; text-align:left;" id="TBL-8-2-3"
class="td11"> <span
@@ -1657,7 +1706,7 @@ class="ec-lmvtt-10">UseOutlines</span></span></span> is used. </td
</tr><tr
style="vertical-align:baseline;" id="TBL-8-3-"><td style="white-space:nowrap; text-align:left;" id="TBL-8-3-1"
class="td01"><span
-class="ec-lmvtt-10">pdftitle </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-3-2"
+class="ec-lmvtt-10">pdftitle </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-3-2"
class="td11">
<!--l. 722--><p class="noindent" >text </td><td style="white-space:nowrap; text-align:left;" id="TBL-8-3-3"
class="td11"> </td><td style="white-space:normal; text-align:left;" id="TBL-8-3-4"
@@ -1666,7 +1715,7 @@ class="td10">
</tr><tr
style="vertical-align:baseline;" id="TBL-8-4-"><td style="white-space:nowrap; text-align:left;" id="TBL-8-4-1"
class="td01"><span
-class="ec-lmvtt-10">pdfauthor </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-4-2"
+class="ec-lmvtt-10">pdfauthor </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-4-2"
class="td11">
<!--l. 723--><p class="noindent" >text </td><td style="white-space:nowrap; text-align:left;" id="TBL-8-4-3"
class="td11"> </td><td style="white-space:normal; text-align:left;" id="TBL-8-4-4"
@@ -1675,7 +1724,7 @@ class="td10">
</tr><tr
style="vertical-align:baseline;" id="TBL-8-5-"><td style="white-space:nowrap; text-align:left;" id="TBL-8-5-1"
class="td01"><span
-class="ec-lmvtt-10">pdfsubject </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-5-2"
+class="ec-lmvtt-10">pdfsubject </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-5-2"
class="td11">
<!--l. 724--><p class="noindent" >text </td><td style="white-space:nowrap; text-align:left;" id="TBL-8-5-3"
class="td11"> </td><td style="white-space:normal; text-align:left;" id="TBL-8-5-4"
@@ -1684,7 +1733,7 @@ class="td10">
</tr><tr
style="vertical-align:baseline;" id="TBL-8-6-"><td style="white-space:nowrap; text-align:left;" id="TBL-8-6-1"
class="td01"><span
-class="ec-lmvtt-10">pdfcreator </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-6-2"
+class="ec-lmvtt-10">pdfcreator </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-6-2"
class="td11">
<!--l. 725--><p class="noindent" >text </td><td style="white-space:nowrap; text-align:left;" id="TBL-8-6-3"
class="td11"> </td><td style="white-space:normal; text-align:left;" id="TBL-8-6-4"
@@ -1693,7 +1742,7 @@ class="td10">
</tr><tr
style="vertical-align:baseline;" id="TBL-8-7-"><td style="white-space:nowrap; text-align:left;" id="TBL-8-7-1"
class="td01"><span
-class="ec-lmvtt-10">addtopdfcreator </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-7-2"
+class="ec-lmvtt-10">addtopdfcreator </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-7-2"
class="td11">
<!--l. 726--><p class="noindent" >text </td><td style="white-space:nowrap; text-align:left;" id="TBL-8-7-3"
class="td11"> </td><td style="white-space:normal; text-align:left;" id="TBL-8-7-4"
@@ -1703,7 +1752,7 @@ class="td10">
</tr><tr
style="vertical-align:baseline;" id="TBL-8-8-"><td style="white-space:nowrap; text-align:left;" id="TBL-8-8-1"
class="td01"><span
-class="ec-lmvtt-10">pdfkeywords </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-8-2"
+class="ec-lmvtt-10">pdfkeywords </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-8-2"
class="td11">
<!--l. 727--><p class="noindent" >text </td><td style="white-space:nowrap; text-align:left;" id="TBL-8-8-3"
class="td11"> </td><td style="white-space:normal; text-align:left;" id="TBL-8-8-4"
@@ -1712,7 +1761,7 @@ class="td10">
</tr><tr
style="vertical-align:baseline;" id="TBL-8-9-"><td style="white-space:nowrap; text-align:left;" id="TBL-8-9-1"
class="td01"><span
-class="ec-lmvtt-10">pdftrapped </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-9-2"
+class="ec-lmvtt-10">pdftrapped </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-9-2"
class="td11">
<!--l. 728--><p class="noindent" >name </td><td style="white-space:nowrap; text-align:left;" id="TBL-8-9-3"
class="td11"> <span
@@ -1727,7 +1776,7 @@ class="ec-lmvtt-10">Unknown</span></span></span>.
</tr><tr
style="vertical-align:baseline;" id="TBL-8-10-"><td style="white-space:nowrap; text-align:left;" id="TBL-8-10-1"
class="td01"><span
-class="ec-lmvtt-10">pdfinfo </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-10-2"
+class="ec-lmvtt-10">pdfinfo </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-10-2"
class="td11">
<!--l. 731--><p class="noindent" >key
value
@@ -1740,7 +1789,7 @@ class="td10">
</tr><tr
style="vertical-align:baseline;" id="TBL-8-11-"><td style="white-space:nowrap; text-align:left;" id="TBL-8-11-1"
class="td01"><span
-class="ec-lmvtt-10">pdfview </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-11-2"
+class="ec-lmvtt-10">pdfview </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-11-2"
class="td11">
<!--l. 733--><p class="noindent" >name </td><td style="white-space:nowrap; text-align:left;" id="TBL-8-11-3"
class="td11"> <span
@@ -1750,7 +1799,7 @@ class="td10">
</tr><tr
style="vertical-align:baseline;" id="TBL-8-12-"><td style="white-space:nowrap; text-align:left;" id="TBL-8-12-1"
class="td01"><span
-class="ec-lmvtt-10">pdfstartpage </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-12-2"
+class="ec-lmvtt-10">pdfstartpage </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-12-2"
class="td11">
<!--l. 734--><p class="noindent" >integer </td><td style="white-space:nowrap; text-align:left;" id="TBL-8-12-3"
class="td11"> <span
@@ -1762,7 +1811,7 @@ class="td10">
</tr><tr
style="vertical-align:baseline;" id="TBL-8-13-"><td style="white-space:nowrap; text-align:left;" id="TBL-8-13-1"
class="td01"><span
-class="ec-lmvtt-10">pdfstartview </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-13-2"
+class="ec-lmvtt-10">pdfstartview </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-13-2"
class="td11">
<!--l. 735--><p class="noindent" >name </td><td style="white-space:nowrap; text-align:left;" id="TBL-8-13-3"
class="td11"> <span
@@ -1772,17 +1821,19 @@ class="td10">
</tr><tr
style="vertical-align:baseline;" id="TBL-8-14-"><td style="white-space:nowrap; text-align:left;" id="TBL-8-14-1"
class="td01"><span
-class="ec-lmvtt-10">pdfremotestartview </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-14-2"
+class="ec-lmvtt-10">pdfremotestartview </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-14-2"
class="td11">
<!--l. 736--><p class="noindent" >name </td><td style="white-space:nowrap; text-align:left;" id="TBL-8-14-3"
class="td11"> <span
class="ec-lmri-10">Fit </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-14-4"
class="td10">
<!--l. 736--><p class="noindent" >Set the startup page view of remote PDF files</td>
+
+
</tr><tr
style="vertical-align:baseline;" id="TBL-8-15-"><td style="white-space:nowrap; text-align:left;" id="TBL-8-15-1"
class="td01"><span
-class="ec-lmvtt-10">pdfpagescrop </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-15-2"
+class="ec-lmvtt-10">pdfpagescrop </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-15-2"
class="td11">
<!--l. 737--><p class="noindent" >n
n
@@ -1792,12 +1843,10 @@ class="td11"> </td><td style="white-space:normal; text-align:left;" i
class="td10">
<!--l. 737--><p class="noindent" >Sets the default PDF crop box for pages. This
should be a set of four numbers </td>
-
-
</tr><tr
style="vertical-align:baseline;" id="TBL-8-16-"><td style="white-space:nowrap; text-align:left;" id="TBL-8-16-1"
class="td01"><span
-class="ec-lmvtt-10">pdfcenterwindow </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-16-2"
+class="ec-lmvtt-10">pdfcenterwindow </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-16-2"
class="td11">
<!--l. 738--><p class="noindent" >boolean </td><td style="white-space:nowrap; text-align:left;" id="TBL-8-16-3"
class="td11"> <span
@@ -1808,7 +1857,7 @@ class="td10">
</tr><tr
style="vertical-align:baseline;" id="TBL-8-17-"><td style="white-space:nowrap; text-align:left;" id="TBL-8-17-1"
class="td01"><span
-class="ec-lmvtt-10">pdfdirection </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-17-2"
+class="ec-lmvtt-10">pdfdirection </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-17-2"
class="td11">
<!--l. 739--><p class="noindent" >name </td><td style="white-space:nowrap; text-align:left;" id="TBL-8-17-3"
class="td11"> <span
@@ -1821,7 +1870,7 @@ class="ec-lmvtt-10">R2L</span></span></span> (right to left)
</tr><tr
style="vertical-align:baseline;" id="TBL-8-18-"><td style="white-space:nowrap; text-align:left;" id="TBL-8-18-1"
class="td01"><span
-class="ec-lmvtt-10">pdfdisplaydoctitle </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-18-2"
+class="ec-lmvtt-10">pdfdisplaydoctitle </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-18-2"
class="td11">
<!--l. 741--><p class="noindent" >boolean </td><td style="white-space:nowrap; text-align:left;" id="TBL-8-18-3"
class="td11"> <span
@@ -1832,7 +1881,7 @@ class="td10">
</tr><tr
style="vertical-align:baseline;" id="TBL-8-19-"><td style="white-space:nowrap; text-align:left;" id="TBL-8-19-1"
class="td01"><span
-class="ec-lmvtt-10">pdfduplex </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-19-2"
+class="ec-lmvtt-10">pdfduplex </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-19-2"
class="td11">
<!--l. 742--><p class="noindent" >name </td><td style="white-space:nowrap; text-align:left;" id="TBL-8-19-3"
class="td11"> <span
@@ -1850,7 +1899,7 @@ class="ec-lmvtt-10">DuplexFlipLongEdge</span></span></span> (duplex and flip on
</tr><tr
style="vertical-align:baseline;" id="TBL-8-20-"><td style="white-space:nowrap; text-align:left;" id="TBL-8-20-1"
class="td01"><span
-class="ec-lmvtt-10">pdffitwindow </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-20-2"
+class="ec-lmvtt-10">pdffitwindow </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-20-2"
class="td11">
<!--l. 747--><p class="noindent" >boolean </td><td style="white-space:nowrap; text-align:left;" id="TBL-8-20-3"
class="td11"> <span
@@ -1859,49 +1908,43 @@ class="td10">
<!--l. 747--><p class="noindent" >resize document window to fit document size </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-8-21-"><td style="white-space:nowrap; text-align:left;" id="TBL-8-21-1"
-class="td01"> </td><td style="white-space:normal; text-align:left;" id="TBL-8-21-2"
-class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-8-21-3"
-class="td11"> </td><td style="white-space:normal; text-align:left;" id="TBL-8-21-4"
-class="td10"></td></tr>
-<tr
- style="vertical-align:baseline;" id="TBL-8-22-"><td style="white-space:nowrap; text-align:left;" id="TBL-8-22-1"
class="td01"><span
-class="ec-lmvtt-10">pdflang </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-22-2"
+class="ec-lmvtt-10">pdflang </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-21-2"
class="td11">
- <!--l. 748--><p class="noindent" >name </td><td style="white-space:nowrap; text-align:left;" id="TBL-8-22-3"
+ <!--l. 748--><p class="noindent" >name </td><td style="white-space:nowrap; text-align:left;" id="TBL-8-21-3"
class="td11"> <span
-class="ec-lmri-10">relax </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-22-4"
+class="ec-lmri-10">relax </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-21-4"
class="td10">
<!--l. 748--><p class="noindent" >PDF language identifier (RFC 3066) </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-8-23-"><td style="white-space:nowrap; text-align:left;" id="TBL-8-23-1"
+ style="vertical-align:baseline;" id="TBL-8-22-"><td style="white-space:nowrap; text-align:left;" id="TBL-8-22-1"
class="td01"><span
-class="ec-lmvtt-10">pdfmenubar </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-23-2"
+class="ec-lmvtt-10">pdfmenubar </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-22-2"
class="td11">
- <!--l. 749--><p class="noindent" >boolean </td><td style="white-space:nowrap; text-align:left;" id="TBL-8-23-3"
+ <!--l. 749--><p class="noindent" >boolean </td><td style="white-space:nowrap; text-align:left;" id="TBL-8-22-3"
class="td11"> <span
-class="ec-lmri-10">true </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-23-4"
+class="ec-lmri-10">true </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-22-4"
class="td10">
<!--l. 749--><p class="noindent" >make PDF viewer&#8217;s menu bar visible </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-8-24-"><td style="white-space:nowrap; text-align:left;" id="TBL-8-24-1"
+ style="vertical-align:baseline;" id="TBL-8-23-"><td style="white-space:nowrap; text-align:left;" id="TBL-8-23-1"
class="td01"><span
-class="ec-lmvtt-10">pdfnewwindow </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-24-2"
+class="ec-lmvtt-10">pdfnewwindow </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-23-2"
class="td11">
- <!--l. 750--><p class="noindent" >boolean </td><td style="white-space:nowrap; text-align:left;" id="TBL-8-24-3"
+ <!--l. 750--><p class="noindent" >boolean </td><td style="white-space:nowrap; text-align:left;" id="TBL-8-23-3"
class="td11"> <span
-class="ec-lmri-10">false </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-24-4"
+class="ec-lmri-10">false </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-23-4"
class="td10">
<!--l. 750--><p class="noindent" >make links that open another PDF file start a
new window </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-8-25-"><td style="white-space:nowrap; text-align:left;" id="TBL-8-25-1"
+ style="vertical-align:baseline;" id="TBL-8-24-"><td style="white-space:nowrap; text-align:left;" id="TBL-8-24-1"
class="td01"><span
-class="ec-lmvtt-10">pdfnonfullscreenpagemode </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-25-2"
+class="ec-lmvtt-10">pdfnonfullscreenpagemode </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-24-2"
class="td11">
- <!--l. 752--><p class="noindent" >name </td><td style="white-space:nowrap; text-align:left;" id="TBL-8-25-3"
+ <!--l. 752--><p class="noindent" >name </td><td style="white-space:nowrap; text-align:left;" id="TBL-8-24-3"
class="td11"> <span
-class="ec-lmri-10">empty </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-25-4"
+class="ec-lmri-10">empty </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-24-4"
class="td10">
<!--l. 752--><p class="noindent" >page mode setting on exiting full-screen mode.
Possible values are <span class="obeylines-h"><span class="verb"><span
@@ -1911,23 +1954,23 @@ class="ec-lmvtt-10">UseOutlines</span></span></span>,
class="ec-lmvtt-10">UseThumbs</span></span></span>, and <span class="obeylines-h"><span class="verb"><span
class="ec-lmvtt-10">UseOC</span></span></span> </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-8-26-"><td style="white-space:nowrap; text-align:left;" id="TBL-8-26-1"
+ style="vertical-align:baseline;" id="TBL-8-25-"><td style="white-space:nowrap; text-align:left;" id="TBL-8-25-1"
class="td01"><span
-class="ec-lmvtt-10">pdfnumcopies </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-26-2"
+class="ec-lmvtt-10">pdfnumcopies </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-25-2"
class="td11">
- <!--l. 754--><p class="noindent" >integer </td><td style="white-space:nowrap; text-align:left;" id="TBL-8-26-3"
+ <!--l. 754--><p class="noindent" >integer </td><td style="white-space:nowrap; text-align:left;" id="TBL-8-25-3"
class="td11"> <span
-class="ec-lmri-10">empty </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-26-4"
+class="ec-lmri-10">empty </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-25-4"
class="td10">
<!--l. 754--><p class="noindent" >number of printed copies </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-8-27-"><td style="white-space:nowrap; text-align:left;" id="TBL-8-27-1"
+ style="vertical-align:baseline;" id="TBL-8-26-"><td style="white-space:nowrap; text-align:left;" id="TBL-8-26-1"
class="td01"><span
-class="ec-lmvtt-10">pdfpagelayout </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-27-2"
+class="ec-lmvtt-10">pdfpagelayout </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-26-2"
class="td11">
- <!--l. 755--><p class="noindent" >name </td><td style="white-space:nowrap; text-align:left;" id="TBL-8-27-3"
+ <!--l. 755--><p class="noindent" >name </td><td style="white-space:nowrap; text-align:left;" id="TBL-8-26-3"
class="td11"> <span
-class="ec-lmri-10">empty </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-27-4"
+class="ec-lmri-10">empty </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-26-4"
class="td10">
<!--l. 755--><p class="noindent" >set layout of PDF pages. Possible values:
<span class="obeylines-h"><span class="verb"><span
@@ -1940,23 +1983,23 @@ class="ec-lmvtt-10">TwoPageLeft</span></span></span>, and
<span class="obeylines-h"><span class="verb"><span
class="ec-lmvtt-10">TwoPageRight</span></span></span> </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-8-28-"><td style="white-space:nowrap; text-align:left;" id="TBL-8-28-1"
+ style="vertical-align:baseline;" id="TBL-8-27-"><td style="white-space:nowrap; text-align:left;" id="TBL-8-27-1"
class="td01"><span
-class="ec-lmvtt-10">pdfpagelabels </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-28-2"
+class="ec-lmvtt-10">pdfpagelabels </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-27-2"
class="td11">
- <!--l. 759--><p class="noindent" >boolean </td><td style="white-space:nowrap; text-align:left;" id="TBL-8-28-3"
+ <!--l. 759--><p class="noindent" >boolean </td><td style="white-space:nowrap; text-align:left;" id="TBL-8-27-3"
class="td11"> <span
-class="ec-lmri-10">true </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-28-4"
+class="ec-lmri-10">true </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-27-4"
class="td10">
<!--l. 759--><p class="noindent" >set PDF page labels </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-8-29-"><td style="white-space:nowrap; text-align:left;" id="TBL-8-29-1"
+ style="vertical-align:baseline;" id="TBL-8-28-"><td style="white-space:nowrap; text-align:left;" id="TBL-8-28-1"
class="td01"><span
-class="ec-lmvtt-10">pdfpagetransition </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-29-2"
+class="ec-lmvtt-10">pdfpagetransition </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-28-2"
class="td11">
- <!--l. 760--><p class="noindent" >name </td><td style="white-space:nowrap; text-align:left;" id="TBL-8-29-3"
+ <!--l. 760--><p class="noindent" >name </td><td style="white-space:nowrap; text-align:left;" id="TBL-8-28-3"
class="td11"> <span
-class="ec-lmri-10">empty </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-29-4"
+class="ec-lmri-10">empty </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-28-4"
class="td10">
<!--l. 760--><p class="noindent" >set PDF page transition style. Possible values
are <span class="obeylines-h"><span class="verb"><span
@@ -1978,24 +2021,26 @@ class="ec-lmvtt-10">Fade</span></span></span>.
class="ec-lmvtt-10">R</span></span></span>, which simply replaces the old page with
the new one. </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-8-30-"><td style="white-space:nowrap; text-align:left;" id="TBL-8-30-1"
+ style="vertical-align:baseline;" id="TBL-8-29-"><td style="white-space:nowrap; text-align:left;" id="TBL-8-29-1"
class="td01"><span
-class="ec-lmvtt-10">pdfpicktraybypdfsize </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-30-2"
+class="ec-lmvtt-10">pdfpicktraybypdfsize </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-29-2"
class="td11">
- <!--l. 769--><p class="noindent" >boolean </td><td style="white-space:nowrap; text-align:left;" id="TBL-8-30-3"
+ <!--l. 769--><p class="noindent" >boolean </td><td style="white-space:nowrap; text-align:left;" id="TBL-8-29-3"
class="td11"> <span
-class="ec-lmri-10">false </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-30-4"
+class="ec-lmri-10">false </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-29-4"
class="td10">
<!--l. 769--><p class="noindent" >specify whether PDF page size is used to select
input paper tray in print dialog </td>
+
+
</tr><tr
- style="vertical-align:baseline;" id="TBL-8-31-"><td style="white-space:nowrap; text-align:left;" id="TBL-8-31-1"
+ style="vertical-align:baseline;" id="TBL-8-30-"><td style="white-space:nowrap; text-align:left;" id="TBL-8-30-1"
class="td01"><span
-class="ec-lmvtt-10">pdfprintarea </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-31-2"
+class="ec-lmvtt-10">pdfprintarea </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-30-2"
class="td11">
- <!--l. 770--><p class="noindent" >name </td><td style="white-space:nowrap; text-align:left;" id="TBL-8-31-3"
+ <!--l. 770--><p class="noindent" >name </td><td style="white-space:nowrap; text-align:left;" id="TBL-8-30-3"
class="td11"> <span
-class="ec-lmri-10">empty </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-31-4"
+class="ec-lmri-10">empty </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-30-4"
class="td10">
<!--l. 770--><p class="noindent" >set /PrintArea of viewer preferences. Possible
values are <span class="obeylines-h"><span class="verb"><span
@@ -2007,16 +2052,14 @@ class="ec-lmvtt-10">TrimBox</span></span></span>, and <span class="obeylines-h">
class="ec-lmvtt-10">ArtBox</span></span></span>. The dafault according
to the PDF&#x00A0;Refence is <span class="obeylines-h"><span class="verb"><span
class="ec-lmvtt-10">CropBox</span></span></span> </td>
-
-
</tr><tr
- style="vertical-align:baseline;" id="TBL-8-32-"><td style="white-space:nowrap; text-align:left;" id="TBL-8-32-1"
+ style="vertical-align:baseline;" id="TBL-8-31-"><td style="white-space:nowrap; text-align:left;" id="TBL-8-31-1"
class="td01"><span
-class="ec-lmvtt-10">pdfprintclip </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-32-2"
+class="ec-lmvtt-10">pdfprintclip </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-31-2"
class="td11">
- <!--l. 774--><p class="noindent" >name </td><td style="white-space:nowrap; text-align:left;" id="TBL-8-32-3"
+ <!--l. 774--><p class="noindent" >name </td><td style="white-space:nowrap; text-align:left;" id="TBL-8-31-3"
class="td11"> <span
-class="ec-lmri-10">empty </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-32-4"
+class="ec-lmri-10">empty </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-31-4"
class="td10">
<!--l. 774--><p class="noindent" >set /PrintClip of viewer preferences. Possible
values are <span class="obeylines-h"><span class="verb"><span
@@ -2029,26 +2072,26 @@ class="ec-lmvtt-10">ArtBox</span></span></span>. The dafault according
to the PDF&#x00A0;Refence is <span class="obeylines-h"><span class="verb"><span
class="ec-lmvtt-10">CropBox</span></span></span> </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-8-33-"><td style="white-space:nowrap; text-align:left;" id="TBL-8-33-1"
+ style="vertical-align:baseline;" id="TBL-8-32-"><td style="white-space:nowrap; text-align:left;" id="TBL-8-32-1"
class="td01"><span
-class="ec-lmvtt-10">pdfprintpagerange </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-33-2"
+class="ec-lmvtt-10">pdfprintpagerange </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-32-2"
class="td11">
<!--l. 778--><p class="noindent" >n
n
(n
- n)* </td><td style="white-space:nowrap; text-align:left;" id="TBL-8-33-3"
+ n)* </td><td style="white-space:nowrap; text-align:left;" id="TBL-8-32-3"
class="td11"> <span
-class="ec-lmri-10">empty </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-33-4"
+class="ec-lmri-10">empty </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-32-4"
class="td10">
<!--l. 779--><p class="noindent" >set /PrintPageRange of viewer preferences </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-8-34-"><td style="white-space:nowrap; text-align:left;" id="TBL-8-34-1"
+ style="vertical-align:baseline;" id="TBL-8-33-"><td style="white-space:nowrap; text-align:left;" id="TBL-8-33-1"
class="td01"><span
-class="ec-lmvtt-10">pdfprintscaling </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-34-2"
+class="ec-lmvtt-10">pdfprintscaling </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-33-2"
class="td11">
- <!--l. 780--><p class="noindent" >name </td><td style="white-space:nowrap; text-align:left;" id="TBL-8-34-3"
+ <!--l. 780--><p class="noindent" >name </td><td style="white-space:nowrap; text-align:left;" id="TBL-8-33-3"
class="td11"> <span
-class="ec-lmri-10">empty </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-34-4"
+class="ec-lmri-10">empty </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-33-4"
class="td10">
<!--l. 780--><p class="noindent" >page scaling option for print dialog (option
/PrintScaling of viewer preferences, PDF 1.6);
@@ -2056,23 +2099,23 @@ class="td10">
class="ec-lmvtt-10">None</span></span></span> and <span class="obeylines-h"><span class="verb"><span
class="ec-lmvtt-10">AppDefault</span></span></span> </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-8-35-"><td style="white-space:nowrap; text-align:left;" id="TBL-8-35-1"
+ style="vertical-align:baseline;" id="TBL-8-34-"><td style="white-space:nowrap; text-align:left;" id="TBL-8-34-1"
class="td01"><span
-class="ec-lmvtt-10">pdftoolbar </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-35-2"
+class="ec-lmvtt-10">pdftoolbar </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-34-2"
class="td11">
- <!--l. 785--><p class="noindent" >boolean </td><td style="white-space:nowrap; text-align:left;" id="TBL-8-35-3"
+ <!--l. 785--><p class="noindent" >boolean </td><td style="white-space:nowrap; text-align:left;" id="TBL-8-34-3"
class="td11"> <span
-class="ec-lmri-10">true </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-35-4"
+class="ec-lmri-10">true </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-34-4"
class="td10">
<!--l. 785--><p class="noindent" >make PDF toolbar visible </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-8-36-"><td style="white-space:nowrap; text-align:left;" id="TBL-8-36-1"
+ style="vertical-align:baseline;" id="TBL-8-35-"><td style="white-space:nowrap; text-align:left;" id="TBL-8-35-1"
class="td01"><span
-class="ec-lmvtt-10">pdfviewarea </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-36-2"
+class="ec-lmvtt-10">pdfviewarea </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-35-2"
class="td11">
- <!--l. 786--><p class="noindent" >name </td><td style="white-space:nowrap; text-align:left;" id="TBL-8-36-3"
+ <!--l. 786--><p class="noindent" >name </td><td style="white-space:nowrap; text-align:left;" id="TBL-8-35-3"
class="td11"> <span
-class="ec-lmri-10">empty </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-36-4"
+class="ec-lmri-10">empty </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-35-4"
class="td10">
<!--l. 786--><p class="noindent" >set /ViewArea of viewer preferences. Possible
values are <span class="obeylines-h"><span class="verb"><span
@@ -2085,13 +2128,13 @@ class="ec-lmvtt-10">ArtBox</span></span></span>. The dafault according
to the PDF&#x00A0;Refence is <span class="obeylines-h"><span class="verb"><span
class="ec-lmvtt-10">CropBox</span></span></span> </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-8-37-"><td style="white-space:nowrap; text-align:left;" id="TBL-8-37-1"
+ style="vertical-align:baseline;" id="TBL-8-36-"><td style="white-space:nowrap; text-align:left;" id="TBL-8-36-1"
class="td01"><span
-class="ec-lmvtt-10">pdfviewclip </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-37-2"
+class="ec-lmvtt-10">pdfviewclip </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-36-2"
class="td11">
- <!--l. 790--><p class="noindent" >name </td><td style="white-space:nowrap; text-align:left;" id="TBL-8-37-3"
+ <!--l. 790--><p class="noindent" >name </td><td style="white-space:nowrap; text-align:left;" id="TBL-8-36-3"
class="td11"> <span
-class="ec-lmri-10">empty </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-37-4"
+class="ec-lmri-10">empty </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-36-4"
class="td10">
<!--l. 790--><p class="noindent" >set /ViewClip of viewer preferences Possible
values are <span class="obeylines-h"><span class="verb"><span
@@ -2104,26 +2147,29 @@ class="ec-lmvtt-10">ArtBox</span></span></span>. The dafault according
to the PDF&#x00A0;Refence is <span class="obeylines-h"><span class="verb"><span
class="ec-lmvtt-10">CropBox</span></span></span> </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-8-38-"><td style="white-space:nowrap; text-align:left;" id="TBL-8-38-1"
+ style="vertical-align:baseline;" id="TBL-8-37-"><td style="white-space:nowrap; text-align:left;" id="TBL-8-37-1"
class="td01"><span
-class="ec-lmvtt-10">pdfwindowui </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-38-2"
+class="ec-lmvtt-10">pdfwindowui </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-37-2"
class="td11">
- <!--l. 794--><p class="noindent" >boolean </td><td style="white-space:nowrap; text-align:left;" id="TBL-8-38-3"
+ <!--l. 794--><p class="noindent" >boolean </td><td style="white-space:nowrap; text-align:left;" id="TBL-8-37-3"
class="td11"> <span
-class="ec-lmri-10">true </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-38-4"
+class="ec-lmri-10">true </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-37-4"
class="td10">
<!--l. 794--><p class="noindent" >make PDF user interface elements visible </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-8-39-"><td style="white-space:nowrap; text-align:left;" id="TBL-8-39-1"
+ style="vertical-align:baseline;" id="TBL-8-38-"><td style="white-space:nowrap; text-align:left;" id="TBL-8-38-1"
class="td01"><span
-class="ec-lmvtt-10">unicode </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-39-2"
+class="ec-lmvtt-10">unicode </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-38-2"
class="td11">
- <!--l. 795--><p class="noindent" >boolean </td><td style="white-space:nowrap; text-align:left;" id="TBL-8-39-3"
+ <!--l. 795--><p class="noindent" >boolean </td><td style="white-space:nowrap; text-align:left;" id="TBL-8-38-3"
class="td11"> <span
-class="ec-lmri-10">true </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-39-4"
+class="ec-lmri-10">true </span></td><td style="white-space:normal; text-align:left;" id="TBL-8-38-4"
class="td10">
<!--l. 795--><p class="noindent" >Unicode encoded PDF strings </td>
</tr><tr
+ style="vertical-align:baseline;" id="TBL-8-39-"><td style="white-space:nowrap; text-align:left;" id="TBL-8-39-1"
+class="td01"> </td>
+</tr><tr
style="vertical-align:baseline;" id="TBL-8-40-"><td style="white-space:nowrap; text-align:left;" id="TBL-8-40-1"
class="td01"> </td>
</tr><tr
@@ -2131,16 +2177,16 @@ class="td01"> </td>
class="td01"> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-8-42-"><td style="white-space:nowrap; text-align:left;" id="TBL-8-42-1"
-class="td01"> </td>
-</tr><tr
- style="vertical-align:baseline;" id="TBL-8-43-"><td style="white-space:nowrap; text-align:left;" id="TBL-8-43-1"
-class="td01"> </td></tr>
+class="td01"> </td><td style="white-space:normal; text-align:left;" id="TBL-8-42-2"
+class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-8-42-3"
+class="td11"> </td><td style="white-space:normal; text-align:left;" id="TBL-8-42-4"
+class="td10"></td></tr>
</table></div>
<!--l. 798--><p class="noindent" >Each link in Acrobat carries its own magnification level, which is set using PDF coordinate space, which
is not the same as TeX&#8217;s. The unit is bp and the origin is in the lower left corner. See also <span class="obeylines-h"><span class="verb"><span
class="ec-lmvtt-10">\hypercalcbp</span></span></span>
that is explained on page <a
-href="#x1-190004.3">47<!--tex4ht:ref: hypercalcbp --></a>. pdfTeX&#x00A0;works by supplying default values for <span
+href="#x1-190004.3">48<!--tex4ht:ref: hypercalcbp --></a>. pdfTeX&#x00A0;works by supplying default values for <span
class="ec-lmvtt-10">XYZ </span>(horizontal <span
class="lmsy-10">&#x00D7;</span>
vertical <span
@@ -2174,6 +2220,8 @@ class="ec-lmri-10">null null</span>
<span
class="ec-lmri-10">null </span>will give the same values as the current
page. </td>
+
+
</tr><tr
style="vertical-align:baseline;" id="TBL-9-2-"><td style="white-space:nowrap; text-align:left;" id="TBL-9-2-1"
class="td01"><span
@@ -2197,8 +2245,6 @@ class="td11"> <span
class="ec-lmri-10">left </span></td><td style="white-space:normal; text-align:left;" id="TBL-9-4-3"
class="td10">
<!--l. 815--><p class="noindent" >Fits the height of the page to the window. </td>
-
-
</tr><tr
style="vertical-align:baseline;" id="TBL-9-5-"><td style="white-space:nowrap; text-align:left;" id="TBL-9-5-1"
class="td01"><span
@@ -2348,6 +2394,8 @@ class="ec-lmvtt-10">Box </span></td><td style="white-space:nowrap; text-a
class="td11"> /M </td><td style="white-space:normal; text-align:left;" id="TBL-11-2-3"
class="td10">
<!--l. 843--><p class="noindent" >A box sweeps in or out. </td>
+
+
</tr><tr
style="vertical-align:baseline;" id="TBL-11-3-"><td style="white-space:nowrap; text-align:left;" id="TBL-11-3-1"
class="td01"><span
@@ -2364,8 +2412,6 @@ class="td11"> /Di </td><td style="white-space:normal; text-align:left;
class="td10">
<!--l. 845--><p class="noindent" >Similar to Dissolve, except the effect sweeps across the
screen. </td>
-
-
</tr><tr
style="vertical-align:baseline;" id="TBL-11-5-"><td style="white-space:nowrap; text-align:left;" id="TBL-11-5-1"
class="td01"><span
@@ -2493,14 +2539,14 @@ id="TBL-12-3"></colgroup>
<tr
style="vertical-align:baseline;" id="TBL-12-1-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-1-1"
class="td01"><span
-class="ec-lmvtt-10">allbordercolors </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-1-2"
+class="ec-lmvtt-10">allbordercolors </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-1-2"
class="td11"> </td><td style="white-space:normal; text-align:left;" id="TBL-12-1-3"
class="td10">
<!--l. 894--><p class="noindent" >Set all border color options </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-12-2-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-2-1"
class="td01"><span
-class="ec-lmvtt-10">allcolors </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-2-2"
+class="ec-lmvtt-10">allcolors </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-2-2"
class="td11"> </td><td style="white-space:normal; text-align:left;" id="TBL-12-2-3"
class="td10">
<!--l. 895--><p class="noindent" >Set all color options (without border and field
@@ -2508,7 +2554,7 @@ class="td10">
</tr><tr
style="vertical-align:baseline;" id="TBL-12-3-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-3-1"
class="td01"><span
-class="ec-lmvtt-10">anchorcolor </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-3-2"
+class="ec-lmvtt-10">anchorcolor </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-3-2"
class="td11"> <span
class="ec-lmri-10">black </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-3-3"
class="td10">
@@ -2516,7 +2562,7 @@ class="td10">
</tr><tr
style="vertical-align:baseline;" id="TBL-12-4-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-4-1"
class="td01"><span
-class="ec-lmvtt-10">backref </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-4-2"
+class="ec-lmvtt-10">backref </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-4-2"
class="td11"> <span
class="ec-lmri-10">false </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-4-3"
class="td10">
@@ -2524,7 +2570,7 @@ class="td10">
</tr><tr
style="vertical-align:baseline;" id="TBL-12-5-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-5-1"
class="td01"><span
-class="ec-lmvtt-10">baseurl </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-5-2"
+class="ec-lmvtt-10">baseurl </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-5-2"
class="td11"> <span
class="ec-lmri-10">empty </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-5-3"
class="td10">
@@ -2532,7 +2578,7 @@ class="td10">
</tr><tr
style="vertical-align:baseline;" id="TBL-12-6-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-6-1"
class="td01"><span
-class="ec-lmvtt-10">bookmarks </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-6-2"
+class="ec-lmvtt-10">bookmarks </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-6-2"
class="td11"> <span
class="ec-lmri-10">true </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-6-3"
class="td10">
@@ -2540,7 +2586,7 @@ class="td10">
</tr><tr
style="vertical-align:baseline;" id="TBL-12-7-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-7-1"
class="td01"><span
-class="ec-lmvtt-10">bookmarksnumbered </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-7-2"
+class="ec-lmvtt-10">bookmarksnumbered </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-7-2"
class="td11"> <span
class="ec-lmri-10">false </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-7-3"
class="td10">
@@ -2548,7 +2594,7 @@ class="td10">
</tr><tr
style="vertical-align:baseline;" id="TBL-12-8-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-8-1"
class="td01"><span
-class="ec-lmvtt-10">bookmarksopen </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-8-2"
+class="ec-lmvtt-10">bookmarksopen </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-8-2"
class="td11"> <span
class="ec-lmri-10">false </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-8-3"
class="td10">
@@ -2556,7 +2602,7 @@ class="td10">
</tr><tr
style="vertical-align:baseline;" id="TBL-12-9-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-9-1"
class="td01"><span
-class="ec-lmvtt-10">bookmarksopenlevel </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-9-2"
+class="ec-lmvtt-10">bookmarksopenlevel </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-9-2"
class="td11"> <span
class="ec-lmvtt-10">\maxdimen </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-9-3"
class="td10">
@@ -2564,7 +2610,7 @@ class="td10">
</tr><tr
style="vertical-align:baseline;" id="TBL-12-10-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-10-1"
class="td01"><span
-class="ec-lmvtt-10">bookmarkstype </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-10-2"
+class="ec-lmvtt-10">bookmarkstype </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-10-2"
class="td11"> <span
class="ec-lmri-10">toc </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-10-3"
class="td10">
@@ -2572,7 +2618,7 @@ class="td10">
</tr><tr
style="vertical-align:baseline;" id="TBL-12-11-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-11-1"
class="td01"><span
-class="ec-lmvtt-10">breaklinks </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-11-2"
+class="ec-lmvtt-10">breaklinks </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-11-2"
class="td11"> <span
class="ec-lmri-10">false </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-11-3"
class="td10">
@@ -2580,7 +2626,7 @@ class="td10">
</tr><tr
style="vertical-align:baseline;" id="TBL-12-12-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-12-1"
class="td01"><span
-class="ec-lmvtt-10">CJKbookmarks </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-12-2"
+class="ec-lmvtt-10">CJKbookmarks </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-12-2"
class="td11"> <span
class="ec-lmri-10">false </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-12-3"
class="td10">
@@ -2588,7 +2634,7 @@ class="td10">
</tr><tr
style="vertical-align:baseline;" id="TBL-12-13-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-13-1"
class="td01"><span
-class="ec-lmvtt-10">citebordercolor </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-13-2"
+class="ec-lmvtt-10">citebordercolor </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-13-2"
class="td11"> <span
class="ec-lmri-10">0 1 0 </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-13-3"
class="td10">
@@ -2596,7 +2642,7 @@ class="td10">
</tr><tr
style="vertical-align:baseline;" id="TBL-12-14-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-14-1"
class="td01"><span
-class="ec-lmvtt-10">citecolor </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-14-2"
+class="ec-lmvtt-10">citecolor </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-14-2"
class="td11"> <span
class="ec-lmri-10">green </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-14-3"
class="td10">
@@ -2604,35 +2650,35 @@ class="td10">
</tr><tr
style="vertical-align:baseline;" id="TBL-12-15-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-15-1"
class="td01"><span
-class="ec-lmvtt-10">colorlinks </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-15-2"
+class="ec-lmvtt-10">colorlinks </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-15-2"
class="td11"> <span
class="ec-lmri-10">false </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-15-3"
class="td10">
<!--l. 908--><p class="noindent" >color links </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-12-16-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-16-1"
-class="td01"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-12-16-2"
+class="td01"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-12-16-2"
class="td11"> <span
class="ec-lmri-10">true </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-16-3"
class="td10">
<!--l. 909--><p class="noindent" >(<span
class="ec-lmss-10">tex4ht</span>, <span
class="ec-lmss-10">dviwindo</span>) </td>
+
+
</tr><tr
style="vertical-align:baseline;" id="TBL-12-17-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-17-1"
class="td01"><span
-class="ec-lmvtt-10">debug </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-17-2"
+class="ec-lmvtt-10">debug </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-17-2"
class="td11"> <span
class="ec-lmri-10">false </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-17-3"
class="td10">
<!--l. 910--><p class="noindent" >provide details of anchors defined; same as
verbose </td>
-
-
</tr><tr
style="vertical-align:baseline;" id="TBL-12-18-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-18-1"
class="td01"><span
-class="ec-lmvtt-10">destlabel </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-18-2"
+class="ec-lmvtt-10">destlabel </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-18-2"
class="td11"> <span
class="ec-lmri-10">false </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-18-3"
class="td10">
@@ -2642,7 +2688,7 @@ class="ec-lmvtt-10">\label</span></span></span>
</tr><tr
style="vertical-align:baseline;" id="TBL-12-19-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-19-1"
class="td01"><span
-class="ec-lmvtt-10">draft </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-19-2"
+class="ec-lmvtt-10">draft </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-19-2"
class="td11"> <span
class="ec-lmri-10">false </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-19-3"
class="td10">
@@ -2650,586 +2696,572 @@ class="td10">
</tr><tr
style="vertical-align:baseline;" id="TBL-12-20-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-20-1"
class="td01"><span
-class="ec-lmvtt-10">driverfallback </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-20-2"
+class="ec-lmvtt-10">driverfallback </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-20-2"
class="td11"> </td><td style="white-space:normal; text-align:left;" id="TBL-12-20-3"
class="td10">
<!--l. 913--><p class="noindent" >default if no driver specified or detected </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-12-21-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-21-1"
-class="td01"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-12-21-2"
-class="td11"> </td><td style="white-space:normal; text-align:left;" id="TBL-12-21-3"
-class="td10"></td></tr>
-<tr
- style="vertical-align:baseline;" id="TBL-12-22-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-22-1"
class="td01"><span
-class="ec-lmvtt-10">dvipdfm </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-22-2"
-class="td11"> </td><td style="white-space:normal; text-align:left;" id="TBL-12-22-3"
+class="ec-lmvtt-10">dvipdfm </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-21-2"
+class="td11"> </td><td style="white-space:normal; text-align:left;" id="TBL-12-21-3"
class="td10">
<!--l. 914--><p class="noindent" >use <span
class="ec-lmss-10">dvipdfm </span>backend </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-23-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-23-1"
+ style="vertical-align:baseline;" id="TBL-12-22-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-22-1"
class="td01"><span
-class="ec-lmvtt-10">dvipdfmx </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-23-2"
-class="td11"> </td><td style="white-space:normal; text-align:left;" id="TBL-12-23-3"
+class="ec-lmvtt-10">dvipdfmx </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-22-2"
+class="td11"> </td><td style="white-space:normal; text-align:left;" id="TBL-12-22-3"
class="td10">
<!--l. 915--><p class="noindent" >use <span
class="ec-lmss-10">dvipdfmx </span>backend </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-24-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-24-1"
+ style="vertical-align:baseline;" id="TBL-12-23-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-23-1"
class="td01"><span
-class="ec-lmvtt-10">dvips </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-24-2"
-class="td11"> </td><td style="white-space:normal; text-align:left;" id="TBL-12-24-3"
+class="ec-lmvtt-10">dvips </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-23-2"
+class="td11"> </td><td style="white-space:normal; text-align:left;" id="TBL-12-23-3"
class="td10">
<!--l. 916--><p class="noindent" >use <span
class="ec-lmss-10">dvips </span>backend </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-25-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-25-1"
+ style="vertical-align:baseline;" id="TBL-12-24-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-24-1"
class="td01"><span
-class="ec-lmvtt-10">dvipsone </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-25-2"
-class="td11"> </td><td style="white-space:normal; text-align:left;" id="TBL-12-25-3"
+class="ec-lmvtt-10">dvipsone </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-24-2"
+class="td11"> </td><td style="white-space:normal; text-align:left;" id="TBL-12-24-3"
class="td10">
<!--l. 917--><p class="noindent" >use <span
class="ec-lmss-10">dvipsone </span>backend </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-26-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-26-1"
+ style="vertical-align:baseline;" id="TBL-12-25-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-25-1"
class="td01"><span
-class="ec-lmvtt-10">dviwindo </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-26-2"
-class="td11"> </td><td style="white-space:normal; text-align:left;" id="TBL-12-26-3"
+class="ec-lmvtt-10">dviwindo </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-25-2"
+class="td11"> </td><td style="white-space:normal; text-align:left;" id="TBL-12-25-3"
class="td10">
<!--l. 918--><p class="noindent" >use <span
class="ec-lmss-10">dviwindo </span>backend </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-27-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-27-1"
+ style="vertical-align:baseline;" id="TBL-12-26-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-26-1"
class="td01"><span
-class="ec-lmvtt-10">encap </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-27-2"
-class="td11"> </td><td style="white-space:normal; text-align:left;" id="TBL-12-27-3"
+class="ec-lmvtt-10">encap </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-26-2"
+class="td11"> </td><td style="white-space:normal; text-align:left;" id="TBL-12-26-3"
class="td10">
<!--l. 919--><p class="noindent" >to set encap character for hyperindex </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-28-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-28-1"
+ style="vertical-align:baseline;" id="TBL-12-27-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-27-1"
class="td01"><span
-class="ec-lmvtt-10">extension </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-28-2"
+class="ec-lmvtt-10">extension </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-27-2"
class="td11"> <span
-class="ec-lmri-10">dvi </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-28-3"
+class="ec-lmri-10">dvi </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-27-3"
class="td10">
<!--l. 920--><p class="noindent" >suffix of linked files </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-29-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-29-1"
+ style="vertical-align:baseline;" id="TBL-12-28-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-28-1"
class="td01"><span
-class="ec-lmvtt-10">filebordercolor </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-29-2"
+class="ec-lmvtt-10">filebordercolor </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-28-2"
class="td11"> <span
-class="ec-lmri-10">0 .5 .5 </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-29-3"
+class="ec-lmri-10">0 .5 .5 </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-28-3"
class="td10">
<!--l. 921--><p class="noindent" >color of border around file links </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-30-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-30-1"
+ style="vertical-align:baseline;" id="TBL-12-29-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-29-1"
class="td01"><span
-class="ec-lmvtt-10">filecolor </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-30-2"
+class="ec-lmvtt-10">filecolor </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-29-2"
class="td11"> <span
-class="ec-lmri-10">cyan </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-30-3"
+class="ec-lmri-10">cyan </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-29-3"
class="td10">
<!--l. 922--><p class="noindent" >color of file links </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-31-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-31-1"
+ style="vertical-align:baseline;" id="TBL-12-30-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-30-1"
class="td01"><span
-class="ec-lmvtt-10">final </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-31-2"
+class="ec-lmvtt-10">final </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-30-2"
class="td11"> <span
-class="ec-lmri-10">true </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-31-3"
+class="ec-lmri-10">true </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-30-3"
class="td10">
<!--l. 923--><p class="noindent" >opposite of option draft </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-32-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-32-1"
+ style="vertical-align:baseline;" id="TBL-12-31-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-31-1"
class="td01"><span
-class="ec-lmvtt-10">frenchlinks </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-32-2"
+class="ec-lmvtt-10">frenchlinks </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-31-2"
class="td11"> <span
-class="ec-lmri-10">false </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-32-3"
+class="ec-lmri-10">false </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-31-3"
class="td10">
<!--l. 924--><p class="noindent" >use small caps instead of color for links </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-33-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-33-1"
+ style="vertical-align:baseline;" id="TBL-12-32-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-32-1"
class="td01"><span
-class="ec-lmvtt-10">hidelinks </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-33-2"
-class="td11"> </td><td style="white-space:normal; text-align:left;" id="TBL-12-33-3"
+class="ec-lmvtt-10">hidelinks </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-32-2"
+class="td11"> </td><td style="white-space:normal; text-align:left;" id="TBL-12-32-3"
class="td10">
<!--l. 925--><p class="noindent" >Hide links (removing color and border) </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-34-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-34-1"
+ style="vertical-align:baseline;" id="TBL-12-33-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-33-1"
class="td01"><span
-class="ec-lmvtt-10">hyperfigures </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-34-2"
+class="ec-lmvtt-10">hyperfigures </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-33-2"
class="td11"> <span
-class="ec-lmri-10">false </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-34-3"
+class="ec-lmri-10">false </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-33-3"
class="td10">
<!--l. 926--><p class="noindent" >make figures hyper links </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-35-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-35-1"
+ style="vertical-align:baseline;" id="TBL-12-34-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-34-1"
class="td01"><span
-class="ec-lmvtt-10">hyperfootnotes </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-35-2"
+class="ec-lmvtt-10">hyperfootnotes </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-34-2"
class="td11"> <span
-class="ec-lmri-10">true </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-35-3"
+class="ec-lmri-10">true </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-34-3"
class="td10">
<!--l. 927--><p class="noindent" >set up hyperlinked footnotes </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-36-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-36-1"
+ style="vertical-align:baseline;" id="TBL-12-35-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-35-1"
class="td01"><span
-class="ec-lmvtt-10">hyperindex </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-36-2"
+class="ec-lmvtt-10">hyperindex </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-35-2"
class="td11"> <span
-class="ec-lmri-10">true </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-36-3"
+class="ec-lmri-10">true </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-35-3"
class="td10">
<!--l. 928--><p class="noindent" >set up hyperlinked indices </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-37-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-37-1"
+ style="vertical-align:baseline;" id="TBL-12-36-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-36-1"
class="td01"><span
-class="ec-lmvtt-10">hypertex </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-37-2"
-class="td11"> </td><td style="white-space:normal; text-align:left;" id="TBL-12-37-3"
+class="ec-lmvtt-10">hypertex </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-36-2"
+class="td11"> </td><td style="white-space:normal; text-align:left;" id="TBL-12-36-3"
class="td10">
<!--l. 929--><p class="noindent" >use <span
class="ec-lmss-10">HyperTeX </span>backend </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-38-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-38-1"
+ style="vertical-align:baseline;" id="TBL-12-37-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-37-1"
class="td01"><span
-class="ec-lmvtt-10">hypertexnames </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-38-2"
+class="ec-lmvtt-10">hypertexnames </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-37-2"
class="td11"> <span
-class="ec-lmri-10">true </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-38-3"
+class="ec-lmri-10">true </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-37-3"
class="td10">
<!--l. 930--><p class="noindent" >use guessable names for links </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-39-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-39-1"
+ style="vertical-align:baseline;" id="TBL-12-38-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-38-1"
class="td01"><span
-class="ec-lmvtt-10">implicit </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-39-2"
+class="ec-lmvtt-10">implicit </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-38-2"
class="td11"> <span
-class="ec-lmri-10">true </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-39-3"
+class="ec-lmri-10">true </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-38-3"
class="td10">
<!--l. 931--><p class="noindent" >redefine LaTeX&#x00A0;internals </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-40-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-40-1"
+ style="vertical-align:baseline;" id="TBL-12-39-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-39-1"
class="td01"><span
-class="ec-lmvtt-10">latex2html </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-40-2"
-class="td11"> </td><td style="white-space:normal; text-align:left;" id="TBL-12-40-3"
+class="ec-lmvtt-10">latex2html </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-39-2"
+class="td11"> </td><td style="white-space:normal; text-align:left;" id="TBL-12-39-3"
class="td10">
<!--l. 932--><p class="noindent" >use <span
class="ec-lmss-10">LaTeX2HTML </span>backend </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-41-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-41-1"
+ style="vertical-align:baseline;" id="TBL-12-40-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-40-1"
class="td01"><span
-class="ec-lmvtt-10">linkbordercolor </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-41-2"
+class="ec-lmvtt-10">linkbordercolor </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-40-2"
class="td11"> <span
-class="ec-lmri-10">1 0 0 </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-41-3"
+class="ec-lmri-10">1 0 0 </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-40-3"
class="td10">
<!--l. 933--><p class="noindent" >color of border around links </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-42-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-42-1"
-class="td01"> </td></tr>
-<tr
- style="vertical-align:baseline;" id="TBL-12-43-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-43-1"
+ style="vertical-align:baseline;" id="TBL-12-41-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-41-1"
class="td01"><span
-class="ec-lmvtt-10">linkcolor </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-43-2"
+class="ec-lmvtt-10">linkcolor </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-41-2"
class="td11"> <span
-class="ec-lmri-10">red </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-43-3"
+class="ec-lmri-10">red </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-41-3"
class="td10">
<!--l. 934--><p class="noindent" >color of links </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-44-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-44-1"
+ style="vertical-align:baseline;" id="TBL-12-42-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-42-1"
class="td01"><span
-class="ec-lmvtt-10">linktoc </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-44-2"
+class="ec-lmvtt-10">linktoc </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-42-2"
class="td11"> <span
-class="ec-lmri-10">section </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-44-3"
+class="ec-lmri-10">section </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-42-3"
class="td10">
<!--l. 935--><p class="noindent" >make text be link on TOC, LOF and LOT </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-45-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-45-1"
+ style="vertical-align:baseline;" id="TBL-12-43-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-43-1"
class="td01"><span
-class="ec-lmvtt-10">linktocpage </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-45-2"
+class="ec-lmvtt-10">linktocpage </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-43-2"
class="td11"> <span
-class="ec-lmri-10">false </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-45-3"
+class="ec-lmri-10">false </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-43-3"
class="td10">
<!--l. 936--><p class="noindent" >make page number, not text, be link on TOC,
LOF and LOT </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-46-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-46-1"
+ style="vertical-align:baseline;" id="TBL-12-44-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-44-1"
class="td01"><span
-class="ec-lmvtt-10">menubordercolor </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-46-2"
+class="ec-lmvtt-10">menubordercolor </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-44-2"
class="td11"> <span
-class="ec-lmri-10">1 0 0 </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-46-3"
+class="ec-lmri-10">1 0 0 </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-44-3"
class="td10">
<!--l. 937--><p class="noindent" >color of border around menu links </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-47-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-47-1"
+ style="vertical-align:baseline;" id="TBL-12-45-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-45-1"
class="td01"><span
-class="ec-lmvtt-10">menucolor </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-47-2"
+class="ec-lmvtt-10">menucolor </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-45-2"
class="td11"> <span
-class="ec-lmri-10">red </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-47-3"
+class="ec-lmri-10">red </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-45-3"
class="td10">
<!--l. 938--><p class="noindent" >color for menu links </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-48-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-48-1"
+ style="vertical-align:baseline;" id="TBL-12-46-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-46-1"
class="td01"><span
-class="ec-lmvtt-10">nativepdf </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-48-2"
+class="ec-lmvtt-10">nativepdf </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-46-2"
class="td11"> <span
-class="ec-lmri-10">false </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-48-3"
+class="ec-lmri-10">false </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-46-3"
class="td10">
<!--l. 939--><p class="noindent" >an alias for <span
class="ec-lmss-10">dvips</span> </td>
+
+
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-49-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-49-1"
+ style="vertical-align:baseline;" id="TBL-12-47-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-47-1"
class="td01"><span
-class="ec-lmvtt-10">naturalnames </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-49-2"
+class="ec-lmvtt-10">naturalnames </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-47-2"
class="td11"> <span
-class="ec-lmri-10">false </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-49-3"
+class="ec-lmri-10">false </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-47-3"
class="td10">
<!--l. 940--><p class="noindent" >use LaTeX-computed names for links </td>
-
-
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-50-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-50-1"
+ style="vertical-align:baseline;" id="TBL-12-48-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-48-1"
class="td01"><span
-class="ec-lmvtt-10">nesting </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-50-2"
+class="ec-lmvtt-10">nesting </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-48-2"
class="td11"> <span
-class="ec-lmri-10">false </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-50-3"
+class="ec-lmri-10">false </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-48-3"
class="td10">
<!--l. 941--><p class="noindent" >allow nesting of links </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-51-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-51-1"
+ style="vertical-align:baseline;" id="TBL-12-49-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-49-1"
class="td01"><span
-class="ec-lmvtt-10">pageanchor </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-51-2"
+class="ec-lmvtt-10">pageanchor </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-49-2"
class="td11"> <span
-class="ec-lmri-10">true </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-51-3"
+class="ec-lmri-10">true </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-49-3"
class="td10">
<!--l. 942--><p class="noindent" >put an anchor on every page </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-52-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-52-1"
+ style="vertical-align:baseline;" id="TBL-12-50-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-50-1"
class="td01"><span
-class="ec-lmvtt-10">pagebackref </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-52-2"
+class="ec-lmvtt-10">pagebackref </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-50-2"
class="td11"> <span
-class="ec-lmri-10">false </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-52-3"
+class="ec-lmri-10">false </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-50-3"
class="td10">
<!--l. 943--><p class="noindent" >backreference by page number </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-53-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-53-1"
+ style="vertical-align:baseline;" id="TBL-12-51-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-51-1"
class="td01"><span
-class="ec-lmvtt-10">pdfauthor </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-53-2"
+class="ec-lmvtt-10">pdfauthor </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-51-2"
class="td11"> <span
-class="ec-lmri-10">empty </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-53-3"
+class="ec-lmri-10">empty </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-51-3"
class="td10">
<!--l. 944--><p class="noindent" >text for PDF Author field </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-54-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-54-1"
+ style="vertical-align:baseline;" id="TBL-12-52-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-52-1"
class="td01"><span
-class="ec-lmvtt-10">pdfborder </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-54-2"
+class="ec-lmvtt-10">pdfborder </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-52-2"
class="td11"> <span
-class="ec-lmri-10">0 0 1 </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-54-3"
+class="ec-lmri-10">0 0 1 </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-52-3"
class="td10">
<!--l. 945--><p class="noindent" >width of PDF link border </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-55-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-55-1"
-class="td01"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-12-55-2"
+ style="vertical-align:baseline;" id="TBL-12-53-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-53-1"
+class="td01"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-12-53-2"
class="td11"> <span
-class="ec-lmri-10">0 0 0 </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-55-3"
+class="ec-lmri-10">0 0 0 </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-53-3"
class="td10">
<!--l. 946--><p class="noindent" >(<span
class="ec-lmvtt-10">colorlinks)</span> </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-56-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-56-1"
+ style="vertical-align:baseline;" id="TBL-12-54-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-54-1"
class="td01"><span
-class="ec-lmvtt-10">pdfborderstyle </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-56-2"
-class="td11"> </td><td style="white-space:normal; text-align:left;" id="TBL-12-56-3"
+class="ec-lmvtt-10">pdfborderstyle </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-54-2"
+class="td11"> </td><td style="white-space:normal; text-align:left;" id="TBL-12-54-3"
class="td10">
<!--l. 947--><p class="noindent" >border style for links </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-57-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-57-1"
+ style="vertical-align:baseline;" id="TBL-12-55-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-55-1"
class="td01"><span
-class="ec-lmvtt-10">pdfcenterwindow </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-57-2"
+class="ec-lmvtt-10">pdfcenterwindow </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-55-2"
class="td11"> <span
-class="ec-lmri-10">false </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-57-3"
+class="ec-lmri-10">false </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-55-3"
class="td10">
<!--l. 948--><p class="noindent" >position the document window in the center
of the screen </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-58-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-58-1"
+ style="vertical-align:baseline;" id="TBL-12-56-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-56-1"
class="td01"><span
-class="ec-lmvtt-10">pdfcreator </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-58-2"
+class="ec-lmvtt-10">pdfcreator </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-56-2"
class="td11"> <span
-class="ec-lmri-10">LaTeX with </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-58-3"
+class="ec-lmri-10">LaTeX with </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-56-3"
class="td10">
<!--l. 949--><p class="noindent" >text for PDF Creator field </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-59-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-59-1"
-class="td01"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-12-59-2"
+ style="vertical-align:baseline;" id="TBL-12-57-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-57-1"
+class="td01"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-12-57-2"
class="td11"> <span
-class="ec-lmri-10">hyperref </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-59-3"
+class="ec-lmri-10">hyperref </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-57-3"
class="td10">
<!--l. 951--><p class="noindent" > </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-60-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-60-1"
+ style="vertical-align:baseline;" id="TBL-12-58-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-58-1"
class="td01"><span
-class="ec-lmvtt-10">pdfdirection </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-60-2"
+class="ec-lmvtt-10">pdfdirection </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-58-2"
class="td11"> <span
-class="ec-lmri-10">empty </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-60-3"
+class="ec-lmri-10">empty </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-58-3"
class="td10">
<!--l. 951--><p class="noindent" >direction setting </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-61-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-61-1"
+ style="vertical-align:baseline;" id="TBL-12-59-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-59-1"
class="td01"><span
-class="ec-lmvtt-10">pdfdisplaydoctitle </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-61-2"
+class="ec-lmvtt-10">pdfdisplaydoctitle </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-59-2"
class="td11"> <span
-class="ec-lmri-10">false </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-61-3"
+class="ec-lmri-10">false </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-59-3"
class="td10">
<!--l. 952--><p class="noindent" >display document title instead of file name in
title bar </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-62-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-62-1"
+ style="vertical-align:baseline;" id="TBL-12-60-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-60-1"
class="td01"><span
-class="ec-lmvtt-10">pdfduplex </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-62-2"
+class="ec-lmvtt-10">pdfduplex </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-60-2"
class="td11"> <span
-class="ec-lmri-10">empty </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-62-3"
+class="ec-lmri-10">empty </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-60-3"
class="td10">
<!--l. 954--><p class="noindent" >paper handling option for print dialog </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-63-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-63-1"
-class="td01"> </td></tr>
-<tr
- style="vertical-align:baseline;" id="TBL-12-64-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-64-1"
+ style="vertical-align:baseline;" id="TBL-12-61-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-61-1"
class="td01"><span
-class="ec-lmvtt-10">pdffitwindow </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-64-2"
+class="ec-lmvtt-10">pdffitwindow </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-61-2"
class="td11"> <span
-class="ec-lmri-10">false </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-64-3"
+class="ec-lmri-10">false </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-61-3"
class="td10">
<!--l. 956--><p class="noindent" >resize document window to fit document size </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-65-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-65-1"
+ style="vertical-align:baseline;" id="TBL-12-62-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-62-1"
class="td01"><span
-class="ec-lmvtt-10">pdfhighlight </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-65-2"
+class="ec-lmvtt-10">pdfhighlight </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-62-2"
class="td11"> <span
-class="ec-lmri-10">/I </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-65-3"
+class="ec-lmri-10">/I </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-62-3"
class="td10">
<!--l. 957--><p class="noindent" >set highlighting of PDF links </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-66-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-66-1"
+ style="vertical-align:baseline;" id="TBL-12-63-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-63-1"
class="td01"><span
-class="ec-lmvtt-10">pdfinfo </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-66-2"
+class="ec-lmvtt-10">pdfinfo </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-63-2"
class="td11"> <span
-class="ec-lmri-10">empty </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-66-3"
+class="ec-lmri-10">empty </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-63-3"
class="td10">
<!--l. 958--><p class="noindent" >alternative interface for setting document
information </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-67-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-67-1"
+ style="vertical-align:baseline;" id="TBL-12-64-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-64-1"
class="td01"><span
-class="ec-lmvtt-10">pdfkeywords </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-67-2"
+class="ec-lmvtt-10">pdfkeywords </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-64-2"
class="td11"> <span
-class="ec-lmri-10">empty </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-67-3"
+class="ec-lmri-10">empty </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-64-3"
class="td10">
<!--l. 959--><p class="noindent" >text for PDF Keywords field </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-68-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-68-1"
+ style="vertical-align:baseline;" id="TBL-12-65-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-65-1"
class="td01"><span
-class="ec-lmvtt-10">pdflang </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-68-2"
+class="ec-lmvtt-10">pdflang </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-65-2"
class="td11"> <span
-class="ec-lmri-10">relax </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-68-3"
+class="ec-lmri-10">relax </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-65-3"
class="td10">
<!--l. 960--><p class="noindent" >PDF language identifier (RFC 3066) </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-69-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-69-1"
+ style="vertical-align:baseline;" id="TBL-12-66-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-66-1"
class="td01"><span
-class="ec-lmvtt-10">pdfmark </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-69-2"
+class="ec-lmvtt-10">pdfmark </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-66-2"
class="td11"> <span
-class="ec-lmri-10">false </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-69-3"
+class="ec-lmri-10">false </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-66-3"
class="td10">
<!--l. 961--><p class="noindent" >an alias for <span
class="ec-lmss-10">dvips</span> </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-70-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-70-1"
+ style="vertical-align:baseline;" id="TBL-12-67-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-67-1"
class="td01"><span
-class="ec-lmvtt-10">pdfmenubar </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-70-2"
+class="ec-lmvtt-10">pdfmenubar </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-67-2"
class="td11"> <span
-class="ec-lmri-10">true </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-70-3"
+class="ec-lmri-10">true </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-67-3"
class="td10">
<!--l. 962--><p class="noindent" >make PDF viewer&#8217;s menu bar visible </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-71-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-71-1"
+ style="vertical-align:baseline;" id="TBL-12-68-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-68-1"
class="td01"><span
-class="ec-lmvtt-10">pdfnewwindow </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-71-2"
+class="ec-lmvtt-10">pdfnewwindow </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-68-2"
class="td11"> <span
-class="ec-lmri-10">false </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-71-3"
+class="ec-lmri-10">false </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-68-3"
class="td10">
<!--l. 963--><p class="noindent" >make links that open another PDF </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-72-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-72-1"
-class="td01"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-12-72-2"
-class="td11"> </td><td style="white-space:normal; text-align:left;" id="TBL-12-72-3"
+ style="vertical-align:baseline;" id="TBL-12-69-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-69-1"
+class="td01"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-12-69-2"
+class="td11"> </td><td style="white-space:normal; text-align:left;" id="TBL-12-69-3"
class="td10">
<!--l. 964--><p class="noindent" >file start a new window </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-73-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-73-1"
+ style="vertical-align:baseline;" id="TBL-12-70-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-70-1"
class="td01"><span
-class="ec-lmvtt-10">pdfnonfullscreenpagemode </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-73-2"
+class="ec-lmvtt-10">pdfnonfullscreenpagemode </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-70-2"
class="td11"> <span
-class="ec-lmri-10">empty </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-73-3"
+class="ec-lmri-10">empty </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-70-3"
class="td10">
<!--l. 966--><p class="noindent" >page mode setting on exiting full-screen mode</td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-74-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-74-1"
+ style="vertical-align:baseline;" id="TBL-12-71-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-71-1"
class="td01"><span
-class="ec-lmvtt-10">pdfnumcopies </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-74-2"
+class="ec-lmvtt-10">pdfnumcopies </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-71-2"
class="td11"> <span
-class="ec-lmri-10">empty </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-74-3"
+class="ec-lmri-10">empty </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-71-3"
class="td10">
<!--l. 968--><p class="noindent" >number of printed copies </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-75-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-75-1"
+ style="vertical-align:baseline;" id="TBL-12-72-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-72-1"
class="td01"><span
-class="ec-lmvtt-10">pdfpagelabels </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-75-2"
+class="ec-lmvtt-10">pdfpagelabels </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-72-2"
class="td11"> <span
-class="ec-lmri-10">true </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-75-3"
+class="ec-lmri-10">true </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-72-3"
class="td10">
<!--l. 969--><p class="noindent" >set PDF page labels </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-76-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-76-1"
+ style="vertical-align:baseline;" id="TBL-12-73-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-73-1"
class="td01"><span
-class="ec-lmvtt-10">pdfpagelayout </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-76-2"
+class="ec-lmvtt-10">pdfpagelayout </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-73-2"
class="td11"> <span
-class="ec-lmri-10">empty </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-76-3"
+class="ec-lmri-10">empty </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-73-3"
class="td10">
<!--l. 970--><p class="noindent" >set layout of PDF pages </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-77-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-77-1"
+ style="vertical-align:baseline;" id="TBL-12-74-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-74-1"
class="td01"><span
-class="ec-lmvtt-10">pdfpagemode </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-77-2"
+class="ec-lmvtt-10">pdfpagemode </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-74-2"
class="td11"> <span
-class="ec-lmri-10">empty </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-77-3"
+class="ec-lmri-10">empty </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-74-3"
class="td10">
<!--l. 971--><p class="noindent" >set default mode of PDF display </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-78-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-78-1"
+ style="vertical-align:baseline;" id="TBL-12-75-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-75-1"
class="td01"><span
-class="ec-lmvtt-10">pdfpagescrop </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-78-2"
+class="ec-lmvtt-10">pdfpagescrop </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-75-2"
class="td11"> <span
-class="ec-lmri-10">empty </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-78-3"
+class="ec-lmri-10">empty </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-75-3"
class="td10">
<!--l. 972--><p class="noindent" >set crop size of PDF document </td>
+
+
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-79-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-79-1"
+ style="vertical-align:baseline;" id="TBL-12-76-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-76-1"
class="td01"><span
-class="ec-lmvtt-10">pdfpagetransition </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-79-2"
+class="ec-lmvtt-10">pdfpagetransition </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-76-2"
class="td11"> <span
-class="ec-lmri-10">empty </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-79-3"
+class="ec-lmri-10">empty </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-76-3"
class="td10">
<!--l. 973--><p class="noindent" >set PDF page transition style </td>
-
-
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-80-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-80-1"
+ style="vertical-align:baseline;" id="TBL-12-77-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-77-1"
class="td01"><span
-class="ec-lmvtt-10">pdfpicktraybypdfsize </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-80-2"
+class="ec-lmvtt-10">pdfpicktraybypdfsize </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-77-2"
class="td11"> <span
-class="ec-lmri-10">empty </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-80-3"
+class="ec-lmri-10">empty </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-77-3"
class="td10">
<!--l. 975--><p class="noindent" >set option for print dialog </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-81-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-81-1"
+ style="vertical-align:baseline;" id="TBL-12-78-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-78-1"
class="td01"><span
-class="ec-lmvtt-10">pdfprintarea </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-81-2"
+class="ec-lmvtt-10">pdfprintarea </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-78-2"
class="td11"> <span
-class="ec-lmri-10">empty </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-81-3"
+class="ec-lmri-10">empty </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-78-3"
class="td10">
<!--l. 976--><p class="noindent" >set /PrintArea of viewer preferences </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-82-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-82-1"
+ style="vertical-align:baseline;" id="TBL-12-79-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-79-1"
class="td01"><span
-class="ec-lmvtt-10">pdfprintclip </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-82-2"
+class="ec-lmvtt-10">pdfprintclip </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-79-2"
class="td11"> <span
-class="ec-lmri-10">empty </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-82-3"
+class="ec-lmri-10">empty </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-79-3"
class="td10">
<!--l. 977--><p class="noindent" >set /PrintClip of viewer preferences </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-83-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-83-1"
+ style="vertical-align:baseline;" id="TBL-12-80-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-80-1"
class="td01"><span
-class="ec-lmvtt-10">pdfprintpagerange </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-83-2"
+class="ec-lmvtt-10">pdfprintpagerange </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-80-2"
class="td11"> <span
-class="ec-lmri-10">empty </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-83-3"
+class="ec-lmri-10">empty </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-80-3"
class="td10">
<!--l. 978--><p class="noindent" >set /PrintPageRange of viewer preferences </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-84-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-84-1"
-class="td01"> </td></tr>
-<tr
- style="vertical-align:baseline;" id="TBL-12-85-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-85-1"
+ style="vertical-align:baseline;" id="TBL-12-81-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-81-1"
class="td01"><span
-class="ec-lmvtt-10">pdfprintscaling </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-85-2"
+class="ec-lmvtt-10">pdfprintscaling </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-81-2"
class="td11"> <span
-class="ec-lmri-10">empty </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-85-3"
+class="ec-lmri-10">empty </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-81-3"
class="td10">
<!--l. 979--><p class="noindent" >page scaling option for print dialog </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-86-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-86-1"
+ style="vertical-align:baseline;" id="TBL-12-82-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-82-1"
class="td01"><span
-class="ec-lmvtt-10">pdfproducer </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-86-2"
+class="ec-lmvtt-10">pdfproducer </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-82-2"
class="td11"> <span
-class="ec-lmri-10">empty </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-86-3"
+class="ec-lmri-10">empty </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-82-3"
class="td10">
<!--l. 980--><p class="noindent" >text for PDF Producer field </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-87-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-87-1"
+ style="vertical-align:baseline;" id="TBL-12-83-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-83-1"
class="td01"><span
-class="ec-lmvtt-10">pdfremotestartview </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-87-2"
+class="ec-lmvtt-10">pdfremotestartview </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-83-2"
class="td11"> <span
-class="ec-lmri-10">Fit </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-87-3"
+class="ec-lmri-10">Fit </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-83-3"
class="td10">
<!--l. 981--><p class="noindent" >starting view of remote PDF documents </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-88-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-88-1"
+ style="vertical-align:baseline;" id="TBL-12-84-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-84-1"
class="td01"><span
-class="ec-lmvtt-10">pdfstartpage </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-88-2"
+class="ec-lmvtt-10">pdfstartpage </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-84-2"
class="td11"> <span
-class="ec-lmri-10">1 </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-88-3"
+class="ec-lmri-10">1 </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-84-3"
class="td10">
<!--l. 982--><p class="noindent" >page at which PDF document opens </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-89-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-89-1"
+ style="vertical-align:baseline;" id="TBL-12-85-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-85-1"
class="td01"><span
-class="ec-lmvtt-10">pdfstartview </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-89-2"
+class="ec-lmvtt-10">pdfstartview </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-85-2"
class="td11"> <span
-class="ec-lmri-10">Fit </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-89-3"
+class="ec-lmri-10">Fit </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-85-3"
class="td10">
<!--l. 983--><p class="noindent" >starting view of PDF document </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-90-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-90-1"
+ style="vertical-align:baseline;" id="TBL-12-86-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-86-1"
class="td01"><span
-class="ec-lmvtt-10">pdfsubject </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-90-2"
+class="ec-lmvtt-10">pdfsubject </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-86-2"
class="td11"> <span
-class="ec-lmri-10">empty </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-90-3"
+class="ec-lmri-10">empty </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-86-3"
class="td10">
<!--l. 984--><p class="noindent" >text for PDF Subject field </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-91-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-91-1"
+ style="vertical-align:baseline;" id="TBL-12-87-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-87-1"
class="td01"><span
-class="ec-lmvtt-10">pdftex </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-91-2"
-class="td11"> </td><td style="white-space:normal; text-align:left;" id="TBL-12-91-3"
+class="ec-lmvtt-10">pdftex </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-87-2"
+class="td11"> </td><td style="white-space:normal; text-align:left;" id="TBL-12-87-3"
class="td10">
<!--l. 985--><p class="noindent" >use <span
class="ec-lmss-10">pdfTeX </span>backend </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-92-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-92-1"
+ style="vertical-align:baseline;" id="TBL-12-88-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-88-1"
class="td01"><span
-class="ec-lmvtt-10">pdftitle </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-92-2"
+class="ec-lmvtt-10">pdftitle </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-88-2"
class="td11"> <span
-class="ec-lmri-10">empty </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-92-3"
+class="ec-lmri-10">empty </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-88-3"
class="td10">
<!--l. 986--><p class="noindent" >text for PDF Title field </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-93-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-93-1"
+ style="vertical-align:baseline;" id="TBL-12-89-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-89-1"
class="td01"><span
-class="ec-lmvtt-10">pdftoolbar </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-93-2"
+class="ec-lmvtt-10">pdftoolbar </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-89-2"
class="td11"> <span
-class="ec-lmri-10">true </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-93-3"
+class="ec-lmri-10">true </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-89-3"
class="td10">
<!--l. 987--><p class="noindent" >make PDF toolbar visible </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-94-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-94-1"
+ style="vertical-align:baseline;" id="TBL-12-90-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-90-1"
class="td01"><span
-class="ec-lmvtt-10">pdftrapped </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-94-2"
+class="ec-lmvtt-10">pdftrapped </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-90-2"
class="td11"> <span
-class="ec-lmri-10">empty </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-94-3"
+class="ec-lmri-10">empty </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-90-3"
class="td10">
<!--l. 988--><p class="noindent" >Sets the document information Trapped entry.
Possible values are <span
@@ -3238,122 +3270,119 @@ class="ec-lmvtt-10">False </span>and <span
class="ec-lmvtt-10">Unknown</span>.
An empty value means, the entry is not set. </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-95-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-95-1"
+ style="vertical-align:baseline;" id="TBL-12-91-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-91-1"
class="td01"><span
-class="ec-lmvtt-10">pdfview </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-95-2"
+class="ec-lmvtt-10">pdfview </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-91-2"
class="td11"> <span
-class="ec-lmri-10">XYZ </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-95-3"
+class="ec-lmri-10">XYZ </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-91-3"
class="td10">
<!--l. 991--><p class="noindent" >PDF &#8216;view&#8217; when on link traversal </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-96-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-96-1"
+ style="vertical-align:baseline;" id="TBL-12-92-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-92-1"
class="td01"><span
-class="ec-lmvtt-10">pdfviewarea </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-96-2"
+class="ec-lmvtt-10">pdfviewarea </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-92-2"
class="td11"> <span
-class="ec-lmri-10">empty </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-96-3"
+class="ec-lmri-10">empty </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-92-3"
class="td10">
<!--l. 992--><p class="noindent" >set /ViewArea of viewer preferences </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-97-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-97-1"
+ style="vertical-align:baseline;" id="TBL-12-93-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-93-1"
class="td01"><span
-class="ec-lmvtt-10">pdfviewclip </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-97-2"
+class="ec-lmvtt-10">pdfviewclip </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-93-2"
class="td11"> <span
-class="ec-lmri-10">empty </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-97-3"
+class="ec-lmri-10">empty </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-93-3"
class="td10">
<!--l. 993--><p class="noindent" >set /ViewClip of viewer preferences </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-98-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-98-1"
+ style="vertical-align:baseline;" id="TBL-12-94-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-94-1"
class="td01"><span
-class="ec-lmvtt-10">pdfwindowui </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-98-2"
+class="ec-lmvtt-10">pdfwindowui </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-94-2"
class="td11"> <span
-class="ec-lmri-10">true </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-98-3"
+class="ec-lmri-10">true </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-94-3"
class="td10">
<!--l. 994--><p class="noindent" >make PDF user interface elements visible </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-99-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-99-1"
+ style="vertical-align:baseline;" id="TBL-12-95-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-95-1"
class="td01"><span
-class="ec-lmvtt-10">plainpages </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-99-2"
+class="ec-lmvtt-10">plainpages </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-95-2"
class="td11"> <span
-class="ec-lmri-10">false </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-99-3"
+class="ec-lmri-10">false </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-95-3"
class="td10">
<!--l. 995--><p class="noindent" >do page number anchors as plain Arabic </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-100-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-100-1"
+ style="vertical-align:baseline;" id="TBL-12-96-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-96-1"
class="td01"><span
-class="ec-lmvtt-10">ps2pdf </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-100-2"
-class="td11"> </td><td style="white-space:normal; text-align:left;" id="TBL-12-100-3"
+class="ec-lmvtt-10">ps2pdf </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-96-2"
+class="td11"> </td><td style="white-space:normal; text-align:left;" id="TBL-12-96-3"
class="td10">
<!--l. 996--><p class="noindent" >use <span
class="ec-lmss-10">ps2pdf </span>backend </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-101-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-101-1"
+ style="vertical-align:baseline;" id="TBL-12-97-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-97-1"
class="td01"><span
-class="ec-lmvtt-10">psdextra </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-101-2"
+class="ec-lmvtt-10">psdextra </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-97-2"
class="td11"> <span
-class="ec-lmri-10">false </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-101-3"
+class="ec-lmri-10">false </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-97-3"
class="td10">
<!--l. 997--><p class="noindent" >define more short names for PDF string
commands </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-102-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-102-1"
+ style="vertical-align:baseline;" id="TBL-12-98-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-98-1"
class="td01"><span
-class="ec-lmvtt-10">raiselinks </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-102-2"
+class="ec-lmvtt-10">raiselinks </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-98-2"
class="td11"> <span
-class="ec-lmri-10">false </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-102-3"
+class="ec-lmri-10">false </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-98-3"
class="td10">
<!--l. 998--><p class="noindent" >raise up links (for <span
class="ec-lmss-10">HyperTeX </span>backend) </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-103-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-103-1"
+ style="vertical-align:baseline;" id="TBL-12-99-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-99-1"
class="td01"><span
-class="ec-lmvtt-10">runbordercolor </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-103-2"
+class="ec-lmvtt-10">runbordercolor </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-99-2"
class="td11"> <span
-class="ec-lmri-10">0 .7 .7 </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-103-3"
+class="ec-lmri-10">0 .7 .7 </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-99-3"
class="td10">
<!--l. 999--><p class="noindent" >color of border around &#8216;run&#8217; links </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-104-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-104-1"
+ style="vertical-align:baseline;" id="TBL-12-100-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-100-1"
class="td01"><span
-class="ec-lmvtt-10">runcolor </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-104-2"
+class="ec-lmvtt-10">runcolor </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-100-2"
class="td11"> <span
-class="ec-lmri-10">filecolor </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-104-3"
+class="ec-lmri-10">filecolor </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-100-3"
class="td10">
<!--l. 1000--><p class="noindent" >color of &#8216;run&#8217; links </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-105-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-105-1"
-class="td01"> </td></tr>
-<tr
- style="vertical-align:baseline;" id="TBL-12-106-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-106-1"
+ style="vertical-align:baseline;" id="TBL-12-101-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-101-1"
class="td01"><span
-class="ec-lmvtt-10">setpagesize </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-106-2"
+class="ec-lmvtt-10">setpagesize </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-101-2"
class="td11"> <span
-class="ec-lmri-10">true </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-106-3"
+class="ec-lmri-10">true </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-101-3"
class="td10">
<!--l. 1001--><p class="noindent" >set page size by special driver commands </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-107-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-107-1"
+ style="vertical-align:baseline;" id="TBL-12-102-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-102-1"
class="td01"><span
-class="ec-lmvtt-10">tex4ht </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-107-2"
-class="td11"> </td><td style="white-space:normal; text-align:left;" id="TBL-12-107-3"
+class="ec-lmvtt-10">tex4ht </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-102-2"
+class="td11"> </td><td style="white-space:normal; text-align:left;" id="TBL-12-102-3"
class="td10">
<!--l. 1002--><p class="noindent" >use <span
class="ec-lmss-10">TeX4ht </span>backend </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-108-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-108-1"
+ style="vertical-align:baseline;" id="TBL-12-103-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-103-1"
class="td01"><span
-class="ec-lmvtt-10">textures </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-108-2"
-class="td11"> </td><td style="white-space:normal; text-align:left;" id="TBL-12-108-3"
+class="ec-lmvtt-10">textures </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-103-2"
+class="td11"> </td><td style="white-space:normal; text-align:left;" id="TBL-12-103-3"
class="td10">
<!--l. 1003--><p class="noindent" >use <span
class="ec-lmss-10">Textures </span>backend </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-109-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-109-1"
+ style="vertical-align:baseline;" id="TBL-12-104-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-104-1"
class="td01"><span
-class="ec-lmvtt-10">unicode </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-109-2"
+class="ec-lmvtt-10">unicode </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-104-2"
class="td11"> <span
-class="ec-lmri-10">true </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-109-3"
+class="ec-lmri-10">true </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-104-3"
class="td10">
<!--l. 1004--><p class="noindent" >Unicode encoded pdf strings, starting with
version v7.00g set by default to true for all
@@ -3361,60 +3390,62 @@ class="td10">
puenc.def. It can be set to false for pdflatex,
but this is not recommended. </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-110-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-110-1"
+ style="vertical-align:baseline;" id="TBL-12-105-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-105-1"
class="td01"><span
-class="ec-lmvtt-10">urlbordercolor </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-110-2"
+class="ec-lmvtt-10">urlbordercolor </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-105-2"
class="td11"> <span
-class="ec-lmri-10">0 1 1 </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-110-3"
+class="ec-lmri-10">0 1 1 </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-105-3"
class="td10">
<!--l. 1005--><p class="noindent" >color of border around URL links </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-111-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-111-1"
+ style="vertical-align:baseline;" id="TBL-12-106-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-106-1"
class="td01"><span
-class="ec-lmvtt-10">urlcolor </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-111-2"
+class="ec-lmvtt-10">urlcolor </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-106-2"
class="td11"> <span
-class="ec-lmri-10">magenta </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-111-3"
+class="ec-lmri-10">magenta </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-106-3"
class="td10">
<!--l. 1006--><p class="noindent" >color of URL links </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-112-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-112-1"
+ style="vertical-align:baseline;" id="TBL-12-107-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-107-1"
class="td01"><span
-class="ec-lmvtt-10">verbose </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-112-2"
+class="ec-lmvtt-10">verbose </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-107-2"
class="td11"> <span
-class="ec-lmri-10">false </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-112-3"
+class="ec-lmri-10">false </span></td><td style="white-space:normal; text-align:left;" id="TBL-12-107-3"
class="td10">
<!--l. 1007--><p class="noindent" >be chatty </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-113-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-113-1"
+ style="vertical-align:baseline;" id="TBL-12-108-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-108-1"
class="td01"><span
-class="ec-lmvtt-10">vtex </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-113-2"
-class="td11"> </td><td style="white-space:normal; text-align:left;" id="TBL-12-113-3"
+class="ec-lmvtt-10">vtex </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-108-2"
+class="td11"> </td><td style="white-space:normal; text-align:left;" id="TBL-12-108-3"
class="td10">
<!--l. 1008--><p class="noindent" >use <span
class="ec-lmss-10">VTeX </span>backend </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-114-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-114-1"
+ style="vertical-align:baseline;" id="TBL-12-109-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-109-1"
class="td01"><span
-class="ec-lmvtt-10">xetex </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-114-2"
-class="td11"> </td><td style="white-space:normal; text-align:left;" id="TBL-12-114-3"
+class="ec-lmvtt-10">xetex </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-12-109-2"
+class="td11"> </td><td style="white-space:normal; text-align:left;" id="TBL-12-109-3"
class="td10">
<!--l. 1009--><p class="noindent" >use <span
class="ec-lmss-10">XeTeX </span>backend </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-115-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-115-1"
-class="td01"> </td>
+ style="vertical-align:baseline;" id="TBL-12-110-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-110-1"
+class="td01"> </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-116-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-116-1"
-class="td01"> </td>
+ style="vertical-align:baseline;" id="TBL-12-111-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-111-1"
+class="td01"> </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-117-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-117-1"
-class="td01"> </td>
+ style="vertical-align:baseline;" id="TBL-12-112-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-112-1"
+class="td01"> </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-118-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-118-1"
-class="td01"> </td>
+ style="vertical-align:baseline;" id="TBL-12-113-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-113-1"
+class="td01"> </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-12-119-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-119-1"
-class="td01"> </td></tr>
+ style="vertical-align:baseline;" id="TBL-12-114-"><td style="white-space:nowrap; text-align:left;" id="TBL-12-114-1"
+class="td01"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-12-114-2"
+class="td11"> </td><td style="white-space:normal; text-align:left;" id="TBL-12-114-3"
+class="td10"></td></tr>
</table></div>
<!--l. 1012--><p class="noindent" >
<h3 class="sectionHead"><span class="titlemark">4 </span> <a
@@ -3450,24 +3481,32 @@ class="ec-lmvtt-10">pdfremotestartview</span>, <span
class="ec-lmvtt-10">pdfnewwindow</span>
and the following key value options:
<dl class="description"><dt class="description">
+ <!--l. 1030--><p class="noindent" >
<span
class="ec-lmvtk-10">page</span><span
class="ec-lmbx-10">:</span> </dt><dd
-class="description">Specifies the start page number of remote PDF documents. First page is <span class="obeylines-h"><span class="verb"><span
+class="description">
+ <!--l. 1030--><p class="noindent" >Specifies the start page number of remote PDF documents. First page is <span class="obeylines-h"><span class="verb"><span
class="ec-lmvtt-10">1</span></span></span>.
</dd><dt class="description">
+ <!--l. 1032--><p class="noindent" >
<span
class="ec-lmvtk-10">ismap</span><span
class="ec-lmbx-10">:</span> </dt><dd
-class="description">Boolean key, if set to <span class="obeylines-h"><span class="verb"><span
-class="ec-lmvtt-10">true</span></span></span>, the URL should appended by the coordinates as query
- parameters by the PDF viewer.
+class="description">
+ <!--l. 1032--><p class="noindent" >Boolean key, if set to <span class="obeylines-h"><span class="verb"><span
+class="ec-lmvtt-10">true</span></span></span>, the URL should appended by the coordinates as query parameters
+ by the PDF viewer.
</dd><dt class="description">
+ <!--l. 1035--><p class="noindent" >
<span
class="ec-lmvtk-10">nextactionraw</span><span
class="ec-lmbx-10">:</span> </dt><dd
-class="description">The value of key <span class="obeylines-h"><span class="verb"><span
+class="description">
+ <!--l. 1035--><p class="noindent" >The value of key <span class="obeylines-h"><span class="verb"><span
class="ec-lmvtt-10">/Next</span></span></span> of action dictionaries, see PDF specification.</dd></dl>
+
+
<!--l. 1039--><p class="noindent" >
<span class="fbox"><!--tex4ht:inline--><div class="tabular"> <table id="TBL-14" class="tabular"
@@ -3490,8 +3529,6 @@ class="ec-lmri-10">URL</span><span class="obeylines-h"><span class="verb"><span
class="ec-lmvtt-10">}}</span></span></span>. Depending on the driver <span class="obeylines-h"><span class="verb"><span
class="ec-lmvtt-10">\href</span></span></span> also tries to detect the link
type. Thus the result can be a url link, file link, &#x2026;
-
-
<!--l. 1048--><p class="noindent" >
<span class="fbox"><!--tex4ht:inline--><div class="tabular"> <table id="TBL-15" class="tabular"
@@ -3636,6 +3673,8 @@ class="ec-lmvtt-10">\hyperlink</span></span></span> has two arguments, the name
class="ec-lmvtt-10">\hypertarget</span></span></span>,
and the <span
class="ec-lmri-10">text </span>which be used as the link on the page.
+
+
<!--l. 1106--><p class="indent" > Note that in HTML parlance, the <span class="obeylines-h"><span class="verb"><span
class="ec-lmvtt-10">\hyperlink</span></span></span> command inserts a notional # in front of each link,
making it relative to the current testdocument; <span class="obeylines-h"><span class="verb"><span
@@ -3651,7 +3690,6 @@ class="ec-lmvtt-10">\phantomsection </span></td>
</tr></table> </div></span>
<!--l. 1114--><p class="noindent" >This sets an anchor at this location. It works similar to <span class="obeylines-h"><span class="verb"><span
class="ec-lmvtt-10">\hypertarget{}{}</span></span></span> with an automatically chosen
-
anchor name. Often it is used in conjunction with <span class="obeylines-h"><span class="verb"><span
class="ec-lmvtt-10">\addcontentsline</span></span></span> for sectionlike things (index,
bibliography, preface). <span class="obeylines-h"><span class="verb"><span
@@ -3972,29 +4010,35 @@ class="ec-lmvtt-10">\pdfstringdef </span>returns a macro containing the PDF stri
rely on it.) All the following tasks, definitions and redefinitions are made in a group to keep them
local:
<ul class="itemize1">
- <li class="itemize">Switching to PD1 or PU encoding
+ <li class="itemize">
+ <!--l. 1268--><p class="noindent" >Switching to PD1 or PU encoding
</li>
- <li class="itemize">Defining the &#8220;octal sequence commands&#8221; (<span class="obeylines-h"><span class="verb"><span
+ <li class="itemize">
+ <!--l. 1269--><p class="noindent" >Defining the &#8220;octal sequence commands&#8221; (<span class="obeylines-h"><span class="verb"><span
class="ec-lmvtt-10">\345</span></span></span>): <span class="obeylines-h"><span class="verb"><span
class="ec-lmvtt-10">\edef\3{\string\3}</span></span></span>
</li>
- <li class="itemize">Special glyphs of TeX: <span class="obeylines-h"><span class="verb"><span
+ <li class="itemize">
+ <!--l. 1270--><p class="noindent" >Special glyphs of TeX: <span class="obeylines-h"><span class="verb"><span
class="ec-lmvtt-10">\{</span></span></span>, <span class="obeylines-h"><span class="verb"><span
class="ec-lmvtt-10">\%</span></span></span>, <span class="obeylines-h"><span class="verb"><span
class="ec-lmvtt-10">\&amp;</span></span></span>, <span class="obeylines-h"><span class="verb"><span
class="ec-lmvtt-10">\space</span></span></span>, <span class="obeylines-h"><span class="verb"><span
class="ec-lmvtt-10">\dots</span></span></span>, etc.
</li>
- <li class="itemize">National glyphs (<span
+ <li class="itemize">
+ <!--l. 1271--><p class="noindent" >National glyphs (<span
class="ec-lmss-10">german.sty</span>, <span
class="ec-lmss-10">french.sty</span>, etc.)
</li>
- <li class="itemize">Logos: <span class="obeylines-h"><span class="verb"><span
+ <li class="itemize">
+ <!--l. 1272--><p class="noindent" >Logos: <span class="obeylines-h"><span class="verb"><span
class="ec-lmvtt-10">\TeX</span></span></span>, <span class="obeylines-h"><span class="verb"><span
class="ec-lmvtt-10">\eTeX</span></span></span>, <span class="obeylines-h"><span class="verb"><span
class="ec-lmvtt-10">\MF</span></span></span>, etc.
</li>
- <li class="itemize">Disabling commands that do not provide useful functionality in bookmarks: <span class="obeylines-h"><span class="verb"><span
+ <li class="itemize">
+ <!--l. 1273--><p class="noindent" >Disabling commands that do not provide useful functionality in bookmarks: <span class="obeylines-h"><span class="verb"><span
class="ec-lmvtt-10">\label</span></span></span>, <span class="obeylines-h"><span class="verb"><span
class="ec-lmvtt-10">\index</span></span></span>,
<span class="obeylines-h"><span class="verb"><span
@@ -4003,12 +4047,16 @@ class="ec-lmvtt-10">\discretionary</span></span></span>, <span class="obeylines-
class="ec-lmvtt-10">\def</span></span></span>, <span class="obeylines-h"><span class="verb"><span
class="ec-lmvtt-10">\let</span></span></span>, etc.
</li>
- <li class="itemize">LaTeX&#8217;s font commands like <span class="obeylines-h"><span class="verb"><span
+ <li class="itemize">
+ <!--l. 1275--><p class="noindent" >LaTeX&#8217;s font commands like <span class="obeylines-h"><span class="verb"><span
class="ec-lmvtt-10">\textbf</span></span></span>, etc.
</li>
- <li class="itemize">Support for <span class="obeylines-h"><span class="verb"><span
+ <li class="itemize">
+ <!--l. 1276--><p class="noindent" >Support for <span class="obeylines-h"><span class="verb"><span
class="ec-lmvtt-10">\xspace</span></span></span> provided by the <span
class="ec-lmss-10">xspace </span>package</li></ul>
+
+
<!--l. 1279--><p class="indent" > In addition, parentheses are protected to avoid the danger of unsafe unbalanced parentheses in
the PDF string. For further details, see Heiko Oberdiek&#8217;s EuroTeX&#x00A0;paper distributed with
<span
@@ -4030,8 +4078,6 @@ can put in manually, or include in a style file, which stops the hypertext funct
This is used, for instance, in the Elsevier classes, to stop <span class="obeylines-h"><span class="verb"><span
class="ec-lmvtt-10">hyperref</span></span></span> playing havoc in the front
matter.
-
-
<!--l. 1292--><p class="noindent" >
<h4 class="subsectionHead"><span class="titlemark">4.1 </span> <a
id="x1-150004.1"></a>Bookmark macros</h4>
@@ -4113,11 +4159,15 @@ class="ec-lmbx-10">Hint: </span>Package <span
class="ec-lmss-10">bookmark </span>replaces <span
class="ec-lmss-10">hyperref</span>&#8217;s bookmark organization by a new algorithm:
<ul class="itemize1">
- <li class="itemize">Usually only one LaTeX&#x00A0;run is needed.
+ <li class="itemize">
+ <!--l. 1326--><p class="noindent" >Usually only one LaTeX&#x00A0;run is needed.
+
</li>
- <li class="itemize">More control over the bookmark appearance (color, font).
+ <li class="itemize">
+ <!--l. 1327--><p class="noindent" >More control over the bookmark appearance (color, font).
</li>
- <li class="itemize">Different bookmark actions are supported (external file links, URLs, &#x2026;).</li></ul>
+ <li class="itemize">
+ <!--l. 1328--><p class="noindent" >Different bookmark actions are supported (external file links, URLs, &#x2026;).</li></ul>
<!--l. 1331--><p class="noindent" >Therefore I recommend using this package.
<!--l. 1333--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark">4.1.2 </span> <a
@@ -4127,8 +4177,6 @@ class="ec-lmss-10">hyperref </span>takes the text for bookmarks from the argumen
class="ec-lmvtt-10">\section</span>, which can
contain things like math, colors, or font changes, none of which will display in bookmarks as
is.
-
-
<!--l. 1339--><p class="noindent" >
<span class="fbox"><!--tex4ht:inline--><div class="tabular"> <table id="TBL-37" class="tabular"
@@ -4266,39 +4314,51 @@ href="hyperref-doc5.html#fn4x0"><sup class="textsuperscript">4</sup></a></span><
Default is 1 pt for supporting drivers.
<!--l. 1437--><p class="indent" >
<dl class="description"><dt class="description">
+ <!--l. 1438--><p class="noindent" >
<span
class="ec-lmbx-10">pdfTeX</span> </dt><dd
class="description">
+ <!--l. 1438--><p class="noindent" >
<ul class="itemize1">
- <li class="itemize">The link area also depends on the surrounding box.
+ <li class="itemize">
+ <!--l. 1440--><p class="noindent" >The link area also depends on the surrounding box.
</li>
- <li class="itemize">Settings have local effect.
+ <li class="itemize">
+ <!--l. 1441--><p class="noindent" >Settings have local effect.
</li>
- <li class="itemize">When a page is shipped out, pdfTeX uses the current setting of the link margin for all
+ <li class="itemize">
+ <!--l. 1442--><p class="noindent" >When a page is shipped out, pdfTeX uses the current setting of the link margin for all
links on the page.</li></ul>
</dd><dt class="description">
+ <!--l. 1446--><p class="noindent" >
<span
class="ec-lmbx-10">pdfmark</span> </dt><dd
class="description">
+ <!--l. 1446--><p class="noindent" >
+
<ul class="itemize1">
- <li class="itemize">Settings have global effect.</li></ul>
+ <li class="itemize">
+ <!--l. 1448--><p class="noindent" >Settings have global effect.</li></ul>
</dd><dt class="description">
+ <!--l. 1451--><p class="noindent" >
<span
class="ec-lmbx-10">xetex</span> </dt><dd
class="description">
-
-
+ <!--l. 1451--><p class="noindent" >
<ul class="itemize1">
- <li class="itemize">Settings must be done in the preamble or the first page and then have global effect.
+ <li class="itemize">
+ <!--l. 1453--><p class="noindent" >Settings must be done in the preamble or the first page and then have global effect.
The key inserts the new (x)dvipdfmx special <span class="obeylines-h"><span class="verb"><span
class="ec-lmvtt-10">\special{dvipdfmx:config</span><span
class="ec-lmvtt-10">&#x00A0;g</span><span
class="ec-lmvtt-10">&#x00A0;#1}</span></span></span> (with
the unit removed).</li></ul>
</dd><dt class="description">
+ <!--l. 1457--><p class="noindent" >
<span
class="ec-lmbx-10">Other drivers</span> </dt><dd
-class="description">Unsupported.</dd></dl>
+class="description">
+ <!--l. 1457--><p class="noindent" >Unsupported.</dd></dl>
<!--l. 1462--><p class="noindent" >
<h4 class="subsectionHead"><span class="titlemark">5.2 </span> <a
id="x1-220005.2"></a>Field option &#8216;calculatesortkey&#8217;</h4>
@@ -4556,19 +4616,24 @@ class="ec-lmvtt-10">\nohyperpage</span></span></span>.)
<!--l. 1712--><p class="indent" > A better implementation which hasn&#8217;t the disadvantage to prevent line breaks is in the ocgx2
package. Check its documentation for details how to use it.
<ul class="itemize1">
- <li class="itemize">The option must be given for package loading: <span class="obeylines-h"><span class="verb"><span
+ <li class="itemize">
+ <!--l. 1715--><p class="noindent" >The option must be given for package loading: <span class="obeylines-h"><span class="verb"><span
class="ec-lmvtt-10">\usepackage[ocgcolorlinks]{hyperref}</span></span></span>
</li>
- <li class="itemize">Main disadvantage: Links cannot be broken across lines. PDF reference 1.7: 4.10.2 &#8220;Making
+ <li class="itemize">
+ <!--l. 1717--><p class="noindent" >Main disadvantage: Links cannot be broken across lines. PDF reference 1.7: 4.10.2 &#8220;Making
Graphical Content Optional&#8221;: Graphics state operations, such as setting the color, ..., are
still applied. Therefore the link text is put in a box and set twice, with and without color.
</li>
- <li class="itemize">The feature can be switched of by <span class="obeylines-h"><span class="verb"><span
+ <li class="itemize">
+ <!--l. 1723--><p class="noindent" >The feature can be switched of by <span class="obeylines-h"><span class="verb"><span
class="ec-lmvtt-10">\hypersetup{ocgcolorlinks=false}</span></span></span> inside the document.
</li>
- <li class="itemize">Supported drivers: pdftex, dvipdfm
+ <li class="itemize">
+ <!--l. 1725--><p class="noindent" >Supported drivers: pdftex, dvipdfm
</li>
- <li class="itemize">The PDF version should be at least 1.5. It is automatically set for pdfTeX, LuaTeX and
+ <li class="itemize">
+ <!--l. 1726--><p class="noindent" >The PDF version should be at least 1.5. It is automatically set for pdfTeX, LuaTeX and
dvipdfmx.</li></ul>
<!--l. 1730--><p class="noindent" >
<h4 class="subsectionHead"><span class="titlemark">5.12 </span> <a
@@ -4578,25 +4643,34 @@ result is usually not in PDF/A, because many features aren&#8217;t controlled by
fonts, colors, driver dependend low level stuff, ...).
<!--l. 1739--><p class="indent" > Currently, option &#8216;pdfa&#8217; sets and disables the following items:
<ul class="itemize1">
- <li class="itemize">Enabled annotation flags: Print, NoZoom, NoRotate [PDF/A 6.5.3].
+ <li class="itemize">
+ <!--l. 1741--><p class="noindent" >Enabled annotation flags: Print, NoZoom, NoRotate [PDF/A 6.5.3].
+
</li>
- <li class="itemize">Disabled annotation flags: Hidden, Invisible, NoView [PDF/A 6.5.3].
+ <li class="itemize">
+ <!--l. 1742--><p class="noindent" >Disabled annotation flags: Hidden, Invisible, NoView [PDF/A 6.5.3].
</li>
- <li class="itemize">Disabled: Launch action (<a
+ <li class="itemize">
+ <!--l. 1743--><p class="noindent" >Disabled: Launch action (<a
href="run:..." >[</a>PDF/A 6.6.1].
</li>
- <li class="itemize">Restricted: Named actions (NextPage, PrevPage, FirstPage, LastPage) [PDF/A 6.6.1].
-
+ <li class="itemize">
+ <!--l. 1744--><p class="noindent" >Restricted: Named actions (NextPage, PrevPage, FirstPage, LastPage) [PDF/A 6.6.1].
</li>
- <li class="itemize">Many things are disabled in PDF formulars:
+ <li class="itemize">
+ <!--l. 1746--><p class="noindent" >Many things are disabled in PDF formulars:
<ul class="itemize2">
- <li class="itemize">JavaScript actions [PDF/A 6.6.1]
+ <li class="itemize">
+ <!--l. 1748--><p class="noindent" >JavaScript actions [PDF/A 6.6.1]
</li>
- <li class="itemize">Trigger events (additional actions) [PDF/A 6.6.2]
+ <li class="itemize">
+ <!--l. 1749--><p class="noindent" >Trigger events (additional actions) [PDF/A 6.6.2]
</li>
- <li class="itemize">Push button (because of JavaScript)
+ <li class="itemize">
+ <!--l. 1750--><p class="noindent" >Push button (because of JavaScript)
</li>
- <li class="itemize">Interactive Forms: Flag NeedAppearances is the default &#8216;false&#8217; (Because of this,
+ <li class="itemize">
+ <!--l. 1751--><p class="noindent" >Interactive Forms: Flag NeedAppearances is the default &#8216;false&#8217; (Because of this,
hyperref&#8217;s implementation of Forms looks ugly). [PDF/A 6.9]</li></ul>
</li></ul>
<!--l. 1759--><p class="indent" > The default value of the new option &#8216;pdfa&#8217; is &#8216;false&#8217;. It influences the loading of the package and
@@ -4608,39 +4682,50 @@ class="ec-lmvtt-10">\usepackage{hyperref}</span></span></span>).
<!--l. 1767--><p class="noindent" >The new option &#8216;linktoc&#8217; allows more control which part of an entry in the table of contents is made into
a link:
<ul class="itemize1">
- <li class="itemize">&#8216;linktoc=none&#8217; (no links)
+ <li class="itemize">
+ <!--l. 1770--><p class="noindent" >&#8216;linktoc=none&#8217; (no links)
</li>
- <li class="itemize">&#8216;linktoc=section&#8217; (default behaviour, same as &#8216;linktocpage=false&#8217;)
+ <li class="itemize">
+ <!--l. 1771--><p class="noindent" >&#8216;linktoc=section&#8217; (default behaviour, same as &#8216;linktocpage=false&#8217;)
</li>
- <li class="itemize">&#8216;linktoc=page&#8217; (same as &#8216;linktocpage=true&#8217;)
+ <li class="itemize">
+ <!--l. 1772--><p class="noindent" >&#8216;linktoc=page&#8217; (same as &#8216;linktocpage=true&#8217;)
+
</li>
- <li class="itemize">&#8216;linktoc=all&#8217; (both the section and page part are links)</li></ul>
+ <li class="itemize">
+ <!--l. 1773--><p class="noindent" >&#8216;linktoc=all&#8217; (both the section and page part are links)</li></ul>
<!--l. 1776--><p class="noindent" >
<h4 class="subsectionHead"><span class="titlemark">5.14 </span> <a
id="x1-340005.14"></a>Option &#8216;pdfnewwindow&#8217; changed</h4>
<!--l. 1778--><p class="noindent" >Before 6.77b:
<ul class="itemize1">
- <li class="itemize">pdfnewwindow=true <span
+ <li class="itemize">
+ <!--l. 1780--><p class="noindent" >pdfnewwindow=true <span
class="lmsy-10">&#x2192; </span>/NewWindow true
</li>
- <li class="itemize">pdfnewwindow=false <span
+ <li class="itemize">
+ <!--l. 1781--><p class="noindent" >pdfnewwindow=false <span
class="lmsy-10">&#x2192; </span>(absent)
</li>
- <li class="itemize">unused pdfnewwindow <span
+ <li class="itemize">
+ <!--l. 1782--><p class="noindent" >unused pdfnewwindow <span
class="lmsy-10">&#x2192; </span>(absent)</li></ul>
<!--l. 1784--><p class="noindent" >Since 6.77b:
<ul class="itemize1">
- <li class="itemize">pdfnewwindow=true <span
-class="lmsy-10">&#x2192; </span>/NewWindow true
-
+ <li class="itemize">
+ <!--l. 1786--><p class="noindent" >pdfnewwindow=true <span
+class="lmsy-10">&#x2192; </span>/NewWindow true
</li>
- <li class="itemize">pdfnewwindow=false <span
+ <li class="itemize">
+ <!--l. 1787--><p class="noindent" >pdfnewwindow=false <span
class="lmsy-10">&#x2192; </span>/NewWindow false
</li>
- <li class="itemize">pdfnewwindow= <span
+ <li class="itemize">
+ <!--l. 1788--><p class="noindent" >pdfnewwindow= <span
class="lmsy-10">&#x2192; </span>(absent)
</li>
- <li class="itemize">unused pdfnewwindow <span
+ <li class="itemize">
+ <!--l. 1789--><p class="noindent" >unused pdfnewwindow <span
class="lmsy-10">&#x2192; </span>(absent)</li></ul>
<!--l. 1794--><p class="indent" > Rationale: There is a difference between setting to &#8216;false&#8217; and an absent entry. In the former case the
new document replaces the old one, in the latter case the PDF viewer application should respect the user
@@ -4659,8 +4744,11 @@ class="ec-lmvtt-10">http://www.adobe.com/devnet/pdf/pdf_reference.html</span></a
href="http://www.adobe.com/devnet/acrobat/pdfs/pdf_reference.pdf" class="url" ><span
class="ec-lmvtt-10">http://www.adobe.com/devnet/acrobat/pdfs/pdf_reference.pdf</span></a>
<!--l. 1810--><p class="indent" > Options (convert to lowercase) except flags in square brackets:
+
+
<ul class="itemize1">
- <li class="itemize">Table 8.16 Annotation flags (page 608):
+ <li class="itemize">
+ <!--l. 1813--><p class="noindent" >Table 8.16 Annotation flags (page 608):
<!--l. 1815--><p class="noindent" ><div class="obeylines-v">
1 Invisible
<br />2 Hidden (PDF 1.2)
@@ -4673,21 +4761,23 @@ class="ec-lmvtt-10">http://www.adobe.com/devnet/acrobat/pdfs/pdf_reference.pdf</
<br />9 ToggleNoView (PDF 1.5)
<br />10 LockedContents (PDF 1.7)</div>
</li>
- <li class="itemize">Table 8.70 Field flags common to all field types (page 676):
+ <li class="itemize">
+ <!--l. 1827--><p class="noindent" >Table 8.70 Field flags common to all field types (page 676):
<!--l. 1829--><p class="noindent" ><div class="obeylines-v">
1 ReadOnly
<br />2 Required
<br />3 NoExport</div>
</li>
- <li class="itemize">Table 8.75 Field flags specific to button fields (page 686):
+ <li class="itemize">
+ <!--l. 1834--><p class="noindent" >Table 8.75 Field flags specific to button fields (page 686):
<!--l. 1836--><p class="noindent" ><div class="obeylines-v">
- 15 NoToggleToOff (Radio buttons only)
-
+ 15 NoToggleToOff (Radio buttons only)
<br />16 Radio (set: radio buttons, clear: check box, pushbutton: clear)
<br />17 Pushbutton
<br />26 RadiosInUniso (PDF 1.5)</div>
</li>
- <li class="itemize">Table 8.77 Field flags specific to text fields (page 691):
+ <li class="itemize">
+ <!--l. 1842--><p class="noindent" >Table 8.77 Field flags specific to text fields (page 691):
<!--l. 1844--><p class="noindent" ><div class="obeylines-v">
13 Multiline
<br />14 Password
@@ -4695,9 +4785,11 @@ class="ec-lmvtt-10">http://www.adobe.com/devnet/acrobat/pdfs/pdf_reference.pdf</
<br />23 DoNotSpellCheck (PDF 1.4)
<br />24 DoNotScroll (PDF 1.4)
<br />25 Comb (PDF 1.5)
- <br />26 RichText (PDF 1.5)</div>
+ <br />26 RichText (PDF 1.5)</div>
+
</li>
- <li class="itemize">Table 8.79 Field flags specific to choice fields (page 693):
+ <li class="itemize">
+ <!--l. 1853--><p class="noindent" >Table 8.79 Field flags specific to choice fields (page 693):
<!--l. 1855--><p class="noindent" ><div class="obeylines-v">
18 Combo (set: combo box, clear: list box)
<br />19 Edit (only useful if Combo is set)
@@ -4706,7 +4798,8 @@ class="ec-lmvtt-10">http://www.adobe.com/devnet/acrobat/pdfs/pdf_reference.pdf</
<br />23 DoNotSpellCheck (PDF 1.4) (only useful if Combo and Edit are set)
<br />27 CommitOnSelChange (PDF 1.5)</div>
</li>
- <li class="itemize">Table 8.86 Flags for submit-form actions (page 704):
+ <li class="itemize">
+ <!--l. 1863--><p class="noindent" >Table 8.86 Flags for submit-form actions (page 704):
<!--l. 1865--><p class="noindent" ><div class="obeylines-v">
[1 Include/Exclude] unsupported, use &#8216;noexport&#8217; (table 8.70) instead
<br />2 IncludeNoValueFields
@@ -4722,18 +4815,22 @@ class="ec-lmvtt-10">http://www.adobe.com/devnet/acrobat/pdfs/pdf_reference.pdf</
<br />12 ExclFKey (PDF 1.4)
<br />14 EmbedForm (PDF 1.5)</div>
</li></ul>
-
-
<!--l. 1882--><p class="indent" > New option &#8216;export&#8217; sets the export format of a submit action. Valid values are (upper- or
lowercase):
<ul class="itemize1">
- <li class="itemize">FDF
+ <li class="itemize">
+ <!--l. 1885--><p class="noindent" >FDF
</li>
- <li class="itemize">HTML
+ <li class="itemize">
+ <!--l. 1886--><p class="noindent" >HTML
</li>
- <li class="itemize">XFDF
+ <li class="itemize">
+ <!--l. 1887--><p class="noindent" >XFDF
+
+
</li>
- <li class="itemize">PDF (not supported by Acrobat Reader)</li></ul>
+ <li class="itemize">
+ <!--l. 1888--><p class="noindent" >PDF (not supported by Acrobat Reader)</li></ul>
<!--l. 1891--><p class="noindent" >
<h4 class="subsectionHead"><span class="titlemark">5.16 </span> <a
id="x1-360005.16"></a>Option &#8216;pdfversion&#8217;</h4>
@@ -4745,20 +4842,24 @@ higher PDF versions.
class="ec-lmvtt-10">\usepackage{hyperref}</span></span></span>.
<!--l. 1907--><p class="indent" > In theory this option should also set the PDF version, but this is not generally supported.
<ul class="itemize1">
- <li class="itemize">pdfTeX below 1.10a: unsupported. pdfTeX <span
+ <li class="itemize">
+ <!--l. 1910--><p class="noindent" >pdfTeX below 1.10a: unsupported. pdfTeX <span
class="lmsy-10">&#x2265; </span>1.10a and &#x003C; 1.30: <span class="obeylines-h"><span class="verb"><span
class="ec-lmvtt-10">\pdfoptionpdfminorversion</span></span></span>
pdfTeX <span
class="lmsy-10">&#x2265; </span>1.30: <span class="obeylines-h"><span class="verb"><span
class="ec-lmvtt-10">\pdfminorversion</span></span></span>
</li>
- <li class="itemize">dvipdfm: configuration file, example: TeX Live 2007, texmf/dvipdfm/config/config, entry &#8216;V
+ <li class="itemize">
+ <!--l. 1913--><p class="noindent" >dvipdfm: configuration file, example: TeX Live 2007, texmf/dvipdfm/config/config, entry &#8216;V
2&#8217;.
</li>
- <li class="itemize">dvipdfmx: configuration file, example: TeX Live 2007, texmf/dvipdfm/dvipdfmx.cfg, entry
+ <li class="itemize">
+ <!--l. 1915--><p class="noindent" >dvipdfmx: configuration file, example: TeX Live 2007, texmf/dvipdfm/dvipdfmx.cfg, entry
&#8216;V 4&#8217;.
</li>
- <li class="itemize">Ghostscript: option -dCompatibilityLevel (this is set in &#8216;ps2pdf12&#8217;, &#8216;ps2pdf13&#8217;, &#8216;ps2pdf14&#8217;).</li></ul>
+ <li class="itemize">
+ <!--l. 1917--><p class="noindent" >Ghostscript: option -dCompatibilityLevel (this is set in &#8216;ps2pdf12&#8217;, &#8216;ps2pdf13&#8217;, &#8216;ps2pdf14&#8217;).</li></ul>
<!--l. 1922--><p class="indent" > The current PDF version is used as default if this version can be detected (only pdfTeX <span
class="lmsy-10">&#x2265; </span>1.10a).
Otherwise the lowest version 1.2 is assumed. Thus &#8216;hyperref&#8217; tries to avoid PDF code that breaks this
@@ -4768,14 +4869,16 @@ version, but is free to use ignorable higher PDF features.
id="x1-370005.17"></a>Field option &#8216;name&#8217;</h4>
<!--l. 1931--><p class="noindent" >Many form objects uses the label argument for several purposes:
<ul class="itemize1">
- <li class="itemize">Layouted label.
+ <li class="itemize">
+ <!--l. 1934--><p class="noindent" >Layouted label.
</li>
- <li class="itemize">As name in HTML structures.</li></ul>
-
-
+ <li class="itemize">
+ <!--l. 1935--><p class="noindent" >As name in HTML structures.</li></ul>
<!--l. 1937--><p class="noindent" >Code that is suitable for layouting with TeX can break in the structures of the output format. If option
&#8216;name&#8217; is given, then its value is used as name in the different output structures. Thus the value should
consist of letters only.
+
+
<!--l. 1944--><p class="noindent" >
<h4 class="subsectionHead"><span class="titlemark">5.18 </span> <a
id="x1-380005.18"></a>Option &#8216;pdfencoding&#8217;</h4>
@@ -4784,15 +4887,18 @@ PDFDocEncoding and Unicode as UTF-16BE. Option <span
class="ec-lmss-10">pdfencoding </span>selects between these
encodings:
<ul class="itemize1">
- <li class="itemize"><span
+ <li class="itemize">
+ <!--l. 1950--><p class="noindent" ><span
class="ec-lmss-10">pdfdoc </span>uses PDFDocEncoding. It uses just one byte per character, but the supported
characters are limited (244 in PDF-1.7).
</li>
- <li class="itemize"><span
+ <li class="itemize">
+ <!--l. 1952--><p class="noindent" ><span
class="ec-lmss-10">unicode </span>sets Unicode. It is encoded as UTF-16BE. Two bytes are used for most characters,
surrogates need four bytes.
</li>
- <li class="itemize"><span
+ <li class="itemize">
+ <!--l. 1954--><p class="noindent" ><span
class="ec-lmss-10">auto </span>PDFDocEncoding if the string does not contain characters outside the encoding (outside
ascii if an unicode engine is used) and Unicode otherwise. This option is not intended for
the unicode engines.</li></ul>
@@ -4834,34 +4940,42 @@ class="ec-lmvtt-10">&#x00A0;1}</span></span></span>
<ul class="itemize1">
- <li class="itemize">AR7/Linux seems to have a bug, that don&#8217;t use the default value <span class="obeylines-h"><span class="verb"><span
+ <li class="itemize">
+ <!--l. 1989--><p class="noindent" >AR7/Linux seems to have a bug, that don&#8217;t use the default value <span class="obeylines-h"><span class="verb"><span
class="ec-lmvtt-10">1</span></span></span> for the width, but zero,
thus that the underline is not visible without <span class="obeylines-h"><span class="verb"><span
class="ec-lmvtt-10">/W</span><span
class="ec-lmvtt-10">&#x00A0;1</span></span></span>. The same applies for dashed boxes, eg.:
pdfborderstyle=/S/D/D[3 2]/W 1
</li>
- <li class="itemize">The syntax is described in the PDF specification, look for &#8220;border style&#8221;, eg. Table 8.13
+ <li class="itemize">
+ <!--l. 1995--><p class="noindent" >The syntax is described in the PDF specification, look for &#8220;border style&#8221;, eg. Table 8.13
&#8220;Entries in a border style dictionary&#8221; (specification for version 1.6)
</li>
- <li class="itemize">The border style is removed by pdfborderstyle= This is automatically done if option
+ <li class="itemize">
+ <!--l. 2000--><p class="noindent" >The border style is removed by pdfborderstyle= This is automatically done if option
colorlinks is enabled.
</li>
- <li class="itemize">Be aware that not all PDF viewers support this feature, not even Acrobat Reader itself:
+ <li class="itemize">
+ <!--l. 2004--><p class="noindent" >Be aware that not all PDF viewers support this feature, not even Acrobat Reader itself:
<!--l. 2007--><p class="noindent" >Some support:
<ul class="itemize2">
- <li class="itemize">AR7/Linux: <span
+ <li class="itemize">
+ <!--l. 2009--><p class="noindent" >AR7/Linux: <span
class="ec-lmss-10">underline </span>and <span
class="ec-lmss-10">dashed</span>, but the border width must be given.
</li>
- <li class="itemize">xpdf 3.00: <span
+ <li class="itemize">
+ <!--l. 2011--><p class="noindent" >xpdf 3.00: <span
class="ec-lmss-10">underline </span>and <span
class="ec-lmss-10">dashed</span></li></ul>
<!--l. 2014--><p class="noindent" >Unsupported:
<ul class="itemize2">
- <li class="itemize">AR5/Linux
+ <li class="itemize">
+ <!--l. 2016--><p class="noindent" >AR5/Linux
</li>
- <li class="itemize">ghostscript 8.50</li></ul>
+ <li class="itemize">
+ <!--l. 2017--><p class="noindent" >ghostscript 8.50</li></ul>
</li></ul>
<!--l. 2021--><p class="noindent" >
<h4 class="subsectionHead"><span class="titlemark">5.23 </span> <a
@@ -4871,16 +4985,21 @@ class="ec-lmss-10">bookmarksdepth</span></h4>
class="ec-lmss-10">bookmarksdepth</span>. The option acts
globally and distinguishes three cases:
<ul class="itemize1">
- <li class="itemize"><span
+ <li class="itemize">
+ <!--l. 2027--><p class="noindent" ><span
class="ec-lmss-10">bookmarksdepth </span>without value Then hyperref uses the current value of counter <span
class="ec-lmss-10">tocdepth</span>.
This is the compatible behaviour and the default.
+
+
</li>
- <li class="itemize"><span class="obeylines-h"><span class="verb"><span
+ <li class="itemize">
+ <!--l. 2030--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="ec-lmvtt-10">bookmarksdepth=&#x003C;number&#x003E;</span></span></span>, the value is number (also negative): The depth for the
bookmarks are set to this number.
</li>
- <li class="itemize"><span class="obeylines-h"><span class="verb"><span
+ <li class="itemize">
+ <!--l. 2032--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="ec-lmvtt-10">bookmarksdepth=&#x003C;name&#x003E;</span></span></span> The &#x003C;name&#x003E; is a document division name (part, chapter, ...). It must
not start with a digit or minus to avoid mixing up with the number case. Internally hyperref uses
the value of macro <span class="obeylines-h"><span class="verb"><span
@@ -4906,10 +5025,12 @@ be a pain to remove all the escaping, because an additional escaping layer can f
code.
<!--l. 2059--><p class="indent" > Therefore a new option pdfescapeform was introduced:
<ul class="itemize1">
- <li class="itemize">pdfescapeform=false Escaping for the formulars are disabled, this is the compatibility
+ <li class="itemize">
+ <!--l. 2061--><p class="noindent" >pdfescapeform=false Escaping for the formulars are disabled, this is the compatibility
behaviour, therefore this is the default.
</li>
- <li class="itemize">pdfescapeform=true Then the PS/PDF drivers do all the necessary escaping. This is the
+ <li class="itemize">
+ <!--l. 2064--><p class="noindent" >pdfescapeform=true Then the PS/PDF drivers do all the necessary escaping. This is the
logical choice and the recommended setting. For example, the user writes JavaScript as
JavaScript and do not care about escaping characters for PS/PDF output.</li></ul>
<!--l. 2072--><p class="noindent" >
@@ -5068,7 +5189,8 @@ class="ec-lmvtt-10">puenc.def </span>clash with other uses. To reduce the impact
class="ec-lmss-10">hyperref </span>uses
two strategies.
<ul class="itemize1">
- <li class="itemize">A number of command are only defined conditionally: The commands for the cyrillic block
+ <li class="itemize">
+ <!--l. 2216--><p class="noindent" >A number of command are only defined conditionally: The commands for the cyrillic block
if <span
class="ec-lmvtt-10">\CYRDZE </span>is defined, greek if <span
class="ec-lmvtt-10">\textBeta </span>is defined, and hebrew if <span
@@ -5076,7 +5198,8 @@ class="ec-lmvtt-10">\hebdalet </span>is defined.
<!--l. 2220--><p class="noindent" >The greek block is in an extra file, <span
class="ec-lmvtt-10">puenc-greek.def</span>, which can be loaded manually if needed.
</li>
- <li class="itemize">Other commands are moved to an extra file <span
+ <li class="itemize">
+ <!--l. 2223--><p class="noindent" >Other commands are moved to an extra file <span
class="ec-lmvtt-10">puenc-extra.def </span>which is not loaded
automatically, but can be loaded in the preamble if needed. Currently this file contains all
definitions for the accent <span
@@ -5631,84 +5754,85 @@ class="td01"><span
class="ec-lmvtt-10">accesskey </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-1-2"
class="td11"> key </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-1-3"
class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-1-4"
-class="td10"> (as per HTML) </td>
+class="td10"> (as per HTML) </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-57-2-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-2-1"
class="td01"><span
class="ec-lmvtt-10">align </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-2-2"
class="td11"> number </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-2-3"
class="td11"> <span
-class="ec-lmri-10">0 </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-2-4"
-class="td10"> alignment within text field; 0 is left-aligned, </td>
+class="ec-lmri-10">0 </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-2-4"
+class="td10"> alignment within text field; 0 is left-aligned, </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-57-3-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-3-1"
class="td01"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-3-2"
class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-3-3"
class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-3-4"
-class="td10"> 1 is centered, 2 is right-aligned. </td>
+class="td10"> 1 is centered, 2 is right-aligned. </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-57-4-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-4-1"
class="td01"><span
class="ec-lmvtt-10">altname </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-4-2"
class="td11"> name </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-4-3"
class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-4-4"
-class="td10"> alternative name, </td>
+class="td10"> alternative name, </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-57-5-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-5-1"
class="td01"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-5-2"
class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-5-3"
class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-5-4"
-class="td10"> the name shown in the user interface </td>
+class="td10"> the name shown in the user interface </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-57-6-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-6-1"
class="td01"><span
class="ec-lmvtt-10">backgroundcolor </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-6-2"
class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-6-3"
class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-6-4"
-class="td10"> color of box </td>
+class="td10"> color of box </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-57-7-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-7-1"
class="td01"><span
class="ec-lmvtt-10">bordercolor </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-7-2"
class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-7-3"
class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-7-4"
-class="td10"> color of border </td>
+class="td10"> color of border </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-57-8-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-8-1"
class="td01"><span
class="ec-lmvtt-10">bordersep </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-8-2"
class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-8-3"
class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-8-4"
-class="td10"> box border gap </td>
+class="td10"> box border gap </td>
+
+
</tr><tr
style="vertical-align:baseline;" id="TBL-57-9-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-9-1"
class="td01"><span
class="ec-lmvtt-10">borderwidth </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-9-2"
class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-9-3"
class="td11"> <span
-class="ec-lmri-10">1 </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-9-4"
-class="td10"> width of box border, the value is a dimension </td>
-
+class="ec-lmri-10">1 </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-9-4"
+class="td10"> width of box border, the value is a dimension </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-57-10-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-10-1"
class="td01"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-10-2"
class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-10-3"
class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-10-4"
-class="td10"> or a number with default unit bp </td>
+class="td10"> or a number with default unit bp </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-57-11-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-11-1"
class="td01"><span
class="ec-lmvtt-10">calculate </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-11-2"
class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-11-3"
class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-11-4"
-class="td10"> JavaScript code to calculate the value of the field</td>
+class="td10"> JavaScript code to calculate the value of the field </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-57-12-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-12-1"
class="td01"><span
class="ec-lmvtt-10">charsize </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-12-2"
class="td11"> dimen </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-12-3"
class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-12-4"
-class="td10"> font size of field text </td>
+class="td10"> font size of field text </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-57-13-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-13-1"
class="td01"><span
@@ -5718,7 +5842,7 @@ class="td11"> <span
class="ec-lmri-10">4 (</span><span
class="pzdr-">&#x2714;</span><span
class="ec-lmri-10">) </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-13-4"
-class="td10"> symbol used for check boxes (ZapfDingbats), </td>
+class="td10"> symbol used for check boxes (ZapfDingbats), </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-57-14-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-14-1"
class="td01"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-14-2"
@@ -5728,7 +5852,7 @@ class="td10"> the value is a character or <span
class="ec-lmvtt-10">\ding</span><span class="obeylines-h"><span class="verb"><span
class="ec-lmvtt-10">{</span></span></span><span
class="ec-lmvtto-10">number</span><span class="obeylines-h"><span class="verb"><span
-class="ec-lmvtt-10">}</span></span></span>, </td>
+class="ec-lmvtt-10">}</span></span></span>, </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-57-15-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-15-1"
class="td01"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-15-2"
@@ -5736,339 +5860,333 @@ class="td11"> </td><td style="white-space:nowrap; text-align:left;"
class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-15-4"
class="td10"> see package <span
class="ec-lmss-10">pifont </span>from bundle <span
-class="ec-lmss-10">psnfss </span></td>
+class="ec-lmss-10">psnfss </span></td>
</tr><tr
style="vertical-align:baseline;" id="TBL-57-16-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-16-1"
class="td01"><span
class="ec-lmvtt-10">checked </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-16-2"
class="td11"> boolean </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-16-3"
class="td11"> <span
-class="ec-lmri-10">false </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-16-4"
-class="td10"> whether option selected by default </td>
+class="ec-lmri-10">false </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-16-4"
+class="td10"> whether option selected by default </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-57-17-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-17-1"
class="td01"><span
class="ec-lmvtt-10">color </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-17-2"
class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-17-3"
class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-17-4"
-class="td10"> color of text in box </td>
+class="td10"> color of text in box </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-57-18-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-18-1"
class="td01"><span
class="ec-lmvtt-10">combo </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-18-2"
class="td11"> boolean </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-18-3"
class="td11"> <span
-class="ec-lmri-10">false </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-18-4"
-class="td10"> choice list is &#8216;combo&#8217; style </td>
+class="ec-lmri-10">false </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-18-4"
+class="td10"> choice list is &#8216;combo&#8217; style </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-57-19-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-19-1"
class="td01"><span
class="ec-lmvtt-10">default </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-19-2"
class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-19-3"
class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-19-4"
-class="td10"> default value </td>
+class="td10"> default value </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-57-20-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-20-1"
class="td01"><span
class="ec-lmvtt-10">disabled </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-20-2"
class="td11"> boolean </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-20-3"
class="td11"> <span
-class="ec-lmri-10">false </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-20-4"
-class="td10"> field disabled </td>
+class="ec-lmri-10">false </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-20-4"
+class="td10"> field disabled </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-57-21-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-21-1"
-class="td01"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-21-2"
-class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-21-3"
-class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-21-4"
-class="td10"></td></tr>
-<tr
- style="vertical-align:baseline;" id="TBL-57-22-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-22-1"
class="td01"><span
-class="ec-lmvtt-10">format </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-22-2"
-class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-22-3"
-class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-22-4"
+class="ec-lmvtt-10">format </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-21-2"
+class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-21-3"
+class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-21-4"
class="td10"> JavaScript code to format the field </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-57-23-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-23-1"
+ style="vertical-align:baseline;" id="TBL-57-22-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-22-1"
class="td01"><span
-class="ec-lmvtt-10">height </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-23-2"
-class="td11"> dimen </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-23-3"
-class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-23-4"
+class="ec-lmvtt-10">height </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-22-2"
+class="td11"> dimen </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-22-3"
+class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-22-4"
class="td10"> height of field box </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-57-24-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-24-1"
+ style="vertical-align:baseline;" id="TBL-57-23-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-23-1"
class="td01"><span
-class="ec-lmvtt-10">hidden </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-24-2"
-class="td11"> boolean </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-24-3"
+class="ec-lmvtt-10">hidden </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-23-2"
+class="td11"> boolean </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-23-3"
class="td11"> <span
-class="ec-lmri-10">false </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-24-4"
+class="ec-lmri-10">false </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-23-4"
class="td10"> field hidden </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-57-25-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-25-1"
+ style="vertical-align:baseline;" id="TBL-57-24-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-24-1"
class="td01"><span
-class="ec-lmvtt-10">keystroke </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-25-2"
-class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-25-3"
-class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-25-4"
+class="ec-lmvtt-10">keystroke </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-24-2"
+class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-24-3"
+class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-24-4"
class="td10"> JavaScript code to control the keystrokes on entry</td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-57-26-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-26-1"
+ style="vertical-align:baseline;" id="TBL-57-25-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-25-1"
class="td01"><span
-class="ec-lmvtt-10">mappingname </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-26-2"
-class="td11"> name </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-26-3"
-class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-26-4"
+class="ec-lmvtt-10">mappingname </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-25-2"
+class="td11"> name </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-25-3"
+class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-25-4"
class="td10"> the mapping name to be used when exporting </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-57-27-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-27-1"
-class="td01"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-27-2"
-class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-27-3"
-class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-27-4"
+ style="vertical-align:baseline;" id="TBL-57-26-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-26-1"
+class="td01"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-26-2"
+class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-26-3"
+class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-26-4"
class="td10"> the field data </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-57-28-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-28-1"
+ style="vertical-align:baseline;" id="TBL-57-27-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-27-1"
class="td01"><span
-class="ec-lmvtt-10">maxlen </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-28-2"
-class="td11"> number </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-28-3"
+class="ec-lmvtt-10">maxlen </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-27-2"
+class="td11"> number </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-27-3"
class="td11"> <span
-class="ec-lmri-10">0 </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-28-4"
+class="ec-lmri-10">0 </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-27-4"
class="td10"> number of characters allowed in text field </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-57-29-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-29-1"
+ style="vertical-align:baseline;" id="TBL-57-28-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-28-1"
class="td01"><span
-class="ec-lmvtt-10">menulength </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-29-2"
-class="td11"> number </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-29-3"
+class="ec-lmvtt-10">menulength </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-28-2"
+class="td11"> number </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-28-3"
class="td11"> <span
-class="ec-lmri-10">4 </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-29-4"
+class="ec-lmri-10">4 </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-28-4"
class="td10"> number of elements shown in list </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-57-30-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-30-1"
+ style="vertical-align:baseline;" id="TBL-57-29-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-29-1"
class="td01"><span
-class="ec-lmvtt-10">multiline </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-30-2"
-class="td11"> boolean </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-30-3"
+class="ec-lmvtt-10">multiline </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-29-2"
+class="td11"> boolean </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-29-3"
class="td11"> <span
-class="ec-lmri-10">false </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-30-4"
+class="ec-lmri-10">false </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-29-4"
class="td10"> whether text box is multiline </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-57-31-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-31-1"
+ style="vertical-align:baseline;" id="TBL-57-30-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-30-1"
class="td01"><span
-class="ec-lmvtt-10">name </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-31-2"
-class="td11"> name </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-31-3"
-class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-31-4"
+class="ec-lmvtt-10">name </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-30-2"
+class="td11"> name </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-30-3"
+class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-30-4"
class="td10"> name of field (defaults to label) </td>
</tr><tr
+ style="vertical-align:baseline;" id="TBL-57-31-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-31-1"
+class="td01"><span
+class="ec-lmvtt-10">onblur </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-31-2"
+class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-31-3"
+class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-31-4"
+class="td10"> JavaScript code </td>
+</tr><tr
style="vertical-align:baseline;" id="TBL-57-32-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-32-1"
class="td01"><span
-class="ec-lmvtt-10">onblur </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-32-2"
+class="ec-lmvtt-10">onchange </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-32-2"
class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-32-3"
-class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-32-4"
+class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-32-4"
class="td10"> JavaScript code </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-57-33-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-33-1"
class="td01"><span
-class="ec-lmvtt-10">onchange </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-33-2"
+class="ec-lmvtt-10">onclick </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-33-2"
class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-33-3"
-class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-33-4"
+class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-33-4"
class="td10"> JavaScript code </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-57-34-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-34-1"
class="td01"><span
-class="ec-lmvtt-10">onclick </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-34-2"
+class="ec-lmvtt-10">ondblclick </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-34-2"
class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-34-3"
-class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-34-4"
+class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-34-4"
class="td10"> JavaScript code </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-57-35-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-35-1"
class="td01"><span
-class="ec-lmvtt-10">ondblclick </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-35-2"
+class="ec-lmvtt-10">onfocus </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-35-2"
class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-35-3"
-class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-35-4"
+class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-35-4"
class="td10"> JavaScript code </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-57-36-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-36-1"
class="td01"><span
-class="ec-lmvtt-10">onfocus </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-36-2"
+class="ec-lmvtt-10">onkeydown </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-36-2"
class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-36-3"
-class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-36-4"
+class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-36-4"
class="td10"> JavaScript code </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-57-37-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-37-1"
class="td01"><span
-class="ec-lmvtt-10">onkeydown </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-37-2"
+class="ec-lmvtt-10">onkeypress </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-37-2"
class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-37-3"
-class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-37-4"
+class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-37-4"
class="td10"> JavaScript code </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-57-38-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-38-1"
class="td01"><span
-class="ec-lmvtt-10">onkeypress </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-38-2"
+class="ec-lmvtt-10">onkeyup </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-38-2"
class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-38-3"
-class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-38-4"
+class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-38-4"
class="td10"> JavaScript code </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-57-39-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-39-1"
class="td01"><span
-class="ec-lmvtt-10">onkeyup </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-39-2"
+class="ec-lmvtt-10">onmousedown </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-39-2"
class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-39-3"
-class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-39-4"
+class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-39-4"
class="td10"> JavaScript code </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-57-40-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-40-1"
class="td01"><span
-class="ec-lmvtt-10">onmousedown </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-40-2"
+class="ec-lmvtt-10">onmousemove </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-40-2"
class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-40-3"
-class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-40-4"
+class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-40-4"
class="td10"> JavaScript code </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-57-41-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-41-1"
class="td01"><span
-class="ec-lmvtt-10">onmousemove </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-41-2"
+class="ec-lmvtt-10">onmouseout </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-41-2"
class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-41-3"
-class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-41-4"
+class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-41-4"
class="td10"> JavaScript code </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-57-42-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-42-1"
-class="td01"> </td></tr>
-<tr
+class="td01"><span
+class="ec-lmvtt-10">onmouseover </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-42-2"
+class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-42-3"
+class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-42-4"
+class="td10"> JavaScript code </td>
+</tr><tr
style="vertical-align:baseline;" id="TBL-57-43-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-43-1"
class="td01"><span
-class="ec-lmvtt-10">onmouseout </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-43-2"
+class="ec-lmvtt-10">onmouseup </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-43-2"
class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-43-3"
class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-43-4"
-class="td10"> JavaScript code </td>
+class="td10"> JavaScript code </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-57-44-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-44-1"
class="td01"><span
-class="ec-lmvtt-10">onmouseover </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-44-2"
+class="ec-lmvtt-10">onselect </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-44-2"
class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-44-3"
class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-44-4"
-class="td10"> JavaScript code </td>
+class="td10"> JavaScript code </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-57-45-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-45-1"
class="td01"><span
-class="ec-lmvtt-10">onmouseup </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-45-2"
-class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-45-3"
-class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-45-4"
-class="td10"> JavaScript code </td>
+class="ec-lmvtt-10">password </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-45-2"
+class="td11"> boolean </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-45-3"
+class="td11"> <span
+class="ec-lmri-10">false </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-45-4"
+class="td10"> text field is &#8216;password&#8217; style </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-57-46-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-46-1"
class="td01"><span
-class="ec-lmvtt-10">onselect </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-46-2"
-class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-46-3"
-class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-46-4"
-class="td10"> JavaScript code </td>
+class="ec-lmvtt-10">popdown </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-46-2"
+class="td11"> boolean </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-46-3"
+class="td11"> <span
+class="ec-lmri-10">false </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-46-4"
+class="td10"> choice list is &#8216;popdown&#8217; style </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-57-47-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-47-1"
class="td01"><span
-class="ec-lmvtt-10">password </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-47-2"
+class="ec-lmvtt-10">radio </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-47-2"
class="td11"> boolean </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-47-3"
class="td11"> <span
class="ec-lmri-10">false </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-47-4"
-class="td10"> text field is &#8216;password&#8217; style </td>
+class="td10"> choice list is &#8216;radio&#8217; style </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-57-48-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-48-1"
class="td01"><span
-class="ec-lmvtt-10">popdown </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-48-2"
-class="td11"> boolean </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-48-3"
-class="td11"> <span
-class="ec-lmri-10">false </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-48-4"
-class="td10"> choice list is &#8216;popdown&#8217; style </td>
-</tr><tr
- style="vertical-align:baseline;" id="TBL-57-49-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-49-1"
-class="td01"><span
-class="ec-lmvtt-10">radio </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-49-2"
-class="td11"> boolean </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-49-3"
-class="td11"> <span
-class="ec-lmri-10">false </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-49-4"
-class="td10"> choice list is &#8216;radio&#8217; style </td>
-</tr><tr
- style="vertical-align:baseline;" id="TBL-57-50-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-50-1"
-class="td01"><span
-class="ec-lmvtt-10">radiosymbol </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-50-2"
-class="td11"> char </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-50-3"
+class="ec-lmvtt-10">radiosymbol </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-48-2"
+class="td11"> char </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-48-3"
class="td11"> <span
class="ec-lmri-10">H (</span><span
class="pzdr-">&#x2605;</span><span
-class="ec-lmri-10">) </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-50-4"
-class="td10"> symbol used for radio fields (ZapfDingbats),</td>
+class="ec-lmri-10">) </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-48-4"
+class="td10"> symbol used for radio fields (ZapfDingbats), </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-57-51-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-51-1"
-class="td01"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-51-2"
-class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-51-3"
-class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-51-4"
+ style="vertical-align:baseline;" id="TBL-57-49-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-49-1"
+class="td01"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-49-2"
+class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-49-3"
+class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-49-4"
class="td10"> the value is a character or <span
class="ec-lmvtt-10">\ding</span><span class="obeylines-h"><span class="verb"><span
class="ec-lmvtt-10">{</span></span></span><span
class="ec-lmvtto-10">number</span><span class="obeylines-h"><span class="verb"><span
-class="ec-lmvtt-10">}</span></span></span>, </td>
+class="ec-lmvtt-10">}</span></span></span>, </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-57-52-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-52-1"
-class="td01"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-52-2"
-class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-52-3"
-class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-52-4"
+ style="vertical-align:baseline;" id="TBL-57-50-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-50-1"
+class="td01"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-50-2"
+class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-50-3"
+class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-50-4"
class="td10"> see package <span
class="ec-lmss-10">pifont </span>from bundle <span
-class="ec-lmss-10">psnfss </span></td>
+class="ec-lmss-10">psnfss </span></td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-57-53-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-53-1"
+ style="vertical-align:baseline;" id="TBL-57-51-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-51-1"
class="td01"><span
-class="ec-lmvtt-10">readonly </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-53-2"
-class="td11"> boolean </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-53-3"
+class="ec-lmvtt-10">readonly </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-51-2"
+class="td11"> boolean </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-51-3"
class="td11"> <span
-class="ec-lmri-10">false </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-53-4"
-class="td10"> field is readonly </td>
+class="ec-lmri-10">false </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-51-4"
+class="td10"> field is readonly </td>
</tr><tr
- style="vertical-align:baseline;" id="TBL-57-54-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-54-1"
+ style="vertical-align:baseline;" id="TBL-57-52-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-52-1"
class="td01"><span
-class="ec-lmvtt-10">rotation </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-54-2"
-class="td11"> number </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-54-3"
+class="ec-lmvtt-10">rotation </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-52-2"
+class="td11"> number </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-52-3"
class="td11"> <span
-class="ec-lmri-10">0 </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-54-4"
-class="td10"> rotation of the widget annotation </td>
+class="ec-lmri-10">0 </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-52-4"
+class="td10"> rotation of the widget annotation </td>
+</tr><tr
+ style="vertical-align:baseline;" id="TBL-57-53-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-53-1"
+class="td01"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-53-2"
+class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-53-3"
+class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-53-4"
+class="td10"> (degree, counterclockwise, multiple of 90) </td>
+</tr><tr
+ style="vertical-align:baseline;" id="TBL-57-54-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-54-1"
+class="td01"><span
+class="ec-lmvtt-10">tabkey </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-54-2"
+class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-54-3"
+class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-54-4"
+class="td10"> (as per HTML) </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-57-55-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-55-1"
-class="td01"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-55-2"
+class="td01"><span
+class="ec-lmvtt-10">validate </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-55-2"
class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-55-3"
class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-55-4"
-class="td10"> (degree, counterclockwise, multiple of 90) </td>
+class="td10"> JavaScript code to validate the entry </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-57-56-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-56-1"
class="td01"><span
-class="ec-lmvtt-10">tabkey </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-56-2"
+class="ec-lmvtt-10">value </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-56-2"
class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-56-3"
class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-56-4"
-class="td10"> (as per HTML) </td>
+class="td10"> initial value </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-57-57-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-57-1"
class="td01"><span
-class="ec-lmvtt-10">validate </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-57-2"
-class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-57-3"
+class="ec-lmvtt-10">width </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-57-2"
+class="td11"> dimen </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-57-3"
class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-57-4"
-class="td10"> JavaScript code to validate the entry </td>
+class="td10"> width of field box </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-57-58-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-58-1"
-class="td01"><span
-class="ec-lmvtt-10">value </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-58-2"
-class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-58-3"
-class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-58-4"
-class="td10"> initial value </td>
+class="td01"> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-57-59-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-59-1"
-class="td01"><span
-class="ec-lmvtt-10">width </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-57-59-2"
-class="td11"> dimen </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-59-3"
-class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-59-4"
-class="td10"> width of field box </td>
+class="td01"> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-57-60-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-60-1"
-class="td01"> </td>
+class="td01"> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-57-61-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-61-1"
-class="td01"> </td>
-</tr><tr
- style="vertical-align:baseline;" id="TBL-57-62-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-62-1"
-class="td01"> </td>
-</tr><tr
- style="vertical-align:baseline;" id="TBL-57-63-"><td style="white-space:nowrap; text-align:left;" id="TBL-57-63-1"
-class="td01"> </td></tr>
+class="td01"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-61-2"
+class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-61-3"
+class="td11"> </td><td style="white-space:nowrap; text-align:left;" id="TBL-57-61-4"
+class="td10"></td></tr>
</table></div>
<!--l. 2430--><p class="noindent" >
<h3 class="sectionHead"><span class="titlemark">8 </span> <a
@@ -6084,10 +6202,9 @@ class="ec-lmvtt-10">\hyper@linkfile</span></span></span>
class="ec-lmvtt-10">\hyper@linkurl</span></span></span>
<!--l. 2442--><p class="noindent" >5. <span class="obeylines-h"><span class="verb"><span
class="ec-lmvtt-10">\hyper@anchorstart</span></span></span>
-
-
<!--l. 2444--><p class="noindent" >6. <span class="obeylines-h"><span class="verb"><span
-class="ec-lmvtt-10">\hyper@anchorend</span></span></span>
+class="ec-lmvtt-10">\hyper@anchorend</span></span></span>
+
<!--l. 2446--><p class="noindent" >7. <span class="obeylines-h"><span class="verb"><span
class="ec-lmvtt-10">\hyper@linkstart</span></span></span>
<!--l. 2448--><p class="noindent" >8. <span class="obeylines-h"><span class="verb"><span
@@ -6113,7 +6230,8 @@ class="ec-lmvtt-10">\hyper@linkend</span></span></span>
class="ec-lmss-10">hyperref </span>aims to cooperate with other packages, but there are several possible sources for
conflict, such as
<ul class="itemize1">
- <li class="itemize">Packages that manipulate the bibliographic mechanism. Peter William&#8217;s <span
+ <li class="itemize">
+ <!--l. 2470--><p class="noindent" >Packages that manipulate the bibliographic mechanism. Peter William&#8217;s <span
class="ec-lmss-10">harvard </span>package is
supported. However, the recommended package is Patrick Daly&#8217;s <span
class="ec-lmss-10">natbib </span>package that has
@@ -6122,7 +6240,8 @@ class="ec-lmss-10">hyperref </span>hooks to allow reliable interaction. This pac
of layouts and citation styles, all of which work with <span
class="ec-lmss-10">hyperref</span>.
</li>
- <li class="itemize">Packages that typeset the contents of the <span
+ <li class="itemize">
+ <!--l. 2477--><p class="noindent" >Packages that typeset the contents of the <span
class="ec-lmvtt-10">\label </span>and <span
class="ec-lmvtt-10">\ref </span>macros, such as <span
class="ec-lmss-10">showkeys</span>. Since the
@@ -6131,7 +6250,8 @@ class="ec-lmss-10">hyperref </span>package redefines these commands, you must se
class="ec-lmvtt-10">implicit=false </span>for these packages
to work.
</li>
- <li class="itemize">Packages that do anything serious with the index.</li></ul>
+ <li class="itemize">
+ <!--l. 2482--><p class="noindent" >Packages that do anything serious with the index.</li></ul>
<!--l. 2485--><p class="indent" > The <span
class="ec-lmss-10">hyperref </span>package is distributed with variants on two useful packages designed to work especially
well with it. These are <span
@@ -6150,8 +6270,7 @@ class="ec-lmvtt-10">\begin{document}</span></span></span>. Sometimes this is too
package must be loaded earlier.
<!--l. 2503--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark">9.1.1 </span> <a
- id="x1-560009.1.1"></a>algorithm</h5>
-
+ id="x1-560009.1.1"></a>algorithm</h5>
<pre class="verbatim" id="verbatim-42">
&#x00A0;\usepackage{float}
@@ -6195,7 +6314,7 @@ thus the resulting package order is then:
<pre class="verbatim" id="verbatim-45">
&#x00A0;&#x00A0;\usepackage{longtable}
-&#x00A0;&#x00A0;\usepacakge{hyperref}
+&#x00A0;&#x00A0;\usepackage{hyperref}
&#x00A0;&#x00A0;\usepackage{arydshln}
</pre>
<!--l. 2544--><p class="nopar" >
@@ -6334,10 +6453,12 @@ before):
</pre>
<!--l. 2662--><p class="nopar" >
<ul class="itemize1">
- <li class="itemize">Several <span class="obeylines-h"><span class="verb"><span
+ <li class="itemize">
+ <!--l. 2664--><p class="noindent" >Several <span class="obeylines-h"><span class="verb"><span
class="ec-lmvtt-10">\caption</span></span></span> commands are not supported inside one float object.
</li>
- <li class="itemize">Anchor are set at top of the float object, if its style is controlled by float.sty.</li></ul>
+ <li class="itemize">
+ <!--l. 2665--><p class="noindent" >Anchor are set at top of the float object, if its style is controlled by float.sty.</li></ul>
<!--l. 2669--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark">9.1.16 </span> <a
id="x1-710009.1.16"></a>endnotes</h5>
@@ -6638,11 +6759,13 @@ order:
varioref that breaks the hyperref support for varioref.
<!--l. 2933--><p class="indent" > Also unsupported:
<ul class="itemize1">
- <li class="itemize"><span class="obeylines-h"><span class="verb"><span
+ <li class="itemize">
+ <!--l. 2935--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="ec-lmvtt-10">\Ref</span></span></span>, <span class="obeylines-h"><span class="verb"><span
class="ec-lmvtt-10">\Vref</span></span></span> do not uppercase the first letter.
</li>
- <li class="itemize"><span class="obeylines-h"><span class="verb"><span
+ <li class="itemize">
+ <!--l. 2936--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="ec-lmvtt-10">\vpageref[]{...}</span></span></span> On the same page a previous space is not suppressed.</li></ul>
<!--l. 2940--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark">9.1.41 </span> <a
@@ -6741,34 +6864,39 @@ href="hyperref-doc6.html#fn5x0"><sup class="textsuperscript">5</sup></a></span><
drivers lack this feature, e.g. dvips, dvipsone.
<!--l. 3025--><p class="indent" > Workarounds:
<ul class="itemize1">
- <li class="itemize">For long section or caption titles in the table of contents or list of figures/tables option
+ <li class="itemize">
+ <!--l. 3027--><p class="noindent" >For long section or caption titles in the table of contents or list of figures/tables option
<span
class="ec-lmss-10">linktocpage </span>can be used. Then the page number will be a link, and the overlong section title
is not forced into an one line link with overfull <span class="obeylines-h"><span class="verb"><span
class="ec-lmvtt-10">\hbox</span></span></span> warning.
</li>
- <li class="itemize">&#8220;<span class="obeylines-h"><span class="verb"><span
+ <li class="itemize">
+ <!--l. 3032--><p class="noindent" >&#8220;<span class="obeylines-h"><span class="verb"><span
class="ec-lmvtt-10">\url</span></span></span>&#8221;s are caught by package <span
class="ec-lmss-10">breakurl</span>.
</li>
- <li class="itemize">The option <span
+ <li class="itemize">
+ <!--l. 3033--><p class="noindent" >The option <span
class="ec-lmss-10">breaklinks </span>is intended for internal use. But it can be used to force link wrapping,
e.g. when printing a document. However, when such a document is converted to PDF and
viewed with a PDF viewer, the active link area will be misplaced.
+
+
<!--l. 3039--><p class="noindent" >Another limitation: some penalties are &#8220;optimized&#8221; by TeX, thus there are missing break
points, especially within <span class="obeylines-h"><span class="verb"><span
class="ec-lmvtt-10">\url</span></span></span>. (See thread &#8220;hyperref.sty, breaklinks and url.sty 3.2&#8221; in
comp.text.tex 2005-09).</li></ul>
-
-
<!--l. 3045--><p class="noindent" >
<h4 class="subsectionHead"><span class="titlemark">10.2 </span> <a
id="x1-10100010.2"></a>Links across pages</h4>
<!--l. 3047--><p class="noindent" >In general they have problems:
<ul class="itemize1">
- <li class="itemize">Some driver doesn&#8217;t support them at all (see above).
+ <li class="itemize">
+ <!--l. 3049--><p class="noindent" >Some driver doesn&#8217;t support them at all (see above).
</li>
- <li class="itemize">The driver allows it, but the link result might include the footer and/or header, or an error
+ <li class="itemize">
+ <!--l. 3050--><p class="noindent" >The driver allows it, but the link result might include the footer and/or header, or an error
message can occur sometimes.</li></ul>
<!--l. 3055--><p class="noindent" >
<h4 class="subsectionHead"><span class="titlemark">10.3 </span> <a
@@ -6838,7 +6966,8 @@ class="ec-lmss-10">xsetkeys</span>).
<h4 class="subsectionHead"><span class="titlemark">11.2 </span> <a
id="x1-10500011.2"></a>Index with makeindex</h4>
<ul class="itemize1">
- <li class="itemize">Package hyperref adds <span class="obeylines-h"><span class="verb"><span
+ <li class="itemize">
+ <!--l. 3102--><p class="noindent" >Package hyperref adds <span class="obeylines-h"><span class="verb"><span
class="ec-lmvtt-10">\hyperpage</span></span></span> commands by the encap mechanism (see documentation
of Makeindex), if option hyperindex is set (default). <span class="obeylines-h"><span class="verb"><span
class="ec-lmvtt-10">\hyperpage</span></span></span> uses the page anchors that
@@ -6850,7 +6979,8 @@ class="ec-lmvtt-10">\romannumbering</span></span></span>, ...), then the page an
option <span class="obeylines-h"><span class="verb"><span
class="ec-lmvtt-10">plainpages=false</span></span></span> is recommended.
</li>
- <li class="itemize">The encap mechanism of Makeindex allows to use one command only (see documentation of
+ <li class="itemize">
+ <!--l. 3112--><p class="noindent" >The encap mechanism of Makeindex allows to use one command only (see documentation of
Makeindex). If the user sets such a command, hyperref suppresses its <span class="obeylines-h"><span class="verb"><span
class="ec-lmvtt-10">\hyperpage</span></span></span> command. With
logical markup this situation can easily be solved:
@@ -6866,9 +6996,11 @@ class="ec-lmvtt-10">\hyperpage</span></span></span> command. With
</pre>
<!--l. 3124--><p class="nopar" >
</li>
- <li class="itemize">Scientic Word/Scientific WorkPlace users can use package robustindex with hyperindex=false.
+ <li class="itemize">
+ <!--l. 3125--><p class="noindent" >Scientic Word/Scientific WorkPlace users can use package robustindex with hyperindex=false.
</li>
- <li class="itemize">Other encap characters can be set by option <span
+ <li class="itemize">
+ <!--l. 3127--><p class="noindent" >Other encap characters can be set by option <span
class="ec-lmss-10">encap</span>. Example for use of &#8220;?&#8221;:
@@ -6877,7 +7009,8 @@ class="ec-lmss-10">encap</span>. Example for use of &#8220;?&#8221;:
</pre>
<!--l. 3131--><p class="nopar" >
</li>
- <li class="itemize">Another possibility is the insertion of <span class="obeylines-h"><span class="verb"><span
+ <li class="itemize">
+ <!--l. 3132--><p class="noindent" >Another possibility is the insertion of <span class="obeylines-h"><span class="verb"><span
class="ec-lmvtt-10">\hyperpage</span></span></span> by a style file for makeindex. For this case,
hyperref&#8217;s insertion will be disabled by <span class="obeylines-h"><span class="verb"><span
class="ec-lmvtt-10">hyperindex=false</span></span></span>. <span class="obeylines-h"><span class="verb"><span
@@ -7287,78 +7420,92 @@ Modified Version to whoever possesses a copy of it. In addition, you must do the
Version:
<!--l. 3594--><p class="indent" >
<ol class="enumerate1" >
- <li
- class="enumerate" id="x1-117002x1">Use in the Title Page (and on the covers, if any) a title distinct from that of the Document,
+<li
+ class="enumerate" id="x1-117002x1">
+ <!--l. 3595--><p class="noindent" >Use in the Title Page (and on the covers, if any) a title distinct from that of the Document,
and from those of previous versions (which should, if there were any, be listed in the History
section of the Document). You may use the same title as a previous version if the original
publisher of that version gives permission.
</li>
- <li
- class="enumerate" id="x1-117004x2">List on the Title Page, as authors, one or more persons or entities responsible for authorship
+<li
+ class="enumerate" id="x1-117004x2">
+ <!--l. 3600--><p class="noindent" >List on the Title Page, as authors, one or more persons or entities responsible for authorship
of the modifications in the Modified Version, together with at least five of the principal
authors of the Document (all of its principal authors, if it has fewer than five), unless they
- release you from this requirement.
- </li>
- <li
- class="enumerate" id="x1-117006x3">State on the Title page the name of the publisher of the Modified Version, as the publisher.
-
+ release you from this requirement.
</li>
- <li
- class="enumerate" id="x1-117008x4">Preserve all the copyright notices of the Document.
+<li
+ class="enumerate" id="x1-117006x3">
+ <!--l. 3605--><p class="noindent" >State on the Title page the name of the publisher of the Modified Version, as the publisher.
</li>
- <li
- class="enumerate" id="x1-117010x5">Add an appropriate copyright notice for your modifications adjacent to the other copyright
+<li
+ class="enumerate" id="x1-117008x4">
+ <!--l. 3607--><p class="noindent" >Preserve all the copyright notices of the Document.
+ </li>
+<li
+ class="enumerate" id="x1-117010x5">
+ <!--l. 3608--><p class="noindent" >Add an appropriate copyright notice for your modifications adjacent to the other copyright
notices.
</li>
- <li
- class="enumerate" id="x1-117012x6">Include, immediately after the copyright notices, a license notice giving the public permission
+<li
+ class="enumerate" id="x1-117012x6">
+ <!--l. 3610--><p class="noindent" >Include, immediately after the copyright notices, a license notice giving the public permission
to use the Modified Version under the terms of this License, in the form shown in the
Addendum below.
</li>
- <li
- class="enumerate" id="x1-117014x7">Preserve in that license notice the full lists of Invariant Sections and required Cover Texts
+<li
+ class="enumerate" id="x1-117014x7">
+ <!--l. 3613--><p class="noindent" >Preserve in that license notice the full lists of Invariant Sections and required Cover Texts
given in the Document&#8217;s license notice.
</li>
- <li
- class="enumerate" id="x1-117016x8">Include an unaltered copy of this License.
+<li
+ class="enumerate" id="x1-117016x8">
+ <!--l. 3615--><p class="noindent" >Include an unaltered copy of this License.
</li>
- <li
- class="enumerate" id="x1-117018x9">Preserve the section Entitled &#8220;History&#8221;, Preserve its Title, and add to it an item stating at
+<li
+ class="enumerate" id="x1-117018x9">
+ <!--l. 3616--><p class="noindent" >Preserve the section Entitled &#8220;History&#8221;, Preserve its Title, and add to it an item stating at
least the title, year, new authors, and publisher of the Modified Version as given on the Title
Page. If there is no section Entitled &#8220;History&#8221; in the Document, create one stating the title,
year, authors, and publisher of the Document as given on its Title Page, then add an item
describing the Modified Version as stated in the previous sentence.
</li>
- <li
- class="enumerate" id="x1-117020x10">Preserve the network location, if any, given in the Document for public access to a
+<li
+ class="enumerate" id="x1-117020x10">
+ <!--l. 3623--><p class="noindent" >Preserve the network location, if any, given in the Document for public access to a
Transparent copy of the Document, and likewise the network locations given in the Document
for previous versions it was based on. These may be placed in the &#8220;History&#8221; section. You
may omit a network location for a work that was published at least four years before the
Document itself, or if the original publisher of the version it refers to gives permission.
+
+
</li>
- <li
- class="enumerate" id="x1-117022x11">For any section Entitled &#8220;Acknowledgements&#8221; or &#8220;Dedications&#8221;, Preserve the Title of the
+<li
+ class="enumerate" id="x1-117022x11">
+ <!--l. 3630--><p class="noindent" >For any section Entitled &#8220;Acknowledgements&#8221; or &#8220;Dedications&#8221;, Preserve the Title of the
section, and preserve in the section all the substance and tone of each of the contributor
acknowledgements and/or dedications given therein.
</li>
- <li
- class="enumerate" id="x1-117024x12">Preserve all the Invariant Sections of the Document, unaltered in their text and in their
+<li
+ class="enumerate" id="x1-117024x12">
+ <!--l. 3634--><p class="noindent" >Preserve all the Invariant Sections of the Document, unaltered in their text and in their
titles. Section numbers or the equivalent are not considered part of the section titles.
</li>
- <li
- class="enumerate" id="x1-117026x13">Delete any section Entitled &#8220;Endorsements&#8221;. Such a section may not be included in the
+<li
+ class="enumerate" id="x1-117026x13">
+ <!--l. 3637--><p class="noindent" >Delete any section Entitled &#8220;Endorsements&#8221;. Such a section may not be included in the
Modified Version.
</li>
- <li
- class="enumerate" id="x1-117028x14">Do not retitle any existing section to be Entitled &#8220;Endorsements&#8221; or to conflict in title with
+<li
+ class="enumerate" id="x1-117028x14">
+ <!--l. 3639--><p class="noindent" >Do not retitle any existing section to be Entitled &#8220;Endorsements&#8221; or to conflict in title with
any Invariant Section.
</li>
- <li
- class="enumerate" id="x1-117030x15">Preserve any Warranty Disclaimers.
+<li
+ class="enumerate" id="x1-117030x15">
+ <!--l. 3641--><p class="noindent" >Preserve any Warranty Disclaimers.
</li></ol>
-
-
<!--l. 3645--><p class="indent" > If the Modified Version includes new front-matter sections or appendices that qualify as Secondary
Sections and contain no material copied from the Document, you may at your option designate some or
all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in
@@ -7376,6 +7523,8 @@ may replace the old one, on explicit permission from the previous publisher that
one.
<!--l. 3668--><p class="indent" > The author(s) and publisher(s) of the Document do not by this License give permission to use their
names for publicity for or to assert or imply endorsement of any Modified Version.
+
+
<!--l. 3673--><p class="noindent" >
<h4 class="subsectionHead"><span class="titlemark">13.5 </span> <a
id="x1-11800013.5"></a>Combining documents</h4>
@@ -7406,8 +7555,6 @@ of the documents in all other respects.
License, provided you insert a copy of this License into the extracted document, and follow this License
in all other respects regarding verbatim copying of that document.
<!--l. 3715--><p class="noindent" >
-
-
<h4 class="subsectionHead"><span class="titlemark">13.7 </span> <a
id="x1-12000013.7"></a>Aggregation with independent works</h4>
<!--l. 3718--><p class="noindent" >A compilation of the Document or its derivatives with other separate and independent documents or
@@ -7430,6 +7577,7 @@ under the terms of section&#x00A0;<a
href="#x1-11700013.4">13.4<!--tex4ht:ref: modifications --></a>. Replacing Invariant Sections with translations requires special
permission from their copyright holders, but you may include translations of some or all Invariant
Sections in addition to the original versions of these Invariant Sections. You may include a translation of
+
this License, and all the license notices in the Document, and any Warranty Disclaimers,
provided that you also include the original English version of this License and the original
versions of those notices and disclaimers. In case of a disagreement between the translation
@@ -7460,8 +7608,6 @@ following the terms and conditions either of that specified version or of any la
published (not as a draft) by the Free Software Foundation. If the Document does not specify a version
number of this License, you may choose any version ever published (not as a draft) by the Free Software
Foundation.
-
-
<!--l. 3791--><p class="noindent" >
<h4 class="likesubsectionHead"><a
id="x1-12400013.10"></a>Addendum: how to use this license for your documents</h4>
@@ -7479,6 +7625,8 @@ class="ts1-lmr10-"></span>&#x00A0;YEAR YOUR NAME. Permission is granted to copy
line with this:
<!--l. 3810--><p class="indent" > with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and
with the Back-Cover Texts being LIST.
+
+
<!--l. 3813--><p class="indent" > If you have Invariant Sections without Cover Texts, or some other combination of the three, merge
those two alternatives to suit the situation.
<!--l. 3817--><p class="indent" > If your document contains nontrivial examples of program code, we recommend releasing these
diff --git a/macros/latex/contrib/hyperref/doc/hyperref-doc.pdf b/macros/latex/contrib/hyperref/doc/hyperref-doc.pdf
index f39dbe3d0e..51a1372af1 100644
--- a/macros/latex/contrib/hyperref/doc/hyperref-doc.pdf
+++ b/macros/latex/contrib/hyperref/doc/hyperref-doc.pdf
Binary files differ
diff --git a/macros/latex/contrib/hyperref/doc/hyperref-doc.tex b/macros/latex/contrib/hyperref/doc/hyperref-doc.tex
index f4b113db0d..ce9a213c8c 100644
--- a/macros/latex/contrib/hyperref/doc/hyperref-doc.tex
+++ b/macros/latex/contrib/hyperref/doc/hyperref-doc.tex
@@ -166,7 +166,7 @@
}
\makeatother
\title{Hypertext marks in \hologo{LaTeX}: a manual for \xpackage{hyperref}}
-\date{2021-02-27 v7.00k}
+\date{2021-06-05 v7.00l}
\begin{document}
@@ -2539,7 +2539,7 @@ earlier.
\begin{verbatim}
\usepackage{longtable}
- \usepacakge{hyperref}
+ \usepackage{hyperref}
\usepackage{arydshln}
\end{verbatim}
diff --git a/macros/latex/contrib/hyperref/doc/hyperref.pdf b/macros/latex/contrib/hyperref/doc/hyperref.pdf
index 94564ddfe3..509003fa47 100644
--- a/macros/latex/contrib/hyperref/doc/hyperref.pdf
+++ b/macros/latex/contrib/hyperref/doc/hyperref.pdf
Binary files differ
diff --git a/macros/latex/contrib/hyperref/doc/nameref.pdf b/macros/latex/contrib/hyperref/doc/nameref.pdf
index 731298ac32..31cafb8c57 100644
--- a/macros/latex/contrib/hyperref/doc/nameref.pdf
+++ b/macros/latex/contrib/hyperref/doc/nameref.pdf
Binary files differ
diff --git a/macros/latex/contrib/hyperref/hluatex.dtx b/macros/latex/contrib/hyperref/hluatex.dtx
index b1ad0653c7..e16c9e1d8e 100644
--- a/macros/latex/contrib/hyperref/hluatex.dtx
+++ b/macros/latex/contrib/hyperref/hluatex.dtx
@@ -1,6 +1,6 @@
% \iffalse
% Source File: hluatex.dtx
-% 2021-02-27 v7.00k
+% 2021-06-05 v7.00l
%
% Copyright
% 2016-2019 Oberdiek Package Support Group
@@ -31,7 +31,7 @@
%
% \begin{macrocode}
%<*luatex>
-%% 2021-02-27 v7.00k
+%% 2021-06-05 v7.00l
%% force unicode encoding, see issue #101
%% code mostly copied from hxetex.def
\HyPsd@LoadUnicode
diff --git a/macros/latex/contrib/hyperref/hyperref.dtx b/macros/latex/contrib/hyperref/hyperref.dtx
index 711fa59ea1..f07e832470 100644
--- a/macros/latex/contrib/hyperref/hyperref.dtx
+++ b/macros/latex/contrib/hyperref/hyperref.dtx
@@ -53,7 +53,7 @@
%<puarenc>\ProvidesFile{puarenc.def}
%<psdextra>\ProvidesFile{psdextra.def}
%<lang>\ProvidesFile{hyperref-langpatches.def}
-%<!none> [2021-02-27 v7.00k %
+%<!none> [2021-06-05 v7.00l %
%<package> Hypertext links for LaTeX]
%<nohyperref> Dummy hyperref (SR)]
%<driver> Hyperref documentation driver file]
@@ -4451,10 +4451,10 @@
\let\Hy@RestoreLastskip\relax
\ifvmode
\ifdim\lastskip=\z@
- \ifnum\lastnodetype=11 %
- \let\Hy@RestoreLastskip\nobreak
- \else
+ \ifnum\lastnodetype=1 %
\let\Hy@RestoreLastskip\relax
+ \else
+ \let\Hy@RestoreLastskip\nobreak
\fi
\else
\begingroup
@@ -7745,6 +7745,7 @@
\def\Hy@babelnormalise#1[#2]{%
\begingroup
\Hy@safe@activestrue
+ \let\protect\@unexpandableprotect
\edef\Hy@tempa{%
\endgroup
\noexpand#1[{#2}]%
@@ -11416,7 +11417,7 @@
% without valid anchor
% \begin{macrocode}
\@ifpackageloaded{longtable}{%
- \CheckCommand*{\LT@p@ftntext}[1]{%
+ \CheckCommand{\LT@p@ftntext}[1]{%
\edef\@tempa{%
\the\LT@p@ftn
\noexpand\footnotetext[\the\c@footnote]%
@@ -12979,6 +12980,7 @@
\def\HyRef@StarSetRef#1{%
\begingroup
\Hy@safe@activestrue
+ \let\protect\@unexpandableprotect
\edef\x{#1}%
\@onelevel@sanitize\x
\edef\x{\endgroup
diff --git a/macros/latex/contrib/hyperref/xr-hyper.sty b/macros/latex/contrib/hyperref/xr-hyper.sty
index 08bfac613a..25b2c24f83 100644
--- a/macros/latex/contrib/hyperref/xr-hyper.sty
+++ b/macros/latex/contrib/hyperref/xr-hyper.sty
@@ -61,7 +61,7 @@
%%
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{xr-hyper}
- [2021-02-27 v7.00k eXternal References (DPC)]
+ [2021-06-05 v7.00l eXternal References (DPC)]
\def\externaldocument{\@testopt\XR@cite{}}
\let\externalcitedocument\externaldocument
diff --git a/macros/latex/contrib/nicematrix/nicematrix-french.pdf b/macros/latex/contrib/nicematrix/nicematrix-french.pdf
index 972985be67..646ec7e301 100644
--- a/macros/latex/contrib/nicematrix/nicematrix-french.pdf
+++ b/macros/latex/contrib/nicematrix/nicematrix-french.pdf
Binary files differ
diff --git a/macros/latex/contrib/nicematrix/nicematrix-french.tex b/macros/latex/contrib/nicematrix/nicematrix-french.tex
index b9f2c80453..c80c13f352 100644
--- a/macros/latex/contrib/nicematrix/nicematrix-french.tex
+++ b/macros/latex/contrib/nicematrix/nicematrix-french.tex
@@ -4348,7 +4348,7 @@ a_p & &&a_0 & & &b_1 \\
\end{scope}
\vspace{2cm}
-Un exemple avec un système linéaire:\par\nobreak
+Un exemple avec un système linéaire:
\begin{Verbatim}
$\begin{pNiceArray}{*6c|c}[nullify-dots,last-col,code-for-last-col=\scriptstyle]
diff --git a/macros/latex/contrib/nicematrix/nicematrix.dtx b/macros/latex/contrib/nicematrix/nicematrix.dtx
index 0718d3cae5..32206348c0 100644
--- a/macros/latex/contrib/nicematrix/nicematrix.dtx
+++ b/macros/latex/contrib/nicematrix/nicematrix.dtx
@@ -15,8 +15,8 @@
%
% \fi
% \iffalse
-\def\myfileversion{5.15a}
-\def\myfiledate{2021/05/06}
+\def\myfileversion{5.15b}
+\def\myfiledate{2021/06/05}
%
%
%<*batchfile>
@@ -1665,7 +1665,7 @@ version 2005/12/01 or later.
%
% It's possible to access the preceding tools with a syntax close to the syntax
% of \pkg{colortbl}. For that, one must use the key |colortbl-like| in the
-% current environment.\footnote{As for now, this key is \emph{not} available in |\NiceMatrixOptions|.}
+% current environment.\footnote{Up to now, this key is \emph{not} available in |\NiceMatrixOptions|.}
%
% There are three commands available (they are inspired by \pkg{colortbl} but
% are \emph{independent} of \pkg{colortbl}):
@@ -4134,7 +4134,7 @@ version 2005/12/01 or later.
% \end{Verbatim}
%
% \bigskip
-% As for now, the package \pkg{nicematrix} is not compatible with
+% Up to now, the package \pkg{nicematrix} is not compatible with
% \cls{aastex63}. If you want to use \pkg{nicematrix} with \cls{aastex63}, send
% me an email and I will try to solve the incompatibilies.
%
@@ -5276,87 +5276,7 @@ version 2005/12/01 or later.
}
% \end{macrocode}
%
-% \medskip
-% The command |\NC@rewrite@S| is a LaTeX command created by \pkg{siunitx} in
-% connection with the |S| column. In the code of \pkg{siunitx}, this command is
-% defined by:
-% \begin{Verbatim}[commandchars=\~\!\+, formatcom = \small]
-% \renewcommand*{\NC@rewrite@S}[1][]
-% {
-% \@temptokena \exp_after:wN
-% {
-% \tex_the:D \@temptokena
-% > { \__siunitx_table_collect_begin: S {#1} }
-% c
-% < { \__siunitx_table_print: }
-% }
-% \NC@find
-% }
-% \end{Verbatim}
-% We want to patch this command (in the environments of \pkg{nicematrix}) in
-% order to have:
-% \begin{Verbatim}[commandchars=\~\!\+, formatcom = \small]
-% \renewcommand*{\NC@rewrite@S}[1][]
-% {
-% \@temptokena \exp_after:wN
-% {
-% \tex_the:D \@temptokena
-% > { ~emphase!\@@_Cell:+ \__siunitx_table_collect_begin: S {#1} }
-% ~emphase!\@@_true_c:+
-% < { \__siunitx_table_print: ~emphase!\@@_end_Cell:+ }
-% }
-% \NC@find
-% }
-% \end{Verbatim}
-% However, we don't want do use explicitly any private command of \pkg{siunitx}.
-% That's why we will extract the name of the two |\__siunitx...| commands by
-% their position in the code of |\NC@rewrite@S|.
-%
-% Since the command |\NC@rewrite@S| appends some tokens to the \emph{toks} list
-% |\@temptokena|, we use the LaTeX command |\NC@rewrite@S| in a group
-% (|\group_begin:|--|\group_end:|) and we extract the two command names which
-% are in the toks |\@temptokena|. However, this extraction can be done only
-% when \pkg{siunitx} is loaded (and it may be loaded after \pkg{nicematrix})
-% and, in fact, after the beginning of the document --- because some
-% instructions of \pkg{siunitx} are executed in a |\AtBeginDocument|). That's
-% why this extraction will be done only at the first use of an
-% environment of \pkg{nicematrix} with the command |\@@_adapt_S_column:|.
-% \begin{macrocode}
-\cs_set_protected:Npn \@@_adapt_S_column:
- {
- \bool_if:NT \c_@@_siunitx_loaded_bool
- {
- \group_begin:
- \@temptokena = { }
-% \end{macrocode}
-% We protect |\NC@find| which is at the end of |\NC@rewrite@S|.
-% \begin{macrocode}
- \cs_set_eq:NN \NC@find \prg_do_nothing:
- \NC@rewrite@S { }
-% \end{macrocode}
-% Conversion of the \emph{toks} |\@temptokena| in a token list of \pkg{expl3}
-% (the toks are not supported by \pkg{expl3} but we can, nevertheless, use the
-% option |V| for |\tl_gset:NV|).
-% \begin{macrocode}
- \tl_gset:NV \g_tmpa_tl \@temptokena
- \group_end:
- \tl_new:N \c_@@_table_collect_begin_tl
- \tl_set:Nx \l_tmpa_tl { \tl_item:Nn \g_tmpa_tl 2 }
- \tl_gset:Nx \c_@@_table_collect_begin_tl { \tl_item:Nn \l_tmpa_tl 1 }
- \tl_new:N \c_@@_table_print_tl
- \tl_gset:Nx \c_@@_table_print_tl { \tl_item:Nn \g_tmpa_tl { -1 } }
-% \end{macrocode}
-% The token lists |\c_@@_table_collect_begin_tl| and |\c_@@_table_print_tl|
-% contain now the two commands of \pkg{siunitx}.
-%
-% \smallskip
-% If the adaptation has been done, the command |\@@_adapt_S_column:| becomes
-% no-op (globally).
-% \begin{macrocode}
- \cs_gset_eq:NN \@@_adapt_S_column: \prg_do_nothing:
- }
- }
-% \end{macrocode}
+%
%
% \bigskip
% The command |\@@_renew_NC@rewrite@S:| will be used in each environment of
@@ -5367,28 +5287,82 @@ version 2005/12/01 or later.
\bool_if:nTF { ! \c_@@_siunitx_loaded_bool }
{ \cs_set_eq:NN \@@_renew_NC@rewrite@S: \prg_do_nothing: }
{
- \cs_new_protected:Npn \@@_renew_NC@rewrite@S:
+% \end{macrocode}
+% For version of \pkg{siunitx} at least equal to 3.0, the adaptation is different
+% from previous ones. We test the version of \pkg{siunitx} by the existence of the
+% control sequence |\siunitx_cell_begin:w|.
+% \begin{macrocode}
+ \cs_if_exist:NTF \siunitx_cell_begin:w
{
- \renewcommand*{\NC@rewrite@S}[1][]
+ \cs_new_protected:Npn \@@_renew_NC@rewrite@S:
{
- \@temptokena \exp_after:wN
+ \renewcommand*{\NC@rewrite@S}[1][]
{
- \tex_the:D \@temptokena
- > { \@@_Cell: \c_@@_table_collect_begin_tl S {##1} }
+ \@temptokena \exp_after:wN
+ {
+ \tex_the:D \@temptokena
+ > {
+ \@@_Cell:
+ \keys_set:nn { siunitx } { ##1 }
+ \siunitx_cell_begin:w
+ }
% \end{macrocode}
% |\@@_true_c:| will be replaced statically by |c| at the end of the construction
% of the preamble.
% \begin{macrocode}
- \@@_true_c:
- < { \c_@@_table_print_tl \@@_end_Cell: }
+ \@@_true_c:
+ < { \siunitx_cell_end: \@@_end_Cell: }
+ }
+ \NC@find
}
- \NC@find
}
}
+ {
+ \cs_new_protected:Npn \@@_renew_NC@rewrite@S:
+ {
+ \renewcommand*{\NC@rewrite@S}[1][]
+ {
+ \@temptokena \exp_after:wN
+ {
+ \tex_the:D \@temptokena
+ > { \@@_Cell: \c_@@_table_collect_begin_tl S {##1} }
+ \@@_true_c:
+ < { \c_@@_table_print_tl \@@_end_Cell: }
+ }
+ \NC@find
+ }
+ }
+ }
+ }
+ }
+% \end{macrocode}
+%
+% \medskip
+% The following code is used to define |\c_@@_table_collect_begin_tl| and
+% |\c_@@_table_print_tl| when the version of \pkg{siunitx} is prior to 3.0. The
+% command |\@@_adapt_S_column| is used in the environment |{NiceArrayWithDelims}|.
+% \begin{macrocode}
+\cs_set_protected:Npn \@@_adapt_S_column:
+ {
+ \bool_if:NT \c_@@_siunitx_loaded_bool
+ {
+ \group_begin:
+ \@temptokena = { }
+ \cs_set_eq:NN \NC@find \prg_do_nothing:
+ \NC@rewrite@S { }
+ \tl_gset:NV \g_tmpa_tl \@temptokena
+ \group_end:
+ \tl_new:N \c_@@_table_collect_begin_tl
+ \tl_set:Nx \l_tmpa_tl { \tl_item:Nn \g_tmpa_tl 2 }
+ \tl_gset:Nx \c_@@_table_collect_begin_tl { \tl_item:Nn \l_tmpa_tl 1 }
+ \tl_new:N \c_@@_table_print_tl
+ \tl_gset:Nx \c_@@_table_print_tl { \tl_item:Nn \g_tmpa_tl { -1 } }
+ \cs_gset_eq:NN \@@_adapt_S_column: \prg_do_nothing:
}
}
% \end{macrocode}
%
+%
% \bigskip
% The following regex will be used to modify the preamble of the array when the
% key |colortbl-like| is used.
@@ -5416,6 +5390,7 @@ version 2005/12/01 or later.
}
% \end{macrocode}
%
+% \bigskip
% \subsection*{Parameters}
%
% \bigskip
@@ -5864,11 +5839,7 @@ version 2005/12/01 or later.
%
% \medskip
% The following token list correspond to the key |color| of the command
-% |\Block|. However, as of now (v. 5.7 of \pkg{nicematrix}), the key |color|
-% linked to |fill| with an error. We will give to the key |color| of |\Block|
-% its new meaning in a few months (with its new definition, the key |color| will
-% draw the frame with the given color but also color the content of the block
-% (that is to say the text) as does the key |color| of a Tikz node).
+% |\Block|.
% \begin{macrocode}
\tl_new:N \l_@@_color_tl
% \end{macrocode}
@@ -7209,7 +7180,7 @@ version 2005/12/01 or later.
% \item we test the existence of these nodes in order to determine whether a
% cell is empty when we search the extremities of a dotted line.
% \end{itemize}
-% However, it's very difficult to determine whether a cell is empty. As for now,
+% However, it's very difficult to determine whether a cell is empty. Up to now
% we use the following technic:
% \begin{itemize}
% \item if the width of the box |\l_@@_cell_box| (created with the content of
@@ -8169,6 +8140,10 @@ version 2005/12/01 or later.
\bool_gset_false:N \g_@@_row_of_col_done_bool
\str_if_empty:NT \g_@@_name_env_str
{ \str_gset:Nn \g_@@_name_env_str { NiceArrayWithDelims } }
+% \end{macrocode}
+% The following line will be deleted when we will consider that only versions of
+% \pkg{siunitx} after v3.0 are compatible with \pkg{nicematrix}.
+% \begin{macrocode}
\@@_adapt_S_column:
\bool_if:NTF \l_@@_NiceTabular_bool
\mode_leave_vertical:
@@ -10157,12 +10132,19 @@ version 2005/12/01 or later.
% \begin{macrocode}
\seq_gclear:N \g_@@_submatrix_names_seq
% \end{macrocode}
+% \medskip
+% We compose the |code-after| in math mode in order to nullify the spaces put
+% by the user between instructions in the |code-after|.
+% \begin{macrocode}
+ % \bool_if:NT \l_@@_NiceTabular_bool \c_math_toggle_token
+% \end{macrocode}
% And here's the |\CodeAfter|. Since the |\CodeAfter| may begin with an
% ``argument'' between square brackets of the options, we extract and treat that
% potential ``argument'' with the command |\@@_CodeAfter_keys:|.
% \begin{macrocode}
\exp_last_unbraced:NV \@@_CodeAfter_keys: \g_nicematrix_code_after_tl
\scan_stop:
+ % \bool_if:NT \l_@@_NiceTabular_bool \c_math_toggle_token
\tl_gclear:N \g_nicematrix_code_after_tl
\group_end:
% \end{macrocode}
@@ -10661,8 +10643,8 @@ version 2005/12/01 or later.
% The following commmand (\emph{when it will be written}) will set the four
% counters |\l_@@_row_min_int|, |\l_@@_row_max_int|, |\l_@@_col_min_int| and
% |\l_@@_col_max_int| to the intersections of the sub-matrices which contains
-% the cell of row |#1| and column |#2|.
-% As of now, it's only the whole array (excepted exterior row and columns).
+% the cell of row |#1| and column |#2|. As of now, it's only the whole array
+% (excepted exterior rows and columns).
% \begin{macrocode}
\cs_new_protected:Npn \@@_adjust_to_submatrix:nn #1 #2
{
@@ -11571,9 +11553,6 @@ version 2005/12/01 or later.
% |\Iddots| in the environments |{NiceArray}| (the other environments of
% \pkg{nicematrix} rely upon |{NiceArray}|).
%
-% The starred versions of these commands are deprecated since version~3.1 but,
-% as of now, they are still available with an error.
-%
%
% \medskip
% The syntax of these commands uses the character |_| as embellishment and
@@ -12370,8 +12349,7 @@ version 2005/12/01 or later.
% The command |\@@_arraycolor| (linked to |\arraycolor| at the beginning of
% the |\CodeBefore|) will color the whole tabular (excepted the potential
% exterior rows and columns). The third argument is a optional argument which a
-% list of pairs key-value. As for now, there is only one key: |except-corners|.
-% When that key is used, the cells in the corners are not colored.
+% list of pairs key-value.
% \begin{macrocode}
\NewDocumentCommand \@@_arraycolor { O { } m O { } }
{
@@ -13627,7 +13605,7 @@ version 2005/12/01 or later.
% \end{macrocode}
%
% \medskip
-% As for now, we have no option to control the style of the lines drawn by
+% Up to now, we have no option to control the style of the lines drawn by
% |\hdottedline| and the specifier ``|:|'' in the preamble. That's why we impose
% the style |standard|.
% \begin{macrocode}
@@ -13695,7 +13673,7 @@ version 2005/12/01 or later.
\@@_qpoint:n { row - \@@_succ:n \c@iRow }
\dim_set:Nn \l_@@_y_final_dim { \pgf@y + 0.5 \l_@@_inter_dots_dim }
% \end{macrocode}
-% As for now, we have no option to control the style of the lines drawn by
+% Up to now, we have no option to control the style of the lines drawn by
% |\hdottedline| and the specifier ``|:|'' in the preamble. That's why we impose
% the style |standard|.
% \begin{macrocode}
@@ -13716,7 +13694,7 @@ version 2005/12/01 or later.
% \end{macrocode}
%
% \bigskip
-% As for now, there is only one option available for the environment
+% Up to now, there is only one option available for the environment
% |{NiceMatrixBlock}|.
% \begin{macrocode}
\keys_define:nn { NiceMatrix / NiceMatrixBlock }
@@ -15618,16 +15596,19 @@ version 2005/12/01 or later.
% \begin{macrocode}
\NewDocumentCommand \@@_SubMatrix_in_code_before { m m m m ! O { } }
{
- \@@_cut_on_hyphen:w #3 \q_stop
- \tl_clear_new:N \l_tmpc_tl
- \tl_clear_new:N \l_tmpd_tl
- \tl_set_eq:NN \l_tmpc_tl \l_tmpa_tl
- \tl_set_eq:NN \l_tmpd_tl \l_tmpb_tl
- \@@_cut_on_hyphen:w #2 \q_stop
- \seq_gput_right:Nx \g_@@_submatrix_seq
- { { \l_tmpa_tl } { \l_tmpb_tl } { \l_tmpc_tl } { \l_tmpd_tl } }
- \tl_gput_right:Nn \g_@@_internal_code_after_tl
- { \SubMatrix { #1 } { #2 } { #3 } { #4 } [ #5 ] }
+ \peek_remove_spaces:n
+ {
+ \@@_cut_on_hyphen:w #3 \q_stop
+ \tl_clear_new:N \l_tmpc_tl
+ \tl_clear_new:N \l_tmpd_tl
+ \tl_set_eq:NN \l_tmpc_tl \l_tmpa_tl
+ \tl_set_eq:NN \l_tmpd_tl \l_tmpb_tl
+ \@@_cut_on_hyphen:w #2 \q_stop
+ \seq_gput_right:Nx \g_@@_submatrix_seq
+ { { \l_tmpa_tl } { \l_tmpb_tl } { \l_tmpc_tl } { \l_tmpd_tl } }
+ \tl_gput_right:Nn \g_@@_internal_code_after_tl
+ { \SubMatrix { #1 } { #2 } { #3 } { #4 } [ #5 ] }
+ }
}
% \end{macrocode}
%
@@ -15644,6 +15625,13 @@ version 2005/12/01 or later.
% \begin{macrocode}
\NewDocumentCommand \@@_SubMatrix { m m m m O { } }
{
+ \peek_remove_spaces:n
+ { \@@_sub_matrix:nnnnn { #1 } { #2 } { #3 } { #4 } { #5 } }
+ }
+% \end{macrocode}
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_sub_matrix:nnnnn #1 #2 #3 #4 #5
+ {
\group_begin:
% \end{macrocode}
% The four following token lists correspond to the position of the |\SubMatrix|.
@@ -17490,8 +17478,9 @@ version 2005/12/01 or later.
% It's now possible to specify delimiters for submatrices in the preamble of an
% environment.
%
+% The version 5.15b is compatible with the version 3.0+ of \pkg{siunitx}
+% (previous versions were not).
%
-% \subsection*{Changes between versions 5.15 and 5.16}
%
% \PrintIndex
%
diff --git a/macros/latex/contrib/nicematrix/nicematrix.pdf b/macros/latex/contrib/nicematrix/nicematrix.pdf
index 9bae2b15ba..b096ea1e0f 100644
--- a/macros/latex/contrib/nicematrix/nicematrix.pdf
+++ b/macros/latex/contrib/nicematrix/nicematrix.pdf
Binary files differ
diff --git a/macros/latex/contrib/profcollege/doc/ProfCollege-doc.pdf b/macros/latex/contrib/profcollege/doc/ProfCollege-doc.pdf
index ee0a252f02..778b60dcfe 100644
--- a/macros/latex/contrib/profcollege/doc/ProfCollege-doc.pdf
+++ b/macros/latex/contrib/profcollege/doc/ProfCollege-doc.pdf
Binary files differ
diff --git a/macros/latex/contrib/profcollege/latex/PfCEquationComposition2.tex b/macros/latex/contrib/profcollege/latex/PfCEquationComposition2.tex
index 38493f8996..b26d06486a 100644
--- a/macros/latex/contrib/profcollege/latex/PfCEquationComposition2.tex
+++ b/macros/latex/contrib/profcollege/latex/PfCEquationComposition2.tex
@@ -6,39 +6,43 @@
\ifx\bla#2\bla%On échange en faisant attention à ne pas boucler : c doit être non vide
\EquaDeuxComposition[#1]{#4}{#5}{#2}{#3}
\else%cas ax+b=d
- \xintifboolexpr{#2=0}{%
- \xintifboolexpr{#3=#5}{%b=d
+ \xintifboolexpr{#2==0}{%
+ \xintifboolexpr{#3==#5}{%b=d
L'équation $\num{#3}=\num{#5}$ a une infinité de solutions.}%
{%b<>d
L'équation $\num{#3}=\num{#5}$ n'a aucune solution.%
}%
}{%ELSE
- \xintifboolexpr{#3=0}{%ax+b=d
+ \xintifboolexpr{#3==0}{%ax+b=d
\EquaBase[#1]{#2}{}{}{#5}%
}{%ax+b=d$ Ici
\ifboolKV[ClesEquation]{Decomposition}{\colorlet{Ccompo}{\useKV[ClesEquation]{CouleurCompo}}}{}
\begin{align*}
- \tikzmark{A-\theNbequa}\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\mathcolor{Ccompo}{\num{#5}}\tikzmark{E-\theNbequa}\\
- \xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\mathcolor{Ccompo}{\num{\fpeval{#5-#3}}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}}\\
- \tikzmark{C-\theNbequa}\xdef\Coeffa{#2}\xdef\Coeffb{\fpeval{#5-#3}}\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}&=\num{\Coeffb}\tikzmark{G-\theNbequa}%\\
- \xintifboolexpr{\Coeffa=1}{}{\\}
+ \tikzmark{A-\theNbequa}\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\mathcolor{Ccompo}{\num{#5}}\tikzmark{E-\theNbequa}\\
+ \xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\mathcolor{Ccompo}{\num{\fpeval{#5-#3}}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}}\\
+ \tikzmark{C-\theNbequa}\xdef\Coeffa{#2}\xdef\Coeffb{\fpeval{#5-#3}}\xintifboolexpr{\Coeffa==1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}&=\num{\Coeffb}\tikzmark{G-\theNbequa}%\\
+ \xintifboolexpr{\Coeffa==1}{}{\\}
\ifboolKV[ClesEquation]{Fleches}{%
\leftcomment{A-\theNbequa}{C-\theNbequa}{A-\theNbequa}{$\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}$}%
\rightcomment{E-\theNbequa}{G-\theNbequa}{E-\theNbequa}{$\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}$}%
}{}
- \xintifboolexpr{\Coeffa=1}{%
+ \xintifboolexpr{\Coeffa==1}{%
}{%\ifnum\cmtd>1
\tikzmark{D-\theNbequa}\useKV[ClesEquation]{Lettre}&=\frac{\num{\Coeffb}}{\num{\Coeffa}}\tikzmark{H-\theNbequa}%\\
\ifboolKV[ClesEquation]{Fleches}{%
\leftcomment{C-\theNbequa}{D-\theNbequa}{A-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
\rightcomment{G-\theNbequa}{H-\theNbequa}{E-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
- }{%ICI ?
+ }{%
\ifboolKV[ClesEquation]{FlecheDiv}{%
\leftcomment{C-\theNbequa}{D-\theNbequa}{A-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
\rightcomment{G-\theNbequa}{H-\theNbequa}{E-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
}{}
}
}
+ \ifboolKV[ClesEquation]{Decimal}{%
+ \\\useKV[ClesEquation]{Lettre}&=\num{\fpeval{\Coeffb/\Coeffa}}%
+ }{}%
+ %%%
\ifboolKV[ClesEquation]{Entier}{%
\SSimpliTest{\Coeffb}{\Coeffa}%
\ifboolKV[ClesEquation]{Simplification}{%
@@ -47,7 +51,7 @@
}{}
\ifboolKV[ClesEquation]{Fleches}{\stepcounter{Nbequa}}{\ifboolKV[ClesEquation]{FlecheDiv}{\stepcounter{Nbequa}}{}}
\end{align*}
- \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\num{#5}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\ifboolKV[ClesEquation]{LettreSol}{\useKV[ClesEquation]{Lettre}=}{}\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.
+ \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\num{#5}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\ifboolKV[ClesEquation]{LettreSol}{\useKV[ClesEquation]{Lettre}=}{}\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.
}{}
}
}
@@ -64,45 +68,50 @@
\EquaTroisComposition[#1]{#4}{#5}{#2}{}%
\fi
\else
- \xintifboolexpr{#2=0}{%b=cx
+ \xintifboolexpr{#2==0}{%b=cx
\EquaBase[#1]{#4}{}{}{#3}
}{%
- \xintifboolexpr{#4=0}{%ax+b=0
+ \xintifboolexpr{#4==0}{%ax+b=0
\EquaDeuxComposition[#1]{#2}{#3}{}{0}
}{%ax+b=cx
- \xintifboolexpr{#2=#4}{%
- \xintifboolexpr{#3=0}{%ax=ax
- L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}$ a une infinité de solutions.}%
+ \xintifboolexpr{#2==#4}{%
+ \xintifboolexpr{#3==0}{%ax=ax
+ L'équation $\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}$ a une infinité de solutions.}%
{%ax+b=ax
- L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}$ n'a aucune solution.%
+ L'équation $\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}$ n'a aucune solution.%
}%
}{%% Cas délicat
\xintifboolexpr{#2>#4}{%ax+b=cx avec a>c
\ifboolKV[ClesEquation]{Decomposition}{\colorlet{Ccompo}{\useKV[ClesEquation]{CouleurCompo}}}{}
\begin{align*}
- \tikzmark{A-\theNbequa}\mathcolor{Ccompo}{\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\tikzmark{E-\theNbequa}\\
- \mathcolor{Ccompo}{\num{\fpeval{#2-#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#4>0}{+\num{#4}\useKV[ClesEquation]{Lettre}}{-\num{\fpeval{0-#4}}\useKV[ClesEquation]{Lettre}}}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\\
- \tikzmark{B-\theNbequa}\xdef\Coeffa{\fpeval{#2-#4}}\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\mathcolor{Ccompo}{0}\tikzmark{F-\theNbequa}\\
- \xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\mathcolor{Ccompo}{\num{\fpeval{0-#3}}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}}\tikzmark{F-\theNbequa}\\
- \tikzmark{C-\theNbequa}\xdef\Coeffb{\fpeval{0-#3}}\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}&=\num{\Coeffb}\tikzmark{G-\theNbequa}%\\
- \xintifboolexpr{\Coeffa=1}{}{\\}
+ \tikzmark{A-\theNbequa}\mathcolor{Ccompo}{\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}}\xintifboolexpr{#3==0}{}{\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}}&=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\tikzmark{E-\theNbequa}\\
+ \mathcolor{Ccompo}{\num{\fpeval{#2-#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#4>0}{+\num{#4}\useKV[ClesEquation]{Lettre}}{-\num{\fpeval{0-#4}}\useKV[ClesEquation]{Lettre}}}\xintifboolexpr{#3==0}{}{\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}}&=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\\
+ \tikzmark{B-\theNbequa}\xdef\Coeffa{\fpeval{#2-#4}}\xintifboolexpr{\Coeffa==1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3==0}{}{\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}}&=0\tikzmark{F-\theNbequa}%\mathcolor{Ccompo}{0}\tikzmark{F-\theNbequa}%\\
+ \xintifboolexpr{#3==0}{}{\\
+ \xintifboolexpr{\Coeffa==1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\mathcolor{Ccompo}{\num{\fpeval{0-#3}}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}}\tikzmark{F-\theNbequa}\\
+ \tikzmark{C-\theNbequa}\xdef\Coeffb{\fpeval{0-#3}}\xintifboolexpr{\Coeffa==1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}&=\num{\Coeffb}\tikzmark{G-\theNbequa}%\\
+ \xintifboolexpr{\Coeffa==1}{}{\\}
\ifboolKV[ClesEquation]{Fleches}{%
\leftcomment{A-\theNbequa}{B-\theNbequa}{A-\theNbequa}{$\xintifboolexpr{#4>0}{-\num{#4}}{+\num{\fpeval{0-#4}}}\useKV[ClesEquation]{Lettre}$}
\rightcomment{E-\theNbequa}{F-\theNbequa}{E-\theNbequa}{$\xintifboolexpr{#4>0}{-\num{#4}}{+\num{\fpeval{0-#4}}}\useKV[ClesEquation]{Lettre}$}
\leftcomment{B-\theNbequa}{C-\theNbequa}{A-\theNbequa}{$\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}$}%
\rightcomment{F-\theNbequa}{G-\theNbequa}{E-\theNbequa}{$\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}$}%
}{}
- \xintifboolexpr{\Coeffa=1}{}{%\ifnum\cmtd>1
+ \xintifboolexpr{\Coeffa==1}{}{%\ifnum\cmtd>1
\tikzmark{D-\theNbequa}\useKV[ClesEquation]{Lettre}&=\frac{\num{\Coeffb}}{\num{\Coeffa}}\tikzmark{H-\theNbequa}%\\
\ifboolKV[ClesEquation]{Fleches}{%
\leftcomment{C-\theNbequa}{D-\theNbequa}{A-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
- \rightcomment{G-\theNbequa}{H-\theNbequa}{E-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ \rightcomment{G-\theNbequa}{H-\theNbequa}{E-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
}{
\ifboolKV[ClesEquation]{FlecheDiv}{%
\leftcomment{C-\theNbequa}{D-\theNbequa}{A-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
- \rightcomment{G-\theNbequa}{H-\theNbequa}{E-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ \rightcomment{G-\theNbequa}{H-\theNbequa}{E-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
}{}
}
+ \ifboolKV[ClesEquation]{Decimal}{%
+ \\\useKV[ClesEquation]{Lettre}&=\num{\fpeval{\Coeffb/\Coeffa}}%
+ }{}%
+ %%%
\ifboolKV[ClesEquation]{Entier}{%
\SSimpliTest{\Coeffb}{\Coeffa}%
\ifboolKV[ClesEquation]{Simplification}{%
@@ -111,30 +120,35 @@
}{}
}
\ifboolKV[ClesEquation]{Fleches}{\stepcounter{Nbequa}}{\ifboolKV[ClesEquation]{FlecheDiv}{\stepcounter{Nbequa}}{}}
+ }
\end{align*}
- \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\ifboolKV[ClesEquation]{LettreSol}{\useKV[ClesEquation]{Lettre}=}{}\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.}{}
- }{%ax+b=cx+d avec a<c % Autre cas délicat
+ \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\ifboolKV[ClesEquation]{LettreSol}{\useKV[ClesEquation]{Lettre}=}{}\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.}{}
+ }{%ax+b=cx avec a<c % Autre cas délicat
\ifboolKV[ClesEquation]{Decomposition}{\colorlet{Ccompo}{\useKV[ClesEquation]{CouleurCompo}}}{}
\begin{align*}%
- \tikzmark{A-\theNbequa}\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\mathcolor{Ccompo}{\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}}\tikzmark{E-\theNbequa}\\
- \xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\mathcolor{Ccompo}{\num{\fpeval{#4-#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#2>0}{+\num{#2}\useKV[ClesEquation]{Lettre}}{-\num{\fpeval{0-#2}}\useKV[ClesEquation]{Lettre}}}\\
- \tikzmark{B-\theNbequa}\xdef\Coeffb{#3}\xdef\Coeffa{\fpeval{#4-#2}}\xintifboolexpr{#3>0}{\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\tikzmark{F-\theNbequa}
- \xintifboolexpr{\Coeffa=1}{}{\\}
+ \tikzmark{A-\theNbequa}\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\mathcolor{Ccompo}{\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}}\tikzmark{E-\theNbequa}\\
+ \xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\mathcolor{Ccompo}{\num{\fpeval{#4-#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#2>0}{+\num{#2}\useKV[ClesEquation]{Lettre}}{-\num{\fpeval{0-#2}}\useKV[ClesEquation]{Lettre}}}\\
+ \tikzmark{B-\theNbequa}\xdef\Coeffb{#3}\xdef\Coeffa{\fpeval{#4-#2}}\xintifboolexpr{#3>0}{\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{\Coeffa==1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\tikzmark{F-\theNbequa}
+ \xintifboolexpr{\Coeffa==1}{}{\\}
\ifboolKV[ClesEquation]{Fleches}{%
\leftcomment{A-\theNbequa}{B-\theNbequa}{A-\theNbequa}{$\xintifboolexpr{#2>0}{-\num{#2}}{+\num{\fpeval{0-#2}}}\useKV[ClesEquation]{Lettre}$}
\rightcomment{E-\theNbequa}{F-\theNbequa}{E-\theNbequa}{$\xintifboolexpr{#2>0}{-\num{#2}}{+\num{\fpeval{0-#2}}}\useKV[ClesEquation]{Lettre}$}
}{}
- \xintifboolexpr{\Coeffa=1}{}{%\ifnum\cmtd>1
+ \xintifboolexpr{\Coeffa==1}{}{%\ifnum\cmtd>1
\tikzmark{D-\theNbequa}\frac{\num{\Coeffb}}{\num{\Coeffa}}&=\useKV[ClesEquation]{Lettre}\tikzmark{H-\theNbequa}%\\
\ifboolKV[ClesEquation]{Fleches}{%
\leftcomment{B-\theNbequa}{D-\theNbequa}{A-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
- \rightcomment{F-\theNbequa}{H-\theNbequa}{E-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ \rightcomment{F-\theNbequa}{H-\theNbequa}{E-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
}{
\ifboolKV[ClesEquation]{FlecheDiv}{%
\leftcomment{B-\theNbequa}{D-\theNbequa}{A-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
- \rightcomment{F-\theNbequa}{H-\theNbequa}{E-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ \rightcomment{F-\theNbequa}{H-\theNbequa}{E-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
}{}
}
+ \ifboolKV[ClesEquation]{Decimal}{%
+ \\\num{\fpeval{\Coeffb/\Coeffa}}&=\useKV[ClesEquation]{Lettre}%
+ }{}%
+ %%%
\ifboolKV[ClesEquation]{Entier}{%
\SSimpliTest{\Coeffb}{\Coeffa}%
\ifboolKV[ClesEquation]{Simplification}{%
@@ -144,7 +158,7 @@
}
\ifboolKV[ClesEquation]{Fleches}{\stepcounter{Nbequa}}{\ifboolKV[ClesEquation]{FlecheDiv}{\stepcounter{Nbequa}}{}}
\end{align*}
- \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\ifboolKV[ClesEquation]{LettreSol}{\useKV[ClesEquation]{Lettre}=}{}\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.}{}%
+ \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\ifboolKV[ClesEquation]{LettreSol}{\useKV[ClesEquation]{Lettre}=}{}\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.}{}%
}%
}%
}%
@@ -152,13 +166,12 @@
\fi
}%
-
\newcommand{\ResolEquationComposition}[5][]{%
\useKVdefault[ClesEquation]%
\setKV[ClesEquation]{#1}%
- \xintifboolexpr{#2=0}{%
- \xintifboolexpr{#4=0}{%
- \xintifboolexpr{#3=#5}{%b=d
+ \xintifboolexpr{#2==0}{%
+ \xintifboolexpr{#4==0}{%
+ \xintifboolexpr{#3==#5}{%b=d
L'équation $\num{#3}=\num{#5}$ a une infinité de solutions.}%
{%b<>d
L'équation $\num{#3}=\num{#5}$ n'a aucune solution.%
@@ -168,56 +181,61 @@
\EquaDeuxComposition[#1]{#4}{#5}{#2}{#3}%
}%
}{%
- \xintifboolexpr{#4=0}{%ax+b=0x+d
+ \xintifboolexpr{#4==0}{%ax+b=0x+d
\EquaDeuxComposition[#1]{#2}{#3}{}{#5}%
}
{%ax+b=cx+d$
- \xintifboolexpr{#3=0}{%
- \xintifboolexpr{#5=0}{%ax=cx
+ \xintifboolexpr{#3==0}{%
+ \xintifboolexpr{#5==0}{%ax=cx
\EquaTroisComposition[#1]{#2}{0}{#4}{}%
}%
{%ax=cx+d
\EquaTroisComposition[#1]{#4}{#5}{#2}{}%
}%
}%
- {\xintifboolexpr{#5=0}{%ax+b=cx
+ {\xintifboolexpr{#5==0}{%ax+b=cx
\EquaTroisComposition[#1]{#2}{#3}{#4}{}%
}%
{%ax+b=cx+d -- ici
- \xintifboolexpr{#2=#4}{%
- \xintifboolexpr{#3=#5}{%b=d
- L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}$ a une infinité de solutions.}%
+ \xintifboolexpr{#2==#4}{%
+ \xintifboolexpr{#3==#5}{%b=d
+ L'équation $\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}$ a une infinité de solutions.}%
{%b<>d
- L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}$ n'a aucune solution.%
+ L'équation $\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}$ n'a aucune solution.%
}%
}{
%% Cas délicat
\xintifboolexpr{#2>#4}{%ax+b=cx+d avec a>c
\ifboolKV[ClesEquation]{Decomposition}{\colorlet{Ccompo}{\useKV[ClesEquation]{CouleurCompo}}}{}
\begin{align*}
- \tikzmark{A-\theNbequa}\mathcolor{Ccompo}{\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}\tikzmark{E-\theNbequa}\\
- \mathcolor{Ccompo}{\num{\fpeval{#2-#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#4>0}{+\num{#4}\useKV[ClesEquation]{Lettre}}{-\num{\fpeval{0-#4}}\useKV[ClesEquation]{Lettre}}}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}\\
- \tikzmark{B-\theNbequa}\xdef\Coeffa{\fpeval{#2-#4}}\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\mathcolor{Ccompo}{\num{#5}}\tikzmark{F-\theNbequa}\\
- \xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\mathcolor{Ccompo}{\num{\fpeval{#5-#3}}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}}\\
- \tikzmark{C-\theNbequa}\xdef\Coeffb{\fpeval{#5-#3}}\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}&=\num{\Coeffb}\tikzmark{G-\theNbequa}%\\
- \xintifboolexpr{\Coeffa=1}{}{\\}
+ \tikzmark{A-\theNbequa}\mathcolor{Ccompo}{\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}\tikzmark{E-\theNbequa}\\
+ \mathcolor{Ccompo}{\num{\fpeval{#2-#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#4>0}{+\num{#4}\useKV[ClesEquation]{Lettre}}{-\num{\fpeval{0-#4}}\useKV[ClesEquation]{Lettre}}}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}\\
+ \tikzmark{B-\theNbequa}\xdef\Coeffa{\fpeval{#2-#4}}\xintifboolexpr{\Coeffa==1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\mathcolor{Ccompo}{\num{#5}}\tikzmark{F-\theNbequa}\\
+ \xintifboolexpr{\Coeffa==1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\mathcolor{Ccompo}{\num{\fpeval{#5-#3}}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}}\\
+ \tikzmark{C-\theNbequa}\xdef\Coeffb{\fpeval{#5-#3}}\xintifboolexpr{\Coeffa==1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}&=\num{\Coeffb}\tikzmark{G-\theNbequa}%\\
+ \xintifboolexpr{\Coeffa==1}{}{\\}
\ifboolKV[ClesEquation]{Fleches}{%
\leftcomment{A-\theNbequa}{B-\theNbequa}{A-\theNbequa}{$\xintifboolexpr{#4>0}{-\num{#4}}{+\num{\fpeval{0-#4}}}\useKV[ClesEquation]{Lettre}$}
\rightcomment{E-\theNbequa}{F-\theNbequa}{E-\theNbequa}{$\xintifboolexpr{#4>0}{-\num{#4}}{+\num{\fpeval{0-#4}}}\useKV[ClesEquation]{Lettre}$}
\leftcomment{B-\theNbequa}{C-\theNbequa}{A-\theNbequa}{$\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}$}%
\rightcomment{F-\theNbequa}{G-\theNbequa}{E-\theNbequa}{$\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}$}%
}{}
- \xintifboolexpr{\Coeffa=1}{}{%\ifnum\cmtd>1
+ \xintifboolexpr{\Coeffa==1}{}{%\ifnum\cmtd>1
\tikzmark{D-\theNbequa}\useKV[ClesEquation]{Lettre}&=\frac{\num{\Coeffb}}{\num{\Coeffa}}\tikzmark{H-\theNbequa}%\\
\ifboolKV[ClesEquation]{Fleches}{%
\leftcomment{C-\theNbequa}{D-\theNbequa}{A-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
- \rightcomment{G-\theNbequa}{H-\theNbequa}{E-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ \rightcomment{G-\theNbequa}{H-\theNbequa}{E-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
}{
\ifboolKV[ClesEquation]{FlecheDiv}{%
\leftcomment{C-\theNbequa}{D-\theNbequa}{A-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
- \rightcomment{G-\theNbequa}{H-\theNbequa}{E-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ \rightcomment{G-\theNbequa}{H-\theNbequa}{E-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
}{}
}
+ %% decimal
+ \ifboolKV[ClesEquation]{Decimal}{%
+ \\\useKV[ClesEquation]{Lettre}&=\num{\fpeval{\Coeffb/\Coeffa}}%
+ }{}%
+ %%%
\ifboolKV[ClesEquation]{Entier}{%
\SSimpliTest{\Coeffb}{\Coeffa}%
\ifboolKV[ClesEquation]{Simplification}{%
@@ -227,34 +245,39 @@
}
\ifboolKV[ClesEquation]{Fleches}{\stepcounter{Nbequa}}{\ifboolKV[ClesEquation]{FlecheDiv}{\stepcounter{Nbequa}}{}}
\end{align*}
- \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\ifboolKV[ClesEquation]{LettreSol}{\useKV[ClesEquation]{Lettre}=}{}\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.%
+ \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\ifboolKV[ClesEquation]{LettreSol}{\useKV[ClesEquation]{Lettre}=}{}\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.%
}{}
}{%ax+b=cx+d avec a<c % Autre cas délicat
\ifboolKV[ClesEquation]{Decomposition}{\colorlet{Ccompo}{\useKV[ClesEquation]{CouleurCompo}}}{}%
\begin{align*}%
- \tikzmark{A-\theNbequa}\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\mathcolor{Ccompo}{\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}\tikzmark{E-\theNbequa}\\
- \xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\mathcolor{Ccompo}{\num{\fpeval{#4-#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#2>0}{+\num{#2}\useKV[ClesEquation]{Lettre}}{-\num{\fpeval{0-#2}}\useKV[ClesEquation]{Lettre}}}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}\\
- \tikzmark{B-\theNbequa}\xdef\Coeffa{\fpeval{#4-#2}}\xintifboolexpr{#3>0}{\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}\tikzmark{F-\theNbequa}\\
- \mathcolor{Ccompo}{\num{\fpeval{#3-#5}}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}}&=\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}\\
- \tikzmark{C-\theNbequa}\xdef\Coeffb{\fpeval{#3-#5}}\num{\Coeffb}&=\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\tikzmark{G-\theNbequa}%\\
- \xintifboolexpr{\Coeffa=1}{}{\\}
+ \tikzmark{A-\theNbequa}\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\mathcolor{Ccompo}{\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}\tikzmark{E-\theNbequa}\\
+ \xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\mathcolor{Ccompo}{\num{\fpeval{#4-#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#2>0}{+\num{#2}\useKV[ClesEquation]{Lettre}}{-\num{\fpeval{0-#2}}\useKV[ClesEquation]{Lettre}}}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}\\
+ \tikzmark{B-\theNbequa}\xdef\Coeffa{\fpeval{#4-#2}}\mathcolor{Ccompo}{\xintifboolexpr{#3>0}{\num{#3}}{-\num{\fpeval{0-#3}}}}&=\xintifboolexpr{\Coeffa==1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}\tikzmark{F-\theNbequa}\\
+ \mathcolor{Ccompo}{\num{\fpeval{#3-#5}}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}}&=\xintifboolexpr{\Coeffa==1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}\\
+ \tikzmark{C-\theNbequa}\xdef\Coeffb{\fpeval{#3-#5}}\num{\Coeffb}&=\xintifboolexpr{\Coeffa==1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\tikzmark{G-\theNbequa}%\\
+ \xintifboolexpr{\Coeffa==1}{}{\\}
\ifboolKV[ClesEquation]{Fleches}{%
\leftcomment{A-\theNbequa}{B-\theNbequa}{A-\theNbequa}{$\xintifboolexpr{#2>0}{-\num{#2}}{+\num{\fpeval{0-#2}}}\useKV[ClesEquation]{Lettre}$}
\rightcomment{E-\theNbequa}{F-\theNbequa}{E-\theNbequa}{$\xintifboolexpr{#2>0}{-\num{#2}}{+\num{\fpeval{0-#2}}}\useKV[ClesEquation]{Lettre}$}
\leftcomment{B-\theNbequa}{C-\theNbequa}{A-\theNbequa}{$\xintifboolexpr{#5>0}{-\num{#5}}{+\num{\fpeval{0-#5}}}$}%
\rightcomment{F-\theNbequa}{G-\theNbequa}{E-\theNbequa}{$\xintifboolexpr{#5>0}{-\num{#5}}{+\num{\fpeval{0-#5}}}$}%
}{}
- \xintifboolexpr{\Coeffa=1}{}{%\ifnum\cmtd>1
+ \xintifboolexpr{\Coeffa==1}{}{%\ifnum\cmtd>1
\tikzmark{D-\theNbequa}\frac{\num{\Coeffb}}{\num{\Coeffa}}&=\useKV[ClesEquation]{Lettre}\tikzmark{H-\theNbequa}%\\
\ifboolKV[ClesEquation]{Fleches}{%
\leftcomment{C-\theNbequa}{D-\theNbequa}{A-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
- \rightcomment{G-\theNbequa}{H-\theNbequa}{E-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ \rightcomment{G-\theNbequa}{H-\theNbequa}{E-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
}{
\ifboolKV[ClesEquation]{FlecheDiv}{%
\leftcomment{C-\theNbequa}{D-\theNbequa}{A-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
- \rightcomment{G-\theNbequa}{H-\theNbequa}{E-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ \rightcomment{G-\theNbequa}{H-\theNbequa}{E-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
}{}
}
+ %% decimal
+ \ifboolKV[ClesEquation]{Decimal}{%
+ \\\num{\fpeval{\Coeffb/\Coeffa}}&=\useKV[ClesEquation]{Lettre}%
+ }{}%
+ %%%
\ifboolKV[ClesEquation]{Entier}{%
\SSimpliTest{\Coeffb}{\Coeffa}%
\ifboolKV[ClesEquation]{Simplification}{%
@@ -264,7 +287,7 @@
}
\ifboolKV[ClesEquation]{Fleches}{\stepcounter{Nbequa}}{\ifboolKV[ClesEquation]{FlecheDiv}{\stepcounter{Nbequa}}{}}
\end{align*}
- \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\ifboolKV[ClesEquation]{LettreSol}{\useKV[ClesEquation]{Lettre}=}{}\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.%
+ \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\ifboolKV[ClesEquation]{LettreSol}{\useKV[ClesEquation]{Lettre}=}{}\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.%
}{}%
}%
}%
diff --git a/macros/latex/contrib/profcollege/latex/PfCEquationLaurent1.tex b/macros/latex/contrib/profcollege/latex/PfCEquationLaurent1.tex
index 8bce1eb7c8..a4be58b450 100644
--- a/macros/latex/contrib/profcollege/latex/PfCEquationLaurent1.tex
+++ b/macros/latex/contrib/profcollege/latex/PfCEquationLaurent1.tex
@@ -6,17 +6,22 @@
\ifx\bla#2\bla%on teste si le paramètre #2 est vide:
% si oui, on est dans le cas b=cx. Eh bien on échange :)
% Mais attention si les deux paramètres a et c sont vides...
- \EquaBase[#1]{#4}{}{}{#3}
+ \EquaBaseLaurent[#1]{#4}{}{}{#3}
\else
% si non, on est dans le cas ax=d
- \xintifboolexpr{#2=0}{%
- \xintifboolexpr{#5=0}{%
+ \xintifboolexpr{#2==0}{%
+ \xintifboolexpr{#5==0}{%
L'équation $0\useKV[ClesEquation]{ELettre}=0$ a une infinité de solutions.}{L'équation $0\useKV[ClesEquation]{Lettre}=\num{#5}$ n'a aucune solution.}%
}{%\else
- \xintifboolexpr{#5=0}{L'équation $\num{#2}\useKV[ClesEquation]{Lettre}=0$ a une unique solution : $\useKV[ClesEquation]{Lettre}=0$.}{%\else
+ \xintifboolexpr{#5==0}{L'équation $\num{#2}\useKV[ClesEquation]{Lettre}=0$ a une unique solution : $\useKV[ClesEquation]{Lettre}=0$.}{%\else
\begin{align*}%
- \xintifboolexpr{#2=1}{\useKV[ClesEquation]{Lettre}}{\color{Cdecomp}\frac{\cancel{\color{black}\num{#2}}\color{black}\useKV[ClesEquation]{Lettre}}{\cancel{\num{#2}}}}&=\xintifboolexpr{#2=1}{\num{#5}}{\color{Cdecomp}\frac{\color{black}\num{#5}}{\num{#2}}}
- \xintifboolexpr{#2=1}{}{\\\useKV[ClesEquation]{Lettre}&=\frac{\num{#5}}{\num{#2}}}%\\
+ \xintifboolexpr{#2==1}{\useKV[ClesEquation]{Lettre}}{\color{Cdecomp}\frac{\cancel{\color{black}\num{#2}}\color{black}\useKV[ClesEquation]{Lettre}}{\cancel{\num{#2}}}}&=\xintifboolexpr{#2==1}{\num{#5}}{\color{Cdecomp}\frac{\color{black}\num{#5}}{\num{#2}}}
+ \xintifboolexpr{#2==1}{}{\\\useKV[ClesEquation]{Lettre}&=\frac{\num{#5}}{\num{#2}}}%\\
+ %% decimal
+ \ifboolKV[ClesEquation]{Decimal}{%
+ \\\useKV[ClesEquation]{Lettre}&=\num{\fpeval{#5/#2}}%
+ }{}%
+% %%%
\ifboolKV[ClesEquation]{Entier}{%
\SSimpliTest{#5}{#2}%
\ifboolKV[ClesEquation]{Simplification}{%
@@ -24,7 +29,7 @@
}{}
}{}
\end{align*}
- \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2=1}{\useKV[ClesEquation]{Lettre}=\num{#5}}{\num{#2}\useKV[ClesEquation]{Lettre}=\num{#5}}$ a une unique solution : $\displaystyle\ifboolKV[ClesEquation]{LettreSol}{\useKV[ClesEquation]{Lettre}=}{}\opdiv*{#5}{#2}{numequa}{resteequa}\opcmp{resteequa}{0}\ifopeq\opexport{numequa}{\numequa}\num{\numequa}\else\ifboolKV[ClesEquation]{Simplification}{\SSimplifie{#5}{#2}}{\frac{\num{#5}}{\num{#2}}}\fi$.%
+ \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2==1}{\useKV[ClesEquation]{Lettre}=\num{#5}}{\num{#2}\useKV[ClesEquation]{Lettre}=\num{#5}}$ a une unique solution : $\displaystyle\ifboolKV[ClesEquation]{LettreSol}{\useKV[ClesEquation]{Lettre}=}{}\opdiv*{#5}{#2}{numequa}{resteequa}\opcmp{resteequa}{0}\ifopeq\opexport{numequa}{\numequa}\num{\numequa}\else\ifboolKV[ClesEquation]{Simplification}{\SSimplifie{#5}{#2}}{\frac{\num{#5}}{\num{#2}}}\fi$.%
}{}
}
}
@@ -37,24 +42,29 @@
\ifx\bla#2\bla%On échange en faisant attention à ne pas boucler : c doit être non vide
\EquaDeuxLaurent[#1]{#4}{#5}{#2}{#3}
\else%cas ax+b=d
- \xintifboolexpr{#2=0}{%
- \xintifboolexpr{#3=#5}{%b=d
+ \xintifboolexpr{#2==0}{%
+ \xintifboolexpr{#3==#5}{%b=d
L'équation $\num{#3}=\num{#5}$ a une infinité de solutions.}%
{%b<>d
L'équation $\num{#3}=\num{#5}$ n'a aucune solution.%
}%
}{%ELSE
- \xintifboolexpr{#3=0}{%ax+b=d
+ \xintifboolexpr{#3==0}{%ax+b=d
\EquaBaseLaurent[#1]{#2}{}{}{#5}%
}{%ax+b=d$ Ici
\begin{align*}
- \xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}\stackMath\Longstack{$\tiny$\color{Cdecomp}-\num{#3} {}}\stackText}{-\num{\fpeval{0-#3}}\stackMath\Longstack{$\tiny$\color{Cdecomp}+\num{\fpeval{0-#3}}}\stackText}&=\num{#5}\xintifboolexpr{#3>0}{\stackMath\Longstack{$\tiny$\color{Cdecomp}-\num{#3} {}}\stackText}{\stackMath\Longstack{$\tiny$\color{Cdecomp}+\num{\fpeval{0-#3}}}\stackText}\\
+ \xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}\stackMath\Longstack{$\tiny$\color{Cdecomp}-\num{#3} {}}\stackText}{-\num{\fpeval{0-#3}}\stackMath\Longstack{$\tiny$\color{Cdecomp}+\num{\fpeval{0-#3}}}\stackText}&=\num{#5}\xintifboolexpr{#3>0}{\stackMath\Longstack{$\tiny$\color{Cdecomp}-\num{#3} {}}\stackText}{\stackMath\Longstack{$\tiny$\color{Cdecomp}+\num{\fpeval{0-#3}}}\stackText}\\
\xdef\Coeffa{#2}\xdef\Coeffb{\fpeval{#5-#3}}%\\
- \xintifboolexpr{\Coeffa=1}{\useKV[ClesEquation]{Lettre}}{\color{Cdecomp}\frac{\cancel{\color{black}\num{\Coeffa}}\color{black}\useKV[ClesEquation]{Lettre}}{\cancel{\num{\Coeffa}}}}&=\xintifboolexpr{\Coeffa=1}{\num{\Coeffb}}{\color{Cdecomp}\frac{\color{black}\num{\Coeffb}}{\num{\Coeffa}}}%\\
- \xintifboolexpr{\Coeffa=1}{}{\\}
- \xintifboolexpr{\Coeffa=1}{%
+ \xintifboolexpr{\Coeffa==1}{\useKV[ClesEquation]{Lettre}}{\color{Cdecomp}\frac{\cancel{\color{black}\num{\Coeffa}}\color{black}\useKV[ClesEquation]{Lettre}}{\cancel{\num{\Coeffa}}}}&=\xintifboolexpr{\Coeffa==1}{\num{\Coeffb}}{\color{Cdecomp}\frac{\color{black}\num{\Coeffb}}{\num{\Coeffa}}}%\\
+ \xintifboolexpr{\Coeffa==1}{}{\\}
+ \xintifboolexpr{\Coeffa==1}{%
}{%\ifnum\cmtd>1
\useKV[ClesEquation]{Lettre}&=\frac{\num{\Coeffb}}{\num{\Coeffa}}%\\
+ %% decimal
+ \ifboolKV[ClesEquation]{Decimal}{%
+ \\\useKV[ClesEquation]{Lettre}&=\num{\fpeval{\Coeffb/\Coeffa}}%
+ }{}%
+ %%%
\ifboolKV[ClesEquation]{Entier}{%
\SSimpliTest{\Coeffb}{\Coeffa}%
\ifboolKV[ClesEquation]{Simplification}{%
@@ -63,7 +73,7 @@
}{}
}
\end{align*}
- \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\num{#5}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\ifboolKV[ClesEquation]{LettreSol}{\useKV[ClesEquation]{Lettre}=}\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.
+ \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\num{#5}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\ifboolKV[ClesEquation]{LettreSol}{\useKV[ClesEquation]{Lettre}=}\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.
}{}
}
}
@@ -79,29 +89,34 @@
\EquaTroisLaurent[#1]{#4}{#5}{#2}{}%
\fi
\else
- \xintifboolexpr{#2=0}{%b=cx
+ \xintifboolexpr{#2==0}{%b=cx
\EquaBaseLaurent[#1]{#4}{}{}{#3}
}{%
- \xintifboolexpr{#4=0}{%ax+b=0
+ \xintifboolexpr{#4==0}{%ax+b=0
\EquaDeuxLaurent[#1]{#2}{#3}{}{0}
}{%ax+b=cx
- \xintifboolexpr{#2=#4}{%
- \xintifboolexpr{#3=0}{%ax=ax
- L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}$ a une infinité de solutions.}%
+ \xintifboolexpr{#2==#4}{%
+ \xintifboolexpr{#3==0}{%ax=ax
+ L'équation $\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}$ a une infinité de solutions.}%
{%ax+b=ax
- L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}$ n'a aucune solution.%
+ L'équation $\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}$ n'a aucune solution.%
}%
}{%% Cas délicat
\xintifboolexpr{#2>#4}{%ax+b=cx avec a>c
\begin{align*}
- \xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}\stackMath\Longstack{$\tiny$\color{Cdecomp}-\num{#3} {}}\stackText}{-\num{\fpeval{0-#3}}\stackMath\Longstack{$\tiny$\color{Cdecomp}+\num{\fpeval{0-#3}}}\stackText}&=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{\stackMath\Longstack{$\tiny$\color{Cdecomp}-\num{#3} {}}\stackText}{\stackMath\Longstack{$\tiny$\color{Cdecomp}+\num{\fpeval{0-#3}}}\stackText}\\
- \xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#4>0}{\stackMath\Longstack{$\tiny$\color{Cdecomp}-\num{#4}\useKV[ClesEquation]{Lettre} {}}\stackText}{\stackMath\Longstack{$\tiny$\color{Cdecomp}+\num{\fpeval{0-#4}}\useKV[ClesEquation]{Lettre} {}}\stackText}&=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#4>0}{\stackMath\Longstack{$\tiny$\color{Cdecomp}-\num{#4}\useKV[ClesEquation]{Lettre} {}}\stackText}{\stackMath\Longstack{$\tiny$\color{Cdecomp}+\num{\fpeval{0-#4}}\useKV[ClesEquation]{Lettre} {}}\stackText}\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}\\
+ \xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3==0}{}{\xintifboolexpr{#3>0}{+\num{#3}\stackMath\Longstack{$\tiny$\color{Cdecomp}-\num{#3} {}}\stackText}{-\num{\fpeval{0-#3}}\stackMath\Longstack{$\tiny$\color{Cdecomp}+\num{\fpeval{0-#3}}}\stackText}}&=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3==0}{}{\xintifboolexpr{#3>0}{\stackMath\Longstack{$\tiny$\color{Cdecomp}-\num{#3} {}}\stackText}{\stackMath\Longstack{$\tiny$\color{Cdecomp}+\num{\fpeval{0-#3}}}\stackText}}\\
+ \xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#4>0}{\stackMath\Longstack{$\tiny$\color{Cdecomp}-\num{#4}\useKV[ClesEquation]{Lettre} {}}\stackText}{\stackMath\Longstack{$\tiny$\color{Cdecomp}+\num{\fpeval{0-#4}}\useKV[ClesEquation]{Lettre} {}}\stackText}&=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#4>0}{\stackMath\Longstack{$\tiny$\color{Cdecomp}-\num{#4}\useKV[ClesEquation]{Lettre} {}}\stackText}{\stackMath\Longstack{$\tiny$\color{Cdecomp}+\num{\fpeval{0-#4}}\useKV[ClesEquation]{Lettre} {}}\stackText}\xintifboolexpr{#3==0}{}{\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}}\\
\xdef\Coeffa{\fpeval{#2-#4}}\xdef\Coeffb{\fpeval{0-#3}}%\\
- \xintifboolexpr{\Coeffa=1}{\useKV[ClesEquation]{Lettre}}{\color{Cdecomp}\frac{\cancel{\color{black}\num{\Coeffa}}\color{black}\useKV[ClesEquation]{Lettre}}{\cancel{\num{\Coeffa}}}}&=\xintifboolexpr{\Coeffa=1}{\num{\Coeffb}}{\color{Cdecomp}\frac{\color{black}\num{\Coeffb}}{\num{\Coeffa}}}%\\
- \xintifboolexpr{\Coeffa=1}{}{\\}
- \xintifboolexpr{\Coeffa=1}{%
+ \xintifboolexpr{\Coeffa==1}{\useKV[ClesEquation]{Lettre}}{\color{Cdecomp}\frac{\cancel{\color{black}\num{\Coeffa}}\color{black}\useKV[ClesEquation]{Lettre}}{\cancel{\num{\Coeffa}}}}&=\xintifboolexpr{\Coeffa==1}{\num{\Coeffb}}{\color{Cdecomp}\frac{\color{black}\num{\Coeffb}}{\num{\Coeffa}}}%\\
+ \xintifboolexpr{\Coeffa==1}{}{\\}
+ \xintifboolexpr{\Coeffa==1}{%
}{%\ifnum\cmtd>1
\useKV[ClesEquation]{Lettre}&=\frac{\num{\Coeffb}}{\num{\Coeffa}}%\\
+ %% decimal
+ \ifboolKV[ClesEquation]{Decimal}{%
+ \\\useKV[ClesEquation]{Lettre}&=\num{\fpeval{\Coeffb/\Coeffa}}%
+ }{}%
+ %%%
\ifboolKV[ClesEquation]{Entier}{%
\SSimpliTest{\Coeffb}{\Coeffa}%
\ifboolKV[ClesEquation]{Simplification}{%
@@ -110,17 +125,22 @@
}{}
}
\end{align*}
- \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\ifboolKV[ClesEquation]{LettreSol}{\useKV[ClesEquation]{Lettre}=}{}\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.}{}
+ \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\ifboolKV[ClesEquation]{LettreSol}{\useKV[ClesEquation]{Lettre}=}{}\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.}{}
}{%ax+b=cx avec a<c % Autre cas délicat
\begin{align*}%
- \xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#4>0}{\stackMath\Longstack{$\tiny$\color{Cdecomp}-\num{#4}\useKV[ClesEquation]{Lettre} {}}\stackText}{\stackMath\Longstack{$\tiny$\color{Cdecomp}+\num{\fpeval{0-#4}}\useKV[ClesEquation]{Lettre} {}}\stackText}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#4>0}{\stackMath\Longstack{$\tiny$\color{Cdecomp}-\num{#4}\useKV[ClesEquation]{Lettre} {}}\stackText}{\stackMath\Longstack{$\tiny$\color{Cdecomp}+\num{\fpeval{0-#4}}\useKV[ClesEquation]{Lettre} {}}\stackText}\\
+ \xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#4>0}{\stackMath\Longstack{$\tiny$\color{Cdecomp}-\num{#4}\useKV[ClesEquation]{Lettre} {}}\stackText}{\stackMath\Longstack{$\tiny$\color{Cdecomp}+\num{\fpeval{0-#4}}\useKV[ClesEquation]{Lettre} {}}\stackText}\xintifboolexpr{#3==0}{}{\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}}&=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#4>0}{\stackMath\Longstack{$\tiny$\color{Cdecomp}-\num{#4}\useKV[ClesEquation]{Lettre} {}}\stackText}{\stackMath\Longstack{$\tiny$\color{Cdecomp}+\num{\fpeval{0-#4}}\useKV[ClesEquation]{Lettre} {}}\stackText}\\
\xdef\Coeffa{\fpeval{#2-#4}}\xdef\Coeffb{\fpeval{0-#3}}%\\
- \xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}\stackMath\Longstack{$\tiny$\color{Cdecomp}-\num{#3} {}}\stackText}{-\num{\fpeval{0-#3}}\stackMath\Longstack{$\tiny$\color{Cdecomp}+\num{\fpeval{0-#3}}}\stackText}&=0\xintifboolexpr{#3>0}{\stackMath\Longstack{$\tiny$\color{Cdecomp}-\num{#3} {}}\stackText}{\stackMath\Longstack{$\tiny$\color{Cdecomp}+\num{\fpeval{0-#3}}}\stackText}\\
- \xintifboolexpr{\Coeffa=1}{\useKV[ClesEquation]{Lettre}}{\color{Cdecomp}\frac{\cancel{\color{black}\num{\Coeffa}}\color{black}\useKV[ClesEquation]{Lettre}}{\cancel{\num{\Coeffa}}}}&=\xintifboolexpr{\Coeffa=1}{\num{\Coeffb}}{\color{Cdecomp}\frac{\color{black}\num{\Coeffb}}{\num{\Coeffa}}}%\\
- \xintifboolexpr{\Coeffa=1}{}{\\}
- \xintifboolexpr{\Coeffa=1}{%
+ \xintifboolexpr{\Coeffa==1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3==0}{}{\xintifboolexpr{#3>0}{+\num{#3}\stackMath\Longstack{$\tiny$\color{Cdecomp}-\num{#3} {}}\stackText}{-\num{\fpeval{0-#3}}\stackMath\Longstack{$\tiny$\color{Cdecomp}+\num{\fpeval{0-#3}}}\stackText}}&=0\xintifboolexpr{#3==0}{}{\xintifboolexpr{#3>0}{\stackMath\Longstack{$\tiny$\color{Cdecomp}-\num{#3} {}}\stackText}{\stackMath\Longstack{$\tiny$\color{Cdecomp}+\num{\fpeval{0-#3}}}\stackText}}\\
+ \xintifboolexpr{\Coeffa==1}{\useKV[ClesEquation]{Lettre}}{\color{Cdecomp}\frac{\cancel{\color{black}\num{\Coeffa}}\color{black}\useKV[ClesEquation]{Lettre}}{\cancel{\num{\Coeffa}}}}&=\xintifboolexpr{\Coeffa==1}{\num{\Coeffb}}{\color{Cdecomp}\frac{\color{black}\num{\Coeffb}}{\num{\Coeffa}}}%\\
+ \xintifboolexpr{\Coeffa==1}{}{\\}
+ \xintifboolexpr{\Coeffa==1}{%
}{%\ifnum\cmtd>1
\useKV[ClesEquation]{Lettre}&=\frac{\num{\Coeffb}}{\num{\Coeffa}}%\\
+ %% decimal
+ \ifboolKV[ClesEquation]{Decimal}{%
+ \\\useKV[ClesEquation]{Lettre}&=\num{\fpeval{\Coeffb/\Coeffa}}%
+ }{}%
+ %%%
\ifboolKV[ClesEquation]{Entier}{%
\SSimpliTest{\Coeffb}{\Coeffa}%
\ifboolKV[ClesEquation]{Simplification}{%
@@ -129,7 +149,7 @@
}{}
}
\end{align*}
- \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\ifboolKV[ClesEquation]{LettreSol}{\useKV[ClesEquation]{Lettre}=}{}\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.}{}%
+ \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\ifboolKV[ClesEquation]{LettreSol}{\useKV[ClesEquation]{Lettre}=}{}\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.}{}%
}%
}%
}%
@@ -140,9 +160,9 @@
\newcommand{\ResolEquationLaurent}[5][]{%
\useKVdefault[ClesEquation]%
\setKV[ClesEquation]{#1}%
- \xintifboolexpr{#2=0}{%
- \xintifboolexpr{#4=0}{%
- \xintifboolexpr{#3=#5}{%b=d
+ \xintifboolexpr{#2==0}{%
+ \xintifboolexpr{#4==0}{%
+ \xintifboolexpr{#3==#5}{%b=d
L'équation $\num{#3}=\num{#5}$ a une infinité de solutions.}%
{%b<>d
L'équation $\num{#3}=\num{#5}$ n'a aucune solution.%
@@ -152,39 +172,44 @@
\EquaDeuxLaurent[#1]{#4}{#5}{}{#3}%
}%
}{%
- \xintifboolexpr{#4=0}{%ax+b=0x+d
+ \xintifboolexpr{#4==0}{%ax+b=0x+d
\EquaDeuxLaurent[#1]{#2}{#3}{}{#5}%
}
{%ax+b=cx+d
- \xintifboolexpr{#3=0}{%
- \xintifboolexpr{#5=0}{%ax=cx
+ \xintifboolexpr{#3==0}{%
+ \xintifboolexpr{#5==0}{%ax=cx
\EquaTroisLaurent[#1]{#2}{0}{#4}{}%
}%
{%ax=cx+d
\EquaTroisLaurent[#1]{#4}{#5}{#2}{}%
}%
}%
- {\xintifboolexpr{#5=0}{%ax+b=cx
+ {\xintifboolexpr{#5==0}{%ax+b=cx
\EquaTroisLaurent[#1]{#2}{#3}{#4}{}%
}%
{%ax+b=cx+d -- ici
- \xintifboolexpr{#2=#4}{%
- \xintifboolexpr{#3=#5}{%b=d
- L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}$ a une infinité de solutions.}%
+ \xintifboolexpr{#2==#4}{%
+ \xintifboolexpr{#3==#5}{%b=d
+ L'équation $\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}$ a une infinité de solutions.}%
{%b<>d
- L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}$ n'a aucune solution.%
+ L'équation $\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}$ n'a aucune solution.%
}%
}{%% Cas délicat
\xintifboolexpr{#2>#4}{%ax+b=cx+d avec a>c
\begin{align*}
- \xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}\stackMath\Longstack{$\tiny$\color{Cdecomp}-\num{#3} {}}\stackText}{-\num{\fpeval{0-#3}}\stackMath\Longstack{$\tiny$\color{Cdecomp}+\num{\fpeval{0-#3}}}\stackText}&=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}\xintifboolexpr{#3>0}{\stackMath\Longstack{$\tiny$\color{Cdecomp}-\num{#3} {}}\stackText}{\stackMath\Longstack{$\tiny$\color{Cdecomp}+\num{\fpeval{0-#3}}}\stackText}\\
+ \xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}\stackMath\Longstack{$\tiny$\color{Cdecomp}-\num{#3} {}}\stackText}{-\num{\fpeval{0-#3}}\stackMath\Longstack{$\tiny$\color{Cdecomp}+\num{\fpeval{0-#3}}}\stackText}&=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}\xintifboolexpr{#3>0}{\stackMath\Longstack{$\tiny$\color{Cdecomp}-\num{#3} {}}\stackText}{\stackMath\Longstack{$\tiny$\color{Cdecomp}+\num{\fpeval{0-#3}}}\stackText}\\
\xdef\Coeffa{\fpeval{#2-#4}}\xdef\Coeffb{\fpeval{#5-#3}}%\\
- \xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#4>0}{\stackMath\Longstack{$\tiny$\color{Cdecomp}-\num{#4}\useKV[ClesEquation]{Lettre} {}}\stackText}{\stackMath\Longstack{$\tiny$\color{Cdecomp}+\num{\fpeval{0-#4}}\useKV[ClesEquation]{Lettre} {}}\stackText}&=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#4>0}{\stackMath\Longstack{$\tiny$\color{Cdecomp}-\num{#4}\useKV[ClesEquation]{Lettre} {}}\stackText}{\stackMath\Longstack{$\tiny$\color{Cdecomp}+\num{\fpeval{0-#4}}\useKV[ClesEquation]{Lettre} {}}\stackText}\xintifboolexpr{\Coeffb>0}{+\num{\Coeffb}}{-\num{\fpeval{0-\Coeffb}}}\\
- \xintifboolexpr{\Coeffa=1}{\useKV[ClesEquation]{Lettre}}{\color{Cdecomp}\frac{\cancel{\color{black}\num{\Coeffa}}\color{black}\useKV[ClesEquation]{Lettre}}{\cancel{\num{\Coeffa}}}}&=\xintifboolexpr{\Coeffa=1}{\num{\Coeffb}}{\color{Cdecomp}\frac{\color{black}\num{\Coeffb}}{\num{\Coeffa}}}%\\
- \xintifboolexpr{\Coeffa=1}{}{\\}
- \xintifboolexpr{\Coeffa=1}{%
+ \xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#4>0}{\stackMath\Longstack{$\tiny$\color{Cdecomp}-\num{#4}\useKV[ClesEquation]{Lettre} {}}\stackText}{\stackMath\Longstack{$\tiny$\color{Cdecomp}+\num{\fpeval{0-#4}}\useKV[ClesEquation]{Lettre} {}}\stackText}&=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#4>0}{\stackMath\Longstack{$\tiny$\color{Cdecomp}-\num{#4}\useKV[ClesEquation]{Lettre} {}}\stackText}{\stackMath\Longstack{$\tiny$\color{Cdecomp}+\num{\fpeval{0-#4}}\useKV[ClesEquation]{Lettre} {}}\stackText}\xintifboolexpr{\Coeffb>0}{+\num{\Coeffb}}{-\num{\fpeval{0-\Coeffb}}}\\
+ \xintifboolexpr{\Coeffa==1}{\useKV[ClesEquation]{Lettre}}{\color{Cdecomp}\frac{\cancel{\color{black}\num{\Coeffa}}\color{black}\useKV[ClesEquation]{Lettre}}{\cancel{\num{\Coeffa}}}}&=\xintifboolexpr{\Coeffa==1}{\num{\Coeffb}}{\color{Cdecomp}\frac{\color{black}\num{\Coeffb}}{\num{\Coeffa}}}%\\
+ \xintifboolexpr{\Coeffa==1}{}{\\}
+ \xintifboolexpr{\Coeffa==1}{%
}{%\ifnum\cmtd>1
\useKV[ClesEquation]{Lettre}&=\frac{\num{\Coeffb}}{\num{\Coeffa}}%\\
+ %% decimal
+ \ifboolKV[ClesEquation]{Decimal}{%
+ \\\useKV[ClesEquation]{Lettre}&=\num{\fpeval{\Coeffb/\Coeffa}}%
+ }{}%
+ %%%
\ifboolKV[ClesEquation]{Entier}{%
\SSimpliTest{\Coeffb}{\Coeffa}%
\ifboolKV[ClesEquation]{Simplification}{%
@@ -193,20 +218,25 @@
}{}
}
\end{align*}
- \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\ifboolKV[ClesEquation]{LettreSol}{\useKV[ClesEquation]{Lettre}=}{}\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.%
+ \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\ifboolKV[ClesEquation]{LettreSol}{\useKV[ClesEquation]{Lettre}=}{}\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.%
}{}
}{%ax+b=cx+d avec a<c % Autre cas délicat
\begin{align*}%
- \xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}\xintifboolexpr{#3>0}{\stackMath\Longstack{$\tiny$\color{Cdecomp}-\num{#3} {}}\stackText}{\stackMath\Longstack{$\tiny$\color{Cdecomp}+\num{\fpeval{0-#3}} {}}\stackText}%
- &=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}\xintifboolexpr{#3>0}{\stackMath\Longstack{$\tiny$\color{Cdecomp}-\num{#3} {}}\stackText}{\stackMath\Longstack{$\tiny$\color{Cdecomp}+\num{\fpeval{0-#3}} {}}\stackText}
+ \xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}\xintifboolexpr{#3>0}{\stackMath\Longstack{$\tiny$\color{Cdecomp}-\num{#3} {}}\stackText}{\stackMath\Longstack{$\tiny$\color{Cdecomp}+\num{\fpeval{0-#3}} {}}\stackText}%
+ &=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}\xintifboolexpr{#3>0}{\stackMath\Longstack{$\tiny$\color{Cdecomp}-\num{#3} {}}\stackText}{\stackMath\Longstack{$\tiny$\color{Cdecomp}+\num{\fpeval{0-#3}} {}}\stackText}
\\
\xdef\Coeffa{\fpeval{#2-#4}}\xdef\Coeffb{\fpeval{#5-#3}}%\\
- \xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#4>0}{\stackMath\Longstack{$\tiny$\color{Cdecomp}-\num{#4}\useKV[ClesEquation]{Lettre} {}}\stackText}{\stackMath\Longstack{$\tiny$\color{Cdecomp}+\num{\fpeval{0-#4}}\useKV[ClesEquation]{Lettre} {}}\stackText}&=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#4>0}{\stackMath\Longstack{$\tiny$\color{Cdecomp}-\num{#4}\useKV[ClesEquation]{Lettre} {}}\stackText}{\stackMath\Longstack{$\tiny$\color{Cdecomp}+\num{\fpeval{0-#4}}\useKV[ClesEquation]{Lettre} {}}\stackText}\xintifboolexpr{\Coeffb>0}{+\num{\Coeffb}}{-\num{\fpeval{0-\Coeffb}}}\\
- \xintifboolexpr{\Coeffa=1}{\useKV[ClesEquation]{Lettre}}{\color{Cdecomp}\frac{\cancel{\color{black}\num{\Coeffa}}\color{black}\useKV[ClesEquation]{Lettre}}{\cancel{\num{\Coeffa}}}}&=\xintifboolexpr{\Coeffa=1}{\num{\Coeffb}}{\color{Cdecomp}\frac{\color{black}\num{\Coeffb}}{\num{\Coeffa}}}%\\
- \xintifboolexpr{\Coeffa=1}{}{\\}
- \xintifboolexpr{\Coeffa=1}{%
+ \xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#4>0}{\stackMath\Longstack{$\tiny$\color{Cdecomp}-\num{#4}\useKV[ClesEquation]{Lettre} {}}\stackText}{\stackMath\Longstack{$\tiny$\color{Cdecomp}+\num{\fpeval{0-#4}}\useKV[ClesEquation]{Lettre} {}}\stackText}&=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#4>0}{\stackMath\Longstack{$\tiny$\color{Cdecomp}-\num{#4}\useKV[ClesEquation]{Lettre} {}}\stackText}{\stackMath\Longstack{$\tiny$\color{Cdecomp}+\num{\fpeval{0-#4}}\useKV[ClesEquation]{Lettre} {}}\stackText}\xintifboolexpr{\Coeffb>0}{+\num{\Coeffb}}{-\num{\fpeval{0-\Coeffb}}}\\
+ \xintifboolexpr{\Coeffa==1}{\useKV[ClesEquation]{Lettre}}{\color{Cdecomp}\frac{\cancel{\color{black}\num{\Coeffa}}\color{black}\useKV[ClesEquation]{Lettre}}{\cancel{\num{\Coeffa}}}}&=\xintifboolexpr{\Coeffa==1}{\num{\Coeffb}}{\color{Cdecomp}\frac{\color{black}\num{\Coeffb}}{\num{\Coeffa}}}%\\
+ \xintifboolexpr{\Coeffa==1}{}{\\}
+ \xintifboolexpr{\Coeffa==1}{%
}{%\ifnum\cmtd>1
\useKV[ClesEquation]{Lettre}&=\frac{\num{\Coeffb}}{\num{\Coeffa}}%\\
+ %% decimal
+ \ifboolKV[ClesEquation]{Decimal}{%
+ \\\useKV[ClesEquation]{Lettre}&=\num{\fpeval{\Coeffb/\Coeffa}}%
+ }{}%
+ %%%
\ifboolKV[ClesEquation]{Entier}{%
\SSimpliTest{\Coeffb}{\Coeffa}%
\ifboolKV[ClesEquation]{Simplification}{%
@@ -215,7 +245,7 @@
}{}
}
\end{align*}
- \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\ifboolKV[ClesEquation]{LettreSol}{\useKV[ClesEquation]{Lettre}=}{}\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.%
+ \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\ifboolKV[ClesEquation]{LettreSol}{\useKV[ClesEquation]{Lettre}=}{}\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.%
}{}%
}%
}%
diff --git a/macros/latex/contrib/profcollege/latex/PfCEquationPose1.tex b/macros/latex/contrib/profcollege/latex/PfCEquationPose1.tex
index 1137140d28..8bc7bb339f 100644
--- a/macros/latex/contrib/profcollege/latex/PfCEquationPose1.tex
+++ b/macros/latex/contrib/profcollege/latex/PfCEquationPose1.tex
@@ -9,28 +9,28 @@
\EquaBaseL[#1]{#4}{}{}{#3}
\else
% si non, on est dans le cas ax=d
- \xintifboolexpr{#2=0}{%
- \xintifboolexpr{#5=0}{%
+ \xintifboolexpr{#2==0}{%
+ \xintifboolexpr{#5==0}{%
L'équation $0\useKV[ClesEquation]{Lettre}=0$ a une infinité de solutions.}{L'équation $0\useKV[ClesEquation]{Lettre}=\num{#5}$ n'a aucune solution.}%
}{%\else
- \xintifboolexpr{#5=0}{L'équation $\num{#2}\useKV[ClesEquation]{Lettre}=0$ a une unique solution : $\useKV[ClesEquation]{Lettre}=0$.}{%\else
+ \xintifboolexpr{#5==0}{L'équation $\num{#2}\useKV[ClesEquation]{Lettre}=0$ a une unique solution : $\useKV[ClesEquation]{Lettre}=0$.}{%\else
\begin{align*}%
- \xintifboolexpr{#2=1}{\useKV[ClesEquation]{Lettre}}{\num{#2}\useKV[ClesEquation]{Lettre}}&=\num{#5}\\
- \xintifboolexpr{#2=1}{}{%
+ \xintifboolexpr{#2==1}{\useKV[ClesEquation]{Lettre}}{\num{#2}\useKV[ClesEquation]{Lettre}}&=\num{#5}\\
+ \xintifboolexpr{#2==1}{}{%
\mathcolor{Cdecomp}{\mathrel{\div}\xintifboolexpr{#2<0}{(\num{#2})}{\num{#2}}}\phantom{\useKV[ClesEquation]{Lettre}}&\phantom{=}\mathcolor{Cdecomp}{\mathrel{\div}\xintifboolexpr{#2<0}{(\num{#2})}{\num{#2}}}\\}
\useKV[ClesEquation]{Lettre}&=\frac{\num{#5}}{\num{#2}}%\\
+ \ifboolKV[ClesEquation]{Decimal}{%
+ \\\useKV[ClesEquation]{Lettre}&=\num{\fpeval{#5/#2}}%
+ }{}%
+% %%%
\ifboolKV[ClesEquation]{Entier}{%
\SSimpliTest{#5}{#2}%
\ifboolKV[ClesEquation]{Simplification}{%
\ifthenelse{\boolean{Simplification}}{\\\useKV[ClesEquation]{Lettre}&=\SSimplifie{#5}{#2}}{}%\\
}{}
}{}
- %\ifboolKV[ClesEquation]{Fleches}{%
- %\stepcounter{Nbequa}}%
- %{\ifboolKV[ClesEquation]{FlecheDiv}{\stepcounter{Nbequa}}{}
- %}
\end{align*}
- \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2=1}{\useKV[ClesEquation]{Lettre}=\num{#5}}{\num{#2}\useKV[ClesEquation]{Lettre}=\num{#5}}$ a une unique solution : $\displaystyle\ifboolKV[ClesEquation]{LettreSol}{\useKV[ClesEquation]{Lettre}=}{}\opdiv*{#5}{#2}{numequa}{resteequa}\opcmp{resteequa}{0}\ifopeq\opexport{numequa}{\numequa}\num{\numequa}\else\ifboolKV[ClesEquation]{Simplification}{\SSimplifie{#5}{#2}}{\frac{\num{#5}}{\num{#2}}}\fi$.%
+ \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2==1}{\useKV[ClesEquation]{Lettre}=\num{#5}}{\num{#2}\useKV[ClesEquation]{Lettre}=\num{#5}}$ a une unique solution : $\displaystyle\ifboolKV[ClesEquation]{LettreSol}{\useKV[ClesEquation]{Lettre}=}{}\opdiv*{#5}{#2}{numequa}{resteequa}\opcmp{resteequa}{0}\ifopeq\opexport{numequa}{\numequa}\num{\numequa}\else\ifboolKV[ClesEquation]{Simplification}{\SSimplifie{#5}{#2}}{\frac{\num{#5}}{\num{#2}}}\fi$.%
}{}
}
}
@@ -43,26 +43,30 @@
\ifx\bla#2\bla%On échange en faisant attention à ne pas boucler : c doit être non vide
\EquaDeuxL[#1]{#4}{#5}{#2}{#3}
\else%cas ax+b=d
- \xintifboolexpr{#2=0}{%
- \xintifboolexpr{#3=#5}{%b=d
+ \xintifboolexpr{#2==0}{%
+ \xintifboolexpr{#3==#5}{%b=d
L'équation $\num{#3}=\num{#5}$ a une infinité de solutions.}%
{%b<>d
L'équation $\num{#3}=\num{#5}$ n'a aucune solution.%
}%
}{%ELSE
- \xintifboolexpr{#3=0}{%ax+b=d
+ \xintifboolexpr{#3==0}{%ax+b=d
\EquaBaseL[#1]{#2}{}{}{#5}%
}{%ax+b=d$ Ici
\begin{align*}
- \xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\num{#5}\\
- \phantom{\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}}\mathcolor{Cdecomp}{\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}}&\phantom{\mathrel{=}}\mathcolor{Cdecomp}{\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}}\\
- \xdef\Coeffa{#2}\xdef\Coeffb{\fpeval{#5-#3}}\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\phantom{\xintifboolexpr{#3>0}{{}+{}\num{#3}}{{}-{}\num{\fpeval{0-#3}}}}&=\num{\Coeffb}%\\
- \xintifboolexpr{\Coeffa=1}{}{\\}
- \xintifboolexpr{\Coeffa=1}{%
+ \xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\num{#5}\\
+ \phantom{\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}}\mathcolor{Cdecomp}{\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}}&\phantom{\mathrel{=}}\mathcolor{Cdecomp}{\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}}\\
+ \xdef\Coeffa{#2}\xdef\Coeffb{\fpeval{#5-#3}}\xintifboolexpr{\Coeffa==1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\phantom{\xintifboolexpr{#3>0}{{}+{}\num{#3}}{{}-{}\num{\fpeval{0-#3}}}}&=\num{\Coeffb}%\\
+ \xintifboolexpr{\Coeffa==1}{}{\\}
+ \xintifboolexpr{\Coeffa==1}{%
}{%\ifnum\cmtd>1
\mathcolor{Cdecomp}{\mathrel{\div}\xintifboolexpr{#2<0}{(\num{#2})}{\num{#2}}}\phantom{\useKV[ClesEquation]{Lettre}}\phantom{\xintifboolexpr{#3>0}{{}+{}\num{#3}}{{}-{}\num{\fpeval{0-#3}}}}&\phantom{=}\mathcolor{Cdecomp}{\mathrel{\div}\xintifboolexpr{#2<0}{(\num{#2})}{\num{#2}}}\\
\useKV[ClesEquation]{Lettre}\phantom{\xintifboolexpr{#3>0}{{}+{}\num{#3}}{{}-{}\num{\fpeval{0-#3}}}}&=\frac{\num{\Coeffb}}{\num{\Coeffa}}%\\
}
+ \ifboolKV[ClesEquation]{Decimal}{%
+ \\\useKV[ClesEquation]{Lettre}\phantom{\xintifboolexpr{#3>0}{{}+{}\num{#3}}{{}-{}\num{\fpeval{0-#3}}}}&=\num{\fpeval{\Coeffb/\Coeffa}}%
+ }{}%
+% %%%
\ifboolKV[ClesEquation]{Entier}{%
\SSimpliTest{\Coeffb}{\Coeffa}%
\ifboolKV[ClesEquation]{Simplification}{%
@@ -72,7 +76,7 @@
}{}
}{}
\end{align*}
- \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\num{#5}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\ifboolKV[ClesEquation]{LettreSol}{\useKV[ClesEquation]{Lettre}=}{}\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.
+ \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\num{#5}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\ifboolKV[ClesEquation]{LettreSol}{\useKV[ClesEquation]{Lettre}=}{}\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.
}{}
}
}
@@ -89,32 +93,36 @@
\EquaTroisL[#1]{#4}{#5}{#2}{}%
\fi
\else
- \xintifboolexpr{#2=0}{%b=cx
+ \xintifboolexpr{#2==0}{%b=cx
\EquaBaseL[#1]{#4}{}{}{#3}
}{%
- \xintifboolexpr{#4=0}{%ax+b=0
+ \xintifboolexpr{#4==0}{%ax+b=0
\EquaDeuxL[#1]{#2}{#3}{}{0}
}{%ax+b=cx
- \xintifboolexpr{#2=#4}{%
- \xintifboolexpr{#3=0}{%ax=ax
- L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}$ a une infinité de solutions.}%
+ \xintifboolexpr{#2==#4}{%
+ \xintifboolexpr{#3==0}{%ax=ax
+ L'équation $\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}$ a une infinité de solutions.}%
{%ax+b=ax
- L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}$ n'a aucune solution.%
+ L'équation $\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}$ n'a aucune solution.%
}%
}{%% Cas délicat
\xintifboolexpr{#2>#4}{%ax+b=cx avec a>c
\begin{align*}
- \xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\\
+ \xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\\
\mathcolor{Cdecomp}{\xintifboolexpr{#4>0}{{}-{}\num{#4}\useKV[ClesEquation]{Lettre}}{{}+{}\num{\fpeval{0-#4}}\useKV[ClesEquation]{Lettre}}}\phantom{\xintifboolexpr{#3>0}{{}+{}\num{#3}}{{}-{}\num{\fpeval{0-#3}}}}&\phantom{{}={}}\mathcolor{Cdecomp}{\xintifboolexpr{#4>0}{-\num{#4}\useKV[ClesEquation]{Lettre}}{+\num{\fpeval{0-#4}}\useKV[ClesEquation]{Lettre}}}\\
- \xdef\Coeffa{\fpeval{#2-#4}}\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=0\\
- \phantom{\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}}\mathcolor{Cdecomp}{\xintifboolexpr{#3>0}{{}-{}\num{#3}}{{}+{}\num{\fpeval{0-#3}}}}&\phantom{\mathrel{=}}\mathcolor{Cdecomp}{\xintifboolexpr{#3>0}{{}-{}\num{#3}}{{}+{}\num{\fpeval{0-#3}}}}\\
- \xdef\Coeffb{\fpeval{0-#3}}\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\phantom{\xintifboolexpr{#3>0}{{}+{}\num{#3}}{{}-{}\num{\fpeval{0-#3}}}}&=\num{\Coeffb}%\\
- \xintifboolexpr{\Coeffa=1}{}{\\}
- \xintifboolexpr{\Coeffa=1}{%
+ \xdef\Coeffa{\fpeval{#2-#4}}\xintifboolexpr{\Coeffa==1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=0\\
+ \phantom{\xintifboolexpr{\Coeffa==1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}}\mathcolor{Cdecomp}{\xintifboolexpr{#3>0}{{}-{}\num{#3}}{{}+{}\num{\fpeval{0-#3}}}}&\phantom{\mathrel{=}}\mathcolor{Cdecomp}{\xintifboolexpr{#3>0}{{}-{}\num{#3}}{{}+{}\num{\fpeval{0-#3}}}}\\
+ \xdef\Coeffb{\fpeval{0-#3}}\xintifboolexpr{\Coeffa==1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\phantom{\xintifboolexpr{#3>0}{{}+{}\num{#3}}{{}-{}\num{\fpeval{0-#3}}}}&=\num{\Coeffb}%\\
+ \xintifboolexpr{\Coeffa==1}{}{\\}
+ \xintifboolexpr{\Coeffa==1}{%
}{%\ifnum\cmtd>1
\mathcolor{Cdecomp}{\mathrel{\div}\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}}\phantom{\useKV[ClesEquation]{Lettre}}\phantom{\xintifboolexpr{#3>0}{{}+{}\num{#3}}{{}-{}\num{\fpeval{0-#3}}}}&\phantom{=}\mathcolor{Cdecomp}{\mathrel{\div}\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}}\\
\useKV[ClesEquation]{Lettre}\phantom{\xintifboolexpr{#3>0}{{}+{}\num{#3}}{{}-{}\num{\fpeval{0-#3}}}}&=\frac{\num{\Coeffb}}{\num{\Coeffa}}%\\
}
+ \ifboolKV[ClesEquation]{Decimal}{%
+ \\\useKV[ClesEquation]{Lettre}\phantom{\xintifboolexpr{#3>0}{{}+{}\num{#3}}{{}-{}\num{\fpeval{0-#3}}}}&=\num{\fpeval{\Coeffb/\Coeffa}}%
+ }{}%
+% %%%
\ifboolKV[ClesEquation]{Entier}{%
\SSimpliTest{\Coeffb}{\Coeffa}%
\ifboolKV[ClesEquation]{Simplification}{%
@@ -124,18 +132,22 @@
}{}
}{}
\end{align*}
- \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\ifboolKV[ClesEquation]{LettreSol}{\useKV[ClesEquation]{Lettre}=}{}\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.}{}
+ \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\ifboolKV[ClesEquation]{LettreSol}{\useKV[ClesEquation]{Lettre}=}{}\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.}{}
}{%ax+b=cx+d avec a<c % Autre cas délicat
\begin{align*}%
- \xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\\
+ \xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\\
\mathcolor{Cdecomp}{\xintifboolexpr{#2>0}{{}-{}\num{#2}\useKV[ClesEquation]{Lettre}}{{}+{}\num{\fpeval{0-#2}}\useKV[ClesEquation]{Lettre}}}\phantom{\xintifboolexpr{#3>0}{{}+{}\num{#3}}{{}-{}\num{\fpeval{0-#3}}}}&\phantom{{}={}}\mathcolor{Cdecomp}{\xintifboolexpr{#2>0}{{}-{}\num{#2}\useKV[ClesEquation]{Lettre}}{{}+{}\num{\fpeval{0-#2}}\useKV[ClesEquation]{Lettre}}}\\
- \xdef\Coeffb{#3}\xdef\Coeffa{\fpeval{#4-#2}}\xintifboolexpr{#3>0}{\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}%\\
- \xintifboolexpr{\Coeffa=1}{}{\\}
- \xintifboolexpr{\Coeffa=1}{%
+ \xdef\Coeffb{#3}\xdef\Coeffa{\fpeval{#4-#2}}\xintifboolexpr{#3>0}{\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{\Coeffa==1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}%\\
+ \xintifboolexpr{\Coeffa==1}{}{\\}
+ \xintifboolexpr{\Coeffa==1}{%
}{%\ifnum\cmtd>1
\mathcolor{Cdecomp}{\mathrel{\div}\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}}&\phantom{=}\mathcolor{Cdecomp}{\mathrel{\div}\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}}\\
\frac{\num{\Coeffb}}{\num{\Coeffa}}&=\phantom{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}%\\
- }
+ }
+ \ifboolKV[ClesEquation]{Decimal}{%
+ \\\num{\fpeval{\Coeffb/\Coeffa}}&=\phantom{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}%
+ }{}%
+% %%%
\ifboolKV[ClesEquation]{Entier}{%
\SSimpliTest{\Coeffb}{\Coeffa}%
\ifboolKV[ClesEquation]{Simplification}{%
@@ -145,7 +157,7 @@
}{}
}{}
\end{align*}
- \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\ifboolKV[ClesEquation]{LettreSol}{\useKV[ClesEquation]{Lettre}=}{}\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.}{}%
+ \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\ifboolKV[ClesEquation]{LettreSol}{\useKV[ClesEquation]{Lettre}=}{}\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.}{}%
}%
}%
}%
@@ -157,9 +169,9 @@
\newcommand{\ResolEquationL}[5][]{%
\useKVdefault[ClesEquation]%
\setKV[ClesEquation]{#1}%
- \xintifboolexpr{#2=0}{%
- \xintifboolexpr{#4=0}{%
- \xintifboolexpr{#3=#5}{%b=d
+ \xintifboolexpr{#2==0}{%
+ \xintifboolexpr{#4==0}{%
+ \xintifboolexpr{#3==#5}{%b=d
L'équation $\num{#3}=\num{#5}$ a une infinité de solutions.}%
{%b<>d
L'équation $\num{#3}=\num{#5}$ n'a aucune solution.%
@@ -169,65 +181,73 @@
\EquaDeuxL[#1]{#4}{#5}{}{#3}%
}%
}{%
- \xintifboolexpr{#4=0}{%ax+b=0x+d
+ \xintifboolexpr{#4==0}{%ax+b=0x+d
\EquaDeuxL[#1]{#2}{#3}{}{#5}%
}
{%ax+b=cx+d$
- \xintifboolexpr{#3=0}{%
- \xintifboolexpr{#5=0}{%ax=cx
+ \xintifboolexpr{#3==0}{%
+ \xintifboolexpr{#5==0}{%ax=cx
\EquaTroisL[#1]{#2}{0}{#4}{}%
}%
{%ax=cx+d
\EquaTroisL[#1]{#4}{#5}{#2}{}%
}%
}%
- {\xintifboolexpr{#5=0}{%ax+b=cx
+ {\xintifboolexpr{#5==0}{%ax+b=cx
\EquaTroisL[#1]{#2}{#3}{#4}{}%
}%
{%ax+b=cx+d -- ici
- \xintifboolexpr{#2=#4}{%
- \xintifboolexpr{#3=#5}{%b=d
- L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}$ a une infinité de solutions.}%
+ \xintifboolexpr{#2==#4}{%
+ \xintifboolexpr{#3==#5}{%b=d
+ L'équation $\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}$ a une infinité de solutions.}%
{%b<>d
- L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}$ n'a aucune solution.%
+ L'équation $\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}$ n'a aucune solution.%
}%
}{
%% Cas délicat
\xintifboolexpr{#2>#4}{%ax+b=cx+d avec a>c
\begin{align*}
- \xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}\\
+ \xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}\\
\mathcolor{Cdecomp}{\xintifboolexpr{#4>0}{{}-{}\num{#4}\useKV[ClesEquation]{Lettre}}{{}+{}\num{\fpeval{0-#4}}\useKV[ClesEquation]{Lettre}}}\phantom{\xintifboolexpr{#3>0}{{}+{}\num{#3}}{{}-{}\num{\fpeval{0-#3}}}}&\mathcolor{Cdecomp}{\xintifboolexpr{#4>0}{{}-{}\num{#4}\useKV[ClesEquation]{Lettre}}{\phantom{{}={}}+{}\num{\fpeval{0-#4}}\useKV[ClesEquation]{Lettre}}}\\
- \xdef\Coeffa{\fpeval{#2-#4}}\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\phantom{\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}}\xintifboolexpr{#5>0}{\phantom{{}+{}}\num{#5}}{-\num{\fpeval{0-#5}}}\\
- \mathcolor{Cdecomp}{\xintifboolexpr{#3>0}{{}-{}\num{#3}}{{}+{}\num{\fpeval{0-#3}}}}&\phantom{{}={}\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}}\mathcolor{Cdecomp}{\xintifboolexpr{#3>0}{{}-{}\num{#3}}{{}+{}\num{\fpeval{0-#3}}}}\\
- \xdef\Coeffb{\fpeval{#5-#3}}\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\phantom{\xintifboolexpr{#3>0}{{}+{}\num{#3}}{{}-{}\num{\fpeval{0-#3}}}}&=\phantom{\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}}\xintifboolexpr{\Coeffb>0}{\phantom{{}+{}}\num{\Coeffb}}{{}-{}\num{\fpeval{0-\Coeffb}}}%\\
- \xintifboolexpr{\Coeffa=1}{}{\\}
- \xintifboolexpr{\Coeffa=1}{}{%\ifnum\cmtd>1
- \mathcolor{Cdecomp}{\mathrel{\div}\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}}\phantom{\useKV[ClesEquation]{Lettre}}\phantom{\xintifboolexpr{#3>0}{{}+{}\num{#3}}{{}-{}\num{\fpeval{0-#3}}}}&\phantom{{}={}}\phantom{\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}}\mathcolor{Cdecomp}{\mathrel{\div}\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}}\\
- \phantom{\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}}\useKV[ClesEquation]{Lettre}\phantom{\xintifboolexpr{#3>0}{{}+{}\num{#3}}{{}-{}\num{\fpeval{0-#3}}}}&=\phantom{\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{\Coeffb>0}{{}+{}}{}}\frac{\num{\Coeffb}}{\num{\Coeffa}}%\\
+ \xdef\Coeffa{\fpeval{#2-#4}}\xintifboolexpr{\Coeffa==1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\phantom{\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}}\xintifboolexpr{#5>0}{\phantom{{}+{}}\num{#5}}{-\num{\fpeval{0-#5}}}\\
+ \mathcolor{Cdecomp}{\xintifboolexpr{#3>0}{{}-{}\num{#3}}{{}+{}\num{\fpeval{0-#3}}}}&\phantom{{}={}\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}}\mathcolor{Cdecomp}{\xintifboolexpr{#3>0}{{}-{}\num{#3}}{{}+{}\num{\fpeval{0-#3}}}}\\
+ \xdef\Coeffb{\fpeval{#5-#3}}\xintifboolexpr{\Coeffa==1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\phantom{\xintifboolexpr{#3>0}{{}+{}\num{#3}}{{}-{}\num{\fpeval{0-#3}}}}&=\phantom{\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}}\xintifboolexpr{\Coeffb>0}{\phantom{{}+{}}\num{\Coeffb}}{{}-{}\num{\fpeval{0-\Coeffb}}}%\\
+ \xintifboolexpr{\Coeffa==1}{}{\\}
+ \xintifboolexpr{\Coeffa==1}{}{%\ifnum\cmtd>1
+ \mathcolor{Cdecomp}{\mathrel{\div}\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}}\phantom{\useKV[ClesEquation]{Lettre}}\phantom{\xintifboolexpr{#3>0}{{}+{}\num{#3}}{{}-{}\num{\fpeval{0-#3}}}}&\phantom{{}={}}\phantom{\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}}\mathcolor{Cdecomp}{\mathrel{\div}\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}}\\
+ \phantom{\xintifboolexpr{\Coeffa==1}{}{\num{\Coeffa}}}\useKV[ClesEquation]{Lettre}\phantom{\xintifboolexpr{#3>0}{{}+{}\num{#3}}{{}-{}\num{\fpeval{0-#3}}}}&=\phantom{\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{\Coeffb>0}{{}+{}}{}}\frac{\num{\Coeffb}}{\num{\Coeffa}}%\\
}
+ \ifboolKV[ClesEquation]{Decimal}{%
+ \\\useKV[ClesEquation]{Lettre}\phantom{\xintifboolexpr{#3>0}{{}+{}\num{#3}}{{}-{}\num{\fpeval{0-#3}}}}&=\phantom{\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{\Coeffb>0}{{}+{}}{}}\num{\fpeval{\Coeffb/\Coeffa}}%
+ }{}%
+% %%%
\ifboolKV[ClesEquation]{Entier}{%
\SSimpliTest{\Coeffb}{\Coeffa}%
\ifboolKV[ClesEquation]{Simplification}{%
\ifthenelse{\boolean{Simplification}}{\\%
- \useKV[ClesEquation]{Lettre}\phantom{\xintifboolexpr{#3>0}{{}+{}\num{#3}}{{}-{}\num{\fpeval{0-#3}}}}&=\phantom{\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{\Coeffb>0}{{}+{}}{}}\SSimplifie{\Coeffb}{\Coeffa}%\\
+ \useKV[ClesEquation]{Lettre}\phantom{\xintifboolexpr{#3>0}{{}+{}\num{#3}}{{}-{}\num{\fpeval{0-#3}}}}&=\phantom{\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{\Coeffb>0}{{}+{}}{}}\SSimplifie{\Coeffb}{\Coeffa}%\\
}{}
}{}
}{}
\end{align*}
- \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\ifboolKV[ClesEquation]{LettreSol}{\useKV[ClesEquation]{Lettre}=}{}\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.%
+ \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\ifboolKV[ClesEquation]{LettreSol}{\useKV[ClesEquation]{Lettre}=}{}\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.%
}{}
}{%ax+b=cx+d avec a<c % Autre cas délicat
\begin{align*}%
- \xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}\\
+ \xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}\\
\mathcolor{Cdecomp}{\xintifboolexpr{#2>0}{{}-{}\num{#2}\useKV[ClesEquation]{Lettre}}{{}+{}\num{\fpeval{0-#2}}\useKV[ClesEquation]{Lettre}}}\phantom{\xintifboolexpr{#3>0}{{}+{}\num{#3}}{{}-{}\num{\fpeval{0-#3}}}}&\xintifboolexpr{#4<0}{\phantom{={}}}{}\mathcolor{Cdecomp}{\xintifboolexpr{#2>0}{{}-{}\num{#2}\useKV[ClesEquation]{Lettre}}{{}+{}\num{\fpeval{0-#2}}\useKV[ClesEquation]{Lettre}}}\\
- \xdef\Coeffa{\fpeval{#4-#2}}\xintifboolexpr{#3>0}{\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}\\
- \mathcolor{Cdecomp}{\xintifboolexpr{#5>0}{{}-{}\num{#5}}{{}+{}\num{\fpeval{0-#5}}}}&\phantom{{}={}\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}}\mathcolor{Cdecomp}{\xintifboolexpr{#5>0}{-\num{#5}}{+\num{\fpeval{0-#5}}}}\\
- \xdef\Coeffb{\fpeval{#3-#5}}\num{\Coeffb}&=\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}%\\
- \xintifboolexpr{\Coeffa=1}{}{\\}
- \xintifboolexpr{\Coeffa=1}{}{%\ifnum\cmtd>1
+ \xdef\Coeffa{\fpeval{#4-#2}}\xintifboolexpr{#3>0}{\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{\Coeffa==1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}\\
+ \mathcolor{Cdecomp}{\xintifboolexpr{#5>0}{{}-{}\num{#5}}{{}+{}\num{\fpeval{0-#5}}}}&\phantom{{}={}\xintifboolexpr{\Coeffa==1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}}\mathcolor{Cdecomp}{\xintifboolexpr{#5>0}{-\num{#5}}{+\num{\fpeval{0-#5}}}}\\
+ \xdef\Coeffb{\fpeval{#3-#5}}\num{\Coeffb}&=\xintifboolexpr{\Coeffa==1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}%\\
+ \xintifboolexpr{\Coeffa==1}{}{\\}
+ \xintifboolexpr{\Coeffa==1}{}{%\ifnum\cmtd>1
\mathcolor{Cdecomp}{\mathrel{\div}\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}}&\xintifboolexpr{\Coeffa<0}{\phantom{{}={}}}{\phantom{=}}\mathcolor{Cdecomp}{\mathrel{\div}\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}}\\
\frac{\num{\Coeffb}}{\num{\Coeffa}}&=\useKV[ClesEquation]{Lettre}%\\
}
+ \ifboolKV[ClesEquation]{Decimal}{%
+ \\\num{\fpeval{\Coeffb/\Coeffa}}&=\useKV[ClesEquation]{Lettre}%
+ }{}%
+% %%%
\ifboolKV[ClesEquation]{Entier}{%
\SSimpliTest{\Coeffb}{\Coeffa}%
\ifboolKV[ClesEquation]{Simplification}{%
@@ -235,7 +255,7 @@
}{}
}{}
\end{align*}
- \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\ifboolKV[ClesEquation]{LettreSol}{\useKV[ClesEquation]{Lettre}=}{}\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.%
+ \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\ifboolKV[ClesEquation]{LettreSol}{\useKV[ClesEquation]{Lettre}=}{}\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.%
}{}%
}%
}%
diff --git a/macros/latex/contrib/profcollege/latex/PfCEquationSoustraction2.tex b/macros/latex/contrib/profcollege/latex/PfCEquationSoustraction2.tex
index f3ffd9453d..a03f2d7442 100644
--- a/macros/latex/contrib/profcollege/latex/PfCEquationSoustraction2.tex
+++ b/macros/latex/contrib/profcollege/latex/PfCEquationSoustraction2.tex
@@ -9,13 +9,13 @@
\EquaBase[#1]{#4}{}{}{#3}
\else
% si non, on est dans le cas ax=d
- \xintifboolexpr{#2=0}{%
- \xintifboolexpr{#5=0}{%
+ \xintifboolexpr{#2==0}{%
+ \xintifboolexpr{#5==0}{%
L'équation $0\useKV[ClesEquation]{ELettre}=0$ a une infinité de solutions.}{L'équation $0\useKV[ClesEquation]{Lettre}=\num{#5}$ n'a aucune solution.}%
}{%\else
- \xintifboolexpr{#5=0}{L'équation $\num{#2}\useKV[ClesEquation]{Lettre}=0$ a une unique solution : $\useKV[ClesEquation]{Lettre}=0$.}{%\else
+ \xintifboolexpr{#5==0}{L'équation $\num{#2}\useKV[ClesEquation]{Lettre}=0$ a une unique solution : $\useKV[ClesEquation]{Lettre}=0$.}{%\else
\begin{align*}%
- \tikzmark{A-\theNbequa}\xintifboolexpr{#2=1}{\useKV[ClesEquation]{Lettre}}{\num{#2}\useKV[ClesEquation]{Lettre}}&=\num{#5}\tikzmark{C-\theNbequa}\\
+ \tikzmark{A-\theNbequa}\xintifboolexpr{#2==1}{\useKV[ClesEquation]{Lettre}}{\num{#2}\useKV[ClesEquation]{Lettre}}&=\num{#5}\tikzmark{C-\theNbequa}\\
\tikzmark{B-\theNbequa}\useKV[ClesEquation]{Lettre}&=\frac{\num{#5}}{\num{#2}}\tikzmark{D-\theNbequa}%\\
\ifboolKV[ClesEquation]{Fleches}{%
\leftcomment{A-\theNbequa}{B-\theNbequa}{A-\theNbequa}{$\div\xintifboolexpr{#2<0}{(\num{#2})}{\num{#2}}$}%
@@ -26,6 +26,11 @@
\Rightcomment{C-\theNbequa}{D-\theNbequa}{D-\theNbequa}{$\div\xintifboolexpr{#2<0}{(\num{#2})}{\num{#2}}$}%
}{}%
}%%
+ %% decimal
+ \ifboolKV[ClesEquation]{Decimal}{%
+ \\\useKV[ClesEquation]{Lettre}&=\num{\fpeval{#5/#2}}%
+ }{}%
+% %%%
\ifboolKV[ClesEquation]{Entier}{%
\SSimpliTest{#5}{#2}%
\ifboolKV[ClesEquation]{Simplification}{%
@@ -37,7 +42,7 @@
{\ifboolKV[ClesEquation]{FlecheDiv}{\stepcounter{Nbequa}}{}
}
\end{align*}
- \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2=1}{\useKV[ClesEquation]{Lettre}=\num{#5}}{\num{#2}\useKV[ClesEquation]{Lettre}=\num{#5}}$ a une unique solution : $\displaystyle\ifboolKV[ClesEquation]{LettreSol}{\useKV[ClesEquation]{Lettre}=}{}\opdiv*{#5}{#2}{numequa}{resteequa}\opcmp{resteequa}{0}\ifopeq\opexport{numequa}{\numequa}\num{\numequa}\else\ifboolKV[ClesEquation]{Simplification}{\SSimplifie{#5}{#2}}{\frac{\num{#5}}{\num{#2}}}\fi$.%
+ \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2==1}{\useKV[ClesEquation]{Lettre}=\num{#5}}{\num{#2}\useKV[ClesEquation]{Lettre}=\num{#5}}$ a une unique solution : $\displaystyle\ifboolKV[ClesEquation]{LettreSol}{\useKV[ClesEquation]{Lettre}=}{}\opdiv*{#5}{#2}{numequa}{resteequa}\opcmp{resteequa}{0}\ifopeq\opexport{numequa}{\numequa}\num{\numequa}\else\ifboolKV[ClesEquation]{Simplification}{\SSimplifie{#5}{#2}}{\frac{\num{#5}}{\num{#2}}}\fi$.%
}{}
}
}
@@ -50,29 +55,29 @@
\ifx\bla#2\bla%On échange en faisant attention à ne pas boucler : c doit être non vide
\EquaDeuxSoustraction[#1]{#4}{#5}{#2}{#3}
\else%cas ax+b=d
- \xintifboolexpr{#2=0}{%
- \xintifboolexpr{#3=#5}{%b=d
+ \xintifboolexpr{#2==0}{%
+ \xintifboolexpr{#3==#5}{%b=d
L'équation $\num{#3}=\num{#5}$ a une infinité de solutions.}%
{%b<>d
L'équation $\num{#3}=\num{#5}$ n'a aucune solution.%
}%
}{%ELSE
- \xintifboolexpr{#3=0}{%ax+b=d
+ \xintifboolexpr{#3==0}{%ax+b=d
\EquaBase[#1]{#2}{}{}{#5}%
}{%ax+b=d$ Ici
\begin{align*}
- \tikzmark{A-\theNbequa}\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\num{#5}\tikzmark{E-\theNbequa}\\
+ \tikzmark{A-\theNbequa}\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\num{#5}\tikzmark{E-\theNbequa}\\
\ifboolKV[ClesEquation]{Decomposition}{%
- \xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}\mathcolor{Cdecomp}{\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}}&=\num{#5}\mathcolor{Cdecomp}{\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}}\\
+ \xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}\mathcolor{Cdecomp}{\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}}&=\num{#5}\mathcolor{Cdecomp}{\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}}\\
}{}%
- \tikzmark{C-\theNbequa}\xdef\Coeffa{#2}\xdef\Coeffb{\fpeval{#5-#3}}\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}&=\num{\Coeffb}\tikzmark{G-\theNbequa}
- \ifboolKV[ClesEquation]{Decomposition}{\\\xintifboolexpr{\Coeffa=1}{}{\frac{\num{\Coeffa}}{\mathcolor{Cdecomp}{\num{\Coeffa}}}\useKV[ClesEquation]{Lettre}&=\frac{\num{\Coeffb}}{\mathcolor{Cdecomp}{\num{\Coeffa}}}}}{}
- \xintifboolexpr{\Coeffa=1}{}{\\}
+ \tikzmark{C-\theNbequa}\xdef\Coeffa{#2}\xdef\Coeffb{\fpeval{#5-#3}}\xintifboolexpr{\Coeffa==1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}&=\num{\Coeffb}\tikzmark{G-\theNbequa}
+ \ifboolKV[ClesEquation]{Decomposition}{\\\xintifboolexpr{\Coeffa==1}{}{\frac{\num{\Coeffa}}{\mathcolor{Cdecomp}{\num{\Coeffa}}}\useKV[ClesEquation]{Lettre}&=\frac{\num{\Coeffb}}{\mathcolor{Cdecomp}{\num{\Coeffa}}}}}{}
+ \xintifboolexpr{\Coeffa==1}{}{\\}
\ifboolKV[ClesEquation]{Fleches}{%
\leftcomment{A-\theNbequa}{C-\theNbequa}{A-\theNbequa}{$\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}$}%
\rightcomment{E-\theNbequa}{G-\theNbequa}{E-\theNbequa}{$\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}$}%
}{}
- \xintifboolexpr{\Coeffa=1}{%
+ \xintifboolexpr{\Coeffa==1}{%
}{%\ifnum\cmtd>1
\tikzmark{D-\theNbequa}\useKV[ClesEquation]{Lettre}&=\frac{\num{\Coeffb}}{\num{\Coeffa}}\tikzmark{H-\theNbequa}%\\
\ifboolKV[ClesEquation]{Fleches}{%
@@ -85,6 +90,11 @@
}{}
}
}
+ %%decimal
+ \ifboolKV[ClesEquation]{Decimal}{%
+ \\\useKV[ClesEquation]{Lettre}&=\num{\fpeval{\Coeffb/\Coeffa}}%
+ }{}%
+ %%%
\ifboolKV[ClesEquation]{Entier}{%
\SSimpliTest{\Coeffb}{\Coeffa}%
\ifboolKV[ClesEquation]{Simplification}{%
@@ -93,7 +103,7 @@
}{}
\ifboolKV[ClesEquation]{Fleches}{\stepcounter{Nbequa}}{\ifboolKV[ClesEquation]{FlecheDiv}{\stepcounter{Nbequa}}{}}
\end{align*}
- \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\num{#5}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\ifboolKV[ClesEquation]{LettreSol}{\useKV[ClesEquation]{Lettre}=}{}\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.
+ \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\num{#5}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\ifboolKV[ClesEquation]{LettreSol}{\useKV[ClesEquation]{Lettre}=}{}\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.
}{}
}
}
@@ -110,41 +120,41 @@
\EquaTroisSoustraction[#1]{#4}{#5}{#2}{}%
\fi
\else
- \xintifboolexpr{#2=0}{%b=cx
+ \xintifboolexpr{#2==0}{%b=cx
\EquaBase[#1]{#4}{}{}{#3}
}{%
- \xintifboolexpr{#4=0}{%ax+b=0
+ \xintifboolexpr{#4==0}{%ax+b=0
\EquaDeuxSoustraction[#1]{#2}{#3}{}{0}
}{%ax+b=cx
- \xintifboolexpr{#2=#4}{%
- \xintifboolexpr{#3=0}{%ax=ax
- L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}$ a une infinité de solutions.}%
+ \xintifboolexpr{#2==#4}{%
+ \xintifboolexpr{#3==0}{%ax=ax
+ L'équation $\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}$ a une infinité de solutions.}%
{%ax+b=ax
- L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}$ n'a aucune solution.%
+ L'équation $\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}$ n'a aucune solution.%
}%
}{%% Cas délicat
\xintifboolexpr{#2>#4}{%ax+b=cx avec a>c
\begin{align*}
- \tikzmark{A-\theNbequa}\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\tikzmark{E-\theNbequa}\\
+ \tikzmark{A-\theNbequa}\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\tikzmark{E-\theNbequa}\\
\ifboolKV[ClesEquation]{Decomposition}{%
- \xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\mathcolor{Cdecomp}{\xintifboolexpr{#4>0}{-\num{#4}\useKV[ClesEquation]{Lettre}}{+\num{\fpeval{0-#4}}\useKV[ClesEquation]{Lettre}}}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\mathcolor{Cdecomp}{\xintifboolexpr{#4>0}{-\num{#4}\useKV[ClesEquation]{Lettre}}{+\num{\fpeval{0-#4}}\useKV[ClesEquation]{Lettre}}}\\
+ \xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\mathcolor{Cdecomp}{\xintifboolexpr{#4>0}{-\num{#4}\useKV[ClesEquation]{Lettre}}{+\num{\fpeval{0-#4}}\useKV[ClesEquation]{Lettre}}}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\mathcolor{Cdecomp}{\xintifboolexpr{#4>0}{-\num{#4}\useKV[ClesEquation]{Lettre}}{+\num{\fpeval{0-#4}}\useKV[ClesEquation]{Lettre}}}\\
}{}
- \tikzmark{B-\theNbequa}\xdef\Coeffa{\fpeval{#2-#4}}\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=0\tikzmark{F-\theNbequa}\\
+ \tikzmark{B-\theNbequa}\xdef\Coeffa{\fpeval{#2-#4}}\xintifboolexpr{\Coeffa==1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=0\tikzmark{F-\theNbequa}\\
\ifboolKV[ClesEquation]{Decomposition}{%
- \xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}\mathcolor{Cdecomp}{\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}}&=0\mathcolor{Cdecomp}{\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}}\tikzmark{F-\theNbequa}\\
+ \xintifboolexpr{\Coeffa==1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}\mathcolor{Cdecomp}{\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}}&=0\mathcolor{Cdecomp}{\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}}\tikzmark{F-\theNbequa}\\
}{}%
- \tikzmark{C-\theNbequa}\xdef\Coeffb{\fpeval{0-#3}}\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}&=\num{\Coeffb}\tikzmark{G-\theNbequa}%\\
+ \tikzmark{C-\theNbequa}\xdef\Coeffb{\fpeval{0-#3}}\xintifboolexpr{\Coeffa==1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}&=\num{\Coeffb}\tikzmark{G-\theNbequa}%\\
%eric
- \ifboolKV[ClesEquation]{Decomposition}{\\\xintifboolexpr{\Coeffa=1}{}{\frac{\num{\Coeffa}}{\mathcolor{Cdecomp}{\num{\Coeffa}}}\useKV[ClesEquation]{Lettre}&=\frac{\num{\Coeffb}}{\mathcolor{Cdecomp}{\num{\Coeffa}}}}}{}
+ \ifboolKV[ClesEquation]{Decomposition}{\\\xintifboolexpr{\Coeffa==1}{}{\frac{\num{\Coeffa}}{\mathcolor{Cdecomp}{\num{\Coeffa}}}\useKV[ClesEquation]{Lettre}&=\frac{\num{\Coeffb}}{\mathcolor{Cdecomp}{\num{\Coeffa}}}}}{}
% eric
- \xintifboolexpr{\Coeffa=1}{}{\\}
+ \xintifboolexpr{\Coeffa==1}{}{\\}
\ifboolKV[ClesEquation]{Fleches}{%
\leftcomment{A-\theNbequa}{B-\theNbequa}{A-\theNbequa}{$\xintifboolexpr{#4>0}{-\num{#4}}{+\num{\fpeval{0-#4}}}\useKV[ClesEquation]{Lettre}$}
\rightcomment{E-\theNbequa}{F-\theNbequa}{E-\theNbequa}{$\xintifboolexpr{#4>0}{-\num{#4}}{+\num{\fpeval{0-#4}}}\useKV[ClesEquation]{Lettre}$}
\leftcomment{B-\theNbequa}{C-\theNbequa}{A-\theNbequa}{$\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}$}%
\rightcomment{F-\theNbequa}{G-\theNbequa}{E-\theNbequa}{$\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}$}%
}{}
- \xintifboolexpr{\Coeffa=1}{}{%\ifnum\cmtd>1
+ \xintifboolexpr{\Coeffa==1}{}{%\ifnum\cmtd>1
\tikzmark{D-\theNbequa}\useKV[ClesEquation]{Lettre}&=\frac{\num{\Coeffb}}{\num{\Coeffa}}\tikzmark{H-\theNbequa}%\\
\ifboolKV[ClesEquation]{Fleches}{%
\leftcomment{C-\theNbequa}{D-\theNbequa}{A-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
@@ -154,7 +164,12 @@
\leftcomment{C-\theNbequa}{D-\theNbequa}{A-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
\rightcomment{G-\theNbequa}{H-\theNbequa}{E-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
}{}
- }
+ }
+ %% decimal
+ \ifboolKV[ClesEquation]{Decimal}{%
+ \\\useKV[ClesEquation]{Lettre}&=\num{\fpeval{\Coeffb/\Coeffa}}%
+ }{}%
+ % %%%
\ifboolKV[ClesEquation]{Entier}{%
\SSimpliTest{\Coeffb}{\Coeffa}%
\ifboolKV[ClesEquation]{Simplification}{%
@@ -164,23 +179,23 @@
}
\ifboolKV[ClesEquation]{Fleches}{\stepcounter{Nbequa}}{\ifboolKV[ClesEquation]{FlecheDiv}{\stepcounter{Nbequa}}{}}
\end{align*}
- \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\ifboolKV[ClesEquation]{LettreSol}{\useKV[ClesEquation]{Lettre}=}{}\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.}{}
+ \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\ifboolKV[ClesEquation]{LettreSol}{\useKV[ClesEquation]{Lettre}=}{}\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.}{}
}{%ax+b=cx+d avec a<c % Autre cas délicat
\begin{align*}%
- \tikzmark{A-\theNbequa}\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\tikzmark{E-\theNbequa}\\
+ \tikzmark{A-\theNbequa}\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\tikzmark{E-\theNbequa}\\
\ifboolKV[ClesEquation]{Decomposition}{%
- \xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\mathcolor{Cdecomp}{\xintifboolexpr{#2>0}{-\num{#2}\useKV[ClesEquation]{Lettre}}{+\num{\fpeval{0-#2}}\useKV[ClesEquation]{Lettre}}}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\mathcolor{Cdecomp}{\xintifboolexpr{#2>0}{-\num{#2}\useKV[ClesEquation]{Lettre}}{+\num{\fpeval{0-#2}}\useKV[ClesEquation]{Lettre}}}\\
+ \xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\mathcolor{Cdecomp}{\xintifboolexpr{#2>0}{-\num{#2}\useKV[ClesEquation]{Lettre}}{+\num{\fpeval{0-#2}}\useKV[ClesEquation]{Lettre}}}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\mathcolor{Cdecomp}{\xintifboolexpr{#2>0}{-\num{#2}\useKV[ClesEquation]{Lettre}}{+\num{\fpeval{0-#2}}\useKV[ClesEquation]{Lettre}}}\\
}{}
- \tikzmark{B-\theNbequa}\xdef\Coeffb{#3}\xdef\Coeffa{\fpeval{#4-#2}}\xintifboolexpr{#3>0}{\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\tikzmark{F-\theNbequa}
- \xintifboolexpr{\Coeffa=1}{}{\\}
+ \tikzmark{B-\theNbequa}\xdef\Coeffb{#3}\xdef\Coeffa{\fpeval{#4-#2}}\xintifboolexpr{#3>0}{\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{\Coeffa==1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\tikzmark{F-\theNbequa}
+ \xintifboolexpr{\Coeffa==1}{}{\\}
\ifboolKV[ClesEquation]{Fleches}{%
\leftcomment{A-\theNbequa}{B-\theNbequa}{A-\theNbequa}{$\xintifboolexpr{#2>0}{-\num{#2}}{+\num{\fpeval{0-#2}}}\useKV[ClesEquation]{Lettre}$}
\rightcomment{E-\theNbequa}{F-\theNbequa}{E-\theNbequa}{$\xintifboolexpr{#2>0}{-\num{#2}}{+\num{\fpeval{0-#2}}}\useKV[ClesEquation]{Lettre}$}
}{}
% eric
- \ifboolKV[ClesEquation]{Decomposition}{\\\xintifboolexpr{\Coeffa=1}{}{\frac{\num{\Coeffb}}{\mathcolor{Cdecomp}{\num{\Coeffa}}}&=\frac{\num{\Coeffa}}{\mathcolor{Cdecomp}{\num{\Coeffa}}}\useKV[ClesEquation]{Lettre}}}{}
+ \ifboolKV[ClesEquation]{Decomposition}{\\\xintifboolexpr{\Coeffa==1}{}{\frac{\num{\Coeffb}}{\mathcolor{Cdecomp}{\num{\Coeffa}}}&=\frac{\num{\Coeffa}}{\mathcolor{Cdecomp}{\num{\Coeffa}}}\useKV[ClesEquation]{Lettre}}}{}
% eric
- \xintifboolexpr{\Coeffa=1}{}{%\ifnum\cmtd>1
+ \xintifboolexpr{\Coeffa==1}{}{%\ifnum\cmtd>1
\tikzmark{D-\theNbequa}\frac{\num{\Coeffb}}{\num{\Coeffa}}&=\useKV[ClesEquation]{Lettre}\tikzmark{H-\theNbequa}%\\
\ifboolKV[ClesEquation]{Fleches}{%
\leftcomment{B-\theNbequa}{D-\theNbequa}{A-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
@@ -191,6 +206,11 @@
\rightcomment{F-\theNbequa}{H-\theNbequa}{E-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
}{}
}
+ %% decimal
+ \ifboolKV[ClesEquation]{Decimal}{%
+ \\\num{\fpeval{\Coeffb/\Coeffa}}&=\useKV[ClesEquation]{Lettre}%
+ }{}%
+ % %%%
\ifboolKV[ClesEquation]{Entier}{%
\SSimpliTest{\Coeffb}{\Coeffa}%
\ifboolKV[ClesEquation]{Simplification}{%
@@ -200,7 +220,7 @@
}
\ifboolKV[ClesEquation]{Fleches}{\stepcounter{Nbequa}}{\ifboolKV[ClesEquation]{FlecheDiv}{\stepcounter{Nbequa}}{}}
\end{align*}
- \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\ifboolKV[ClesEquation]{LettreSol}{\useKV[ClesEquation]{Lettre}=}{}\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.}{}%
+ \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\ifboolKV[ClesEquation]{LettreSol}{\useKV[ClesEquation]{Lettre}=}{}\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.}{}%
}%
}%
}%
@@ -212,9 +232,9 @@
\newcommand{\ResolEquationSoustraction}[5][]{%
\useKVdefault[ClesEquation]%
\setKV[ClesEquation]{#1}%
- \xintifboolexpr{#2=0}{%
- \xintifboolexpr{#4=0}{%
- \xintifboolexpr{#3=#5}{%b=d
+ \xintifboolexpr{#2==0}{%
+ \xintifboolexpr{#4==0}{%
+ \xintifboolexpr{#3==#5}{%b=d
L'équation $\num{#3}=\num{#5}$ a une infinité de solutions.}%
{%b<>d
L'équation $\num{#3}=\num{#5}$ n'a aucune solution.%
@@ -224,52 +244,52 @@
\EquaDeuxSoustraction[#1]{#4}{#5}{}{#3}%
}%
}{%
- \xintifboolexpr{#4=0}{%ax+b=0x+d
+ \xintifboolexpr{#4==0}{%ax+b=0x+d
\EquaDeuxSoustraction[#1]{#2}{#3}{}{#5}%
}
{%ax+b=cx+d$
- \xintifboolexpr{#3=0}{%
- \xintifboolexpr{#5=0}{%ax=cx
+ \xintifboolexpr{#3==0}{%
+ \xintifboolexpr{#5==0}{%ax=cx
\EquaTroisSoustraction[#1]{#2}{0}{#4}{}%
}%
{%ax=cx+d
\EquaTroisSoustraction[#1]{#4}{#5}{#2}{}%
}%
}%
- {\xintifboolexpr{#5=0}{%ax+b=cx
+ {\xintifboolexpr{#5==0}{%ax+b=cx
\EquaTroisSoustraction[#1]{#2}{#3}{#4}{}%
}%
{%ax+b=cx+d -- ici
- \xintifboolexpr{#2=#4}{%
- \xintifboolexpr{#3=#5}{%b=d
- L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}$ a une infinité de solutions.}%
+ \xintifboolexpr{#2==#4}{%
+ \xintifboolexpr{#3==#5}{%b=d
+ L'équation $\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}$ a une infinité de solutions.}%
{%b<>d
- L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}$ n'a aucune solution.%
+ L'équation $\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}$ n'a aucune solution.%
}%
}{
%% Cas délicat
\xintifboolexpr{#2>#4}{%ax+b=cx+d avec a>c
\begin{align*}
- \tikzmark{A-\theNbequa}\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}\tikzmark{E-\theNbequa}\\
+ \tikzmark{A-\theNbequa}\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}\tikzmark{E-\theNbequa}\\
\ifboolKV[ClesEquation]{Decomposition}{%
- \xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\mathcolor{Cdecomp}{\xintifboolexpr{#4>0}{-\num{#4}\useKV[ClesEquation]{Lettre}}{+\num{\fpeval{0-#4}}\useKV[ClesEquation]{Lettre}}}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\mathcolor{Cdecomp}{\xintifboolexpr{#4>0}{-\num{#4}\useKV[ClesEquation]{Lettre}}{+\num{\fpeval{0-#4}}\useKV[ClesEquation]{Lettre}}}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}\\
+ \xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\mathcolor{Cdecomp}{\xintifboolexpr{#4>0}{-\num{#4}\useKV[ClesEquation]{Lettre}}{+\num{\fpeval{0-#4}}\useKV[ClesEquation]{Lettre}}}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\mathcolor{Cdecomp}{\xintifboolexpr{#4>0}{-\num{#4}\useKV[ClesEquation]{Lettre}}{+\num{\fpeval{0-#4}}\useKV[ClesEquation]{Lettre}}}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}\\
}{}
- \tikzmark{B-\theNbequa}\xdef\Coeffa{\fpeval{#2-#4}}\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\num{#5}\tikzmark{F-\theNbequa}\\
+ \tikzmark{B-\theNbequa}\xdef\Coeffa{\fpeval{#2-#4}}\xintifboolexpr{\Coeffa==1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\num{#5}\tikzmark{F-\theNbequa}\\
\ifboolKV[ClesEquation]{Decomposition}{%
- \xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}\mathcolor{Cdecomp}{\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}}&=\num{#5}\mathcolor{Cdecomp}{\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}}\\
+ \xintifboolexpr{\Coeffa==1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}\mathcolor{Cdecomp}{\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}}&=\num{#5}\mathcolor{Cdecomp}{\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}}\\
}{}%
- \tikzmark{C-\theNbequa}\xdef\Coeffb{\fpeval{#5-#3}}\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}&=\num{\Coeffb}\tikzmark{G-\theNbequa}%\\
+ \tikzmark{C-\theNbequa}\xdef\Coeffb{\fpeval{#5-#3}}\xintifboolexpr{\Coeffa==1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}&=\num{\Coeffb}\tikzmark{G-\theNbequa}%\\
% eric
- \ifboolKV[ClesEquation]{Decomposition}{\\\xintifboolexpr{\Coeffa=1}{}{\frac{\num{\Coeffa}}{\mathcolor{Cdecomp}{\num{\Coeffa}}}\useKV[ClesEquation]{Lettre}&=\frac{\num{\Coeffb}}{\mathcolor{Cdecomp}{\num{\Coeffa}}}}}{}
+ \ifboolKV[ClesEquation]{Decomposition}{\\\xintifboolexpr{\Coeffa==1}{}{\frac{\num{\Coeffa}}{\mathcolor{Cdecomp}{\num{\Coeffa}}}\useKV[ClesEquation]{Lettre}&=\frac{\num{\Coeffb}}{\mathcolor{Cdecomp}{\num{\Coeffa}}}}}{}
% eric
- \xintifboolexpr{\Coeffa=1}{}{\\}
+ \xintifboolexpr{\Coeffa==1}{}{\\}
\ifboolKV[ClesEquation]{Fleches}{%
\leftcomment{A-\theNbequa}{B-\theNbequa}{A-\theNbequa}{$\xintifboolexpr{#4>0}{-\num{#4}}{+\num{\fpeval{0-#4}}}\useKV[ClesEquation]{Lettre}$}
\rightcomment{E-\theNbequa}{F-\theNbequa}{E-\theNbequa}{$\xintifboolexpr{#4>0}{-\num{#4}}{+\num{\fpeval{0-#4}}}\useKV[ClesEquation]{Lettre}$}
\leftcomment{B-\theNbequa}{C-\theNbequa}{A-\theNbequa}{$\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}$}%
\rightcomment{F-\theNbequa}{G-\theNbequa}{E-\theNbequa}{$\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}$}%
}{}
- \xintifboolexpr{\Coeffa=1}{}{%\ifnum\cmtd>1
+ \xintifboolexpr{\Coeffa==1}{}{%\ifnum\cmtd>1
\tikzmark{D-\theNbequa}\useKV[ClesEquation]{Lettre}&=\frac{\num{\Coeffb}}{\num{\Coeffa}}\tikzmark{H-\theNbequa}%\\
\ifboolKV[ClesEquation]{Fleches}{%
\leftcomment{C-\theNbequa}{D-\theNbequa}{A-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
@@ -280,6 +300,11 @@
\rightcomment{G-\theNbequa}{H-\theNbequa}{E-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
}{}
}
+ %% decimal
+ \ifboolKV[ClesEquation]{Decimal}{%
+ \\\useKV[ClesEquation]{Lettre}&=\num{\fpeval{\Coeffb/\Coeffa}}%
+ }{}%
+ % %%%
\ifboolKV[ClesEquation]{Entier}{%
\SSimpliTest{\Coeffb}{\Coeffa}%
\ifboolKV[ClesEquation]{Simplification}{%
@@ -289,30 +314,30 @@
}
\ifboolKV[ClesEquation]{Fleches}{\stepcounter{Nbequa}}{\ifboolKV[ClesEquation]{FlecheDiv}{\stepcounter{Nbequa}}{}}
\end{align*}
- \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\ifboolKV[ClesEquation]{LettreSol}{\useKV[ClesEquation]{Lettre}=}{}\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.%
+ \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\ifboolKV[ClesEquation]{LettreSol}{\useKV[ClesEquation]{Lettre}=}{}\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.%
}{}
}{%ax+b=cx+d avec a<c % Autre cas délicat
\begin{align*}%
- \tikzmark{A-\theNbequa}\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}\tikzmark{E-\theNbequa}\\
+ \tikzmark{A-\theNbequa}\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}\tikzmark{E-\theNbequa}\\
\ifboolKV[ClesEquation]{Decomposition}{%
- \xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\mathcolor{Cdecomp}{\xintifboolexpr{#2>0}{-\num{#2}\useKV[ClesEquation]{Lettre}}{+\num{\fpeval{0-#2}}\useKV[ClesEquation]{Lettre}}}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\mathcolor{Cdecomp}{\xintifboolexpr{#2>0}{-\num{#2}\useKV[ClesEquation]{Lettre}}{+\num{\fpeval{0-#2}}\useKV[ClesEquation]{Lettre}}}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}\\
+ \xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\mathcolor{Cdecomp}{\xintifboolexpr{#2>0}{-\num{#2}\useKV[ClesEquation]{Lettre}}{+\num{\fpeval{0-#2}}\useKV[ClesEquation]{Lettre}}}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\mathcolor{Cdecomp}{\xintifboolexpr{#2>0}{-\num{#2}\useKV[ClesEquation]{Lettre}}{+\num{\fpeval{0-#2}}\useKV[ClesEquation]{Lettre}}}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}\\
}{}
- \tikzmark{B-\theNbequa}\xdef\Coeffa{\fpeval{#4-#2}}\xintifboolexpr{#3>0}{\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}\tikzmark{F-\theNbequa}\\
+ \tikzmark{B-\theNbequa}\xdef\Coeffa{\fpeval{#4-#2}}\xintifboolexpr{#3>0}{\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{\Coeffa==1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}\tikzmark{F-\theNbequa}\\
\ifboolKV[ClesEquation]{Decomposition}{%
- \num{#3}\mathcolor{Cdecomp}{\xintifboolexpr{#5>0}{-\num{#5}}{+\num{\fpeval{0-#5}}}}&=\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}\mathcolor{Cdecomp}{\xintifboolexpr{#5>0}{-\num{#5}}{+\num{\fpeval{0-#5}}}}\\
+ \num{#3}\mathcolor{Cdecomp}{\xintifboolexpr{#5>0}{-\num{#5}}{+\num{\fpeval{0-#5}}}}&=\xintifboolexpr{\Coeffa==1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}\mathcolor{Cdecomp}{\xintifboolexpr{#5>0}{-\num{#5}}{+\num{\fpeval{0-#5}}}}\\
}{}%
- \tikzmark{C-\theNbequa}\xdef\Coeffb{\fpeval{#3-#5}}\num{\Coeffb}&=\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\tikzmark{G-\theNbequa}%\\
+ \tikzmark{C-\theNbequa}\xdef\Coeffb{\fpeval{#3-#5}}\num{\Coeffb}&=\xintifboolexpr{\Coeffa==1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\tikzmark{G-\theNbequa}%\\
% eric
- \ifboolKV[ClesEquation]{Decomposition}{\\\xintifboolexpr{\Coeffa=1}{}{\frac{\num{\Coeffb}}{\mathcolor{Cdecomp}{\num{\Coeffa}}}&=\frac{\num{\Coeffa}}{\mathcolor{Cdecomp}{\num{\Coeffa}}}\useKV[ClesEquation]{Lettre}}}{}
+ \ifboolKV[ClesEquation]{Decomposition}{\\\xintifboolexpr{\Coeffa==1}{}{\frac{\num{\Coeffb}}{\mathcolor{Cdecomp}{\num{\Coeffa}}}&=\frac{\num{\Coeffa}}{\mathcolor{Cdecomp}{\num{\Coeffa}}}\useKV[ClesEquation]{Lettre}}}{}
% eric
- \xintifboolexpr{\Coeffa=1}{}{\\}
+ \xintifboolexpr{\Coeffa==1}{}{\\}
\ifboolKV[ClesEquation]{Fleches}{%
\leftcomment{A-\theNbequa}{B-\theNbequa}{A-\theNbequa}{$\xintifboolexpr{#2>0}{-\num{#2}}{+\num{\fpeval{0-#2}}}\useKV[ClesEquation]{Lettre}$}
\rightcomment{E-\theNbequa}{F-\theNbequa}{E-\theNbequa}{$\xintifboolexpr{#2>0}{-\num{#2}}{+\num{\fpeval{0-#2}}}\useKV[ClesEquation]{Lettre}$}
\leftcomment{B-\theNbequa}{C-\theNbequa}{A-\theNbequa}{$\xintifboolexpr{#5>0}{-\num{#5}}{+\num{\fpeval{0-#5}}}$}%
\rightcomment{F-\theNbequa}{G-\theNbequa}{E-\theNbequa}{$\xintifboolexpr{#5>0}{-\num{#5}}{+\num{\fpeval{0-#5}}}$}%
}{}
- \xintifboolexpr{\Coeffa=1}{}{%\ifnum\cmtd>1
+ \xintifboolexpr{\Coeffa==1}{}{%\ifnum\cmtd>1
\tikzmark{D-\theNbequa}\frac{\num{\Coeffb}}{\num{\Coeffa}}&=\useKV[ClesEquation]{Lettre}\tikzmark{H-\theNbequa}%\\
\ifboolKV[ClesEquation]{Fleches}{%
\leftcomment{C-\theNbequa}{D-\theNbequa}{A-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
@@ -323,6 +348,11 @@
\rightcomment{G-\theNbequa}{H-\theNbequa}{E-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
}{}
}
+ %% decimal
+ \ifboolKV[ClesEquation]{Decimal}{%
+ \\\num{\fpeval{\Coeffb/\Coeffa}}&=\useKV[ClesEquation]{Lettre}%
+ }{}%
+ % %%%
\ifboolKV[ClesEquation]{Entier}{%
\SSimpliTest{\Coeffb}{\Coeffa}%
\ifboolKV[ClesEquation]{Simplification}{%
@@ -332,7 +362,7 @@
}
\ifboolKV[ClesEquation]{Fleches}{\stepcounter{Nbequa}}{\ifboolKV[ClesEquation]{FlecheDiv}{\stepcounter{Nbequa}}{}}
\end{align*}
- \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\ifboolKV[ClesEquation]{LettreSol}{\useKV[ClesEquation]{Lettre}=}{}\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.%
+ \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\ifboolKV[ClesEquation]{LettreSol}{\useKV[ClesEquation]{Lettre}=}{}\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.%
}{}%
}%
}%
diff --git a/macros/latex/contrib/profcollege/latex/PfCEquationSymbole1.tex b/macros/latex/contrib/profcollege/latex/PfCEquationSymbole1.tex
index 3cc345c524..f8313606e1 100644
--- a/macros/latex/contrib/profcollege/latex/PfCEquationSymbole1.tex
+++ b/macros/latex/contrib/profcollege/latex/PfCEquationSymbole1.tex
@@ -14,14 +14,19 @@
\fi
\else
% si non, on est dans le cas ax=d
- \xintifboolexpr{#2=0}{%
- \xintifboolexpr{#5=0}{%
+ \xintifboolexpr{#2==0}{%
+ \xintifboolexpr{#5==0}{%
L'équation $0\times\useKV[ClesEquation]{Lettre}=0$ a une infinité de solutions.}{L'équation $0\times\useKV[ClesEquation]{Lettre}=\num{#5}$ n'a aucune solution.}%
}{%\else
- \xintifboolexpr{#5=0}{L'équation $\num{#2}\times\useKV[ClesEquation]{Lettre}=0$ a une unique solution : $\useKV[ClesEquation]{Lettre}=0$.}{%\else
+ \xintifboolexpr{#5==0}{L'équation $\num{#2}\times\useKV[ClesEquation]{Lettre}=0$ a une unique solution : $\useKV[ClesEquation]{Lettre}=0$.}{%\else
\begin{align*}%
- \xintifboolexpr{#2=1}{\useKV[ClesEquation]{Lettre}}{\multido{\i=1+1}{\fpeval{#2-1}}{\useKV[ClesEquation]{Lettre}+}\useKV[ClesEquation]{Lettre}}&=\num{#5}\\
+ \xintifboolexpr{#2==1}{\useKV[ClesEquation]{Lettre}}{\multido{\i=1+1}{\fpeval{#2-1}}{\useKV[ClesEquation]{Lettre}+}\useKV[ClesEquation]{Lettre}}&=\num{#5}\\
\useKV[ClesEquation]{Lettre}&=\frac{\num{#5}}{\num{#2}}%\\
+ %% decimal
+ \ifboolKV[ClesEquation]{Decimal}{%
+ \\\useKV[ClesEquation]{Lettre}&=\num{\fpeval{#5/#2}}%
+ }{}%
+% %%%
\ifboolKV[ClesEquation]{Entier}{%
\SSimpliTest{#5}{#2}%
\ifboolKV[ClesEquation]{Simplification}{%
@@ -41,24 +46,29 @@
\ifx\bla#2\bla%On échange en faisant attention à ne pas boucler : c doit être non vide
\EquaDeuxSymbole[#1]{#4}{#5}{#2}{#3}
\else%cas ax+b=d
- \xintifboolexpr{#2=0}{%
- \xintifboolexpr{#3=#5}{%b=d
+ \xintifboolexpr{#2==0}{%
+ \xintifboolexpr{#3==#5}{%b=d
L'équation $\num{#3}=\num{#5}$ a une infinité de solutions.}%
{%b<>d
L'équation $\num{#3}=\num{#5}$ n'a aucune solution.%
}%
}{%ELSE
- \xintifboolexpr{#3=0}{%ax+b=d
+ \xintifboolexpr{#3==0}{%ax+b=d
\EquaBaseSymbole[#1]{#2}{}{}{#5}%
}{%ax+b=d$ Ici
\begin{align*}
- \xintifboolexpr{#2=1}{\useKV[ClesEquation]{Lettre}}{\multido{\i=1+1}{\fpeval{#2-1}}{\useKV[ClesEquation]{Lettre}+}\useKV[ClesEquation]{Lettre}}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\num{#5}\\
- \ifboolKV[ClesEquation]{Bloc}{\Fdash{$\xintifboolexpr{#2=1}{\useKV[ClesEquation]{Lettre}}{\multido{\i=1+1}{\fpeval{#2-1}}{\useKV[ClesEquation]{Lettre}+}\useKV[ClesEquation]{Lettre}}$}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\num{#5}\\}{}%
- \xdef\Coeffa{#2}\xdef\Coeffb{\fpeval{#5-#3}}\xintifboolexpr{\Coeffa=1}{\useKV[ClesEquation]{Lettre}}{\multido{\i=1+1}{\fpeval{#2-1}}{\useKV[ClesEquation]{Lettre}+}\useKV[ClesEquation]{Lettre}}&=\num{\Coeffb}%\\
- \xintifboolexpr{\Coeffa=1}{%
+ \xintifboolexpr{#2==1}{\useKV[ClesEquation]{Lettre}}{\multido{\i=1+1}{\fpeval{#2-1}}{\useKV[ClesEquation]{Lettre}+}\useKV[ClesEquation]{Lettre}}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\num{#5}\\
+ \ifboolKV[ClesEquation]{Bloc}{\Fdash{$\xintifboolexpr{#2==1}{\useKV[ClesEquation]{Lettre}}{\multido{\i=1+1}{\fpeval{#2-1}}{\useKV[ClesEquation]{Lettre}+}\useKV[ClesEquation]{Lettre}}$}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\num{#5}\\}{}%
+ \xdef\Coeffa{#2}\xdef\Coeffb{\fpeval{#5-#3}}\xintifboolexpr{\Coeffa==1}{\useKV[ClesEquation]{Lettre}}{\multido{\i=1+1}{\fpeval{#2-1}}{\useKV[ClesEquation]{Lettre}+}\useKV[ClesEquation]{Lettre}}&=\num{\Coeffb}%\\
+ \xintifboolexpr{\Coeffa==1}{%
}{%\ifnum\cmtd>1
\\
\useKV[ClesEquation]{Lettre}&=\frac{\num{\Coeffb}}{\num{\Coeffa}}%\\
+ %% decimal
+ \ifboolKV[ClesEquation]{Decimal}{%
+ \\\useKV[ClesEquation]{Lettre}&=\num{\fpeval{\Coeffb/\Coeffa}}%
+ }{}%
+ %%%
\ifboolKV[ClesEquation]{Entier}{%
\SSimpliTest{\Coeffb}{\Coeffa}%
\ifboolKV[ClesEquation]{Simplification}{%
@@ -83,14 +93,14 @@
\EquaTroisSymbole[#1]{#4}{#5}{#2}{}%
\fi
\else
- \xintifboolexpr{#2=0}{%b=cx
+ \xintifboolexpr{#2==0}{%b=cx
\EquaBaseSymbole[#1]{#4}{}{}{#3}
}{%
- \xintifboolexpr{#4=0}{%ax+b=0
+ \xintifboolexpr{#4==0}{%ax+b=0
\EquaDeuxSymbole[#1]{#2}{#3}{}{0}
}{%ax+b=cx
- \xintifboolexpr{#2=#4}{%
- \xintifboolexpr{#3=0}{%ax=ax
+ \xintifboolexpr{#2==#4}{%
+ \xintifboolexpr{#3==0}{%ax=ax
L'équation $\multido{\i=1+1}{\fpeval{#2-1}}{\useKV[ClesEquation]{Lettre}+}\useKV[ClesEquation]{Lettre}=\multido{\i=1+1}{\fpeval{#2-1}}{\useKV[ClesEquation]{Lettre}+}\useKV[ClesEquation]{Lettre}$ a une infinité de solutions.}%
{%ax+b=ax
L'équation $\multido{\i=1+1}{\fpeval{#2-1}}{\useKV[ClesEquation]{Lettre}+}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\multido{\i=1+1}{\fpeval{#2-1}}{\useKV[ClesEquation]{Lettre}+}\useKV[ClesEquation]{Lettre}$ n'a aucune solution.%
@@ -103,8 +113,13 @@
\xdef\Coeffa{\fpeval{#2-#4}}\multido{\i=1+1}{\fpeval{\Coeffa-1}}{\useKV[ClesEquation]{Lettre}+}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=0\\
\ifboolKV[ClesEquation]{Bloc}{\Fdash{\mathcolor{Csymbole}{$\multido{\i=1+1}{\fpeval{\Coeffa-1}}{\useKV[ClesEquation]{Lettre}+}\useKV[ClesEquation]{Lettre}$}}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=0\\}{}
\xdef\Coeffb{\fpeval{0-#3}}\multido{\i=1+1}{\fpeval{\Coeffa-1}}{\useKV[ClesEquation]{Lettre}+}\useKV[ClesEquation]{Lettre}&=\num{\Coeffb}%\\
- \xintifboolexpr{\Coeffa=1}{}{%\ifnum\cmtd>1
+ \xintifboolexpr{\Coeffa==1}{}{%\ifnum\cmtd>1
\\\useKV[ClesEquation]{Lettre}&=\frac{\num{\Coeffb}}{\num{\Coeffa}}%\\
+ %% decimal
+ \ifboolKV[ClesEquation]{Decimal}{%
+ \\\useKV[ClesEquation]{Lettre}&=\num{\fpeval{\Coeffb/\Coeffa}}%
+ }{}%
+ %%%
\ifboolKV[ClesEquation]{Entier}{%
\SSimpliTest{\Coeffb}{\Coeffa}%
\ifboolKV[ClesEquation]{Simplification}{%
@@ -118,8 +133,13 @@
\multido{\i=1+1}{\fpeval{#2-1}}{\useKV[ClesEquation]{Lettre}+}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\multido{\i=1+1}{\fpeval{#4-1}}{\useKV[ClesEquation]{Lettre}+}\useKV[ClesEquation]{Lettre}\\
\mathcolor{Csymbole}{\useKV[ClesEquation]{Lettre}\multido{\i=1+1}{\fpeval{#2-1}}{+\useKV[ClesEquation]{Lettre}}}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\mathcolor{Csymbole}{\useKV[ClesEquation]{Lettre}\multido{\i=1+1}{\fpeval{#2-1}}{+\useKV[ClesEquation]{Lettre}}}\multido{\i=1+1}{\fpeval{#4-#2}}{+\useKV[ClesEquation]{Lettre}}\\
\xdef\Coeffb{#3}\xdef\Coeffa{\fpeval{#4-#2}}\xintifboolexpr{#3>0}{\num{#3}}{-\num{\fpeval{0-#3}}}&=\multido{\i=1+1}{\fpeval{\Coeffa-1}}{\useKV[ClesEquation]{Lettre}+}\useKV[ClesEquation]{Lettre}% \\
- \xintifboolexpr{\Coeffa=1}{}{%\ifnum\cmtd>1
+ \xintifboolexpr{\Coeffa==1}{}{%\ifnum\cmtd>1
\\\frac{\num{\Coeffb}}{\num{\Coeffa}}&=\useKV[ClesEquation]{Lettre}%\\
+ %% decimal
+ \ifboolKV[ClesEquation]{Decimal}{%
+ \\\num{\fpeval{\Coeffb/\Coeffa}}&=\useKV[ClesEquation]{Lettre}%
+ }{}%
+ %%%
\ifboolKV[ClesEquation]{Entier}{%
\SSimpliTest{\Coeffb}{\Coeffa}%
\ifboolKV[ClesEquation]{Simplification}{%
@@ -135,14 +155,13 @@
\fi
}%
-
\newcommand{\ResolEquationSymbole}[5][]{%
\useKVdefault[ClesEquation]%
\setKV[ClesEquation]{#1}%
\setKV[ClesEquation]{Fleches=false,FlecheDiv=false,Terme=false,Decomposition=false}
- \xintifboolexpr{#2=0}{%
- \xintifboolexpr{#4=0}{%
- \xintifboolexpr{#3=#5}{%b=d
+ \xintifboolexpr{#2==0}{%
+ \xintifboolexpr{#4==0}{%
+ \xintifboolexpr{#3==#5}{%b=d
L'équation $\num{#3}=\num{#5}$ a une infinité de solutions.}%
{%b<>d
L'équation $\num{#3}=\num{#5}$ n'a aucune solution.%
@@ -152,24 +171,24 @@
\EquaDeuxSymbole[#1]{#4}{#5}{#2}{#3}%
}%
}{%
- \xintifboolexpr{#4=0}{%ax+b=0x+d
+ \xintifboolexpr{#4==0}{%ax+b=0x+d
\EquaDeuxSymbole[#1]{#2}{#3}{}{#5}%
}
{%ax+b=cx+d$
- \xintifboolexpr{#3=0}{%
- \xintifboolexpr{#5=0}{%ax=cx
+ \xintifboolexpr{#3==0}{%
+ \xintifboolexpr{#5==0}{%ax=cx
\EquaTroisSymbole[#1]{#2}{0}{#4}{}%
}%
{%ax=cx+d
\EquaTroisSymbole[#1]{#4}{#5}{#2}{}%
}%
}%
- {\xintifboolexpr{#5=0}{%ax+b=cx
+ {\xintifboolexpr{#5==0}{%ax+b=cx
\EquaTroisSymbole[#1]{#2}{#3}{#4}{}%
}%
{%ax+b=cx+d -- ici
- \xintifboolexpr{#2=#4}{%
- \xintifboolexpr{#3=#5}{%b=d
+ \xintifboolexpr{#2==#4}{%
+ \xintifboolexpr{#3==#5}{%b=d
L'équation $\multido{\i=1+1}{\fpeval{#2-1}}{\useKV[ClesEquation]{Lettre}+}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\multido{\i=1+1}{\fpeval{#4-1}}{\useKV[ClesEquation]{Lettre}+}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}$ a une infinité de solutions.}%
{%b<>d
L'équation $\multido{\i=1+1}{\fpeval{#2-1}}{\useKV[ClesEquation]{Lettre}+}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\multido{\i=1+1}{\fpeval{#4-1}}{\useKV[ClesEquation]{Lettre}+}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}$ n'a aucune solution.%
@@ -185,8 +204,13 @@
\Fdash{$\mathcolor{Csymbole}{\useKV[ClesEquation]{Lettre}\multido{\i=1+1}{\fpeval{\Coeffa-1}}{+\useKV[ClesEquation]{Lettre}}}$}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\num{#5}\\
}{}%
\xdef\Coeffb{\fpeval{#5-#3}}\useKV[ClesEquation]{Lettre}\multido{\i=1+1}{\fpeval{\Coeffa-1}}{+\useKV[ClesEquation]{Lettre}}&=\num{\Coeffb}%\\
- \xintifboolexpr{\Coeffa=1}{}{%\ifnum\cmtd>1
- \\\useKV[ClesEquation]{Lettre}&=\frac{\num{\Coeffb}}{\num{\Coeffa}}\tikzmark{H-\theNbequa}%\\
+ \xintifboolexpr{\Coeffa==1}{}{%\ifnum\cmtd>1
+ \\\useKV[ClesEquation]{Lettre}&=\frac{\num{\Coeffb}}{\num{\Coeffa}}%\\
+ %% decimal
+ \ifboolKV[ClesEquation]{Decimal}{%
+ \\\useKV[ClesEquation]{Lettre}&=\num{\fpeval{\Coeffb/\Coeffa}}%
+ }{}%
+ %%%
\ifboolKV[ClesEquation]{Entier}{%
\SSimpliTest{\Coeffb}{\Coeffa}%
\ifboolKV[ClesEquation]{Simplification}{%
@@ -204,8 +228,13 @@
\num{#3}&=\Fdash{$\mathcolor{Csymbole}{\useKV[ClesEquation]{Lettre}\multido{\i=1+1}{\fpeval{\Coeffa-1}}{+\useKV[ClesEquation]{Lettre}}}$}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}\\
}{}%
\xdef\Coeffb{\fpeval{#3-#5}}\num{\Coeffb}&=\useKV[ClesEquation]{Lettre}\multido{\i=1+1}{\fpeval{\Coeffa-1}}{+\useKV[ClesEquation]{Lettre}}%\\
- \xintifboolexpr{\Coeffa=1}{}{%\ifnum\cmtd>1
+ \xintifboolexpr{\Coeffa==1}{}{%\ifnum\cmtd>1
\\\frac{\num{\Coeffb}}{\num{\Coeffa}}&=\useKV[ClesEquation]{Lettre}%\\
+ %% decimal
+ \ifboolKV[ClesEquation]{Decimal}{%
+ \\\num{\fpeval{\Coeffb/\Coeffa}}&=\useKV[ClesEquation]{Lettre}%
+ }{}%
+ %%%
\ifboolKV[ClesEquation]{Entier}{%
\SSimpliTest{\Coeffb}{\Coeffa}%
\ifboolKV[ClesEquation]{Simplification}{%
diff --git a/macros/latex/contrib/profcollege/latex/PfCEquationTerme1.tex b/macros/latex/contrib/profcollege/latex/PfCEquationTerme1.tex
index 3b4cc18f27..80399dd3f4 100644
--- a/macros/latex/contrib/profcollege/latex/PfCEquationTerme1.tex
+++ b/macros/latex/contrib/profcollege/latex/PfCEquationTerme1.tex
@@ -6,39 +6,44 @@
\ifx\bla#2\bla%On échange en faisant attention à ne pas boucler : c doit être non vide
\EquaDeuxTerme[#1]{#4}{#5}{#2}{#3}
\else%cas ax+b=d
- \xintifboolexpr{#2=0}{%
- \xintifboolexpr{#3=#5}{%b=d
+ \xintifboolexpr{#2==0}{%
+ \xintifboolexpr{#3==#5}{%b=d
L'équation $\num{#3}=\num{#5}$ a une infinité de solutions.}%
{%b<>d
L'équation $\num{#3}=\num{#5}$ n'a aucune solution.%
}%
}{%ELSE
- \xintifboolexpr{#3=0}{%ax+b=d
+ \xintifboolexpr{#3==0}{%ax+b=d
\EquaBase[#1]{#2}{}{}{#5}%
}{%ax+b=d$ Ici
\ifboolKV[ClesEquation]{Decomposition}{\colorlet{Cterme}{\useKV[ClesEquation]{CouleurTerme}}}{}
\begin{align*}
- \tikzmark{A-\theNbequa}\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\num{#5}\tikzmark{E-\theNbequa}\\
- \xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}&=\num{#5}\mathcolor{Cterme}{\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}}\\
- \tikzmark{C-\theNbequa}\xdef\Coeffa{#2}\xdef\Coeffb{\fpeval{#5-#3}}\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}&=\num{\Coeffb}\tikzmark{G-\theNbequa}%\\
- \xintifboolexpr{\Coeffa=1}{}{\\}
+ \tikzmark{A-\theNbequa}\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\num{#5}\tikzmark{E-\theNbequa}\\
+ \xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}&=\num{#5}\mathcolor{Cterme}{\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}}\\
+ \tikzmark{C-\theNbequa}\xdef\Coeffa{#2}\xdef\Coeffb{\fpeval{#5-#3}}\xintifboolexpr{\Coeffa==1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}&=\num{\Coeffb}\tikzmark{G-\theNbequa}%\\
+ \xintifboolexpr{\Coeffa==1}{}{\\}
\ifboolKV[ClesEquation]{Fleches}{%
\leftcomment{A-\theNbequa}{C-\theNbequa}{A-\theNbequa}{$\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}$}%
\rightcomment{E-\theNbequa}{G-\theNbequa}{E-\theNbequa}{$\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}$}%
}{}
- \xintifboolexpr{\Coeffa=1}{%
+ \xintifboolexpr{\Coeffa==1}{%
}{%\ifnum\cmtd>1
\tikzmark{D-\theNbequa}\useKV[ClesEquation]{Lettre}&=\frac{\num{\Coeffb}}{\num{\Coeffa}}\tikzmark{H-\theNbequa}%\\
\ifboolKV[ClesEquation]{Fleches}{%
\leftcomment{C-\theNbequa}{D-\theNbequa}{A-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
\rightcomment{G-\theNbequa}{H-\theNbequa}{E-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
- }{%ICI ?
+ }{%
\ifboolKV[ClesEquation]{FlecheDiv}{%
\leftcomment{C-\theNbequa}{D-\theNbequa}{A-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
\rightcomment{G-\theNbequa}{H-\theNbequa}{E-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
}{}
}
}
+ %% decimal
+ \ifboolKV[ClesEquation]{Decimal}{%
+ \\\useKV[ClesEquation]{Lettre}&=\num{\fpeval{\Coeffb/\Coeffa}}%
+ }{}%
+ %%%
\ifboolKV[ClesEquation]{Entier}{%
\SSimpliTest{\Coeffb}{\Coeffa}%
\ifboolKV[ClesEquation]{Simplification}{%
@@ -47,7 +52,7 @@
}{}
\ifboolKV[ClesEquation]{Fleches}{\stepcounter{Nbequa}}{\ifboolKV[ClesEquation]{FlecheDiv}{\stepcounter{Nbequa}}{}}
\end{align*}
- \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\num{#5}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\ifboolKV[ClesEquation]{LettreSol}{\useKV[ClesEquation]{Lettre}=}{}\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.
+ \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\num{#5}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\ifboolKV[ClesEquation]{LettreSol}{\useKV[ClesEquation]{Lettre}=}{}\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.
}{}
}
}
@@ -64,46 +69,51 @@
\EquaTroisTerme[#1]{#4}{#5}{#2}{}%
\fi
\else
- \xintifboolexpr{#2=0}{%b=cx
+ \xintifboolexpr{#2==0}{%b=cx
\EquaBase[#1]{#4}{}{}{#3}
}{%
- \xintifboolexpr{#4=0}{%ax+b=0
+ \xintifboolexpr{#4==0}{%ax+b=0
\EquaDeuxTerme[#1]{#2}{#3}{}{0}
- }{%ax+b=cx
- \xintifboolexpr{#2=#4}{%
- \xintifboolexpr{#3=0}{%ax=ax
- L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}$ a une infinité de solutions.}%
- {%ax+b=ax
- L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}$ n'a aucune solution.%
- }%
- }{%% Cas délicat
- \xintifboolexpr{#2>#4}{%ax+b=cx avec a>c
- \ifboolKV[ClesEquation]{Decomposition}{\colorlet{Cterme}{\useKV[ClesEquation]{CouleurTerme}}}{}
- \begin{align*}
- \tikzmark{A-\theNbequa}\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\tikzmark{E-\theNbequa}\\
- \xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\mathcolor{Cterme}{\xintifboolexpr{#4>0}{-\num{#4}\useKV[ClesEquation]{Lettre}}{+\num{\fpeval{0-#4}}\useKV[ClesEquation]{Lettre}}}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=0\\
- \tikzmark{B-\theNbequa}\xdef\Coeffa{\fpeval{#2-#4}}\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=0\tikzmark{F-\theNbequa}\\
- \xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}&=0\mathcolor{Cterme}{\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}}\\
- \tikzmark{C-\theNbequa}\xdef\Coeffb{\fpeval{0-#3}}\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}&=\num{\Coeffb}\tikzmark{G-\theNbequa}%\\
- \xintifboolexpr{\Coeffa=1}{}{\\}
- \ifboolKV[ClesEquation]{Fleches}{%
- \leftcomment{A-\theNbequa}{B-\theNbequa}{A-\theNbequa}{$\xintifboolexpr{#4>0}{-\num{#4}}{+\num{\fpeval{0-#4}}}\useKV[ClesEquation]{Lettre}$}
- \rightcomment{E-\theNbequa}{F-\theNbequa}{E-\theNbequa}{$\xintifboolexpr{#4>0}{-\num{#4}}{+\num{\fpeval{0-#4}}}\useKV[ClesEquation]{Lettre}$}
- \leftcomment{B-\theNbequa}{C-\theNbequa}{A-\theNbequa}{$\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}$}%
- \rightcomment{F-\theNbequa}{G-\theNbequa}{E-\theNbequa}{$\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}$}%
- }{}
- \xintifboolexpr{\Coeffa=1}{}{%\ifnum\cmtd>1
- \tikzmark{D-\theNbequa}\useKV[ClesEquation]{Lettre}&=\frac{\num{\Coeffb}}{\num{\Coeffa}}\tikzmark{H-\theNbequa}%\\
- \ifboolKV[ClesEquation]{Fleches}{%
- \leftcomment{C-\theNbequa}{D-\theNbequa}{A-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
- \rightcomment{G-\theNbequa}{H-\theNbequa}{E-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
- }{
- \ifboolKV[ClesEquation]{FlecheDiv}{%
- \leftcomment{C-\theNbequa}{D-\theNbequa}{A-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
- \rightcomment{G-\theNbequa}{H-\theNbequa}{E-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
- }{}
- }
- \ifboolKV[ClesEquation]{Entier}{%
+ }{%ax+b=cx
+ \xintifboolexpr{#2==#4}{%
+ \xintifboolexpr{#3==0}{%ax=ax
+ L'équation $\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}$ a une infinité de solutions.}%
+ {%ax+b=ax
+ L'équation $\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}$ n'a aucune solution.%
+ }%
+ }{%% Cas délicat
+ \xintifboolexpr{#2>#4}{%ax+b=cx avec a>c
+ \ifboolKV[ClesEquation]{Decomposition}{\colorlet{Cterme}{\useKV[ClesEquation]{CouleurTerme}}}{}
+ \begin{align*}
+ \tikzmark{A-\theNbequa}\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\tikzmark{E-\theNbequa}\\
+ \xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\mathcolor{Cterme}{\xintifboolexpr{#4>0}{-\num{#4}\useKV[ClesEquation]{Lettre}}{+\num{\fpeval{0-#4}}\useKV[ClesEquation]{Lettre}}}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=0\\
+ \tikzmark{B-\theNbequa}\xdef\Coeffa{\fpeval{#2-#4}}\xintifboolexpr{\Coeffa==1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=0\tikzmark{F-\theNbequa}\\
+ \xintifboolexpr{\Coeffa==1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}&=0\mathcolor{Cterme}{\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}}\\
+ \tikzmark{C-\theNbequa}\xdef\Coeffb{\fpeval{0-#3}}\xintifboolexpr{\Coeffa==1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}&=\num{\Coeffb}\tikzmark{G-\theNbequa}%\\
+ \xintifboolexpr{\Coeffa==1}{}{\\}
+ \ifboolKV[ClesEquation]{Fleches}{%
+ \leftcomment{A-\theNbequa}{B-\theNbequa}{A-\theNbequa}{$\xintifboolexpr{#4>0}{-\num{#4}}{+\num{\fpeval{0-#4}}}\useKV[ClesEquation]{Lettre}$}
+ \rightcomment{E-\theNbequa}{F-\theNbequa}{E-\theNbequa}{$\xintifboolexpr{#4>0}{-\num{#4}}{+\num{\fpeval{0-#4}}}\useKV[ClesEquation]{Lettre}$}
+ \leftcomment{B-\theNbequa}{C-\theNbequa}{A-\theNbequa}{$\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}$}%
+ \rightcomment{F-\theNbequa}{G-\theNbequa}{E-\theNbequa}{$\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}$}%
+ }{}
+ \xintifboolexpr{\Coeffa==1}{}{%\ifnum\cmtd>1
+ \tikzmark{D-\theNbequa}\useKV[ClesEquation]{Lettre}&=\frac{\num{\Coeffb}}{\num{\Coeffa}}\tikzmark{H-\theNbequa}%\\
+ \ifboolKV[ClesEquation]{Fleches}{%
+ \leftcomment{C-\theNbequa}{D-\theNbequa}{A-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ \rightcomment{G-\theNbequa}{H-\theNbequa}{E-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ }{%
+ \ifboolKV[ClesEquation]{FlecheDiv}{%
+ \leftcomment{C-\theNbequa}{D-\theNbequa}{A-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ \rightcomment{G-\theNbequa}{H-\theNbequa}{E-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ }{}
+ }
+ %% decimal
+ \ifboolKV[ClesEquation]{Decimal}{%
+ \\\useKV[ClesEquation]{Lettre}&=\num{\fpeval{\Coeffb/\Coeffa}}%
+ }{}%
+ %%%
+ \ifboolKV[ClesEquation]{Entier}{%
\SSimpliTest{\Coeffb}{\Coeffa}%
\ifboolKV[ClesEquation]{Simplification}{%
\ifthenelse{\boolean{Simplification}}{\\\useKV[ClesEquation]{Lettre}&=\SSimplifie{\Coeffb}{\Coeffa}}{}%\\
@@ -112,29 +122,34 @@
}
\ifboolKV[ClesEquation]{Fleches}{\stepcounter{Nbequa}}{\ifboolKV[ClesEquation]{FlecheDiv}{\stepcounter{Nbequa}}{}}
\end{align*}
- \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\ifboolKV[ClesEquation]{LettreSol}{\useKV[ClesEquation]{Lettre}=}{}\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.}{}
+ \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\ifboolKV[ClesEquation]{LettreSol}{\useKV[ClesEquation]{Lettre}=}{}\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.}{}
}{%ax+b=cx+d avec a<c % Autre cas délicat
\ifboolKV[ClesEquation]{Decomposition}{\colorlet{Cterme}{\useKV[ClesEquation]{CouleurTerme}}}{}
\begin{align*}%
- \tikzmark{A-\theNbequa}\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\tikzmark{E-\theNbequa}\\
- \xintifboolexpr{#3>0}{\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\mathcolor{Cterme}{\xintifboolexpr{#2>0}{-\num{#2}\useKV[ClesEquation]{Lettre}}{+\num{\fpeval{0-#2}}\useKV[ClesEquation]{Lettre}}}\\
- \tikzmark{B-\theNbequa}\xdef\Coeffb{#3}\xdef\Coeffa{\fpeval{#4-#2}}\xintifboolexpr{#3>0}{\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\tikzmark{F-\theNbequa}
- \xintifboolexpr{\Coeffa=1}{}{\\}
+ \tikzmark{A-\theNbequa}\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\tikzmark{E-\theNbequa}\\
+ \xintifboolexpr{#3>0}{\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\mathcolor{Cterme}{\xintifboolexpr{#2>0}{-\num{#2}\useKV[ClesEquation]{Lettre}}{+\num{\fpeval{0-#2}}\useKV[ClesEquation]{Lettre}}}\\
+ \tikzmark{B-\theNbequa}\xdef\Coeffb{#3}\xdef\Coeffa{\fpeval{#4-#2}}\xintifboolexpr{#3>0}{\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{\Coeffa==1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\tikzmark{F-\theNbequa}
+ \xintifboolexpr{\Coeffa==1}{}{\\}
\ifboolKV[ClesEquation]{Fleches}{%
\leftcomment{A-\theNbequa}{B-\theNbequa}{A-\theNbequa}{$\xintifboolexpr{#2>0}{-\num{#2}}{+\num{\fpeval{0-#2}}}\useKV[ClesEquation]{Lettre}$}
\rightcomment{E-\theNbequa}{F-\theNbequa}{E-\theNbequa}{$\xintifboolexpr{#2>0}{-\num{#2}}{+\num{\fpeval{0-#2}}}\useKV[ClesEquation]{Lettre}$}
}{}
- \xintifboolexpr{\Coeffa=1}{}{%\ifnum\cmtd>1
+ \xintifboolexpr{\Coeffa==1}{}{%\ifnum\cmtd>1
\tikzmark{D-\theNbequa}\frac{\num{\Coeffb}}{\num{\Coeffa}}&=\useKV[ClesEquation]{Lettre}\tikzmark{H-\theNbequa}%\\
\ifboolKV[ClesEquation]{Fleches}{%
\leftcomment{B-\theNbequa}{D-\theNbequa}{A-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
- \rightcomment{F-\theNbequa}{H-\theNbequa}{E-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ \rightcomment{F-\theNbequa}{H-\theNbequa}{E-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
}{
\ifboolKV[ClesEquation]{FlecheDiv}{%
\leftcomment{B-\theNbequa}{D-\theNbequa}{A-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
- \rightcomment{F-\theNbequa}{H-\theNbequa}{E-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ \rightcomment{F-\theNbequa}{H-\theNbequa}{E-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
}{}
}
+ %% decimal
+ \ifboolKV[ClesEquation]{Decimal}{%
+ \\\num{\fpeval{\Coeffb/\Coeffa}}&=\useKV[ClesEquation]{Lettre}%
+ }{}%
+ %%%
\ifboolKV[ClesEquation]{Entier}{%
\SSimpliTest{\Coeffb}{\Coeffa}%
\ifboolKV[ClesEquation]{Simplification}{%
@@ -144,7 +159,7 @@
}
\ifboolKV[ClesEquation]{Fleches}{\stepcounter{Nbequa}}{\ifboolKV[ClesEquation]{FlecheDiv}{\stepcounter{Nbequa}}{}}
\end{align*}
- \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\ifboolKV[ClesEquation]{LettreSol}{\useKV[ClesEquation]{Lettre}=}{}\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.}{}%
+ \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\ifboolKV[ClesEquation]{LettreSol}{\useKV[ClesEquation]{Lettre}=}{}\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.}{}%
}%
}%
}%
@@ -155,9 +170,9 @@
\newcommand{\ResolEquationTerme}[5][]{%
\useKVdefault[ClesEquation]%
\setKV[ClesEquation]{#1}%
- \xintifboolexpr{#2=0}{%
- \xintifboolexpr{#4=0}{%
- \xintifboolexpr{#3=#5}{%b=d
+ \xintifboolexpr{#2==0}{%
+ \xintifboolexpr{#4==0}{%
+ \xintifboolexpr{#3==#5}{%b=d
L'équation $\num{#3}=\num{#5}$ a une infinité de solutions.}%
{%b<>d
L'équation $\num{#3}=\num{#5}$ n'a aucune solution.%
@@ -167,56 +182,61 @@
\EquaDeuxTerme[#1]{#4}{#5}{#2}{#3}%
}%
}{%
- \xintifboolexpr{#4=0}{%ax+b=0x+d
+ \xintifboolexpr{#4==0}{%ax+b=0x+d
\EquaDeuxTerme[#1]{#2}{#3}{}{#5}%
}
{%ax+b=cx+d$
- \xintifboolexpr{#3=0}{%
- \xintifboolexpr{#5=0}{%ax=cx
+ \xintifboolexpr{#3==0}{%
+ \xintifboolexpr{#5==0}{%ax=cx
\EquaTroisTerme[#1]{#2}{0}{#4}{}%
}%
{%ax=cx+d
\EquaTroisTerme[#1]{#4}{#5}{#2}{}%
}%
}%
- {\xintifboolexpr{#5=0}{%ax+b=cx
+ {\xintifboolexpr{#5==0}{%ax+b=cx
\EquaTroisTerme[#1]{#2}{#3}{#4}{}%
}%
{%ax+b=cx+d -- ici
- \xintifboolexpr{#2=#4}{%
- \xintifboolexpr{#3=#5}{%b=d
- L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}$ a une infinité de solutions.}%
+ \xintifboolexpr{#2==#4}{%
+ \xintifboolexpr{#3==#5}{%b=d
+ L'équation $\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}$ a une infinité de solutions.}%
{%b<>d
- L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}$ n'a aucune solution.%
+ L'équation $\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}$ n'a aucune solution.%
}%
}{
%% Cas délicat
\xintifboolexpr{#2>#4}{%ax+b=cx+d avec a>c
\ifboolKV[ClesEquation]{Decomposition}{\colorlet{Cterme}{\useKV[ClesEquation]{CouleurTerme}}}{}
\begin{align*}
- \tikzmark{A-\theNbequa}\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}\tikzmark{E-\theNbequa}\\
- \xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\mathcolor{Cterme}{\xintifboolexpr{#4>0}{-\num{#4}\useKV[ClesEquation]{Lettre}}{+\num{\fpeval{0-#4}}\useKV[ClesEquation]{Lettre}}}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{#5>0}{\num{#5}}{-\num{\fpeval{0-#5}}}\\
- \tikzmark{B-\theNbequa}\xdef\Coeffa{\fpeval{#2-#4}}\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\num{#5}\tikzmark{F-\theNbequa}\tikzmark{F-\theNbequa}\\
- \xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}&=\num{#5}\mathcolor{Cterme}{\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}}\\
- \tikzmark{C-\theNbequa}\xdef\Coeffb{\fpeval{#5-#3}}\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}&=\num{\Coeffb}\tikzmark{G-\theNbequa}%\\
- \xintifboolexpr{\Coeffa=1}{}{\\}
+ \tikzmark{A-\theNbequa}\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}\tikzmark{E-\theNbequa}\\
+ \xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\mathcolor{Cterme}{\xintifboolexpr{#4>0}{-\num{#4}\useKV[ClesEquation]{Lettre}}{+\num{\fpeval{0-#4}}\useKV[ClesEquation]{Lettre}}}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{#5>0}{\num{#5}}{-\num{\fpeval{0-#5}}}\\
+ \tikzmark{B-\theNbequa}\xdef\Coeffa{\fpeval{#2-#4}}\xintifboolexpr{\Coeffa==1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\num{#5}\tikzmark{F-\theNbequa}\tikzmark{F-\theNbequa}\\
+ \xintifboolexpr{\Coeffa==1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}&=\num{#5}\mathcolor{Cterme}{\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}}\\
+ \tikzmark{C-\theNbequa}\xdef\Coeffb{\fpeval{#5-#3}}\xintifboolexpr{\Coeffa==1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}&=\num{\Coeffb}\tikzmark{G-\theNbequa}%\\
+ \xintifboolexpr{\Coeffa==1}{}{\\}
\ifboolKV[ClesEquation]{Fleches}{%
\leftcomment{A-\theNbequa}{B-\theNbequa}{A-\theNbequa}{$\xintifboolexpr{#4>0}{-\num{#4}}{+\num{\fpeval{0-#4}}}\useKV[ClesEquation]{Lettre}$}
\rightcomment{E-\theNbequa}{F-\theNbequa}{E-\theNbequa}{$\xintifboolexpr{#4>0}{-\num{#4}}{+\num{\fpeval{0-#4}}}\useKV[ClesEquation]{Lettre}$}
\leftcomment{B-\theNbequa}{C-\theNbequa}{A-\theNbequa}{$\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}$}%
\rightcomment{F-\theNbequa}{G-\theNbequa}{E-\theNbequa}{$\xintifboolexpr{#3>0}{-\num{#3}}{+\num{\fpeval{0-#3}}}$}%
}{}
- \xintifboolexpr{\Coeffa=1}{}{%\ifnum\cmtd>1
+ \xintifboolexpr{\Coeffa==1}{}{%\ifnum\cmtd>1
\tikzmark{D-\theNbequa}\useKV[ClesEquation]{Lettre}&=\frac{\num{\Coeffb}}{\num{\Coeffa}}\tikzmark{H-\theNbequa}%\\
\ifboolKV[ClesEquation]{Fleches}{%
\leftcomment{C-\theNbequa}{D-\theNbequa}{A-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
- \rightcomment{G-\theNbequa}{H-\theNbequa}{E-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ \rightcomment{G-\theNbequa}{H-\theNbequa}{E-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
}{
\ifboolKV[ClesEquation]{FlecheDiv}{%
\leftcomment{C-\theNbequa}{D-\theNbequa}{A-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
- \rightcomment{G-\theNbequa}{H-\theNbequa}{E-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ \rightcomment{G-\theNbequa}{H-\theNbequa}{E-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
}{}
}
+ %% decimal
+ \ifboolKV[ClesEquation]{Decimal}{%
+ \\\useKV[ClesEquation]{Lettre}&=\num{\fpeval{\Coeffb/\Coeffa}}%
+ }{}%
+ %%%
\ifboolKV[ClesEquation]{Entier}{%
\SSimpliTest{\Coeffb}{\Coeffa}%
\ifboolKV[ClesEquation]{Simplification}{%
@@ -226,34 +246,39 @@
}
\ifboolKV[ClesEquation]{Fleches}{\stepcounter{Nbequa}}{\ifboolKV[ClesEquation]{FlecheDiv}{\stepcounter{Nbequa}}{}}
\end{align*}
- \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\ifboolKV[ClesEquation]{LettreSol}{\useKV[ClesEquation]{Lettre}=}{}\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.%
+ \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\ifboolKV[ClesEquation]{LettreSol}{\useKV[ClesEquation]{Lettre}=}{}\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.%
}{}
}{%ax+b=cx+d avec a<c % Autre cas délicat
\ifboolKV[ClesEquation]{Decomposition}{\colorlet{Cterme}{\useKV[ClesEquation]{CouleurTerme}}}{}
\begin{align*}%
- \tikzmark{A-\theNbequa}\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}\tikzmark{E-\theNbequa}\\
- \xintifboolexpr{#3>0}{\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\mathcolor{Cterme}{\xintifboolexpr{#2>0}{-\num{#2}\useKV[ClesEquation]{Lettre}}{+\num{\fpeval{0-#2}}\useKV[ClesEquation]{Lettre}}}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}\\
- \tikzmark{B-\theNbequa}\xdef\Coeffa{\fpeval{#4-#2}}\xintifboolexpr{#3>0}{\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}\tikzmark{F-\theNbequa}\\
- \num{#3}\mathcolor{Cterme}{\xintifboolexpr{#5>0}{-\num{#5}}{+\num{\fpeval{0-#5}}}}&=\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\\
- \tikzmark{C-\theNbequa}\xdef\Coeffb{\fpeval{#3-#5}}\num{\Coeffb}&=\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\tikzmark{G-\theNbequa}%\\
- \xintifboolexpr{\Coeffa=1}{}{\\}
+ \tikzmark{A-\theNbequa}\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}\tikzmark{E-\theNbequa}\\
+ \xintifboolexpr{#3>0}{\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\mathcolor{Cterme}{\xintifboolexpr{#2>0}{-\num{#2}\useKV[ClesEquation]{Lettre}}{+\num{\fpeval{0-#2}}\useKV[ClesEquation]{Lettre}}}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}\\
+ \tikzmark{B-\theNbequa}\xdef\Coeffa{\fpeval{#4-#2}}\xintifboolexpr{#3>0}{\num{#3}}{-\num{\fpeval{0-#3}}}&=\xintifboolexpr{\Coeffa==1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}\tikzmark{F-\theNbequa}\\
+ \num{#3}\mathcolor{Cterme}{\xintifboolexpr{#5>0}{-\num{#5}}{+\num{\fpeval{0-#5}}}}&=\xintifboolexpr{\Coeffa==1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\\
+ \tikzmark{C-\theNbequa}\xdef\Coeffb{\fpeval{#3-#5}}\num{\Coeffb}&=\xintifboolexpr{\Coeffa==1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}\tikzmark{G-\theNbequa}%\\
+ \xintifboolexpr{\Coeffa==1}{}{\\}
\ifboolKV[ClesEquation]{Fleches}{%
\leftcomment{A-\theNbequa}{B-\theNbequa}{A-\theNbequa}{$\xintifboolexpr{#2>0}{-\num{#2}}{+\num{\fpeval{0-#2}}}\useKV[ClesEquation]{Lettre}$}
\rightcomment{E-\theNbequa}{F-\theNbequa}{E-\theNbequa}{$\xintifboolexpr{#2>0}{-\num{#2}}{+\num{\fpeval{0-#2}}}\useKV[ClesEquation]{Lettre}$}
\leftcomment{B-\theNbequa}{C-\theNbequa}{A-\theNbequa}{$\xintifboolexpr{#5>0}{-\num{#5}}{+\num{\fpeval{0-#5}}}$}%
\rightcomment{F-\theNbequa}{G-\theNbequa}{E-\theNbequa}{$\xintifboolexpr{#5>0}{-\num{#5}}{+\num{\fpeval{0-#5}}}$}%
}{}
- \xintifboolexpr{\Coeffa=1}{}{%\ifnum\cmtd>1
+ \xintifboolexpr{\Coeffa==1}{}{%\ifnum\cmtd>1
\tikzmark{D-\theNbequa}\frac{\num{\Coeffb}}{\num{\Coeffa}}&=\useKV[ClesEquation]{Lettre}\tikzmark{H-\theNbequa}%\\
\ifboolKV[ClesEquation]{Fleches}{%
\leftcomment{C-\theNbequa}{D-\theNbequa}{A-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
- \rightcomment{G-\theNbequa}{H-\theNbequa}{E-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
- }{
+ \rightcomment{G-\theNbequa}{H-\theNbequa}{E-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ }{%
\ifboolKV[ClesEquation]{FlecheDiv}{%
\leftcomment{C-\theNbequa}{D-\theNbequa}{A-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
- \rightcomment{G-\theNbequa}{H-\theNbequa}{E-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
+ \rightcomment{G-\theNbequa}{H-\theNbequa}{E-\theNbequa}{$\div\xintifboolexpr{\Coeffa<0}{(\num{\Coeffa})}{\num{\Coeffa}}$}%
}{}
}
+ %% decimal
+ \ifboolKV[ClesEquation]{Decimal}{%
+ \\\num{\fpeval{\Coeffb/\Coeffa}}&=\useKV[ClesEquation]{Lettre}%
+ }{}%
+ %%%
\ifboolKV[ClesEquation]{Entier}{%
\SSimpliTest{\Coeffb}{\Coeffa}%
\ifboolKV[ClesEquation]{Simplification}{%
@@ -263,7 +288,7 @@
}
\ifboolKV[ClesEquation]{Fleches}{\stepcounter{Nbequa}}{\ifboolKV[ClesEquation]{FlecheDiv}{\stepcounter{Nbequa}}{}}
\end{align*}
- \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\ifboolKV[ClesEquation]{LettreSol}{\useKV[ClesEquation]{Lettre}=}{}\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.%
+ \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}=\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}$ a une unique solution : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\ifboolKV[ClesEquation]{LettreSol}{\useKV[ClesEquation]{Lettre}=}{}\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$.%
}{}%
}%
}%
diff --git a/macros/latex/contrib/profcollege/latex/ProfCollege.sty b/macros/latex/contrib/profcollege/latex/ProfCollege.sty
index 563ce3af32..e32797a1cf 100644
--- a/macros/latex/contrib/profcollege/latex/ProfCollege.sty
+++ b/macros/latex/contrib/profcollege/latex/ProfCollege.sty
@@ -3,7 +3,7 @@
% or later, see http://www.latex-project.org/lppl.txtf
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{ProfCollege}[2021/05/15 v0.99-b Aide pour l'utilisation de LaTeX au collège]
+\ProvidesPackage{ProfCollege}[2021/06/04 v0.99-d Aide pour l'utilisation de LaTeX au collège]
\RequirePackage{verbatim}
@@ -16,7 +16,7 @@
locale=FR,
detect-all,%
output-decimal-marker={,},%
- group-four-digits%
+ group-minimum-digits=4%
}
\DeclareSIUnit{\kmh}{\km\per\hour}
@@ -29,7 +29,7 @@
\DeclareSIUnit{\jour}{j}
\DeclareSIUnit{\quintal}{q}
\DeclareSIUnit{\octet}{o}
-\DeclareSIUnit{\fahrenheit}{\degree F}
+\DeclareSIUnit{\fahrenheit}{\text{\textdegree}F}
\DeclareSIUnit{\EuRo}{€}
\RequirePackage[table,svgnames]{xcolor}%Gestion des couleurs
@@ -139,7 +139,7 @@
%encadrer avec des "sommets arrondis"
\newsavebox{\logobox}
-\newcommand{\Logo}[2]{%
+\newcommand\Logo[2]{%
\setbox1=\hbox{\includegraphics[scale=#2]{#1}}
\begin{tikzpicture}%
\clip[rounded corners=5mm] (0,0) rectangle (\wd1,\ht1);
@@ -486,7 +486,7 @@
%%%
% Labyrinthe
%%%
-\setKVdefault[Labyrinthe]{Lignes=6,Colonnes=3,Longueur=4,Hauteur=2,Passages=false,EcartH=1,EcartV=1,CouleurF=gray!50,Texte=\color{black},SensImpose=false,Slop}
+\setKVdefault[Labyrinthe]{Lignes=6,Colonnes=3,Longueur=4,Hauteur=2,Passages=false,EcartH=1,EcartV=1,CouleurF=gray!50,Texte=\color{yellow},SensImpose=false,Slop}
\tikzset{FDirect/.style={-stealth}}
\tikzset{FIndirect/.style={stealth-}}
@@ -510,10 +510,10 @@
\xdef\TotalLaby{\fpeval{3*\useKV[Labyrinthe]{Colonnes}-2}}%
}%
\xdef\CouleurF{\useKV[Labyrinthe]{CouleurF}}%
- \xdef\MotifTexte{\useKV[Labyrinthe]{Texte}}%
- \xintifboolexpr{\ListeLabylen=\fpeval{\useKV[Labyrinthe]{Lignes}*\useKV[Labyrinthe]{Colonnes}}}{%
+ \xdef\MotifTexte{\noexpand\useKV[Labyrinthe]{Texte}}%
+ \xintifboolexpr{\ListeLabylen==\fpeval{\useKV[Labyrinthe]{Lignes}*\useKV[Labyrinthe]{Colonnes}}}{%
\begin{tikzpicture}[remember picture]%
- % on dessine les cadres
+% % on dessine les cadres
\foreach \compteurv in {1,...,\useKV[Labyrinthe]{Lignes}}{%
\foreach \compteurh in {1,...,\useKV[Labyrinthe]{Colonnes}}{%
\xdef\ColorFill{\ListeLaby[\fpeval{\useKV[Labyrinthe]{Colonnes}*(\compteurv-1)+\compteurh},2]}%
@@ -529,19 +529,19 @@
\foreach \compteurh in {1,...,\useKV[Labyrinthe]{Colonnes}}{%
\ifboolKV[Labyrinthe]{Passages}{%
\xdef\NomNode{\noexpand\ListeLabySol[\fpeval{\TotalLaby*(\compteurv-1)+\useKV[Labyrinthe]{Colonnes}+3*(\compteurh-1)},1]}%
- \xintifboolexpr{\ListeLabySol[\fpeval{\TotalLaby*(\compteurv-1)+\useKV[Labyrinthe]{Colonnes}+3*(\compteurh-1)},2]>0}{\xintifboolexpr{\ListeLabySol[\fpeval{\TotalLaby*(\compteurv-1)+\useKV[Labyrinthe]{Colonnes}+3*(\compteurh-1)},2]=1}{\xdef\NomStyle{FDirect}}{\xintifboolexpr{\ListeLabySol[\fpeval{\TotalLaby*(\compteurv-1)+\useKV[Labyrinthe]{Colonnes}+3*(\compteurh-1)},2]=2}{\xdef\NomStyle{FIndirect}}{\xdef\NomStyle{FBidirect}}}%
+ \xintifboolexpr{\ListeLabySol[\fpeval{\TotalLaby*(\compteurv-1)+\useKV[Labyrinthe]{Colonnes}+3*(\compteurh-1)},2]>0}{\xintifboolexpr{\ListeLabySol[\fpeval{\TotalLaby*(\compteurv-1)+\useKV[Labyrinthe]{Colonnes}+3*(\compteurh-1)},2]==1}{\xdef\NomStyle{FDirect}}{\xintifboolexpr{\ListeLabySol[\fpeval{\TotalLaby*(\compteurv-1)+\useKV[Labyrinthe]{Colonnes}+3*(\compteurh-1)},2]==2}{\xdef\NomStyle{FIndirect}}{\xdef\NomStyle{FBidirect}}}%
\draw[\CouleurF,line width=3pt,\NomStyle] (A-\compteurh-\compteurv) -- node[fill=white,midway,inner sep=2pt]{\MotifTexte\NomNode}(A-\compteurh-\fpeval{\compteurv+1});}{}%
}{%
\draw[\CouleurF,line width=3pt,FBidirect] (A-\compteurh-\compteurv) -- (A-\compteurh-\fpeval{\compteurv+1});%
}%
}%
}%
- % horizontales
+% % horizontales
\foreach \compteurv in {1,...,\useKV[Labyrinthe]{Lignes}}{%
\foreach \compteurh in {1,...,\fpeval{\useKV[Labyrinthe]{Colonnes}-1}}{%
\ifboolKV[Labyrinthe]{Passages}{%
\xdef\NomNode{\noexpand\ListeLabySol[\fpeval{\TotalLaby*(\compteurv-1)+\compteurh},1]}%
- \xintifboolexpr{\ListeLabySol[\fpeval{\TotalLaby*(\compteurv-1)+\compteurh},2]>0}{\xintifboolexpr{\ListeLabySol[\fpeval{\TotalLaby*(\compteurv-1)+\compteurh},2]=1}{\xdef\NomStyle{FDirect}}{\xintifboolexpr{\ListeLabySol[\fpeval{\TotalLaby*(\compteurv-1)+\compteurh},2]=2}{\xdef\NomStyle{FIndirect}}{\xdef\NomStyle{FBidirect}}}%
+ \xintifboolexpr{\ListeLabySol[\fpeval{\TotalLaby*(\compteurv-1)+\compteurh},2]>0}{\xintifboolexpr{\ListeLabySol[\fpeval{\TotalLaby*(\compteurv-1)+\compteurh},2]==1}{\xdef\NomStyle{FDirect}}{\xintifboolexpr{\ListeLabySol[\fpeval{\TotalLaby*(\compteurv-1)+\compteurh},2]==2}{\xdef\NomStyle{FIndirect}}{\xdef\NomStyle{FBidirect}}}%
\draw[\CouleurF,line width=3pt,\NomStyle](A-\compteurh-\compteurv) -- node[fill=white,midway,\LabySlop,inner sep=2pt]{\MotifTexte\NomNode}(A-\fpeval{\compteurh+1}-\compteurv);}{}
}{%
\draw[\CouleurF,line width=3pt,FBidirect](A-\compteurh-\compteurv) -- (A-\fpeval{\compteurh+1}-\compteurv);%
@@ -553,7 +553,7 @@
\foreach \compteurh in {1,...,\fpeval{\useKV[Labyrinthe]{Colonnes}-1}}{%
\ifboolKV[Labyrinthe]{Passages}{%
\xdef\NomNode{\noexpand\ListeLabySol[\fpeval{\TotalLaby*(\compteurv-2)+\useKV[Labyrinthe]{Colonnes}+3*(\compteurh-1)+2},1]}%
- \xintifboolexpr{\ListeLabySol[\fpeval{\TotalLaby*(\compteurv-2)+\useKV[Labyrinthe]{Colonnes}+3*(\compteurh-1)+2},2]>0}{\xintifboolexpr{\ListeLabySol[\fpeval{\TotalLaby*(\compteurv-2)+\useKV[Labyrinthe]{Colonnes}+3*(\compteurh-1)+2},2]=1}{\xdef\NomStyle{FDirect}}{\xintifboolexpr{\ListeLabySol[\fpeval{\TotalLaby*(\compteurv-2)+\useKV[Labyrinthe]{Colonnes}+3*(\compteurh-1)+2},2]=2}{\xdef\NomStyle{FIndirect}}{\xdef\NomStyle{FBidirect}}}%
+ \xintifboolexpr{\ListeLabySol[\fpeval{\TotalLaby*(\compteurv-2)+\useKV[Labyrinthe]{Colonnes}+3*(\compteurh-1)+2},2]>0}{\xintifboolexpr{\ListeLabySol[\fpeval{\TotalLaby*(\compteurv-2)+\useKV[Labyrinthe]{Colonnes}+3*(\compteurh-1)+2},2]==1}{\xdef\NomStyle{FDirect}}{\xintifboolexpr{\ListeLabySol[\fpeval{\TotalLaby*(\compteurv-2)+\useKV[Labyrinthe]{Colonnes}+3*(\compteurh-1)+2},2]==2}{\xdef\NomStyle{FIndirect}}{\xdef\NomStyle{FBidirect}}}%
\draw[\CouleurF,line width=3pt,\NomStyle] (A-\compteurh-\compteurv) -- node[fill=white,near start,\LabySlop,inner sep=2pt]{\MotifTexte\NomNode}(A-\fpeval{\compteurh+1}-\fpeval{\compteurv-1});
}{}
}{%
@@ -561,18 +561,17 @@
}%
}%
}%
-% % diagonales directes
+%% % diagonales directes
\foreach \compteurv in {1,...,\fpeval{\useKV[Labyrinthe]{Lignes}-1}}{%
\foreach \compteurh in {1,...,\fpeval{\useKV[Labyrinthe]{Colonnes}-1}}{%
\ifboolKV[Labyrinthe]{Passages}{%
\xdef\NomNode{\noexpand\ListeLabySol[\fpeval{\TotalLaby*(\compteurv-1)+\useKV[Labyrinthe]{Colonnes}+3*(\compteurh-1)+1},1]}%
\xintifboolexpr{\ListeLabySol[\fpeval{\TotalLaby*(\compteurv-1)+\useKV[Labyrinthe]{Colonnes}+3*(\compteurh-1)+1},2]>0}{%
- \xintifboolexpr{\ListeLabySol[\fpeval{\TotalLaby*(\compteurv-1)+\useKV[Labyrinthe]{Colonnes}+3*(\compteurh-1)+1},2]=1}{\xdef\NomStyle{FDirect}}{\xintifboolexpr{\ListeLabySol[\fpeval{\TotalLaby*(\compteurv-1)+\useKV[Labyrinthe]{Colonnes}+3*(\compteurh-1)+1},2]=2}{\xdef\NomStyle{FIndirect}}{\xdef\NomStyle{FBidirect}}}
+ \xintifboolexpr{\ListeLabySol[\fpeval{\TotalLaby*(\compteurv-1)+\useKV[Labyrinthe]{Colonnes}+3*(\compteurh-1)+1},2]==1}{\xdef\NomStyle{FDirect}}{\xintifboolexpr{\ListeLabySol[\fpeval{\TotalLaby*(\compteurv-1)+\useKV[Labyrinthe]{Colonnes}+3*(\compteurh-1)+1},2]==2}{\xdef\NomStyle{FIndirect}}{\xdef\NomStyle{FBidirect}}}
\draw[\CouleurF,line width=3pt,\NomStyle] (A-\compteurh-\compteurv) -- node[fill=white,near start,\LabySlop,inner sep=2pt]{\MotifTexte\NomNode}(A-\fpeval{\compteurh+1}-\fpeval{\compteurv+1});
}{}%
}{%
\draw[\CouleurF,line width=3pt,FBidirect] (A-\compteurh-\compteurv) -- node[fill=white,near start,\LabySlop]{\MotifTexte\NomNode}(A-\fpeval{\compteurh+1}-\fpeval{\compteurv+1});
-% }{}%
}%
}%
}%
@@ -590,7 +589,7 @@
\foreach \compteurv in {1,...,\useKV[Labyrinthe]{Lignes}}{%
\foreach \compteurh in {1,...,\fpeval{\useKV[Labyrinthe]{Colonnes}-1}}{%
\ifboolKV[Labyrinthe]{Passages}{%
- \xdef\NomNode{\ListeLabySol[1,\fpeval{\TotalLaby*(\compteurv-1)+\compteurh}]}%
+ \xdef\NomNode{\noexpand\ListeLabySol[1,\fpeval{\TotalLaby*(\compteurv-1)+\compteurh}]}%
\draw[\CouleurF,line width=3pt,stealth-stealth]
(A-\compteurh-\compteurv) -- node[fill=white,midway]{\MotifTexte\NomNode}(A-\fpeval{\compteurh+1}-\compteurv);
}{%
@@ -607,18 +606,19 @@
\foreach \compteurv in {1,...,\fpeval{\useKV[Labyrinthe]{Lignes}-1}}{%
\foreach \compteurh in {1,...,\fpeval{\useKV[Labyrinthe]{Colonnes}-1}}{%
\ifboolKV[Labyrinthe]{Passages}{%
- \xdef\NomNode{\ListeLabySol[1,\fpeval{\TotalLaby*(\compteurv-1)+\useKV[Labyrinthe]{Colonnes}+2*(\compteurh-1)+1}]}%
+ \xdef\NomNode{\noexpand\ListeLabySol[1,\fpeval{\TotalLaby*(\compteurv-1)+\useKV[Labyrinthe]{Colonnes}+2*(\compteurh-1)+1}]}%
\draw[\CouleurF,line width=3pt,stealth-stealth] (A-\compteurh-\compteurv) -- node[fill=white,midway]{\MotifTexte\NomNode}(A-\fpeval{\compteurh+1}-\fpeval{\compteurv+1});
}{%
\draw[\CouleurF,line width=3pt,stealth-stealth] (A-\compteurh-\compteurv) -- (A-\fpeval{\compteurh+1}-\fpeval{\compteurv+1});
}%
}%
}%
- % fin des fl\`eches
+% % fin des fl\`eches
}
- \end{tikzpicture}
- }{\textbf{! Le nombre d'informations n'est pas compatible avec les
- d\'efinitions de {\ttfamily Colonnes} et {\ttfamily Lignes} !}}%
+ \end{tikzpicture}
+ }{
+ \textbf{! Le nombre d'informations n'est pas compatible avec les
+ d\'efinitions de {\ttfamily Colonnes} et {\ttfamily Lignes} !}}%
}
%%%
@@ -758,7 +758,7 @@
}{%
\setsepchar[*]{,*/}%
\readlist\ListeCalc{#2}%
- \foreachitem\compteur\in\ListeCalc{\xintifboolexpr{\listlen\ListeCalc[\compteurcnt]=2}{\Longstack{{\tiny\ListeCalc[\compteurcnt,1]} \KN{\ListeCalc[\compteurcnt,2]}}}{\Longstack{{\tiny\ListeCalc[\compteurcnt,2]} \KY{\ListeCalc[\compteurcnt,3]}}}%
+ \foreachitem\compteur\in\ListeCalc{\xintifboolexpr{\listlen\ListeCalc[\compteurcnt]==2}{\Longstack{{\tiny\ListeCalc[\compteurcnt,1]} \KN{\ListeCalc[\compteurcnt,2]}}}{\Longstack{{\tiny\ListeCalc[\compteurcnt,2]} \KY{\ListeCalc[\compteurcnt,3]}}}%
}%
}%
\setstackgap{L}{\baselineskip}%
@@ -991,11 +991,11 @@
\begin{tikzpicture}%
\begin{scope}[start chain=transition going right,node distance=-\pgflinewidth]%
\foreach \s in {1,...,\ListeFlashlen}{%
- \xintifboolexpr{\s = 1}{%
+ \xintifboolexpr{\s == 1}{%
\node[arrow,on chain] {\Huge\bfseries\ListeFlash[\s]};%
\ifboolKV[ClesFlash]{Pause}{\pause}{}%
}{%
- \xintifboolexpr{\s = \ListeFlashlen}{%
+ \xintifboolexpr{\s == \ListeFlashlen}{%
\node[arrow,on chain] {\Huge\bfseries?};%
}{%
\node[arrow,on chain] {\ListeFlash[\s]};%
@@ -2428,10 +2428,10 @@
%%%
% QCM
%%%
-\setKVdefault[ClesQCM]{Reponses=3,Solution=false,Stretch=1,Largeur=2cm,Couleur=gray!15,Titre=false,Nom=R\'eponse,NomV=Vrai,NomF=Faux,Alph=false,AlphT=false,VF=false,Depart=1,Alterne=false,Noms={A/B/C},Multiple=false}
-\newlength{\LargeurQCM}
-\newcounter{QuestionQCM}
-\newcounter{TitreQCM}
+\setKVdefault[ClesQCM]{Reponses=3,Solution=false,Stretch=1,Largeur=2cm,Couleur=gray!15,Titre=false,Nom=R\'eponse,NomV=Vrai,NomF=Faux,Alph=false,AlphT=false,VF=false,Depart=1,Alterne=false,Noms={A/B/C},Multiple=false}%
+\newlength{\LargeurQCM}%
+\newcounter{QuestionQCM}%
+\newcounter{TitreQCM}%
\newcommand\QCM[2][]{%
\useKVdefault[ClesQCM]%
\setKV[ClesQCM]{#1}%
@@ -2454,7 +2454,7 @@
\hline%
\xintFor* ##1 in {\xintSeq {1}{\ListeQCMlen}}\do{%
\stepcounter{QuestionQCM}\ifboolKV[ClesQCM]{Alterne}{\modulo{\theQuestionQCM}{2}\ifnum\remainder=0\cellcolor{gray!15}\fi}{}\ifboolKV[ClesQCM]{Alph}{\textbf{\Alph{QuestionQCM}}/}{\textbf{\theQuestionQCM/}}~\ListeQCM[##1,1]\xintFor* ##2 in {\xintSeq {1}{\useKV[ClesQCM]{Reponses}}}\do{%
- &\ifboolKV[ClesQCM]{Alterne}{\modulo{\theQuestionQCM}{2}\ifnum\remainder=0\cellcolor{gray!15}\fi}{}\ifboolKV[ClesQCM]{Solution}{\xintifboolexpr{\ListeQCM[##1,\fpeval{##2+1}]=1}{$\boxtimes$}{$\square$}}{$\square$}%
+ &\ifboolKV[ClesQCM]{Alterne}{\modulo{\theQuestionQCM}{2}\ifnum\remainder=0\cellcolor{gray!15}\fi}{}\ifboolKV[ClesQCM]{Solution}{\xintifboolexpr{\ListeQCM[##1,\fpeval{##2+1}]==1}{$\boxtimes$}{$\square$}}{$\square$}%
}\\
}%
\hline%
@@ -2471,7 +2471,7 @@
\hline%
\xintFor* ##1 in {\xintSeq {1}{\ListeQCMlen}}\do{%
\stepcounter{QuestionQCM}\ifboolKV[ClesQCM]{Alterne}{\modulo{\theQuestionQCM}{2}\ifnum\remainder=0\cellcolor{gray!15}\fi}{}\ifboolKV[ClesQCM]{Alph}{\textbf{\Alph{QuestionQCM}}/}{\textbf{\theQuestionQCM/}}~\ListeQCM[##1,1]\xintFor* ##2 in {\xintSeq {1}{\useKV[ClesQCM]{Reponses}}}\do{%
- &\ifboolKV[ClesQCM]{Alterne}{\modulo{\theQuestionQCM}{2}\ifnum\remainder=0\cellcolor{gray!15}\fi}{}\ifboolKV[ClesQCM]{Solution}{\xintifboolexpr{##2=\ListeQCM[##1,2]}{$\boxtimes$}{$\square$}}{$\square$}%
+ &\ifboolKV[ClesQCM]{Alterne}{\modulo{\theQuestionQCM}{2}\ifnum\remainder=0\cellcolor{gray!15}\fi}{}\ifboolKV[ClesQCM]{Solution}{\xintifboolexpr{##2==\ListeQCM[##1,2]}{$\boxtimes$}{$\square$}}{$\square$}%
}\\
}%
\hline%
@@ -2489,7 +2489,7 @@
\hline%
\xintFor* ##1 in {\xintSeq {1}{\ListeQCMlen}}\do{%
\stepcounter{QuestionQCM}\ifboolKV[ClesQCM]{Alterne}{\modulo{\theQuestionQCM}{2}\ifnum\remainder=0\cellcolor{gray!15}\fi}{}\ifboolKV[ClesQCM]{Alph}{\textbf{\Alph{QuestionQCM}}/}{\textbf{\theQuestionQCM/}}~\ListeQCM[##1,1]\xintFor* ##2 in {\xintSeq {1}{\useKV[ClesQCM]{Reponses}}}\do{%
- &\ifboolKV[ClesQCM]{Alterne}{\modulo{\theQuestionQCM}{2}\ifnum\remainder=0\cellcolor{gray!15}\fi}{}\ifboolKV[ClesQCM]{Solution}{\xdef\NumeroReponse{\fpeval{\useKV[ClesQCM]{Reponses}+2}}\xintifboolexpr{##2=\ListeQCM[##1,\NumeroReponse]}{\cellcolor{\useKV[ClesQCM]{Couleur}}}{}}{}\ListeQCM[##1,##2+1]%
+ &\ifboolKV[ClesQCM]{Alterne}{\modulo{\theQuestionQCM}{2}\ifnum\remainder=0\cellcolor{gray!15}\fi}{}\ifboolKV[ClesQCM]{Solution}{\xdef\NumeroReponse{\fpeval{\useKV[ClesQCM]{Reponses}+2}}\xintifboolexpr{##2==\ListeQCM[##1,\NumeroReponse]}{\cellcolor{\useKV[ClesQCM]{Couleur}}}{}}{}\ListeQCM[##1,##2+1]%
}\\
}%
\hline%
@@ -2498,7 +2498,7 @@
}%
}
-\newcommand\QCMVar[2][]{%
+\newcommand\QCMPfC[2][]{%
\useKVdefault[ClesQCM]%
\setKV[ClesQCM]{#1}%
\setcounter{QuestionQCM}{\fpeval{\useKV[ClesQCM]{Depart}-1}}%
@@ -2520,7 +2520,7 @@
\hline%
\xintFor* ##1 in {\xintSeq {1}{\ListeQCMlen}}\do{%
\stepcounter{QuestionQCM}\ifboolKV[ClesQCM]{Alterne}{\modulo{\theQuestionQCM}{2}\ifnum\remainder=0\cellcolor{gray!15}\fi}{}\ifboolKV[ClesQCM]{Alph}{\textbf{\Alph{QuestionQCM}}/}{\textbf{\theQuestionQCM/}}~\ListeQCM[##1,1]\xintFor* ##2 in {\xintSeq {1}{\useKV[ClesQCM]{Reponses}}}\do{%
- &\ifboolKV[ClesQCM]{Alterne}{\modulo{\theQuestionQCM}{2}\ifnum\remainder=0\cellcolor{gray!15}\fi}{}\ifboolKV[ClesQCM]{Solution}{\xintifboolexpr{\ListeQCM[##1,\fpeval{##2+1}]=1}{$\boxtimes$}{$\square$}}{$\square$}%
+ &\ifboolKV[ClesQCM]{Alterne}{\modulo{\theQuestionQCM}{2}\ifnum\remainder=0\cellcolor{gray!15}\fi}{}\ifboolKV[ClesQCM]{Solution}{\xintifboolexpr{\ListeQCM[##1,\fpeval{##2+1}]==1}{$\boxtimes$}{$\square$}}{$\square$}%
}\\
}%
\hline%
@@ -2537,7 +2537,7 @@
\hline%
\xintFor* ##1 in {\xintSeq {1}{\ListeQCMlen}}\do{%
\stepcounter{QuestionQCM}\ifboolKV[ClesQCM]{Alterne}{\modulo{\theQuestionQCM}{2}\ifnum\remainder=0\cellcolor{gray!15}\fi}{}\ifboolKV[ClesQCM]{Alph}{\textbf{\Alph{QuestionQCM}}/}{\textbf{\theQuestionQCM/}}~\ListeQCM[##1,1]\xintFor* ##2 in {\xintSeq {1}{\useKV[ClesQCM]{Reponses}}}\do{%
- &\ifboolKV[ClesQCM]{Alterne}{\modulo{\theQuestionQCM}{2}\ifnum\remainder=0\cellcolor{gray!15}\fi}{}\ifboolKV[ClesQCM]{Solution}{\xintifboolexpr{##2=\ListeQCM[##1,2]}{$\boxtimes$}{$\square$}}{$\square$}%
+ &\ifboolKV[ClesQCM]{Alterne}{\modulo{\theQuestionQCM}{2}\ifnum\remainder=0\cellcolor{gray!15}\fi}{}\ifboolKV[ClesQCM]{Solution}{\xintifboolexpr{##2==\ListeQCM[##1,2]}{$\boxtimes$}{$\square$}}{$\square$}%
}\\
}%
\hline%
@@ -2555,7 +2555,7 @@
\hline%
\xintFor* ##1 in {\xintSeq {1}{\ListeQCMlen}}\do{%
\stepcounter{QuestionQCM}\ifboolKV[ClesQCM]{Alterne}{\modulo{\theQuestionQCM}{2}\ifnum\remainder=0\cellcolor{gray!15}\fi}{}\ifboolKV[ClesQCM]{Alph}{\textbf{\Alph{QuestionQCM}}/}{\textbf{\theQuestionQCM/}}~\ListeQCM[##1,1]\xintFor* ##2 in {\xintSeq {1}{\useKV[ClesQCM]{Reponses}}}\do{%
- &\ifboolKV[ClesQCM]{Alterne}{\modulo{\theQuestionQCM}{2}\ifnum\remainder=0\cellcolor{gray!15}\fi}{}\ifboolKV[ClesQCM]{Solution}{\xdef\NumeroReponse{\fpeval{\useKV[ClesQCM]{Reponses}+2}}\xintifboolexpr{##2=\ListeQCM[##1,\NumeroReponse]}{\cellcolor{\useKV[ClesQCM]{Couleur}}}{}}{}\ListeQCM[##1,##2+1]%
+ &\ifboolKV[ClesQCM]{Alterne}{\modulo{\theQuestionQCM}{2}\ifnum\remainder=0\cellcolor{gray!15}\fi}{}\ifboolKV[ClesQCM]{Solution}{\xdef\NumeroReponse{\fpeval{\useKV[ClesQCM]{Reponses}+2}}\xintifboolexpr{##2==\ListeQCM[##1,\NumeroReponse]}{\cellcolor{\useKV[ClesQCM]{Couleur}}}{}}{}\ListeQCM[##1,##2+1]%
}\\
}%
\hline%
@@ -3106,7 +3106,7 @@
\ifboolKV[ClesPythagore]{Perso}{\RedactionPythagore}{\ifboolKV[ClesPythagore]{Egalite}{Comme le triangle $#2$ est rectangle en $\NomB$, alors l'\'egalit\'e de Pythagore est v\'erifi\'ee :}{Dans le triangle $#2$ rectangle en $\NomB$, le th\'eor\`eme de Pythagore permet d'\'ecrire :%
}%
}%
- \xintifboolexpr{#3<#4 || #3=#4}{%\ifnum#3<#4%
+ \xintifboolexpr{#3<#4 || #3==#4}{%\ifnum#3<#4%
\xdef\ResultatPytha{\fpeval{round(sqrt(#3^2+#4^2),\useKV[ClesPythagore]{Precision})}}%
\xdef\ResultatPytha{\fpeval{round(sqrt(#3^2+#4^2),\useKV[ClesPythagore]{Precision})}}%
\begin{align*}
@@ -3138,7 +3138,7 @@
% On d\'emarre la r\'esolution
\ifboolKV[ClesPythagore]{Perso}{\RedactionPythagore}{\ifboolKV[ClesPythagore]{Egalite}{Comme le triangle $#2$ est rectangle en $\NomB$, alors l'\'egalit\'e de Pythagore est v\'erifi\'ee :}{Dans le triangle $#2$ rectangle en $\NomB$, le th\'eor\`eme de Pythagore permet d'\'ecrire :%
}}%
- \xintifboolexpr{#3<#4 || #3=#4}{%\ifnum#3<#4%
+ \xintifboolexpr{#3<#4 || #3==#4}{%\ifnum#3<#4%
\xdef\ResultatPytha{\fpeval{round(sqrt(#3^2+#4^2),\useKV[ClesPythagore]{Precision})}}%
\begin{align*}
\NomA\NomC^2&=\NomA\NomB^2+\NomB\NomC^2\\
@@ -3548,14 +3548,14 @@
\def\LETTRE{\useKV[ClesDistributivite]{Lettre}}%
\ensuremath{%
% partie du x^2
- \xintifboolexpr{#2=0}{}{\xintifboolexpr{#2=1}{}{\xintifboolexpr{#2=-1}{-}{\num{#2}}}\LETTRE^2}%
+ \xintifboolexpr{#2==0}{}{\xintifboolexpr{#2==1}{}{\xintifboolexpr{#2==-1}{-}{\num{#2}}}\LETTRE^2}%
% partie du x
- \xintifboolexpr{#3=0}{}{\xintifboolexpr{#3>0}{\xintifboolexpr{#2=0}{}{+}\xintifboolexpr{#3=1}{}{\num{#3}}}{%
- \xintifboolexpr{#2=0}{\xintifboolexpr{#3=-1}{-}{\num{#3}}}{\xintifboolexpr{#3=-1}{-}{-\num{\fpeval{abs(#3)}}}}%
+ \xintifboolexpr{#3==0}{}{\xintifboolexpr{#3>0}{\xintifboolexpr{#2==0}{}{+}\xintifboolexpr{#3==1}{}{\num{#3}}}{%
+ \xintifboolexpr{#2==0}{\xintifboolexpr{#3==-1}{-}{\num{#3}}}{\xintifboolexpr{#3==-1}{-}{-\num{\fpeval{abs(#3)}}}}%
}\LETTRE}%
% partie du nombre
- \xintifboolexpr{#4=0}{}{\xintifboolexpr{#4>0}{\xintifboolexpr{#2=0}{\xintifboolexpr{#3=0}{}{+}}{+}\num{#4}}{%
- \xintifboolexpr{#2=0}{\xintifboolexpr{#3=0}{\num{#4}}{-\num{\fpeval{abs(#4)}}}}{-\num{\fpeval{abs(#4)}}}}}%
+ \xintifboolexpr{#4==0}{}{\xintifboolexpr{#4>0}{\xintifboolexpr{#2==0}{\xintifboolexpr{#3==0}{}{+}}{+}\num{#4}}{%
+ \xintifboolexpr{#2==0}{\xintifboolexpr{#3==0}{\num{#4}}{-\num{\fpeval{abs(#4)}}}}{-\num{\fpeval{abs(#4)}}}}}%
%
}%
}%
@@ -3582,11 +3582,11 @@
\DistriEchange[#1]{#2}{#3}{#4}{#5}%
}{%
\ifboolKV[ClesDistributivite]{Remarquable}{%
- \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=1}{%
+ \xintifboolexpr{\useKV[ClesDistributivite]{Etape}==1}{%
\ifx\bla#4\bla(\Affichage{0}{#2}{#3})^2\else(\Affichage{0}{#2}{#3})(\Affichage{0}{#4}{#5})\fi%
}{}
- \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=2}{\ifx\bla#4\bla\xintifboolexpr{#3>0}{\xintifboolexpr{#2=1}{}{(\num{#2}}\useKV[ClesDistributivite]{Lettre}\xintifboolexpr{#2=1}{}{)}^2+2\times\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesDistributivite]{Lettre}\times\num{#3}+\num{#3}^2}{\xintifboolexpr{#2=1}{}{(\num{#2}}\useKV[ClesDistributivite]{Lettre}\xintifboolexpr{#2=1}{}{)}^2-2\times\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesDistributivite]{Lettre}\times\num{\fpeval{0-#3}}+\num{\fpeval{0-#3}}^2}\else\xintifboolexpr{#2=1}{}{(\num{#2}}\useKV[ClesDistributivite]{Lettre}\xintifboolexpr{#2=1}{}{)}^2-\num{#3}^2\fi}{}
- \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=3}{%
+ \xintifboolexpr{\useKV[ClesDistributivite]{Etape}==2}{\ifx\bla#4\bla\xintifboolexpr{#3>0}{\xintifboolexpr{#2==1}{}{(\num{#2}}\useKV[ClesDistributivite]{Lettre}\xintifboolexpr{#2==1}{}{)}^2+2\times\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesDistributivite]{Lettre}\times\num{#3}+\num{#3}^2}{\xintifboolexpr{#2==1}{}{(\num{#2}}\useKV[ClesDistributivite]{Lettre}\xintifboolexpr{#2==1}{}{)}^2-2\times\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesDistributivite]{Lettre}\times\num{\fpeval{0-#3}}+\num{\fpeval{0-#3}}^2}\else\xintifboolexpr{#2==1}{}{(\num{#2}}\useKV[ClesDistributivite]{Lettre}\xintifboolexpr{#2==1}{}{)}^2-\num{#3}^2\fi}{}
+ \xintifboolexpr{\useKV[ClesDistributivite]{Etape}==3}{%
\xintifboolexpr{\theNbCalculDistri>1}{\setcounter{NbCalculDistri}{0}}{}%
\stepcounter{NbCalculDistri}%
\ifx\bla#4\bla%
@@ -3601,9 +3601,9 @@
\xdef\Multi{\fpeval{-\Multi}}%
\xdef\Multim{\fpeval{-\Multim}}%
\xdef\Multil{\fpeval{-\Multil}}%
- \xintifboolexpr{\Multi=0}{}{\xintifboolexpr{\Multi<0}{(}{}\Affichage{\Multi}{0}{0}\xintifboolexpr{\Multi<0}{)}{}}%
- \xintifboolexpr{\Multim=0}{}{\xintifboolexpr{\Multim>0}{+}{+(}\Affichage{0}{\Multim}{0}\xintifboolexpr{\Multim<0}{)}{}}%
- \xintifboolexpr{\Multil=0}{}{\xintifboolexpr{\Multil>0}{+}{+(}\Affichage{0}{0}{\Multil}\xintifboolexpr{\Multil<0}{)}{}}%
+ \xintifboolexpr{\Multi==0}{}{\xintifboolexpr{\Multi<0}{(}{}\Affichage{\Multi}{0}{0}\xintifboolexpr{\Multi<0}{)}{}}%
+ \xintifboolexpr{\Multim==0}{}{\xintifboolexpr{\Multim>0}{+}{+(}\Affichage{0}{\Multim}{0}\xintifboolexpr{\Multim<0}{)}{}}%
+ \xintifboolexpr{\Multil==0}{}{\xintifboolexpr{\Multil>0}{+}{+(}\Affichage{0}{0}{\Multil}\xintifboolexpr{\Multil<0}{)}{}}%
}{%
\Affichage{\Multi}{\Multim}{\Multil}%
}
@@ -3621,9 +3621,9 @@
\xdef\Multi{\fpeval{-\Multi}}%
\xdef\Multim{\fpeval{-\Multim}}%
\xdef\Multil{\fpeval{-\Multil}}%
- \xintifboolexpr{\Multi=0}{}{\xintifboolexpr{\Multi<0}{(}{}\Affichage{\Multi}{0}{0}\xintifboolexpr{\Multi<0}{)}{}}%
- \xintifboolexpr{\Multim=0}{}{\xintifboolexpr{\Multim>0}{+}{+(}\Affichage{0}{\Multim}{0}\xintifboolexpr{\Multim<0}{)}{}}%
- \xintifboolexpr{\Multil=0}{}{\xintifboolexpr{\Multil>0}{+}{+(}\Affichage{0}{0}{\Multil}\xintifboolexpr{\Multil<0}{)}{}}%
+ \xintifboolexpr{\Multi==0}{}{\xintifboolexpr{\Multi<0}{(}{}\Affichage{\Multi}{0}{0}\xintifboolexpr{\Multi<0}{)}{}}%
+ \xintifboolexpr{\Multim==0}{}{\xintifboolexpr{\Multim>0}{+}{+(}\Affichage{0}{\Multim}{0}\xintifboolexpr{\Multim<0}{)}{}}%
+ \xintifboolexpr{\Multil==0}{}{\xintifboolexpr{\Multil>0}{+}{+(}\Affichage{0}{0}{\Multil}\xintifboolexpr{\Multil<0}{)}{}}%
}{%
\Affichage{\Multi}{\Multim}{\Multil}%
}
@@ -3633,17 +3633,17 @@
}{}%
}{%
\ifboolKV[ClesDistributivite]{Numerique}{%
- \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=0}{%
+ \xintifboolexpr{\useKV[ClesDistributivite]{Etape}==0}{%
\num{\fpeval{#2+#3}}\times\num{\fpeval{#4+#5}}\multido{\i=2+1}{4}{=\Distri[Numerique,Etape=\i]{#2}{#3}{#4}{#5}}%
}{%
- \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=-1}{%
+ \xintifboolexpr{\useKV[ClesDistributivite]{Etape}==-1}{%
\Distri[Numerique,Etape=3]{#2}{#3}{#4}{#5}\multido{\i=2+-1}{2}{=\Distri[Numerique,Etape=\i]{#2}{#3}{#4}{#5}}=\num{\fpeval{(#2+#3)*(#4+#5)}}%
}{%
- \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=1}{\num{\fpeval{#2+#3}}\times\num{\fpeval{#4+#5}}}{}%
- \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=2}{\num{\fpeval{#2+#3}}\times(\num{#4}\xintifboolexpr{#5>0}{+}{-}\num{\fpeval{abs(#5)}})}{}%
- \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=3}{\num{#3}\times\num{#4}\xintifboolexpr{#5>0}{+}{-}\num{#3}\times\num{\fpeval{abs(#5)}}}{}%
- \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=4}{\num{\fpeval{#3*#4}}\xintifboolexpr{#5>0}{+}{-}\num{\fpeval{abs(#3*#5)}}}{}%
- \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=5}{\num{\fpeval{#3*#4+#3*#5}}}{}%
+ \xintifboolexpr{\useKV[ClesDistributivite]{Etape}==1}{\num{\fpeval{#2+#3}}\times\num{\fpeval{#4+#5}}}{}%
+ \xintifboolexpr{\useKV[ClesDistributivite]{Etape}==2}{\num{\fpeval{#2+#3}}\times(\num{#4}\xintifboolexpr{#5>0}{+}{-}\num{\fpeval{abs(#5)}})}{}%
+ \xintifboolexpr{\useKV[ClesDistributivite]{Etape}==3}{\num{#3}\times\num{#4}\xintifboolexpr{#5>0}{+}{-}\num{#3}\times\num{\fpeval{abs(#5)}}}{}%
+ \xintifboolexpr{\useKV[ClesDistributivite]{Etape}==4}{\num{\fpeval{#3*#4}}\xintifboolexpr{#5>0}{+}{-}\num{\fpeval{abs(#3*#5)}}}{}%
+ \xintifboolexpr{\useKV[ClesDistributivite]{Etape}==5}{\num{\fpeval{#3*#4+#3*#5}}}{}%
}%
}%
}{%
@@ -3655,58 +3655,58 @@
\NomLettre&=\Distri[Etape=\NomFin]{#2}{#3}{#4}{#5}%
}{%
% Etape 1
- \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=1}{%
- \xintifboolexpr{#2=0}{%
- }{\xintifboolexpr{#3=0}{}{(}}\Tikzmark{\Affichage[#1]{0}{#2}{0}}%
+ \xintifboolexpr{\useKV[ClesDistributivite]{Etape}==1}{%
+ \xintifboolexpr{#2==0}{%
+ }{\xintifboolexpr{#3==0}{}{(}}\Tikzmark{\Affichage[#1]{0}{#2}{0}}%
\ifboolKV[ClesDistributivite]{AideAdda}{\mathcolor{DCAide}{+(}}{}%
- \xintifboolexpr{#3>0}{\xintifboolexpr{#2=0}{}{+}}{\xintifboolexpr{#3<0}{-}{}}\Tikzmark{\Affichage[#1]{0}{0}{\fpeval{abs(#3)}}}%
+ \xintifboolexpr{#3>0}{\xintifboolexpr{#2==0}{}{+}}{\xintifboolexpr{#3<0}{-}{}}\Tikzmark{\Affichage[#1]{0}{0}{\fpeval{abs(#3)}}}%
\ifboolKV[ClesDistributivite]{AideAdda}{\mathcolor{DCAide}{)}}{}%
- \xintifboolexpr{#2=0}{}{\xintifboolexpr{#3=0}{}{)}}%
+ \xintifboolexpr{#2==0}{}{\xintifboolexpr{#3==0}{}{)}}%
%
\ifboolKV[ClesDistributivite]{AideMul}{\times}{}%on aide dans le cas double
\xdef\Multi{\fpeval{#4*#5}}%affichage auto si (a+b)xk
%
- \xintifboolexpr{\Multi=0}{\times%
+ \xintifboolexpr{\Multi==0}{\times%
\xintifboolexpr{#4<0}{(}{\xintifboolexpr{#5<0}{(}{}}}{(}%
\Tikzmark{\Affichage[#1]{0}{#4}{0}}%
\ifboolKV[ClesDistributivite]{AideAddb}{\mathcolor{DCAide}{+(}}{}%
- \xintifboolexpr{#5>0}{\xintifboolexpr{#4=0}{}{+}}{\xintifboolexpr{#5<0}{\xintifboolexpr{#4=0}{{-}}{-}}{}}\Tikzmark{\Affichage[#1]{0}{0}{\fpeval{abs(#5)}}}%
+ \xintifboolexpr{#5>0}{\xintifboolexpr{#4==0}{}{+}}{\xintifboolexpr{#5<0}{\xintifboolexpr{#4==0}{{-}}{-}}{}}\Tikzmark{\Affichage[#1]{0}{0}{\fpeval{abs(#5)}}}%
\ifboolKV[ClesDistributivite]{AideAddb}{\mathcolor{DCAide}{)}}{}%
- \xintifboolexpr{\Multi=0}{%
+ \xintifboolexpr{\Multi==0}{%
\xintifboolexpr{#4<0}{)}{\xintifboolexpr{#5<0}{)}{}}}{)}%
\ifboolKV[ClesDistributivite]{Fleches}{%
\xdef\Multi{\fpeval{#2*#3*#4*#5}}%
- \xintifboolexpr{\Multi=0}{%
+ \xintifboolexpr{\Multi==0}{%
\xdef\Multij{\fpeval{#2*#3}}%\relax
- \xintifboolexpr{\Multij=0}{\xintifboolexpr{#2=0}{\DrawArrowSimple{1}}{\DrawArrowSimple{0}}}{\xintifboolexpr{#4=0}{\DrawArrowSimpleRenverse{3}}{\DrawArrowSimpleRenverse{2}}}%
+ \xintifboolexpr{\Multij==0}{\xintifboolexpr{#2==0}{\DrawArrowSimple{1}}{\DrawArrowSimple{0}}}{\xintifboolexpr{#4==0}{\DrawArrowSimpleRenverse{3}}{\DrawArrowSimpleRenverse{2}}}%
}{%
\DrawArrow%
}%
}{}\setcounter{NbDistri}{0}%
}{}
% Etape 2
- \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=2}{%
+ \xintifboolexpr{\useKV[ClesDistributivite]{Etape}==2}{%
\xdef\Multi{\fpeval{#2*#4}}%
- \xintifboolexpr{\Multi=0}{}{%
+ \xintifboolexpr{\Multi==0}{}{%
\xintifboolexpr{#2<0}{(}{}\Affichage[#1]{0}{#2}{0}\xintifboolexpr{#2<0}{)}{}\times\xintifboolexpr{#4<0}{(}{}\Affichage[#1]{0}{#4}{0}\xintifboolexpr{#4<0}{)}{}%
}
\xdef\Multij{\fpeval{#2*#5}}%
- \xintifboolexpr{\Multij=0}{}{%
- \xintifboolexpr{\Multi=0}{}{+}%
+ \xintifboolexpr{\Multij==0}{}{%
+ \xintifboolexpr{\Multi==0}{}{+}%
\xintifboolexpr{#2<0}{(}{}\Affichage[#1]{0}{#2}{0}\xintifboolexpr{#2<0}{)}{}\times\xintifboolexpr{#5<0}{(}{}\Affichage[#1]{0}{0}{#5}\xintifboolexpr{#5<0}{)}{}%
}%
\xdef\Multik{\fpeval{#3*#4}}%
- \xintifboolexpr{\Multik=0}{}{%
- \xintifboolexpr{\Multi=0}{}{+}%
+ \xintifboolexpr{\Multik==0}{}{%
+ \xintifboolexpr{\Multi==0}{}{+}%
\xintifboolexpr{#3<0}{(}{}\Affichage[#1]{0}{0}{#3}\xintifboolexpr{#3<0}{)}{}\times\xintifboolexpr{#4<0}{(}{}\Affichage[#1]{0}{#4}{0}\xintifboolexpr{#4<0}{)}{}%
}%
\xdef\Multil{\fpeval{#3*#5}}%
- \xintifboolexpr{\Multil=0}{}{+%
+ \xintifboolexpr{\Multil==0}{}{+%
\xintifboolexpr{#3<0}{(}{}\Affichage[#1]{0}{0}{#3}\xintifboolexpr{#3<0}{)}{}\times\xintifboolexpr{#5<0}{(}{}\Affichage[#1]{0}{0}{#5}\xintifboolexpr{#5<0}{)}{}%
}%
}{}%
% Etape 3
- \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=3}{%
+ \xintifboolexpr{\useKV[ClesDistributivite]{Etape}==3}{%
\stepcounter{NbCalculDistri}%
\xdef\Multi{\fpeval{#2*#4}}%
\xdef\Multij{\fpeval{#2*#5}}%
@@ -3716,17 +3716,17 @@
%% expressions \`a d\'evelopper
\xintifboolexpr{\theNbCalculDistri>1}{\xintifboolexpr{\Multi<0}{(\Affichage{\Multi}{0}{0})}{\Affichage{\Multi}{0}{0}}}{\Affichage{\Multi}{0}{0}}%
\ifboolKV[ClesDistributivite]{Reduction}{\mathunderline{DCReduction}{%
- \xintifboolexpr{\Multij=0}{}{\xintifboolexpr{\Multi=0}{}{{}+}\xintifboolexpr{\Multij<0}{(}{}\Affichage{0}{\Multij}{0}\xintifboolexpr{\Multij<0}{)}{}}%
- \xintifboolexpr{\Multik=0}{}{\xintifboolexpr{\Multil=0}{\xintifboolexpr{#2=0}{}{+}}{+}\xintifboolexpr{\Multik<0}{(}{}\Affichage{0}{\Multik}{0}\xintifboolexpr{\Multik<0}{)}{}}%
+ \xintifboolexpr{\Multij==0}{}{\xintifboolexpr{\Multi==0}{}{{}+}\xintifboolexpr{\Multij<0}{(}{}\Affichage{0}{\Multij}{0}\xintifboolexpr{\Multij<0}{)}{}}%
+ \xintifboolexpr{\Multik==0}{}{\xintifboolexpr{\Multil==0}{\xintifboolexpr{#2==0}{}{+}}{+}\xintifboolexpr{\Multik<0}{(}{}\Affichage{0}{\Multik}{0}\xintifboolexpr{\Multik<0}{)}{}}%
}%
}{%
- \xintifboolexpr{\Multij=0}{}{\xintifboolexpr{\Multi=0}{}{+}\xintifboolexpr{\Multij<0}{(}{}\Affichage{0}{\Multij}{0}\xintifboolexpr{\Multij<0}{)}{}}%
- \xintifboolexpr{\Multik=0}{}{\xintifboolexpr{\Multil=0}{\xintifboolexpr{#2=0}{}{+}}{\xintifboolexpr{#2=0}{}{+}}\xintifboolexpr{\Multik<0}{(}{}\Affichage{0}{\Multik}{0}\xintifboolexpr{\Multik<0}{)}{}}%
+ \xintifboolexpr{\Multij==0}{}{\xintifboolexpr{\Multi==0}{}{+}\xintifboolexpr{\Multij<0}{(}{}\Affichage{0}{\Multij}{0}\xintifboolexpr{\Multij<0}{)}{}}%
+ \xintifboolexpr{\Multik==0}{}{\xintifboolexpr{\Multil==0}{\xintifboolexpr{#2==0}{}{+}}{\xintifboolexpr{#2==0}{}{+}}\xintifboolexpr{\Multik<0}{(}{}\Affichage{0}{\Multik}{0}\xintifboolexpr{\Multik<0}{)}{}}%
}%
- \xintifboolexpr{\Multil=0}{}{+}\xintifboolexpr{\Multil<0}{(}{}\Affichage{0}{0}{\Multil}\xintifboolexpr{\Multil<0}{)}{}%
+ \xintifboolexpr{\Multil==0}{}{+}\xintifboolexpr{\Multil<0}{(}{}\Affichage{0}{0}{\Multil}\xintifboolexpr{\Multil<0}{)}{}%
}{}%
% Etape 4
- \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=4}{%
+ \xintifboolexpr{\useKV[ClesDistributivite]{Etape}==4}{%
\xdef\Multi{\fpeval{#2*#4}}%
\xdef\Multij{\fpeval{#2*#5}}%
\xdef\Multik{\fpeval{#3*#4}}%
@@ -3740,15 +3740,15 @@
\xdef\Multi{\fpeval{-\Multi}}%
\xdef\Multim{\fpeval{-\Multim}}%
\xdef\Multil{\fpeval{-\Multil}}%
- \xintifboolexpr{\Multi=0}{}{\xintifboolexpr{\Multi<0}{(}{}\Affichage{\Multi}{0}{0}\xintifboolexpr{\Multi<0}{)}{}}%
- \xintifboolexpr{\Multim=0}{}{\xintifboolexpr{\Multim>0}{+}{+(}\Affichage{0}{\Multim}{0}\xintifboolexpr{\Multim<0}{)}{}}%
- \xintifboolexpr{\Multil=0}{}{\xintifboolexpr{\Multil>0}{+}{+(}\Affichage{0}{0}{\Multil}\xintifboolexpr{\Multil<0}{)}{}}%
+ \xintifboolexpr{\Multi==0}{}{\xintifboolexpr{\Multi<0}{(}{}\Affichage{\Multi}{0}{0}\xintifboolexpr{\Multi<0}{)}{}}%
+ \xintifboolexpr{\Multim==0}{}{\xintifboolexpr{\Multim>0}{+}{+(}\Affichage{0}{\Multim}{0}\xintifboolexpr{\Multim<0}{)}{}}%
+ \xintifboolexpr{\Multil==0}{}{\xintifboolexpr{\Multil>0}{+}{+(}\Affichage{0}{0}{\Multil}\xintifboolexpr{\Multil<0}{)}{}}%
}{%
\xintifboolexpr{\theNbCalculDistri>1}{\xintifboolexpr{\Multi<0}{(\Affichage{\Multi}{0}{0})}{\Affichage{\Multi}{0}{0}}}{\Affichage{\Multi}{0}{0}}%
- \xintifboolexpr{\Multim=0}{}{%
+ \xintifboolexpr{\Multim==0}{}{%
\xintifboolexpr{\Multim>0}{+\Affichage{0}{\Multim}{0}}{-\Affichage{0}{\fpeval{-\Multim}}{0}}%
}%
- \xintifboolexpr{\Multil=0}{}{\xintifboolexpr{\Multil<0}{-\Affichage{0}{0}{\fpeval{-\Multil}}}{+\Affichage{0}{0}{\Multil}}}%
+ \xintifboolexpr{\Multil==0}{}{\xintifboolexpr{\Multil<0}{-\Affichage{0}{0}{\fpeval{-\Multil}}}{+\Affichage{0}{0}{\Multil}}}%
}
\ifboolKV[ClesDistributivite]{Somme}{\xdef\SommeA{\fpeval{\SommeA+#2*#4}}\xdef\SommeB{\fpeval{\SommeB+#2*#5+#3*#4}}\xdef\SommeC{\fpeval{\SommeC+#3*#5}}}{}%
\ifboolKV[ClesDistributivite]{Difference}{\xdef\SommeA{\fpeval{\SommeA-#2*#4}}\xdef\SommeB{\fpeval{\SommeB-#2*#5-#3*#4}}\xdef\SommeC{\fpeval{\SommeC-#3*#5}}}{}%
@@ -3773,14 +3773,14 @@
\def\LETTRE{\useKV[ClesDistributivite]{Lettre}}%
\ensuremath{%
% partie du nombre
- \xintifboolexpr{#2=0}{}{\num{#2}}%
+ \xintifboolexpr{#2==0}{}{\num{#2}}%
% partie du x
- \xintifboolexpr{#3=0}{}{\xintifboolexpr{#3>0}{\xintifboolexpr{#2=0}{}{+}\xintifboolexpr{#3=1}{}{\num{#3}}}{%
- \xintifboolexpr{#2=0}{\xintifboolexpr{#3=-1}{-}{\num{#3}}}{\xintifboolexpr{#3=-1}{-}{-\num{\fpeval{abs(#3)}}}}
+ \xintifboolexpr{#3==0}{}{\xintifboolexpr{#3>0}{\xintifboolexpr{#2==0}{}{+}\xintifboolexpr{#3==1}{}{\num{#3}}}{%
+ \xintifboolexpr{#2==0}{\xintifboolexpr{#3==-1}{-}{\num{#3}}}{\xintifboolexpr{#3==-1}{-}{-\num{\fpeval{abs(#3)}}}}
}\LETTRE}%
% partie du x^2
- \xintifboolexpr{#4=0}{}{\xintifboolexpr{#4>0}{\xintifboolexpr{#2=0}{\xintifboolexpr{#3=0}{}{+}}{+}\xintifboolexpr{#4=1}{}{\num{#4}}}{%
- \xintifboolexpr{#2=0}{\xintifboolexpr{#3=0}{\num{#4}}{-\num{\fpeval{abs(#4)}}}}{-\num{\fpeval{abs(#4)}}}}\LETTRE^2}%
+ \xintifboolexpr{#4==0}{}{\xintifboolexpr{#4>0}{\xintifboolexpr{#2==0}{\xintifboolexpr{#3==0}{}{+}}{+}\xintifboolexpr{#4==1}{}{\num{#4}}}{%
+ \xintifboolexpr{#2==0}{\xintifboolexpr{#3==0}{\num{#4}}{-\num{\fpeval{abs(#4)}}}}{-\num{\fpeval{abs(#4)}}}}\LETTRE^2}%
}%
}%
@@ -3796,20 +3796,20 @@
\colorlet{DCFlechesh}{\useKV[ClesDistributivite]{CouleurFH}}%
\colorlet{DCFlechesb}{\useKV[ClesDistributivite]{CouleurFB}}%
\ifboolKV[ClesDistributivite]{Remarquable}{%
- \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=1}{\ifx\bla#4\bla(\AffichageEchange{#2}{#3}{0})^2\else(\AffichageEchange{#2}{#3}{0})(\AffichageEchange{#4}{#5}{0})\fi
+ \xintifboolexpr{\useKV[ClesDistributivite]{Etape}==1}{\ifx\bla#4\bla(\AffichageEchange{#2}{#3}{0})^2\else(\AffichageEchange{#2}{#3}{0})(\AffichageEchange{#4}{#5}{0})\fi
}{}
- \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=2}{%
+ \xintifboolexpr{\useKV[ClesDistributivite]{Etape}==2}{%
\ifx\bla#4\bla\xintifboolexpr{#3>0}{%
- \num{#2}^2+2\times\num{#2}\times\xintifboolexpr{#3=1}{}{\num{#3}}\useKV[ClesDistributivite]{Lettre}+
- \xintifboolexpr{#3=1}{}{(\num{#3}}\useKV[ClesDistributivite]{Lettre}\xintifboolexpr{#3=1}{}{)}^2%
+ \num{#2}^2+2\times\num{#2}\times\xintifboolexpr{#3==1}{}{\num{#3}}\useKV[ClesDistributivite]{Lettre}+
+ \xintifboolexpr{#3==1}{}{(\num{#3}}\useKV[ClesDistributivite]{Lettre}\xintifboolexpr{#3==1}{}{)}^2%
}{%
- \num{#2}^2-2\times\num{#2}\times\xintifboolexpr{#3=-1}{}{\num{\fpeval{0-#3}}}\useKV[ClesDistributivite]{Lettre}+
- \xintifboolexpr{#3=-1}{}{(\num{\fpeval{0-#3}}}\useKV[ClesDistributivite]{Lettre}\xintifboolexpr{#3=-1}{}{)}^2%
+ \num{#2}^2-2\times\num{#2}\times\xintifboolexpr{#3==-1}{}{\num{\fpeval{0-#3}}}\useKV[ClesDistributivite]{Lettre}+
+ \xintifboolexpr{#3==-1}{}{(\num{\fpeval{0-#3}}}\useKV[ClesDistributivite]{Lettre}\xintifboolexpr{#3==-1}{}{)}^2%
}%
- \else\num{#2}^2-\xintifboolexpr{#3=1}{}{(\num{#3}}\useKV[ClesDistributivite]{Lettre}\xintifboolexpr{#3=1}{}{)}^2%
+ \else\num{#2}^2-\xintifboolexpr{#3==1}{}{(\num{#3}}\useKV[ClesDistributivite]{Lettre}\xintifboolexpr{#3==1}{}{)}^2%
\fi%
}{}
- \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=3}{%
+ \xintifboolexpr{\useKV[ClesDistributivite]{Etape}==3}{%
\xintifboolexpr{\theNbCalculDistri>1}{\setcounter{NbCalculDistri}{0}}{}%
\stepcounter{NbCalculDistri}%
\ifx\bla#4\bla%
@@ -3824,9 +3824,9 @@
\xdef\Multi{\fpeval{-\Multi}}%
\xdef\Multim{\fpeval{-\Multim}}%
\xdef\Multil{\fpeval{-\Multil}}%
- \xintifboolexpr{\Multi=0}{}{\xintifboolexpr{\Multi<0}{(}{}\AffichageEchange{\Multi}{0}{0}\xintifboolexpr{\Multi<0}{)}{}}%
- \xintifboolexpr{\Multim=0}{}{\xintifboolexpr{\Multim>0}{+}{+(}\AffichageEchange{0}{\Multim}{0}\xintifboolexpr{\Multim<0}{)}{}}%
- \xintifboolexpr{\Multil=0}{}{\xintifboolexpr{\Multil>0}{+}{+(}\AffichageEchange{0}{0}{\Multil}\xintifboolexpr{\Multil<0}{)}{}}%
+ \xintifboolexpr{\Multi==0}{}{\xintifboolexpr{\Multi<0}{(}{}\AffichageEchange{\Multi}{0}{0}\xintifboolexpr{\Multi<0}{)}{}}%
+ \xintifboolexpr{\Multim==0}{}{\xintifboolexpr{\Multim>0}{+}{+(}\AffichageEchange{0}{\Multim}{0}\xintifboolexpr{\Multim<0}{)}{}}%
+ \xintifboolexpr{\Multil==0}{}{\xintifboolexpr{\Multil>0}{+}{+(}\AffichageEchange{0}{0}{\Multil}\xintifboolexpr{\Multil<0}{)}{}}%
}{%
\AffichageEchange{\Multi}{\Multim}{\Multil}%
}
@@ -3844,9 +3844,9 @@
\xdef\Multi{\fpeval{-\Multi}}%
\xdef\Multim{\fpeval{-\Multim}}%
\xdef\Multil{\fpeval{-\Multil}}%
- \xintifboolexpr{\Multi=0}{}{\xintifboolexpr{\Multi<0}{(}{}\AffichageEchange{\Multi}{0}{0}\xintifboolexpr{\Multi<0}{)}{}}%
- \xintifboolexpr{\Multim=0}{}{\xintifboolexpr{\Multim>0}{+}{+(}\AffichageEchange{0}{\Multim}{0}\xintifboolexpr{\Multim<0}{)}{}}%
- \xintifboolexpr{\Multil=0}{}{\xintifboolexpr{\Multil>0}{+}{+(}\AffichageEchange{0}{0}{\Multil}\xintifboolexpr{\Multil<0}{)}{}}%
+ \xintifboolexpr{\Multi==0}{}{\xintifboolexpr{\Multi<0}{(}{}\AffichageEchange{\Multi}{0}{0}\xintifboolexpr{\Multi<0}{)}{}}%
+ \xintifboolexpr{\Multim==0}{}{\xintifboolexpr{\Multim>0}{+}{+(}\AffichageEchange{0}{\Multim}{0}\xintifboolexpr{\Multim<0}{)}{}}%
+ \xintifboolexpr{\Multil==0}{}{\xintifboolexpr{\Multil>0}{+}{+(}\AffichageEchange{0}{0}{\Multil}\xintifboolexpr{\Multil<0}{)}{}}%
}{%
\AffichageEchange{\Multi}{\Multim}{\Multil}%
}
@@ -3858,19 +3858,6 @@
}{}%
}{%
\ifboolKV[ClesDistributivite]{Numerique}{%
- % \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=0}{%
- % \num{\fpeval{#2+#3}}\times\num{\fpeval{#4+#5}}\multido{\i=2+1}{4}{=\Distri[Numerique,Etape=\i]{#2}{#3}{#4}{#5}}%
- % }{%
- % \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=-1}{%
- % \Distri[Numerique,Etape=3]{#2}{#3}{#4}{#5}\multido{\i=2+-1}{2}{=\Distri[Numerique,Etape=\i]{#2}{#3}{#4}{#5}}=\num{\fpeval{(#2+#3)*(#4+#5)}}%
- % }{%
- % \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=1}{\num{\fpeval{#2+#3}}\times\num{\fpeval{#4+#5}}}{}%
- % \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=2}{\num{\fpeval{#2+#3}}\times(\num{#4}\xintifboolexpr{#5>0}{+}{-}\num{\fpeval{abs(#5)}})}{}%
- % \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=3}{\num{#3}\times\num{#4}\xintifboolexpr{#5>0}{+}{-}\num{#3}\times\num{\fpeval{abs(#5)}}}{}%
- % \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=4}{\num{\fpeval{#3*#4}}\xintifboolexpr{#5>0}{+}{-}\num{\fpeval{abs(#3*#5)}}}{}%
- % \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=5}{\num{\fpeval{#3*#4+#3*#5}}}{}%
- % }%
- % }%
}{%
\ifboolKV[ClesDistributivite]{All}{%
\xdef\NomLettre{\useKV[ClesDistributivite]{NomExpression}}%
@@ -3881,126 +3868,126 @@
\NomLettre&=\DistriEchange[Echange=\ValeurEchange,Etape=\NomFin]{#2}{#3}{#4}{#5}%
}{%
% Etape 1
- \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=1}{%
- \xintifboolexpr{\useKV[ClesDistributivite]{Echange}=1||\useKV[ClesDistributivite]{Echange}=3}{%
- \xintifboolexpr{#2=0}{%
- }{\xintifboolexpr{#3=0}{%
+ \xintifboolexpr{\useKV[ClesDistributivite]{Etape}==1}{%
+ \xintifboolexpr{\useKV[ClesDistributivite]{Echange}==1||\useKV[ClesDistributivite]{Echange}==3}{%
+ \xintifboolexpr{#2==0}{%
+ }{\xintifboolexpr{#3==0}{%
}{(}}\Tikzmark{\Affichage[#1]{0}{0}{#2}}%
\ifboolKV[ClesDistributivite]{AideAdda}{\mathcolor{DCAide}{+(}}{}%
- \xintifboolexpr{#3>0}{\xintifboolexpr{#2=0}{}{+}}{\xintifboolexpr{#3<0}{-}{}}\Tikzmark{\Affichage[#1]{0}{\fpeval{abs(#3)}}{0}}%
+ \xintifboolexpr{#3>0}{\xintifboolexpr{#2==0}{}{+}}{\xintifboolexpr{#3<0}{-}{}}\Tikzmark{\Affichage[#1]{0}{\fpeval{abs(#3)}}{0}}%
\ifboolKV[ClesDistributivite]{AideAdda}{\mathcolor{DCAide}{)}}{}%
- \xintifboolexpr{#2=0}{%
- }{\xintifboolexpr{#3=0}{%
+ \xintifboolexpr{#2==0}{%
+ }{\xintifboolexpr{#3==0}{%
}{)}}%
}{
- \xintifboolexpr{#2=0}{%
- }{\xintifboolexpr{#3=0}{%
+ \xintifboolexpr{#2==0}{%
+ }{\xintifboolexpr{#3==0}{%
}{(}}\Tikzmark{\Affichage[#1]{0}{#2}{0}}%
\ifboolKV[ClesDistributivite]{AideAdda}{\mathcolor{DCAide}{+(}}{}%
- \xintifboolexpr{#3>0}{\xintifboolexpr{#2=0}{}{+}}{\xintifboolexpr{#3<0}{-}{}}\Tikzmark{\Affichage[#1]{0}{0}{\fpeval{abs(#3)}}}%
+ \xintifboolexpr{#3>0}{\xintifboolexpr{#2==0}{}{+}}{\xintifboolexpr{#3<0}{-}{}}\Tikzmark{\Affichage[#1]{0}{0}{\fpeval{abs(#3)}}}%
\ifboolKV[ClesDistributivite]{AideAdda}{\mathcolor{DCAide}{)}}{}%
- \xintifboolexpr{#2=0}{%
- }{\xintifboolexpr{#3=0}{%
+ \xintifboolexpr{#2==0}{%
+ }{\xintifboolexpr{#3==0}{%
}{)}}%
}%
%
\ifboolKV[ClesDistributivite]{AideMul}{\times}{}%on aide dans le cas double
\xdef\Multi{\fpeval{#4*#5}}%affichage auto si (a+b)xk
%
- \xintifboolexpr{\useKV[ClesDistributivite]{Echange}=2||\useKV[ClesDistributivite]{Echange}=3}{%
- \xintifboolexpr{\Multi=0}{\times%
+ \xintifboolexpr{\useKV[ClesDistributivite]{Echange}==2||\useKV[ClesDistributivite]{Echange}==3}{%
+ \xintifboolexpr{\Multi==0}{\times%
\xintifboolexpr{#4<0}{(}{\xintifboolexpr{#5<0}{(}{}}}{(}%
\Tikzmark{\AffichageEchange[#1]{#4}{0}{0}}%
\ifboolKV[ClesDistributivite]{AideAddb}{\mathcolor{DCAide}{+(}}{}%
- \xintifboolexpr{#5>0}{\xintifboolexpr{#4=0}{}{+}}{\xintifboolexpr{#5<0}{-}{}}\Tikzmark{\AffichageEchange[#1]{0}{\fpeval{abs(#5)}}{0}}%
+ \xintifboolexpr{#5>0}{\xintifboolexpr{#4==0}{}{+}}{\xintifboolexpr{#5<0}{-}{}}\Tikzmark{\AffichageEchange[#1]{0}{\fpeval{abs(#5)}}{0}}%
\ifboolKV[ClesDistributivite]{AideAddb}{\mathcolor{DCAide}{)}}{}%
- \xintifboolexpr{\Multi=0}{%
+ \xintifboolexpr{\Multi==0}{%
\xintifboolexpr{#4<0}{)}{\xintifboolexpr{#5<0}{)}{}}}{)}%
}{%
- \xintifboolexpr{\Multi=0}{\times%
+ \xintifboolexpr{\Multi==0}{\times%
\xintifboolexpr{#4<0}{(}{\xintifboolexpr{#5<0}{(}{}}}{(}%
\Tikzmark{\Affichage[#1]{0}{#4}{0}}%
\ifboolKV[ClesDistributivite]{AideAddb}{\mathcolor{DCAide}{+(}}{}%
- \xintifboolexpr{#5>0}{\xintifboolexpr{#4=0}{}{+}}{\xintifboolexpr{#5<0}{\xintifboolexpr{#4=0}{{-}}{-}}{}}\Tikzmark{\Affichage[#1]{0}{0}{\fpeval{abs(#5)}}}%
+ \xintifboolexpr{#5>0}{\xintifboolexpr{#4==0}{}{+}}{\xintifboolexpr{#5<0}{\xintifboolexpr{#4==0}{{-}}{-}}{}}\Tikzmark{\Affichage[#1]{0}{0}{\fpeval{abs(#5)}}}%
\ifboolKV[ClesDistributivite]{AideAddb}{\mathcolor{DCAide}{)}}{}%
- \xintifboolexpr{\Multi=0}{%
+ \xintifboolexpr{\Multi==0}{%
\xintifboolexpr{#4<0}{)}{\xintifboolexpr{#5<0}{)}{}}}{)}%
}%
\ifboolKV[ClesDistributivite]{Fleches}{%
\xdef\Multi{\fpeval{#2*#3*#4*#5}}%
- \xintifboolexpr{\Multi=0}{%
+ \xintifboolexpr{\Multi==0}{%
\xdef\Multij{\fpeval{#2*#3}}%\relax
- \xintifboolexpr{\Multij=0}{\xintifboolexpr{#2=0}{\DrawArrowSimple{1}}{\DrawArrowSimple{0}}}{\xintifboolexpr{#4=0}{\DrawArrowSimpleRenverse{3}}{\DrawArrowSimpleRenverse{2}}}
+ \xintifboolexpr{\Multij==0}{\xintifboolexpr{#2==0}{\DrawArrowSimple{1}}{\DrawArrowSimple{0}}}{\xintifboolexpr{#4==0}{\DrawArrowSimpleRenverse{3}}{\DrawArrowSimpleRenverse{2}}}
}{%
\DrawArrow
}%
}{}\setcounter{NbDistri}{0}%
}{}%
% Etape 2
- \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=2}{%
- \xintifboolexpr{\useKV[ClesDistributivite]{Echange}=1}{%
+ \xintifboolexpr{\useKV[ClesDistributivite]{Etape}==2}{%
+ \xintifboolexpr{\useKV[ClesDistributivite]{Echange}==1}{%
\xdef\Multi{\fpeval{#2*#4}}%
- \xintifboolexpr{\Multi=0}{}{%
+ \xintifboolexpr{\Multi==0}{}{%
\xintifboolexpr{#2<0}{(}{}\AffichageEchange[#1]{#2}{0}{0}\xintifboolexpr{#2<0}{)}{}\times\xintifboolexpr{#4<0}{(}{}\Affichage[#1]{0}{#4}{0}\xintifboolexpr{#4<0}{)}{}%
}%
\xdef\Multij{\fpeval{#2*#5}}%
- \xintifboolexpr{\Multij=0}{}{%
- \xintifboolexpr{\Multi=0}{}{+}%
+ \xintifboolexpr{\Multij==0}{}{%
+ \xintifboolexpr{\Multi==0}{}{+}%
\xintifboolexpr{#2<0}{(}{}\AffichageEchange[#1]{#2}{0}{0}\xintifboolexpr{#2<0}{)}{}\times\xintifboolexpr{#5<0}{(}{}\Affichage[#1]{0}{0}{#5}\xintifboolexpr{#5<0}{)}{}%
}%
\xdef\Multik{\fpeval{#3*#4}}%
- \xintifboolexpr{\Multik=0}{}{%
- \xintifboolexpr{\Multi=0}{}{+}%
+ \xintifboolexpr{\Multik==0}{}{%
+ \xintifboolexpr{\Multi==0}{}{+}%
\xintifboolexpr{#3<0}{(}{}\AffichageEchange[#1]{0}{#3}{0}\xintifboolexpr{#3<0}{)}{}\times\xintifboolexpr{#4<0}{(}{}\Affichage[#1]{0}{#4}{0}\xintifboolexpr{#4<0}{)}{}%
}%
\xdef\Multil{\fpeval{#3*#5}}%
- \xintifboolexpr{\Multil=0}{}{+%
+ \xintifboolexpr{\Multil==0}{}{+%
\xintifboolexpr{#3<0}{(}{}\AffichageEchange[#1]{0}{#3}{0}\xintifboolexpr{#3<0}{)}{}\times\xintifboolexpr{#5<0}{(}{}\Affichage[#1]{0}{0}{#5}\xintifboolexpr{#5<0}{)}{}%
}%
}{}%
- \xintifboolexpr{\useKV[ClesDistributivite]{Echange}=2}{%
+ \xintifboolexpr{\useKV[ClesDistributivite]{Echange}==2}{%
\xdef\Multi{\fpeval{#2*#4}}%
- \xintifboolexpr{\Multi=0}{}{%
+ \xintifboolexpr{\Multi==0}{}{%
\xintifboolexpr{#2<0}{(}{}\Affichage[#1]{0}{#2}{0}\xintifboolexpr{#2<0}{)}{}\times\xintifboolexpr{#4<0}{(}{}\AffichageEchange[#1]{#4}{0}{0}\xintifboolexpr{#4<0}{)}{}%
}%
\xdef\Multij{\fpeval{#2*#5}}%
- \xintifboolexpr{\Multij=0}{}{%
- \xintifboolexpr{\Multi=0}{}{+}%
+ \xintifboolexpr{\Multij==0}{}{%
+ \xintifboolexpr{\Multi==0}{}{+}%
\xintifboolexpr{#2<0}{(}{}\Affichage[#1]{0}{#2}{0}\xintifboolexpr{#2<0}{)}{}\times\xintifboolexpr{#5<0}{(}{}\AffichageEchange[#1]{0}{#5}{0}\xintifboolexpr{#5<0}{)}{}%
}%
\xdef\Multik{\fpeval{#3*#4}}%
- \xintifboolexpr{\Multik=0}{}{%
- \xintifboolexpr{\Multi=0}{}{+}%
+ \xintifboolexpr{\Multik==0}{}{%
+ \xintifboolexpr{\Multi==0}{}{+}%
\xintifboolexpr{#3<0}{(}{}\Affichage[#1]{0}{0}{#3}\xintifboolexpr{#3<0}{)}{}\times\xintifboolexpr{#4<0}{(}{}\AffichageEchange[#1]{#4}{0}{0}\xintifboolexpr{#4<0}{)}{}%
}%
\xdef\Multil{\fpeval{#3*#5}}%
- \xintifboolexpr{\Multil=0}{}{+%
+ \xintifboolexpr{\Multil==0}{}{+%
\xintifboolexpr{#3<0}{(}{}\Affichage[#1]{0}{0}{#3}\xintifboolexpr{#3<0}{)}{}\times\xintifboolexpr{#5<0}{(}{}\AffichageEchange[#1]{0}{#5}{0}\xintifboolexpr{#5<0}{)}{}%
}%
}{}%
- \xintifboolexpr{\useKV[ClesDistributivite]{Echange}=3}{%
+ \xintifboolexpr{\useKV[ClesDistributivite]{Echange}==3}{%
\xdef\Multi{\fpeval{#2*#4}}%
- \xintifboolexpr{\Multi=0}{}{%
+ \xintifboolexpr{\Multi==0}{}{%
\xintifboolexpr{#2<0}{(}{}\AffichageEchange[#1]{#2}{0}{0}\xintifboolexpr{#2<0}{)}{}\times\xintifboolexpr{#4<0}{(}{}\AffichageEchange[#1]{#4}{0}{0}\xintifboolexpr{#4<0}{)}{}%
}%
\xdef\Multij{\fpeval{#2*#5}}%
- \xintifboolexpr{\Multij=0}{}{%
- \xintifboolexpr{\Multi=0}{}{+}%
+ \xintifboolexpr{\Multij==0}{}{%
+ \xintifboolexpr{\Multi==0}{}{+}%
\xintifboolexpr{#2<0}{(}{}\AffichageEchange[#1]{#2}{0}{0}\xintifboolexpr{#2<0}{)}{}\times\xintifboolexpr{#5<0}{(}{}\AffichageEchange[#1]{0}{#5}{0}\xintifboolexpr{#5<0}{)}{}%
}%
\xdef\Multik{\fpeval{#3*#4}}%
- \xintifboolexpr{\Multik=0}{}{%
- \xintifboolexpr{\Multi=0}{}{+}%
+ \xintifboolexpr{\Multik==0}{}{%
+ \xintifboolexpr{\Multi==0}{}{+}%
\xintifboolexpr{#3<0}{(}{}\AffichageEchange[#1]{0}{#3}{0}\xintifboolexpr{#3<0}{)}{}\times\xintifboolexpr{#4<0}{(}{}\AffichageEchange[#1]{#4}{0}{0}\xintifboolexpr{#4<0}{)}{}%
}%
\xdef\Multil{\fpeval{#3*#5}}%
- \xintifboolexpr{\Multil=0}{}{+%
+ \xintifboolexpr{\Multil==0}{}{+%
\xintifboolexpr{#3<0}{(}{}\AffichageEchange[#1]{0}{#3}{0}\xintifboolexpr{#3<0}{)}{}\times\xintifboolexpr{#5<0}{(}{}\AffichageEchange[#1]{0}{#5}{0}\xintifboolexpr{#5<0}{)}{}%
}%
}{}
}{}
% Etape 3
- \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=3}{%
+ \xintifboolexpr{\useKV[ClesDistributivite]{Etape}==3}{%
\stepcounter{NbCalculDistri}%
\xdef\Multi{\fpeval{#2*#4}}%
\xdef\Multij{\fpeval{#2*#5}}%
@@ -4008,36 +3995,36 @@
\xdef\Multil{\fpeval{#3*#5}}%
%% ils sont red\'efinis pour pouvoir envisager la somme de deux
%% expressions \`a d\'evelopper
- \xintifboolexpr{\useKV[ClesDistributivite]{Echange}=1}{%
+ \xintifboolexpr{\useKV[ClesDistributivite]{Echange}==1}{%
\xintifboolexpr{\theNbCalculDistri>1}{\xintifboolexpr{\Multi<0}{(\AffichageEchange{0}{\Multi}{0})}{\AffichageEchange{0}{\Multi}{0}}}{\AffichageEchange{0}{\Multi}{0}}%
- \xintifboolexpr{\Multij=0}{}{\xintifboolexpr{\Multi=0}{}{+}\xintifboolexpr{\Multij<0}{(}{}\AffichageEchange{\Multij}{0}{0}\xintifboolexpr{\Multij<0}{)}{}}%
- \xintifboolexpr{\Multik=0}{}{\xintifboolexpr{\Multil=0}{\xintifboolexpr{#2=0}{}{+}}{+}\xintifboolexpr{\Multik<0}{(}{}\AffichageEchange{0}{0}{\Multik}\xintifboolexpr{\Multik<0}{)}{}}%
- \xintifboolexpr{\Multil=0}{}{+}\xintifboolexpr{\Multil<0}{(}{}\AffichageEchange{0}{\Multil}{0}\xintifboolexpr{\Multil<0}{)}{}%
+ \xintifboolexpr{\Multij==0}{}{\xintifboolexpr{\Multi==0}{}{+}\xintifboolexpr{\Multij<0}{(}{}\AffichageEchange{\Multij}{0}{0}\xintifboolexpr{\Multij<0}{)}{}}%
+ \xintifboolexpr{\Multik==0}{}{\xintifboolexpr{\Multil==0}{\xintifboolexpr{#2=0}{}{+}}{+}\xintifboolexpr{\Multik<0}{(}{}\AffichageEchange{0}{0}{\Multik}\xintifboolexpr{\Multik<0}{)}{}}%
+ \xintifboolexpr{\Multil==0}{}{+}\xintifboolexpr{\Multil<0}{(}{}\AffichageEchange{0}{\Multil}{0}\xintifboolexpr{\Multil<0}{)}{}%
\xdef\Multim{\fpeval{#2*#4+#3*#5}}%
\ifboolKV[ClesDistributivite]{Somme}{\xdef\SommeA{\fpeval{\SommeA+\Multik}}\xdef\SommeB{\fpeval{\SommeB+\Multim}}\xdef\SommeC{\fpeval{\SommeC+\Multij}}}{}%
\ifboolKV[ClesDistributivite]{Difference}{\xdef\SommeA{\fpeval{\SommeA-\Multik}}\xdef\SommeB{\fpeval{\SommeB-\Multim}}\xdef\SommeC{\fpeval{\SommeC-\Multij}}}{}%
}{}%
- \xintifboolexpr{\useKV[ClesDistributivite]{Echange}=2}{%
+ \xintifboolexpr{\useKV[ClesDistributivite]{Echange}==2}{%
\xintifboolexpr{\theNbCalculDistri>1}{\xintifboolexpr{\Multi<0}{(\AffichageEchange{0}{\Multi}{0})}{\AffichageEchange{0}{\Multi}{0}}}{\AffichageEchange{0}{\Multi}{0}}%
- \xintifboolexpr{\Multij=0}{}{\xintifboolexpr{\Multi=0}{}{+}\xintifboolexpr{\Multij<0}{(}{}\AffichageEchange{0}{0}{\Multij}\xintifboolexpr{\Multij<0}{)}{}}%
- \xintifboolexpr{\Multik=0}{}{\xintifboolexpr{\Multil=0}{\xintifboolexpr{#2=0}{}{+}}{+}\xintifboolexpr{\Multik<0}{(}{}\AffichageEchange{\Multik}{0}{0}\xintifboolexpr{\Multik<0}{)}{}}%
- \xintifboolexpr{\Multil=0}{}{+}\xintifboolexpr{\Multil<0}{(}{}\AffichageEchange{0}{\Multil}{0}\xintifboolexpr{\Multil<0}{)}{}%
+ \xintifboolexpr{\Multij==0}{}{\xintifboolexpr{\Multi==0}{}{+}\xintifboolexpr{\Multij<0}{(}{}\AffichageEchange{0}{0}{\Multij}\xintifboolexpr{\Multij<0}{)}{}}%
+ \xintifboolexpr{\Multik==0}{}{\xintifboolexpr{\Multil==0}{\xintifboolexpr{#2==0}{}{+}}{+}\xintifboolexpr{\Multik<0}{(}{}\AffichageEchange{\Multik}{0}{0}\xintifboolexpr{\Multik<0}{)}{}}%
+ \xintifboolexpr{\Multil==0}{}{+}\xintifboolexpr{\Multil<0}{(}{}\AffichageEchange{0}{\Multil}{0}\xintifboolexpr{\Multil<0}{)}{}%
\xdef\Multim{\fpeval{#2*#4+#3*#5}}%
\ifboolKV[ClesDistributivite]{Somme}{\xdef\SommeA{\fpeval{\SommeA+\Multij}}\xdef\SommeB{\fpeval{\SommeB+\Multim}}\xdef\SommeC{\fpeval{\SommeC+\Multik}}}{}%
\ifboolKV[ClesDistributivite]{Difference}{\xdef\SommeA{\fpeval{\SommeA-\Multij}}\xdef\SommeB{\fpeval{\SommeB-\Multim}}\xdef\SommeC{\fpeval{\SommeC-\Multik}}}{}%
}{}%
- \xintifboolexpr{\useKV[ClesDistributivite]{Echange}=3}{%
+ \xintifboolexpr{\useKV[ClesDistributivite]{Echange}==3}{%
\xintifboolexpr{\theNbCalculDistri>1}{\xintifboolexpr{\Multi<0}{(\AffichageEchange{\Multi}{0}{0})}{\AffichageEchange{\Multi}{0}{0}}}{\AffichageEchange{\Multi}{0}{0}}%
- \xintifboolexpr{\Multij=0}{}{\xintifboolexpr{\Multi=0}{}{+}\xintifboolexpr{\Multij<0}{(}{}\AffichageEchange{0}{\Multij}{0}\xintifboolexpr{\Multij<0}{)}{}}%
- \xintifboolexpr{\Multik=0}{}{\xintifboolexpr{\Multil=0}{\xintifboolexpr{#2=0}{}{+}}{+}\xintifboolexpr{\Multik<0}{(}{}\AffichageEchange{0}{\Multik}{0}\xintifboolexpr{\Multik<0}{)}{}}%
- \xintifboolexpr{\Multil=0}{}{+}\xintifboolexpr{\Multil<0}{(}{}\AffichageEchange{0}{0}{\Multil}\xintifboolexpr{\Multil<0}{)}{}%
+ \xintifboolexpr{\Multij==0}{}{\xintifboolexpr{\Multi==0}{}{+}\xintifboolexpr{\Multij<0}{(}{}\AffichageEchange{0}{\Multij}{0}\xintifboolexpr{\Multij<0}{)}{}}%
+ \xintifboolexpr{\Multik==0}{}{\xintifboolexpr{\Multil==0}{\xintifboolexpr{#2==0}{}{+}}{+}\xintifboolexpr{\Multik<0}{(}{}\AffichageEchange{0}{\Multik}{0}\xintifboolexpr{\Multik<0}{)}{}}%
+ \xintifboolexpr{\Multil==0}{}{+}\xintifboolexpr{\Multil<0}{(}{}\AffichageEchange{0}{0}{\Multil}\xintifboolexpr{\Multil<0}{)}{}%
\xdef\Multim{\fpeval{#2*#5+#3*#4}}%
\ifboolKV[ClesDistributivite]{Somme}{\xdef\SommeA{\fpeval{\SommeA+\Multil}}\xdef\SommeB{\fpeval{\SommeB+\Multim}}\xdef\SommeC{\fpeval{\SommeC+\Multi}}}{}%
\ifboolKV[ClesDistributivite]{Difference}{\xdef\SommeA{\fpeval{\SommeA-\Multil}}\xdef\SommeB{\fpeval{\SommeB-\Multim}}\xdef\SommeC{\fpeval{\SommeC-\Multi}}}{}%
}{}%
}{}%fin etape3
% Etape 4
- \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=4}{%
+ \xintifboolexpr{\useKV[ClesDistributivite]{Etape}==4}{%
\xdef\Multi{\fpeval{#2*#4}}%
\xdef\Multij{\fpeval{#2*#5}}%
\xdef\Multik{\fpeval{#3*#4}}%
@@ -4046,59 +4033,59 @@
%% expressions \`a d\'evelopper
\xintifboolexpr{\theNbCalculDistri>1}{\setcounter{NbCalculDistri}{0}}{}%
\stepcounter{NbCalculDistri}%
- \xintifboolexpr{\useKV[ClesDistributivite]{Echange}=1}{%
+ \xintifboolexpr{\useKV[ClesDistributivite]{Echange}==1}{%
\xdef\Multim{\fpeval{#2*#4+#3*#5}}%
\ifboolKV[ClesDistributivite]{Oppose}{%
\xdef\Multiko{\fpeval{-\Multik}}%
\xdef\Multimo{\fpeval{-\Multim}}%
\xdef\Multijo{\fpeval{-\Multij}}%
- \xintifboolexpr{\Multiko=0}{}{\xintifboolexpr{\Multiko<0}{(}{}\Affichage{\Multiko}{0}{0}\xintifboolexpr{\Multiko<0}{)}{}}%
- \xintifboolexpr{\Multimo=0}{}{\xintifboolexpr{\Multimo>0}{+}{+(}\Affichage{0}{\Multimo}{0}\xintifboolexpr{\Multimo<0}{)}{}}%
- \xintifboolexpr{\Multijo=0}{}{\xintifboolexpr{\Multijo>0}{+}{+(}\Affichage{0}{0}{\Multijo}\xintifboolexpr{\Multijo<0}{)}{}}%
+ \xintifboolexpr{\Multiko==0}{}{\xintifboolexpr{\Multiko<0}{(}{}\Affichage{\Multiko}{0}{0}\xintifboolexpr{\Multiko<0}{)}{}}%
+ \xintifboolexpr{\Multimo==0}{}{\xintifboolexpr{\Multimo>0}{+}{+(}\Affichage{0}{\Multimo}{0}\xintifboolexpr{\Multimo<0}{)}{}}%
+ \xintifboolexpr{\Multijo==0}{}{\xintifboolexpr{\Multijo>0}{+}{+(}\Affichage{0}{0}{\Multijo}\xintifboolexpr{\Multijo<0}{)}{}}%
}{%
\xintifboolexpr{\theNbCalculDistri>1}{\xintifboolexpr{\Multik<0}{(\Affichage{\Multik}{0}{0})}{\Affichage{\Multik}{0}{0}}}{\Affichage{\Multik}{0}{0}}%
- \xintifboolexpr{\Multim=0}{}{%
+ \xintifboolexpr{\Multim==0}{}{%
\xintifboolexpr{\Multim>0}{+\Affichage{0}{\Multim}{0}}{-\Affichage{0}{\fpeval{-\Multim}}{0}}%
}%
- \xintifboolexpr{\Multij=0}{}{\xintifboolexpr{\Multij<0}{-\Affichage{0}{0}{\fpeval{-\Multij}}}{+\Affichage{0}{0}{\Multij}}}%
+ \xintifboolexpr{\Multij==0}{}{\xintifboolexpr{\Multij<0}{-\Affichage{0}{0}{\fpeval{-\Multij}}}{+\Affichage{0}{0}{\Multij}}}%
}%
\ifboolKV[ClesDistributivite]{Somme}{\xdef\SommeA{\fpeval{\SommeA+\Multik}}\xdef\SommeB{\fpeval{\SommeB+\Multim}}\xdef\SommeC{\fpeval{\SommeC+\Multij}}}{}%
\ifboolKV[ClesDistributivite]{Difference}{\xdef\SommeA{\fpeval{\SommeA-\Multik}}\xdef\SommeB{\fpeval{\SommeB-\Multim}}\xdef\SommeC{\fpeval{\SommeC-\Multij}}}{}%
}{}%
- \xintifboolexpr{\useKV[ClesDistributivite]{Echange}=2}{%
+ \xintifboolexpr{\useKV[ClesDistributivite]{Echange}==2}{%
\xdef\Multim{\fpeval{#2*#4+#3*#5}}%
\ifboolKV[ClesDistributivite]{Oppose}{%
\xdef\Multijo{\fpeval{-\Multij}}%
\xdef\Multimo{\fpeval{-\Multim}}%
\xdef\Multiko{\fpeval{-\Multik}}%
- \xintifboolexpr{\Multijo=0}{}{\xintifboolexpr{\Multijo<0}{(}{}\Affichage{\Multijo}{0}{0}\xintifboolexpr{\Multijo<0}{)}{}}%
- \xintifboolexpr{\Multimo=0}{}{\xintifboolexpr{\Multimo>0}{+}{+(}\Affichage{0}{\Multimo}{0}\xintifboolexpr{\Multimo<0}{)}{}}%
- \xintifboolexpr{\Multiko=0}{}{\xintifboolexpr{\Multiko>0}{+}{+(}\Affichage{0}{0}{\Multiko}\xintifboolexpr{\Multiko<0}{)}{}}%
+ \xintifboolexpr{\Multijo==0}{}{\xintifboolexpr{\Multijo<0}{(}{}\Affichage{\Multijo}{0}{0}\xintifboolexpr{\Multijo<0}{)}{}}%
+ \xintifboolexpr{\Multimo==0}{}{\xintifboolexpr{\Multimo>0}{+}{+(}\Affichage{0}{\Multimo}{0}\xintifboolexpr{\Multimo<0}{)}{}}%
+ \xintifboolexpr{\Multiko==0}{}{\xintifboolexpr{\Multiko>0}{+}{+(}\Affichage{0}{0}{\Multiko}\xintifboolexpr{\Multiko<0}{)}{}}%
}{%
\xintifboolexpr{\theNbCalculDistri>1}{\xintifboolexpr{\Multij<0}{(\Affichage{\Multij}{0}{0})}{\Affichage{\Multij}{0}{0}}}{\Affichage{\Multij}{0}{0}}%
- \xintifboolexpr{\Multim=0}{}{%
+ \xintifboolexpr{\Multim==0}{}{%
\xintifboolexpr{\Multim>0}{+\Affichage{0}{\Multim}{0}}{-\Affichage{0}{\fpeval{-\Multim}}{0}}%
}%
- \xintifboolexpr{\Multik=0}{}{\xintifboolexpr{\Multik<0}{-\Affichage{0}{0}{\fpeval{-\Multik}}}{+\Affichage{0}{0}{\Multik}}}%
+ \xintifboolexpr{\Multik==0}{}{\xintifboolexpr{\Multik<0}{-\Affichage{0}{0}{\fpeval{-\Multik}}}{+\Affichage{0}{0}{\Multik}}}%
}%
\ifboolKV[ClesDistributivite]{Somme}{\xdef\SommeA{\fpeval{\SommeA+\Multij}}\xdef\SommeB{\fpeval{\SommeB+\Multim}}\xdef\SommeC{\fpeval{\SommeC+\Multik}}}{}%
\ifboolKV[ClesDistributivite]{Difference}{\xdef\SommeA{\fpeval{\SommeA-\Multij}}\xdef\SommeB{\fpeval{\SommeB-\Multim}}\xdef\SommeC{\fpeval{\SommeC-\Multik}}}{}%
}{}%
- \xintifboolexpr{\useKV[ClesDistributivite]{Echange}=3}{%
+ \xintifboolexpr{\useKV[ClesDistributivite]{Echange}==3}{%
\xdef\Multim{\fpeval{#2*#5+#3*#4}}%
\ifboolKV[ClesDistributivite]{Oppose}{%
\xdef\Multilo{\fpeval{-\Multil}}%
\xdef\Multimo{\fpeval{-\Multim}}%
\xdef\Multio{\fpeval{-\Multi}}%
- \xintifboolexpr{\Multilo=0}{}{\xintifboolexpr{\Multilo<0}{(}{}\Affichage{\Multilo}{0}{0}\xintifboolexpr{\Multilo<0}{)}{}}%
- \xintifboolexpr{\Multimo=0}{}{\xintifboolexpr{\Multimo>0}{+}{+(}\Affichage{0}{\Multimo}{0}\xintifboolexpr{\Multimo<0}{)}{}}%
- \xintifboolexpr{\Multio=0}{}{\xintifboolexpr{\Multio>0}{+}{+(}\Affichage{0}{0}{\Multio}\xintifboolexpr{\Multio<0}{)}{}}%
+ \xintifboolexpr{\Multilo==0}{}{\xintifboolexpr{\Multilo<0}{(}{}\Affichage{\Multilo}{0}{0}\xintifboolexpr{\Multilo<0}{)}{}}%
+ \xintifboolexpr{\Multimo==0}{}{\xintifboolexpr{\Multimo>0}{+}{+(}\Affichage{0}{\Multimo}{0}\xintifboolexpr{\Multimo<0}{)}{}}%
+ \xintifboolexpr{\Multio==0}{}{\xintifboolexpr{\Multio>0}{+}{+(}\Affichage{0}{0}{\Multio}\xintifboolexpr{\Multio<0}{)}{}}%
}{%
\xintifboolexpr{\theNbCalculDistri>1}{\xintifboolexpr{\Multil<0}{(\Affichage{\Multil}{0}{0})}{\Affichage{\Multil}{0}{0}}}{\Affichage{\Multil}{0}{0}}%
- \xintifboolexpr{\Multim=0}{}{%
+ \xintifboolexpr{\Multim==0}{}{%
\xintifboolexpr{\Multim>0}{+\Affichage{0}{\Multim}{0}}{-\Affichage{0}{\fpeval{-\Multim}}{0}}%
}%
- \xintifboolexpr{\Multi=0}{}{\xintifboolexpr{\Multi<0}{-\Affichage{0}{0}{\fpeval{-\Multi}}}{+\Affichage{0}{0}{\Multi}}}%
+ \xintifboolexpr{\Multi==0}{}{\xintifboolexpr{\Multi<0}{-\Affichage{0}{0}{\fpeval{-\Multi}}}{+\Affichage{0}{0}{\Multi}}}%
}
\ifboolKV[ClesDistributivite]{Somme}{\xdef\SommeA{\fpeval{\SommeA+\Multil}}\xdef\SommeB{\fpeval{\SommeB+\Multim}}\xdef\SommeC{\fpeval{\SommeC+\Multi}}}{}%
\ifboolKV[ClesDistributivite]{Difference}{\xdef\SommeA{\fpeval{\SommeA-\Multil}}\xdef\SommeB{\fpeval{\SommeB-\Multim}}\xdef\SommeC{\fpeval{\SommeC-\Multi}}}{}%
@@ -5646,7 +5633,7 @@ vardef Positions(expr Step)=
}%
% On choisit \'eventuellement le calcul \`a faire s'il y en a plusieurs.
\xdef\CompteurCalcul{\useKV[ClesThales]{ChoixCalcul}}%
- \xintifboolexpr{\CompteurCalcul>0}{\xintifboolexpr{\CompteurCalcul=1}{\xdef\cmya{0}\xdef\cmza{0}}{\xintifboolexpr{\CompteurCalcul=2}{\xdef\cmxa{0}\xdef\cmza{0}}{\xdef\cmxa{0}\xdef\cmya{0}}}}{}%
+ \xintifboolexpr{\CompteurCalcul>0}{\xintifboolexpr{\CompteurCalcul==1}{\xdef\cmya{0}\xdef\cmza{0}}{\xintifboolexpr{\CompteurCalcul==2}{\xdef\cmxa{0}\xdef\cmza{0}}{\xdef\cmxa{0}\xdef\cmya{0}}}}{}%
%%on fait les calculs
\begin{align*}
%Premier compteur \xxx
@@ -5863,7 +5850,7 @@ vardef Positions(expr Step)=
}%
% On choisit \'eventuellement le calcul \`a faire s'il y en a plusieurs.
\xdef\CompteurCalcul{\useKV[ClesThales]{ChoixCalcul}}%
- \xintifboolexpr{\CompteurCalcul>0}{\xintifboolexpr{\CompteurCalcul=1}{\xdef\cmya{0}\xdef\cmza{0}}{\xintifboolexpr{\CompteurCalcul=2}{\xdef\cmxa{0}\xdef\cmza{0}}{\xdef\cmxa{0}\xdef\cmya{0}}}}%
+ \xintifboolexpr{\CompteurCalcul>0}{\xintifboolexpr{\CompteurCalcul==1}{\xdef\cmya{0}\xdef\cmza{0}}{\xintifboolexpr{\CompteurCalcul==2}{\xdef\cmxa{0}\xdef\cmza{0}}{\xdef\cmxa{0}\xdef\cmya{0}}}}%
%%on fait les calculs
\begin{align*}
%Premier compteur \xxx
@@ -6121,7 +6108,7 @@ vardef Positions(expr Step)=
\begin{align*}
\num{#3}\times\num{#6}&=\num{\fpeval{#3*#6}}&&&\num{#4}\times\num{#5}&=\num{\fpeval{#4*#5}}
\end{align*}
- \xintifboolexpr{\NumA = \NumB}{Comme les produits en croix sont
+ \xintifboolexpr{\NumA == \NumB}{Comme les produits en croix sont
\'egaux, alors
$\dfrac{\NomA\NomM}{\NomA\NomB}=\dfrac{\NomA\NomN}{\NomA\NomC}$.\\[0.5em]%
}{%
@@ -6131,20 +6118,20 @@ vardef Positions(expr Step)=
}{%
\[\left.
\begin{array}{l}
- \dfrac{\NomA\NomM}{\NomA\NomB}=\dfrac{\num{#3}}{\num{#4}}\ifx\bla#7\bla\ifboolKV[ClesThales]{Simplification}{\PGCD{#3}{#4}\xintifboolexpr{\pgcd=1}{%il faut regarder si on doit continuer avec le PPCM...
- \PGCD{#5}{#6}\xintifboolexpr{\pgcd>1}{\xdef\DenomSimpaa{\fpeval{#6/\pgcd}}\PPCM{#4}{\DenomSimpaa}\xintifboolexpr{\ppcm=#4}{}{=\dfrac{#3\times\num{\fpeval{\ppcm/#4}}}{#4\times\num{\fpeval{\ppcm/#4}}}=\dfrac{\num{\fpeval{#3*\ppcm/#4}}}{\num{\fpeval{\ppcm}}}}}{}%
- }{=\displaystyle\Simplification[All]{#3}{#4}\PGCD{#3}{#4}\xdef\NumSimp{\fpeval{#3/\pgcd}}\xdef\DenomSimp{\fpeval{#4/\pgcd}}\PGCD{#5}{#6}\xdef\NumSimpa{\fpeval{#5/\pgcd}}\xdef\DenomSimpa{\fpeval{#6/\pgcd}}\PPCM{\DenomSimp}{\DenomSimpa}\xintifboolexpr{\fpeval{\the\ppcm/\DenomSimp}=1}{}{=\dfrac{\num{\NumSimp}\times\num{\fpeval{\the\ppcm/\DenomSimp}}}{\num{\DenomSimp}\times\PPCM{\DenomSimp}{\DenomSimpa}\num{\fpeval{\the\ppcm/\DenomSimp}}}=\dfrac{\PPCM{\DenomSimp}{\DenomSimpa}\num{\fpeval{\NumSimp*\the\ppcm/\DenomSimp}}}{\PPCM{\DenomSimp}{\DenomSimpa}\num{\the\ppcm}}}}}{\PPCM{#4}{#6}\xintifboolexpr{\fpeval{\the\ppcm/#4}=1}{}{=\dfrac{\num{#3}\times\num{\fpeval{\the\ppcm/#4}}}{\num{#4}\times\PPCM{#4}{#6}\num{\fpeval{\the\ppcm/#4}}}=\dfrac{\PPCM{#4}{#6}\num{\fpeval{#3*\the\ppcm/#4}}}{\PPCM{#4}{#6}\num{\the\ppcm}}}}\xdef\NumA{\fpeval{#3*#6}}\else%
- \xintifboolexpr{#7=1}{}{=\dfrac{\num{#3}\times\num{#7}}{\num{#4}\times\num{#7}}=\dfrac{\num{\fpeval{#3*#7}}}{\num{\fpeval{#4*#7}}}}\xdef\NumC{\fpeval{#4*#7}}\xdef\NumD{\fpeval{#6*#8}}\PPCM{\NumC}{\NumD}\xintifboolexpr{\the\ppcm=\fpeval{#4*#7}}{}{=\dfrac{\num{\fpeval{#3*#7}}\times\num{\fpeval{\the\ppcm/(#4*#7)}}}{\num{\fpeval{#4*#7}}\times\xdef\NumC{\fpeval{#4*#7}}\xdef\NumD{\fpeval{#6*#8}}\PPCM{\NumC}{\NumD}\num{\fpeval{\the\ppcm/(#4*#7)}}}=\dfrac{\xdef\NumC{\fpeval{#4*#7}}\xdef\NumD{\fpeval{#6*#8}}\PPCM{\NumC}{\NumD}\num{\fpeval{#3*\the\ppcm/#4}}}{\xdef\NumC{\fpeval{#4*#7}}\xdef\NumD{\fpeval{#6*#8}}\PPCM{\NumC}{\NumD}\num{\fpeval{\the\ppcm}}}}\xdef\NumA{\fpeval{#3*#7*#6*#8}}
+ \dfrac{\NomA\NomM}{\NomA\NomB}=\dfrac{\num{#3}}{\num{#4}}\ifx\bla#7\bla\ifboolKV[ClesThales]{Simplification}{\PGCD{#3}{#4}\xintifboolexpr{\pgcd==1}{%il faut regarder si on doit continuer avec le PPCM...
+ \PGCD{#5}{#6}\xintifboolexpr{\pgcd>1}{\xdef\DenomSimpaa{\fpeval{#6/\pgcd}}\PPCM{#4}{\DenomSimpaa}\xintifboolexpr{\ppcm==#4}{}{=\dfrac{#3\times\num{\fpeval{\ppcm/#4}}}{#4\times\num{\fpeval{\ppcm/#4}}}=\dfrac{\num{\fpeval{#3*\ppcm/#4}}}{\num{\fpeval{\ppcm}}}}}{}%
+ }{=\displaystyle\Simplification[All]{#3}{#4}\PGCD{#3}{#4}\xdef\NumSimp{\fpeval{#3/\pgcd}}\xdef\DenomSimp{\fpeval{#4/\pgcd}}\PGCD{#5}{#6}\xdef\NumSimpa{\fpeval{#5/\pgcd}}\xdef\DenomSimpa{\fpeval{#6/\pgcd}}\PPCM{\DenomSimp}{\DenomSimpa}\xintifboolexpr{\fpeval{\the\ppcm/\DenomSimp}==1}{}{=\dfrac{\num{\NumSimp}\times\num{\fpeval{\the\ppcm/\DenomSimp}}}{\num{\DenomSimp}\times\PPCM{\DenomSimp}{\DenomSimpa}\num{\fpeval{\the\ppcm/\DenomSimp}}}=\dfrac{\PPCM{\DenomSimp}{\DenomSimpa}\num{\fpeval{\NumSimp*\the\ppcm/\DenomSimp}}}{\PPCM{\DenomSimp}{\DenomSimpa}\num{\the\ppcm}}}}}{\PPCM{#4}{#6}\xintifboolexpr{\fpeval{\the\ppcm/#4}==1}{}{=\dfrac{\num{#3}\times\num{\fpeval{\the\ppcm/#4}}}{\num{#4}\times\PPCM{#4}{#6}\num{\fpeval{\the\ppcm/#4}}}=\dfrac{\PPCM{#4}{#6}\num{\fpeval{#3*\the\ppcm/#4}}}{\PPCM{#4}{#6}\num{\the\ppcm}}}}\xdef\NumA{\fpeval{#3*#6}}\else%
+ \xintifboolexpr{#7==1}{}{=\dfrac{\num{#3}\times\num{#7}}{\num{#4}\times\num{#7}}=\dfrac{\num{\fpeval{#3*#7}}}{\num{\fpeval{#4*#7}}}}\xdef\NumC{\fpeval{#4*#7}}\xdef\NumD{\fpeval{#6*#8}}\PPCM{\NumC}{\NumD}\xintifboolexpr{\the\ppcm==\fpeval{#4*#7}}{}{=\dfrac{\num{\fpeval{#3*#7}}\times\num{\fpeval{\the\ppcm/(#4*#7)}}}{\num{\fpeval{#4*#7}}\times\xdef\NumC{\fpeval{#4*#7}}\xdef\NumD{\fpeval{#6*#8}}\PPCM{\NumC}{\NumD}\num{\fpeval{\the\ppcm/(#4*#7)}}}=\dfrac{\xdef\NumC{\fpeval{#4*#7}}\xdef\NumD{\fpeval{#6*#8}}\PPCM{\NumC}{\NumD}\num{\fpeval{#3*\the\ppcm/#4}}}{\xdef\NumC{\fpeval{#4*#7}}\xdef\NumD{\fpeval{#6*#8}}\PPCM{\NumC}{\NumD}\num{\fpeval{\the\ppcm}}}}\xdef\NumA{\fpeval{#3*#7*#6*#8}}
\fi
\\
\\
\dfrac{\NomA\NomN}{\NomA\NomC}=\dfrac{\num{#5}}{\num{#6}}%
\ifx\bla#8\bla%
- \ifboolKV[ClesThales]{Simplification}{\PGCD{#5}{#6}\xintifboolexpr{\pgcd=1}{%il faut regarder si on doit continuer avec le PPCM...
- \PGCD{#3}{#4}\xintifboolexpr{\pgcd>1}{\xdef\DenomSimpaa{\fpeval{#4/\pgcd}}\PPCM{#6}{\DenomSimpaa}\xintifboolexpr{\ppcm=#6}{}{=\dfrac{#5\times\num{\fpeval{\ppcm/#6}}}{#6\times\num{\fpeval{\ppcm/#6}}}=\dfrac{\num{\fpeval{#5*\ppcm/#6}}}{\num{\fpeval{\ppcm}}}}}{}%
- }{=\displaystyle\Simplification[All]{#5}{#6}\PGCD{#5}{#6}\xdef\NumSimp{\fpeval{#5/\pgcd}}\xdef\DenomSimp{\fpeval{#6/\pgcd}}\PGCD{#3}{#4}\xdef\NumSimpa{\fpeval{#3/\pgcd}}\xdef\DenomSimpa{\fpeval{#4/\pgcd}}\PPCM{\DenomSimp}{\DenomSimpa}\xintifboolexpr{\fpeval{\the\ppcm/\DenomSimp}=1}{}{=\dfrac{\num{\NumSimp}\times\num{\fpeval{\the\ppcm/\DenomSimp}}}{\num{\DenomSimp}\times\PPCM{\DenomSimp}{\DenomSimpa}\num{\fpeval{\the\ppcm/\DenomSimp}}}=\dfrac{\PPCM{\DenomSimp}{\DenomSimpa}\num{\fpeval{\NumSimp*\the\ppcm/\DenomSimp}}}{\PPCM{\DenomSimp}{\DenomSimpa}\num{\the\ppcm}}}}}{\PPCM{#4}{#6}\xintifboolexpr{\fpeval{\the\ppcm/#6}=1}{}{=\dfrac{\num{#5}\times\num{\fpeval{\the\ppcm/#6}}}{\num{#6}\times\PPCM{#4}{#6}\num{\fpeval{\the\ppcm/#6}}}=\dfrac{\PPCM{#4}{#6}\num{\fpeval{#5*\the\ppcm/#6}}}{\PPCM{#4}{#6}\num{\the\ppcm}}}}\xdef\NumB{\fpeval{#5*#4}}%
+ \ifboolKV[ClesThales]{Simplification}{\PGCD{#5}{#6}\xintifboolexpr{\pgcd==1}{%il faut regarder si on doit continuer avec le PPCM...
+ \PGCD{#3}{#4}\xintifboolexpr{\pgcd>1}{\xdef\DenomSimpaa{\fpeval{#4/\pgcd}}\PPCM{#6}{\DenomSimpaa}\xintifboolexpr{\ppcm==#6}{}{=\dfrac{#5\times\num{\fpeval{\ppcm/#6}}}{#6\times\num{\fpeval{\ppcm/#6}}}=\dfrac{\num{\fpeval{#5*\ppcm/#6}}}{\num{\fpeval{\ppcm}}}}}{}%
+ }{=\displaystyle\Simplification[All]{#5}{#6}\PGCD{#5}{#6}\xdef\NumSimp{\fpeval{#5/\pgcd}}\xdef\DenomSimp{\fpeval{#6/\pgcd}}\PGCD{#3}{#4}\xdef\NumSimpa{\fpeval{#3/\pgcd}}\xdef\DenomSimpa{\fpeval{#4/\pgcd}}\PPCM{\DenomSimp}{\DenomSimpa}\xintifboolexpr{\fpeval{\the\ppcm/\DenomSimp}==1}{}{=\dfrac{\num{\NumSimp}\times\num{\fpeval{\the\ppcm/\DenomSimp}}}{\num{\DenomSimp}\times\PPCM{\DenomSimp}{\DenomSimpa}\num{\fpeval{\the\ppcm/\DenomSimp}}}=\dfrac{\PPCM{\DenomSimp}{\DenomSimpa}\num{\fpeval{\NumSimp*\the\ppcm/\DenomSimp}}}{\PPCM{\DenomSimp}{\DenomSimpa}\num{\the\ppcm}}}}}{\PPCM{#4}{#6}\xintifboolexpr{\fpeval{\the\ppcm/#6}==1}{}{=\dfrac{\num{#5}\times\num{\fpeval{\the\ppcm/#6}}}{\num{#6}\times\PPCM{#4}{#6}\num{\fpeval{\the\ppcm/#6}}}=\dfrac{\PPCM{#4}{#6}\num{\fpeval{#5*\the\ppcm/#6}}}{\PPCM{#4}{#6}\num{\the\ppcm}}}}\xdef\NumB{\fpeval{#5*#4}}%
\else%
- \xintifboolexpr{#8=1}{}{=\dfrac{\num{#5}\times\num{#8}}{\num{#6}\times\num{#8}}=\dfrac{\num{\fpeval{#5*#8}}}{\num{\fpeval{#6*#8}}}}\xdef\NumC{\fpeval{#4*#7}}\xdef\NumD{\fpeval{#6*#8}}\PPCM{\NumC}{\NumD}\xintifboolexpr{\the\ppcm=\fpeval{#6*#8}}{}{=\dfrac{\num{\fpeval{#5*#8}}\times\num{\fpeval{\the\ppcm/(#6*#8)}}}{\num{\fpeval{#6*#8}}\times\xdef\NumC{\fpeval{#4*#7}}\xdef\NumD{\fpeval{#6*#8}}\PPCM{\NumC}{\NumD}\num{\fpeval{\the\ppcm/(#6*#8)}}}=\dfrac{\xdef\NumC{\fpeval{#4*#7}}\xdef\NumD{\fpeval{#6*#8}}\PPCM{\NumC}{\NumD}\num{\fpeval{#5*\the\ppcm/#6}}}{\xdef\NumC{\fpeval{#4*#7}}\xdef\NumD{\fpeval{#6*#8}}\PPCM{\NumC}{\NumD}\num{\fpeval{\the\ppcm}}}
+ \xintifboolexpr{#8==1}{}{=\dfrac{\num{#5}\times\num{#8}}{\num{#6}\times\num{#8}}=\dfrac{\num{\fpeval{#5*#8}}}{\num{\fpeval{#6*#8}}}}\xdef\NumC{\fpeval{#4*#7}}\xdef\NumD{\fpeval{#6*#8}}\PPCM{\NumC}{\NumD}\xintifboolexpr{\the\ppcm==\fpeval{#6*#8}}{}{=\dfrac{\num{\fpeval{#5*#8}}\times\num{\fpeval{\the\ppcm/(#6*#8)}}}{\num{\fpeval{#6*#8}}\times\xdef\NumC{\fpeval{#4*#7}}\xdef\NumD{\fpeval{#6*#8}}\PPCM{\NumC}{\NumD}\num{\fpeval{\the\ppcm/(#6*#8)}}}=\dfrac{\xdef\NumC{\fpeval{#4*#7}}\xdef\NumD{\fpeval{#6*#8}}\PPCM{\NumC}{\NumD}\num{\fpeval{#5*\the\ppcm/#6}}}{\xdef\NumC{\fpeval{#4*#7}}\xdef\NumD{\fpeval{#6*#8}}\PPCM{\NumC}{\NumD}\num{\fpeval{\the\ppcm}}}
}\xdef\NumB{\fpeval{#5*#8*#4*#7}}
\fi\\
\end{array}
@@ -6164,7 +6151,7 @@ vardef Positions(expr Step)=
th\'eor\`eme de Thal\`es.\else%
Donc les droites $(\NomM\NomN)$ et $(\NomB\NomC)$ ne sont pas parall\`eles.\fi
}{%
- \xintifboolexpr{\NumA=\NumB}{%
+ \xintifboolexpr{\NumA==\NumB}{%
De plus, les points $\NomA$, $\NomM$, $\NomB$ sont align\'es dans
le m\^eme ordre que les points $\NomA$, $\NomN$, $\NomC$. Donc les
droites $(\NomM\NomN)$ et $(\NomB\NomC)$ sont parall\`eles d'apr\`es
@@ -6517,21 +6504,27 @@ vardef Positions(expr Step)=
label(btex #3 etex,1.15[O,C]);
label(btex ? etex,A+0.95u*unitvector(I-A));
decalage:=3mm;
+ if #6>0:
if angle(1/2[A,C]-B)>0:
label(btex \num{#6} etex,1.2[B,1/2[A,C]]);
else:
label(btex \num{#6} etex,1.2[B,1/2[A,C]]);
fi;
+ fi;
+ if #4>0:
if angle(1/2[B,C]-A)>0:
label(btex \num{#4} etex,1/2[B,C]-decalage*(unitvector(A-B)));
else:
label(btex \num{#4} etex,1/2[B,C]-decalage*(unitvector(A-B)));
- fi;
+ fi;
+ fi;
+ if #5>0:
if angle(1/2[A,B]-C)>0:
label(btex \num{#5} etex,1/2[A,B]-decalage*(unitvector(C-B)));
else:
label(btex \num{#5} etex,1/2[A,B]-decalage*(unitvector(C-B)));
fi;
+ fi;
\end{mplibcode}
\mplibcodeinherit{disable}
\else
@@ -6579,21 +6572,27 @@ vardef Positions(expr Step)=
label(btex #3 etex,1.15[O,C]);
label(btex ? etex,A+0.95u*unitvector(I-A));
decalage:=3mm;
+ if #6>0:
if angle(1/2[A,C]-B)>0:
label(btex \num{#6} etex,1.2[B,1/2[A,C]]);
else:
label(btex \num{#6} etex,1.2[B,1/2[A,C]]);
fi;
+ fi;
+ if #4>0:
if angle(1/2[B,C]-A)>0:
label(btex \num{#4} etex,1/2[B,C]-decalage*(unitvector(A-B)));
else:
label(btex \num{#4} etex,1/2[B,C]-decalage*(unitvector(A-B)));
- fi;
+ fi;
+ fi;
+ if #5>0:
if angle(1/2[A,B]-C)>0:
label(btex \num{#5} etex,1/2[A,B]-decalage*(unitvector(C-B)));
else:
label(btex \num{#5} etex,1/2[A,B]-decalage*(unitvector(C-B)));
fi;
+ fi;
\end{mpost}
\fi
}
@@ -6809,13 +6808,13 @@ vardef Positions(expr Step)=
\ifboolKV[ClesTrigo]{FigureSeule}{%
\ifx\bla#5\bla%
\ifboolKV[ClesTrigo]{Cosinus}{%
- \MPFigTrigoAngle{\NomA}{\NomB}{\NomC}{}{#3}{#4}{\useKV[ClesTrigo]{Angle}}
+ \MPFigTrigoAngle{\NomA}{\NomB}{\NomC}{-1}{#3}{#4}{\useKV[ClesTrigo]{Angle}}
}{}%
\ifboolKV[ClesTrigo]{Sinus}{%
- \MPFigTrigoAngle{\NomA}{\NomB}{\NomC}{#3}{}{#4}{\useKV[ClesTrigo]{Angle}}
+ \MPFigTrigoAngle{\NomA}{\NomB}{\NomC}{#3}{-1}{#4}{\useKV[ClesTrigo]{Angle}}
}{}%
\ifboolKV[ClesTrigo]{Tangente}{%
- \MPFigTrigoAngle{\NomA}{\NomB}{\NomC}{#3}{#4}{}{\useKV[ClesTrigo]{Angle}}
+ \MPFigTrigoAngle{\NomA}{\NomB}{\NomC}{#3}{#4}{-1}{\useKV[ClesTrigo]{Angle}}
}{}%
\else%}{%figure pour calculer une longueur
\ifboolKV[ClesTrigo]{Cosinus}{%
@@ -6847,17 +6846,17 @@ vardef Positions(expr Step)=
\ifx\bla#5\bla%
\ifboolKV[ClesTrigo]{Cosinus}{%
\begin{center}
- \MPFigTrigoAngle{\NomA}{\NomB}{\NomC}{}{#3}{#4}{\useKV[ClesTrigo]{Angle}}
+ \MPFigTrigoAngle{\NomA}{\NomB}{\NomC}{-1}{#3}{#4}{\useKV[ClesTrigo]{Angle}}
\end{center}
}{}%
\ifboolKV[ClesTrigo]{Sinus}{%
\begin{center}
- \MPFigTrigoAngle{\NomA}{\NomB}{\NomC}{#3}{}{#4}{\useKV[ClesTrigo]{Angle}}
+ \MPFigTrigoAngle{\NomA}{\NomB}{\NomC}{#3}{-1}{#4}{\useKV[ClesTrigo]{Angle}}
\end{center}
}{}%
\ifboolKV[ClesTrigo]{Tangente}{%
\begin{center}
- \MPFigTrigoAngle{\NomA}{\NomB}{\NomC}{#3}{#4}{}{\useKV[ClesTrigo]{Angle}}
+ \MPFigTrigoAngle{\NomA}{\NomB}{\NomC}{#3}{#4}{-1}{\useKV[ClesTrigo]{Angle}}
\end{center}
}{}%
\else%}{%figure pour calculer une longueur
@@ -6921,7 +6920,7 @@ vardef Positions(expr Step)=
FreqVide=false,AngVide=false,ECCVide=false,TotalVide=false,Sondage=false,%
Tableau=false,Stretch=1,Frequence=false,EffectifTotal=false,%
Etendue=false,Moyenne=false,SET=false,Mediane=false,Total=false,Concret=false,%
-Unite={},Largeur=1cm,Precision=2,Donnee=Valeurs,Effectif=Effectif,Origine=0,Angle=false,SemiAngle=false,Qualitatif=false,TableauVide=false,Graphique=false,Batons=true,Unitex=0.5,Unitey=0.5,Rayon=3cm,AffichageAngle=false,Liste=false,ECC=false,Coupure=10,CouleurTab=gray!15,ListeCouleurs={white},Hachures=false,Inverse=false,AbscisseRotation=false}
+Unite={},Largeur=1cm,Precision=2,Donnee=Valeurs,Effectif=Effectif,Grille=false,Origine=0,Angle=false,SemiAngle=false,Qualitatif=false,TableauVide=false,Graphique=false,Batons=true,Pasx=1,Pasy=1,Unitex=0.5,Unitey=0.5,Rayon=3cm,AffichageAngle=false,Liste=false,ECC=false,Coupure=10,CouleurTab=gray!15,ListeCouleurs={white},Hachures=false,Inverse=false,AbscisseRotation=false,Representation=false}
% La construction du tableau
\def\addtotok#1#2{#1\expandafter{\the#1#2}}
@@ -7159,6 +7158,20 @@ Unite={},Largeur=1cm,Precision=2,Donnee=Valeurs,Effectif=Effectif,Origine=0,Angl
endfor;
enddef;
toto(#4);
+ boolean Grille;
+ Grille:=\useKV[ClesStat]{Grille};
+ Pasx:=\useKV[ClesStat]{Pasx};
+ Pasy:=\useKV[ClesStat]{Pasy};
+ if Grille:
+ drawoptions(withcolor 0.75white);
+ for k=0 step Pasx until ((maxx+1)):
+ trace (k*unitex,0)--(k*unitex,unitey*(maxy+1));
+ endfor;
+ for k=0 step Pasy until ((maxy+1)):
+ trace (0,k*unitey)--(unitex*(maxx+1),k*unitey);
+ endfor;
+ drawoptions();
+ fi;
for k=1 upto n:
draw A[k]--P[k] withpen pencircle scaled 2bp;
draw B[k]--P[k] dashed evenly;
@@ -7172,7 +7185,7 @@ Unite={},Largeur=1cm,Precision=2,Donnee=Valeurs,Effectif=Effectif,Origine=0,Angl
\mpxcommands{%
\setKV[ClesStat]{#1}%
}
- \begin{mpost}
+ \begin{mpost}[mpsettings={boolean Grille; Grille:=\useKV[ClesStat]{Grille}; Pasx:=\useKV[ClesStat]{Pasx}; Pasy:=\useKV[ClesStat]{Pasy};}]
maxx:=0;
maxy:=0;
unitex:=#2*cm;
@@ -7202,6 +7215,16 @@ Unite={},Largeur=1cm,Precision=2,Donnee=Valeurs,Effectif=Effectif,Origine=0,Angl
endfor;
enddef;
toto(#4);
+ if Grille:
+ drawoptions(withcolor 0.75white);
+ for k=0 step Pasx until ((maxx+1)):
+ trace (k*unitex,0)--(k*unitex,unitey*(maxy+1));
+ endfor;
+ for k=0 step Pasy until ((maxy+1)):
+ trace (0,k*unitey)--(unitex*(maxx+1),k*unitey);
+ endfor;
+ drawoptions();
+ fi;
for k=1 upto n:
draw A[k]--P[k] withpen pencircle scaled 2bp;
draw B[k]--P[k] dashed evenly;
@@ -7245,6 +7268,20 @@ Unite={},Largeur=1cm,Precision=2,Donnee=Valeurs,Effectif=Effectif,Origine=0,Angl
endfor;
enddef;
toto(#4);
+ boolean Grille;
+ Grille:=\useKV[ClesStat]{Grille};
+ Pasx:=\useKV[ClesStat]{Pasx};
+ Pasy:=\useKV[ClesStat]{Pasy};
+ if Grille:
+ drawoptions(withcolor 0.75white);
+ for k=0 step Pasx until ((n+1)):
+ trace (k*unitex,0)--(k*unitex,unitey*(maxy+1));
+ endfor;
+ for k=0 step Pasy until ((maxy+1)):
+ trace (0,k*unitey)--(unitex*(n+1),k*unitey);
+ endfor;
+ drawoptions();
+ fi;
for k=0 upto n-1:
draw A[k]--P[k] withpen pencircle scaled 2bp;
draw B[k]--P[k] dashed evenly;
@@ -7258,7 +7295,7 @@ Unite={},Largeur=1cm,Precision=2,Donnee=Valeurs,Effectif=Effectif,Origine=0,Angl
\mpxcommands{%
\setKV[ClesStat]{#1}%
}
- \begin{mpost}
+ \begin{mpost}[mpsettings={boolean Grille; Grille:=\useKV[ClesStat]{Grille}; Pasx:=\useKV[ClesStat]{Pasx}; Pasy:=\useKV[ClesStat]{Pasy};}]
maxy:=0;
unitex:=#2*cm;
unitey:=#3*cm;
@@ -7285,6 +7322,16 @@ Unite={},Largeur=1cm,Precision=2,Donnee=Valeurs,Effectif=Effectif,Origine=0,Angl
endfor;
enddef;
toto(#4);
+ if Grille:
+ drawoptions(withcolor 0.75white);
+ for k=0 step Pasx until ((n+1)):
+ trace (k*unitex,0)--(k*unitex,unitey*(maxy+1));
+ endfor;
+ for k=0 step Pasy until ((maxy+1)):
+ trace (0,k*unitey)--(unitex*(n+1),k*unitey);
+ endfor;
+ drawoptions();
+ fi;
for k=0 upto n-1:
draw A[k]--P[k] withpen pencircle scaled 2bp;
draw B[k]--P[k] dashed evenly;
@@ -7570,18 +7617,26 @@ Unite={},Largeur=1cm,Precision=2,Donnee=Valeurs,Effectif=Effectif,Origine=0,Angl
\newcommand\Stat[2][]{%
\useKVdefault[ClesStat]%
\setKV[ClesStat]{#1}%
- \ifboolKV[ClesStat]{Liste}{%
- \setsepchar{,}\ignoreemptyitems%
- \readlist*\Liste{#2}%
- \xdef\foo{}%
- \setsepchar[*]{,*/}\ignoreemptyitems%
- \xintFor* ##1 in {\xintSeq {1}{\Listelen}}\do{%
- \xdef\foo{\foo 1/\Liste[##1],}%
- }%
- \readlist*\ListeComplete{\foo}%
- \setKV[ClesStat]{Qualitatif}%
+ \ifboolKV[ClesStat]{Representation}{%
+ \setKV[TraceG]{Xmin=0,Ymin=0}%
+ \setKV[TraceG]{#1}%
+ \readlist*\ListePointsPlaces{#2}%
+ \newtoks\toklistepoint%
+ \foreachitem\compteur\in\ListePointsPlaces{\expandafter\Updatetoks\compteur\nil}%
+ \MPPlacePoint[#1]{\the\toklistepoint}%
}{%
- \ifboolKV[ClesStat]{Sondage}{%
+ \ifboolKV[ClesStat]{Liste}{%
+ \setsepchar{,}\ignoreemptyitems%
+ \readlist*\Liste{#2}%
+ \xdef\foo{}%
+ \setsepchar[*]{,*/}\ignoreemptyitems%
+ \xintFor* ##1 in {\xintSeq {1}{\Listelen}}\do{%
+ \xdef\foo{\foo 1/\Liste[##1],}%
+ }%
+ \readlist*\ListeComplete{\foo}%
+ \setKV[ClesStat]{Qualitatif}%
+ }{%
+ \ifboolKV[ClesStat]{Sondage}{%
\setsepchar{,}\ignoreemptyitems%
\readlist*\Liste{#2}%
% "liste vide"
@@ -7750,7 +7805,7 @@ Unite={},Largeur=1cm,Precision=2,Donnee=Valeurs,Effectif=Effectif,Origine=0,Angl
\begin{center}
\begin{minipage}{0.9\linewidth}
\DTLforeach*{mtdb}{\numeroDonnee=Numeric}{\num{\numeroDonnee}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}\DTLiflastrow{.}{;
- }\nbdonnees=\fpeval{\nbdonnees+1}\modulo{\nbdonnees}{\useKV[ClesStat]{Coupure}}\xintifboolexpr{\remainder=0}{\\}{}}
+ }\nbdonnees=\fpeval{\nbdonnees+1}\modulo{\nbdonnees}{\useKV[ClesStat]{Coupure}}\xintifboolexpr{\remainder==0}{\\}{}}
\end{minipage}
\end{center}%
\medskip%
@@ -7890,6 +7945,7 @@ Unite={},Largeur=1cm,Precision=2,Donnee=Valeurs,Effectif=Effectif,Origine=0,Angl
}{}%
}%
}%
+}
%%%
% Radar
@@ -8116,7 +8172,7 @@ Unite={},Largeur=1cm,Precision=2,Donnee=Valeurs,Effectif=Effectif,Origine=0,Angl
%%%
% Equations
%%%
-\setKVdefault[ClesEquation]{Ecart=0.5,Fleches=false,FlecheDiv=false,Laurent=false,Decomposition=false,Terme=false,Composition=false,Symbole=false,Entier=false,Lettre=x,Solution=false,LettreSol=true,Bloc=false,Simplification=false,CouleurTerme=black,CouleurCompo=black,CouleurSous=red,CouleurSymbole=orange,Verification=false,Nombre=0,Egalite=false,Produit=false,Facteurs=false,Carre=false,Exact=false,Pose=false,Equivalence=false}
+\setKVdefault[ClesEquation]{Ecart=0.5,Fleches=false,FlecheDiv=false,Laurent=false,Decomposition=false,Terme=false,Composition=false,Symbole=false,Decimal=false,Entier=false,Lettre=x,Solution=false,LettreSol=true,Bloc=false,Simplification=false,CouleurTerme=black,CouleurCompo=black,CouleurSous=red,CouleurSymbole=orange,Verification=false,Nombre=0,Egalite=false,Produit=false,Facteurs=false,Carre=false,Exact=false,Pose=false,Equivalence=false}
\newcommand\rightcomment[4]%
{\begin{tikzpicture}[remember picture,overlay]
@@ -8285,7 +8341,7 @@ Unite={},Largeur=1cm,Precision=2,Donnee=Valeurs,Effectif=Effectif,Origine=0,Angl
\setKV[ClesEquation]{#1}%
\xintifboolexpr{#2<0}{%
Comme $\num{#2}$ est n\'egatif, alors l'\'equation $\useKV[ClesEquation]{Lettre}^2=\num{#2}$ n'a aucune solution.%
- }{\xintifboolexpr{#2=0}{%
+ }{\xintifboolexpr{#2==0}{%
L'\'equation $\useKV[ClesEquation]{Lettre}^2=0$ a une unique solution : $\useKV[ClesEquation]{Lettre}=0$.%
}{%
Comme \num{#2} est positif, alors l'\'equation $\useKV[ClesEquation]{Lettre}^2=\num{#2}$ a deux solutions :%
@@ -8305,24 +8361,24 @@ Unite={},Largeur=1cm,Precision=2,Donnee=Valeurs,Effectif=Effectif,Origine=0,Angl
\ifboolKV[ClesEquation]{Equivalence}{%
\[\Distri{#2}{#3}{#4}{#5}=0\]
\begin{align*}%
- &\makebox[0pt]{$\Longleftrightarrow$}&\xintifboolexpr{#3=0}{\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}}{\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}}&=0&\quad&\makebox[0pt]{ou}\quad&\xintifboolexpr{#5=0}{\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}}{\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}}&=0\\
- &\makebox[0pt]{$\Longleftrightarrow$}&\xintifboolexpr{#3=0}{\xdef\Coeffa{1}\xdef\Coeffb{\fpeval{0-#3}}\xintifboolexpr{#2=1}{&}{\useKV[ClesEquation]{Lettre}&=0}}{\xdef\Coeffa{#2}\xdef\Coeffb{\fpeval{0-#3}}\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}&=\num{\Coeffb}}&&&\xintifboolexpr{#5=0}{\xdef\Coeffc{1}\xdef\Coeffd{\fpeval{0-#5}}\xintifboolexpr{#4=1}{&}{\useKV[ClesEquation]{Lettre}&=0}}{\xdef\Coeffc{#4}\xdef\Coeffd{\fpeval{0-#5}}\xintifboolexpr{\Coeffc=1}{}{\num{\Coeffc}}\useKV[ClesEquation]{Lettre}&=\num{\Coeffd}}%\\
- \xintifboolexpr{\Coeffa=1 'and' \Coeffc=1}{}{\\%\ifnum\cmtd>1
- &\makebox[0pt]{$\Longleftrightarrow$}&\xintifboolexpr{\Coeffa=1}{&}{\useKV[ClesEquation]{Lettre}&=\frac{\num{\Coeffb}}{\num{\Coeffa}}}\xintifboolexpr{\Coeffc=1}{}{&&&\useKV[ClesEquation]{Lettre}&=\frac{\num{\Coeffd}}{\num{\Coeffc}}}
+ &\makebox[0pt]{$\Longleftrightarrow$}&\xintifboolexpr{#3==0}{\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}}{\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}}&=0&\quad&\makebox[0pt]{ou}\quad&\xintifboolexpr{#5==0}{\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}}{\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}}&=0\\
+ &\makebox[0pt]{$\Longleftrightarrow$}&\xintifboolexpr{#3==0}{\xdef\Coeffa{1}\xdef\Coeffb{\fpeval{0-#3}}\xintifboolexpr{#2==1}{&}{\useKV[ClesEquation]{Lettre}&=0}}{\xdef\Coeffa{#2}\xdef\Coeffb{\fpeval{0-#3}}\xintifboolexpr{\Coeffa==1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}&=\num{\Coeffb}}&&&\xintifboolexpr{#5==0}{\xdef\Coeffc{1}\xdef\Coeffd{\fpeval{0-#5}}\xintifboolexpr{#4==1}{&}{\useKV[ClesEquation]{Lettre}&=0}}{\xdef\Coeffc{#4}\xdef\Coeffd{\fpeval{0-#5}}\xintifboolexpr{\Coeffc==1}{}{\num{\Coeffc}}\useKV[ClesEquation]{Lettre}&=\num{\Coeffd}}%\\
+ \xintifboolexpr{\Coeffa==1 'and' \Coeffc==1}{}{\\%\ifnum\cmtd>1
+ &\makebox[0pt]{$\Longleftrightarrow$}&\xintifboolexpr{\Coeffa==1}{&}{\useKV[ClesEquation]{Lettre}&=\frac{\num{\Coeffb}}{\num{\Coeffa}}}\xintifboolexpr{\Coeffc==1}{}{&&&\useKV[ClesEquation]{Lettre}&=\frac{\num{\Coeffd}}{\num{\Coeffc}}}
% accolade%\\
%%%%
\ifboolKV[ClesEquation]{Entier}{%
\xdef\TSimp{}%
- \SSimpliTest{\Coeffb}{\Coeffa}\ifthenelse{\boolean{Simplification}}{\xintifboolexpr{#3=0}{\xdef\TSimp{0}}{\xdef\TSimp{1}}}{\xdef\TSimp{0}}
- \SSimpliTest{\Coeffd}{\Coeffc}\ifthenelse{\boolean{Simplification}}{\xintifboolexpr{#5=0}{}{\xdef\TSimp{\fpeval{\TSimp+1}}}}{}
- \xintifboolexpr{\TSimp=0}{}{\\
+ \SSimpliTest{\Coeffb}{\Coeffa}\ifthenelse{\boolean{Simplification}}{\xintifboolexpr{#3==0}{\xdef\TSimp{0}}{\xdef\TSimp{1}}}{\xdef\TSimp{0}}
+ \SSimpliTest{\Coeffd}{\Coeffc}\ifthenelse{\boolean{Simplification}}{\xintifboolexpr{#5==0}{}{\xdef\TSimp{\fpeval{\TSimp+1}}}}{}
+ \xintifboolexpr{\TSimp==0}{}{\\
\ifboolKV[ClesEquation]{Simplification}{%
- &\makebox[0pt]{$\Longleftrightarrow$}&\SSimpliTest{\Coeffb}{\Coeffa}\xintifboolexpr{\Coeffa=1}{&}{\ifthenelse{\boolean{Simplification}}{\useKV[ClesEquation]{Lettre}&=\SSimplifie{\Coeffb}{\Coeffa}}{&}%\\
+ &\makebox[0pt]{$\Longleftrightarrow$}&\SSimpliTest{\Coeffb}{\Coeffa}\xintifboolexpr{\Coeffa==1}{&}{\ifthenelse{\boolean{Simplification}}{\useKV[ClesEquation]{Lettre}&=\SSimplifie{\Coeffb}{\Coeffa}}{&}%\\
}
}{}
&&&\ifboolKV[ClesEquation]{Simplification}{%
\SSimpliTest{\Coeffd}{\Coeffc}%
- \xintifboolexpr{\Coeffc=1}{}{\ifthenelse{\boolean{Simplification}}{\useKV[ClesEquation]{Lettre}&=\SSimplifie{\Coeffd}{\Coeffc}}{}%\\
+ \xintifboolexpr{\Coeffc==1}{}{\ifthenelse{\boolean{Simplification}}{\useKV[ClesEquation]{Lettre}&=\SSimplifie{\Coeffd}{\Coeffc}}{}%\\
}
}{}
}
@@ -8331,25 +8387,25 @@ Unite={},Largeur=1cm,Precision=2,Donnee=Valeurs,Effectif=Effectif,Origine=0,Angl
\end{align*}
}{%
\begin{align*}
- \xintifboolexpr{#3=0}{\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}}{\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}}&=0&&\text{ou}&\xintifboolexpr{#5=0}{\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}}{\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}}&=0\\
- \xintifboolexpr{#3=0}{\xdef\Coeffa{1}\xdef\Coeffb{\fpeval{0-#3}}\xintifboolexpr{#2=1}{&}{\useKV[ClesEquation]{Lettre}&=0}}{\xdef\Coeffa{#2}\xdef\Coeffb{\fpeval{0-#3}}\xintifboolexpr{\Coeffa=1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}&=\num{\Coeffb}}&&&\xintifboolexpr{#5=0}{\xdef\Coeffc{1}\xdef\Coeffd{\fpeval{0-#5}}\xintifboolexpr{#4=1}{&}{\useKV[ClesEquation]{Lettre}&=0}}{\xdef\Coeffc{#4}\xdef\Coeffd{\fpeval{0-#5}}\xintifboolexpr{\Coeffc=1}{}{\num{\Coeffc}}\useKV[ClesEquation]{Lettre}&=\num{\Coeffd}}%\\
- \xintifboolexpr{\Coeffa=1 'and' \Coeffc=1}{}{\\%\ifnum\cmtd>1
- \xintifboolexpr{\Coeffa=1}{&}{\useKV[ClesEquation]{Lettre}&=\frac{\num{\Coeffb}}{\num{\Coeffa}}}\xintifboolexpr{\Coeffc=1}{}{&&&\useKV[ClesEquation]{Lettre}&=\frac{\num{\Coeffd}}{\num{\Coeffc}}}
+ \xintifboolexpr{#3==0}{\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}}{\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}}&=0&&\text{ou}&\xintifboolexpr{#5==0}{\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}}{\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}}&=0\\
+ \xintifboolexpr{#3==0}{\xdef\Coeffa{1}\xdef\Coeffb{\fpeval{0-#3}}\xintifboolexpr{#2==1}{&}{\useKV[ClesEquation]{Lettre}&=0}}{\xdef\Coeffa{#2}\xdef\Coeffb{\fpeval{0-#3}}\xintifboolexpr{\Coeffa==1}{}{\num{\Coeffa}}\useKV[ClesEquation]{Lettre}&=\num{\Coeffb}}&&&\xintifboolexpr{#5==0}{\xdef\Coeffc{1}\xdef\Coeffd{\fpeval{0-#5}}\xintifboolexpr{#4==1}{&}{\useKV[ClesEquation]{Lettre}&=0}}{\xdef\Coeffc{#4}\xdef\Coeffd{\fpeval{0-#5}}\xintifboolexpr{\Coeffc==1}{}{\num{\Coeffc}}\useKV[ClesEquation]{Lettre}&=\num{\Coeffd}}%\\
+ \xintifboolexpr{\Coeffa==1 'and' \Coeffc==1}{}{\\%\ifnum\cmtd>1
+ \xintifboolexpr{\Coeffa==1}{&}{\useKV[ClesEquation]{Lettre}&=\frac{\num{\Coeffb}}{\num{\Coeffa}}}\xintifboolexpr{\Coeffc==1}{}{&&&\useKV[ClesEquation]{Lettre}&=\frac{\num{\Coeffd}}{\num{\Coeffc}}}
%accolade%\\
%%%%
\ifboolKV[ClesEquation]{Entier}{%
\xdef\TSimp{}
- \SSimpliTest{\Coeffb}{\Coeffa}\ifthenelse{\boolean{Simplification}}{\xintifboolexpr{#3=0}{\xdef\TSimp{0}}{\xdef\TSimp{1}}}{\xdef\TSimp{0}}
- \SSimpliTest{\Coeffd}{\Coeffc}\ifthenelse{\boolean{Simplification}}{\xintifboolexpr{#5=0}{}{\xdef\TSimp{\fpeval{\TSimp+1}}}}{}
- \xintifboolexpr{\TSimp=0}{}{\\
+ \SSimpliTest{\Coeffb}{\Coeffa}\ifthenelse{\boolean{Simplification}}{\xintifboolexpr{#3==0}{\xdef\TSimp{0}}{\xdef\TSimp{1}}}{\xdef\TSimp{0}}
+ \SSimpliTest{\Coeffd}{\Coeffc}\ifthenelse{\boolean{Simplification}}{\xintifboolexpr{#5==0}{}{\xdef\TSimp{\fpeval{\TSimp+1}}}}{}
+ \xintifboolexpr{\TSimp==0}{}{\\
\ifboolKV[ClesEquation]{Simplification}{%
\SSimpliTest{\Coeffb}{\Coeffa}
- \xintifboolexpr{\Coeffa=1}{&}{\ifthenelse{\boolean{Simplification}}{\useKV[ClesEquation]{Lettre}&=\SSimplifie{\Coeffb}{\Coeffa}}{&}%\\
+ \xintifboolexpr{\Coeffa==1}{&}{\ifthenelse{\boolean{Simplification}}{\useKV[ClesEquation]{Lettre}&=\SSimplifie{\Coeffb}{\Coeffa}}{&}%\\
}
}{}
&&&\ifboolKV[ClesEquation]{Simplification}{%
\SSimpliTest{\Coeffd}{\Coeffc}%
- \xintifboolexpr{\Coeffc=1}{}{\ifthenelse{\boolean{Simplification}}{\useKV[ClesEquation]{Lettre}&=\SSimplifie{\Coeffd}{\Coeffc}}{}%\\
+ \xintifboolexpr{\Coeffc==1}{}{\ifthenelse{\boolean{Simplification}}{\useKV[ClesEquation]{Lettre}&=\SSimplifie{\Coeffd}{\Coeffc}}{}%\\
}
}{}
}
@@ -8357,24 +8413,24 @@ Unite={},Largeur=1cm,Precision=2,Donnee=Valeurs,Effectif=Effectif,Origine=0,Angl
}
\end{align*}
}%
- \ifboolKV[ClesEquation]{Solution}{L'\'equation $\xintifboolexpr{#3=0}{\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}}{(\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}})}\xintifboolexpr{#5=0}{\times\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}}{(\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}})}=0$ a deux solutions : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\ifboolKV[ClesEquation]{LettreSol}{\useKV[ClesEquation]{Lettre}=}{}\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$ et \opdiv*{\Coeffd}{\Coeffc}{solution}{resteequa}\opcmp{resteequa}{0}$\ifboolKV[ClesEquation]{LettreSol}{\useKV[ClesEquation]{Lettre}=}{}\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffd}{\Coeffc}}{\frac{\num{\Coeffd}}{\num{\Coeffc}}}\fi$.
+ \ifboolKV[ClesEquation]{Solution}{L'\'equation $\xintifboolexpr{#3==0}{\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}}{(\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}})}\xintifboolexpr{#5==0}{\times\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}}{(\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}})}=0$ a deux solutions : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\ifboolKV[ClesEquation]{LettreSol}{\useKV[ClesEquation]{Lettre}=}{}\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$ et \opdiv*{\Coeffd}{\Coeffc}{solution}{resteequa}\opcmp{resteequa}{0}$\ifboolKV[ClesEquation]{LettreSol}{\useKV[ClesEquation]{Lettre}=}{}\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffd}{\Coeffc}}{\frac{\num{\Coeffd}}{\num{\Coeffc}}}\fi$.
}{}%
}
\newcommand\Verification[5][]{%
- \setKV[ClesEquation]{#1}
- \xdef\ValeurTest{\useKV[ClesEquation]{Nombre}}
- Testons la valeur $\useKV[ClesEquation]{Lettre}=\num{\ValeurTest}$ :
+ \setKV[ClesEquation]{#1}%
+ \xdef\ValeurTest{\useKV[ClesEquation]{Nombre}}%
+ Testons la valeur $\useKV[ClesEquation]{Lettre}=\num{\ValeurTest}$ :%
\begin{align*}
- \xintifboolexpr{#2=0}{\num{#3}}{\num{#2}\times\xintifboolexpr{\ValeurTest<0}{(\num{\ValeurTest})}{\num{\ValeurTest}}\xintifboolexpr{#3=0}{}{\xintifboolexpr{#3>0}{+\num{#3}}{\num{#3}}}}&&\xintifboolexpr{#4=0}{\num{#5}}{\num{#4}\times\xintifboolexpr{\ValeurTest<0}{(\num{\ValeurTest})}{\num{\ValeurTest}}\xintifboolexpr{#5=0}{}{\xintifboolexpr{#5>0}{+\num{#5}}{\num{#5}}}}\\
- \xintifboolexpr{#2=0}{}{\num{\fpeval{#2*\useKV[ClesEquation]{Nombre}}}\xintifboolexpr{#3=0}{}{\xintifboolexpr{#3>0}{+\num{#3}}{\num{#3}}}}&&\xintifboolexpr{#4=0}{}{\num{\fpeval{#4*\useKV[ClesEquation]{Nombre}}}\xintifboolexpr{#5=0}{}{\xintifboolexpr{#5>0}{+\num{#5}}{\num{#5}}}}\\
- \xintifboolexpr{#2=0}{}{\num{\fpeval{#2*\useKV[ClesEquation]{Nombre}+#3}}}&&\xintifboolexpr{#4=0}{}{\num{\fpeval{#4*\useKV[ClesEquation]{Nombre}+#5}}}
+ \xintifboolexpr{#2==0}{\num{#3}}{\num{#2}\times\xintifboolexpr{\ValeurTest<0}{(\num{\ValeurTest})}{\num{\ValeurTest}}\xintifboolexpr{#3==0}{}{\xintifboolexpr{#3>0}{+\num{#3}}{\num{#3}}}}&&\xintifboolexpr{#4==0}{\num{#5}}{\num{#4}\times\xintifboolexpr{\ValeurTest<0}{(\num{\ValeurTest})}{\num{\ValeurTest}}\xintifboolexpr{#5==0}{}{\xintifboolexpr{#5>0}{+\num{#5}}{\num{#5}}}}\\
+ \xintifboolexpr{#2==0}{}{\num{\fpeval{#2*\useKV[ClesEquation]{Nombre}}}\xintifboolexpr{#3==0}{}{\xintifboolexpr{#3>0}{+\num{#3}}{\num{#3}}}}&&\xintifboolexpr{#4==0}{}{\num{\fpeval{#4*\useKV[ClesEquation]{Nombre}}}\xintifboolexpr{#5==0}{}{\xintifboolexpr{#5>0}{+\num{#5}}{\num{#5}}}}\\
+ \xintifboolexpr{#2==0}{}{\num{\fpeval{#2*\useKV[ClesEquation]{Nombre}+#3}}}&&\xintifboolexpr{#4==0}{}{\num{\fpeval{#4*\useKV[ClesEquation]{Nombre}+#5}}}
\end{align*}
- \xdef\Testa{\fpeval{#2*\useKV[ClesEquation]{Nombre}+#3}}\xdef\Testb{\fpeval{#4*\useKV[ClesEquation]{Nombre}+#5}}
+ \xdef\Testa{\fpeval{#2*\useKV[ClesEquation]{Nombre}+#3}}\xdef\Testb{\fpeval{#4*\useKV[ClesEquation]{Nombre}+#5}}%
\ifboolKV[ClesEquation]{Egalite}{%
- Comme \xintifboolexpr{\Testa=\Testb}{$\num{\Testa}=\num{\Testb}$}{$\num{\Testa}\not=\num{\Testb}$}, alors l'\'egalit\'e $\xintifboolexpr{#2=0}{\num{#3}}{\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3=0}{}{\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}}}=\xintifboolexpr{#4=0}{\num{#5}}{\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5=0}{}{\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}}}$ \xintifboolexpr{\Testa=\Testb}{ est v\'erifi\'ee }{ n'est pas v\'erifi\'ee } pour $\useKV[ClesEquation]{Lettre}=\num{\useKV[ClesEquation]{Nombre}}$.%
- }{\xintifboolexpr{\Testa=\Testb}{Comme $\num{\Testa}=\num{\Testb}$, alors $\useKV[ClesEquation]{Lettre}=\num{\useKV[ClesEquation]{Nombre}}$ est bien }{Comme $\num{\Testa}\not=\num{\Testb}$, alors $\useKV[ClesEquation]{Lettre}=\num{\useKV[ClesEquation]{Nombre}}$ n'est pas }une solution de l'\'equation $\xintifboolexpr{#2=0}{\num{#3}}{\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3=0}{}{\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}}}=\xintifboolexpr{#4=0}{\num{#5}}{\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5=0}{}{\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}}}$.}
-}
+ Comme \xintifboolexpr{\Testa==\Testb}{$\num{\Testa}=\num{\Testb}$}{$\num{\Testa}\not=\num{\Testb}$}, alors l'\'egalit\'e $\xintifboolexpr{#2==0}{\num{#3}}{\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3==0}{}{\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}}}=\xintifboolexpr{#4==0}{\num{#5}}{\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5==0}{}{\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}}}$ \xintifboolexpr{\Testa==\Testb}{ est v\'erifi\'ee }{ n'est pas v\'erifi\'ee } pour $\useKV[ClesEquation]{Lettre}=\num{\useKV[ClesEquation]{Nombre}}$.%
+ }{\xintifboolexpr{\Testa==\Testb}{Comme $\num{\Testa}=\num{\Testb}$, alors $\useKV[ClesEquation]{Lettre}=\num{\useKV[ClesEquation]{Nombre}}$ est bien }{Comme $\num{\Testa}\not=\num{\Testb}$, alors $\useKV[ClesEquation]{Lettre}=\num{\useKV[ClesEquation]{Nombre}}$ n'est pas }une solution de l'\'equation $\xintifboolexpr{#2==0}{\num{#3}}{\xintifboolexpr{#2==1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3==0}{}{\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}}}=\xintifboolexpr{#4==0}{\num{#5}}{\xintifboolexpr{#4==1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5==0}{}{\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}}}$.}%
+}%
%%%
% Proportionnalit\'e
@@ -8549,7 +8605,7 @@ Unite={},Largeur=1cm,Precision=2,Donnee=Valeurs,Effectif=Effectif,Origine=0,Angl
\xdef\NomCouleurTab{\useKV[ClesPourcentage]{CouleurTab}}%
\xdef\NomLargeurTab{\useKV[ClesPourcentage]{Largeur}}%
\begin{center}
- \Propor[GrandeurA=\NomA,GrandeurB=\NomB,CouleurTab=\NomCouleurTab,Largeur=\NomLargeurTab]{/#3,#2/100}
+ \Propor[Math,GrandeurA=\NomA,GrandeurB=\NomB,CouleurTab=\NomCouleurTab,Largeur=\NomLargeurTab]{/\num{#3},\num{#2}/100}
\end{center}
\FlecheCoefInv{\tiny$\times\num{\fpeval{#2/100}}$}%
On obtient une \useKV[ClesPourcentage]{MotReduction} de $\num{\fpeval{#2/100}}\times\num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}=\num{\fpeval{#3*#2/100}}$\ifboolKV[ClesPourcentage]{Concret}{~\useKV[ClesPourcentage]{Unite}}{}. Donc un total de $\num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}-\num{\fpeval{#3*#2/100}}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}=\num{\fpeval{#3*(1-#2/100)}}$\ifboolKV[ClesPourcentage]{Concret}{~\useKV[ClesPourcentage]{Unite}}{}.%
@@ -8570,7 +8626,7 @@ Unite={},Largeur=1cm,Precision=2,Donnee=Valeurs,Effectif=Effectif,Origine=0,Angl
\xdef\NomCouleurTab{\useKV[ClesPourcentage]{CouleurTab}}%
\xdef\NomLargeurTab{\useKV[ClesPourcentage]{Largeur}}%
\begin{center}%
- \Propor[GrandeurA=\NomA,GrandeurB=\NomB,CouleurTab=\NomCouleurTab,Largeur=\NomLargeurTab]{/#3,#2/100}%
+ \Propor[Math,GrandeurA=\NomA,GrandeurB=\NomB,CouleurTab=\NomCouleurTab,Largeur=\NomLargeurTab]{/\num{#3},\num{#2}/100}%
\end{center}%
\FlecheCoefInv{\tiny$\times\num{\fpeval{#2/100}}$}%
On obtient une augmentation de $\num{\fpeval{#2/100}}\times\num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}=\num{\fpeval{#3*#2/100}}$\ifboolKV[ClesPourcentage]{Concret}{~\useKV[ClesPourcentage]{Unite}}{}.\\Donc un total de $\num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}+\num{\fpeval{#3*#2/100}}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}=\num{\fpeval{#3*(1+#2/100)}}$\ifboolKV[ClesPourcentage]{Concret}{~\useKV[ClesPourcentage]{Unite}}{}.%
@@ -8584,7 +8640,7 @@ Unite={},Largeur=1cm,Precision=2,Donnee=Valeurs,Effectif=Effectif,Origine=0,Angl
\xdef\NomB{\useKV[ClesPourcentage]{GrandeurB}}%
\xdef\NomCouleurTab{\useKV[ClesPourcentage]{CouleurTab}}%
\xdef\NomLargeurTab{\useKV[ClesPourcentage]{Largeur}}%
- \Propor[GrandeurA=\NomA,GrandeurB=\NomB,CouleurTab=\NomCouleurTab,Largeur=\NomLargeurTab]{#2/#3,/100}%
+ \Propor[Math,GrandeurA=\NomA,GrandeurB=\NomB,CouleurTab=\NomCouleurTab,Largeur=\NomLargeurTab]{\num{#2}/\num{#3},/100}%
\xdef\colorfill{\useKV[ClesPourcentage]{ColorFill}}%
\FlechesPB{2}{1}{\scriptsize$\times\num{\fpeval{#3/100}}$}%
\FlechesPH{1}{2}{\scriptsize$\div\num{\fpeval{#3/100}}$}%
@@ -8887,8 +8943,7 @@ Unite={},Largeur=1cm,Precision=2,Donnee=Valeurs,Effectif=Effectif,Origine=0,Angl
\newtoks\toklisteratio
\def\UpdateRatio#1\nil{\addtotok\toklisteratio{#1,}}
-\def\updateratiotoks#1/#2/#3\nil{\addtotok\tabtoksa{&\num{#2}}\addtotok\tabtoksb{&\num{#3}}\addtotok\tabtoksc{&#1}}
-
+\def\updateratiotoks#1/#2/#3\nil{\addtotok\tabtoksa{&\ifx\bla#2\bla\else\num{#2}\fi}\addtotok\tabtoksb{&\ifx\bla#3\bla\else\num{#3}\fi}\addtotok\tabtoksc{&#1}}
\def\buildtabratio{%
\tabtoksa{}\tabtoksb{}\tabtoksc{}%
@@ -9006,7 +9061,7 @@ Unite={},Largeur=1cm,Precision=2,Donnee=Valeurs,Effectif=Effectif,Origine=0,Angl
\newcommand\Redaction[4][]{%
\ifboolKV[ClesDroites]{Remediation}{%
- \xintifboolexpr{\useKV[ClesDroites]{Num}=1}{%
+ \xintifboolexpr{\useKV[ClesDroites]{Num}==1}{%
\ifboolKV[ClesDroites]{CitePropriete}{%
Les droites $(\hbox to2em{\dotfill})$ et $(\hbox to2em{\dotfill})$ sont parall\`eles. Les droites $(\hbox to2em{\dotfill})$ et $(\hbox to2em{\dotfill})$ sont parall\`eles.%
@@ -9016,7 +9071,7 @@ Unite={},Largeur=1cm,Precision=2,Donnee=Valeurs,Effectif=Effectif,Origine=0,Angl
}{%
Comme les droites $(\hbox to2em{\dotfill})$ et $(\hbox to2em{\dotfill})$ sont toutes les deux parall\`eles \`a la m\^eme droite $(\hbox to2em{\dotfill})$, alors les droites $(\hbox to2em{\dotfill})$ et $(\hbox to2em{\dotfill})$ sont parall\`eles.%
}
- }{\xintifboolexpr{\useKV[ClesDroites]{Num}=2}{%
+ }{\xintifboolexpr{\useKV[ClesDroites]{Num}==2}{%
\ifboolKV[ClesDroites]{CitePropriete}{%
Les droites $(\hbox to2em{\dotfill})$ et $(\hbox to2em{\dotfill})$ sont perpendiculaires. Les droites $(\hbox to2em{\dotfill})$ et $(\hbox to2em{\dotfill})$ sont perpendiculaires.%
@@ -9039,7 +9094,7 @@ Unite={},Largeur=1cm,Precision=2,Donnee=Valeurs,Effectif=Effectif,Origine=0,Angl
}
}%
}{%
- \xintifboolexpr{\useKV[ClesDroites]{Num}=1}{%
+ \xintifboolexpr{\useKV[ClesDroites]{Num}==1}{%
\ifboolKV[ClesDroites]{CitePropriete}{%
Les droites $(#2)$ et $(#4)$ sont parall\`eles. Les droites $(#3)$ et $(#4)$ sont parall\`eles.%
@@ -9049,7 +9104,7 @@ Unite={},Largeur=1cm,Precision=2,Donnee=Valeurs,Effectif=Effectif,Origine=0,Angl
}{%
Comme les droites $(#2)$ et $(#3)$ sont toutes les deux parall\`eles \`a la m\^eme droite $(#4)$, alors les droites $(#2)$ et $(#3)$ sont parall\`eles.
}
- }{\xintifboolexpr{\useKV[ClesDroites]{Num}=2}{%
+ }{\xintifboolexpr{\useKV[ClesDroites]{Num}==2}{%
\ifboolKV[ClesDroites]{CitePropriete}{%
Les droites $(#2)$ et $(#4)$ sont perpendiculaires. Les droites $(#3)$ et $(#4)$ sont perpendiculaires.%
@@ -9077,7 +9132,7 @@ Unite={},Largeur=1cm,Precision=2,Donnee=Valeurs,Effectif=Effectif,Origine=0,Angl
\newcommand\Brouillon[4][]{%
\setlength{\abovedisplayskip}{0pt}
\ifboolKV[ClesDroites]{Remediation}{%
- \xintifboolexpr{\useKV[ClesDroites]{Num}=1}{%
+ \xintifboolexpr{\useKV[ClesDroites]{Num}==1}{%
\[\left.
\begin{array}{l}
(\hbox to2em{\dotfill})//(\hbox to2em{\dotfill})\\
@@ -9086,7 +9141,7 @@ Unite={},Largeur=1cm,Precision=2,Donnee=Valeurs,Effectif=Effectif,Origine=0,Angl
\end{array}
\right\}(\hbox to2em{\dotfill})//(\hbox to2em{\dotfill})
\]
- }{\xintifboolexpr{\useKV[ClesDroites]{Num}=2}{%
+ }{\xintifboolexpr{\useKV[ClesDroites]{Num}==2}{%
\[\left.
\begin{array}{l}
(\hbox to2em{\dotfill})\perp(\hbox to2em{\dotfill})\\
@@ -9107,7 +9162,7 @@ Unite={},Largeur=1cm,Precision=2,Donnee=Valeurs,Effectif=Effectif,Origine=0,Angl
}
}
}{
- \xintifboolexpr{\useKV[ClesDroites]{Num}=1}{%
+ \xintifboolexpr{\useKV[ClesDroites]{Num}==1}{%
\[\left.
\begin{array}{l}
(#2)//(#4)\\
@@ -9116,7 +9171,7 @@ Unite={},Largeur=1cm,Precision=2,Donnee=Valeurs,Effectif=Effectif,Origine=0,Angl
\end{array}
\right\}(#2)//(#3)
\]
- }{\xintifboolexpr{\useKV[ClesDroites]{Num}=2}{%
+ }{\xintifboolexpr{\useKV[ClesDroites]{Num}==2}{%
\[\left.
\begin{array}{l}
(#2)\perp(#4)\\
@@ -9314,9 +9369,9 @@ Unite={},Largeur=1cm,Precision=2,Donnee=Valeurs,Effectif=Effectif,Origine=0,Angl
\newcommand\FaireFigure[4][]{%
\setlength{\abovedisplayskip}{0pt}
- \xintifboolexpr{\useKV[ClesDroites]{Num}=1}{%
+ \xintifboolexpr{\useKV[ClesDroites]{Num}==1}{%
\MPFigureDroite{2}{3}%
- }{\xintifboolexpr{\useKV[ClesDroites]{Num}=2}{%
+ }{\xintifboolexpr{\useKV[ClesDroites]{Num}==2}{%
\MPFigureDroite{2}{4}%
}{%
\MPFigureDroite{3}{4}%
@@ -9357,18 +9412,18 @@ Unite={},Largeur=1cm,Precision=2,Donnee=Valeurs,Effectif=Effectif,Origine=0,Angl
\setKV[ClesAffine]{#1}%
\ifboolKV[ClesAffine]{Image}{%
\ifboolKV[ClesAffine]{Ligne}{%
- \ensuremath{\useKV[ClesAffine]{Nom}(\num{#2})=\num{#3}\times\xintifboolexpr{#2<0}{(\num{#2})}{\num{#2}}\xintifboolexpr{#4=0}{}{\xintifboolexpr{#4>0}{+\num{#4}}{-\num{\fpeval{0-#4}}}}=\num{\fpeval{#2*#3}}\xintifboolexpr{#4=0}{}{\xintifboolexpr{#4>0}{+\num{#4}}{-\num{\fpeval{0-#4}}}}\xintifboolexpr{#4=0}{}{=\num{\fpeval{#2*#3+#4}}}}%
+ \ensuremath{\useKV[ClesAffine]{Nom}(\num{#2})=\num{#3}\times\xintifboolexpr{#2<0}{(\num{#2})}{\num{#2}}\xintifboolexpr{#4==0}{}{\xintifboolexpr{#4>0}{+\num{#4}}{-\num{\fpeval{0-#4}}}}=\num{\fpeval{#2*#3}}\xintifboolexpr{#4==0}{}{\xintifboolexpr{#4>0}{+\num{#4}}{-\num{\fpeval{0-#4}}}}\xintifboolexpr{#4==0}{}{=\num{\fpeval{#2*#3+#4}}}}%
}{%
\ifboolKV[ClesAffine]{ProgCalcul}{%
\begin{align*}
- \useKV[ClesAffine]{Nom}&:\useKV[ClesAffine]{Variable}\stackrel{\times\xintifboolexpr{#3<0}{(\num{#3})}{\num{#3}}}{\longrightarrow}\num{#3}\useKV[ClesAffine]{Variable}\xintifboolexpr{#4=0}{}{\xintifboolexpr{#4>0}{\stackrel{+\num{#4}}{\longrightarrow}}{\stackrel{\num{#4}}{\longrightarrow}}\num{#3}\useKV[ClesAffine]{Variable}\xintifboolexpr{#4=0}{}{\xintifboolexpr{#4>0}{+\num{#4}}{\num{#4}}}}\\
- \useKV[ClesAffine]{Nom}&:\num{#2}\stackrel{\times\xintifboolexpr{#3<0}{(\num{#3})}{\num{#3}}}{\longrightarrow}\num{\fpeval{#3*#2}}\xintifboolexpr{#4=0}{}{\xintifboolexpr{#4>0}{\stackrel{+\num{#4}}{\longrightarrow}}{\stackrel{\num{#4}}{\longrightarrow}}\num{\fpeval{#3*#2+#4}}}
+ \useKV[ClesAffine]{Nom}&:\useKV[ClesAffine]{Variable}\stackrel{\times\xintifboolexpr{#3<0}{(\num{#3})}{\num{#3}}}{\longrightarrow}\num{#3}\useKV[ClesAffine]{Variable}\xintifboolexpr{#4==0}{}{\xintifboolexpr{#4>0}{\stackrel{+\num{#4}}{\longrightarrow}}{\stackrel{\num{#4}}{\longrightarrow}}\num{#3}\useKV[ClesAffine]{Variable}\xintifboolexpr{#4==0}{}{\xintifboolexpr{#4>0}{+\num{#4}}{\num{#4}}}}\\
+ \useKV[ClesAffine]{Nom}&:\num{#2}\stackrel{\times\xintifboolexpr{#3<0}{(\num{#3})}{\num{#3}}}{\longrightarrow}\num{\fpeval{#3*#2}}\xintifboolexpr{#4==0}{}{\xintifboolexpr{#4>0}{\stackrel{+\num{#4}}{\longrightarrow}}{\stackrel{\num{#4}}{\longrightarrow}}\num{\fpeval{#3*#2+#4}}}
\end{align*}
}{%
\begin{align*}
- \useKV[ClesAffine]{Nom}(\num{#2})&=\num{#3}\times\xintifboolexpr{#2<0}{(\num{#2})}{\num{#2}}\xintifboolexpr{#4=0}{}{\xintifboolexpr{#4>0}{+\num{#4}}{-\num{\fpeval{0-#4}}}}\\
- \useKV[ClesAffine]{Nom}(\num{#2})&=\num{\fpeval{#3*#2}}\xintifboolexpr{#4=0}{}{\xintifboolexpr{#4>0}{+\num{#4}}{-\num{\fpeval{0-#4}}}}%\\
- \xintifboolexpr{#4=0}{}{\\
+ \useKV[ClesAffine]{Nom}(\num{#2})&=\num{#3}\times\xintifboolexpr{#2<0}{(\num{#2})}{\num{#2}}\xintifboolexpr{#4==0}{}{\xintifboolexpr{#4>0}{+\num{#4}}{-\num{\fpeval{0-#4}}}}\\
+ \useKV[ClesAffine]{Nom}(\num{#2})&=\num{\fpeval{#3*#2}}\xintifboolexpr{#4==0}{}{\xintifboolexpr{#4>0}{+\num{#4}}{-\num{\fpeval{0-#4}}}}%\\
+ \xintifboolexpr{#4==0}{}{\\
\useKV[ClesAffine]{Nom}(\num{#2})&=\num{\fpeval{#3*#2+#4}}%\\
}
\end{align*}
@@ -9378,11 +9433,11 @@ Unite={},Largeur=1cm,Precision=2,Donnee=Valeurs,Effectif=Effectif,Origine=0,Angl
\ifboolKV[ClesAffine]{ProgCalcul}{%
La fonction affine $\useKV[ClesAffine]{Nom}$ est d\'efinie par :
\begin{align*}
- \useKV[ClesAffine]{Nom}&:\useKV[ClesAffine]{Variable}\stackrel{\times\xintifboolexpr{#3<0}{(\num{#3})}{\num{#3}}}{\longrightarrow}\num{#3}\useKV[ClesAffine]{Variable}\xintifboolexpr{#4=0}{}{\xintifboolexpr{#4>0}{\stackrel{+\num{#4}}{\longrightarrow}}{\stackrel{\num{#4}}{\longrightarrow}}\num{#3}\useKV[ClesAffine]{Variable}\xintifboolexpr{#4=0}{}{\xintifboolexpr{#4>0}{+\num{#4}}{\num{#4}}}}
+ \useKV[ClesAffine]{Nom}&:\useKV[ClesAffine]{Variable}\stackrel{\times\xintifboolexpr{#3<0}{(\num{#3})}{\num{#3}}}{\longrightarrow}\num{#3}\useKV[ClesAffine]{Variable}\xintifboolexpr{#4==0}{}{\xintifboolexpr{#4>0}{\stackrel{+\num{#4}}{\longrightarrow}}{\stackrel{\num{#4}}{\longrightarrow}}\num{#3}\useKV[ClesAffine]{Variable}\xintifboolexpr{#4==0}{}{\xintifboolexpr{#4>0}{+\num{#4}}{\num{#4}}}}
\end{align*}
Nous cherchons le nombre $\useKV[ClesAffine]{Variable}$ tel que son image par la fonction $\useKV[ClesAffine]{Nom}$ soit $\num{#2}$. Donc on obtient :
\begin{align*}
- \useKV[ClesAffine]{Nom}&:\frac{\num{\fpeval{#2-#4}}}{\num{#3}}\stackrel{\div\xintifboolexpr{#3<0}{(\num{#3})}{\num{#3}}}{\longleftarrow}\num{\fpeval{#2-#4}}\xintifboolexpr{#4=0}{}{\xintifboolexpr{#4>0}{\stackrel{-\num{#4}}{\longleftarrow}}{\stackrel{+\num{\fpeval{0-#4}}}{\longleftarrow}}\num{#2}}
+ \useKV[ClesAffine]{Nom}&:\frac{\num{\fpeval{#2-#4}}}{\num{#3}}\stackrel{\div\xintifboolexpr{#3<0}{(\num{#3})}{\num{#3}}}{\longleftarrow}\num{\fpeval{#2-#4}}\xintifboolexpr{#4==0}{}{\xintifboolexpr{#4>0}{\stackrel{-\num{#4}}{\longleftarrow}}{\stackrel{+\num{\fpeval{0-#4}}}{\longleftarrow}}\num{#2}}
\end{align*}
}{%
On cherche l'ant\'ec\'edent de $\num{#2}$ par la fonction
@@ -9390,12 +9445,12 @@ Unite={},Largeur=1cm,Precision=2,Donnee=Valeurs,Effectif=Effectif,Origine=0,Angl
$\useKV[ClesAffine]{Variable}$ tel que
$\useKV[ClesAffine]{Nom}(\useKV[ClesAffine]{Variable})=\num{#2}$. Or,
la fonction $\useKV[ClesAffine]{Nom}$ est d\'efinie par : \[%
- \useKV[ClesAffine]{Nom}(\useKV[ClesAffine]{Variable})=\xintifboolexpr{#3=0}{}{\num{#3}\useKV[ClesAffine]{Variable}}\xintifboolexpr{#3=0}{\num{#4}}{\xintifboolexpr{#4=0}{}{\xintifboolexpr{#4>0}{+\num{#4}}{-\num{\fpeval{0-#4}}}}}
+ \useKV[ClesAffine]{Nom}(\useKV[ClesAffine]{Variable})=\xintifboolexpr{#3==0}{}{\num{#3}\useKV[ClesAffine]{Variable}}\xintifboolexpr{#3==0}{\num{#4}}{\xintifboolexpr{#4==0}{}{\xintifboolexpr{#4>0}{+\num{#4}}{-\num{\fpeval{0-#4}}}}}
\]
Par cons\'equent, on a :
\begin{align*}
- \num{#3}\useKV[ClesAffine]{Variable}\xintifboolexpr{#4=0}{}{\xintifboolexpr{#4>0}{+\num{#4}}{-\num{\fpeval{0-#4}}}}&=\num{#2}\\
- \xintifboolexpr{#4=0}{\useKV[ClesAffine]{Variable}\uppercase{&}=\frac{\num{#2}}{\num{#3}}%\\
+ \num{#3}\useKV[ClesAffine]{Variable}\xintifboolexpr{#4==0}{}{\xintifboolexpr{#4>0}{+\num{#4}}{-\num{\fpeval{0-#4}}}}&=\num{#2}\\
+ \xintifboolexpr{#4==0}{\useKV[ClesAffine]{Variable}\uppercase{&}=\frac{\num{#2}}{\num{#3}}%\\
}{\num{#3}\useKV[ClesAffine]{Variable}&=\num{\fpeval{#2-#4}}\\
\useKV[ClesAffine]{Variable}&=\frac{\num{\fpeval{#2-#4}}}{\num{#3}}%\\
}
@@ -9420,7 +9475,7 @@ Unite={},Largeur=1cm,Precision=2,Donnee=Valeurs,Effectif=Effectif,Origine=0,Angl
\end{align*}
\xdef\OrdOrigine{\fpeval{#3-(#3-#5)*#2/(#2-#4)}}
La fonction affine $\useKV[ClesAffine]{Nom}$ cherch\'ee est :
- \[\useKV[ClesAffine]{Nom}:\useKV[ClesAffine]{Variable}\mapsto\SSimplifie{\fpeval{#3-#5}}{\fpeval{#2-#4}}\useKV[ClesAffine]{Variable}\xintifboolexpr{\OrdOrigine=0}{}{\xintifboolexpr{\OrdOrigine>0}{+\num{\OrdOrigine}}{-\num{\fpeval{0-\OrdOrigine}}}}\]
+ \[\useKV[ClesAffine]{Nom}:\useKV[ClesAffine]{Variable}\mapsto\SSimplifie{\fpeval{#3-#5}}{\fpeval{#2-#4}}\useKV[ClesAffine]{Variable}\xintifboolexpr{\OrdOrigine==0}{}{\xintifboolexpr{\OrdOrigine>0}{+\num{\OrdOrigine}}{-\num{\fpeval{0-\OrdOrigine}}}}\]
}{%
%
}%
@@ -9433,17 +9488,17 @@ Unite={},Largeur=1cm,Precision=2,Donnee=Valeurs,Effectif=Effectif,Origine=0,Angl
\MPFonctionAffine{\useKV[ClesAffine]{Unitex}}{\useKV[ClesAffine]{Unitey}}{#2}{#3}{#4}{#5}{""}}{}%
}{}%
\ifboolKV[ClesAffine]{Redaction}{%
- \xintifboolexpr{#2=0}{Comme la fonction $\useKV[ClesAffine]{Nom}$
+ \xintifboolexpr{#2==0}{Comme la fonction $\useKV[ClesAffine]{Nom}$
est une fonction constante, alors sa repr\'esentation graphique est une droite parall\`ele \`a l'axe des abscisses passant par le point de coordonn\'ees $(0;\num{#3})$.}%
- {\xintifboolexpr{#3=0}{Comme la fonction $\useKV[ClesAffine]{Nom}$ est une fonction lin\'eaire, alors sa repr\'esentation graphique est une droite passant par l'origine du rep\`ere.\\Je choisis $\useKV[ClesAffine]{Variable}=\num{#4}$. Son image est \xdef\NomFonctionA{\useKV[ClesAffine]{Nom}}\FonctionAffine[Nom=\NomFonctionA,Image,Ligne]{#4}{#2}{#3}{#5}. On place le point de coordonn\'ees $(\num{#4};\num{\fpeval{#2*#4+#3}})$.
+ {\xintifboolexpr{#3==0}{Comme la fonction $\useKV[ClesAffine]{Nom}$ est une fonction lin\'eaire, alors sa repr\'esentation graphique est une droite passant par l'origine du rep\`ere.\\Je choisis $\useKV[ClesAffine]{Variable}=\num{#4}$. Son image est \xdef\NomFonctionA{\useKV[ClesAffine]{Nom}}\FonctionAffine[Nom=\NomFonctionA,Image,Ligne]{#4}{#2}{#3}{#5}. On place le point de coordonn\'ees $(\num{#4};\num{\fpeval{#2*#4+#3}})$.
}{%
Comme $\useKV[ClesAffine]{Nom}$ est une fonction affine, alors sa repr\'esentation graphique est une droite.\\Je choisis $\useKV[ClesAffine]{Variable}=\num{#4}$. Son image est \xdef\NomVariable{\useKV[ClesAffine]{Variable}}\xdef\NomFonction{\useKV[ClesAffine]{Nom}}\FonctionAffine[Nom=\NomFonction,Image,Ligne]{#4}{#2}{#3}{#5}. On place le point de coordonn\'ees $(\num{#4};\num{\fpeval{#2*#4+#3}})$.\\Je choisis \setKV[ClesAffine]{Variable=\NomVariable}$\useKV[ClesAffine]{Variable}=\num{#5}$. Son image est \FonctionAffine[Nom=\NomFonction,Image,Ligne]{#5}{#2}{#3}{#4}. On place le point de coordonn\'ees $(\num{#5};\num{\fpeval{#2*#5+#3}})$.%
}%
}%
}%
{}%
- \ifboolKV[ClesAffine]{Ecriture}{\ensuremath{\useKV[ClesAffine]{Nom}(\useKV[ClesAffine]{Variable})=\xintifboolexpr{#2=0}{}{\num{#2}\useKV[ClesAffine]{Variable}}\xintifboolexpr{#2=0}{\num{#3}}{\xintifboolexpr{#3=0}{}{\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}}}}}{}%
- \ifboolKV[ClesAffine]{Definition}{\ensuremath{\useKV[ClesAffine]{Nom}:\useKV[ClesAffine]{Variable}\mapsto\xintifboolexpr{#2=0}{}{\num{#2}\useKV[ClesAffine]{Variable}}\xintifboolexpr{#2=0}{\num{#3}}{\xintifboolexpr{#3=0}{}{\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}}}}}{}%
+ \ifboolKV[ClesAffine]{Ecriture}{\ensuremath{\useKV[ClesAffine]{Nom}(\useKV[ClesAffine]{Variable})=\xintifboolexpr{#2==0}{}{\num{#2}\useKV[ClesAffine]{Variable}}\xintifboolexpr{#2==0}{\num{#3}}{\xintifboolexpr{#3==0}{}{\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}}}}}{}%
+ \ifboolKV[ClesAffine]{Definition}{\ensuremath{\useKV[ClesAffine]{Nom}:\useKV[ClesAffine]{Variable}\mapsto\xintifboolexpr{#2==0}{}{\num{#2}\useKV[ClesAffine]{Variable}}\xintifboolexpr{#2==0}{\num{#3}}{\xintifboolexpr{#3==0}{}{\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}}}}}{}%
}%
\def\MPFonctionAffine#1#2#3#4#5#6#7{%
@@ -9708,7 +9763,7 @@ Unite={},Largeur=1cm,Precision=2,Donnee=Valeurs,Effectif=Effectif,Origine=0,Angl
%%%
% 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}
+\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}
\newtoks\toklistePtsFn%pour la discipline
@@ -10037,48 +10092,54 @@ Unite={},Largeur=1cm,Precision=2,Donnee=Valeurs,Effectif=Effectif,Origine=0,Angl
\fi
}
-\newcommand{\Fonction}[2][]{%
+\newcommand\Fonction[2][]{%
\useKVdefault[ClesFonction]
\setKV[ClesFonction]{#1}
- \ifboolKV[ClesFonction]{Points}{%
- \toklistePtsFn{}%
- % \setsepchar[*]{,*/}%\ignoreemptyitems%
- \setsepchar[*]{§*/}%\ignoreemptyitems%
- \readlist*\ListePoints{#2}%
- \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}%
+ \ifboolKV[ClesFonction]{Trace}{%
+ \useKVdefault[TraceG]%
+ \setKV[TraceG]{#1}%
+ \MPTraceFonction[#1]{\useKV[ClesFonction]{Calcul}}%
+ }{%
+ \ifboolKV[ClesFonction]{Points}{%
+ \toklistePtsFn{}%
+ % \setsepchar[*]{,*/}%\ignoreemptyitems%
+ \setsepchar[*]{§*/}%\ignoreemptyitems%
+ \readlist*\ListePoints{#2}%
+ \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}%
+ }%
}{%
- \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}%
+ }%
}%
}{%
- \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}%
- }%
+ \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%
+ }{}%
}%
- }{%
- \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%
- }{}%
}%
}%
@@ -10095,6 +10156,415 @@ Unite={},Largeur=1cm,Precision=2,Donnee=Valeurs,Effectif=Effectif,Origine=0,Angl
}
%%%
+% Diff\'erentes représentations graphiques
+%%%
+\setKVdefault[TraceG]{Grille=false,Graduations=false,PasGrilleX=1,PasGrilleY=1,Xmin=-5.5,Xmax=5.5,Xstep=1,Ymin=-5.5,Ymax=5.5,Ystep=1,Bornea=-5.5,Borneb=5.5,LabelX={},LabelY={},LabelC=0.5,NomCourbe={},Origine={(5.5,5.5)},Fonction=false,Points=false,Invisible=false,CouleurPoint=red,CouleurTrace=black,Relie=false,RelieSegment=false}
+
+\newcommand\TraceGraphique[2][]{%
+ \useKVdefault[TraceG]%
+ \setKV[TraceG]{#1}%
+ \ifboolKV[TraceG]{Fonction}{%
+ \MPTraceFonction[#1]{#2}%
+ }{%
+ \setKV[TraceG]{Xmin=0,Ymin=0}
+ \setKV[TraceG]{#1}%
+ \readlist*\ListePointsPlaces{#2}%
+ \newtoks\toklistepoint%
+ \foreachitem\compteur\in\ListePointsPlaces{\expandafter\Updatetoks\compteur\nil}%
+ \MPPlacePoint[#1]{\the\toklistepoint}
+ }%
+}%
+
+\newcommand\MPPlacePoint[2][]{%
+ \ifluatex
+ \mplibforcehmode
+ \begin{mplibcode}
+ xmin=\useKV[TraceG]{Xmin};
+ xmax=\useKV[TraceG]{Xmax};
+ ymin=\useKV[TraceG]{Ymin};
+ ymax=\useKV[TraceG]{Ymax};
+ pasx=\useKV[TraceG]{Xstep};
+ pasy=\useKV[TraceG]{Ystep};
+ x.u=1cm/\useKV[TraceG]{Xstep};
+ y.u=1cm/\useKV[TraceG]{Ystep};
+ grillex=\useKV[TraceG]{PasGrilleX};
+ grilley=\useKV[TraceG]{PasGrilleY};
+ pos=\useKV[TraceG]{LabelC};
+
+ color colorpoint,colortrace;
+ colorpoint=\useKV[TraceG]{CouleurPoint};
+ colortrace=\useKV[TraceG]{CouleurTrace};
+ boolean Grille;
+ Grille=\useKV[TraceG]{Grille};
+
+ boolean Graduations;
+ Graduations=\useKV[TraceG]{Graduations};
+
+ boolean Relie;
+ Relie=\useKV[TraceG]{Relie};
+
+ boolean RelieSegment;
+ RelieSegment=\useKV[TraceG]{RelieSegment};
+
+ boolean Invisible;
+ Invisible=\useKV[TraceG]{Invisible};
+
+ pair Origine;
+ Origine=(0,0);
+
+ if Grille:
+ drawoptions(withcolor 0.75white);
+ for k=0 step grillex until (xmax-xmin):
+ trace (k*x.u,ypart(Origine))--(x.u*k,y.u*(ymax-ymin));
+ endfor;
+ for k=0 step grilley until (ymax-ymin):
+ trace (xpart(Origine),k*y.u)--(x.u*(xmax-xmin),y.u*k);
+ endfor;
+ drawoptions();
+ fi;
+
+ if Graduations:
+ for k=0 step grillex until (xmax-xmin):
+ trace ((0,-0.5mm)--(0,0.5mm)) shifted ((k*x.u,0) shifted Origine) withpen pencircle scaled1.25;
+ label.bot(TEX("\num{"&decimal(xmin+k)&"}"),(k*x.u,0) shifted Origine);
+ endfor;
+ label.ulft(TEX("\num{"&decimal(ymin)&"}"),(0,0) shifted Origine);
+ for k=grilley step grilley until (ymax-ymin):
+ trace ((-0.5mm,0)--(0.5mm,0)) shifted ((0,k*y.u) shifted Origine) withpen pencircle scaled1.25;
+ label.lft(TEX("\num{"&decimal(ymin+k)&"}"),(0,k*y.u) shifted Origine);
+ endfor;
+ fi;
+ drawoptions(withpen pencircle scaled1.5);
+ drawarrow Origine--(xpart(Origine),y.u*(ymax-ymin));
+ drawarrow Origine--((xmax-xmin)*x.u,ypart(Origine));
+ drawoptions();
+
+ % On relie éventuellement les points
+ if Relie:
+ pair N[];
+ nbpoint=0;
+ for p_=#2:
+ nbpoint:=nbpoint+1;
+ N[nbpoint]=(x.u*(xpart(p_)-xmin),y.u*(ypart(p_)-ymin));
+ endfor;
+ draw N[1] for k=2 upto nbpoint:
+ ..N[k]
+ endfor withcolor colortrace;
+ fi;
+ if RelieSegment:
+ pair N[];
+ nbpoint=0;
+ for p_=#2:
+ nbpoint:=nbpoint+1;
+ N[nbpoint]=(x.u*(xpart(p_)-xmin),y.u*(ypart(p_)-ymin));
+ endfor;
+ draw N[1] for k=2 upto nbpoint:
+ --N[k]
+ endfor withcolor colortrace;
+ fi;
+
+ % On place les points
+ if Invisible=false:
+ drawoptions(withcolor colorpoint);
+ for p_=#2:
+ dotlabel("",(x.u*(xpart(p_)-xmin),y.u*(ypart(p_)-ymin)));
+ endfor;
+ drawoptions();
+ fi;
+ %on labelise les axes
+ label.urt(btex \useKV[TraceG]{LabelX} etex,(x.u*(xmax-xmin),ypart(Origine)));
+ label.urt(btex \useKV[TraceG]{LabelY} etex,(xpart(Origine),y.u*(ymax-ymin)));
+ \end{mplibcode}
+ \else
+ \mpxcommands{%
+ \setKV[TraceG]{#1}
+ }
+ \begin{mpost}[mpsettings={xmin=\useKV[TraceG]{Xmin};xmax=\useKV[TraceG]{Xmax};ymin=\useKV[TraceG]{Ymin};ymax=\useKV[TraceG]{Ymax};pasx=\useKV[TraceG]{Xstep};pasy=\useKV[TraceG]{Ystep};xu=1cm/\useKV[TraceG]{Xstep};yu=1cm/\useKV[TraceG]{Ystep};grillex=\useKV[TraceG]{PasGrilleX};grilley=\useKV[TraceG]{PasGrilleY};pos=\useKV[TraceG]{LabelC};color colorpoint,colortrace;colorpoint=\useKV[TraceG]{CouleurPoint};colortrace=\useKV[TraceG]{CouleurTrace};boolean Grille;Grille=\useKV[TraceG]{Grille};boolean Graduations;Graduations=\useKV[TraceG]{Graduations};boolean Relie;Relie=\useKV[TraceG]{Relie};boolean RelieSegment;RelieSegment=\useKV[TraceG]{RelieSegment};boolean Invisible;Invisible=\useKV[TraceG]{Invisible};}]
+ pair Origine;
+ Origine=(0,0);
+
+ if Grille:
+ drawoptions(withcolor 0.75white);
+ for k=0 step grillex until (xmax-xmin):
+ trace (k*xu,ypart(Origine))--(xu*k,yu*(ymax-ymin));
+ endfor;
+ for k=0 step grilley until (ymax-ymin):
+ trace (xpart(Origine),k*yu)--(xu*(xmax-xmin),yu*k);
+ endfor;
+ drawoptions();
+ fi;
+
+ if Graduations:
+ for k=0 step grillex until (xmax-xmin):
+ trace ((0,-0.5mm)--(0,0.5mm)) shifted ((k*xu,0) shifted Origine) withpen pencircle scaled1.25;
+ label.bot(LATEX("\num{"&decimal(xmin+k)&"}"),(k*xu,0) shifted Origine);
+ endfor;
+ label.ulft(LATEX("\num{"&decimal(ymin)&"}"),(0,0) shifted Origine);
+ for k=grilley step grilley until (ymax-ymin):
+ trace ((-0.5mm,0)--(0.5mm,0)) shifted ((0,k*yu) shifted Origine) withpen pencircle scaled1.25;
+ label.lft(LATEX("\num{"&decimal(ymin+k)&"}"),(0,k*yu) shifted Origine);
+ endfor;
+ fi;
+ drawoptions(withpen pencircle scaled1.5);
+ drawarrow Origine--(xpart(Origine),yu*(ymax-ymin));
+ drawarrow Origine--((xmax-xmin)*xu,ypart(Origine));
+ drawoptions();
+
+ % On relie éventuellement les points
+ if Relie:
+ pair N[];
+ nbpoint=0;
+ for p_=#2:
+ nbpoint:=nbpoint+1;
+ N[nbpoint]=(xu*(xpart(p_)-xmin),yu*(ypart(p_)-ymin));
+ endfor;
+ draw N[1] for k=2 upto nbpoint:
+ ..N[k]
+ endfor withcolor colortrace;
+ fi;
+ if RelieSegment:
+ pair N[];
+ nbpoint=0;
+ for p_=#2:
+ nbpoint:=nbpoint+1;
+ N[nbpoint]=(xu*(xpart(p_)-xmin),yu*(ypart(p_)-ymin));
+ endfor;
+ draw N[1] for k=2 upto nbpoint:
+ --N[k]
+ endfor withcolor colortrace;
+ fi;
+
+ % On place les points
+ if Invisible=false:
+ drawoptions(withcolor colorpoint);
+ for p_=#2:
+ dotlabel("",(xu*(xpart(p_)-xmin),yu*(ypart(p_)-ymin)));
+ endfor;
+ drawoptions();
+ fi;
+ %on labelise les axes
+ label.urt(btex \unexpanded{\useKV[TraceG]{LabelX}} etex,(xu*(xmax-xmin),ypart(Origine)));
+ label.urt(btex \unexpanded{\useKV[TraceG]{LabelY}} etex,(xpart(Origine),yu*(ymax-ymin)));
+ \end{mpost}
+ \fi
+}
+
+\newcommand\MPTraceFonction[2][]{%
+ \ifluatex
+ \mplibforcehmode
+ \begin{mplibcode}
+ 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};
+ x.u=1cm/\useKV[TraceG]{Xstep};
+ y.u=1cm/\useKV[TraceG]{Ystep};
+ grillex=\useKV[TraceG]{PasGrilleX};
+ grilley=\useKV[TraceG]{PasGrilleY};
+ pos=\useKV[TraceG]{LabelC};
+
+ color colortrace;
+ colortrace=\useKV[TraceG]{CouleurTrace};
+
+ pair Origine;
+ Origine=(xmin,ymin)+\useKV[TraceG]{Origine};
+
+ boolean Grille;
+ Grille=\useKV[TraceG]{Grille};
+
+ boolean Graduations;
+ Graduations=\useKV[TraceG]{Graduations};
+
+ vardef sin(expr t) = sind(c*t) enddef;
+
+ vardef cos(expr t) = cosd(c*t) enddef;
+
+ vardef tan(expr t) = sin(t)/cos(t) enddef;
+
+ vardef exp(expr t) = e**t enddef;
+
+ vardef ch(expr x)=(exp(x)+exp(-x))/2 enddef;
+
+ vardef sh(expr x)=(exp(x)-exp(-x))/2 enddef;
+
+ vardef ln(expr t) = mlog(t)/256 enddef;
+
+ vardef arcsin(expr x)=%Définition mathématique en radian
+ pi*angle((sqrt(1-x**2),x))/180
+ enddef;
+
+ vardef arccos(expr x)=%Définition mathématique en radian
+ pi*angle((x,sqrt(1-x**2)))/180
+ enddef;
+
+ path Cb[];
+
+ vardef courbe[](expr a,b,nb)(text texte)=
+ path Courbe;
+ for i:=0 upto nb :
+ x@[i]:=(a+i*(b-a)/nb);
+ x:=x@[i];
+ y@[i]:=texte;
+ endfor ;
+ Cb@:=(x@.0*x.u,y@.0*y.u)
+ for i:=1 upto nb :
+ ..(x@[i]*x.u,y@[i]*y.u)
+ endfor;
+ Cb@:=Cb@ shifted (Origine*cm);
+ Courbe=Cb@;
+ Courbe
+ enddef;
+
+ if Grille:
+ drawoptions(withcolor 0.75white);
+ for k=xpart(Origine) step grillex until xmax:
+ trace u*(k,ymin)--u*(k,ymax);
+ endfor;
+ for k=xpart(Origine) step -grillex until xmin:
+ trace u*(k,ymin)--u*(k,ymax);
+ endfor;
+ for k=ypart(Origine) step grilley until ymax:
+ trace u*(xmin,k)--u*(xmax,k);
+ endfor;
+ for k=ypart(Origine) step -grilley until ymin:
+ trace u*(xmin,k)--u*(xmax,k);
+ endfor;
+ drawoptions();
+ fi;
+ if Graduations:
+ for k=1 upto xmax/grillex:
+ dotlabel.bot(TEX("\num{"&decimal(k)&"}"),(k*x.u+xpart(Origine*cm),ypart(Origine*cm)));
+ endfor;
+ for k=-1 downto xmin/grillex:
+ dotlabel.bot(TEX("\num{"&decimal(k)&"}"),(k*x.u+xpart(Origine*cm),ypart(Origine*cm)));
+ endfor;
+ for k=1 upto ymax/grilley:
+ dotlabel.lft(TEX("\num{"&decimal(k)&"}"),(xpart(Origine*cm),k*y.u+ypart(Origine*cm)));
+ endfor;
+ for k=-1 downto ymin/grilley:
+ dotlabel.lft(TEX("\num{"&decimal(k)&"}"),(xpart(Origine*cm),k*y.u+ypart(Origine*cm)));
+ endfor;
+ fi;
+ drawoptions(withpen pencircle scaled1.5);
+ drawarrow (u*(0,ymin)--u*(0,ymax)) shifted (u*(xpart(Origine),0));
+ drawarrow (u*(xmin,0)--u*(xmax,0)) shifted (u*(0,ypart(Origine)));
+ drawoptions();
+ draw courbe1(borneinf,bornesup,100)(#2) withcolor colortrace;
+ % labelisation
+ numeric t;
+ t=pos*length Cb1;
+ pair PT,Tangente;
+ PT:=point (pos*length Cb1) of Cb1;
+ Tangente:=unitvector(direction t of Cb1);
+ label(btex \useKV[TraceG]{NomCourbe} etex rotated angle(Tangente),PT+2mm*(Tangente rotated 90));
+ % fin labelisation
+ 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));
+ \end{mplibcode}
+ \else
+ \mpxcommands{%
+ \setKV[TraceG]{#1}
+ }
+ \begin{mpost}[mpsettings={borneinf=\useKV[TraceG]{Bornea};bornesup=\useKV[TraceG]{Borneb};xmin=\useKV[TraceG]{Xmin};xmax=\useKV[TraceG]{Xmax};ymin=\useKV[TraceG]{Ymin};ymax=\useKV[TraceG]{Ymax};pasx=\useKV[TraceG]{Xstep};pasy=\useKV[TraceG]{Ystep};xu=1cm/\useKV[TraceG]{Xstep};yu=1cm/\useKV[TraceG]{Ystep};grillex=\useKV[TraceG]{PasGrilleX};grilley=\useKV[TraceG]{PasGrilleY};pos=\useKV[TraceG]{LabelC};color colortrace;colortrace=\useKV[TraceG]{CouleurTrace};boolean Grille;Grille=\useKV[TraceG]{Grille};boolean Graduations;Graduations=\useKV[TraceG]{Graduations};}]
+ pair Origine;
+ Origine=(xmin,ymin)+\useKV[TraceG]{Origine};
+
+ vardef sin(expr t) = sind(c*t) enddef;
+
+ vardef cos(expr t) = cosd(c*t) enddef;
+
+ vardef tan(expr t) = sin(t)/cos(t) enddef;
+
+ vardef exp(expr t) = e**t enddef;
+
+ vardef ch(expr x)=(exp(x)+exp(-x))/2 enddef;
+
+ vardef sh(expr x)=(exp(x)-exp(-x))/2 enddef;
+
+ vardef ln(expr t) = mlog(t)/256 enddef;
+
+ vardef arcsin(expr x)=%Définition mathématique en radian
+ pi*angle((sqrt(1-x**2),x))/180
+ enddef;
+
+ vardef arccos(expr x)=%Définition mathématique en radian
+ pi*angle((x,sqrt(1-x**2)))/180
+ enddef;
+
+ path Cb[];
+
+ vardef courbe[](expr a,b,nb)(text texte)=
+ path Courbe;
+ for i:=0 upto nb :
+ x@[i]:=(a+i*(b-a)/nb);
+ x:=x@[i];
+ y@[i]:=texte;
+ endfor ;
+ Cb@:=(x@.0*xu,y@.0*yu)
+ for i:=1 upto nb :
+ ..(x@[i]*xu,y@[i]*yu)
+ endfor;
+ Cb@:=Cb@ shifted (Origine*cm);
+ Courbe=Cb@;
+ Courbe
+ enddef;
+
+ if Grille:
+ drawoptions(withcolor 0.75white);
+ for k=xpart(Origine) step grillex until xmax:
+ trace u*(k,ymin)--u*(k,ymax);
+ endfor;
+ for k=xpart(Origine) step -grillex until xmin:
+ trace u*(k,ymin)--u*(k,ymax);
+ endfor;
+ for k=ypart(Origine) step grilley until ymax:
+ trace u*(xmin,k)--u*(xmax,k);
+ endfor;
+ for k=ypart(Origine) step -grilley until ymin:
+ trace u*(xmin,k)--u*(xmax,k);
+ endfor;
+ drawoptions();
+ fi;
+ if Graduations:
+ for k=1 upto xmax/grillex:
+ dotlabel.bot(LATEX("\num{"&decimal(k)&"}"),(k*xu+xpart(Origine*cm),ypart(Origine*cm)));
+ endfor;
+ for k=-1 downto xmin/grillex:
+ dotlabel.bot(LATEX("\num{"&decimal(k)&"}"),(k*xu+xpart(Origine*cm),ypart(Origine*cm)));
+ endfor;
+ for k=1 upto ymax/grilley:
+ dotlabel.lft(LATEX("\num{"&decimal(k)&"}"),(xpart(Origine*cm),k*yu+ypart(Origine*cm)));
+ endfor;
+ for k=-1 downto ymin/grilley:
+ dotlabel.lft(LATEX("\num{"&decimal(k)&"}"),(xpart(Origine*cm),k*yu+ypart(Origine*cm)));
+ endfor;
+ fi;
+ drawoptions(withpen pencircle scaled1.5);
+ drawarrow (u*(0,ymin)--u*(0,ymax)) shifted (u*(xpart(Origine),0));
+ drawarrow (u*(xmin,0)--u*(xmax,0)) shifted (u*(0,ypart(Origine)));
+ drawoptions();
+ draw courbe1(borneinf,bornesup,100)(#2) withcolor colortrace;
+% % labelisation
+ numeric t;
+ t=pos*length Cb1;
+ pair PT,Tangente;
+ PT:=point (pos*length Cb1) of Cb1;
+ Tangente:=unitvector(direction t of Cb1);
+ label(btex \noexpand\useKV[TraceG]{NomCourbe} etex rotated angle(Tangente),PT+2mm*(Tangente rotated 90));
+% % fin labelisation
+ 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));
+ \end{mpost}
+ \fi
+}
+
+%%%
% Formules
%%%
\setKVdefault[ClesFormule]{Perimetre=false,Aire=false,Volume=false,Surface=carr\'e,Solide=pav\'e,Angle=0,Ancre={(0,0)},Largeur=5cm,Couleur=white}
@@ -12906,7 +13376,7 @@ Unite={},Largeur=1cm,Precision=2,Donnee=Valeurs,Effectif=Effectif,Origine=0,Angl
%%%
\newcommand\Puissances[2]{%
\ensuremath{%
- \xintifboolexpr{#2=0}{1}{\xintifboolexpr{#2>0}{\xdef\total{\fpeval{#2-1}}#1\multido{\i=1+1}{\total}{\times#1}}{\xdef\total{\fpeval{-#2-1}}\frac{1}{#1\multido{\i=1+1}{\total}{\times#1}}}}%
+ \xintifboolexpr{#2==0}{1}{\xintifboolexpr{#2>0}{\xdef\total{\fpeval{#2-1}}#1\multido{\i=1+1}{\total}{\times#1}}{\xdef\total{\fpeval{-#2-1}}\frac{1}{#1\multido{\i=1+1}{\total}{\times#1}}}}%
}%
}
@@ -13870,7 +14340,7 @@ Unite={},Largeur=1cm,Precision=2,Donnee=Valeurs,Effectif=Effectif,Origine=0,Angl
};
\node[yshift=-0.65cm] (T2b) at (T2){};
\ifboolKV[Cards]{Titre}{\node[] at (T2b) {\tiny\useKV[Cards]{NomTitre}};}{},
- \node[rectangle,xshift=5mm,yshift=4.25mm,minimum width=2em,rounded corners,fill=TrameCouleur,draw=black] (R) at (frame.south west) {\color{black}\Large\bfseries #3};
+ \node[rectangle,xshift=5pt,yshift=4.25mm,minimum width=2em,rounded corners,fill=TrameCouleur,draw=black,anchor=west] (R) at (frame.south west) {\color{black}\Large\bfseries #3};
\draw[dashed] (S1) -- (S2);
},
colback=white,
@@ -14124,7 +14594,7 @@ Unite={},Largeur=1cm,Precision=2,Donnee=Valeurs,Effectif=Effectif,Origine=0,Angl
\long\def\ifremain@lines#1\\#2\@nil{%
\csname @\ifx\@empty#2\@empty second\else first\fi oftwo\endcsname}
\long\def\subst@eol#1\\#2\@nil{\addtot@b{#1\\}%
- \ifremain@lines#2\\\@nil{\addtot@b&\subst@eol#2\@nil}{\addtot@b{#2\CodeAfter\xintifboolexpr{\useKV[Tableur]{Ligne}=0 || \useKV[Tableur]{Colonne}=0}{}{\tikz\draw[line width=2pt](row-\fpeval{\useKV[Tableur]{Ligne}+1}-|col-\fpeval{\useKV[Tableur]{Colonne}+1}) rectangle (row-\fpeval{\useKV[Tableur]{Ligne}+1+\useKV[Tableur]{PasL}}-|col-\fpeval{\useKV[Tableur]{Colonne}+1+\useKV[Tableur]{PasC}});}\end{NiceTabular}}}}
+ \ifremain@lines#2\\\@nil{\addtot@b&\subst@eol#2\@nil}{\addtot@b{#2\CodeAfter\xintifboolexpr{\useKV[Tableur]{Ligne}==0 || \useKV[Tableur]{Colonne}==0}{}{\tikz\draw[line width=2pt](row-\fpeval{\useKV[Tableur]{Ligne}+1}-|col-\fpeval{\useKV[Tableur]{Colonne}+1}) rectangle (row-\fpeval{\useKV[Tableur]{Ligne}+1+\useKV[Tableur]{PasL}}-|col-\fpeval{\useKV[Tableur]{Colonne}+1+\useKV[Tableur]{PasC}});}\end{NiceTabular}}}}
\long\def\collectcp@body#1\end{\subst@eol#1\@nil\end}
\newcommand\addtot@b[1]{\t@b\expandafter{\the\t@b#1}}
diff --git a/macros/latex/contrib/suftesi/suftesi.dtx b/macros/latex/contrib/suftesi/suftesi.dtx
index 9a8820cb6e..2ded276ca5 100644
--- a/macros/latex/contrib/suftesi/suftesi.dtx
+++ b/macros/latex/contrib/suftesi/suftesi.dtx
@@ -56,7 +56,7 @@ This work has the LPPL maintenance status "author-maintained".
%<class>\NeedsTeXFormat{LaTeX2e}[2005/12/01]
%<class>\ProvidesClass{suftesi}
%<*class>
- [2021/05/23 v3.1.1 A class for typesetting theses, books and articles]
+ [2021/06/05 v3.1.2 A class for typesetting theses, books and articles]
%</class>
%<*driver>
\documentclass[12pt]{ltxdoc}
@@ -338,7 +338,7 @@ cochineal,mathpazo,bera,amsthm}
%</driver>
% \fi
%
-% \CheckSum{5685}
+% \CheckSum{5683}
%
% \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
@@ -356,7 +356,8 @@ cochineal,mathpazo,bera,amsthm}
% Grave accent \` Left brace \{ Vertical bar \|
% Right brace \} Tilde \~}
%
-% \changes{v3.1.1}{2021/05/23}{Redefined some boolean options. Renamed some private commands. Corrected a bug in headers numbering (\cmd{protect} removed). Disabled automatic partial ToC functionality. Improved \opt{fewfootnotes} option via \sty{zref}. Updated documentation.}
+% \changes{v3.1.2}{2021/06/05}{Corrected a bug with \opt{reverseauthortitle} option.}
+% \changes{v3.1.1}{2021/05/23}{Redefined some boolean options. Renamed some private commands. Corrected a bug in headers numbering (\cmd{protect} removed). Disabled automatic partial ToC functionality. Improved \opt{fewfootnotes} option via \sty{zref}. Updated documentation.}
% \changes{v3.1.0}{2021/05/20}{Replaced \cmd{val}\cmd{nr} with \cmd{suftesi@val}\cmd{suftesi@nr}. Corrected a bug with \cmd{maketitle} in \opt{collection} structure. New options \opt{partialtoc} and \opt{maketitlestyle}. New commands for customizing the partial ToC. New value \opt{justify} for \opt{quotestyle} option. Improved \opt{quotesize} option. Renamed the \opt{revauthortitle} option to \opt{reverseauthortitle}. The options \opt{titlefont}, \opt{authorfont}, \opt{reverseauthortitle} now work for every structure. Renewed documentation}
% \changes{v3.0.2}{2021/02/06}{Improved \opt{subsecstyle} and \opt{subsubsecstyle} options.}
% \changes{v3.0.1}{2021/01/27}{Maintenance release.}
@@ -941,6 +942,18 @@ cochineal,mathpazo,bera,amsthm}
% ^^A ----------------------------------------------------------------
%
% \begin{optionlist*}
+% \optitem[cochineal]{defaultfont}{\opt{none}\OR\opt{cochineal}\OR\opt{libertine}\OR\opt{palatino}\OR\opt{standard}}
+% \begin{valuelist}
+% \item[none] Does not load any font (default with
+% \hologo{XeLaTeX} or \hologo{LuaLaTeX}). Use this option
+% if you want full control over the font selection
+% \item[cochineal] Loads the Cochineal serif, the Linux Biolinum sans serif and the Inconsolata typewriter.
+% \item[libertine] Loads the Linux Libertine serif, the Linux Biolinum sans serif and the Inconsolata typewriter.
+% \item[palatino] Loads the New PX serif, the Linux Biolinum sans serif and the Inconsolata typewriter. Note that the New PX font does not provide support for Greek. The \opt{greekfont=artemisia} option offers a very good solution.
+% ^^A and {\fontfamily{artemisia}\selectfont Artemisia} by the {\fontfamily{artemisia}\selectfont Greek Font Society} for the greek text.
+% \item[standard] Loads the \sty{lmodern} package: Latin Modern font family and CB Greek.
+% \end{valuelist}
+%
% \optitem[10\OR 10pt]{fontsize}{\meta{dimen}}
% Sets the main font sizes for the document, changing the \cmd{baselineskip}
% accordingly. This option is based on the \sty{fontsize} package \parencite{fontsize}. The \meta{fontsize} can be given in any unit recognized
@@ -957,17 +970,7 @@ cochineal,mathpazo,bera,amsthm}
% \item[upper] Prints spaced \textsc{\lsstyle Small Capitals} with uppercase initials.
% \end{valuelist}
%
-% \optitem[cochineal]{defaultfont}{\opt{none}\OR\opt{cochineal}\OR\opt{libertine}\OR\opt{palatino}\OR\opt{standard}}
-% \begin{valuelist}
-% \item[none] Does not load any font (default with
-% \hologo{XeLaTeX} or \hologo{LuaLaTeX}). Use this option
-% if you want full control over the font selection
-% \item[cochineal] Loads the Cochineal serif, the Linux Biolinum sans serif and the Inconsolata typewriter.
-% \item[libertine] Loads the Linux Libertine serif, the Linux Biolinum sans serif and the Inconsolata typewriter.
-% \item[palatino] Loads the New PX serif, the Linux Biolinum sans serif and the Inconsolata typewriter. Note that the New PX font does not provide support for Greek. The \opt{greekfont=artemisia} option offers a very good solution.
-% ^^A and {\fontfamily{artemisia}\selectfont Artemisia} by the {\fontfamily{artemisia}\selectfont Greek Font Society} for the greek text.
-% \item[standard] Loads the \sty{lmodern} package: Latin Modern font family and CB Greek.
-% \end{valuelist}
+%
% \end{optionlist*}
%
% ^^A ----------------------------------------------------------------
@@ -1128,7 +1131,7 @@ cochineal,mathpazo,bera,amsthm}
% ^^A
% ^^A ----------------------------------------------------------------
%
-% In the following option \meta{level} can be \opt{part}, \opt{chap}, \opt{sec},
+% In the following options \meta{level} can be \opt{part}, \opt{chap}, \opt{sec},
% \opt{subsec}, \opt{subsubsec}, \opt{par}, \opt{subpar}. You can see some
% combinations of these options in figure \ref{fig:fakechapter}.
%
@@ -1183,18 +1186,19 @@ cochineal,mathpazo,bera,amsthm}
%
% \changes{v2.9.3}{2020/001/29}{New commands to change the font of the section titles and numbers.}
%
-% The commands in this section are experimental. They provide a fast way to customize the format of section titles and numbers. Note that in some cases you will have to manually adjust the spacing accordingly, using \cmd{titlespacing}, \cmd{hskip}/\cmd{hspace}, \cmd{vskip}/\cmd{vspace}, and so on.
+% The commands in this section are experimental. They provide a fast way to customize the format of section titles and numbers. Note that in some cases you will have to manually adjust the spacing accordingly, using \cmd{titlespacing}, \cmd{hspace}, \cmd{vspace}, and so on.
+%
+% Below \meta{level} can be \opt{part},
+% \opt{chap}, \opt{sec}, \opt{subsec}, \opt{subsubsec}.
%
% \begin{ltxsyntax}
% \cmditem*{\meta{level}font}{definition}
%
-% Changes the font of the \meta{level} title, where \meta{level} can be \opt{part},
-% \opt{chap}, \opt{sec}, \opt{subsec}, \opt{subsubsec}.
+% Changes the font of the \meta{level} title.
%
% \cmditem*{\meta{level}numfont}{definition}
%
-% Changes the font of the \meta{level} number, where \meta{level} can be \opt{part},
-% \opt{chap}, \opt{sec}, \opt{subsec}, \opt{subsubsec}.
+% Changes the font of the \meta{level} number.
%
% For example, if you used the \opt{chapfont=smallcaps} option, you can change the size of the chapter title accordingly with:
% \begin{latexcode}
@@ -1302,13 +1306,13 @@ cochineal,mathpazo,bera,amsthm}
% \end{valuelist}
% \optitem[roman]{toc\meta{level}font}{\opt{roman}\OR\opt{italic}\OR
% \opt{smallcaps}}
+% Where \meta{level} can be \opt{part}, \opt{chap}, \opt{sec}, \opt{subsec}, \opt{subsubsec}, \opt{par}, \opt{subpar}.
% \begin{valuelist}
% \item[roman] Prints the \meta{level} ToC entry in roman.
% \item[italic] Prints the \meta{level} ToC entry in \emph{italic}.
% \item[smallcaps] Prints the \meta{level} ToC entry
% in \textsc{\lsstyle spaced small caps}
% \end{valuelist}
-% Where \meta{level} can be \opt{part}, \opt{chap}, \opt{sec}, \opt{subsec}, \opt{subsubsec}, \opt{par}, \opt{subpar}.
% \optitem[all]{twocolcontents}{\opt{toc}\OR\opt{lof}\OR
% \opt{lot}\OR\opt{toclof}\OR\opt{toclot}\OR\opt{loflot}\OR\opt{all}}
% This option activates the \opt{tocstyle=ragged} option
@@ -1344,25 +1348,32 @@ cochineal,mathpazo,bera,amsthm}
%
% ^^A ----------------------------------------------------------------
% ^^A
-% \paragraph{General commands}\label{sec:toc:commands:general}
+% \paragraph{General commands}\label{sec:toc:commands:general}\mbox{}
% ^^A
% ^^A ----------------------------------------------------------------
%
+% Below \meta{level} can be \opt{part},
+% \opt{chap}, \opt{sec}, \opt{subsec}, \opt{subsubsec}.
+%
% \begin{ltxsyntax}
+%
% \cmditem*{toc\meta{level}font}{definition}
%
-% Changes the font of the \meta{level} title, where \meta{level} can be \opt{part},
-% \opt{chap}, \opt{sec}, \opt{subsec}, \opt{subsubsec}.
+% Changes the font of the \meta{level} title.
%
% \cmditem*{toc\meta{level}numfont}{definition}
%
-% Changes the font of the \meta{level} number, where \meta{level} can be \opt{part},
-% \opt{chap}, \opt{sec}, \opt{subsec}, \opt{subsubsec}.
+% Changes the font of the \meta{level} number.
%
+% \end{ltxsyntax}
+%
+% Below \meta{level} can be \opt{part}, \opt{chap}, \opt{sec}, \opt{subsec}, \opt{subsubsec}, \opt{par}, \opt{subpar}, \opt{fig}, \opt{tab}.
+%
+% \begin{ltxsyntax}
% \cmditem{toclabelwidth}{level}{dim}
% \changes{v0.9a}{2012/08/31}{New command \cmd{toclabelspace}}
%
-% Adds the \meta{dim} to the \meta{level} label in the table of contents, where \meta{level} can be \opt{part}, \opt{chap}, \opt{sec}, \opt{subsec}, \opt{subsubsec}, \opt{par}, \opt{subpar}, \opt{fig}, \opt{tab}. For example, when using \opt{chapnumstyle=Roman} you would probably need to adjust the width of the chapter label with |\toclabelwidth{chap}{1em}|.
+% Adds the \meta{dim} to the \meta{level} label in the table of contents. For example, when using \opt{chapnumstyle=Roman} you would probably need to adjust the width of the chapter label with |\toclabelwidth{chap}{1em}|.
%
% \cmditem*{tocpartname}{definition}\hfill default: \cmd{partname}
%
@@ -1388,7 +1399,7 @@ cochineal,mathpazo,bera,amsthm}
%
% ^^A ----------------------------------------------------------------
% ^^A
-% \paragraph{Partial ToCs}\label{sec:toc:partialtoc}
+% \paragraph{Partial ToCs}\label{sec:toc:partialtoc}\mbox{}
% ^^A
% ^^A ----------------------------------------------------------------
%
@@ -1410,11 +1421,11 @@ cochineal,mathpazo,bera,amsthm}
%
% Sets the font size of the partial ToC.
%
-% \cmditem*{partialtocbeforespace}{dimen}
+% \cmditem*{partialtocbeforespace}{dimen} \hfill default: |0pt|
%
% Sets the space before the partial ToC.
%
-% \cmditem*{partialtocafterpace}{dimen}
+% \cmditem*{partialtocafterpace}{dimen} \hfill default: |2|\cmd{baselineskip}
%
% Sets the space after the partial ToC.
%
@@ -1612,8 +1623,8 @@ cochineal,mathpazo,bera,amsthm}
%
% \optitem[true]{marginpar}{\opt{true}\OR\opt{false}}
% \begin{valuelist}
-% \item[true] Prints the marginal notes.
-% \item[false] Hide the marginal notes.
+% \item[true] Prints the marginal notes set with \cmd{marginpar}.
+% \item[false] Hide the marginal notes set with \cmd{marginpar}.
% \end{valuelist}
% \optitem[standard]{captionstyle}{\opt{standard}\OR\opt{sanserif}\OR\opt{italic}\OR\opt{smallcaps}}
% All these values print the caption in small size, changing the shape:
@@ -2418,6 +2429,7 @@ cochineal,mathpazo,bera,amsthm}
{book,article,collection}[book]{%
\ifcase\suftesi@nr\relax
% \disable@keys{}{secnumstyle}
+ \SUF@titlepagetrue
\def\SUF@chapswitch{\thechapter.}
\or
\suftesi@articletrue
@@ -2425,7 +2437,8 @@ cochineal,mathpazo,bera,amsthm}
\def\SUF@chapswitch{}
\or
\suftesi@collectiontrue
- \setkeys{}{headerstyle=authortitleinner}
+ \SUF@titlepagefalse
+ \setkeys{}{headerstyle=authortitleinner}
\def\SUF@chapswitch{}
\fi}
% \end{macrocode}
@@ -2445,11 +2458,13 @@ cochineal,mathpazo,bera,amsthm}
\fi}
% \end{macrocode}
% \paragraph{Other options}
+% The \opt{marginpar} option conflicts with the \sty{geometry} package
+% when it is declared without explicitly providing a value. To be fixed!
% \begin{macrocode}
-\define@boolkey[SUF]{}{marginpar}[true]{}
-\define@boolkey[SUF]{}{partpage}[true]{}
-\define@boolkey[SUF]{}{draftdate}[true]{}
-\define@boolkey[SUF]{}{titlepage}[true]{}
+\define@boolkey{}[SUF@]{marginpar}[true]{}
+\define@boolkey{}[SUF@]{partpage}[true]{}
+\define@boolkey{}[SUF@]{draftdate}[true]{}
+\define@boolkey{}[SUF@]{titlepage}[true]{}
% \end{macrocode}
% \subsubsection{Fonts}
% \paragraph{Roman fonts}
@@ -3109,7 +3124,7 @@ cochineal,mathpazo,bera,amsthm}
\suftesi@twocolumnlottrue
\setkeys{}{tocstyle=ragged}
\fi}
-\define@boolkey[SUF]{}{partialtoc}[true]{}
+\define@boolkey{}[SUF@]{partialtoc}[true]{}
% \end{macrocode}
% \paragraph{Table of contents font}
% \begin{macrocode}
@@ -3284,7 +3299,7 @@ cochineal,mathpazo,bera,amsthm}
\renewcommand\@makefntext{%
\textsuperscript{\@thefnmark}\hskip.3em}
\fi}
-\define@boolkey[SUF]{}{fewfootnotes}[true]{}
+\define@boolkey{}[SUF@]{fewfootnotes}[true]{}
% \end{macrocode}
% \paragraph{Captions}
% \begin{macrocode}
@@ -3677,7 +3692,6 @@ cochineal,mathpazo,bera,amsthm}
% \end{macrocode}
% \subsubsection{Options processing}
% \begin{macrocode}
-\ProcessOptionsX[SUF]<>\relax
\ExecuteOptionsX<>{
structure=book,
pagelayout=standard,
@@ -3692,6 +3706,7 @@ cochineal,mathpazo,bera,amsthm}
quotesize=footnotesize,
quotestyle=center,
captionstyle=standard,
+ marginpar=true,
tocstyle=standard,
partstyle=left,
chapstyle=left,
@@ -5297,7 +5312,7 @@ cochineal,mathpazo,bera,amsthm}
\partialtocparlabelfont{}
\partialtocsubparlabelfont{}
\partialtocbeforespace{0pt}
-\partialtocafterspace{0pt}
+\partialtocafterspace{2\baselineskip}
\partialtocbeforecode{}
\partialtocaftercode{}
% \end{macrocode}
@@ -5595,7 +5610,7 @@ cochineal,mathpazo,bera,amsthm}
\SUF@authortitle@align
\let\footnote\thanks
\parindent=0pt
- {\SUF@second}%
+ {\SUF@second\par}%
\label{begin:\thearticle}
% \end{macrocode}
% Check if you don't use \sty{hyperrref} provided by Enrico Gregorio
@@ -5615,7 +5630,7 @@ cochineal,mathpazo,bera,amsthm}
{\SUF@tocTIT@font{\@headtitle}}}
\endgroup%
\par\nobreak\vspace{2ex}
- {\SUF@first%
+ {\SUF@first\par%
\vskip1.5cm}}%
}
% \newenvironment{article}
@@ -5715,9 +5730,7 @@ cochineal,mathpazo,bera,amsthm}
{\SUF@first\par}%
\vskip 3em%
{\lineskip .75em%
- \begin{tabular}[t]{c}%
- \SUF@second
- \end{tabular}\par}%
+ \SUF@second\par}%
\vskip 1.5em%
{\SUF@datefont\@date\par}%
\end{center}\par
@@ -5769,9 +5782,7 @@ cochineal,mathpazo,bera,amsthm}
{\SUF@first\par}%
\vskip 1.5em%
{\lineskip .5em%
- \begin{tabular}[t]{c}%
- \SUF@second\par
- \end{tabular}\par}%
+ \SUF@second\par}%
\vskip 1em%
{\SUF@datefont\@date\par}%
\end{center}%
diff --git a/macros/latex/contrib/suftesi/suftesi.pdf b/macros/latex/contrib/suftesi/suftesi.pdf
index 2e8c75f472..935cbaf61c 100644
--- a/macros/latex/contrib/suftesi/suftesi.pdf
+++ b/macros/latex/contrib/suftesi/suftesi.pdf
Binary files differ
diff --git a/macros/latex/contrib/tabularray/tabularray-2021.sty b/macros/latex/contrib/tabularray/tabularray-2021.sty
new file mode 100644
index 0000000000..90ddaadd34
--- /dev/null
+++ b/macros/latex/contrib/tabularray/tabularray-2021.sty
@@ -0,0 +1,4218 @@
+%%% % -*- coding: utf-8 -*-
+%%% ----------------------------------------------------------------------------
+%%% Tabularray: Typeset tabulars and arrays with LaTeX3
+%%% Author : Jianrui Lyu <tolvjr@163.com>
+%%% Repository: https://github.com/lvjr/tabularray
+%%% License : The LaTeX Project Public License 1.3
+%%% ----------------------------------------------------------------------------
+
+%%% --------------------------------------------------------
+%% \section{Scratch Variables and Function Variants}
+%%% --------------------------------------------------------
+
+\NeedsTeXFormat{LaTeX2e}
+\RequirePackage{expl3}
+\ProvidesExplPackage{tabularray}{2021-05-25}{2021J}
+ {Typeset tabulars and arrays with LaTeX3}
+
+\RequirePackage{xparse}
+\AtBeginDocument{\@ifpackageloaded{xcolor}{\RequirePackage{ninecolors}}{}}
+
+\ExplSyntaxOn
+
+%% Backport \tl_if_eq:NnTF for old texlive 2020
+\cs_if_exist:NF \tl_if_eq:NnTF
+ {
+ \tl_new:N \l__tblr_backport_b_tl
+ \prg_new_protected_conditional:Npnn \tl_if_eq:Nn #1 #2 { T, F, TF }
+ {
+ \group_begin:
+ \tl_set:Nn \l__tblr_backport_b_tl {#2}
+ \exp_after:wN
+ \group_end:
+ \if_meaning:w #1 \l__tblr_backport_b_tl
+ \prg_return_true:
+ \else:
+ \prg_return_false:
+ \fi:
+ }
+ \prg_generate_conditional_variant:Nnn \tl_if_eq:Nn { c } { TF, T, F }
+ }
+
+%% Compatible with texlive 2020
+\cs_if_exist:NF \seq_map_indexed_function:NN
+ {
+ \cs_set_eq:NN \seq_map_indexed_function:NN \seq_indexed_map_function:NN
+ }
+
+\cs_generate_variant:Nn \msg_error:nnnn { nnVn }
+\cs_generate_variant:Nn \prop_item:Nn { Ne, NV }
+\cs_generate_variant:Nn \prop_put:Nnn { Nxn, Nxx, NxV }
+\cs_generate_variant:Nn \regex_replace_all:NnN { NVN }
+\cs_generate_variant:Nn \seq_map_indexed_inline:Nn { cn }
+\cs_generate_variant:Nn \tl_const:Nn { ce }
+\cs_generate_variant:Nn \tl_log:n { x }
+\cs_generate_variant:Nn \tl_gput_right:Nn { Nf }
+\prg_generate_conditional_variant:Nnn \clist_if_in:Nn { Nx } { TF }
+\prg_generate_conditional_variant:Nnn \prop_if_in:Nn { c } { T }
+\prg_generate_conditional_variant:Nnn \str_if_eq:nn { xn } { TF }
+\prg_generate_conditional_variant:Nnn \tl_if_eq:nn { en } { T, TF }
+\prg_generate_conditional_variant:Nnn \tl_if_head_eq_meaning:nN { VN } { T, TF }
+
+\tl_new:N \l__tblr_a_tl
+\tl_new:N \l__tblr_b_tl
+\tl_new:N \l__tblr_c_tl
+\tl_new:N \l__tblr_d_tl
+\tl_new:N \l__tblr_e_tl
+\tl_new:N \l__tblr_f_tl
+\tl_new:N \l__tblr_h_tl
+\tl_new:N \l__tblr_i_tl % for row index
+\tl_new:N \l__tblr_j_tl % for column index
+\tl_new:N \l__tblr_k_tl
+\tl_new:N \l__tblr_n_tl
+\tl_new:N \l__tblr_o_tl
+\tl_new:N \l__tblr_r_tl
+\tl_new:N \l__tblr_s_tl
+\tl_new:N \l__tblr_t_tl
+\tl_new:N \l__tblr_u_tl
+\tl_new:N \l__tblr_v_tl
+\tl_new:N \l__tblr_w_tl
+\tl_new:N \l__tblr_x_tl
+\tl_new:N \l__tblr_y_tl
+\int_new:N \l__tblr_a_int
+\int_new:N \l__tblr_c_int % for column number
+\int_new:N \l__tblr_r_int % for row number
+\dim_new:N \l__tblr_d_dim % for depth
+\dim_new:N \l__tblr_h_dim % for height
+\dim_new:N \l__tblr_o_dim
+\dim_new:N \l__tblr_p_dim
+\dim_new:N \l__tblr_q_dim
+\dim_new:N \l__tblr_r_dim
+\dim_new:N \l__tblr_s_dim
+\dim_new:N \l__tblr_t_dim
+\dim_new:N \l__tblr_v_dim
+\dim_new:N \l__tblr_w_dim % for width
+\box_new:N \l__tblr_a_box
+\box_new:N \l__tblr_b_box
+\box_new:N \l__tblr_c_box % for cell box
+\box_new:N \l__tblr_d_box
+
+%%% --------------------------------------------------------
+%% \section{Data Structures Based on Property Lists}
+%%% --------------------------------------------------------
+
+\int_new:N \g_tblr_level_int % store table nesting level
+
+\cs_new_protected:Npn \__tblr_prop_gput:nnn #1 #2 #3
+ {
+ \prop_gput:cnn
+ { g_tblr_#1_ \int_use:N \g_tblr_level_int _prop } { #2 } { #3 }
+ }
+\cs_generate_variant:Nn \__tblr_prop_gput:nnn { nnx, nnV, nxn, nxx, nxV }
+
+\cs_new:Npn \__tblr_prop_item:nn #1 #2
+ {
+ \prop_item:cn { g_tblr_#1_ \int_use:N \g_tblr_level_int _prop } { #2 }
+ }
+\cs_generate_variant:Nn \__tblr_prop_item:nn { ne }
+
+\cs_new_protected:Npn \__tblr_prop_if_in:nnT #1
+ {
+ \prop_if_in:cnT { g_tblr_#1_ \int_use:N \g_tblr_level_int _prop }
+ }
+\cs_new_protected:Npn \__tblr_prop_if_in:nnF #1
+ {
+ \prop_if_in:cnF { g_tblr_#1_ \int_use:N \g_tblr_level_int _prop }
+ }
+\cs_new_protected:Npn \__tblr_prop_if_in:nnTF #1
+ {
+ \prop_if_in:cnTF { g_tblr_#1_ \int_use:N \g_tblr_level_int _prop }
+ }
+\prg_generate_conditional_variant:Nnn \__tblr_prop_if_in:nn { nx } { T, F, TF }
+
+\cs_new_protected:Npn \__tblr_prop_log:n #1
+ {
+ \prop_log:c { g_tblr_#1_ \int_use:N \g_tblr_level_int _prop }
+ }
+
+\cs_new_protected:Npn \__tblr_prop_map_inline:nn #1 #2
+ {
+ \prop_map_inline:cn { g_tblr_#1_ \int_use:N \g_tblr_level_int _prop } {#2}
+ }
+
+\cs_new_protected:Npn \__tblr_prop_gput_if_larger:nnn #1 #2 #3
+ {
+ \__tblr_gput_if_larger:cnn
+ { g_tblr_#1_ \int_use:N \g_tblr_level_int _prop } { #2 } { #3 }
+ }
+\cs_generate_variant:Nn \__tblr_prop_gput_if_larger:nnn { nnx, nnV, nxn, nxx, nxV }
+
+\cs_new_protected:Npn \__tblr_prop_gadd_dimen_value:nnn #1 #2 #3
+ {
+ \__tblr_gadd_dimen_value:cnn
+ { g_tblr_#1_ \int_use:N \g_tblr_level_int _prop } { #2 } { #3 }
+ }
+\cs_generate_variant:Nn \__tblr_prop_gadd_dimen_value:nnn { nnx, nnV, nxn, nxx }
+
+%% Put the dimension to the prop list only if it's larger than the old one
+
+\tl_new:N \l__tblr_put_if_larger_tl
+
+\cs_new_protected:Npn \__tblr_put_if_larger:Nnn #1 #2 #3
+ {
+ \tl_set:Nx \l__tblr_put_if_larger_tl { \prop_item:Nn #1 { #2 } }
+ \bool_lazy_or:nnT
+ { \tl_if_empty_p:N \l__tblr_put_if_larger_tl }
+ { \dim_compare_p:nNn { #3 } > { \l__tblr_put_if_larger_tl } }
+ { \prop_put:Nnn #1 { #2 } { #3 } }
+ }
+\cs_generate_variant:Nn \__tblr_put_if_larger:Nnn { Nnx, Nxn, Nxx }
+
+\cs_new_protected:Npn \__tblr_gput_if_larger:Nnn #1 #2 #3
+ {
+ \tl_set:Nx \l__tblr_put_if_larger_tl { \prop_item:Nn #1 { #2 } }
+ \bool_lazy_or:nnT
+ { \tl_if_empty_p:N \l__tblr_put_if_larger_tl }
+ { \dim_compare_p:nNn { #3 } > { \l__tblr_put_if_larger_tl } }
+ { \prop_gput:Nnn #1 { #2 } { #3 } }
+ }
+\cs_generate_variant:Nn \__tblr_gput_if_larger:Nnn { Nnx, Nxn, Nxx, cnn }
+
+%% Add the dimension to some key value of the prop list
+%% #1: the prop list, #2: the key, #3: the dimen to add
+
+\cs_new_protected:Npn \__tblr_add_dimen_value:Nnn #1 #2 #3
+ {
+ \prop_put:Nnx #1 { #2 } { \dim_eval:n { \prop_item:Nn #1 { #2 } + #3 } }
+ }
+\cs_generate_variant:Nn \__tblr_add_dimen_value:Nnn { cnn }
+
+\cs_new_protected:Npn \__tblr_gadd_dimen_value:Nnn #1 #2 #3
+ {
+ \prop_gput:Nnx #1 { #2 } { \dim_eval:n { \prop_item:Nn #1 { #2 } + #3 } }
+ }
+\cs_generate_variant:Nn \__tblr_gadd_dimen_value:Nnn { cnn }
+
+%% Some counters for row and column numbering
+\newcounter{rownum}
+\newcounter{colnum}
+\newcounter{rowcount}
+\newcounter{colcount}
+
+%%% --------------------------------------------------------
+%% \section{Data Structures Based on Integer Arrays}
+%%% --------------------------------------------------------
+
+\int_new:N \g__tblr_array_int
+
+\cs_new_protected:Npn \__tblr_initial_table_data:
+ {
+ \int_gincr:N \g__tblr_array_int
+ \intarray_new:cn { g__tblr_row_ \int_use:N \g__tblr_array_int _intarray }
+ { \g__tblr_data_row_key_count_int * \c@rowcount }
+ \cs_set_eq:cc { g__tblr_row_ \int_use:N \g_tblr_level_int _intarray }
+ { g__tblr_row_ \int_use:N \g__tblr_array_int _intarray }
+ %\intarray_log:c { g__tblr_row_ \int_use:N \g_tblr_level_int _intarray }
+ }
+
+%% #1: data name; #2: key name; #3: value type
+\cs_new_protected:Npn \__tblr_data_new_key:nnn #1 #2 #3
+ {
+ \int_gincr:c { g__tblr_data_#1_key_count_int }
+ \tl_const:ce
+ {
+ g__tblr_data_#1_key_name_
+ \int_use:c { g__tblr_data_#1_key_count_int } _tl
+ }
+ { #2 }
+ \tl_const:ce { g__tblr_data_#1_key_number_#2_tl }
+ { \int_use:c { g__tblr_data_#1_key_count_int } }
+ \tl_const:cn { g__tblr_data_#1_key_type_#2_tl } {#3}
+ }
+
+\int_new:N \g__tblr_data_row_key_count_int
+
+\__tblr_data_new_key:nnn { row } { height } { dim }
+\__tblr_data_new_key:nnn { row } { coefficient } { dec }
+\__tblr_data_new_key:nnn { row } { abovesep } { dim }
+\__tblr_data_new_key:nnn { row } { belowsep } { dim }
+\__tblr_data_new_key:nnn { row } { @row-height } { dim }
+\__tblr_data_new_key:nnn { row } { @row-head } { dim }
+\__tblr_data_new_key:nnn { row } { @row-foot } { dim }
+\__tblr_data_new_key:nnn { row } { @row-upper } { dim }
+\__tblr_data_new_key:nnn { row } { @row-lower } { dim }
+
+%% #1: data name; #2: data index; #3: key name
+\cs_new:Npn \__tblr_data_key_to_int:nnn #1 #2 #3
+ {
+ ( #2 - 1 ) * \int_use:c { g__tblr_data_#1_key_count_int }
+ + \tl_use:c { g__tblr_data_#1_key_number_#3_tl }
+ }
+
+\int_new:N \l__tblr_key_count_int
+\int_new:N \l__tblr_key_quotient_int
+\int_new:N \l__tblr_key_remainder_int
+
+%% #1: data name; #2: array position;
+%% #3: returning tl with index; #4: returning tl with key name
+\cs_new:Npn \__tblr_data_int_to_key:nnNN #1 #2 #3 #4
+ {
+ \int_set_eq:Nc \l__tblr_key_count_int { g__tblr_data_#1_key_count_int }
+ \int_set:Nn \l__tblr_key_quotient_int
+ {
+ \int_div_truncate:nn
+ { #2 + \l__tblr_key_count_int - 1 } { \l__tblr_key_count_int }
+ }
+ \int_set:Nn \l__tblr_key_remainder_int
+ {
+ #2 + \l__tblr_key_count_int
+ - \l__tblr_key_quotient_int * \l__tblr_key_count_int
+ }
+ \int_compare:nNnT { \l__tblr_key_remainder_int } = { 0 }
+ { \int_set_eq:NN \l__tblr_key_remainder_int \l__tblr_key_count_int }
+ \tl_set:Nx #3 { \int_use:N \l__tblr_key_quotient_int }
+ \tl_set_eq:Nc #4
+ { g__tblr_data_#1_key_name_ \int_use:N \l__tblr_key_remainder_int _tl }
+ }
+
+%% #1: data name; #2: key name; #3: value
+\cs_new:Npn \__tblr_data_value_to_int:nnn #1 #2 #3
+ {
+ \cs:w
+ __tblr_data_ \tl_use:c { g__tblr_data_#1_key_type_#2_tl } _to_int:n
+ \cs_end:
+ {#3}
+ }
+
+%% #1: data name; #2: key name; #3: int
+\cs_new:Npn \__tblr_data_int_to_value:nnn #1 #2 #3
+ {
+ \cs:w
+ __tblr_data_int_to_ \tl_use:c { g__tblr_data_#1_key_type_#2_tl } :n
+ \cs_end:
+ {#3}
+ }
+\cs_generate_variant:Nn \__tblr_data_int_to_value:nnn { nne, nVe }
+
+\cs_new:Npn \__tblr_data_dim_to_int:n #1
+ {
+ \dim_to_decimal_in_sp:n {#1}
+ }
+
+%% Return a dimension in pt so that it's easier to understand in tracing messages
+\cs_new:Npn \__tblr_data_int_to_dim:n #1
+ {
+ %#1 sp
+ %\dim_eval:n { #1 sp }
+ \dim_to_decimal:n { #1 sp } pt
+ }
+
+\cs_new:Npn \__tblr_data_dec_to_int:n #1
+ {
+ \dim_to_decimal_in_sp:n {#1 pt}
+ }
+
+\cs_new:Npn \__tblr_data_int_to_dec:n #1
+ {
+ \dim_to_decimal:n {#1 sp}
+ }
+
+%% #1: data name; #2: data index; #3: key; #4: value
+\cs_new_protected:Npn \__tblr_data_gput:nnnn #1 #2 #3 #4
+ {
+ \intarray_gset:cnn
+ { g__tblr_#1_ \int_use:N \g_tblr_level_int _intarray }
+ { \__tblr_data_key_to_int:nnn {#1} {#2} {#3} }
+ { \__tblr_data_value_to_int:nnn {#1} {#3} {#4} }
+ }
+\cs_generate_variant:Nn \__tblr_data_gput:nnnn
+ { nnne, nnnV, nenn, nene, nenV, nVnn }
+
+%% #1: data name; #2: data index; #3: key
+\cs_new:Npn \__tblr_data_item:nnn #1 #2 #3
+ {
+ \__tblr_data_int_to_value:nne {#1} {#3}
+ {
+ \intarray_item:cn { g__tblr_#1_ \int_use:N \g_tblr_level_int _intarray }
+ { \__tblr_data_key_to_int:nnn {#1} {#2} {#3} }
+ }
+ }
+\cs_generate_variant:Nn \__tblr_data_item:nnn { nen }
+
+\tl_new:N \l__tblr_data_key_tl
+\tl_new:N \l__tblr_data_index_tl
+
+\cs_new_protected:Npn \__tblr_data_log:n #1
+ {
+ %\intarray_log:c { g__tblr_#1_ \int_use:N \g_tblr_level_int _intarray }
+ \tl_set:Nx \l_tmpa_tl { g__tblr_#1_ \int_use:N \g_tblr_level_int _intarray }
+ \int_step_inline:nn
+ { \intarray_count:c { \l_tmpa_tl } }
+ {
+ \__tblr_data_int_to_key:nnNN {#1} {##1}
+ \l__tblr_data_index_tl \l__tblr_data_key_tl
+ \tl_log:x
+ {
+ { #1 [\l__tblr_data_index_tl] / \l__tblr_data_key_tl }
+ \space = \space
+ {
+ \__tblr_data_int_to_value:nVe {#1} \l__tblr_data_key_tl
+ { \intarray_item:cn { \l_tmpa_tl } {##1} }
+ }
+ }
+ }
+ \__tblr_prop_log:n {#1}
+ }
+
+%% #1: data name; #2: row index; #3: key; #4: value
+\cs_new_protected:Npn \__tblr_data_gput_if_larger:nnnn #1 #2 #3 #4
+ {
+ \__tblr_array_gput_if_larger:cnn
+ { g__tblr_#1_ \int_use:N \g_tblr_level_int _intarray }
+ { \__tblr_data_key_to_int:nnn {#1} {#2} {#3} }
+ { \__tblr_data_value_to_int:nnn {#1} {#3} {#4} }
+ }
+\cs_generate_variant:Nn \__tblr_data_gput_if_larger:nnnn { nnne, nnnV, nene, nenV }
+
+\cs_new_protected:Npn \__tblr_array_gput_if_larger:Nnn #1 #2 #3
+ {
+ \int_compare:nNnT {#3} > { \intarray_item:Nn #1 {#2} }
+ { \intarray_gset:Nnn #1 {#2} {#3} }
+ }
+\cs_generate_variant:Nn \__tblr_array_gput_if_larger:Nnn { cnn }
+
+%% #1: data name; #2: data index; #3: key; #4: value
+\cs_new_protected:Npn \__tblr_data_gadd_dimen_value:nnnn #1 #2 #3 #4
+ {
+ \__tblr_array_gadd_value:cnn
+ { g__tblr_#1_ \int_use:N \g_tblr_level_int _intarray }
+ { \__tblr_data_key_to_int:nnn {#1} {#2} {#3} }
+ { \__tblr_data_value_to_int:nnn {#1} {#3} {#4} }
+ }
+\cs_generate_variant:Nn \__tblr_data_gadd_dimen_value:nnnn { nnne, nnnV, nene }
+
+\cs_new_protected:Npn \__tblr_array_gadd_value:Nnn #1 #2 #3
+ {
+ \intarray_gset:Nnn #1 {#2} { \intarray_item:Nn #1 {#2} + #3 }
+ }
+\cs_generate_variant:Nn \__tblr_array_gadd_value:Nnn { cnn }
+
+\bool_new:N \g__tblr_use_intarray_bool
+%\bool_set_true:N \g__tblr_use_intarray_bool
+
+\AtBeginDocument
+ {
+ \bool_if:NF \g__tblr_use_intarray_bool
+ {
+ \cs_set_protected:Npn \__tblr_data_gput:nnnn #1 #2 #3 #4
+ {
+ \__tblr_prop_gput:nnn {#1} { [#2] / #3 } {#4}
+ }
+ \cs_set:Npn \__tblr_data_item:nnn #1 #2 #3
+ {
+ \__tblr_prop_item:nn {#1} { [#2] / #3 }
+ }
+ \cs_set_protected:Npn \__tblr_data_log:n #1
+ {
+ \__tblr_prop_log:n {#1}
+ }
+ \cs_set_protected:Npn \__tblr_data_gput_if_larger:nnnn #1 #2 #3 #4
+ {
+ \__tblr_prop_gput_if_larger:nnn {#1} { [#2] / #3 } {#4}
+ }
+ \cs_set_protected:Npn \__tblr_data_gadd_dimen_value:nnnn #1 #2 #3 #4
+ {
+ \__tblr_prop_gadd_dimen_value:nnn {#1} { [#2] / #3 } {#4}
+ }
+ }
+ }
+
+%%% --------------------------------------------------------
+%% \section{Child Selectors}
+%%% --------------------------------------------------------
+
+\clist_new:N \g_tblr_used_child_selectors_clist
+
+\tl_new:N \l__tblr_childs_arg_spec_tl
+
+\msg_new:nnn { tabularray } { used-child-selector }
+ { Child ~ selector ~ name ~ "#1" ~ has ~ been ~ used! }
+
+\NewDocumentCommand \NewChildSelector { m O{0} o m }
+ {
+ \__tblr_new_child_selector_aux:xnnn { \tl_trim_spaces:n {#1} } {#2} {#3} {#4}
+ }
+
+\cs_new_protected:Npn \__tblr_new_child_selector_aux:nnnn #1 #2 #3 #4
+ {
+ \clist_if_in:NnTF \g_tblr_used_child_selectors_clist { #1 }
+ {
+ \msg_error:nnn { tabularray } { used-child-selector } { #1 }
+ \clist_log:N \g_tblr_used_child_selectors_clist
+ }
+ {
+ \__tblr_make_xparse_arg_spec:nnN { #2 } { #3 } \l__tblr_childs_arg_spec_tl
+ \exp_args:NcV \NewDocumentCommand
+ { __tblr_child_selector_ #1 :w } \l__tblr_childs_arg_spec_tl { #4 }
+ \clist_gput_right:Nn \g_tblr_used_child_selectors_clist { #1 }
+ }
+ }
+\cs_generate_variant:Nn \__tblr_new_child_selector_aux:nnnn { xnnn }
+
+%% #1: argument number, #2: optional argument default, #3: result tl
+\cs_new_protected:Npn \__tblr_make_xparse_arg_spec:nnN #1 #2 #3
+ {
+ \tl_clear:N #3
+ \int_compare:nNnT { #1 } > { 0 }
+ {
+ \IfValueTF { #2 }
+ { \tl_set:Nn #3 { O{#2} } }
+ { \tl_set:Nn #3 { m } }
+ \tl_put_right:Nx #3 { \prg_replicate:nn { #1 - 1 } { m } }
+ }
+ }
+
+\clist_new:N \l_tblr_childs_clist
+\tl_new:N \l_tblr_childs_total_tl
+
+\NewChildSelector { odd }
+ {
+ \int_step_inline:nnnn {1} {2} { \l_tblr_childs_total_tl }
+ { \clist_put_right:Nn \l_tblr_childs_clist {##1} }
+ }
+
+\NewChildSelector { even }
+ {
+ \int_step_inline:nnnn {2} {2} { \l_tblr_childs_total_tl }
+ { \clist_put_right:Nn \l_tblr_childs_clist {##1} }
+ }
+
+\regex_const:Nn \c__tblr_split_selector_name_regex { ^ ( [A-Za-z] {2,} ) ( . * ) }
+\seq_new:N \l__tblr_childs_split_seq
+\seq_new:N \l__tblr_childs_regex_seq
+\tl_new:N \l__tblr_childs_end_tl
+\tl_new:N \l__tblr_childs_selector_tl
+
+%% #1, child specifications; #2, total number.
+%% The result will be put into \l_tblr_childs_clist
+\cs_new_protected:Npn \__tblr_get_childs:nn #1 #2
+ {
+ \clist_clear:N \l_tblr_childs_clist
+ \tl_set:Nx \l_tblr_childs_total_tl {#2}
+ \regex_extract_once:NnNTF \c__tblr_split_selector_name_regex {#1}
+ \l__tblr_childs_regex_seq
+ {
+ \tl_set:No \l__tblr_childs_selector_tl
+ {
+ \cs:w
+ __tblr_child_selector_ \seq_item:Nn \l__tblr_childs_regex_seq {2} :w
+ \cs_end:
+ }
+ \exp_args:Nx \l__tblr_childs_selector_tl
+ { \seq_item:Nn \l__tblr_childs_regex_seq{3} }
+ }
+ {
+ \tl_if_eq:nnTF {#1} {-}
+ { \__tblr_get_childs_normal:nn {1-#2} {#2} }
+ { \__tblr_get_childs_normal:nn {#1} {#2} }
+ }
+ %\clist_log:N \l_tblr_childs_clist
+ }
+\cs_generate_variant:Nn \__tblr_get_childs:nn { nx }
+
+\cs_new_protected:Npn \__tblr_get_childs_normal:nn #1 #2
+ {
+ \seq_set_split:Nnn \l__tblr_childs_split_seq {,} {#1}
+ \seq_map_inline:Nn \l__tblr_childs_split_seq
+ { \__tblr_get_childs_normal_aux:w ##1 - s \scan_stop }
+ }
+
+\cs_new_protected_nopar:Npn \__tblr_get_childs_normal_aux:w #1 - #2 #3 \scan_stop
+ {
+ \tl_if_eq:nnTF {#2} {s}
+ { \tl_set:Nn \l__tblr_childs_end_tl {#1} }
+ { \tl_set:Nn \l__tblr_childs_end_tl {#2} }
+ \int_step_inline:nnn {#1} { \l__tblr_childs_end_tl }
+ { \clist_put_right:Nn \l_tblr_childs_clist {##1} }
+ }
+
+%%% --------------------------------------------------------
+%% \section{New Table Commands}
+%%% --------------------------------------------------------
+
+%% We need some commands to modify table/row/column/cell specifications.
+%% These commands must be defined with \NewTableCommand command,
+%% so that we could extract them, execute them once, then disable them.
+
+\clist_new:N \g__tblr_table_commands_clist
+
+\msg_new:nnn { tabularray } { defined-table-command }
+ { Table ~ commnad ~ #1 has ~ been ~ defined! }
+
+\NewDocumentCommand \NewTableCommand { m O{0} o m }
+ {
+ \clist_if_in:NnTF \g__tblr_table_commands_clist { #1 }
+ {
+ \msg_error:nnn { tabularray } { defined-table-command } { #1 }
+ \clist_log:N \g__tblr_table_commands_clist
+ }
+ {
+ \__tblr_make_xparse_arg_spec:nnN { #2 } { #3 } \l__tblr_a_tl
+ \exp_args:NcV \NewDocumentCommand
+ { __tblr_table_command_ \cs_to_str:N #1 :w } \l__tblr_a_tl { #4 }
+ \exp_args:NcV \NewDocumentCommand
+ { __tblr_table_command_ \cs_to_str:N #1 _gobble :w } \l__tblr_a_tl { }
+ \IfValueTF { #3 }
+ {
+ \tl_gset:cn { g__tblr_table_cmd_ \cs_to_str:N #1 _arg_numb_tl } {-#2}
+ }
+ {
+ \tl_gset:cn { g__tblr_table_cmd_ \cs_to_str:N #1 _arg_numb_tl } {#2}
+ }
+ \clist_gput_right:Nn \g__tblr_table_commands_clist { #1 }
+ }
+ }
+
+\cs_new_protected:Npn \__tblr_enable_table_commands:
+ {
+ \clist_map_inline:Nn \g__tblr_table_commands_clist
+ { \cs_set_eq:Nc ##1 { __tblr_table_command_ \cs_to_str:N ##1 :w } }
+ }
+
+\cs_new_protected:Npn \__tblr_disable_table_commands:
+ {
+ \clist_map_inline:Nn \g__tblr_table_commands_clist
+ { \cs_set_eq:Nc ##1 { __tblr_table_command_ \cs_to_str:N ##1 _gobble:w } }
+ }
+
+\cs_new_protected:Npn \__tblr_execute_table_commands:
+ {
+ \__tblr_prop_map_inline:nn { command }
+ {
+ \__tblr_set_row_col_from_key_name:w ##1
+ ##2
+ }
+ \LogTblrTracing { cell }
+ }
+
+\cs_new_protected:Npn \__tblr_set_row_col_from_key_name:w [#1][#2]
+ {
+ \int_set:Nn \c@rownum {#1}
+ \int_set:Nn \c@colnum {#2}
+ }
+
+%%% --------------------------------------------------------
+%% \section{New Dash Styles}
+%%% --------------------------------------------------------
+
+%% \NewDashStyle commands
+
+\dim_zero_new:N \rulewidth
+\dim_set:Nn \rulewidth {0.4pt}
+
+\prop_gset_from_keyval:Nn \g__tblr_defined_hdash_styles_prop
+ { solid = \hrule height \rulewidth }
+\prop_gset_from_keyval:Nn \g__tblr_defined_vdash_styles_prop
+ { solid = \vrule width \rulewidth }
+
+\NewDocumentCommand \NewDashStyle { m m }
+ {
+ \seq_set_split:Nnn \l_tmpa_seq { ~ } {#2}
+ \tl_set:Nx \l__tblr_a_tl { \seq_item:Nn \l_tmpa_seq {1} }
+ \tl_set:Nx \l__tblr_b_tl { \seq_item:Nn \l_tmpa_seq {2} }
+ \tl_set:Nx \l__tblr_c_tl { \seq_item:Nn \l_tmpa_seq {3} }
+ \tl_set:Nx \l__tblr_d_tl { \seq_item:Nn \l_tmpa_seq {4} }
+ \tl_if_eq:NnT \l__tblr_a_tl { on }
+ {
+ \tl_if_eq:NnT \l__tblr_c_tl { off }
+ {
+ \__tblr_dash_style_make_boxes:nxx {#1}
+ { \dim_eval:n {\l__tblr_b_tl} } { \dim_eval:n {\l__tblr_d_tl} }
+ }
+ }
+ }
+
+\cs_new_protected:Npn \__tblr_dash_style_make_boxes:nnn #1 #2 #3
+ {
+ \dim_set:Nn \l_tmpa_dim { #2 + #3 }
+ \tl_set:Nn \l__tblr_h_tl { \hbox_to_wd:nn }
+ \tl_put_right:Nx \l__tblr_h_tl { { \dim_use:N \l_tmpa_dim } }
+ \tl_put_right:Nn \l__tblr_h_tl
+ {
+ { \hss \vbox:n { \hbox_to_wd:nn {#2} {} \hrule height \rulewidth } \hss }
+ }
+ \prop_gput:NnV \g__tblr_defined_hdash_styles_prop {#1} \l__tblr_h_tl
+ %\prop_log:N \g__tblr_defined_hdash_styles_prop
+ \tl_set:Nn \l__tblr_v_tl { \vbox_to_ht:nn }
+ \tl_put_right:Nx \l__tblr_v_tl { { \dim_use:N \l_tmpa_dim } }
+ \tl_put_right:Nn \l__tblr_v_tl
+ {
+ { \vss \hbox:n { \vbox_to_ht:nn {#2} {} \vrule width \rulewidth } \vss }
+ }
+ \prop_gput:NnV \g__tblr_defined_vdash_styles_prop {#1} \l__tblr_v_tl
+ %\prop_log:N \g__tblr_defined_vdash_styles_prop
+ }
+\cs_generate_variant:Nn \__tblr_dash_style_make_boxes:nnn { nxx }
+
+\cs_new_protected:Npn \__tblr_get_hline_dash_style:N #1
+ {
+ \tl_set:Nx \l_tmpa_tl
+ { \prop_item:NV \g__tblr_defined_hdash_styles_prop #1 }
+ \tl_if_empty:NF \l_tmpa_tl { \tl_set_eq:NN #1 \l_tmpa_tl }
+ }
+
+\cs_new_protected:Npn \__tblr_get_vline_dash_style:N #1
+ {
+ \tl_set:Nx \l_tmpa_tl
+ { \prop_item:NV \g__tblr_defined_vdash_styles_prop #1 }
+ \tl_if_empty:NF \l_tmpa_tl { \tl_set_eq:NN #1 \l_tmpa_tl }
+ }
+
+\NewDashStyle {dashed} {on ~ 2pt ~ off ~ 2pt}
+\NewDashStyle {dotted} {on ~ 0.4pt ~ off ~ 1pt}
+
+%%% --------------------------------------------------------
+%% \section{Set Hlines and Vlines}
+%%% --------------------------------------------------------
+
+\tl_set:Nn \@tblr@dash { dash }
+\tl_set:Nn \@tblr@text { text }
+
+\regex_const:Nn \c__tblr_is_color_key_regex { ^[A-Za-z] }
+
+%% \SetHlines command for setting every hline in the table
+\NewTableCommand \SetHlines [3] [+]
+ {
+ \tblr_set_every_hline:nnn {#1} {#2} {#3}
+ }
+
+%% We put all code inside a group to avoid affecting other table commands
+\cs_new_protected:Npn \tblr_set_every_hline:nnn #1 #2 #3
+ {
+ \group_begin:
+ \int_step_inline:nn { \int_eval:n { \c@rowcount + 1 } }
+ {
+ \int_set:Nn \c@rownum {##1}
+ \tblr_set_hline:nnn {#1} {#2} {#3}
+ }
+ \group_end:
+ }
+
+%% Check the number of arguments and call \tblr_set_every_hline in different ways
+%% This function is called when parsing table specifications
+\cs_new_protected:Npn \__tblr_set_every_hline_aux:n #1
+ {
+ \tl_if_head_is_group:nTF {#1}
+ {
+ \int_compare:nNnTF { \tl_count:n {#1} } = {3}
+ { \tblr_set_every_hline:nnn #1 }
+ { \tblr_set_every_hline:nnn {1} #1 }
+ }
+ { \tblr_set_every_hline:nnn {1} {-} {#1} }
+ }
+
+%% Add \SetHline, \hline and \cline commands
+
+\tl_new:N \l__tblr_hline_count_tl % the count of all hlines
+\tl_new:N \l__tblr_hline_num_tl % the index of the hline
+\tl_new:N \l__tblr_hline_cols_tl % the columns of the hline
+\tl_new:N \l__tblr_hline_dash_tl % dash style
+\tl_new:N \l__tblr_hline_fg_tl % dash foreground
+\tl_new:N \l__tblr_hline_wd_tl % dash width
+
+\NewTableCommand \cline [2] [] { \SetHline [=] {#2} {#1} }
+
+\NewTableCommand \hline [1] [] { \SetHline [+] {-} {#1} }
+
+%% #1: the index of the hline (may be + or =)
+%% #2: which columns of the hline, separate by commas
+%% #3: key=value pairs
+\NewTableCommand \SetHline [3] [+]
+ {
+ \tblr_set_hline:nnn {#1} {#2} {#3}
+ }
+
+%% We need to check "text" key first
+%% If it does exist and has empty value, then do nothing
+\cs_new_protected:Npn \tblr_set_hline:nnn #1 #2 #3
+ {
+ \group_begin:
+ \keys_set_groups:nnn { tblr-hline } { text } {#3}
+ \tl_if_eq:NnF \l__tblr_hline_dash_tl { \exp_not:N \@tblr@text }
+ {
+ \__tblr_set_hline_num:n {#1}
+ \tl_clear:N \l__tblr_hline_dash_tl
+ \keys_set:nn { tblr-hline } { dash = solid, #3 }
+ \__tblr_set_hline_cmd:n {#2}
+ }
+ \group_end:
+ }
+
+\cs_new_protected:Npn \tblr_set_hline:nnnn #1 #2 #3 #4
+ {
+ \group_begin:
+ \__tblr_get_childs:nx {#1} { \int_eval:n { \c@rowcount + 1 } }
+ \clist_map_inline:Nn \l_tblr_childs_clist
+ {
+ \int_set:Nn \c@rownum {##1}
+ \tblr_set_hline:nnn {#2} {#3} {#4}
+ }
+ \group_end:
+ }
+
+%% Check the number of arguments and call \tblr_set_hline in different ways
+%% Note that #1 always includes an outer pair of braces
+%% This function is called when parsing table specifications
+\cs_new_protected:Npn \__tblr_set_hline_aux:nn #1 #2
+ {
+ \tl_if_head_is_group:nTF {#2}
+ {
+ \int_compare:nNnTF { \tl_count:n {#2} } = {3}
+ { \tblr_set_hline:nnnn #1 #2 }
+ { \tblr_set_hline:nnnn #1 {1} #2 }
+ }
+ { \tblr_set_hline:nnnn #1 {1} {-} {#2} }
+ }
+\cs_generate_variant:Nn \__tblr_set_hline_aux:nn { Vn }
+
+%% #1: the index of hline to set (may be + or =)
+\cs_new_protected:Npn \__tblr_set_hline_num:n #1
+ {
+ \tl_clear:N \l__tblr_hline_num_tl
+ \tl_set:Nx \l__tblr_hline_count_tl
+ { \__tblr_prop_item:ne { hline } { [\int_use:N \c@rownum] / @hline-count } }
+ \tl_if_empty:NTF \l__tblr_hline_count_tl
+ {
+ \tl_set:Nx \l__tblr_hline_num_tl { 1 }
+ \__tblr_prop_gput:nxx { hline }
+ { [\int_use:N \c@rownum] / @hline-count } { 1 }
+ }
+ {
+ \tl_if_eq:nnTF {#1} {+}
+ { \__tblr_set_hline_num_incr: }
+ {
+ \tl_if_eq:nnTF {#1} {=}
+ { \tl_set_eq:NN \l__tblr_hline_num_tl \l__tblr_hline_count_tl }
+ {
+ \int_compare:nNnTF {#1} > { \l__tblr_hline_count_tl }
+ { \__tblr_set_hline_num_incr: }
+ { \tl_set:Nn \l__tblr_hline_num_tl {#1} }
+ }
+ }
+ }
+ }
+
+\cs_new_protected:Npn \__tblr_set_hline_num_incr:
+ {
+ \tl_set:Nx \l__tblr_hline_count_tl
+ { \int_eval:n { \l__tblr_hline_count_tl + 1 } }
+ \__tblr_prop_gput:nxx { hline }
+ { [\int_use:N \c@rownum] / @hline-count } { \l__tblr_hline_count_tl }
+ \tl_set_eq:NN \l__tblr_hline_num_tl \l__tblr_hline_count_tl
+ }
+
+\keys_define:nn { tblr-hline }
+ {
+ dash .code:n = \tl_set:Nn \l__tblr_hline_dash_tl { \exp_not:N \@tblr@dash #1 },
+ text .code:n = \tl_set:Nn \l__tblr_hline_dash_tl { \exp_not:N \@tblr@text #1 },
+ text .groups:n = { text },
+ wd .code:n = \tl_set:Nn \l__tblr_hline_wd_tl { \dim_eval:n {#1} },
+ fg .code:n = \tl_set:Nn \l__tblr_hline_fg_tl {#1},
+ baseline .code:n = \__tblr_hline_set_baseline:n {#1},
+ unknown .code:n = \__tblr_hline_unknown_key:V \l_keys_key_str,
+ }
+
+\cs_new_protected:Npn \__tblr_hline_unknown_key:n #1
+ {
+ \prop_if_in:NnTF \g__tblr_defined_hdash_styles_prop {#1}
+ { \tl_set:Nn \l__tblr_hline_dash_tl { \exp_not:N \@tblr@dash #1 } }
+ {
+ \regex_match:NnTF \c__tblr_is_color_key_regex {#1}
+ { \tl_set:Nn \l__tblr_hline_fg_tl {#1} }
+ {
+ \tl_set_rescan:Nnn \l__tblr_v_tl {} {#1}
+ \tl_set:Nn \l__tblr_hline_wd_tl { \dim_eval:n {\l__tblr_v_tl} }
+ }
+ }
+ }
+\cs_generate_variant:Nn \__tblr_hline_unknown_key:n { V }
+
+\cs_new_protected_nopar:Npn \__tblr_set_hline_cmd:n #1
+ {
+ \__tblr_get_childs:nx {#1} { \int_use:N \c@colcount }
+ \clist_map_inline:Nn \l_tblr_childs_clist
+ {
+ \__tblr_prop_gput:nxx { hline }
+ { [\int_use:N \c@rownum][##1](\l__tblr_hline_num_tl) / @dash }
+ { \l__tblr_hline_dash_tl }
+ \tl_if_empty:NF \l__tblr_hline_wd_tl
+ {
+ \__tblr_prop_gput:nxx { hline }
+ { [\int_use:N \c@rownum][##1](\l__tblr_hline_num_tl) / wd }
+ { \l__tblr_hline_wd_tl }
+ }
+ \tl_if_empty:NF \l__tblr_hline_fg_tl
+ {
+ \__tblr_prop_gput:nxx { hline }
+ { [\int_use:N \c@rownum][##1](\l__tblr_hline_num_tl) / fg }
+ { \l__tblr_hline_fg_tl }
+ }
+ }
+ }
+
+\NewTableCommand \firsthline [1] [] { \SetHline [+] {-} { #1, baseline=below } }
+\NewTableCommand \lasthline [1] [] { \SetHline [+] {-} { #1, baseline=above } }
+
+\cs_new_protected:Npn \__tblr_hline_set_baseline:n #1
+ {
+ \tl_if_eq:nnTF {#1} {above}
+ {
+ \__tblr_prop_gput:nnx { table }
+ { baseline } { \int_eval:n { \c@rownum - 1 } }
+ }
+ {
+ \tl_if_eq:nnT {#1} {below}
+ {
+ \__tblr_prop_gput:nnx { table } { baseline } { \int_use:N \c@rownum }
+ }
+ }
+ }
+
+%% \SetVlines command for setting every vline in the table
+\NewTableCommand \SetVlines [3] [+]
+ {
+ \tblr_set_every_vline:nnn {#1} {#2} {#3}
+ }
+
+%% We put all code inside a group to avoid affecting other table commands
+\cs_new_protected:Npn \tblr_set_every_vline:nnn #1 #2 #3
+ {
+ \group_begin:
+ \int_step_inline:nn { \int_eval:n { \c@colcount + 1 } }
+ {
+ \int_set:Nn \c@colnum {##1}
+ \tblr_set_vline:nnn {#1} {#2} {#3}
+ }
+ \group_end:
+ }
+
+%% Check the number of arguments and call \tblr_set_every_vline in different ways
+%% This function is called when parsing table specifications
+\cs_new_protected:Npn \__tblr_set_every_vline_aux:n #1
+ {
+ \tl_if_head_is_group:nTF {#1}
+ {
+ \int_compare:nNnTF { \tl_count:n {#1} } = {3}
+ { \tblr_set_every_vline:nnn #1 }
+ { \tblr_set_every_vline:nnn {1} #1 }
+ }
+ { \tblr_set_every_vline:nnn {1} {-} {#1} }
+ }
+
+%% Add \SetVline, \vline and \rline commands
+
+\tl_new:N \l__tblr_vline_count_tl % the count of all vlines
+\tl_new:N \l__tblr_vline_num_tl % the index of the vline
+\tl_new:N \l__tblr_vline_rows_tl % the rows of the vline
+\tl_new:N \l__tblr_vline_dash_tl % dash style
+\tl_new:N \l__tblr_vline_fg_tl % dash foreground
+\tl_new:N \l__tblr_vline_wd_tl % dash width
+
+\NewTableCommand \rline [2] [] { \SetVline [=] {#2} {#1} }
+
+\NewTableCommand \vline [1] [] { \SetVline [+] {-} {#1} }
+
+%% #1: the index of the vline (may be + or =)
+%% #2: which rows of the vline, separate by commas
+%% #3: key=value pairs
+\NewTableCommand \SetVline [3] [+]
+ {
+ \tblr_set_vline:nnn {#1} {#2} {#3}
+ }
+
+%% We need to check "text" key first
+%% If it does exist and has empty value, then do nothing
+\cs_new_protected:Npn \tblr_set_vline:nnn #1 #2 #3
+ {
+ \group_begin:
+ \keys_set_groups:nnn { tblr-vline } { text } {#3}
+ \tl_if_eq:NnF \l__tblr_vline_dash_tl { \exp_not:N \@tblr@text }
+ {
+ \__tblr_set_vline_num:n {#1}
+ \tl_clear:N \l__tblr_vline_dash_tl
+ \keys_set:nn { tblr-vline } { dash = solid, #3 }
+ \__tblr_set_vline_cmd:n {#2}
+ }
+ \group_end:
+ }
+
+\cs_new_protected:Npn \tblr_set_vline:nnnn #1 #2 #3 #4
+ {
+ \group_begin:
+ \__tblr_get_childs:nx {#1} { \int_eval:n { \c@colcount + 1} }
+ \clist_map_inline:Nn \l_tblr_childs_clist
+ {
+ \int_set:Nn \c@colnum {##1}
+ \tblr_set_vline:nnn {#2} {#3} {#4}
+ }
+ \group_end:
+ }
+
+%% Check the number of arguments and call \tblr_set_vline in different ways
+%% Note that #1 always includes an outer pair of braces
+%% This function is called when parsing table specifications
+\cs_new_protected:Npn \__tblr_set_vline_aux:nn #1 #2
+ {
+ \tl_if_head_is_group:nTF {#2}
+ {
+ \int_compare:nNnTF { \tl_count:n {#2} } = {3}
+ { \tblr_set_vline:nnnn #1 #2 }
+ { \tblr_set_vline:nnnn #1 {1} #2 }
+ }
+ { \tblr_set_vline:nnnn #1 {1} {-} {#2} }
+ }
+\cs_generate_variant:Nn \__tblr_set_vline_aux:nn { Vn }
+
+%% #1: the index of vline to set (may be + or =)
+\cs_new_protected:Npn \__tblr_set_vline_num:n #1
+ {
+ \tl_clear:N \l__tblr_vline_num_tl
+ \tl_set:Nx \l__tblr_vline_count_tl
+ { \__tblr_prop_item:ne { vline } { [\int_use:N \c@colnum] / @vline-count } }
+ \tl_if_empty:NTF \l__tblr_vline_count_tl
+ {
+ \tl_set:Nx \l__tblr_vline_num_tl { 1 }
+ \__tblr_prop_gput:nxx { vline }
+ { [\int_use:N \c@colnum] / @vline-count } { 1 }
+ }
+ {
+ \tl_if_eq:nnTF {#1} {+}
+ { \__tblr_set_vline_num_incr: }
+ {
+ \tl_if_eq:nnTF {#1} {=}
+ { \tl_set_eq:NN \l__tblr_vline_num_tl \l__tblr_vline_count_tl }
+ {
+ \int_compare:nNnTF {#1} > { \l__tblr_vline_count_tl }
+ { \__tblr_set_vline_num_incr: }
+ { \tl_set:Nn \l__tblr_vline_num_tl {#1} }
+ }
+ }
+ }
+ }
+
+\cs_new_protected:Npn \__tblr_set_vline_num_incr:
+ {
+ \tl_set:Nx \l__tblr_vline_count_tl
+ { \int_eval:n { \l__tblr_vline_count_tl + 1 } }
+ \__tblr_prop_gput:nxx { vline }
+ { [\int_use:N \c@colnum] / @vline-count } { \l__tblr_vline_count_tl }
+ \tl_set_eq:NN \l__tblr_vline_num_tl \l__tblr_vline_count_tl
+ }
+
+\keys_define:nn { tblr-vline }
+ {
+ dash .code:n = \tl_set:Nn \l__tblr_vline_dash_tl { \exp_not:N \@tblr@dash #1 },
+ text .code:n = \tl_set:Nn \l__tblr_vline_dash_tl { \exp_not:N \@tblr@text #1 },
+ text .groups:n = { text },
+ wd .code:n = \tl_set:Nn \l__tblr_vline_wd_tl { \dim_eval:n {#1} },
+ fg .code:n = \tl_set:Nn \l__tblr_vline_fg_tl {#1},
+ unknown .code:n = \__tblr_vline_unknown_key:V \l_keys_key_str,
+ }
+
+\cs_new_protected:Npn \__tblr_vline_unknown_key:n #1
+ {
+ \prop_if_in:NnTF \g__tblr_defined_vdash_styles_prop {#1}
+ { \tl_set:Nn \l__tblr_vline_dash_tl { \exp_not:N \@tblr@dash #1 } }
+ {
+ \regex_match:NnTF \c__tblr_is_color_key_regex {#1}
+ { \tl_set:Nn \l__tblr_vline_fg_tl {#1} }
+ {
+ \tl_set_rescan:Nnn \l__tblr_v_tl {} {#1}
+ \tl_set:Nn \l__tblr_vline_wd_tl { \dim_eval:n {\l__tblr_v_tl} }
+ }
+ }
+ }
+\cs_generate_variant:Nn \__tblr_vline_unknown_key:n { V }
+
+\cs_new_protected_nopar:Npn \__tblr_set_vline_cmd:n #1
+ {
+ \__tblr_get_childs:nx {#1} { \int_use:N \c@rowcount }
+ \clist_map_inline:Nn \l_tblr_childs_clist
+ {
+ \__tblr_prop_gput:nxx { vline }
+ { [##1][\int_use:N \c@colnum](\l__tblr_vline_num_tl) / @dash }
+ { \l__tblr_vline_dash_tl }
+ \tl_if_empty:NF \l__tblr_vline_wd_tl
+ {
+ \__tblr_prop_gput:nxx { vline }
+ { [##1][\int_use:N \c@colnum](\l__tblr_vline_num_tl) / wd }
+ { \l__tblr_vline_wd_tl }
+ }
+ \tl_if_empty:NF \l__tblr_vline_fg_tl
+ {
+ \__tblr_prop_gput:nxx { vline }
+ { [##1][\int_use:N \c@colnum](\l__tblr_vline_num_tl) / fg }
+ { \l__tblr_vline_fg_tl }
+ }
+ }
+ }
+
+%%% --------------------------------------------------------
+%% \section{Set Cells}
+%%% --------------------------------------------------------
+
+%% \SetCells command for setting every cell in the table
+\NewTableCommand \SetCells [2] []
+ {
+ \tblr_set_every_cell:nn {#1} {#2}
+ }
+
+%% We put all code inside a group to avoid affecting other table commands
+\cs_new_protected:Npn \tblr_set_every_cell:nn #1 #2
+ {
+ \group_begin:
+ \int_step_inline:nn { \c@rowcount }
+ {
+ \int_set:Nn \c@rownum {##1}
+ \int_step_inline:nn { \c@colcount }
+ {
+ \int_set:Nn \c@colnum {####1}
+ \tblr_set_cell:nn {#1} {#2}
+ }
+ }
+ \group_end:
+ }
+
+%% Check the number of arguments and call \tblr_set_every_cell in different ways
+%% This function is called when parsing table specifications
+\cs_new_protected:Npn \__tblr_set_every_cell_aux:n #1
+ {
+ \tl_if_head_is_group:nTF {#1}
+ { \tblr_set_every_cell:nn #1 }
+ { \tblr_set_every_cell:nn {} {#1} }
+ }
+
+%% \SetCell command for multirow and/or multicolumn cells
+
+\NewTableCommand \SetCell [2] []
+ {
+ \tblr_set_cell:nn { #1 } { #2 }
+ }
+
+\tl_new:N \l__tblr_row_span_num_tl
+\tl_new:N \l__tblr_col_span_num_tl
+
+\cs_new_protected:Npn \tblr_set_cell:nn #1 #2
+ {
+ \tl_set:Nn \l__tblr_row_span_num_tl { 1 }
+ \tl_set:Nn \l__tblr_col_span_num_tl { 1 }
+ \keys_set:nn { tblr-cell-span } { #1 }
+ \keys_set:nn { tblr-cell-spec } { #2 }
+ \__tblr_set_span_spec:VV \l__tblr_row_span_num_tl \l__tblr_col_span_num_tl
+ }
+\cs_generate_variant:Nn \tblr_set_cell:nn { nV }
+
+\cs_new_protected:Npn \tblr_set_cell:nnnn #1 #2 #3 #4
+ {
+ \group_begin:
+ \__tblr_get_childs:nx {#1} { \int_use:N \c@rowcount }
+ \clist_set_eq:NN \l_tmpa_clist \l_tblr_childs_clist
+ \__tblr_get_childs:nx {#2} { \int_use:N \c@colcount }
+ \clist_set_eq:NN \l_tmpb_clist \l_tblr_childs_clist
+ \clist_map_inline:Nn \l_tmpa_clist
+ {
+ \int_set:Nn \c@rownum {##1}
+ \clist_map_inline:Nn \l_tmpb_clist
+ {
+ \int_set:Nn \c@colnum {####1}
+ \tblr_set_cell:nn {#3} {#4}
+ }
+ }
+ \group_end:
+ }
+
+%% Check the number of arguments and call \tblr_set_cell in different ways
+%% Note that #1 is always of the type {<i>}{<j>}
+%% This function is called when parsing table specifications
+\cs_new_protected:Npn \__tblr_set_cell_aux:nn #1 #2
+ {
+ \tl_if_head_is_group:nTF {#2}
+ { \tblr_set_cell:nnnn #1 #2 }
+ { \tblr_set_cell:nnnn #1 {} {#2} }
+ }
+\cs_generate_variant:Nn \__tblr_set_cell_aux:nn { Vn }
+
+\keys_define:nn { tblr-cell-span }
+ {
+ r .tl_set:N = \l__tblr_row_span_num_tl,
+ c .tl_set:N = \l__tblr_col_span_num_tl,
+ }
+
+\keys_define:nn { tblr-cell-spec }
+ {
+ l .code:n = \__tblr_prop_gput:nxx {cell}
+ {[\int_use:N \c@rownum][\int_use:N \c@colnum] / halign} {l},
+ c .code:n = \__tblr_prop_gput:nxx {cell}
+ {[\int_use:N \c@rownum][\int_use:N \c@colnum] / halign} {c},
+ r .code:n = \__tblr_prop_gput:nxx {cell}
+ {[\int_use:N \c@rownum][\int_use:N \c@colnum] / halign} {r},
+ t .code:n = \__tblr_prop_gput:nxx {cell}
+ {[\int_use:N \c@rownum][\int_use:N \c@colnum] / valign} {t},
+ p .code:n = \__tblr_prop_gput:nxx {cell}
+ {[\int_use:N \c@rownum][\int_use:N \c@colnum] / valign} {t},
+ m .code:n = \__tblr_prop_gput:nxx {cell}
+ {[\int_use:N \c@rownum][\int_use:N \c@colnum] / valign} {m},
+ b .code:n = \__tblr_prop_gput:nxx {cell}
+ {[\int_use:N \c@rownum][\int_use:N \c@colnum] / valign} {b},
+ h .code:n = \__tblr_prop_gput:nxx {cell}
+ {[\int_use:N \c@rownum][\int_use:N \c@colnum] / valign} {h},
+ f .code:n = \__tblr_prop_gput:nxx {cell}
+ {[\int_use:N \c@rownum][\int_use:N \c@colnum] / valign} {f},
+ wd .code:n = \__tblr_prop_gput:nxx {cell}
+ {[\int_use:N \c@rownum][\int_use:N \c@colnum] / width} {#1},
+ bg .code:n = \__tblr_prop_gput:nxx {cell}
+ {[\int_use:N \c@rownum][\int_use:N \c@colnum] / background} {#1},
+ unknown .code:n = \__tblr_cell_unknown_key:V \l_keys_key_str,
+ }
+
+\cs_new_protected:Npn \__tblr_cell_unknown_key:n #1
+ {
+ \regex_match:NnTF \c__tblr_is_color_key_regex {#1}
+ {
+ \__tblr_prop_gput:nxx {cell}
+ {[\int_use:N \c@rownum][\int_use:N \c@colnum] / background} {#1}
+ }
+ {
+ \tl_set_rescan:Nnn \l__tblr_v_tl {} {#1}
+ \__tblr_prop_gput:nxx {cell}
+ { [\int_use:N \c@rownum][\int_use:N \c@colnum] / width }
+ { \dim_eval:n { \l__tblr_v_tl } }
+ }
+ }
+\cs_generate_variant:Nn \__tblr_cell_unknown_key:n { V }
+
+\cs_new_protected:Npn \__tblr_set_span_spec:nn #1 #2
+ {
+ \int_compare:nNnT { #1 } > { 1 }
+ {
+ \__tblr_prop_gput:nnn {table} {rowspan} {true}
+ \__tblr_prop_gput:nxn {cell}
+ { [\int_use:N \c@rownum][\int_use:N \c@colnum] / rowspan } { #1 }
+ }
+ \int_compare:nNnT { #2 } > { 1 }
+ {
+ \__tblr_prop_gput:nnn {table} {colspan} {true}
+ \__tblr_prop_gput:nxn {cell}
+ { [\int_use:N \c@rownum][\int_use:N \c@colnum] / colspan } { #2 }
+ }
+ \int_step_variable:nnNn
+ { \int_use:N \c@rownum } { \int_eval:n { \c@rownum + #1 - 1 } } \l__tblr_i_tl
+ {
+ \int_step_variable:nnNn
+ { \int_use:N \c@colnum } { \int_eval:n { \c@colnum + #2 - 1 } }
+ \l__tblr_j_tl
+ {
+ \bool_lazy_and:nnF
+ { \int_compare_p:nNn { \l__tblr_i_tl } = { \c@rownum } }
+ { \int_compare_p:nNn { \l__tblr_j_tl } = { \c@colnum } }
+ {
+ \__tblr_prop_gput:nxx {cell}
+ { [\l__tblr_i_tl][\l__tblr_j_tl] / omit } {true}
+ }
+ \int_compare:nNnF { \l__tblr_i_tl } = { \c@rownum }
+ {
+ \__tblr_prop_gput:nxx {hline}
+ { [\l__tblr_i_tl][\l__tblr_j_tl] / omit } {true}
+ }
+ \int_compare:nNnF { \l__tblr_j_tl } = { \c@colnum }
+ {
+ \__tblr_prop_gput:nxx {vline}
+ { [\l__tblr_i_tl][\l__tblr_j_tl] / omit } {true}
+ }
+ }
+ }
+ }
+\cs_generate_variant:Nn \__tblr_set_span_spec:nn { VV }
+
+%% Legacy \multicolumn and \multirow commands
+%% Both of them could be replaced with \SetCell command
+%% Note that they don't have cell text as the last arguments
+
+%% If \multicolumn is followed by \multirow,
+%% We need to call \tblr_set_cell together
+%% in order to omit all hlines inside the span cell.
+\tl_new:N \g__tblr_multicolumn_num_tl
+\tl_new:N \g__tblr_multicolumn_spec_tl
+
+%% There maybe p{2em} inside #2 of \multicolumn command
+\NewTableCommand \multicolumn [2]
+ {
+ \tl_gclear:N \g__tblr_multicolumn_num_tl
+ \tl_gclear:N \g__tblr_multicolumn_spec_tl
+ \tl_map_inline:nn {#2}
+ {
+ \bool_lazy_and:nnF
+ { \tl_if_single_token_p:n {##1} }
+ { \token_if_eq_charcode_p:NN ##1 | }
+ { \tl_put_right:Nn \g__tblr_multicolumn_spec_tl {,##1} }
+ }
+ \peek_meaning:NTF \multirow
+ { \tl_gset:Nn \g__tblr_multicolumn_num_tl {#1} }
+ { \tblr_set_cell:nV { c = #1 } \g__tblr_multicolumn_spec_tl }
+ }
+
+\NewTableCommand \multirow [3] [m]
+ {
+ \tl_if_eq:nnTF {#1} {c}
+ { \tl_set:Nn \l_tmpa_tl {, m} }
+ {
+ \tl_if_eq:nnTF {#1} {t}
+ { \tl_set:Nn \l_tmpa_tl {, h} }
+ { \tl_if_eq:nnTF {#1} {b}
+ { \tl_set:Nn \l_tmpa_tl {, f} }
+ { \tl_set:Nn \l_tmpa_tl {, #1} }
+ }
+ }
+ \tl_if_eq:nnF {#3} {*}
+ { \tl_if_eq:nnF {#3} {=} { \tl_put_right:Nn \l_tmpa_tl {, wd=#3} } }
+ \tl_if_empty:NTF \g__tblr_multicolumn_num_tl
+ { \tblr_set_cell:nV { r = #2 } \l_tmpa_tl }
+ {
+ \tl_put_left:NV \l_tmpa_tl \g__tblr_multicolumn_spec_tl
+ \exp_args:Nx \tblr_set_cell:nV
+ { c = \g__tblr_multicolumn_num_tl, r = #2 } \l_tmpa_tl
+ \tl_gclear:N \g__tblr_multicolumn_num_tl
+ }
+ }
+
+%%% --------------------------------------------------------
+%% \section{Set Columns and Rows}
+%%% --------------------------------------------------------
+
+%% \SetColumns command for setting every column in the table
+\NewTableCommand \SetColumns [2] []
+ {
+ \tblr_set_every_column:nn {#1} {#2}
+ }
+
+%% We put all code inside a group to avoid affecting other table commands
+\cs_new_protected:Npn \tblr_set_every_column:nn #1 #2
+ {
+ \group_begin:
+ \int_step_inline:nn { \c@colcount }
+ {
+ \int_set:Nn \c@colnum {##1}
+ \tblr_set_column:nn {#1} {#2}
+ }
+ \group_end:
+ }
+
+%% Check the number of arguments and call \tblr_set_every_column in different ways
+%% This function is called when parsing table specifications
+\cs_new_protected:Npn \__tblr_set_every_column_aux:n #1
+ {
+ \tl_if_head_is_group:nTF {#1}
+ { \tblr_set_every_column:nn #1 }
+ { \tblr_set_every_column:nn {} {#1} }
+ }
+
+%% \SetColumn command for current column or each cells in the column
+
+\NewTableCommand \SetColumn [2] []
+ {
+ \tblr_set_column:nn {#1} {#2}
+ }
+
+\cs_new_protected:Npn \tblr_set_column:nn #1 #2
+ {
+ \keys_set:nn { tblr-column } {#2}
+ }
+
+\cs_new_protected:Npn \tblr_set_column:nnn #1 #2 #3
+ {
+ \group_begin:
+ \__tblr_get_childs:nx {#1} { \int_use:N \c@colcount }
+ \clist_map_inline:Nn \l_tblr_childs_clist
+ {
+ \int_set:Nn \c@colnum {##1}
+ \tblr_set_column:nn {#2} {#3}
+ }
+ \group_end:
+ }
+
+%% Check the number of arguments and call \tblr_set_column in different ways
+%% Note that #1 always includes an outer pair of braces
+%% This function is called when parsing table specifications
+\cs_new_protected:Npn \__tblr_set_column_aux:nn #1 #2
+ {
+ \tl_if_head_is_group:nTF {#2}
+ { \tblr_set_column:nnn #1 #2 }
+ { \tblr_set_column:nnn #1 {} {#2} }
+ }
+\cs_generate_variant:Nn \__tblr_set_column_aux:nn { Vn }
+
+\keys_define:nn { tblr-column }
+ {
+ l .code:n = \__tblr_set_key_for_every_column_cell:nnn
+ { \int_use:N \c@colnum } { halign } {l},
+ c .code:n = \__tblr_set_key_for_every_column_cell:nnn
+ { \int_use:N \c@colnum } { halign } {c},
+ r .code:n = \__tblr_set_key_for_every_column_cell:nnn
+ { \int_use:N \c@colnum } { halign } {r},
+ t .code:n = \__tblr_set_key_for_every_column_cell:nnn
+ { \int_use:N \c@colnum } { valign } {t},
+ p .code:n = \__tblr_set_key_for_every_column_cell:nnn
+ { \int_use:N \c@colnum } { valign } {t},
+ m .code:n = \__tblr_set_key_for_every_column_cell:nnn
+ { \int_use:N \c@colnum } { valign } {m},
+ b .code:n = \__tblr_set_key_for_every_column_cell:nnn
+ { \int_use:N \c@colnum } { valign } {b},
+ h .code:n = \__tblr_set_key_for_every_column_cell:nnn
+ { \int_use:N \c@colnum } { valign } {h},
+ f .code:n = \__tblr_set_key_for_every_column_cell:nnn
+ { \int_use:N \c@colnum } { valign } {f},
+ bg .code:n = \__tblr_set_key_for_every_column_cell:nnn
+ { \int_use:N \c@colnum } { background } {#1},
+ wd .code:n = \__tblr_prop_gput:nxx { column }
+ { [\int_use:N \c@colnum] / width } { \dim_eval:n {#1} },
+ co .code:n = \__tblr_prop_gput:nxx { column }
+ { [\int_use:N \c@colnum] / coefficient } {#1},
+ leftsep .code:n = \__tblr_prop_gput:nxx { column }
+ { [\int_use:N \c@colnum] / leftsep } { \dim_eval:n {#1} },
+ rightsep .code:n = \__tblr_prop_gput:nxx { column }
+ { [\int_use:N \c@colnum] / rightsep } { \dim_eval:n {#1} },
+ colsep .meta:n = { leftsep = #1, rightsep = #1},
+ leftsep+ .code:n = \__tblr_prop_gadd_dimen_value:nxx { column }
+ { [\int_use:N \c@colnum] / leftsep } { \dim_eval:n {#1} },
+ rightsep+ .code:n = \__tblr_prop_gadd_dimen_value:nxx { column }
+ { [\int_use:N \c@colnum] / rightsep } { \dim_eval:n {#1} },
+ colsep+ .meta:n = { leftsep+ = #1, rightsep+ = #1},
+ unknown .code:n = \__tblr_column_unknown_key:V \l_keys_key_str,
+ }
+
+%% #1: column number; #2: key; #3: value
+\cs_new_protected:Npn \__tblr_set_key_for_every_column_cell:nnn #1 #2 #3
+ {
+ \int_step_inline:nn { \c@rowcount }
+ {
+ \__tblr_prop_gput:nxn {cell} { [##1][#1] / #2 } {#3}
+ }
+ }
+
+\regex_const:Nn \c__tblr_is_number_key_regex { ^[\+\-]? (\d+|\d*\.\d+)$ }
+
+\cs_new_protected:Npn \__tblr_column_unknown_key:n #1
+ {
+ \regex_match:NnTF \c__tblr_is_number_key_regex {#1}
+ {
+ \__tblr_prop_gput:nxx { column }
+ { [\int_use:N \c@colnum] / coefficient } {#1}
+ }
+ {
+ \regex_match:NnTF \c__tblr_is_color_key_regex {#1}
+ {
+ \__tblr_set_key_for_every_column_cell:nnn
+ { \int_use:N \c@colnum } { background } {#1}
+ }
+ {
+ \tl_set_rescan:Nnn \l__tblr_v_tl {} {#1}
+ \__tblr_prop_gput:nxx { column }
+ { [\int_use:N \c@colnum] / width } { \dim_eval:n { \l__tblr_v_tl } }
+ }
+ }
+ }
+\cs_generate_variant:Nn \__tblr_column_unknown_key:n { V }
+
+%% \SetRows command for setting every row in the table
+\NewTableCommand \SetRows [2] []
+ {
+ \tblr_set_every_row:nn {#1} {#2}
+ }
+
+%% We put all code inside a group to avoid affecting other table commands
+\cs_new_protected:Npn \tblr_set_every_row:nn #1 #2
+ {
+ \group_begin:
+ \int_step_inline:nn { \c@rowcount }
+ {
+ \int_set:Nn \c@rownum {##1}
+ \tblr_set_row:nn {#1} {#2}
+ }
+ \group_end:
+ }
+
+%% Check the number of arguments and call \tblr_set_every_row in different ways
+%% This function is called when parsing table specifications
+\cs_new_protected:Npn \__tblr_set_every_row_aux:n #1
+ {
+ \tl_if_head_is_group:nTF {#1}
+ { \tblr_set_every_row:nn #1 }
+ { \tblr_set_every_row:nn {} {#1} }
+ }
+
+%% \SetRow command for current row or each cells in the row
+
+\NewTableCommand \SetRow [2] []
+ {
+ \tblr_set_row:nn {#1} {#2}
+ }
+
+\cs_new_protected:Npn \tblr_set_row:nn #1 #2
+ {
+ \keys_set:nn { tblr-row } {#2}
+ }
+
+\cs_new_protected:Npn \tblr_set_row:nnn #1 #2 #3
+ {
+ \group_begin:
+ \__tblr_get_childs:nx {#1} { \int_use:N \c@rowcount }
+ \clist_map_inline:Nn \l_tblr_childs_clist
+ {
+ \int_set:Nn \c@rownum {##1}
+ \tblr_set_row:nn {#2} {#3}
+ }
+ \group_end:
+ }
+
+%% Check the number of arguments and call \tblr_set_row in different ways
+%% Note that #1 always includes an outer pair of braces
+%% This function is called when parsing table specifications
+\cs_new_protected:Npn \__tblr_set_row_aux:nn #1 #2
+ {
+ \tl_if_head_is_group:nTF {#2}
+ { \tblr_set_row:nnn #1 #2 }
+ { \tblr_set_row:nnn #1 {} {#2} }
+ }
+\cs_generate_variant:Nn \__tblr_set_row_aux:nn { Vn }
+
+\keys_define:nn { tblr-row }
+ {
+ l .code:n = \__tblr_set_key_for_every_row_cell:nnn
+ { \int_use:N \c@rownum } { halign } {l},
+ c .code:n = \__tblr_set_key_for_every_row_cell:nnn
+ { \int_use:N \c@rownum } { halign } {c},
+ r .code:n = \__tblr_set_key_for_every_row_cell:nnn
+ { \int_use:N \c@rownum } { halign } {r},
+ t .code:n = \__tblr_set_key_for_every_row_cell:nnn
+ { \int_use:N \c@rownum } { valign } {t},
+ p .code:n = \__tblr_set_key_for_every_row_cell:nnn
+ { \int_use:N \c@rownum } { valign } {t},
+ m .code:n = \__tblr_set_key_for_every_row_cell:nnn
+ { \int_use:N \c@rownum } { valign } {m},
+ b .code:n = \__tblr_set_key_for_every_row_cell:nnn
+ { \int_use:N \c@rownum } { valign } {b},
+ h .code:n = \__tblr_set_key_for_every_row_cell:nnn
+ { \int_use:N \c@rownum } { valign } {h},
+ f .code:n = \__tblr_set_key_for_every_row_cell:nnn
+ { \int_use:N \c@rownum } { valign } {f},
+ bg .code:n = \__tblr_set_key_for_every_row_cell:nnn
+ { \int_use:N \c@rownum } { background } {#1},
+ ht .code:n = \__tblr_data_gput:nene { row } { \int_use:N \c@rownum }
+ { height } { \dim_eval:n {#1} },
+ co .code:n = \__tblr_data_gput:nene { row } { \int_use:N \c@rownum }
+ { coefficient } {#1},
+ abovesep .code:n = \__tblr_data_gput:nene { row } { \int_use:N \c@rownum }
+ { abovesep } { \dim_eval:n {#1} },
+ belowsep .code:n = \__tblr_data_gput:nene { row } { \int_use:N \c@rownum }
+ { belowsep } { \dim_eval:n {#1} },
+ rowsep .meta:n = { abovesep = #1, belowsep = #1},
+ abovesep+ .code:n = \__tblr_data_gadd_dimen_value:nene { row }
+ { \int_use:N \c@rownum } { abovesep } { \dim_eval:n {#1} },
+ belowsep+ .code:n = \__tblr_data_gadd_dimen_value:nene { row }
+ { \int_use:N \c@rownum } { belowsep } { \dim_eval:n {#1} },
+ rowsep+ .meta:n = { abovesep+ = #1, belowsep+ = #1},
+ nobreak .code:n = \__tblr_prop_gput:nxx { row }
+ { [\int_eval:n {\c@rownum - 1}] / nobreak } { true },
+ unknown .code:n = \__tblr_row_unknown_key:V \l_keys_key_str,
+ }
+
+%% #1: row number; #2: key; #3: value
+\cs_new_protected:Npn \__tblr_set_key_for_every_row_cell:nnn #1 #2 #3
+ {
+ \int_step_inline:nn { \c@colcount }
+ {
+ \__tblr_prop_gput:nxn {cell} { [#1][##1] / #2 } {#3}
+ }
+ }
+
+\cs_new_protected:Npn \__tblr_row_unknown_key:n #1
+ {
+ \regex_match:NnTF \c__tblr_is_number_key_regex {#1}
+ {
+ \__tblr_data_gput:nene { row } { \int_use:N \c@rownum }
+ { coefficient } {#1}
+ }
+ {
+ \regex_match:NnTF \c__tblr_is_color_key_regex {#1}
+ {
+ \__tblr_set_key_for_every_row_cell:nnn
+ { \int_use:N \c@rownum } { background } {#1}
+ }
+ {
+ \tl_set_rescan:Nnn \l__tblr_v_tl {} {#1}
+ \__tblr_data_gput:nene { row } { \int_use:N \c@rownum }
+ { height } { \dim_eval:n { \l__tblr_v_tl } }
+ }
+ }
+ }
+\cs_generate_variant:Nn \__tblr_row_unknown_key:n { V }
+
+%%% --------------------------------------------------------
+%% \section{Column Types and Row Types}
+%%% --------------------------------------------------------
+
+%% Some primitive column/row types
+
+\str_const:Nn \c_tblr_primitive_colrow_types_str { Q | < > }
+\tl_new:N \g__tblr_expanded_colrow_spec_tl
+
+\exp_args:Nc \NewDocumentCommand { tblr_primitive_column_type_ Q } { O{} }
+ {
+ \keys_set:nn { tblr-column } { #1 }
+ \int_incr:N \c@colnum
+ \__tblr_execute_colrow_spec_next:N
+ }
+\exp_args:Nc \NewDocumentCommand { tblr_column_type_ Q } { O{} }
+ {
+ \tl_gput_right:Nn \g__tblr_expanded_colrow_spec_tl { Q[#1] }
+ \__tblr_expand_colrow_spec_next:N
+ }
+
+\exp_args:Nc \NewDocumentCommand { tblr_primitive_row_type_ Q } { O{} }
+ {
+ \keys_set:nn { tblr-row } { #1 }
+ \int_incr:N \c@rownum
+ \__tblr_execute_colrow_spec_next:N
+ }
+\exp_args:Nc \NewDocumentCommand { tblr_row_type_ Q } { O{} }
+ {
+ \tl_gput_right:Nn \g__tblr_expanded_colrow_spec_tl { Q[#1] }
+ \__tblr_expand_colrow_spec_next:N
+ }
+
+\exp_args:Nc \NewDocumentCommand { tblr_primitive_column_type_ | } { O{} }
+ {
+ \vline [#1]
+ \__tblr_execute_colrow_spec_next:N
+ }
+\exp_args:Nc \NewDocumentCommand { tblr_column_type_ | } { O{} }
+ {
+ \tl_gput_right:Nn \g__tblr_expanded_colrow_spec_tl { |[#1] }
+ \__tblr_expand_colrow_spec_next:N
+ }
+
+\exp_args:Nc \NewDocumentCommand { tblr_primitive_row_type_ | } { O{} }
+ {
+ \hline [#1]
+ \__tblr_execute_colrow_spec_next:N
+ }
+\exp_args:Nc \NewDocumentCommand { tblr_row_type_ | } { O{} }
+ {
+ \tl_gput_right:Nn \g__tblr_expanded_colrow_spec_tl { |[#1] }
+ \__tblr_expand_colrow_spec_next:N
+ }
+
+\exp_args:Nc \NewDocumentCommand { tblr_primitive_column_type_ > } { O{} m }
+ {
+ \tl_if_blank:nF { #1 }
+ {
+ \__tblr_prop_gput:nxx
+ { column }
+ { [\int_use:N \c@colnum] / leftsep}
+ { \dim_eval:n { #1 } }
+ }
+ \tl_if_blank:nF { #2 }
+ {
+ \int_step_variable:nNn { \c@rowcount } \l__tblr_i_tl
+ {
+ \tl_set:Nx \l_tmpa_tl
+ {
+ \__tblr_prop_item:ne {text}
+ { [\l__tblr_i_tl][\int_use:N \c@colnum] }
+ }
+ \tl_put_left:Nn \l_tmpa_tl { #2 }
+ \__tblr_prop_gput:nxV {text}
+ { [\l__tblr_i_tl][\int_use:N \c@colnum] } \l_tmpa_tl
+ }
+ }
+ \__tblr_execute_colrow_spec_next:N
+ }
+\exp_args:Nc \NewDocumentCommand { tblr_column_type_ > } { O{} m }
+ {
+ \tl_gput_right:Nn \g__tblr_expanded_colrow_spec_tl { >[#1]{#2} }
+ \__tblr_expand_colrow_spec_next:N
+ }
+
+\exp_args:Nc \NewDocumentCommand { tblr_primitive_row_type_ > } { O{} m }
+ {
+ \tl_if_blank:nF { #1 }
+ {
+ \__tblr_data_gput:nene { row } { \int_use:N \c@rownum }
+ { abovesep } { \dim_eval:n { #1 } }
+ }
+ \tl_if_blank:nF { #2 }
+ {
+ \int_step_variable:nNn { \c@colcount } \l__tblr_j_tl
+ {
+ \tl_set:Nx \l_tmpa_tl
+ {
+ \__tblr_prop_item:ne {text}
+ { [\int_use:N \c@rownum][\l__tblr_j_tl] }
+ }
+ \tl_put_left:Nn \l_tmpa_tl { #2 }
+ \__tblr_prop_gput:nxV {text}
+ { [\int_use:N \c@rownum][\l__tblr_j_tl] } \l_tmpa_tl
+ }
+ }
+ \__tblr_execute_colrow_spec_next:N
+ }
+\exp_args:Nc \NewDocumentCommand { tblr_row_type_ > } { O{} m }
+ {
+ \tl_gput_right:Nn \g__tblr_expanded_colrow_spec_tl { >[#1]{#2} }
+ \__tblr_expand_colrow_spec_next:N
+ }
+
+\exp_args:Nc \NewDocumentCommand { tblr_primitive_column_type_ < } { O{} m }
+ {
+ \tl_if_blank:nF { #1 }
+ {
+ \__tblr_prop_gput:nxx
+ { column }
+ { [\int_eval:n {\c@colnum - 1}] / rightsep }
+ { \dim_eval:n { #1 } }
+ }
+ \tl_if_blank:nF { #2 }
+ {
+ \int_step_variable:nNn { \c@rowcount } \l__tblr_i_tl
+ {
+ \tl_set:Nx \l_tmpa_tl
+ {
+ \__tblr_prop_item:ne {text}
+ { [\l__tblr_i_tl][\int_eval:n {\c@colnum - 1}] }
+ }
+ \tl_put_right:Nn \l_tmpa_tl { #2 }
+ \__tblr_prop_gput:nxV {text}
+ { [\l__tblr_i_tl][\int_eval:n {\c@colnum - 1}] } \l_tmpa_tl
+ }
+ }
+ \__tblr_execute_colrow_spec_next:N
+ }
+\exp_args:Nc \NewDocumentCommand { tblr_column_type_ < } { O{} m }
+ {
+ \tl_gput_right:Nn \g__tblr_expanded_colrow_spec_tl { <[#1]{#2} }
+ \__tblr_expand_colrow_spec_next:N
+ }
+
+\exp_args:Nc \NewDocumentCommand { tblr_primitive_row_type_ < } { O{} m }
+ {
+ \tl_if_blank:nF { #1 }
+ {
+ \__tblr_data_gput:nene { row } { \int_eval:n {\c@rownum - 1} }
+ { belowsep } { \dim_eval:n {#1} }
+ }
+ \tl_if_blank:nF { #2 }
+ {
+ \int_step_variable:nNn { \c@colcount } \l__tblr_j_tl
+ {
+ \tl_set:Nx \l_tmpa_tl
+ {
+ \__tblr_prop_item:ne {text}
+ { [\int_eval:n {\c@rownum - 1}][\l__tblr_j_tl] }
+ }
+ \tl_put_right:Nn \l_tmpa_tl { #2 }
+ \__tblr_prop_gput:nxV {text}
+ { [\int_eval:n {\c@rownum - 1}][\l__tblr_j_tl] } \l_tmpa_tl
+ }
+ }
+ \__tblr_execute_colrow_spec_next:N
+ }
+\exp_args:Nc \NewDocumentCommand { tblr_row_type_ < } { O{} m }
+ {
+ \tl_gput_right:Nn \g__tblr_expanded_colrow_spec_tl { <[#1]{#2} }
+ \__tblr_expand_colrow_spec_next:N
+ }
+
+%% \NewColumnType/\NewRowType command and predefined column/row types
+
+\str_new:N \g_tblr_used_column_types_str
+\str_gset_eq:NN \g_tblr_used_column_types_str \c_tblr_primitive_colrow_types_str
+
+\str_new:N \g_tblr_used_row_types_str
+\str_gset_eq:NN \g_tblr_used_row_types_str \c_tblr_primitive_colrow_types_str
+
+\bool_new:N \g__tblr_colrow_spec_expand_stop_bool
+\tl_new:N \g__tblr_column_or_row_tl
+
+\msg_new:nnn { tabularray } { used-colrow-type }
+ { #1 ~ type ~ name ~ #2 ~ has ~ been ~ used! }
+
+\NewDocumentCommand \NewColumnType { m O{0} o m }
+ {
+ \tl_set:Nn \g__tblr_column_or_row_tl { column }
+ \__tblr_new_column_or_row_type:nnnn {#1} {#2} {#3} {#4}
+ }
+
+\NewDocumentCommand \NewRowType { m O{0} o m }
+ {
+ \tl_set:Nn \g__tblr_column_or_row_tl { row }
+ \__tblr_new_column_or_row_type:nnnn {#1} {#2} {#3} {#4}
+ }
+
+\NewDocumentCommand \NewColumnRowType { m O{0} o m }
+ {
+ \tl_set:Nn \g__tblr_column_or_row_tl { column }
+ \__tblr_new_column_or_row_type:nnnn {#1} {#2} {#3} {#4}
+ \tl_set:Nn \g__tblr_column_or_row_tl { row }
+ \__tblr_new_column_or_row_type:nnnn {#1} {#2} {#3} {#4}
+ }
+
+\cs_new_protected:Npn \__tblr_new_column_or_row_type:nnnn #1 #2 #3 #4
+ {
+ \str_if_in:cnTF { g_tblr_used_ \g__tblr_column_or_row_tl _types_str } {#1}
+ {
+ \tl_if_eq:NnTF \g__tblr_column_or_row_tl { row }
+ { \msg_warning:nnnn { tabularray } { used-colrow-type } { Row } {#1} }
+ { \msg_warning:nnnn { tabularray } { used-colrow-type } { Column } {#1} }
+ \str_log:c { g_tblr_used_ \g__tblr_column_or_row_tl _types_str }
+ }
+ {
+ \__tblr_make_xparse_arg_spec:nnN {#2} {#3} \l__tblr_a_tl
+ \exp_args:NcV \NewDocumentCommand
+ { tblr_ \g__tblr_column_or_row_tl _type_ #1 } \l__tblr_a_tl
+ {
+ \bool_gset_false:N \g__tblr_colrow_spec_expand_stop_bool
+ \tl_gput_right:Nf \g__tblr_expanded_colrow_spec_tl {#4}
+ \__tblr_expand_colrow_spec_next:N
+ }
+ \str_gput_right:cn
+ { g_tblr_used_ \g__tblr_column_or_row_tl _types_str } {#1}
+ }
+ }
+
+\NewColumnRowType { l } { Q[l] }
+\NewColumnRowType { c } { Q[c] }
+\NewColumnRowType { r } { Q[r] }
+
+\NewColumnType { t } [1] { Q[t,wd=#1] }
+\NewColumnType { p } [1] { Q[p,wd=#1] }
+\NewColumnType { m } [1] { Q[m,wd=#1] }
+\NewColumnType { b } [1] { Q[b,wd=#1] }
+\NewColumnType { h } [1] { Q[h,wd=#1] }
+\NewColumnType { f } [1] { Q[f,wd=#1] }
+
+\NewRowType { t } [1] { Q[t,ht=#1] }
+\NewRowType { p } [1] { Q[p,ht=#1] }
+\NewRowType { m } [1] { Q[m,ht=#1] }
+\NewRowType { b } [1] { Q[b,ht=#1] }
+\NewRowType { h } [1] { Q[h,ht=#1] }
+\NewRowType { f } [1] { Q[f,ht=#1] }
+
+\NewColumnRowType { X } [1][] { Q[co=1,#1] }
+
+\NewColumnRowType { ! } [1] { |[text={#1}] }
+\NewColumnRowType { @ } [1] { <[0pt]{} |[text={#1}] >[0pt]{} }
+\NewColumnRowType { * } [2] { \prg_replicate:nn {#1} {#2} }
+
+\cs_new_protected:Npn \__tblr_parse_colrow_spec:nn #1 #2
+ {
+ \tl_gset:Nn \g__tblr_column_or_row_tl {#1}
+ \tl_gset:Nn \g__tblr_expanded_colrow_spec_tl {#2}
+ \__tblr_expand_colrow_spec:N \g__tblr_expanded_colrow_spec_tl
+ \__tblr_execute_colrow_spec:N \g__tblr_expanded_colrow_spec_tl
+ }
+
+%% Expand defined column/row types
+
+\cs_new_protected:Npn \__tblr_expand_colrow_spec:N #1
+ {
+ \bool_do_until:Nn \g__tblr_colrow_spec_expand_stop_bool
+ {
+ \LogTblrTracing { colspec, rowspec }
+ \bool_gset_true:N \g__tblr_colrow_spec_expand_stop_bool
+ \tl_set_eq:NN \l_tmpa_tl #1
+ \tl_gclear:N #1
+ \exp_last_unbraced:NV
+ \__tblr_expand_colrow_spec_next:N \l_tmpa_tl \scan_stop:
+ }
+ }
+
+\msg_new:nnn { tabularray } { unexpandable-colrow-type }
+ { Unexpandable ~ command ~ #2 inside ~ #1 ~ type! }
+
+\msg_new:nnn { tabularray } { unknown-colrow-type }
+ { Unknown ~ #1 ~ type ~ #2! }
+
+\cs_new_protected:Npn \__tblr_expand_colrow_spec_next:N #1
+ {
+ \token_if_eq_catcode:NNTF #1 \scan_stop:
+ {
+ \token_if_eq_meaning:NNF #1 \scan_stop:
+ {
+ \msg_error:nnVn { tabularray } { unexpandable-colrow-type }
+ \g__tblr_column_or_row_tl {#1}
+ }
+ }
+ {
+ \str_if_in:cnTF { g_tblr_used_ \g__tblr_column_or_row_tl _types_str } {#1}
+ { \cs:w tblr_ \g__tblr_column_or_row_tl _type_ #1 \cs_end: }
+ {
+ \msg_error:nnVn { tabularray } { unknown-colrow-type }
+ \g__tblr_column_or_row_tl {#1}
+ \str_log:c { g_tblr_used_ \g__tblr_column_or_row_tl _types_str }
+ }
+ }
+ }
+
+%% Execute primitive column/row types
+
+\cs_new_protected:Npn \__tblr_execute_colrow_spec:N #1
+ {
+ \tl_if_eq:NnTF \g__tblr_column_or_row_tl { row }
+ { \int_set:Nn \c@rownum {1} }
+ { \int_set:Nn \c@colnum {1} }
+ \exp_last_unbraced:NV \__tblr_execute_colrow_spec_next:N #1 \scan_stop:
+ }
+
+\cs_new_protected:Npn \__tblr_execute_colrow_spec_next:N #1
+ {
+ \token_if_eq_meaning:NNF #1 \scan_stop:
+ { \cs:w tblr_primitive_ \g__tblr_column_or_row_tl _type_ #1 \cs_end: }
+ }
+
+%%% --------------------------------------------------------
+%% \section{Tabularray Environments}
+%%% --------------------------------------------------------
+
+\tl_new:N \l__tblr_env_name_tl
+\bool_new:N \l__tblr_math_mode_bool
+
+\NewDocumentEnvironment { tblr } { O{c} m +b }
+ {
+ \tl_set:Nn \l__tblr_env_name_tl { tblr }
+ \mode_if_math:TF
+ { \bool_set_true:N \l__tblr_math_mode_bool }
+ { \bool_set_false:N \l__tblr_math_mode_bool }
+ \buildtblr {#1} {#2} {#3}
+ } { }
+
+%% Read, split and build the table
+
+\cs_new_protected:Npn \buildtblr #1 #2 #3
+ {
+ \mode_leave_vertical:
+ \int_gincr:N \g_tblr_level_int
+ \__tblr_clear_prop_lists:
+ \__tblr_enable_table_commands:
+ \__tblr_split_table:n { #3 }
+ \LogTblrTracing { command }
+ \bool_if:NT \g__tblr_use_intarray_bool { \__tblr_initial_table_data: }
+ \__tblr_initial_table_spec:
+ \LogTblrTracing { table }
+ \__tblr_parse_table_spec:n { #2 }
+ \__tblr_execute_table_commands:
+ \__tblr_disable_table_commands:
+ \__tblr_calc_cell_and_line_sizes:
+ \__tblr_build_whole:n { #1 }
+ \int_gdecr:N \g_tblr_level_int
+ }
+
+\cs_new_protected:Npn \__tblr_clear_prop_lists:
+ {
+ \prop_gclear_new:c { g_tblr_text_ \int_use:N \g_tblr_level_int _prop }
+ \prop_gclear_new:c { g_tblr_command_ \int_use:N \g_tblr_level_int _prop }
+ \prop_gclear_new:c { g_tblr_table_ \int_use:N \g_tblr_level_int _prop }
+ \prop_gclear_new:c { g_tblr_row_ \int_use:N \g_tblr_level_int _prop }
+ \prop_gclear_new:c { g_tblr_column_ \int_use:N \g_tblr_level_int _prop }
+ \prop_gclear_new:c { g_tblr_cell_ \int_use:N \g_tblr_level_int _prop }
+ \prop_gclear_new:c { g_tblr_hline_ \int_use:N \g_tblr_level_int _prop }
+ \prop_gclear_new:c { g_tblr_vline_ \int_use:N \g_tblr_level_int _prop }
+ }
+
+%% Insert and remove braces for nesting environments inside cells
+%% These make line split and cell split workable
+%% We need to replace N times for N level nestings
+\regex_const:Nn \c__tblr_insert_braces_regex
+ {
+ \c{begin} \cB\{ (\c[^BE].*) \cE\} (.*?) \c{end} \cB\{ (\c[^BE].*) \cE\}
+ }
+\tl_const:Nn \c__tblr_insert_braces_tl
+ {
+ \c{begin} \cB\{ \cB\{ \1 \cE\} \2 \c{end} \cE\} \cB\{ \3 \cE\}
+ }
+\regex_const:Nn \c__tblr_remove_braces_regex
+ {
+ \c{begin} \cB\{ \cB\{ (.*?) \c{end} \cE\}
+ }
+\tl_const:Nn \c__tblr_remove_braces_tl
+ {
+ \c{begin} \cB\{ \1 \c{end}
+ }
+\cs_new_protected:Npn \__tblr_insert_braces:N #1
+ {
+ \regex_replace_all:NVN \c__tblr_insert_braces_regex \c__tblr_insert_braces_tl #1
+ \regex_replace_all:NVN \c__tblr_insert_braces_regex \c__tblr_insert_braces_tl #1
+ }
+\cs_new_protected:Npn \__tblr_remove_braces:N #1
+ {
+ \regex_replace_all:NVN \c__tblr_remove_braces_regex \c__tblr_remove_braces_tl #1
+ \regex_replace_all:NVN \c__tblr_remove_braces_regex \c__tblr_remove_braces_tl #1
+ }
+
+%% Split table content to cells and store them
+%% #1: table content
+
+\seq_new:N \l_tblr_lines_seq
+
+\cs_new_protected:Npn \__tblr_split_table:n #1
+ {
+ \int_zero:N \c@rowcount
+ \int_zero:N \c@colcount
+ \__tblr_split_table_to_lines:nN { #1 } \l_tblr_lines_seq
+ \__tblr_split_lines_to_cells:N \l_tblr_lines_seq
+ }
+
+%% Split table content to a sequence of lines
+%% #1: table content, #2: resulting sequence of lines
+\cs_new_protected:Npn \__tblr_split_table_to_lines:nN #1 #2
+ {
+ \tl_set:Nn \l_tmpa_tl { #1 }
+ \__tblr_insert_braces:N \l_tmpa_tl
+ \seq_set_split:NnV \l_tmpa_seq { \\ } \l_tmpa_tl
+ \seq_clear:N #2
+ \seq_map_inline:Nn \l_tmpa_seq
+ {
+ \tl_if_head_eq_meaning:nNTF {##1} *
+ {
+ \tl_set:Nn \l__tblr_b_tl { \SetRow{nobreak} }
+ \tl_set:Nx \l__tblr_c_tl { \tl_tail:n {##1} }
+ \tl_trim_spaces:N \l__tblr_c_tl %% Ignore spaces between * and [dimen]
+ \tl_log:N \l__tblr_c_tl
+ \tl_if_head_eq_meaning:VNT \l__tblr_c_tl [
+ {
+ \tl_put_right:Nn \l__tblr_b_tl { \RowBefore@AddBelowSep }
+ }
+ \tl_put_right:NV \l__tblr_b_tl \l__tblr_c_tl
+ \seq_put_right:NV #2 \l__tblr_b_tl
+ }
+ {
+ \tl_if_head_eq_meaning:nNTF { ##1 } [
+ { \seq_put_right:Nn #2 { \RowBefore@AddBelowSep ##1 } }
+ { \seq_put_right:Nn #2 { ##1 } }
+ }
+ }
+ \int_set:Nn \c@rowcount { \seq_count:N #2 }
+ }
+
+%% Treat \\[dimen] command
+\NewTableCommand \RowBefore@AddBelowSep [1] []
+ {
+ \IfValueT { #1 }
+ {
+ \__tblr_data_gadd_dimen_value:nene { row }
+ { \int_eval:n {\c@rownum - 1} } { belowsep } {#1}
+ }
+ }
+
+%% Split table lines to cells and store them
+%% #1: sequence of lines
+\cs_new_protected:Npn \__tblr_split_lines_to_cells:N #1
+ {
+ \seq_map_indexed_function:NN #1 \__tblr_split_one_line:nn
+ \LogTblrTracing { text }
+ }
+
+%% Split one line into cells and store them
+%% #1: row number, #2 the line text
+\cs_new_protected:Npn \__tblr_split_one_line:nn #1 #2
+ {
+ \seq_set_split:Nnn \l_tmpa_seq { & } { #2 }
+ \int_set:Nn \c@rownum {#1}
+ \int_zero:N \c@colnum
+ \seq_map_inline:Nn \l_tmpa_seq
+ {
+ \tl_set:Nn \l_tmpa_tl { ##1 }
+ \__tblr_remove_braces:N \l_tmpa_tl
+ \int_incr:N \c@colnum
+ \__tblr_extract_table_commands:N \l_tmpa_tl
+ \__tblr_prop_gput:nxV {text} { [#1][\int_use:N \c@colnum] } \l_tmpa_tl
+ \__tblr_add_multicolumn_empty_cell:
+ }
+ %% Decrease row count by 1 if the last row has only one empty cell text
+ %% We need to do it here since the > or < column type may add text to cells
+ \bool_lazy_and:nnTF
+ { \int_compare_p:nNn {\c@colnum} = {1} }
+ { \tl_if_empty_p:N \l_tmpa_tl }
+ { \int_decr:N \c@rowcount }
+ {
+ \__tblr_prop_gput:nnx
+ {row} { [#1] / cell-number } { \int_use:N \c@colnum }
+ \int_compare:nT { \c@colnum > \c@colcount }
+ {
+ \int_set_eq:NN \c@colcount \c@colnum
+ }
+ }
+ }
+
+%% Add empty cells after the \multicolumn span cell
+\cs_new_protected:Npn \__tblr_add_multicolumn_empty_cell:
+ {
+ \int_step_inline:nn { \l__multicolumn_cell_number_int - 1 }
+ {
+ \int_incr:N \c@colnum
+ \__tblr_prop_gput:nxn {text}
+ { [\int_use:N \c@rownum][\int_use:N \c@colnum] } { }
+ }
+ }
+
+%%% --------------------------------------------------------
+%% \section{Extract Table Commands from Cell Text}
+%%% --------------------------------------------------------
+
+%% Extract table commands defined with \NewTableCommand from cell text
+
+\clist_gset:Nn \g__tblr_table_commands_unbrace_next_clist {\multirow, \multicolumn}
+\bool_new:N \l__tblr_table_command_unbrace_next_bool
+\int_new:N \l__multicolumn_cell_number_int
+\tl_new:N \l__tblr_saved_table_commands_before_cell_text_tl
+\tl_new:N \l__tblr_saved_cell_text_after_table_commands_tl
+
+\cs_new_protected:Npn \__tblr_extract_table_commands:N #1
+ {
+ \tl_clear:N \l__tblr_saved_table_commands_before_cell_text_tl
+ \tl_clear:N \l__tblr_saved_cell_text_after_table_commands_tl
+ \int_set:Nn \l__multicolumn_cell_number_int {1}
+ \exp_last_unbraced:NV \__tblr_extract_table_commands_next:w #1 \scan_stop:
+ \tl_if_empty:NF \l__tblr_saved_table_commands_before_cell_text_tl
+ {
+ \__tblr_prop_gput:nxV { command }
+ {[\int_use:N \c@rownum][\int_use:N \c@colnum]}
+ \l__tblr_saved_table_commands_before_cell_text_tl
+ }
+ \tl_set_eq:NN #1 \l__tblr_saved_cell_text_after_table_commands_tl
+ }
+
+%% #1 maybe a single token or multiple tokens given in braces
+\cs_new_protected:Npn \__tblr_extract_table_commands_next:w #1
+ {
+ \clist_if_in:NnTF \g__tblr_table_commands_clist { #1 }
+ {
+ \clist_if_in:NnTF \g__tblr_table_commands_unbrace_next_clist { #1 }
+ { \bool_set_true:N \l__tblr_table_command_unbrace_next_bool }
+ { \bool_set_false:N \l__tblr_table_command_unbrace_next_bool }
+ \token_if_eq_meaning:NNTF #1 \multicolumn
+ { \__tblr_extract_multicolumn_command:Nn #1 }
+ { \__tblr_extract_one_table_command:N #1 }
+ }
+ {
+ \tl_if_single_token:nTF {#1}
+ {
+ \token_if_eq_meaning:NNF #1 \scan_stop:
+ { \__tblr_save_real_cell_text:w #1 }
+ }
+ { \__tblr_save_real_cell_text:w {#1} }
+ }
+ }
+
+\cs_new_protected:Npn \__tblr_extract_multicolumn_command:Nn #1 #2
+ {
+ \int_set:Nn \l__multicolumn_cell_number_int {#2}
+ \__tblr_extract_one_table_command:N #1 {#2}
+ }
+
+\cs_new_protected:Npn \__tblr_extract_one_table_command:N #1
+ {
+ \int_set:Nn \l__tblr_a_int
+ { \cs:w g__tblr_table_cmd_ \cs_to_str:N #1 _arg_numb_tl \cs_end: }
+ \tl_put_right:Nn \l__tblr_saved_table_commands_before_cell_text_tl {#1}
+ \int_compare:nNnTF {\l__tblr_a_int} < {0}
+ {
+ \int_set:Nn \l__tblr_a_int { \int_abs:n {\l__tblr_a_int} - 1 }
+ \peek_charcode:NTF [
+ { \__tblr_extract_table_command_arg_o:w }
+ { \__tblr_extract_table_command_arg_next: }
+ }
+ { \__tblr_extract_table_command_arg_next: }
+ }
+
+\cs_new_protected:Npn \__tblr_extract_table_command_arg_o:w [#1]
+ {
+ \tl_put_right:Nn \l__tblr_saved_table_commands_before_cell_text_tl { [#1] }
+ \__tblr_extract_table_command_arg_next:
+ }
+
+\cs_new_protected:Npn \__tblr_extract_table_command_arg_m:n #1
+ {
+ \tl_put_right:Nn \l__tblr_saved_table_commands_before_cell_text_tl { {#1} }
+ \__tblr_extract_table_command_arg_next:
+ }
+
+\cs_new_protected:Npn \__tblr_extract_table_command_arg_next:
+ {
+ \int_compare:nNnTF {\l__tblr_a_int} > {0}
+ {
+ \int_decr:N \l__tblr_a_int
+ \__tblr_extract_table_command_arg_m:n
+ }
+ {
+ \bool_if:NTF \l__tblr_table_command_unbrace_next_bool
+ { \__tblr_last_unbraced:Nn \__tblr_extract_table_commands_next:w }
+ { \__tblr_extract_table_commands_next:w }
+ }
+ }
+
+\cs_new_protected:Npn \__tblr_last_unbraced:Nn #1 #2 { #1 #2 }
+
+%% The outermost set of braces of cell text #1 will be removed
+\cs_new_protected:Npn \__tblr_save_real_cell_text:w #1 \scan_stop:
+ {
+ \tl_set:Nn \l__tblr_saved_cell_text_after_table_commands_tl {#1}
+ }
+
+%%% --------------------------------------------------------
+%% \section{Initial Table Specifications}
+%%% --------------------------------------------------------
+
+\prop_gset_from_keyval:Nn \g__tblr_default_tblr_table_prop
+ {
+ stretch = 1,
+ }
+
+\prop_gset_from_keyval:Nn \g__tblr_default_tblr_rows_prop
+ {
+ abovesep = 2pt,
+ belowsep = 2pt,
+ @row-height = 0pt,
+ @row-head = 0pt,
+ @row-foot = 0pt,
+ @row-upper = 0pt,
+ @row-lower = 0pt,
+ }
+
+\prop_gset_from_keyval:Nn \g__tblr_default_tblr_columns_prop
+ {
+ leftsep = 6pt,
+ rightsep = 6pt,
+ @col-width = 0pt,
+ }
+
+\prop_gset_from_keyval:Nn \g__tblr_default_tblr_cells_prop
+ {
+ halign = l,
+ valign = t,
+ }
+
+\prop_gset_from_keyval:Nn \g__tblr_default_tblr_hlines_prop
+ {
+ rulesep = 2pt,
+ }
+
+\prop_gset_from_keyval:Nn \g__tblr_default_tblr_vlines_prop
+ {
+ rulesep = 2pt,
+ }
+
+\cs_new_protected:Npn \__tblr_initial_table_spec:
+ {
+ \prop_map_inline:cn { g__tblr_default_ \l__tblr_env_name_tl _table_prop }
+ {
+ \__tblr_prop_gput:nxn { table } { ##1 } {##2}
+ }
+ \int_step_variable:nNn { \c@rowcount } \l__tblr_i_tl
+ {
+ \prop_map_inline:cn { g__tblr_default_ \l__tblr_env_name_tl _rows_prop }
+ {
+ \__tblr_data_gput:nVnn { row } \l__tblr_i_tl {##1} {##2}
+ }
+ \prop_map_inline:cn { g__tblr_default_ \l__tblr_env_name_tl _hlines_prop }
+ {
+ \__tblr_prop_gput:nxn { hline } { [\l__tblr_i_tl] / ##1 } {##2}
+ }
+ \int_step_variable:nNn { \c@colcount } \l__tblr_j_tl
+ {
+ \prop_map_inline:cn
+ { g__tblr_default_ \l__tblr_env_name_tl _cells_prop }
+ {
+ \__tblr_prop_gput:nxn { cell }
+ { [\l__tblr_i_tl][\l__tblr_j_tl] / ##1 } {##2}
+ }
+ }
+ }
+ \prop_map_inline:cn { g__tblr_default_ \l__tblr_env_name_tl _hlines_prop }
+ {
+ \__tblr_prop_gput:nxn { hline }
+ { [\int_eval:n { \c@rowcount + 1}] / ##1 } {##2}
+ }
+ \int_step_variable:nNn { \c@colcount } \l__tblr_j_tl
+ {
+ \prop_map_inline:cn { g__tblr_default_ \l__tblr_env_name_tl _columns_prop }
+ {
+ \__tblr_prop_gput:nxn { column } { [\l__tblr_j_tl] / ##1 } {##2}
+ }
+ \prop_map_inline:cn { g__tblr_default_ \l__tblr_env_name_tl _vlines_prop }
+ {
+ \__tblr_prop_gput:nxn { vline } { [\l__tblr_j_tl] / ##1 } {##2}
+ }
+ }
+ \prop_map_inline:cn { g__tblr_default_ \l__tblr_env_name_tl _vlines_prop }
+ {
+ \__tblr_prop_gput:nxn { vline }
+ { [\int_eval:n { \c@colcount + 1}] / ##1 } {##2}
+ }
+ \keys_set:nv { tblr } { l__tblr_default_ \l__tblr_env_name_tl _tl }
+ }
+
+\tl_new:N \l__tblr_default_tblr_tl
+
+%% #1: env name; #2: options
+\NewDocumentCommand \SetTabularrayDefault { O{tblr} m }
+ {
+ \tl_put_right:cn { l__tblr_default_ #1 _tl } { , #2 }
+ }
+\cs_new_eq:NN \SetTblrDefault \SetTabularrayDefault
+
+%%% --------------------------------------------------------
+%% \section{Parse Table Specifications}
+%%% --------------------------------------------------------
+
+\clist_new:N \g__tblr_table_known_keys_clist
+\clist_gset:Nn \g__tblr_table_known_keys_clist
+ {
+ long, colspec, rowspec, width, hspan, stretch,
+ column, row, cell, vline, hline, columns, rows, cells, vlines, hlines,
+ leftsep, rightsep, colsep, abovesep, belowsep, rowsep,
+ }
+
+\bool_new:N \l__tblr_long_table_bool
+
+\keys_define:nn { tblr }
+ {
+ long .bool_set:N = \l__tblr_long_table_bool,
+ colspec .code:n = \__tblr_parse_colrow_spec:nn { column } {#1},
+ rowspec .code:n = \__tblr_parse_colrow_spec:nn { row } {#1},
+ width .code:n = \__tblr_keys_gput:nx { width } { \dim_eval:n {#1} },
+ hspan .code:n = \__tblr_keys_gput:nn { hspan } {#1},
+ stretch .code:n = \__tblr_keys_gput:nn { stretch } {#1},
+ columns .code:n = \__tblr_set_every_column_aux:n {#1},
+ rows .code:n = \__tblr_set_every_row_aux:n {#1},
+ cells .code:n = \__tblr_set_every_cell_aux:n {#1},
+ hlines .code:n = \__tblr_set_every_hline_aux:n {#1},
+ vlines .code:n = \__tblr_set_every_vline_aux:n {#1},
+ leftsep .code:n = \tblr_set_every_column:nn { } { leftsep = #1 },
+ rightsep .code:n = \tblr_set_every_column:nn { } { rightsep = #1 },
+ colsep .meta:n = { leftsep = #1, rightsep = #1 },
+ abovesep .code:n = \tblr_set_every_row:nn { } { abovesep = #1 },
+ belowsep .code:n = \tblr_set_every_row:nn { } { belowsep = #1 },
+ rowsep .meta:n = { abovesep = #1, belowsep = #1 },
+ unknown .code:n = \__tblr_table_special_key:Vn \l_keys_key_str {#1},
+ }
+
+\regex_const:Nn \c__tblr_split_key_name_regex { ^ ( [a-z] + ) ( . * ) }
+
+\cs_new_protected:Npn \__tblr_table_special_key:nn #1 #2
+ {
+ \regex_extract_once:NnNT \c__tblr_split_key_name_regex {#1} \l_tmpa_seq
+ {
+ \tl_set:Nx \l__tblr_a_tl { \seq_item:Nn \l_tmpa_seq {2} }
+ \tl_set_rescan:Nnx \l__tblr_b_tl {} { \seq_item:Nn \l_tmpa_seq {3} }
+ \cs:w __tblr_set_ \l__tblr_a_tl _aux:Vn \cs_end: \l__tblr_b_tl {#2}
+ }
+ }
+\cs_generate_variant:Nn \__tblr_table_special_key:nn { Vn }
+
+%% If the first key name is known, treat #1 is the table spec;
+%% otherwise, treat #1 as colspec.
+
+\regex_const:Nn \c__tblr_first_key_name_regex { ^ \s * ( [A-Za-z\-] + ) }
+
+\cs_new_protected:Npn \__tblr_parse_table_spec:n #1
+ {
+ \regex_extract_once:NnNTF \c__tblr_first_key_name_regex {#1} \l_tmpa_seq
+ {
+ \clist_if_in:NxTF \g__tblr_table_known_keys_clist
+ { \seq_item:Nn \l_tmpa_seq {2} }
+ { \keys_set:nn { tblr } {#1} }
+ { \__tblr_parse_colrow_spec:nn { column } {#1} }
+ }
+ { \__tblr_parse_colrow_spec:nn { column } {#1} }
+ }
+
+\cs_new_protected:Npn \__tblr_keys_gput:nn #1 #2
+ {
+ \__tblr_prop_gput:nnn { table } {#1} {#2}
+ }
+\cs_generate_variant:Nn \__tblr_keys_gput:nn { nx }
+
+%%% --------------------------------------------------------
+%% \section{Typeset and Calculate Sizes}
+%%% --------------------------------------------------------
+
+%% Calculate the width and height for every cell and border
+
+\cs_new_protected:Npn \__tblr_calc_cell_and_line_sizes:
+ {
+ \__tblr_make_strut_box:
+ \__tblr_calculate_line_sizes:
+ \__tblr_calculate_cell_sizes:
+ \LogTblrTracing { cell, row, column, hline, vline }
+ \__tblr_compute_extendable_column_width:
+ \__tblr_adjust_sizes_for_span_cells:
+ }
+
+%% make strut box from stretch option of the table
+
+\box_new:N \l__tblr_strut_ht_box
+\box_new:N \l__tblr_strut_dp_box
+
+\cs_new_protected:Npn \__tblr_make_strut_box:
+ {
+ \tl_set:Nx \l__tblr_s_tl { \__tblr_prop_item:ne { table } { stretch } }
+ \hbox_set:Nn \l__tblr_strut_ht_box
+ { \vrule height \l__tblr_s_tl \box_ht:N \strutbox width ~ 0pt }
+ \hbox_set:Nn \l__tblr_strut_dp_box
+ { \vrule depth \l__tblr_s_tl \box_dp:N \strutbox width ~ 0pt }
+ }
+
+%% Calculate the thickness for every hline and vline
+\cs_new_protected:Npn \__tblr_calculate_line_sizes:
+ {
+ %% We need these two counters in executing hline and vline commands
+ \int_zero:N \c@rownum
+ \int_zero:N \c@colnum
+ \int_step_inline:nn { \c@rowcount + 1 }
+ {
+ \int_incr:N \c@rownum
+ \int_zero:N \c@colnum
+ \int_step_inline:nn { \c@colcount + 1 }
+ {
+ \int_incr:N \c@colnum
+ \int_compare:nNnT { ##1 } < { \c@rowcount + 1 }
+ {
+ \__tblr_measure_and_update_vline_size:nn { ##1 } { ####1 }
+ }
+ \int_compare:nNnT { ####1 } < { \c@colcount + 1 }
+ {
+ \__tblr_measure_and_update_hline_size:nn { ##1 } { ####1 }
+ }
+ }
+ }
+ }
+
+%% Measure and update thickness of the vline
+%% #1: row number, #2 column number
+\cs_new_protected:Npn \__tblr_measure_and_update_vline_size:nn #1 #2
+ {
+ \dim_zero:N \l__tblr_w_dim
+ \tl_set:Nx \l__tblr_n_tl
+ { \__tblr_prop_item:ne { vline } { [#2] / @vline-count } }
+ \tl_if_empty:NF \l__tblr_n_tl
+ {
+ \tl_set:Nx \l__tblr_s_tl
+ { \__tblr_prop_item:ne { vline } { [#2] / rulesep } }
+ \int_step_inline:nn { \l__tblr_n_tl }
+ {
+ \vbox_set_to_ht:Nnn \l__tblr_b_box {1pt}
+ {
+ \__tblr_get_vline_segment_child:nnnnn
+ {#1} {#2} {##1} {1pt} {1pt}
+ }
+ \tl_set:Nx \l__tblr_w_tl { \dim_eval:n { \box_wd:N \l__tblr_b_box } }
+ \__tblr_prop_gput_if_larger:nxx { vline }
+ { [#2](##1) / @vline-width } { \l__tblr_w_tl }
+ \dim_add:Nn \l__tblr_w_dim { \l__tblr_w_tl }
+ \dim_add:Nn \l__tblr_w_dim { \l__tblr_s_tl }
+ }
+ \dim_add:Nn \l__tblr_w_dim { - \l__tblr_s_tl }
+ }
+ \__tblr_prop_gput_if_larger:nxx { vline }
+ { [#2]/ @vline-width } { \dim_use:N \l__tblr_w_dim }
+ }
+
+%% Get text of a vline segment
+%% #1: row number, #2: column number; #3: index number; #4: height; #5: depth
+%% We put all code inside a group to avoid conflicts of local variables
+\cs_new_protected:Npn \__tblr_get_vline_segment_child:nnnnn #1 #2 #3 #4 #5
+ {
+ \group_begin:
+ \tl_set:Nx \l__tblr_w_tl
+ { \__tblr_prop_item:ne { vline } { [#1][#2](#3) / wd } }
+ \tl_if_empty:NF \l__tblr_w_tl { \dim_set:Nn \rulewidth { \l__tblr_w_tl } }
+ \tl_set:Nx \l__tblr_d_tl
+ { \__tblr_prop_item:ne { vline } { [#1][#2](#3) / @dash } }
+ \tl_set:Nx \l__tblr_a_tl { \tl_head:N \l__tblr_d_tl }
+ \tl_set:Nx \l__tblr_b_tl { \tl_tail:N \l__tblr_d_tl }
+ \exp_args:NV \tl_if_eq:NNTF \l__tblr_a_tl \@tblr@dash
+ {
+ \__tblr_get_vline_dash_style:N \l__tblr_b_tl
+ \xleaders \l__tblr_b_tl \vfil
+ }
+ {
+ \hbox_set:Nn \l__tblr_d_box { \l__tblr_b_tl }
+ \box_set_ht:Nn \l__tblr_d_box {#4}
+ \box_set_dp:Nn \l__tblr_d_box {#5}
+ \box_use:N \l__tblr_d_box
+ }
+ \group_end:
+ }
+\cs_generate_variant:Nn \__tblr_get_vline_segment_child:nnnnn { nnnxx }
+
+%% Measure and update thickness of the hline
+%% #1: row number, #2 column number
+\cs_new_protected:Npn \__tblr_measure_and_update_hline_size:nn #1 #2
+ {
+ \dim_zero:N \l__tblr_h_dim
+ \tl_set:Nx \l__tblr_n_tl
+ { \__tblr_prop_item:ne { hline } { [#1] / @hline-count } }
+ \tl_if_empty:NF \l__tblr_n_tl
+ {
+ \tl_set:Nx \l__tblr_s_tl
+ { \__tblr_prop_item:ne { hline } { [#1] / rulesep } }
+ \int_step_inline:nn { \l__tblr_n_tl }
+ {
+ \hbox_set_to_wd:Nnn \l__tblr_b_box {1pt}
+ { \__tblr_get_hline_segment_child:nnn {#1} {#2} {##1} }
+ \tl_set:Nx \l__tblr_h_tl
+ {
+ \dim_eval:n
+ { \box_ht:N \l__tblr_b_box + \box_dp:N \l__tblr_b_box }
+ }
+ \__tblr_prop_gput_if_larger:nxx { hline }
+ { [#1](##1) / @hline-height } { \l__tblr_h_tl }
+ \dim_add:Nn \l__tblr_h_dim { \l__tblr_h_tl }
+ \dim_add:Nn \l__tblr_h_dim { \l__tblr_s_tl }
+ }
+ \dim_add:Nn \l__tblr_h_dim { - \l__tblr_s_tl }
+ }
+ \__tblr_prop_gput_if_larger:nxx { hline }
+ { [#1] / @hline-height } { \dim_use:N \l__tblr_h_dim }
+ }
+
+%% Get text of a hline segment
+%% #1: row number, #2: column number; #3: index number
+\cs_new_protected:Npn \__tblr_get_hline_segment_child:nnn #1 #2 #3
+ {
+ \group_begin:
+ \tl_set:Nx \l__tblr_w_tl
+ { \__tblr_prop_item:ne { hline } { [#1][#2](#3) / wd } }
+ \tl_if_empty:NF \l__tblr_w_tl { \dim_set:Nn \rulewidth { \l__tblr_w_tl } }
+ \tl_set:Nx \l__tblr_d_tl
+ { \__tblr_prop_item:ne { hline } { [#1][#2](#3) / @dash } }
+ \tl_set:Nx \l__tblr_a_tl { \tl_head:N \l__tblr_d_tl }
+ \tl_set:Nx \l__tblr_b_tl { \tl_tail:N \l__tblr_d_tl }
+ \exp_args:NV \tl_if_eq:NNTF \l__tblr_a_tl \@tblr@dash
+ {
+ \__tblr_get_hline_dash_style:N \l__tblr_b_tl
+ \xleaders \l__tblr_b_tl \hfil
+ }
+ { \l__tblr_b_tl \hfil }
+ \group_end:
+ }
+
+%% current cell alignments
+\tl_new:N \g__tblr_cell_halign_tl
+\tl_new:N \g__tblr_cell_valign_tl
+\tl_new:N \g__tblr_cell_middle_tl
+
+\tl_const:Nn \c__tblr_valign_h_tl { h }
+\tl_const:Nn \c__tblr_valign_m_tl { m }
+\tl_const:Nn \c__tblr_valign_f_tl { f }
+\tl_const:Nn \c__tblr_valign_t_tl { t }
+\tl_const:Nn \c__tblr_valign_b_tl { b }
+
+\tl_const:Nn \c__tblr_middle_t_tl { t }
+\tl_const:Nn \c__tblr_middle_m_tl { m }
+\tl_const:Nn \c__tblr_middle_b_tl { b }
+
+%% #1: row number; #2: column number
+\cs_new_protected:Npn \__tblr_get_cell_alignments:nn #1 #2
+ {
+ \group_begin:
+ \tl_gset:Nx \g__tblr_cell_halign_tl
+ { \__tblr_prop_item:ne { cell } { [#1][#2] / halign } }
+ \tl_set:Nx \l__tblr_v_tl
+ { \__tblr_prop_item:ne { cell } { [#1][#2] / valign } }
+ \tl_case:NnF \l__tblr_v_tl
+ {
+ \c__tblr_valign_t_tl
+ {
+ \tl_gset:Nn \g__tblr_cell_valign_tl {m}
+ \tl_gset:Nn \g__tblr_cell_middle_tl {t}
+ }
+ \c__tblr_valign_m_tl
+ {
+ \tl_gset:Nn \g__tblr_cell_valign_tl {m}
+ \tl_gset:Nn \g__tblr_cell_middle_tl {m}
+ }
+ \c__tblr_valign_b_tl
+ {
+ \tl_gset:Nn \g__tblr_cell_valign_tl {m}
+ \tl_gset:Nn \g__tblr_cell_middle_tl {b}
+ }
+ }
+ {
+ \tl_gset_eq:NN \g__tblr_cell_valign_tl \l__tblr_v_tl
+ \tl_gclear:N \g__tblr_cell_middle_tl
+ }
+ \group_end:
+ }
+
+%% current cell dimensions
+\dim_new:N \g__tblr_cell_wd_dim
+\dim_new:N \g__tblr_cell_ht_dim
+\dim_new:N \g__tblr_cell_head_dim
+\dim_new:N \g__tblr_cell_foot_dim
+
+%% Calculate the width and height for every cell
+\cs_new_protected:Npn \__tblr_calculate_cell_sizes:
+ {
+ %% You can use these two counters in cell text
+ \int_zero:N \c@rownum
+ \int_zero:N \c@colnum
+ \int_step_inline:nn { \c@rowcount }
+ {
+ \int_incr:N \c@rownum
+ \int_zero:N \c@colnum
+ \tl_set:Nx \l__tblr_h_tl
+ { \__tblr_data_item:nen { row } { \int_use:N \c@rownum } { height } }
+ \tl_if_empty:NF \l__tblr_h_tl
+ {
+ \__tblr_data_gput:nenV { row } { \int_use:N \c@rownum }
+ { @row-height } \l__tblr_h_tl
+ }
+ \int_step_inline:nn { \c@colcount }
+ {
+ \int_incr:N \c@colnum
+ \__tblr_measure_cell_update_sizes:nnNNNN
+ { \int_use:N \c@rownum }
+ { \int_use:N \c@colnum }
+ \g__tblr_cell_wd_dim
+ \g__tblr_cell_ht_dim
+ \g__tblr_cell_head_dim
+ \g__tblr_cell_foot_dim
+ }
+ }
+ }
+
+%% Measure and update natural dimensions of the row/column/cell
+%% #1: row number; #2 column number; #3: width dimension;
+%% #4: total height dimension; #5: head dimension; #6: foot dimension
+\cs_new_protected:Npn \__tblr_measure_cell_update_sizes:nnNNNN #1 #2 #3 #4 #5 #6
+ {
+ \__tblr_get_cell_alignments:nn {#1} {#2}
+ \hbox_set:Nn \l_tmpa_box { \__tblr_get_cell_text:nn {#1} {#2} }
+ \__tblr_update_cell_size:nnNNNN {#1} {#2} #3 #4 #5 #6
+ \__tblr_update_row_size:nnNNN {#1} {#2} #4 #5 #6
+ \__tblr_update_col_size:nN {#2} #3
+ }
+
+%% #1: row number, #2: column number
+\cs_new_protected:Npn \__tblr_get_cell_text:nn #1 #2
+ {
+ \__tblr_prop_if_in:nxTF {cell} { [#1][#2] / omit }
+ {
+ \dim_gzero:N \g__tblr_cell_wd_dim
+ \dim_gzero:N \g__tblr_cell_ht_dim
+ \dim_gzero:N \g__tblr_cell_head_dim
+ \dim_gzero:N \g__tblr_cell_foot_dim
+ }
+ { \__tblr_get_cell_text_real:nn { #1 } { #2 } }
+ }
+
+%% Get cell text, #1: row number, #2: column number
+%% If the width of the cell is not set, split it with \\ and compute the width
+%% Therefore we always get a vbox for any cell
+\cs_new_protected:Npn \__tblr_get_cell_text_real:nn #1 #2
+ {
+ \group_begin:
+ \tl_set:Nx \l__tblr_c_tl { \__tblr_prop_item:ne {text} {[#1][#2]} }
+ \tl_set:Nx \l__tblr_w_tl
+ { \__tblr_prop_item:ne { cell } { [#1][#2] / width } }
+ \tl_if_empty:NT \l__tblr_w_tl
+ {
+ \__tblr_prop_if_in:nxF { cell } { [#1][#2] / colspan }
+ {
+ \tl_set:Nx \l__tblr_w_tl
+ { \__tblr_prop_item:ne { column } { [#2] / width } }
+ }
+ }
+ \tl_if_empty:NT \l__tblr_w_tl
+ {
+ \bool_if:NTF \l__tblr_math_mode_bool
+ {
+ \hbox_set:Nn \l_tmpa_box { $\l__tblr_c_tl$ }
+ \tl_set:Nx \l__tblr_w_tl { \box_wd:N \l_tmpa_box }
+ }
+ {
+ \tl_set_eq:NN \l_tmpb_tl \l__tblr_c_tl
+ \__tblr_insert_braces:N \l_tmpb_tl
+ \seq_set_split:NnV \l_tmpa_seq { \\ } \l_tmpb_tl
+ \tl_set:Nn \l__tblr_w_tl { 0pt }
+ \seq_map_variable:NNn \l_tmpa_seq \l_tmpa_tl
+ {
+ \__tblr_remove_braces:N \l_tmpa_tl
+ \hbox_set:Nn \l_tmpa_box { \l_tmpa_tl }
+ \tl_set:Nx \l__tblr_w_tl
+ { \dim_max:nn { \l__tblr_w_tl } { \box_wd:N \l_tmpa_box } }
+ }
+ }
+ }
+ \__tblr_get_vcell_and_sizes:NN \l__tblr_c_tl \l__tblr_w_tl
+ \group_end:
+ }
+
+%% #1: cell text; #2: box width
+\cs_new_protected:Npn \__tblr_get_vcell_and_sizes:NN #1 #2
+ {
+ \group_begin:
+ \vbox_set_top:Nn \l_tmpa_box { \__tblr_make_vcell_text:nN #1 #2 }
+ \vbox_set:Nn \l_tmpb_box { \__tblr_make_vcell_text:nN #1 #2 }
+ \dim_gset:Nn \g__tblr_cell_wd_dim { \box_wd:N \l_tmpb_box }
+ \dim_gset:Nn \g__tblr_cell_ht_dim
+ { \box_ht:N \l_tmpb_box + \box_dp:N \l_tmpb_box }
+ \dim_gset:Nn \g__tblr_cell_head_dim { \box_ht:N \l_tmpa_box }
+ \dim_gset:Nn \g__tblr_cell_foot_dim { \box_dp:N \l_tmpb_box }
+ \tl_case:Nn \g__tblr_cell_valign_tl
+ {
+ \c__tblr_valign_h_tl
+ { \box_use:N \l_tmpa_box }
+ \c__tblr_valign_m_tl
+ {
+ \tl_case:Nn \g__tblr_cell_middle_tl
+ {
+ \c__tblr_middle_t_tl
+ { \box_use:N \l_tmpa_box }
+ \c__tblr_middle_m_tl
+ {
+ \tl_set:Nx \l__tblr_b_tl
+ {
+ \dim_eval:n
+ {
+ ( \g__tblr_cell_ht_dim - \g__tblr_cell_head_dim
+ - \g__tblr_cell_foot_dim ) / 2
+ }
+ }
+ \box_set_ht:Nn \l_tmpb_box
+ { \g__tblr_cell_head_dim + \l__tblr_b_tl }
+ \box_set_dp:Nn \l_tmpb_box
+ { \g__tblr_cell_foot_dim + \l__tblr_b_tl }
+ \box_use:N \l_tmpb_box
+ }
+ \c__tblr_middle_b_tl
+ { \box_use:N \l_tmpb_box }
+ }
+ }
+ \c__tblr_valign_f_tl
+ { \box_use:N \l_tmpb_box }
+ }
+ \group_end:
+ }
+
+\cs_new_eq:NN \__tlbr_halign_l: \raggedright
+\cs_new_eq:NN \__tlbr_halign_c: \centering
+\cs_new_eq:NN \__tlbr_halign_r: \raggedleft
+
+%% #1: cell text; #2: box width
+\cs_new_protected:Npn \__tblr_make_vcell_text:nN #1 #2
+ {
+ \dim_set:Nn \tex_hsize:D { #2 }
+ \@arrayparboxrestore
+ \cs:w __tlbr_halign_ \g__tblr_cell_halign_tl : \cs_end:
+ \mode_leave_vertical:
+ \box_use:N \l__tblr_strut_ht_box
+ \bool_if:NTF \l__tblr_math_mode_bool { $#1$ } { #1 }
+ \box_use:N \l__tblr_strut_dp_box
+ }
+
+%% #1: total height dimension; #2: head dimension; #3: foot dimension;
+%% #4: tl for resulting upper size; #5: tl for resulting lower size
+
+\tl_new:N \l__tblr_middle_body_tl
+
+\cs_new_protected:Npn \__tblr_get_middle_cell_upper_lower:NNNNN #1 #2 #3 #4 #5
+ {
+ \tl_case:Nn \g__tblr_cell_middle_tl
+ {
+ \c__tblr_middle_t_tl
+ {
+ \tl_set:Nx #4 { \dim_use:N #2 }
+ \tl_set:Nx #5 { \dim_eval:n { #1 - #2 } }
+ }
+ \c__tblr_middle_m_tl
+ {
+ \tl_set:Nx \l__tblr_middle_body_tl { \dim_eval:n { #1 - #2 - #3 } }
+ \tl_set:Nx #4 { \dim_eval:n { #2 + \l__tblr_middle_body_tl / 2 } }
+ \tl_set:Nx #5 { \dim_eval:n { #3 + \l__tblr_middle_body_tl / 2 } }
+ }
+ \c__tblr_middle_b_tl
+ {
+ \tl_set:Nx #4 { \dim_eval:n { #1 - #3 } }
+ \tl_set:Nx #5 { \dim_use:N #3 }
+ }
+ }
+ }
+
+%% Update natural dimensions of the cell
+%% #1: row number; #2 column number; #3: width dimension;
+%% #4: total height dimension; #5: head dimension; #6: foot dimension
+\cs_new_protected:Npn \__tblr_update_cell_size:nnNNNN #1 #2 #3 #4 #5 #6
+ {
+ \group_begin:
+ \tl_set:Nx \l__tblr_c_tl
+ { \__tblr_prop_item:ne {cell} { [#1][#2] / colspan } }
+ \tl_if_empty:NF \l__tblr_c_tl
+ {
+ \__tblr_prop_gput:nxx {cell} { [#1][#2] / @cell-width } { \dim_use:N #3 }
+ \dim_gzero:N #3 % don't affect column width
+ }
+ \tl_set:Nx \l__tblr_r_tl
+ { \__tblr_prop_item:ne {cell} { [#1][#2] / rowspan } }
+ \tl_if_empty:NF \l__tblr_r_tl
+ {
+ \tl_case:Nn \g__tblr_cell_valign_tl
+ {
+ \c__tblr_valign_h_tl
+ {
+ \tl_set:Nx \l__tblr_u_tl { \dim_use:N #5 }
+ \tl_set:Nx \l__tblr_v_tl { \dim_eval:n { #4 - #5 } }
+ %% Update the head size of the first span row here
+ \__tblr_data_gput_if_larger:nene
+ { row } {#1} { @row-head } { \dim_use:N #5 }
+ }
+ \c__tblr_valign_f_tl
+ {
+ \tl_set:Nx \l__tblr_u_tl { \dim_eval:n { #4 - #6 } }
+ \tl_set:Nx \l__tblr_v_tl { \dim_use:N #6 }
+ %% Update the foot size of the last span row here
+ \__tblr_data_gput_if_larger:nene
+ { row }
+ { \int_eval:n { #1 + \l__tblr_r_tl - 1 } }
+ { @row-foot }
+ { \dim_use:N #6 }
+ }
+ \c__tblr_valign_m_tl
+ {
+ \__tblr_get_middle_cell_upper_lower:NNNNN
+ #4 #5 #6 \l__tblr_u_tl \l__tblr_v_tl
+ }
+ }
+ \__tblr_prop_gput:nxV {cell} { [#1][#2] / @cell-height } \l__tblr_u_tl
+ \__tblr_prop_gput:nxV {cell} { [#1][#2] / @cell-depth } \l__tblr_v_tl
+ %% Don't affect row sizes
+ \dim_gzero:N #4
+ \dim_gzero:N #5
+ \dim_gzero:N #6
+ }
+ \group_end:
+ }
+
+
+%% Update size of the row. #1: row number; #2: column number;
+%% #3: total height dimension; #4: head dimension; #5: foot dimension
+\cs_new_protected:Npn \__tblr_update_row_size:nnNNN #1 #2 #3 #4 #5
+ {
+ \group_begin:
+ %% Note that \l__tblr_h_tl may be empty
+ \tl_set:Nx \l__tblr_h_tl
+ { \__tblr_data_item:nen { row } {#1} { @row-height } }
+ \tl_if_eq:NNTF \g__tblr_cell_valign_tl \c__tblr_valign_m_tl
+ {
+ \tl_set:Nx \l__tblr_a_tl
+ { \__tblr_data_item:nen { row } {#1} { @row-upper } }
+ \tl_set:Nx \l__tblr_b_tl
+ { \__tblr_data_item:nen { row } {#1} { @row-lower } }
+ \__tblr_get_middle_cell_upper_lower:NNNNN
+ #3 #4 #5 \l__tblr_u_tl \l__tblr_v_tl
+ \dim_compare:nNnT { \l__tblr_u_tl } > { \l__tblr_a_tl }
+ {
+ \tl_set_eq:NN \l__tblr_a_tl \l__tblr_u_tl
+ \__tblr_data_gput:nenV { row } {#1} { @row-upper } \l__tblr_a_tl
+ }
+ \dim_compare:nNnT { \l__tblr_v_tl } > { \l__tblr_b_tl }
+ {
+ \tl_set_eq:NN \l__tblr_b_tl \l__tblr_v_tl
+ \__tblr_data_gput:nenV { row } {#1} { @row-lower } \l__tblr_b_tl
+ }
+ \dim_compare:nNnT
+ { \l__tblr_a_tl + \l__tblr_b_tl } > { \l__tblr_h_tl + 0pt }
+ {
+ \__tblr_data_gput:nene { row } {#1} { @row-height }
+ { \dim_eval:n { \l__tblr_a_tl + \l__tblr_b_tl } }
+ }
+ }
+ {
+ \tl_set:Nx \l__tblr_e_tl
+ { \__tblr_data_item:nen { row } {#1} { @row-head } }
+ \tl_set:Nx \l__tblr_f_tl
+ { \__tblr_data_item:nen { row } {#1} { @row-foot } }
+ \dim_compare:nNnT {#4} > {\l__tblr_e_tl}
+ {
+ \__tblr_data_gput:nene { row } {#1} { @row-head } { \dim_use:N #4 }
+ }
+ \dim_compare:nNnT {#5} > {\l__tblr_f_tl}
+ {
+ \__tblr_data_gput:nene { row } {#1} { @row-foot } { \dim_use:N #5 }
+ }
+ \tl_set:Nx \l__tblr_x_tl { \dim_max:nn {#4} { \l__tblr_e_tl } }
+ \tl_set:Nx \l__tblr_y_tl { \dim_max:nn {#5} { \l__tblr_f_tl } }
+ \dim_compare:nNnT
+ { #3 - #4 - #5 } > { \l__tblr_h_tl - \l__tblr_x_tl - \l__tblr_y_tl }
+ {
+ \__tblr_data_gput:nene { row } {#1} { @row-height }
+ {
+ \dim_eval:n
+ {
+ \l__tblr_x_tl
+ + \dim_use:N #3 - \dim_use:N #4 - \dim_use:N #5
+ + \l__tblr_y_tl
+ }
+ }
+ }
+ }
+ \group_end:
+ }
+
+
+%% Update size of the column. #1: column number; #2: width dimension
+
+\cs_new_protected:Npn \__tblr_update_col_size:nN #1 #2
+ {
+ \tl_set:Nx \l_tmpb_tl
+ { \__tblr_prop_item:ne {column} { [#1] / @col-width } }
+ \bool_lazy_or:nnT
+ { \tl_if_empty_p:N \l_tmpb_tl }
+ { \dim_compare_p:nNn { \dim_use:N #2 } > { \l_tmpb_tl } }
+ {
+ \__tblr_prop_gput:nxx {column} { [#1] / @col-width } { \dim_use:N #2 }
+ }
+ }
+
+%%% --------------------------------------------------------
+%% \section{Calculate and Adjust Extendable Columns}
+%%% --------------------------------------------------------
+
+%% Compute column widths when there are some extendable columns
+
+\dim_new:N \l__column_target_dim
+\prop_new:N \l__column_coefficient_prop
+\prop_new:N \l__column_natural_width_prop
+\prop_new:N \l__column_computed_width_prop
+
+\msg_new:nnn { tabularray } { table-width-too-small }
+ { Table ~ width ~ is ~ too ~ small, ~ need ~ #1 ~ more! }
+
+\cs_new_protected:Npn \__tblr_compute_extendable_column_width:
+ {
+ \__tblr_collect_extendable_column_width:
+ \dim_compare:nNnTF { \l__column_target_dim } < { 0pt }
+ {
+ \msg_warning:nnx { tabularray } { table-width-too-small }
+ { \dim_abs:n { \l__column_target_dim } }
+ }
+ {
+ \prop_if_empty:NF \l__column_coefficient_prop
+ { \__tblr_adjust_extendable_column_width: }
+ }
+ }
+
+\cs_new_protected:Npn \__tblr_collect_extendable_column_width:
+ {
+ \tl_set:Nx \l_tmpa_tl { \__tblr_prop_item:nn {table} {width} }
+ \tl_if_empty:NTF \l_tmpa_tl
+ { \dim_set_eq:NN \l__column_target_dim \linewidth }
+ { \dim_set:Nn \l__column_target_dim { \l_tmpa_tl } }
+ \prop_clear:N \l__column_coefficient_prop
+ \prop_clear:N \l__column_natural_width_prop
+ \prop_clear:N \l__column_computed_width_prop
+ \int_step_variable:nNn { \c@colcount } \l__tblr_j_tl
+ {
+ \tl_set:Nx \l__tblr_a_tl
+ { \__tblr_prop_item:ne {column} { [\l__tblr_j_tl] / width } }
+ \tl_set:Nx \l__tblr_b_tl
+ { \__tblr_prop_item:ne {column} { [\l__tblr_j_tl] / coefficient } }
+ \tl_set:Nx \l__tblr_c_tl
+ { \__tblr_prop_item:ne {column} { [\l__tblr_j_tl] / @col-width } }
+ \tl_if_empty:NTF \l__tblr_a_tl
+ {
+ \tl_if_empty:NTF \l__tblr_b_tl
+ { \dim_sub:Nn \l__column_target_dim { \l__tblr_c_tl } }
+ {
+ \prop_put:Nxx \l__column_coefficient_prop
+ { \l__tblr_j_tl } { \l__tblr_b_tl }
+ \prop_put:Nxn \l__column_computed_width_prop
+ { \l__tblr_j_tl } { 0pt }
+ \dim_compare:nNnF { \l__tblr_b_tl pt } > { 0pt }
+ {
+ \prop_put:Nxx \l__column_natural_width_prop
+ { \l__tblr_j_tl } { \l__tblr_c_tl }
+ }
+ }
+ }
+ { \dim_sub:Nn \l__column_target_dim { \l__tblr_a_tl } }
+ \tl_set:Nx \l__tblr_a_tl
+ { \__tblr_prop_item:ne {vline} { [\l__tblr_j_tl] / @vline-width } }
+ \tl_set:Nx \l__tblr_b_tl
+ { \__tblr_prop_item:ne {column} { [\l__tblr_j_tl] / leftsep} }
+ \tl_set:Nx \l__tblr_c_tl
+ { \__tblr_prop_item:ne {column} { [\l__tblr_j_tl] / rightsep } }
+ \dim_set:Nn \l__column_target_dim
+ { \l__column_target_dim - \l__tblr_a_tl - \l__tblr_b_tl - \l__tblr_c_tl }
+ }
+ \tl_set:Nx \l__tblr_a_tl
+ {
+ \__tblr_prop_item:ne {vline}
+ { [\int_eval:n {\c@colcount + 1}] / @vline-width }
+ }
+ \tl_if_empty:NF \l__tblr_a_tl
+ { \dim_sub:Nn \l__column_target_dim { \l__tblr_a_tl } }
+ \LogTblrTracing { target }
+ }
+
+%% If all columns have negative coefficients and small natural widths,
+%% \l__column_coefficient_prop will be empty after one or more rounds
+\cs_new_protected:Npn \__tblr_adjust_extendable_column_width:
+ {
+ \bool_while_do:nn
+ { \dim_compare_p:nNn { \l__column_target_dim } > { \hfuzz } }
+ {
+ \prop_if_empty:NTF \l__column_coefficient_prop
+ { \__tblr_adjust_extendable_column_width_negative: }
+ { \__tblr_adjust_extendable_column_width_once: }
+ }
+ \prop_map_inline:Nn \l__column_computed_width_prop
+ {
+ \__tblr_prop_gput:nnx {column} { [##1] / width } { ##2 }
+ \__tblr_prop_gput:nnn {column} { [##1] / @col-width } { 0pt }
+ }
+ \__tblr_calculate_cell_sizes:
+ }
+
+%% We use dimen register, since the coefficient may be a decimal number
+\cs_new_protected:Npn \__tblr_adjust_extendable_column_width_once:
+ {
+ \dim_zero:N \l_tmpa_dim
+ \prop_map_inline:Nn \l__column_coefficient_prop
+ {
+ \dim_add:Nn \l_tmpa_dim { \dim_abs:n { ##2 pt } }
+ }
+ \tl_set:Nx \l__tblr_w_tl
+ { \dim_ratio:nn { \l__column_target_dim } { \l_tmpa_dim } }
+ \dim_zero:N \l__column_target_dim
+ \prop_map_inline:Nn \l__column_coefficient_prop
+ {
+ \tl_set:Nx \l__tblr_a_tl
+ { \dim_eval:n { \dim_abs:n { ##2 pt } * \l__tblr_w_tl } }
+ \dim_compare:nNnTF { ##2 pt } > { 0pt }
+ {
+ \__tblr_add_dimen_value:Nnn
+ \l__column_computed_width_prop { ##1 } { \l__tblr_a_tl }
+ }
+ {
+ \tl_set:Nx \l__tblr_b_tl
+ { \prop_item:Nn \l__column_natural_width_prop { ##1 } }
+ \tl_set:Nx \l__tblr_c_tl
+ { \prop_item:Nn \l__column_computed_width_prop { ##1 } }
+ \dim_compare:nNnTF { \l__tblr_a_tl + \l__tblr_c_tl } > { \l__tblr_b_tl }
+ {
+ \prop_put:Nnx \l__column_computed_width_prop
+ { ##1 } { \l__tblr_b_tl }
+ \dim_add:Nn \l__column_target_dim
+ { \l__tblr_a_tl + \l__tblr_c_tl - \l__tblr_b_tl }
+ \prop_remove:Nn \l__column_coefficient_prop { ##1 }
+ }
+ {
+ \__tblr_add_dimen_value:Nnn
+ \l__column_computed_width_prop { ##1 } { \l__tblr_a_tl }
+ }
+ }
+ }
+ \LogTblrTracing { target }
+ }
+
+\cs_new_protected:Npn \__tblr_adjust_extendable_column_width_negative:
+ {
+ \dim_zero:N \l_tmpa_dim
+ \prop_map_inline:Nn \l__column_natural_width_prop
+ { \dim_add:Nn \l_tmpa_dim { ##2 } }
+ \tl_set:Nx \l_tmpa_tl
+ { \dim_ratio:nn { \l__column_target_dim } { \l_tmpa_dim } }
+ \dim_zero:N \l__column_target_dim
+ \prop_map_inline:Nn \l__column_natural_width_prop
+ {
+ \tl_set:Nx \l_tmpb_tl { \dim_eval:n { ##2 * \l_tmpa_tl } }
+ \__tblr_add_dimen_value:Nnn
+ \l__column_computed_width_prop { ##1 } { \l_tmpb_tl }
+ }
+ \LogTblrTracing { target }
+ }
+
+%%% --------------------------------------------------------
+%% \section{Calculate and Adjust Multispan Cells}
+%%% --------------------------------------------------------
+
+%% Compute and adjust widths when there are some span cells.
+%% By default, we will compute column widths from span widths;
+%% but if we set table option "hspan = minimal",
+%% we will compute span widths from column widths.
+
+\cs_new_protected:Npn \__tblr_adjust_sizes_for_span_cells:
+ {
+ \__tblr_prop_if_in:nnT {table} {colspan}
+ {
+ \__tblr_collect_column_widths_skips:
+ \str_if_eq:xnTF
+ { \__tblr_prop_item:ne {table} {hspan} } {minimal}
+ {
+ \__tblr_set_span_widths_from_column_widths:
+ }
+ {
+ \__tblr_collect_span_widths:
+ \__tblr_set_column_widths_from_span_widths:
+ }
+ \LogTblrTracing {column}
+ \__tblr_calculate_cell_sizes:
+ }
+ \__tblr_prop_if_in:nnT {table} {rowspan}
+ {
+ \__tblr_collect_row_heights_skips:
+ \__tblr_collect_span_heights:
+ \__tblr_set_row_heights_from_span_heights:
+ \LogTblrTracing {row}
+ }
+ }
+
+\prop_new:N \l__tblr_col_item_skip_size_prop
+\prop_new:N \l__tblr_col_span_size_prop
+\prop_new:N \l__tblr_row_item_skip_size_prop
+\prop_new:N \l__tblr_row_span_size_prop
+
+\cs_new_protected:Npn \__tblr_collect_column_widths_skips:
+ {
+ \prop_clear:N \l__tblr_col_item_skip_size_prop
+ \int_step_variable:nNn { \c@colcount } \l__tblr_j_tl
+ {
+ \int_compare:nNnTF { \l__tblr_j_tl } > { 1 }
+ {
+ \prop_put:Nxx \l__tblr_col_item_skip_size_prop { skip[\l__tblr_j_tl] }
+ {
+ \dim_eval:n
+ {
+ \__tblr_prop_item:ne {column}
+ { [\int_eval:n { \l__tblr_j_tl - 1 }] / rightsep }
+ +
+ \__tblr_prop_item:ne {vline}
+ { [\l__tblr_j_tl] / @vline-width }
+ +
+ \__tblr_prop_item:ne {column}
+ { [\l__tblr_j_tl] / leftsep}
+ }
+ }
+ }
+ {
+ \prop_put:Nxn \l__tblr_col_item_skip_size_prop { skip[\l__tblr_j_tl] }
+ { 0pt }
+ }
+ \prop_put:Nxx \l__tblr_col_item_skip_size_prop { item[\l__tblr_j_tl] }
+ { \__tblr_prop_item:ne {column} { [\l__tblr_j_tl] / @col-width } }
+ }
+ \__tblr_do_if_tracing:nn { cellspan }
+ { \prop_log:N \l__tblr_col_item_skip_size_prop }
+ }
+
+\cs_new_protected:Npn \__tblr_collect_row_heights_skips:
+ {
+ \prop_clear:N \l__tblr_row_item_skip_size_prop
+ \int_step_variable:nNn { \c@rowcount } \l__tblr_i_tl
+ {
+ \int_compare:nNnTF { \l__tblr_i_tl } > { 1 }
+ {
+ \prop_put:Nxx \l__tblr_row_item_skip_size_prop { skip[\l__tblr_i_tl] }
+ {
+ \dim_eval:n
+ {
+ \__tblr_data_item:nen { row }
+ { \int_eval:n {\l__tblr_i_tl - 1} } { belowsep }
+ +
+ \__tblr_prop_item:ne {hline}
+ { [\l__tblr_i_tl] / @hline-height }
+ +
+ \__tblr_data_item:nen { row } { \l__tblr_i_tl } { abovesep }
+ }
+ }
+ }
+ {
+ \prop_put:Nxn \l__tblr_row_item_skip_size_prop { skip[\l__tblr_i_tl] }
+ { 0pt }
+ }
+ \__tblr_collect_one_row_height:NN \l__tblr_i_tl \l__tblr_h_tl
+ \prop_put:Nxx \l__tblr_row_item_skip_size_prop
+ { item[\l__tblr_i_tl] } { \l__tblr_h_tl }
+ }
+ \__tblr_do_if_tracing:nn { cellspan }
+ { \prop_log:N \l__tblr_row_item_skip_size_prop }
+ }
+
+%% #1: row number; #2: tl with result
+\cs_new_protected:Npn \__tblr_collect_one_row_height:NN #1 #2
+ {
+ \tl_set:Nx #2 { \__tblr_data_item:nen { row } {#1} { @row-height } }
+ }
+
+\cs_new_protected:Npn \__tblr_collect_span_widths:
+ {
+ \prop_clear:N \l__tblr_col_span_size_prop
+ \int_step_variable:nNn { \c@colcount } \l__tblr_j_tl
+ {
+ \int_step_variable:nNn { \c@rowcount } \l__tblr_i_tl
+ {
+ \tl_set:Nx \l__tblr_a_tl
+ {
+ \__tblr_prop_item:ne {cell}
+ { [\l__tblr_i_tl][\l__tblr_j_tl] / colspan }
+ }
+ \tl_if_empty:NF \l__tblr_a_tl
+ {
+ \__tblr_put_if_larger:Nxx \l__tblr_col_span_size_prop
+ {
+ ( \l__tblr_j_tl -
+ \int_eval:n {\l__tblr_j_tl + \l__tblr_a_tl - 1} )
+ }
+ {
+ \__tblr_prop_item:ne {cell}
+ { [\l__tblr_i_tl][\l__tblr_j_tl] / @cell-width }
+ }
+ }
+ }
+ }
+ \__tblr_do_if_tracing:nn { cellspan }
+ { \prop_log:N \l__tblr_col_span_size_prop }
+ }
+
+\prop_new:N \l__tblr_row_span_to_row_prop
+
+\cs_new_protected:Npn \__tblr_collect_span_heights:
+ {
+ \prop_clear:N \l__tblr_row_span_to_row_prop
+ \prop_clear:N \l__tblr_row_span_size_prop
+ \int_step_variable:nNn { \c@rowcount } \l__tblr_i_tl
+ {
+ \int_step_variable:nNn { \c@colcount } \l__tblr_j_tl
+ {
+ \tl_set:Nx \l__tblr_a_tl
+ {
+ \__tblr_prop_item:ne {cell}
+ { [\l__tblr_i_tl][\l__tblr_j_tl] / rowspan }
+ }
+ \tl_if_empty:NF \l__tblr_a_tl
+ {
+ \tl_set:Nx \l__tblr_v_tl
+ {
+ \__tblr_prop_item:ne {cell}
+ { [\l__tblr_i_tl][\l__tblr_j_tl] / valign }
+ }
+ \tl_if_eq:NnT \l__tblr_v_tl { h }
+ {
+ \tl_set:Nx \l__tblr_h_tl
+ {
+ \__tblr_data_item:nen { row }
+ { \l__tblr_i_tl } { @row-head }
+ }
+ \__tblr_prop_gput:nxV {cell}
+ { [\l__tblr_i_tl][\l__tblr_j_tl] / @cell-height }
+ \l__tblr_h_tl
+ }
+ \tl_if_eq:NnT \l__tblr_v_tl { f }
+ {
+ \tl_set:Nx \l__tblr_d_tl
+ {
+ \__tblr_data_item:nen
+ { row }
+ { \int_eval:n { \l__tblr_i_tl + \l__tblr_a_tl - 1 } }
+ { @row-foot }
+ }
+ \__tblr_prop_gput:nxV {cell}
+ { [\l__tblr_i_tl][\l__tblr_j_tl] / @cell-depth }
+ \l__tblr_d_tl
+ }
+ \__tblr_put_if_larger:Nxx \l__tblr_row_span_size_prop
+ {
+ ( \l__tblr_i_tl -
+ \int_eval:n {\l__tblr_i_tl + \l__tblr_a_tl - 1} )
+ }
+ {
+ \dim_eval:n
+ {
+ \__tblr_prop_item:ne {cell}
+ { [\l__tblr_i_tl][\l__tblr_j_tl] / @cell-height }
+ +
+ \__tblr_prop_item:ne {cell}
+ { [\l__tblr_i_tl][\l__tblr_j_tl] / @cell-depth }
+ }
+ }
+ \prop_put:Nxx \l__tblr_row_span_to_row_prop
+ { [\l__tblr_i_tl][\l__tblr_j_tl] }
+ { \int_eval:n {\l__tblr_i_tl + \l__tblr_a_tl - 1} }
+ }
+ }
+ }
+ \__tblr_do_if_tracing:nn { cellspan }
+ {
+ \prop_log:N \l__tblr_row_span_to_row_prop
+ \prop_log:N \l__tblr_row_span_size_prop
+ }
+ }
+
+%% Compute and set column widths from span widths
+\cs_new_protected:Npn \__tblr_set_column_widths_from_span_widths:
+ {
+ \__tblr_calc_item_sizes_from_span_sizes:xNN
+ { \int_use:N \c@colcount }
+ \l__tblr_col_item_skip_size_prop
+ \l__tblr_col_span_size_prop
+ \__tblr_set_all_column_widths:
+ }
+
+%% Compute and set row heights from span heights
+\cs_new_protected:Npn \__tblr_set_row_heights_from_span_heights:
+ {
+ \__tblr_calc_item_sizes_from_span_sizes:xNN
+ { \int_use:N \c@rowcount }
+ \l__tblr_row_item_skip_size_prop
+ \l__tblr_row_span_size_prop
+ \__tblr_set_all_row_heights:
+ }
+
+%% See page 245 in Chapter 22 of TeXbook
+%% #1: total number of items
+%% #2: prop list with item sizes and skip sizes; #3: prop list with span sizes
+\cs_new_protected:Npn \__tblr_calc_item_sizes_from_span_sizes:nNN #1 #2 #3
+ {
+ \int_step_variable:nNn { #1 } \l__tblr_j_tl
+ {
+ \dim_set:Nn \l__tblr_w_dim
+ {
+ \prop_item:Ne #2 { item[\l__tblr_j_tl] }
+ }
+ \int_step_variable:nNn { \l__tblr_j_tl - 1 } \l__tblr_i_tl
+ {
+ \tl_set:Nx \l__tblr_a_tl
+ { \prop_item:Ne #3 { (\l__tblr_i_tl-\l__tblr_j_tl) } }
+ \tl_if_empty:NF \l__tblr_a_tl
+ {
+ \int_step_variable:nnNn
+ { \l__tblr_i_tl } { \l__tblr_j_tl - 1 } \l__tblr_k_tl
+ {
+ \__tblr_do_if_tracing:nn { cellspan }
+ {
+ \tl_log:x
+ { \l__tblr_j_tl : \l__tblr_i_tl -> \l__tblr_k_tl }
+ }
+ \tl_set:Nx \l_tmpa_tl
+ {
+ \prop_item:Ne #2 { itemskip[\l__tblr_k_tl] }
+ }
+ \tl_set:Nx \l__tblr_a_tl
+ { \dim_eval:n { \l__tblr_a_tl - \l_tmpa_tl } }
+ }
+ \dim_compare:nNnT { \l__tblr_a_tl } > { \l__tblr_w_dim }
+ {
+ \dim_set:Nn \l__tblr_w_dim { \l__tblr_a_tl }
+ }
+ }
+ }
+ \prop_put:Nxx #2
+ { item[\l__tblr_j_tl] } { \dim_use:N \l__tblr_w_dim }
+ \int_compare:nNnT { \l__tblr_j_tl } < { #1 }
+ {
+ \tl_set:Nx \l_tmpb_tl
+ {
+ \prop_item:Ne #2
+ { skip[\int_eval:n { \l__tblr_j_tl + 1} ] }
+ }
+ \dim_add:Nn \l__tblr_w_dim { \l_tmpb_tl }
+ \prop_put:Nxx #2
+ { itemskip[\l__tblr_j_tl] } { \dim_use:N \l__tblr_w_dim }
+ }
+ }
+ \__tblr_do_if_tracing:nn { cellspan } { \prop_log:N #2 }
+ }
+\cs_generate_variant:Nn \__tblr_calc_item_sizes_from_span_sizes:nNN { x }
+
+\cs_new_protected:Npn \__tblr_set_all_column_widths:
+ {
+ \int_step_variable:nNn { \c@colcount } \l__tblr_j_tl
+ {
+ \__tblr_prop_gput:nxx {column}
+ { [\l__tblr_j_tl] / @col-width }
+ { \prop_item:Ne \l__tblr_col_item_skip_size_prop { item[\l__tblr_j_tl] } }
+ }
+ }
+
+\cs_new_protected:Npn \__tblr_set_all_row_heights:
+ {
+ \int_step_variable:nNn { \c@rowcount } \l__tblr_i_tl
+ {
+ \tl_set:Nx \l__tblr_h_tl
+ {
+ \__tblr_data_item:nen { row } { \l__tblr_i_tl } { @row-head }
+ }
+ \tl_set:Nx \l__tblr_d_tl
+ {
+ \__tblr_data_item:nen { row } { \l__tblr_i_tl } { @row-foot }
+ }
+ \tl_set:Nx \l__tblr_a_tl
+ {
+ \prop_item:Ne \l__tblr_row_item_skip_size_prop { item[\l__tblr_i_tl] }
+ }
+ \__tblr_collect_one_row_height:NN \l__tblr_i_tl \l__tblr_t_tl
+ \__tblr_data_gput:nene { row }
+ { \l__tblr_i_tl } { @row-height } { \l__tblr_a_tl }
+ }
+ }
+
+\cs_new_protected:Npn \__tblr_get_span_key_row_col:w [#1][#2]
+ {
+ \tl_set:Nn \l__tblr_i_tl {#1}
+ \tl_set:Nn \l__tblr_j_tl {#2}
+ }
+
+%% Compute and set span widths from column widths
+\cs_new_protected:Npn \__tblr_set_span_widths_from_column_widths:
+ {
+ \int_step_variable:nNn { \c@colcount } \l__tblr_j_tl
+ {
+ \int_step_variable:nNn { \c@rowcount } \l__tblr_i_tl
+ {
+ \tl_set:Nx \l__tblr_a_tl
+ {
+ \__tblr_prop_item:ne {cell}
+ { [\l__tblr_i_tl][\l__tblr_j_tl] / colspan }
+ }
+ \tl_if_empty:NF \l__tblr_a_tl
+ {
+ \__tblr_calc_span_widths:xxN
+ { \l__tblr_j_tl }
+ { \int_eval:n { \l__tblr_j_tl + \l__tblr_a_tl - 1 } }
+ \l__tblr_w_dim
+ \__tblr_prop_gput:nxx {cell}
+ { [\l__tblr_i_tl][\l__tblr_j_tl] / width }
+ { \dim_use:N \l__tblr_w_dim }
+ }
+ }
+ }
+ }
+
+%% Cell is spanned from col #1 to col #2, #3 is the return dim
+\cs_new_protected:Npn \__tblr_calc_span_widths:nnN #1 #2 #3
+ {
+ \dim_zero:N #3
+ \int_step_inline:nnn { #1 } { #2 }
+ {
+ \tl_set:Nx \l_tmpa_tl
+ { \prop_item:Ne \l__tblr_col_item_skip_size_prop { skip[##1] } }
+ \tl_set:Nx \l_tmpb_tl
+ { \prop_item:Ne \l__tblr_col_item_skip_size_prop { item[##1] } }
+ \dim_add:Nn #3 { \dim_eval:n { \l_tmpa_tl + \l_tmpb_tl } }
+ }
+ }
+\cs_generate_variant:Nn \__tblr_calc_span_widths:nnN { xxN }
+
+%%% --------------------------------------------------------
+%% \section{Build the Whole Table}
+%%% --------------------------------------------------------
+
+\tl_new:N \__tlbr_vbox_align_tl
+\tl_const:Nn \__tlbr_vbox_t_tl {t}
+\tl_const:Nn \__tlbr_vbox_m_tl {m}
+\tl_const:Nn \__tlbr_vbox_c_tl {c}
+\tl_const:Nn \__tlbr_vbox_b_tl {b}
+
+\box_new:N \l__tblr_table_box
+
+%% #1: table alignment
+\cs_new_protected:Npn \__tblr_build_whole:n #1
+ {
+ \bool_if:NTF \l__tblr_long_table_bool
+ { \__tblr_build_long_table:n {#1} }
+ { \__tblr_build_short_table:n {#1} }
+ }
+
+\dim_new:N \l__tblr_remain_height_dim
+\tl_new:N \l__tblr_long_from_tl
+
+\cs_new_protected:Npn \__tblr_build_long_table:n #1
+ {
+ %\dim_log:N \pagegoal
+ %\dim_log:N \pagetotal
+ \dim_set:Nn \l__tblr_remain_height_dim { \pagegoal - \pagetotal }
+ \tl_set:Nn \l__tblr_long_from_tl {1}
+ \int_step_variable:nNn { \c@rowcount } \l__tblr_i_tl
+ {
+ \dim_set:Nn \l_tmpa_dim
+ {
+ \__tblr_prop_item:ne { hline } { [\l__tblr_i_tl] / @hline-height }
+ +
+ \__tblr_data_item:nen { row } { \l__tblr_i_tl } { abovesep }
+ +
+ \__tblr_data_item:nen { row } { \l__tblr_i_tl } { @row-height }
+ +
+ \__tblr_data_item:nen { row } { \l__tblr_i_tl } { belowsep }
+ }
+ \dim_compare:nNnTF
+ { \l_tmpa_dim } > { \l__tblr_remain_height_dim }
+ {
+ \tl_log:N \l__tblr_i_tl
+ \__tblr_build_page_table:nnx {#1}
+ { \l__tblr_long_from_tl } { \int_eval:n { \l__tblr_i_tl - 1 } }
+ \newpage
+ \hbox{}\kern-\topskip\nobreak
+ \leavevmode
+ %\dim_log:N \pagegoal
+ %\dim_log:N \pagetotal
+ \dim_set:Nn \l__tblr_remain_height_dim
+ { \pagegoal - \pagetotal - \l_tmpa_dim }
+ \tl_set_eq:NN \l__tblr_long_from_tl \l__tblr_i_tl
+ }
+ {
+ \dim_add:Nn \l__tblr_remain_height_dim { -\l_tmpa_dim }
+ }
+ }
+ \__tblr_build_page_table:nnn {#1} { \l__tblr_long_from_tl } { \c@rowcount }
+ }
+
+\cs_new_protected:Npn \__tblr_build_page_table:nnn #1 #2 #3
+ {
+ \__tblr_build_one_table:nn {#2} {#3}
+ \__tblr_halign_whole:Nn \l__tblr_table_box #1
+ }
+\cs_generate_variant:Nn \__tblr_build_page_table:nnn { nnx }
+
+\cs_new_protected:Npn \__tblr_halign_whole:Nn #1 #2
+ {
+ \noindent
+ \hbox_to_wd:nn { \linewidth }
+ {
+ \tl_if_eq:nnF {#2} {l} { \hfil }
+ \box_use:N #1
+ \tl_if_eq:nnF {#2} {r} { \hfil }
+ }
+ }
+
+\cs_new_protected:Npn \__tblr_build_short_table:n #1
+ {
+ \__tblr_build_one_table:nn {1} {\c@rowcount}
+ \__tblr_valign_whole:Nn \l__tblr_table_box #1
+ }
+
+%% #1: row from; #2: row to
+\cs_new_protected:Npn \__tblr_build_one_table:nn #1 #2
+ {
+ \vbox_set:Nn \l__tblr_table_box
+ {
+ \int_step_variable:nnNn {#1} {#2} \l__tblr_i_tl
+ {
+ \hbox:n { \__tblr_build_hline:V \l__tblr_i_tl }
+ \hrule height ~ 0pt % remove lineskip between hlines and rows
+ \hbox:n { \__tblr_build_row:N \l__tblr_i_tl }
+ \hrule height ~ 0pt
+ }
+ \hbox:n { \__tblr_build_hline:n { \int_eval:n {#2 + 1} } }
+ }
+ }
+
+\cs_new_protected:Npn \__tblr_valign_whole:Nn #1 #2
+ {
+ \group_begin:
+ \tl_set:Nn \__tlbr_vbox_align_tl {#2}
+ \dim_set:Nn \l__tblr_t_dim { \box_ht:N #1 + \box_dp:N #1 }
+ \tl_case:NnF \__tlbr_vbox_align_tl
+ {
+ \__tlbr_vbox_m_tl
+ { \__tblr_valign_whole_middle:N #1 }
+ \__tlbr_vbox_c_tl
+ { \__tblr_valign_whole_middle:N #1 }
+ \__tlbr_vbox_t_tl
+ { \__tblr_valign_whole_top:N #1 }
+ \__tlbr_vbox_b_tl
+ { \__tblr_valign_whole_bottom:N #1 }
+ }
+ { \__tblr_valign_whole_middle:N #1 }
+ \group_end:
+ }
+
+\cs_new_protected:Npn \__tblr_valign_whole_middle:N #1
+ {
+ \hbox:n { $ \m@th \tex_vcenter:D { \vbox_unpack_drop:N #1 } $ }
+ }
+
+\cs_new_protected:Npn \__tblr_valign_whole_top:N #1
+ {
+ \tl_set:Nx \l__tblr_a_tl
+ { \__tblr_prop_item:ne { hline } { [1] / @hline-height } }
+ %% Note that \l__tblr_b_tl may be empty
+ \tl_set:Nx \l__tblr_b_tl
+ { \__tblr_prop_item:ne { table } { baseline } }
+ \bool_lazy_or:nnTF
+ { \dim_compare_p:nNn { \l__tblr_a_tl } = { 0pt } }
+ { \int_compare_p:nNn { \l__tblr_b_tl + 0 } = { 1 } }
+ {
+ \dim_set:Nn \l__tblr_h_dim
+ {
+ \__tblr_data_item:nnn { row } {1} { abovesep }
+ +
+ ( \__tblr_data_item:nnn { row } {1} { @row-height }
+ +
+ \__tblr_data_item:nnn { row } {1} { @row-upper }
+ -
+ \__tblr_data_item:nnn { row } {1} { @row-lower }
+ ) / 2
+ }
+ \dim_set:Nn \l__tblr_d_dim { \l__tblr_t_dim - \l__tblr_h_dim }
+ }
+ {
+ \dim_set:Nn \l__tblr_h_dim { 0pt }
+ \dim_set_eq:NN \l__tblr_d_dim \l__tblr_t_dim
+ }
+ \box_set_ht:Nn #1 { \l__tblr_h_dim }
+ \box_set_dp:Nn #1 { \l__tblr_d_dim }
+ \box_use_drop:N #1
+ }
+
+\cs_new_protected:Npn \__tblr_valign_whole_bottom:N #1
+ {
+ \tl_set:Nx \l__tblr_a_tl
+ {
+ \__tblr_prop_item:ne { hline }
+ { [\int_eval:n {\c@rowcount + 1}] / @hline-height }
+ }
+ %% Note that \l__tblr_b_tl may be empty
+ \tl_set:Nx \l__tblr_b_tl
+ { \__tblr_prop_item:ne { table } { baseline } }
+ \bool_lazy_or:nnTF
+ { \dim_compare_p:nNn { \l__tblr_a_tl } = { 0pt } }
+ { \int_compare_p:nNn { \l__tblr_b_tl + 0 } = { \c@rowcount } }
+ {
+ \dim_set:Nn \l__tblr_d_dim
+ {
+ ( \__tblr_data_item:nen { row }
+ { \int_use:N \c@rowcount } { @row-height }
+ -
+ \__tblr_data_item:nen { row }
+ { \int_use:N \c@rowcount } { @row-upper }
+ +
+ \__tblr_data_item:nen { row }
+ { \int_use:N \c@rowcount } { @row-lower }
+ ) / 2
+ +
+ \__tblr_data_item:nnn { row } {1} { belowsep }
+ }
+ \dim_set:Nn \l__tblr_h_dim { \l__tblr_t_dim - \l__tblr_d_dim }
+ }
+ {
+ \dim_set:Nn \l__tblr_d_dim { 0pt }
+ \dim_set_eq:NN \l__tblr_h_dim \l__tblr_t_dim
+ }
+ \box_set_ht:Nn #1 { \l__tblr_h_dim }
+ \box_set_dp:Nn #1 { \l__tblr_d_dim }
+ \box_use_drop:N #1
+ }
+
+\dim_new:N \l__tblr_col_o_wd_dim
+\dim_new:N \l__tblr_col_b_wd_dim
+
+%% Build hline. #1: row number
+\cs_new_protected:Npn \__tblr_build_hline:n #1
+ {
+ \int_step_inline:nn { \c@colcount }
+ { \__tblr_build_hline_segment:nn { #1 } { ##1 } }
+ }
+\cs_generate_variant:Nn \__tblr_build_hline:n { x, V }
+
+%% #1: row number, #2: column number
+\cs_new_protected:Npn \__tblr_build_hline_segment:nn #1 #2
+ {
+ \tl_set:Nx \l__tblr_n_tl
+ { \__tblr_prop_item:ne { hline } { [#1] / @hline-count } }
+ \tl_set:Nx \l__tblr_o_tl
+ { \__tblr_prop_item:ne { hline } { [#1][#2] / omit } }
+ \__tblr_get_col_outer_width_border_width:nNN {#2}
+ \l__tblr_col_o_wd_dim \l__tblr_col_b_wd_dim
+ \tl_if_empty:NTF \l__tblr_o_tl
+ {
+ \tl_if_empty:NF \l__tblr_n_tl
+ { \__tblr_build_hline_segment_real:nn {#1} {#2} }
+ }
+ { \__tblr_build_hline_segment_omit:nn {#1} {#2} }
+ }
+
+%% #1: row number, #2: column number
+\cs_new_protected:Npn \__tblr_build_hline_segment_omit:nn #1 #2
+ {
+ \skip_horizontal:n { \l__tblr_col_o_wd_dim - \l__tblr_col_b_wd_dim }
+ }
+
+%% #1: row number, #2: column number
+\cs_new_protected:Npn \__tblr_build_hline_segment_real:nn #1 #2
+ {
+ \tl_set:Nx \l__tblr_s_tl
+ { \__tblr_prop_item:ne { hline } { [#1] / rulesep } }
+ \vbox_set:Nn \l__tblr_c_box
+ {
+ %% add an empty hbox to support vbox width
+ \tex_hbox:D to \l__tblr_col_o_wd_dim {}
+ \int_step_inline:nn { \l__tblr_n_tl }
+ {
+ \tl_set:Nx \l__tblr_h_tl
+ { \__tblr_prop_item:ne { hline } { [#1](##1) / @hline-height } }
+ \hrule height ~ 0pt % remove lineskip
+ \hbox_set_to_wd:Nnn \l__tblr_b_box { \l__tblr_col_o_wd_dim }
+ {
+ \tl_set:Nx \l__tblr_f_tl
+ { \__tblr_prop_item:ne { hline } { [#1][#2](##1) / fg } }
+ \tl_if_empty:NF \l__tblr_f_tl { \color{\l__tblr_f_tl} }
+ \__tblr_get_hline_segment_child:nnn {#1} {#2} {##1}
+ }
+ \box_set_ht:Nn \l__tblr_b_box { \l__tblr_h_tl }
+ \box_set_dp:Nn \l__tblr_b_box { 0pt }
+ \box_use:N \l__tblr_b_box
+ \skip_vertical:n { \l__tblr_s_tl }
+ }
+ \skip_vertical:n { - \l__tblr_s_tl }
+ }
+ \box_use:N \l__tblr_c_box
+ \skip_horizontal:n { - \l__tblr_col_b_wd_dim }
+ }
+
+%% Read from table specifications and calculate the widths of row and border
+%% column outer width = content width + colsep width + border width
+%% #1: the column number, #2: outer width, #3: border width
+\cs_new_protected:Npn \__tblr_get_col_outer_width_border_width:nNN #1 #2 #3
+ {
+ \dim_set:Nn #3
+ { \__tblr_prop_item:ne {vline} { [\int_eval:n {#1 + 1}] / @vline-width } }
+ \dim_set:Nn #2
+ {
+ \__tblr_prop_item:ne {vline} { [#1] / @vline-width }
+ +
+ \__tblr_prop_item:ne {column} { [#1] / leftsep }
+ +
+ \__tblr_prop_item:ne {column} { [#1] / @col-width }
+ +
+ \__tblr_prop_item:ne {column} { [#1] / rightsep }
+ +
+ #3
+ }
+ }
+
+\dim_new:N \l__tblr_row_ht_dim
+\dim_new:N \l__tblr_row_dp_dim
+\dim_new:N \l__tblr_row_abovesep_dim
+\dim_new:N \l__tblr_row_belowsep_dim
+
+%% Build current row, #1: row number
+\cs_new_protected:Npn \__tblr_build_row:N #1
+ {
+ \__tblr_get_row_inner_height_depth:VNNNN #1
+ \l__tblr_row_ht_dim \l__tblr_row_dp_dim
+ \l__tblr_row_abovesep_dim \l__tblr_row_belowsep_dim
+ \vrule width ~ 0pt ~ height ~ \l__tblr_row_ht_dim ~ depth ~ \l__tblr_row_dp_dim
+ \int_step_variable:nNn { \c@colcount } \l__tblr_j_tl
+ {
+ \__tblr_build_vline_segment:nn {#1} { \l__tblr_j_tl }
+ \__tblr_build_cell:NN #1 \l__tblr_j_tl
+ }
+ \__tblr_build_vline_segment:nn {#1} { \int_eval:n {\c@colcount + 1} }
+ }
+
+%% Read from table specifications and calculate inner height/depth of the row
+%% inner height = abovesep + above vspace + row upper
+%% inner depth = row lower + below vspace + belowsep
+%% #1: the row number; #2: resulting inner height; #3: resulting inner depth;
+%% #4: restulting abovesep; #5: restulting belowsep.
+
+\dim_new:N \l__row_upper_dim
+\dim_new:N \l__row_lower_dim
+\dim_new:N \l__row_vpace_dim
+
+\cs_new_protected:Npn \__tblr_get_row_inner_height_depth:nNNNN #1 #2 #3 #4 #5
+ {
+ \dim_set:Nn #4
+ { \__tblr_data_item:nen { row } {#1} { abovesep } }
+ \dim_set:Nn #5
+ { \__tblr_data_item:nen { row } {#1} { belowsep } }
+ \dim_set:Nn \l__row_upper_dim
+ { \__tblr_data_item:nen { row } {#1} { @row-upper } }
+ \dim_set:Nn \l__row_lower_dim
+ { \__tblr_data_item:nen { row } {#1} { @row-lower } }
+ \dim_set:Nn \l__row_vpace_dim
+ {
+ ( \__tblr_data_item:nen { row } {#1} { @row-height }
+ - \l__row_upper_dim - \l__row_lower_dim ) / 2
+ }
+ \dim_set:Nn #2 { #4 + \l__row_vpace_dim + \l__row_upper_dim }
+ \dim_set:Nn #3 { \l__row_lower_dim + \l__row_vpace_dim + #5 }
+ }
+\cs_generate_variant:Nn \__tblr_get_row_inner_height_depth:nNNNN { V }
+
+%% #1: row number, #2: column number
+\cs_new_protected:Npn \__tblr_build_vline_segment:nn #1 #2
+ {
+ \tl_set:Nx \l__tblr_n_tl
+ { \__tblr_prop_item:ne { vline } { [#2] / @vline-count } }
+ \tl_set:Nx \l__tblr_o_tl
+ { \__tblr_prop_item:ne { vline } { [#1][#2] / omit } }
+ \tl_if_empty:NTF \l__tblr_o_tl
+ {
+ \tl_if_empty:NF \l__tblr_n_tl
+ { \__tblr_build_vline_segment_real:nn {#1} {#2} }
+ }
+ { \__tblr_build_vline_segment_omit:nn {#1} {#2} }
+ }
+
+%% #1: row number, #2: column number
+\cs_new_protected:Npn \__tblr_build_vline_segment_omit:nn #1 #2
+ {
+ \tl_set:Nx \l__tblr_w_tl
+ { \__tblr_prop_item:ne { vline } { [#2] / @vline-width } }
+ \skip_horizontal:N \l__tblr_w_tl
+ }
+
+%% #1: row number, #2: column number
+%% We make every vline segment intersect with first hline below
+%% to remove gaps in vlines around multirow cells
+\cs_new_protected:Npn \__tblr_build_vline_segment_real:nn #1 #2
+ {
+ \tl_set:Nx \l__tblr_s_tl
+ { \__tblr_prop_item:ne { vline } { [#2] / rulesep } }
+ \tl_set:Nx \l__tblr_b_tl
+ {
+ \__tblr_prop_item:ne { hline }
+ { [\int_eval:n{#1 + 1}](1) / @hline-height }
+ }
+ \tl_if_empty:NT \l__tblr_b_tl { \tl_set:Nn \l__tblr_b_tl { 0pt } }
+ \hbox_set:Nn \l__tblr_a_box
+ {
+ \int_step_inline:nn { \l__tblr_n_tl }
+ {
+ \tl_set:Nx \l__tblr_w_tl
+ { \__tblr_prop_item:ne { vline } { [#2](##1) / @vline-width } }
+ \vbox_set_to_ht:Nnn \l__tblr_b_box
+ { \dim_eval:n { \l__tblr_row_ht_dim + \l__tblr_row_dp_dim } }
+ {
+ \tl_set:Nx \l__tblr_f_tl
+ { \__tblr_prop_item:ne { vline } { [#1][#2](##1) / fg } }
+ \tl_if_empty:NF \l__tblr_f_tl { \color{\l__tblr_f_tl} }
+ \__tblr_get_vline_segment_child:nnnxx {#1} {#2} {##1}
+ { \dim_eval:n { \l__tblr_row_ht_dim } }
+ { \dim_eval:n { \l__tblr_row_dp_dim + \l__tblr_b_tl } }
+ \skip_vertical:n { - \l__tblr_b_tl }
+ }
+ \box_set_wd:Nn \l__tblr_b_box { \l__tblr_w_tl }
+ \box_use:N \l__tblr_b_box
+ \skip_horizontal:n { \l__tblr_s_tl }
+ }
+ \skip_horizontal:n { - \l__tblr_s_tl }
+ }
+ \vbox_set:Nn \l__tblr_c_box { \box_use:N \l__tblr_a_box }
+ \box_set_ht:Nn \l__tblr_c_box { \dim_use:N \l__tblr_row_ht_dim }
+ \box_set_dp:Nn \l__tblr_c_box { \dim_use:N \l__tblr_row_dp_dim }
+ \box_use:N \l__tblr_c_box
+ }
+
+\tl_new:N \l__tblr_cell_rowspan_tl
+\tl_new:N \l__tblr_cell_colspan_tl
+\dim_new:N \l__tblr_cell_wd_dim
+\dim_new:N \l__tblr_cell_ht_dim
+
+\cs_new_protected:Npn \__tblr_build_cell:NN #1 #2
+ {
+ \int_set:Nn \c@rownum {#1}
+ \int_set:Nn \c@colnum {#2}
+ \group_begin:
+ \tl_set:Nx \l__tblr_w_tl
+ { \__tblr_prop_item:ne { column } { [#2] / @col-width } }
+ \tl_set:Nx \l__tblr_h_tl
+ { \__tblr_data_item:nen { row } {#1} { @row-height } }
+ \tl_set:Nx \l__tblr_x_tl
+ { \__tblr_prop_item:ne { column } { [#2] / leftsep} }
+ \tl_set:Nx \l__tblr_y_tl
+ { \__tblr_prop_item:ne { column } { [#2] / rightsep } }
+ \tl_set:Nx \l__tblr_cell_colspan_tl
+ { \__tblr_prop_item:ne { cell } { [#1][#2] / colspan } }
+ \tl_if_empty:NTF \l__tblr_cell_colspan_tl
+ { \dim_set:Nn \l__tblr_cell_wd_dim { \l__tblr_w_tl } }
+ {
+ \__tblr_get_span_horizontal_sizes:NNNNN #1 #2
+ \l__tblr_o_dim \l__tblr_cell_wd_dim \l__tblr_q_dim
+ }
+ \tl_set:Nx \l__tblr_cell_rowspan_tl
+ { \__tblr_prop_item:ne { cell } { [#1][#2] / rowspan } }
+ \tl_if_empty:NTF \l__tblr_cell_rowspan_tl
+ { \dim_set:Nn \l__tblr_cell_ht_dim { \l__tblr_h_tl } }
+ {
+ \__tblr_get_span_vertical_sizes:NNNNN #1 #2
+ \l__tblr_r_dim \l__tblr_cell_ht_dim \l__tblr_t_dim
+ }
+ \__tblr_get_cell_alignments:nn {#1} {#2}
+ \__tblr_build_cell_background:NN #1 #2
+ \__tblr_build_cell_content:NN #1 #2
+ \group_end:
+ }
+
+\cs_new_protected:Npn \__tblr_build_cell_content:NN #1 #2
+ {
+ \hbox_set_to_wd:Nnn \l__tblr_a_box { \l__tblr_cell_wd_dim }
+ {
+ \tl_if_eq:NnF \g__tblr_cell_halign_tl {l} { \hfil }
+ \__tblr_get_cell_text:nn {#1} {#2}
+ \tl_if_eq:NnF \g__tblr_cell_halign_tl {r} { \hfil }
+ }
+ \vbox_set_to_ht:Nnn \l__tblr_b_box { \l__tblr_cell_ht_dim }
+ {
+ \tl_case:Nn \g__tblr_cell_valign_tl
+ {
+ \c__tblr_valign_m_tl
+ {
+ \vfil
+ \tl_if_empty:NT \l__tblr_cell_rowspan_tl
+ {
+ \box_set_ht:Nn \l__tblr_a_box
+ { \__tblr_data_item:nen { row } {#1} { @row-upper } }
+ \box_set_dp:Nn \l__tblr_a_box
+ { \__tblr_data_item:nen { row } {#1} { @row-lower } }
+ }
+ \box_use:N \l__tblr_a_box
+ \vfil
+ }
+ \c__tblr_valign_h_tl
+ {
+ \box_set_ht:Nn \l__tblr_a_box
+ { \__tblr_data_item:nen { row } {#1} { @row-head } }
+ \box_use:N \l__tblr_a_box
+ \vfil
+ }
+ \c__tblr_valign_f_tl
+ {
+ \vfil
+ \tl_if_empty:NTF \l__tblr_cell_rowspan_tl
+ {
+ \box_set_dp:Nn \l__tblr_a_box
+ { \__tblr_data_item:nen { row } {#1} { @row-foot } }
+ }
+ {
+ \box_set_dp:Nn \l__tblr_a_box
+ {
+ \__tblr_data_item:nen
+ { row }
+ { \int_eval:n { #1 + \l__tblr_cell_rowspan_tl - 1 } }
+ { @row-foot }
+ }
+ }
+ \box_use:N \l__tblr_a_box
+ }
+ }
+ \hrule height ~ 0pt %% zero depth
+ }
+ \vbox_set_to_ht:Nnn \l__tblr_c_box
+ { \l__tblr_row_ht_dim - \l__tblr_row_abovesep_dim }
+ {
+ \box_use:N \l__tblr_b_box
+ \vss
+ }
+ \skip_horizontal:n { \l__tblr_x_tl }
+ \box_use:N \l__tblr_c_box
+ \skip_horizontal:n { \l__tblr_y_tl - \l__tblr_cell_wd_dim + \l__tblr_w_tl }
+ }
+
+\cs_new_protected:Npn \__tblr_build_cell_background:NN #1 #2
+ {
+ \__tblr_prop_if_in:nxF {cell} { [#1][#2] / omit }
+ {
+ \group_begin:
+ \tl_set:Nx \l__tblr_b_tl
+ { \__tblr_prop_item:ne { cell } { [#1][#2] / background } }
+ \tl_if_empty:NF \l__tblr_b_tl
+ {
+ \__tblr_get_cell_background_width:NNN #1 #2 \l_tmpa_dim
+ \__tblr_get_cell_background_depth:NNN #1 #2 \l_tmpb_dim
+ \__tblr_build_cell_background:nnnn
+ { \dim_use:N \l_tmpa_dim }
+ { \l__tblr_row_ht_dim }
+ { \dim_use:N \l_tmpb_dim }
+ { \l__tblr_b_tl }
+ }
+ \group_end:
+ }
+ }
+
+%% #1: row number; #2: column number; #3 resulting dimension
+\cs_new_protected:Npn \__tblr_get_cell_background_width:NNN #1 #2 #3
+ {
+ \tl_if_empty:NTF \l__tblr_cell_colspan_tl
+ { \dim_set:Nn #3 { \l__tblr_x_tl + \l__tblr_w_tl + \l__tblr_y_tl } }
+ {
+ \dim_set:Nn #3 { \l__tblr_o_dim + \l__tblr_cell_wd_dim + \l__tblr_q_dim }
+ }
+ }
+
+%% #1: row number; #2: column number; #3 resulting dimension
+\cs_new_protected:Npn \__tblr_get_cell_background_depth:NNN #1 #2 #3
+ {
+ \tl_if_empty:NTF \l__tblr_cell_rowspan_tl
+ { \dim_set_eq:NN #3 \l__tblr_row_dp_dim }
+ {
+ \dim_set:Nn #3
+ {
+ \l__tblr_r_dim + \l__tblr_cell_ht_dim
+ + \l__tblr_t_dim - \l__tblr_row_ht_dim
+ }
+ }
+ }
+
+%% #1: width, #2: height, #3: depth, #4: color
+\cs_new_protected:Npn \__tblr_build_cell_background:nnnn #1 #2 #3 #4
+ {
+ \hbox_set:Nn \l__tblr_a_box
+ {
+ \color {#4}
+ \vrule width ~ #1 ~ height ~ #2 ~ depth ~ #3
+ }
+ \box_set_dp:Nn \l__tblr_a_box { 0pt }
+ \box_use:N \l__tblr_a_box
+ \skip_horizontal:n { - #1 }
+ }
+
+%% #1: row number; #2: column number; #3: dimen register for rowsep above.
+%% #4: dimen register for total height; #5: dimen register for rowsep below.
+%% We can use \l__tblr_row_item_skip_size_prop which was made before
+\cs_new_protected:Npn \__tblr_get_span_vertical_sizes:NNNNN #1 #2 #3 #4 #5
+ {
+ \dim_set:Nn #3
+ { \__tblr_data_item:nen { row } {#1} { abovesep } }
+ \dim_zero:N #4
+ \int_step_inline:nnn { #1 } { #1 + \l__tblr_cell_rowspan_tl - 2 }
+ {
+ \dim_add:Nn #4
+ { \prop_item:Ne \l__tblr_row_item_skip_size_prop { itemskip[##1] } }
+ }
+ \dim_add:Nn #4
+ {
+ \prop_item:Ne \l__tblr_row_item_skip_size_prop
+ { item[\int_eval:n { #1 + \l__tblr_cell_rowspan_tl - 1 }] }
+ }
+ \dim_set:Nn #5
+ {
+ \__tblr_data_item:nen { row }
+ { \int_eval:n { #1 + \l__tblr_cell_rowspan_tl - 1 } } { belowsep }
+ }
+ %\tl_log:x { cell[#1][#2] ~:~ \dim_use:N #3, \dim_use:N #4, \dim_use:N #5 }
+ }
+
+%% #1: row number; #2: column number; #3: dimen register for colsep left.
+%% #4: dimen register for total width; #5: dimen register for colsep right.
+%% We can use \l__tblr_col_item_skip_size_prop which was made before
+%% But when hspan=minimal, there are no itemskip in the prop list.
+%% Therefore we need to calculate them from the sizes of items and skips
+\cs_new_protected:Npn \__tblr_get_span_horizontal_sizes:NNNNN #1 #2 #3 #4 #5
+ {
+ \dim_set:Nn #3
+ { \__tblr_prop_item:ne { column } { [#2] / leftsep} }
+ \dim_zero:N #4
+ \int_step_inline:nnn { #2 } { #2 + \l__tblr_cell_colspan_tl - 2 }
+ {
+ \dim_add:Nn #4
+ { \prop_item:Ne \l__tblr_col_item_skip_size_prop { item[##1] } }
+ \dim_add:Nn #4
+ {
+ \prop_item:Ne \l__tblr_col_item_skip_size_prop
+ { skip[\int_eval:n { ##1 + 1 }] }
+ }
+ }
+ \dim_add:Nn #4
+ {
+ \prop_item:Ne \l__tblr_col_item_skip_size_prop
+ { item[\int_eval:n { #2 + \l__tblr_cell_colspan_tl - 1 }] }
+ }
+ \dim_set:Nn #5
+ {
+ \__tblr_prop_item:ne { column }
+ { [\int_eval:n {#2 + \l__tblr_cell_colspan_tl - 1}] / rightsep }
+ }
+ %\tl_log:x { cell[#1][#2] ~:~ \dim_use:N #3, \dim_use:N #4, \dim_use:N #5 }
+ }
+
+%%% --------------------------------------------------------
+%% \section{Tracing Tabularray}
+%%% --------------------------------------------------------
+
+\NewDocumentCommand \SetTabularrayTracing { m }
+ {
+ \keys_set:nn { tblr-set-tracing } {#1}
+ }
+\cs_new_eq:NN \SetTblrTracing \SetTabularrayTracing
+
+\bool_new:N \g__tblr_tracing_text_bool
+\bool_new:N \g__tblr_tracing_command_bool
+\bool_new:N \g__tblr_tracing_table_bool
+\bool_new:N \g__tblr_tracing_column_bool
+\bool_new:N \g__tblr_tracing_row_bool
+\bool_new:N \g__tblr_tracing_cell_bool
+\bool_new:N \g__tblr_tracing_vline_bool
+\bool_new:N \g__tblr_tracing_hline_bool
+\bool_new:N \g__tblr_tracing_colspec_bool
+\bool_new:N \g__tblr_tracing_rowspec_bool
+\bool_new:N \g__tblr_tracing_target_bool
+\bool_new:N \g__tblr_tracing_cellspan_bool
+
+\keys_define:nn { tblr-set-tracing }
+ {
+ +text .code:n = \bool_gset_true:N \g__tblr_tracing_text_bool,
+ -text .code:n = \bool_gset_false:N \g__tblr_tracing_text_bool,
+ +command .code:n = \bool_gset_true:N \g__tblr_tracing_command_bool,
+ -command .code:n = \bool_gset_false:N \g__tblr_tracing_command_bool,
+ +table .code:n = \bool_gset_true:N \g__tblr_tracing_table_bool,
+ -table .code:n = \bool_gset_false:N \g__tblr_tracing_table_bool,
+ +column .code:n = \bool_gset_true:N \g__tblr_tracing_column_bool,
+ -column .code:n = \bool_gset_false:N \g__tblr_tracing_column_bool,
+ +row .code:n = \bool_gset_true:N \g__tblr_tracing_row_bool,
+ -row .code:n = \bool_gset_false:N \g__tblr_tracing_row_bool,
+ +cell .code:n = \bool_gset_true:N \g__tblr_tracing_cell_bool,
+ -cell .code:n = \bool_gset_false:N \g__tblr_tracing_cell_bool,
+ +vline .code:n = \bool_gset_true:N \g__tblr_tracing_vline_bool,
+ -vline .code:n = \bool_gset_false:N \g__tblr_tracing_vline_bool,
+ +hline .code:n = \bool_gset_true:N \g__tblr_tracing_hline_bool,
+ -hline .code:n = \bool_gset_false:N \g__tblr_tracing_hline_bool,
+ +colspec .code:n = \bool_gset_true:N \g__tblr_tracing_colspec_bool,
+ -colspec .code:n = \bool_gset_false:N \g__tblr_tracing_colspec_bool,
+ +rowspec .code:n = \bool_gset_true:N \g__tblr_tracing_rowspec_bool,
+ -rowspec .code:n = \bool_gset_false:N \g__tblr_tracing_rowspec_bool,
+ +target .code:n = \bool_gset_true:N \g__tblr_tracing_target_bool,
+ -target .code:n = \bool_gset_false:N \g__tblr_tracing_target_bool,
+ +cellspan .code:n = \bool_gset_true:N \g__tblr_tracing_cellspan_bool,
+ -cellspan .code:n = \bool_gset_false:N \g__tblr_tracing_cellspan_bool,
+ all .code:n = \__tblr_enable_all_tracings:,
+ none .code:n = \__tblr_disable_all_tracings:,
+ }
+
+\cs_new_protected_nopar:Npn \__tblr_enable_all_tracings:
+ {
+ \bool_gset_true:N \g__tblr_tracing_text_bool
+ \bool_gset_true:N \g__tblr_tracing_command_bool
+ \bool_gset_true:N \g__tblr_tracing_table_bool
+ \bool_gset_true:N \g__tblr_tracing_column_bool
+ \bool_gset_true:N \g__tblr_tracing_row_bool
+ \bool_gset_true:N \g__tblr_tracing_cell_bool
+ \bool_gset_true:N \g__tblr_tracing_vline_bool
+ \bool_gset_true:N \g__tblr_tracing_hline_bool
+ \bool_gset_true:N \g__tblr_tracing_colspec_bool
+ \bool_gset_true:N \g__tblr_tracing_rowspec_bool
+ \bool_gset_true:N \g__tblr_tracing_target_bool
+ \bool_gset_true:N \g__tblr_tracing_cellspan_bool
+ }
+
+\cs_new_protected_nopar:Npn \__tblr_disable_all_tracings:
+ {
+ \bool_gset_false:N \g__tblr_tracing_text_bool
+ \bool_gset_false:N \g__tblr_tracing_command_bool
+ \bool_gset_false:N \g__tblr_tracing_table_bool
+ \bool_gset_false:N \g__tblr_tracing_column_bool
+ \bool_gset_false:N \g__tblr_tracing_row_bool
+ \bool_gset_false:N \g__tblr_tracing_cell_bool
+ \bool_gset_false:N \g__tblr_tracing_vline_bool
+ \bool_gset_false:N \g__tblr_tracing_hline_bool
+ \bool_gset_false:N \g__tblr_tracing_colspec_bool
+ \bool_gset_false:N \g__tblr_tracing_rowspec_bool
+ \bool_gset_false:N \g__tblr_tracing_target_bool
+ \bool_gset_false:N \g__tblr_tracing_cellspan_bool
+ }
+
+\NewDocumentCommand \LogTabularrayTracing { m }
+ {
+ \keys_set:nn { tblr-log-tracing } {#1}
+ }
+\cs_new_eq:NN \LogTblrTracing \LogTabularrayTracing
+
+\keys_define:nn { tblr-log-tracing }
+ {
+ unknown .code:n = \__tblr_log_tracing:N \l_keys_key_str
+ }
+
+\cs_new_protected:Npn \__tblr_log_tracing:N #1
+ {
+ \bool_if:cT { g__tblr_tracing_ #1 _bool }
+ { \cs:w __tblr_log_tracing _ #1 : \cs_end: }
+ }
+
+\cs_new_protected:Npn \__tblr_log_tracing_text:
+ {
+ \__tblr_prop_log:n { text }
+ }
+
+\cs_new_protected:Npn \__tblr_log_tracing_command:
+ {
+ \__tblr_prop_log:n { command }
+ }
+
+\cs_new_protected:Npn \__tblr_log_tracing_table:
+ {
+ \__tblr_prop_log:n { table }
+ }
+
+\cs_new_protected:Npn \__tblr_log_tracing_column:
+ {
+ \__tblr_prop_log:n { column }
+ }
+
+\cs_new_protected:Npn \__tblr_log_tracing_row:
+ {
+ \__tblr_data_log:n { row }
+ }
+
+\cs_new_protected:Npn \__tblr_log_tracing_cell:
+ {
+ \__tblr_prop_log:n { cell }
+ }
+
+\cs_new_protected:Npn \__tblr_log_tracing_vline:
+ {
+ \__tblr_prop_log:n { vline }
+ }
+
+\cs_new_protected:Npn \__tblr_log_tracing_hline:
+ {
+ \__tblr_prop_log:n { hline }
+ }
+
+\cs_new_protected:Npn \__tblr_log_tracing_colspec:
+ {
+ \tl_if_eq:NnT \g__tblr_column_or_row_tl { column }
+ { \tl_log:N \g__tblr_expanded_colrow_spec_tl }
+ }
+
+\cs_new_protected:Npn \__tblr_log_tracing_rowspec:
+ {
+ \tl_if_eq:NnT \g__tblr_column_or_row_tl { row }
+ { \tl_log:N \g__tblr_expanded_colrow_spec_tl }
+ }
+
+\cs_new_protected:Npn \__tblr_log_tracing_target:
+ {
+ \dim_log:N \l__column_target_dim
+ \prop_log:N \l__column_coefficient_prop
+ \prop_log:N \l__column_natural_width_prop
+ \prop_log:N \l__column_computed_width_prop
+ }
+
+\cs_new_protected:Npn \__tblr_log_tracing_cellspan:
+ {
+ \prop_log:N \l__tblr_col_item_skip_size_prop
+ \prop_log:N \l__tblr_col_span_size_prop
+ \prop_log:N \l__tblr_row_item_skip_size_prop
+ \prop_log:N \l__tblr_row_span_size_prop
+ \prop_log:N \l__tblr_row_span_to_row_prop
+ }
+
+\cs_new_protected:Npn \__tblr_do_if_tracing:nn #1 #2
+ {
+ \bool_if:cT { g__tblr_tracing_ #1 _bool } {#2}
+ }
+
+\ExplSyntaxOff
diff --git a/macros/latex/contrib/tabularray/tabularray.pdf b/macros/latex/contrib/tabularray/tabularray.pdf
index 7b00466957..05c0d50e11 100644
--- a/macros/latex/contrib/tabularray/tabularray.pdf
+++ b/macros/latex/contrib/tabularray/tabularray.pdf
Binary files differ
diff --git a/macros/latex/contrib/tabularray/tabularray.sty b/macros/latex/contrib/tabularray/tabularray.sty
index 90ddaadd34..8e5c2b9369 100644
--- a/macros/latex/contrib/tabularray/tabularray.sty
+++ b/macros/latex/contrib/tabularray/tabularray.sty
@@ -12,7 +12,7 @@
\NeedsTeXFormat{LaTeX2e}
\RequirePackage{expl3}
-\ProvidesExplPackage{tabularray}{2021-05-25}{2021J}
+\ProvidesExplPackage{tabularray}{2021-06-05}{2021K}
{Typeset tabulars and arrays with LaTeX3}
\RequirePackage{xparse}
@@ -97,60 +97,78 @@
\box_new:N \l__tblr_c_box % for cell box
\box_new:N \l__tblr_d_box
+%% Some counters for row and column numbering
+\newcounter{rownum}
+\newcounter{colnum}
+\newcounter{rowcount}
+\newcounter{colcount}
+
%%% --------------------------------------------------------
%% \section{Data Structures Based on Property Lists}
%%% --------------------------------------------------------
\int_new:N \g_tblr_level_int % store table nesting level
+\cs_new_protected:Npn \__tblr_clear_prop_lists:
+ {
+ \prop_gclear_new:c { g__tblr_text_ \int_use:N \g_tblr_level_int _prop }
+ \prop_gclear_new:c { g__tblr_command_ \int_use:N \g_tblr_level_int _prop }
+ \prop_gclear_new:c { g__tblr_table_ \int_use:N \g_tblr_level_int _prop }
+ \prop_gclear_new:c { g__tblr_row_ \int_use:N \g_tblr_level_int _prop }
+ \prop_gclear_new:c { g__tblr_column_ \int_use:N \g_tblr_level_int _prop }
+ \prop_gclear_new:c { g__tblr_cell_ \int_use:N \g_tblr_level_int _prop }
+ \prop_gclear_new:c { g__tblr_hline_ \int_use:N \g_tblr_level_int _prop }
+ \prop_gclear_new:c { g__tblr_vline_ \int_use:N \g_tblr_level_int _prop }
+ }
+
\cs_new_protected:Npn \__tblr_prop_gput:nnn #1 #2 #3
{
\prop_gput:cnn
- { g_tblr_#1_ \int_use:N \g_tblr_level_int _prop } { #2 } { #3 }
+ { g__tblr_#1_ \int_use:N \g_tblr_level_int _prop } { #2 } { #3 }
}
\cs_generate_variant:Nn \__tblr_prop_gput:nnn { nnx, nnV, nxn, nxx, nxV }
\cs_new:Npn \__tblr_prop_item:nn #1 #2
{
- \prop_item:cn { g_tblr_#1_ \int_use:N \g_tblr_level_int _prop } { #2 }
+ \prop_item:cn { g__tblr_#1_ \int_use:N \g_tblr_level_int _prop } { #2 }
}
\cs_generate_variant:Nn \__tblr_prop_item:nn { ne }
\cs_new_protected:Npn \__tblr_prop_if_in:nnT #1
{
- \prop_if_in:cnT { g_tblr_#1_ \int_use:N \g_tblr_level_int _prop }
+ \prop_if_in:cnT { g__tblr_#1_ \int_use:N \g_tblr_level_int _prop }
}
\cs_new_protected:Npn \__tblr_prop_if_in:nnF #1
{
- \prop_if_in:cnF { g_tblr_#1_ \int_use:N \g_tblr_level_int _prop }
+ \prop_if_in:cnF { g__tblr_#1_ \int_use:N \g_tblr_level_int _prop }
}
\cs_new_protected:Npn \__tblr_prop_if_in:nnTF #1
{
- \prop_if_in:cnTF { g_tblr_#1_ \int_use:N \g_tblr_level_int _prop }
+ \prop_if_in:cnTF { g__tblr_#1_ \int_use:N \g_tblr_level_int _prop }
}
\prg_generate_conditional_variant:Nnn \__tblr_prop_if_in:nn { nx } { T, F, TF }
\cs_new_protected:Npn \__tblr_prop_log:n #1
{
- \prop_log:c { g_tblr_#1_ \int_use:N \g_tblr_level_int _prop }
+ \prop_log:c { g__tblr_#1_ \int_use:N \g_tblr_level_int _prop }
}
\cs_new_protected:Npn \__tblr_prop_map_inline:nn #1 #2
{
- \prop_map_inline:cn { g_tblr_#1_ \int_use:N \g_tblr_level_int _prop } {#2}
+ \prop_map_inline:cn { g__tblr_#1_ \int_use:N \g_tblr_level_int _prop } {#2}
}
\cs_new_protected:Npn \__tblr_prop_gput_if_larger:nnn #1 #2 #3
{
\__tblr_gput_if_larger:cnn
- { g_tblr_#1_ \int_use:N \g_tblr_level_int _prop } { #2 } { #3 }
+ { g__tblr_#1_ \int_use:N \g_tblr_level_int _prop } { #2 } { #3 }
}
\cs_generate_variant:Nn \__tblr_prop_gput_if_larger:nnn { nnx, nnV, nxn, nxx, nxV }
\cs_new_protected:Npn \__tblr_prop_gadd_dimen_value:nnn #1 #2 #3
{
\__tblr_gadd_dimen_value:cnn
- { g_tblr_#1_ \int_use:N \g_tblr_level_int _prop } { #2 } { #3 }
+ { g__tblr_#1_ \int_use:N \g_tblr_level_int _prop } { #2 } { #3 }
}
\cs_generate_variant:Nn \__tblr_prop_gadd_dimen_value:nnn { nnx, nnV, nxn, nxx }
@@ -193,27 +211,90 @@
}
\cs_generate_variant:Nn \__tblr_gadd_dimen_value:Nnn { cnn }
-%% Some counters for row and column numbering
-\newcounter{rownum}
-\newcounter{colnum}
-\newcounter{rowcount}
-\newcounter{colcount}
+%%% --------------------------------------------------------
+%% \section{Data Structures Based on Token Lists}
+%%% --------------------------------------------------------
+
+\cs_new_protected:Npn \__tblr_clear_text_lists:
+ {
+ \__tblr_clear_one_text_lists:n { text }
+ \__tblr_clear_one_text_lists:n { hline }
+ \__tblr_clear_one_text_lists:n { vline }
+ }
+
+\cs_new_protected:Npn \__tblr_clear_one_text_lists:n #1
+ {
+ \clist_if_exist:cTF { g__tblr_#1_ \int_use:N \g_tblr_level_int _clist }
+ {
+ \clist_map_inline:cn { g__tblr_#1_ \int_use:N \g_tblr_level_int _clist }
+ {
+ \tl_gclear:c { g__tblr_text_ \int_use:N \g_tblr_level_int _#1_##1_tl }
+ }
+ }
+ { \clist_new:c { g__tblr_#1_ \int_use:N \g_tblr_level_int _clist } }
+ }
+
+\cs_new_protected:Npn \__tblr_text_gput:nnn #1 #2 #3
+ {
+ \tl_gset:cn
+ { g__tblr_text_ \int_use:N \g_tblr_level_int _#1_#2_tl } {#3}
+ \clist_gput_right:cx { g__tblr_#1_ \int_use:N \g_tblr_level_int _clist } {#2}
+ }
+\cs_generate_variant:Nn \__tblr_text_gput:nnn { nne, nnV, nen, nee, neV }
+
+\cs_new:Npn \__tblr_text_item:nn #1 #2
+ {
+ \tl_if_exist:cT { g__tblr_text_ \int_use:N \g_tblr_level_int _#1_#2_tl }
+ {
+ \exp_args:Nv \exp_not:n
+ { g__tblr_text_ \int_use:N \g_tblr_level_int _#1_#2_tl }
+ }
+ }
+\cs_generate_variant:Nn \__tblr_text_item:nn { ne }
+
+\cs_new_protected:Npn \__tblr_text_gput_if_larger:nnn #1 #2 #3
+ {
+ \tl_set:Nx \l__tblr_put_if_larger_tl { \__tblr_text_item:nn {#1} {#2} }
+ \bool_lazy_or:nnT
+ { \tl_if_empty_p:N \l__tblr_put_if_larger_tl }
+ { \dim_compare_p:nNn {#3} > { \l__tblr_put_if_larger_tl } }
+ { \__tblr_text_gput:nnn {#1} {#2} {#3} }
+ }
+\cs_generate_variant:Nn \__tblr_text_gput_if_larger:nnn { nne, nnV, nen, nee, neV }
+
+\cs_new_protected:Npn \__tblr_text_log:n #1
+ {
+ \clist_gremove_duplicates:c
+ { g__tblr_#1_ \int_use:N \g_tblr_level_int _clist }
+ \tl_log:n { ----------~----------~----------~----------~---------- }
+ \clist_map_inline:cn { g__tblr_#1_ \int_use:N \g_tblr_level_int _clist }
+ {
+ \tl_log:x
+ {
+ \space { #1 ##1 } ~\space=>~\space { \__tblr_text_item:nn {#1} {##1} }
+ }
+ }
+ }
%%% --------------------------------------------------------
%% \section{Data Structures Based on Integer Arrays}
%%% --------------------------------------------------------
-\int_new:N \g__tblr_array_int
+\msg_new:nnn { tabularray } { intarray-beyond-bound }
+ { Position ~ #2 ~ is ~ beyond ~ the ~ bound ~ of ~ intarray ~ #1.}
-\cs_new_protected:Npn \__tblr_initial_table_data:
+\cs_new_protected:Npn \__tblr_intarray_gset:Nnn #1 #2 #3
{
- \int_gincr:N \g__tblr_array_int
- \intarray_new:cn { g__tblr_row_ \int_use:N \g__tblr_array_int _intarray }
- { \g__tblr_data_row_key_count_int * \c@rowcount }
- \cs_set_eq:cc { g__tblr_row_ \int_use:N \g_tblr_level_int _intarray }
- { g__tblr_row_ \int_use:N \g__tblr_array_int _intarray }
- %\intarray_log:c { g__tblr_row_ \int_use:N \g_tblr_level_int _intarray }
+ \bool_lazy_or:nnTF
+ { \int_compare_p:nNn {#2} < {0} }
+ { \int_compare_p:nNn {#2} > {\intarray_count:N #1} }
+ {
+ \bool_if:NT \g__tblr_tracing_intarray_bool
+ { \msg_warning:nnnn { tabularray } { intarray-beyond-bound } {#1} {#2} }
+ }
+ { \intarray_gset:Nnn #1 {#2} {#3} }
}
+\cs_generate_variant:Nn \__tblr_intarray_gset:Nnn { cnn }
%% #1: data name; #2: key name; #3: value type
\cs_new_protected:Npn \__tblr_data_new_key:nnn #1 #2 #3
@@ -231,7 +312,6 @@
}
\int_new:N \g__tblr_data_row_key_count_int
-
\__tblr_data_new_key:nnn { row } { height } { dim }
\__tblr_data_new_key:nnn { row } { coefficient } { dec }
\__tblr_data_new_key:nnn { row } { abovesep } { dim }
@@ -242,6 +322,52 @@
\__tblr_data_new_key:nnn { row } { @row-upper } { dim }
\__tblr_data_new_key:nnn { row } { @row-lower } { dim }
+\int_new:N \g__tblr_data_column_key_count_int
+\__tblr_data_new_key:nnn { column } { width } { dim }
+\__tblr_data_new_key:nnn { column } { coefficient } { dec }
+\__tblr_data_new_key:nnn { column } { leftsep } { dim }
+\__tblr_data_new_key:nnn { column } { rightsep } { dim }
+\__tblr_data_new_key:nnn { column } { @col-width } { dim }
+
+\int_new:N \g__tblr_data_cell_key_count_int
+\__tblr_data_new_key:nnn { cell } { width } { dim }
+\__tblr_data_new_key:nnn { cell } { rowspan } { int }
+\__tblr_data_new_key:nnn { cell } { colspan } { int }
+\__tblr_data_new_key:nnn { cell } { halign } { str }
+\__tblr_data_new_key:nnn { cell } { valign } { str }
+\__tblr_data_new_key:nnn { cell } { background } { str }
+\__tblr_data_new_key:nnn { cell } { omit } { int }
+\__tblr_data_new_key:nnn { cell } { @cell-width } { dim }
+\__tblr_data_new_key:nnn { cell } { @cell-height } { dim }
+\__tblr_data_new_key:nnn { cell } { @cell-depth } { dim }
+
+\clist_const:Nn \g__tblr_data_clist { row, column, cell }
+\tl_const:Nn \g__tblr_data_row_count_tl { \c@rowcount }
+\tl_const:Nn \g__tblr_data_column_count_tl { \c@colcount }
+\tl_const:Nn \g__tblr_data_cell_count_tl { \c@rowcount * \c@colcount }
+\tl_const:Nn \g__tblr_data_row_index_number_tl {1}
+\tl_const:Nn \g__tblr_data_column_index_number_tl {1}
+\tl_const:Nn \g__tblr_data_cell_index_number_tl {2}
+\int_new:N \g__tblr_array_int
+
+\cs_new_protected:Npn \__tblr_initial_table_data:
+ {
+ \clist_map_function:NN \g__tblr_data_clist \__tblr_initial_one_data:n
+ }
+
+\cs_new_protected:Npn \__tblr_initial_one_data:n #1
+ {
+ \int_gincr:N \g__tblr_array_int
+ \intarray_new:cn { g__tblr_#1_ \int_use:N \g__tblr_array_int _intarray }
+ {
+ \int_use:c { g__tblr_data_#1_key_count_int }
+ * \tl_use:c { g__tblr_data_#1_count_tl }
+ }
+ \cs_set_eq:cc { g__tblr_#1_ \int_use:N \g_tblr_level_int _intarray }
+ { g__tblr_#1_ \int_use:N \g__tblr_array_int _intarray }
+ %\intarray_log:c { g__tblr_#1_ \int_use:N \g_tblr_level_int _intarray }
+ }
+
%% #1: data name; #2: data index; #3: key name
\cs_new:Npn \__tblr_data_key_to_int:nnn #1 #2 #3
{
@@ -249,8 +375,17 @@
+ \tl_use:c { g__tblr_data_#1_key_number_#3_tl }
}
+%% #1: data name; #2: data index 1; #3: data index 2; #4: key name
+\cs_new:Npn \__tblr_data_key_to_int:nnnn #1 #2 #3 #4
+ {
+ ( #2 - 1 ) * \c@colcount * \int_use:c { g__tblr_data_#1_key_count_int }
+ + ( #3 - 1 ) * \int_use:c { g__tblr_data_#1_key_count_int }
+ + \tl_use:c { g__tblr_data_#1_key_number_#4_tl }
+ }
+
\int_new:N \l__tblr_key_count_int
\int_new:N \l__tblr_key_quotient_int
+\int_new:N \l__tblr_key_quotient_two_int
\int_new:N \l__tblr_key_remainder_int
%% #1: data name; #2: array position;
@@ -275,11 +410,50 @@
{ g__tblr_data_#1_key_name_ \int_use:N \l__tblr_key_remainder_int _tl }
}
+%% #1: data name; #2: array position;
+%% #3: returning tl with index 1; #4: returning tl with index 2;
+%% #5: returning tl with key name
+\cs_new:Npn \__tblr_data_int_to_key:nnNNN #1 #2 #3 #4 #5
+ {
+ \int_set_eq:Nc \l__tblr_key_count_int { g__tblr_data_#1_key_count_int }
+ \int_set:Nn \l__tblr_key_quotient_int
+ {
+ \int_div_truncate:nn
+ { #2 + \l__tblr_key_count_int - 1 } { \l__tblr_key_count_int }
+ }
+ \int_set:Nn \l__tblr_key_remainder_int
+ {
+ #2 + \l__tblr_key_count_int
+ - \l__tblr_key_quotient_int * \l__tblr_key_count_int
+ }
+ \int_compare:nNnT { \l__tblr_key_remainder_int } = { 0 }
+ { \int_set_eq:NN \l__tblr_key_remainder_int \l__tblr_key_count_int }
+ \tl_set_eq:Nc #5
+ { g__tblr_data_#1_key_name_ \int_use:N \l__tblr_key_remainder_int _tl }
+ \int_set:Nn \l__tblr_key_quotient_two_int
+ {
+ \int_div_truncate:nn
+ { \l__tblr_key_quotient_int + \c@colcount - 1 } { \c@colcount }
+ }
+ \int_set:Nn \l__tblr_key_remainder_int
+ {
+ \l__tblr_key_quotient_int + \c@colcount
+ - \l__tblr_key_quotient_two_int * \c@colcount
+ }
+ \int_compare:nNnT { \l__tblr_key_remainder_int } = { 0 }
+ { \int_set_eq:NN \l__tblr_key_remainder_int \c@colcount }
+ \tl_set:Nx #4 { \int_use:N \l__tblr_key_remainder_int }
+ \tl_set:Nx #3 { \int_use:N \l__tblr_key_quotient_two_int }
+ }
+
+\tl_new:N \g__tblr_data_int_from_value_tl
+
%% #1: data name; #2: key name; #3: value
-\cs_new:Npn \__tblr_data_value_to_int:nnn #1 #2 #3
+%% The result will be stored in \g__tblr_data_int_from_value_tl
+\cs_new_protected:Npn \__tblr_data_int_from_value:nnn #1 #2 #3
{
\cs:w
- __tblr_data_ \tl_use:c { g__tblr_data_#1_key_type_#2_tl } _to_int:n
+ __tblr_data_int_from_ \tl_use:c { g__tblr_data_#1_key_type_#2_tl } :n
\cs_end:
{#3}
}
@@ -294,9 +468,19 @@
}
\cs_generate_variant:Nn \__tblr_data_int_to_value:nnn { nne, nVe }
-\cs_new:Npn \__tblr_data_dim_to_int:n #1
+\cs_new_protected:Npn \__tblr_data_int_from_int:n #1
{
- \dim_to_decimal_in_sp:n {#1}
+ \tl_gset:Nn \g__tblr_data_int_from_value_tl {#1}
+ }
+
+\cs_new:Npn \__tblr_data_int_to_int:n #1
+ {
+ #1
+ }
+
+\cs_new_protected:Npn \__tblr_data_int_from_dim:n #1
+ {
+ \tl_gset:Nx \g__tblr_data_int_from_value_tl { \dim_to_decimal_in_sp:n {#1} }
}
%% Return a dimension in pt so that it's easier to understand in tracing messages
@@ -307,9 +491,10 @@
\dim_to_decimal:n { #1 sp } pt
}
-\cs_new:Npn \__tblr_data_dec_to_int:n #1
+\cs_new_protected:Npn \__tblr_data_int_from_dec:n #1
{
- \dim_to_decimal_in_sp:n {#1 pt}
+ \tl_gset:Nx \g__tblr_data_int_from_value_tl
+ { \dim_to_decimal_in_sp:n {#1 pt} }
}
\cs_new:Npn \__tblr_data_int_to_dec:n #1
@@ -317,17 +502,57 @@
\dim_to_decimal:n {#1 sp}
}
+\int_new:N \g__tblr_data_str_value_count_int
+\tl_set:cn { g__tblr_data_0_to_str_tl } { }
+
+\cs_new_protected:Npn \__tblr_data_int_from_str:n #1
+ {
+ \tl_if_exist:cTF { g__tblr_data_#1_to_int_tl }
+ {
+ \tl_gset_eq:Nc \g__tblr_data_int_from_value_tl
+ { g__tblr_data_#1_to_int_tl }
+ }
+ {
+ \int_gincr:N \g__tblr_data_str_value_count_int
+ \tl_gset:cx { g__tblr_data_#1_to_int_tl }
+ { \int_use:N \g__tblr_data_str_value_count_int }
+ \tl_gset:cx
+ { g__tblr_data_ \int_use:N \g__tblr_data_str_value_count_int _to_str_tl }
+ { #1 }
+ \tl_gset:Nx \g__tblr_data_int_from_value_tl
+ { \int_use:N \g__tblr_data_str_value_count_int }
+ }
+ }
+
+\cs_new:Npn \__tblr_data_int_to_str:n #1
+ {
+ \tl_use:c { g__tblr_data_#1_to_str_tl }
+ }
+
%% #1: data name; #2: data index; #3: key; #4: value
\cs_new_protected:Npn \__tblr_data_gput:nnnn #1 #2 #3 #4
{
- \intarray_gset:cnn
+ \__tblr_data_int_from_value:nnn {#1} {#3} {#4}
+ \__tblr_intarray_gset:cnn
{ g__tblr_#1_ \int_use:N \g_tblr_level_int _intarray }
{ \__tblr_data_key_to_int:nnn {#1} {#2} {#3} }
- { \__tblr_data_value_to_int:nnn {#1} {#3} {#4} }
+ { \g__tblr_data_int_from_value_tl }
}
\cs_generate_variant:Nn \__tblr_data_gput:nnnn
{ nnne, nnnV, nenn, nene, nenV, nVnn }
+%% #1: data name; #2: data index 1; #3: data index 2; #4: key; #5: value
+\cs_new_protected:Npn \__tblr_data_gput:nnnnn #1 #2 #3 #4 #5
+ {
+ \__tblr_data_int_from_value:nnn {#1} {#4} {#5}
+ \__tblr_intarray_gset:cnn
+ { g__tblr_#1_ \int_use:N \g_tblr_level_int _intarray }
+ { \__tblr_data_key_to_int:nnnn {#1} {#2} {#3} {#4} }
+ { \g__tblr_data_int_from_value_tl }
+ }
+\cs_generate_variant:Nn \__tblr_data_gput:nnnnn
+ { nnnne, nnnnV, neenn, neene, neenV, neeen, nVVnn }
+
%% #1: data name; #2: data index; #3: key
\cs_new:Npn \__tblr_data_item:nnn #1 #2 #3
{
@@ -339,13 +564,32 @@
}
\cs_generate_variant:Nn \__tblr_data_item:nnn { nen }
+%% #1: data name; #2: data index 1; #3: data index 2; #4: key
+\cs_new:Npn \__tblr_data_item:nnnn #1 #2 #3 #4
+ {
+ \__tblr_data_int_to_value:nne {#1} {#4}
+ {
+ \intarray_item:cn { g__tblr_#1_ \int_use:N \g_tblr_level_int _intarray }
+ { \__tblr_data_key_to_int:nnnn {#1} {#2} {#3} {#4} }
+ }
+ }
+\cs_generate_variant:Nn \__tblr_data_item:nnnn { neen }
+
\tl_new:N \l__tblr_data_key_tl
\tl_new:N \l__tblr_data_index_tl
+\tl_new:N \l__tblr_data_index_two_tl
\cs_new_protected:Npn \__tblr_data_log:n #1
{
+ \use:c { __tblr_data_log_ \use:c { g__tblr_data_#1_index_number_tl } :n } {#1}
+ \__tblr_prop_log:n {#1}
+ }
+
+\cs_new_protected:cpn { __tblr_data_log_1:n } #1
+ {
%\intarray_log:c { g__tblr_#1_ \int_use:N \g_tblr_level_int _intarray }
\tl_set:Nx \l_tmpa_tl { g__tblr_#1_ \int_use:N \g_tblr_level_int _intarray }
+ \tl_log:n { ----------~----------~----------~----------~---------- }
\int_step_inline:nn
{ \intarray_count:c { \l_tmpa_tl } }
{
@@ -353,52 +597,80 @@
\l__tblr_data_index_tl \l__tblr_data_key_tl
\tl_log:x
{
+ \space
{ #1 [\l__tblr_data_index_tl] / \l__tblr_data_key_tl }
- \space = \space
+ ~\space => ~\space
+ {
+ \__tblr_data_int_to_value:nVe {#1} \l__tblr_data_key_tl
+ { \intarray_item:cn { \l_tmpa_tl } {##1} }
+ }
+ }
+ }
+ }
+
+\cs_new_protected:cpn { __tblr_data_log_2:n } #1
+ {
+ %\intarray_log:c { g__tblr_#1_ \int_use:N \g_tblr_level_int _intarray }
+ \tl_set:Nx \l_tmpa_tl { g__tblr_#1_ \int_use:N \g_tblr_level_int _intarray }
+ \tl_log:n { ----------~----------~----------~----------~---------- }
+ \int_step_inline:nn
+ { \intarray_count:c { \l_tmpa_tl } }
+ {
+ \__tblr_data_int_to_key:nnNNN {#1} {##1}
+ \l__tblr_data_index_tl \l__tblr_data_index_two_tl \l__tblr_data_key_tl
+ \tl_log:x
+ {
+ \space
+ {
+ #1 [\l__tblr_data_index_tl][\l__tblr_data_index_two_tl]
+ / \l__tblr_data_key_tl
+ }
+ ~\space => ~\space
{
\__tblr_data_int_to_value:nVe {#1} \l__tblr_data_key_tl
{ \intarray_item:cn { \l_tmpa_tl } {##1} }
}
}
}
- \__tblr_prop_log:n {#1}
}
%% #1: data name; #2: row index; #3: key; #4: value
\cs_new_protected:Npn \__tblr_data_gput_if_larger:nnnn #1 #2 #3 #4
{
+ \__tblr_data_int_from_value:nnn {#1} {#3} {#4}
\__tblr_array_gput_if_larger:cnn
{ g__tblr_#1_ \int_use:N \g_tblr_level_int _intarray }
{ \__tblr_data_key_to_int:nnn {#1} {#2} {#3} }
- { \__tblr_data_value_to_int:nnn {#1} {#3} {#4} }
+ { \g__tblr_data_int_from_value_tl }
}
\cs_generate_variant:Nn \__tblr_data_gput_if_larger:nnnn { nnne, nnnV, nene, nenV }
\cs_new_protected:Npn \__tblr_array_gput_if_larger:Nnn #1 #2 #3
{
\int_compare:nNnT {#3} > { \intarray_item:Nn #1 {#2} }
- { \intarray_gset:Nnn #1 {#2} {#3} }
+ { \__tblr_intarray_gset:Nnn #1 {#2} {#3} }
}
\cs_generate_variant:Nn \__tblr_array_gput_if_larger:Nnn { cnn }
%% #1: data name; #2: data index; #3: key; #4: value
\cs_new_protected:Npn \__tblr_data_gadd_dimen_value:nnnn #1 #2 #3 #4
{
+ \__tblr_data_int_from_value:nnn {#1} {#3} {#4}
\__tblr_array_gadd_value:cnn
{ g__tblr_#1_ \int_use:N \g_tblr_level_int _intarray }
{ \__tblr_data_key_to_int:nnn {#1} {#2} {#3} }
- { \__tblr_data_value_to_int:nnn {#1} {#3} {#4} }
+ { \g__tblr_data_int_from_value_tl }
}
\cs_generate_variant:Nn \__tblr_data_gadd_dimen_value:nnnn { nnne, nnnV, nene }
\cs_new_protected:Npn \__tblr_array_gadd_value:Nnn #1 #2 #3
{
- \intarray_gset:Nnn #1 {#2} { \intarray_item:Nn #1 {#2} + #3 }
+ \__tblr_intarray_gset:Nnn #1 {#2} { \intarray_item:Nn #1 {#2} + #3 }
}
\cs_generate_variant:Nn \__tblr_array_gadd_value:Nnn { cnn }
\bool_new:N \g__tblr_use_intarray_bool
-%\bool_set_true:N \g__tblr_use_intarray_bool
+\bool_set_true:N \g__tblr_use_intarray_bool
\AtBeginDocument
{
@@ -408,10 +680,18 @@
{
\__tblr_prop_gput:nnn {#1} { [#2] / #3 } {#4}
}
+ \cs_set_protected:Npn \__tblr_data_gput:nnnnn #1 #2 #3 #4 #5
+ {
+ \__tblr_prop_gput:nnn {#1} { [#2][#3] / #4 } {#5}
+ }
\cs_set:Npn \__tblr_data_item:nnn #1 #2 #3
{
\__tblr_prop_item:nn {#1} { [#2] / #3 }
}
+ \cs_set:Npn \__tblr_data_item:nnnn #1 #2 #3 #4
+ {
+ \__tblr_prop_item:nn {#1} { [#2][#3] / #4 }
+ }
\cs_set_protected:Npn \__tblr_data_log:n #1
{
\__tblr_prop_log:n {#1}
@@ -420,10 +700,18 @@
{
\__tblr_prop_gput_if_larger:nnn {#1} { [#2] / #3 } {#4}
}
+ \cs_set_protected:Npn \__tblr_data_gput_if_larger:nnnnn #1 #2 #3 #4 #5
+ {
+ \__tblr_prop_gput_if_larger:nnn {#1} { [#2][#3] / #4 } {#5}
+ }
\cs_set_protected:Npn \__tblr_data_gadd_dimen_value:nnnn #1 #2 #3 #4
{
\__tblr_prop_gadd_dimen_value:nnn {#1} { [#2] / #3 } {#4}
}
+ \cs_set_protected:Npn \__tblr_data_gadd_dimen_value:nnnnn #1 #2 #3 #4 #5
+ {
+ \__tblr_prop_gadd_dimen_value:nnn {#1} { [#2][#3] / #4 } {#5}
+ }
}
}
@@ -490,7 +778,6 @@
\regex_const:Nn \c__tblr_split_selector_name_regex { ^ ( [A-Za-z] {2,} ) ( . * ) }
\seq_new:N \l__tblr_childs_split_seq
\seq_new:N \l__tblr_childs_regex_seq
-\tl_new:N \l__tblr_childs_end_tl
\tl_new:N \l__tblr_childs_selector_tl
%% #1, child specifications; #2, total number.
@@ -524,15 +811,16 @@
{
\seq_set_split:Nnn \l__tblr_childs_split_seq {,} {#1}
\seq_map_inline:Nn \l__tblr_childs_split_seq
- { \__tblr_get_childs_normal_aux:w ##1 - s \scan_stop }
+ {
+ \tl_if_in:nnTF {##1} {-}
+ { \__tblr_get_childs_normal_aux:w ##1 \scan_stop }
+ { \__tblr_get_childs_normal_aux:w ##1 - ##1 \scan_stop }
+ }
}
-\cs_new_protected_nopar:Npn \__tblr_get_childs_normal_aux:w #1 - #2 #3 \scan_stop
+\cs_new_protected_nopar:Npn \__tblr_get_childs_normal_aux:w #1 - #2 \scan_stop
{
- \tl_if_eq:nnTF {#2} {s}
- { \tl_set:Nn \l__tblr_childs_end_tl {#1} }
- { \tl_set:Nn \l__tblr_childs_end_tl {#2} }
- \int_step_inline:nnn {#1} { \l__tblr_childs_end_tl }
+ \int_step_inline:nnn {#1} {#2}
{ \clist_put_right:Nn \l_tblr_childs_clist {##1} }
}
@@ -780,11 +1068,12 @@
{
\tl_clear:N \l__tblr_hline_num_tl
\tl_set:Nx \l__tblr_hline_count_tl
- { \__tblr_prop_item:ne { hline } { [\int_use:N \c@rownum] / @hline-count } }
- \tl_if_empty:NTF \l__tblr_hline_count_tl
+ { \__tblr_text_item:ne { hline } { [\int_use:N \c@rownum] / @hline-count } }
+ %% \l__tblr_hline_count_tl may be empty when rowspec has extra |'s
+ \int_compare:nNnTF { \l__tblr_hline_count_tl + 0 } = {0}
{
\tl_set:Nx \l__tblr_hline_num_tl { 1 }
- \__tblr_prop_gput:nxx { hline }
+ \__tblr_text_gput:nen { hline }
{ [\int_use:N \c@rownum] / @hline-count } { 1 }
}
{
@@ -806,7 +1095,7 @@
{
\tl_set:Nx \l__tblr_hline_count_tl
{ \int_eval:n { \l__tblr_hline_count_tl + 1 } }
- \__tblr_prop_gput:nxx { hline }
+ \__tblr_text_gput:nee { hline }
{ [\int_use:N \c@rownum] / @hline-count } { \l__tblr_hline_count_tl }
\tl_set_eq:NN \l__tblr_hline_num_tl \l__tblr_hline_count_tl
}
@@ -842,18 +1131,18 @@
\__tblr_get_childs:nx {#1} { \int_use:N \c@colcount }
\clist_map_inline:Nn \l_tblr_childs_clist
{
- \__tblr_prop_gput:nxx { hline }
+ \__tblr_text_gput:nee { hline }
{ [\int_use:N \c@rownum][##1](\l__tblr_hline_num_tl) / @dash }
{ \l__tblr_hline_dash_tl }
\tl_if_empty:NF \l__tblr_hline_wd_tl
{
- \__tblr_prop_gput:nxx { hline }
+ \__tblr_text_gput:nee { hline }
{ [\int_use:N \c@rownum][##1](\l__tblr_hline_num_tl) / wd }
{ \l__tblr_hline_wd_tl }
}
\tl_if_empty:NF \l__tblr_hline_fg_tl
{
- \__tblr_prop_gput:nxx { hline }
+ \__tblr_text_gput:nee { hline }
{ [\int_use:N \c@rownum][##1](\l__tblr_hline_num_tl) / fg }
{ \l__tblr_hline_fg_tl }
}
@@ -978,11 +1267,12 @@
{
\tl_clear:N \l__tblr_vline_num_tl
\tl_set:Nx \l__tblr_vline_count_tl
- { \__tblr_prop_item:ne { vline } { [\int_use:N \c@colnum] / @vline-count } }
- \tl_if_empty:NTF \l__tblr_vline_count_tl
+ { \__tblr_text_item:ne { vline } { [\int_use:N \c@colnum] / @vline-count } }
+ %% \l__tblr_vline_count_tl may be empty when colspec has extra |'s
+ \int_compare:nNnTF { \l__tblr_vline_count_tl + 0 } = {0}
{
\tl_set:Nx \l__tblr_vline_num_tl { 1 }
- \__tblr_prop_gput:nxx { vline }
+ \__tblr_text_gput:nen { vline }
{ [\int_use:N \c@colnum] / @vline-count } { 1 }
}
{
@@ -1004,7 +1294,7 @@
{
\tl_set:Nx \l__tblr_vline_count_tl
{ \int_eval:n { \l__tblr_vline_count_tl + 1 } }
- \__tblr_prop_gput:nxx { vline }
+ \__tblr_text_gput:nee { vline }
{ [\int_use:N \c@colnum] / @vline-count } { \l__tblr_vline_count_tl }
\tl_set_eq:NN \l__tblr_vline_num_tl \l__tblr_vline_count_tl
}
@@ -1039,18 +1329,18 @@
\__tblr_get_childs:nx {#1} { \int_use:N \c@rowcount }
\clist_map_inline:Nn \l_tblr_childs_clist
{
- \__tblr_prop_gput:nxx { vline }
+ \__tblr_text_gput:nee { vline }
{ [##1][\int_use:N \c@colnum](\l__tblr_vline_num_tl) / @dash }
{ \l__tblr_vline_dash_tl }
\tl_if_empty:NF \l__tblr_vline_wd_tl
{
- \__tblr_prop_gput:nxx { vline }
+ \__tblr_text_gput:nee { vline }
{ [##1][\int_use:N \c@colnum](\l__tblr_vline_num_tl) / wd }
{ \l__tblr_vline_wd_tl }
}
\tl_if_empty:NF \l__tblr_vline_fg_tl
{
- \__tblr_prop_gput:nxx { vline }
+ \__tblr_text_gput:nee { vline }
{ [##1][\int_use:N \c@colnum](\l__tblr_vline_num_tl) / fg }
{ \l__tblr_vline_fg_tl }
}
@@ -1150,42 +1440,77 @@
\keys_define:nn { tblr-cell-spec }
{
- l .code:n = \__tblr_prop_gput:nxx {cell}
- {[\int_use:N \c@rownum][\int_use:N \c@colnum] / halign} {l},
- c .code:n = \__tblr_prop_gput:nxx {cell}
- {[\int_use:N \c@rownum][\int_use:N \c@colnum] / halign} {c},
- r .code:n = \__tblr_prop_gput:nxx {cell}
- {[\int_use:N \c@rownum][\int_use:N \c@colnum] / halign} {r},
- t .code:n = \__tblr_prop_gput:nxx {cell}
- {[\int_use:N \c@rownum][\int_use:N \c@colnum] / valign} {t},
- p .code:n = \__tblr_prop_gput:nxx {cell}
- {[\int_use:N \c@rownum][\int_use:N \c@colnum] / valign} {t},
- m .code:n = \__tblr_prop_gput:nxx {cell}
- {[\int_use:N \c@rownum][\int_use:N \c@colnum] / valign} {m},
- b .code:n = \__tblr_prop_gput:nxx {cell}
- {[\int_use:N \c@rownum][\int_use:N \c@colnum] / valign} {b},
- h .code:n = \__tblr_prop_gput:nxx {cell}
- {[\int_use:N \c@rownum][\int_use:N \c@colnum] / valign} {h},
- f .code:n = \__tblr_prop_gput:nxx {cell}
- {[\int_use:N \c@rownum][\int_use:N \c@colnum] / valign} {f},
- wd .code:n = \__tblr_prop_gput:nxx {cell}
- {[\int_use:N \c@rownum][\int_use:N \c@colnum] / width} {#1},
- bg .code:n = \__tblr_prop_gput:nxx {cell}
- {[\int_use:N \c@rownum][\int_use:N \c@colnum] / background} {#1},
+ l .code:n = \__tblr_data_gput:neenn { cell }
+ { \int_use:N \c@rownum } { \int_use:N \c@colnum } { halign } {l},
+ c .code:n = \__tblr_data_gput:neenn { cell }
+ { \int_use:N \c@rownum } { \int_use:N \c@colnum } { halign } {c},
+ r .code:n = \__tblr_data_gput:neenn { cell }
+ { \int_use:N \c@rownum } { \int_use:N \c@colnum } { halign } {r},
+ t .code:n = \__tblr_data_gput:neenn { cell }
+ { \int_use:N \c@rownum } { \int_use:N \c@colnum } { valign} {t},
+ p .code:n = \__tblr_data_gput:neenn { cell }
+ { \int_use:N \c@rownum } { \int_use:N \c@colnum } { valign} {t},
+ m .code:n = \__tblr_data_gput:neenn { cell }
+ { \int_use:N \c@rownum } { \int_use:N \c@colnum } { valign} {m},
+ b .code:n = \__tblr_data_gput:neenn { cell }
+ { \int_use:N \c@rownum } { \int_use:N \c@colnum } { valign} {b},
+ h .code:n = \__tblr_data_gput:neenn { cell }
+ { \int_use:N \c@rownum } { \int_use:N \c@colnum } { valign} {h},
+ f .code:n = \__tblr_data_gput:neenn { cell }
+ { \int_use:N \c@rownum } { \int_use:N \c@colnum } { valign} {f},
+ wd .code:n = \__tblr_data_gput:neene { cell }
+ { \int_use:N \c@rownum } { \int_use:N \c@colnum } { width } {#1},
+ bg .code:n = \__tblr_data_gput:neene { cell }
+ { \int_use:N \c@rownum } { \int_use:N \c@colnum }
+ { background } {#1},
+ preto .code:n = \__tblr_cell_preto_text:n {#1},
+ appto .code:n = \__tblr_cell_appto_text:n {#1},
+ fg .code:n = \__tblr_cell_preto_text:n { \color{#1} },
+ font .code:n = \__tblr_cell_preto_text:n { #1 \selectfont },
unknown .code:n = \__tblr_cell_unknown_key:V \l_keys_key_str,
}
+\tl_new:N \l__tblr_cell_text_tl
+
+\cs_new_protected:Npn \__tblr_cell_preto_text:n #1
+ {
+ \__tblr_cell_preto_text:een
+ { \int_use:N \c@rownum } { \int_use:N \c@colnum } {#1}
+ }
+
+\cs_new_protected:Npn \__tblr_cell_preto_text:nnn #1 #2 #3
+ {
+ \tl_set:Nx \l__tblr_cell_text_tl { \__tblr_text_item:nn { text } { [#1][#2] } }
+ \tl_put_left:Nn \l__tblr_cell_text_tl {#3}
+ \__tblr_text_gput:nnV { text } { [#1][#2] } \l__tblr_cell_text_tl
+ }
+\cs_generate_variant:Nn \__tblr_cell_preto_text:nnn { nen, enn, een }
+
+\cs_new_protected:Npn \__tblr_cell_appto_text:n #1
+ {
+ \__tblr_cell_appto_text:een
+ { \int_use:N \c@rownum } { \int_use:N \c@colnum } {#1}
+ }
+
+\cs_new_protected:Npn \__tblr_cell_appto_text:nnn #1 #2 #3
+ {
+ \tl_set:Nx \l__tblr_cell_text_tl { \__tblr_text_item:ne { text } { [#1][#2] } }
+ \tl_put_right:Nn \l__tblr_cell_text_tl {#3}
+ \__tblr_text_gput:neV { text } { [#1][#2] } \l__tblr_cell_text_tl
+ }
+\cs_generate_variant:Nn \__tblr_cell_appto_text:nnn { nen, enn, een }
+
\cs_new_protected:Npn \__tblr_cell_unknown_key:n #1
{
\regex_match:NnTF \c__tblr_is_color_key_regex {#1}
{
- \__tblr_prop_gput:nxx {cell}
- {[\int_use:N \c@rownum][\int_use:N \c@colnum] / background} {#1}
+ \__tblr_data_gput:neene { cell }
+ { \int_use:N \c@rownum } { \int_use:N \c@colnum } { background } {#1}
}
{
\tl_set_rescan:Nnn \l__tblr_v_tl {} {#1}
- \__tblr_prop_gput:nxx {cell}
- { [\int_use:N \c@rownum][\int_use:N \c@colnum] / width }
+ \__tblr_data_gput:neene { cell }
+ { \int_use:N \c@rownum } { \int_use:N \c@colnum } { width }
{ \dim_eval:n { \l__tblr_v_tl } }
}
}
@@ -1196,14 +1521,14 @@
\int_compare:nNnT { #1 } > { 1 }
{
\__tblr_prop_gput:nnn {table} {rowspan} {true}
- \__tblr_prop_gput:nxn {cell}
- { [\int_use:N \c@rownum][\int_use:N \c@colnum] / rowspan } { #1 }
+ \__tblr_data_gput:neenn { cell }
+ { \int_use:N \c@rownum } { \int_use:N \c@colnum } { rowspan } {#1}
}
\int_compare:nNnT { #2 } > { 1 }
{
\__tblr_prop_gput:nnn {table} {colspan} {true}
- \__tblr_prop_gput:nxn {cell}
- { [\int_use:N \c@rownum][\int_use:N \c@colnum] / colspan } { #2 }
+ \__tblr_data_gput:neenn { cell }
+ { \int_use:N \c@rownum } { \int_use:N \c@colnum } { colspan } {#2}
}
\int_step_variable:nnNn
{ \int_use:N \c@rownum } { \int_eval:n { \c@rownum + #1 - 1 } } \l__tblr_i_tl
@@ -1216,17 +1541,17 @@
{ \int_compare_p:nNn { \l__tblr_i_tl } = { \c@rownum } }
{ \int_compare_p:nNn { \l__tblr_j_tl } = { \c@colnum } }
{
- \__tblr_prop_gput:nxx {cell}
- { [\l__tblr_i_tl][\l__tblr_j_tl] / omit } {true}
+ \__tblr_data_gput:neenn { cell }
+ { \l__tblr_i_tl } { \l__tblr_j_tl } { omit } {1}
}
\int_compare:nNnF { \l__tblr_i_tl } = { \c@rownum }
{
- \__tblr_prop_gput:nxx {hline}
+ \__tblr_text_gput:nen { hline }
{ [\l__tblr_i_tl][\l__tblr_j_tl] / omit } {true}
}
\int_compare:nNnF { \l__tblr_j_tl } = { \c@colnum }
{
- \__tblr_prop_gput:nxx {vline}
+ \__tblr_text_gput:nee { vline }
{ [\l__tblr_i_tl][\l__tblr_j_tl] / omit } {true}
}
}
@@ -1373,19 +1698,21 @@
{ \int_use:N \c@colnum } { valign } {f},
bg .code:n = \__tblr_set_key_for_every_column_cell:nnn
{ \int_use:N \c@colnum } { background } {#1},
- wd .code:n = \__tblr_prop_gput:nxx { column }
- { [\int_use:N \c@colnum] / width } { \dim_eval:n {#1} },
- co .code:n = \__tblr_prop_gput:nxx { column }
- { [\int_use:N \c@colnum] / coefficient } {#1},
- leftsep .code:n = \__tblr_prop_gput:nxx { column }
- { [\int_use:N \c@colnum] / leftsep } { \dim_eval:n {#1} },
- rightsep .code:n = \__tblr_prop_gput:nxx { column }
- { [\int_use:N \c@colnum] / rightsep } { \dim_eval:n {#1} },
+ fg .code:n = \__tblr_preto_text_for_every_column_cell:n { \color{#1} },
+ font .code:n = \__tblr_preto_text_for_every_column_cell:n { #1 \selectfont },
+ wd .code:n = \__tblr_data_gput:nene { column }
+ { \int_use:N \c@colnum } { width } { \dim_eval:n {#1} },
+ co .code:n = \__tblr_data_gput:nene { column }
+ { \int_use:N \c@colnum } { coefficient } {#1},
+ leftsep .code:n = \__tblr_data_gput:nene { column }
+ { \int_use:N \c@colnum } { leftsep } { \dim_eval:n {#1} },
+ rightsep .code:n = \__tblr_data_gput:nene { column }
+ { \int_use:N \c@colnum } { rightsep } { \dim_eval:n {#1} },
colsep .meta:n = { leftsep = #1, rightsep = #1},
- leftsep+ .code:n = \__tblr_prop_gadd_dimen_value:nxx { column }
- { [\int_use:N \c@colnum] / leftsep } { \dim_eval:n {#1} },
- rightsep+ .code:n = \__tblr_prop_gadd_dimen_value:nxx { column }
- { [\int_use:N \c@colnum] / rightsep } { \dim_eval:n {#1} },
+ leftsep+ .code:n = \__tblr_data_gadd_dimen_value:nene { column }
+ { \int_use:N \c@colnum } { leftsep } { \dim_eval:n {#1} },
+ rightsep+ .code:n = \__tblr_data_gadd_dimen_value:nene { column }
+ { \int_use:N \c@colnum } { rightsep } { \dim_eval:n {#1} },
colsep+ .meta:n = { leftsep+ = #1, rightsep+ = #1},
unknown .code:n = \__tblr_column_unknown_key:V \l_keys_key_str,
}
@@ -1395,7 +1722,23 @@
{
\int_step_inline:nn { \c@rowcount }
{
- \__tblr_prop_gput:nxn {cell} { [##1][#1] / #2 } {#3}
+ \__tblr_data_gput:neenn { cell } {##1} {#1} {#2} {#3}
+ }
+ }
+
+\cs_new_protected:Npn \__tblr_preto_text_for_every_column_cell:n #1
+ {
+ \int_step_inline:nn { \c@rowcount }
+ {
+ \__tblr_cell_preto_text:nen {##1} { \int_use:N \c@colnum } {#1}
+ }
+ }
+
+\cs_new_protected:Npn \__tblr_appto_text_for_every_column_cell:n #1
+ {
+ \int_step_inline:nn { \c@rowcount }
+ {
+ \__tblr_cell_appto_text:nen {##1} { \int_use:N \c@colnum } {#1}
}
}
@@ -1405,8 +1748,8 @@
{
\regex_match:NnTF \c__tblr_is_number_key_regex {#1}
{
- \__tblr_prop_gput:nxx { column }
- { [\int_use:N \c@colnum] / coefficient } {#1}
+ \__tblr_data_gput:nene { column }
+ { \int_use:N \c@colnum } { coefficient } {#1}
}
{
\regex_match:NnTF \c__tblr_is_color_key_regex {#1}
@@ -1416,8 +1759,8 @@
}
{
\tl_set_rescan:Nnn \l__tblr_v_tl {} {#1}
- \__tblr_prop_gput:nxx { column }
- { [\int_use:N \c@colnum] / width } { \dim_eval:n { \l__tblr_v_tl } }
+ \__tblr_data_gput:nene { column }
+ { \int_use:N \c@colnum } { width } { \dim_eval:n { \l__tblr_v_tl } }
}
}
}
@@ -1507,6 +1850,8 @@
{ \int_use:N \c@rownum } { valign } {f},
bg .code:n = \__tblr_set_key_for_every_row_cell:nnn
{ \int_use:N \c@rownum } { background } {#1},
+ fg .code:n = \__tblr_preto_text_for_every_row_cell:n { \color{#1} },
+ font .code:n = \__tblr_preto_text_for_every_row_cell:n { #1 \selectfont },
ht .code:n = \__tblr_data_gput:nene { row } { \int_use:N \c@rownum }
{ height } { \dim_eval:n {#1} },
co .code:n = \__tblr_data_gput:nene { row } { \int_use:N \c@rownum }
@@ -1531,7 +1876,23 @@
{
\int_step_inline:nn { \c@colcount }
{
- \__tblr_prop_gput:nxn {cell} { [#1][##1] / #2 } {#3}
+ \__tblr_data_gput:neenn { cell } {#1} {##1} {#2} {#3}
+ }
+ }
+
+\cs_new_protected:Npn \__tblr_preto_text_for_every_row_cell:n #1
+ {
+ \int_step_inline:nn { \c@colcount }
+ {
+ \__tblr_cell_preto_text:enn { \int_use:N \c@rownum } {##1} {#1}
+ }
+ }
+
+\cs_new_protected:Npn \__tblr_appto_text_for_every_row_cell:n #1
+ {
+ \int_step_inline:nn { \c@colcount }
+ {
+ \__tblr_cell_appto_text:enn { \int_use:N \c@rownum } {##1} {#1}
}
}
@@ -1614,26 +1975,16 @@
\exp_args:Nc \NewDocumentCommand { tblr_primitive_column_type_ > } { O{} m }
{
- \tl_if_blank:nF { #1 }
+ \tl_if_blank:nF {#1}
{
- \__tblr_prop_gput:nxx
+ \__tblr_data_gput:nene
{ column }
- { [\int_use:N \c@colnum] / leftsep}
- { \dim_eval:n { #1 } }
+ { \int_use:N \c@colnum } { leftsep }
+ { \dim_eval:n {#1} }
}
- \tl_if_blank:nF { #2 }
+ \tl_if_blank:nF {#2}
{
- \int_step_variable:nNn { \c@rowcount } \l__tblr_i_tl
- {
- \tl_set:Nx \l_tmpa_tl
- {
- \__tblr_prop_item:ne {text}
- { [\l__tblr_i_tl][\int_use:N \c@colnum] }
- }
- \tl_put_left:Nn \l_tmpa_tl { #2 }
- \__tblr_prop_gput:nxV {text}
- { [\l__tblr_i_tl][\int_use:N \c@colnum] } \l_tmpa_tl
- }
+ \__tblr_preto_text_for_every_column_cell:n {#2}
}
\__tblr_execute_colrow_spec_next:N
}
@@ -1645,24 +1996,14 @@
\exp_args:Nc \NewDocumentCommand { tblr_primitive_row_type_ > } { O{} m }
{
- \tl_if_blank:nF { #1 }
+ \tl_if_blank:nF {#1}
{
\__tblr_data_gput:nene { row } { \int_use:N \c@rownum }
{ abovesep } { \dim_eval:n { #1 } }
}
- \tl_if_blank:nF { #2 }
+ \tl_if_blank:nF {#2}
{
- \int_step_variable:nNn { \c@colcount } \l__tblr_j_tl
- {
- \tl_set:Nx \l_tmpa_tl
- {
- \__tblr_prop_item:ne {text}
- { [\int_use:N \c@rownum][\l__tblr_j_tl] }
- }
- \tl_put_left:Nn \l_tmpa_tl { #2 }
- \__tblr_prop_gput:nxV {text}
- { [\int_use:N \c@rownum][\l__tblr_j_tl] } \l_tmpa_tl
- }
+ \__tblr_preto_text_for_every_row_cell:n {#2}
}
\__tblr_execute_colrow_spec_next:N
}
@@ -1674,26 +2015,17 @@
\exp_args:Nc \NewDocumentCommand { tblr_primitive_column_type_ < } { O{} m }
{
- \tl_if_blank:nF { #1 }
+ \tl_if_blank:nF {#1}
{
- \__tblr_prop_gput:nxx
- { column }
- { [\int_eval:n {\c@colnum - 1}] / rightsep }
- { \dim_eval:n { #1 } }
+ \__tblr_data_gput:nene { column }
+ { \int_eval:n {\c@colnum - 1} } { rightsep } { \dim_eval:n {#1} }
}
- \tl_if_blank:nF { #2 }
+ \tl_if_blank:nF {#2}
{
- \int_step_variable:nNn { \c@rowcount } \l__tblr_i_tl
- {
- \tl_set:Nx \l_tmpa_tl
- {
- \__tblr_prop_item:ne {text}
- { [\l__tblr_i_tl][\int_eval:n {\c@colnum - 1}] }
- }
- \tl_put_right:Nn \l_tmpa_tl { #2 }
- \__tblr_prop_gput:nxV {text}
- { [\l__tblr_i_tl][\int_eval:n {\c@colnum - 1}] } \l_tmpa_tl
- }
+ \group_begin:
+ \int_decr:N \c@colnum
+ \__tblr_appto_text_for_every_column_cell:n {#2}
+ \group_end:
}
\__tblr_execute_colrow_spec_next:N
}
@@ -1705,24 +2037,17 @@
\exp_args:Nc \NewDocumentCommand { tblr_primitive_row_type_ < } { O{} m }
{
- \tl_if_blank:nF { #1 }
+ \tl_if_blank:nF {#1}
{
\__tblr_data_gput:nene { row } { \int_eval:n {\c@rownum - 1} }
{ belowsep } { \dim_eval:n {#1} }
}
- \tl_if_blank:nF { #2 }
+ \tl_if_blank:nF {#2}
{
- \int_step_variable:nNn { \c@colcount } \l__tblr_j_tl
- {
- \tl_set:Nx \l_tmpa_tl
- {
- \__tblr_prop_item:ne {text}
- { [\int_eval:n {\c@rownum - 1}][\l__tblr_j_tl] }
- }
- \tl_put_right:Nn \l_tmpa_tl { #2 }
- \__tblr_prop_gput:nxV {text}
- { [\int_eval:n {\c@rownum - 1}][\l__tblr_j_tl] } \l_tmpa_tl
- }
+ \group_begin:
+ \int_decr:N \c@rownum
+ \__tblr_appto_text_for_every_row_cell:n {#2}
+ \group_end:
}
\__tblr_execute_colrow_spec_next:N
}
@@ -1902,6 +2227,7 @@
\mode_leave_vertical:
\int_gincr:N \g_tblr_level_int
\__tblr_clear_prop_lists:
+ \__tblr_clear_text_lists:
\__tblr_enable_table_commands:
\__tblr_split_table:n { #3 }
\LogTblrTracing { command }
@@ -1916,18 +2242,6 @@
\int_gdecr:N \g_tblr_level_int
}
-\cs_new_protected:Npn \__tblr_clear_prop_lists:
- {
- \prop_gclear_new:c { g_tblr_text_ \int_use:N \g_tblr_level_int _prop }
- \prop_gclear_new:c { g_tblr_command_ \int_use:N \g_tblr_level_int _prop }
- \prop_gclear_new:c { g_tblr_table_ \int_use:N \g_tblr_level_int _prop }
- \prop_gclear_new:c { g_tblr_row_ \int_use:N \g_tblr_level_int _prop }
- \prop_gclear_new:c { g_tblr_column_ \int_use:N \g_tblr_level_int _prop }
- \prop_gclear_new:c { g_tblr_cell_ \int_use:N \g_tblr_level_int _prop }
- \prop_gclear_new:c { g_tblr_hline_ \int_use:N \g_tblr_level_int _prop }
- \prop_gclear_new:c { g_tblr_vline_ \int_use:N \g_tblr_level_int _prop }
- }
-
%% Insert and remove braces for nesting environments inside cells
%% These make line split and cell split workable
%% We need to replace N times for N level nestings
@@ -2034,7 +2348,7 @@
\__tblr_remove_braces:N \l_tmpa_tl
\int_incr:N \c@colnum
\__tblr_extract_table_commands:N \l_tmpa_tl
- \__tblr_prop_gput:nxV {text} { [#1][\int_use:N \c@colnum] } \l_tmpa_tl
+ \__tblr_text_gput:neV { text } { [#1][\int_use:N \c@colnum] } \l_tmpa_tl
\__tblr_add_multicolumn_empty_cell:
}
%% Decrease row count by 1 if the last row has only one empty cell text
@@ -2059,7 +2373,7 @@
\int_step_inline:nn { \l__multicolumn_cell_number_int - 1 }
{
\int_incr:N \c@colnum
- \__tblr_prop_gput:nxn {text}
+ \__tblr_text_gput:nen { text }
{ [\int_use:N \c@rownum][\int_use:N \c@colnum] } { }
}
}
@@ -2175,6 +2489,7 @@
\prop_gset_from_keyval:Nn \g__tblr_default_tblr_table_prop
{
stretch = 1,
+ rulesep = 2pt,
}
\prop_gset_from_keyval:Nn \g__tblr_default_tblr_rows_prop
@@ -2192,6 +2507,8 @@
{
leftsep = 6pt,
rightsep = 6pt,
+ width = -1pt, % column width unset
+ coefficient = 0, % column coefficient unset
@col-width = 0pt,
}
@@ -2199,16 +2516,20 @@
{
halign = l,
valign = t,
+ width = -1pt, % cell width unset
+ rowspan = 1,
+ colspan = 1,
+ omit = 0,
}
\prop_gset_from_keyval:Nn \g__tblr_default_tblr_hlines_prop
{
- rulesep = 2pt,
+ @hline-count = 0,
}
\prop_gset_from_keyval:Nn \g__tblr_default_tblr_vlines_prop
{
- rulesep = 2pt,
+ @vline-count = 0,
}
\cs_new_protected:Npn \__tblr_initial_table_spec:
@@ -2225,37 +2546,37 @@
}
\prop_map_inline:cn { g__tblr_default_ \l__tblr_env_name_tl _hlines_prop }
{
- \__tblr_prop_gput:nxn { hline } { [\l__tblr_i_tl] / ##1 } {##2}
+ \__tblr_text_gput:nen { hline } { [\l__tblr_i_tl] / ##1 } {##2}
}
\int_step_variable:nNn { \c@colcount } \l__tblr_j_tl
{
\prop_map_inline:cn
{ g__tblr_default_ \l__tblr_env_name_tl _cells_prop }
{
- \__tblr_prop_gput:nxn { cell }
- { [\l__tblr_i_tl][\l__tblr_j_tl] / ##1 } {##2}
+ \__tblr_data_gput:neeen { cell }
+ { \l__tblr_i_tl } { \l__tblr_j_tl } {##1} {##2}
}
}
}
\prop_map_inline:cn { g__tblr_default_ \l__tblr_env_name_tl _hlines_prop }
{
- \__tblr_prop_gput:nxn { hline }
+ \__tblr_text_gput:nen { hline }
{ [\int_eval:n { \c@rowcount + 1}] / ##1 } {##2}
}
\int_step_variable:nNn { \c@colcount } \l__tblr_j_tl
{
\prop_map_inline:cn { g__tblr_default_ \l__tblr_env_name_tl _columns_prop }
{
- \__tblr_prop_gput:nxn { column } { [\l__tblr_j_tl] / ##1 } {##2}
+ \__tblr_data_gput:nenn { column } { \l__tblr_j_tl } {##1} {##2}
}
\prop_map_inline:cn { g__tblr_default_ \l__tblr_env_name_tl _vlines_prop }
{
- \__tblr_prop_gput:nxn { vline } { [\l__tblr_j_tl] / ##1 } {##2}
+ \__tblr_text_gput:nen { vline } { [\l__tblr_j_tl] / ##1 } {##2}
}
}
\prop_map_inline:cn { g__tblr_default_ \l__tblr_env_name_tl _vlines_prop }
{
- \__tblr_prop_gput:nxn { vline }
+ \__tblr_text_gput:nen { vline }
{ [\int_eval:n { \c@colcount + 1}] / ##1 } {##2}
}
\keys_set:nv { tblr } { l__tblr_default_ \l__tblr_env_name_tl _tl }
@@ -2279,7 +2600,7 @@
{
long, colspec, rowspec, width, hspan, stretch,
column, row, cell, vline, hline, columns, rows, cells, vlines, hlines,
- leftsep, rightsep, colsep, abovesep, belowsep, rowsep,
+ leftsep, rightsep, colsep, abovesep, belowsep, rowsep, rulesep,
}
\bool_new:N \l__tblr_long_table_bool
@@ -2303,6 +2624,7 @@
abovesep .code:n = \tblr_set_every_row:nn { } { abovesep = #1 },
belowsep .code:n = \tblr_set_every_row:nn { } { belowsep = #1 },
rowsep .meta:n = { abovesep = #1, belowsep = #1 },
+ rulesep .code:n = \__tblr_keys_gput:nn { rulesep } {#1},
unknown .code:n = \__tblr_table_special_key:Vn \l_keys_key_str {#1},
}
@@ -2403,11 +2725,11 @@
{
\dim_zero:N \l__tblr_w_dim
\tl_set:Nx \l__tblr_n_tl
- { \__tblr_prop_item:ne { vline } { [#2] / @vline-count } }
- \tl_if_empty:NF \l__tblr_n_tl
+ { \__tblr_text_item:ne { vline } { [#2] / @vline-count } }
+ \int_compare:nNnT { \l__tblr_n_tl } > {0}
{
\tl_set:Nx \l__tblr_s_tl
- { \__tblr_prop_item:ne { vline } { [#2] / rulesep } }
+ { \__tblr_prop_item:ne { table } { rulesep } }
\int_step_inline:nn { \l__tblr_n_tl }
{
\vbox_set_to_ht:Nnn \l__tblr_b_box {1pt}
@@ -2416,14 +2738,14 @@
{#1} {#2} {##1} {1pt} {1pt}
}
\tl_set:Nx \l__tblr_w_tl { \dim_eval:n { \box_wd:N \l__tblr_b_box } }
- \__tblr_prop_gput_if_larger:nxx { vline }
+ \__tblr_text_gput_if_larger:nee { vline }
{ [#2](##1) / @vline-width } { \l__tblr_w_tl }
\dim_add:Nn \l__tblr_w_dim { \l__tblr_w_tl }
\dim_add:Nn \l__tblr_w_dim { \l__tblr_s_tl }
}
\dim_add:Nn \l__tblr_w_dim { - \l__tblr_s_tl }
}
- \__tblr_prop_gput_if_larger:nxx { vline }
+ \__tblr_text_gput_if_larger:nee { vline }
{ [#2]/ @vline-width } { \dim_use:N \l__tblr_w_dim }
}
@@ -2434,10 +2756,10 @@
{
\group_begin:
\tl_set:Nx \l__tblr_w_tl
- { \__tblr_prop_item:ne { vline } { [#1][#2](#3) / wd } }
+ { \__tblr_text_item:ne { vline } { [#1][#2](#3) / wd } }
\tl_if_empty:NF \l__tblr_w_tl { \dim_set:Nn \rulewidth { \l__tblr_w_tl } }
\tl_set:Nx \l__tblr_d_tl
- { \__tblr_prop_item:ne { vline } { [#1][#2](#3) / @dash } }
+ { \__tblr_text_item:ne { vline } { [#1][#2](#3) / @dash } }
\tl_set:Nx \l__tblr_a_tl { \tl_head:N \l__tblr_d_tl }
\tl_set:Nx \l__tblr_b_tl { \tl_tail:N \l__tblr_d_tl }
\exp_args:NV \tl_if_eq:NNTF \l__tblr_a_tl \@tblr@dash
@@ -2461,11 +2783,11 @@
{
\dim_zero:N \l__tblr_h_dim
\tl_set:Nx \l__tblr_n_tl
- { \__tblr_prop_item:ne { hline } { [#1] / @hline-count } }
- \tl_if_empty:NF \l__tblr_n_tl
+ { \__tblr_text_item:ne { hline } { [#1] / @hline-count } }
+ \int_compare:nNnT { \l__tblr_n_tl } > {0}
{
\tl_set:Nx \l__tblr_s_tl
- { \__tblr_prop_item:ne { hline } { [#1] / rulesep } }
+ { \__tblr_prop_item:ne { table } { rulesep } }
\int_step_inline:nn { \l__tblr_n_tl }
{
\hbox_set_to_wd:Nnn \l__tblr_b_box {1pt}
@@ -2475,14 +2797,14 @@
\dim_eval:n
{ \box_ht:N \l__tblr_b_box + \box_dp:N \l__tblr_b_box }
}
- \__tblr_prop_gput_if_larger:nxx { hline }
+ \__tblr_text_gput_if_larger:nee { hline }
{ [#1](##1) / @hline-height } { \l__tblr_h_tl }
\dim_add:Nn \l__tblr_h_dim { \l__tblr_h_tl }
\dim_add:Nn \l__tblr_h_dim { \l__tblr_s_tl }
}
\dim_add:Nn \l__tblr_h_dim { - \l__tblr_s_tl }
}
- \__tblr_prop_gput_if_larger:nxx { hline }
+ \__tblr_text_gput_if_larger:nee { hline }
{ [#1] / @hline-height } { \dim_use:N \l__tblr_h_dim }
}
@@ -2492,10 +2814,10 @@
{
\group_begin:
\tl_set:Nx \l__tblr_w_tl
- { \__tblr_prop_item:ne { hline } { [#1][#2](#3) / wd } }
+ { \__tblr_text_item:ne { hline } { [#1][#2](#3) / wd } }
\tl_if_empty:NF \l__tblr_w_tl { \dim_set:Nn \rulewidth { \l__tblr_w_tl } }
\tl_set:Nx \l__tblr_d_tl
- { \__tblr_prop_item:ne { hline } { [#1][#2](#3) / @dash } }
+ { \__tblr_text_item:ne { hline } { [#1][#2](#3) / @dash } }
\tl_set:Nx \l__tblr_a_tl { \tl_head:N \l__tblr_d_tl }
\tl_set:Nx \l__tblr_b_tl { \tl_tail:N \l__tblr_d_tl }
\exp_args:NV \tl_if_eq:NNTF \l__tblr_a_tl \@tblr@dash
@@ -2527,9 +2849,9 @@
{
\group_begin:
\tl_gset:Nx \g__tblr_cell_halign_tl
- { \__tblr_prop_item:ne { cell } { [#1][#2] / halign } }
+ { \__tblr_data_item:neen { cell } {#1} {#2} { halign } }
\tl_set:Nx \l__tblr_v_tl
- { \__tblr_prop_item:ne { cell } { [#1][#2] / valign } }
+ { \__tblr_data_item:neen { cell } {#1} {#2} { valign } }
\tl_case:NnF \l__tblr_v_tl
{
\c__tblr_valign_t_tl
@@ -2607,7 +2929,7 @@
%% #1: row number, #2: column number
\cs_new_protected:Npn \__tblr_get_cell_text:nn #1 #2
{
- \__tblr_prop_if_in:nxTF {cell} { [#1][#2] / omit }
+ \int_compare:nNnTF { \__tblr_data_item:neen { cell } {#1} {#2} { omit } } > {0}
{
\dim_gzero:N \g__tblr_cell_wd_dim
\dim_gzero:N \g__tblr_cell_ht_dim
@@ -2623,18 +2945,19 @@
\cs_new_protected:Npn \__tblr_get_cell_text_real:nn #1 #2
{
\group_begin:
- \tl_set:Nx \l__tblr_c_tl { \__tblr_prop_item:ne {text} {[#1][#2]} }
+ \tl_set:Nx \l__tblr_c_tl { \__tblr_text_item:ne { text } {[#1][#2]} }
\tl_set:Nx \l__tblr_w_tl
- { \__tblr_prop_item:ne { cell } { [#1][#2] / width } }
- \tl_if_empty:NT \l__tblr_w_tl
+ { \__tblr_data_item:neen { cell } {#1} {#2} { width } }
+ \dim_compare:nNnT { \l__tblr_w_tl } < { 0pt } % cell width unset
{
- \__tblr_prop_if_in:nxF { cell } { [#1][#2] / colspan }
+ \int_compare:nNnT
+ { \__tblr_data_item:neen { cell } {#1} {#2} { colspan } } < {2}
{
\tl_set:Nx \l__tblr_w_tl
- { \__tblr_prop_item:ne { column } { [#2] / width } }
+ { \__tblr_data_item:nen { column } {#2} { width } }
}
}
- \tl_if_empty:NT \l__tblr_w_tl
+ \dim_compare:nNnT { \l__tblr_w_tl } < { 0pt } % column width unset
{
\bool_if:NTF \l__tblr_math_mode_bool
{
@@ -2757,15 +3080,15 @@
{
\group_begin:
\tl_set:Nx \l__tblr_c_tl
- { \__tblr_prop_item:ne {cell} { [#1][#2] / colspan } }
- \tl_if_empty:NF \l__tblr_c_tl
+ { \__tblr_data_item:neen { cell } {#1} {#2} { colspan } }
+ \int_compare:nNnT { \l__tblr_c_tl } > {1}
{
- \__tblr_prop_gput:nxx {cell} { [#1][#2] / @cell-width } { \dim_use:N #3 }
+ \__tblr_data_gput:neene { cell } {#1} {#2} { @cell-width } {\dim_use:N #3}
\dim_gzero:N #3 % don't affect column width
}
\tl_set:Nx \l__tblr_r_tl
- { \__tblr_prop_item:ne {cell} { [#1][#2] / rowspan } }
- \tl_if_empty:NF \l__tblr_r_tl
+ { \__tblr_data_item:neen { cell } {#1} {#2} { rowspan } }
+ \int_compare:nNnT { \l__tblr_r_tl } > {1}
{
\tl_case:Nn \g__tblr_cell_valign_tl
{
@@ -2794,8 +3117,8 @@
#4 #5 #6 \l__tblr_u_tl \l__tblr_v_tl
}
}
- \__tblr_prop_gput:nxV {cell} { [#1][#2] / @cell-height } \l__tblr_u_tl
- \__tblr_prop_gput:nxV {cell} { [#1][#2] / @cell-depth } \l__tblr_v_tl
+ \__tblr_data_gput:neenV { cell } {#1} {#2} { @cell-height } \l__tblr_u_tl
+ \__tblr_data_gput:neenV { cell } {#1} {#2} { @cell-depth } \l__tblr_v_tl
%% Don't affect row sizes
\dim_gzero:N #4
\dim_gzero:N #5
@@ -2876,12 +3199,12 @@
\cs_new_protected:Npn \__tblr_update_col_size:nN #1 #2
{
\tl_set:Nx \l_tmpb_tl
- { \__tblr_prop_item:ne {column} { [#1] / @col-width } }
+ { \__tblr_data_item:nen { column } {#1} { @col-width } }
\bool_lazy_or:nnT
{ \tl_if_empty_p:N \l_tmpb_tl }
{ \dim_compare_p:nNn { \dim_use:N #2 } > { \l_tmpb_tl } }
{
- \__tblr_prop_gput:nxx {column} { [#1] / @col-width } { \dim_use:N #2 }
+ \__tblr_data_gput:nene { column } {#1} { @col-width } { \dim_use:N #2 }
}
}
@@ -2925,14 +3248,14 @@
\int_step_variable:nNn { \c@colcount } \l__tblr_j_tl
{
\tl_set:Nx \l__tblr_a_tl
- { \__tblr_prop_item:ne {column} { [\l__tblr_j_tl] / width } }
+ { \__tblr_data_item:nen { column } { \l__tblr_j_tl } { width } }
\tl_set:Nx \l__tblr_b_tl
- { \__tblr_prop_item:ne {column} { [\l__tblr_j_tl] / coefficient } }
+ { \__tblr_data_item:nen { column } { \l__tblr_j_tl } { coefficient } }
\tl_set:Nx \l__tblr_c_tl
- { \__tblr_prop_item:ne {column} { [\l__tblr_j_tl] / @col-width } }
- \tl_if_empty:NTF \l__tblr_a_tl
+ { \__tblr_data_item:nen { column } { \l__tblr_j_tl } { @col-width } }
+ \dim_compare:nNnTF { \l__tblr_a_tl } < { 0pt } % column width unset
{
- \tl_if_empty:NTF \l__tblr_b_tl
+ \dim_compare:nNnTF { \l__tblr_b_tl pt } = { 0pt }
{ \dim_sub:Nn \l__column_target_dim { \l__tblr_c_tl } }
{
\prop_put:Nxx \l__column_coefficient_prop
@@ -2948,17 +3271,17 @@
}
{ \dim_sub:Nn \l__column_target_dim { \l__tblr_a_tl } }
\tl_set:Nx \l__tblr_a_tl
- { \__tblr_prop_item:ne {vline} { [\l__tblr_j_tl] / @vline-width } }
+ { \__tblr_text_item:ne { vline } { [\l__tblr_j_tl] / @vline-width } }
\tl_set:Nx \l__tblr_b_tl
- { \__tblr_prop_item:ne {column} { [\l__tblr_j_tl] / leftsep} }
+ { \__tblr_data_item:nen { column } { \l__tblr_j_tl } { leftsep } }
\tl_set:Nx \l__tblr_c_tl
- { \__tblr_prop_item:ne {column} { [\l__tblr_j_tl] / rightsep } }
+ { \__tblr_data_item:nen { column } { \l__tblr_j_tl } { rightsep } }
\dim_set:Nn \l__column_target_dim
{ \l__column_target_dim - \l__tblr_a_tl - \l__tblr_b_tl - \l__tblr_c_tl }
}
\tl_set:Nx \l__tblr_a_tl
{
- \__tblr_prop_item:ne {vline}
+ \__tblr_text_item:ne { vline }
{ [\int_eval:n {\c@colcount + 1}] / @vline-width }
}
\tl_if_empty:NF \l__tblr_a_tl
@@ -2979,8 +3302,8 @@
}
\prop_map_inline:Nn \l__column_computed_width_prop
{
- \__tblr_prop_gput:nnx {column} { [##1] / width } { ##2 }
- \__tblr_prop_gput:nnn {column} { [##1] / @col-width } { 0pt }
+ \__tblr_data_gput:nnne { column } {##1} { width } {##2}
+ \__tblr_data_gput:nnnn { column } {##1} { @col-width } { 0pt }
}
\__tblr_calculate_cell_sizes:
}
@@ -3067,7 +3390,7 @@
\__tblr_collect_span_widths:
\__tblr_set_column_widths_from_span_widths:
}
- \LogTblrTracing {column}
+ \LogTblrTracing { column }
\__tblr_calculate_cell_sizes:
}
\__tblr_prop_if_in:nnT {table} {rowspan}
@@ -3095,14 +3418,13 @@
{
\dim_eval:n
{
- \__tblr_prop_item:ne {column}
- { [\int_eval:n { \l__tblr_j_tl - 1 }] / rightsep }
+ \__tblr_data_item:nen { column }
+ { \int_eval:n { \l__tblr_j_tl - 1 } } { rightsep }
+
- \__tblr_prop_item:ne {vline}
+ \__tblr_text_item:ne { vline }
{ [\l__tblr_j_tl] / @vline-width }
+
- \__tblr_prop_item:ne {column}
- { [\l__tblr_j_tl] / leftsep}
+ \__tblr_data_item:nen { column } { \l__tblr_j_tl } { leftsep }
}
}
}
@@ -3111,7 +3433,7 @@
{ 0pt }
}
\prop_put:Nxx \l__tblr_col_item_skip_size_prop { item[\l__tblr_j_tl] }
- { \__tblr_prop_item:ne {column} { [\l__tblr_j_tl] / @col-width } }
+ { \__tblr_data_item:nen { column } { \l__tblr_j_tl } { @col-width } }
}
\__tblr_do_if_tracing:nn { cellspan }
{ \prop_log:N \l__tblr_col_item_skip_size_prop }
@@ -3131,7 +3453,7 @@
\__tblr_data_item:nen { row }
{ \int_eval:n {\l__tblr_i_tl - 1} } { belowsep }
+
- \__tblr_prop_item:ne {hline}
+ \__tblr_text_item:ne { hline }
{ [\l__tblr_i_tl] / @hline-height }
+
\__tblr_data_item:nen { row } { \l__tblr_i_tl } { abovesep }
@@ -3165,10 +3487,10 @@
{
\tl_set:Nx \l__tblr_a_tl
{
- \__tblr_prop_item:ne {cell}
- { [\l__tblr_i_tl][\l__tblr_j_tl] / colspan }
+ \__tblr_data_item:neen { cell }
+ { \l__tblr_i_tl } { \l__tblr_j_tl } { colspan }
}
- \tl_if_empty:NF \l__tblr_a_tl
+ \int_compare:nNnT { \l__tblr_a_tl } > {1}
{
\__tblr_put_if_larger:Nxx \l__tblr_col_span_size_prop
{
@@ -3176,8 +3498,8 @@
\int_eval:n {\l__tblr_j_tl + \l__tblr_a_tl - 1} )
}
{
- \__tblr_prop_item:ne {cell}
- { [\l__tblr_i_tl][\l__tblr_j_tl] / @cell-width }
+ \__tblr_data_item:neen { cell }
+ { \l__tblr_i_tl } { \l__tblr_j_tl } { @cell-width }
}
}
}
@@ -3198,15 +3520,15 @@
{
\tl_set:Nx \l__tblr_a_tl
{
- \__tblr_prop_item:ne {cell}
- { [\l__tblr_i_tl][\l__tblr_j_tl] / rowspan }
+ \__tblr_data_item:neen { cell }
+ { \l__tblr_i_tl } { \l__tblr_j_tl } { rowspan }
}
- \tl_if_empty:NF \l__tblr_a_tl
+ \int_compare:nNnT { \l__tblr_a_tl } > {1}
{
\tl_set:Nx \l__tblr_v_tl
{
- \__tblr_prop_item:ne {cell}
- { [\l__tblr_i_tl][\l__tblr_j_tl] / valign }
+ \__tblr_data_item:neen { cell }
+ { \l__tblr_i_tl } { \l__tblr_j_tl } { valign }
}
\tl_if_eq:NnT \l__tblr_v_tl { h }
{
@@ -3215,8 +3537,8 @@
\__tblr_data_item:nen { row }
{ \l__tblr_i_tl } { @row-head }
}
- \__tblr_prop_gput:nxV {cell}
- { [\l__tblr_i_tl][\l__tblr_j_tl] / @cell-height }
+ \__tblr_data_gput:neenV { cell }
+ { \l__tblr_i_tl } { \l__tblr_j_tl } { @cell-height }
\l__tblr_h_tl
}
\tl_if_eq:NnT \l__tblr_v_tl { f }
@@ -3228,8 +3550,8 @@
{ \int_eval:n { \l__tblr_i_tl + \l__tblr_a_tl - 1 } }
{ @row-foot }
}
- \__tblr_prop_gput:nxV {cell}
- { [\l__tblr_i_tl][\l__tblr_j_tl] / @cell-depth }
+ \__tblr_data_gput:neenV { cell }
+ { \l__tblr_i_tl } { \l__tblr_j_tl } { @cell-depth }
\l__tblr_d_tl
}
\__tblr_put_if_larger:Nxx \l__tblr_row_span_size_prop
@@ -3240,11 +3562,11 @@
{
\dim_eval:n
{
- \__tblr_prop_item:ne {cell}
- { [\l__tblr_i_tl][\l__tblr_j_tl] / @cell-height }
+ \__tblr_data_item:neen { cell }
+ { \l__tblr_i_tl } { \l__tblr_j_tl } { @cell-height }
+
- \__tblr_prop_item:ne {cell}
- { [\l__tblr_i_tl][\l__tblr_j_tl] / @cell-depth }
+ \__tblr_data_item:neen { cell }
+ { \l__tblr_i_tl } { \l__tblr_j_tl } { @cell-depth }
}
}
\prop_put:Nxx \l__tblr_row_span_to_row_prop
@@ -3340,8 +3662,8 @@
{
\int_step_variable:nNn { \c@colcount } \l__tblr_j_tl
{
- \__tblr_prop_gput:nxx {column}
- { [\l__tblr_j_tl] / @col-width }
+ \__tblr_data_gput:nene { column }
+ { \l__tblr_j_tl } { @col-width }
{ \prop_item:Ne \l__tblr_col_item_skip_size_prop { item[\l__tblr_j_tl] } }
}
}
@@ -3383,17 +3705,17 @@
{
\tl_set:Nx \l__tblr_a_tl
{
- \__tblr_prop_item:ne {cell}
- { [\l__tblr_i_tl][\l__tblr_j_tl] / colspan }
+ \__tblr_data_item:neen { cell }
+ { \l__tblr_i_tl } { \l__tblr_j_tl } { colspan }
}
- \tl_if_empty:NF \l__tblr_a_tl
+ \int_compare:nNnT { \l__tblr_a_tl } > {1}
{
\__tblr_calc_span_widths:xxN
{ \l__tblr_j_tl }
{ \int_eval:n { \l__tblr_j_tl + \l__tblr_a_tl - 1 } }
\l__tblr_w_dim
- \__tblr_prop_gput:nxx {cell}
- { [\l__tblr_i_tl][\l__tblr_j_tl] / width }
+ \__tblr_data_gput:neene { cell }
+ { \l__tblr_i_tl } { \l__tblr_j_tl } { width }
{ \dim_use:N \l__tblr_w_dim }
}
}
@@ -3448,7 +3770,7 @@
{
\dim_set:Nn \l_tmpa_dim
{
- \__tblr_prop_item:ne { hline } { [\l__tblr_i_tl] / @hline-height }
+ \__tblr_text_item:ne { hline } { [\l__tblr_i_tl] / @hline-height }
+
\__tblr_data_item:nen { row } { \l__tblr_i_tl } { abovesep }
+
@@ -3546,7 +3868,7 @@
\cs_new_protected:Npn \__tblr_valign_whole_top:N #1
{
\tl_set:Nx \l__tblr_a_tl
- { \__tblr_prop_item:ne { hline } { [1] / @hline-height } }
+ { \__tblr_text_item:ne { hline } { [1] / @hline-height } }
%% Note that \l__tblr_b_tl may be empty
\tl_set:Nx \l__tblr_b_tl
{ \__tblr_prop_item:ne { table } { baseline } }
@@ -3580,7 +3902,7 @@
{
\tl_set:Nx \l__tblr_a_tl
{
- \__tblr_prop_item:ne { hline }
+ \__tblr_text_item:ne { hline }
{ [\int_eval:n {\c@rowcount + 1}] / @hline-height }
}
%% Note that \l__tblr_b_tl may be empty
@@ -3630,14 +3952,14 @@
\cs_new_protected:Npn \__tblr_build_hline_segment:nn #1 #2
{
\tl_set:Nx \l__tblr_n_tl
- { \__tblr_prop_item:ne { hline } { [#1] / @hline-count } }
+ { \__tblr_text_item:ne { hline } { [#1] / @hline-count } }
\tl_set:Nx \l__tblr_o_tl
- { \__tblr_prop_item:ne { hline } { [#1][#2] / omit } }
+ { \__tblr_text_item:ne { hline } { [#1][#2] / omit } }
\__tblr_get_col_outer_width_border_width:nNN {#2}
\l__tblr_col_o_wd_dim \l__tblr_col_b_wd_dim
\tl_if_empty:NTF \l__tblr_o_tl
{
- \tl_if_empty:NF \l__tblr_n_tl
+ \int_compare:nNnT { \l__tblr_n_tl } > {0}
{ \__tblr_build_hline_segment_real:nn {#1} {#2} }
}
{ \__tblr_build_hline_segment_omit:nn {#1} {#2} }
@@ -3653,7 +3975,7 @@
\cs_new_protected:Npn \__tblr_build_hline_segment_real:nn #1 #2
{
\tl_set:Nx \l__tblr_s_tl
- { \__tblr_prop_item:ne { hline } { [#1] / rulesep } }
+ { \__tblr_prop_item:ne { table } { rulesep } }
\vbox_set:Nn \l__tblr_c_box
{
%% add an empty hbox to support vbox width
@@ -3661,12 +3983,12 @@
\int_step_inline:nn { \l__tblr_n_tl }
{
\tl_set:Nx \l__tblr_h_tl
- { \__tblr_prop_item:ne { hline } { [#1](##1) / @hline-height } }
+ { \__tblr_text_item:ne { hline } { [#1](##1) / @hline-height } }
\hrule height ~ 0pt % remove lineskip
\hbox_set_to_wd:Nnn \l__tblr_b_box { \l__tblr_col_o_wd_dim }
{
\tl_set:Nx \l__tblr_f_tl
- { \__tblr_prop_item:ne { hline } { [#1][#2](##1) / fg } }
+ { \__tblr_text_item:ne { hline } { [#1][#2](##1) / fg } }
\tl_if_empty:NF \l__tblr_f_tl { \color{\l__tblr_f_tl} }
\__tblr_get_hline_segment_child:nnn {#1} {#2} {##1}
}
@@ -3687,16 +4009,16 @@
\cs_new_protected:Npn \__tblr_get_col_outer_width_border_width:nNN #1 #2 #3
{
\dim_set:Nn #3
- { \__tblr_prop_item:ne {vline} { [\int_eval:n {#1 + 1}] / @vline-width } }
+ { \__tblr_text_item:ne { vline } { [\int_eval:n {#1 + 1}] / @vline-width } }
\dim_set:Nn #2
{
- \__tblr_prop_item:ne {vline} { [#1] / @vline-width }
+ \__tblr_text_item:ne { vline } { [#1] / @vline-width }
+
- \__tblr_prop_item:ne {column} { [#1] / leftsep }
+ \__tblr_data_item:nen { column } {#1} { leftsep }
+
- \__tblr_prop_item:ne {column} { [#1] / @col-width }
+ \__tblr_data_item:nen { column } {#1} { @col-width }
+
- \__tblr_prop_item:ne {column} { [#1] / rightsep }
+ \__tblr_data_item:nen { column } {#1} { rightsep }
+
#3
}
@@ -3756,12 +4078,12 @@
\cs_new_protected:Npn \__tblr_build_vline_segment:nn #1 #2
{
\tl_set:Nx \l__tblr_n_tl
- { \__tblr_prop_item:ne { vline } { [#2] / @vline-count } }
+ { \__tblr_text_item:ne { vline } { [#2] / @vline-count } }
\tl_set:Nx \l__tblr_o_tl
- { \__tblr_prop_item:ne { vline } { [#1][#2] / omit } }
+ { \__tblr_text_item:ne { vline } { [#1][#2] / omit } }
\tl_if_empty:NTF \l__tblr_o_tl
{
- \tl_if_empty:NF \l__tblr_n_tl
+ \int_compare:nNnT { \l__tblr_n_tl } > {0}
{ \__tblr_build_vline_segment_real:nn {#1} {#2} }
}
{ \__tblr_build_vline_segment_omit:nn {#1} {#2} }
@@ -3771,7 +4093,7 @@
\cs_new_protected:Npn \__tblr_build_vline_segment_omit:nn #1 #2
{
\tl_set:Nx \l__tblr_w_tl
- { \__tblr_prop_item:ne { vline } { [#2] / @vline-width } }
+ { \__tblr_text_item:ne { vline } { [#2] / @vline-width } }
\skip_horizontal:N \l__tblr_w_tl
}
@@ -3781,10 +4103,10 @@
\cs_new_protected:Npn \__tblr_build_vline_segment_real:nn #1 #2
{
\tl_set:Nx \l__tblr_s_tl
- { \__tblr_prop_item:ne { vline } { [#2] / rulesep } }
+ { \__tblr_prop_item:ne { table } { rulesep } }
\tl_set:Nx \l__tblr_b_tl
{
- \__tblr_prop_item:ne { hline }
+ \__tblr_text_item:ne { hline }
{ [\int_eval:n{#1 + 1}](1) / @hline-height }
}
\tl_if_empty:NT \l__tblr_b_tl { \tl_set:Nn \l__tblr_b_tl { 0pt } }
@@ -3793,12 +4115,12 @@
\int_step_inline:nn { \l__tblr_n_tl }
{
\tl_set:Nx \l__tblr_w_tl
- { \__tblr_prop_item:ne { vline } { [#2](##1) / @vline-width } }
+ { \__tblr_text_item:ne { vline } { [#2](##1) / @vline-width } }
\vbox_set_to_ht:Nnn \l__tblr_b_box
{ \dim_eval:n { \l__tblr_row_ht_dim + \l__tblr_row_dp_dim } }
{
\tl_set:Nx \l__tblr_f_tl
- { \__tblr_prop_item:ne { vline } { [#1][#2](##1) / fg } }
+ { \__tblr_text_item:ne { vline } { [#1][#2](##1) / fg } }
\tl_if_empty:NF \l__tblr_f_tl { \color{\l__tblr_f_tl} }
\__tblr_get_vline_segment_child:nnnxx {#1} {#2} {##1}
{ \dim_eval:n { \l__tblr_row_ht_dim } }
@@ -3828,24 +4150,24 @@
\int_set:Nn \c@colnum {#2}
\group_begin:
\tl_set:Nx \l__tblr_w_tl
- { \__tblr_prop_item:ne { column } { [#2] / @col-width } }
+ { \__tblr_data_item:nen { column } {#2} { @col-width } }
\tl_set:Nx \l__tblr_h_tl
{ \__tblr_data_item:nen { row } {#1} { @row-height } }
\tl_set:Nx \l__tblr_x_tl
- { \__tblr_prop_item:ne { column } { [#2] / leftsep} }
+ { \__tblr_data_item:nen { column } {#2} { leftsep} }
\tl_set:Nx \l__tblr_y_tl
- { \__tblr_prop_item:ne { column } { [#2] / rightsep } }
+ { \__tblr_data_item:nen { column } {#2} { rightsep } }
\tl_set:Nx \l__tblr_cell_colspan_tl
- { \__tblr_prop_item:ne { cell } { [#1][#2] / colspan } }
- \tl_if_empty:NTF \l__tblr_cell_colspan_tl
+ { \__tblr_data_item:neen { cell } {#1} {#2} { colspan } }
+ \int_compare:nNnTF { \l__tblr_cell_colspan_tl } < {2}
{ \dim_set:Nn \l__tblr_cell_wd_dim { \l__tblr_w_tl } }
{
\__tblr_get_span_horizontal_sizes:NNNNN #1 #2
\l__tblr_o_dim \l__tblr_cell_wd_dim \l__tblr_q_dim
}
\tl_set:Nx \l__tblr_cell_rowspan_tl
- { \__tblr_prop_item:ne { cell } { [#1][#2] / rowspan } }
- \tl_if_empty:NTF \l__tblr_cell_rowspan_tl
+ { \__tblr_data_item:neen { cell } {#1} {#2} { rowspan } }
+ \int_compare:nNnTF { \l__tblr_cell_rowspan_tl } < {2}
{ \dim_set:Nn \l__tblr_cell_ht_dim { \l__tblr_h_tl } }
{
\__tblr_get_span_vertical_sizes:NNNNN #1 #2
@@ -3872,7 +4194,7 @@
\c__tblr_valign_m_tl
{
\vfil
- \tl_if_empty:NT \l__tblr_cell_rowspan_tl
+ \int_compare:nNnT { \l__tblr_cell_rowspan_tl } < {2}
{
\box_set_ht:Nn \l__tblr_a_box
{ \__tblr_data_item:nen { row } {#1} { @row-upper } }
@@ -3892,7 +4214,7 @@
\c__tblr_valign_f_tl
{
\vfil
- \tl_if_empty:NTF \l__tblr_cell_rowspan_tl
+ \int_compare:nNnTF { \l__tblr_cell_rowspan_tl } < {2}
{
\box_set_dp:Nn \l__tblr_a_box
{ \__tblr_data_item:nen { row } {#1} { @row-foot } }
@@ -3924,11 +4246,11 @@
\cs_new_protected:Npn \__tblr_build_cell_background:NN #1 #2
{
- \__tblr_prop_if_in:nxF {cell} { [#1][#2] / omit }
+ \int_compare:nNnT { \__tblr_data_item:neen { cell } {#1} {#2} { omit } } = {0}
{
\group_begin:
\tl_set:Nx \l__tblr_b_tl
- { \__tblr_prop_item:ne { cell } { [#1][#2] / background } }
+ { \__tblr_data_item:neen { cell } {#1} {#2} { background } }
\tl_if_empty:NF \l__tblr_b_tl
{
\__tblr_get_cell_background_width:NNN #1 #2 \l_tmpa_dim
@@ -3946,7 +4268,7 @@
%% #1: row number; #2: column number; #3 resulting dimension
\cs_new_protected:Npn \__tblr_get_cell_background_width:NNN #1 #2 #3
{
- \tl_if_empty:NTF \l__tblr_cell_colspan_tl
+ \int_compare:nNnTF { \l__tblr_cell_colspan_tl } < {2}
{ \dim_set:Nn #3 { \l__tblr_x_tl + \l__tblr_w_tl + \l__tblr_y_tl } }
{
\dim_set:Nn #3 { \l__tblr_o_dim + \l__tblr_cell_wd_dim + \l__tblr_q_dim }
@@ -3956,7 +4278,7 @@
%% #1: row number; #2: column number; #3 resulting dimension
\cs_new_protected:Npn \__tblr_get_cell_background_depth:NNN #1 #2 #3
{
- \tl_if_empty:NTF \l__tblr_cell_rowspan_tl
+ \int_compare:nNnTF { \l__tblr_cell_rowspan_tl } < {2}
{ \dim_set_eq:NN #3 \l__tblr_row_dp_dim }
{
\dim_set:Nn #3
@@ -4014,7 +4336,7 @@
\cs_new_protected:Npn \__tblr_get_span_horizontal_sizes:NNNNN #1 #2 #3 #4 #5
{
\dim_set:Nn #3
- { \__tblr_prop_item:ne { column } { [#2] / leftsep} }
+ { \__tblr_data_item:nen { column } {#2} { leftsep } }
\dim_zero:N #4
\int_step_inline:nnn { #2 } { #2 + \l__tblr_cell_colspan_tl - 2 }
{
@@ -4033,8 +4355,8 @@
}
\dim_set:Nn #5
{
- \__tblr_prop_item:ne { column }
- { [\int_eval:n {#2 + \l__tblr_cell_colspan_tl - 1}] / rightsep }
+ \__tblr_data_item:nen { column }
+ { \int_eval:n {#2 + \l__tblr_cell_colspan_tl - 1} } { rightsep }
}
%\tl_log:x { cell[#1][#2] ~:~ \dim_use:N #3, \dim_use:N #4, \dim_use:N #5 }
}
@@ -4061,6 +4383,7 @@
\bool_new:N \g__tblr_tracing_rowspec_bool
\bool_new:N \g__tblr_tracing_target_bool
\bool_new:N \g__tblr_tracing_cellspan_bool
+\bool_new:N \g__tblr_tracing_intarray_bool
\keys_define:nn { tblr-set-tracing }
{
@@ -4088,6 +4411,8 @@
-target .code:n = \bool_gset_false:N \g__tblr_tracing_target_bool,
+cellspan .code:n = \bool_gset_true:N \g__tblr_tracing_cellspan_bool,
-cellspan .code:n = \bool_gset_false:N \g__tblr_tracing_cellspan_bool,
+ +intarray .code:n = \bool_gset_true:N \g__tblr_tracing_intarray_bool,
+ -intarray .code:n = \bool_gset_false:N \g__tblr_tracing_intarray_bool,
all .code:n = \__tblr_enable_all_tracings:,
none .code:n = \__tblr_disable_all_tracings:,
}
@@ -4106,6 +4431,7 @@
\bool_gset_true:N \g__tblr_tracing_rowspec_bool
\bool_gset_true:N \g__tblr_tracing_target_bool
\bool_gset_true:N \g__tblr_tracing_cellspan_bool
+ \bool_gset_true:N \g__tblr_tracing_intarray_bool
}
\cs_new_protected_nopar:Npn \__tblr_disable_all_tracings:
@@ -4122,6 +4448,7 @@
\bool_gset_false:N \g__tblr_tracing_rowspec_bool
\bool_gset_false:N \g__tblr_tracing_target_bool
\bool_gset_false:N \g__tblr_tracing_cellspan_bool
+ \bool_gset_false:N \g__tblr_tracing_intarray_bool
}
\NewDocumentCommand \LogTabularrayTracing { m }
@@ -4143,7 +4470,7 @@
\cs_new_protected:Npn \__tblr_log_tracing_text:
{
- \__tblr_prop_log:n { text }
+ \__tblr_text_log:n { text }
}
\cs_new_protected:Npn \__tblr_log_tracing_command:
@@ -4158,7 +4485,7 @@
\cs_new_protected:Npn \__tblr_log_tracing_column:
{
- \__tblr_prop_log:n { column }
+ \__tblr_data_log:n { column }
}
\cs_new_protected:Npn \__tblr_log_tracing_row:
@@ -4168,17 +4495,17 @@
\cs_new_protected:Npn \__tblr_log_tracing_cell:
{
- \__tblr_prop_log:n { cell }
+ \__tblr_data_log:n { cell }
}
\cs_new_protected:Npn \__tblr_log_tracing_vline:
{
- \__tblr_prop_log:n { vline }
+ \__tblr_text_log:n { vline }
}
\cs_new_protected:Npn \__tblr_log_tracing_hline:
{
- \__tblr_prop_log:n { hline }
+ \__tblr_text_log:n { hline }
}
\cs_new_protected:Npn \__tblr_log_tracing_colspec:
diff --git a/macros/latex/contrib/tabularray/tabularray.tex b/macros/latex/contrib/tabularray/tabularray.tex
index 03a2835a5e..5b1912c063 100644
--- a/macros/latex/contrib/tabularray/tabularray.tex
+++ b/macros/latex/contrib/tabularray/tabularray.tex
@@ -15,7 +15,7 @@
}
\renewcommand*{\thefootnote}{*}
-\newcommand*{\myversion}{2021J}
+\newcommand*{\myversion}{2021K}
\newcommand*{\mydate}{Version \myversion\ (\the\year-\mylpad\month-\mylpad\day)\\\myrepo}
\newcommand*{\myrepo}{\url{https://github.com/lvjr/tabularray}}
\newcommand*{\mylpad}[1]{\ifnum#1<10 0\the#1\else\the#1\fi}
@@ -468,7 +468,7 @@ The following example demonstrates how to define similar rules as in \verb!bookt
\end{tblr}
\end{demohigh}
-\chapter{New Interface}
+\chapter{New Interfaces}
With \verb!tabularray! package, you can separate style and content totally in tables.
@@ -642,6 +642,24 @@ Options \verb!row{i}! and \verb!column{j}! are for setting some rows and columns
\end{tblr}
\end{demohigh}
+We can specify foreground colors, background colors and fonts with
+\verb!bg!, \verb!fg! and \verb!font! keys, respectively, for cells/rows/columns.
+In most cases, \verb!bg! key can be omitted, which you can see in the previous examples.
+
+\begin{demohigh}
+\begin{tblr}{
+ colspec = {lcr},
+ row{odd} = {bg=azure8},
+ row{1} = {bg=azure3, fg=white, font=\sffamily},
+}
+ Alpha & Beta & Gamma \\
+ Delta & Epsilon & Zeta \\
+ Eta & Theta & Iota \\
+ Kappa & Lambda & Mu \\
+ Nu Xi Omikron & Pi Rho Sigma & Tau Upsilon Phi \\
+\end{tblr}
+\end{demohigh}
+
\section{Space in Tables}
Options \verb!rowsep! and \verb!colsep! are for setting padding for rows and columns, respectively.
@@ -682,6 +700,18 @@ And \verb!\\[dimen]! can be replaced by \verb!belowsep+! option:
\end{tblr}
\end{demohigh}
+Also \verb!\doublerulesep! parameter can be replaced by \verb!rulesep! option:
+
+\begin{demohigh}
+\begin{tblr}{
+ colspec={||llll||},rowspec={|QQQ|},rulesep=4pt,
+}
+ Alpha & Beta & Gamma & Delta \\
+ Epsilon & Zeta & Eta & Theta \\
+ Iota & Kappa & Lambda & Mu \\
+\end{tblr}
+\end{demohigh}
+
Also \verb!\arraystretch! parameter can be replaced by \verb!stretch! option:
\begin{demohigh}
@@ -713,7 +743,7 @@ Counters \verb!rownum!, \verb!colnum!, \verb!rowcount!, \verb!colcount! can be u
\end{tblr}
\end{demohigh}
-\section{Experimental Interface}
+\section{Experimental Interfaces}
Everything described in this section is in \underline{\textcolor{red3}{\textbf{experimental}}} status.
Don’t use them in important documents, unless you have time
diff --git a/macros/latex/required/firstaid/changes.txt b/macros/latex/required/firstaid/changes.txt
index c97129e31f..d7823c21a1 100644
--- a/macros/latex/required/firstaid/changes.txt
+++ b/macros/latex/required/firstaid/changes.txt
@@ -6,6 +6,13 @@
We also fix \FN@allmarks which can blow as it loops using the
wrong counter (so the loops runs a random number of times)
+2021-01-06 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * latex2e-first-aid-for-external-files.dtx:
+ Add replacement code for everysel package.
+ Add first aid for CJK (as it overwrite \selectfont with an
+ old definition).
+
2020-12-14 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
* latex2e-first-aid-for-external-files.dtx:
diff --git a/macros/latex/required/firstaid/firstaid.ins b/macros/latex/required/firstaid/firstaid.ins
index 9965480f20..cd5ea2006d 100644
--- a/macros/latex/required/firstaid/firstaid.ins
+++ b/macros/latex/required/firstaid/firstaid.ins
@@ -3,8 +3,8 @@
%% driver files from the doc files in this package when run through
%% LaTeX or TeX.
%%
-%% Copyright (C) 2020
-%% The LaTeX3 Project and any individual authors listed elsewhere
+%% Copyright (C) 2020-2021
+%% The LaTeX Project and any individual authors listed elsewhere
%% in this file.
%%
%% This file is part of the Standard LaTeX `First Aid Bundle'.
@@ -44,8 +44,8 @@ reports for it can be opened at https://latex-project.org/bugs/
(but please observe conditions on bug reports sent to that address!)
-Copyright (C) 2020
-The LaTeX3 Project and any individual authors listed elsewhere
+Copyright (C) 2020-2021
+The LaTeX Project and any individual authors listed elsewhere
in this file.
This file was generated from file(s) of the Standard LaTeX `First Aid Bundle'.
@@ -70,6 +70,9 @@ without such generated files.
{\from{latex2e-first-aid-for-external-files.dtx}{kernel}}}
\generate{\file{filehook-ltx.sty}
- {\from{latex2e-first-aid-for-external-files.dtx}{filehook}}}
+ {\from{latex2e-first-aid-for-external-files.dtx}{filehook-ltx}}}
+
+\generate{\file{everysel-ltx.sty}
+ {\from{latex2e-first-aid-for-external-files.dtx}{everysel-ltx}}}
\endbatchfile
diff --git a/macros/latex/required/firstaid/latex2e-first-aid-for-external-files.dtx b/macros/latex/required/firstaid/latex2e-first-aid-for-external-files.dtx
index 1ce357d6d3..7eb108418c 100644
--- a/macros/latex/required/firstaid/latex2e-first-aid-for-external-files.dtx
+++ b/macros/latex/required/firstaid/latex2e-first-aid-for-external-files.dtx
@@ -1,6 +1,7 @@
% \iffalse meta-comment
%
-%% File: latex2e-first-aid-for-external-files.dtx (C) Copyright 2020
+%% File: latex2e-first-aid-for-external-files.dtx (C) Copyright 2020-2021
+%%
%% The LaTeX Project and any individual authors listed elsewhere
%% in this file.
%
@@ -111,7 +112,7 @@
%
% \begin{macrocode}
\def\LaTeXFirstAidDate{2021/03/15}
-\def\LaTeXFirstAidVersion{v1.0j}
+\def\LaTeXFirstAidVersion{v1.0l}
% \end{macrocode}
%
% \begin{macrocode}
@@ -183,7 +184,7 @@
%\end{verbatim}
%
% \begin{macrocode}
-%<*filehook>
+%<*filehook-ltx>
% \end{macrocode}
%
% \begin{macrocode}
@@ -273,7 +274,7 @@
% \end{macrocode}
%
% \begin{macrocode}
-%</filehook>
+%</filehook-ltx>
% \end{macrocode}
%
%
@@ -306,7 +307,7 @@
\AddToHook{file/after/biditools.sty}[firstaid]{%
\FirstAidNeededT{biditools}{sty}%
{2020/05/13 v2 Programming tools for bidi package}%
- {
+ {%
% \end{macrocode}
% \pkg{bidi} adds some code to the beginning of \cs{document} which
% contains \cs{endgroup} and \cs{begingroup} which is no longer
@@ -327,7 +328,7 @@
\AddToHook{enddocument/info}%
{\let\bidi@AfterEndDocumentCheckLabelsRerun\@firstofone
\bidi@afterenddocumentchecklabelsrerunhook}%
- }
+ }%
}
% \end{macrocode}
%
@@ -397,6 +398,119 @@
% \end{macrocode}
%
%
+% \begin{macrocode}
+%</kernel>
+% \end{macrocode}
+%
+%
+%
+%
+%
+% \subsection{The \pkg{everysel} package first aid}
+%
+%
+% The \cs{selectfont} command got a hook (with the 2021/05 release) which
+% was originally provided by the \pkg{everysel}
+% package. Now that it is in the kernel this package is no longer
+% needed (or only in a simplified manner).
+%
+% If it is requested we replace it with a simplified package
+% (until) it gets updated at which point this line can be removed.
+% \changes{v2.2k}{2020/12/04}{Emulate everysel package}
+% \begin{macrocode}
+%<*kernel>
+% this has been updated
+%\declare@file@substitution{everysel.sty}{everysel-ltx.sty}
+%</kernel>
+% \end{macrocode}
+%
+%
+%
+% \begin{macrocode}
+%<*everysel-ltx>
+\ProvidesPackage{everysel-ltx}
+ [2020/12/04 v1.0a
+ Emulation of the original everysel^^Jpackage with kernel methods]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand*{\EverySelectfont}[1]
+ {\AddToHook{selectfont}{#1}}
+\newcommand*{\AtNextSelectfont}[1]
+ {\AddToHookNext{selectfont}{#1}}
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+%</everysel-ltx>
+% \end{macrocode}
+%
+%
+%
+%
+%
+% \subsection{The \pkg{CJK} package first aid}
+%
+% \begin{macrocode}
+%<*kernel>
+% \end{macrocode}
+%
+% The package redefines \cs{selectfont} to add some code but
+% otherwise uses the old definition. So we make a copy of the
+% newer kernel definition and restore it after the package got
+% loaded. The extra code that the package needs can go into the
+% newly provided hook instead.
+%
+% \begin{macrocode}
+\DeclareCommandCopy\CJK@selectfont\selectfont
+% \end{macrocode}
+%
+% \begin{macrocode}
+\AddToHook{file/after/CJK.sty}[firstaid]{%
+ \FirstAidNeededT{CJK}{sty}%
+ {2015/04/18 4.8.4}%
+ {%
+ \DeclareCommandCopy\selectfont\CJK@selectfont
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \AddToHook{selectfont}[CJK]{%
+ \expandafter\ifx\csname CJK@\curr@fontshape\endcsname \relax
+ \else
+ \CJK@bold@false
+ \csname CJK@\curr@fontshape\endcsname
+ \fi
+ }%
+ }%
+}
+% \end{macrocode}
+%
+%
+%
+% \subsection{\cs{footref} first aid}
+%
+% A few classes unconditionally define \cs{footref}. Until that has
+% changed we provide some first aid to let them do this.
+%
+% \begin{macrocode}
+\AddToHook{file/after/scrkbase.sty}[firstaid]{%
+ \FirstAidNeededT{scrkbase}{sty}%
+ {2020/09/21 v3.32 KOMA-Script package (KOMA-Script-dependent basics and keyval usage)}%
+ {\let\footref\@undefined}
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\AddToHook{class/before/memoir}[firstaid]{%
+ % for version {2020/10/04 v3.7n configurable book, report, article document class}%
+ \let\footref\@undefined
+}
+% \end{macrocode}
+%
+%
+%
+%
+%
% \subsection{The \pkg{bigfoot} first aid}
%
% The \pkg{bigfoot} packages makes the assumption that two
@@ -432,7 +546,6 @@
%
%
%
-%
% \subsection[Temporary fixes for the kernel (until the next
% patch-level release)]
% {Temporary fixes for the kernel \\
diff --git a/macros/latex/required/firstaid/latex2e-first-aid-for-external-files.pdf b/macros/latex/required/firstaid/latex2e-first-aid-for-external-files.pdf
index 1bf28e4760..2e9c812fd0 100644
--- a/macros/latex/required/firstaid/latex2e-first-aid-for-external-files.pdf
+++ b/macros/latex/required/firstaid/latex2e-first-aid-for-external-files.pdf
Binary files differ