summaryrefslogtreecommitdiff
path: root/macros
diff options
context:
space:
mode:
Diffstat (limited to 'macros')
-rw-r--r--macros/latex-dev/base/README.md2
-rw-r--r--macros/latex-dev/base/alltt.pdfbin214710 -> 214710 bytes
-rw-r--r--macros/latex-dev/base/cfgguide.pdfbin242886 -> 242886 bytes
-rw-r--r--macros/latex-dev/base/changes.txt50
-rw-r--r--macros/latex-dev/base/classes.pdfbin550002 -> 550002 bytes
-rw-r--r--macros/latex-dev/base/clsguide.pdfbin402779 -> 402779 bytes
-rw-r--r--macros/latex-dev/base/cmfonts.pdfbin292317 -> 292317 bytes
-rw-r--r--macros/latex-dev/base/cyrguide.pdfbin239681 -> 239681 bytes
-rw-r--r--macros/latex-dev/base/doc.dtx5
-rw-r--r--macros/latex-dev/base/doc.pdfbin676545 -> 676731 bytes
-rw-r--r--macros/latex-dev/base/docstrip.pdfbin503349 -> 503401 bytes
-rw-r--r--macros/latex-dev/base/encguide.pdfbin1316472 -> 1316472 bytes
-rw-r--r--macros/latex-dev/base/exscale.pdfbin212307 -> 212307 bytes
-rw-r--r--macros/latex-dev/base/fix-cm.pdfbin287672 -> 287672 bytes
-rw-r--r--macros/latex-dev/base/fntguide.pdfbin493957 -> 493957 bytes
-rw-r--r--macros/latex-dev/base/graphpap.pdfbin169323 -> 169323 bytes
-rw-r--r--macros/latex-dev/base/ifthen.pdfbin220417 -> 220417 bytes
-rw-r--r--macros/latex-dev/base/inputenc.pdfbin318168 -> 318168 bytes
-rw-r--r--macros/latex-dev/base/latexchanges.pdfbin468043 -> 468043 bytes
-rw-r--r--macros/latex-dev/base/latexrelease.pdfbin290495 -> 290495 bytes
-rw-r--r--macros/latex-dev/base/latexsym.pdfbin208359 -> 208359 bytes
-rw-r--r--macros/latex-dev/base/lb2.pdfbin252154 -> 252154 bytes
-rw-r--r--macros/latex-dev/base/letter.pdfbin328853 -> 328949 bytes
-rw-r--r--macros/latex-dev/base/lgc2.pdfbin215091 -> 215091 bytes
-rw-r--r--macros/latex-dev/base/lppl.pdfbin132373 -> 132373 bytes
-rw-r--r--macros/latex-dev/base/ltclass.dtx12
-rw-r--r--macros/latex-dev/base/ltcmd.dtx173
-rw-r--r--macros/latex-dev/base/ltcmdhooks-code.pdfbin686990 -> 693284 bytes
-rw-r--r--macros/latex-dev/base/ltcmdhooks-doc.pdfbin477922 -> 479593 bytes
-rw-r--r--macros/latex-dev/base/ltcmdhooks.dtx33
-rw-r--r--macros/latex-dev/base/ltdefns.dtx7
-rw-r--r--macros/latex-dev/base/ltfilehook-code.pdfbin784738 -> 795607 bytes
-rw-r--r--macros/latex-dev/base/ltfilehook-doc.pdfbin543890 -> 546176 bytes
-rw-r--r--macros/latex-dev/base/ltfilehook.dtx9
-rw-r--r--macros/latex-dev/base/lthooks-code.pdfbin1002696 -> 1029365 bytes
-rw-r--r--macros/latex-dev/base/lthooks-doc.pdfbin676691 -> 684097 bytes
-rw-r--r--macros/latex-dev/base/lthooks.dtx103
-rw-r--r--macros/latex-dev/base/ltluatex.pdfbin325289 -> 325289 bytes
-rw-r--r--macros/latex-dev/base/ltnews.pdfbin1068601 -> 1074372 bytes
-rw-r--r--macros/latex-dev/base/ltnews01.pdfbin161518 -> 161518 bytes
-rw-r--r--macros/latex-dev/base/ltnews02.pdfbin150466 -> 150466 bytes
-rw-r--r--macros/latex-dev/base/ltnews03.pdfbin150493 -> 150493 bytes
-rw-r--r--macros/latex-dev/base/ltnews04.pdfbin143686 -> 143686 bytes
-rw-r--r--macros/latex-dev/base/ltnews05.pdfbin174488 -> 174488 bytes
-rw-r--r--macros/latex-dev/base/ltnews06.pdfbin142909 -> 142909 bytes
-rw-r--r--macros/latex-dev/base/ltnews07.pdfbin138044 -> 138044 bytes
-rw-r--r--macros/latex-dev/base/ltnews08.pdfbin155055 -> 155055 bytes
-rw-r--r--macros/latex-dev/base/ltnews09.pdfbin129032 -> 129032 bytes
-rw-r--r--macros/latex-dev/base/ltnews10.pdfbin159313 -> 159313 bytes
-rw-r--r--macros/latex-dev/base/ltnews11.pdfbin111955 -> 111955 bytes
-rw-r--r--macros/latex-dev/base/ltnews12.pdfbin147587 -> 147587 bytes
-rw-r--r--macros/latex-dev/base/ltnews13.pdfbin173323 -> 173323 bytes
-rw-r--r--macros/latex-dev/base/ltnews14.pdfbin161405 -> 161405 bytes
-rw-r--r--macros/latex-dev/base/ltnews15.pdfbin130447 -> 130447 bytes
-rw-r--r--macros/latex-dev/base/ltnews16.pdfbin146533 -> 146533 bytes
-rw-r--r--macros/latex-dev/base/ltnews17.pdfbin166368 -> 166368 bytes
-rw-r--r--macros/latex-dev/base/ltnews18.pdfbin38031 -> 38031 bytes
-rw-r--r--macros/latex-dev/base/ltnews19.pdfbin245818 -> 245818 bytes
-rw-r--r--macros/latex-dev/base/ltnews20.pdfbin297070 -> 297070 bytes
-rw-r--r--macros/latex-dev/base/ltnews21.pdfbin244869 -> 244869 bytes
-rw-r--r--macros/latex-dev/base/ltnews22.pdfbin318399 -> 318399 bytes
-rw-r--r--macros/latex-dev/base/ltnews23.pdfbin287125 -> 287125 bytes
-rw-r--r--macros/latex-dev/base/ltnews24.pdfbin265211 -> 265211 bytes
-rw-r--r--macros/latex-dev/base/ltnews25.pdfbin205162 -> 205162 bytes
-rw-r--r--macros/latex-dev/base/ltnews26.pdfbin379735 -> 379735 bytes
-rw-r--r--macros/latex-dev/base/ltnews27.pdfbin252432 -> 252432 bytes
-rw-r--r--macros/latex-dev/base/ltnews28.pdfbin387987 -> 387987 bytes
-rw-r--r--macros/latex-dev/base/ltnews29.pdfbin454808 -> 454808 bytes
-rw-r--r--macros/latex-dev/base/ltnews30.pdfbin511855 -> 511855 bytes
-rw-r--r--macros/latex-dev/base/ltnews31.pdfbin526312 -> 526312 bytes
-rw-r--r--macros/latex-dev/base/ltnews32.pdfbin546162 -> 546162 bytes
-rw-r--r--macros/latex-dev/base/ltnews33.pdfbin539851 -> 522413 bytes
-rw-r--r--macros/latex-dev/base/ltnews33.tex1042
-rw-r--r--macros/latex-dev/base/ltoutput.dtx16
-rw-r--r--macros/latex-dev/base/ltpara-code.pdfbin655726 -> 664749 bytes
-rw-r--r--macros/latex-dev/base/ltpara-doc.pdfbin557225 -> 560474 bytes
-rw-r--r--macros/latex-dev/base/ltpara.dtx35
-rw-r--r--macros/latex-dev/base/ltshipout-code.pdfbin811021 -> 818898 bytes
-rw-r--r--macros/latex-dev/base/ltshipout-doc.pdfbin562571 -> 564834 bytes
-rw-r--r--macros/latex-dev/base/ltvers.dtx4
-rw-r--r--macros/latex-dev/base/ltx3info.pdfbin219354 -> 219354 bytes
-rw-r--r--macros/latex-dev/base/ltxdoc.pdfbin238577 -> 238577 bytes
-rw-r--r--macros/latex-dev/base/makeindx.pdfbin173682 -> 173682 bytes
-rw-r--r--macros/latex-dev/base/manual.pdfbin160521 -> 160521 bytes
-rw-r--r--macros/latex-dev/base/modguide.pdfbin243601 -> 243601 bytes
-rw-r--r--macros/latex-dev/base/nfssfont.pdfbin218782 -> 218782 bytes
-rw-r--r--macros/latex-dev/base/proc.pdfbin233995 -> 233995 bytes
-rw-r--r--macros/latex-dev/base/slides.pdfbin374051 -> 374051 bytes
-rw-r--r--macros/latex-dev/base/slifonts.pdfbin234008 -> 234008 bytes
-rw-r--r--macros/latex-dev/base/source2e.pdfbin4959329 -> 5275548 bytes
-rw-r--r--macros/latex-dev/base/syntonly.pdfbin197297 -> 197409 bytes
-rw-r--r--macros/latex-dev/base/tlc2.pdfbin289245 -> 289245 bytes
-rw-r--r--macros/latex-dev/base/tulm.pdfbin170529 -> 170529 bytes
-rw-r--r--macros/latex-dev/base/usrguide.pdfbin430996 -> 430996 bytes
-rw-r--r--macros/latex-dev/base/usrguide3.pdfbin325299 -> 325299 bytes
-rw-r--r--macros/latex-dev/base/utf8ienc.pdfbin361356 -> 361715 bytes
-rw-r--r--macros/latex-dev/base/webcomp.pdfbin146200 -> 146200 bytes
-rw-r--r--macros/latex-dev/required/amsmath/README.md4
-rw-r--r--macros/latex-dev/required/amsmath/amsbsy.dtx5
-rw-r--r--macros/latex-dev/required/amsmath/amsbsy.ins13
-rw-r--r--macros/latex-dev/required/amsmath/amsbsy.pdfbin161324 -> 173746 bytes
-rw-r--r--macros/latex-dev/required/amsmath/amscd.dtx4
-rw-r--r--macros/latex-dev/required/amsmath/amscd.ins12
-rw-r--r--macros/latex-dev/required/amsmath/amscd.pdfbin165745 -> 178672 bytes
-rw-r--r--macros/latex-dev/required/amsmath/amsgen.dtx4
-rw-r--r--macros/latex-dev/required/amsmath/amsgen.ins12
-rw-r--r--macros/latex-dev/required/amsmath/amsgen.pdfbin164345 -> 176740 bytes
-rw-r--r--macros/latex-dev/required/amsmath/amsldoc.pdfbin476032 -> 508231 bytes
-rw-r--r--macros/latex-dev/required/amsmath/amsldoc.tex6
-rw-r--r--macros/latex-dev/required/amsmath/amsmath-2018-12-01.sty6
-rw-r--r--macros/latex-dev/required/amsmath/amsmath.dtx9
-rw-r--r--macros/latex-dev/required/amsmath/amsmath.ins12
-rw-r--r--macros/latex-dev/required/amsmath/amsmath.pdfbin384171 -> 398817 bytes
-rw-r--r--macros/latex-dev/required/amsmath/amsopn.dtx4
-rw-r--r--macros/latex-dev/required/amsmath/amsopn.ins12
-rw-r--r--macros/latex-dev/required/amsmath/amsopn.pdfbin129155 -> 138991 bytes
-rw-r--r--macros/latex-dev/required/amsmath/amstex.sty6
-rw-r--r--macros/latex-dev/required/amsmath/amstext.dtx4
-rw-r--r--macros/latex-dev/required/amsmath/amstext.ins12
-rw-r--r--macros/latex-dev/required/amsmath/amstext.pdfbin194257 -> 215693 bytes
-rw-r--r--macros/latex-dev/required/amsmath/amsxtra.dtx4
-rw-r--r--macros/latex-dev/required/amsmath/amsxtra.ins12
-rw-r--r--macros/latex-dev/required/amsmath/amsxtra.pdfbin104545 -> 112556 bytes
-rw-r--r--macros/latex-dev/required/amsmath/changes.txt11
-rw-r--r--macros/latex-dev/required/amsmath/subeqn.pdfbin101293 -> 109737 bytes
-rw-r--r--macros/latex-dev/required/amsmath/technote.pdfbin130600 -> 145610 bytes
-rw-r--r--macros/latex-dev/required/amsmath/testmath.pdfbin429026 -> 454662 bytes
-rw-r--r--macros/latex-dev/required/firstaid/changes.txt8
-rw-r--r--macros/latex-dev/required/firstaid/firstaid.ins2
-rw-r--r--macros/latex-dev/required/firstaid/latex2e-first-aid-for-external-files.dtx45
-rw-r--r--macros/latex-dev/required/firstaid/latex2e-first-aid-for-external-files.pdfbin224897 -> 228673 bytes
-rw-r--r--macros/latex-dev/required/graphics/README.md2
-rw-r--r--macros/latex-dev/required/graphics/changes.txt12
-rw-r--r--macros/latex-dev/required/graphics/color.pdfbin215002 -> 215002 bytes
-rw-r--r--macros/latex-dev/required/graphics/drivers.pdfbin286309 -> 286309 bytes
-rw-r--r--macros/latex-dev/required/graphics/epsfig.pdfbin167686 -> 167686 bytes
-rw-r--r--macros/latex-dev/required/graphics/graphics.pdfbin310676 -> 310676 bytes
-rw-r--r--macros/latex-dev/required/graphics/graphicx.pdfbin247910 -> 247910 bytes
-rw-r--r--macros/latex-dev/required/graphics/grfguide.pdfbin330071 -> 330071 bytes
-rw-r--r--macros/latex-dev/required/graphics/keyval.pdfbin239654 -> 239654 bytes
-rw-r--r--macros/latex-dev/required/graphics/lscape.pdfbin163584 -> 163584 bytes
-rw-r--r--macros/latex-dev/required/graphics/rotating.pdfbin269434 -> 269292 bytes
-rw-r--r--macros/latex-dev/required/graphics/rotex.pdfbin172231 -> 172230 bytes
-rw-r--r--macros/latex-dev/required/graphics/trig.pdfbin207299 -> 207299 bytes
-rw-r--r--macros/latex-dev/required/tools/README.md2
-rw-r--r--macros/latex-dev/required/tools/afterpage.pdfbin205344 -> 205344 bytes
-rw-r--r--macros/latex-dev/required/tools/array.pdfbin516484 -> 516568 bytes
-rw-r--r--macros/latex-dev/required/tools/bm.pdfbin331424 -> 331424 bytes
-rw-r--r--macros/latex-dev/required/tools/calc.pdfbin370414 -> 370414 bytes
-rw-r--r--macros/latex-dev/required/tools/changes.txt18
-rw-r--r--macros/latex-dev/required/tools/dcolumn.pdfbin220689 -> 220689 bytes
-rw-r--r--macros/latex-dev/required/tools/delarray.pdfbin198647 -> 198647 bytes
-rw-r--r--macros/latex-dev/required/tools/enumerate.pdfbin215355 -> 215355 bytes
-rw-r--r--macros/latex-dev/required/tools/fileerr.pdfbin195098 -> 195211 bytes
-rw-r--r--macros/latex-dev/required/tools/fontsmpl.pdfbin154034 -> 154034 bytes
-rw-r--r--macros/latex-dev/required/tools/ftnright.pdfbin369809 -> 369903 bytes
-rw-r--r--macros/latex-dev/required/tools/hhline.pdfbin189538 -> 189538 bytes
-rw-r--r--macros/latex-dev/required/tools/indentfirst.pdfbin157803 -> 157803 bytes
-rw-r--r--macros/latex-dev/required/tools/layout.pdfbin267761 -> 267761 bytes
-rw-r--r--macros/latex-dev/required/tools/longtable.dtx6
-rw-r--r--macros/latex-dev/required/tools/longtable.pdfbin382012 -> 382541 bytes
-rw-r--r--macros/latex-dev/required/tools/multicol.pdfbin516282 -> 516238 bytes
-rw-r--r--macros/latex-dev/required/tools/rawfonts.pdfbin146534 -> 146534 bytes
-rw-r--r--macros/latex-dev/required/tools/shellesc.pdfbin183532 -> 183532 bytes
-rw-r--r--macros/latex-dev/required/tools/showkeys.pdfbin260624 -> 260624 bytes
-rw-r--r--macros/latex-dev/required/tools/somedefs.pdfbin175169 -> 175169 bytes
-rw-r--r--macros/latex-dev/required/tools/tabularx.pdfbin278041 -> 278041 bytes
-rw-r--r--macros/latex-dev/required/tools/theorem.pdfbin351310 -> 351417 bytes
-rw-r--r--macros/latex-dev/required/tools/tools-overview.pdfbin73674 -> 73674 bytes
-rw-r--r--macros/latex-dev/required/tools/trace.pdfbin229713 -> 229713 bytes
-rw-r--r--macros/latex-dev/required/tools/varioref.pdfbin383483 -> 383483 bytes
-rw-r--r--macros/latex-dev/required/tools/verbatim.pdfbin330815 -> 330815 bytes
-rw-r--r--macros/latex-dev/required/tools/xr.pdfbin177595 -> 177595 bytes
-rw-r--r--macros/latex-dev/required/tools/xspace.pdfbin256897 -> 256897 bytes
-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
265 files changed, 9773 insertions, 3257 deletions
diff --git a/macros/latex-dev/base/README.md b/macros/latex-dev/base/README.md
index 4997754b3c..0ebb2a67e7 100644
--- a/macros/latex-dev/base/README.md
+++ b/macros/latex-dev/base/README.md
@@ -1,7 +1,7 @@
The LaTeX kernel
================
-Release 2021-06-01 pre-release 3
+Release 2021-12-01 pre-release 0
Overview
--------
diff --git a/macros/latex-dev/base/alltt.pdf b/macros/latex-dev/base/alltt.pdf
index b763b6bda8..1ed2d7cf4f 100644
--- a/macros/latex-dev/base/alltt.pdf
+++ b/macros/latex-dev/base/alltt.pdf
Binary files differ
diff --git a/macros/latex-dev/base/cfgguide.pdf b/macros/latex-dev/base/cfgguide.pdf
index dea65fdbf8..496657f44e 100644
--- a/macros/latex-dev/base/cfgguide.pdf
+++ b/macros/latex-dev/base/cfgguide.pdf
Binary files differ
diff --git a/macros/latex-dev/base/changes.txt b/macros/latex-dev/base/changes.txt
index 75e7d04a2f..634eb0e351 100644
--- a/macros/latex-dev/base/changes.txt
+++ b/macros/latex-dev/base/changes.txt
@@ -6,6 +6,50 @@ completeness or accuracy and it contains some references to files that
are not part of the distribution.
================================================================================
+================================================================================
+All changes above are only part of the development branch for the next release.
+================================================================================
+
+#########################
+# 2020-06-01 Release
+#########################
+
+2021-05-31 David Carlisle <David.Carlisle@latex-project.org>
+
+ * ltclass.dtx: Initialise \@raw@classoptionslist to \relax to
+ match \@classoptionslist
+
+2021-05-30 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * doc.dtx (subsection{Macros for the `documentation parts'}):
+ Use same error message text as in format
+
+2021-05-26 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * ltdefns.dtx (subsection{Robust commands and protect}):
+ Normalize error message in \MakeRobust
+
+2021-05-26 Phelype Oleinik <phelype.oleinik@latex-project.org>
+
+ * lthooks.dtx:
+ Remove deprecated \DeclareDefaultHookLabel for good.
+
+2021-05-25 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * lthooks.dtx, ltfilehook.dtx:
+ Normalized some error message texts
+
+2021-05-24 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * ltcmd.dtx, ltcmdhooks.dtx, ltfilehook.dtx, lthooks.dtx, ltpara.dtx:
+ Use \msg_... instead of \__kernel_msg... commands for normalized
+ error and warning commands.
+
+2021-05-14 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * ltoutput.dtx: normalize the error commands, always use
+ \@latex@error not \@latexerr
+
2021-04-29 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
* lthooks.dtx (subsection{\LaTeXe{} package interface commands}):
@@ -16,7 +60,6 @@ are not part of the distribution.
* lthooks.dtx, ltfilehook.dtx:
Switch to kernel (not package) errors.
-
2021-04-29 Marcel KrĂĽger <Marcel.Krueger@latex-project.org>
* ltoutenc.dtx (subsection{Definitions for the TU encoding}):
@@ -359,11 +402,6 @@ are not part of the distribution.
* ltmiscen.dtx (subsection{Environments}):
\enddocument should always start out in vmode (gh/385)
-================================================================================
-All changes above are only part of the development branch for the next release.
-================================================================================
-
-
#########################
# 2020-10-01 PL 4 Release
#########################
diff --git a/macros/latex-dev/base/classes.pdf b/macros/latex-dev/base/classes.pdf
index cf7d562b56..ba722ade83 100644
--- a/macros/latex-dev/base/classes.pdf
+++ b/macros/latex-dev/base/classes.pdf
Binary files differ
diff --git a/macros/latex-dev/base/clsguide.pdf b/macros/latex-dev/base/clsguide.pdf
index d41d2f7dc7..1be79a4d94 100644
--- a/macros/latex-dev/base/clsguide.pdf
+++ b/macros/latex-dev/base/clsguide.pdf
Binary files differ
diff --git a/macros/latex-dev/base/cmfonts.pdf b/macros/latex-dev/base/cmfonts.pdf
index 65eada2d18..661a4f3547 100644
--- a/macros/latex-dev/base/cmfonts.pdf
+++ b/macros/latex-dev/base/cmfonts.pdf
Binary files differ
diff --git a/macros/latex-dev/base/cyrguide.pdf b/macros/latex-dev/base/cyrguide.pdf
index b81d5740dd..8b411f291a 100644
--- a/macros/latex-dev/base/cyrguide.pdf
+++ b/macros/latex-dev/base/cyrguide.pdf
Binary files differ
diff --git a/macros/latex-dev/base/doc.dtx b/macros/latex-dev/base/doc.dtx
index c1a96948a8..fb3412f21f 100644
--- a/macros/latex-dev/base/doc.dtx
+++ b/macros/latex-dev/base/doc.dtx
@@ -35,7 +35,7 @@
%<+package|shortvrb>\NeedsTeXFormat{LaTeX2e}[1994/12/01]
%<+package> \ProvidesPackage{doc}
%<+shortvrb>\ProvidesPackage{shortvrb}
-%<+package|shortvrb> [2020/11/23 v2.1m
+%<+package|shortvrb> [2021/05/28 v2.1n
%<+package|shortvrb> Standard LaTeX documentation package (FMi)]
%\catcode`\<=12
%
@@ -2117,6 +2117,7 @@
% \begin{macro}{\verb@eol@error}
% \changes{v1.8b}{1993/09/21}{Renamed \cs{verb@err} to
% \cs{verb@eol@error}, as in new LaTeX verbatim.}
+% \changes{v2.1n}{2021/05/28}{Use same error message text as in format}
% \begin{macrocode}
\let\verb@balance@group\@empty
@@ -2126,7 +2127,7 @@
\obeylines%
\gdef\verb@eol@error{\obeylines%
\def^^M{\verb@egroup\@latex@error{%
- Text for \noexpand\verb command ended by end of line}\@ehc}}%
+ \noexpand\verb ended by end of line}\@ehc}}%
\endgroup
% \end{macrocode}
% \end{macro}
diff --git a/macros/latex-dev/base/doc.pdf b/macros/latex-dev/base/doc.pdf
index b4b752d02f..e40bac6c17 100644
--- a/macros/latex-dev/base/doc.pdf
+++ b/macros/latex-dev/base/doc.pdf
Binary files differ
diff --git a/macros/latex-dev/base/docstrip.pdf b/macros/latex-dev/base/docstrip.pdf
index 1f93adfd24..535c38f3f0 100644
--- a/macros/latex-dev/base/docstrip.pdf
+++ b/macros/latex-dev/base/docstrip.pdf
Binary files differ
diff --git a/macros/latex-dev/base/encguide.pdf b/macros/latex-dev/base/encguide.pdf
index 2682e5e3a1..7174fe634d 100644
--- a/macros/latex-dev/base/encguide.pdf
+++ b/macros/latex-dev/base/encguide.pdf
Binary files differ
diff --git a/macros/latex-dev/base/exscale.pdf b/macros/latex-dev/base/exscale.pdf
index c15633e2c5..d814296c9e 100644
--- a/macros/latex-dev/base/exscale.pdf
+++ b/macros/latex-dev/base/exscale.pdf
Binary files differ
diff --git a/macros/latex-dev/base/fix-cm.pdf b/macros/latex-dev/base/fix-cm.pdf
index d8149b7da8..5353d938f3 100644
--- a/macros/latex-dev/base/fix-cm.pdf
+++ b/macros/latex-dev/base/fix-cm.pdf
Binary files differ
diff --git a/macros/latex-dev/base/fntguide.pdf b/macros/latex-dev/base/fntguide.pdf
index c498f9f449..b773b23001 100644
--- a/macros/latex-dev/base/fntguide.pdf
+++ b/macros/latex-dev/base/fntguide.pdf
Binary files differ
diff --git a/macros/latex-dev/base/graphpap.pdf b/macros/latex-dev/base/graphpap.pdf
index df0b482d62..223c4fc9d8 100644
--- a/macros/latex-dev/base/graphpap.pdf
+++ b/macros/latex-dev/base/graphpap.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ifthen.pdf b/macros/latex-dev/base/ifthen.pdf
index a756833b7e..cb731ce0ec 100644
--- a/macros/latex-dev/base/ifthen.pdf
+++ b/macros/latex-dev/base/ifthen.pdf
Binary files differ
diff --git a/macros/latex-dev/base/inputenc.pdf b/macros/latex-dev/base/inputenc.pdf
index ca53fac3a5..d91193b109 100644
--- a/macros/latex-dev/base/inputenc.pdf
+++ b/macros/latex-dev/base/inputenc.pdf
Binary files differ
diff --git a/macros/latex-dev/base/latexchanges.pdf b/macros/latex-dev/base/latexchanges.pdf
index 3e4f2aaa9d..fa0be13cc9 100644
--- a/macros/latex-dev/base/latexchanges.pdf
+++ b/macros/latex-dev/base/latexchanges.pdf
Binary files differ
diff --git a/macros/latex-dev/base/latexrelease.pdf b/macros/latex-dev/base/latexrelease.pdf
index cdce0fb74f..f2e104646e 100644
--- a/macros/latex-dev/base/latexrelease.pdf
+++ b/macros/latex-dev/base/latexrelease.pdf
Binary files differ
diff --git a/macros/latex-dev/base/latexsym.pdf b/macros/latex-dev/base/latexsym.pdf
index 5fb4a09541..c5f5f7ccab 100644
--- a/macros/latex-dev/base/latexsym.pdf
+++ b/macros/latex-dev/base/latexsym.pdf
Binary files differ
diff --git a/macros/latex-dev/base/lb2.pdf b/macros/latex-dev/base/lb2.pdf
index 6cc60fec76..ff53c048ee 100644
--- a/macros/latex-dev/base/lb2.pdf
+++ b/macros/latex-dev/base/lb2.pdf
Binary files differ
diff --git a/macros/latex-dev/base/letter.pdf b/macros/latex-dev/base/letter.pdf
index 2431b6d81f..069855100a 100644
--- a/macros/latex-dev/base/letter.pdf
+++ b/macros/latex-dev/base/letter.pdf
Binary files differ
diff --git a/macros/latex-dev/base/lgc2.pdf b/macros/latex-dev/base/lgc2.pdf
index 2a58b0470e..fce107fd9a 100644
--- a/macros/latex-dev/base/lgc2.pdf
+++ b/macros/latex-dev/base/lgc2.pdf
Binary files differ
diff --git a/macros/latex-dev/base/lppl.pdf b/macros/latex-dev/base/lppl.pdf
index dfccc5d5eb..4e5547d356 100644
--- a/macros/latex-dev/base/lppl.pdf
+++ b/macros/latex-dev/base/lppl.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltclass.dtx b/macros/latex-dev/base/ltclass.dtx
index 06b0e1cf43..a0ab0fa354 100644
--- a/macros/latex-dev/base/ltclass.dtx
+++ b/macros/latex-dev/base/ltclass.dtx
@@ -33,7 +33,7 @@
%<*driver>
% \fi
\ProvidesFile{ltclass.dtx}
- [2021/03/27 v1.4a LaTeX Kernel (Class & Package Interface)]
+ [2021/05/18 v1.4b LaTeX Kernel (Class & Package Interface)]
% \iffalse
\documentclass{ltxdoc}
\GetFileInfo{ltclass.dtx}
@@ -505,6 +505,14 @@
% \end{macrocode}
% \end{macro}
%
+% \begin{macro}{\@raw@classoptionslist}
+% List of options of the main class (unprocessed).
+% \changes{v1.4b}{2021/05/18}{Initialise to \cs{relax} to match \cs{@classoptionslist}}
+% \begin{macrocode}
+\let\@raw@classoptionslist\relax
+% \end{macrocode}
+% \end{macro}
+%
% \begin{macro}{\@unusedoptionlist}
% \changes{v1.0u}{1996/07/26}{made only preamble}
% List of options of the main class that haven't been declared or
@@ -1910,7 +1918,7 @@
% \begin{macrocode}
\ifx\@nnil##1\relax\else
% \end{macrocode}
-% If |\ifx\@nnil##1\n@nil| is true then |#1| is (presumably) empty
+% If |\ifx\@nnil##1\@nnil| is true then |#1| is (presumably) empty
% (Older code used |\relax| which is slightly easier to get into |#1|
% by mistake, which would spoil this test.)
% \begin{macrocode}
diff --git a/macros/latex-dev/base/ltcmd.dtx b/macros/latex-dev/base/ltcmd.dtx
index fee555586d..806161d538 100644
--- a/macros/latex-dev/base/ltcmd.dtx
+++ b/macros/latex-dev/base/ltcmd.dtx
@@ -34,8 +34,8 @@
%%% From File: ltcmd.dtx
%
% \begin{macrocode}
-\def\ltcmdversion{v1.0d}
-\def\ltcmddate{2021-04-19}
+\def\ltcmdversion{v1.0e}
+\def\ltcmddate{2021-05-24}
% \end{macrocode}
%
%<*driver>
@@ -80,6 +80,9 @@
% \end{macrocode}
%
% \changes{v1.0b}{2021/03/18}{Use \cs{NewModuleRelease}.}
+% \changes{v1.0e}{2021/05/24}{Use \cs{msg_...} instead of \cs{__kernel_msg...}}
+%
+%
% \pkg{ltcmd} code contains an |^^@| character, which usually has
% catcode~15, so \cs{IncludeInRelease} will break when this code is
% being skipped, so we'll save the catcode of |^^@| to restore later:
@@ -328,7 +331,12 @@
% switched off by default, unless the |log-declarations| package
% option was used, so here we'll switch that off as well.
% \begin{macrocode}
-\msg_redirect_module:nnn { LaTeX / ltcmd } { info } { none }
+\msg_redirect_module:nnn { cmd } { info } { none }
+% \end{macrocode}
+%
+% Also add \pkg{cmd} to the \pkg{LaTeX} messages.
+% \begin{macrocode}
+\prop_gput:Nnn \g_msg_module_type_prop { cmd } { LaTeX }
% \end{macrocode}
%
% \subsection{Declaring commands and environments}
@@ -358,7 +366,7 @@
{
\cs_if_exist:NTF #1
{
- \__kernel_msg_info:nnxx { ltcmd } { redefine-command }
+ \msg_info:nnxx { cmd } { redefine-command }
{ \token_to_str:N #1 } { \tl_to_str:n {#2} }
}
{
@@ -366,10 +374,10 @@
{ \cs_if_exist_p:c { \cs_to_str:N #1 ~ code } }
{ \cs_if_exist_p:c { \cs_to_str:N #1 ~ defaults } }
{
- \__kernel_msg_warning:nnx { ltcmd } { unsupported-let }
+ \msg_warning:nnx { cmd } { unsupported-let }
{ \token_to_str:N #1 }
}
- \__kernel_msg_info:nnxx { ltcmd } { define-command }
+ \msg_info:nnxx { cmd } { define-command }
{ \token_to_str:N #1 } { \tl_to_str:n {#2} }
}
\bool_set_false:N \l_@@_environment_bool
@@ -528,11 +536,11 @@
{ \tl_trim_spaces:o { \l_@@_environment_str } }
\cs_if_exist:cTF { \l_@@_environment_str }
{
- \__kernel_msg_info:nnxx { ltcmd } { redefine-environment }
+ \msg_info:nnxx { cmd } { redefine-environment }
{ \l_@@_environment_str } { \tl_to_str:n {#2} }
}
{
- \__kernel_msg_info:nnxx { ltcmd } { define-environment }
+ \msg_info:nnxx { cmd } { define-environment }
{ \l_@@_environment_str } { \tl_to_str:n {#2} }
}
\bool_set_false:N \l_@@_expandable_bool
@@ -685,7 +693,7 @@
}
\cs_new_protected:Npn \@@_defaults_error:w \q_recursion_stop
{
- \__kernel_msg_error:nnx { ltcmd } { loop-in-defaults }
+ \msg_error:nnx { cmd } { loop-in-defaults }
{ \@@_environment_or_command: }
}
% \end{macrocode}
@@ -813,8 +821,7 @@
\@@_end_expandable_defaults:nnnNNn {#1} { } {#1} #2#3
{ } { } { } { } { } { } { } { } { } { }
{
- \__kernel_msg_expandable_error:nnf
- { ltcmd } { loop-in-defaults }
+ \msg_expandable_error:nnf { cmd } { loop-in-defaults }
{ \exp_args:Nf \tl_trim_spaces:n { \token_to_str:N #4 } }
\use_iv:nnnn
}
@@ -912,7 +919,7 @@
\q_recursion_tail \q_recursion_tail \q_recursion_tail \q_recursion_stop
\int_compare:nNnT \l_@@_current_arg_int > 9
{
- \__kernel_msg_error:nnxx { ltcmd } { too-many-arguments }
+ \msg_error:nnxx { cmd } { too-many-arguments }
{ \@@_environment_or_command: } { \tl_to_str:n {#1} }
\@@_bad_def:wn
}
@@ -920,7 +927,7 @@
{
\tl_if_empty:NF \l_@@_last_delimiters_tl
{
- \__kernel_msg_error:nnxx { ltcmd } { expandable-ending-optional }
+ \msg_error:nnxx { cmd } { expandable-ending-optional }
{ \iow_char:N \\ \l_@@_function_tl } { \tl_to_str:n {#1} }
\@@_bad_def:wn
}
@@ -944,11 +951,11 @@
{ \str_if_eq_p:nn {#1} { u } }
}
{
- \__kernel_msg_error:nnxx { ltcmd } { xparse-argument-type }
+ \msg_error:nnxx { cmd } { xparse-argument-type }
{ \@@_environment_or_command: } { \tl_to_str:n {#1} }
}
{
- \__kernel_msg_error:nnxx { ltcmd } { unknown-argument-type }
+ \msg_error:nnxx { cmd } { unknown-argument-type }
{ \@@_environment_or_command: } { \tl_to_str:n {#1} }
}
\@@_bad_def:wn
@@ -1020,7 +1027,7 @@
\quark_if_recursion_tail_stop_do:nn {#2} { \@@_bad_arg_spec:wn }
\bool_if:NT \l_@@_expandable_bool
{
- \__kernel_msg_error:nnxx { ltcmd } { processor-in-expandable }
+ \msg_error:nnxx { cmd } { processor-in-expandable }
{ \iow_char:N \\ \l_@@_function_tl } { \tl_to_str:n {#1} }
\@@_bad_def:wn
}
@@ -1034,7 +1041,7 @@
\quark_if_recursion_tail_stop_do:nn {#1} { \@@_bad_arg_spec:wn }
\bool_if:NT \l_@@_long_bool
{
- \__kernel_msg_error:nnxx { ltcmd } { two-markers }
+ \msg_error:nnxx { cmd } { two-markers }
{ \@@_environment_or_command: } { + }
\@@_bad_def:wn
}
@@ -1047,7 +1054,7 @@
\quark_if_recursion_tail_stop_do:nn {#1} { \@@_bad_arg_spec:wn }
\bool_if:NT \l_@@_obey_spaces_bool
{
- \__kernel_msg_error:nnxx { ltcmd } { two-markers }
+ \msg_error:nnxx { cmd } { two-markers }
{ \@@_environment_or_command: } { ! }
\@@_bad_def:wn
}
@@ -1179,15 +1186,14 @@
{
\bool_if:NF \l_@@_environment_bool
{
- \__kernel_msg_error:nnxx
- { ltcmd } { invalid-command-arg }
+ \msg_error:nnxx { cmd } { invalid-command-arg }
{ \@@_environment_or_command: } { b }
\@@_bad_def:wn
}
\tl_clear:N \l_@@_last_delimiters_tl
\@@_add_arg_spec:n { b }
\quark_if_recursion_tail_stop:n {#1}
- \__kernel_msg_error:nnxx { ltcmd } { arg-after-body }
+ \msg_error:nnxx { cmd } { arg-after-body }
{ \@@_environment_or_command: }
{ \tl_to_str:n {#1} }
\@@_bad_def:wn
@@ -1203,7 +1209,7 @@
{
\tl_trim_spaces_apply:nN {#1} \tl_if_single_token:nF
{
- \__kernel_msg_error:nnxx { ltcmd } { not-single-token }
+ \msg_error:nnxx { cmd } { not-single-token }
{ \@@_environment_or_command: } { \tl_to_str:n {#1} }
\@@_bad_def:wn
}
@@ -1235,8 +1241,7 @@
{ \use_none:n }
}
{
- \__kernel_msg_error:nnxxx
- { ltcmd } { forbidden-implicit-group-token }
+ \msg_error:nnxxx { cmd } { forbidden-implicit-group-token }
{ \@@_environment_or_command: } { \tl_to_str:n {#1} }
{
\token_if_eq_meaning:NNTF #1 \c_group_begin_token
@@ -1256,8 +1261,7 @@
{
\bool_if:NT \l_@@_expandable_bool
{
- \__kernel_msg_error:nnxx
- { ltcmd } { invalid-expandable-argument-type }
+ \msg_error:nnxx { cmd } { invalid-expandable-argument-type }
{ \iow_char:N \\ \l_@@_function_tl } { \tl_to_str:n {#1} }
\@@_bad_def:wn
}
@@ -1269,8 +1273,7 @@
{
\tl_if_empty:NF \l_@@_last_delimiters_tl
{
- \__kernel_msg_error:nnxx
- { ltcmd } { invalid-after-optional-expandably }
+ \msg_error:nnxx { cmd } { invalid-after-optional-expandably }
{ \iow_char:N \\ \l_@@_function_tl } { \tl_to_str:n {#1} }
\@@_bad_def:wn
}
@@ -1291,7 +1294,7 @@
{
\tl_if_eq:nnT {##1} {#1}
{
- \__kernel_msg_warning:nnxx { ltcmd } { optional-mandatory }
+ \msg_warning:nnxx { cmd } { optional-mandatory }
{#2} {#3}
}
}
@@ -1305,7 +1308,7 @@
% \begin{macrocode}
\cs_new_protected:Npn \@@_bad_arg_spec:wn #1 \@@_break_point:n #2
{
- \__kernel_msg_error:nnxx { ltcmd } { bad-arg-spec }
+ \msg_error:nnxx { cmd } { bad-arg-spec }
{ \@@_environment_or_command: } { \tl_to_str:n {#2} }
}
\cs_new_protected:Npn \@@_bad_def:wn #1 \@@_break_point:n #2 { }
@@ -1331,7 +1334,7 @@
{
\bool_if:NT \l_@@_expandable_bool
{
- \__kernel_msg_error:nnx { ltcmd } { inconsistent-long }
+ \msg_error:nnx { cmd } { inconsistent-long }
{ \iow_char:N \\ \l_@@_function_tl }
\@@_bad_def:wn
}
@@ -1353,7 +1356,7 @@
{
\bool_if:NT \l_@@_some_obey_spaces_bool
{
- \__kernel_msg_error:nnxx { ltcmd } { non-trailing-obey-spaces }
+ \msg_error:nnxx { cmd } { non-trailing-obey-spaces }
{ \@@_environment_or_command: } { \tl_to_str:n {#1} }
\@@_bad_def:wn
}
@@ -2331,7 +2334,7 @@
\@@_peek_nonspace_remove:NTF #1
{ \@@_grab_D_call:Nw #1 }
{
- \__kernel_msg_error:nnxx { ltcmd } { missing-required }
+ \msg_error:nnxx { cmd } { missing-required }
{ \@@_environment_or_command: }
{ \token_to_str:N #1 }
\@@_add_arg:o \c_novalue_tl
@@ -2584,14 +2587,14 @@
\exp_after:wN \exp_after:wN \exp_after:wN
\peek_meaning_remove:NTF \char_generate:nn { \tex_endlinechar:D } { 6 }
{
- \__kernel_msg_error:nnxxx { ltcmd } { verbatim-newline }
+ \msg_error:nnxxx { cmd } { verbatim-newline }
{ \@@_environment_or_command: }
{ \tl_to_str:N \l_@@_v_arg_tl }
{ \tl_to_str:n {#1} }
\@@_add_arg:o \c_novalue_tl
}
{
- \__kernel_msg_error:nnxxx { ltcmd } { verbatim-tokenized }
+ \msg_error:nnxxx { cmd } { verbatim-tokenized }
{ \@@_environment_or_command: }
{ \tl_to_str:N \l_@@_v_arg_tl }
{ \tl_to_str:n {#1} }
@@ -2942,8 +2945,7 @@
\q_nil { } ##2 \ERROR \q_@@ \ERROR
}
{
- \__kernel_msg_expandable_error:nnff
- { ltcmd } { missing-required }
+ \msg_expandable_error:nnff { cmd } { missing-required }
{ \exp_args:Nf \tl_trim_spaces:n { \token_to_str:N ##5 } }
{ \tl_to_str:n {##2} }
##4 {#1} \q_@@ ##5 ##6 {##7}
@@ -2980,8 +2982,7 @@
##6 \ERROR
}
{
- \__kernel_msg_expandable_error:nnff
- { ltcmd } { missing-required }
+ \msg_expandable_error:nnff { cmd } { missing-required }
{ \exp_args:Nf \tl_trim_spaces:n { \token_to_str:N ##4 } }
{ \tl_to_str:n {##2} }
##3 {#1} \q_@@ ##4 ##5 {##6}
@@ -3114,7 +3115,7 @@
\ProcessedArgument
\q_stop
}
- \__kernel_msg_error:nnxxx { ltcmd } { split-excess-tokens }
+ \msg_error:nnxxx { cmd } { split-excess-tokens }
{ \tl_to_str:n {#3} } { \int_eval:n { #2 + 1 } }
{ \tl_to_str:n {#4} }
}
@@ -3177,11 +3178,11 @@
{
#1
{
- \__kernel_msg_error:nnx { ltcmd } { non-xparse }
+ \msg_error:nnx { cmd } { non-xparse }
{ \@@_environment_or_command: }
}
{
- \__kernel_msg_error:nnx { ltcmd } { unknown }
+ \msg_error:nnx { cmd } { unknown }
{ \@@_environment_or_command: }
}
}
@@ -3305,11 +3306,11 @@
}
{ \group_end: \use_ii:nnn }
{
- \__kernel_msg_error:nnxx { ltcmd } { not-definable }
+ \msg_error:nnxx { cmd } { not-definable }
{ \tl_to_str:n {#1} } { \token_to_str:N #2 }
}
{
- \__kernel_msg_error:nnxx { ltcmd } { not-one-token }
+ \msg_error:nnxx { cmd } { not-one-token }
{ \tl_to_str:n {#1} } { \token_to_str:N #2 }
}
}
@@ -3504,49 +3505,49 @@
%
% Some messages intended as errors when defining commands/environments.
% \begin{macrocode}
-\__kernel_msg_new:nnnn { ltcmd } { arg-after-body }
+\msg_new:nnnn { cmd } { arg-after-body }
{ In~the~definition~of~#1,~b~(body)~argument~must~be~last. }
{
The~'body'~argument~type~is~followed~by~'#2'~in~the~argument~
specification~of~the~#1.~This~is~not~allowed.
\c_@@_ignore_def_tl
}
-\__kernel_msg_new:nnnn { ltcmd } { bad-arg-spec }
+\msg_new:nnnn { cmd } { bad-arg-spec }
{ Bad~argument~specification~'#2'~for~#1. }
{
The~argument~specification~provided~was~not~valid:~
one~or~more~mandatory~pieces~of~information~were~missing.
\c_@@_ignore_def_tl
}
-\__kernel_msg_new:nnnn { ltcmd } { command-already-defined }
+\msg_new:nnnn { cmd } { command-already-defined }
{ Command~'#1'~already~defined! }
{
You~have~used~#2~
with~a~command~that~already~has~a~definition. \\ \\
The~existing~definition~of~'#1'~will~not~be~altered.
}
-\__kernel_msg_new:nnnn { ltcmd } { command-not-yet-defined }
+\msg_new:nnnn { cmd } { command-not-yet-defined }
{ Command ~'#1'~not~yet~defined! }
{
You~have~used~#2~
with~a~command~that~was~never~defined.
\c_@@_ignore_def_tl
}
-\__kernel_msg_new:nnnn { ltcmd } { environment-already-defined }
+\msg_new:nnnn { cmd } { environment-already-defined }
{ Environment~'#1'~already~defined! }
{
You~have~used~\NewDocumentEnvironment
with~an~environment~that~already~has~a~definition. \\ \\
The~existing~definition~of~'#1'~will~not~be~altered.
}
-\__kernel_msg_new:nnnn { ltcmd } { environment-not-yet-defined }
+\msg_new:nnnn { cmd } { environment-not-yet-defined }
{ Environment~'#1'~not~yet~defined! }
{
You~have~used~\RenewDocumentEnvironment
with~an~environment~that~was~never~defined.
\c_@@_ignore_def_tl
}
-\__kernel_msg_new:nnnn { ltcmd } { expandable-ending-optional }
+\msg_new:nnnn { cmd } { expandable-ending-optional }
{
Argument~specification~'#2'~for~expandable~command~'#1'~
ends~with~optional~argument.
@@ -3556,13 +3557,13 @@
(or~no~arguments~at~all).~You~cannot~have~a~terminal~optional~
argument~with~expandable~commands.
}
-\__kernel_msg_new:nnnn { ltcmd } { inconsistent-long }
+\msg_new:nnnn { cmd } { inconsistent-long }
{ Inconsistent~long~arguments~for~expandable~command~'#1'. }
{
The~arguments~for~an~expandable~command~must~not~involve~short~
arguments~after~long~arguments.~You~have~tried~to~mix~the~two~types.
}
-\__kernel_msg_new:nnnn { ltcmd } { invalid-command-arg }
+\msg_new:nnnn { cmd } { invalid-command-arg }
{ Argument~type~'#2'~not~available~for~#1. }
{
The~letter~'#2'~can~only~be~used~in~environment~argument~
@@ -3570,14 +3571,14 @@
\\ \\
LaTeX~will~ignore~this~entire~definition.
}
-\__kernel_msg_new:nnnn { ltcmd } { invalid-expandable-argument-type }
+\msg_new:nnnn { cmd } { invalid-expandable-argument-type }
{ Argument~type~'#2'~not~available~for~expandable~command~'#1'. }
{
The~letter~'#2'~specifies~an~argument~type~which~cannot~be~used~
in~an~expandable~command.
\c_@@_ignore_def_tl
}
-\__kernel_msg_new:nnnn { ltcmd } { invalid-after-optional-expandably }
+\msg_new:nnnn { cmd } { invalid-after-optional-expandably }
{
Argument~type~'#2'~not~available~after~optional~argument~
for~expandable~command~'#1'.
@@ -3587,13 +3588,13 @@
in~an~expandable~command~after~an~optional~argument.
\c_@@_ignore_def_tl
}
-\__kernel_msg_new:nnnn { ltcmd } { non-trailing-obey-spaces }
+\msg_new:nnnn { cmd } { non-trailing-obey-spaces }
{ Prefix~'!'~used~before~mandatory~argument~'#2'~of~#1. }
{
The~prefix~'!'~can~only~apply~to~trailing~optional~arguments.
\c_@@_ignore_def_tl
}
-\__kernel_msg_new:nnnn { ltcmd } { not-definable }
+\msg_new:nnnn { cmd } { not-definable }
{ First~argument~of~'#2'~must~be~a~command. }
{
The~first~argument~of~'#2'~should~be~the~document~command~that~will~
@@ -3601,7 +3602,7 @@
backslash~is~missing?
\c_@@_ignore_def_tl
}
-\__kernel_msg_new:nnnn { ltcmd } { not-one-token }
+\msg_new:nnnn { cmd } { not-one-token }
{ First~argument~of~'#2'~must~be~a~command. }
{
The~first~argument~of~'#2'~should~be~the~document~command~that~will~
@@ -3609,7 +3610,7 @@
token.~Perhaps~a~backslash~is~missing?
\c_@@_ignore_def_tl
}
-\__kernel_msg_new:nnnn { ltcmd } { not-single-token }
+\msg_new:nnnn { cmd } { not-single-token }
{
Argument~delimiter~'#2'~for~the~#1~should~be~
a~single~non-space~token.
@@ -3619,40 +3620,40 @@
where~a~single~token~is~required,~LaTeX~found~'#2'.
\c_@@_ignore_def_tl
}
-\__kernel_msg_new:nnnn { ltcmd } { forbidden-implicit-group-token }
+\msg_new:nnnn { cmd } { forbidden-implicit-group-token }
{ Argument~delimiter~'#2'~for~the~#1~is~not~allowed. }
{
The~argument~specification~provided~was~not~valid:~the~implicit~
#3-group~token~'#2'~is~not~allowed~as~an~argument~delimiter.
\c_@@_ignore_def_tl
}
-\__kernel_msg_new:nnnn { ltcmd } { processor-in-expandable }
+\msg_new:nnnn { cmd } { processor-in-expandable }
{ Argument~processor~'>{#2}'~cannot~be~used~for~the~expandable~command~'#1'. }
{
The~argument~specification~for~#1~contains~a~processor~function:~
this~is~only~supported~for~standard~robust~commands.
\c_@@_ignore_def_tl
}
-\__kernel_msg_new:nnnn { ltcmd } { too-many-arguments }
+\msg_new:nnnn { cmd } { too-many-arguments }
{ Too~many~arguments~in~argument~specification~'#2'~of~#1. }
{
The~argument~specification~provided~has~more~than~9~arguments.~
This~cannot~be~implemented.
\c_@@_ignore_def_tl
}
-\__kernel_msg_new:nnnn { ltcmd } { two-markers }
+\msg_new:nnnn { cmd } { two-markers }
{ Two~'#2'~apply~to~the~same~argument~in~argument~specification~of~#1. }
{
The~argument~specification~provided~has~two~markers~'#2'~applying~
to~the~same~argument;~these~are~redundant.
}
-\__kernel_msg_new:nnnn { ltcmd } { unknown-argument-type }
+\msg_new:nnnn { cmd } { unknown-argument-type }
{ Unknown~argument~type~'#2'~for~the~#1. }
{
The~letter~'#2'~does~not~specify~a~known~argument~type.
\c_@@_ignore_def_tl
}
-\__kernel_msg_new:nnnn { ltcmd } { xparse-argument-type }
+\msg_new:nnnn { cmd } { xparse-argument-type }
{ Deprecated~argument~type~'#2'~for~the~#1~requires~xparse. }
{
The~letter~'#2'~specifies~a~known~argument~type~that~requires~
@@ -3666,40 +3667,40 @@
% \texttt{loop-in-defaults} and \texttt{missing-required} messages can
% be expandable or not expandable.
% \begin{macrocode}
-\__kernel_msg_new:nnn { ltcmd } { if-boolean }
+\msg_new:nnn { cmd } { if-boolean }
{ Invalid~use~\iow_char:N\\IfBooleanTF~{#1} }
-\__kernel_msg_new:nnnn { ltcmd } { loop-in-defaults }
+\msg_new:nnnn { cmd } { loop-in-defaults }
{ Defaults~of~#1~have~circular~dependency. }
{
The~default~values~of~two~or~more~arguments~of~the~#1~
depend~on~each~other~in~a~way~that~cannot~be~resolved.
}
-\__kernel_msg_new:nnnn { ltcmd } { missing-required }
+\msg_new:nnnn { cmd } { missing-required }
{ Missing~required~argument~for~#1. }
{
The~current~#1~expects~an~argument~starting~with~'#2'.~
LaTeX~did~not~find~it,~and~will~insert~a~default~value~to~be~processed.
}
-\__kernel_msg_new:nnnn { ltcmd } { non-xparse }
+\msg_new:nnnn { cmd } { non-xparse }
{ \str_uppercase:n #1~not~defined~using~xparse. }
{
You~have~asked~for~the~argument~specification~for~the~#1,~
but~this~was~not~defined~using~xparse.
}
-\__kernel_msg_new:nnnn { ltcmd } { split-excess-tokens }
+\msg_new:nnnn { cmd } { split-excess-tokens }
{ Too~many~'#1'~tokens~when~trying~to~split~argument. }
{
LaTeX~was~asked~to~split~the~input~'#3'~
at~each~occurrence~of~the~token~'#1',~up~to~a~maximum~of~#2~parts.~
There~were~too~many~'#1'~tokens.
}
-\__kernel_msg_new:nnnn { ltcmd } { unknown }
+\msg_new:nnnn { cmd } { unknown }
{ Unknown~document~#1. }
{
You~have~asked~for~the~argument~specification~for~the~#1,~
but~it~is~not~defined.
}
-\__kernel_msg_new:nnnn { ltcmd } { verbatim-newline }
+\msg_new:nnnn { cmd } { verbatim-newline }
{ Verbatim~argument~of~#1~ended~by~end~of~line. }
{
The~verbatim~argument~of~the~#1~cannot~contain~more~than~one~line,~
@@ -3709,7 +3710,7 @@
\\ \\
LaTeX~will~ignore~'#2'.
}
-\__kernel_msg_new:nnnn { ltcmd } { verbatim-tokenized }
+\msg_new:nnnn { cmd } { verbatim-tokenized }
{ The~verbatim~#1~cannot~be~used~inside~an~argument. }
{
The~#1~takes~a~verbatim~argument.~
@@ -3722,33 +3723,33 @@
%
% Intended more for information.
% \begin{macrocode}
-\__kernel_msg_new:nnn { ltcmd } { define-command }
+\msg_new:nnn { cmd } { define-command }
{
Defining~command~#1~
with~sig.~'#2'~\msg_line_context:.
}
-\__kernel_msg_new:nnn { ltcmd } { define-environment }
+\msg_new:nnn { cmd } { define-environment }
{
Defining~environment~'#1'~
with~sig.~'#2'~\msg_line_context:.
}
-\__kernel_msg_new:nnn { ltcmd } { redefine-command }
+\msg_new:nnn { cmd } { redefine-command }
{
Redefining~command~#1~
with~sig.~'#2'~\msg_line_context:.
}
-\__kernel_msg_new:nnn { ltcmd } { redefine-environment }
+\msg_new:nnn { cmd } { redefine-environment }
{
Redefining~environment~'#1'~
with~sig.~'#2'~\msg_line_context:.
}
-\__kernel_msg_new:nnn { ltcmd } { optional-mandatory }
+\msg_new:nnn { cmd } { optional-mandatory }
{
Since~the~mandatory~argument~'#1'~has~the~same~delimiter~'#2'~
as~a~previous~optional~argument,~it~will~not~be~possible~to~
omit~all~optional~arguments~when~calling~this~command.
}
-\__kernel_msg_new:nnn { ltcmd } { unsupported-let }
+\msg_new:nnn { cmd } { unsupported-let }
{
The~command~'#1'~was~undefined~but~not~the~associated~commands~
'#1~code'~and/or~'#1~defaults'.~Maybe~you~tried~using~
@@ -3786,7 +3787,7 @@
{
\cs_if_exist:NTF #1
{
- \__kernel_msg_error:nnxx { ltcmd } { command-already-defined }
+ \msg_error:nnxx { cmd } { command-already-defined }
{ \use:nnn \token_to_str:N #1 { } }
{ \token_to_str:N \NewDocumentCommand }
}
@@ -3800,7 +3801,7 @@
\cs_if_exist:NTF #1
{ \@@_declare_cmd:Nnn #1 {#2} {#3} }
{
- \__kernel_msg_error:nnxx { ltcmd } { command-not-yet-defined }
+ \msg_error:nnxx { cmd } { command-not-yet-defined }
{ \use:nnn \token_to_str:N #1 { } }
{ \token_to_str:N \RenewDocumentCommand }
}
@@ -3831,14 +3832,14 @@
\cs_new_protected:Npn \NewDocumentEnvironment #1#2#3#4
{
\cs_if_exist:cTF {#1}
- { \__kernel_msg_error:nnx { ltcmd } { environment-already-defined } {#1} }
+ { \msg_error:nnx { cmd } { environment-already-defined } {#1} }
{ \@@_declare_env:nnnn {#1} {#2} {#3} {#4} }
}
\cs_new_protected:Npn \RenewDocumentEnvironment #1#2#3#4
{
\cs_if_exist:cTF {#1}
{ \@@_declare_env:nnnn {#1} {#2} {#3} {#4} }
- { \__kernel_msg_error:nnx { ltcmd } { environment-not-yet-defined } {#1} }
+ { \msg_error:nnx { cmd } { environment-not-yet-defined } {#1} }
}
\cs_new_protected:Npn \ProvideDocumentEnvironment #1#2#3#4
{ \cs_if_exist:cF {#1} { \@@_declare_env:nnnn {#1} {#2} {#3} {#4} } }
@@ -3865,7 +3866,7 @@
{
\cs_if_exist:NTF #1
{
- \__kernel_msg_error:nnxx { ltcmd } { command-already-defined }
+ \msg_error:nnxx { cmd } { command-already-defined }
{ \use:nnn \token_to_str:N #1 { } }
{ \token_to_str:N \NewExpandableDocumentCommand }
}
@@ -3879,7 +3880,7 @@
\cs_if_exist:NTF #1
{ \@@_declare_expandable_cmd:Nnn #1 {#2} {#3} }
{
- \__kernel_msg_error:nnxx { ltcmd } { command-not-yet-defined }
+ \msg_error:nnxx { cmd } { command-not-yet-defined }
{ \use:nnn \token_to_str:N #1 { } }
{ \token_to_str:N \RenewExpandableDocumentCommand }
}
@@ -3931,7 +3932,7 @@
\prg_break:n { \use:n }
\prg_break_point:
{
- \__kernel_msg_expandable_error:nnn { ltcmd } { if-boolean } {#1}
+ \msg_expandable_error:nnn { cmd } { if-boolean } {#1}
\use_ii:nn
}
}
diff --git a/macros/latex-dev/base/ltcmdhooks-code.pdf b/macros/latex-dev/base/ltcmdhooks-code.pdf
index ccc055e33b..9c523ad313 100644
--- a/macros/latex-dev/base/ltcmdhooks-code.pdf
+++ b/macros/latex-dev/base/ltcmdhooks-code.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltcmdhooks-doc.pdf b/macros/latex-dev/base/ltcmdhooks-doc.pdf
index 86cc6e3e96..dd70bd2240 100644
--- a/macros/latex-dev/base/ltcmdhooks-doc.pdf
+++ b/macros/latex-dev/base/ltcmdhooks-doc.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltcmdhooks.dtx b/macros/latex-dev/base/ltcmdhooks.dtx
index cc67f5eaa7..40cd55e52c 100644
--- a/macros/latex-dev/base/ltcmdhooks.dtx
+++ b/macros/latex-dev/base/ltcmdhooks.dtx
@@ -13,8 +13,8 @@
%
%%% From File: ltcmdhooks.dtx
%
-\def\ltcmdhooksversion{v1.0a}
-\def\ltcmdhooksdate{2021/04/30}
+\def\ltcmdhooksversion{v1.0b}
+\def\ltcmdhooksdate{2021/05/26}
%
%
%
@@ -323,10 +323,13 @@
% throw an error.
% \end{enumerate}
%
+%
% \begin{macrocode}
%<@@=hook>
% \end{macrocode}
%
+% \changes{v1.0b}{2021/05/24}{Use \cs{msg_...} instead of \cs{__kernel_msg...}}
+%
% \begin{macrocode}
%<*2ekernel|latexrelease>
\ExplSyntaxOn
@@ -413,7 +416,7 @@
\str_case:nnTF {#3}
{ { before } { } { after } { } }
{ \exp_args:Nc \@@_patch_cmd_or_delay:Nnn {#2} {#2} {#3} }
- { \__kernel_msg_error:nnn { hooks } { wrong-cmd-hook } {#2} {#3} }
+ { \msg_error:nnnn { hooks } { wrong-cmd-hook } {#2} {#3} }
}
% \end{macrocode}
% \end{macro}
@@ -520,7 +523,7 @@
{
#1 #2 {#4}
{
- \__kernel_msg_error:nnxx { hooks } { cant-patch }
+ \msg_error:nnxx { hooks } { cant-patch }
{ \token_to_str:N #2 } {#3}
}
}
@@ -833,7 +836,7 @@
% command isn't changed in any way in that case.
% \begin{macrocode}
{
- \__kernel_msg_error:nnxx { hooks } { cant-patch }
+ \msg_error:nnxx { hooks } { cant-patch }
{ \c_backslash_str #2 } { retok }
}
}
@@ -1036,24 +1039,22 @@
% \subsection{Messages}
%
% \begin{macrocode}
-\__kernel_msg_new:nnnn { hooks } { wrong-cmd-hook }
+\msg_new:nnnn { hooks } { wrong-cmd-hook }
{
- Command~hook~`cmd/#1/#2'~invalid.\\
- The~hook~should~be~`cmd/#1/before'~or~`cmd/#1/after'.
+ Generic~hook~`cmd/#1/#2'~is~invalid.
+% The~hook~should~be~`cmd/#1/before'~or~`cmd/#1/after'.
}
{
- You~tried~to~add~a~hook~to~command~\iow_char:N \\#1,~but~`#2'~
- is~an~invalid~position.~Only~`before'~or~`after'~are~allowed.
+ You~tried~to~add~a~generic~hook~to~command~\iow_char:N \\#1,~but~`#2'~
+ is~an~invalid~component.~Only~`before'~or~`after'~are~allowed.
}
-\__kernel_msg_new:nnnn { hooks } { cant-patch }
+\msg_new:nnnn { hooks } { cant-patch }
{
- Command~`#1'~cannot~have~hooks~because~it~
- \@@_unpatchable_cases:n {#2} .
+ Generic~hooks~cannot~be~added~to~'#1'.
}
{
- You~tried~to~add~a~hook~to~`#1',~but~LaTeX~was~not~able~to~
- add~the~hook~to~that~command~because~`#1'~
- \@@_unpatchable_cases:n {#2} .
+ You~tried~to~add~a~hook~to~'#1',~but~LaTeX~was~unable~to~
+ patch~the~command~because~it~\@@_unpatchable_cases:n {#2}.
}
\cs_new:Npn \@@_unpatchable_cases:n #1
{
diff --git a/macros/latex-dev/base/ltdefns.dtx b/macros/latex-dev/base/ltdefns.dtx
index 7236083dfa..4f39d922cc 100644
--- a/macros/latex-dev/base/ltdefns.dtx
+++ b/macros/latex-dev/base/ltdefns.dtx
@@ -32,7 +32,7 @@
%<*driver>
% \fi
\ProvidesFile{ltdefns.dtx}
- [2021/04/19 v1.5o LaTeX Kernel (definition commands)]
+ [2021/05/27 v1.5p LaTeX Kernel (definition commands)]
% \iffalse
\documentclass{ltxdoc}
\GetFileInfo{ltdefns.dtx}
@@ -1222,6 +1222,7 @@
%
% The macro firstly checks if the control sequence in question exists
% at all.
+% \changes{v1.5p}{2021/05/26}{Normalize error message in \cs{MakeRobust}}
% \begin{macrocode}
%</2ekernel>
%<latexrelease>\IncludeInRelease{2020/10/01}{\MakeRobust}{\MakeRobust}%
@@ -1230,7 +1231,7 @@
\count@=\escapechar
\escapechar=`\\
\@ifundefined{\expandafter\@gobble\string#1}{%
- \@latex@error{The control sequence `\string#1' is undefined!%
+ \@latex@error{Command `\string#1' is undefined!%
\MessageBreak There is nothing here to make robust}%
\@eha
}%
@@ -1259,7 +1260,7 @@
\noexpand\protect\expandafter\noexpand
\csname\expandafter\@gobble\string#1\space\endcsname}%
}%
- {\@latex@info{The control sequence `\string#1' is already robust}}%
+ {\@latex@info{Command `\string#1' is already robust}}%
}%
\escapechar=\count@
}%
diff --git a/macros/latex-dev/base/ltfilehook-code.pdf b/macros/latex-dev/base/ltfilehook-code.pdf
index ef767fa207..c17d10e276 100644
--- a/macros/latex-dev/base/ltfilehook-code.pdf
+++ b/macros/latex-dev/base/ltfilehook-code.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltfilehook-doc.pdf b/macros/latex-dev/base/ltfilehook-doc.pdf
index 28e0f8a5f2..211e7f8549 100644
--- a/macros/latex-dev/base/ltfilehook-doc.pdf
+++ b/macros/latex-dev/base/ltfilehook-doc.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltfilehook.dtx b/macros/latex-dev/base/ltfilehook.dtx
index e9309c41f7..5d0acc8fdf 100644
--- a/macros/latex-dev/base/ltfilehook.dtx
+++ b/macros/latex-dev/base/ltfilehook.dtx
@@ -31,8 +31,8 @@
%%% From File: ltfilehook.dtx
%
% \begin{macrocode}
-\providecommand\ltfilehookversion{v1.0j}
-\providecommand\ltfilehookdate{2021/04/29}
+\providecommand\ltfilehookversion{v1.0k}
+\providecommand\ltfilehookdate{2021/05/25}
% \end{macrocode}
%
%<*driver>
@@ -454,6 +454,7 @@
%
%
% \section{The Implementation}
+%
% \begin{macrocode}
%<*2ekernel>
% \end{macrocode}
@@ -462,6 +463,8 @@
%<@@=filehook>
% \end{macrocode}
%
+% \changes{v1.0k}{2021/05/24}{Use \cs{msg_...} instead of \cs{__kernel_msg...}}
+%
%
% \subsection{Document and package-level commands}
%
@@ -605,7 +608,7 @@
\seq_gpop:NNTF \g_@@_input_file_seq \l_@@_internal_tl
{ \exp_after:wN \@@_file_pop_assign:nnnn \l_@@_internal_tl }
{
- \__kernel_msg_error:nnn { hooks } { should-not-happen }
+ \msg_error:nnn { kernel } { should-not-happen }
{ Tried~to~pop~from~an~empty~file~name~stack. }
}
}
diff --git a/macros/latex-dev/base/lthooks-code.pdf b/macros/latex-dev/base/lthooks-code.pdf
index b50be3475f..a97b1e1923 100644
--- a/macros/latex-dev/base/lthooks-code.pdf
+++ b/macros/latex-dev/base/lthooks-code.pdf
Binary files differ
diff --git a/macros/latex-dev/base/lthooks-doc.pdf b/macros/latex-dev/base/lthooks-doc.pdf
index 369fa25069..6446eaa88e 100644
--- a/macros/latex-dev/base/lthooks-doc.pdf
+++ b/macros/latex-dev/base/lthooks-doc.pdf
Binary files differ
diff --git a/macros/latex-dev/base/lthooks.dtx b/macros/latex-dev/base/lthooks.dtx
index 45d6a78aba..20e172a57f 100644
--- a/macros/latex-dev/base/lthooks.dtx
+++ b/macros/latex-dev/base/lthooks.dtx
@@ -31,8 +31,8 @@
%%% From File: lthooks.dtx
%
% \begin{macrocode}
-\def\lthooksversion{v1.0m}
-\def\lthooksdate{2021/04/29}
+\def\lthooksversion{v1.0n}
+\def\lthooksdate{2021/05/26}
% \end{macrocode}
%
%<*driver>
@@ -1807,8 +1807,9 @@
%<@@=hook>
% \end{macrocode}
%
-% \changes{v1.0i}{2021/03/18}
-% {Use \cs{NewModuleRelease}.}
+% \changes{v1.0i}{2021/03/18}{Use \cs{NewModuleRelease}.}
+% \changes{v1.0n}{2021/05/24}{Use \cs{msg_...} instead of \cs{__kernel_msg...}}
+%
% \begin{macrocode}
%<*2ekernel|latexrelease>
\ExplSyntaxOn
@@ -2230,7 +2231,7 @@
% \cs{hook_new:n} is used.
% \begin{macrocode}
\@@_if_declared:nTF {#1}
- { \__kernel_msg_error:nnn { hooks } { exists } {#1} }
+ { \msg_error:nnn { hooks } { exists } {#1} }
{
\tl_new:c { g_@@_#1_declared_tl }
\@@_make_usable:n {#1}
@@ -2484,7 +2485,7 @@
% may change).
% \begin{macrocode}
\@@_if_disabled:nTF {#1}
- { \__kernel_msg_warning:nnn { hooks } { provide-disabled } {#1} }
+ { \msg_warning:nnn { hooks } { provide-disabled } {#1} }
% \end{macrocode}
% Otherwise we check if it was already declared.
% \begin{macrocode}
@@ -2496,7 +2497,7 @@
% the already existing one is not (or vice versa).
% \begin{macrocode}
\str_if_eq:eeF { \tl_use:c { g_@@_#1_reversed_tl } } {#2}
- { \__kernel_msg_error:nnn { hooks } { provide-error } {#1} }
+ { \msg_error:nnn { hooks } { provide-error } {#1} }
}
% \end{macrocode}
% If it wasn't declared, we declared as a normal or reversed hook
@@ -2572,7 +2573,7 @@
{
\tl_if_empty:nTF {#1}
{
- \__kernel_msg_expandable_error:nn { hooks } { empty-label }
+ \msg_expandable_error:nn { hooks } { empty-label }
\@@_currname_or_default:
}
{
@@ -2609,7 +2610,7 @@
{
\tl_if_empty:NTF \@currname
{
- \__kernel_msg_expandable_error:nnn { hooks } { should-not-happen }
+ \msg_expandable_error:nnn { kernel } { should-not-happen }
{ Empty~default~label. }
\@@_make_name:n { label-missing }
}
@@ -2750,7 +2751,7 @@
% \begin{macrocode}
{
\@@_if_disabled:nTF {#1}
- { \__kernel_msg_error:nnn { hooks } { hook-disabled } {#1} }
+ { \msg_error:nnn { hooks } { hook-disabled } {#1} }
{ \@@_try_declaring_generic_hook:nnn {#1} {#2} {#3} }
}
}
@@ -2793,7 +2794,7 @@
\@@_init_structure:n {#1}
\@@_tl_gput_right:cn { @@_toplevel~#1 } {#3}
}
- { \__kernel_msg_error:nnn { hooks } { misused-top-level } {#1} }
+ { \msg_error:nnn { hooks } { misused-top-level } {#1} }
}
{
\prop_get:cnNTF { g_@@_#1_code_prop } {#2} \l_@@_return_tl
@@ -3279,7 +3280,7 @@
{#1} {#2} {#4}
\@@_update_hook_code:n {#1}
}
- { \__kernel_msg_error:nnnnnn { hooks } { unknown-rule }
+ { \msg_error:nnnnnn { hooks } { unknown-rule }
{#1} {#2} {#3} {#4} }
}
% \end{macrocode}
@@ -3887,7 +3888,7 @@
\cs_new_protected:cpn { @@_apply_rule_xE:nnn } #1#2#3
{
\@@_debug:n { \@@_msg_pair_found:nnn {#1} {#2} {#3} }
- \__kernel_msg_error:nnnnnn { hooks } { labels-incompatible }
+ \msg_error:nnnnnn { hooks } { labels-incompatible }
{#1} {#2} {#3} { 1 }
\use:c { @@_apply_rule_->:nnn } {#1} {#2} {#3}
\use:c { @@_apply_rule_<-:nnn } {#1} {#2} {#3}
@@ -3895,7 +3896,7 @@
\cs_new_protected:cpn { @@_apply_rule_xW:nnn } #1#2#3
{
\@@_debug:n { \@@_msg_pair_found:nnn {#1} {#2} {#3} }
- \__kernel_msg_warning:nnnnnn { hooks } { labels-incompatible }
+ \msg_warning:nnnnnn { hooks } { labels-incompatible }
{#1} {#2} {#3} { 0 }
}
% \end{macrocode}
@@ -4239,7 +4240,7 @@
\cs_new_protected:Npn \@@_gput_next_code:nn #1 #2
{
\@@_if_disabled:nTF {#1}
- { \__kernel_msg_error:nnn { hooks } { hook-disabled } {#1} }
+ { \msg_error:nnn { hooks } { hook-disabled } {#1} }
{
\@@_init_structure:n {#1}
\@@_if_usable:nTF {#1}
@@ -4537,8 +4538,18 @@
%
% \subsection{Messages}
%
+% Hook errors are LaTeX kernel errors:
+% \begin{macrocode}
+\prop_gput:Nnn \g_msg_module_type_prop { hooks } { LaTeX }
+% \end{macrocode}
+% And so are kernel errors (this should move elsewhere eventually).
% \begin{macrocode}
-\__kernel_msg_new:nnnn { hooks } { labels-incompatible }
+\prop_gput:Nnn \g_msg_module_type_prop { kernel } { LaTeX }
+%\prop_gput:Nnn \g_msg_module_name_prop { kernel } { } % <-- currently not working
+% \end{macrocode}
+%
+% \begin{macrocode}
+\msg_new:nnnn { hooks } { labels-incompatible }
{
Labels~'#1'~and~'#2'~are~incompatible
\str_if_eq:nnF {#3} {??} { ~in~hook~'#3' } .~
@@ -4551,7 +4562,7 @@
% \end{macrocode}
%
% \begin{macrocode}
-\__kernel_msg_new:nnnn { hooks } { exists }
+\msg_new:nnnn { hooks } { exists }
{ Hook~'#1'~ has~ already~ been~ declared. }
{ There~ already~ exists~ a~ hook~ declaration~ with~ this~
name.\\
@@ -4560,7 +4571,7 @@
%
%
% \begin{macrocode}
-\__kernel_msg_new:nnnn { hooks } { hook-disabled }
+\msg_new:nnnn { hooks } { hook-disabled }
{ Cannot~add~code~to~disabled~hook~'#1'. }
{
The~hook~'#1'~you~tried~to~add~code~to~was~previously~disabled~
@@ -4570,7 +4581,7 @@
% \end{macrocode}
%
% \begin{macrocode}
-\__kernel_msg_new:nnn { hooks } { empty-label }
+\msg_new:nnn { hooks } { empty-label }
{
Empty~code~label~\msg_line_context:.~
Using~'\@@_currname_or_default:'~instead.
@@ -4578,7 +4589,7 @@
% \end{macrocode}
%
% \begin{macrocode}
-\__kernel_msg_new:nnn { hooks } { no-default-label }
+\msg_new:nnn { hooks } { no-default-label }
{
Missing~(empty)~default~label~\msg_line_context:. \\
This~command~was~ignored.
@@ -4586,7 +4597,7 @@
% \end{macrocode}
%
% \begin{macrocode}
-\__kernel_msg_new:nnnn { hooks } { unknown-rule }
+\msg_new:nnnn { hooks } { unknown-rule }
{ Unknown~ relationship~ '#3'~
between~ labels~ '#2'~ and~ '#4'~
\str_if_eq:nnF {#1} {??} { ~in~hook~'#1' }. ~
@@ -4604,9 +4615,9 @@
% \end{macrocode}
%
% \begin{macrocode}
-\__kernel_msg_new:nnnn { hooks } { misused-top-level }
+\msg_new:nnnn { hooks } { misused-top-level }
{
- Illegal~\iow_char:N \\AddToHook{#1}[top-level]{...}.\\
+ Illegal~use~of~\iow_char:N \\AddToHook{#1}[top-level]{...}.\\
'top-level'~is~reserved~for~the~user's~document.
}
{
@@ -4618,7 +4629,7 @@
% \end{macrocode}
%
% \begin{macrocode}
-\__kernel_msg_new:nnn { hooks } { set-top-level }
+\msg_new:nnn { hooks } { set-top-level }
{
You~cannot~change~the~default~label~#1~'top-level'.~Illegal \\
\use:nn { ~ } { ~ } \iow_char:N \\#2{#3} \\
@@ -4627,21 +4638,12 @@
% \end{macrocode}
%
% \begin{macrocode}
-\__kernel_msg_new:nnn { hooks } { ddhl-deprecated }
- {
- \iow_char:N \\DeclareDefaultHookLabel~is~deprecated.\\
- Use~\iow_char:N \\SetDefaultHookLabel~instead.\\ \\
- The~deprecated~name~will~be~removed~in~the~next~release.
- }
-% \end{macrocode}
-%
-% \begin{macrocode}
-\__kernel_msg_new:nnn { hooks } { extra-pop-label }
+\msg_new:nnn { hooks } { extra-pop-label }
{
Extra~\iow_char:N \\PopDefaultHookLabel. \\
This~command~will~be~ignored.
}
-\__kernel_msg_new:nnn { hooks } { missing-pop-label }
+\msg_new:nnn { hooks } { missing-pop-label }
{
Missing~\iow_char:N \\PopDefaultHookLabel. \\
The~label~'#1'~was~pushed~but~never~popped.~Something~is~wrong.
@@ -4649,9 +4651,9 @@
% \end{macrocode}
%
% \begin{macrocode}
-\__kernel_msg_new:nnn { hooks } { should-not-happen }
+\msg_new:nnn { kernel } { should-not-happen }
{
- ERROR!~This~should~not~happen.~#1 \\
+ This~should~not~happen.~#1 \\
Please~report~at~https://github.com/latex3/latex2e.
}
% \end{macrocode}
@@ -4659,14 +4661,14 @@
%
%
% \begin{macrocode}
-\__kernel_msg_new:nnn { hooks } { provide-disabled }
+\msg_new:nnn { hooks } { provide-disabled }
{
- Can't~ provide~ hook~ '#1'~ because~ it~ is~ disabled!
+ Cannot~ provide~ hook~ '#1'~ because~ it~ is~ disabled!
}
% \end{macrocode}
%
% \begin{macrocode}
-\__kernel_msg_new:nnnn { hooks } { provide-error }
+\msg_new:nnnn { hooks } { provide-error }
{
Hook~'#1'~ already~ declared~ as~ a~
\@@_if_reversed:nTF {#1} { reversed } { normal }~ hook!
@@ -4764,10 +4766,9 @@
% \begin{macro}{\SetDefaultHookLabel}
% \begin{macro}{\PushDefaultHookLabel}
% \begin{macro}{\PopDefaultHookLabel}
-% \begin{macro}{\DeclareDefaultHookLabel}
%
% \fmiinline{Docu task: At some point this code for this should be moved to the
-% label section earlier and here we should keep only the interface commands.}
+% label section earlier and here we should keep only the interface commands.}
%
% \begin{macro}{\@@_curr_name_push:n,\@@_curr_name_push_aux:n}
% \begin{macro}{\@@_curr_name_pop:}
@@ -4829,11 +4830,11 @@
\cs_new_protected:Npn \@@_curr_name_push_aux:n #1
{
\tl_if_blank:nTF {#1}
- { \__kernel_msg_error:nn { hooks } { no-default-label } }
+ { \msg_error:nn { hooks } { no-default-label } }
{
\str_if_eq:nnTF {#1} { top-level }
{
- \__kernel_msg_error:nnnnn { hooks } { set-top-level }
+ \msg_error:nnnnn { hooks } { set-top-level }
{ to } { PushDefaultHookLabel } {#1}
}
{
@@ -4851,7 +4852,7 @@
{
\seq_gpop:NNTF \g_@@_name_stack_seq \l_@@_return_tl
{ \tl_gset_eq:NN \g_@@_hook_curr_name_tl \l_@@_return_tl }
- { \__kernel_msg_error:nn { hooks } { extra-pop-label } }
+ { \msg_error:nn { hooks } { extra-pop-label } }
}
% \end{macrocode}
%
@@ -4866,7 +4867,7 @@
{
\seq_gpop:NNT \g_@@_name_stack_seq \l_@@_return_tl
{
- \__kernel_msg_error:nnx { hooks } { missing-pop-label }
+ \msg_error:nnx { hooks } { missing-pop-label }
{ \g_@@_hook_curr_name_tl }
\tl_gset_eq:NN \g_@@_hook_curr_name_tl \l_@@_return_tl
\@@_end_document_label_check:
@@ -4884,7 +4885,7 @@
{
\seq_if_empty:NTF \g_@@_name_stack_seq
{
- \__kernel_msg_error:nnnnn { hooks } { set-top-level }
+ \msg_error:nnnnn { hooks } { set-top-level }
{ for } { SetDefaultHookLabel } {#1}
}
{ \exp_args:Nx \@@_set_default_label:n { \@@_make_name:n {#1} } }
@@ -4893,16 +4894,11 @@
{
\str_if_eq:nnTF {#1} { top-level }
{
- \__kernel_msg_error:nnnnn { hooks } { set-top-level }
+ \msg_error:nnnnn { hooks } { set-top-level }
{ to } { SetDefaultHookLabel } {#1}
}
{ \tl_gset:Nn \g_@@_hook_curr_name_tl {#1} }
}
-\NewDocumentCommand \DeclareDefaultHookLabel { m }
- {
- \__kernel_msg_error:nn { hooks } { ddhl-deprecated }
- \SetDefaultHookLabel {#1}
- }
% \end{macrocode}
%
% The label is only automatically updated with \cs{@onefilewithoptions}
@@ -4942,7 +4938,6 @@
% \end{macro}
% \end{macro}
% \end{macro}
-% \end{macro}
%
%
%
diff --git a/macros/latex-dev/base/ltluatex.pdf b/macros/latex-dev/base/ltluatex.pdf
index 3b803f3383..84af40d945 100644
--- a/macros/latex-dev/base/ltluatex.pdf
+++ b/macros/latex-dev/base/ltluatex.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews.pdf b/macros/latex-dev/base/ltnews.pdf
index 02b805b97d..fd05f9537f 100644
--- a/macros/latex-dev/base/ltnews.pdf
+++ b/macros/latex-dev/base/ltnews.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews01.pdf b/macros/latex-dev/base/ltnews01.pdf
index 0f16508cc2..e91726a6dd 100644
--- a/macros/latex-dev/base/ltnews01.pdf
+++ b/macros/latex-dev/base/ltnews01.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews02.pdf b/macros/latex-dev/base/ltnews02.pdf
index 718558863a..afbca53625 100644
--- a/macros/latex-dev/base/ltnews02.pdf
+++ b/macros/latex-dev/base/ltnews02.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews03.pdf b/macros/latex-dev/base/ltnews03.pdf
index be857e7ee4..11ab1ee093 100644
--- a/macros/latex-dev/base/ltnews03.pdf
+++ b/macros/latex-dev/base/ltnews03.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews04.pdf b/macros/latex-dev/base/ltnews04.pdf
index 005348dff7..bcf06e380c 100644
--- a/macros/latex-dev/base/ltnews04.pdf
+++ b/macros/latex-dev/base/ltnews04.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews05.pdf b/macros/latex-dev/base/ltnews05.pdf
index 7008d76f68..f9343d862b 100644
--- a/macros/latex-dev/base/ltnews05.pdf
+++ b/macros/latex-dev/base/ltnews05.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews06.pdf b/macros/latex-dev/base/ltnews06.pdf
index 538c9768f3..b6b42938fc 100644
--- a/macros/latex-dev/base/ltnews06.pdf
+++ b/macros/latex-dev/base/ltnews06.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews07.pdf b/macros/latex-dev/base/ltnews07.pdf
index d6b706b906..23f3bebaec 100644
--- a/macros/latex-dev/base/ltnews07.pdf
+++ b/macros/latex-dev/base/ltnews07.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews08.pdf b/macros/latex-dev/base/ltnews08.pdf
index 9931ddee80..5dbe32de57 100644
--- a/macros/latex-dev/base/ltnews08.pdf
+++ b/macros/latex-dev/base/ltnews08.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews09.pdf b/macros/latex-dev/base/ltnews09.pdf
index 616c594eb8..9158a8a6de 100644
--- a/macros/latex-dev/base/ltnews09.pdf
+++ b/macros/latex-dev/base/ltnews09.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews10.pdf b/macros/latex-dev/base/ltnews10.pdf
index 7e0f03f1cc..5c583fa62e 100644
--- a/macros/latex-dev/base/ltnews10.pdf
+++ b/macros/latex-dev/base/ltnews10.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews11.pdf b/macros/latex-dev/base/ltnews11.pdf
index 6ef42aca9f..b7b4299fee 100644
--- a/macros/latex-dev/base/ltnews11.pdf
+++ b/macros/latex-dev/base/ltnews11.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews12.pdf b/macros/latex-dev/base/ltnews12.pdf
index 3ea3f11d6a..7d483314d2 100644
--- a/macros/latex-dev/base/ltnews12.pdf
+++ b/macros/latex-dev/base/ltnews12.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews13.pdf b/macros/latex-dev/base/ltnews13.pdf
index a94411b8c2..bcc2ebf91c 100644
--- a/macros/latex-dev/base/ltnews13.pdf
+++ b/macros/latex-dev/base/ltnews13.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews14.pdf b/macros/latex-dev/base/ltnews14.pdf
index 79be2aab4d..ebb1a11b88 100644
--- a/macros/latex-dev/base/ltnews14.pdf
+++ b/macros/latex-dev/base/ltnews14.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews15.pdf b/macros/latex-dev/base/ltnews15.pdf
index aa4ef31e3e..422230b891 100644
--- a/macros/latex-dev/base/ltnews15.pdf
+++ b/macros/latex-dev/base/ltnews15.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews16.pdf b/macros/latex-dev/base/ltnews16.pdf
index a11d785c60..33b870c2c5 100644
--- a/macros/latex-dev/base/ltnews16.pdf
+++ b/macros/latex-dev/base/ltnews16.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews17.pdf b/macros/latex-dev/base/ltnews17.pdf
index b25ec2b3b4..e426d8f803 100644
--- a/macros/latex-dev/base/ltnews17.pdf
+++ b/macros/latex-dev/base/ltnews17.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews18.pdf b/macros/latex-dev/base/ltnews18.pdf
index 7e926718fb..1b9d9720a8 100644
--- a/macros/latex-dev/base/ltnews18.pdf
+++ b/macros/latex-dev/base/ltnews18.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews19.pdf b/macros/latex-dev/base/ltnews19.pdf
index 96f3be4711..ee9d4d9faf 100644
--- a/macros/latex-dev/base/ltnews19.pdf
+++ b/macros/latex-dev/base/ltnews19.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews20.pdf b/macros/latex-dev/base/ltnews20.pdf
index 5b2ed0ee07..91ffd73c53 100644
--- a/macros/latex-dev/base/ltnews20.pdf
+++ b/macros/latex-dev/base/ltnews20.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews21.pdf b/macros/latex-dev/base/ltnews21.pdf
index e8dfbc7c0f..2d6f14527f 100644
--- a/macros/latex-dev/base/ltnews21.pdf
+++ b/macros/latex-dev/base/ltnews21.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews22.pdf b/macros/latex-dev/base/ltnews22.pdf
index 240c83b6c6..7e75b681d7 100644
--- a/macros/latex-dev/base/ltnews22.pdf
+++ b/macros/latex-dev/base/ltnews22.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews23.pdf b/macros/latex-dev/base/ltnews23.pdf
index 9807ac1a7a..638b76a2c8 100644
--- a/macros/latex-dev/base/ltnews23.pdf
+++ b/macros/latex-dev/base/ltnews23.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews24.pdf b/macros/latex-dev/base/ltnews24.pdf
index 0aa98e091e..f3be86d42e 100644
--- a/macros/latex-dev/base/ltnews24.pdf
+++ b/macros/latex-dev/base/ltnews24.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews25.pdf b/macros/latex-dev/base/ltnews25.pdf
index 3393251fb8..f88b90f53e 100644
--- a/macros/latex-dev/base/ltnews25.pdf
+++ b/macros/latex-dev/base/ltnews25.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews26.pdf b/macros/latex-dev/base/ltnews26.pdf
index b6da2cc18d..1f27e49641 100644
--- a/macros/latex-dev/base/ltnews26.pdf
+++ b/macros/latex-dev/base/ltnews26.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews27.pdf b/macros/latex-dev/base/ltnews27.pdf
index d3f0ab919f..a2037f6688 100644
--- a/macros/latex-dev/base/ltnews27.pdf
+++ b/macros/latex-dev/base/ltnews27.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews28.pdf b/macros/latex-dev/base/ltnews28.pdf
index d6670e6a43..72d813e6ac 100644
--- a/macros/latex-dev/base/ltnews28.pdf
+++ b/macros/latex-dev/base/ltnews28.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews29.pdf b/macros/latex-dev/base/ltnews29.pdf
index 60644a30e4..ca2747c438 100644
--- a/macros/latex-dev/base/ltnews29.pdf
+++ b/macros/latex-dev/base/ltnews29.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews30.pdf b/macros/latex-dev/base/ltnews30.pdf
index 87651bc456..4cb04aceef 100644
--- a/macros/latex-dev/base/ltnews30.pdf
+++ b/macros/latex-dev/base/ltnews30.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews31.pdf b/macros/latex-dev/base/ltnews31.pdf
index f50f366566..445abc7e11 100644
--- a/macros/latex-dev/base/ltnews31.pdf
+++ b/macros/latex-dev/base/ltnews31.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews32.pdf b/macros/latex-dev/base/ltnews32.pdf
index 51c980520e..d4494fdd6c 100644
--- a/macros/latex-dev/base/ltnews32.pdf
+++ b/macros/latex-dev/base/ltnews32.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews33.pdf b/macros/latex-dev/base/ltnews33.pdf
index 486fd7b9ab..305c7aed93 100644
--- a/macros/latex-dev/base/ltnews33.pdf
+++ b/macros/latex-dev/base/ltnews33.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews33.tex b/macros/latex-dev/base/ltnews33.tex
index 7f23e9d853..88bce82055 100644
--- a/macros/latex-dev/base/ltnews33.tex
+++ b/macros/latex-dev/base/ltnews33.tex
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright 2019-2020
+% Copyright 2019-2021
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
@@ -33,6 +33,16 @@
\NeedsTeXFormat{LaTeX2e}[2020-02-02]
\documentclass{ltnews}
+
+%%CCC Temporary definitions:
+\providecommand\Dash {\unskip ---}
+
+
+
+%% NOTE: Chris' preferred hyphens!
+%%\showhyphens{parameters}
+\hyphenation{because para-me-ters}
+
\usepackage[T1]{fontenc}
\usepackage{lmodern,url,hologo}
@@ -85,12 +95,25 @@
\vbadness=1400 % accept slightly empty columns
+\makeatletter
+% maybe not the greatest design but normally we wouldn't have subsubsections
+\renewcommand{\subsubsection}{%
+ \@startsection {subsubsection}{2}{0pt}{1.5ex \@plus 1ex \@minus .2ex}%
+ {-1em}{\@subheadingfont\colonize}%
+}
+\newcommand\colonize[1]{#1:}
+\makeatother
+
+\let\finalvspace\vspace % for document layout fixes
+
+
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\providecommand\tubcommand[1]{}
\tubcommand{\input{tubltmac}}
\publicationmonth{June}
-\publicationyear{2021 --- Draft Version}
+\publicationyear{2021} %% --- Draft Version 3p
\publicationissue{33}
@@ -109,15 +132,17 @@
\section{Introduction}
-The focus of the June 2020 release is to provide further important
-building blocks for producing reliable tagged PDF output in the future
-(see \cite{33:blueprint}), they are discussed in the next two
-sections. In addition we included a number of smaller enhancement and
-fixes that are outlined on the next pages. As usual, more detail can
-on individual changes can be found in the \texttt{changes.txt} files
-in the distribution and, of course, in the documented
-sources~\cite{33:source2e}.
+The focus of the June 2021 release is to provide further important
+building blocks for the future production of
+reliable tagged PDF output
+(see \cite{33:blueprint}); these enhancements
+are discussed in the next two
+sections.
+Subsequent sections describe quite a number of recent smaller
+enhancements and fixes. As usual, more detail on individual changes
+can be found in the \texttt{changes.txt} files in the distribution
+and, of course, in the documented sources~\cite{33:source2e}.
@@ -125,534 +150,716 @@ sources~\cite{33:source2e}.
Largely triggered by the need for better control of paragraph text
processing, in particular when producing tagged PDF output, we have
-extended the paragraph processing of \LaTeX{} so that the kernel gains
-control both at the start and the end of each paragraph. This is done
-in a manner that is (or should be) transparent to packages and user
-documents.
+changed \LaTeX{} so that the kernel gains control both at the start
+and at the end of each paragraph. This is done in a manner that is (or
+should be) transparent to both packages and documents.
-Beside the internal control points for exclusive use of the \LaTeX{}
-kernel we also implemented four public hooks that can be used by
-packages or user via the hook management declarations to achieve
-special effects or implement manipulations that in the past were only
-possible through redefinitions of \cs{everypar} or \cs{par} with the
-usual issue that such changes would conflict with changes in other
-packages.
+Besides the addition of internal control points for the exclusive use
+of the \LaTeX{} kernel, we also implemented four public hooks that can
+be used in packages or documents (via the normal hook management
+declarations) to achieve special effects, etc. Until now, such
+enhancements required redefinitions of \cs{everypar} or \cs{par},
+which led to the usual issues since such changes can easily conflict
+with changes made by other packages.
-The documentation of the hooks together with a few examples is
-provided in \file{ltpara-doc.pdf} and for those who want to study the
-(quite interesting) code is found in
-\file{ltpara-code.pdf}. Additionally it is included as part of the
-full kernel documentation in \file{source2e.pdf}.
+The documentation of these new \enquote{paragraph hooks}, together
+with a few examples, is in \file{ltpara-doc.pdf} and, for those who
+want to study it, the (quite interesting) code can be found in
+\file{ltpara-code.pdf}. Additionally, both of these files are included
+as part of the full kernel documentation in \file{source2e.pdf}.
\section{Extending the hook concept to commands}
-Up to now the hook management covered hooks for a few core areas, such
-as hooks for the \cs{shipout} process or those in the \env{document}
-environment, as well as generic hooks for file loading (helpful for
-patching) and for arbitrary environments (executed by \cs{begin} and
-\cs{end}).
+Up to now, hook management covered hooks for only a few core areas,
+such as the hooks for the \cs{shipout} process or those in the
+\env{document} environment, as well as some \enquote {generic} hooks,
+both for file loading (helpful for patching such files) and for
+arbitrary environments (the hooks executed within \cs{begin} and
+\cs{end}). This concept of \enquote{generic hooks} has now been
+extended to provide \hook{/before} and \hook{/after} hooks for any
+(document-level) command\Dash in theory at least.
-This has now been extended to add \hook{/before} and \hook{/after}
-hooks to any (document-level) command---in theory at that is. In
-practice the new generic \hook{cmd} hooks, especially the
-\hook{cmd/.../after} hooks may fail with commands that are too complex
-to be automatically patched and break them if the hook is filled with
-code. The restrictions are documented in \texttt{ltcmdhooks-doc.pdf}.
-However, given that these hooks are mainly meant for package
-developers to provide a better interoperability between different
-packages and between packages and the \LaTeX{} kernel, these
-restrictions are of minor importance: for commands where the mechanism
-can't be applied, one is in the same situation as before and for all
-others there will be a noticeable improvement. This is especially
-important for our big project providing accessible and tagged PDF
-output~\cite{33:blueprint}, because for this we will eventually have
-to patch many third-party packages and this is only feasible, if it can
-be done in controlled and standardized ways.
+In practice, these new generic \hook{cmd} hooks, especially the
+\hook{cmd/.../after}, hooks may fail with commands that are too
+complex to be automatically patched, breaking if the hook contains any
+code. These restrictions are documented in
+\texttt{ltcmdhooks-doc.pdf}.
+%
+However, given that these hooks are mainly meant for developers who
+wish to provide better interoperability between different packages,
+and between packages and the \LaTeX{} kernel, these restrictions are,
+we hope, of minor importance. Indeed, for commands where this
+mechanism can't be applied, one is in the same situation as before;
+and for all others there will be a noticeable improvement.
+These hooks will be especially important for our current project to
+provide accessible and tagged PDF output~\cite{33:blueprint} because
+we will eventually have to patch many third-party packages, and this
+must be done in controlled and standardized ways.
-\section{Other changes to the \LaTeX{} kernel}
-\subsection{Adjusting \env{itemize} labels with \cs{labelitemfont}}
+\section{Other hook business}
-The command \cs{labelitemfont} was in fact already introduced with the
-\LaTeX\ release 2020-02-02, but back then we forgot to describe it, so
-we do this now. Its purpose is to resolve some bad formatting issues
-with the \env{itemize} environment and at the same time make it easier
-to adjust its layout if necessary. What could happen in the past was the
-\env{itemize} labels, e.g., the \textbullet{}, would sometimes react to
-surrounding font changes and could suddenly change shape, for example
-to \textit{\textbullet}.
-
-Now \cs{labelitemfont} is applied to each
-label defaulting to \cs{normalfont} which will prevent this behavior.
-By choosing a different settings other effects can be achieved, for example
-\begin{verbatim}
- \renewcommand\labelitemfont
- {\normalfont\fontfamily{lmss}\selectfont}
- \renewcommand\labelitemfont
- {\rmfamily\normalshape}
-\end{verbatim}
-The first will take the symbols from Latin Modern Sans so that you get
-%
-\def\myfont#1{{\let\labelitemfont\empty\fontfamily{lmss}\selectfont#1}}
-%
-\myfont\labelitemi, \myfont\labelitemii, \myfont\labelitemiii\ and
-\myfont\labelitemiv, while the second variant freezes the font family
-and shape, but leave the series variable, so that an \env{itemize} in
-a bold context would show bolder symbols. Making it empty would give
-you the buggy old behavior back.
-%
-\githubissue{497}
+\subsection{Shipping out a page while bypassing hooks}
-\subsection{A note on file names with spaces, dots or UTF-8 characters}
+In the 2020 October release, several hooks were added to control the
+process of constructing and shipping out a page box: these support,
+for example, the addition of background or foreground material
+to some or all pages.
+
+
+We have now added a command, called \cs{RawShipout}, which does not do
+any rebuilding of the page box and so does not run most of these
+hooks. When using this new command, essential internal book-keeping
+is still carried out, such as updating the \texttt{totalpages} counter
+and adding \texttt{shipout/firstpage} or \texttt{shipout/lastpage}
+material when appropriate.
+
+
+\subsection{A new Lua callback in \pkg{ltshipout},
+for custom attributes}
+
+For use just before shipping out a page, there is now a \LuaTeX{}
+callback \texttt{pre\_shipout\_filter} to contain final adjustments to
+the box being shipped out. This is particularly useful for
+Lua\TeX\ packages which flag (using, for example, attributes or
+properties) elements on a page in order to apply effects (such as the
+insertion of \enquote{color commands}) to these elements at shipout.
+
+
+
+\section{Improved handling of file names}
+
+\subsection[File names with spaces, multiple dots or\\
+ \acro{utf-8} characters]
+ {File names with spaces, multiple dots or \acro{utf-8} characters}
In one of the recent \LaTeX{} releases we improved the interface
for specifying file names so that they can now safely contain spaces
-(as is common on Windows but also elsewhere), UTF-8 characters
-outside the \acro{ascii} range as well as names with several dots in
-it. In the past this was only possible by applying a special syntax
-(in cases of spaces), not at all for most UTF-8 characters and
-not in all circumstances for files with several dots.
-
-However, \TeX{} has a built-in rule saying that you can leave out the
-extension if it is \texttt{.tex}. Because of that \verb=\input{file}=
-or \verb=\input{file.tex}= both load \file{file.tex} if it
-exists. While this is convenient most of the time it is a little
-awkward in some scenarios (for example, when both \file{file} and
-\file{file.tex} exist) and also when you manually try to implement
-that rule.
+(as is common these days),
+more than one dot character, and also \acro{utf-8} characters
+outside the \acro{ascii} range.
+In the past this was only possible by applying a special syntax
+in the case of spaces,
+while file names with several dots often failed,
+as did most \acro{utf-8} characters.
-\LaTeX{} therefore had one special syntax for \cs{include} and
-\cs{includeonly}: they always expected that their arguments contains a
-file name\footnote{In case of \cs{includeonly} a comma separated list
- of such names.} without its extension, which had to be
-\texttt{.tex}. Thus when you mistakenly wrote
-\verb=\include{mychap.tex}= (for example, when you changed from \cs{input}
-to \cs{include} somewhere), \LaTeX{} went ahead and looked for the
-file \file{mychap.tex.tex} for inclusion and tried to write support
-information to the file \file{mychap.tex.aux}. The reason was that
-\cs{include} had to construct both physical file names from the
-argument and it didn't bother to do something special about the
-extension \texttt{.tex}.
-As a side effect of the new implementation this has now changed and
-the argument of \cs{include} now gets the extension \texttt{.tex}
-removed if it was used. Thus \verb=\include{mychap.tex}= now loads
-\file{mychap.tex} and no longer looks for \file{mychap.tex.tex}.
-%
-\githubissue{486}
+\subsubsection{Consequences for file names in \cs{include}}
+\TeX{} has a built-in rule saying that you can normally leave out the
+extension if it is \texttt{.tex}. Thus \verb=\input{file}= and
+\verb=\input{file.tex}= both load \file{file.tex} (if it exists).
+While this is convenient most of the time, it is a little awkward in
+some scenarios (for example, when both \file{file} and \file{file.tex}
+exist) and also when you manually try to implement the rule.
-\subsection{\cs{end}\texttt{\textbraceleft document\textbraceright}
- should always start in v-mode}
+\LaTeX{} therefore had one special syntax for \cs{include} and
+\cs{includeonly}: they always expected that
+their arguments contain a
+file name\footnote{In the case of \cs{includeonly}, a comma-separated list of such names.}
+with no extension given,
+ so that it had to be \texttt{.tex}. Thus,
+ when you mistakenly wrote
+\verb=\include{mychap.tex}= (for example,
+because you changed from \cs{input}
+to \cs{include}),
+\LaTeX{} went ahead and looked for the
+file \file{mychap.tex.tex} for inclusion and tried to
+use the file \file{mychap.tex.aux} for internal (auxiliary) information. The reason was that
+\cs{include} had to construct both
+of these file names from the given
+argument and it didn't bother to do
+anything special
+with the supplied
+extension \texttt{.tex}.
-Until now \verb=\end{document}= executed the code from the
-\cs{AtEndDocument} hook as its first action. This meant that it was
-executed in horizontal mode if the user left no empty line after the
-last paragraph. As a result one could get a spurious space added, for
-example, when that code contained a \cs{write} statement. This was
-fixed and now \cs{enddocument} first issues a \cs{par} to ensure that
-it always starts out in vertical mode.
+With the new implementation this has
+changed:
+the extension \texttt{.tex}
+now gets removed/ignored if it was
+supplied.
+Thus \verb=\include{mychap.tex}= now
+no longer looks for \file{mychap.tex.tex}
+but loads
+\file{mychap.tex}
+and uses \file{mychap.aux}.
%
-\githubissue{385}
+\githubissue{486}
-\subsection{Allow extra space between name and address in \pkg{letter} class}
+\subsection{Normalization of robust commands in file names}
-The \cs{opening} command in the \pkg{letter} class expects the
-name and address to be separated by \verb=\\= but it didn't allow to
-use an optional argument at this point to add some extra space after
-the name. The coding has now been slightly altered to allow for this.
+The handling of file names has been modified so that \verb|\string| is
+applied to normalize robust commands within the file name.
+Previously, for example, \verb|\input{\sqrt{2}}| would cause
+\LaTeX\ to loop indefinitely whereas with
+the new normalization
+it looks for the file named \verb|sqrt {2}.tex|
+(and therefore very likely reports ``file not found'').
%
-\githubissue{427}
+\githubissue{481}
-\subsection[Add a Lua callback to \pkg{ltshipout} to provide
- a uniform location for applying custom attributes]
- {Add a Lua callback to \pkg{ltshipout} to provide
- a uniform
- \mbox\quad location for applying custom attributes}
-Just before shipping out a page, a new \LuaTeX{} callback
-\texttt{pre\_shipout\_filter} is now called to allow final
-adjustments to the box to be shipped out. This is particularly for
-Lua\TeX\ packages which flag certain elements of the page (e.g. using
-attributes or properties) in order to apply certain effects to these
-elements at shipout. An example for this is the \pkg{luacolor}
-package which could insert the color commands using this callback.
+\subsection{Fix for \env{filecontents} with \acro{utf-8}
+ chars in the file name}
+Since a few releases back, the \env{filecontents} environment has
+allowed \acro{utf-8} characters in the file name. There was, however,
+a bug that would not allow \emph{over}writing a file with \acro{utf-8}
+characters in its name. This has been fixed and now
+\env{filecontents} allows any characters in the file name.
+%
+\githubissue{415}
-\subsection{Improved copy\,\&\,paste support for \pdfTeX{} documents}
-When compiling with \pdfTeX{}, additional information is added to the
-PDF file to improve copying from and searching in text. This especially
-allows ligatures to copy correctly from \pdfTeX{} generated PDF files in
-most cases.
-Since this has been integrated into the kernel, most documents should no
-longer need to load the \pkg{cmap} package or input \texttt{glyphtounicode}.
-%
-\githubissue{465}
+\section{Updates to the font selection scheme}
-\subsection{Provide a hook in \cs{selectfont}}
+\subsection{A new hook in \cs{selectfont}}
-After \cs{selectfont} has altered the font we run a hook so that
-packages can make final adjustments. This functionality was originally
-provided by the \pkg{everysel} package, the new implementation is
-slightly different and uses the standard hook management.
+After \cs{selectfont} has changed the font, we now run a hook (\hook{selectfont})
+so that packages can make final \mbox{adjustments}. This functionality was
+originally provided by the \pkg{everysel} package but our
+implementation is slightly different and uses the standard hook
+management.
%
\githubissue{444}
-\subsection{Delay change of font series and shape to \cs{selectfont} call}
+\subsection{Change of font series/shape delayed until \cs{selectfont}}
-With the NFSS extensions introduced in 2020 the font series and shape
-settings can be influenced by changes to the font family. The setting
-is therefore delayed until \cs{selectfont} is executed to avoid
-unnecessary or incorrect substitutions that may otherwise happen due
-to the order of declarations.
+With the NFSS extensions introduced in 2020, the font series and shape
+settings can be influenced by changes to the font family. The
+settings of these two are now therefore delayed until \cs{selectfont}
+is executed; this avoids unnecessary or incorrect substitutions that
+may otherwise happen due to the order of declarations.
%
\githubissue{444}
-\subsection{Allow \cs{nocite} in preamble}
+\section{Glyphs, characters \& encodings}
-A natural place for \verb=\nocite{*}= would be the preamble of the
-document, but for historical reasons \LaTeX{} issued an error message
-if it was placed there. From the new release on it is now allowed in
-the preamble.
+\subsection{Improved copy\,\&\,paste for \pdfTeX{} documents}
+
+When compiling with \pdfTeX{}, additional information
+(from the file \texttt{glyphtounicode.tex}) is now added automatically
+to the PDF file in order to improve copying from, and searching in,
+text.
+
+In particular, this allows the most common ligatures to be copied as
+intended from all generated PDF files without the need to explicitly
+load the package \pkg{cmap}.
%
-\githubissue{424}
+\githubissue{465}
-\subsection{Shipping out a page while bypassing hooks}
-In the 2020 October release several hooks were added to the page
-shipout process, e.g., to add some background or foreground material
-to some or all pages. We now also added a \cs{RawShipout} command that
-bypasses most of these hooks during the shipout. Some essential
-internal bookkeeping still takes place such as updating the
-\texttt{totalpages} counter or adding \texttt{shipout/firstpage} or
-\texttt{shipout/lastpage} material if the page happens to be the first
-or last.
-
-\subsection{Robust commands in filename arguments}
-The filename handling has been modified so that \verb|\string| is
-applied while normalizing robust commands while determining the file
-name. Previously \verb|\input{\sqrt{2}}| would cause \LaTeX\ to loop indefinitely.
-With the new behavior it accesses \verb|sqrt {2}.tex|.
-%
-\githubissue{481}
+\subsection{Support for more Unicode characters}
-\subsection[Additional support for Unicode characters from the
- Latin Extended Additional block]
- {Additional support for Unicode characters from the Latin\\
- \mbox\quad Extended Additional block}
\LaTeX\ is quite capable of typesetting characters such as
-\enquote{\d{m}}, but until now it lacked the Unicode mappings for some
-characters that are used to write Sanskrit words in Latin
-transliteration (as seen in books about yoga, Buddhist philosophy,
-etc.). These have now been added so that such characters can be
-entered directly instead of resorting to \verb=\d{m}= and so forth.
+\enquote{\d{m}}, but until now it could not access some Unicode
+characters from the Latin Extended Additional block. This meant that,
+for example, there were no Unicode mappings for some characters that
+are used to write Sanskrit words in Latin transliteration (as seen in
+books about yoga, Buddhist philosophy, etc.).
+%
+These characters have now been added so that they can be entered
+directly instead of using \verb=\d{m}=, etc.
%
\githubissue{484}
-\subsection{Always have color groups set up}
-To use color in \LaTeX{} certain constructs, especially boxes, need an
-extra layer of groups to ensure that the color setting does not
-\emph{escape} and continue outside the box when it shouldn't. To
-arrange for this the \LaTeX{} kernel defined a number of commands, e.g.,
-\cs{color@begingroup} to be used in such places. They have been
-initially no-ops and only the color packages redefined them to become
-real groups. This arrangement complicates the coding as one has to
-account for a group being there (or not there) depending of what is
-loaded in the document. So now the kernel already adds the groups.
+
+\subsection{More ``dashes'' in encodings \texttt{OT1},
+ \texttt{T1} and \texttt{TU}}
+
+When pasting in text from external sources, one can encounter these
+three Unicode characters
%
-\githubissue{488}
+\texttt{"2011} (non-breaking hyphen),
+\texttt{"2012} (figure dash) and
+\texttt{"2015} (horizontal bar),
+%
+in addition to the more common
+%
+\texttt{"2013} (en-dash) and \texttt{"2014} (em-dash).
+%
+In the past, these first three produced an error message when used
+with \pdfTeX{} (since they are not available in \texttt{OT1} or
+\texttt{T1} encoded fonts). They now typeset an approximation to the
+glyph: e.g., the ``figure dash'' is approximated by an en-dash.
+With Unicode engines they either work (when the glyph is contained in
+the selected Unicode font) or they typeset nothing, producing a
+``Missing character'' warning in the log file.
-\subsection{Execute \cs{par} at the end of \cs{marginpar} arguments}
+With all engines these characters can also now be accessed using the
+command names \cs{textnonbreakinghyphen}, \cs{textfiguredash} and
+\cs{texthorizontalbar}, respectively.
+%
+\githubissue{404}
-In preparation for tagged PDF it is important to properly tag all
-paragraphs and this requires running code at the beginning and end of
-each. At the end of a paragraph this is done inside the \cs{par}
-command, but the way \cs{marginpar} was coded, \LaTeX{} ended the
-marginal note without ever explicitly calling \cs{par}. This has now
-been changed.
-Another case where this issue caused problems was the \pkg{lineno}
-package where the last line was not numbered if the \cs{marginpar}
-ended without a \cs{par} in the document.
+\subsection{Poor man's \cs{textasteriskcentered}}
+
+The \cs{textasteriskcentered} symbol, used as part of the set of
+footnote symbols in \LaTeX{}, is assumed to be implemented by every
+font with the \texttt{TS1} encoding (when \pdfTeX{} is used) or with
+the \texttt{TU} encoding for the Unicode engines. That assumption is
+unfortunately not correct for all fonts since, for example, the
+\texttt{stix2} fonts don't provide this glyph. A result is that one
+gets missing glyph messages when using \cs{thanks}, etc.
+
+Therefore \cs{textasteriskcentered} now checks whether there is such a
+glyph and, if not, uses a normal \enquote{*}, but slightly enlarged
+and lowered. This may not be perfect in all cases, but it is
+certainly better than no glyph showing up.
%
-\githubissue{489}
+\githubissue{502}
+
+\subsection {The characters from \pkg{textcomp} are in the kernel}
+
+A couple of releases back, the functionality of the \pkg{textcomp}
+package was integrated into the \LaTeX{} kernel. Thus it is no longer
+necessary to load this package in order to access glyphs such as
+\cs{textcopyright}, \cs{texteuro} or \cs{textyen}.
+
+
+At this time the opportunity was also taken to bring some order to the
+chaos surrounding the question: \enquote{which glyphs from the
+ \texttt{TS1} encoding are available in a given font?}. This was
+done using an approach based on font families and collections, with
+the differing glyph coverage of the \enquote*{text symbols} being
+indicated by assigning to a font family or collection a ``sub-encoding
+number'' that indicates which glyphs from the \texttt{TS1} encoding are
+guaranteed to be available when using a font from that family or
+collection. This assignment ensures that \LaTeX{} always errs on the
+side of caution, possibly claiming that a glyph is not available even
+when it in fact is.
+
+\iffalse %%FMi but drop that
+
+The documented code for this can be found now in the file
+\file{lttextcomp.dtx} but we hope to publish a full explanation of
+the approach very soon now.
+
+\fi %% FMi potential drop
+
+
+
+\subsubsection
+ [A note on the history of ``text symbols'']
+ {A note on the history of ``text symbols'' and
+ the \texttt{TS1} encoding}
+
+
+The \enquote{text symbol encoding} (\texttt{TS1}) was originally
+designed at the Cork Conference as a companion to the \texttt{T1}
+encoding. In it various symbols that are not subject to hyphenation
+got assembled and the \pkg{textcomp} package was developed to make
+them accessible. Unfortunately the \TeX{} community was a bit too
+enthusiastic and included several symbols only available in a few
+\TeX{} fonts and some, such as the capital accents, not available at
+all but developed as part of the reference font implementation.
+
+In hindsight that was a very bad idea because it meant that other
+existing fonts (at the time) and later new fonts that got developed
+were unable to provide the full set of glyphs that made up the
+\texttt{TS1} encoding. For existing free PostScript fonts people
+took the extra effort and produced virtual fonts that faked (some) of
+the missing glyphs. But this was and is a time-consuming effort so it
+was done for only a few basic fonts. But even then, only some fonts
+included all glyphs from \texttt{TS1} so the \pkg{textcomp} already
+back then contained a long list, dividing fonts into 5 categories
+according to which glyphs were implemented and which were missing.
+
+
+When we recently integrated the functionality of the \pkg{textcomp}
+into the \LaTeX{} kernel
+many new free fonts had appeared and
+unfortunately the chaos around the question \enquote{which glyphs of
+ the \texttt{TS1} encoding are implemented by which font} had
+increased with it. Not only did one find many new holes, it was next to
+impossible to order the set of fonts into a reasonable set of
+sub-encodings that are contained in each other in a single sequence.
+
+In the end we decided on nine or ten sub-encodings with a reasonable
+number of fonts in each so that all fonts implemented all glyphs of the
+sub-encoding they got mapped to. Thus when typesetting with a font one
+could be sure that a command like \cs{textcopyleft} would either
+typeset the requested character (if the glyph was part of the
+sub-encoding the font belonged to) or it would raise an error, saying
+that the glyph is unavailable in that font. The mapping would ensure
+that \LaTeX{} always errs on the side of caution, because it might
+claim a glyph is unavailable even though in fact it is.\looseness-1
+
+For example, the old \texttt{pcr} (PostScript Courier) font (as well
+as most other older PS fonts) is mapped to sub-encoding 5 and
+therefore claims that \cs{textasciigrave} is unavailable even though
+in fact for Courier this is not true. If one uses such a font and this
+becomes an issue then there are a couple (suboptimal) possibilities.
+For one, one can alter the mapping of Courier and pretend that belongs
+to a fuller sub-encoding, e.g.
+\begin{verbatim}
+ \DeclareEncodingSubset{TS1}{pcr}{2}
+\end{verbatim}
+The downside is, that \LaTeX{} then believes other glyphs that are in fact
+unavailable are also there, so that it is important to check that the
+final document doesn't have some missing glyphs.
+
+An alternative is to pretend that \cs{textasciigrave} can always be
+taken from the \texttt{TS1} encoding (no questions asked):
+\begin{verbatim}
+ \DeclareTextSymbolDefault{\textasciigrave}{TS1}
+\end{verbatim}
+Again there is a danger that this is not true when it is used with a
+different font and would then generate a missing glyph.
+
+Finally, and possibly the best solution, if not impossible for other
+reasons, is to simply use a different font, for example, to use the
+\TeX{} Gyre Cursor font (a reimplementation of Courier with a
+much more complete glyph set).
-\subsection{Producing several footnote marks to one footnote}
+
+\section{New or improved commands}
+
+\subsection{Adjusting \env{itemize} labels with \cs{labelitemfont}}
+
+The command \cs{labelitemfont} was introduced already with the
+\LaTeX\ release 2020-02-02, but back then we forgot to describe it, so
+we do this now. Its purpose is to resolve some bad formatting issues
+with the \env{itemize} environment and also to make it easier to
+adjust the layout when necessary. What could happen in the past was
+that the \env{itemize} labels (e.g., the \textbullet{}) would
+sometimes react to surrounding font changes and could then suddenly
+change shape, for example to \textit{\textbullet}.
+
+This new command \cs{labelitemfont}, which defaults to \cs{normalfont},
+can be used to provide additional control in the typesetting of
+each label. Thus by choosing
+different settings other effects can be achieved. Here are two
+examples:
+\begin{verbatim}
+ \renewcommand\labelitemfont
+ {\normalfont\fontfamily{lmss}\selectfont}
+ \renewcommand\labelitemfont
+ {\rmfamily\normalshape}
+\end{verbatim}
+The first definition will take the symbols from the font Latin Modern
+Sans, so that you get
+%
+\def\myfont#1{{\let\labelitemfont\empty\fontfamily{lmss}\selectfont#1}}%
+%
+\myfont\labelitemi, \myfont\labelitemii, \myfont\labelitemiii\ and
+\!\!\myfont\labelitemiv\,; while the second variant freezes the font family
+and shape, but leaves the series as a variable quantity, so that an
+\env{itemize} in a bold context would show bolder symbols. Making
+\cs{labelitemfont} empty would give you back the buggy old behavior.
+%
+\githubissue{497}
+
+
+\subsection{Producing several marks for one footnote}
It is sometimes necessary to reference the same footnote several
-times, i.e., produce several footnote marks with the same number or
-symbol. This is now always possible by placing a \cs{label} into the
-\cs{footnote} and reference it with the command \cs{footref}
-elsewhere. This way marks referring to footnotes anywhere on the page
-(including those in \texttt{minipage}s) can be generated. In the past
-this command was only available with certain classes or when loading
-the \pkg{footmisc} package.
+times: i.e., to produce several footnote marks using the same number
+or symbol. This is now easily possible by placing a \cs{label} within
+the referenced \cs{footnote} and referencing this label by using the
+new command \cs{footref}. This means that footnote marks can be
+generated to refer to arbitrary footnotes (including those in
+\texttt{minipage}s).
+
+This \cs{footref} command has previously been available, but only when
+using certain classes or the \pkg{footmisc} package.
%
\githubissue{482}
+\subsection{Allow \cs{nocite} in the preamble}
-\subsection[Providing the raw option list of packages or documentclass
- to key/value handlers]
- {Providing the raw option list of packages or documentclass\\
- \mbox\quad to key/value handlers}
+A natural place for \verb=\nocite{*}= would be the preamble of the
+document, but for historical reasons \LaTeX{} issued an error message
+if it was placed there. This command is now allowed in the preamble.
+%
+\githubissue{424}
-\LaTeXe{} has always normalized space in option lists so\\
-\verb|\documentclass[ a4paper , 12pt ]{article}|\\
-processed the intended options \texttt{a4paper} and \texttt{12pt}.
-Unfortunately the mechanism used was designed for the simple option
-names of the standard option processing. Many classes and packages
-now use extended \emph{keyval} processing, however this white space
-normalization makes this difficult:
-\verb|[bb=1 2 3 4]|
-which might be expected to pass a bounding box of four numbers is
-normalized to \texttt{bb=1234} and
-\verb|[bb={1 2 3 4}]|\\
-which might be expected to quote the spaces results in low level \TeX{}
-parsing errors.
+\subsection{Made \cs{\textbackslash} generally robust}
+In 2018 most \LaTeX{} user-level commands were made robust, including
+the \cs{\textbackslash} command. However, \cs{\textbackslash} gets
+redefined in various environments and not all these cases were caught:
+such as, in particular, its use as the row delimiter in \env{tabular}
+structures. This has been corrected so that \cs{\textbackslash}
+should now be robust in all circumstances.
-For compatibility reasons, the standard option processing has not been
-changed however the original un-normalized package and class option lists
-are now saved. They are not used in the standard processing, however
-extended package option systems may use these \enquote{raw} option list
-macros if they are defined.
-The one change affecting the standard processing is that the low level
-error mentioned above is now avoided as values (any tokens to the
-right of an = sign) are removed from consideration from the
-\enquote{unused option list}. In this release \texttt{clip=true} and
-\texttt{clip=false} both contribute \texttt{clip} to the list of
-options that have been used.
+This change also fixed one anomaly present in the past:
+in a tabular preamble of the form
+\finalvspace*{-.3\baselineskip}
+\begin{quote}
+ \hspace*{-.15em}\verb={l=\texttt{\string>}\verb={\raggedright}p{10cm}r}= % stupid class
+\end{quote}
+\finalvspace*{-.3\baselineskip}
+a \cs{\textbackslash} in the second column would have the definition
+used within \cs{raggedright} and so it would not indicate the
+(premature) end of the \env{tabular}. Thus, for example,%
+\finalvspace*{-.3\baselineskip}
+\begin{quote}
+ \verb=a & b1 \\ b2 & c \\=
+\end{quote}
+\finalvspace*{-.3\baselineskip}
+was interpreted as a single row of the \env{tabular} (as intended),
+whereas
+\finalvspace*{-.3\baselineskip}
+\begin{quote}
+ \verb=a & \\ b2 & c \\=
+\end{quote}
+\finalvspace*{-.3\baselineskip}
+resulted in two rows! This happened because the \cs{\textbackslash}
+directly following the \verb=&= got interpreted while it still had the
+\enquote{end the row} meaning and not yet the \enquote{start a new
+ line within the second column} meaning.
+
+With \cs{\textbackslash} now being robust, the special scanning mode
+initiated by the \verb=&= ends immediately when this command is seen:
+the second column is therefore then started, which results in the
+\cs{\textbackslash} being interpreted as being within that column and
+hence as having its expected, within-column, meaning.
+
+We have restored consistency here: now both of the above lines
+produce a single \env{tabular} row.
+%
+As before, you can
+put \cs{raggedright}\cs{arraybackslash} in the \env{tabular}'s
+preamble for a column to ensure that \cs{\textbackslash} is always
+interpreted as a tabular row separator when used in that column. And
+you can use \cs{tabularnewline} to explicitly ask for a new table row,
+even when \cs{\textbackslash} has a different meaning within the
+current column.
%
-\githubissue{85}
+\githubissue{548}
-\subsection{Poor man's \cs{textasteriskcentered} if missing}
-The \cs{textasteriskcentered} symbol, used as part of the set of
-footnote symbols in \LaTeX{}, is assumed to be implemented by
-every font in the \texttt{TS1} encoding (when \pdfTeX{} is used) or
-in the \texttt{TU} encoding for the Unicode engines. Unfortunately,
-that assumption is not correct for all fonts, for example, for the
-\texttt{stix2} fonts don't offer the glyph, with the result that one
-gets missing glyphs when using \cs{thanks} etc.
-
-For that reason the definition for \cs{textasteriskcentered} was
-altered to check if there is a glyph in the right position and if not
-a normal \enquote{*} is used, slightly enlarged and lowered. That may
-not be perfect in all cases, but certainly better than nothing show
-up.
+\subsection{Allow extra space between name and address in \pkg{letter} class}
+
+The \cs{opening} command in the \pkg{letter} class expects the name
+and address to be separated by \verb=\\=, but it didn't allow the use
+of an optional argument to add some extra space after the name. The
+code has now been slightly altered to allow this.
%
-\githubissue{502}
+\githubissue{427}
-\subsection{Provide more ``dashes'' in encodings \texttt{OT1},
- \texttt{T1} and \texttt{TU}}
+\subsection{Additions to \cs{tracingall}}
-When pasting in text from external sources one sometimes encounters
-the Unicode characters
-%
-\texttt{"2011} (non-breaking hyphen),
-\texttt{"2012} (figure dash) and
-\texttt{"2015} (horizontal bar)
-%
-in addition to the common \texttt{"2013} (en-dash) and \texttt{"2014}
-(em-dash). In the past the first three characters produced an error
-message when used with \pdfTeX{}. Now they typeset an approximation
-(as they are unavailable in \texttt{OT1} or \texttt{T1} encoded fonts
-used by \pdfTeX{}), e.g., the figure dash is approximated by an en-dash.
+In July 2020 David Jones suggested an extension to \TeX{} engines,
+that added the possibility to set \cs{tracinglostchars}\texttt{=3} in
+order to generate an error message in case some character is missing
+from a font. In previous years, a warning about a missing character
+was silently printed to the \texttt{.log} file\linebreak
+(if $\cs{tracinglostchars}>0$) and to the terminal\linebreak
+ (if ${}>1$). This extension was added for \TL{} and \MiKTeX{}
+(except in Knuth's \TeX, of course),
+so that with $\cs{tracinglostchars}>2$ you now also get an
+error message for each missing glyph.
-In Unicode engines they either work (if contained in the selected
-Unicode font) or typeset nothing and produce a ``Missing character''
-warning in the log file.
+Later, in January 2021, Petr Olšák suggested yet another extension:
+a new primitive
+\mbox{parameter}
+%
+\cs{tracingstacklevels} that, when both it and \cs{tracingmacros} are
+positive, will add to the \mbox{tracing} information for each
+macro a visual indication (using dots) of
+its nesting level in the macro expansion stack.
-However, what works in all engines now, is to access the characters
-via the command names \cs{textnonbreakinghyphen}, \cs{textfiguredash}
-and \cs{texthorizontalbar}, respectively.
+These changes have both now been added to \LaTeX's debugging macros
+\cs{tracingall} and \cs{tracingnone}, so that these two new extensions
+are activated/deactivated as appropriate, so long as the \TeX{} engine
+supports them. An example document demonstrating these parameters is
+in the linked GitHub issue.
%
-\githubissue{404}
+\githubissue{524}
-\subsection{\env{filecontents} with \acro{utf-8} characters in file name}
-Since a few releases back, the \env{filecontents} environment allows writing a
-file with \acro{utf-8} characters in its name. However there was a bug that
-would not allow \emph{over}writing a file with \acro{utf-8} characters in the
-name. This has been fixed and now \env{filecontents} allows any characters in
-the file name.
-%
-\githubissue{415}
+\section{Code improvements}
+
+\subsection{Execute \cs{par} at the end of \cs{marginpar}}
+Previously, \LaTeX{} ended a \cs{marginpar} without ever explicitly
+calling \cs{par}. This command is now explicitly added because it is
+essential to the correct working of the paragraph hooks.
+Another case where this issue caused problems was the \pkg{lineno}
+package, where the last line was not numbered if the \cs{marginpar}
+ended without an explicit \cs{par}.
+%
+\githubissue{489}
-\subsection{Extending \pkg{latexrelease} to declare an entire module}
-In the 2020-10-01 release, \LaTeX's new hook management system was added to the
-kernel (see \cite{33:ltnews32}) and, as with all changes to the kernel, it was
-added to \pkg{latexrelease}, so that it is possible to roll back to a date where
-such module didn't exist yet, or roll forward from an older release and have the
-hook management system by loading the \pkg{latexrelease} package.
-However rolling back from a later release to the 2020-10-01 release didn't quite
-work because it would try to define all the commands from \pkg{lthooks} again,
-and that would result in errors, as usual with commands defined with
-\cs{newcommand} or in the case of \pkg{lthooks}, \cs{cs\_new:Npn}.
+\subsection{Execute \cs{AtEndDocument} hook in vertical mode}
-To solve this issue, now completely new modules can be defined in
-\pkg{latexrelease} using \cs{NewModuleRelease}
-and then when rolling back or forward it will know if the code
-of the module has to be read or completely ignored. More details can be
-found in the \pkg{latexrelease} documentation (\verb|texdoc latexrelease|).
+Until now \verb=\end{document}= executed the code from the
+\cs{AtEndDocument} hook as its first action. This meant that this
+hook was executed in horizontal mode if the user left no empty line
+after the last paragraph. As a result, one could get a spurious space
+added when, for example, that code contained a \cs{write}
+statement. This was fixed and now \cs{enddocument} first issues a
+\cs{par} to ensure that it always goes into vertical mode.
%
-\githubissue{479}
+\githubissue{385}
+\subsection{Color groups made permanent}
+
+The use of color in certain \LaTeX{} constructs, especially boxes,
+needs an extra layer of grouping to ensure that the color setting does
+not \emph{escape} and continue outside the box when it shouldn't.
+%
+To support this, the \LaTeX{} kernel defines a number of commands,
+e.g., \cs{color@begingroup} to be used in such places.
-\subsection{Small fix for rolling back prior to 2020-02-02}
-Whereas the \pkg{latexrelease} package can usually emulate an older \LaTeX{}
-kernel without much problem, rolling back to before the 2020-02-02 release
-didn't work properly because the management of the \cs{ExplSyntaxOn/Off} status
-for packages cannot be removed by the rollback without messing up catcodes after
-an \pkg{expl3}-based package is loaded. This has been fixed and now rollback is
-more careful not to leave \pkg{ExplSyntaxOn} after a package ends.
+Until now, these commands were initially set as no-ops and only the
+color packages redefined them to become real groups; this methodology
+complicates the coding as one has to account for a group being present
+or not (\mbox{depending} on what is loaded in the document).
%
-\githubissue{504}
+The kernel therefore now permanently adds these \enquote{color groups}.
+%
+\githubissue{488}
+\subsection{Provide the raw option list to key/value option handlers}
-\subsection[Add \cs{tracingstacklevels}
- and \cs{tracinglostchars}\texttt{=3} to \cs{tracingall}]
- {Add \cs{tracingstacklevels}
- and \cs{tracinglostchars}\texttt{=3}\\
- \mbox\quad to \cs{tracingall}}
+Before any further processing of the option list, the original
+(un-normalized, \enquote{raw} and unchanged) list of package or class
+options is now saved, as \cs{@raw@opt@...}; this list is not used by
+the standard option processing code but it is now available for use by
+extended class/package processing systems. Note that, for
+compatibility reasons, the standard option processing code has not
+been changed.
-In July 2020 David Jones suggested an extension to \TeX{} engines, that
-added the possibility to set \cs{tracinglostchars}\texttt{=3} to have an
-error in case some character is missing from a font. In previous years,
-the warning for a missing character would be silently printed to the
-\texttt{.log} file (if $\cs{tracinglostchars}>0$) and to the terminal
-(if ${}>1$). This extension was added for \TL{} and \MiKTeX{} (except
-in Knuth's \TeX, of course) and now with $\cs{tracinglostchars}>2$ you
-get an error on a missing glyph.
-Later, in January 2021, Petr Olšák suggested yet another extension, a
-new primitive parameter \cs{tracingstacklevels} that, when positive (and
-when \cs{tracingmacros} is also positive), will print a visual
-indication of the macro nesting level in \TeX's tracing information.
-Both these changes were incorporated to \LaTeX's debugging macros
-\cs{tracingall} and \cs{tracingnone}, so when you use them, the new
-extensions are automatically activated/deactivated if your \TeX{}
-distributions has a recent enough engine. An example document
-demonstrating these parameters is available in the linked GitHub issue.
+One
+aspect of this
+change does affect the standard \mbox{processing}: any tokens to the
+right of an \texttt{=}
+sign are \mbox{removed}
+from consideration
+when constructing
+the \enquote{\mbox{unused} option list}.
+For example, in
+this release \texttt{clip=true} and
+\texttt{clip=false} both contribute \texttt{clip} to the list of
+options that have been used.
%
-\githubissue{524}
+\githubissue{85}
-\subsection{Make \cs{\textbackslash} generally robust}
+\subsection{New for \pkg{latexrelease}\,: \cs{NewModuleRelease}}
+
+To explain the need for this new feature, we shall consider the
+following example: in the 2020-10-01 release, \LaTeX's new hook
+management system was added to the kernel (see \cite{33:ltnews32})
+and, as with all changes to the kernel, it was added to
+\pkg{latexrelease}; this made it possible to roll back to a date where
+this module didn't yet exist, or to roll forward from an older
+\LaTeX{} release to get the hook management system (by loading the
+\pkg{latexrelease} package).
+%
+However, this method of rolling back from a later release to the
+2020-10-01 release didn't quite work because it would try to define
+all the commands from \pkg{lthooks} again; and this would of course
+result in the expected errors from commands defined with
+\cs{newcommand} or (as in \pkg{lthooks}) \cs{cs\_new:Npn}.
+
+To solve such issues, we now provide \cs{NewModuleRelease} so that
+completely new modules can be defined using the facilities of
+\pkg{latexrelease} in such a way that, when rolling back or forward,
+the system will know whether the code of the new module has to be read
+or completely ignored. More details on this can be found in the
+\pkg{latexrelease} documentation (get this with
+\verb|texdoc latexrelease|).
+%
+\githubissue{479}
-In 2018 most \LaTeX{} user-level commands were made robust including
-\cs{\textbackslash}. However, \cs{\textbackslash} is redefined in
-various environments and not all cases were caught, in particular its use as row
-delimiter in \env{tablular} structures. This has now been corrected and
-\cs{\textbackslash} should be robust in all standard
-circumstances. Doing that also fixed one anomaly present in the past:
-in a tabular preamble of the form
-\begin{quote}
- \verb={l=\texttt{\string>}\verb={raggedright}p{10cm}r}= % stupid class
-\end{quote}
-a \cs{\textbackslash} in the second column would have the definition
-used by \cs{raggedright} and would not indicate the (premature) end of
-the \env{tabular}, e.g.,
-\begin{quote}
- \verb=a & b1 \\ b2 & c \\=
-\end{quote}
-would be a single row in that \env{tabular}. However, writing
-\begin{quote}
- \verb=a & \\ b2 & c \\=
-\end{quote}
-would give you two rows: due to the scanning process the
-\cs{\textbackslash} directly following the \verb=&= still had
-the \enquote{end the row} meaning and not the \enquote{start a new
- line in the second column} meaning.
-With \cs{\textbackslash} now robust, the scanning after \verb=&= ends
-when the command is seen and the second column is started and so now
-both lines above consistently produce a single \env{tabular} row.
+\subsection{Small fix for rolling back prior to 2020-02-02}
-As before, you can use \cs{raggedright} \cs{arraybackslash} in the
-\env{tabular} preamble to ensure that \cs{\textbackslash} is always
-interpreted as a row separator when used in the column or you could
-use \cs{tabularnewline} to explicitly ask for a new row even when
-\cs{\textbackslash} has a different meaning in the current column.
+Whereas the \pkg{latexrelease} package can usually emulate an older
+\LaTeX{} kernel without much problem, rolling back to before the
+2020-02-02 release didn't work properly: this is because the
+management of the \cs{ExplSyntaxOn/Off} status for packages (after an
+\pkg{expl3}-based package is loaded) cannot be removed by the rollback
+without messing up the catcodes. This has been fixed so that rollback
+is now more careful not to leave \cs{ExplSyntaxOn} after a package
+ends.
%
-\githubissue{548}
+\githubissue{504}
\section{Changes to packages in the \pkg{graphics} category}
-\subsection{Removed spurious warning for generic graphics rules}
+\subsection{Removed warning when loading graphics files}
-A previous release mistakenly caused a warning to appear when loading a graphics
-file with an unknown extension through a generic graphics rule. The warning
-would incorrectly say that the file was not found, whereas the file would be
-included correctly. The warning now doesn't show up in that case.
+A previous release sometimes mistakenly caused a (false) warning
+message to appear when \mbox{using} a generic graphics rule to find
+and load a graphics file with an unknown \mbox{extension}.
+%%CCC removing hyphenation here makes this one line longer.
+This warning would incorrectly say that the file was not found,
+whereas the file would in fact be correctly loaded. The warning now
+doesn't show up in that case.
%
\githubissue{516}
-\subsection{Fixed loading \texttt{gzip}ped PostScript graphics files}
+\subsection{Fixed loading of \texttt{gzip}ped
+ PostScript files}
-A previous release mistakenly changed the file searching mechanism and
-compressed graphics files would raise an error when being loaded with
-\cs{includegraphics}. This has been fixed and now \texttt{gzip}ped graphics
-load correctly.
+A previous release mistakenly changed the file searching mechanism so
+that compressed PostScript graphics files would raise an error when
+being loaded with \cs{includegraphics}. This has been fixed so that
+\texttt{gzip}ped graphics files now load correctly.
%
\githubissue{519}
-
\section{Changes to packages in the \pkg{tools} category}
-\subsection{\pkg{layout}: Support extra language options}
-The package now recognizes \texttt{japanese} and \texttt{romanian} as
+\subsection{\pkg{layout}: Added language options}
+
+This package now recognizes \texttt{japanese} and \texttt{romanian} as
language options.
%
\githubissue[s]{353 and 529}
@@ -660,71 +867,64 @@ language options.
\subsection{\pkg{array} and \pkg{longtable}: Make \cs{\textbackslash} generally robust}
-The fix for this issue was also applied to these packages, see above.
+The fix for this issue was also applied to these packages; see above.
%
\githubissue{548}
\subsection{\pkg{longtable}: General bug fix update}
-Minor update to \pkg{longtable} to fix bugs reported. Notably the
-possibility of incorrect page breaks if floats appear on the same page
-that a \env{longtable} starts. As this may affect page breaking in
-existing documents, a rollback to \pkg{longtable 4.13}
-(\file{longtable-2020-01-07.sty}) is supported.
+
+This is a minor update to the \pkg{longtable} package that fixes several
+reported bugs: notably the possibility of incorrect page breaks when
+floats appear on the page where a \env{longtable} starts. As this may
+affect page breaking in existing documents, a rollback to
+\pkg{longtable 4.13} (\file{longtable-2020-01-07.sty}) is supported.
%
\gnatsissue{tools}{2914 3396 3512}
-\githubissue{133 183 464}
+\githubissue{133 137 183 464 561}
-\subsection[\pkg{trace}: Add \cs{tracingstacklevels}
- and \cs{tracinglostchars}\texttt{=3} to \cs{traceon}]
- {\pkg{trace}: Add \cs{tracingstacklevels} and\\
- \mbox\quad \cs{tracinglostchars}\texttt{=3} to \cs{traceon}}
+\subsection{\pkg{trace}: Additions to \cs{traceon}}
-The enhancement mentioned earlier was also added to the \pkg{trace} package.
-%
-\iffalse
-The \cs{tracingstacklevels} and \cs{tracinglostchars} extensions
-mentioned earlier for \cs{tracingall} were also added for
-\cs{traceon} in the \pkg{trace} package, so if you're using that you
-can also benefit from these new debugging tools.
-\fi
-%
+The \cs{tracingstacklevels} and \cs{tracinglostchars} extensions to
+\cs{tracingall} (see above) were also added to \cs{traceon} in the
+\pkg{trace} package, so its users can also benefit from these new
+debugging possibilities.
%
\githubissue{524}
-
-
\subsection{\pkg{bm}: Better support for commands with optional arguments}
-Some uses of optional arguments that were supported by \cs{bm} stopped
-being supported (in 2004) when \cs{kernel@ifnextchar} was used
-internally by the format instead of \cs{@ifnextchar}. This update
-handles both versions of this command and restores the original
-behaviour.
-In addition package options for guiding the use of \enquote{poor man's
- bold} in fallback situations were added.
+Some uses of optional arguments in \cs{bm} stopped being supported (in
+2004) when \cs{kernel@ifnextchar} was used internally by the format
+instead of \cs{@ifnextchar}. This update handles both versions of this
+command and restores the original \mbox{behavior}.
+
+In addition, package options for guiding the use of \enquote{poor
+ man's bold} in fallback situations were added.
%
\githubissue{554}
-\section{Changes to packages in the \pkg{amsmath} category}
-%\subsection{\pkg{amsmath}: Make \cs{\textbackslash} generally robust}
-The fix for issue 548 was also applied in \pkg{amsmath}, see above.
+\section{Changes to packages in the \pkg{amsmath} category}
+
+The fix for issue 548 was also applied in \pkg{amsmath}; see above.
%
\githubissue{548}
-%\medskip
+
+
+\medskip
\begin{thebibliography}{9}
\fontsize{9.3}{11.3}\selectfont
\bibitem{33:blueprint} Frank Mittelbach and Chris Rowley:
- \emph{\LaTeX{} Tagged PDF — A blueprint for a large project}.\\
+ \emph{\LaTeX{} Tagged PDF \Dash A blueprint for a large project}.\\
\url{https://latex-project.org/publications/indexbyyear/2020/}
\bibitem{33:source2e}
diff --git a/macros/latex-dev/base/ltoutput.dtx b/macros/latex-dev/base/ltoutput.dtx
index 69bfa1f036..b1b3a24096 100644
--- a/macros/latex-dev/base/ltoutput.dtx
+++ b/macros/latex-dev/base/ltoutput.dtx
@@ -37,7 +37,7 @@
%<*driver>
% \fi
\ProvidesFile{ltoutput.dtx}
- [2020/12/06 v1.4f LaTeX Kernel (Output Routine)]
+ [2021/05/05 v1.4g LaTeX Kernel (Output Routine)]
% \iffalse
\documentclass{ltxdoc}
\GetFileInfo{ltoutput.dtx}
@@ -1134,7 +1134,7 @@
\global \advance \@colht \@tempdima
\ifx \@dbltoplist \@empty
\else
- \@latexerr{Float(s) lost}\@ehb
+ \@latex@error{Float(s) lost}\@ehb
\let \@dbltoplist \@empty
\fi
\@cons \@dbltoplist \@currbox
@@ -1525,7 +1525,7 @@
\global \@colroom \@colht
\ifx \@currlist\@empty
\else
- \@latexerr{Float(s) lost}\@ehb
+ \@latex@error{Float(s) lost}\@ehb
\global \let \@currlist \@empty
\fi
\@makefcolumn\@deferlist
@@ -3920,9 +3920,9 @@
%</trace>
\@tempskipa#2\relax
\ifdim \@tempskipa>.5\maxdimen
- \@latexerr{Suggested\space extra\space height\space
- (\the\@tempskipa)\space dangerously\space
- large}\@eha
+ \@latex@error{Suggested\space extra\space height\space
+ (\the\@tempskipa)\space dangerously\space
+ large}\@eha
\else
\ifdim \vsize<.5\maxdimen
%<*trace>
@@ -3940,8 +3940,8 @@
\fi
%</trace>
\else
- \@latexerr{Page\space height\space already\space
- too\space large}\@eha
+ \@latex@error{Page\space height\space already\space
+ too\space large}\@eha
\fi
\fi
}
diff --git a/macros/latex-dev/base/ltpara-code.pdf b/macros/latex-dev/base/ltpara-code.pdf
index 8984f1ccb5..a9b55237f1 100644
--- a/macros/latex-dev/base/ltpara-code.pdf
+++ b/macros/latex-dev/base/ltpara-code.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltpara-doc.pdf b/macros/latex-dev/base/ltpara-doc.pdf
index c8bff05546..f383268f22 100644
--- a/macros/latex-dev/base/ltpara-doc.pdf
+++ b/macros/latex-dev/base/ltpara-doc.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltpara.dtx b/macros/latex-dev/base/ltpara.dtx
index ad503b68e2..5ab52a5e9b 100644
--- a/macros/latex-dev/base/ltpara.dtx
+++ b/macros/latex-dev/base/ltpara.dtx
@@ -14,8 +14,8 @@
%%% From File: ltpara.dtx
%
% \begin{macrocode}
-\def\ltparaversion{v1.0f}
-\def\ltparadate{2021/04/16}
+\def\ltparaversion{v1.0g}
+\def\ltparadate{2021/05/27}
% \end{macrocode}
%<*driver>
\documentclass{l3doc}
@@ -672,6 +672,8 @@
%<@@=para>
% \end{macrocode}
%
+% \changes{v1.0g}{2021/05/24}{Use \cs{msg_...} instead of \cs{__kernel_msg...}}
+%
%
% \begin{macrocode}
%<*2ekernel|latexrelease>
@@ -751,7 +753,7 @@
% we can detect and report if the \hook{para/before} hook illegally
% changed out of vmode.
% \begin{macrocode}
- \tex_everypar:D { \__kernel_msg_error:nnnn {para}{mode}{before}{vertical} }
+ \tex_everypar:D { \msg_error:nnnn { hooks }{ para-mode }{before}{vertical} }
\@kernel@before@para@before
\hook_use:n {para/before}
% \end{macrocode}
@@ -785,7 +787,7 @@
% If we aren't in horizontal mode any longer the hooks above misbehaved.
% \begin{macrocode}
\if_mode_horizontal: \else:
- \__kernel_msg_error:nnnn {para}{mode}{begin}{vertical} \fi:
+ \msg_error:nnnn { hooks }{ para-mode }{begin}{vertical} \fi:
% \end{macrocode}
% Finally we reinsert the indentation box (unless suppressed) and
% then call \cs{everypar} the way legacy \LaTeX\ code expects it.
@@ -1047,7 +1049,7 @@
% If we haven't been in horizontal mode then the earlier hook
% \hook{para/end} is at fault and we report that.
% \begin{macrocode}
- { \__kernel_msg_error:nnnn {para}{mode}{end}{horizontal} }
+ { \msg_error:nnnn { hooks }{ para-mode }{end}{horizontal} }
% \end{macrocode}
% Finally close out the nested conditionals.
% \begin{macrocode}
@@ -1088,7 +1090,7 @@
\@@_handle_indent:
\the\everypar }
}
- { \__kernel_msg_error:nn {para}{raw} }
+ { \msg_error:nn { kernel }{ raw-para } }
\tex_indent:D
}
% \end{macrocode}
@@ -1101,7 +1103,7 @@
\tex_everypar:D { \g_@@_standard_everypar_tl }
\the\everypar }
}
- { \__kernel_msg_error:nn {para}{raw} }
+ { \msg_error:nn { kernel }{ raw-para } }
\tex_noindent:D
}
% \end{macrocode}
@@ -1158,8 +1160,9 @@
% paragraph.
% The first argument is the hook name second the mode
% it should have stayed in but didn't.
-% \begin{macrocode}
-\__kernel_msg_new:nnnn {para} {mode}
+%
+% \begin{macrocode}
+\msg_new:nnnn { hooks } { para-mode }
{
Illegal~mode~ change~ in~ hook~ 'para/#1'.\\
Hook~ code~ did~ not~ remain~ in~ #2~ mode.
@@ -1168,21 +1171,23 @@
Paragraph~ hooks~ cannot~ change~ the~ TeX~ mode~ without~ causing~
endless~ recursion.~ The~ hook~ code~ in~ 'para/#1'~ needs~ to~ stay~
in~ #2~ mode,~ but~ it~ didn't.~ Examine~ the~ hook~
- code~ with~ \ShowHook~ to~ find~ the~ issue.
+ code~ with~ \iow_char:N \\ShowHook~ to~ find~ the~ issue.
}
% \end{macrocode}
%
% And here is one used in the \enquote{raw} commands when they are
% used outside of vertical mode.
% \begin{macrocode}
-\__kernel_msg_new:nnnn {para} {raw}
+\msg_new:nnnn { kernel } { raw-para }
{
- Paragraph started while not in vertical mode.
+ Not~ in~ vertical~ mode.
}
{
- Starting a paragraph with \RawIndent or \RawNoindent
- (or \para_raw_indent: or \para_raw_noindent:) is only
- allowed if LaTeX is in vertical mode.
+ Starting~ a~ paragraph~ with~ \iow_char:N \\RawIndent~ or~
+ \iow_char:N \\RawNoindent \\
+ (or~ \iow_char:N \\para_raw_indent:~ or~
+ \iow_char:N \\para_raw_noindent:)~ is~ only~ allowed \\
+ if~ LaTeX~ is~ in~ vertical~ mode.
}
% \end{macrocode}
diff --git a/macros/latex-dev/base/ltshipout-code.pdf b/macros/latex-dev/base/ltshipout-code.pdf
index 828e444c2f..2572de0e02 100644
--- a/macros/latex-dev/base/ltshipout-code.pdf
+++ b/macros/latex-dev/base/ltshipout-code.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltshipout-doc.pdf b/macros/latex-dev/base/ltshipout-doc.pdf
index 4c8457428f..7fece645c8 100644
--- a/macros/latex-dev/base/ltshipout-doc.pdf
+++ b/macros/latex-dev/base/ltshipout-doc.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltvers.dtx b/macros/latex-dev/base/ltvers.dtx
index fe50d75a8f..20efb4509e 100644
--- a/macros/latex-dev/base/ltvers.dtx
+++ b/macros/latex-dev/base/ltvers.dtx
@@ -112,10 +112,10 @@
%</2ekernel>
%<latexrelease>\edef\latexreleaseversion
%<*2ekernel|latexrelease>
- {2021-06-01}
+ {2021-12-01}
%</2ekernel|latexrelease>
%<*2ekernel>
-\def\patch@level{-3}
+\def\patch@level{0}
% \end{macrocode}
%
% \begin{macro}{\development@branch@name}
diff --git a/macros/latex-dev/base/ltx3info.pdf b/macros/latex-dev/base/ltx3info.pdf
index 2788cb0a36..eac1bd7868 100644
--- a/macros/latex-dev/base/ltx3info.pdf
+++ b/macros/latex-dev/base/ltx3info.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltxdoc.pdf b/macros/latex-dev/base/ltxdoc.pdf
index aa2a071366..7ee087bfd9 100644
--- a/macros/latex-dev/base/ltxdoc.pdf
+++ b/macros/latex-dev/base/ltxdoc.pdf
Binary files differ
diff --git a/macros/latex-dev/base/makeindx.pdf b/macros/latex-dev/base/makeindx.pdf
index 42d3a434e9..bcc83fe99d 100644
--- a/macros/latex-dev/base/makeindx.pdf
+++ b/macros/latex-dev/base/makeindx.pdf
Binary files differ
diff --git a/macros/latex-dev/base/manual.pdf b/macros/latex-dev/base/manual.pdf
index cb9024f559..af10de35fc 100644
--- a/macros/latex-dev/base/manual.pdf
+++ b/macros/latex-dev/base/manual.pdf
Binary files differ
diff --git a/macros/latex-dev/base/modguide.pdf b/macros/latex-dev/base/modguide.pdf
index 0edb139e19..9fed1a2afa 100644
--- a/macros/latex-dev/base/modguide.pdf
+++ b/macros/latex-dev/base/modguide.pdf
Binary files differ
diff --git a/macros/latex-dev/base/nfssfont.pdf b/macros/latex-dev/base/nfssfont.pdf
index 8e6a4987f3..cd1c7a0cb6 100644
--- a/macros/latex-dev/base/nfssfont.pdf
+++ b/macros/latex-dev/base/nfssfont.pdf
Binary files differ
diff --git a/macros/latex-dev/base/proc.pdf b/macros/latex-dev/base/proc.pdf
index b0d4032019..fe4a87ed37 100644
--- a/macros/latex-dev/base/proc.pdf
+++ b/macros/latex-dev/base/proc.pdf
Binary files differ
diff --git a/macros/latex-dev/base/slides.pdf b/macros/latex-dev/base/slides.pdf
index 3116ccc852..2880f7e621 100644
--- a/macros/latex-dev/base/slides.pdf
+++ b/macros/latex-dev/base/slides.pdf
Binary files differ
diff --git a/macros/latex-dev/base/slifonts.pdf b/macros/latex-dev/base/slifonts.pdf
index faa2053db2..88753cd798 100644
--- a/macros/latex-dev/base/slifonts.pdf
+++ b/macros/latex-dev/base/slifonts.pdf
Binary files differ
diff --git a/macros/latex-dev/base/source2e.pdf b/macros/latex-dev/base/source2e.pdf
index fbc7f5ac41..1be35a8dfd 100644
--- a/macros/latex-dev/base/source2e.pdf
+++ b/macros/latex-dev/base/source2e.pdf
Binary files differ
diff --git a/macros/latex-dev/base/syntonly.pdf b/macros/latex-dev/base/syntonly.pdf
index 2156a292b9..72a10a0a10 100644
--- a/macros/latex-dev/base/syntonly.pdf
+++ b/macros/latex-dev/base/syntonly.pdf
Binary files differ
diff --git a/macros/latex-dev/base/tlc2.pdf b/macros/latex-dev/base/tlc2.pdf
index dd55f4b589..a4fd67964c 100644
--- a/macros/latex-dev/base/tlc2.pdf
+++ b/macros/latex-dev/base/tlc2.pdf
Binary files differ
diff --git a/macros/latex-dev/base/tulm.pdf b/macros/latex-dev/base/tulm.pdf
index 34f1ca3ce0..a9acd70daf 100644
--- a/macros/latex-dev/base/tulm.pdf
+++ b/macros/latex-dev/base/tulm.pdf
Binary files differ
diff --git a/macros/latex-dev/base/usrguide.pdf b/macros/latex-dev/base/usrguide.pdf
index 80d5bc6a1e..0546617e22 100644
--- a/macros/latex-dev/base/usrguide.pdf
+++ b/macros/latex-dev/base/usrguide.pdf
Binary files differ
diff --git a/macros/latex-dev/base/usrguide3.pdf b/macros/latex-dev/base/usrguide3.pdf
index 3e2c599b39..84266a6d86 100644
--- a/macros/latex-dev/base/usrguide3.pdf
+++ b/macros/latex-dev/base/usrguide3.pdf
Binary files differ
diff --git a/macros/latex-dev/base/utf8ienc.pdf b/macros/latex-dev/base/utf8ienc.pdf
index 625decf88d..6b0881842c 100644
--- a/macros/latex-dev/base/utf8ienc.pdf
+++ b/macros/latex-dev/base/utf8ienc.pdf
Binary files differ
diff --git a/macros/latex-dev/base/webcomp.pdf b/macros/latex-dev/base/webcomp.pdf
index 7267cc5344..d0e4064414 100644
--- a/macros/latex-dev/base/webcomp.pdf
+++ b/macros/latex-dev/base/webcomp.pdf
Binary files differ
diff --git a/macros/latex-dev/required/amsmath/README.md b/macros/latex-dev/required/amsmath/README.md
index dd71ffef61..d543380614 100644
--- a/macros/latex-dev/required/amsmath/README.md
+++ b/macros/latex-dev/required/amsmath/README.md
@@ -1,7 +1,7 @@
The amsmath bundle for LaTeX
============================
-Release 2021-05-01 pre-release 0
+Release 2021-12-01 pre-release 0
Overview
--------
@@ -77,5 +77,5 @@ version 1.3c or later.
-----
<p>Copyright (C) 2001-2004, 2007, 2008, 2010, 2011, 2013 American Mathematical Society. <br />
-<p>Copyright (C) 2016-2020 The LaTeX Project and American Mathematical Society. <br />
+<p>Copyright (C) 2016-2021 The LaTeX Project and American Mathematical Society. <br />
diff --git a/macros/latex-dev/required/amsmath/amsbsy.dtx b/macros/latex-dev/required/amsmath/amsbsy.dtx
index 1174784278..8557c6534a 100644
--- a/macros/latex-dev/required/amsmath/amsbsy.dtx
+++ b/macros/latex-dev/required/amsmath/amsbsy.dtx
@@ -2,7 +2,8 @@
% \iffalse meta-comment
%
% Copyright (C) 1995, 1999 American Mathematical Society.
-% Copyright (C) 2016-2020 LaTeX3 Project and American Mathematical Society.
+% Copyright (C) 2016-2021
+% LaTeX Project and American Mathematical Society.
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3c
@@ -14,7 +15,7 @@
%
% This work has the LPPL maintenance status `maintained'.
%
-% The Current Maintainer of this work is the LaTeX3 Project.
+% The Current Maintainer of this work is the LaTeX Project.
%
% \fi
%
diff --git a/macros/latex-dev/required/amsmath/amsbsy.ins b/macros/latex-dev/required/amsmath/amsbsy.ins
index 07707907e9..9194608622 100644
--- a/macros/latex-dev/required/amsmath/amsbsy.ins
+++ b/macros/latex-dev/required/amsmath/amsbsy.ins
@@ -1,6 +1,7 @@
%%
-%% Copyright 2010 American Mathematical Society.
-%% Copyright 2016 LaTeX3 Project and American Mathematical Society.
+%% Copyright (C) 2010 American Mathematical Society.
+%% Copyright (C) 2016-2021
+% LaTeX Project and American Mathematical Society.
%%
%% This work may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either version 1.3c
@@ -12,7 +13,7 @@
%%
%% This work has the LPPL maintenance status `maintained'.
%%
-%% The Current Maintainer of this work is the LaTeX3 Project.
+%% The Current Maintainer of this work is the LaTeX Project.
%%
%% ====================================================================
@@ -24,8 +25,8 @@
\preamble
-Copyright 1995, 1999 American Mathematical Society.
-Copyright 2016 LaTeX3 Project and American Mathematical Society.
+Copyright (C) 1995, 1999 American Mathematical Society.
+Copyright (C) 2016-2021 LaTeX Project and American Mathematical Society.
This work may be distributed and/or modified under the
conditions of the LaTeX Project Public License, either version 1.3c
@@ -37,7 +38,7 @@ version 2005/12/01 or later.
This work has the LPPL maintenance status `maintained'.
-The Current Maintainer of this work is the LaTeX3 project.
+The Current Maintainer of this work is the LaTeX Project.
\endpreamble
diff --git a/macros/latex-dev/required/amsmath/amsbsy.pdf b/macros/latex-dev/required/amsmath/amsbsy.pdf
index 1cc7898f92..999a16ba0b 100644
--- a/macros/latex-dev/required/amsmath/amsbsy.pdf
+++ b/macros/latex-dev/required/amsmath/amsbsy.pdf
Binary files differ
diff --git a/macros/latex-dev/required/amsmath/amscd.dtx b/macros/latex-dev/required/amsmath/amscd.dtx
index 12e94a11dc..f3528dd7c1 100644
--- a/macros/latex-dev/required/amsmath/amscd.dtx
+++ b/macros/latex-dev/required/amsmath/amscd.dtx
@@ -2,7 +2,7 @@
% \iffalse meta-comment
%
% Copyright (C) 1995, 1999 American Mathematical Society.
-% Copyright (C) 2016-2020 LaTeX3 Project and American Mathematical Society.
+% Copyright (C) 2016-2021 LaTeX Project and American Mathematical Society.
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3c
@@ -14,7 +14,7 @@
%
% This work has the LPPL maintenance status `maintained'.
%
-% The Current Maintainer of this work is the LaTeX3 Project.
+% The Current Maintainer of this work is the LaTeX Project.
%
% \fi
%
diff --git a/macros/latex-dev/required/amsmath/amscd.ins b/macros/latex-dev/required/amsmath/amscd.ins
index 5890ca06c1..30b2f28177 100644
--- a/macros/latex-dev/required/amsmath/amscd.ins
+++ b/macros/latex-dev/required/amsmath/amscd.ins
@@ -1,6 +1,6 @@
%%
-%% Copyright 2010 American Mathematical Society.
-%% Copyright 2016 LaTeX3 Project and American Mathematical Society.
+%% Copyright (C) 2010 American Mathematical Society.
+%% Copyright (C) 2016-2021 LaTeX Project and American Mathematical Society.
%%
%% This work may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either version 1.3c
@@ -12,7 +12,7 @@
%%
%% This work has the LPPL maintenance status `maintained'.
%%
-%% The Current Maintainer of this work is the LaTeX3 Project.
+%% The Current Maintainer of this work is the LaTeX Project.
%%
%% ====================================================================
@@ -24,8 +24,8 @@
\preamble
-Copyright 1995, 1999 American Mathematical Society.
-Copyright 2016 LaTeX3 Project and American Mathematical Society.
+Copyright (C) 1995, 1999 American Mathematical Society.
+Copyright (C) 2016-2021 LaTeX Project and American Mathematical Society.
This work may be distributed and/or modified under the
conditions of the LaTeX Project Public License, either version 1.3c
@@ -37,7 +37,7 @@ version 2005/12/01 or later.
This work has the LPPL maintenance status `maintained'.
-The Current Maintainer of this work is the LaTeX3 project.
+The Current Maintainer of this work is the LaTeX Project.
\endpreamble
diff --git a/macros/latex-dev/required/amsmath/amscd.pdf b/macros/latex-dev/required/amsmath/amscd.pdf
index a69b03715c..4f885d5b9c 100644
--- a/macros/latex-dev/required/amsmath/amscd.pdf
+++ b/macros/latex-dev/required/amsmath/amscd.pdf
Binary files differ
diff --git a/macros/latex-dev/required/amsmath/amsgen.dtx b/macros/latex-dev/required/amsmath/amsgen.dtx
index 92df548f12..10ac58b18e 100644
--- a/macros/latex-dev/required/amsmath/amsgen.dtx
+++ b/macros/latex-dev/required/amsmath/amsgen.dtx
@@ -2,7 +2,7 @@
% \iffalse meta-comment
%
% Copyright (C) 1995, 1999 American Mathematical Society.
-% Copyright (C) 2016-2020 LaTeX3 Project and American Mathematical Society.
+% Copyright (C) 2016-2021 LaTeX Project and American Mathematical Society.
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3c
@@ -14,7 +14,7 @@
%
% This work has the LPPL maintenance status `maintained'.
%
-% The Current Maintainer of this work is the LaTeX3 Project.
+% The Current Maintainer of this work is the LaTeX Project.
%
% \fi
%
diff --git a/macros/latex-dev/required/amsmath/amsgen.ins b/macros/latex-dev/required/amsmath/amsgen.ins
index be7720bc89..aacb6e0c39 100644
--- a/macros/latex-dev/required/amsmath/amsgen.ins
+++ b/macros/latex-dev/required/amsmath/amsgen.ins
@@ -1,6 +1,6 @@
%%
-%% Copyright 2010 American Mathematical Society.
-%% Copyright 2016 LaTeX3 Project and American Mathematical Society.
+%% Copyright (C) 2010 American Mathematical Society.
+%% Copyright (C) 2016 LaTeX Project and American Mathematical Society.
%%
%% This work may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either version 1.3c
@@ -12,7 +12,7 @@
%%
%% This work has the LPPL maintenance status `maintained'.
%%
-%% The Current Maintainer of this work is the LaTeX3 Project.
+%% The Current Maintainer of this work is the LaTeX Project.
%%
%% ====================================================================
@@ -24,8 +24,8 @@
\preamble
-Copyright 1995, 1999 American Mathematical Society.
-Copyright 2016 LaTeX3 Project and American Mathematical Society.
+Copyright (C) 1995, 1999 American Mathematical Society.
+Copyright (C) 2016-2021 LaTeX Project and American Mathematical Society.
This work may be distributed and/or modified under the
conditions of the LaTeX Project Public License, either version 1.3c
@@ -37,7 +37,7 @@ version 2005/12/01 or later.
This work has the LPPL maintenance status `maintained'.
-The Current Maintainer of this work is the LaTeX3 project.
+The Current Maintainer of this work is the LaTeX Project.
\endpreamble
diff --git a/macros/latex-dev/required/amsmath/amsgen.pdf b/macros/latex-dev/required/amsmath/amsgen.pdf
index 7af209fae9..6282db6a6e 100644
--- a/macros/latex-dev/required/amsmath/amsgen.pdf
+++ b/macros/latex-dev/required/amsmath/amsgen.pdf
Binary files differ
diff --git a/macros/latex-dev/required/amsmath/amsldoc.pdf b/macros/latex-dev/required/amsmath/amsldoc.pdf
index ba52c32f76..373af4649a 100644
--- a/macros/latex-dev/required/amsmath/amsldoc.pdf
+++ b/macros/latex-dev/required/amsmath/amsldoc.pdf
Binary files differ
diff --git a/macros/latex-dev/required/amsmath/amsldoc.tex b/macros/latex-dev/required/amsmath/amsldoc.tex
index b29a8b8468..26ea6cf808 100644
--- a/macros/latex-dev/required/amsmath/amsldoc.tex
+++ b/macros/latex-dev/required/amsmath/amsldoc.tex
@@ -1,6 +1,6 @@
%
% Copyright (C) 1995, 2000, 2013 American Mathematical Society.
-% Copyright (C) 2016-2020 LaTeX3 Project and American Mathematical Society.
+% Copyright (C) 2016-2021 LaTeX Project and American Mathematical Society.
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3c
@@ -12,7 +12,7 @@
%
% This work has the LPPL maintenance status `maintained'.
%
-% The Current Maintainer of this work is the LaTeX3 Project.
+% The Current Maintainer of this work is the LaTeX Project.
%
\documentclass[leqno,titlepage,openany]{amsldoc}[1999/12/13]
@@ -63,7 +63,7 @@ Bug reports can be opened (category \texttt{#1}) at\\%
% End definitions for amsldoc.cls
\title{User's Guide for the \nipkg{amsmath} Package (Version~2.1)}
-\author{American Mathematical Society, \LaTeX3 Project}
+\author{American Mathematical Society, \LaTeX\ Project}
\date{1999-12-13\\(revised 2002-02-25, 2016-11-14, 2018-04-05, 2019-10-14, 2020-02-18)}
\makeatletter
\def\@thanks{\bigskip\MaintainedByLaTeXTeam{amslatex}}
diff --git a/macros/latex-dev/required/amsmath/amsmath-2018-12-01.sty b/macros/latex-dev/required/amsmath/amsmath-2018-12-01.sty
index 6bcb03e217..ab45172a32 100644
--- a/macros/latex-dev/required/amsmath/amsmath-2018-12-01.sty
+++ b/macros/latex-dev/required/amsmath/amsmath-2018-12-01.sty
@@ -6,8 +6,8 @@
%%
%% amsmath.dtx
%%
-%% Copyright 1995, 1999, 2000, 2013 American Mathematical Society.
-%% Copyright 2016 LaTeX3 Project and American Mathematical Society.
+%% Copyright (C) 1995, 1999, 2000, 2013 American Mathematical Society.
+%% Copyright (C) 2016-2021 LaTeX Project and American Mathematical Society.
%%
%% This work may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either version 1.3c
@@ -19,7 +19,7 @@
%%
%% This work has the LPPL maintenance status `maintained'.
%%
-%% The Current Maintainer of this work is the LaTeX3 project.
+%% The Current Maintainer of this work is the LaTeX Project.
%%
\NeedsTeXFormat{LaTeX2e}% LaTeX 2.09 can't be used (nor non-LaTeX)
[1994/12/01]% LaTeX date must be December 1994 or later
diff --git a/macros/latex-dev/required/amsmath/amsmath.dtx b/macros/latex-dev/required/amsmath/amsmath.dtx
index 7f324700f6..8857861101 100644
--- a/macros/latex-dev/required/amsmath/amsmath.dtx
+++ b/macros/latex-dev/required/amsmath/amsmath.dtx
@@ -2,7 +2,7 @@
% \iffalse meta-comment
%
% Copyright (C) 1995, 2000, 2013 American Mathematical Society.
-% Copyright (C) 2016-2020 LaTeX3 Project and American Mathematical Society.
+% Copyright (C) 2016-2021 LaTeX Project and American Mathematical Society.
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3c
@@ -14,7 +14,7 @@
%
% This work has the LPPL maintenance status `maintained'.
%
-% The Current Maintainer of this work is the LaTeX3 Project.
+% The Current Maintainer of this work is the LaTeX Project.
%
% \fi
%
@@ -86,7 +86,7 @@ Bug reports can be opened (category \texttt{#1}) at\\%
% \end{macrocode}
%
% \begin{macrocode}
-\ProvidesPackage{amsmath}[2020/09/23 v2.17i AMS math features]
+\ProvidesPackage{amsmath}[2021/04/20 v2.17j AMS math features]
% \end{macrocode}
%
% \section{Catcode defenses}
@@ -2752,8 +2752,9 @@ ill-advised in LaTeX.%
% \textit{u} template of the current column if the author ended the
% current row with an empty column (i.e., the mathcr was immediately
% preceded by an ampersand).
+% \changes{v2.17j}{2021/04/20}{Use \cs{protected} for \cs{\bslash} variant (gh/548)}
% \begin{macrocode}
-\def\math@cr{\relax\iffalse{\fi\ifnum0=`}\fi
+\protected\def\math@cr{\relax\iffalse{\fi\ifnum0=`}\fi
% \end{macrocode}
% The first step is now to check whether an asterisk follows.
% \cs{@eqpen} is used to hold the penalty value to be put on
diff --git a/macros/latex-dev/required/amsmath/amsmath.ins b/macros/latex-dev/required/amsmath/amsmath.ins
index 55e4089804..1bb73101bb 100644
--- a/macros/latex-dev/required/amsmath/amsmath.ins
+++ b/macros/latex-dev/required/amsmath/amsmath.ins
@@ -1,6 +1,6 @@
%%
-%% Copyright 2010 American Mathematical Society.
-%% Copyright 2016 LaTeX3 Project and American Mathematical Society.
+%% Copyright (C) 2010 American Mathematical Society.
+%% Copyright (C) 2016-2021 LaTeX Project and American Mathematical Society.
%%
%% This work may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either version 1.3c
@@ -12,7 +12,7 @@
%%
%% This work has the LPPL maintenance status `maintained'.
%%
-%% The Current Maintainer of this work is the LaTeX3 Project.
+%% The Current Maintainer of this work is the LaTeX Project.
%%
%% ====================================================================
@@ -24,8 +24,8 @@
\preamble
-Copyright 1995, 1999, 2000, 2013 American Mathematical Society.
-Copyright 2016 LaTeX3 Project and American Mathematical Society.
+Copyright (C) 1995, 1999, 2000, 2013 American Mathematical Society.
+Copyright (C) 2016-2021 LaTeX Project and American Mathematical Society.
This work may be distributed and/or modified under the
conditions of the LaTeX Project Public License, either version 1.3c
@@ -37,7 +37,7 @@ version 2005/12/01 or later.
This work has the LPPL maintenance status `maintained'.
-The Current Maintainer of this work is the LaTeX3 project.
+The Current Maintainer of this work is the LaTeX Project.
\endpreamble
diff --git a/macros/latex-dev/required/amsmath/amsmath.pdf b/macros/latex-dev/required/amsmath/amsmath.pdf
index 58751777c9..74b242c29a 100644
--- a/macros/latex-dev/required/amsmath/amsmath.pdf
+++ b/macros/latex-dev/required/amsmath/amsmath.pdf
Binary files differ
diff --git a/macros/latex-dev/required/amsmath/amsopn.dtx b/macros/latex-dev/required/amsmath/amsopn.dtx
index 35c3b1605b..a71c13d6c8 100644
--- a/macros/latex-dev/required/amsmath/amsopn.dtx
+++ b/macros/latex-dev/required/amsmath/amsopn.dtx
@@ -2,7 +2,7 @@
% \iffalse meta-comment
%
% Copyright (C) 1995, 1999 American Mathematical Society.
-% Copyright (C) 2016-2020 LaTeX3 Project and American Mathematical Society.
+% Copyright (C) 2016-2021 LaTeX Project and American Mathematical Society.
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3c
@@ -14,7 +14,7 @@
%
% This work has the LPPL maintenance status `maintained'.
%
-% The Current Maintainer of this work is the LaTeX3 Project.
+% The Current Maintainer of this work is the LaTeX Project.
%
% \fi
%
diff --git a/macros/latex-dev/required/amsmath/amsopn.ins b/macros/latex-dev/required/amsmath/amsopn.ins
index 84aff6243b..72c649c340 100644
--- a/macros/latex-dev/required/amsmath/amsopn.ins
+++ b/macros/latex-dev/required/amsmath/amsopn.ins
@@ -1,6 +1,6 @@
%%
-%% Copyright 2010 American Mathematical Society.
-%% Copyright 2016 LaTeX3 Project and American Mathematical Society.
+%% Copyright (C) 2010 American Mathematical Society.
+%% Copyright (C) 2016-2021 LaTeX Project and American Mathematical Society.
%%
%% This work may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either version 1.3c
@@ -12,7 +12,7 @@
%%
%% This work has the LPPL maintenance status `maintained'.
%%
-%% The Current Maintainer of this work is the LaTeX3 Project.
+%% The Current Maintainer of this work is the LaTeX Project.
%%
%% ====================================================================
@@ -24,8 +24,8 @@
\preamble
-Copyright 1995, 1999 American Mathematical Society.
-Copyright 2016 LaTeX3 Project and American Mathematical Society.
+Copyright (C) 1995, 1999 American Mathematical Society.
+Copyright (C) 2016-2021 LaTeX Project and American Mathematical Society.
This work may be distributed and/or modified under the
conditions of the LaTeX Project Public License, either version 1.3c
@@ -37,7 +37,7 @@ version 2005/12/01 or later.
This work has the LPPL maintenance status `maintained'.
-The Current Maintainer of this work is the LaTeX3 project.
+The Current Maintainer of this work is the LaTeX Project.
\endpreamble
diff --git a/macros/latex-dev/required/amsmath/amsopn.pdf b/macros/latex-dev/required/amsmath/amsopn.pdf
index a25d472d9a..4df94fefcc 100644
--- a/macros/latex-dev/required/amsmath/amsopn.pdf
+++ b/macros/latex-dev/required/amsmath/amsopn.pdf
Binary files differ
diff --git a/macros/latex-dev/required/amsmath/amstex.sty b/macros/latex-dev/required/amsmath/amstex.sty
index 6ce36f52c9..e620746a54 100644
--- a/macros/latex-dev/required/amsmath/amstex.sty
+++ b/macros/latex-dev/required/amsmath/amstex.sty
@@ -1,8 +1,8 @@
%
% \iffalse meta-comment
%
-% Copyright 1995, 1999 American Mathematical Society.
-% Copyright 2016 LaTeX3 Project and American Mathematical Society.
+% Copyright (C) 1995, 1999 American Mathematical Society.
+% Copyright (C) 2016-2021 LaTeX Project and American Mathematical Society.
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3c
@@ -14,7 +14,7 @@
%
% This work has the LPPL maintenance status `maintained'.
%
-% The Current Maintainer of this work is the LaTeX3 Project.
+% The Current Maintainer of this work is the LaTeX Project.
%
% \fi
%
diff --git a/macros/latex-dev/required/amsmath/amstext.dtx b/macros/latex-dev/required/amsmath/amstext.dtx
index 5e7e6ca672..d6475561fb 100644
--- a/macros/latex-dev/required/amsmath/amstext.dtx
+++ b/macros/latex-dev/required/amsmath/amstext.dtx
@@ -2,7 +2,7 @@
% \iffalse meta-comment
%
% Copyright (C) 1995, 1999 American Mathematical Society.
-% Copyright (C) 2016-2020 LaTeX3 Project and American Mathematical Society.
+% Copyright (C) 2016-2021 LaTeX Project and American Mathematical Society.
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3c
@@ -14,7 +14,7 @@
%
% This work has the LPPL maintenance status `maintained'.
%
-% The Current Maintainer of this work is the LaTeX3 Project.
+% The Current Maintainer of this work is the LaTeX Project.
%
% \fi
%
diff --git a/macros/latex-dev/required/amsmath/amstext.ins b/macros/latex-dev/required/amsmath/amstext.ins
index 5f9a5c4076..5578a7e947 100644
--- a/macros/latex-dev/required/amsmath/amstext.ins
+++ b/macros/latex-dev/required/amsmath/amstext.ins
@@ -1,6 +1,6 @@
%%
-%% Copyright 2010 American Mathematical Society.
-%% Copyright 2016 LaTeX3 Project and American Mathematical Society.
+%% Copyright (C) 2010 American Mathematical Society.
+%% Copyright (C) 2016-2021 LaTeX Project and American Mathematical Society.
%%
%% This work may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either version 1.3c
@@ -12,7 +12,7 @@
%%
%% This work has the LPPL maintenance status `maintained'.
%%
-%% The Current Maintainer of this work is the LaTeX3 Project.
+%% The Current Maintainer of this work is the LaTeX Project.
%%
%% ====================================================================
@@ -24,8 +24,8 @@
\preamble
-Copyright 1995, 1999 American Mathematical Society.
-Copyright 2016 LaTeX3 Project and American Mathematical Society.
+Copyright (C) 1995, 1999 American Mathematical Society.
+Copyright (C) 2016-2021 LaTeX Project and American Mathematical Society.
This work may be distributed and/or modified under the
conditions of the LaTeX Project Public License, either version 1.3c
@@ -37,7 +37,7 @@ version 2005/12/01 or later.
This work has the LPPL maintenance status `maintained'.
-The Current Maintainer of this work is the LaTeX3 project.
+The Current Maintainer of this work is the LaTeX Project.
\endpreamble
diff --git a/macros/latex-dev/required/amsmath/amstext.pdf b/macros/latex-dev/required/amsmath/amstext.pdf
index 479942cd74..f3e0dab818 100644
--- a/macros/latex-dev/required/amsmath/amstext.pdf
+++ b/macros/latex-dev/required/amsmath/amstext.pdf
Binary files differ
diff --git a/macros/latex-dev/required/amsmath/amsxtra.dtx b/macros/latex-dev/required/amsmath/amsxtra.dtx
index 9cc0b71027..aaa5fd1a2d 100644
--- a/macros/latex-dev/required/amsmath/amsxtra.dtx
+++ b/macros/latex-dev/required/amsmath/amsxtra.dtx
@@ -2,7 +2,7 @@
% \iffalse meta-comment
%
% Copyright (C) 1995, 1999 American Mathematical Society.
-% Copyright (C) 2016-2020 LaTeX3 Project and American Mathematical Society.
+% Copyright (C) 2016-2021 LaTeX Project and American Mathematical Society.
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3c
@@ -14,7 +14,7 @@
%
% This work has the LPPL maintenance status `maintained'.
%
-% The Current Maintainer of this work is the LaTeX3 Project.
+% The Current Maintainer of this work is the LaTeX Project.
%
% \fi
%
diff --git a/macros/latex-dev/required/amsmath/amsxtra.ins b/macros/latex-dev/required/amsmath/amsxtra.ins
index bbcd08e3f7..7eca6e065a 100644
--- a/macros/latex-dev/required/amsmath/amsxtra.ins
+++ b/macros/latex-dev/required/amsmath/amsxtra.ins
@@ -1,6 +1,6 @@
%%
-%% Copyright 2010 American Mathematical Society.
-%% Copyright 2016 LaTeX3 Project and American Mathematical Society.
+%% Copyright (C) 2010 American Mathematical Society.
+%% Copyright (C) 2016-2021 LaTeX Project and American Mathematical Society.
%%
%% This work may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either version 1.3c
@@ -12,7 +12,7 @@
%%
%% This work has the LPPL maintenance status `maintained'.
%%
-%% The Current Maintainer of this work is the LaTeX3 Project.
+%% The Current Maintainer of this work is the LaTeX Project.
%%
%% ====================================================================
@@ -24,8 +24,8 @@
\preamble
-Copyright 1995, 1999 American Mathematical Society.
-Copyright 2016 LaTeX3 Project and American Mathematical Society.
+Copyright (C) 1995, 1999 American Mathematical Society.
+Copyright (C) 2016-2021 LaTeX Project and American Mathematical Society.
This work may be distributed and/or modified under the
conditions of the LaTeX Project Public License, either version 1.3c
@@ -37,7 +37,7 @@ version 2005/12/01 or later.
This work has the LPPL maintenance status `maintained'.
-The Current Maintainer of this work is the LaTeX3 project.
+The Current Maintainer of this work is the LaTeX Project.
\endpreamble
diff --git a/macros/latex-dev/required/amsmath/amsxtra.pdf b/macros/latex-dev/required/amsmath/amsxtra.pdf
index b0e0f66d37..c379472faf 100644
--- a/macros/latex-dev/required/amsmath/amsxtra.pdf
+++ b/macros/latex-dev/required/amsmath/amsxtra.pdf
Binary files differ
diff --git a/macros/latex-dev/required/amsmath/changes.txt b/macros/latex-dev/required/amsmath/changes.txt
index eb87a6e666..63bea7e727 100644
--- a/macros/latex-dev/required/amsmath/changes.txt
+++ b/macros/latex-dev/required/amsmath/changes.txt
@@ -3,12 +3,21 @@ All changes above are only part of the development branch for the next release.
================================================================================
#########################
+# 2021-06-01 Release
+#########################
+
+2021-04-20 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * amsmath.dtx (subsection{Preliminary macros}):
+ Use \protected for \\ variant (gh/548)
+
+#########################
# 2020-10-01 Release
#########################
2020/09/23 Ulrike Fischer <Ulrike.Fischer@latex-project.org>
* amsmath.dtx (subsection{Fractions}):
- added \cs{Ustack} to \cs{frac} and \cs{genfrac} for luatex
+ added \Ustack to \frac and \genfrac for luatex
(moved patch from lualatex-math)
* amsmath.dtx (section{Array-related environments})
changed subarray for luatex: moved to version from lualatex-math
diff --git a/macros/latex-dev/required/amsmath/subeqn.pdf b/macros/latex-dev/required/amsmath/subeqn.pdf
index 31caecf259..b8ad174232 100644
--- a/macros/latex-dev/required/amsmath/subeqn.pdf
+++ b/macros/latex-dev/required/amsmath/subeqn.pdf
Binary files differ
diff --git a/macros/latex-dev/required/amsmath/technote.pdf b/macros/latex-dev/required/amsmath/technote.pdf
index d3403770f0..375db6b423 100644
--- a/macros/latex-dev/required/amsmath/technote.pdf
+++ b/macros/latex-dev/required/amsmath/technote.pdf
Binary files differ
diff --git a/macros/latex-dev/required/amsmath/testmath.pdf b/macros/latex-dev/required/amsmath/testmath.pdf
index 15fa991ee9..f11b508170 100644
--- a/macros/latex-dev/required/amsmath/testmath.pdf
+++ b/macros/latex-dev/required/amsmath/testmath.pdf
Binary files differ
diff --git a/macros/latex-dev/required/firstaid/changes.txt b/macros/latex-dev/required/firstaid/changes.txt
index 24b6eae4f6..d7823c21a1 100644
--- a/macros/latex-dev/required/firstaid/changes.txt
+++ b/macros/latex-dev/required/firstaid/changes.txt
@@ -1,3 +1,11 @@
+2021-03-15 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * latex2e-first-aid-for-external-files.dtx:
+ bigfoot incorrectly assumes insertions being ordered, so this is
+ enforced for now.
+ 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:
diff --git a/macros/latex-dev/required/firstaid/firstaid.ins b/macros/latex-dev/required/firstaid/firstaid.ins
index 6a1dbaa853..cd5ea2006d 100644
--- a/macros/latex-dev/required/firstaid/firstaid.ins
+++ b/macros/latex-dev/required/firstaid/firstaid.ins
@@ -3,7 +3,7 @@
%% driver files from the doc files in this package when run through
%% LaTeX or TeX.
%%
-%% Copyright (C) 2020,2021
+%% Copyright (C) 2020-2021
%% The LaTeX Project and any individual authors listed elsewhere
%% in this file.
%%
diff --git a/macros/latex-dev/required/firstaid/latex2e-first-aid-for-external-files.dtx b/macros/latex-dev/required/firstaid/latex2e-first-aid-for-external-files.dtx
index a74cb79a78..7eb108418c 100644
--- a/macros/latex-dev/required/firstaid/latex2e-first-aid-for-external-files.dtx
+++ b/macros/latex-dev/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,2021
+%% File: latex2e-first-aid-for-external-files.dtx (C) Copyright 2020-2021
+%%
%% The LaTeX Project and any individual authors listed elsewhere
%% in this file.
%
@@ -110,8 +111,8 @@
% \end{macrocode}
%
% \begin{macrocode}
-\def\LaTeXFirstAidDate{2021/02/24}
-\def\LaTeXFirstAidVersion{v1.0k}
+\def\LaTeXFirstAidDate{2021/03/15}
+\def\LaTeXFirstAidVersion{v1.0l}
% \end{macrocode}
%
% \begin{macrocode}
@@ -507,6 +508,44 @@
% \end{macrocode}
%
%
+%
+%
+%
+% \subsection{The \pkg{bigfoot} first aid}
+%
+% The \pkg{bigfoot} packages makes the assumption that two
+% \cs{newinsert} allocations have a recognisable order in their
+% numbers, the second one has a lower number. This was correct in
+% the classic \TeX{} implementation but with the extended
+% allocation possibilities of all modern engines is no longer the
+% case and there is a point where the allocations take a ``jump''
+% breaking the odering assumption. These days we are fairly close
+% to that point and depending on how many packages are loaded
+% before \pkg{bigfoot} the package breaks.
+%
+% This firstaid therefore jumps over the problematical point by
+% pushing the count allocation to a safe value if necessary.
+% \begin{macrocode}
+\AddToHook{file/after/bigfoot.sty}{%
+ \ifnum\count10<\insc@unt
+ \global\count10=\insc@unt
+ \fi
+% \end{macrocode}
+% We also correct a bug that \pkg{bigfoot} tries to shift mark
+% registers, but in \LaTeX{} (at least since 2015) the allocation
+% number is not 266, so it does that to a random number of mark
+% registers (which sometimes blows up depending on the value in 266).
+% \begin{macrocode}
+ \def\FN@allmarks#1{\@elt{#1}%
+ \ifnum#1<\count256 %<--- problem: 266 isn't the counter for marks
+ \expandafter\FN@allmarks\expandafter{\number\numexpr#1+\@ne}%
+ \fi}%
+}
+% \end{macrocode}
+%
+%
+%
+%
% \subsection[Temporary fixes for the kernel (until the next
% patch-level release)]
% {Temporary fixes for the kernel \\
diff --git a/macros/latex-dev/required/firstaid/latex2e-first-aid-for-external-files.pdf b/macros/latex-dev/required/firstaid/latex2e-first-aid-for-external-files.pdf
index eecccbc8f6..eaf6567b15 100644
--- a/macros/latex-dev/required/firstaid/latex2e-first-aid-for-external-files.pdf
+++ b/macros/latex-dev/required/firstaid/latex2e-first-aid-for-external-files.pdf
Binary files differ
diff --git a/macros/latex-dev/required/graphics/README.md b/macros/latex-dev/required/graphics/README.md
index b9d06376c6..c91e2aeab0 100644
--- a/macros/latex-dev/required/graphics/README.md
+++ b/macros/latex-dev/required/graphics/README.md
@@ -1,7 +1,7 @@
The LaTeX `graphics` bundle
===========================
-Release 2021-06-01 pre-release 1
+Release 2021-12-01 pre-release 0
Overview
--------
diff --git a/macros/latex-dev/required/graphics/changes.txt b/macros/latex-dev/required/graphics/changes.txt
index 980d2b33e4..0616e3b692 100644
--- a/macros/latex-dev/required/graphics/changes.txt
+++ b/macros/latex-dev/required/graphics/changes.txt
@@ -4,6 +4,14 @@ completeness or accuracy and it contains some references to files that
are not part of the distribution.
=======================================================================
+================================================================================
+All changes above are only part of the development branch for the next release.
+================================================================================
+
+#########################
+# 2021-16-01 Release
+#########################
+
2021-03-04 Phelype Oleinik <phelype.oleinik@latex-project.org>
* graphics.dtx: fix loading gzipped .(e)ps graphics files.
@@ -20,10 +28,6 @@ are not part of the distribution.
* graphics.dtx: Avoid warning when loading a file using a generic rule (gh/516).
-================================================================================
-All changes above are only part of the development branch for the next release.
-================================================================================
-
2020-12-05 Ulrike Fischer <Ulrike.Fischer@latex-project.org>
* graphics.dtx: fix missing default in quiet key.
diff --git a/macros/latex-dev/required/graphics/color.pdf b/macros/latex-dev/required/graphics/color.pdf
index b4d0a03cd8..dd3985df0d 100644
--- a/macros/latex-dev/required/graphics/color.pdf
+++ b/macros/latex-dev/required/graphics/color.pdf
Binary files differ
diff --git a/macros/latex-dev/required/graphics/drivers.pdf b/macros/latex-dev/required/graphics/drivers.pdf
index 617f4f8ec3..c6af822ebb 100644
--- a/macros/latex-dev/required/graphics/drivers.pdf
+++ b/macros/latex-dev/required/graphics/drivers.pdf
Binary files differ
diff --git a/macros/latex-dev/required/graphics/epsfig.pdf b/macros/latex-dev/required/graphics/epsfig.pdf
index 7cdd87b5d0..fb40d308a9 100644
--- a/macros/latex-dev/required/graphics/epsfig.pdf
+++ b/macros/latex-dev/required/graphics/epsfig.pdf
Binary files differ
diff --git a/macros/latex-dev/required/graphics/graphics.pdf b/macros/latex-dev/required/graphics/graphics.pdf
index 7dea8f5a99..df54344b4b 100644
--- a/macros/latex-dev/required/graphics/graphics.pdf
+++ b/macros/latex-dev/required/graphics/graphics.pdf
Binary files differ
diff --git a/macros/latex-dev/required/graphics/graphicx.pdf b/macros/latex-dev/required/graphics/graphicx.pdf
index 56d9451077..6b1f0cccdb 100644
--- a/macros/latex-dev/required/graphics/graphicx.pdf
+++ b/macros/latex-dev/required/graphics/graphicx.pdf
Binary files differ
diff --git a/macros/latex-dev/required/graphics/grfguide.pdf b/macros/latex-dev/required/graphics/grfguide.pdf
index c6a4b2a5ca..49b150e493 100644
--- a/macros/latex-dev/required/graphics/grfguide.pdf
+++ b/macros/latex-dev/required/graphics/grfguide.pdf
Binary files differ
diff --git a/macros/latex-dev/required/graphics/keyval.pdf b/macros/latex-dev/required/graphics/keyval.pdf
index 41cbbcb3f8..b4ff7dbfd1 100644
--- a/macros/latex-dev/required/graphics/keyval.pdf
+++ b/macros/latex-dev/required/graphics/keyval.pdf
Binary files differ
diff --git a/macros/latex-dev/required/graphics/lscape.pdf b/macros/latex-dev/required/graphics/lscape.pdf
index 4caf895c6b..654015f72a 100644
--- a/macros/latex-dev/required/graphics/lscape.pdf
+++ b/macros/latex-dev/required/graphics/lscape.pdf
Binary files differ
diff --git a/macros/latex-dev/required/graphics/rotating.pdf b/macros/latex-dev/required/graphics/rotating.pdf
index b57235b7fe..a65a2c0f0b 100644
--- a/macros/latex-dev/required/graphics/rotating.pdf
+++ b/macros/latex-dev/required/graphics/rotating.pdf
Binary files differ
diff --git a/macros/latex-dev/required/graphics/rotex.pdf b/macros/latex-dev/required/graphics/rotex.pdf
index 9659ba3101..5f4321501f 100644
--- a/macros/latex-dev/required/graphics/rotex.pdf
+++ b/macros/latex-dev/required/graphics/rotex.pdf
Binary files differ
diff --git a/macros/latex-dev/required/graphics/trig.pdf b/macros/latex-dev/required/graphics/trig.pdf
index 5c1f68dffc..789a62c69a 100644
--- a/macros/latex-dev/required/graphics/trig.pdf
+++ b/macros/latex-dev/required/graphics/trig.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/README.md b/macros/latex-dev/required/tools/README.md
index 5ff7b0d1e0..0b1b308799 100644
--- a/macros/latex-dev/required/tools/README.md
+++ b/macros/latex-dev/required/tools/README.md
@@ -1,7 +1,7 @@
The LaTeX `tools` bundle
========================
-Release 2021-06-01 pre-release 2
+Release 2021-12-01 pre-release 0
Overview
--------
diff --git a/macros/latex-dev/required/tools/afterpage.pdf b/macros/latex-dev/required/tools/afterpage.pdf
index 918b9bbe27..4a7e94d148 100644
--- a/macros/latex-dev/required/tools/afterpage.pdf
+++ b/macros/latex-dev/required/tools/afterpage.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/array.pdf b/macros/latex-dev/required/tools/array.pdf
index 175a0b8dfe..2a0e38ba62 100644
--- a/macros/latex-dev/required/tools/array.pdf
+++ b/macros/latex-dev/required/tools/array.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/bm.pdf b/macros/latex-dev/required/tools/bm.pdf
index 125a480d07..7973845ac7 100644
--- a/macros/latex-dev/required/tools/bm.pdf
+++ b/macros/latex-dev/required/tools/bm.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/calc.pdf b/macros/latex-dev/required/tools/calc.pdf
index ec12e97f64..8024058852 100644
--- a/macros/latex-dev/required/tools/calc.pdf
+++ b/macros/latex-dev/required/tools/calc.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/changes.txt b/macros/latex-dev/required/tools/changes.txt
index 005a3ed4bc..17278e4a54 100644
--- a/macros/latex-dev/required/tools/changes.txt
+++ b/macros/latex-dev/required/tools/changes.txt
@@ -6,6 +6,19 @@ completeness or accuracy and it contains some references to files that
are not part of the distribution.
=======================================================================
+================================================================================
+All changes above are only part of the development branch for the next release.
+================================================================================
+
+#########################
+# 2021-06-01 Release
+#########################
+
+2021-05-07 David Carlisle <David.Carlisle@latex-project.org>
+
+ * longtable.dtx: write lists of tables entry to the file with
+ extension \ext@table, not force .lot github/561
+
2021-04-25 David Carlisle <David.Carlisle@latex-project.org>
* bm.dtx: guard \kernel@ifnextchar (gh/554)
@@ -68,11 +81,6 @@ are not part of the distribution.
* layout.dtx: (subsection{Options}):
Option japanese added (gh/353)
-
-================================================================================
-All changes above are only part of the development branch for the next release.
-================================================================================
-
#########################
# 2020-10-01 Release
#########################
diff --git a/macros/latex-dev/required/tools/dcolumn.pdf b/macros/latex-dev/required/tools/dcolumn.pdf
index 2293c86e99..ed97229255 100644
--- a/macros/latex-dev/required/tools/dcolumn.pdf
+++ b/macros/latex-dev/required/tools/dcolumn.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/delarray.pdf b/macros/latex-dev/required/tools/delarray.pdf
index 951882d630..6f00a67dd9 100644
--- a/macros/latex-dev/required/tools/delarray.pdf
+++ b/macros/latex-dev/required/tools/delarray.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/enumerate.pdf b/macros/latex-dev/required/tools/enumerate.pdf
index f6be172ebf..9e48d4a087 100644
--- a/macros/latex-dev/required/tools/enumerate.pdf
+++ b/macros/latex-dev/required/tools/enumerate.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/fileerr.pdf b/macros/latex-dev/required/tools/fileerr.pdf
index 298c7ba4d6..7a5eab8cf4 100644
--- a/macros/latex-dev/required/tools/fileerr.pdf
+++ b/macros/latex-dev/required/tools/fileerr.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/fontsmpl.pdf b/macros/latex-dev/required/tools/fontsmpl.pdf
index 6a66ff7089..eafd38abd1 100644
--- a/macros/latex-dev/required/tools/fontsmpl.pdf
+++ b/macros/latex-dev/required/tools/fontsmpl.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/ftnright.pdf b/macros/latex-dev/required/tools/ftnright.pdf
index a3addcfc41..8a7c4c4c94 100644
--- a/macros/latex-dev/required/tools/ftnright.pdf
+++ b/macros/latex-dev/required/tools/ftnright.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/hhline.pdf b/macros/latex-dev/required/tools/hhline.pdf
index ee80fb369b..23fde95eb4 100644
--- a/macros/latex-dev/required/tools/hhline.pdf
+++ b/macros/latex-dev/required/tools/hhline.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/indentfirst.pdf b/macros/latex-dev/required/tools/indentfirst.pdf
index 3e93185eae..3ee72ae32b 100644
--- a/macros/latex-dev/required/tools/indentfirst.pdf
+++ b/macros/latex-dev/required/tools/indentfirst.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/layout.pdf b/macros/latex-dev/required/tools/layout.pdf
index 98bb6ab28c..adab2be7a1 100644
--- a/macros/latex-dev/required/tools/layout.pdf
+++ b/macros/latex-dev/required/tools/layout.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/longtable.dtx b/macros/latex-dev/required/tools/longtable.dtx
index 5569ae3d5c..457891dac7 100644
--- a/macros/latex-dev/required/tools/longtable.dtx
+++ b/macros/latex-dev/required/tools/longtable.dtx
@@ -37,7 +37,7 @@
%<driver> \ProvidesFile{longtable.drv}
% \fi
% \ProvidesFile{longtable.dtx}
- [2021-04-21 v4.15 Multi-page Table package (DPC)]
+ [2021-05-07 v4.16 Multi-page Table package (DPC)]
%
% \iffalse
%<*driver>
@@ -1970,13 +1970,15 @@
% {Call \cs{LT@makecaption} not \cs{LT@mkcaption}}
% \changes{v3.14}{1995/05/24}
% {Add new control argument}
+% \changes{v4.16}{2021/05/07}
+% {use \cs{ext@table} gh/561}
% \begin{macrocode}
\def\LT@c@ption#1[#2]#3{%
\LT@makecaption#1\fnum@table{#3}%
\def\@tempa{#2}%
\ifx\@tempa\@empty\else
{\let\\\space
- \addcontentsline{lot}{table}{\protect\numberline{\thetable}{#2}}}%
+ \addcontentsline{\ext@table}{table}{\protect\numberline{\thetable}{#2}}}%
\fi}
% \end{macrocode}
% \end{macro}
diff --git a/macros/latex-dev/required/tools/longtable.pdf b/macros/latex-dev/required/tools/longtable.pdf
index c503bd9123..a6459b2ecd 100644
--- a/macros/latex-dev/required/tools/longtable.pdf
+++ b/macros/latex-dev/required/tools/longtable.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/multicol.pdf b/macros/latex-dev/required/tools/multicol.pdf
index 556603f749..ba15c5c6a9 100644
--- a/macros/latex-dev/required/tools/multicol.pdf
+++ b/macros/latex-dev/required/tools/multicol.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/rawfonts.pdf b/macros/latex-dev/required/tools/rawfonts.pdf
index 424fb693b0..50b8f778f9 100644
--- a/macros/latex-dev/required/tools/rawfonts.pdf
+++ b/macros/latex-dev/required/tools/rawfonts.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/shellesc.pdf b/macros/latex-dev/required/tools/shellesc.pdf
index 94dea41431..63bd149aed 100644
--- a/macros/latex-dev/required/tools/shellesc.pdf
+++ b/macros/latex-dev/required/tools/shellesc.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/showkeys.pdf b/macros/latex-dev/required/tools/showkeys.pdf
index c558d2fbd2..1b100e1f20 100644
--- a/macros/latex-dev/required/tools/showkeys.pdf
+++ b/macros/latex-dev/required/tools/showkeys.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/somedefs.pdf b/macros/latex-dev/required/tools/somedefs.pdf
index 7dc1936536..df44c3acbe 100644
--- a/macros/latex-dev/required/tools/somedefs.pdf
+++ b/macros/latex-dev/required/tools/somedefs.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/tabularx.pdf b/macros/latex-dev/required/tools/tabularx.pdf
index 574096cd7a..b4cb4713f3 100644
--- a/macros/latex-dev/required/tools/tabularx.pdf
+++ b/macros/latex-dev/required/tools/tabularx.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/theorem.pdf b/macros/latex-dev/required/tools/theorem.pdf
index 196dc13cce..37a4b9b86c 100644
--- a/macros/latex-dev/required/tools/theorem.pdf
+++ b/macros/latex-dev/required/tools/theorem.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/tools-overview.pdf b/macros/latex-dev/required/tools/tools-overview.pdf
index 6fd1756018..74171e9aa5 100644
--- a/macros/latex-dev/required/tools/tools-overview.pdf
+++ b/macros/latex-dev/required/tools/tools-overview.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/trace.pdf b/macros/latex-dev/required/tools/trace.pdf
index 35d766b041..fdee99e72e 100644
--- a/macros/latex-dev/required/tools/trace.pdf
+++ b/macros/latex-dev/required/tools/trace.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/varioref.pdf b/macros/latex-dev/required/tools/varioref.pdf
index d8fa68c00b..9f1a0a94da 100644
--- a/macros/latex-dev/required/tools/varioref.pdf
+++ b/macros/latex-dev/required/tools/varioref.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/verbatim.pdf b/macros/latex-dev/required/tools/verbatim.pdf
index 9ad8bc66e3..f3a67abf25 100644
--- a/macros/latex-dev/required/tools/verbatim.pdf
+++ b/macros/latex-dev/required/tools/verbatim.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/xr.pdf b/macros/latex-dev/required/tools/xr.pdf
index cf60d6ef58..e8cdf21a7a 100644
--- a/macros/latex-dev/required/tools/xr.pdf
+++ b/macros/latex-dev/required/tools/xr.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/xspace.pdf b/macros/latex-dev/required/tools/xspace.pdf
index d1540186ef..d8335ddee4 100644
--- a/macros/latex-dev/required/tools/xspace.pdf
+++ b/macros/latex-dev/required/tools/xspace.pdf
Binary files differ
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, Hŕn Th&#x1ebf; Thŕnh&#8217;s TeX variant that writes PDF directly
+class="description">
+ <!--l. 249--><p class="noindent" >pdfTeX, Hŕn Th&#x1ebf; Thŕnh&#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