summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2022-10-31 03:04:01 +0000
committerNorbert Preining <norbert@preining.info>2022-10-31 03:04:01 +0000
commitc7892fe1a11367872de6f3ee0fa074b39824e59c (patch)
tree4879018aece4cb9f7549756ccadbb1808296d19d
parentb2c88e6cbb5203ec5d33819454f1499cada7e336 (diff)
CTAN sync 202210310303
-rw-r--r--FILES.byname891
-rw-r--r--FILES.byname.gzbin2472359 -> 2472213 bytes
-rw-r--r--FILES.last07days709
-rw-r--r--biblio/ctan-bibdata/ctan.bib69
-rw-r--r--biblio/ctan-bibdata/ctan.pdfbin3620853 -> 3621491 bytes
-rw-r--r--fonts/gillius/README2
-rw-r--r--fonts/gillius/latex/gillius.sty3
-rw-r--r--graphics/pgf/contrib/bodeplot/README.md3038
-rw-r--r--graphics/pgf/contrib/bodeplot/bodeplot.dtx13662
-rw-r--r--graphics/pgf/contrib/bodeplot/bodeplot.ins3179
-rw-r--r--graphics/pgf/contrib/bodeplot/bodeplot.pdfbin1062592 -> 1066728 bytes
-rw-r--r--macros/generic/tracklang/CHANGES6
-rw-r--r--macros/generic/tracklang/README6
-rw-r--r--macros/generic/tracklang/samples/animals/sample-animals-babel.pdfbin14855 -> 15690 bytes
-rw-r--r--macros/generic/tracklang/samples/animals/sample-animals-de-poly.pdfbin3820 -> 3823 bytes
-rw-r--r--macros/generic/tracklang/samples/animals/sample-animals-de-poly.tex1
-rw-r--r--macros/generic/tracklang/samples/animals/sample-animals-de.pdfbin13625 -> 14463 bytes
-rw-r--r--macros/generic/tracklang/samples/animals/sample-animals-poly.pdfbin3556 -> 3560 bytes
-rw-r--r--macros/generic/tracklang/samples/animals/sample-animals-sr-poly.pdfbin7547 -> 0 bytes
-rw-r--r--macros/generic/tracklang/samples/animals/sample-animals.pdfbin12656 -> 13489 bytes
-rw-r--r--macros/generic/tracklang/samples/animals/sample-animals2-de.pdfbin13625 -> 14463 bytes
-rw-r--r--macros/generic/tracklang/samples/animals/sample-animals2-de2.pdfbin13625 -> 14463 bytes
-rw-r--r--macros/generic/tracklang/samples/animals/sample-animals2-de3.pdfbin13607 -> 14444 bytes
-rw-r--r--macros/generic/tracklang/samples/animals/sample-animals2-de4.pdfbin3820 -> 3823 bytes
-rw-r--r--macros/generic/tracklang/samples/animals/sample-animals2-poly.pdfbin3560 -> 3559 bytes
-rw-r--r--macros/generic/tracklang/samples/animals/sample-animals2.pdfbin12656 -> 13489 bytes
-rw-r--r--macros/generic/tracklang/samples/regions/sample-regions.pdfbin13161 -> 13996 bytes
-rw-r--r--macros/generic/tracklang/samples/regions/sample-regions2-manx.pdfbin21945 -> 23587 bytes
-rw-r--r--macros/generic/tracklang/samples/regions/sample-regions2-map.pdfbin26000 -> 27666 bytes
-rw-r--r--macros/generic/tracklang/samples/regions/sample-regions2-map2.pdfbin25852 -> 27515 bytes
-rw-r--r--macros/generic/tracklang/samples/regions/sample-regions2-map3.pdfbin24924 -> 26590 bytes
-rw-r--r--macros/generic/tracklang/samples/regions/sample-regions2-nomap.pdfbin25468 -> 27134 bytes
-rw-r--r--macros/generic/tracklang/samples/regions/sample-regions2.pdfbin14716 -> 15551 bytes
-rw-r--r--macros/generic/tracklang/samples/sample-tracklang.pdfbin19552 -> 20388 bytes
-rw-r--r--macros/generic/tracklang/samples/sample-tracklang2.pdfbin19802 -> 20747 bytes
-rw-r--r--macros/generic/tracklang/samples/sample-tracklang3.pdfbin19814 -> 20758 bytes
-rw-r--r--macros/generic/tracklang/samples/sample-tracklang4.pdfbin6202 -> 6869 bytes
-rw-r--r--macros/generic/tracklang/samples/sample-tracklang5.pdfbin16914 -> 17857 bytes
-rw-r--r--macros/generic/tracklang/samples/sample-tracklang6.pdfbin19897 -> 19898 bytes
-rw-r--r--macros/generic/tracklang/tracklang-code.pdfbin0 -> 629107 bytes
-rw-r--r--macros/generic/tracklang/tracklang-manual.html6522
-rw-r--r--macros/generic/tracklang/tracklang-manual.pdfbin0 -> 764697 bytes
-rw-r--r--macros/generic/tracklang/tracklang-manual.tex5641
-rw-r--r--macros/generic/tracklang/tracklang.dtx3682
-rw-r--r--macros/generic/tracklang/tracklang.ins4
-rw-r--r--macros/generic/tracklang/tracklang.pdfbin742279 -> 0 bytes
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-caspervector/doc/ChangeLog.txt5
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-caspervector/doc/caspervector-ay.pdfbin172785 -> 212575 bytes
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-caspervector/doc/caspervector.pdfbin314272 -> 393884 bytes
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-caspervector/doc/caspervector.tex12
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-caspervector/tex/blx-caspervector-base.def29
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-caspervector/tex/blx-caspervector-gbk.def2
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-caspervector/tex/blx-caspervector-utf8.def2
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-caspervector/tex/caspervector-ay.bbx2
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-caspervector/tex/caspervector-ay.cbx2
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-caspervector/tex/caspervector.bbx2
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-caspervector/tex/caspervector.cbx2
-rw-r--r--macros/latex/contrib/eolang/DEPENDS.txt1
-rw-r--r--macros/latex/contrib/eolang/eolang.dtx100
-rw-r--r--macros/latex/contrib/eolang/eolang.pdfbin969068 -> 1036825 bytes
-rw-r--r--macros/latex/contrib/ffcode/DEPENDS.txt2
-rw-r--r--macros/latex/contrib/ffcode/README.md9
-rw-r--r--macros/latex/contrib/ffcode/ffcode.dtx201
-rw-r--r--macros/latex/contrib/ffcode/ffcode.ins8
-rw-r--r--macros/latex/contrib/ffcode/ffcode.pdfbin395644 -> 487461 bytes
-rw-r--r--macros/latex/contrib/pkuthss/doc/example.pdfbin103792 -> 103719 bytes
-rw-r--r--macros/latex/contrib/pkuthss/doc/example/spine.tex9
-rw-r--r--macros/latex/contrib/pkuthss/doc/example/thesis.tex4
-rw-r--r--macros/latex/contrib/pkuthss/doc/pkuthss.pdfbin439556 -> 348380 bytes
-rw-r--r--macros/latex/contrib/pkuthss/doc/readme/ChangeLog.txt9
-rw-r--r--macros/latex/contrib/pkuthss/doc/readme/chap/pkuthss-chap2.tex5
-rw-r--r--macros/latex/contrib/pkuthss/doc/readme/chap/pkuthss-chap3.tex17
-rw-r--r--macros/latex/contrib/pkuthss/doc/readme/chap/pkuthss-intro.tex4
l---------macros/latex/contrib/pkuthss/doc/readme/ctex-fontset-pkuthss.def1
l---------macros/latex/contrib/pkuthss/doc/readme/ctexopts.cfg1
-rw-r--r--macros/latex/contrib/pkuthss/doc/readme/pkuthss.bib20
-rw-r--r--macros/latex/contrib/pkuthss/doc/readme/pkuthss.tex4
-rw-r--r--macros/latex/contrib/pkuthss/tex/pkulogo.pdfbin3530 -> 3530 bytes
-rw-r--r--macros/latex/contrib/pkuthss/tex/pkuthss-gbk.def2
-rw-r--r--macros/latex/contrib/pkuthss/tex/pkuthss-utf8.def2
-rw-r--r--macros/latex/contrib/pkuthss/tex/pkuthss.cls24
-rw-r--r--macros/latex/contrib/pkuthss/tex/pkuthss.def2
-rw-r--r--macros/latex/contrib/pkuthss/tex/pkuword.pdfbin6280 -> 6280 bytes
-rw-r--r--macros/luatex/latex/luaoptions/Contributors.md6
-rw-r--r--macros/luatex/latex/luaoptions/LICENSE21
-rw-r--r--macros/luatex/latex/luaoptions/README.md15
-rw-r--r--macros/luatex/latex/luaoptions/latexmkrc2
-rw-r--r--macros/luatex/latex/luaoptions/luaoptions-lib.lua (renamed from support/lyluatex/lyluatex-lib.lua)97
-rw-r--r--macros/luatex/latex/luaoptions/luaoptions.lua (renamed from support/lyluatex/lyluatex-options.lua)113
-rw-r--r--macros/luatex/latex/luaoptions/luaoptions.pdfbin0 -> 28593 bytes
-rw-r--r--macros/luatex/latex/luaoptions/luaoptions.sty36
-rw-r--r--macros/luatex/latex/luaoptions/luaoptions.tex188
-rw-r--r--macros/luatex/latex/luaoptions/luaoptionsbase.cls37
-rw-r--r--macros/luatex/latex/luaoptions/luaoptionsmanual.cls41
-rw-r--r--macros/unicodetex/latex/bithesis/bithesis.dtx115
-rw-r--r--macros/unicodetex/latex/bithesis/bithesis.pdfbin1033346 -> 1043619 bytes
-rw-r--r--macros/xetex/latex/xepersian/README4
-rw-r--r--macros/xetex/latex/xepersian/xepersian-doc-intro.ltx2
-rw-r--r--macros/xetex/latex/xepersian/xepersian-doc-title.ltx4
-rw-r--r--macros/xetex/latex/xepersian/xepersian-doc.ltx2
-rw-r--r--macros/xetex/latex/xepersian/xepersian-doc.pdfbin243511 -> 236749 bytes
-rw-r--r--macros/xetex/latex/xepersian/xepersian.dtx37
-rw-r--r--macros/xetex/latex/xepersian/xepersian.pdfbin775123 -> 777678 bytes
-rw-r--r--support/latexindent/LatexIndent/GetYamlSettings.pm6
-rw-r--r--support/latexindent/LatexIndent/Version.pm4
-rw-r--r--support/latexindent/README26
-rw-r--r--support/latexindent/bin/linux/latexindentbin0 -> 6159922 bytes
-rw-r--r--support/latexindent/bin/macos/latexindentbin0 -> 6389393 bytes
-rw-r--r--support/latexindent/defaultSettings.yaml2
-rw-r--r--support/latexindent/documentation/cmhlistings.tex35
-rw-r--r--support/latexindent/documentation/contributors.bib176
-rw-r--r--support/latexindent/documentation/figure-schematic.tex31
-rw-r--r--support/latexindent/documentation/latex-indent.bib138
-rw-r--r--support/latexindent/documentation/latexindent-yaml-schema.json2
-rw-r--r--support/latexindent/documentation/latexindent.pdfbin1106074 -> 1105223 bytes
-rw-r--r--support/latexindent/documentation/latexindent.tex7235
-rw-r--r--support/latexindent/documentation/logo.tex33
-rw-r--r--support/latexindent/documentation/sec-appendices.tex720
-rw-r--r--support/latexindent/documentation/sec-conclusions-know-limitations.tex28
-rw-r--r--support/latexindent/documentation/sec-default-user-local.tex1304
-rw-r--r--support/latexindent/documentation/sec-demonstration.tex42
-rw-r--r--support/latexindent/documentation/sec-fine-tuning.tex311
-rw-r--r--support/latexindent/documentation/sec-how-to-use.tex549
-rw-r--r--support/latexindent/documentation/sec-indent-config-and-settings.tex207
-rw-r--r--support/latexindent/documentation/sec-introduction.tex250
-rw-r--r--support/latexindent/documentation/sec-references.tex16
-rw-r--r--support/latexindent/documentation/sec-replacements.tex407
-rw-r--r--support/latexindent/documentation/sec-the-line-switch.tex198
-rw-r--r--support/latexindent/documentation/sec-the-m-switch.tex60
-rw-r--r--support/latexindent/documentation/subsec-combine-text-wrap-para-line-breaks.tex111
-rw-r--r--support/latexindent/documentation/subsec-commands-and-their-options.tex251
-rw-r--r--support/latexindent/documentation/subsec-noAdditionalIndent-indentRules.tex36
-rw-r--r--support/latexindent/documentation/subsec-one-sentence-per-line.tex380
-rw-r--r--support/latexindent/documentation/subsec-poly-switches.tex1053
-rw-r--r--support/latexindent/documentation/subsec-text-wrap.tex513
-rw-r--r--support/latexindent/documentation/subsubsec-commands-with-arguments.tex109
-rw-r--r--support/latexindent/documentation/subsubsec-environments-and-their-arguments.tex294
-rw-r--r--support/latexindent/documentation/subsubsec-environments-with-items.tex60
-rw-r--r--support/latexindent/documentation/subsubsec-headings.tex87
-rw-r--r--support/latexindent/documentation/subsubsec-ifelsefi.tex87
-rw-r--r--support/latexindent/documentation/subsubsec-no-add-remaining-code-blocks.tex134
-rw-r--r--support/latexindent/documentation/subsubsec-special.tex67
-rw-r--r--support/latexindent/documentation/test-default-settings.tex65
-rw-r--r--support/latexindent/documentation/title.tex30
-rwxr-xr-xsupport/latexindent/latexindent.pl2
-rw-r--r--support/lyluatex/Contributors.md6
-rw-r--r--support/lyluatex/LICENSE2
-rw-r--r--support/lyluatex/README.md53
-rw-r--r--support/lyluatex/lyluatex.lua275
-rw-r--r--support/lyluatex/lyluatex.pdfbin1664216 -> 2028732 bytes
-rw-r--r--support/lyluatex/lyluatex.sty27
-rw-r--r--support/lyluatex/lyluatex.tex301
-rw-r--r--support/lyluatex/lyluatexbase.cls6
-rw-r--r--support/lyluatex/lyluatexmanual.cls8
-rw-r--r--systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl5
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb375
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb.md52
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha5122
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc14
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb.xzbin2422448 -> 2423428 bytes
-rw-r--r--systems/win32/miktex/tm/packages/next/pr.ini8
-rw-r--r--systems/win32/miktex/tm/packages/pr.ini8
-rw-r--r--timestamp2
163 files changed, 39999 insertions, 14772 deletions
diff --git a/FILES.byname b/FILES.byname
index 28ebf079c6..7f5cb1cfde 100644
--- a/FILES.byname
+++ b/FILES.byname
@@ -2035,12 +2035,12 @@
2022/09/23 | 1673 | biblio/citation-style-language/README.md
2022/09/23 | 11958 | biblio/citation-style-language/vancouver.csl
2022/09/23 | 591448 | biblio/citation-style-language.zip
-2022/10/29 | 1678 | biblio/ctan-bibdata/biblatex-ctan/ctan.bbx
+2022/10/30 | 1678 | biblio/ctan-bibdata/biblatex-ctan/ctan.bbx
2022/10/08 | 127 | biblio/ctan-bibdata/biblatex-ctan/ctan.cbx
-2022/10/29 | 2742861 | biblio/ctan-bibdata/ctan.bib
-2022/10/29 | 3620091 | biblio/ctan-bibdata/ctan.pdf
+2022/10/30 | 2743007 | biblio/ctan-bibdata/ctan.bib
+2022/10/30 | 3620853 | biblio/ctan-bibdata/ctan.pdf
2022/10/08 | 1415 | biblio/ctan-bibdata/README
-2022/10/29 | 4012177 | biblio/ctan-bibdata.zip
+2022/10/30 | 4012760 | biblio/ctan-bibdata.zip
2022/02/06 | 3110 | biblio/pbibtex/pbibtex-base/cpp.awk
2022/02/06 | 1009 | biblio/pbibtex/pbibtex-base/generate.sh
2022/02/06 | 22422 | biblio/pbibtex/pbibtex-base/jabbrv.bst
@@ -5414,7 +5414,7 @@
1990/10/02 | 5440 | dviware/vutex/vaxvms.hlp
1990/10/02 | 812 | dviware/vutex/vaxvms.ins
1990/10/02 | 127576 | dviware/vutex/vutex.web
-2022/10/29 | 57086 | FILES.last07days
+2022/10/30 | 61524 | FILES.last07days
2021/07/24 | 1139410 | fonts/aboensis/Aboensis.glyphs
2021/07/24 | 18907382 | fonts/aboensis/aboensis.pdf
2021/07/24 | 137860 | fonts/aboensis/Aboensis-Regular.otf
@@ -47109,7 +47109,7 @@
2013/11/03 | 2854 | fonts/gillius/enc/gls_pqq4vh.enc
2013/11/03 | 3350 | fonts/gillius/enc/gls_shb4ap.enc
2022/10/28 | 2585 | fonts/gillius/latex/gillius2.sty
-2022/10/28 | 2559 | fonts/gillius/latex/gillius.sty
+2022/10/30 | 2525 | fonts/gillius/latex/gillius.sty
2013/11/03 | 1343 | fonts/gillius/latex/LY1GilliusADFCond-LF.fd
2013/11/03 | 1227 | fonts/gillius/latex/LY1GilliusADF-LF.fd
2013/11/03 | 1480 | fonts/gillius/latex/LY1GilliusADFNoTwoCond-LF.fd
@@ -47143,7 +47143,7 @@
2013/11/03 | 39280 | fonts/gillius/opentype/GilliusADFNo2-Italic.otf
2013/11/03 | 36280 | fonts/gillius/opentype/GilliusADFNo2-Regular.otf
2013/11/03 | 36488 | fonts/gillius/opentype/GilliusADF-Regular.otf
-2022/10/28 | 1804 | fonts/gillius/README
+2022/10/30 | 1804 | fonts/gillius/README
2013/11/03 | 2112 | fonts/gillius/tfm/GilliusADF-BoldItalic-lf-ly1--base.tfm
2013/11/03 | 160 | fonts/gillius/tfm/GilliusADF-BoldItalic-lf-ly1--lcdfj.tfm
2013/11/03 | 8012 | fonts/gillius/tfm/GilliusADF-BoldItalic-lf-ly1.tfm
@@ -47416,7 +47416,7 @@
2013/11/03 | 828 | fonts/gillius/vf/GilliusADF-Regular-lf-ot1.vf
2013/11/03 | 1472 | fonts/gillius/vf/GilliusADF-Regular-lf-t1.vf
2013/11/03 | 568 | fonts/gillius/vf/GilliusADF-Regular-lf-ts1.vf
-2022/10/28 | 1692245 | fonts/gillius.zip
+2022/10/30 | 1692229 | fonts/gillius.zip
2010/09/19 | 4330104 | fonts/gnu-freefont/freefont-otf-20100919.zip
2010/09/19 | 198 | fonts/gnu-freefont/freefont-otf-20100919.zip.sig
2012/05/03 | 4487813 | fonts/gnu-freefont/freefont-otf-20120503.tar.gz
@@ -158655,11 +158655,11 @@
2010/10/10 | 82 | graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/9.table
2010/10/10 | 473 | graphics/pgf/contrib/bodegraph/README
2010/10/10 | 421558 | graphics/pgf/contrib/bodegraph.zip
-2022/07/31 | 97095 | graphics/pgf/contrib/bodeplot/bodeplot.dtx
-2022/07/31 | 1416 | graphics/pgf/contrib/bodeplot/bodeplot.ins
-2022/07/31 | 1062592 | graphics/pgf/contrib/bodeplot/bodeplot.pdf
-2022/07/31 | 3623 | graphics/pgf/contrib/bodeplot/README.md
-2022/08/01 | 775056 | graphics/pgf/contrib/bodeplot.zip
+2022/10/30 | 910334 | graphics/pgf/contrib/bodeplot/bodeplot.dtx
+2022/10/30 | 239667 | graphics/pgf/contrib/bodeplot/bodeplot.ins
+2022/10/30 | 1066728 | graphics/pgf/contrib/bodeplot/bodeplot.pdf
+2022/10/30 | 231797 | graphics/pgf/contrib/bodeplot/README.md
+2022/10/30 | 933144 | graphics/pgf/contrib/bodeplot.zip
2022/10/26 | 83144 | graphics/pgf/contrib/braids/braids_code.dtx
2022/10/26 | 456447 | graphics/pgf/contrib/braids/braids_code.pdf
2022/10/26 | 301271 | graphics/pgf/contrib/braids/braids.pdf
@@ -189542,7 +189542,7 @@
2022/10/01 | 2854553 | install/fonts/gandhi.tds.zip
2020/10/04 | 2453307 | install/fonts/garamondx.tds.zip
2010/07/30 | 245583 | install/fonts/gillcm.tds.zip
-2022/10/28 | 1721197 | install/fonts/gillius.tds.zip
+2022/10/30 | 1721181 | install/fonts/gillius.tds.zip
2022/09/12 | 2337829 | install/fonts/gofonts.tds.zip
2012/09/06 | 467812 | install/fonts/hacm.tds.zip
2019/06/10 | 1774481 | install/fonts/heuristica.tds.zip
@@ -189694,7 +189694,7 @@
2014/01/02 | 496633 | install/macros/generic/minifp.tds.zip
2012/09/20 | 369585 | install/macros/generic/plainpkg.tds.zip
2018/08/26 | 1014893 | install/macros/generic/tex-locale.tds.zip
-2020/06/30 | 1215011 | install/macros/generic/tracklang.tds.zip
+2022/10/29 | 1943892 | install/macros/generic/tracklang.tds.zip
2022/09/17 | 591247 | install/macros/generic/unicode-data.tds.zip
2022/06/11 | 4242531 | install/macros/generic/xint.tds.zip
2022/07/13 | 10946453 | install/macros/jptex/latex/jlreq.tds.zip
@@ -189730,7 +189730,7 @@
2019/01/28 | 1087181 | install/macros/latex/contrib/bezos.tds.zip
2009/07/16 | 3362 | install/macros/latex/contrib/biblatex-contrib/authoryear-icomp-tt.tds.zip
2019/12/30 | 7384611 | install/macros/latex/contrib/biblatex-contrib/biblatex-archaeology.tds.zip
-2020/11/01 | 512537 | install/macros/latex/contrib/biblatex-contrib/biblatex-caspervector.tds.zip
+2022/10/30 | 632099 | install/macros/latex/contrib/biblatex-contrib/biblatex-caspervector.tds.zip
2021/02/24 | 1516879 | install/macros/latex/contrib/biblatex-contrib/biblatex-chem.tds.zip
2016/12/06 | 1778620 | install/macros/latex/contrib/biblatex-contrib/biblatex-dw.tds.zip
2021/12/06 | 712419 | install/macros/latex/contrib/biblatex-contrib/biblatex-ieee.tds.zip
@@ -189917,7 +189917,7 @@
2019/09/23 | 318990 | install/macros/latex/contrib/perltex.tds.zip
2013/10/16 | 519904 | install/macros/latex/contrib/pfarrei.tds.zip
2014/07/10 | 183200 | install/macros/latex/contrib/pgfopts.tds.zip
-2022/05/04 | 608085 | install/macros/latex/contrib/pkuthss.tds.zip
+2022/10/30 | 518498 | install/macros/latex/contrib/pkuthss.tds.zip
2019/12/05 | 621416 | install/macros/latex/contrib/pmboxdraw.tds.zip
2014/09/10 | 1054773 | install/macros/latex/contrib/pressrelease.tds.zip
2017/07/10 | 1127276 | install/macros/latex/contrib/probsoln.tds.zip
@@ -190048,7 +190048,7 @@
2015/02/17 | 92757 | install/macros/xetex/latex/interchar.tds.zip
2021/08/19 | 464024 | install/macros/xetex/latex/mynsfc.tds.zip
2022/08/05 | 2009524 | install/macros/xetex/latex/xecjk.tds.zip
-2022/07/02 | 1295671 | install/macros/xetex/latex/xepersian.tds.zip
+2022/10/30 | 1290311 | install/macros/xetex/latex/xepersian.tds.zip
2008/06/20 | 3954 | install/macros/xetex/plain/xetexfontinfo.tds.zip
2013/01/04 | 36361 | install/support/adhocfilelist.tds.zip
2021/11/27 | 2294905 | install/support/albatross.tds.zip
@@ -198916,84 +198916,86 @@
2020/02/04 | 131 | macros/generic/tokcycle/tokcycle.sty
2021/08/25 | 18738 | macros/generic/tokcycle/tokcycle.tex
2021/08/25 | 1223986 | macros/generic/tokcycle.zip
-2020/06/30 | 4310 | macros/generic/tracklang/CHANGES
-2020/06/30 | 930 | macros/generic/tracklang/README
-2020/06/30 | 313 | macros/generic/tracklang/samples/animals/animals2-en-GB.ldf
-2020/06/30 | 249 | macros/generic/tracklang/samples/animals/animals2-english.ldf
-2020/06/30 | 310 | macros/generic/tracklang/samples/animals/animals2-en-US.ldf
-2020/06/30 | 246 | macros/generic/tracklang/samples/animals/animals2-german.ldf
-2020/06/30 | 848 | macros/generic/tracklang/samples/animals/animals2.sty
-2020/06/30 | 221 | macros/generic/tracklang/samples/animals/animals-en-GB.ldf
-2020/06/30 | 249 | macros/generic/tracklang/samples/animals/animals-english.ldf
-2020/06/30 | 221 | macros/generic/tracklang/samples/animals/animals-en-US.ldf
-2020/06/30 | 246 | macros/generic/tracklang/samples/animals/animals-german.ldf
-2020/06/30 | 784 | macros/generic/tracklang/samples/animals/animals.sty
-2020/06/30 | 13625 | macros/generic/tracklang/samples/animals/sample-animals2-de2.pdf
-2020/06/30 | 166 | macros/generic/tracklang/samples/animals/sample-animals2-de2.tex
-2020/06/30 | 13607 | macros/generic/tracklang/samples/animals/sample-animals2-de3.pdf
-2020/06/30 | 178 | macros/generic/tracklang/samples/animals/sample-animals2-de3.tex
-2020/06/30 | 3820 | macros/generic/tracklang/samples/animals/sample-animals2-de4.pdf
-2020/06/30 | 194 | macros/generic/tracklang/samples/animals/sample-animals2-de4.tex
-2020/06/30 | 13625 | macros/generic/tracklang/samples/animals/sample-animals2-de.pdf
-2020/06/30 | 173 | macros/generic/tracklang/samples/animals/sample-animals2-de.tex
-2020/06/30 | 12656 | macros/generic/tracklang/samples/animals/sample-animals2.pdf
-2020/06/30 | 3560 | macros/generic/tracklang/samples/animals/sample-animals2-poly.pdf
-2020/06/30 | 215 | macros/generic/tracklang/samples/animals/sample-animals2-poly.tex
-2020/06/30 | 271 | macros/generic/tracklang/samples/animals/sample-animals2.tex
-2020/06/30 | 14855 | macros/generic/tracklang/samples/animals/sample-animals-babel.pdf
-2020/06/30 | 327 | macros/generic/tracklang/samples/animals/sample-animals-babel.tex
-2020/06/30 | 13625 | macros/generic/tracklang/samples/animals/sample-animals-de.pdf
-2020/06/30 | 3820 | macros/generic/tracklang/samples/animals/sample-animals-de-poly.pdf
-2020/06/30 | 193 | macros/generic/tracklang/samples/animals/sample-animals-de-poly.tex
-2020/06/30 | 172 | macros/generic/tracklang/samples/animals/sample-animals-de.tex
-2020/06/30 | 12656 | macros/generic/tracklang/samples/animals/sample-animals.pdf
-2020/06/30 | 3556 | macros/generic/tracklang/samples/animals/sample-animals-poly.pdf
-2020/06/30 | 214 | macros/generic/tracklang/samples/animals/sample-animals-poly.tex
-2020/06/30 | 7547 | macros/generic/tracklang/samples/animals/sample-animals-sr-poly.pdf
-2020/06/30 | 223 | macros/generic/tracklang/samples/animals/sample-animals.tex
-2020/06/30 | 1124 | macros/generic/tracklang/samples/regions/regions2.sty
-2020/06/30 | 221 | macros/generic/tracklang/samples/regions/regions-BE.ldf
-2020/06/30 | 221 | macros/generic/tracklang/samples/regions/regions-CA.ldf
-2020/06/30 | 165 | macros/generic/tracklang/samples/regions/regions-dutch.ldf
-2020/06/30 | 164 | macros/generic/tracklang/samples/regions/regions-english.ldf
-2020/06/30 | 164 | macros/generic/tracklang/samples/regions/regions-french.ldf
-2020/06/30 | 221 | macros/generic/tracklang/samples/regions/regions-GB.ldf
-2020/06/30 | 171 | macros/generic/tracklang/samples/regions/regions-german.ldf
-2020/06/30 | 226 | macros/generic/tracklang/samples/regions/regions-IM.ldf
-2020/06/30 | 153 | macros/generic/tracklang/samples/regions/regions-italian.ldf
-2020/06/30 | 193 | macros/generic/tracklang/samples/regions/regions-manx.ldf
-2020/06/30 | 941 | macros/generic/tracklang/samples/regions/regions.sty
-2020/06/30 | 221 | macros/generic/tracklang/samples/regions/regions-US.ldf
-2020/06/30 | 21945 | macros/generic/tracklang/samples/regions/sample-regions2-manx.pdf
-2020/06/30 | 158 | macros/generic/tracklang/samples/regions/sample-regions2-manx.tex
-2020/06/30 | 25852 | macros/generic/tracklang/samples/regions/sample-regions2-map2.pdf
-2020/06/30 | 562 | macros/generic/tracklang/samples/regions/sample-regions2-map2.tex
-2020/06/30 | 24924 | macros/generic/tracklang/samples/regions/sample-regions2-map3.pdf
-2020/06/30 | 376 | macros/generic/tracklang/samples/regions/sample-regions2-map3.tex
-2020/06/30 | 26000 | macros/generic/tracklang/samples/regions/sample-regions2-map.pdf
-2020/06/30 | 630 | macros/generic/tracklang/samples/regions/sample-regions2-map.tex
-2020/06/30 | 25468 | macros/generic/tracklang/samples/regions/sample-regions2-nomap.pdf
-2020/06/30 | 359 | macros/generic/tracklang/samples/regions/sample-regions2-nomap.tex
-2020/06/30 | 14716 | macros/generic/tracklang/samples/regions/sample-regions2.pdf
-2020/06/30 | 186 | macros/generic/tracklang/samples/regions/sample-regions2.tex
-2020/06/30 | 13161 | macros/generic/tracklang/samples/regions/sample-regions.pdf
-2020/06/30 | 257 | macros/generic/tracklang/samples/regions/sample-regions.tex
-2020/06/30 | 19802 | macros/generic/tracklang/samples/sample-tracklang2.pdf
-2020/06/30 | 1454 | macros/generic/tracklang/samples/sample-tracklang2.tex
-2020/06/30 | 19814 | macros/generic/tracklang/samples/sample-tracklang3.pdf
-2020/06/30 | 1459 | macros/generic/tracklang/samples/sample-tracklang3.tex
-2020/06/30 | 6202 | macros/generic/tracklang/samples/sample-tracklang4.pdf
-2020/06/30 | 781 | macros/generic/tracklang/samples/sample-tracklang4.tex
-2020/06/30 | 16914 | macros/generic/tracklang/samples/sample-tracklang5.pdf
-2020/06/30 | 689 | macros/generic/tracklang/samples/sample-tracklang5.tex
-2020/06/30 | 19897 | macros/generic/tracklang/samples/sample-tracklang6.pdf
-2020/06/30 | 1041 | macros/generic/tracklang/samples/sample-tracklang6.tex
-2020/06/30 | 19552 | macros/generic/tracklang/samples/sample-tracklang.pdf
-2020/06/30 | 1454 | macros/generic/tracklang/samples/sample-tracklang.tex
-2020/06/30 | 434306 | macros/generic/tracklang/tracklang.dtx
-2020/06/30 | 1553 | macros/generic/tracklang/tracklang.ins
-2020/06/30 | 742279 | macros/generic/tracklang/tracklang.pdf
-2020/06/30 | 1179750 | macros/generic/tracklang.zip
+2022/10/29 | 4436 | macros/generic/tracklang/CHANGES
+2022/10/29 | 930 | macros/generic/tracklang/README
+2022/10/29 | 313 | macros/generic/tracklang/samples/animals/animals2-en-GB.ldf
+2022/10/29 | 249 | macros/generic/tracklang/samples/animals/animals2-english.ldf
+2022/10/29 | 310 | macros/generic/tracklang/samples/animals/animals2-en-US.ldf
+2022/10/29 | 246 | macros/generic/tracklang/samples/animals/animals2-german.ldf
+2022/10/29 | 848 | macros/generic/tracklang/samples/animals/animals2.sty
+2022/10/29 | 221 | macros/generic/tracklang/samples/animals/animals-en-GB.ldf
+2022/10/29 | 249 | macros/generic/tracklang/samples/animals/animals-english.ldf
+2022/10/29 | 221 | macros/generic/tracklang/samples/animals/animals-en-US.ldf
+2022/10/29 | 246 | macros/generic/tracklang/samples/animals/animals-german.ldf
+2022/10/29 | 784 | macros/generic/tracklang/samples/animals/animals.sty
+2022/10/29 | 14463 | macros/generic/tracklang/samples/animals/sample-animals2-de2.pdf
+2022/10/29 | 166 | macros/generic/tracklang/samples/animals/sample-animals2-de2.tex
+2022/10/29 | 14444 | macros/generic/tracklang/samples/animals/sample-animals2-de3.pdf
+2022/10/29 | 178 | macros/generic/tracklang/samples/animals/sample-animals2-de3.tex
+2022/10/29 | 3823 | macros/generic/tracklang/samples/animals/sample-animals2-de4.pdf
+2022/10/29 | 194 | macros/generic/tracklang/samples/animals/sample-animals2-de4.tex
+2022/10/29 | 14463 | macros/generic/tracklang/samples/animals/sample-animals2-de.pdf
+2022/10/29 | 173 | macros/generic/tracklang/samples/animals/sample-animals2-de.tex
+2022/10/29 | 13489 | macros/generic/tracklang/samples/animals/sample-animals2.pdf
+2022/10/29 | 3559 | macros/generic/tracklang/samples/animals/sample-animals2-poly.pdf
+2022/10/29 | 215 | macros/generic/tracklang/samples/animals/sample-animals2-poly.tex
+2022/10/29 | 271 | macros/generic/tracklang/samples/animals/sample-animals2.tex
+2022/10/29 | 15690 | macros/generic/tracklang/samples/animals/sample-animals-babel.pdf
+2022/10/29 | 327 | macros/generic/tracklang/samples/animals/sample-animals-babel.tex
+2022/10/29 | 14463 | macros/generic/tracklang/samples/animals/sample-animals-de.pdf
+2022/10/29 | 3823 | macros/generic/tracklang/samples/animals/sample-animals-de-poly.pdf
+2022/10/29 | 232 | macros/generic/tracklang/samples/animals/sample-animals-de-poly.tex
+2022/10/29 | 172 | macros/generic/tracklang/samples/animals/sample-animals-de.tex
+2022/10/29 | 13489 | macros/generic/tracklang/samples/animals/sample-animals.pdf
+2022/10/29 | 3560 | macros/generic/tracklang/samples/animals/sample-animals-poly.pdf
+2022/10/29 | 214 | macros/generic/tracklang/samples/animals/sample-animals-poly.tex
+2022/10/29 | 223 | macros/generic/tracklang/samples/animals/sample-animals.tex
+2022/10/29 | 1124 | macros/generic/tracklang/samples/regions/regions2.sty
+2022/10/29 | 221 | macros/generic/tracklang/samples/regions/regions-BE.ldf
+2022/10/29 | 221 | macros/generic/tracklang/samples/regions/regions-CA.ldf
+2022/10/29 | 165 | macros/generic/tracklang/samples/regions/regions-dutch.ldf
+2022/10/29 | 164 | macros/generic/tracklang/samples/regions/regions-english.ldf
+2022/10/29 | 164 | macros/generic/tracklang/samples/regions/regions-french.ldf
+2022/10/29 | 221 | macros/generic/tracklang/samples/regions/regions-GB.ldf
+2022/10/29 | 171 | macros/generic/tracklang/samples/regions/regions-german.ldf
+2022/10/29 | 226 | macros/generic/tracklang/samples/regions/regions-IM.ldf
+2022/10/29 | 153 | macros/generic/tracklang/samples/regions/regions-italian.ldf
+2022/10/29 | 193 | macros/generic/tracklang/samples/regions/regions-manx.ldf
+2022/10/29 | 941 | macros/generic/tracklang/samples/regions/regions.sty
+2022/10/29 | 221 | macros/generic/tracklang/samples/regions/regions-US.ldf
+2022/10/29 | 23587 | macros/generic/tracklang/samples/regions/sample-regions2-manx.pdf
+2022/10/29 | 158 | macros/generic/tracklang/samples/regions/sample-regions2-manx.tex
+2022/10/29 | 27515 | macros/generic/tracklang/samples/regions/sample-regions2-map2.pdf
+2022/10/29 | 562 | macros/generic/tracklang/samples/regions/sample-regions2-map2.tex
+2022/10/29 | 26590 | macros/generic/tracklang/samples/regions/sample-regions2-map3.pdf
+2022/10/29 | 376 | macros/generic/tracklang/samples/regions/sample-regions2-map3.tex
+2022/10/29 | 27666 | macros/generic/tracklang/samples/regions/sample-regions2-map.pdf
+2022/10/29 | 630 | macros/generic/tracklang/samples/regions/sample-regions2-map.tex
+2022/10/29 | 27134 | macros/generic/tracklang/samples/regions/sample-regions2-nomap.pdf
+2022/10/29 | 359 | macros/generic/tracklang/samples/regions/sample-regions2-nomap.tex
+2022/10/29 | 15551 | macros/generic/tracklang/samples/regions/sample-regions2.pdf
+2022/10/29 | 186 | macros/generic/tracklang/samples/regions/sample-regions2.tex
+2022/10/29 | 13996 | macros/generic/tracklang/samples/regions/sample-regions.pdf
+2022/10/29 | 257 | macros/generic/tracklang/samples/regions/sample-regions.tex
+2022/10/29 | 20747 | macros/generic/tracklang/samples/sample-tracklang2.pdf
+2022/10/29 | 1454 | macros/generic/tracklang/samples/sample-tracklang2.tex
+2022/10/29 | 20758 | macros/generic/tracklang/samples/sample-tracklang3.pdf
+2022/10/29 | 1459 | macros/generic/tracklang/samples/sample-tracklang3.tex
+2022/10/29 | 6869 | macros/generic/tracklang/samples/sample-tracklang4.pdf
+2022/10/29 | 781 | macros/generic/tracklang/samples/sample-tracklang4.tex
+2022/10/29 | 17857 | macros/generic/tracklang/samples/sample-tracklang5.pdf
+2022/10/29 | 689 | macros/generic/tracklang/samples/sample-tracklang5.tex
+2022/10/29 | 19898 | macros/generic/tracklang/samples/sample-tracklang6.pdf
+2022/10/29 | 1041 | macros/generic/tracklang/samples/sample-tracklang6.tex
+2022/10/29 | 20388 | macros/generic/tracklang/samples/sample-tracklang.pdf
+2022/10/29 | 1454 | macros/generic/tracklang/samples/sample-tracklang.tex
+2022/10/29 | 629107 | macros/generic/tracklang/tracklang-code.pdf
+2022/10/29 | 310371 | macros/generic/tracklang/tracklang.dtx
+2022/10/29 | 1554 | macros/generic/tracklang/tracklang.ins
+2022/10/29 | 1023122 | macros/generic/tracklang/tracklang-manual.html
+2022/10/29 | 764697 | macros/generic/tracklang/tracklang-manual.pdf
+2022/10/29 | 210917 | macros/generic/tracklang/tracklang-manual.tex
+2022/10/30 | 1908612 | macros/generic/tracklang.zip
2017/01/21 | 537 | macros/generic/trigonometry/README.txt
1991/10/06 | 5675 | macros/generic/trigonometry/trigonometry.tex
2017/01/21 | 2844 | macros/generic/trigonometry.zip
@@ -209331,22 +209333,22 @@
2012/05/21 | 106326 | macros/latex/contrib/biblatex-contrib/biblatex-bwl/doc/bwl-FU.pdf
2012/05/21 | 766 | macros/latex/contrib/biblatex-contrib/biblatex-bwl/doc/bwl-FU.tex
2012/05/21 | 115659 | macros/latex/contrib/biblatex-contrib/biblatex-bwl.zip
-2020/11/01 | 172785 | macros/latex/contrib/biblatex-contrib/biblatex-caspervector/doc/caspervector-ay.pdf
-2020/11/01 | 2272 | macros/latex/contrib/biblatex-contrib/biblatex-caspervector/doc/caspervector-ay.tex
-2020/11/01 | 24633 | macros/latex/contrib/biblatex-contrib/biblatex-caspervector/doc/caspervector.bib
-2020/11/01 | 314272 | macros/latex/contrib/biblatex-contrib/biblatex-caspervector/doc/caspervector.pdf
-2020/11/01 | 23876 | macros/latex/contrib/biblatex-contrib/biblatex-caspervector/doc/caspervector.tex
-2020/11/01 | 7778 | macros/latex/contrib/biblatex-contrib/biblatex-caspervector/doc/ChangeLog.txt
-2020/11/01 | 227 | macros/latex/contrib/biblatex-contrib/biblatex-caspervector/doc/latexmkrc
-2020/11/01 | 532 | macros/latex/contrib/biblatex-contrib/biblatex-caspervector/README.txt
-2020/11/01 | 14527 | macros/latex/contrib/biblatex-contrib/biblatex-caspervector/tex/blx-caspervector-base.def
-2020/11/01 | 1500 | macros/latex/contrib/biblatex-contrib/biblatex-caspervector/tex/blx-caspervector-gbk.def
-2020/11/01 | 1531 | macros/latex/contrib/biblatex-contrib/biblatex-caspervector/tex/blx-caspervector-utf8.def
-2020/11/01 | 2349 | macros/latex/contrib/biblatex-contrib/biblatex-caspervector/tex/caspervector-ay.bbx
-2020/11/01 | 1119 | macros/latex/contrib/biblatex-contrib/biblatex-caspervector/tex/caspervector-ay.cbx
-2020/11/01 | 1061 | macros/latex/contrib/biblatex-contrib/biblatex-caspervector/tex/caspervector.bbx
-2020/11/01 | 1664 | macros/latex/contrib/biblatex-contrib/biblatex-caspervector/tex/caspervector.cbx
-2020/11/02 | 510993 | macros/latex/contrib/biblatex-contrib/biblatex-caspervector.zip
+2022/10/30 | 212575 | macros/latex/contrib/biblatex-contrib/biblatex-caspervector/doc/caspervector-ay.pdf
+2022/10/30 | 2272 | macros/latex/contrib/biblatex-contrib/biblatex-caspervector/doc/caspervector-ay.tex
+2022/10/30 | 24633 | macros/latex/contrib/biblatex-contrib/biblatex-caspervector/doc/caspervector.bib
+2022/10/30 | 393884 | macros/latex/contrib/biblatex-contrib/biblatex-caspervector/doc/caspervector.pdf
+2022/10/30 | 23969 | macros/latex/contrib/biblatex-contrib/biblatex-caspervector/doc/caspervector.tex
+2022/10/30 | 7844 | macros/latex/contrib/biblatex-contrib/biblatex-caspervector/doc/ChangeLog.txt
+2022/10/30 | 227 | macros/latex/contrib/biblatex-contrib/biblatex-caspervector/doc/latexmkrc
+2022/10/30 | 532 | macros/latex/contrib/biblatex-contrib/biblatex-caspervector/README.txt
+2022/10/30 | 14902 | macros/latex/contrib/biblatex-contrib/biblatex-caspervector/tex/blx-caspervector-base.def
+2022/10/30 | 1500 | macros/latex/contrib/biblatex-contrib/biblatex-caspervector/tex/blx-caspervector-gbk.def
+2022/10/30 | 1531 | macros/latex/contrib/biblatex-contrib/biblatex-caspervector/tex/blx-caspervector-utf8.def
+2022/10/30 | 2349 | macros/latex/contrib/biblatex-contrib/biblatex-caspervector/tex/caspervector-ay.bbx
+2022/10/30 | 1119 | macros/latex/contrib/biblatex-contrib/biblatex-caspervector/tex/caspervector-ay.cbx
+2022/10/30 | 1061 | macros/latex/contrib/biblatex-contrib/biblatex-caspervector/tex/caspervector.bbx
+2022/10/30 | 1664 | macros/latex/contrib/biblatex-contrib/biblatex-caspervector/tex/caspervector.cbx
+2022/10/30 | 630555 | macros/latex/contrib/biblatex-contrib/biblatex-caspervector.zip
2021/02/24 | 291091 | macros/latex/contrib/biblatex-contrib/biblatex-chem/biblatex-chem-acs.pdf
2021/02/24 | 2485 | macros/latex/contrib/biblatex-contrib/biblatex-chem/biblatex-chem-acs.tex
2021/02/24 | 275052 | macros/latex/contrib/biblatex-contrib/biblatex-chem/biblatex-chem-angew.pdf
@@ -215591,15 +215593,15 @@
2008/06/01 | 200380 | macros/latex/contrib/envlab/envlab.pdf
1997/07/16 | 3824 | macros/latex/contrib/envlab/readme.v12
2008/06/02 | 372141 | macros/latex/contrib/envlab.zip
-2022/10/29 | 47687 | macros/latex/contrib/eolang/cactus.pdf
-2022/10/29 | 146 | macros/latex/contrib/eolang/DEPENDS.txt
-2022/10/29 | 641 | macros/latex/contrib/eolang/eolang.bib
-2022/10/29 | 25212 | macros/latex/contrib/eolang/eolang.dtx
-2022/10/29 | 2628 | macros/latex/contrib/eolang/eolang.ins
-2022/10/29 | 969068 | macros/latex/contrib/eolang/eolang.pdf
-2022/10/29 | 1083 | macros/latex/contrib/eolang/LICENSE.txt
-2022/10/29 | 1352 | macros/latex/contrib/eolang/README.md
-2022/10/29 | 996929 | macros/latex/contrib/eolang.zip
+2022/10/30 | 47687 | macros/latex/contrib/eolang/cactus.pdf
+2022/10/30 | 159 | macros/latex/contrib/eolang/DEPENDS.txt
+2022/10/30 | 641 | macros/latex/contrib/eolang/eolang.bib
+2022/10/30 | 27563 | macros/latex/contrib/eolang/eolang.dtx
+2022/10/30 | 2628 | macros/latex/contrib/eolang/eolang.ins
+2022/10/30 | 1036825 | macros/latex/contrib/eolang/eolang.pdf
+2022/10/30 | 1083 | macros/latex/contrib/eolang/LICENSE.txt
+2022/10/30 | 1352 | macros/latex/contrib/eolang/README.md
+2022/10/30 | 1063401 | macros/latex/contrib/eolang.zip
1991/01/31 | 1291 | macros/latex/contrib/epic/epic.readme
2009/07/09 | 25846 | macros/latex/contrib/epic/epic.sty
1991/01/31 | 2444 | macros/latex/contrib/epic/misc.sty
@@ -216876,13 +216878,13 @@
2013/05/03 | 374250 | macros/latex/contrib/feynmp-auto/feynmp-auto.pdf
2013/05/03 | 1652 | macros/latex/contrib/feynmp-auto/README
2013/05/03 | 378807 | macros/latex/contrib/feynmp-auto.zip
-2022/10/03 | 62 | macros/latex/contrib/ffcode/DEPENDS.txt
-2022/10/03 | 9582 | macros/latex/contrib/ffcode/ffcode.dtx
-2022/10/03 | 2644 | macros/latex/contrib/ffcode/ffcode.ins
-2022/10/03 | 395644 | macros/latex/contrib/ffcode/ffcode.pdf
-2022/10/03 | 1083 | macros/latex/contrib/ffcode/LICENSE.txt
-2022/10/03 | 1351 | macros/latex/contrib/ffcode/README.md
-2022/10/03 | 398411 | macros/latex/contrib/ffcode.zip
+2022/10/30 | 40 | macros/latex/contrib/ffcode/DEPENDS.txt
+2022/10/30 | 9122 | macros/latex/contrib/ffcode/ffcode.dtx
+2022/10/30 | 2628 | macros/latex/contrib/ffcode/ffcode.ins
+2022/10/30 | 487461 | macros/latex/contrib/ffcode/ffcode.pdf
+2022/10/30 | 1083 | macros/latex/contrib/ffcode/LICENSE.txt
+2022/10/30 | 1376 | macros/latex/contrib/ffcode/README.md
+2022/10/30 | 488622 | macros/latex/contrib/ffcode.zip
2015/10/21 | 398 | macros/latex/contrib/ffslides/bground-example.txt
2015/11/19 | 15305 | macros/latex/contrib/ffslides/ffslides.cls
2015/11/19 | 2747893 | macros/latex/contrib/ffslides/ffslides-doc.pdf
@@ -227717,48 +227719,48 @@
2018/04/29 | 1768 | macros/latex/contrib/pkgloader/pkgloader-true.sty
2018/04/29 | 1388 | macros/latex/contrib/pkgloader/README
2018/04/29 | 488889 | macros/latex/contrib/pkgloader.zip
-2022/05/04 | 288 | macros/latex/contrib/pkuthss/doc/example/chap/abs.tex
-2022/05/04 | 133 | macros/latex/contrib/pkuthss/doc/example/chap/ack.tex
-2022/05/04 | 138 | macros/latex/contrib/pkuthss/doc/example/chap/chap1.tex
-2022/05/04 | 133 | macros/latex/contrib/pkuthss/doc/example/chap/chap2.tex
-2022/05/04 | 147 | macros/latex/contrib/pkuthss/doc/example/chap/chap3.tex
-2022/05/04 | 2349 | macros/latex/contrib/pkuthss/doc/example/chap/copy.tex
-2022/05/04 | 133 | macros/latex/contrib/pkuthss/doc/example/chap/encl1.tex
-2022/05/04 | 3775 | macros/latex/contrib/pkuthss/doc/example/chap/origin.tex
-2022/05/04 | 2224 | macros/latex/contrib/pkuthss/doc/example/ctex-fontset-pkuthss.def
-2022/05/04 | 115 | macros/latex/contrib/pkuthss/doc/example/ctexopts.cfg
-2022/05/04 | 461 | macros/latex/contrib/pkuthss/doc/example/latexmkrc
-2022/05/04 | 364 | macros/latex/contrib/pkuthss/doc/example/Make.bat
-2022/05/04 | 103792 | macros/latex/contrib/pkuthss/doc/example.pdf
-2022/05/04 | 1434 | macros/latex/contrib/pkuthss/doc/example/spine.tex
-2022/05/04 | 294 | macros/latex/contrib/pkuthss/doc/example/thesis.bib
-2022/05/04 | 5446 | macros/latex/contrib/pkuthss/doc/example/thesis.tex
-2022/05/04 | 439556 | macros/latex/contrib/pkuthss/doc/pkuthss.pdf
-2022/05/04 | 14997 | macros/latex/contrib/pkuthss/doc/readme/ChangeLog.txt
-2022/05/04 | 3035 | macros/latex/contrib/pkuthss/doc/readme/ChangeLog-upto-1.3.txt
-2022/05/04 | 1219 | macros/latex/contrib/pkuthss/doc/readme/chap/pkuthss-abs.tex
-2022/05/04 | 1994 | macros/latex/contrib/pkuthss/doc/readme/chap/pkuthss-ack.tex
-2022/05/04 | 7065 | macros/latex/contrib/pkuthss/doc/readme/chap/pkuthss-chap1.tex
-2022/05/04 | 16545 | macros/latex/contrib/pkuthss/doc/readme/chap/pkuthss-chap2.tex
-2022/05/04 | 6275 | macros/latex/contrib/pkuthss/doc/readme/chap/pkuthss-chap3.tex
-2022/05/04 | 1143 | macros/latex/contrib/pkuthss/doc/readme/chap/pkuthss-concl.tex
-2022/05/04 | 1569 | macros/latex/contrib/pkuthss/doc/readme/chap/pkuthss-copy.tex
-2022/05/04 | 1170 | macros/latex/contrib/pkuthss/doc/readme/chap/pkuthss-encl1.tex
-2022/05/04 | 2705 | macros/latex/contrib/pkuthss/doc/readme/chap/pkuthss-intro.tex
-2022/05/04 | 237 | macros/latex/contrib/pkuthss/doc/readme/latexmkrc
-2022/05/04 | 8040 | macros/latex/contrib/pkuthss/doc/readme/pkuthss.bib
-2022/05/04 | 10371 | macros/latex/contrib/pkuthss/doc/readme/pkuthss-english.patch
-2022/05/04 | 3304 | macros/latex/contrib/pkuthss/doc/readme/pkuthss.tex
-2022/05/04 | 684 | macros/latex/contrib/pkuthss/README.txt
-2022/05/04 | 3957 | macros/latex/contrib/pkuthss/tex/pkulogo.eps
-2022/05/04 | 3530 | macros/latex/contrib/pkuthss/tex/pkulogo.pdf
-2022/05/04 | 16832 | macros/latex/contrib/pkuthss/tex/pkuthss.cls
-2022/05/04 | 1575 | macros/latex/contrib/pkuthss/tex/pkuthss.def
-2022/05/04 | 1593 | macros/latex/contrib/pkuthss/tex/pkuthss-gbk.def
-2022/05/04 | 1682 | macros/latex/contrib/pkuthss/tex/pkuthss-utf8.def
-2022/05/04 | 8139 | macros/latex/contrib/pkuthss/tex/pkuword.eps
-2022/05/04 | 6280 | macros/latex/contrib/pkuthss/tex/pkuword.pdf
-2022/05/04 | 604529 | macros/latex/contrib/pkuthss.zip
+2022/10/30 | 288 | macros/latex/contrib/pkuthss/doc/example/chap/abs.tex
+2022/10/30 | 133 | macros/latex/contrib/pkuthss/doc/example/chap/ack.tex
+2022/10/30 | 138 | macros/latex/contrib/pkuthss/doc/example/chap/chap1.tex
+2022/10/30 | 133 | macros/latex/contrib/pkuthss/doc/example/chap/chap2.tex
+2022/10/30 | 147 | macros/latex/contrib/pkuthss/doc/example/chap/chap3.tex
+2022/10/30 | 2349 | macros/latex/contrib/pkuthss/doc/example/chap/copy.tex
+2022/10/30 | 133 | macros/latex/contrib/pkuthss/doc/example/chap/encl1.tex
+2022/10/30 | 3775 | macros/latex/contrib/pkuthss/doc/example/chap/origin.tex
+2022/10/30 | 2224 | macros/latex/contrib/pkuthss/doc/example/ctex-fontset-pkuthss.def
+2022/10/30 | 115 | macros/latex/contrib/pkuthss/doc/example/ctexopts.cfg
+2022/10/30 | 461 | macros/latex/contrib/pkuthss/doc/example/latexmkrc
+2022/10/30 | 364 | macros/latex/contrib/pkuthss/doc/example/Make.bat
+2022/10/30 | 103719 | macros/latex/contrib/pkuthss/doc/example.pdf
+2022/10/30 | 1489 | macros/latex/contrib/pkuthss/doc/example/spine.tex
+2022/10/30 | 294 | macros/latex/contrib/pkuthss/doc/example/thesis.bib
+2022/10/30 | 5463 | macros/latex/contrib/pkuthss/doc/example/thesis.tex
+2022/10/30 | 348380 | macros/latex/contrib/pkuthss/doc/pkuthss.pdf
+2022/10/30 | 15217 | macros/latex/contrib/pkuthss/doc/readme/ChangeLog.txt
+2022/10/30 | 3035 | macros/latex/contrib/pkuthss/doc/readme/ChangeLog-upto-1.3.txt
+2022/10/30 | 1219 | macros/latex/contrib/pkuthss/doc/readme/chap/pkuthss-abs.tex
+2022/10/30 | 1994 | macros/latex/contrib/pkuthss/doc/readme/chap/pkuthss-ack.tex
+2022/10/30 | 7065 | macros/latex/contrib/pkuthss/doc/readme/chap/pkuthss-chap1.tex
+2022/10/30 | 16627 | macros/latex/contrib/pkuthss/doc/readme/chap/pkuthss-chap2.tex
+2022/10/30 | 5804 | macros/latex/contrib/pkuthss/doc/readme/chap/pkuthss-chap3.tex
+2022/10/30 | 1143 | macros/latex/contrib/pkuthss/doc/readme/chap/pkuthss-concl.tex
+2022/10/30 | 1569 | macros/latex/contrib/pkuthss/doc/readme/chap/pkuthss-copy.tex
+2022/10/30 | 1170 | macros/latex/contrib/pkuthss/doc/readme/chap/pkuthss-encl1.tex
+2022/10/30 | 2713 | macros/latex/contrib/pkuthss/doc/readme/chap/pkuthss-intro.tex
+2022/10/30 | 237 | macros/latex/contrib/pkuthss/doc/readme/latexmkrc
+2022/10/30 | 8078 | macros/latex/contrib/pkuthss/doc/readme/pkuthss.bib
+2022/10/30 | 10371 | macros/latex/contrib/pkuthss/doc/readme/pkuthss-english.patch
+2022/10/30 | 3305 | macros/latex/contrib/pkuthss/doc/readme/pkuthss.tex
+2022/10/30 | 684 | macros/latex/contrib/pkuthss/README.txt
+2022/10/30 | 3957 | macros/latex/contrib/pkuthss/tex/pkulogo.eps
+2022/10/30 | 3530 | macros/latex/contrib/pkuthss/tex/pkulogo.pdf
+2022/10/30 | 16634 | macros/latex/contrib/pkuthss/tex/pkuthss.cls
+2022/10/30 | 1575 | macros/latex/contrib/pkuthss/tex/pkuthss.def
+2022/10/30 | 1593 | macros/latex/contrib/pkuthss/tex/pkuthss-gbk.def
+2022/10/30 | 1682 | macros/latex/contrib/pkuthss/tex/pkuthss-utf8.def
+2022/10/30 | 8139 | macros/latex/contrib/pkuthss/tex/pkuword.eps
+2022/10/30 | 6280 | macros/latex/contrib/pkuthss/tex/pkuword.pdf
+2022/10/30 | 514814 | macros/latex/contrib/pkuthss.zip
2010/09/19 | 255447 | macros/latex/contrib/placeins/placeins-doc.pdf
2010/09/19 | 2914 | macros/latex/contrib/placeins/placeins-doc.tex
2005/04/19 | 4087 | macros/latex/contrib/placeins/placeins.sty
@@ -239325,6 +239327,18 @@
2022/07/11 | 48647 | macros/luatex/latex/luamesh/scripts/luamesh-tex.lua
2022/07/11 | 40229 | macros/luatex/latex/luamesh/tex/luamesh.sty
2022/07/11 | 274586 | macros/luatex/latex/luamesh.zip
+2022/10/30 | 256 | macros/luatex/latex/luaoptions/Contributors.md
+2022/10/30 | 58 | macros/luatex/latex/luaoptions/latexmkrc
+2022/10/30 | 1099 | macros/luatex/latex/luaoptions/LICENSE
+2022/10/30 | 1039 | macros/luatex/latex/luaoptions/luaoptionsbase.cls
+2022/10/30 | 6378 | macros/luatex/latex/luaoptions/luaoptions-lib.lua
+2022/10/30 | 10161 | macros/luatex/latex/luaoptions/luaoptions.lua
+2022/10/30 | 984 | macros/luatex/latex/luaoptions/luaoptionsmanual.cls
+2022/10/30 | 28593 | macros/luatex/latex/luaoptions/luaoptions.pdf
+2022/10/30 | 827 | macros/luatex/latex/luaoptions/luaoptions.sty
+2022/10/30 | 8322 | macros/luatex/latex/luaoptions/luaoptions.tex
+2022/10/30 | 881 | macros/luatex/latex/luaoptions/README.md
+2022/10/30 | 39904 | macros/luatex/latex/luaoptions.zip
2021/05/08 | 1069 | macros/luatex/latex/lua-physical/LICENSE
2021/05/08 | 52565 | macros/luatex/latex/lua-physical/lua-physical_example.pdf
2021/05/08 | 3427 | macros/luatex/latex/lua-physical/lua-physical_example.tex
@@ -247571,13 +247585,13 @@
2022/09/03 | 19106 | macros/unicodetex/latex/beaulivre/LICENSE
2022/09/03 | 1458 | macros/unicodetex/latex/beaulivre/README.md
2022/09/03 | 555182 | macros/unicodetex/latex/beaulivre.zip
-2022/10/24 | 192811 | macros/unicodetex/latex/bithesis/bithesis.dtx
-2022/10/24 | 3720 | macros/unicodetex/latex/bithesis/bithesis.ins
-2022/10/24 | 1033346 | macros/unicodetex/latex/bithesis/bithesis.pdf
-2022/10/24 | 2332 | macros/unicodetex/latex/bithesis/contributing.md
-2022/10/24 | 2643 | macros/unicodetex/latex/bithesis/contributing-zh.md
-2022/10/24 | 1993 | macros/unicodetex/latex/bithesis/README.md
-2022/10/24 | 1061972 | macros/unicodetex/latex/bithesis.zip
+2022/10/30 | 193944 | macros/unicodetex/latex/bithesis/bithesis.dtx
+2022/10/30 | 3720 | macros/unicodetex/latex/bithesis/bithesis.ins
+2022/10/30 | 1043619 | macros/unicodetex/latex/bithesis/bithesis.pdf
+2022/10/30 | 2332 | macros/unicodetex/latex/bithesis/contributing.md
+2022/10/30 | 2643 | macros/unicodetex/latex/bithesis/contributing-zh.md
+2022/10/30 | 1993 | macros/unicodetex/latex/bithesis/README.md
+2022/10/30 | 1073024 | macros/unicodetex/latex/bithesis.zip
2022/02/26 | 128251 | macros/unicodetex/latex/book-of-common-prayer/book-of-common-prayer.pdf
2022/02/26 | 6771 | macros/unicodetex/latex/book-of-common-prayer/book-of-common-prayer.sty
2022/02/26 | 17327 | macros/unicodetex/latex/book-of-common-prayer/book-of-common-prayer.tex
@@ -248980,9 +248994,9 @@
2014/12/05 | 4915 | macros/xetex/latex/xeindex/xeindex.sty
2014/12/05 | 19009 | macros/xetex/latex/xeindex/xeindex.tex
2014/12/05 | 79942 | macros/xetex/latex/xeindex.zip
-2022/07/01 | 15976 | macros/xetex/latex/xepersian/dkun-0.3.py
-2022/07/01 | 15867 | macros/xetex/latex/xepersian/dkun-0.4.py
-2022/07/01 | 38725 | macros/xetex/latex/xepersian/ftxe-0.12.py
+2022/10/30 | 15976 | macros/xetex/latex/xepersian/dkun-0.3.py
+2022/10/30 | 15867 | macros/xetex/latex/xepersian/dkun-0.4.py
+2022/10/30 | 38725 | macros/xetex/latex/xepersian/ftxe-0.12.py
2020/09/04 | 13130 | macros/xetex/latex/xepersian-hm/doc-ligature-xepersian-hm.pdf
2020/09/04 | 10104 | macros/xetex/latex/xepersian-hm/doc-ligature-xep.pdf
2020/09/04 | 63436 | macros/xetex/latex/xepersian-hm/doc-samples-glyph.pdf
@@ -249004,26 +249018,26 @@
2020/09/04 | 106056 | macros/xetex/latex/xepersian-hm/xepersian-XB.pdf
2020/09/04 | 2945 | macros/xetex/latex/xepersian-hm/xepersian-XB.tex
2020/09/04 | 2217805 | macros/xetex/latex/xepersian-hm.zip
-2022/07/01 | 18304 | macros/xetex/latex/xepersian/img/ireland.jpg
-2022/07/01 | 13088 | macros/xetex/latex/xepersian/img/weather/clouds.jpg
-2022/07/01 | 14616 | macros/xetex/latex/xepersian/img/weather/rain.jpg
-2022/07/01 | 10896 | macros/xetex/latex/xepersian/img/weather/sun.jpg
-2022/07/02 | 1390 | macros/xetex/latex/xepersian/README
-2022/07/01 | 13804 | macros/xetex/latex/xepersian/undk-0.6.py
-2022/07/01 | 12348 | macros/xetex/latex/xepersian/unldk-0.2.py
-2022/07/01 | 71387 | macros/xetex/latex/xepersian/xepersian-doc-basics.ltx
-2022/07/01 | 410 | macros/xetex/latex/xepersian/xepersian-doc-boolean.ltx
-2022/07/01 | 3099 | macros/xetex/latex/xepersian/xepersian-doc-captions.ltx
-2022/07/01 | 5447 | macros/xetex/latex/xepersian/xepersian-doc-envcs.ltx
-2022/07/01 | 2574 | macros/xetex/latex/xepersian/xepersian-doc-intro.ltx
-2022/07/01 | 454 | macros/xetex/latex/xepersian/xepersian-doc.ltx
-2022/07/02 | 243511 | macros/xetex/latex/xepersian/xepersian-doc.pdf
-2022/07/01 | 25876 | macros/xetex/latex/xepersian/xepersian-doc-pkgs.ltx
-2022/07/01 | 4149 | macros/xetex/latex/xepersian/xepersian-doc-preamble.ltx
-2022/07/01 | 2108 | macros/xetex/latex/xepersian/xepersian-doc-title.ltx
-2022/07/01 | 342921 | macros/xetex/latex/xepersian/xepersian.dtx
-2022/07/02 | 775123 | macros/xetex/latex/xepersian/xepersian.pdf
-2022/07/02 | 1130406 | macros/xetex/latex/xepersian.zip
+2022/10/30 | 18304 | macros/xetex/latex/xepersian/img/ireland.jpg
+2022/10/30 | 13088 | macros/xetex/latex/xepersian/img/weather/clouds.jpg
+2022/10/30 | 14616 | macros/xetex/latex/xepersian/img/weather/rain.jpg
+2022/10/30 | 10896 | macros/xetex/latex/xepersian/img/weather/sun.jpg
+2022/10/30 | 1390 | macros/xetex/latex/xepersian/README
+2022/10/30 | 13804 | macros/xetex/latex/xepersian/undk-0.6.py
+2022/10/30 | 12348 | macros/xetex/latex/xepersian/unldk-0.2.py
+2022/10/30 | 71387 | macros/xetex/latex/xepersian/xepersian-doc-basics.ltx
+2022/10/30 | 410 | macros/xetex/latex/xepersian/xepersian-doc-boolean.ltx
+2022/10/30 | 3099 | macros/xetex/latex/xepersian/xepersian-doc-captions.ltx
+2022/10/30 | 5447 | macros/xetex/latex/xepersian/xepersian-doc-envcs.ltx
+2022/10/30 | 2609 | macros/xetex/latex/xepersian/xepersian-doc-intro.ltx
+2022/10/30 | 454 | macros/xetex/latex/xepersian/xepersian-doc.ltx
+2022/10/30 | 236749 | macros/xetex/latex/xepersian/xepersian-doc.pdf
+2022/10/30 | 25876 | macros/xetex/latex/xepersian/xepersian-doc-pkgs.ltx
+2022/10/30 | 4149 | macros/xetex/latex/xepersian/xepersian-doc-preamble.ltx
+2022/10/30 | 2108 | macros/xetex/latex/xepersian/xepersian-doc-title.ltx
+2022/10/30 | 343317 | macros/xetex/latex/xepersian/xepersian.dtx
+2022/10/30 | 777678 | macros/xetex/latex/xepersian/xepersian.pdf
+2022/10/30 | 1124966 | macros/xetex/latex/xepersian.zip
2021/03/29 | 142 | macros/xetex/latex/xesoul/README
2021/03/29 | 3942 | macros/xetex/latex/xesoul/xesoul.dtx
2021/03/29 | 1517 | macros/xetex/latex/xesoul/xesoul.ins
@@ -275688,87 +275702,61 @@
2018/04/15 | 1313 | support/latex-git-log/po/de.po
2020/02/26 | 3353 | support/latex-git-log/README.md
2020/02/27 | 87742 | support/latex-git-log.zip
-2022/06/12 | 19920 | support/latexindent/defaultSettings.yaml
-2022/06/12 | 633 | support/latexindent/documentation/cmhlistings.tex
-2022/06/12 | 7161 | support/latexindent/documentation/figure-schematic.png
-2022/06/12 | 1879 | support/latexindent/documentation/figure-schematic.tex
-2022/06/12 | 1106074 | support/latexindent/documentation/latexindent.pdf
-2022/06/12 | 24110 | support/latexindent/documentation/latexindent.tex
-2022/06/12 | 54383 | support/latexindent/documentation/latexindent-yaml-schema.json
-2022/06/12 | 44096 | support/latexindent/documentation/logo.png
-2022/06/12 | 1664 | support/latexindent/documentation/logo.tex
-2022/06/12 | 31717 | support/latexindent/documentation/sec-appendices.tex
-2022/06/12 | 1929 | support/latexindent/documentation/sec-conclusions-know-limitations.tex
-2022/06/12 | 74181 | support/latexindent/documentation/sec-default-user-local.tex
-2022/06/12 | 2109 | support/latexindent/documentation/sec-demonstration.tex
-2022/06/12 | 15976 | support/latexindent/documentation/sec-fine-tuning.tex
-2022/06/12 | 25309 | support/latexindent/documentation/sec-how-to-use.tex
-2022/06/12 | 10829 | support/latexindent/documentation/sec-indent-config-and-settings.tex
-2022/06/12 | 12065 | support/latexindent/documentation/sec-introduction.tex
-2022/06/12 | 610 | support/latexindent/documentation/sec-references.tex
-2022/06/12 | 21628 | support/latexindent/documentation/sec-replacements.tex
-2022/06/12 | 8026 | support/latexindent/documentation/sec-the-line-switch.tex
-2022/06/12 | 2997 | support/latexindent/documentation/sec-the-m-switch.tex
-2022/06/12 | 5715 | support/latexindent/documentation/subsec-combine-text-wrap-para-line-breaks.tex
-2022/06/12 | 14024 | support/latexindent/documentation/subsec-commands-and-their-options.tex
-2022/06/12 | 1887 | support/latexindent/documentation/subsec-noAdditionalIndent-indentRules.tex
-2022/06/12 | 22332 | support/latexindent/documentation/subsec-one-sentence-per-line.tex
-2022/06/12 | 66115 | support/latexindent/documentation/subsec-poly-switches.tex
-2022/06/12 | 24851 | support/latexindent/documentation/subsec-text-wrap.tex
-2022/06/12 | 5958 | support/latexindent/documentation/subsubsec-commands-with-arguments.tex
-2022/06/12 | 16560 | support/latexindent/documentation/subsubsec-environments-and-their-arguments.tex
-2022/06/12 | 3433 | support/latexindent/documentation/subsubsec-environments-with-items.tex
-2022/06/12 | 5266 | support/latexindent/documentation/subsubsec-headings.tex
-2022/06/12 | 4855 | support/latexindent/documentation/subsubsec-ifelsefi.tex
-2022/06/12 | 7193 | support/latexindent/documentation/subsubsec-no-add-remaining-code-blocks.tex
-2022/06/12 | 3831 | support/latexindent/documentation/subsubsec-special.tex
-2022/06/12 | 5717 | support/latexindent/documentation/test-default-settings.tex
-2022/06/12 | 1486 | support/latexindent/documentation/title.tex
-2022/06/12 | 65059 | support/latexindent/LatexIndent/AlignmentAtAmpersand.pm
-2022/06/12 | 24410 | support/latexindent/LatexIndent/Arguments.pm
-2022/06/12 | 7329 | support/latexindent/LatexIndent/BackUpFileProcedure.pm
-2022/06/12 | 4816 | support/latexindent/LatexIndent/BlankLines.pm
-2022/06/12 | 12646 | support/latexindent/LatexIndent/Braces.pm
-2022/06/12 | 5390 | support/latexindent/LatexIndent/Check.pm
-2022/06/12 | 10622 | support/latexindent/LatexIndent/Command.pm
-2022/06/12 | 22818 | support/latexindent/LatexIndent/Document.pm
-2022/06/12 | 1485 | support/latexindent/LatexIndent/DoubleBackSlash.pm
-2022/06/12 | 6023 | support/latexindent/LatexIndent/Else.pm
-2022/06/12 | 6808 | support/latexindent/LatexIndent/Environment.pm
-2022/06/12 | 9815878 | support/latexindent/latexindent.exe
-2022/06/12 | 11300 | support/latexindent/LatexIndent/FileContents.pm
-2022/06/12 | 8462 | support/latexindent/LatexIndent/FileExtension.pm
-2022/06/12 | 48605 | support/latexindent/LatexIndent/GetYamlSettings.pm
-2022/06/12 | 11142 | support/latexindent/LatexIndent/Heading.pm
-2022/06/12 | 13420 | support/latexindent/LatexIndent/HiddenChildren.pm
-2022/06/12 | 3482 | support/latexindent/LatexIndent/HorizontalWhiteSpace.pm
-2022/06/12 | 8829 | support/latexindent/LatexIndent/IfElseFi.pm
-2022/06/12 | 21564 | support/latexindent/LatexIndent/Indent.pm
-2022/06/12 | 6694 | support/latexindent/LatexIndent/Item.pm
-2022/06/12 | 5430 | support/latexindent/LatexIndent/KeyEqualsValuesBraces.pm
-2022/06/12 | 9843 | support/latexindent/LatexIndent/Lines.pm
-2022/06/12 | 12897 | support/latexindent/LatexIndent/LogFile.pm
-2022/06/12 | 2320 | support/latexindent/LatexIndent/Logger.pm
-2022/06/12 | 7280 | support/latexindent/LatexIndent/MandatoryArgument.pm
-2022/06/12 | 18321 | support/latexindent/LatexIndent/ModifyLineBreaks.pm
-2022/06/12 | 1558 | support/latexindent/latexindent-module-installer.pl
-2022/06/12 | 4340 | support/latexindent/LatexIndent/NamedGroupingBracesBrackets.pm
-2022/06/12 | 6522 | support/latexindent/LatexIndent/OptionalArgument.pm
-2022/06/12 | 3410 | support/latexindent/latexindent.pl
-2022/06/12 | 2690 | support/latexindent/LatexIndent/Preamble.pm
-2022/06/12 | 3747 | support/latexindent/LatexIndent/Replacement.pm
-2022/06/12 | 4365 | support/latexindent/LatexIndent/RoundBrackets.pm
-2022/06/12 | 20388 | support/latexindent/LatexIndent/Sentence.pm
-2022/06/12 | 13890 | support/latexindent/LatexIndent/Special.pm
-2022/06/12 | 2701 | support/latexindent/LatexIndent/Switches.pm
-2022/06/12 | 3339 | support/latexindent/LatexIndent/Tokens.pm
-2022/06/12 | 6964 | support/latexindent/LatexIndent/TrailingComments.pm
-2022/06/12 | 5809 | support/latexindent/LatexIndent/UnNamedGroupingBracesBrackets.pm
-2022/06/12 | 27328 | support/latexindent/LatexIndent/Verbatim.pm
-2022/06/12 | 836 | support/latexindent/LatexIndent/Version.pm
-2022/06/12 | 17979 | support/latexindent/LatexIndent/Wrap.pm
-2022/06/12 | 1874 | support/latexindent/README
-2022/06/13 | 6167406 | support/latexindent.zip
+2022/10/30 | 6159922 | support/latexindent/bin/linux/latexindent
+2022/10/30 | 6389393 | support/latexindent/bin/macos/latexindent
+2022/10/30 | 8700045 | support/latexindent/bin/windows/latexindent.exe
+2022/10/30 | 19920 | support/latexindent/defaultSettings.yaml
+2022/10/30 | 5206 | support/latexindent/documentation/contributors.bib
+2022/10/30 | 7161 | support/latexindent/documentation/figure-schematic.png
+2022/10/30 | 4402 | support/latexindent/documentation/latex-indent.bib
+2022/10/30 | 1105223 | support/latexindent/documentation/latexindent.pdf
+2022/10/30 | 408105 | support/latexindent/documentation/latexindent.tex
+2022/10/30 | 54383 | support/latexindent/documentation/latexindent-yaml-schema.json
+2022/10/30 | 44096 | support/latexindent/documentation/logo.png
+2022/10/30 | 65059 | support/latexindent/LatexIndent/AlignmentAtAmpersand.pm
+2022/10/30 | 24410 | support/latexindent/LatexIndent/Arguments.pm
+2022/10/30 | 7329 | support/latexindent/LatexIndent/BackUpFileProcedure.pm
+2022/10/30 | 4816 | support/latexindent/LatexIndent/BlankLines.pm
+2022/10/30 | 12646 | support/latexindent/LatexIndent/Braces.pm
+2022/10/30 | 5390 | support/latexindent/LatexIndent/Check.pm
+2022/10/30 | 10622 | support/latexindent/LatexIndent/Command.pm
+2022/10/30 | 22818 | support/latexindent/LatexIndent/Document.pm
+2022/10/30 | 1485 | support/latexindent/LatexIndent/DoubleBackSlash.pm
+2022/10/30 | 6023 | support/latexindent/LatexIndent/Else.pm
+2022/10/30 | 6808 | support/latexindent/LatexIndent/Environment.pm
+2022/10/30 | 11300 | support/latexindent/LatexIndent/FileContents.pm
+2022/10/30 | 8462 | support/latexindent/LatexIndent/FileExtension.pm
+2022/10/30 | 48856 | support/latexindent/LatexIndent/GetYamlSettings.pm
+2022/10/30 | 11142 | support/latexindent/LatexIndent/Heading.pm
+2022/10/30 | 13420 | support/latexindent/LatexIndent/HiddenChildren.pm
+2022/10/30 | 3482 | support/latexindent/LatexIndent/HorizontalWhiteSpace.pm
+2022/10/30 | 8829 | support/latexindent/LatexIndent/IfElseFi.pm
+2022/10/30 | 21564 | support/latexindent/LatexIndent/Indent.pm
+2022/10/30 | 6694 | support/latexindent/LatexIndent/Item.pm
+2022/10/30 | 5430 | support/latexindent/LatexIndent/KeyEqualsValuesBraces.pm
+2022/10/30 | 9843 | support/latexindent/LatexIndent/Lines.pm
+2022/10/30 | 12897 | support/latexindent/LatexIndent/LogFile.pm
+2022/10/30 | 2320 | support/latexindent/LatexIndent/Logger.pm
+2022/10/30 | 7280 | support/latexindent/LatexIndent/MandatoryArgument.pm
+2022/10/30 | 18321 | support/latexindent/LatexIndent/ModifyLineBreaks.pm
+2022/10/30 | 1558 | support/latexindent/latexindent-module-installer.pl
+2022/10/30 | 4340 | support/latexindent/LatexIndent/NamedGroupingBracesBrackets.pm
+2022/10/30 | 6522 | support/latexindent/LatexIndent/OptionalArgument.pm
+2022/10/30 | 3410 | support/latexindent/latexindent.pl
+2022/10/30 | 2690 | support/latexindent/LatexIndent/Preamble.pm
+2022/10/30 | 3747 | support/latexindent/LatexIndent/Replacement.pm
+2022/10/30 | 4365 | support/latexindent/LatexIndent/RoundBrackets.pm
+2022/10/30 | 20388 | support/latexindent/LatexIndent/Sentence.pm
+2022/10/30 | 13890 | support/latexindent/LatexIndent/Special.pm
+2022/10/30 | 2701 | support/latexindent/LatexIndent/Switches.pm
+2022/10/30 | 3339 | support/latexindent/LatexIndent/Tokens.pm
+2022/10/30 | 6964 | support/latexindent/LatexIndent/TrailingComments.pm
+2022/10/30 | 5809 | support/latexindent/LatexIndent/UnNamedGroupingBracesBrackets.pm
+2022/10/30 | 27328 | support/latexindent/LatexIndent/Verbatim.pm
+2022/10/30 | 836 | support/latexindent/LatexIndent/Version.pm
+2022/10/30 | 17979 | support/latexindent/LatexIndent/Wrap.pm
+2022/10/30 | 2006 | support/latexindent/README
+2022/10/30 | 11009879 | support/latexindent.zip
2021/10/26 | 16439 | support/latex-make/figlatex.dtx
2021/10/26 | 238535 | support/latex-make/figlatex.pdf
2001/06/07 | 302 | support/latexmake/latexmake.diz
@@ -276145,21 +276133,19 @@
1995/07/07 | 217081 | support/lxmail/lxmail10.exe
1995/07/07 | 987 | support/lxmail/lxmail10.txt
2007/12/25 | 217923 | support/lxmail.zip
-2019/05/27 | 130 | support/lyluatex/Contributors.md
-2019/05/27 | 58 | support/lyluatex/latexmkrc
-2019/05/27 | 1090 | support/lyluatex/LICENSE
-2019/05/27 | 158 | support/lyluatex/ly/eight-systems.ly
-2019/05/27 | 320 | support/lyluatex/ly/fonts.ly
-2019/05/27 | 1101 | support/lyluatex/lyluatexbase.cls
-2019/05/27 | 4277 | support/lyluatex/lyluatex-lib.lua
-2019/05/27 | 44110 | support/lyluatex/lyluatex.lua
-2019/05/27 | 973 | support/lyluatex/lyluatexmanual.cls
-2019/05/27 | 8659 | support/lyluatex/lyluatex-options.lua
-2019/05/27 | 1664216 | support/lyluatex/lyluatex.pdf
-2019/05/27 | 10502 | support/lyluatex/lyluatex.sty
-2019/05/27 | 96489 | support/lyluatex/lyluatex.tex
-2019/05/27 | 2868 | support/lyluatex/README.md
-2019/05/28 | 1334865 | support/lyluatex.zip
+2022/10/30 | 325 | support/lyluatex/Contributors.md
+2022/10/30 | 58 | support/lyluatex/latexmkrc
+2022/10/30 | 1090 | support/lyluatex/LICENSE
+2022/10/30 | 158 | support/lyluatex/ly/eight-systems.ly
+2022/10/30 | 320 | support/lyluatex/ly/fonts.ly
+2022/10/30 | 1105 | support/lyluatex/lyluatexbase.cls
+2022/10/30 | 44673 | support/lyluatex/lyluatex.lua
+2022/10/30 | 983 | support/lyluatex/lyluatexmanual.cls
+2022/10/30 | 2028732 | support/lyluatex/lyluatex.pdf
+2022/10/30 | 10254 | support/lyluatex/lyluatex.sty
+2022/10/30 | 97205 | support/lyluatex/lyluatex.tex
+2022/10/30 | 2960 | support/lyluatex/README.md
+2022/10/30 | 1657005 | support/lyluatex.zip
2022/03/22 | 36066 | support/make4ht/changelog.tex
2022/03/22 | 4641 | support/make4ht/domfilters/make4ht-aeneas.lua
2022/03/22 | 2741 | support/make4ht/domfilters/make4ht-booktabs.lua
@@ -282578,8 +282564,8 @@
2019/02/28 | 7996 | systems/texlive/tlnet/archive/abstyles.r15878.tar.xz
2022/03/12 | 103532 | systems/texlive/tlnet/archive/academicons.doc.r62622.tar.xz
2022/03/12 | 35252 | systems/texlive/tlnet/archive/academicons.r62622.tar.xz
-2019/02/28 | 300384 | systems/texlive/tlnet/archive/accanthis.doc.r32089.tar.xz
-2019/02/28 | 368064 | systems/texlive/tlnet/archive/accanthis.r32089.tar.xz
+2022/10/30 | 300388 | systems/texlive/tlnet/archive/accanthis.doc.r64844.tar.xz
+2022/10/30 | 368064 | systems/texlive/tlnet/archive/accanthis.r64844.tar.xz
2019/06/28 | 239048 | systems/texlive/tlnet/archive/accents.doc.r51497.tar.xz
2019/06/28 | 2956 | systems/texlive/tlnet/archive/accents.r51497.tar.xz
2020/07/08 | 496876 | systems/texlive/tlnet/archive/accessibility.doc.r55777.tar.xz
@@ -283062,8 +283048,8 @@
2019/02/28 | 1924 | systems/texlive/tlnet/archive/assignment.r20431.tar.xz
2019/02/28 | 353364 | systems/texlive/tlnet/archive/assoccnt.doc.r38497.tar.xz
2019/02/28 | 4036 | systems/texlive/tlnet/archive/assoccnt.r38497.tar.xz
-2022/01/24 | 251112 | systems/texlive/tlnet/archive/association-matrix.doc.r61719.tar.xz
-2022/01/24 | 3604 | systems/texlive/tlnet/archive/association-matrix.r61719.tar.xz
+2022/10/30 | 268584 | systems/texlive/tlnet/archive/association-matrix.doc.r64845.tar.xz
+2022/10/30 | 4188 | systems/texlive/tlnet/archive/association-matrix.r64845.tar.xz
2022/07/09 | 117844 | systems/texlive/tlnet/archive/asternote.doc.r63838.tar.xz
2022/07/09 | 1400 | systems/texlive/tlnet/archive/asternote.r63838.tar.xz
2019/02/28 | 4220 | systems/texlive/tlnet/archive/astro.doc.r15878.tar.xz
@@ -284834,7 +284820,7 @@
2022/06/10 | 700 | systems/texlive/tlnet/archive/collection-latex.r63515.tar.xz
2022/06/12 | 736 | systems/texlive/tlnet/archive/collection-latexrecommended.r63547.tar.xz
2022/09/15 | 920 | systems/texlive/tlnet/archive/collection-luatex.r64393.tar.xz
-2022/10/21 | 1632 | systems/texlive/tlnet/archive/collection-mathscience.r64763.tar.xz
+2022/10/30 | 1636 | systems/texlive/tlnet/archive/collection-mathscience.r64853.tar.xz
2021/06/10 | 548 | systems/texlive/tlnet/archive/collection-metapost.r59531.tar.xz
2021/02/24 | 476 | systems/texlive/tlnet/archive/collection-music.r57878.tar.xz
2022/10/12 | 1552 | systems/texlive/tlnet/archive/collection-pictures.r64681.tar.xz
@@ -285622,9 +285608,9 @@
2019/02/28 | 13996 | systems/texlive/tlnet/archive/dcpic.r30206.tar.xz
2019/09/02 | 284556 | systems/texlive/tlnet/archive/ddphonism.doc.r52009.tar.xz
2019/09/02 | 3000 | systems/texlive/tlnet/archive/ddphonism.r52009.tar.xz
-2022/10/05 | 326644 | systems/texlive/tlnet/archive/debate.doc.r64602.tar.xz
-2022/10/05 | 1680 | systems/texlive/tlnet/archive/debate.r64602.tar.xz
-2022/10/05 | 3044 | systems/texlive/tlnet/archive/debate.source.r64602.tar.xz
+2022/10/30 | 285712 | systems/texlive/tlnet/archive/debate.doc.r64846.tar.xz
+2022/10/30 | 1688 | systems/texlive/tlnet/archive/debate.r64846.tar.xz
+2022/10/30 | 3084 | systems/texlive/tlnet/archive/debate.source.r64846.tar.xz
2019/02/28 | 155764 | systems/texlive/tlnet/archive/decimal.doc.r23374.tar.xz
2019/02/28 | 1420 | systems/texlive/tlnet/archive/decimal.r23374.tar.xz
2019/02/28 | 6576 | systems/texlive/tlnet/archive/decimal.source.r23374.tar.xz
@@ -286466,9 +286452,9 @@
2022/02/08 | 341332 | systems/texlive/tlnet/archive/envlab.doc.r61937.tar.xz
2022/02/08 | 5492 | systems/texlive/tlnet/archive/envlab.r61937.tar.xz
2022/02/08 | 14628 | systems/texlive/tlnet/archive/envlab.source.r61937.tar.xz
-2022/10/28 | 875488 | systems/texlive/tlnet/archive/eolang.doc.r64834.tar.xz
-2022/10/28 | 3900 | systems/texlive/tlnet/archive/eolang.r64834.tar.xz
-2022/10/28 | 8008 | systems/texlive/tlnet/archive/eolang.source.r64834.tar.xz
+2022/10/30 | 880404 | systems/texlive/tlnet/archive/eolang.doc.r64847.tar.xz
+2022/10/30 | 3996 | systems/texlive/tlnet/archive/eolang.r64847.tar.xz
+2022/10/30 | 8372 | systems/texlive/tlnet/archive/eolang.source.r64847.tar.xz
2019/02/28 | 266312 | systems/texlive/tlnet/archive/epigrafica.doc.r17210.tar.xz
2019/02/28 | 343668 | systems/texlive/tlnet/archive/epigrafica.r17210.tar.xz
2019/02/28 | 852 | systems/texlive/tlnet/archive/epigram.r20513.tar.xz
@@ -287503,8 +287489,8 @@
2020/02/18 | 1833412 | systems/texlive/tlnet/archive/ghsystem.r53822.tar.xz
2019/02/28 | 196160 | systems/texlive/tlnet/archive/gillcm.doc.r19878.tar.xz
2019/02/28 | 13792 | systems/texlive/tlnet/archive/gillcm.r19878.tar.xz
-2019/02/28 | 216008 | systems/texlive/tlnet/archive/gillius.doc.r32068.tar.xz
-2019/02/28 | 941896 | systems/texlive/tlnet/archive/gillius.r32068.tar.xz
+2022/10/30 | 216008 | systems/texlive/tlnet/archive/gillius.doc.r64859.tar.xz
+2022/10/30 | 941916 | systems/texlive/tlnet/archive/gillius.r64859.tar.xz
2020/09/08 | 168440 | systems/texlive/tlnet/archive/gincltex.doc.r56291.tar.xz
2020/09/08 | 1908 | systems/texlive/tlnet/archive/gincltex.r56291.tar.xz
2020/09/08 | 5132 | systems/texlive/tlnet/archive/gincltex.source.r56291.tar.xz
@@ -287931,6 +287917,9 @@
2019/02/28 | 83952 | systems/texlive/tlnet/archive/hepparticles.doc.r35723.tar.xz
2019/02/28 | 4448 | systems/texlive/tlnet/archive/hepparticles.r35723.tar.xz
2019/02/28 | 2124 | systems/texlive/tlnet/archive/hep.r15878.tar.xz
+2022/10/30 | 461932 | systems/texlive/tlnet/archive/hep-reference.doc.r64853.tar.xz
+2022/10/30 | 1920 | systems/texlive/tlnet/archive/hep-reference.r64853.tar.xz
+2022/10/30 | 4468 | systems/texlive/tlnet/archive/hep-reference.source.r64853.tar.xz
2021/11/28 | 494980 | systems/texlive/tlnet/archive/hep-text.doc.r61172.tar.xz
2021/11/28 | 1632 | systems/texlive/tlnet/archive/hep-text.r61172.tar.xz
2021/11/28 | 4228 | systems/texlive/tlnet/archive/hep-text.source.r61172.tar.xz
@@ -288050,9 +288039,9 @@
2019/02/28 | 98316 | systems/texlive/tlnet/archive/hrlatex.doc.r18020.tar.xz
2019/02/28 | 3528 | systems/texlive/tlnet/archive/hrlatex.r18020.tar.xz
2019/02/28 | 3768 | systems/texlive/tlnet/archive/hrlatex.source.r18020.tar.xz
-2022/10/16 | 409768 | systems/texlive/tlnet/archive/huawei.doc.r64718.tar.xz
-2022/10/16 | 6412 | systems/texlive/tlnet/archive/huawei.r64718.tar.xz
-2022/10/16 | 9596 | systems/texlive/tlnet/archive/huawei.source.r64718.tar.xz
+2022/10/30 | 777364 | systems/texlive/tlnet/archive/huawei.doc.r64848.tar.xz
+2022/10/30 | 260132 | systems/texlive/tlnet/archive/huawei.r64848.tar.xz
+2022/10/30 | 9860 | systems/texlive/tlnet/archive/huawei.source.r64848.tar.xz
2022/10/17 | 328068 | systems/texlive/tlnet/archive/huaz.doc.r64723.tar.xz
2022/10/17 | 4692 | systems/texlive/tlnet/archive/huaz.r64723.tar.xz
2021/02/01 | 213632 | systems/texlive/tlnet/archive/hu-berlin-bundle.doc.r57580.tar.xz
@@ -288231,9 +288220,9 @@
2022/04/06 | 17644 | systems/texlive/tlnet/archive/ieejtran.r62957.tar.xz
2019/02/28 | 3464 | systems/texlive/tlnet/archive/ietfbibs.doc.r41332.tar.xz
2019/02/28 | 456 | systems/texlive/tlnet/archive/ietfbibs.r41332.tar.xz
-2022/10/26 | 325748 | systems/texlive/tlnet/archive/iexec.doc.r64810.tar.xz
-2022/10/26 | 2412 | systems/texlive/tlnet/archive/iexec.r64810.tar.xz
-2022/10/26 | 5548 | systems/texlive/tlnet/archive/iexec.source.r64810.tar.xz
+2022/10/30 | 325444 | systems/texlive/tlnet/archive/iexec.doc.r64849.tar.xz
+2022/10/30 | 2416 | systems/texlive/tlnet/archive/iexec.r64849.tar.xz
+2022/10/30 | 5612 | systems/texlive/tlnet/archive/iexec.source.r64849.tar.xz
2021/07/24 | 175068 | systems/texlive/tlnet/archive/ifallfalse.doc.r60027.tar.xz
2021/07/24 | 1248 | systems/texlive/tlnet/archive/ifallfalse.r60027.tar.xz
2021/07/24 | 3084 | systems/texlive/tlnet/archive/ifallfalse.source.r60027.tar.xz
@@ -288476,8 +288465,8 @@
2022/08/08 | 237760 | systems/texlive/tlnet/archive/japanese-otf.r64072.tar.xz
2022/08/08 | 67336 | systems/texlive/tlnet/archive/japanese-otf.source.r64072.tar.xz
2019/11/12 | 9792 | systems/texlive/tlnet/archive/jbact.r52717.tar.xz
-2022/10/28 | 5509864 | systems/texlive/tlnet/archive/jeuxcartes.doc.r64827.tar.xz
-2022/10/28 | 5328884 | systems/texlive/tlnet/archive/jeuxcartes.r64827.tar.xz
+2022/10/30 | 6404764 | systems/texlive/tlnet/archive/jeuxcartes.doc.r64850.tar.xz
+2022/10/30 | 5642836 | systems/texlive/tlnet/archive/jeuxcartes.r64850.tar.xz
2019/02/28 | 340 | systems/texlive/tlnet/archive/jfmutil.aarch64-linux.r46228.tar.xz
2019/02/28 | 340 | systems/texlive/tlnet/archive/jfmutil.amd64-freebsd.r44835.tar.xz
2019/02/28 | 340 | systems/texlive/tlnet/archive/jfmutil.amd64-netbsd.r44835.tar.xz
@@ -289347,8 +289336,8 @@
2019/02/28 | 5428 | systems/texlive/tlnet/archive/ling-macros.r42268.tar.xz
2019/02/28 | 274676 | systems/texlive/tlnet/archive/linguex.doc.r30815.tar.xz
2019/02/28 | 6924 | systems/texlive/tlnet/archive/linguex.r30815.tar.xz
-2020/03/24 | 42252 | systems/texlive/tlnet/archive/linguisticspro.doc.r54512.tar.xz
-2020/03/24 | 1395864 | systems/texlive/tlnet/archive/linguisticspro.r54512.tar.xz
+2022/10/30 | 46052 | systems/texlive/tlnet/archive/linguisticspro.doc.r64858.tar.xz
+2022/10/30 | 1377940 | systems/texlive/tlnet/archive/linguisticspro.r64858.tar.xz
2019/02/28 | 226748 | systems/texlive/tlnet/archive/linop.doc.r41304.tar.xz
2019/02/28 | 1376 | systems/texlive/tlnet/archive/linop.r41304.tar.xz
2020/06/05 | 1464640 | systems/texlive/tlnet/archive/lion-msc.doc.r55415.tar.xz
@@ -291512,9 +291501,9 @@
2019/02/28 | 352 | systems/texlive/tlnet/archive/pdflatexpicscale.x86_64-linuxmusl.r46840.tar.xz
2019/02/28 | 348 | systems/texlive/tlnet/archive/pdflatexpicscale.x86_64-linux.r41779.tar.xz
2019/02/28 | 348 | systems/texlive/tlnet/archive/pdflatexpicscale.x86_64-solaris.r41779.tar.xz
-2019/12/07 | 298264 | systems/texlive/tlnet/archive/pdflscape.doc.r53047.tar.xz
-2019/12/07 | 2252 | systems/texlive/tlnet/archive/pdflscape.r53047.tar.xz
-2019/12/07 | 6000 | systems/texlive/tlnet/archive/pdflscape.source.r53047.tar.xz
+2022/10/30 | 314616 | systems/texlive/tlnet/archive/pdflscape.doc.r64851.tar.xz
+2022/10/30 | 2612 | systems/texlive/tlnet/archive/pdflscape.r64851.tar.xz
+2022/10/30 | 6508 | systems/texlive/tlnet/archive/pdflscape.source.r64851.tar.xz
2022/09/27 | 8723252 | systems/texlive/tlnet/archive/pdfmanagement-testphase.doc.r64521.tar.xz
2022/09/27 | 76696 | systems/texlive/tlnet/archive/pdfmanagement-testphase.r64521.tar.xz
2022/09/27 | 137740 | systems/texlive/tlnet/archive/pdfmanagement-testphase.source.r64521.tar.xz
@@ -291950,8 +291939,8 @@
2022/08/08 | 137636 | systems/texlive/tlnet/archive/plautopatch.doc.r64072.tar.xz
2022/08/08 | 7076 | systems/texlive/tlnet/archive/plautopatch.r64072.tar.xz
2019/02/28 | 552 | systems/texlive/tlnet/archive/play.doc.r15878.tar.xz
-2020/08/01 | 251112 | systems/texlive/tlnet/archive/playfair.doc.r56005.tar.xz
-2020/08/01 | 1679544 | systems/texlive/tlnet/archive/playfair.r56005.tar.xz
+2022/10/30 | 251116 | systems/texlive/tlnet/archive/playfair.doc.r64857.tar.xz
+2022/10/30 | 1679528 | systems/texlive/tlnet/archive/playfair.r64857.tar.xz
2019/02/28 | 2196 | systems/texlive/tlnet/archive/play.r15878.tar.xz
2019/02/28 | 4972 | systems/texlive/tlnet/archive/play.source.r15878.tar.xz
2021/03/23 | 25344 | systems/texlive/tlnet/archive/pl.doc.r58661.tar.xz
@@ -292028,8 +292017,8 @@
2019/02/28 | 292288 | systems/texlive/tlnet/archive/poetrytex.doc.r39921.tar.xz
2019/02/28 | 3096 | systems/texlive/tlnet/archive/poetrytex.r39921.tar.xz
2019/02/28 | 13964 | systems/texlive/tlnet/archive/poetrytex.source.r39921.tar.xz
-2022/09/28 | 12968 | systems/texlive/tlnet/archive/poiretone.doc.r64527.tar.xz
-2022/09/28 | 172692 | systems/texlive/tlnet/archive/poiretone.r64527.tar.xz
+2022/10/30 | 12964 | systems/texlive/tlnet/archive/poiretone.doc.r64856.tar.xz
+2022/10/30 | 172672 | systems/texlive/tlnet/archive/poiretone.r64856.tar.xz
2022/05/20 | 123176 | systems/texlive/tlnet/archive/polexpr.doc.r63337.tar.xz
2022/05/20 | 39920 | systems/texlive/tlnet/archive/polexpr.r63337.tar.xz
2021/08/26 | 284808 | systems/texlive/tlnet/archive/polski.doc.r60322.tar.xz
@@ -293315,8 +293304,8 @@
2019/02/28 | 292656 | systems/texlive/tlnet/archive/simplecv.doc.r35537.tar.xz
2019/02/28 | 2112 | systems/texlive/tlnet/archive/simplecv.r35537.tar.xz
2019/02/28 | 5844 | systems/texlive/tlnet/archive/simplecv.source.r35537.tar.xz
-2022/10/22 | 1979080 | systems/texlive/tlnet/archive/simpleicons.doc.r64769.tar.xz
-2022/10/22 | 2698076 | systems/texlive/tlnet/archive/simpleicons.r64769.tar.xz
+2022/10/30 | 1982104 | systems/texlive/tlnet/archive/simpleicons.doc.r64855.tar.xz
+2022/10/30 | 2700300 | systems/texlive/tlnet/archive/simpleicons.r64855.tar.xz
2019/02/28 | 224844 | systems/texlive/tlnet/archive/simpleinvoice.doc.r45673.tar.xz
2019/02/28 | 2420 | systems/texlive/tlnet/archive/simpleinvoice.r45673.tar.xz
2022/10/03 | 130940 | systems/texlive/tlnet/archive/simplekv.doc.r64578.tar.xz
@@ -294260,7 +294249,7 @@
2022/09/13 | 600 | systems/texlive/tlnet/archive/texlive-scripts.amd64-freebsd.r64356.tar.xz
2022/09/13 | 596 | systems/texlive/tlnet/archive/texlive-scripts.amd64-netbsd.r64356.tar.xz
2022/09/13 | 596 | systems/texlive/tlnet/archive/texlive-scripts.armhf-linux.r64356.tar.xz
-2022/10/28 | 422980 | systems/texlive/tlnet/archive/texlive-scripts.doc.r64830.tar.xz
+2022/10/30 | 422980 | systems/texlive/tlnet/archive/texlive-scripts.doc.r64843.tar.xz
2020/01/27 | 916 | systems/texlive/tlnet/archive/texlive-scripts-extra.aarch64-linux.r53577.tar.xz
2020/01/27 | 924 | systems/texlive/tlnet/archive/texlive-scripts-extra.amd64-freebsd.r53577.tar.xz
2020/01/27 | 916 | systems/texlive/tlnet/archive/texlive-scripts-extra.amd64-netbsd.r53577.tar.xz
@@ -294284,7 +294273,7 @@
2022/09/13 | 592 | systems/texlive/tlnet/archive/texlive-scripts.i386-linux.r64356.tar.xz
2022/09/13 | 596 | systems/texlive/tlnet/archive/texlive-scripts.i386-netbsd.r64356.tar.xz
2022/09/13 | 596 | systems/texlive/tlnet/archive/texlive-scripts.i386-solaris.r64356.tar.xz
-2022/10/28 | 113728 | systems/texlive/tlnet/archive/texlive-scripts.r64830.tar.xz
+2022/10/30 | 113684 | systems/texlive/tlnet/archive/texlive-scripts.r64843.tar.xz
2022/09/13 | 580 | systems/texlive/tlnet/archive/texlive-scripts.universal-darwin.r64356.tar.xz
2022/04/19 | 36296 | systems/texlive/tlnet/archive/texlive-scripts.win32.r63068.tar.xz
2022/09/13 | 596 | systems/texlive/tlnet/archive/texlive-scripts.x86_64-cygwin.r64356.tar.xz
@@ -294952,11 +294941,11 @@
2019/02/28 | 404 | systems/texlive/tlnet/archive/translation-tabbing-fr.r24228.tar.xz
2021/06/01 | 216032 | systems/texlive/tlnet/archive/translator.doc.r59412.tar.xz
2021/06/01 | 28304 | systems/texlive/tlnet/archive/translator.r59412.tar.xz
-2019/12/01 | 266624 | systems/texlive/tlnet/archive/transparent.doc.r52981.tar.xz
+2022/10/30 | 275336 | systems/texlive/tlnet/archive/transparent.doc.r64852.tar.xz
2022/08/14 | 76976 | systems/texlive/tlnet/archive/transparent-io.doc.r64113.tar.xz
2022/08/14 | 852 | systems/texlive/tlnet/archive/transparent-io.r64113.tar.xz
-2019/12/01 | 1992 | systems/texlive/tlnet/archive/transparent.r52981.tar.xz
-2019/12/01 | 5448 | systems/texlive/tlnet/archive/transparent.source.r52981.tar.xz
+2022/10/30 | 2272 | systems/texlive/tlnet/archive/transparent.r64852.tar.xz
+2022/10/30 | 5284 | systems/texlive/tlnet/archive/transparent.source.r64852.tar.xz
2019/02/28 | 92268 | systems/texlive/tlnet/archive/tree-dvips.doc.r21751.tar.xz
2019/02/28 | 7964 | systems/texlive/tlnet/archive/tree-dvips.r21751.tar.xz
2019/02/28 | 23484 | systems/texlive/tlnet/archive/treetex.doc.r28176.tar.xz
@@ -295027,8 +295016,8 @@
2019/02/28 | 7888 | systems/texlive/tlnet/archive/turnstile.source.r15878.tar.xz
2019/02/28 | 78428 | systems/texlive/tlnet/archive/turnthepage.doc.r29803.tar.xz
2019/02/28 | 1664 | systems/texlive/tlnet/archive/turnthepage.r29803.tar.xz
-2021/07/18 | 708 | systems/texlive/tlnet/archive/twemoji-colr.doc.r59957.tar.xz
-2021/07/18 | 564740 | systems/texlive/tlnet/archive/twemoji-colr.r59957.tar.xz
+2022/10/30 | 712 | systems/texlive/tlnet/archive/twemoji-colr.doc.r64854.tar.xz
+2022/10/30 | 581228 | systems/texlive/tlnet/archive/twemoji-colr.r64854.tar.xz
2022/04/06 | 4751536 | systems/texlive/tlnet/archive/twemojis.doc.r62930.tar.xz
2022/04/06 | 4425040 | systems/texlive/tlnet/archive/twemojis.r62930.tar.xz
2022/04/06 | 70504 | systems/texlive/tlnet/archive/twemojis.source.r62930.tar.xz
@@ -296131,16 +296120,16 @@
2020/07/18 | 47816 | systems/texlive/tlnet/archive/zztex.doc.r55862.tar.xz
2020/07/18 | 101724 | systems/texlive/tlnet/archive/zztex.r55862.tar.xz
2022/07/17 | 124404 | systems/texlive/tlnet/install-tl
-2022/10/29 | 5834398 | systems/texlive/tlnet/install-tl-unx.tar.gz
-2022/10/29 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
-2022/10/29 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
+2022/10/30 | 5834574 | systems/texlive/tlnet/install-tl-unx.tar.gz
+2022/10/30 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
+2022/10/30 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
2021/04/11 | 4945 | systems/texlive/tlnet/install-tl-windows.bat
-2022/10/29 | 20435279 | systems/texlive/tlnet/install-tl-windows.exe
-2022/10/29 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
-2022/10/29 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
-2022/10/29 | 25518566 | systems/texlive/tlnet/install-tl.zip
-2022/10/29 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
-2022/10/29 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
+2022/10/30 | 20434885 | systems/texlive/tlnet/install-tl-windows.exe
+2022/10/30 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
+2022/10/30 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
+2022/10/30 | 25518528 | systems/texlive/tlnet/install-tl.zip
+2022/10/30 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
+2022/10/30 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
2022/04/03 | 1229 | systems/texlive/tlnet/README.md
2022/04/03 | 0 | systems/texlive/tlnet/TEXLIVE_2022
2022/02/28 | 7791 | systems/texlive/tlnet/tlpkg/gpg/pubring.gpg
@@ -296150,7 +296139,7 @@
2022/02/28 | 1280 | systems/texlive/tlnet/tlpkg/gpg/trustdb.gpg
2022/10/09 | 49938 | systems/texlive/tlnet/tlpkg/installer/config.guess
2010/11/11 | 11651 | systems/texlive/tlnet/tlpkg/installer/COPYING.MinGW-runtime.txt
-2022/10/27 | 7528 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
+2022/10/29 | 7362 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
2022/10/13 | 225403 | systems/texlive/tlnet/tlpkg/installer/curl/curl-ca-bundle.crt
2020/04/15 | 2606592 | systems/texlive/tlnet/tlpkg/installer/curl/curl.exe
2017/04/16 | 2629 | systems/texlive/tlnet/tlpkg/installer/installer-options.txt
@@ -296193,12 +296182,12 @@
2021/05/16 | 20371 | systems/texlive/tlnet/tlpkg/TeXLive/TLCrypto.pm
2021/12/21 | 5429 | systems/texlive/tlnet/tlpkg/TeXLive/TLDownload.pm
2021/12/21 | 27582 | systems/texlive/tlnet/tlpkg/TeXLive/TLPaper.pm
-2022/10/29 | 17795535 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
-2022/10/29 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+2022/10/30 | 17800554 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
+2022/10/30 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
2022/04/18 | 86658 | systems/texlive/tlnet/tlpkg/TeXLive/TLPDB.pm
-2022/10/29 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
-2022/10/29 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
-2022/10/29 | 2422448 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+2022/10/30 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+2022/10/30 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
+2022/10/30 | 2423428 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
2022/09/14 | 58922 | systems/texlive/tlnet/tlpkg/TeXLive/TLPOBJ.pm
2022/10/04 | 42404 | systems/texlive/tlnet/tlpkg/TeXLive/TLPSRC.pm
2021/12/21 | 16130 | systems/texlive/tlnet/tlpkg/TeXLive/TLTREE.pm
@@ -301595,7 +301584,7 @@
2020/10/03 | 318630 | systems/win32/miktex/tm/packages/filehook.tar.lzma
2012/12/04 | 924573 | systems/win32/miktex/tm/packages/fileinfo.tar.lzma
2011/09/21 | 281409 | systems/win32/miktex/tm/packages/filemod.tar.lzma
-2022/10/29 | 668296 | systems/win32/miktex/tm/packages/files.csv.lzma
+2022/10/30 | 668296 | systems/win32/miktex/tm/packages/files.csv.lzma
2001/05/14 | 5617 | systems/win32/miktex/tm/packages/finbib.tar.lzma
2015/10/20 | 44379 | systems/win32/miktex/tm/packages/findhyph.tar.lzma
2011/10/21 | 89323 | systems/win32/miktex/tm/packages/fink.tar.lzma
@@ -303327,9 +303316,9 @@
2018/01/12 | 157226 | systems/win32/miktex/tm/packages/miktex-zip-bin-x64.tar.lzma
2022/07/26 | 39695 | systems/win32/miktex/tm/packages/miktex-zlib-bin-2.9.tar.lzma
2022/10/15 | 43540 | systems/win32/miktex/tm/packages/miktex-zlib-bin-x64-2.9.tar.lzma
-2022/10/29 | 299974 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
-2022/10/29 | 1507333 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
-2022/10/29 | 1384033 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
+2022/10/30 | 299956 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
+2022/10/30 | 1507162 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
+2022/10/30 | 1386224 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
2022/07/26 | 13519 | systems/win32/miktex/tm/packages/miktex-zzip-bin-2.9.tar.lzma
2022/10/15 | 14426 | systems/win32/miktex/tm/packages/miktex-zzip-bin-x64-2.9.tar.lzma
2016/07/15 | 35914 | systems/win32/miktex/tm/packages/mil3.tar.lzma
@@ -303578,102 +303567,102 @@
2018/04/09 | 400132 | systems/win32/miktex/tm/packages/newunicodechar.tar.lzma
2011/09/19 | 101312 | systems/win32/miktex/tm/packages/newvbtm.tar.lzma
2021/03/17 | 232249 | systems/win32/miktex/tm/packages/newverbs.tar.lzma
-2022/10/29 | 667232 | systems/win32/miktex/tm/packages/next/files.csv.lzma
-2022/10/29 | 57317 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
-2022/10/29 | 1161751 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
-2022/10/29 | 31588 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
-2022/10/29 | 35265 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
-2022/10/29 | 65130 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
-2022/10/29 | 95468 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
-2022/10/29 | 77212 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma
-2022/10/29 | 31562 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
-2022/10/29 | 394144 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
-2022/10/29 | 37051 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
-2022/10/29 | 57506 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
-2022/10/29 | 270466 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
-2022/10/29 | 196213 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
-2022/10/29 | 103246 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma
-2022/10/29 | 24212 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
-2022/10/29 | 481894 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma
-2022/10/29 | 52037 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma
-2022/10/29 | 325981 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
-2022/10/29 | 45796 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
-2022/10/29 | 135465 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
-2022/10/29 | 1458151 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
-2022/10/29 | 112979 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma
-2022/10/29 | 48852 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
-2022/10/29 | 28510 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
-2022/10/29 | 63241 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma
-2022/10/29 | 155431 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
-2022/10/29 | 79064 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma
-2022/10/29 | 81448 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma
-2022/10/29 | 295946 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
-2022/10/29 | 25119 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
-2022/10/29 | 112879 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
-2022/10/29 | 73264 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
-2022/10/29 | 115581 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
-2022/10/29 | 43890 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
-2022/10/29 | 565082 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
-2022/10/29 | 247207 | systems/win32/miktex/tm/packages/next/miktex-hitex-bin-x64.tar.lzma
-2022/10/29 | 169679 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
-2022/10/29 | 109650 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma
-2022/10/29 | 18382 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
-2022/10/29 | 30571 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
-2022/10/29 | 682214 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma
-2022/10/29 | 599105 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
-2022/10/29 | 527570 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
-2022/10/29 | 103597 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
-2022/10/29 | 2023134 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
-2022/10/29 | 74099 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
-2022/10/29 | 32074 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma
-2022/10/29 | 8826 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
-2022/10/29 | 209139 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
-2022/10/29 | 286685 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
-2022/10/29 | 104921 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma
-2022/10/29 | 140012 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
-2022/10/29 | 325485 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma
-2022/10/29 | 181724 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
-2022/10/29 | 55320 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
-2022/10/29 | 35232 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
-2022/10/29 | 43618 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
-2022/10/29 | 48038 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
-2022/10/29 | 52369 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
-2022/10/29 | 213847 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma
-2022/10/29 | 41179 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma
-2022/10/29 | 824996 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
-2022/10/29 | 203420 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
-2022/10/29 | 245152 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
-2022/10/29 | 88483 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
-2022/10/29 | 1323743 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
-2022/10/29 | 23950 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
-2022/10/29 | 37507 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
-2022/10/29 | 72980 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
-2022/10/29 | 58632 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
-2022/10/29 | 769652 | systems/win32/miktex/tm/packages/next/miktex-ptex-bin-x64.tar.lzma
-2022/10/29 | 1503054 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
-2022/10/29 | 52627 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma
-2022/10/29 | 63803 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma
-2022/10/29 | 27464 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
-2022/10/29 | 18511 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma
-2022/10/29 | 70939 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
-2022/10/29 | 173177 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
-2022/10/29 | 68147 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
-2022/10/29 | 107438 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
-2022/10/29 | 2821672 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
-2022/10/29 | 62359 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
-2022/10/29 | 41190 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma
-2022/10/29 | 33863 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
-2022/10/29 | 73685 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
-2022/10/29 | 352464 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
-2022/10/29 | 57501 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin-x64.tar.lzma
-2022/10/29 | 630433 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma
-2022/10/29 | 43527 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
-2022/10/29 | 299960 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
-2022/10/29 | 1506393 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
-2022/10/29 | 1385541 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
-2022/10/29 | 14434 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma
+2022/10/30 | 667232 | systems/win32/miktex/tm/packages/next/files.csv.lzma
+2022/10/30 | 57318 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
+2022/10/30 | 1161751 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
+2022/10/30 | 31587 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
+2022/10/30 | 35265 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
+2022/10/30 | 65130 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
+2022/10/30 | 95468 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
+2022/10/30 | 77212 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma
+2022/10/30 | 31563 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
+2022/10/30 | 394144 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
+2022/10/30 | 37051 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
+2022/10/30 | 57506 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
+2022/10/30 | 270466 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
+2022/10/30 | 196213 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
+2022/10/30 | 103246 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma
+2022/10/30 | 24212 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
+2022/10/30 | 481893 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma
+2022/10/30 | 52037 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma
+2022/10/30 | 325979 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
+2022/10/30 | 45795 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
+2022/10/30 | 135466 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
+2022/10/30 | 1458152 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
+2022/10/30 | 112980 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma
+2022/10/30 | 48852 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
+2022/10/30 | 28511 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
+2022/10/30 | 63241 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma
+2022/10/30 | 155433 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
+2022/10/30 | 79064 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma
+2022/10/30 | 81449 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma
+2022/10/30 | 295945 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
+2022/10/30 | 25119 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
+2022/10/30 | 112876 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
+2022/10/30 | 73264 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
+2022/10/30 | 115581 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
+2022/10/30 | 43890 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
+2022/10/30 | 565082 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
+2022/10/30 | 247207 | systems/win32/miktex/tm/packages/next/miktex-hitex-bin-x64.tar.lzma
+2022/10/30 | 169678 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
+2022/10/30 | 109650 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma
+2022/10/30 | 18383 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
+2022/10/30 | 30571 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
+2022/10/30 | 682214 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma
+2022/10/30 | 599105 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
+2022/10/30 | 527570 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
+2022/10/30 | 103599 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
+2022/10/30 | 2023133 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
+2022/10/30 | 74099 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
+2022/10/30 | 32075 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma
+2022/10/30 | 8826 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
+2022/10/30 | 209139 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
+2022/10/30 | 286685 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
+2022/10/30 | 104923 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma
+2022/10/30 | 140012 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
+2022/10/30 | 325482 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma
+2022/10/30 | 181725 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
+2022/10/30 | 55320 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
+2022/10/30 | 35230 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
+2022/10/30 | 43619 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
+2022/10/30 | 48037 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
+2022/10/30 | 52370 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
+2022/10/30 | 213848 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma
+2022/10/30 | 41180 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma
+2022/10/30 | 824996 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
+2022/10/30 | 203420 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
+2022/10/30 | 245152 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
+2022/10/30 | 88484 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
+2022/10/30 | 1323744 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
+2022/10/30 | 23951 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
+2022/10/30 | 37507 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
+2022/10/30 | 72979 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
+2022/10/30 | 58633 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
+2022/10/30 | 769653 | systems/win32/miktex/tm/packages/next/miktex-ptex-bin-x64.tar.lzma
+2022/10/30 | 1503055 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
+2022/10/30 | 52627 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma
+2022/10/30 | 63803 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma
+2022/10/30 | 27464 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
+2022/10/30 | 18510 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma
+2022/10/30 | 70939 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
+2022/10/30 | 173177 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
+2022/10/30 | 68147 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
+2022/10/30 | 107439 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
+2022/10/30 | 2821671 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
+2022/10/30 | 62360 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
+2022/10/30 | 41192 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma
+2022/10/30 | 33862 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
+2022/10/30 | 73684 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
+2022/10/30 | 352465 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
+2022/10/30 | 57502 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin-x64.tar.lzma
+2022/10/30 | 630437 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma
+2022/10/30 | 43528 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
+2022/10/30 | 299957 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
+2022/10/30 | 1505326 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
+2022/10/30 | 1384950 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
+2022/10/30 | 14434 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma
2019/03/12 | 1412 | systems/win32/miktex/tm/packages/nextpage.tar.lzma
-2022/10/29 | 1172 | systems/win32/miktex/tm/packages/next/pr.ini
+2022/10/30 | 1172 | systems/win32/miktex/tm/packages/next/pr.ini
2018/07/06 | 145915 | systems/win32/miktex/tm/packages/nexus-otf.tar.lzma
2017/03/30 | 191149 | systems/win32/miktex/tm/packages/nfssext-cfr.tar.lzma
2012/12/20 | 612251 | systems/win32/miktex/tm/packages/nicefilelist.tar.lzma
@@ -304190,7 +304179,7 @@
2022/02/22 | 6917 | systems/win32/miktex/tm/packages/preview.tar.lzma
2019/06/20 | 375963 | systems/win32/miktex/tm/packages/prftree.tar.lzma
2021/04/23 | 274028 | systems/win32/miktex/tm/packages/principia.tar.lzma
-2022/10/29 | 990 | systems/win32/miktex/tm/packages/pr.ini
+2022/10/30 | 990 | systems/win32/miktex/tm/packages/pr.ini
2010/09/27 | 248469 | systems/win32/miktex/tm/packages/printlen.tar.lzma
2008/06/17 | 77313 | systems/win32/miktex/tm/packages/proba.tar.lzma
2017/07/12 | 988486 | systems/win32/miktex/tm/packages/probsoln.tar.lzma
@@ -306178,7 +306167,7 @@
2014/07/05 | 611 | systems/win32/yandy/README
2014/07/05 | 1004628 | systems/win32/yandy/yandy-src.tar.xz
2014/07/05 | 1012416 | systems/win32/yandy.zip
-2022/10/30 | 186 | timestamp
+2022/10/31 | 186 | timestamp
2002/08/26 | 61898 | usergrps/dante/antrag.pdf
2002/08/26 | 118217 | usergrps/dante/antrag.ps
2022/02/28 | 917 | usergrps/dante/dtk/doc/beispiel.bib
diff --git a/FILES.byname.gz b/FILES.byname.gz
index 96c821b337..796645e5c3 100644
--- a/FILES.byname.gz
+++ b/FILES.byname.gz
Binary files differ
diff --git a/FILES.last07days b/FILES.last07days
index aac50e2d13..2917c62275 100644
--- a/FILES.last07days
+++ b/FILES.last07days
@@ -1,182 +1,491 @@
-2022/10/29 | 996929 | macros/latex/contrib/eolang.zip
-2022/10/29 | 990 | systems/win32/miktex/tm/packages/pr.ini
-2022/10/29 | 969068 | macros/latex/contrib/eolang/eolang.pdf
-2022/10/29 | 95468 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
-2022/10/29 | 88483 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
-2022/10/29 | 8826 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
-2022/10/29 | 824996 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
-2022/10/29 | 81448 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma
+2022/10/30 | 990 | systems/win32/miktex/tm/packages/pr.ini
+2022/10/30 | 9860 | systems/texlive/tlnet/archive/huawei.source.r64848.tar.xz
+2022/10/30 | 984 | macros/luatex/latex/luaoptions/luaoptionsmanual.cls
+2022/10/30 | 9843 | support/latexindent/LatexIndent/Lines.pm
+2022/10/30 | 983 | support/lyluatex/lyluatexmanual.cls
+2022/10/30 | 97205 | support/lyluatex/lyluatex.tex
+2022/10/30 | 95468 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
+2022/10/30 | 941916 | systems/texlive/tlnet/archive/gillius.r64859.tar.xz
+2022/10/30 | 933144 | graphics/pgf/contrib/bodeplot.zip
+2022/10/30 | 9122 | macros/latex/contrib/ffcode/ffcode.dtx
+2022/10/30 | 910334 | graphics/pgf/contrib/bodeplot/bodeplot.dtx
+2022/10/30 | 88484 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
+2022/10/30 | 8829 | support/latexindent/LatexIndent/IfElseFi.pm
+2022/10/30 | 8826 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
+2022/10/30 | 881 | macros/luatex/latex/luaoptions/README.md
+2022/10/30 | 880404 | systems/texlive/tlnet/archive/eolang.doc.r64847.tar.xz
+2022/10/30 | 8700045 | support/latexindent/bin/windows/latexindent.exe
+2022/10/30 | 8462 | support/latexindent/LatexIndent/FileExtension.pm
+2022/10/30 | 8372 | systems/texlive/tlnet/archive/eolang.source.r64847.tar.xz
+2022/10/30 | 836 | support/latexindent/LatexIndent/Version.pm
+2022/10/30 | 8322 | macros/luatex/latex/luaoptions/luaoptions.tex
+2022/10/30 | 827 | macros/luatex/latex/luaoptions/luaoptions.sty
+2022/10/30 | 824996 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
+2022/10/30 | 81449 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma
+2022/10/30 | 8139 | macros/latex/contrib/pkuthss/tex/pkuword.eps
+2022/10/30 | 8078 | macros/latex/contrib/pkuthss/doc/readme/pkuthss.bib
+2022/10/30 | 79064 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma
+2022/10/30 | 7844 | macros/latex/contrib/biblatex-contrib/biblatex-caspervector/doc/ChangeLog.txt
+2022/10/30 | 777678 | macros/xetex/latex/xepersian/xepersian.pdf
+2022/10/30 | 777364 | systems/texlive/tlnet/archive/huawei.doc.r64848.tar.xz
+2022/10/30 | 77212 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma
+2022/10/30 | 769653 | systems/win32/miktex/tm/packages/next/miktex-ptex-bin-x64.tar.lzma
+2022/10/30 | 74099 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
+2022/10/30 | 73684 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
+2022/10/30 | 7329 | support/latexindent/LatexIndent/BackUpFileProcedure.pm
+2022/10/30 | 73264 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
+2022/10/30 | 72979 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
+2022/10/30 | 7280 | support/latexindent/LatexIndent/MandatoryArgument.pm
+2022/10/30 | 7161 | support/latexindent/documentation/figure-schematic.png
+2022/10/30 | 71387 | macros/xetex/latex/xepersian/xepersian-doc-basics.ltx
+2022/10/30 | 712 | systems/texlive/tlnet/archive/twemoji-colr.doc.r64854.tar.xz
+2022/10/30 | 70939 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
+2022/10/30 | 7065 | macros/latex/contrib/pkuthss/doc/readme/chap/pkuthss-chap1.tex
+2022/10/30 | 6964 | support/latexindent/LatexIndent/TrailingComments.pm
+2022/10/30 | 684 | macros/latex/contrib/pkuthss/README.txt
+2022/10/30 | 682214 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma
+2022/10/30 | 68147 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
+2022/10/30 | 6808 | support/latexindent/LatexIndent/Environment.pm
+2022/10/30 | 6694 | support/latexindent/LatexIndent/Item.pm
+2022/10/30 | 668296 | systems/win32/miktex/tm/packages/files.csv.lzma
+2022/10/30 | 667232 | systems/win32/miktex/tm/packages/next/files.csv.lzma
+2022/10/30 | 6522 | support/latexindent/LatexIndent/OptionalArgument.pm
+2022/10/30 | 65130 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
+2022/10/30 | 6508 | systems/texlive/tlnet/archive/pdflscape.source.r64851.tar.xz
+2022/10/30 | 65059 | support/latexindent/LatexIndent/AlignmentAtAmpersand.pm
+2022/10/30 | 641 | macros/latex/contrib/eolang/eolang.bib
+2022/10/30 | 6404764 | systems/texlive/tlnet/archive/jeuxcartes.doc.r64850.tar.xz
+2022/10/30 | 6389393 | support/latexindent/bin/macos/latexindent
+2022/10/30 | 63803 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma
+2022/10/30 | 6378 | macros/luatex/latex/luaoptions/luaoptions-lib.lua
+2022/10/30 | 63241 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma
+2022/10/30 | 632099 | install/macros/latex/contrib/biblatex-contrib/biblatex-caspervector.tds.zip
+2022/10/30 | 630555 | macros/latex/contrib/biblatex-contrib/biblatex-caspervector.zip
+2022/10/30 | 630437 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma
+2022/10/30 | 6280 | macros/latex/contrib/pkuthss/tex/pkuword.pdf
+2022/10/30 | 62360 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
+2022/10/30 | 6159922 | support/latexindent/bin/linux/latexindent
+2022/10/30 | 6023 | support/latexindent/LatexIndent/Else.pm
+2022/10/30 | 599105 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
+2022/10/30 | 58 | support/lyluatex/latexmkrc
+2022/10/30 | 58 | macros/luatex/latex/luaoptions/latexmkrc
+2022/10/30 | 58633 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
+2022/10/30 | 5834574 | systems/texlive/tlnet/install-tl-unx.tar.gz
+2022/10/30 | 581228 | systems/texlive/tlnet/archive/twemoji-colr.r64854.tar.xz
+2022/10/30 | 5809 | support/latexindent/LatexIndent/UnNamedGroupingBracesBrackets.pm
+2022/10/30 | 5804 | macros/latex/contrib/pkuthss/doc/readme/chap/pkuthss-chap3.tex
+2022/10/30 | 57506 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
+2022/10/30 | 57502 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin-x64.tar.lzma
+2022/10/30 | 57318 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
+2022/10/30 | 565082 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
+2022/10/30 | 5642836 | systems/texlive/tlnet/archive/jeuxcartes.r64850.tar.xz
+2022/10/30 | 5612 | systems/texlive/tlnet/archive/iexec.source.r64849.tar.xz
+2022/10/30 | 55320 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
+2022/10/30 | 5463 | macros/latex/contrib/pkuthss/doc/example/thesis.tex
+2022/10/30 | 5447 | macros/xetex/latex/xepersian/xepersian-doc-envcs.ltx
+2022/10/30 | 54383 | support/latexindent/documentation/latexindent-yaml-schema.json
+2022/10/30 | 5430 | support/latexindent/LatexIndent/KeyEqualsValuesBraces.pm
+2022/10/30 | 5390 | support/latexindent/LatexIndent/Check.pm
+2022/10/30 | 532 | macros/latex/contrib/biblatex-contrib/biblatex-caspervector/README.txt
+2022/10/30 | 5284 | systems/texlive/tlnet/archive/transparent.source.r64852.tar.xz
+2022/10/30 | 527570 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
+2022/10/30 | 52627 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma
+2022/10/30 | 52370 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
+2022/10/30 | 5206 | support/latexindent/documentation/contributors.bib
+2022/10/30 | 52037 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma
+2022/10/30 | 518498 | install/macros/latex/contrib/pkuthss.tds.zip
+2022/10/30 | 514814 | macros/latex/contrib/pkuthss.zip
+2022/10/30 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+2022/10/30 | 488622 | macros/latex/contrib/ffcode.zip
+2022/10/30 | 48856 | support/latexindent/LatexIndent/GetYamlSettings.pm
+2022/10/30 | 48852 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
+2022/10/30 | 487461 | macros/latex/contrib/ffcode/ffcode.pdf
+2022/10/30 | 481893 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma
+2022/10/30 | 4816 | support/latexindent/LatexIndent/BlankLines.pm
+2022/10/30 | 48037 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
+2022/10/30 | 47687 | macros/latex/contrib/eolang/cactus.pdf
+2022/10/30 | 461 | macros/latex/contrib/pkuthss/doc/example/latexmkrc
+2022/10/30 | 461932 | systems/texlive/tlnet/archive/hep-reference.doc.r64853.tar.xz
+2022/10/30 | 46052 | systems/texlive/tlnet/archive/linguisticspro.doc.r64858.tar.xz
+2022/10/30 | 45795 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
+2022/10/30 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
+2022/10/30 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
+2022/10/30 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
+2022/10/30 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
+2022/10/30 | 454 | macros/xetex/latex/xepersian/xepersian-doc.ltx
+2022/10/30 | 4468 | systems/texlive/tlnet/archive/hep-reference.source.r64853.tar.xz
+2022/10/30 | 44673 | support/lyluatex/lyluatex.lua
+2022/10/30 | 44096 | support/latexindent/documentation/logo.png
+2022/10/30 | 4402 | support/latexindent/documentation/latex-indent.bib
+2022/10/30 | 43890 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
+2022/10/30 | 4365 | support/latexindent/LatexIndent/RoundBrackets.pm
+2022/10/30 | 43619 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
+2022/10/30 | 43528 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
+2022/10/30 | 4340 | support/latexindent/LatexIndent/NamedGroupingBracesBrackets.pm
+2022/10/30 | 422980 | systems/texlive/tlnet/archive/texlive-scripts.doc.r64843.tar.xz
+2022/10/30 | 4188 | systems/texlive/tlnet/archive/association-matrix.r64845.tar.xz
+2022/10/30 | 4149 | macros/xetex/latex/xepersian/xepersian-doc-preamble.ltx
+2022/10/30 | 41192 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma
+2022/10/30 | 41180 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma
+2022/10/30 | 410 | macros/xetex/latex/xepersian/xepersian-doc-boolean.ltx
+2022/10/30 | 40 | macros/latex/contrib/ffcode/DEPENDS.txt
+2022/10/30 | 408105 | support/latexindent/documentation/latexindent.tex
+2022/10/30 | 4012760 | biblio/ctan-bibdata.zip
+2022/10/30 | 3996 | systems/texlive/tlnet/archive/eolang.r64847.tar.xz
+2022/10/30 | 39904 | macros/luatex/latex/luaoptions.zip
+2022/10/30 | 3957 | macros/latex/contrib/pkuthss/tex/pkulogo.eps
+2022/10/30 | 394144 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
+2022/10/30 | 393884 | macros/latex/contrib/biblatex-contrib/biblatex-caspervector/doc/caspervector.pdf
+2022/10/30 | 38725 | macros/xetex/latex/xepersian/ftxe-0.12.py
+2022/10/30 | 3775 | macros/latex/contrib/pkuthss/doc/example/chap/origin.tex
+2022/10/30 | 37507 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
+2022/10/30 | 3747 | support/latexindent/LatexIndent/Replacement.pm
+2022/10/30 | 3720 | macros/unicodetex/latex/bithesis/bithesis.ins
+2022/10/30 | 37051 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
+2022/10/30 | 368064 | systems/texlive/tlnet/archive/accanthis.r64844.tar.xz
+2022/10/30 | 364 | macros/latex/contrib/pkuthss/doc/example/Make.bat
+2022/10/30 | 3620853 | biblio/ctan-bibdata/ctan.pdf
+2022/10/30 | 3530 | macros/latex/contrib/pkuthss/tex/pkulogo.pdf
+2022/10/30 | 35265 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
+2022/10/30 | 352465 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
+2022/10/30 | 35230 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
+2022/10/30 | 348380 | macros/latex/contrib/pkuthss/doc/pkuthss.pdf
+2022/10/30 | 3482 | support/latexindent/LatexIndent/HorizontalWhiteSpace.pm
+2022/10/30 | 343317 | macros/xetex/latex/xepersian/xepersian.dtx
+2022/10/30 | 3410 | support/latexindent/latexindent.pl
+2022/10/30 | 33862 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
+2022/10/30 | 3339 | support/latexindent/LatexIndent/Tokens.pm
+2022/10/30 | 3305 | macros/latex/contrib/pkuthss/doc/readme/pkuthss.tex
+2022/10/30 | 325 | support/lyluatex/Contributors.md
+2022/10/30 | 325979 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
+2022/10/30 | 325482 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma
+2022/10/30 | 325444 | systems/texlive/tlnet/archive/iexec.doc.r64849.tar.xz
+2022/10/30 | 320 | support/lyluatex/ly/fonts.ly
+2022/10/30 | 32075 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma
+2022/10/30 | 31587 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
+2022/10/30 | 31563 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
+2022/10/30 | 314616 | systems/texlive/tlnet/archive/pdflscape.doc.r64851.tar.xz
+2022/10/30 | 3099 | macros/xetex/latex/xepersian/xepersian-doc-captions.ltx
+2022/10/30 | 3084 | systems/texlive/tlnet/archive/debate.source.r64846.tar.xz
+2022/10/30 | 30571 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
+2022/10/30 | 3035 | macros/latex/contrib/pkuthss/doc/readme/ChangeLog-upto-1.3.txt
+2022/10/30 | 300388 | systems/texlive/tlnet/archive/accanthis.doc.r64844.tar.xz
+2022/10/30 | 299957 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
+2022/10/30 | 299956 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
+2022/10/30 | 2960 | support/lyluatex/README.md
+2022/10/30 | 295945 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
+2022/10/30 | 294 | macros/latex/contrib/pkuthss/doc/example/thesis.bib
+2022/10/30 | 288 | macros/latex/contrib/pkuthss/doc/example/chap/abs.tex
+2022/10/30 | 286685 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
+2022/10/30 | 28593 | macros/luatex/latex/luaoptions/luaoptions.pdf
+2022/10/30 | 285712 | systems/texlive/tlnet/archive/debate.doc.r64846.tar.xz
+2022/10/30 | 28511 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
+2022/10/30 | 2821671 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
+2022/10/30 | 27563 | macros/latex/contrib/eolang/eolang.dtx
+2022/10/30 | 275336 | systems/texlive/tlnet/archive/transparent.doc.r64852.tar.xz
+2022/10/30 | 27464 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
+2022/10/30 | 2743007 | biblio/ctan-bibdata/ctan.bib
+2022/10/30 | 27328 | support/latexindent/LatexIndent/Verbatim.pm
+2022/10/30 | 2713 | macros/latex/contrib/pkuthss/doc/readme/chap/pkuthss-intro.tex
+2022/10/30 | 270466 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
+2022/10/30 | 2701 | support/latexindent/LatexIndent/Switches.pm
+2022/10/30 | 2700300 | systems/texlive/tlnet/archive/simpleicons.r64855.tar.xz
+2022/10/30 | 2690 | support/latexindent/LatexIndent/Preamble.pm
+2022/10/30 | 268584 | systems/texlive/tlnet/archive/association-matrix.doc.r64845.tar.xz
+2022/10/30 | 2643 | macros/unicodetex/latex/bithesis/contributing-zh.md
+2022/10/30 | 2628 | macros/latex/contrib/ffcode/ffcode.ins
+2022/10/30 | 2628 | macros/latex/contrib/eolang/eolang.ins
+2022/10/30 | 2612 | systems/texlive/tlnet/archive/pdflscape.r64851.tar.xz
+2022/10/30 | 2609 | macros/xetex/latex/xepersian/xepersian-doc-intro.ltx
+2022/10/30 | 260132 | systems/texlive/tlnet/archive/huawei.r64848.tar.xz
+2022/10/30 | 25876 | macros/xetex/latex/xepersian/xepersian-doc-pkgs.ltx
+2022/10/30 | 256 | macros/luatex/latex/luaoptions/Contributors.md
+2022/10/30 | 25518528 | systems/texlive/tlnet/install-tl.zip
+2022/10/30 | 2525 | fonts/gillius/latex/gillius.sty
+2022/10/30 | 25119 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
+2022/10/30 | 251116 | systems/texlive/tlnet/archive/playfair.doc.r64857.tar.xz
+2022/10/30 | 247207 | systems/win32/miktex/tm/packages/next/miktex-hitex-bin-x64.tar.lzma
+2022/10/30 | 24633 | macros/latex/contrib/biblatex-contrib/biblatex-caspervector/doc/caspervector.bib
+2022/10/30 | 245152 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
+2022/10/30 | 24410 | support/latexindent/LatexIndent/Arguments.pm
+2022/10/30 | 2423428 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+2022/10/30 | 24212 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
+2022/10/30 | 2416 | systems/texlive/tlnet/archive/iexec.r64849.tar.xz
+2022/10/30 | 23969 | macros/latex/contrib/biblatex-contrib/biblatex-caspervector/doc/caspervector.tex
+2022/10/30 | 239667 | graphics/pgf/contrib/bodeplot/bodeplot.ins
+2022/10/30 | 23951 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
+2022/10/30 | 237 | macros/latex/contrib/pkuthss/doc/readme/latexmkrc
+2022/10/30 | 236749 | macros/xetex/latex/xepersian/xepersian-doc.pdf
+2022/10/30 | 2349 | macros/latex/contrib/pkuthss/doc/example/chap/copy.tex
+2022/10/30 | 2349 | macros/latex/contrib/biblatex-contrib/biblatex-caspervector/tex/caspervector-ay.bbx
+2022/10/30 | 2332 | macros/unicodetex/latex/bithesis/contributing.md
+2022/10/30 | 2320 | support/latexindent/LatexIndent/Logger.pm
+2022/10/30 | 231797 | graphics/pgf/contrib/bodeplot/README.md
+2022/10/30 | 22818 | support/latexindent/LatexIndent/Document.pm
+2022/10/30 | 227 | macros/latex/contrib/biblatex-contrib/biblatex-caspervector/doc/latexmkrc
+2022/10/30 | 2272 | systems/texlive/tlnet/archive/transparent.r64852.tar.xz
+2022/10/30 | 2272 | macros/latex/contrib/biblatex-contrib/biblatex-caspervector/doc/caspervector-ay.tex
+2022/10/30 | 2224 | macros/latex/contrib/pkuthss/doc/example/ctex-fontset-pkuthss.def
+2022/10/30 | 216008 | systems/texlive/tlnet/archive/gillius.doc.r64859.tar.xz
+2022/10/30 | 21564 | support/latexindent/LatexIndent/Indent.pm
+2022/10/30 | 213848 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma
+2022/10/30 | 212575 | macros/latex/contrib/biblatex-contrib/biblatex-caspervector/doc/caspervector-ay.pdf
+2022/10/30 | 2108 | macros/xetex/latex/xepersian/xepersian-doc-title.ltx
+2022/10/30 | 209139 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
+2022/10/30 | 20434885 | systems/texlive/tlnet/install-tl-windows.exe
+2022/10/30 | 20388 | support/latexindent/LatexIndent/Sentence.pm
+2022/10/30 | 203420 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
+2022/10/30 | 2028732 | support/lyluatex/lyluatex.pdf
+2022/10/30 | 2023133 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
+2022/10/30 | 2006 | support/latexindent/README
+2022/10/30 | 1994 | macros/latex/contrib/pkuthss/doc/readme/chap/pkuthss-ack.tex
+2022/10/30 | 1993 | macros/unicodetex/latex/bithesis/README.md
+2022/10/30 | 19920 | support/latexindent/defaultSettings.yaml
+2022/10/30 | 1982104 | systems/texlive/tlnet/archive/simpleicons.doc.r64855.tar.xz
+2022/10/30 | 196213 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
+2022/10/30 | 193944 | macros/unicodetex/latex/bithesis/bithesis.dtx
+2022/10/30 | 1920 | systems/texlive/tlnet/archive/hep-reference.r64853.tar.xz
+2022/10/30 | 1908612 | macros/generic/tracklang.zip
+2022/10/30 | 18510 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma
+2022/10/30 | 18383 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
+2022/10/30 | 18321 | support/latexindent/LatexIndent/ModifyLineBreaks.pm
+2022/10/30 | 18304 | macros/xetex/latex/xepersian/img/ireland.jpg
+2022/10/30 | 181725 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
+2022/10/30 | 1804 | fonts/gillius/README
+2022/10/30 | 17979 | support/latexindent/LatexIndent/Wrap.pm
+2022/10/30 | 17800554 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
+2022/10/30 | 173177 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
+2022/10/30 | 172672 | systems/texlive/tlnet/archive/poiretone.r64856.tar.xz
+2022/10/30 | 1721181 | install/fonts/gillius.tds.zip
+2022/10/30 | 169678 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
+2022/10/30 | 1692229 | fonts/gillius.zip
+2022/10/30 | 1688 | systems/texlive/tlnet/archive/debate.r64846.tar.xz
+2022/10/30 | 1682 | macros/latex/contrib/pkuthss/tex/pkuthss-utf8.def
+2022/10/30 | 1679528 | systems/texlive/tlnet/archive/playfair.r64857.tar.xz
+2022/10/30 | 1678 | biblio/ctan-bibdata/biblatex-ctan/ctan.bbx
+2022/10/30 | 1664 | macros/latex/contrib/biblatex-contrib/biblatex-caspervector/tex/caspervector.cbx
+2022/10/30 | 16634 | macros/latex/contrib/pkuthss/tex/pkuthss.cls
+2022/10/30 | 16627 | macros/latex/contrib/pkuthss/doc/readme/chap/pkuthss-chap2.tex
+2022/10/30 | 1657005 | support/lyluatex.zip
+2022/10/30 | 1636 | systems/texlive/tlnet/archive/collection-mathscience.r64853.tar.xz
+2022/10/30 | 159 | macros/latex/contrib/eolang/DEPENDS.txt
+2022/10/30 | 15976 | macros/xetex/latex/xepersian/dkun-0.3.py
+2022/10/30 | 1593 | macros/latex/contrib/pkuthss/tex/pkuthss-gbk.def
+2022/10/30 | 158 | support/lyluatex/ly/eight-systems.ly
+2022/10/30 | 15867 | macros/xetex/latex/xepersian/dkun-0.4.py
+2022/10/30 | 1575 | macros/latex/contrib/pkuthss/tex/pkuthss.def
+2022/10/30 | 1569 | macros/latex/contrib/pkuthss/doc/readme/chap/pkuthss-copy.tex
+2022/10/30 | 1558 | support/latexindent/latexindent-module-installer.pl
+2022/10/30 | 155433 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
+2022/10/30 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
+2022/10/30 | 1531 | macros/latex/contrib/biblatex-contrib/biblatex-caspervector/tex/blx-caspervector-utf8.def
+2022/10/30 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
+2022/10/30 | 15217 | macros/latex/contrib/pkuthss/doc/readme/ChangeLog.txt
+2022/10/30 | 1507162 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
+2022/10/30 | 1505326 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
+2022/10/30 | 1503055 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
+2022/10/30 | 1500 | macros/latex/contrib/biblatex-contrib/biblatex-caspervector/tex/blx-caspervector-gbk.def
+2022/10/30 | 14902 | macros/latex/contrib/biblatex-contrib/biblatex-caspervector/tex/blx-caspervector-base.def
+2022/10/30 | 1489 | macros/latex/contrib/pkuthss/doc/example/spine.tex
+2022/10/30 | 1485 | support/latexindent/LatexIndent/DoubleBackSlash.pm
+2022/10/30 | 147 | macros/latex/contrib/pkuthss/doc/example/chap/chap3.tex
+2022/10/30 | 14616 | macros/xetex/latex/xepersian/img/weather/rain.jpg
+2022/10/30 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
+2022/10/30 | 1458152 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
+2022/10/30 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+2022/10/30 | 14434 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma
+2022/10/30 | 140012 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
+2022/10/30 | 1390 | macros/xetex/latex/xepersian/README
+2022/10/30 | 138 | macros/latex/contrib/pkuthss/doc/example/chap/chap1.tex
+2022/10/30 | 13890 | support/latexindent/LatexIndent/Special.pm
+2022/10/30 | 1386224 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
+2022/10/30 | 1384950 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
+2022/10/30 | 13804 | macros/xetex/latex/xepersian/undk-0.6.py
+2022/10/30 | 1377940 | systems/texlive/tlnet/archive/linguisticspro.r64858.tar.xz
+2022/10/30 | 1376 | macros/latex/contrib/ffcode/README.md
+2022/10/30 | 135466 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
+2022/10/30 | 1352 | macros/latex/contrib/eolang/README.md
+2022/10/30 | 13420 | support/latexindent/LatexIndent/HiddenChildren.pm
+2022/10/30 | 133 | macros/latex/contrib/pkuthss/doc/example/chap/encl1.tex
+2022/10/30 | 133 | macros/latex/contrib/pkuthss/doc/example/chap/chap2.tex
+2022/10/30 | 133 | macros/latex/contrib/pkuthss/doc/example/chap/ack.tex
+2022/10/30 | 1323744 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
+2022/10/30 | 13088 | macros/xetex/latex/xepersian/img/weather/clouds.jpg
+2022/10/30 | 12964 | systems/texlive/tlnet/archive/poiretone.doc.r64856.tar.xz
+2022/10/30 | 1290311 | install/macros/xetex/latex/xepersian.tds.zip
+2022/10/30 | 12897 | support/latexindent/LatexIndent/LogFile.pm
+2022/10/30 | 12646 | support/latexindent/LatexIndent/Braces.pm
+2022/10/30 | 12348 | macros/xetex/latex/xepersian/unldk-0.2.py
+2022/10/30 | 1219 | macros/latex/contrib/pkuthss/doc/readme/chap/pkuthss-abs.tex
+2022/10/30 | 1172 | systems/win32/miktex/tm/packages/next/pr.ini
+2022/10/30 | 1170 | macros/latex/contrib/pkuthss/doc/readme/chap/pkuthss-encl1.tex
+2022/10/30 | 1161751 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
+2022/10/30 | 115 | macros/latex/contrib/pkuthss/doc/example/ctexopts.cfg
+2022/10/30 | 115581 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
+2022/10/30 | 1143 | macros/latex/contrib/pkuthss/doc/readme/chap/pkuthss-concl.tex
+2022/10/30 | 113684 | systems/texlive/tlnet/archive/texlive-scripts.r64843.tar.xz
+2022/10/30 | 11300 | support/latexindent/LatexIndent/FileContents.pm
+2022/10/30 | 112980 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma
+2022/10/30 | 112876 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
+2022/10/30 | 1124966 | macros/xetex/latex/xepersian.zip
+2022/10/30 | 1119 | macros/latex/contrib/biblatex-contrib/biblatex-caspervector/tex/caspervector-ay.cbx
+2022/10/30 | 11142 | support/latexindent/LatexIndent/Heading.pm
+2022/10/30 | 1105 | support/lyluatex/lyluatexbase.cls
+2022/10/30 | 1105223 | support/latexindent/documentation/latexindent.pdf
+2022/10/30 | 11009879 | support/latexindent.zip
+2022/10/30 | 1099 | macros/luatex/latex/luaoptions/LICENSE
+2022/10/30 | 109650 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma
+2022/10/30 | 1090 | support/lyluatex/LICENSE
+2022/10/30 | 10896 | macros/xetex/latex/xepersian/img/weather/sun.jpg
+2022/10/30 | 1083 | macros/latex/contrib/ffcode/LICENSE.txt
+2022/10/30 | 1083 | macros/latex/contrib/eolang/LICENSE.txt
+2022/10/30 | 107439 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
+2022/10/30 | 1073024 | macros/unicodetex/latex/bithesis.zip
+2022/10/30 | 1066728 | graphics/pgf/contrib/bodeplot/bodeplot.pdf
+2022/10/30 | 1063401 | macros/latex/contrib/eolang.zip
+2022/10/30 | 10622 | support/latexindent/LatexIndent/Command.pm
+2022/10/30 | 1061 | macros/latex/contrib/biblatex-contrib/biblatex-caspervector/tex/caspervector.bbx
+2022/10/30 | 104923 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma
+2022/10/30 | 1043619 | macros/unicodetex/latex/bithesis/bithesis.pdf
+2022/10/30 | 1039 | macros/luatex/latex/luaoptions/luaoptionsbase.cls
+2022/10/30 | 10371 | macros/latex/contrib/pkuthss/doc/readme/pkuthss-english.patch
+2022/10/30 | 103719 | macros/latex/contrib/pkuthss/doc/example.pdf
+2022/10/30 | 1036825 | macros/latex/contrib/eolang/eolang.pdf
+2022/10/30 | 103599 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
+2022/10/30 | 103246 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma
+2022/10/30 | 10254 | support/lyluatex/lyluatex.sty
+2022/10/30 | 10161 | macros/luatex/latex/luaoptions/luaoptions.lua
+2022/10/29 | 941 | macros/generic/tracklang/samples/regions/regions.sty
+2022/10/29 | 930 | macros/generic/tracklang/README
+2022/10/29 | 848 | macros/generic/tracklang/samples/animals/animals2.sty
2022/10/29 | 804104 | macros/latex/contrib/huawei/huawei.pdf
-2022/10/29 | 79064 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma
-2022/10/29 | 77212 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma
-2022/10/29 | 769652 | systems/win32/miktex/tm/packages/next/miktex-ptex-bin-x64.tar.lzma
-2022/10/29 | 74099 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
-2022/10/29 | 73685 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
-2022/10/29 | 73264 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
-2022/10/29 | 72980 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
-2022/10/29 | 70939 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
-2022/10/29 | 682214 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma
-2022/10/29 | 68147 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
+2022/10/29 | 784 | macros/generic/tracklang/samples/animals/animals.sty
+2022/10/29 | 781 | macros/generic/tracklang/samples/sample-tracklang4.tex
+2022/10/29 | 764697 | macros/generic/tracklang/tracklang-manual.pdf
+2022/10/29 | 7362 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
+2022/10/29 | 689 | macros/generic/tracklang/samples/sample-tracklang5.tex
+2022/10/29 | 6869 | macros/generic/tracklang/samples/sample-tracklang4.pdf
2022/10/29 | 680 | macros/latex/contrib/association-matrix/README.md
-2022/10/29 | 668296 | systems/win32/miktex/tm/packages/files.csv.lzma
-2022/10/29 | 667232 | systems/win32/miktex/tm/packages/next/files.csv.lzma
2022/10/29 | 65 | macros/latex/contrib/association-matrix/DEPENDS.txt
-2022/10/29 | 65130 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
-2022/10/29 | 641 | macros/latex/contrib/eolang/eolang.bib
-2022/10/29 | 63803 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma
-2022/10/29 | 63241 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma
-2022/10/29 | 630433 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma
-2022/10/29 | 62359 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
-2022/10/29 | 599105 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
-2022/10/29 | 58632 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
-2022/10/29 | 5834398 | systems/texlive/tlnet/install-tl-unx.tar.gz
-2022/10/29 | 57506 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
-2022/10/29 | 57501 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin-x64.tar.lzma
-2022/10/29 | 57317 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
-2022/10/29 | 565082 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
+2022/10/29 | 630 | macros/generic/tracklang/samples/regions/sample-regions2-map.tex
+2022/10/29 | 629107 | macros/generic/tracklang/tracklang-code.pdf
+2022/10/29 | 562 | macros/generic/tracklang/samples/regions/sample-regions2-map2.tex
2022/10/29 | 556 | macros/latex/contrib/transparent/README.md
-2022/10/29 | 55320 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
-2022/10/29 | 527570 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
-2022/10/29 | 52627 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma
-2022/10/29 | 52369 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
-2022/10/29 | 52037 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma
2022/10/29 | 51 | macros/latex/contrib/iexec/DEPENDS.txt
2022/10/29 | 5003 | macros/latex/contrib/debate/debate.dtx
-2022/10/29 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
-2022/10/29 | 48852 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
2022/10/29 | 484 | macros/latex/contrib/huawei/DEPENDS.txt
-2022/10/29 | 481894 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma
-2022/10/29 | 48038 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
-2022/10/29 | 47687 | macros/latex/contrib/eolang/cactus.pdf
-2022/10/29 | 45796 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
-2022/10/29 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
-2022/10/29 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
-2022/10/29 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
-2022/10/29 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
-2022/10/29 | 43890 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
-2022/10/29 | 43618 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
-2022/10/29 | 43527 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
-2022/10/29 | 41190 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma
-2022/10/29 | 41179 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma
+2022/10/29 | 4436 | macros/generic/tracklang/CHANGES
2022/10/29 | 40 | macros/latex/contrib/debate/DEPENDS.txt
2022/10/29 | 402 | macros/latex/contrib/pdflscape/README.md
-2022/10/29 | 4012177 | biblio/ctan-bibdata.zip
-2022/10/29 | 394144 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
-2022/10/29 | 37507 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
-2022/10/29 | 37051 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
-2022/10/29 | 3620091 | biblio/ctan-bibdata/ctan.pdf
-2022/10/29 | 35265 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
-2022/10/29 | 352464 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
-2022/10/29 | 35232 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
-2022/10/29 | 33863 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
+2022/10/29 | 3823 | macros/generic/tracklang/samples/animals/sample-animals-de-poly.pdf
+2022/10/29 | 3823 | macros/generic/tracklang/samples/animals/sample-animals2-de4.pdf
+2022/10/29 | 376 | macros/generic/tracklang/samples/regions/sample-regions2-map3.tex
+2022/10/29 | 359 | macros/generic/tracklang/samples/regions/sample-regions2-nomap.tex
+2022/10/29 | 3560 | macros/generic/tracklang/samples/animals/sample-animals-poly.pdf
+2022/10/29 | 3559 | macros/generic/tracklang/samples/animals/sample-animals2-poly.pdf
2022/10/29 | 331210 | macros/latex/contrib/iexec.zip
+2022/10/29 | 327 | macros/generic/tracklang/samples/animals/sample-animals-babel.tex
2022/10/29 | 326484 | macros/latex/contrib/iexec/iexec.pdf
-2022/10/29 | 325981 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
-2022/10/29 | 325485 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma
2022/10/29 | 323238 | macros/latex/contrib/pdflscape/pdflscape.pdf
-2022/10/29 | 32074 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma
2022/10/29 | 319157 | macros/latex/contrib/pdflscape.zip
-2022/10/29 | 31588 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
-2022/10/29 | 31562 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
-2022/10/29 | 30571 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
+2022/10/29 | 313 | macros/generic/tracklang/samples/animals/animals2-en-GB.ldf
+2022/10/29 | 310 | macros/generic/tracklang/samples/animals/animals2-en-US.ldf
+2022/10/29 | 310371 | macros/generic/tracklang/tracklang.dtx
2022/10/29 | 30081 | macros/latex/contrib/huawei/huawei.dtx
-2022/10/29 | 299974 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
-2022/10/29 | 299960 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
-2022/10/29 | 295946 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
2022/10/29 | 289051 | macros/latex/contrib/debate/debate.pdf
2022/10/29 | 288816 | macros/latex/contrib/debate.zip
-2022/10/29 | 286685 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
-2022/10/29 | 28510 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
-2022/10/29 | 2821672 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
2022/10/29 | 281867 | macros/latex/contrib/transparent/transparent.pdf
2022/10/29 | 278320 | macros/latex/contrib/transparent.zip
-2022/10/29 | 27464 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
-2022/10/29 | 2742861 | biblio/ctan-bibdata/ctan.bib
+2022/10/29 | 27666 | macros/generic/tracklang/samples/regions/sample-regions2-map.pdf
+2022/10/29 | 27515 | macros/generic/tracklang/samples/regions/sample-regions2-map2.pdf
2022/10/29 | 272228 | macros/latex/contrib/association-matrix.zip
-2022/10/29 | 270466 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
+2022/10/29 | 271 | macros/generic/tracklang/samples/animals/sample-animals2.tex
+2022/10/29 | 27134 | macros/generic/tracklang/samples/regions/sample-regions2-nomap.pdf
+2022/10/29 | 26590 | macros/generic/tracklang/samples/regions/sample-regions2-map3.pdf
2022/10/29 | 264256 | macros/latex/contrib/association-matrix/association-matrix.pdf
-2022/10/29 | 2628 | macros/latex/contrib/eolang/eolang.ins
2022/10/29 | 2628 | macros/latex/contrib/debate/debate.ins
2022/10/29 | 2626 | macros/latex/contrib/huawei/huawei.ins
2022/10/29 | 2625 | macros/latex/contrib/iexec/iexec.ins
-2022/10/29 | 25518566 | systems/texlive/tlnet/install-tl.zip
+2022/10/29 | 257 | macros/generic/tracklang/samples/regions/sample-regions.tex
2022/10/29 | 253724 | macros/latex/contrib/huawei/huawei-cover-picture.pdf
-2022/10/29 | 25212 | macros/latex/contrib/eolang/eolang.dtx
-2022/10/29 | 25119 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
-2022/10/29 | 247207 | systems/win32/miktex/tm/packages/next/miktex-hitex-bin-x64.tar.lzma
-2022/10/29 | 245152 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
-2022/10/29 | 2422448 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
-2022/10/29 | 24212 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
-2022/10/29 | 23950 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
+2022/10/29 | 249 | macros/generic/tracklang/samples/animals/animals-english.ldf
+2022/10/29 | 249 | macros/generic/tracklang/samples/animals/animals2-english.ldf
+2022/10/29 | 246 | macros/generic/tracklang/samples/animals/animals-german.ldf
+2022/10/29 | 246 | macros/generic/tracklang/samples/animals/animals2-german.ldf
+2022/10/29 | 23587 | macros/generic/tracklang/samples/regions/sample-regions2-manx.pdf
2022/10/29 | 23435 | macros/latex/contrib/pdflscape/pdflscape.dtx
-2022/10/29 | 213847 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma
-2022/10/29 | 209139 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
+2022/10/29 | 232 | macros/generic/tracklang/samples/animals/sample-animals-de-poly.tex
+2022/10/29 | 226 | macros/generic/tracklang/samples/regions/regions-IM.ldf
+2022/10/29 | 223 | macros/generic/tracklang/samples/animals/sample-animals.tex
+2022/10/29 | 221 | macros/generic/tracklang/samples/regions/regions-US.ldf
+2022/10/29 | 221 | macros/generic/tracklang/samples/regions/regions-GB.ldf
+2022/10/29 | 221 | macros/generic/tracklang/samples/regions/regions-CA.ldf
+2022/10/29 | 221 | macros/generic/tracklang/samples/regions/regions-BE.ldf
+2022/10/29 | 221 | macros/generic/tracklang/samples/animals/animals-en-US.ldf
+2022/10/29 | 221 | macros/generic/tracklang/samples/animals/animals-en-GB.ldf
+2022/10/29 | 215 | macros/generic/tracklang/samples/animals/sample-animals2-poly.tex
+2022/10/29 | 214 | macros/generic/tracklang/samples/animals/sample-animals-poly.tex
+2022/10/29 | 210917 | macros/generic/tracklang/tracklang-manual.tex
+2022/10/29 | 20758 | macros/generic/tracklang/samples/sample-tracklang3.pdf
+2022/10/29 | 20747 | macros/generic/tracklang/samples/sample-tracklang2.pdf
2022/10/29 | 2067085 | systems/doc/luatex.zip
-2022/10/29 | 20435279 | systems/texlive/tlnet/install-tl-windows.exe
-2022/10/29 | 203420 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
-2022/10/29 | 2023134 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
-2022/10/29 | 196213 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
+2022/10/29 | 20388 | macros/generic/tracklang/samples/sample-tracklang.pdf
+2022/10/29 | 19898 | macros/generic/tracklang/samples/sample-tracklang6.pdf
+2022/10/29 | 194 | macros/generic/tracklang/samples/animals/sample-animals2-de4.tex
+2022/10/29 | 1943892 | install/macros/generic/tracklang.tds.zip
+2022/10/29 | 193 | macros/generic/tracklang/samples/regions/regions-manx.ldf
2022/10/29 | 19039 | macros/latex/contrib/association-matrix/LICENCE
2022/10/29 | 1903744 | systems/texlive/tlnet/archive/luatex.doc.r64839.tar.xz
-2022/10/29 | 18511 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma
-2022/10/29 | 18382 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
-2022/10/29 | 181724 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
-2022/10/29 | 17795535 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
+2022/10/29 | 186 | macros/generic/tracklang/samples/regions/sample-regions2.tex
+2022/10/29 | 178 | macros/generic/tracklang/samples/animals/sample-animals2-de3.tex
+2022/10/29 | 17857 | macros/generic/tracklang/samples/sample-tracklang5.pdf
2022/10/29 | 17543 | macros/latex/contrib/transparent/transparent.dtx
-2022/10/29 | 173177 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
-2022/10/29 | 169679 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
-2022/10/29 | 1678 | biblio/ctan-bibdata/biblatex-ctan/ctan.bbx
+2022/10/29 | 173 | macros/generic/tracklang/samples/animals/sample-animals2-de.tex
+2022/10/29 | 172 | macros/generic/tracklang/samples/animals/sample-animals-de.tex
+2022/10/29 | 171 | macros/generic/tracklang/samples/regions/regions-german.ldf
+2022/10/29 | 166 | macros/generic/tracklang/samples/animals/sample-animals2-de2.tex
+2022/10/29 | 165 | macros/generic/tracklang/samples/regions/regions-dutch.ldf
+2022/10/29 | 164 | macros/generic/tracklang/samples/regions/regions-french.ldf
+2022/10/29 | 164 | macros/generic/tracklang/samples/regions/regions-english.ldf
2022/10/29 | 16338 | macros/latex/contrib/association-matrix/association-matrix.tex
-2022/10/29 | 155431 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
-2022/10/29 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
-2022/10/29 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
+2022/10/29 | 158 | macros/generic/tracklang/samples/regions/sample-regions2-manx.tex
+2022/10/29 | 15690 | macros/generic/tracklang/samples/animals/sample-animals-babel.pdf
+2022/10/29 | 15551 | macros/generic/tracklang/samples/regions/sample-regions2.pdf
+2022/10/29 | 1554 | macros/generic/tracklang/tracklang.ins
+2022/10/29 | 153 | macros/generic/tracklang/samples/regions/regions-italian.ldf
2022/10/29 | 1513 | macros/latex/contrib/huawei/README.md
2022/10/29 | 1512 | macros/latex/contrib/iexec/README.md
2022/10/29 | 15116 | macros/latex/contrib/iexec/iexec.dtx
-2022/10/29 | 1507333 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
-2022/10/29 | 1506393 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
-2022/10/29 | 1503054 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
-2022/10/29 | 146 | macros/latex/contrib/eolang/DEPENDS.txt
-2022/10/29 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
-2022/10/29 | 1458151 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
-2022/10/29 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
-2022/10/29 | 14434 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma
+2022/10/29 | 1459 | macros/generic/tracklang/samples/sample-tracklang3.tex
+2022/10/29 | 1454 | macros/generic/tracklang/samples/sample-tracklang.tex
+2022/10/29 | 1454 | macros/generic/tracklang/samples/sample-tracklang2.tex
+2022/10/29 | 14463 | macros/generic/tracklang/samples/animals/sample-animals-de.pdf
+2022/10/29 | 14463 | macros/generic/tracklang/samples/animals/sample-animals2-de.pdf
+2022/10/29 | 14463 | macros/generic/tracklang/samples/animals/sample-animals2-de2.pdf
+2022/10/29 | 14444 | macros/generic/tracklang/samples/animals/sample-animals2-de3.pdf
2022/10/29 | 14366 | macros/latex/contrib/association-matrix/association-matrix.sty
-2022/10/29 | 140012 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
-2022/10/29 | 1385541 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
-2022/10/29 | 1384033 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
-2022/10/29 | 135465 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
-2022/10/29 | 1352 | macros/latex/contrib/eolang/README.md
-2022/10/29 | 1323743 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
+2022/10/29 | 13996 | macros/generic/tracklang/samples/regions/sample-regions.pdf
+2022/10/29 | 13489 | macros/generic/tracklang/samples/animals/sample-animals.pdf
+2022/10/29 | 13489 | macros/generic/tracklang/samples/animals/sample-animals2.pdf
2022/10/29 | 12832 | systems/texlive/tlnet/archive/luatex.r64839.tar.xz
2022/10/29 | 1272 | macros/latex/contrib/debate/README.md
2022/10/29 | 12292663 | macros/latex/contrib/jeuxcartes.zip
-2022/10/29 | 1172 | systems/win32/miktex/tm/packages/next/pr.ini
-2022/10/29 | 1161751 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
-2022/10/29 | 115581 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
-2022/10/29 | 112979 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma
-2022/10/29 | 112879 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
-2022/10/29 | 109650 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma
+2022/10/29 | 1124 | macros/generic/tracklang/samples/regions/regions2.sty
2022/10/29 | 1083 | macros/latex/contrib/iexec/LICENSE.txt
2022/10/29 | 1083 | macros/latex/contrib/huawei/LICENSE.txt
-2022/10/29 | 1083 | macros/latex/contrib/eolang/LICENSE.txt
2022/10/29 | 1083 | macros/latex/contrib/debate/LICENSE.txt
-2022/10/29 | 107438 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
-2022/10/29 | 104921 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma
2022/10/29 | 1046327 | macros/latex/contrib/huawei.zip
-2022/10/29 | 103597 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
-2022/10/29 | 103246 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma
+2022/10/29 | 1041 | macros/generic/tracklang/samples/sample-tracklang6.tex
+2022/10/29 | 1023122 | macros/generic/tracklang/tracklang-manual.html
2022/10/28 | 98590 | systems/doc/luatex/luatex-tex.tex
2022/10/28 | 944948 | systems/texlive/tlnet/archive/tex4ht.r64837.tar.xz
2022/10/28 | 9148 | macros/latex/contrib/jeuxcartes/tex/CaJ-Tarot-10T.png
2022/10/28 | 894360 | systems/texlive/tlnet/archive/beebe.r64816.tar.xz
2022/10/28 | 889172 | systems/texlive/tlnet/archive/l3backend.doc.r64836.tar.xz
-2022/10/28 | 875488 | systems/texlive/tlnet/archive/eolang.doc.r64834.tar.xz
2022/10/28 | 8656 | systems/texlive/tlnet/archive/tikzmark.r64819.tar.xz
2022/10/28 | 8337 | macros/latex/contrib/jeuxcartes/tex/CaJ-Tarot-10P.png
2022/10/28 | 8152 | macros/latex/contrib/jeuxcartes/tex/CaJ-Tarot-8T.png
2022/10/28 | 8140 | macros/latex/contrib/jeuxcartes/tex/CaJ-Tarot-9T.png
-2022/10/28 | 8008 | systems/texlive/tlnet/archive/eolang.source.r64834.tar.xz
2022/10/28 | 795249 | install/fonts/accanthis.tds.zip
2022/10/28 | 787 | macros/latex/contrib/fixdif/README.md
2022/10/28 | 785161 | fonts/accanthis.zip
@@ -239,14 +548,12 @@
2022/10/28 | 5583 | macros/latex/contrib/jeuxcartes/tex/CaJ-Tarot-3T.png
2022/10/28 | 5569 | macros/latex/contrib/jeuxcartes/tex/CaJ-Tarot-4T.png
2022/10/28 | 5519 | macros/latex/contrib/jeuxcartes/tex/CaJ-Tarot-5P.png
-2022/10/28 | 5509864 | systems/texlive/tlnet/archive/jeuxcartes.doc.r64827.tar.xz
2022/10/28 | 55076 | macros/latex/contrib/jeuxcartes/tex/CaJ-Tarot-CC.png
2022/10/28 | 55019 | macros/latex/contrib/jeuxcartes/tex/CaJ-Tarot-CK.png
2022/10/28 | 55004 | macros/latex/contrib/jeuxcartes/tex/CaJ-Tarot-11AT.png
2022/10/28 | 54608 | macros/latex/contrib/jeuxcartes/tex/CaJ-Tarot-1AT.png
2022/10/28 | 54000 | macros/latex/contrib/jeuxcartes/tex/CaJ-Tarot-RC.png
2022/10/28 | 53517 | macros/latex/contrib/jeuxcartes/tex/CaJ-Tarot-VT.png
-2022/10/28 | 5328884 | systems/texlive/tlnet/archive/jeuxcartes.r64827.tar.xz
2022/10/28 | 52917 | macros/latex/contrib/jeuxcartes/tex/CaJ-Tarot-14AT.png
2022/10/28 | 5270 | macros/latex/contrib/jeuxcartes/tex/CaJ-Tarot-7C.png
2022/10/28 | 52460 | macros/latex/contrib/jeuxcartes/tex/CaJ-Tarot-DP.png
@@ -272,9 +579,7 @@
2022/10/28 | 4369 | macros/latex/contrib/jeuxcartes/tex/CaJ-Tarot-3K.png
2022/10/28 | 4293 | macros/latex/contrib/jeuxcartes/tex/CaJ-Tarot-4C.png
2022/10/28 | 4236 | macros/latex/contrib/jeuxcartes/tex/CaJ-Tarot-4K.png
-2022/10/28 | 422980 | systems/texlive/tlnet/archive/texlive-scripts.doc.r64830.tar.xz
2022/10/28 | 3982 | macros/latex/contrib/jeuxcartes/tex/CaJ-Tarot-2C.png
-2022/10/28 | 3900 | systems/texlive/tlnet/archive/eolang.r64834.tar.xz
2022/10/28 | 3885 | macros/latex/contrib/jeuxcartes/tex/CaJ-Tarot-2K.png
2022/10/28 | 3880 | macros/latex/contrib/jeuxcartes/tex/CaJ-Tarot-AT.png
2022/10/28 | 37180 | systems/texlive/tlnet/archive/spath3.source.r64818.tar.xz
@@ -321,7 +626,6 @@
2022/10/28 | 2585 | fonts/gillius/latex/gillius2.sty
2022/10/28 | 2574 | fonts/simpleicons/enc/simpleiconsNine.enc
2022/10/28 | 25683 | macros/latex/contrib/jeuxcartes/tex/CaJ-Uno-P4.png
-2022/10/28 | 2559 | fonts/gillius/latex/gillius.sty
2022/10/28 | 25529 | macros/latex/contrib/jeuxcartes/tex/Caj-Uno-PTB.png
2022/10/28 | 25528 | systems/texlive/tlnet/archive/spath3.r64818.tar.xz
2022/10/28 | 254 | fonts/simpleicons/tex/usimpleiconsTwo.fd
@@ -364,7 +668,6 @@
2022/10/28 | 1809 | fonts/poiretone/latex/PoiretOne.sty
2022/10/28 | 18077 | macros/latex/contrib/jeuxcartes/tex/CaJ-Uno-3V.png
2022/10/28 | 18072 | macros/latex/contrib/jeuxcartes/tex/CaJ-Uno-2B.png
-2022/10/28 | 1804 | fonts/gillius/README
2022/10/28 | 17926 | macros/latex/contrib/jeuxcartes/tex/CaJ-Uno-5B.png
2022/10/28 | 17900 | macros/latex/contrib/jeuxcartes/tex/CaJ-Uno-8B.png
2022/10/28 | 1786441 | systems/doc/luatex/luatex.pdf
@@ -380,13 +683,11 @@
2022/10/28 | 17298 | macros/latex/contrib/jeuxcartes/tex/CaJ-Uno-9R.png
2022/10/28 | 17243 | macros/latex/contrib/jeuxcartes/tex/CaJ-Uno-6R.png
2022/10/28 | 17239 | macros/latex/contrib/jeuxcartes/tex/CaJ-Uno-7V.png
-2022/10/28 | 1721197 | install/fonts/gillius.tds.zip
2022/10/28 | 17202 | macros/latex/contrib/jeuxcartes/tex/CaJ-Uno-0J.png
2022/10/28 | 17086 | macros/latex/contrib/jeuxcartes/tex/CaJ-Uno-7R.png
2022/10/28 | 17003 | macros/latex/contrib/jeuxcartes/tex/CaJ-Uno-9B.png
2022/10/28 | 16962 | macros/latex/contrib/jeuxcartes/tex/CaJ-Uno-4V.png
2022/10/28 | 16961 | macros/latex/contrib/jeuxcartes/tex/CaJ-Uno-6B.png
-2022/10/28 | 1692245 | fonts/gillius.zip
2022/10/28 | 16867 | macros/latex/contrib/fixdif/fixdif-zh-cn.tex
2022/10/28 | 16737 | macros/latex/contrib/jeuxcartes/tex/CaJ-Uno-4R.png
2022/10/28 | 16733 | macros/latex/contrib/jeuxcartes/tex/CaJ-Uno-2J.png
@@ -432,13 +733,11 @@
2022/10/28 | 119992 | systems/texlive/tlnet/archive/polyglossia.r64826.tar.xz
2022/10/28 | 11952152 | systems/texlive/tlnet/archive/l3kernel.doc.r64836.tar.xz
2022/10/28 | 11746 | macros/latex/contrib/hep-reference/hep-reference-implementation.dtx
-2022/10/28 | 113728 | systems/texlive/tlnet/archive/texlive-scripts.r64830.tar.xz
2022/10/28 | 1119 | fonts/simpleicons/map/simpleicons.map
2022/10/28 | 10888 | systems/texlive/tlnet/archive/frenchmath.source.r64823.tar.xz
2022/10/28 | 1036 | macros/latex/contrib/hep-reference/README.md
2022/10/27 | 97443 | macros/latex/contrib/fixdif/fixdif.pdf
2022/10/27 | 934063 | macros/latex/contrib/l3backend.zip
-2022/10/27 | 7528 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
2022/10/27 | 619023 | support/TeX4ht/source/tex4ht-html4.tex
2022/10/27 | 268342 | macros/latex/contrib/fixdif.zip
2022/10/27 | 23405 | macros/latex/contrib/fixdif/fixdif.dtx
@@ -497,7 +796,6 @@
2022/10/26 | 56004 | systems/texlive/tlnet/archive/penlight.doc.r64811.tar.xz
2022/10/26 | 557987 | macros/latex/contrib/l3kernel/l3doc.pdf
2022/10/26 | 555 | macros/latex/contrib/filehook/README.txt
-2022/10/26 | 5548 | systems/texlive/tlnet/archive/iexec.source.r64810.tar.xz
2022/10/26 | 549 | macros/latex/contrib/l3backend/README.md
2022/10/26 | 5429 | macros/latex/contrib/l3kernel/l3news04.tex
2022/10/26 | 537655 | graphics/pgf/contrib/tikzmark.zip
@@ -531,7 +829,6 @@
2022/10/26 | 341266 | macros/latex/contrib/docshots.zip
2022/10/26 | 338306 | macros/latex/contrib/docshots/docshots.pdf
2022/10/26 | 33655 | macros/latex/contrib/l3kernel/l3sys.dtx
-2022/10/26 | 325748 | systems/texlive/tlnet/archive/iexec.doc.r64810.tar.xz
2022/10/26 | 32429 | macros/latex/contrib/l3kernel/l3cctab.dtx
2022/10/26 | 322581 | macros/latex/contrib/filehook.zip
2022/10/26 | 316022 | macros/latex/contrib/filehook/filehook.pdf
@@ -551,7 +848,6 @@
2022/10/26 | 24841 | macros/latex/contrib/l3kernel/source3body.tex
2022/10/26 | 24673 | macros/latex/contrib/l3kernel/l3kernel-functions.dtx
2022/10/26 | 242838 | macros/latex/contrib/l3kernel/l3syntax-changes.pdf
-2022/10/26 | 2412 | systems/texlive/tlnet/archive/iexec.r64810.tar.xz
2022/10/26 | 2390 | macros/latex/contrib/l3kernel/l3docstrip.dtx
2022/10/26 | 23866 | macros/latex/contrib/l3kernel/l3luatex.dtx
2022/10/26 | 235708 | macros/latex/contrib/newverbs.zip
@@ -639,168 +935,39 @@
2022/10/25 | 1043 | macros/latex/contrib/frenchmath/README.md
2022/10/25 | 1017204 | systems/texlive/tlnet/archive/bithesis.doc.r64804.tar.xz
2022/10/24 | 998 | macros/latex/contrib/biblatex-contrib/biblatex-publist/publist.dbx
-2022/10/24 | 9920 | systems/texlive/tlnet/archive/chktex.r64797.tar.xz
2022/10/24 | 9639 | info/biblio/tugboat.def
2022/10/24 | 917348 | macros/latex/contrib/achemso.zip
-2022/10/24 | 896 | macros/generic/lt3luabridge/README.md
-2022/10/24 | 8892 | systems/texlive/tlnet/archive/unigrazpub.source.r64797.tar.xz
-2022/10/24 | 87896 | systems/texlive/tlnet/archive/pstricks.r64797.tar.xz
-2022/10/24 | 8752 | systems/texlive/tlnet/archive/sty2dtx.r64797.tar.xz
2022/10/24 | 8724 | macros/latex/contrib/biblatex-contrib/biblatex-publist/README
-2022/10/24 | 871804 | systems/texlive/tlnet/archive/babel.doc.r64797.tar.xz
2022/10/24 | 863 | macros/latex/contrib/se2thesis/README.md
2022/10/24 | 85675 | macros/latex/contrib/se2thesis/se2thesis.dtx
-2022/10/24 | 7872 | systems/texlive/tlnet/archive/piton.r64797.tar.xz
-2022/10/24 | 7596068 | systems/texlive/tlnet/archive/pstricks.doc.r64797.tar.xz
-2022/10/24 | 716104 | systems/texlive/tlnet/archive/babel.source.r64797.tar.xz
2022/10/24 | 7083 | macros/latex/contrib/achemso/achemso.ins
-2022/10/24 | 65640 | systems/texlive/tlnet/archive/siunitx.r64797.tar.xz
-2022/10/24 | 64580 | systems/texlive/tlnet/archive/njuthesis.source.r64797.tar.xz
2022/10/24 | 63183 | macros/latex/contrib/biblatex-contrib/biblatex-publist/publist.bbx
2022/10/24 | 60358 | macros/latex/contrib/biblatex-contrib/biblatex-publist/biblatex-publist.tex
-2022/10/24 | 5952 | systems/texlive/tlnet/archive/unigrazpub.r64797.tar.xz
2022/10/24 | 59499 | macros/luatex/generic/penlight/penlight.pdf
-2022/10/24 | 529764 | systems/texlive/tlnet/archive/tikz-ext.doc.r64797.tar.xz
2022/10/24 | 525672 | macros/latex/contrib/achemso/achemso.pdf
2022/10/24 | 5245 | macros/latex/contrib/achemso/achemso-demo.bib
-2022/10/24 | 494475 | macros/generic/lt3luabridge/lt3luabridge.pdf
2022/10/24 | 492236 | macros/generic/lt3luabridge.zip
2022/10/24 | 464 | macros/latex/contrib/achemso/LICENSE.md
-2022/10/24 | 440628 | systems/texlive/tlnet/archive/jobname-suffix.doc.r64797.tar.xz
2022/10/24 | 439729 | macros/latex/contrib/biblatex-contrib/biblatex-publist.zip
-2022/10/24 | 425796 | systems/texlive/tlnet/archive/chktex.doc.r64797.tar.xz
2022/10/24 | 425636 | macros/luatex/generic/penlight/penlight.lua
2022/10/24 | 407139 | macros/latex/contrib/biblatex-contrib/biblatex-publist/biblatex-publist.pdf
-2022/10/24 | 397012 | systems/texlive/tlnet/archive/piton.doc.r64797.tar.xz
2022/10/24 | 3842964 | info/biblio/tugboat.bib
2022/10/24 | 382966 | macros/latex/contrib/achemso/achemso-demo.pdf
-2022/10/24 | 3720 | macros/unicodetex/latex/bithesis/bithesis.ins
2022/10/24 | 365712 | macros/latex/contrib/se2thesis/se2thesis.pdf
2022/10/24 | 3582 | info/biblio/tugboat.ltx
2022/10/24 | 3478 | macros/latex/contrib/biblatex-contrib/biblatex-publist/publist.cbx
2022/10/24 | 3340 | macros/luatex/generic/penlight/penlight.sty
-2022/10/24 | 30484 | systems/texlive/tlnet/archive/srdp-mathematik.r64797.tar.xz
-2022/10/24 | 2643 | macros/unicodetex/latex/bithesis/contributing-zh.md
2022/10/24 | 25612 | macros/luatex/generic/penlight/penlightextras.lua
-2022/10/24 | 253 | macros/generic/lt3luabridge/lt3luabridge.ins
2022/10/24 | 2466 | macros/latex/contrib/se2thesis/se2thesis.ins
-2022/10/24 | 23540 | systems/texlive/tlnet/archive/tikz-ext.r64797.tar.xz
-2022/10/24 | 2352976 | systems/texlive/tlnet/archive/wargame.doc.r64797.tar.xz
-2022/10/24 | 2332 | macros/unicodetex/latex/bithesis/contributing.md
-2022/10/24 | 217 | macros/generic/lt3luabridge/example.latex
-2022/10/24 | 1993 | macros/unicodetex/latex/bithesis/README.md
-2022/10/24 | 194220 | systems/texlive/tlnet/archive/wargame.r64797.tar.xz
-2022/10/24 | 19416 | systems/texlive/tlnet/archive/njuthesis.r64797.tar.xz
-2022/10/24 | 192812 | systems/texlive/tlnet/archive/babel.r64797.tar.xz
-2022/10/24 | 192811 | macros/unicodetex/latex/bithesis/bithesis.dtx
2022/10/24 | 19209 | macros/latex/contrib/achemso/CHANGELOG.md
-2022/10/24 | 19105 | macros/generic/lt3luabridge/LICENSE
-2022/10/24 | 184132 | systems/texlive/tlnet/archive/sty2dtx.doc.r64797.tar.xz
-2022/10/24 | 181 | macros/generic/lt3luabridge/example.context
-2022/10/24 | 1756 | systems/texlive/tlnet/archive/jobname-suffix.r64797.tar.xz
2022/10/24 | 1732 | macros/latex/contrib/se2thesis/se2thesis-master-thesis-example.tex
-2022/10/24 | 167 | macros/generic/lt3luabridge/example.plaintex
2022/10/24 | 16202 | macros/latex/contrib/achemso/achemso-demo.tex
-2022/10/24 | 16016 | systems/texlive/tlnet/archive/piton.source.r64797.tar.xz
-2022/10/24 | 153572 | systems/texlive/tlnet/archive/wargame.source.r64797.tar.xz
-2022/10/24 | 150860 | systems/texlive/tlnet/archive/srdp-mathematik.doc.r64797.tar.xz
2022/10/24 | 149476 | macros/latex/contrib/achemso/achemso.dtx
2022/10/24 | 1459228 | install/macros/latex/contrib/se2thesis.tds.zip
2022/10/24 | 1446588 | macros/latex/contrib/se2thesis.zip
-2022/10/24 | 14380 | macros/generic/lt3luabridge/lt3luabridge.dtx
-2022/10/24 | 1389 | macros/generic/lt3luabridge/docstrip.cfg
-2022/10/24 | 134736 | systems/texlive/tlnet/archive/unigrazpub.doc.r64797.tar.xz
2022/10/24 | 1333 | macros/latex/contrib/achemso/README.md
2022/10/24 | 1296 | macros/luatex/generic/penlight/README.md
-2022/10/24 | 1242984 | systems/texlive/tlnet/archive/siunitx.doc.r64797.tar.xz
-2022/10/24 | 1189824 | systems/texlive/tlnet/archive/njuthesis.doc.r64797.tar.xz
-2022/10/24 | 116788 | systems/texlive/tlnet/archive/siunitx.source.r64797.tar.xz
2022/10/24 | 1122920 | macros/latex/contrib/se2thesis/se2thesis-master-thesis-example.pdf
-2022/10/24 | 1061972 | macros/unicodetex/latex/bithesis.zip
2022/10/24 | 1036 | macros/latex/contrib/se2thesis/CHANGELOG.md
-2022/10/24 | 1033346 | macros/unicodetex/latex/bithesis/bithesis.pdf
2022/10/24 | 10321 | macros/luatex/generic/penlight/penlight.tex
2022/10/24 | 1027407 | install/macros/latex/contrib/achemso.tds.zip
-2022/10/23 | 996 | macros/latex/contrib/siunitx/README.md
-2022/10/23 | 9912 | macros/latex/contrib/siunitx/siunitx-symbol.dtx
-2022/10/23 | 986 | macros/latex/contrib/srdp-mathematik/README.md
-2022/10/23 | 971 | graphics/pgf/contrib/tikz-ext/README.md
-2022/10/23 | 96716 | systems/texlive/tlnet/archive/pangram.doc.r64783.tar.xz
-2022/10/23 | 93124 | graphics/pstricks/base/doc/pst-news22.pdf
-2022/10/23 | 926456 | systems/texlive/tlnet/archive/chemobabel.doc.r64778.tar.xz
-2022/10/23 | 9188 | systems/texlive/tlnet/archive/ucharclasses.r64782.tar.xz
-2022/10/23 | 9091 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-paths.ortho.tex
-2022/10/23 | 885304 | macros/latex/required/babel/base/babel.pdf
-2022/10/23 | 8798 | macros/latex/contrib/siunitx/siunitx-command.dtx
-2022/10/23 | 86196 | systems/texlive/tlnet/archive/lutabulartools.doc.r64780.tar.xz
-2022/10/23 | 839829 | macros/latex/required/babel/base/locale.zip
-2022/10/23 | 8205 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-main-body.tex
-2022/10/23 | 8106386 | graphics/pstricks/base.zip
-2022/10/23 | 8045 | graphics/pstricks/base/latex/pstricks.sty
-2022/10/23 | 78837 | macros/latex/contrib/srdp-mathematik/srdp-mathematik.sty
-2022/10/23 | 7869 | macros/latex/required/babel/base/babel.ins
-2022/10/23 | 748005 | macros/latex/required/babel/base/babel.dtx
-2022/10/23 | 6956 | systems/texlive/tlnet/archive/lutabulartools.r64780.tar.xz
-2022/10/23 | 69555 | macros/luatex/latex/piton/piton.dtx
-2022/10/23 | 69530 | macros/latex/contrib/siunitx/CHANGELOG.md
-2022/10/23 | 6801 | support/TeX4ht/source/tex4ht-mathjax.tex
-2022/10/23 | 6792 | systems/texlive/tlnet/archive/collection-latexextra.r64783.tar.xz
-2022/10/23 | 666267 | macros/latex/contrib/siunitx/siunitx.pdf
-2022/10/23 | 617655 | macros/latex/contrib/siunitx/siunitx-code.pdf
-2022/10/23 | 614033 | graphics/pgf/contrib/tikz-ext.zip
-2022/10/23 | 574442 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual.pdf
-2022/10/23 | 5481 | macros/latex/contrib/siunitx/siunitx-locale.dtx
-2022/10/23 | 50961 | macros/latex/contrib/siunitx/siunitx-table.dtx
-2022/10/23 | 48433 | macros/latex/contrib/srdp-mathematik/srdp-mathematik.tex
-2022/10/23 | 4764 | systems/texlive/tlnet/archive/pangram.source.r64783.tar.xz
-2022/10/23 | 476329 | macros/luatex/latex/piton.zip
-2022/10/23 | 4748 | macros/latex/contrib/siunitx/siunitx-abbreviations.cfg
-2022/10/23 | 4603 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-shapes-uncentered.tex
-2022/10/23 | 4496 | systems/texlive/tlnet/archive/chemobabel.r64778.tar.xz
-2022/10/23 | 4072 | graphics/pgf/contrib/tikz-ext/tex/generic/tikz-ext/pgfkeyslibraryext.pgfkeys-plus.code.tex
-2022/10/23 | 407293 | macros/luatex/latex/piton/piton.pdf
-2022/10/23 | 3948 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-paths.arcto.tex
-2022/10/23 | 3912 | graphics/pstricks/base/Changes
-2022/10/23 | 38097 | macros/latex/contrib/siunitx/siunitx-complex.dtx
-2022/10/23 | 3687 | macros/latex/contrib/siunitx/siunitx.ins
-2022/10/23 | 35916 | macros/latex/contrib/siunitx/siunitx-print.dtx
-2022/10/23 | 3526 | macros/latex/required/babel/base/bbidxglo.dtx
-2022/10/23 | 33799 | macros/latex/contrib/siunitx/siunitx-compound.dtx
-2022/10/23 | 32418 | macros/latex/contrib/siunitx/siunitx-emulation.dtx
-2022/10/23 | 31738 | macros/latex/contrib/siunitx/siunitx-version-1.cfg
-2022/10/23 | 3094 | macros/unicodetex/latex/njuthesis/njuthesis.ins
-2022/10/23 | 3018925 | install/macros/latex/required/babel-base.tds.zip
-2022/10/23 | 298140 | macros/unicodetex/latex/njuthesis/njuthesis.dtx
-2022/10/23 | 2883 | macros/latex/contrib/siunitx/siunitx-binary.dtx
-2022/10/23 | 27754 | macros/luatex/latex/piton/piton-french.tex
-2022/10/23 | 273398 | macros/latex/contrib/siunitx/siunitx-v2.sty
-2022/10/23 | 2620 | macros/latex/contrib/siunitx/siunitx-code.tex
-2022/10/23 | 2331 | graphics/pstricks/base/doc/pst-news22.tex
-2022/10/23 | 2277 | macros/latex/required/babel/base/README.md
-2022/10/23 | 21890 | macros/latex/required/babel/base/bbcompat.dtx
-2022/10/23 | 217579 | macros/luatex/latex/piton/piton-french.pdf
-2022/10/23 | 21683 | macros/latex/contrib/siunitx/siunitx.dtx
-2022/10/23 | 1922922 | macros/latex/required/babel/base.zip
-2022/10/23 | 1920 | systems/texlive/tlnet/archive/pangram.r64783.tar.xz
-2022/10/23 | 19105 | macros/unicodetex/latex/njuthesis/LICENSE
-2022/10/23 | 190706 | macros/latex/contrib/srdp-mathematik.zip
-2022/10/23 | 180259 | macros/latex/contrib/srdp-mathematik/srdp-mathematik.pdf
-2022/10/23 | 1729 | macros/latex/contrib/siunitx/siunitx-binary.cfg
-2022/10/23 | 16709 | macros/latex/contrib/siunitx/siunitx-angle.dtx
-2022/10/23 | 16168 | systems/texlive/tlnet/archive/chemobabel.source.r64778.tar.xz
-2022/10/23 | 158763 | macros/latex/contrib/siunitx/siunitx.tex
-2022/10/23 | 15611 | macros/latex/contrib/siunitx/siunitx-quantity.dtx
-2022/10/23 | 1514332 | install/macros/latex/contrib/siunitx.tds.zip
-2022/10/23 | 15025 | graphics/pgf/contrib/tikz-ext/tex/generic/tikz-ext/pgfcalendar-ext.code.tex
-2022/10/23 | 14799 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual.bib
-2022/10/23 | 147297 | macros/latex/contrib/siunitx/siunitx-number.dtx
-2022/10/23 | 1470100 | macros/latex/contrib/siunitx.zip
-2022/10/23 | 143504 | systems/texlive/tlnet/archive/ucharclasses.doc.r64782.tar.xz
-2022/10/23 | 13056 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-main-preamble.tex
-2022/10/23 | 1266830 | macros/unicodetex/latex/njuthesis.zip
-2022/10/23 | 125369 | graphics/pstricks/base/generic/pstricks.tex
-2022/10/23 | 1200264 | macros/unicodetex/latex/njuthesis/njuthesis.pdf
-2022/10/23 | 11063 | graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-misc.tex
-2022/10/23 | 10812 | macros/latex/contrib/siunitx/siunitx-abbreviation.dtx
-2022/10/23 | 1077 | macros/unicodetex/latex/njuthesis/README.md
-2022/10/23 | 103909 | macros/latex/contrib/siunitx/siunitx-unit.dtx
diff --git a/biblio/ctan-bibdata/ctan.bib b/biblio/ctan-bibdata/ctan.bib
index c0c66d43ab..b2aa822c93 100644
--- a/biblio/ctan-bibdata/ctan.bib
+++ b/biblio/ctan-bibdata/ctan.bib
@@ -1,7 +1,7 @@
%% bib file of all CTAN packages
%% (C) Herbert Voß
%%
-%% created at 30-10-2022, 02:01:07
+%% created at 31-10-2022, 02:01:30
%%
%% This file is provided under the terms of the LPPL v1.3 or
@@ -7158,8 +7158,8 @@
title = {The \texttt{biblatex-caspervector} package},
subtitle = {A simple citation style for Chinese users},
author = {Casper Ti. Vector},
- date = {2020-11-02},
- version = {0.3.5},
+ date = {2022-10-30},
+ version = {0.3.6},
license = {lppl1.3},
mirror = {https://mirror.ctan.org/macros/latex/contrib/biblatex-contrib/biblatex-caspervector},
url = {https://ctan.org/pkg/biblatex-caspervector},
@@ -8636,8 +8636,8 @@
title = {The \texttt{bithesis} package},
subtitle = {Templates for the Beijing Institute of Technology},
author = {Feng Kaiyu},
- date = {2022-10-24},
- version = {3.1.0},
+ date = {2022-10-30},
+ version = {3.1.1},
license = {lppl1.3c},
mirror = {https://mirror.ctan.org/macros/unicodetex/latex/bithesis},
url = {https://ctan.org/pkg/bithesis},
@@ -9040,12 +9040,12 @@
subtitle = {Draw Bode, Nyquist and Nichols plots with gnuplot or pgfplots},
author = {Rushikesh Kamalapurkar},
date = {2021-09-11},
- version = {1.1.1},
+ version = {1.1.2},
license = {lppl1.3c},
mirror = {https://mirror.ctan.org/graphics/pgf/contrib/bodeplot},
url = {https://ctan.org/pkg/bodeplot},
annotation = {This is a \LaTeX{} package to plot Bode, Nichols, and Nyquist diagrams.
- It provides added functionality over the similar
+ It provides added functionality over the similar
package:},
}
@@ -21791,8 +21791,8 @@
title = {The \texttt{eolang} package},
subtitle = {Formulas and graphs for the EO programming language},
author = {Yegor Bugayenko},
- date = {2022-10-29},
- version = {0.2.0},
+ date = {2022-10-30},
+ version = {0.3.0},
license = {mit},
mirror = {https://mirror.ctan.org/macros/latex/contrib/eolang},
url = {https://ctan.org/pkg/eolang},
@@ -24467,8 +24467,8 @@
title = {The \texttt{ffcode} package},
subtitle = {Fixed-font code blocks formatted nicely},
author = {Yegor Bugayenko},
- date = {2022-10-03},
- version = {0.5.0},
+ date = {2022-10-30},
+ version = {0.5.1},
license = {mit},
mirror = {https://mirror.ctan.org/macros/latex/contrib/ffcode},
url = {https://ctan.org/pkg/ffcode},
@@ -28272,7 +28272,7 @@
title = {The \texttt{gillius} package},
subtitle = {Gillius fonts with \LaTeX{} support},
author = {Bob Tennent},
- date = {2022-10-28},
+ date = {2022-10-30},
version = {},
license = {gpl2+,lppl},
mirror = {https://mirror.ctan.org/fonts/gillius},
@@ -30692,7 +30692,7 @@
title = {The \texttt{hep-reference} package},
subtitle = {Adjustments for publications in High Energy Physics},
author = {Jan Hajer},
- date = {2022-10-28},
+ date = {2022-10-30},
version = {1.1},
license = {lppl1.3c},
mirror = {https://mirror.ctan.org/macros/latex/contrib/hep-reference},
@@ -37435,8 +37435,8 @@
title = {The \texttt{latexindent} package},
subtitle = {Indent a \LaTeX{} document, highlighting the programming structure},
author = {Chris Hughes},
- date = {2022-06-13},
- version = {3.18},
+ date = {2022-10-30},
+ version = {3.19},
license = {gpl3},
mirror = {https://mirror.ctan.org/support/latexindent},
url = {https://ctan.org/pkg/latexindent},
@@ -40838,6 +40838,29 @@
url = {https://ctan.org/pkg/luamplib},
}
+@manual{ctan-luaoptions,
+ title = {The \texttt{luaoptions} package},
+ subtitle = {Option handling for Lua\LaTeX{} packages},
+ author = {Jacques Peron},
+ date = {2022-10-30},
+ version = {0.8},
+ license = {mit},
+ mirror = {https://mirror.ctan.org/macros/luatex/latex/luaoptions},
+ url = {https://ctan.org/pkg/luaoptions},
+ annotation = {This Lua\LaTeX{} package provides extensive support for handling
+ , on package level and locally.
+ It allows the declaration of sets of options, along with defaults,
+ expected/allowed values and limited type checking.
+ These options can be enforced as package options,
+ changed at any point during a document, or overwritten locally
+ by optional macro arguments.
+ It is also possible to instantiate an Options object as an
+ independent Lua object, without linking it to a package.
+ can be used to enforce and prepopulate
+ options, or it can be used to simply handle the parsing of
+ optional arguments into proper Lua tables.},
+}
+
@manual{ctan-luaotfload,
title = {The \texttt{luaotfload} package},
subtitle = {OpenType ‘loader’ for Plain \TeX{} and \LaTeX{}},
@@ -41212,8 +41235,8 @@
title = {The \texttt{lyluatex} package},
subtitle = {Commands to include lilypond scores within a (Lua)\LaTeX{} document},
author = {Jacques Peron and {The Gregorio Project}},
- date = {2019-05-28},
- version = {1.0f},
+ date = {2022-10-30},
+ version = {1.1},
license = {mit},
mirror = {https://mirror.ctan.org/support/lyluatex},
url = {https://ctan.org/pkg/lyluatex},
@@ -52203,8 +52226,8 @@
title = {The \texttt{pkuthss} package},
subtitle = {\LaTeX{} template for dissertations in Peking University},
author = {Casper Ti. Vector},
- date = {2022-05-04},
- version = {1.9.2},
+ date = {2022-10-30},
+ version = {1.9.3},
license = {lppl1.3,bsd,pd},
mirror = {https://mirror.ctan.org/macros/latex/contrib/pkuthss},
url = {https://ctan.org/pkg/pkuthss},
@@ -69691,8 +69714,8 @@
title = {The \texttt{tracklang} package},
subtitle = {Language and dialect tracker},
author = {Nicola Talbot},
- date = {2019-12-01},
- version = {1.4},
+ date = {2022-10-30},
+ version = {1.6},
license = {lppl1.3},
mirror = {https://mirror.ctan.org/macros/generic/tracklang},
url = {https://ctan.org/pkg/tracklang},
@@ -75118,8 +75141,8 @@
title = {The \texttt{XePersian} package},
subtitle = {Persian for \LaTeX{}, using XeTeX},
author = {Vafa Khalighi and {bidi-tex GitHub Organisation}},
- date = {2022-07-02},
- version = {24.7},
+ date = {2022-10-30},
+ version = {24.8},
license = {lppl1.3c},
mirror = {https://mirror.ctan.org/macros/xetex/latex/xepersian},
url = {https://ctan.org/pkg/xepersian},
diff --git a/biblio/ctan-bibdata/ctan.pdf b/biblio/ctan-bibdata/ctan.pdf
index c1a80b40cb..b6e84cc6d1 100644
--- a/biblio/ctan-bibdata/ctan.pdf
+++ b/biblio/ctan-bibdata/ctan.pdf
Binary files differ
diff --git a/fonts/gillius/README b/fonts/gillius/README
index de3902c3ab..6993b6a03f 100644
--- a/fonts/gillius/README
+++ b/fonts/gillius/README
@@ -1,4 +1,4 @@
-This is the README for the gillius package, version 2022-10-28.
+This is the README for the gillius package, version 2022-10-30.
This package provides LaTeX, pdfLaTeX, XeLaTeX and LuaLaTeX support
for the Gillius and Gillius No. 2 families of sans serif fonts and
diff --git a/fonts/gillius/latex/gillius.sty b/fonts/gillius/latex/gillius.sty
index 54c134a411..6118494c7c 100644
--- a/fonts/gillius/latex/gillius.sty
+++ b/fonts/gillius/latex/gillius.sty
@@ -1,6 +1,6 @@
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{gillius}
- [2022/10/28 (Bob Tennent) Supports Gillius fonts for all LaTeX engines.]
+ [2022/10/30 (Bob Tennent) Supports Gillius fonts for all LaTeX engines.]
\RequirePackage{ifxetex,ifluatex,xkeyval,textcomp}
@@ -34,7 +34,6 @@
\fi
\ifgillius@otf
- \ifxetex\XeTeXtracingfonts=1\fi
\defaultfontfeatures{
Ligatures = TeX ,
Scale = \GilliusADF@scale ,
diff --git a/graphics/pgf/contrib/bodeplot/README.md b/graphics/pgf/contrib/bodeplot/README.md
index 31ac7a132f..c08155898c 100644
--- a/graphics/pgf/contrib/bodeplot/README.md
+++ b/graphics/pgf/contrib/bodeplot/README.md
@@ -1,55 +1,2999 @@
-# bodeplot
-LaTeX package to plot Bode, Nichols, and Nyquist diagrams.
-Inspired by the `bodegraph` package.
-*Version 1.0.8 and newer store `gnuplot` temporary files in the working directory. Use class option `declutter` to restore pre-v1.0.8 behavior. Option `declutter` can cause errors if used with a `tikzexternalize` prefix.*
-Compilation instructions:
-1) `latex bodeplot.ins` to generate `bodeplot.sty`
-2) To compile documentation (needs `gnuplot` on system PATH):
-```
+
+
+
+
+<!DOCTYPE html>
+<html lang="en" data-color-mode="auto" data-light-theme="light" data-dark-theme="dark" data-a11y-animated-images="system">
+ <head>
+ <meta charset="utf-8">
+ <link rel="dns-prefetch" href="https://github.githubassets.com">
+ <link rel="dns-prefetch" href="https://avatars.githubusercontent.com">
+ <link rel="dns-prefetch" href="https://github-cloud.s3.amazonaws.com">
+ <link rel="dns-prefetch" href="https://user-images.githubusercontent.com/">
+ <link rel="preconnect" href="https://github.githubassets.com" crossorigin>
+ <link rel="preconnect" href="https://avatars.githubusercontent.com">
+
+
+
+ <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/light-5178aee0ee76.css" /><link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/dark-217d4f9c8e70.css" /><link data-color-theme="dark_dimmed" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_dimmed-0adfa28f0e68.css" /><link data-color-theme="dark_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_high_contrast-1c8575b36644.css" /><link data-color-theme="dark_colorblind" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_colorblind-5113d2be20b0.css" /><link data-color-theme="light_colorblind" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_colorblind-c96add742484.css" /><link data-color-theme="light_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_high_contrast-290f92f5e867.css" /><link data-color-theme="light_tritanopia" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_tritanopia-cdd88f146bf7.css" /><link data-color-theme="dark_tritanopia" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_tritanopia-2171ea0f078b.css" />
+
+ <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-5508e6d5461e.css" />
+ <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/global-d3a0fca0d75c.css" />
+ <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/github-d9fe73e621ce.css" />
+ <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/code-7cc3c15b62f7.css" />
+
+ <meta name="optimizely-datafile" content="{&quot;groups&quot;: [], &quot;environmentKey&quot;: &quot;production&quot;, &quot;rollouts&quot;: [], &quot;typedAudiences&quot;: [], &quot;projectId&quot;: &quot;16737760170&quot;, &quot;variables&quot;: [], &quot;featureFlags&quot;: [], &quot;experiments&quot;: [], &quot;version&quot;: &quot;4&quot;, &quot;audiences&quot;: [{&quot;conditions&quot;: &quot;[\&quot;or\&quot;, {\&quot;match\&quot;: \&quot;exact\&quot;, \&quot;name\&quot;: \&quot;$opt_dummy_attribute\&quot;, \&quot;type\&quot;: \&quot;custom_attribute\&quot;, \&quot;value\&quot;: \&quot;$opt_dummy_value\&quot;}]&quot;, &quot;id&quot;: &quot;$opt_dummy_audience&quot;, &quot;name&quot;: &quot;Optimizely-Generated Audience for Backwards Compatibility&quot;}], &quot;anonymizeIP&quot;: true, &quot;sdkKey&quot;: &quot;WTc6awnGuYDdG98CYRban&quot;, &quot;attributes&quot;: [{&quot;id&quot;: &quot;16822470375&quot;, &quot;key&quot;: &quot;user_id&quot;}, {&quot;id&quot;: &quot;17143601254&quot;, &quot;key&quot;: &quot;spammy&quot;}, {&quot;id&quot;: &quot;18175660309&quot;, &quot;key&quot;: &quot;organization_plan&quot;}, {&quot;id&quot;: &quot;18813001570&quot;, &quot;key&quot;: &quot;is_logged_in&quot;}, {&quot;id&quot;: &quot;19073851829&quot;, &quot;key&quot;: &quot;geo&quot;}, {&quot;id&quot;: &quot;20175462351&quot;, &quot;key&quot;: &quot;requestedCurrency&quot;}, {&quot;id&quot;: &quot;20785470195&quot;, &quot;key&quot;: &quot;country_code&quot;}, {&quot;id&quot;: &quot;21656311196&quot;, &quot;key&quot;: &quot;opened_downgrade_dialog&quot;}], &quot;botFiltering&quot;: false, &quot;accountId&quot;: &quot;16737760170&quot;, &quot;events&quot;: [{&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;17911811441&quot;, &quot;key&quot;: &quot;hydro_click.dashboard.teacher_toolbox_cta&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18124116703&quot;, &quot;key&quot;: &quot;submit.organizations.complete_sign_up&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18145892387&quot;, &quot;key&quot;: &quot;no_metric.tracked_outside_of_optimizely&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18178755568&quot;, &quot;key&quot;: &quot;click.org_onboarding_checklist.add_repo&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18180553241&quot;, &quot;key&quot;: &quot;submit.repository_imports.create&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18186103728&quot;, &quot;key&quot;: &quot;click.help.learn_more_about_repository_creation&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18188530140&quot;, &quot;key&quot;: &quot;test_event&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18191963644&quot;, &quot;key&quot;: &quot;click.empty_org_repo_cta.transfer_repository&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18195612788&quot;, &quot;key&quot;: &quot;click.empty_org_repo_cta.import_repository&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18210945499&quot;, &quot;key&quot;: &quot;click.org_onboarding_checklist.invite_members&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18211063248&quot;, &quot;key&quot;: &quot;click.empty_org_repo_cta.create_repository&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18215721889&quot;, &quot;key&quot;: &quot;click.org_onboarding_checklist.update_profile&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18224360785&quot;, &quot;key&quot;: &quot;click.org_onboarding_checklist.dismiss&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18234832286&quot;, &quot;key&quot;: &quot;submit.organization_activation.complete&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18252392383&quot;, &quot;key&quot;: &quot;submit.org_repository.create&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18257551537&quot;, &quot;key&quot;: &quot;submit.org_member_invitation.create&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18259522260&quot;, &quot;key&quot;: &quot;submit.organization_profile.update&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18564603625&quot;, &quot;key&quot;: &quot;view.classroom_select_organization&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18568612016&quot;, &quot;key&quot;: &quot;click.classroom_sign_in_click&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18572592540&quot;, &quot;key&quot;: &quot;view.classroom_name&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18574203855&quot;, &quot;key&quot;: &quot;click.classroom_create_organization&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18582053415&quot;, &quot;key&quot;: &quot;click.classroom_select_organization&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18589463420&quot;, &quot;key&quot;: &quot;click.classroom_create_classroom&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18591323364&quot;, &quot;key&quot;: &quot;click.classroom_create_first_classroom&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18591652321&quot;, &quot;key&quot;: &quot;click.classroom_grant_access&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18607131425&quot;, &quot;key&quot;: &quot;view.classroom_creation&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18831680583&quot;, &quot;key&quot;: &quot;upgrade_account_plan&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;19064064515&quot;, &quot;key&quot;: &quot;click.signup&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;19075373687&quot;, &quot;key&quot;: &quot;click.view_account_billing_page&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;19077355841&quot;, &quot;key&quot;: &quot;click.dismiss_signup_prompt&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;19079713938&quot;, &quot;key&quot;: &quot;click.contact_sales&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;19120963070&quot;, &quot;key&quot;: &quot;click.compare_account_plans&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;19151690317&quot;, &quot;key&quot;: &quot;click.upgrade_account_cta&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;19424193129&quot;, &quot;key&quot;: &quot;click.open_account_switcher&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;19520330825&quot;, &quot;key&quot;: &quot;click.visit_account_profile&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;19540970635&quot;, &quot;key&quot;: &quot;click.switch_account_context&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;19730198868&quot;, &quot;key&quot;: &quot;submit.homepage_signup&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;19820830627&quot;, &quot;key&quot;: &quot;click.homepage_signup&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;19988571001&quot;, &quot;key&quot;: &quot;click.create_enterprise_trial&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20036538294&quot;, &quot;key&quot;: &quot;click.create_organization_team&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20040653299&quot;, &quot;key&quot;: &quot;click.input_enterprise_trial_form&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20062030003&quot;, &quot;key&quot;: &quot;click.continue_with_team&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20068947153&quot;, &quot;key&quot;: &quot;click.create_organization_free&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20086636658&quot;, &quot;key&quot;: &quot;click.signup_continue.username&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20091648988&quot;, &quot;key&quot;: &quot;click.signup_continue.create_account&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20103637615&quot;, &quot;key&quot;: &quot;click.signup_continue.email&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20111574253&quot;, &quot;key&quot;: &quot;click.signup_continue.password&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20120044111&quot;, &quot;key&quot;: &quot;view.pricing_page&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20152062109&quot;, &quot;key&quot;: &quot;submit.create_account&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20165800992&quot;, &quot;key&quot;: &quot;submit.upgrade_payment_form&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20171520319&quot;, &quot;key&quot;: &quot;submit.create_organization&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20222645674&quot;, &quot;key&quot;: &quot;click.recommended_plan_in_signup.discuss_your_needs&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20227443657&quot;, &quot;key&quot;: &quot;submit.verify_primary_user_email&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20234607160&quot;, &quot;key&quot;: &quot;click.recommended_plan_in_signup.try_enterprise&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20238175784&quot;, &quot;key&quot;: &quot;click.recommended_plan_in_signup.team&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20239847212&quot;, &quot;key&quot;: &quot;click.recommended_plan_in_signup.continue_free&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20251097193&quot;, &quot;key&quot;: &quot;recommended_plan&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20438619534&quot;, &quot;key&quot;: &quot;click.pricing_calculator.1_member&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20456699683&quot;, &quot;key&quot;: &quot;click.pricing_calculator.15_members&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20467868331&quot;, &quot;key&quot;: &quot;click.pricing_calculator.10_members&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20476267432&quot;, &quot;key&quot;: &quot;click.trial_days_remaining&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20476357660&quot;, &quot;key&quot;: &quot;click.discover_feature&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20479287901&quot;, &quot;key&quot;: &quot;click.pricing_calculator.custom_members&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20481107083&quot;, &quot;key&quot;: &quot;click.recommended_plan_in_signup.apply_teacher_benefits&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20483089392&quot;, &quot;key&quot;: &quot;click.pricing_calculator.5_members&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20484283944&quot;, &quot;key&quot;: &quot;click.onboarding_task&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20484996281&quot;, &quot;key&quot;: &quot;click.recommended_plan_in_signup.apply_student_benefits&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20486713726&quot;, &quot;key&quot;: &quot;click.onboarding_task_breadcrumb&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20490791319&quot;, &quot;key&quot;: &quot;click.upgrade_to_enterprise&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20491786766&quot;, &quot;key&quot;: &quot;click.talk_to_us&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20494144087&quot;, &quot;key&quot;: &quot;click.dismiss_enterprise_trial&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20499722759&quot;, &quot;key&quot;: &quot;completed_all_tasks&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20500710104&quot;, &quot;key&quot;: &quot;completed_onboarding_tasks&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20513160672&quot;, &quot;key&quot;: &quot;click.read_doc&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20516196762&quot;, &quot;key&quot;: &quot;actions_enabled&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20518980986&quot;, &quot;key&quot;: &quot;click.dismiss_trial_banner&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20535446721&quot;, &quot;key&quot;: &quot;click.issue_actions_prompt.dismiss_prompt&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20557002247&quot;, &quot;key&quot;: &quot;click.issue_actions_prompt.setup_workflow&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20595070227&quot;, &quot;key&quot;: &quot;click.pull_request_setup_workflow&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20626600314&quot;, &quot;key&quot;: &quot;click.seats_input&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20642310305&quot;, &quot;key&quot;: &quot;click.decrease_seats_number&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20662990045&quot;, &quot;key&quot;: &quot;click.increase_seats_number&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20679620969&quot;, &quot;key&quot;: &quot;click.public_product_roadmap&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20761240940&quot;, &quot;key&quot;: &quot;click.dismiss_survey_banner&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20767210721&quot;, &quot;key&quot;: &quot;click.take_survey&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20795281201&quot;, &quot;key&quot;: &quot;click.archive_list&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20966790249&quot;, &quot;key&quot;: &quot;contact_sales.submit&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20996500333&quot;, &quot;key&quot;: &quot;contact_sales.existing_customer&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20996890162&quot;, &quot;key&quot;: &quot;contact_sales.blank_message_field&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;21000470317&quot;, &quot;key&quot;: &quot;contact_sales.personal_email&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;21002790172&quot;, &quot;key&quot;: &quot;contact_sales.blank_phone_field&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;21354412592&quot;, &quot;key&quot;: &quot;click.dismiss_create_readme&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;21366102546&quot;, &quot;key&quot;: &quot;click.dismiss_zero_user_content&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;21370252505&quot;, &quot;key&quot;: &quot;account_did_downgrade&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;21370840408&quot;, &quot;key&quot;: &quot;click.cta_create_readme&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;21375451068&quot;, &quot;key&quot;: &quot;click.cta_create_new_repository&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;21385390948&quot;, &quot;key&quot;: &quot;click.zero_user_content&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;21467712175&quot;, &quot;key&quot;: &quot;click.downgrade_keep&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;21484112202&quot;, &quot;key&quot;: &quot;click.downgrade&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;21495292213&quot;, &quot;key&quot;: &quot;click.downgrade_survey_exit&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;21508241468&quot;, &quot;key&quot;: &quot;click.downgrade_survey_submit&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;21512030356&quot;, &quot;key&quot;: &quot;click.downgrade_support&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;21539090022&quot;, &quot;key&quot;: &quot;click.downgrade_exit&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;21543640644&quot;, &quot;key&quot;: &quot;click_fetch_upstream&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;21646510300&quot;, &quot;key&quot;: &quot;click.move_your_work&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;21656151116&quot;, &quot;key&quot;: &quot;click.add_branch_protection_rule&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;21663860599&quot;, &quot;key&quot;: &quot;click.downgrade_dialog_open&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;21687860483&quot;, &quot;key&quot;: &quot;click.learn_about_protected_branches&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;21689050333&quot;, &quot;key&quot;: &quot;click.dismiss_protect_this_branch&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;21864370109&quot;, &quot;key&quot;: &quot;click.sign_in&quot;}], &quot;revision&quot;: &quot;1367&quot;}" />
+
+
+ <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/wp-runtime-b59a0e362e81.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_manuelpuyol_turbo_dist_turbo_es2017-esm_js-7ca92c8d513d.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_stacktrace-parser_dist_stack-trace-parser_esm_js-node_modules_github_bro-d351f6-c1d63d230b29.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/environment-4b8bfb4aa754.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_selector-observer_dist_index_esm_js-650337916dbd.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_delegated-events_dist_index_js-node_modules_github_details-dialog-elemen-63debe-4a2f37f7419e.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_auto-complete-element_dist_index_js-node_modules_github_catalyst_-6afc16-fa4f01d20b81.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_fzy_js_index_js-node_modules_github_markdown-toolbar-element_dist_index_js-5936f45973f5.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_time-elements_dist_index_js-74b4ec51ce20.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_file-attachment-element_dist_index_js-node_modules_github_text-ex-3415a8-daf4603c6e6b.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_filter-input-element_dist_index_js-node_modules_github_remote-inp-45d711-b0ab6a967ae1.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/github-elements-e7701ef9a8c3.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/element-registry-866f36727ef8.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_lit-html_lit-html_js-e954e8c01c93.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_mini-throttle_dist_index_js-node_modules_github_remote-form_dist_-ece2b0-917c0dad4566.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_primer_behaviors_dist_esm_dimensions_js-node_modules_github_hydro-analyt-fed224-54236d9d6de1.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_alive-client_dist_index_js-156187f13fbb.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_filter-input-element_dist_index_js-node_modules_github_paste-mark-c3e01c-82f4760ef552.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_updatable-content_ts-62df1309213c.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_sticky-scroll-into-view_ts-5035229a4e5d.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_behaviors_keyboard-shortcuts-helper_ts-app_assets_modules_github_be-ac2ea2-e5885e2381d2.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_behaviors_batch-deferred-content_ts-app_assets_modules_github_behav-dc1370-6456e197635f.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_behaviors_commenting_edit_ts-app_assets_modules_github_behaviors_ht-83c235-02b38260d85d.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/behaviors-362d7c554824.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_delegated-events_dist_index_js-node_modules_github_catalyst_lib_index_js-06ff533-60844731e2b9.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/notifications-global-e71e7f99b10d.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_optimizely_optimizely-sdk_dist_optimizely_browser_es_min_js-node_modules-4de5ed-a1d36fafc3a7.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/optimizely-beee345dedab.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_virtualized-list_es_index_js-node_modules_github_template-parts_lib_index_js-17ccfc4926a4.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_filter-input-element_dist_index_js-node_modules_github_mini-throt-bb75aa-97625d2d4f26.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_file-attachment-element_dist_index_js-node_modules_github_mini-th-699a01-5abf39efc269.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_ref-selector_ts-23a59aa1d1c9.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/repositories-41124485c7c9.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_clipboard-copy-element_dist_index_esm_js-node_modules_github_remo-8e6bec-4a54aa10cc28.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_mini-throttle_dist_decorators_js-node_modules_scroll-anchoring_di-e71893-60cf13769d05.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_diffs_blob-lines_ts-app_assets_modules_github_diffs_linkable-line-n-dca161-ceb6301d2ba3.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/diffs-96fffae01eaa.js"></script>
+
+
+ <title>bodeplot/README.md at main · rlkamalapurkar/bodeplot</title>
+
+
+
+
+
+ <meta name="request-id" content="463F:7A0B:59FBAD9:8577E59:635E0EA3" data-turbo-transient="true" /><meta name="html-safe-nonce" content="933697d380b0a314f0c8c2db1c8bb934f54a74a795aa0670561ae936cec19b01" data-turbo-transient="true" /><meta name="visitor-payload" content="eyJyZWZlcnJlciI6Imh0dHBzOi8vZ2l0aHViLmNvbS9ybGthbWFsYXB1cmthci9ib2RlcGxvdCIsInJlcXVlc3RfaWQiOiI0NjNGOjdBMEI6NTlGQkFEOTo4NTc3RTU5OjYzNUUwRUEzIiwidmlzaXRvcl9pZCI6IjcxOTA1ODcwNzY5NzgwMjIyMzciLCJyZWdpb25fZWRnZSI6ImlhZCIsInJlZ2lvbl9yZW5kZXIiOiJpYWQifQ==" data-turbo-transient="true" /><meta name="visitor-hmac" content="ad048576c377ce3a5130d39fdf283d98b2e9b13876cda3767ded69fe42f140c1" data-turbo-transient="true" />
+
+ <meta name="hovercard-subject-tag" content="repository:418699104" data-turbo-transient>
+
+
+ <meta name="github-keyboard-shortcuts" content="repository,source-code,file-tree" data-turbo-transient="true" />
+
+
+ <meta name="selected-link" value="repo_source" data-turbo-transient>
+
+ <meta name="google-site-verification" content="c1kuD-K2HIVF635lypcsWPoD4kilo5-jA_wBFyT4uMY">
+ <meta name="google-site-verification" content="KT5gs8h0wvaagLKAVWq8bbeNwnZZK1r1XQysX3xurLU">
+ <meta name="google-site-verification" content="ZzhVyEFwb7w3e0-uOTltm8Jsck2F5StVihD0exw2fsA">
+ <meta name="google-site-verification" content="GXs5KoUUkNCoaAZn7wPN-t01Pywp9M3sEjnt_3_ZWPc">
+ <meta name="google-site-verification" content="Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I">
+
+<meta name="octolytics-url" content="https://collector.github.com/github/collect" /><meta name="octolytics-actor-id" content="30264720" /><meta name="octolytics-actor-login" content="rlkamalapurkar" /><meta name="octolytics-actor-hash" content="3cce62c367e83c02faf0c427366d604b6f38f73f7a6d187b1727d291ebe3b1d6" />
+
+ <meta name="analytics-location" content="/&lt;user-name&gt;/&lt;repo-name&gt;/blob/show" data-turbo-transient="true" />
+
+
+
+
+
+
+
+
+ <meta name="user-login" content="rlkamalapurkar">
+
+ <link rel="sudo-modal" href="/sessions/sudo_modal">
+
+ <meta name="viewport" content="width=device-width">
+
+ <meta name="description" content="LaTeX package to plot Bode diagrams. Contribute to rlkamalapurkar/bodeplot development by creating an account on GitHub.">
+ <link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="GitHub">
+ <link rel="fluid-icon" href="https://github.com/fluidicon.png" title="GitHub">
+ <meta property="fb:app_id" content="1401488693436528">
+ <meta name="apple-itunes-app" content="app-id=1477376905" />
+ <meta name="twitter:image:src" content="https://opengraph.githubassets.com/75d13310abaea2c3a6b08281cd0dc89cb30b997fb8ca3fd9cfec936cb36a8649/rlkamalapurkar/bodeplot" /><meta name="twitter:site" content="@github" /><meta name="twitter:card" content="summary_large_image" /><meta name="twitter:title" content="bodeplot/README.md at main · rlkamalapurkar/bodeplot" /><meta name="twitter:description" content="LaTeX package to plot Bode diagrams. Contribute to rlkamalapurkar/bodeplot development by creating an account on GitHub." />
+ <meta property="og:image" content="https://opengraph.githubassets.com/75d13310abaea2c3a6b08281cd0dc89cb30b997fb8ca3fd9cfec936cb36a8649/rlkamalapurkar/bodeplot" /><meta property="og:image:alt" content="LaTeX package to plot Bode diagrams. Contribute to rlkamalapurkar/bodeplot development by creating an account on GitHub." /><meta property="og:image:width" content="1200" /><meta property="og:image:height" content="600" /><meta property="og:site_name" content="GitHub" /><meta property="og:type" content="object" /><meta property="og:title" content="bodeplot/README.md at main · rlkamalapurkar/bodeplot" /><meta property="og:url" content="https://github.com/rlkamalapurkar/bodeplot" /><meta property="og:description" content="LaTeX package to plot Bode diagrams. Contribute to rlkamalapurkar/bodeplot development by creating an account on GitHub." />
+
+ <link rel="assets" href="https://github.githubassets.com/">
+ <link rel="shared-web-socket" href="wss://alive.github.com/_sockets/u/30264720/ws?session=eyJ2IjoiVjMiLCJ1IjozMDI2NDcyMCwicyI6OTgyMjY4Njg5LCJjIjoyMTY4ODA5OTg1LCJ0IjoxNjY3MTA4NTI5fQ==--fb2ba1eb16b020757257dba5aec7ed49bc944039e3a3e264f34c4870d907a655" data-refresh-url="/_alive" data-session-id="fb8691b3307882b02af8fc5d6f24656c8a25319007c2330370f80ba9a25465ab">
+ <link rel="shared-web-socket-src" href="/assets-cdn/worker/socket-worker-b87581f5816c.js">
+
+
+ <meta name="hostname" content="github.com">
+
+
+ <meta name="keyboard-shortcuts-preference" content="all">
+ <script type="application/json" id="memex_keyboard_shortcuts_preference">"all"</script>
+
+ <meta name="expected-hostname" content="github.com">
+
+ <meta name="enabled-features" content="ACTIONS_RUN_NAME,IMAGE_METRIC_TRACKING,GEOJSON_AZURE_MAPS,STRICT_DEFERRED_DIFF_LINES_CHECKS">
+
+
+ <meta http-equiv="x-pjax-version" content="56d9d73658be7d98108b9c9ab739f0ae1ee3bca4f394e843ca812a557dd9f356" data-turbo-track="reload">
+ <meta http-equiv="x-pjax-csp-version" content="196a13434ccf3e32885dfa5574a2cfb5e2e8e4987d0b1b46aa95067a394485c1" data-turbo-track="reload">
+ <meta http-equiv="x-pjax-css-version" content="38ca272926597b58c4df943237eec5e109768b1182e12017c8041d0104e24596" data-turbo-track="reload">
+ <meta http-equiv="x-pjax-js-version" content="973193c59b7fdfa00b79e99c79606fcda8afd73b3a100b55c0fb6ef8d8dab2da" data-turbo-track="reload">
+
+ <meta name="turbo-cache-control" content="no-preview" data-turbo-transient="">
+
+ <meta data-hydrostats="publish">
+
+ <meta name="go-import" content="github.com/rlkamalapurkar/bodeplot git https://github.com/rlkamalapurkar/bodeplot.git">
+
+ <meta name="octolytics-dimension-user_id" content="30264720" /><meta name="octolytics-dimension-user_login" content="rlkamalapurkar" /><meta name="octolytics-dimension-repository_id" content="418699104" /><meta name="octolytics-dimension-repository_nwo" content="rlkamalapurkar/bodeplot" /><meta name="octolytics-dimension-repository_public" content="true" /><meta name="octolytics-dimension-repository_is_fork" content="false" /><meta name="octolytics-dimension-repository_network_root_id" content="418699104" /><meta name="octolytics-dimension-repository_network_root_nwo" content="rlkamalapurkar/bodeplot" />
+
+
+
+ <link rel="canonical" href="https://github.com/rlkamalapurkar/bodeplot/blob/main/README.md" data-turbo-transient>
+ <meta name="turbo-body-classes" content="logged-in env-production page-responsive page-blob">
+
+
+ <meta name="browser-stats-url" content="https://api.github.com/_private/browser/stats">
+
+ <meta name="browser-errors-url" content="https://api.github.com/_private/browser/errors">
+
+ <meta name="browser-optimizely-client-errors-url" content="https://api.github.com/_private/browser/optimizely_client/errors">
+
+ <link rel="mask-icon" href="https://github.githubassets.com/pinned-octocat.svg" color="#000000">
+ <link rel="alternate icon" class="js-site-favicon" type="image/png" href="https://github.githubassets.com/favicons/favicon.png">
+ <link rel="icon" class="js-site-favicon" type="image/svg+xml" href="https://github.githubassets.com/favicons/favicon.svg">
+
+<meta name="theme-color" content="#1e2327">
+<meta name="color-scheme" content="light dark" />
+
+
+ <link rel="manifest" href="/manifest.json" crossOrigin="use-credentials">
+
+ </head>
+
+ <body class="logged-in env-production page-responsive page-blob" style="word-wrap: break-word;">
+
+
+ <div class="position-relative js-header-wrapper ">
+ <a href="#start-of-content" class="p-3 color-bg-accent-emphasis color-fg-on-emphasis show-on-focus js-skip-to-content">Skip to content</a>
+ <span data-view-component="true" class="progress-pjax-loader Progress position-fixed width-full">
+ <span style="width: 0%;" data-view-component="true" class="Progress-item progress-pjax-loader-bar left-0 top-0 color-bg-accent-emphasis"></span>
+</span>
+
+
+
+ <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_mini-throttle_dist_decorators_js-node_modules_github_command-pale-51fe14-9a1b633e9244.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_clipboard-copy-element_dist_index_esm_js-node_modules_delegated-e-976da2-e22766eedf00.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_command-palette_items_help-item_ts-app_assets_modules_github_comman-48ad9d-300540e938f3.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/command-palette-7174ee8c0061.js"></script>
+
+ <header class="Header js-details-container Details px-3 px-md-4 px-lg-5 flex-wrap flex-md-nowrap" role="banner">
+
+ <div class="Header-item mt-n1 mb-n1 d-none d-md-flex">
+ <a
+ class="Header-link"
+ href="https://github.com/"
+ data-hotkey="g d"
+ aria-label="Homepage "
+ data-turbo="false"
+ data-analytics-event="{&quot;category&quot;:&quot;Header&quot;,&quot;action&quot;:&quot;go to dashboard&quot;,&quot;label&quot;:&quot;icon:logo&quot;}"
+>
+ <svg height="32" aria-hidden="true" viewBox="0 0 16 16" version="1.1" width="32" data-view-component="true" class="octicon octicon-mark-github v-align-middle">
+ <path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"></path>
+</svg>
+</a>
+
+ </div>
+
+ <div class="Header-item d-md-none">
+ <button aria-label="Toggle navigation" aria-expanded="false" type="button" data-view-component="true" class="Header-link js-details-target btn-link"> <svg aria-hidden="true" height="24" viewBox="0 0 16 16" version="1.1" width="24" data-view-component="true" class="octicon octicon-three-bars">
+ <path fill-rule="evenodd" d="M1 2.75A.75.75 0 011.75 2h12.5a.75.75 0 110 1.5H1.75A.75.75 0 011 2.75zm0 5A.75.75 0 011.75 7h12.5a.75.75 0 110 1.5H1.75A.75.75 0 011 7.75zM1.75 12a.75.75 0 100 1.5h12.5a.75.75 0 100-1.5H1.75z"></path>
+</svg>
+</button> </div>
+
+ <div class="Header-item Header-item--full flex-column flex-md-row width-full flex-order-2 flex-md-order-none mr-0 mt-3 mt-md-0 Details-content--hidden-not-important d-md-flex">
+
+
+
+
+<div class="header-search flex-auto position-relative js-site-search flex-self-stretch flex-md-self-auto mb-3 mb-md-0 mr-0 mr-md-3 scoped-search site-scoped-search js-jump-to"
+>
+ <div class="position-relative">
+ <!-- '"` --><!-- </textarea></xmp> --></option></form><form class="js-site-search-form" role="search" aria-label="Site" data-scope-type="Repository" data-scope-id="418699104" data-scoped-search-url="/rlkamalapurkar/bodeplot/search" data-owner-scoped-search-url="/users/rlkamalapurkar/search" data-unscoped-search-url="/search" data-turbo="false" action="/rlkamalapurkar/bodeplot/search" accept-charset="UTF-8" method="get">
+ <label class="form-control header-search-wrapper input-sm p-0 js-chromeless-input-container header-search-wrapper-jump-to position-relative d-flex flex-justify-between flex-items-center">
+ <input type="text"
+ class="form-control js-site-search-focus header-search-input jump-to-field js-jump-to-field js-site-search-field is-clearable"
+ data-hotkey=s,/
+ name="q"
+ data-test-selector="nav-search-input"
+ placeholder="Search or jump to…"
+ data-unscoped-placeholder="Search or jump to…"
+ data-scoped-placeholder="Search or jump to…"
+ autocapitalize="off"
+ role="combobox"
+ aria-haspopup="listbox"
+ aria-expanded="false"
+ aria-autocomplete="list"
+ aria-controls="jump-to-results"
+ aria-label="Search or jump to…"
+ data-jump-to-suggestions-path="/_graphql/GetSuggestedNavigationDestinations"
+ spellcheck="false"
+ autocomplete="off"
+ >
+ <input type="hidden" value="j4AuUk9ijxBYqGhHzsZNAEfy6fOpmyzuBgXqq2DK6LOat_NeX7MBpmgGd9IzTCj-6jHLsSQYGvVygul9WRl5NQ" data-csrf="true" class="js-data-jump-to-suggestions-path-csrf" />
+ <input type="hidden" class="js-site-search-type-field" name="type" >
+ <svg xmlns="http://www.w3.org/2000/svg" width="22" height="20" aria-hidden="true" class="mr-1 header-search-key-slash"><path fill="none" stroke="#979A9C" opacity=".4" d="M3.5.5h12c1.7 0 3 1.3 3 3v13c0 1.7-1.3 3-3 3h-12c-1.7 0-3-1.3-3-3v-13c0-1.7 1.3-3 3-3z"></path><path fill="#979A9C" d="M11.8 6L8 15.1h-.9L10.8 6h1z"></path></svg>
+
+
+ <div class="Box position-absolute overflow-hidden d-none jump-to-suggestions js-jump-to-suggestions-container">
+
+<ul class="d-none js-jump-to-suggestions-template-container">
+
+
+<li class="d-flex flex-justify-start flex-items-center p-0 f5 navigation-item js-navigation-item js-jump-to-suggestion" role="option">
+ <a tabindex="-1" class="no-underline d-flex flex-auto flex-items-center jump-to-suggestions-path js-jump-to-suggestion-path js-navigation-open p-2" href="" data-item-type="suggestion">
+ <div class="jump-to-octicon js-jump-to-octicon flex-shrink-0 mr-2 text-center d-none">
+ <svg title="Repository" aria-label="Repository" role="img" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo js-jump-to-octicon-repo d-none flex-shrink-0">
+ <path fill-rule="evenodd" d="M2 2.5A2.5 2.5 0 014.5 0h8.75a.75.75 0 01.75.75v12.5a.75.75 0 01-.75.75h-2.5a.75.75 0 110-1.5h1.75v-2h-8a1 1 0 00-.714 1.7.75.75 0 01-1.072 1.05A2.495 2.495 0 012 11.5v-9zm10.5-1V9h-8c-.356 0-.694.074-1 .208V2.5a1 1 0 011-1h8zM5 12.25v3.25a.25.25 0 00.4.2l1.45-1.087a.25.25 0 01.3 0L8.6 15.7a.25.25 0 00.4-.2v-3.25a.25.25 0 00-.25-.25h-3.5a.25.25 0 00-.25.25z"></path>
+</svg>
+ <svg title="Project" aria-label="Project" role="img" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-project js-jump-to-octicon-project d-none flex-shrink-0">
+ <path fill-rule="evenodd" d="M1.75 0A1.75 1.75 0 000 1.75v12.5C0 15.216.784 16 1.75 16h12.5A1.75 1.75 0 0016 14.25V1.75A1.75 1.75 0 0014.25 0H1.75zM1.5 1.75a.25.25 0 01.25-.25h12.5a.25.25 0 01.25.25v12.5a.25.25 0 01-.25.25H1.75a.25.25 0 01-.25-.25V1.75zM11.75 3a.75.75 0 00-.75.75v7.5a.75.75 0 001.5 0v-7.5a.75.75 0 00-.75-.75zm-8.25.75a.75.75 0 011.5 0v5.5a.75.75 0 01-1.5 0v-5.5zM8 3a.75.75 0 00-.75.75v3.5a.75.75 0 001.5 0v-3.5A.75.75 0 008 3z"></path>
+</svg>
+ <svg title="Search" aria-label="Search" role="img" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-search js-jump-to-octicon-search d-none flex-shrink-0">
+ <path fill-rule="evenodd" d="M11.5 7a4.499 4.499 0 11-8.998 0A4.499 4.499 0 0111.5 7zm-.82 4.74a6 6 0 111.06-1.06l3.04 3.04a.75.75 0 11-1.06 1.06l-3.04-3.04z"></path>
+</svg>
+ </div>
+
+ <img class="avatar mr-2 flex-shrink-0 js-jump-to-suggestion-avatar d-none" alt="" aria-label="Team" src="" width="28" height="28">
+
+ <div class="jump-to-suggestion-name js-jump-to-suggestion-name flex-auto overflow-hidden text-left no-wrap css-truncate css-truncate-target">
+ </div>
+
+ <div class="border rounded-2 flex-shrink-0 color-bg-subtle px-1 color-fg-muted ml-1 f6 d-none js-jump-to-badge-search">
+ <span class="js-jump-to-badge-search-text-default d-none" aria-label="in this repository">
+ In this repository
+ </span>
+ <span class="js-jump-to-badge-search-text-global d-none" aria-label="in all of GitHub">
+ All GitHub
+ </span>
+ <span aria-hidden="true" class="d-inline-block ml-1 v-align-middle">↵</span>
+ </div>
+
+ <div aria-hidden="true" class="border rounded-2 flex-shrink-0 color-bg-subtle px-1 color-fg-muted ml-1 f6 d-none d-on-nav-focus js-jump-to-badge-jump">
+ Jump to
+ <span class="d-inline-block ml-1 v-align-middle">↵</span>
+ </div>
+ </a>
+</li>
+
+</ul>
+
+<ul class="d-none js-jump-to-no-results-template-container">
+ <li class="d-flex flex-justify-center flex-items-center f5 d-none js-jump-to-suggestion p-2">
+ <span class="color-fg-muted">No suggested jump to results</span>
+ </li>
+</ul>
+
+<ul id="jump-to-results" role="listbox" class="p-0 m-0 js-navigation-container jump-to-suggestions-results-container js-jump-to-suggestions-results-container">
+
+
+<li class="d-flex flex-justify-start flex-items-center p-0 f5 navigation-item js-navigation-item js-jump-to-scoped-search d-none" role="option">
+ <a tabindex="-1" class="no-underline d-flex flex-auto flex-items-center jump-to-suggestions-path js-jump-to-suggestion-path js-navigation-open p-2" href="" data-item-type="scoped_search">
+ <div class="jump-to-octicon js-jump-to-octicon flex-shrink-0 mr-2 text-center d-none">
+ <svg title="Repository" aria-label="Repository" role="img" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo js-jump-to-octicon-repo d-none flex-shrink-0">
+ <path fill-rule="evenodd" d="M2 2.5A2.5 2.5 0 014.5 0h8.75a.75.75 0 01.75.75v12.5a.75.75 0 01-.75.75h-2.5a.75.75 0 110-1.5h1.75v-2h-8a1 1 0 00-.714 1.7.75.75 0 01-1.072 1.05A2.495 2.495 0 012 11.5v-9zm10.5-1V9h-8c-.356 0-.694.074-1 .208V2.5a1 1 0 011-1h8zM5 12.25v3.25a.25.25 0 00.4.2l1.45-1.087a.25.25 0 01.3 0L8.6 15.7a.25.25 0 00.4-.2v-3.25a.25.25 0 00-.25-.25h-3.5a.25.25 0 00-.25.25z"></path>
+</svg>
+ <svg title="Project" aria-label="Project" role="img" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-project js-jump-to-octicon-project d-none flex-shrink-0">
+ <path fill-rule="evenodd" d="M1.75 0A1.75 1.75 0 000 1.75v12.5C0 15.216.784 16 1.75 16h12.5A1.75 1.75 0 0016 14.25V1.75A1.75 1.75 0 0014.25 0H1.75zM1.5 1.75a.25.25 0 01.25-.25h12.5a.25.25 0 01.25.25v12.5a.25.25 0 01-.25.25H1.75a.25.25 0 01-.25-.25V1.75zM11.75 3a.75.75 0 00-.75.75v7.5a.75.75 0 001.5 0v-7.5a.75.75 0 00-.75-.75zm-8.25.75a.75.75 0 011.5 0v5.5a.75.75 0 01-1.5 0v-5.5zM8 3a.75.75 0 00-.75.75v3.5a.75.75 0 001.5 0v-3.5A.75.75 0 008 3z"></path>
+</svg>
+ <svg title="Search" aria-label="Search" role="img" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-search js-jump-to-octicon-search d-none flex-shrink-0">
+ <path fill-rule="evenodd" d="M11.5 7a4.499 4.499 0 11-8.998 0A4.499 4.499 0 0111.5 7zm-.82 4.74a6 6 0 111.06-1.06l3.04 3.04a.75.75 0 11-1.06 1.06l-3.04-3.04z"></path>
+</svg>
+ </div>
+
+ <img class="avatar mr-2 flex-shrink-0 js-jump-to-suggestion-avatar d-none" alt="" aria-label="Team" src="" width="28" height="28">
+
+ <div class="jump-to-suggestion-name js-jump-to-suggestion-name flex-auto overflow-hidden text-left no-wrap css-truncate css-truncate-target">
+ </div>
+
+ <div class="border rounded-2 flex-shrink-0 color-bg-subtle px-1 color-fg-muted ml-1 f6 d-none js-jump-to-badge-search">
+ <span class="js-jump-to-badge-search-text-default d-none" aria-label="in this repository">
+ In this repository
+ </span>
+ <span class="js-jump-to-badge-search-text-global d-none" aria-label="in all of GitHub">
+ All GitHub
+ </span>
+ <span aria-hidden="true" class="d-inline-block ml-1 v-align-middle">↵</span>
+ </div>
+
+ <div aria-hidden="true" class="border rounded-2 flex-shrink-0 color-bg-subtle px-1 color-fg-muted ml-1 f6 d-none d-on-nav-focus js-jump-to-badge-jump">
+ Jump to
+ <span class="d-inline-block ml-1 v-align-middle">↵</span>
+ </div>
+ </a>
+</li>
+
+
+
+<li class="d-flex flex-justify-start flex-items-center p-0 f5 navigation-item js-navigation-item js-jump-to-owner-scoped-search d-none" role="option">
+ <a tabindex="-1" class="no-underline d-flex flex-auto flex-items-center jump-to-suggestions-path js-jump-to-suggestion-path js-navigation-open p-2" href="" data-item-type="owner_scoped_search">
+ <div class="jump-to-octicon js-jump-to-octicon flex-shrink-0 mr-2 text-center d-none">
+ <svg title="Repository" aria-label="Repository" role="img" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo js-jump-to-octicon-repo d-none flex-shrink-0">
+ <path fill-rule="evenodd" d="M2 2.5A2.5 2.5 0 014.5 0h8.75a.75.75 0 01.75.75v12.5a.75.75 0 01-.75.75h-2.5a.75.75 0 110-1.5h1.75v-2h-8a1 1 0 00-.714 1.7.75.75 0 01-1.072 1.05A2.495 2.495 0 012 11.5v-9zm10.5-1V9h-8c-.356 0-.694.074-1 .208V2.5a1 1 0 011-1h8zM5 12.25v3.25a.25.25 0 00.4.2l1.45-1.087a.25.25 0 01.3 0L8.6 15.7a.25.25 0 00.4-.2v-3.25a.25.25 0 00-.25-.25h-3.5a.25.25 0 00-.25.25z"></path>
+</svg>
+ <svg title="Project" aria-label="Project" role="img" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-project js-jump-to-octicon-project d-none flex-shrink-0">
+ <path fill-rule="evenodd" d="M1.75 0A1.75 1.75 0 000 1.75v12.5C0 15.216.784 16 1.75 16h12.5A1.75 1.75 0 0016 14.25V1.75A1.75 1.75 0 0014.25 0H1.75zM1.5 1.75a.25.25 0 01.25-.25h12.5a.25.25 0 01.25.25v12.5a.25.25 0 01-.25.25H1.75a.25.25 0 01-.25-.25V1.75zM11.75 3a.75.75 0 00-.75.75v7.5a.75.75 0 001.5 0v-7.5a.75.75 0 00-.75-.75zm-8.25.75a.75.75 0 011.5 0v5.5a.75.75 0 01-1.5 0v-5.5zM8 3a.75.75 0 00-.75.75v3.5a.75.75 0 001.5 0v-3.5A.75.75 0 008 3z"></path>
+</svg>
+ <svg title="Search" aria-label="Search" role="img" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-search js-jump-to-octicon-search d-none flex-shrink-0">
+ <path fill-rule="evenodd" d="M11.5 7a4.499 4.499 0 11-8.998 0A4.499 4.499 0 0111.5 7zm-.82 4.74a6 6 0 111.06-1.06l3.04 3.04a.75.75 0 11-1.06 1.06l-3.04-3.04z"></path>
+</svg>
+ </div>
+
+ <img class="avatar mr-2 flex-shrink-0 js-jump-to-suggestion-avatar d-none" alt="" aria-label="Team" src="" width="28" height="28">
+
+ <div class="jump-to-suggestion-name js-jump-to-suggestion-name flex-auto overflow-hidden text-left no-wrap css-truncate css-truncate-target">
+ </div>
+
+ <div class="border rounded-2 flex-shrink-0 color-bg-subtle px-1 color-fg-muted ml-1 f6 d-none js-jump-to-badge-search">
+ <span class="js-jump-to-badge-search-text-default d-none" aria-label="in this user">
+ In this user
+ </span>
+ <span class="js-jump-to-badge-search-text-global d-none" aria-label="in all of GitHub">
+ All GitHub
+ </span>
+ <span aria-hidden="true" class="d-inline-block ml-1 v-align-middle">↵</span>
+ </div>
+
+ <div aria-hidden="true" class="border rounded-2 flex-shrink-0 color-bg-subtle px-1 color-fg-muted ml-1 f6 d-none d-on-nav-focus js-jump-to-badge-jump">
+ Jump to
+ <span class="d-inline-block ml-1 v-align-middle">↵</span>
+ </div>
+ </a>
+</li>
+
+
+
+<li class="d-flex flex-justify-start flex-items-center p-0 f5 navigation-item js-navigation-item js-jump-to-global-search d-none" role="option">
+ <a tabindex="-1" class="no-underline d-flex flex-auto flex-items-center jump-to-suggestions-path js-jump-to-suggestion-path js-navigation-open p-2" href="" data-item-type="global_search">
+ <div class="jump-to-octicon js-jump-to-octicon flex-shrink-0 mr-2 text-center d-none">
+ <svg title="Repository" aria-label="Repository" role="img" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo js-jump-to-octicon-repo d-none flex-shrink-0">
+ <path fill-rule="evenodd" d="M2 2.5A2.5 2.5 0 014.5 0h8.75a.75.75 0 01.75.75v12.5a.75.75 0 01-.75.75h-2.5a.75.75 0 110-1.5h1.75v-2h-8a1 1 0 00-.714 1.7.75.75 0 01-1.072 1.05A2.495 2.495 0 012 11.5v-9zm10.5-1V9h-8c-.356 0-.694.074-1 .208V2.5a1 1 0 011-1h8zM5 12.25v3.25a.25.25 0 00.4.2l1.45-1.087a.25.25 0 01.3 0L8.6 15.7a.25.25 0 00.4-.2v-3.25a.25.25 0 00-.25-.25h-3.5a.25.25 0 00-.25.25z"></path>
+</svg>
+ <svg title="Project" aria-label="Project" role="img" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-project js-jump-to-octicon-project d-none flex-shrink-0">
+ <path fill-rule="evenodd" d="M1.75 0A1.75 1.75 0 000 1.75v12.5C0 15.216.784 16 1.75 16h12.5A1.75 1.75 0 0016 14.25V1.75A1.75 1.75 0 0014.25 0H1.75zM1.5 1.75a.25.25 0 01.25-.25h12.5a.25.25 0 01.25.25v12.5a.25.25 0 01-.25.25H1.75a.25.25 0 01-.25-.25V1.75zM11.75 3a.75.75 0 00-.75.75v7.5a.75.75 0 001.5 0v-7.5a.75.75 0 00-.75-.75zm-8.25.75a.75.75 0 011.5 0v5.5a.75.75 0 01-1.5 0v-5.5zM8 3a.75.75 0 00-.75.75v3.5a.75.75 0 001.5 0v-3.5A.75.75 0 008 3z"></path>
+</svg>
+ <svg title="Search" aria-label="Search" role="img" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-search js-jump-to-octicon-search d-none flex-shrink-0">
+ <path fill-rule="evenodd" d="M11.5 7a4.499 4.499 0 11-8.998 0A4.499 4.499 0 0111.5 7zm-.82 4.74a6 6 0 111.06-1.06l3.04 3.04a.75.75 0 11-1.06 1.06l-3.04-3.04z"></path>
+</svg>
+ </div>
+
+ <img class="avatar mr-2 flex-shrink-0 js-jump-to-suggestion-avatar d-none" alt="" aria-label="Team" src="" width="28" height="28">
+
+ <div class="jump-to-suggestion-name js-jump-to-suggestion-name flex-auto overflow-hidden text-left no-wrap css-truncate css-truncate-target">
+ </div>
+
+ <div class="border rounded-2 flex-shrink-0 color-bg-subtle px-1 color-fg-muted ml-1 f6 d-none js-jump-to-badge-search">
+ <span class="js-jump-to-badge-search-text-default d-none" aria-label="in this repository">
+ In this repository
+ </span>
+ <span class="js-jump-to-badge-search-text-global d-none" aria-label="in all of GitHub">
+ All GitHub
+ </span>
+ <span aria-hidden="true" class="d-inline-block ml-1 v-align-middle">↵</span>
+ </div>
+
+ <div aria-hidden="true" class="border rounded-2 flex-shrink-0 color-bg-subtle px-1 color-fg-muted ml-1 f6 d-none d-on-nav-focus js-jump-to-badge-jump">
+ Jump to
+ <span class="d-inline-block ml-1 v-align-middle">↵</span>
+ </div>
+ </a>
+</li>
+
+
+ <li class="d-flex flex-justify-center flex-items-center p-0 f5 js-jump-to-suggestion">
+ <svg style="box-sizing: content-box; color: var(--color-icon-primary);" width="32" height="32" viewBox="0 0 16 16" fill="none" data-view-component="true" class="m-3 anim-rotate">
+ <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" />
+ <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke" />
+</svg>
+ </li>
+</ul>
+
+ </div>
+ </label>
+</form> </div>
+</div>
+
+ <nav id="global-nav" class="d-flex flex-column flex-md-row flex-self-stretch flex-md-self-auto" aria-label="Global">
+ <a class="Header-link py-md-3 d-block d-md-none py-2 border-top border-md-top-0 border-white-fade" data-ga-click="Header, click, Nav menu - item:dashboard:user" aria-label="Dashboard" data-turbo="false" href="/dashboard">Dashboard</a>
+
+ <a class="js-selected-navigation-item Header-link mt-md-n3 mb-md-n3 py-2 py-md-3 mr-0 mr-md-3 border-top border-md-top-0 border-white-fade" data-hotkey="g p" data-ga-click="Header, click, Nav menu - item:pulls context:user" aria-label="Pull requests you created" data-turbo="false" data-selected-links="/pulls /pulls/assigned /pulls/mentioned /pulls" href="/pulls">
+ Pull<span class="d-inline d-md-none d-lg-inline"> request</span>s
+</a>
+ <a class="js-selected-navigation-item Header-link mt-md-n3 mb-md-n3 py-2 py-md-3 mr-0 mr-md-3 border-top border-md-top-0 border-white-fade" data-hotkey="g i" data-ga-click="Header, click, Nav menu - item:issues context:user" aria-label="Issues you created" data-turbo="false" data-selected-links="/issues /issues/assigned /issues/mentioned /issues" href="/issues">Issues</a>
+
+ <a class="js-selected-navigation-item Header-link mt-md-n3 mb-md-n3 py-2 py-md-3 mr-0 mr-md-3 border-top border-md-top-0 border-white-fade d-md-none" data-ga-click="Header, click, Nav menu - item:workspaces context:user" data-turbo="false" data-selected-links="/codespaces /codespaces" href="/codespaces">Codespaces</a>
+
+ <div class="d-flex position-relative">
+ <a class="js-selected-navigation-item Header-link flex-auto mt-md-n3 mb-md-n3 py-2 py-md-3 mr-0 mr-md-3 border-top border-md-top-0 border-white-fade" data-ga-click="Header, click, Nav menu - item:marketplace context:user" data-octo-click="marketplace_click" data-octo-dimensions="location:nav_bar" data-turbo="false" data-selected-links=" /marketplace" href="/marketplace">Marketplace</a>
+ </div>
+
+ <a class="js-selected-navigation-item Header-link mt-md-n3 mb-md-n3 py-2 py-md-3 mr-0 mr-md-3 border-top border-md-top-0 border-white-fade" data-ga-click="Header, click, Nav menu - item:explore" data-turbo="false" data-selected-links="/explore /trending /trending/developers /integrations /integrations/feature/code /integrations/feature/collaborate /integrations/feature/ship showcases showcases_search showcases_landing /explore" href="/explore">Explore</a>
+
+ <a class="js-selected-navigation-item Header-link d-block d-md-none py-2 py-md-3 border-top border-md-top-0 border-white-fade" data-ga-click="Header, click, Nav menu - item:Sponsors" data-hydro-click="{&quot;event_type&quot;:&quot;sponsors.button_click&quot;,&quot;payload&quot;:{&quot;button&quot;:&quot;HEADER_SPONSORS_DASHBOARD&quot;,&quot;sponsorable_login&quot;:&quot;rlkamalapurkar&quot;,&quot;originating_url&quot;:&quot;https://github.com/rlkamalapurkar/bodeplot/blob/main/README.md&quot;,&quot;user_id&quot;:30264720}}" data-hydro-click-hmac="e09da5530d82a9ee7d1186dbaafdd6826053a3e39dca5e30e3d5030e6d9651f8" data-turbo="false" data-selected-links=" /sponsors/accounts" href="/sponsors/accounts">Sponsors</a>
+
+ <a class="Header-link d-block d-md-none mr-0 mr-md-3 py-2 py-md-3 border-top border-md-top-0 border-white-fade" data-turbo="false" href="/settings/profile">Settings</a>
+
+ <a class="Header-link d-block d-md-none mr-0 mr-md-3 py-2 py-md-3 border-top border-md-top-0 border-white-fade" data-turbo="false" href="/rlkamalapurkar">
+ <img class="avatar avatar-user" loading="lazy" decoding="async" src="https://avatars.githubusercontent.com/u/30264720?s=40&amp;v=4" width="20" height="20" alt="@rlkamalapurkar" />
+ rlkamalapurkar
+</a>
+ <!-- '"` --><!-- </textarea></xmp> --></option></form><form data-turbo="false" action="/logout" accept-charset="UTF-8" method="post"><input type="hidden" name="authenticity_token" value="nkynt9SrrkdRKzV-NxNCntOsZZfpCVWAUhdH4tjlg4fao6-ifVEJID7mX82QEOeeBwAqd0tn4NCQhge_9VfQ2w" />
+ <button
+ type="submit"
+ class="Header-link mr-0 mr-md-3 py-2 py-md-3 border-top border-md-top-0 border-white-fade d-md-none btn-link d-block width-full text-left"
+ style="padding-left: 2px;"
+ data-analytics-event="{&quot;category&quot;:&quot;Header&quot;,&quot;action&quot;:&quot;sign out&quot;,&quot;label&quot;:&quot;icon:logout&quot;}"
+ >
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-sign-out v-align-middle">
+ <path fill-rule="evenodd" d="M2 2.75C2 1.784 2.784 1 3.75 1h2.5a.75.75 0 010 1.5h-2.5a.25.25 0 00-.25.25v10.5c0 .138.112.25.25.25h2.5a.75.75 0 010 1.5h-2.5A1.75 1.75 0 012 13.25V2.75zm10.44 4.5H6.75a.75.75 0 000 1.5h5.69l-1.97 1.97a.75.75 0 101.06 1.06l3.25-3.25a.75.75 0 000-1.06l-3.25-3.25a.75.75 0 10-1.06 1.06l1.97 1.97z"></path>
+</svg>
+ Sign out
+ </button>
+</form></nav>
+
+ </div>
+
+ <div class="Header-item Header-item--full flex-justify-center d-md-none position-relative">
+ <a
+ class="Header-link"
+ href="https://github.com/"
+ data-hotkey="g d"
+ aria-label="Homepage "
+ data-turbo="false"
+ data-analytics-event="{&quot;category&quot;:&quot;Header&quot;,&quot;action&quot;:&quot;go to dashboard&quot;,&quot;label&quot;:&quot;icon:logo&quot;}"
+>
+ <svg height="32" aria-hidden="true" viewBox="0 0 16 16" version="1.1" width="32" data-view-component="true" class="octicon octicon-mark-github v-align-middle">
+ <path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"></path>
+</svg>
+</a>
+
+ </div>
+
+ <div class="Header-item mr-0 mr-md-3 flex-order-1 flex-md-order-none">
+
+
+<notification-indicator data-channel="eyJjIjoibm90aWZpY2F0aW9uLWNoYW5nZWQ6MzAyNjQ3MjAiLCJ0IjoxNjY3MTA4NTI5fQ==--9b60fb75b2ed08ab7feccf480e56e0327a99c33affa31e6c9f8982ec910a85ac" data-indicator-mode="none" data-tooltip-global="You have unread notifications" data-tooltip-unavailable="Notifications are unavailable at the moment." data-tooltip-none="You have no unread notifications" data-view-component="true" class="js-socket-channel">
+ <a id="AppHeader-notifications-button" href="/notifications"
+ class="Header-link notification-indicator position-relative tooltipped tooltipped-sw"
+
+
+
+ data-hotkey="g n"
+ data-target="notification-indicator.link"
+ aria-label="Notifications"
+
+ data-analytics-event="{&quot;category&quot;:&quot;Header&quot;,&quot;action&quot;:&quot;go to notifications&quot;,&quot;label&quot;:&quot;icon:read&quot;}"
+ >
+
+ <span
+ data-target="notification-indicator.badge"
+ class="mail-status unread" hidden>
+ </span>
+
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-bell">
+ <path d="M8 16a2 2 0 001.985-1.75c.017-.137-.097-.25-.235-.25h-3.5c-.138 0-.252.113-.235.25A2 2 0 008 16z"></path><path fill-rule="evenodd" d="M8 1.5A3.5 3.5 0 004.5 5v2.947c0 .346-.102.683-.294.97l-1.703 2.556a.018.018 0 00-.003.01l.001.006c0 .002.002.004.004.006a.017.017 0 00.006.004l.007.001h10.964l.007-.001a.016.016 0 00.006-.004.016.016 0 00.004-.006l.001-.007a.017.017 0 00-.003-.01l-1.703-2.554a1.75 1.75 0 01-.294-.97V5A3.5 3.5 0 008 1.5zM3 5a5 5 0 0110 0v2.947c0 .05.015.098.042.139l1.703 2.555A1.518 1.518 0 0113.482 13H2.518a1.518 1.518 0 01-1.263-2.36l1.703-2.554A.25.25 0 003 7.947V5z"></path>
+</svg>
+ </a>
+
+</notification-indicator>
+ </div>
+
+
+ <div class="Header-item position-relative d-none d-md-flex">
+ <details class="details-overlay details-reset">
+ <summary
+ class="Header-link"
+ aria-label="Create new…"
+ data-analytics-event="{&quot;category&quot;:&quot;Header&quot;,&quot;action&quot;:&quot;create new&quot;,&quot;label&quot;:&quot;icon:add&quot;}"
+ >
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-plus">
+ <path fill-rule="evenodd" d="M7.75 2a.75.75 0 01.75.75V7h4.25a.75.75 0 110 1.5H8.5v4.25a.75.75 0 11-1.5 0V8.5H2.75a.75.75 0 010-1.5H7V2.75A.75.75 0 017.75 2z"></path>
+</svg> <span class="dropdown-caret"></span>
+ </summary>
+ <details-menu class="dropdown-menu dropdown-menu-sw">
+
+<a role="menuitem" class="dropdown-item" href="/new" data-ga-click="Header, create new repository">
+ New repository
+</a>
+
+ <a role="menuitem" class="dropdown-item" href="/new/import" data-ga-click="Header, import a repository">
+ Import repository
+ </a>
+
+
+<a role="menuitem" class="dropdown-item" href="https://gist.github.com/" data-ga-click="Header, create new gist">
+ New gist
+</a>
+
+ <a role="menuitem" class="dropdown-item" href="/organizations/new" data-ga-click="Header, create new organization">
+ New organization
+ </a>
+
+
+
+ </details-menu>
+</details>
+
+ </div>
+
+ <div class="Header-item position-relative mr-0 d-none d-md-flex">
+
+ <details class="details-overlay details-reset js-feature-preview-indicator-container" data-feature-preview-indicator-src="/users/rlkamalapurkar/feature_preview/indicator_check">
+
+ <summary
+ class="Header-link"
+ aria-label="View profile and more"
+ data-analytics-event="{&quot;category&quot;:&quot;Header&quot;,&quot;action&quot;:&quot;show menu&quot;,&quot;label&quot;:&quot;icon:avatar&quot;}"
+ >
+ <img src="https://avatars.githubusercontent.com/u/30264720?s=40&amp;v=4" alt="@rlkamalapurkar" size="20" height="20" width="20" data-view-component="true" class="avatar avatar-small circle" />
+ <span class="unread-indicator js-feature-preview-indicator" style="top: 1px;" hidden></span>
+ <span class="dropdown-caret"></span>
+ </summary>
+ <details-menu
+ class="dropdown-menu dropdown-menu-sw"
+ style="width: 180px"
+
+ preload>
+ <include-fragment src="/users/30264720/menu" loading="lazy">
+ <p class="text-center mt-3" data-hide-on-error>
+ <svg style="box-sizing: content-box; color: var(--color-icon-primary);" width="32" height="32" viewBox="0 0 16 16" fill="none" data-view-component="true" class="anim-rotate">
+ <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" />
+ <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke" />
+</svg>
+ </p>
+ <p class="ml-1 mb-2 mt-2 color-fg-default" data-show-on-error>
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
+ <path fill-rule="evenodd" d="M8.22 1.754a.25.25 0 00-.44 0L1.698 13.132a.25.25 0 00.22.368h12.164a.25.25 0 00.22-.368L8.22 1.754zm-1.763-.707c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0114.082 15H1.918a1.75 1.75 0 01-1.543-2.575L6.457 1.047zM9 11a1 1 0 11-2 0 1 1 0 012 0zm-.25-5.25a.75.75 0 00-1.5 0v2.5a.75.75 0 001.5 0v-2.5z"></path>
+</svg>
+ Sorry, something went wrong.
+ </p>
+ </include-fragment>
+ </details-menu>
+</details>
+
+ </div>
+</header>
+
+
+ </div>
+
+ <div id="start-of-content" class="show-on-focus"></div>
+
+
+
+
+
+
+
+ <div id="js-flash-container" data-turbo-replace>
+
+
+
+
+ <template class="js-flash-template">
+
+<div class="flash flash-full {{ className }}">
+ <div class="px-2" >
+ <button autofocus class="flash-close js-flash-close" type="button" aria-label="Dismiss this message">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x">
+ <path fill-rule="evenodd" d="M3.72 3.72a.75.75 0 011.06 0L8 6.94l3.22-3.22a.75.75 0 111.06 1.06L9.06 8l3.22 3.22a.75.75 0 11-1.06 1.06L8 9.06l-3.22 3.22a.75.75 0 01-1.06-1.06L6.94 8 3.72 4.78a.75.75 0 010-1.06z"></path>
+</svg>
+ </button>
+ <div aria-atomic="true" role="alert" class="js-flash-alert">
+
+ <div>{{ message }}</div>
+
+ </div>
+ </div>
+</div>
+ </template>
+</div>
+
+
+
+ <include-fragment class="js-notification-shelf-include-fragment" data-base-src="https://github.com/notifications/beta/shelf"></include-fragment>
+
+
+
+
+
+ <details
+ class="details-reset details-overlay details-overlay-dark js-command-palette-dialog"
+ id="command-palette-pjax-container"
+ data-turbo-replace
+>
+ <summary aria-label="command palette trigger">
+ </summary>
+ <details-dialog class="command-palette-details-dialog d-flex flex-column flex-justify-center height-fit" aria-label="command palette">
+ <command-palette
+ class="command-palette color-bg-default rounded-3 border color-shadow-small"
+ return-to=/rlkamalapurkar/bodeplot/blob/main/README.md
+ user-id="30264720"
+ activation-hotkey="Mod+k,Mod+Alt+k"
+ command-mode-hotkey="Mod+Shift+k"
+ data-action="
+ command-palette-input-ready:command-palette#inputReady
+ command-palette-page-stack-updated:command-palette#updateInputScope
+ itemsUpdated:command-palette#itemsUpdated
+ keydown:command-palette#onKeydown
+ loadingStateChanged:command-palette#loadingStateChanged
+ selectedItemChanged:command-palette#selectedItemChanged
+ pageFetchError:command-palette#pageFetchError
+ ">
+
+ <command-palette-mode
+ data-char="#"
+ data-scope-types="[&quot;&quot;]"
+ data-placeholder="Search issues and pull requests"
+ ></command-palette-mode>
+ <command-palette-mode
+ data-char="#"
+ data-scope-types="[&quot;owner&quot;,&quot;repository&quot;]"
+ data-placeholder="Search issues, pull requests, discussions, and projects"
+ ></command-palette-mode>
+ <command-palette-mode
+ data-char="!"
+ data-scope-types="[&quot;owner&quot;,&quot;repository&quot;]"
+ data-placeholder="Search projects"
+ ></command-palette-mode>
+ <command-palette-mode
+ data-char="@"
+ data-scope-types="[&quot;&quot;]"
+ data-placeholder="Search or jump to a user, organization, or repository"
+ ></command-palette-mode>
+ <command-palette-mode
+ data-char="@"
+ data-scope-types="[&quot;owner&quot;]"
+ data-placeholder="Search or jump to a repository"
+ ></command-palette-mode>
+ <command-palette-mode
+ data-char="/"
+ data-scope-types="[&quot;repository&quot;]"
+ data-placeholder="Search files"
+ ></command-palette-mode>
+ <command-palette-mode
+ data-char="?"
+ ></command-palette-mode>
+ <command-palette-mode
+ data-char="&gt;"
+ data-placeholder="Run a command"
+ ></command-palette-mode>
+ <command-palette-mode
+ data-char=""
+ data-scope-types="[&quot;&quot;]"
+ data-placeholder="Search or jump to..."
+ ></command-palette-mode>
+ <command-palette-mode
+ data-char=""
+ data-scope-types="[&quot;owner&quot;]"
+ data-placeholder="Search or jump to..."
+ ></command-palette-mode>
+ <command-palette-mode
+ class="js-command-palette-default-mode"
+ data-char=""
+ data-placeholder="Search or jump to..."
+ ></command-palette-mode>
+
+ <command-palette-input placeholder="Search or jump to..."
+
+ data-action="
+ command-palette-input:command-palette#onInput
+ command-palette-select:command-palette#onSelect
+ command-palette-descope:command-palette#onDescope
+ command-palette-cleared:command-palette#onInputClear
+ "
+ >
+ <div class="js-search-icon d-flex flex-items-center mr-2" style="height: 26px">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-search color-fg-muted">
+ <path fill-rule="evenodd" d="M11.5 7a4.499 4.499 0 11-8.998 0A4.499 4.499 0 0111.5 7zm-.82 4.74a6 6 0 111.06-1.06l3.04 3.04a.75.75 0 11-1.06 1.06l-3.04-3.04z"></path>
+</svg>
+ </div>
+ <div class="js-spinner d-flex flex-items-center mr-2 color-fg-muted" hidden>
+ <svg aria-label="Loading" class="anim-rotate" viewBox="0 0 16 16" fill="none" width="16" height="16">
+ <circle
+ cx="8"
+ cy="8"
+ r="7"
+ stroke="currentColor"
+ stroke-opacity="0.25"
+ stroke-width="2"
+ vector-effect="non-scaling-stroke"
+ ></circle>
+ <path
+ d="M15 8a7.002 7.002 0 00-7-7"
+ stroke="currentColor"
+ stroke-width="2"
+ stroke-linecap="round"
+ vector-effect="non-scaling-stroke"
+ ></path>
+ </svg>
+ </div>
+ <command-palette-scope >
+ <div data-target="command-palette-scope.placeholder" hidden class="color-fg-subtle">/&nbsp;&nbsp;<span class="text-semibold color-fg-default">...</span>&nbsp;&nbsp;/&nbsp;&nbsp;</div>
+ <command-palette-token
+ data-text="rlkamalapurkar"
+ data-id="MDQ6VXNlcjMwMjY0NzIw"
+ data-type="owner"
+ data-value="rlkamalapurkar"
+ data-targets="command-palette-scope.tokens"
+ class="color-fg-default text-semibold"
+ style="white-space:nowrap;line-height:20px;"
+ >rlkamalapurkar<span class="color-fg-subtle text-normal">&nbsp;&nbsp;/&nbsp;&nbsp;</span></command-palette-token>
+ <command-palette-token
+ data-text="bodeplot"
+ data-id="R_kgDOGPTXYA"
+ data-type="repository"
+ data-value="bodeplot"
+ data-targets="command-palette-scope.tokens"
+ class="color-fg-default text-semibold"
+ style="white-space:nowrap;line-height:20px;"
+ >bodeplot<span class="color-fg-subtle text-normal">&nbsp;&nbsp;/&nbsp;&nbsp;</span></command-palette-token>
+ </command-palette-scope>
+ <div class="command-palette-input-group flex-1 form-control border-0 box-shadow-none" style="z-index: 0">
+ <div class="command-palette-typeahead position-absolute d-flex flex-items-center Truncate">
+ <span class="typeahead-segment input-mirror" data-target="command-palette-input.mirror"></span>
+ <span class="Truncate-text" data-target="command-palette-input.typeaheadText"></span>
+ <span class="typeahead-segment" data-target="command-palette-input.typeaheadPlaceholder"></span>
+ </div>
+ <input
+ class="js-overlay-input typeahead-input d-none"
+ disabled
+ tabindex="-1"
+ aria-label="Hidden input for typeahead"
+ >
+ <input
+ type="text"
+ autocomplete="off"
+ autocorrect="off"
+ autocapitalize="off"
+ spellcheck="false"
+ class="js-input typeahead-input form-control border-0 box-shadow-none input-block width-full no-focus-indicator"
+ aria-label="Command palette input"
+ aria-haspopup="listbox"
+ aria-expanded="false"
+ aria-autocomplete="list"
+ aria-controls="command-palette-page-stack"
+ role="combobox"
+ data-action="
+ input:command-palette-input#onInput
+ keydown:command-palette-input#onKeydown
+ "
+ >
+ </div>
+ <div data-view-component="true" class="position-relative d-inline-block">
+ <button aria-keyshortcuts="Control+Backspace" data-action="click:command-palette-input#onClear keypress:command-palette-input#onClear" data-target="command-palette-input.clearButton" id="command-palette-clear-button" hidden="hidden" type="button" data-view-component="true" class="btn-octicon command-palette-input-clear-button"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x-circle-fill">
+ <path fill-rule="evenodd" d="M2.343 13.657A8 8 0 1113.657 2.343 8 8 0 012.343 13.657zM6.03 4.97a.75.75 0 00-1.06 1.06L6.94 8 4.97 9.97a.75.75 0 101.06 1.06L8 9.06l1.97 1.97a.75.75 0 101.06-1.06L9.06 8l1.97-1.97a.75.75 0 10-1.06-1.06L8 6.94 6.03 4.97z"></path>
+</svg>
+</button> <tool-tip for="command-palette-clear-button" data-direction="w" data-type="label" data-view-component="true" class="sr-only position-absolute">Clear Command Palette</tool-tip>
+</div>
+ </command-palette-input>
+
+ <command-palette-page-stack
+ data-default-scope-id="R_kgDOGPTXYA"
+ data-default-scope-type="Repository"
+ data-action="command-palette-page-octicons-cached:command-palette-page-stack#cacheOcticons"
+ >
+ <command-palette-tip
+ class="color-fg-muted f6 px-3 py-1 my-2"
+ data-scope-types="[&quot;&quot;,&quot;owner&quot;,&quot;repository&quot;]"
+ data-mode=""
+ data-value="">
+ <div class="d-flex flex-items-start flex-justify-between">
+ <div>
+ <span class="text-bold">Tip:</span>
+ Type <kbd class="hx_kbd">#</kbd> to search pull requests
+ </div>
+ <div class="ml-2 flex-shrink-0">
+ Type <kbd class="hx_kbd">?</kbd> for help and tips
+ </div>
+ </div>
+ </command-palette-tip>
+ <command-palette-tip
+ class="color-fg-muted f6 px-3 py-1 my-2"
+ data-scope-types="[&quot;&quot;,&quot;owner&quot;,&quot;repository&quot;]"
+ data-mode=""
+ data-value="">
+ <div class="d-flex flex-items-start flex-justify-between">
+ <div>
+ <span class="text-bold">Tip:</span>
+ Type <kbd class="hx_kbd">#</kbd> to search issues
+ </div>
+ <div class="ml-2 flex-shrink-0">
+ Type <kbd class="hx_kbd">?</kbd> for help and tips
+ </div>
+ </div>
+ </command-palette-tip>
+ <command-palette-tip
+ class="color-fg-muted f6 px-3 py-1 my-2"
+ data-scope-types="[&quot;owner&quot;,&quot;repository&quot;]"
+ data-mode=""
+ data-value="">
+ <div class="d-flex flex-items-start flex-justify-between">
+ <div>
+ <span class="text-bold">Tip:</span>
+ Type <kbd class="hx_kbd">#</kbd> to search discussions
+ </div>
+ <div class="ml-2 flex-shrink-0">
+ Type <kbd class="hx_kbd">?</kbd> for help and tips
+ </div>
+ </div>
+ </command-palette-tip>
+ <command-palette-tip
+ class="color-fg-muted f6 px-3 py-1 my-2"
+ data-scope-types="[&quot;owner&quot;,&quot;repository&quot;]"
+ data-mode=""
+ data-value="">
+ <div class="d-flex flex-items-start flex-justify-between">
+ <div>
+ <span class="text-bold">Tip:</span>
+ Type <kbd class="hx_kbd">!</kbd> to search projects
+ </div>
+ <div class="ml-2 flex-shrink-0">
+ Type <kbd class="hx_kbd">?</kbd> for help and tips
+ </div>
+ </div>
+ </command-palette-tip>
+ <command-palette-tip
+ class="color-fg-muted f6 px-3 py-1 my-2"
+ data-scope-types="[&quot;owner&quot;]"
+ data-mode=""
+ data-value="">
+ <div class="d-flex flex-items-start flex-justify-between">
+ <div>
+ <span class="text-bold">Tip:</span>
+ Type <kbd class="hx_kbd">@</kbd> to search teams
+ </div>
+ <div class="ml-2 flex-shrink-0">
+ Type <kbd class="hx_kbd">?</kbd> for help and tips
+ </div>
+ </div>
+ </command-palette-tip>
+ <command-palette-tip
+ class="color-fg-muted f6 px-3 py-1 my-2"
+ data-scope-types="[&quot;&quot;]"
+ data-mode=""
+ data-value="">
+ <div class="d-flex flex-items-start flex-justify-between">
+ <div>
+ <span class="text-bold">Tip:</span>
+ Type <kbd class="hx_kbd">@</kbd> to search people and organizations
+ </div>
+ <div class="ml-2 flex-shrink-0">
+ Type <kbd class="hx_kbd">?</kbd> for help and tips
+ </div>
+ </div>
+ </command-palette-tip>
+ <command-palette-tip
+ class="color-fg-muted f6 px-3 py-1 my-2"
+ data-scope-types="[&quot;&quot;,&quot;owner&quot;,&quot;repository&quot;]"
+ data-mode=""
+ data-value="">
+ <div class="d-flex flex-items-start flex-justify-between">
+ <div>
+ <span class="text-bold">Tip:</span>
+ Type <kbd class="hx_kbd">&gt;</kbd> to activate command mode
+ </div>
+ <div class="ml-2 flex-shrink-0">
+ Type <kbd class="hx_kbd">?</kbd> for help and tips
+ </div>
+ </div>
+ </command-palette-tip>
+ <command-palette-tip
+ class="color-fg-muted f6 px-3 py-1 my-2"
+ data-scope-types="[&quot;&quot;,&quot;owner&quot;,&quot;repository&quot;]"
+ data-mode=""
+ data-value="">
+ <div class="d-flex flex-items-start flex-justify-between">
+ <div>
+ <span class="text-bold">Tip:</span>
+ Go to your accessibility settings to change your keyboard shortcuts
+ </div>
+ <div class="ml-2 flex-shrink-0">
+ Type <kbd class="hx_kbd">?</kbd> for help and tips
+ </div>
+ </div>
+ </command-palette-tip>
+ <command-palette-tip
+ class="color-fg-muted f6 px-3 py-1 my-2"
+ data-scope-types="[&quot;&quot;,&quot;owner&quot;,&quot;repository&quot;]"
+ data-mode="#"
+ data-value="">
+ <div class="d-flex flex-items-start flex-justify-between">
+ <div>
+ <span class="text-bold">Tip:</span>
+ Type author:@me to search your content
+ </div>
+ <div class="ml-2 flex-shrink-0">
+ Type <kbd class="hx_kbd">?</kbd> for help and tips
+ </div>
+ </div>
+ </command-palette-tip>
+ <command-palette-tip
+ class="color-fg-muted f6 px-3 py-1 my-2"
+ data-scope-types="[&quot;&quot;,&quot;owner&quot;,&quot;repository&quot;]"
+ data-mode="#"
+ data-value="">
+ <div class="d-flex flex-items-start flex-justify-between">
+ <div>
+ <span class="text-bold">Tip:</span>
+ Type is:pr to filter to pull requests
+ </div>
+ <div class="ml-2 flex-shrink-0">
+ Type <kbd class="hx_kbd">?</kbd> for help and tips
+ </div>
+ </div>
+ </command-palette-tip>
+ <command-palette-tip
+ class="color-fg-muted f6 px-3 py-1 my-2"
+ data-scope-types="[&quot;&quot;,&quot;owner&quot;,&quot;repository&quot;]"
+ data-mode="#"
+ data-value="">
+ <div class="d-flex flex-items-start flex-justify-between">
+ <div>
+ <span class="text-bold">Tip:</span>
+ Type is:issue to filter to issues
+ </div>
+ <div class="ml-2 flex-shrink-0">
+ Type <kbd class="hx_kbd">?</kbd> for help and tips
+ </div>
+ </div>
+ </command-palette-tip>
+ <command-palette-tip
+ class="color-fg-muted f6 px-3 py-1 my-2"
+ data-scope-types="[&quot;owner&quot;,&quot;repository&quot;]"
+ data-mode="#"
+ data-value="">
+ <div class="d-flex flex-items-start flex-justify-between">
+ <div>
+ <span class="text-bold">Tip:</span>
+ Type is:project to filter to projects
+ </div>
+ <div class="ml-2 flex-shrink-0">
+ Type <kbd class="hx_kbd">?</kbd> for help and tips
+ </div>
+ </div>
+ </command-palette-tip>
+ <command-palette-tip
+ class="color-fg-muted f6 px-3 py-1 my-2"
+ data-scope-types="[&quot;&quot;,&quot;owner&quot;,&quot;repository&quot;]"
+ data-mode="#"
+ data-value="">
+ <div class="d-flex flex-items-start flex-justify-between">
+ <div>
+ <span class="text-bold">Tip:</span>
+ Type is:open to filter to open content
+ </div>
+ <div class="ml-2 flex-shrink-0">
+ Type <kbd class="hx_kbd">?</kbd> for help and tips
+ </div>
+ </div>
+ </command-palette-tip>
+ <command-palette-tip class="mx-3 my-2 flash flash-error d-flex flex-items-center" data-scope-types="*" data-on-error>
+ <div>
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
+ <path fill-rule="evenodd" d="M8.22 1.754a.25.25 0 00-.44 0L1.698 13.132a.25.25 0 00.22.368h12.164a.25.25 0 00.22-.368L8.22 1.754zm-1.763-.707c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0114.082 15H1.918a1.75 1.75 0 01-1.543-2.575L6.457 1.047zM9 11a1 1 0 11-2 0 1 1 0 012 0zm-.25-5.25a.75.75 0 00-1.5 0v2.5a.75.75 0 001.5 0v-2.5z"></path>
+</svg>
+ </div>
+ <div class="px-2">
+ We’ve encountered an error and some results aren't available at this time. Type a new search or try again later.
+ </div>
+ </command-palette-tip>
+ <command-palette-tip class="h4 color-fg-default pl-3 pb-2 pt-3" data-on-empty data-scope-types="*" data-match-mode="[^?]|^$">
+ No results matched your search
+ </command-palette-tip>
+
+ <div hidden>
+
+ <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="arrow-right-color-fg-muted">
+ <svg height="16" class="octicon octicon-arrow-right color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M8.22 2.97a.75.75 0 011.06 0l4.25 4.25a.75.75 0 010 1.06l-4.25 4.25a.75.75 0 01-1.06-1.06l2.97-2.97H3.75a.75.75 0 010-1.5h7.44L8.22 4.03a.75.75 0 010-1.06z"></path></svg>
+ </div>
+ <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="arrow-right-color-fg-default">
+ <svg height="16" class="octicon octicon-arrow-right color-fg-default" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M8.22 2.97a.75.75 0 011.06 0l4.25 4.25a.75.75 0 010 1.06l-4.25 4.25a.75.75 0 01-1.06-1.06l2.97-2.97H3.75a.75.75 0 010-1.5h7.44L8.22 4.03a.75.75 0 010-1.06z"></path></svg>
+ </div>
+ <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="codespaces-color-fg-muted">
+ <svg height="16" class="octicon octicon-codespaces color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M2 1.75C2 .784 2.784 0 3.75 0h8.5C13.216 0 14 .784 14 1.75v5a1.75 1.75 0 01-1.75 1.75h-8.5A1.75 1.75 0 012 6.75v-5zm1.75-.25a.25.25 0 00-.25.25v5c0 .138.112.25.25.25h8.5a.25.25 0 00.25-.25v-5a.25.25 0 00-.25-.25h-8.5zM0 11.25c0-.966.784-1.75 1.75-1.75h12.5c.966 0 1.75.784 1.75 1.75v3A1.75 1.75 0 0114.25 16H1.75A1.75 1.75 0 010 14.25v-3zM1.75 11a.25.25 0 00-.25.25v3c0 .138.112.25.25.25h12.5a.25.25 0 00.25-.25v-3a.25.25 0 00-.25-.25H1.75z"></path><path fill-rule="evenodd" d="M3 12.75a.75.75 0 01.75-.75h.5a.75.75 0 010 1.5h-.5a.75.75 0 01-.75-.75zm4 0a.75.75 0 01.75-.75h4.5a.75.75 0 010 1.5h-4.5a.75.75 0 01-.75-.75z"></path></svg>
+ </div>
+ <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="copy-color-fg-muted">
+ <svg height="16" class="octicon octicon-copy color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 010 1.5h-1.5a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-1.5a.75.75 0 011.5 0v1.5A1.75 1.75 0 019.25 16h-7.5A1.75 1.75 0 010 14.25v-7.5z"></path><path fill-rule="evenodd" d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0114.25 11h-7.5A1.75 1.75 0 015 9.25v-7.5zm1.75-.25a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-7.5a.25.25 0 00-.25-.25h-7.5z"></path></svg>
+ </div>
+ <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="dash-color-fg-muted">
+ <svg height="16" class="octicon octicon-dash color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M2 7.75A.75.75 0 012.75 7h10a.75.75 0 010 1.5h-10A.75.75 0 012 7.75z"></path></svg>
+ </div>
+ <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="file-color-fg-muted">
+ <svg height="16" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M3.75 1.5a.25.25 0 00-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 00.25-.25V6h-2.75A1.75 1.75 0 019 4.25V1.5H3.75zm6.75.062V4.25c0 .138.112.25.25.25h2.688a.252.252 0 00-.011-.013l-2.914-2.914a.272.272 0 00-.013-.011zM2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0113.25 16h-9.5A1.75 1.75 0 012 14.25V1.75z"></path></svg>
+ </div>
+ <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="gear-color-fg-muted">
+ <svg height="16" class="octicon octicon-gear color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M7.429 1.525a6.593 6.593 0 011.142 0c.036.003.108.036.137.146l.289 1.105c.147.56.55.967.997 1.189.174.086.341.183.501.29.417.278.97.423 1.53.27l1.102-.303c.11-.03.175.016.195.046.219.31.41.641.573.989.014.031.022.11-.059.19l-.815.806c-.411.406-.562.957-.53 1.456a4.588 4.588 0 010 .582c-.032.499.119 1.05.53 1.456l.815.806c.08.08.073.159.059.19a6.494 6.494 0 01-.573.99c-.02.029-.086.074-.195.045l-1.103-.303c-.559-.153-1.112-.008-1.529.27-.16.107-.327.204-.5.29-.449.222-.851.628-.998 1.189l-.289 1.105c-.029.11-.101.143-.137.146a6.613 6.613 0 01-1.142 0c-.036-.003-.108-.037-.137-.146l-.289-1.105c-.147-.56-.55-.967-.997-1.189a4.502 4.502 0 01-.501-.29c-.417-.278-.97-.423-1.53-.27l-1.102.303c-.11.03-.175-.016-.195-.046a6.492 6.492 0 01-.573-.989c-.014-.031-.022-.11.059-.19l.815-.806c.411-.406.562-.957.53-1.456a4.587 4.587 0 010-.582c.032-.499-.119-1.05-.53-1.456l-.815-.806c-.08-.08-.073-.159-.059-.19a6.44 6.44 0 01.573-.99c.02-.029.086-.075.195-.045l1.103.303c.559.153 1.112.008 1.529-.27.16-.107.327-.204.5-.29.449-.222.851-.628.998-1.189l.289-1.105c.029-.11.101-.143.137-.146zM8 0c-.236 0-.47.01-.701.03-.743.065-1.29.615-1.458 1.261l-.29 1.106c-.017.066-.078.158-.211.224a5.994 5.994 0 00-.668.386c-.123.082-.233.09-.3.071L3.27 2.776c-.644-.177-1.392.02-1.82.63a7.977 7.977 0 00-.704 1.217c-.315.675-.111 1.422.363 1.891l.815.806c.05.048.098.147.088.294a6.084 6.084 0 000 .772c.01.147-.038.246-.088.294l-.815.806c-.474.469-.678 1.216-.363 1.891.2.428.436.835.704 1.218.428.609 1.176.806 1.82.63l1.103-.303c.066-.019.176-.011.299.071.213.143.436.272.668.386.133.066.194.158.212.224l.289 1.106c.169.646.715 1.196 1.458 1.26a8.094 8.094 0 001.402 0c.743-.064 1.29-.614 1.458-1.26l.29-1.106c.017-.066.078-.158.211-.224a5.98 5.98 0 00.668-.386c.123-.082.233-.09.3-.071l1.102.302c.644.177 1.392-.02 1.82-.63.268-.382.505-.789.704-1.217.315-.675.111-1.422-.364-1.891l-.814-.806c-.05-.048-.098-.147-.088-.294a6.1 6.1 0 000-.772c-.01-.147.039-.246.088-.294l.814-.806c.475-.469.679-1.216.364-1.891a7.992 7.992 0 00-.704-1.218c-.428-.609-1.176-.806-1.82-.63l-1.103.303c-.066.019-.176.011-.299-.071a5.991 5.991 0 00-.668-.386c-.133-.066-.194-.158-.212-.224L10.16 1.29C9.99.645 9.444.095 8.701.031A8.094 8.094 0 008 0zm1.5 8a1.5 1.5 0 11-3 0 1.5 1.5 0 013 0zM11 8a3 3 0 11-6 0 3 3 0 016 0z"></path></svg>
+ </div>
+ <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="lock-color-fg-muted">
+ <svg height="16" class="octicon octicon-lock color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M4 4v2h-.25A1.75 1.75 0 002 7.75v5.5c0 .966.784 1.75 1.75 1.75h8.5A1.75 1.75 0 0014 13.25v-5.5A1.75 1.75 0 0012.25 6H12V4a4 4 0 10-8 0zm6.5 2V4a2.5 2.5 0 00-5 0v2h5zM12 7.5h.25a.25.25 0 01.25.25v5.5a.25.25 0 01-.25.25h-8.5a.25.25 0 01-.25-.25v-5.5a.25.25 0 01.25-.25H12z"></path></svg>
+ </div>
+ <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="moon-color-fg-muted">
+ <svg height="16" class="octicon octicon-moon color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M9.598 1.591a.75.75 0 01.785-.175 7 7 0 11-8.967 8.967.75.75 0 01.961-.96 5.5 5.5 0 007.046-7.046.75.75 0 01.175-.786zm1.616 1.945a7 7 0 01-7.678 7.678 5.5 5.5 0 107.678-7.678z"></path></svg>
+ </div>
+ <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="person-color-fg-muted">
+ <svg height="16" class="octicon octicon-person color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M10.5 5a2.5 2.5 0 11-5 0 2.5 2.5 0 015 0zm.061 3.073a4 4 0 10-5.123 0 6.004 6.004 0 00-3.431 5.142.75.75 0 001.498.07 4.5 4.5 0 018.99 0 .75.75 0 101.498-.07 6.005 6.005 0 00-3.432-5.142z"></path></svg>
+ </div>
+ <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="pencil-color-fg-muted">
+ <svg height="16" class="octicon octicon-pencil color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M11.013 1.427a1.75 1.75 0 012.474 0l1.086 1.086a1.75 1.75 0 010 2.474l-8.61 8.61c-.21.21-.47.364-.756.445l-3.251.93a.75.75 0 01-.927-.928l.929-3.25a1.75 1.75 0 01.445-.758l8.61-8.61zm1.414 1.06a.25.25 0 00-.354 0L10.811 3.75l1.439 1.44 1.263-1.263a.25.25 0 000-.354l-1.086-1.086zM11.189 6.25L9.75 4.81l-6.286 6.287a.25.25 0 00-.064.108l-.558 1.953 1.953-.558a.249.249 0 00.108-.064l6.286-6.286z"></path></svg>
+ </div>
+ <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="issue-opened-open">
+ <svg height="16" class="octicon octicon-issue-opened open" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path d="M8 9.5a1.5 1.5 0 100-3 1.5 1.5 0 000 3z"></path><path fill-rule="evenodd" d="M8 0a8 8 0 100 16A8 8 0 008 0zM1.5 8a6.5 6.5 0 1113 0 6.5 6.5 0 01-13 0z"></path></svg>
+ </div>
+ <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="git-pull-request-draft-color-fg-muted">
+ <svg height="16" class="octicon octicon-git-pull-request-draft color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M2.5 3.25a.75.75 0 111.5 0 .75.75 0 01-1.5 0zM3.25 1a2.25 2.25 0 00-.75 4.372v5.256a2.251 2.251 0 101.5 0V5.372A2.25 2.25 0 003.25 1zm0 11a.75.75 0 100 1.5.75.75 0 000-1.5zm9.5 3a2.25 2.25 0 100-4.5 2.25 2.25 0 000 4.5zm0-3a.75.75 0 100 1.5.75.75 0 000-1.5z"></path><path d="M14 7.5a1.25 1.25 0 11-2.5 0 1.25 1.25 0 012.5 0zm0-4.25a1.25 1.25 0 11-2.5 0 1.25 1.25 0 012.5 0z"></path></svg>
+ </div>
+ <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="search-color-fg-muted">
+ <svg height="16" class="octicon octicon-search color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M11.5 7a4.499 4.499 0 11-8.998 0A4.499 4.499 0 0111.5 7zm-.82 4.74a6 6 0 111.06-1.06l3.04 3.04a.75.75 0 11-1.06 1.06l-3.04-3.04z"></path></svg>
+ </div>
+ <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="sun-color-fg-muted">
+ <svg height="16" class="octicon octicon-sun color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M8 10.5a2.5 2.5 0 100-5 2.5 2.5 0 000 5zM8 12a4 4 0 100-8 4 4 0 000 8zM8 0a.75.75 0 01.75.75v1.5a.75.75 0 01-1.5 0V.75A.75.75 0 018 0zm0 13a.75.75 0 01.75.75v1.5a.75.75 0 01-1.5 0v-1.5A.75.75 0 018 13zM2.343 2.343a.75.75 0 011.061 0l1.06 1.061a.75.75 0 01-1.06 1.06l-1.06-1.06a.75.75 0 010-1.06zm9.193 9.193a.75.75 0 011.06 0l1.061 1.06a.75.75 0 01-1.06 1.061l-1.061-1.06a.75.75 0 010-1.061zM16 8a.75.75 0 01-.75.75h-1.5a.75.75 0 010-1.5h1.5A.75.75 0 0116 8zM3 8a.75.75 0 01-.75.75H.75a.75.75 0 010-1.5h1.5A.75.75 0 013 8zm10.657-5.657a.75.75 0 010 1.061l-1.061 1.06a.75.75 0 11-1.06-1.06l1.06-1.06a.75.75 0 011.06 0zm-9.193 9.193a.75.75 0 010 1.06l-1.06 1.061a.75.75 0 11-1.061-1.06l1.06-1.061a.75.75 0 011.061 0z"></path></svg>
+ </div>
+ <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="sync-color-fg-muted">
+ <svg height="16" class="octicon octicon-sync color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M8 2.5a5.487 5.487 0 00-4.131 1.869l1.204 1.204A.25.25 0 014.896 6H1.25A.25.25 0 011 5.75V2.104a.25.25 0 01.427-.177l1.38 1.38A7.001 7.001 0 0114.95 7.16a.75.75 0 11-1.49.178A5.501 5.501 0 008 2.5zM1.705 8.005a.75.75 0 01.834.656 5.501 5.501 0 009.592 2.97l-1.204-1.204a.25.25 0 01.177-.427h3.646a.25.25 0 01.25.25v3.646a.25.25 0 01-.427.177l-1.38-1.38A7.001 7.001 0 011.05 8.84a.75.75 0 01.656-.834z"></path></svg>
+ </div>
+ <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="trash-color-fg-muted">
+ <svg height="16" class="octicon octicon-trash color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M6.5 1.75a.25.25 0 01.25-.25h2.5a.25.25 0 01.25.25V3h-3V1.75zm4.5 0V3h2.25a.75.75 0 010 1.5H2.75a.75.75 0 010-1.5H5V1.75C5 .784 5.784 0 6.75 0h2.5C10.216 0 11 .784 11 1.75zM4.496 6.675a.75.75 0 10-1.492.15l.66 6.6A1.75 1.75 0 005.405 15h5.19c.9 0 1.652-.681 1.741-1.576l.66-6.6a.75.75 0 00-1.492-.149l-.66 6.6a.25.25 0 01-.249.225h-5.19a.25.25 0 01-.249-.225l-.66-6.6z"></path></svg>
+ </div>
+ <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="key-color-fg-muted">
+ <svg height="16" class="octicon octicon-key color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M6.5 5.5a4 4 0 112.731 3.795.75.75 0 00-.768.18L7.44 10.5H6.25a.75.75 0 00-.75.75v1.19l-.06.06H4.25a.75.75 0 00-.75.75v1.19l-.06.06H1.75a.25.25 0 01-.25-.25v-1.69l5.024-5.023a.75.75 0 00.181-.768A3.995 3.995 0 016.5 5.5zm4-5.5a5.5 5.5 0 00-5.348 6.788L.22 11.72a.75.75 0 00-.22.53v2C0 15.216.784 16 1.75 16h2a.75.75 0 00.53-.22l.5-.5a.75.75 0 00.22-.53V14h.75a.75.75 0 00.53-.22l.5-.5a.75.75 0 00.22-.53V12h.75a.75.75 0 00.53-.22l.932-.932A5.5 5.5 0 1010.5 0zm.5 6a1 1 0 100-2 1 1 0 000 2z"></path></svg>
+ </div>
+ <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="comment-discussion-color-fg-muted">
+ <svg height="16" class="octicon octicon-comment-discussion color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M1.5 2.75a.25.25 0 01.25-.25h8.5a.25.25 0 01.25.25v5.5a.25.25 0 01-.25.25h-3.5a.75.75 0 00-.53.22L3.5 11.44V9.25a.75.75 0 00-.75-.75h-1a.25.25 0 01-.25-.25v-5.5zM1.75 1A1.75 1.75 0 000 2.75v5.5C0 9.216.784 10 1.75 10H2v1.543a1.457 1.457 0 002.487 1.03L7.061 10h3.189A1.75 1.75 0 0012 8.25v-5.5A1.75 1.75 0 0010.25 1h-8.5zM14.5 4.75a.25.25 0 00-.25-.25h-.5a.75.75 0 110-1.5h.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0114.25 12H14v1.543a1.457 1.457 0 01-2.487 1.03L9.22 12.28a.75.75 0 111.06-1.06l2.22 2.22v-2.19a.75.75 0 01.75-.75h1a.25.25 0 00.25-.25v-5.5z"></path></svg>
+ </div>
+ <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="bell-color-fg-muted">
+ <svg height="16" class="octicon octicon-bell color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path d="M8 16a2 2 0 001.985-1.75c.017-.137-.097-.25-.235-.25h-3.5c-.138 0-.252.113-.235.25A2 2 0 008 16z"></path><path fill-rule="evenodd" d="M8 1.5A3.5 3.5 0 004.5 5v2.947c0 .346-.102.683-.294.97l-1.703 2.556a.018.018 0 00-.003.01l.001.006c0 .002.002.004.004.006a.017.017 0 00.006.004l.007.001h10.964l.007-.001a.016.016 0 00.006-.004.016.016 0 00.004-.006l.001-.007a.017.017 0 00-.003-.01l-1.703-2.554a1.75 1.75 0 01-.294-.97V5A3.5 3.5 0 008 1.5zM3 5a5 5 0 0110 0v2.947c0 .05.015.098.042.139l1.703 2.555A1.518 1.518 0 0113.482 13H2.518a1.518 1.518 0 01-1.263-2.36l1.703-2.554A.25.25 0 003 7.947V5z"></path></svg>
+ </div>
+ <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="bell-slash-color-fg-muted">
+ <svg height="16" class="octicon octicon-bell-slash color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M8 1.5c-.997 0-1.895.416-2.534 1.086A.75.75 0 014.38 1.55 5 5 0 0113 5v2.373a.75.75 0 01-1.5 0V5A3.5 3.5 0 008 1.5zM4.182 4.31L1.19 2.143a.75.75 0 10-.88 1.214L3 5.305v2.642a.25.25 0 01-.042.139L1.255 10.64A1.518 1.518 0 002.518 13h11.108l1.184.857a.75.75 0 10.88-1.214l-1.375-.996a1.196 1.196 0 00-.013-.01L4.198 4.321a.733.733 0 00-.016-.011zm7.373 7.19L4.5 6.391v1.556c0 .346-.102.683-.294.97l-1.703 2.556a.018.018 0 00-.003.01.015.015 0 00.005.012.017.017 0 00.006.004l.007.001h9.037zM8 16a2 2 0 001.985-1.75c.017-.137-.097-.25-.235-.25h-3.5c-.138 0-.252.113-.235.25A2 2 0 008 16z"></path></svg>
+ </div>
+ <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="paintbrush-color-fg-muted">
+ <svg height="16" class="octicon octicon-paintbrush color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M11.134 1.535C9.722 2.562 8.16 4.057 6.889 5.312 5.8 6.387 5.041 7.401 4.575 8.294a3.745 3.745 0 00-3.227 1.054c-.43.431-.69 1.066-.86 1.657a11.982 11.982 0 00-.358 1.914A21.263 21.263 0 000 15.203v.054l.75-.007-.007.75h.054a14.404 14.404 0 00.654-.012 21.243 21.243 0 001.63-.118c.62-.07 1.3-.18 1.914-.357.592-.17 1.226-.43 1.657-.861a3.745 3.745 0 001.055-3.217c.908-.461 1.942-1.216 3.04-2.3 1.279-1.262 2.764-2.825 3.775-4.249.501-.706.923-1.428 1.125-2.096.2-.659.235-1.469-.368-2.07-.606-.607-1.42-.55-2.069-.34-.66.213-1.376.646-2.076 1.155zm-3.95 8.48a3.76 3.76 0 00-1.19-1.192 9.758 9.758 0 011.161-1.607l1.658 1.658a9.853 9.853 0 01-1.63 1.142zM.742 16l.007-.75-.75.008A.75.75 0 00.743 16zM12.016 2.749c-1.224.89-2.605 2.189-3.822 3.384l1.718 1.718c1.21-1.205 2.51-2.597 3.387-3.833.47-.662.78-1.227.912-1.662.134-.444.032-.551.009-.575h-.001V1.78c-.014-.014-.112-.113-.548.027-.432.14-.995.462-1.655.942zM1.62 13.089a19.56 19.56 0 00-.104 1.395 19.55 19.55 0 001.396-.104 10.528 10.528 0 001.668-.309c.526-.151.856-.325 1.011-.48a2.25 2.25 0 00-3.182-3.182c-.155.155-.329.485-.48 1.01a10.515 10.515 0 00-.309 1.67z"></path></svg>
+ </div>
+
+ <command-palette-item-group
+ data-group-id="top"
+ data-group-title="Top result"
+ data-group-hint=""
+ data-group-limits="{}"
+ data-default-priority="0"
+ >
+ </command-palette-item-group>
+ <command-palette-item-group
+ data-group-id="commands"
+ data-group-title="Commands"
+ data-group-hint="Type &gt; to filter"
+ data-group-limits="{&quot;static_items_page&quot;:50,&quot;issue&quot;:50,&quot;pull_request&quot;:50,&quot;discussion&quot;:50}"
+ data-default-priority="1"
+ >
+ </command-palette-item-group>
+ <command-palette-item-group
+ data-group-id="global_commands"
+ data-group-title="Global Commands"
+ data-group-hint="Type &gt; to filter"
+ data-group-limits="{&quot;issue&quot;:0,&quot;pull_request&quot;:0,&quot;discussion&quot;:0}"
+ data-default-priority="2"
+ >
+ </command-palette-item-group>
+ <command-palette-item-group
+ data-group-id="this_page"
+ data-group-title="This Page"
+ data-group-hint=""
+ data-group-limits="{}"
+ data-default-priority="3"
+ >
+ </command-palette-item-group>
+ <command-palette-item-group
+ data-group-id="files"
+ data-group-title="Files"
+ data-group-hint=""
+ data-group-limits="{}"
+ data-default-priority="4"
+ >
+ </command-palette-item-group>
+ <command-palette-item-group
+ data-group-id="default"
+ data-group-title="Default"
+ data-group-hint=""
+ data-group-limits="{&quot;static_items_page&quot;:50}"
+ data-default-priority="5"
+ >
+ </command-palette-item-group>
+ <command-palette-item-group
+ data-group-id="pages"
+ data-group-title="Pages"
+ data-group-hint=""
+ data-group-limits="{&quot;repository&quot;:10}"
+ data-default-priority="6"
+ >
+ </command-palette-item-group>
+ <command-palette-item-group
+ data-group-id="access_policies"
+ data-group-title="Access Policies"
+ data-group-hint=""
+ data-group-limits="{}"
+ data-default-priority="7"
+ >
+ </command-palette-item-group>
+ <command-palette-item-group
+ data-group-id="organizations"
+ data-group-title="Organizations"
+ data-group-hint=""
+ data-group-limits="{}"
+ data-default-priority="8"
+ >
+ </command-palette-item-group>
+ <command-palette-item-group
+ data-group-id="repositories"
+ data-group-title="Repositories"
+ data-group-hint=""
+ data-group-limits="{}"
+ data-default-priority="9"
+ >
+ </command-palette-item-group>
+ <command-palette-item-group
+ data-group-id="references"
+ data-group-title="Issues, pull requests, and discussions"
+ data-group-hint="Type # to filter"
+ data-group-limits="{}"
+ data-default-priority="10"
+ >
+ </command-palette-item-group>
+ <command-palette-item-group
+ data-group-id="teams"
+ data-group-title="Teams"
+ data-group-hint=""
+ data-group-limits="{}"
+ data-default-priority="11"
+ >
+ </command-palette-item-group>
+ <command-palette-item-group
+ data-group-id="users"
+ data-group-title="Users"
+ data-group-hint=""
+ data-group-limits="{}"
+ data-default-priority="12"
+ >
+ </command-palette-item-group>
+ <command-palette-item-group
+ data-group-id="projects"
+ data-group-title="Projects"
+ data-group-hint=""
+ data-group-limits="{}"
+ data-default-priority="13"
+ >
+ </command-palette-item-group>
+ <command-palette-item-group
+ data-group-id="footer"
+ data-group-title="Footer"
+ data-group-hint=""
+ data-group-limits="{}"
+ data-default-priority="14"
+ >
+ </command-palette-item-group>
+ <command-palette-item-group
+ data-group-id="modes_help"
+ data-group-title="Modes"
+ data-group-hint=""
+ data-group-limits="{}"
+ data-default-priority="15"
+ >
+ </command-palette-item-group>
+ <command-palette-item-group
+ data-group-id="filters_help"
+ data-group-title="Use filters in issues, pull requests, discussions, and projects"
+ data-group-hint=""
+ data-group-limits="{}"
+ data-default-priority="16"
+ >
+ </command-palette-item-group>
+
+ <command-palette-page
+ data-page-title="rlkamalapurkar"
+ data-scope-id="MDQ6VXNlcjMwMjY0NzIw"
+ data-scope-type="owner"
+ data-targets="command-palette-page-stack.defaultPages"
+ hidden
+ >
+ </command-palette-page>
+ <command-palette-page
+ data-page-title="bodeplot"
+ data-scope-id="R_kgDOGPTXYA"
+ data-scope-type="repository"
+ data-targets="command-palette-page-stack.defaultPages"
+ hidden
+ >
+ </command-palette-page>
+ </div>
+
+ <command-palette-page data-is-root>
+ </command-palette-page>
+ <command-palette-page
+ data-page-title="rlkamalapurkar"
+ data-scope-id="MDQ6VXNlcjMwMjY0NzIw"
+ data-scope-type="owner"
+ >
+ </command-palette-page>
+ <command-palette-page
+ data-page-title="bodeplot"
+ data-scope-id="R_kgDOGPTXYA"
+ data-scope-type="repository"
+ >
+ </command-palette-page>
+ </command-palette-page-stack>
+
+ <server-defined-provider data-type="search-links" data-targets="command-palette.serverDefinedProviderElements"></server-defined-provider>
+ <server-defined-provider data-type="help" data-targets="command-palette.serverDefinedProviderElements">
+ <command-palette-help
+ data-group="modes_help"
+ data-prefix="#"
+ data-scope-types="[&quot;&quot;]"
+ >
+ <span data-target="command-palette-help.titleElement">Search for <strong>issues</strong> and <strong>pull requests</strong></span>
+ <span data-target="command-palette-help.hintElement">
+ <kbd class="hx_kbd">#</kbd>
+ </span>
+ </command-palette-help>
+ <command-palette-help
+ data-group="modes_help"
+ data-prefix="#"
+ data-scope-types="[&quot;owner&quot;,&quot;repository&quot;]"
+ >
+ <span data-target="command-palette-help.titleElement">Search for <strong>issues, pull requests, discussions,</strong> and <strong>projects</strong></span>
+ <span data-target="command-palette-help.hintElement">
+ <kbd class="hx_kbd">#</kbd>
+ </span>
+ </command-palette-help>
+ <command-palette-help
+ data-group="modes_help"
+ data-prefix="@"
+ data-scope-types="[&quot;&quot;]"
+ >
+ <span data-target="command-palette-help.titleElement">Search for <strong>organizations, repositories,</strong> and <strong>users</strong></span>
+ <span data-target="command-palette-help.hintElement">
+ <kbd class="hx_kbd">@</kbd>
+ </span>
+ </command-palette-help>
+ <command-palette-help
+ data-group="modes_help"
+ data-prefix="!"
+ data-scope-types="[&quot;owner&quot;,&quot;repository&quot;]"
+ >
+ <span data-target="command-palette-help.titleElement">Search for <strong>projects</strong></span>
+ <span data-target="command-palette-help.hintElement">
+ <kbd class="hx_kbd">!</kbd>
+ </span>
+ </command-palette-help>
+ <command-palette-help
+ data-group="modes_help"
+ data-prefix="/"
+ data-scope-types="[&quot;repository&quot;]"
+ >
+ <span data-target="command-palette-help.titleElement">Search for <strong>files</strong></span>
+ <span data-target="command-palette-help.hintElement">
+ <kbd class="hx_kbd">/</kbd>
+ </span>
+ </command-palette-help>
+ <command-palette-help
+ data-group="modes_help"
+ data-prefix="&gt;"
+ >
+ <span data-target="command-palette-help.titleElement">Activate <strong>command mode</strong></span>
+ <span data-target="command-palette-help.hintElement">
+ <kbd class="hx_kbd">&gt;</kbd>
+ </span>
+ </command-palette-help>
+ <command-palette-help
+ data-group="filters_help"
+ data-prefix="# author:@me"
+ >
+ <span data-target="command-palette-help.titleElement">Search your issues, pull requests, and discussions</span>
+ <span data-target="command-palette-help.hintElement">
+ <kbd class="hx_kbd"># author:@me</kbd>
+ </span>
+ </command-palette-help>
+ <command-palette-help
+ data-group="filters_help"
+ data-prefix="# author:@me"
+ >
+ <span data-target="command-palette-help.titleElement">Search your issues, pull requests, and discussions</span>
+ <span data-target="command-palette-help.hintElement">
+ <kbd class="hx_kbd"># author:@me</kbd>
+ </span>
+ </command-palette-help>
+ <command-palette-help
+ data-group="filters_help"
+ data-prefix="# is:pr"
+ >
+ <span data-target="command-palette-help.titleElement">Filter to pull requests</span>
+ <span data-target="command-palette-help.hintElement">
+ <kbd class="hx_kbd"># is:pr</kbd>
+ </span>
+ </command-palette-help>
+ <command-palette-help
+ data-group="filters_help"
+ data-prefix="# is:issue"
+ >
+ <span data-target="command-palette-help.titleElement">Filter to issues</span>
+ <span data-target="command-palette-help.hintElement">
+ <kbd class="hx_kbd"># is:issue</kbd>
+ </span>
+ </command-palette-help>
+ <command-palette-help
+ data-group="filters_help"
+ data-prefix="# is:discussion"
+ data-scope-types="[&quot;owner&quot;,&quot;repository&quot;]"
+ >
+ <span data-target="command-palette-help.titleElement">Filter to discussions</span>
+ <span data-target="command-palette-help.hintElement">
+ <kbd class="hx_kbd"># is:discussion</kbd>
+ </span>
+ </command-palette-help>
+ <command-palette-help
+ data-group="filters_help"
+ data-prefix="# is:project"
+ data-scope-types="[&quot;owner&quot;,&quot;repository&quot;]"
+ >
+ <span data-target="command-palette-help.titleElement">Filter to projects</span>
+ <span data-target="command-palette-help.hintElement">
+ <kbd class="hx_kbd"># is:project</kbd>
+ </span>
+ </command-palette-help>
+ <command-palette-help
+ data-group="filters_help"
+ data-prefix="# is:open"
+ >
+ <span data-target="command-palette-help.titleElement">Filter to open issues, pull requests, and discussions</span>
+ <span data-target="command-palette-help.hintElement">
+ <kbd class="hx_kbd"># is:open</kbd>
+ </span>
+ </command-palette-help>
+ </server-defined-provider>
+
+ <server-defined-provider
+ data-type="commands"
+ data-fetch-debounce="0"
+ data-src="/command_palette/commands"
+ data-supported-modes="[]"
+ data-supports-commands
+
+ data-targets="command-palette.serverDefinedProviderElements"
+ ></server-defined-provider>
+ <server-defined-provider
+ data-type="prefetched"
+ data-fetch-debounce="0"
+ data-src="/command_palette/jump_to_page_navigation"
+ data-supported-modes="[&quot;&quot;]"
+ data-supported-scope-types="[&quot;&quot;,&quot;owner&quot;,&quot;repository&quot;]"
+
+ data-targets="command-palette.serverDefinedProviderElements"
+ ></server-defined-provider>
+ <server-defined-provider
+ data-type="remote"
+ data-fetch-debounce="200"
+ data-src="/command_palette/issues"
+ data-supported-modes="[&quot;#&quot;,&quot;#&quot;]"
+ data-supported-scope-types="[&quot;owner&quot;,&quot;repository&quot;,&quot;&quot;]"
+
+ data-targets="command-palette.serverDefinedProviderElements"
+ ></server-defined-provider>
+ <server-defined-provider
+ data-type="remote"
+ data-fetch-debounce="200"
+ data-src="/command_palette/jump_to"
+ data-supported-modes="[&quot;@&quot;,&quot;@&quot;]"
+ data-supported-scope-types="[&quot;&quot;,&quot;owner&quot;]"
+
+ data-targets="command-palette.serverDefinedProviderElements"
+ ></server-defined-provider>
+ <server-defined-provider
+ data-type="remote"
+ data-fetch-debounce="200"
+ data-src="/command_palette/jump_to_members_only"
+ data-supported-modes="[&quot;@&quot;,&quot;@&quot;,&quot;&quot;,&quot;&quot;]"
+ data-supported-scope-types="[&quot;&quot;,&quot;owner&quot;]"
+
+ data-targets="command-palette.serverDefinedProviderElements"
+ ></server-defined-provider>
+ <server-defined-provider
+ data-type="prefetched"
+ data-fetch-debounce="0"
+ data-src="/command_palette/jump_to_members_only_prefetched"
+ data-supported-modes="[&quot;@&quot;,&quot;@&quot;,&quot;&quot;,&quot;&quot;]"
+ data-supported-scope-types="[&quot;&quot;,&quot;owner&quot;]"
+
+ data-targets="command-palette.serverDefinedProviderElements"
+ ></server-defined-provider>
+ <server-defined-provider
+ data-type="files"
+ data-fetch-debounce="0"
+ data-src="/command_palette/files"
+ data-supported-modes="[&quot;/&quot;]"
+ data-supported-scope-types="[&quot;repository&quot;]"
+
+ data-targets="command-palette.serverDefinedProviderElements"
+ ></server-defined-provider>
+ <server-defined-provider
+ data-type="remote"
+ data-fetch-debounce="200"
+ data-src="/command_palette/discussions"
+ data-supported-modes="[&quot;#&quot;]"
+ data-supported-scope-types="[&quot;owner&quot;,&quot;repository&quot;]"
+
+ data-targets="command-palette.serverDefinedProviderElements"
+ ></server-defined-provider>
+ <server-defined-provider
+ data-type="remote"
+ data-fetch-debounce="200"
+ data-src="/command_palette/projects"
+ data-supported-modes="[&quot;#&quot;,&quot;!&quot;]"
+ data-supported-scope-types="[&quot;owner&quot;,&quot;repository&quot;]"
+
+ data-targets="command-palette.serverDefinedProviderElements"
+ ></server-defined-provider>
+ <server-defined-provider
+ data-type="prefetched"
+ data-fetch-debounce="0"
+ data-src="/command_palette/recent_issues"
+ data-supported-modes="[&quot;#&quot;,&quot;#&quot;]"
+ data-supported-scope-types="[&quot;owner&quot;,&quot;repository&quot;,&quot;&quot;]"
+
+ data-targets="command-palette.serverDefinedProviderElements"
+ ></server-defined-provider>
+ <server-defined-provider
+ data-type="remote"
+ data-fetch-debounce="200"
+ data-src="/command_palette/teams"
+ data-supported-modes="[&quot;@&quot;,&quot;&quot;]"
+ data-supported-scope-types="[&quot;owner&quot;]"
+
+ data-targets="command-palette.serverDefinedProviderElements"
+ ></server-defined-provider>
+ <server-defined-provider
+ data-type="remote"
+ data-fetch-debounce="200"
+ data-src="/command_palette/name_with_owner_repository"
+ data-supported-modes="[&quot;@&quot;,&quot;@&quot;,&quot;&quot;,&quot;&quot;]"
+ data-supported-scope-types="[&quot;&quot;,&quot;owner&quot;]"
+
+ data-targets="command-palette.serverDefinedProviderElements"
+ ></server-defined-provider>
+ </command-palette>
+ </details-dialog>
+</details>
+
+<div class="position-fixed bottom-0 left-0 ml-5 mb-5 js-command-palette-toasts" style="z-index: 1000">
+ <div hidden class="Toast Toast--loading">
+ <span class="Toast-icon">
+ <svg class="Toast--spinner" viewBox="0 0 32 32" width="18" height="18" aria-hidden="true">
+ <path
+ fill="#959da5"
+ d="M16 0 A16 16 0 0 0 16 32 A16 16 0 0 0 16 0 M16 4 A12 12 0 0 1 16 28 A12 12 0 0 1 16 4"
+ />
+ <path fill="#ffffff" d="M16 0 A16 16 0 0 1 32 16 L28 16 A12 12 0 0 0 16 4z"></path>
+ </svg>
+ </span>
+ <span class="Toast-content"></span>
+ </div>
+
+ <div hidden class="anim-fade-in fast Toast Toast--error">
+ <span class="Toast-icon">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-stop">
+ <path fill-rule="evenodd" d="M4.47.22A.75.75 0 015 0h6a.75.75 0 01.53.22l4.25 4.25c.141.14.22.331.22.53v6a.75.75 0 01-.22.53l-4.25 4.25A.75.75 0 0111 16H5a.75.75 0 01-.53-.22L.22 11.53A.75.75 0 010 11V5a.75.75 0 01.22-.53L4.47.22zm.84 1.28L1.5 5.31v5.38l3.81 3.81h5.38l3.81-3.81V5.31L10.69 1.5H5.31zM8 4a.75.75 0 01.75.75v3.5a.75.75 0 01-1.5 0v-3.5A.75.75 0 018 4zm0 8a1 1 0 100-2 1 1 0 000 2z"></path>
+</svg>
+ </span>
+ <span class="Toast-content"></span>
+ </div>
+
+ <div hidden class="anim-fade-in fast Toast Toast--warning">
+ <span class="Toast-icon">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
+ <path fill-rule="evenodd" d="M8.22 1.754a.25.25 0 00-.44 0L1.698 13.132a.25.25 0 00.22.368h12.164a.25.25 0 00.22-.368L8.22 1.754zm-1.763-.707c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0114.082 15H1.918a1.75 1.75 0 01-1.543-2.575L6.457 1.047zM9 11a1 1 0 11-2 0 1 1 0 012 0zm-.25-5.25a.75.75 0 00-1.5 0v2.5a.75.75 0 001.5 0v-2.5z"></path>
+</svg>
+ </span>
+ <span class="Toast-content"></span>
+ </div>
+
+
+ <div hidden class="anim-fade-in fast Toast Toast--success">
+ <span class="Toast-icon">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check">
+ <path fill-rule="evenodd" d="M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z"></path>
+</svg>
+ </span>
+ <span class="Toast-content"></span>
+ </div>
+
+ <div hidden class="anim-fade-in fast Toast">
+ <span class="Toast-icon">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-info">
+ <path fill-rule="evenodd" d="M8 1.5a6.5 6.5 0 100 13 6.5 6.5 0 000-13zM0 8a8 8 0 1116 0A8 8 0 010 8zm6.5-.25A.75.75 0 017.25 7h1a.75.75 0 01.75.75v2.75h.25a.75.75 0 010 1.5h-2a.75.75 0 010-1.5h.25v-2h-.25a.75.75 0 01-.75-.75zM8 6a1 1 0 100-2 1 1 0 000 2z"></path>
+</svg>
+ </span>
+ <span class="Toast-content"></span>
+ </div>
+</div>
+
+
+ <div
+ class="application-main "
+ data-commit-hovercards-enabled
+ data-discussion-hovercards-enabled
+ data-issue-and-pr-hovercards-enabled
+ >
+ <div itemscope itemtype="http://schema.org/SoftwareSourceCode" class="">
+ <main id="js-repo-pjax-container" >
+
+
+
+
+
+
+
+
+
+
+ <div id="repository-container-header" class="pt-3 hide-full-screen" style="background-color: var(--color-page-header-bg);" data-turbo-replace>
+
+ <div class="d-flex flex-wrap flex-justify-end mb-3 px-3 px-md-4 px-lg-5" style="gap: 1rem;">
+
+ <div class="flex-auto min-width-0 width-fit mr-3">
+
+ <div class=" d-flex flex-wrap flex-items-center wb-break-word f3 text-normal">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo color-fg-muted mr-2">
+ <path fill-rule="evenodd" d="M2 2.5A2.5 2.5 0 014.5 0h8.75a.75.75 0 01.75.75v12.5a.75.75 0 01-.75.75h-2.5a.75.75 0 110-1.5h1.75v-2h-8a1 1 0 00-.714 1.7.75.75 0 01-1.072 1.05A2.495 2.495 0 012 11.5v-9zm10.5-1V9h-8c-.356 0-.694.074-1 .208V2.5a1 1 0 011-1h8zM5 12.25v3.25a.25.25 0 00.4.2l1.45-1.087a.25.25 0 01.3 0L8.6 15.7a.25.25 0 00.4-.2v-3.25a.25.25 0 00-.25-.25h-3.5a.25.25 0 00-.25.25z"></path>
+</svg>
+
+ <span class="author flex-self-stretch" itemprop="author">
+ <a class="url fn" rel="author" data-hovercard-type="user" data-hovercard-url="/users/rlkamalapurkar/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/rlkamalapurkar">rlkamalapurkar</a>
+ </span>
+ <span class="mx-1 flex-self-stretch color-fg-muted">/</span>
+ <strong itemprop="name" class="mr-2 flex-self-stretch">
+ <a data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" href="/rlkamalapurkar/bodeplot">bodeplot</a>
+ </strong>
+
+ <span></span><span class="Label Label--secondary v-align-middle mr-1">Public</span>
+ </div>
+
+
+ </div>
+
+ <ul class="pagehead-actions flex-shrink-0 d-none d-md-inline" style="padding: 2px 0;">
+
+ <li>
+ <div class="float-left" data-test-selector="pin-repo-button">
+ <form data-turbo="false" action="/rlkamalapurkar/bodeplot/profile_pin" accept-charset="UTF-8" method="post"><input type="hidden" name="authenticity_token" value="Yh4mPKH9QPIw0MgBTbdHvKwF8bmM6ua4Ei4TSxPqtVbeGphRt9N6S5KN-WZc-jdM2ycSAe47IyL2TPAuto9pEg" autocomplete="off" />
+ <button title="Pin this repository to your profile" type="submit" data-view-component="true" class="btn-sm btn"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-pin mr-2">
+ <path fill-rule="evenodd" d="M4.456.734a1.75 1.75 0 012.826.504l.613 1.327a3.081 3.081 0 002.084 1.707l2.454.584c1.332.317 1.8 1.972.832 2.94L11.06 10l3.72 3.72a.75.75 0 11-1.061 1.06L10 11.06l-2.204 2.205c-.968.968-2.623.5-2.94-.832l-.584-2.454a3.081 3.081 0 00-1.707-2.084l-1.327-.613a1.75 1.75 0 01-.504-2.826L4.456.734zM5.92 1.866a.25.25 0 00-.404-.072L1.794 5.516a.25.25 0 00.072.404l1.328.613A4.582 4.582 0 015.73 9.63l.584 2.454a.25.25 0 00.42.12l5.47-5.47a.25.25 0 00-.12-.42L9.63 5.73a4.581 4.581 0 01-3.098-2.537L5.92 1.866z"></path>
+</svg>Pin
+</button></form> </div>
+</li>
+
+
+ <li>
+ <notifications-list-subscription-form
+ data-action="notifications-dialog-label-toggled:notifications-list-subscription-form#handleDialogLabelToggle"
+ class="f5 position-relative"
+ >
+ <details
+ class="details-reset details-overlay f5 position-relative"
+ data-target="notifications-list-subscription-form.details"
+ data-action="toggle:notifications-list-subscription-form#detailsToggled"
+ >
+
+ <summary data-hydro-click="{&quot;event_type&quot;:&quot;repository.click&quot;,&quot;payload&quot;:{&quot;target&quot;:&quot;WATCH_BUTTON&quot;,&quot;repository_id&quot;:418699104,&quot;originating_url&quot;:&quot;https://github.com/rlkamalapurkar/bodeplot/blob/main/README.md&quot;,&quot;user_id&quot;:30264720}}" data-hydro-click-hmac="a74b9da95392a29d24c07fdf37c2a7ddaccb609527940d397f4ad8b8123afa7f" data-ga-click="Repository, click Watch settings, action:blob#show" aria-label="Notification settings" data-view-component="true" class="btn-sm btn"> <span data-menu-button>
+ <span
+
+
+ data-target="notifications-list-subscription-form.unwatchButtonCopy"
+ >
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-eye">
+ <path fill-rule="evenodd" d="M1.679 7.932c.412-.621 1.242-1.75 2.366-2.717C5.175 4.242 6.527 3.5 8 3.5c1.473 0 2.824.742 3.955 1.715 1.124.967 1.954 2.096 2.366 2.717a.119.119 0 010 .136c-.412.621-1.242 1.75-2.366 2.717C10.825 11.758 9.473 12.5 8 12.5c-1.473 0-2.824-.742-3.955-1.715C2.92 9.818 2.09 8.69 1.679 8.068a.119.119 0 010-.136zM8 2c-1.981 0-3.67.992-4.933 2.078C1.797 5.169.88 6.423.43 7.1a1.619 1.619 0 000 1.798c.45.678 1.367 1.932 2.637 3.024C4.329 13.008 6.019 14 8 14c1.981 0 3.67-.992 4.933-2.078 1.27-1.091 2.187-2.345 2.637-3.023a1.619 1.619 0 000-1.798c-.45-.678-1.367-1.932-2.637-3.023C11.671 2.992 9.981 2 8 2zm0 8a2 2 0 100-4 2 2 0 000 4z"></path>
+</svg>
+ Unwatch
+ </span>
+ <span
+ hidden
+
+ data-target="notifications-list-subscription-form.stopIgnoringButtonCopy"
+ >
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-bell-slash">
+ <path fill-rule="evenodd" d="M8 1.5c-.997 0-1.895.416-2.534 1.086A.75.75 0 014.38 1.55 5 5 0 0113 5v2.373a.75.75 0 01-1.5 0V5A3.5 3.5 0 008 1.5zM4.182 4.31L1.19 2.143a.75.75 0 10-.88 1.214L3 5.305v2.642a.25.25 0 01-.042.139L1.255 10.64A1.518 1.518 0 002.518 13h11.108l1.184.857a.75.75 0 10.88-1.214l-1.375-.996a1.196 1.196 0 00-.013-.01L4.198 4.321a.733.733 0 00-.016-.011zm7.373 7.19L4.5 6.391v1.556c0 .346-.102.683-.294.97l-1.703 2.556a.018.018 0 00-.003.01.015.015 0 00.005.012.017.017 0 00.006.004l.007.001h9.037zM8 16a2 2 0 001.985-1.75c.017-.137-.097-.25-.235-.25h-3.5c-.138 0-.252.113-.235.25A2 2 0 008 16z"></path>
+</svg>
+ Stop ignoring
+ </span>
+ <span
+ hidden
+
+ data-target="notifications-list-subscription-form.watchButtonCopy"
+ >
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-eye">
+ <path fill-rule="evenodd" d="M1.679 7.932c.412-.621 1.242-1.75 2.366-2.717C5.175 4.242 6.527 3.5 8 3.5c1.473 0 2.824.742 3.955 1.715 1.124.967 1.954 2.096 2.366 2.717a.119.119 0 010 .136c-.412.621-1.242 1.75-2.366 2.717C10.825 11.758 9.473 12.5 8 12.5c-1.473 0-2.824-.742-3.955-1.715C2.92 9.818 2.09 8.69 1.679 8.068a.119.119 0 010-.136zM8 2c-1.981 0-3.67.992-4.933 2.078C1.797 5.169.88 6.423.43 7.1a1.619 1.619 0 000 1.798c.45.678 1.367 1.932 2.637 3.024C4.329 13.008 6.019 14 8 14c1.981 0 3.67-.992 4.933-2.078 1.27-1.091 2.187-2.345 2.637-3.023a1.619 1.619 0 000-1.798c-.45-.678-1.367-1.932-2.637-3.023C11.671 2.992 9.981 2 8 2zm0 8a2 2 0 100-4 2 2 0 000 4z"></path>
+</svg>
+ Watch
+ </span>
+ </span>
+ <span id="repo-notifications-counter" data-target="notifications-list-subscription-form.socialCount" data-pjax-replace="true" data-turbo-replace="true" title="1" data-view-component="true" class="Counter">1</span>
+ <span class="dropdown-caret"></span>
+</summary>
+ <details-menu
+ class="SelectMenu "
+ role="menu"
+ data-target="notifications-list-subscription-form.menu"
+
+ >
+ <div class="SelectMenu-modal notifications-component-menu-modal">
+ <header class="SelectMenu-header">
+ <h3 class="SelectMenu-title">Notifications</h3>
+ <button class="SelectMenu-closeButton" type="button" aria-label="Close menu" data-action="click:notifications-list-subscription-form#closeMenu">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x">
+ <path fill-rule="evenodd" d="M3.72 3.72a.75.75 0 011.06 0L8 6.94l3.22-3.22a.75.75 0 111.06 1.06L9.06 8l3.22 3.22a.75.75 0 11-1.06 1.06L8 9.06l-3.22 3.22a.75.75 0 01-1.06-1.06L6.94 8 3.72 4.78a.75.75 0 010-1.06z"></path>
+</svg>
+ </button>
+ </header>
+
+ <div class="SelectMenu-list">
+ <form data-target="notifications-list-subscription-form.form" data-action="submit:notifications-list-subscription-form#submitForm" data-turbo="false" action="/notifications/subscribe" accept-charset="UTF-8" method="post"><input type="hidden" name="authenticity_token" value="6w5ZQQweNaZyOrfOxew0mnuQ5zPZ63VMUIj3fjQRqLdaazS5qLMlfHwrbzgD3u35u41LdxQ5EN8ccUiSSfPYlA" autocomplete="off" />
+
+ <input type="hidden" name="repository_id" value="418699104">
+
+ <button
+ type="submit"
+ name="do"
+ value="included"
+ class="SelectMenu-item flex-items-start"
+ role="menuitemradio"
+ aria-checked="false"
+ data-targets="notifications-list-subscription-form.subscriptionButtons"
+
+ >
+ <span class="f5">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check SelectMenu-icon SelectMenu-icon--check">
+ <path fill-rule="evenodd" d="M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z"></path>
+</svg>
+ </span>
+ <div>
+ <div class="f5 text-bold">
+ Participating and @mentions
+ </div>
+ <div class="text-small color-fg-muted text-normal pb-1">
+ Only receive notifications from this repository when participating or @mentioned.
+ </div>
+ </div>
+ </button>
+
+ <button
+ type="submit"
+ name="do"
+ value="subscribed"
+ class="SelectMenu-item flex-items-start"
+ role="menuitemradio"
+ aria-checked="true"
+ data-targets="notifications-list-subscription-form.subscriptionButtons"
+ >
+ <span class="f5">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check SelectMenu-icon SelectMenu-icon--check">
+ <path fill-rule="evenodd" d="M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z"></path>
+</svg>
+ </span>
+ <div>
+ <div class="f5 text-bold">
+ All Activity
+ </div>
+ <div class="text-small color-fg-muted text-normal pb-1">
+ Notified of all notifications on this repository.
+ </div>
+ </div>
+ </button>
+
+ <button
+ type="submit"
+ name="do"
+ value="ignore"
+ class="SelectMenu-item flex-items-start"
+ role="menuitemradio"
+ aria-checked="false"
+ data-targets="notifications-list-subscription-form.subscriptionButtons"
+ >
+ <span class="f5">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check SelectMenu-icon SelectMenu-icon--check">
+ <path fill-rule="evenodd" d="M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z"></path>
+</svg>
+ </span>
+ <div>
+ <div class="f5 text-bold">
+ Ignore
+ </div>
+ <div class="text-small color-fg-muted text-normal pb-1">
+ Never be notified.
+ </div>
+ </div>
+ </button>
+</form>
+ <button
+ class="SelectMenu-item flex-items-start pr-3"
+ type="button"
+ role="menuitemradio"
+ data-target="notifications-list-subscription-form.customButton"
+ data-action="click:notifications-list-subscription-form#openCustomDialog"
+ aria-haspopup="true"
+ aria-checked="false"
+
+ >
+ <span class="f5">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check SelectMenu-icon SelectMenu-icon--check">
+ <path fill-rule="evenodd" d="M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z"></path>
+</svg>
+ </span>
+ <div>
+ <div class="d-flex flex-items-start flex-justify-between">
+ <div class="f5 text-bold">Custom</div>
+ <div class="f5 pr-1">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-arrow-right">
+ <path fill-rule="evenodd" d="M8.22 2.97a.75.75 0 011.06 0l4.25 4.25a.75.75 0 010 1.06l-4.25 4.25a.75.75 0 01-1.06-1.06l2.97-2.97H3.75a.75.75 0 010-1.5h7.44L8.22 4.03a.75.75 0 010-1.06z"></path>
+</svg>
+ </div>
+ </div>
+ <div class="text-small color-fg-muted text-normal pb-1">
+ Select events you want to be notified of in addition to participating and @mentions.
+ </div>
+ </div>
+ </button>
+
+ <div class="px-3 py-2 d-flex color-bg-subtle flex-items-center">
+ <span class="f5">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-device-mobile SelectMenu-icon SelectMenu-icon--device-mobile">
+ <path fill-rule="evenodd" d="M3.75 0A1.75 1.75 0 002 1.75v12.5c0 .966.784 1.75 1.75 1.75h8.5A1.75 1.75 0 0014 14.25V1.75A1.75 1.75 0 0012.25 0h-8.5zM3.5 1.75a.25.25 0 01.25-.25h8.5a.25.25 0 01.25.25v12.5a.25.25 0 01-.25.25h-8.5a.25.25 0 01-.25-.25V1.75zM8 13a1 1 0 100-2 1 1 0 000 2z"></path>
+</svg>
+ </span>
+ <span className="text-small color-fg-muted text-normal pb-1">
+ Get push notifications on <a target="_blank" rel="noopener noreferrer" href="https://apps.apple.com/app/apple-store/id1477376905?ct=watch-dropdown&amp;mt=8&amp;pt=524675">iOS</a> or <a target="_blank" rel="noopener noreferrer" href="https://play.google.com/store/apps/details?id=com.github.android&amp;referrer=utm_campaign%3Dwatch-dropdown%26utm_medium%3Dweb%26utm_source%3Dgithub">Android</a>.
+ </span>
+ </div>
+ </div>
+ </div>
+ </details-menu>
+
+ <details-dialog
+ class="notifications-component-dialog "
+ data-target="notifications-list-subscription-form.customDialog"
+ aria-label="Custom dialog"
+ hidden
+ >
+ <div class="SelectMenu-modal notifications-component-dialog-modal overflow-visible">
+ <form data-target="notifications-list-subscription-form.customform" data-action="submit:notifications-list-subscription-form#submitCustomForm" data-turbo="false" action="/notifications/subscribe" accept-charset="UTF-8" method="post"><input type="hidden" name="authenticity_token" value="E3glmHf6InydnbIrnyaJsCJVkEjXSFzYzLUKfTZfrCSiHUhg01cyppOMat1ZFFDT4kg8DBqaOUuATLWRS73cBw" autocomplete="off" />
+
+ <input type="hidden" name="repository_id" value="418699104">
+
+ <header class="d-sm-none SelectMenu-header pb-0 border-bottom-0 px-2 px-sm-3">
+ <h1 class="f3 SelectMenu-title d-inline-flex">
+ <button
+ class="color-bg-default border-0 px-2 py-0 m-0 Link--secondary f5"
+ aria-label="Return to menu"
+ type="button"
+ data-action="click:notifications-list-subscription-form#closeCustomDialog"
+ >
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-arrow-left">
+ <path fill-rule="evenodd" d="M7.78 12.53a.75.75 0 01-1.06 0L2.47 8.28a.75.75 0 010-1.06l4.25-4.25a.75.75 0 011.06 1.06L4.81 7h7.44a.75.75 0 010 1.5H4.81l2.97 2.97a.75.75 0 010 1.06z"></path>
+</svg>
+ </button>
+ Custom
+ </h1>
+ </header>
+
+ <header class="d-none d-sm-flex flex-items-start pt-1">
+ <button
+ class="border-0 px-2 pt-1 m-0 Link--secondary f5"
+ style="background-color: transparent;"
+ aria-label="Return to menu"
+ type="button"
+ data-action="click:notifications-list-subscription-form#closeCustomDialog"
+ >
+ <svg style="position: relative; left: 2px; top: 1px" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-arrow-left">
+ <path fill-rule="evenodd" d="M7.78 12.53a.75.75 0 01-1.06 0L2.47 8.28a.75.75 0 010-1.06l4.25-4.25a.75.75 0 011.06 1.06L4.81 7h7.44a.75.75 0 010 1.5H4.81l2.97 2.97a.75.75 0 010 1.06z"></path>
+</svg>
+ </button>
+
+ <h1 class="pt-1 pr-4 pb-0 pl-0 f5 text-bold">
+ Custom
+ </h1>
+ </header>
+
+ <fieldset>
+ <legend>
+ <div class="text-small color-fg-muted pt-0 pr-3 pb-3 pl-6 pl-sm-5 border-bottom mb-3">
+ Select events you want to be notified of in addition to participating and @mentions.
+ </div>
+ </legend>
+ <div data-target="notifications-list-subscription-form.labelInputs">
+ </div>
+ <div class="form-checkbox mr-3 ml-6 ml-sm-5 mb-2 mt-0">
+ <label class="f5 text-normal">
+ <input
+ type="checkbox"
+ name="thread_types[]"
+ value="Issue"
+ data-targets="notifications-list-subscription-form.threadTypeCheckboxes"
+ data-action="change:notifications-list-subscription-form#threadTypeCheckboxesUpdated"
+
+ >
+ Issues
+ </label>
+
+
+ </div>
+ <div class="form-checkbox mr-3 ml-6 ml-sm-5 mb-2 mt-0">
+ <label class="f5 text-normal">
+ <input
+ type="checkbox"
+ name="thread_types[]"
+ value="PullRequest"
+ data-targets="notifications-list-subscription-form.threadTypeCheckboxes"
+ data-action="change:notifications-list-subscription-form#threadTypeCheckboxesUpdated"
+
+ >
+ Pull requests
+ </label>
+
+
+ </div>
+ <div class="form-checkbox mr-3 ml-6 ml-sm-5 mb-2 mt-0">
+ <label class="f5 text-normal">
+ <input
+ type="checkbox"
+ name="thread_types[]"
+ value="Release"
+ data-targets="notifications-list-subscription-form.threadTypeCheckboxes"
+ data-action="change:notifications-list-subscription-form#threadTypeCheckboxesUpdated"
+
+ >
+ Releases
+ </label>
+
+
+ </div>
+ <div class="form-checkbox mr-3 ml-6 ml-sm-5 mb-2 mt-0">
+ <label class="f5 text-normal">
+ <input
+ type="checkbox"
+ name="thread_types[]"
+ value="Discussion"
+ data-targets="notifications-list-subscription-form.threadTypeCheckboxes"
+ data-action="change:notifications-list-subscription-form#threadTypeCheckboxesUpdated"
+
+ aria-describedby="Discussion-disabled"
+ aria-disabled="true"
+ >
+ Discussions
+ </label>
+
+ <div
+ id="Discussion-disabled"
+ class="color-fg-muted"
+ >
+ Discussions are not enabled for this repository
+ </div>
+
+ </div>
+ <div class="form-checkbox mr-3 ml-6 ml-sm-5 mb-2 mt-0">
+ <label class="f5 text-normal">
+ <input
+ type="checkbox"
+ name="thread_types[]"
+ value="SecurityAlert"
+ data-targets="notifications-list-subscription-form.threadTypeCheckboxes"
+ data-action="change:notifications-list-subscription-form#threadTypeCheckboxesUpdated"
+
+ >
+ Security alerts
+ </label>
+
+
+ </div>
+ </fieldset>
+ <div class="pt-2 pb-3 px-3 d-flex flex-justify-start flex-row-reverse">
+ <button name="do" value="custom" data-target="notifications-list-subscription-form.customSubmit" disabled="disabled" type="submit" data-view-component="true" class="btn-primary btn-sm btn ml-2"> Apply
+</button>
+
+ <button data-action="click:notifications-list-subscription-form#resetForm" data-close-dialog="" type="button" data-view-component="true" class="btn-sm btn"> Cancel
+</button>
+ </div>
+</form> </div>
+ </details-dialog>
+
+
+ <div class="notifications-component-dialog-overlay"></div>
+ </details>
+ </notifications-list-subscription-form>
+
+
+
+ </li>
+
+ <li>
+ <div data-view-component="true" class="BtnGroup">
+ <a icon="repo-forked" href="/rlkamalapurkar/bodeplot/fork" data-hydro-click="{&quot;event_type&quot;:&quot;repository.click&quot;,&quot;payload&quot;:{&quot;target&quot;:&quot;FORK_BUTTON&quot;,&quot;repository_id&quot;:418699104,&quot;originating_url&quot;:&quot;https://github.com/rlkamalapurkar/bodeplot/blob/main/README.md&quot;,&quot;user_id&quot;:30264720}}" data-hydro-click-hmac="6d25e7e6b08b2d2bc7fa0f1b222a3512f7ca392907fa3a096b5028b39817a503" data-ga-click="Repository, show fork modal, action:blob#show; text:Fork" aria-label="Fork your own copy of rlkamalapurkar/bodeplot" data-view-component="true" class="btn-sm btn BtnGroup-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo-forked mr-2">
+ <path fill-rule="evenodd" d="M5 3.25a.75.75 0 11-1.5 0 .75.75 0 011.5 0zm0 2.122a2.25 2.25 0 10-1.5 0v.878A2.25 2.25 0 005.75 8.5h1.5v2.128a2.251 2.251 0 101.5 0V8.5h1.5a2.25 2.25 0 002.25-2.25v-.878a2.25 2.25 0 10-1.5 0v.878a.75.75 0 01-.75.75h-4.5A.75.75 0 015 6.25v-.878zm3.75 7.378a.75.75 0 11-1.5 0 .75.75 0 011.5 0zm3-8.75a.75.75 0 100-1.5.75.75 0 000 1.5z"></path>
+</svg>Fork
+ <span id="repo-network-counter" data-pjax-replace="true" data-turbo-replace="true" title="1" data-view-component="true" class="Counter">1</span>
+</a>
+ <details group_item="true" id="my-forks-menu-418699104" data-view-component="true" class="details-reset details-overlay BtnGroup-parent d-inline-block position-relative">
+ <summary aria-label="See your forks of this repository" data-view-component="true" class="btn-sm btn BtnGroup-item px-2 float-none"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-triangle-down">
+ <path d="M4.427 7.427l3.396 3.396a.25.25 0 00.354 0l3.396-3.396A.25.25 0 0011.396 7H4.604a.25.25 0 00-.177.427z"></path>
+</svg>
+</summary>
+ <details-menu
+ class="SelectMenu right-0"
+ src="/rlkamalapurkar/bodeplot/my_forks_menu_content?can_fork=true"
+
+ role="menu"
+
+>
+ <div class="SelectMenu-modal">
+ <button class="SelectMenu-closeButton position-absolute right-0 m-2" type="button" aria-label="Close menu" data-toggle-for="details-49a850">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x">
+ <path fill-rule="evenodd" d="M3.72 3.72a.75.75 0 011.06 0L8 6.94l3.22-3.22a.75.75 0 111.06 1.06L9.06 8l3.22 3.22a.75.75 0 11-1.06 1.06L8 9.06l-3.22 3.22a.75.75 0 01-1.06-1.06L6.94 8 3.72 4.78a.75.75 0 010-1.06z"></path>
+</svg>
+ </button>
+ <div
+ id="filter-menu-49a850"
+ class="d-flex flex-column flex-1 overflow-hidden"
+>
+ <div
+ class="SelectMenu-list"
+ >
+
+ <include-fragment class="SelectMenu-loading" aria-label="Loading">
+ <svg style="box-sizing: content-box; color: var(--color-icon-primary);" width="32" height="32" viewBox="0 0 16 16" fill="none" data-view-component="true" class="anim-rotate">
+ <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" />
+ <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke" />
+</svg>
+ </include-fragment>
+ </div>
+
+ </div>
+ </div>
+ </details-menu>
+</details></div>
+ </li>
+
+ <li>
+ <template class="js-unstar-confirmation-dialog-template">
+ <div class="Box-header">
+ <h2 class="Box-title">Unstar this repository?</h2>
+ </div>
+ <div class="Box-body">
+ <p class="mb-3">
+ This will remove {{ repoNameWithOwner }} from the {{ listsWithCount }} that it's been added to.
+ </p>
+ <div class="form-actions">
+ <form class="js-social-confirmation-form" data-turbo="false" action="{{ confirmUrl }}" accept-charset="UTF-8" method="post">
+ <input type="hidden" name="authenticity_token" value="{{ confirmCsrfToken }}">
+ <input type="hidden" name="confirm" value="true">
+ <button data-close-dialog="true" type="submit" data-view-component="true" class="btn-danger btn width-full"> Unstar
+</button>
+</form> </div>
+ </div>
+</template>
+
+ <div data-view-component="true" class="js-toggler-container js-social-container starring-container d-flex">
+ <div data-view-component="true" class="starred BtnGroup flex-1">
+ <form class="js-social-form BtnGroup-parent flex-auto js-deferred-toggler-target" data-turbo="false" action="/rlkamalapurkar/bodeplot/unstar" accept-charset="UTF-8" method="post"><input type="hidden" name="authenticity_token" value="gnwPMu5IiTM55s9AspPKMZZqIAW09Ne-e3NBixAh1GIx9lUEDH5hsG15IEpGXpxRNrBWo4tz_Q9YBIPvSPU1SQ" autocomplete="off" />
+ <input type="hidden" value="A3oazBgcp1CZLydXNsBgtedTtfsTiC92YTeC02JT6SCw8ED6-ipP082wyF3CDTbVR4nDXSwPBcdCQEC3OocICw" data-csrf="true" class="js-confirm-csrf-token" />
+ <input type="hidden" name="context" value="repository">
+ <button data-hydro-click="{&quot;event_type&quot;:&quot;repository.click&quot;,&quot;payload&quot;:{&quot;target&quot;:&quot;UNSTAR_BUTTON&quot;,&quot;repository_id&quot;:418699104,&quot;originating_url&quot;:&quot;https://github.com/rlkamalapurkar/bodeplot/blob/main/README.md&quot;,&quot;user_id&quot;:30264720}}" data-hydro-click-hmac="68bd7cee34b1c0dcafb7fea9300e23fc104496b83db84e7c2aa7e70559eb99f0" data-ga-click="Repository, click unstar button, action:blob#show; text:Unstar" aria-label="Unstar this repository (3)" type="submit" data-view-component="true" class="rounded-left-2 btn-sm btn BtnGroup-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-star-fill starred-button-icon d-inline-block mr-2">
+ <path fill-rule="evenodd" d="M8 .25a.75.75 0 01.673.418l1.882 3.815 4.21.612a.75.75 0 01.416 1.279l-3.046 2.97.719 4.192a.75.75 0 01-1.088.791L8 12.347l-3.766 1.98a.75.75 0 01-1.088-.79l.72-4.194L.818 6.374a.75.75 0 01.416-1.28l4.21-.611L7.327.668A.75.75 0 018 .25z"></path>
+</svg><span data-view-component="true" class="d-inline">
+ Starred
+</span> <span id="repo-stars-counter-unstar" aria-label="3 users starred this repository" data-singular-suffix="user starred this repository" data-plural-suffix="users starred this repository" data-turbo-replace="true" title="3" data-view-component="true" class="Counter js-social-count">3</span>
+</button></form> <details id="details-user-list-418699104" data-view-component="true" class="details-reset details-overlay BtnGroup-parent js-user-list-menu d-inline-block position-relative">
+ <summary aria-label="Add this repository to a list" data-view-component="true" class="btn-sm btn BtnGroup-item px-2 float-none"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-triangle-down">
+ <path d="M4.427 7.427l3.396 3.396a.25.25 0 00.354 0l3.396-3.396A.25.25 0 0011.396 7H4.604a.25.25 0 00-.177.427z"></path>
+</svg>
+</summary>
+ <details-menu
+ class="SelectMenu right-0"
+ src="/rlkamalapurkar/bodeplot/lists"
+
+ role="menu"
+
+>
+ <div class="SelectMenu-modal">
+ <button class="SelectMenu-closeButton position-absolute right-0 m-2" type="button" aria-label="Close menu" data-toggle-for="details-244754">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x">
+ <path fill-rule="evenodd" d="M3.72 3.72a.75.75 0 011.06 0L8 6.94l3.22-3.22a.75.75 0 111.06 1.06L9.06 8l3.22 3.22a.75.75 0 11-1.06 1.06L8 9.06l-3.22 3.22a.75.75 0 01-1.06-1.06L6.94 8 3.72 4.78a.75.75 0 010-1.06z"></path>
+</svg>
+ </button>
+ <div
+ id="filter-menu-244754"
+ class="d-flex flex-column flex-1 overflow-hidden"
+>
+ <div
+ class="SelectMenu-list"
+ >
+
+ <include-fragment class="SelectMenu-loading" aria-label="Loading">
+ <svg style="box-sizing: content-box; color: var(--color-icon-primary);" width="32" height="32" viewBox="0 0 16 16" fill="none" data-view-component="true" class="anim-rotate">
+ <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" />
+ <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke" />
+</svg>
+ </include-fragment>
+ </div>
+
+ </div>
+ </div>
+ </details-menu>
+</details>
+</div>
+ <div data-view-component="true" class="unstarred BtnGroup flex-1">
+ <form class="js-social-form BtnGroup-parent flex-auto" data-turbo="false" action="/rlkamalapurkar/bodeplot/star" accept-charset="UTF-8" method="post"><input type="hidden" name="authenticity_token" value="pNLd5kfbuyLoros4cFicDMQg-dxZ6j-W8OMFFQaZAtmubokuVkluWLyn80TDJ6_J27ZpPzXC-a_M7wEL0cEkdQ" autocomplete="off" />
+ <input type="hidden" name="context" value="repository">
+ <button data-hydro-click="{&quot;event_type&quot;:&quot;repository.click&quot;,&quot;payload&quot;:{&quot;target&quot;:&quot;STAR_BUTTON&quot;,&quot;repository_id&quot;:418699104,&quot;originating_url&quot;:&quot;https://github.com/rlkamalapurkar/bodeplot/blob/main/README.md&quot;,&quot;user_id&quot;:30264720}}" data-hydro-click-hmac="a2c6e3e54887ec6a3a439894ee5b340b92d0baedff36b9d93677b27f4eb78953" data-ga-click="Repository, click star button, action:blob#show; text:Star" aria-label="Star this repository (3)" type="submit" data-view-component="true" class="js-toggler-target rounded-left-2 btn-sm btn BtnGroup-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-star d-inline-block mr-2">
+ <path fill-rule="evenodd" d="M8 .25a.75.75 0 01.673.418l1.882 3.815 4.21.612a.75.75 0 01.416 1.279l-3.046 2.97.719 4.192a.75.75 0 01-1.088.791L8 12.347l-3.766 1.98a.75.75 0 01-1.088-.79l.72-4.194L.818 6.374a.75.75 0 01.416-1.28l4.21-.611L7.327.668A.75.75 0 018 .25zm0 2.445L6.615 5.5a.75.75 0 01-.564.41l-3.097.45 2.24 2.184a.75.75 0 01.216.664l-.528 3.084 2.769-1.456a.75.75 0 01.698 0l2.77 1.456-.53-3.084a.75.75 0 01.216-.664l2.24-2.183-3.096-.45a.75.75 0 01-.564-.41L8 2.694v.001z"></path>
+</svg><span data-view-component="true" class="d-inline">
+ Star
+</span> <span id="repo-stars-counter-star" aria-label="3 users starred this repository" data-singular-suffix="user starred this repository" data-plural-suffix="users starred this repository" data-turbo-replace="true" title="3" data-view-component="true" class="Counter js-social-count">3</span>
+</button></form> <details id="details-user-list-418699104" data-view-component="true" class="details-reset details-overlay BtnGroup-parent js-user-list-menu d-inline-block position-relative">
+ <summary aria-label="Add this repository to a list" data-view-component="true" class="btn-sm btn BtnGroup-item px-2 float-none"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-triangle-down">
+ <path d="M4.427 7.427l3.396 3.396a.25.25 0 00.354 0l3.396-3.396A.25.25 0 0011.396 7H4.604a.25.25 0 00-.177.427z"></path>
+</svg>
+</summary>
+ <details-menu
+ class="SelectMenu right-0"
+ src="/rlkamalapurkar/bodeplot/lists"
+
+ role="menu"
+
+>
+ <div class="SelectMenu-modal">
+ <button class="SelectMenu-closeButton position-absolute right-0 m-2" type="button" aria-label="Close menu" data-toggle-for="details-244754">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x">
+ <path fill-rule="evenodd" d="M3.72 3.72a.75.75 0 011.06 0L8 6.94l3.22-3.22a.75.75 0 111.06 1.06L9.06 8l3.22 3.22a.75.75 0 11-1.06 1.06L8 9.06l-3.22 3.22a.75.75 0 01-1.06-1.06L6.94 8 3.72 4.78a.75.75 0 010-1.06z"></path>
+</svg>
+ </button>
+ <div
+ id="filter-menu-244754"
+ class="d-flex flex-column flex-1 overflow-hidden"
+>
+ <div
+ class="SelectMenu-list"
+ >
+
+ <include-fragment class="SelectMenu-loading" aria-label="Loading">
+ <svg style="box-sizing: content-box; color: var(--color-icon-primary);" width="32" height="32" viewBox="0 0 16 16" fill="none" data-view-component="true" class="anim-rotate">
+ <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" />
+ <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke" />
+</svg>
+ </include-fragment>
+ </div>
+
+ </div>
+ </div>
+ </details-menu>
+</details>
+</div></div>
+ </li>
+
+
+
+</ul>
+
+ </div>
+
+ <div id="responsive-meta-container" data-turbo-replace>
+</div>
+
+
+ <nav data-pjax="#js-repo-pjax-container" aria-label="Repository" data-view-component="true" class="js-repo-nav js-sidenav-container-pjax js-responsive-underlinenav overflow-hidden UnderlineNav px-3 px-md-4 px-lg-5">
+
+ <ul data-view-component="true" class="UnderlineNav-body list-style-none">
+ <li data-view-component="true" class="d-inline-flex">
+ <a id="code-tab" href="/rlkamalapurkar/bodeplot" data-tab-item="i0code-tab" data-selected-links="repo_source repo_downloads repo_commits repo_releases repo_tags repo_branches repo_packages repo_deployments /rlkamalapurkar/bodeplot" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g c" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Code&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" aria-current="page" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item selected">
+
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code UnderlineNav-octicon d-none d-sm-inline">
+ <path fill-rule="evenodd" d="M4.72 3.22a.75.75 0 011.06 1.06L2.06 8l3.72 3.72a.75.75 0 11-1.06 1.06L.47 8.53a.75.75 0 010-1.06l4.25-4.25zm6.56 0a.75.75 0 10-1.06 1.06L13.94 8l-3.72 3.72a.75.75 0 101.06 1.06l4.25-4.25a.75.75 0 000-1.06l-4.25-4.25z"></path>
+</svg>
+ <span data-content="Code">Code</span>
+ <span id="code-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span>
+
+
+
+</a></li>
+ <li data-view-component="true" class="d-inline-flex">
+ <a id="issues-tab" href="/rlkamalapurkar/bodeplot/issues" data-tab-item="i1issues-tab" data-selected-links="repo_issues repo_labels repo_milestones /rlkamalapurkar/bodeplot/issues" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g i" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Issues&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item">
+
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-issue-opened UnderlineNav-octicon d-none d-sm-inline">
+ <path d="M8 9.5a1.5 1.5 0 100-3 1.5 1.5 0 000 3z"></path><path fill-rule="evenodd" d="M8 0a8 8 0 100 16A8 8 0 008 0zM1.5 8a6.5 6.5 0 1113 0 6.5 6.5 0 01-13 0z"></path>
+</svg>
+ <span data-content="Issues">Issues</span>
+ <span id="issues-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="1" data-view-component="true" class="Counter">1</span>
+
+
+
+</a></li>
+ <li data-view-component="true" class="d-inline-flex">
+ <a id="pull-requests-tab" href="/rlkamalapurkar/bodeplot/pulls" data-tab-item="i2pull-requests-tab" data-selected-links="repo_pulls checks /rlkamalapurkar/bodeplot/pulls" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g p" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Pull requests&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item">
+
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-git-pull-request UnderlineNav-octicon d-none d-sm-inline">
+ <path fill-rule="evenodd" d="M7.177 3.073L9.573.677A.25.25 0 0110 .854v4.792a.25.25 0 01-.427.177L7.177 3.427a.25.25 0 010-.354zM3.75 2.5a.75.75 0 100 1.5.75.75 0 000-1.5zm-2.25.75a2.25 2.25 0 113 2.122v5.256a2.251 2.251 0 11-1.5 0V5.372A2.25 2.25 0 011.5 3.25zM11 2.5h-1V4h1a1 1 0 011 1v5.628a2.251 2.251 0 101.5 0V5A2.5 2.5 0 0011 2.5zm1 10.25a.75.75 0 111.5 0 .75.75 0 01-1.5 0zM3.75 12a.75.75 0 100 1.5.75.75 0 000-1.5z"></path>
+</svg>
+ <span data-content="Pull requests">Pull requests</span>
+ <span id="pull-requests-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="0" hidden="hidden" data-view-component="true" class="Counter">0</span>
+
+
+
+</a></li>
+ <li data-view-component="true" class="d-inline-flex">
+ <a id="actions-tab" href="/rlkamalapurkar/bodeplot/actions" data-tab-item="i3actions-tab" data-selected-links="repo_actions /rlkamalapurkar/bodeplot/actions" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g a" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Actions&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item">
+
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-play UnderlineNav-octicon d-none d-sm-inline">
+ <path fill-rule="evenodd" d="M1.5 8a6.5 6.5 0 1113 0 6.5 6.5 0 01-13 0zM8 0a8 8 0 100 16A8 8 0 008 0zM6.379 5.227A.25.25 0 006 5.442v5.117a.25.25 0 00.379.214l4.264-2.559a.25.25 0 000-.428L6.379 5.227z"></path>
+</svg>
+ <span data-content="Actions">Actions</span>
+ <span id="actions-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span>
+
+
+
+</a></li>
+ <li data-view-component="true" class="d-inline-flex">
+ <a id="projects-tab" href="/rlkamalapurkar/bodeplot/projects" data-tab-item="i4projects-tab" data-selected-links="repo_projects new_repo_project repo_project /rlkamalapurkar/bodeplot/projects" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g b" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Projects&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item">
+
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-table UnderlineNav-octicon d-none d-sm-inline">
+ <path fill-rule="evenodd" d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0114.25 16H1.75A1.75 1.75 0 010 14.25V1.75zM1.5 6.5v7.75c0 .138.112.25.25.25H5v-8H1.5zM5 5H1.5V1.75a.25.25 0 01.25-.25H5V5zm1.5 1.5v8h7.75a.25.25 0 00.25-.25V6.5h-8zm8-1.5h-8V1.5h7.75a.25.25 0 01.25.25V5z"></path>
+</svg>
+ <span data-content="Projects">Projects</span>
+ <span id="projects-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="0" hidden="hidden" data-view-component="true" class="Counter">0</span>
+
+
+
+</a></li>
+ <li data-view-component="true" class="d-inline-flex">
+ <a id="wiki-tab" href="/rlkamalapurkar/bodeplot/wiki" data-tab-item="i5wiki-tab" data-selected-links="repo_wiki /rlkamalapurkar/bodeplot/wiki" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g w" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Wiki&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item">
+
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-book UnderlineNav-octicon d-none d-sm-inline">
+ <path fill-rule="evenodd" d="M0 1.75A.75.75 0 01.75 1h4.253c1.227 0 2.317.59 3 1.501A3.744 3.744 0 0111.006 1h4.245a.75.75 0 01.75.75v10.5a.75.75 0 01-.75.75h-4.507a2.25 2.25 0 00-1.591.659l-.622.621a.75.75 0 01-1.06 0l-.622-.621A2.25 2.25 0 005.258 13H.75a.75.75 0 01-.75-.75V1.75zm8.755 3a2.25 2.25 0 012.25-2.25H14.5v9h-3.757c-.71 0-1.4.201-1.992.572l.004-7.322zm-1.504 7.324l.004-5.073-.002-2.253A2.25 2.25 0 005.003 2.5H1.5v9h3.757a3.75 3.75 0 011.994.574z"></path>
+</svg>
+ <span data-content="Wiki">Wiki</span>
+ <span id="wiki-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span>
+
+
+
+</a></li>
+ <li data-view-component="true" class="d-inline-flex">
+ <a id="security-tab" href="/rlkamalapurkar/bodeplot/security" data-tab-item="i6security-tab" data-selected-links="security overview alerts policy token_scanning code_scanning /rlkamalapurkar/bodeplot/security" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g s" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Security&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item">
+
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-shield UnderlineNav-octicon d-none d-sm-inline">
+ <path fill-rule="evenodd" d="M7.467.133a1.75 1.75 0 011.066 0l5.25 1.68A1.75 1.75 0 0115 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.7 1.7 0 01-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 011.217-1.667l5.25-1.68zm.61 1.429a.25.25 0 00-.153 0l-5.25 1.68a.25.25 0 00-.174.238V7c0 1.358.275 2.666 1.057 3.86.784 1.194 2.121 2.34 4.366 3.297a.2.2 0 00.154 0c2.245-.956 3.582-2.104 4.366-3.298C13.225 9.666 13.5 8.36 13.5 7V3.48a.25.25 0 00-.174-.237l-5.25-1.68zM9 10.5a1 1 0 11-2 0 1 1 0 012 0zm-.25-5.75a.75.75 0 10-1.5 0v3a.75.75 0 001.5 0v-3z"></path>
+</svg>
+ <span data-content="Security">Security</span>
+ <include-fragment src="/rlkamalapurkar/bodeplot/security/overall-count" accept="text/fragment+html"></include-fragment>
+
+
+</a></li>
+ <li data-view-component="true" class="d-inline-flex">
+ <a id="insights-tab" href="/rlkamalapurkar/bodeplot/pulse" data-tab-item="i7insights-tab" data-selected-links="repo_graphs repo_contributors dependency_graph dependabot_updates pulse people community /rlkamalapurkar/bodeplot/pulse" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Insights&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item">
+
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-graph UnderlineNav-octicon d-none d-sm-inline">
+ <path fill-rule="evenodd" d="M1.5 1.75a.75.75 0 00-1.5 0v12.5c0 .414.336.75.75.75h14.5a.75.75 0 000-1.5H1.5V1.75zm14.28 2.53a.75.75 0 00-1.06-1.06L10 7.94 7.53 5.47a.75.75 0 00-1.06 0L3.22 8.72a.75.75 0 001.06 1.06L7 7.06l2.47 2.47a.75.75 0 001.06 0l5.25-5.25z"></path>
+</svg>
+ <span data-content="Insights">Insights</span>
+ <span id="insights-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span>
+
+
+
+</a></li>
+ <li data-view-component="true" class="d-inline-flex">
+ <a id="settings-tab" href="/rlkamalapurkar/bodeplot/settings" data-tab-item="i8settings-tab" data-selected-links="repo_settings repo_branch_settings collaborators hooks integration_installations repo_keys_settings issue_template_editor secrets_settings_actions secrets_settings_codespaces secrets_settings_dependabot security_analysis key_links_settings repo_actions_settings notifications repository_actions_settings_runners repository_environments interaction_limits repository_actions_settings_general repository_actions_settings_add_new_runner repo_pages_settings repo_announcements repo_protected_tags_settings code_review_limits /rlkamalapurkar/bodeplot/settings" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Settings&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item">
+
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-gear UnderlineNav-octicon d-none d-sm-inline">
+ <path fill-rule="evenodd" d="M7.429 1.525a6.593 6.593 0 011.142 0c.036.003.108.036.137.146l.289 1.105c.147.56.55.967.997 1.189.174.086.341.183.501.29.417.278.97.423 1.53.27l1.102-.303c.11-.03.175.016.195.046.219.31.41.641.573.989.014.031.022.11-.059.19l-.815.806c-.411.406-.562.957-.53 1.456a4.588 4.588 0 010 .582c-.032.499.119 1.05.53 1.456l.815.806c.08.08.073.159.059.19a6.494 6.494 0 01-.573.99c-.02.029-.086.074-.195.045l-1.103-.303c-.559-.153-1.112-.008-1.529.27-.16.107-.327.204-.5.29-.449.222-.851.628-.998 1.189l-.289 1.105c-.029.11-.101.143-.137.146a6.613 6.613 0 01-1.142 0c-.036-.003-.108-.037-.137-.146l-.289-1.105c-.147-.56-.55-.967-.997-1.189a4.502 4.502 0 01-.501-.29c-.417-.278-.97-.423-1.53-.27l-1.102.303c-.11.03-.175-.016-.195-.046a6.492 6.492 0 01-.573-.989c-.014-.031-.022-.11.059-.19l.815-.806c.411-.406.562-.957.53-1.456a4.587 4.587 0 010-.582c.032-.499-.119-1.05-.53-1.456l-.815-.806c-.08-.08-.073-.159-.059-.19a6.44 6.44 0 01.573-.99c.02-.029.086-.075.195-.045l1.103.303c.559.153 1.112.008 1.529-.27.16-.107.327-.204.5-.29.449-.222.851-.628.998-1.189l.289-1.105c.029-.11.101-.143.137-.146zM8 0c-.236 0-.47.01-.701.03-.743.065-1.29.615-1.458 1.261l-.29 1.106c-.017.066-.078.158-.211.224a5.994 5.994 0 00-.668.386c-.123.082-.233.09-.3.071L3.27 2.776c-.644-.177-1.392.02-1.82.63a7.977 7.977 0 00-.704 1.217c-.315.675-.111 1.422.363 1.891l.815.806c.05.048.098.147.088.294a6.084 6.084 0 000 .772c.01.147-.038.246-.088.294l-.815.806c-.474.469-.678 1.216-.363 1.891.2.428.436.835.704 1.218.428.609 1.176.806 1.82.63l1.103-.303c.066-.019.176-.011.299.071.213.143.436.272.668.386.133.066.194.158.212.224l.289 1.106c.169.646.715 1.196 1.458 1.26a8.094 8.094 0 001.402 0c.743-.064 1.29-.614 1.458-1.26l.29-1.106c.017-.066.078-.158.211-.224a5.98 5.98 0 00.668-.386c.123-.082.233-.09.3-.071l1.102.302c.644.177 1.392-.02 1.82-.63.268-.382.505-.789.704-1.217.315-.675.111-1.422-.364-1.891l-.814-.806c-.05-.048-.098-.147-.088-.294a6.1 6.1 0 000-.772c-.01-.147.039-.246.088-.294l.814-.806c.475-.469.679-1.216.364-1.891a7.992 7.992 0 00-.704-1.218c-.428-.609-1.176-.806-1.82-.63l-1.103.303c-.066.019-.176.011-.299-.071a5.991 5.991 0 00-.668-.386c-.133-.066-.194-.158-.212-.224L10.16 1.29C9.99.645 9.444.095 8.701.031A8.094 8.094 0 008 0zm1.5 8a1.5 1.5 0 11-3 0 1.5 1.5 0 013 0zM11 8a3 3 0 11-6 0 3 3 0 016 0z"></path>
+</svg>
+ <span data-content="Settings">Settings</span>
+ <span id="settings-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span>
+
+
+
+</a></li>
+</ul>
+ <div style="visibility:hidden;" data-view-component="true" class="UnderlineNav-actions js-responsive-underlinenav-overflow position-absolute pr-3 pr-md-4 pr-lg-5 right-0"> <details data-view-component="true" class="details-overlay details-reset position-relative">
+ <summary role="button" data-view-component="true"> <div class="UnderlineNav-item mr-0 border-0">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-kebab-horizontal">
+ <path d="M8 9a1.5 1.5 0 100-3 1.5 1.5 0 000 3zM1.5 9a1.5 1.5 0 100-3 1.5 1.5 0 000 3zm13 0a1.5 1.5 0 100-3 1.5 1.5 0 000 3z"></path>
+</svg>
+ <span class="sr-only">More</span>
+ </div>
+</summary>
+ <details-menu role="menu" data-view-component="true" class="dropdown-menu dropdown-menu-sw"> <ul>
+ <li data-menu-item="i0code-tab" hidden>
+ <a role="menuitem" class="js-selected-navigation-item selected dropdown-item" aria-current="page" data-selected-links="repo_source repo_downloads repo_commits repo_releases repo_tags repo_branches repo_packages repo_deployments /rlkamalapurkar/bodeplot" href="/rlkamalapurkar/bodeplot">
+ Code
+</a> </li>
+ <li data-menu-item="i1issues-tab" hidden>
+ <a role="menuitem" class="js-selected-navigation-item dropdown-item" data-selected-links="repo_issues repo_labels repo_milestones /rlkamalapurkar/bodeplot/issues" href="/rlkamalapurkar/bodeplot/issues">
+ Issues
+</a> </li>
+ <li data-menu-item="i2pull-requests-tab" hidden>
+ <a role="menuitem" class="js-selected-navigation-item dropdown-item" data-selected-links="repo_pulls checks /rlkamalapurkar/bodeplot/pulls" href="/rlkamalapurkar/bodeplot/pulls">
+ Pull requests
+</a> </li>
+ <li data-menu-item="i3actions-tab" hidden>
+ <a role="menuitem" class="js-selected-navigation-item dropdown-item" data-selected-links="repo_actions /rlkamalapurkar/bodeplot/actions" href="/rlkamalapurkar/bodeplot/actions">
+ Actions
+</a> </li>
+ <li data-menu-item="i4projects-tab" hidden>
+ <a role="menuitem" class="js-selected-navigation-item dropdown-item" data-selected-links="repo_projects new_repo_project repo_project /rlkamalapurkar/bodeplot/projects" href="/rlkamalapurkar/bodeplot/projects">
+ Projects
+</a> </li>
+ <li data-menu-item="i5wiki-tab" hidden>
+ <a role="menuitem" class="js-selected-navigation-item dropdown-item" data-selected-links="repo_wiki /rlkamalapurkar/bodeplot/wiki" href="/rlkamalapurkar/bodeplot/wiki">
+ Wiki
+</a> </li>
+ <li data-menu-item="i6security-tab" hidden>
+ <a role="menuitem" class="js-selected-navigation-item dropdown-item" data-selected-links="security overview alerts policy token_scanning code_scanning /rlkamalapurkar/bodeplot/security" href="/rlkamalapurkar/bodeplot/security">
+ Security
+</a> </li>
+ <li data-menu-item="i7insights-tab" hidden>
+ <a role="menuitem" class="js-selected-navigation-item dropdown-item" data-selected-links="repo_graphs repo_contributors dependency_graph dependabot_updates pulse people community /rlkamalapurkar/bodeplot/pulse" href="/rlkamalapurkar/bodeplot/pulse">
+ Insights
+</a> </li>
+ <li data-menu-item="i8settings-tab" hidden>
+ <a role="menuitem" class="js-selected-navigation-item dropdown-item" data-selected-links="repo_settings repo_branch_settings collaborators hooks integration_installations repo_keys_settings issue_template_editor secrets_settings_actions secrets_settings_codespaces secrets_settings_dependabot security_analysis key_links_settings repo_actions_settings notifications repository_actions_settings_runners repository_environments interaction_limits repository_actions_settings_general repository_actions_settings_add_new_runner repo_pages_settings repo_announcements repo_protected_tags_settings code_review_limits /rlkamalapurkar/bodeplot/settings" href="/rlkamalapurkar/bodeplot/settings">
+ Settings
+</a> </li>
+ </ul>
+</details-menu>
+</details></div>
+</nav>
+
+
+
+ </div>
+
+
+
+ <turbo-frame id="repo-content-turbo-frame" target="_top" data-turbo-action="advance" class="">
+ <div id="repo-content-pjax-container" class="repository-content " >
+ <a href="https://github.dev/" class="d-none js-github-dev-shortcut" data-hotkey=".">Open in github.dev</a>
+ <a href="https://github.dev/" class="d-none js-github-dev-new-tab-shortcut" data-hotkey="Shift+.,Shift+&gt;,&gt;" target="_blank">Open in a new github.dev tab</a>
+
+
+
+
+
+
+ <div class="clearfix container-xl px-3 px-md-4 px-lg-5 mt-4">
+
+
+<div data-test-selector="blob-container">
+
+
+
+
+
+
+
+
+<a class="d-none js-permalink-shortcut" data-hotkey="y" href="/rlkamalapurkar/bodeplot/blob/3746d1613a5eea9f1e26d4cf5bcce954068463f3/README.md">Permalink</a>
+
+<div class="d-flex flex-items-start flex-shrink-0 pb-3 flex-wrap flex-md-nowrap flex-justify-between flex-md-justify-start">
+
+<div class="position-relative">
+ <details
+ class="js-branch-select-menu details-reset details-overlay mr-0 mb-0 "
+ id="branch-select-menu"
+ data-hydro-click-payload="{&quot;event_type&quot;:&quot;repository.click&quot;,&quot;payload&quot;:{&quot;target&quot;:&quot;REFS_SELECTOR_MENU&quot;,&quot;repository_id&quot;:418699104,&quot;originating_url&quot;:&quot;https://github.com/rlkamalapurkar/bodeplot/blob/main/README.md&quot;,&quot;user_id&quot;:30264720}}" data-hydro-click-hmac="e574af2141c71f54e0194145b346f64a21c2422098d03966bb0877c7d5ad762e">
+ <summary class="btn css-truncate"
+ data-hotkey="w"
+ title="Switch branches or tags">
+ <svg text="gray" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-git-branch">
+ <path fill-rule="evenodd" d="M11.75 2.5a.75.75 0 100 1.5.75.75 0 000-1.5zm-2.25.75a2.25 2.25 0 113 2.122V6A2.5 2.5 0 0110 8.5H6a1 1 0 00-1 1v1.128a2.251 2.251 0 11-1.5 0V5.372a2.25 2.25 0 111.5 0v1.836A2.492 2.492 0 016 7h4a1 1 0 001-1v-.628A2.25 2.25 0 019.5 3.25zM4.25 12a.75.75 0 100 1.5.75.75 0 000-1.5zM3.5 3.25a.75.75 0 111.5 0 .75.75 0 01-1.5 0z"></path>
+</svg>
+ <span class="css-truncate-target" data-menu-button>main</span>
+ <span class="dropdown-caret"></span>
+ </summary>
+
+
+<div class="SelectMenu">
+ <div class="SelectMenu-modal">
+ <header class="SelectMenu-header">
+ <span class="SelectMenu-title">Switch branches/tags</span>
+ <button class="SelectMenu-closeButton" type="button" data-toggle-for="branch-select-menu"><svg aria-label="Close menu" aria-hidden="false" role="img" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x">
+ <path fill-rule="evenodd" d="M3.72 3.72a.75.75 0 011.06 0L8 6.94l3.22-3.22a.75.75 0 111.06 1.06L9.06 8l3.22 3.22a.75.75 0 11-1.06 1.06L8 9.06l-3.22 3.22a.75.75 0 01-1.06-1.06L6.94 8 3.72 4.78a.75.75 0 010-1.06z"></path>
+</svg></button>
+ </header>
+
+ <input-demux data-action="tab-container-change:input-demux#storeInput tab-container-changed:input-demux#updateInput">
+ <tab-container class="d-flex flex-column js-branches-tags-tabs" style="min-height: 0;">
+ <div class="SelectMenu-filter">
+ <input data-target="input-demux.source"
+ id="context-commitish-filter-field"
+ class="SelectMenu-input form-control"
+ aria-owns="ref-list-branches"
+ data-controls-ref-menu-id="ref-list-branches"
+ autofocus
+ autocomplete="off"
+ aria-label="Find or create a branch…"
+ placeholder="Find or create a branch…"
+ type="text"
+ >
+ </div>
+
+ <div class="SelectMenu-tabs" role="tablist" data-target="input-demux.control" >
+ <button class="SelectMenu-tab" type="button" role="tab" aria-selected="true">Branches</button>
+ <button class="SelectMenu-tab" type="button" role="tab">Tags</button>
+ </div>
+
+ <div role="tabpanel" id="ref-list-branches" data-filter-placeholder="Find or create a branch…" tabindex="" class="d-flex flex-column flex-auto overflow-auto">
+ <ref-selector
+ type="branch"
+ data-targets="input-demux.sinks"
+ data-action="
+ input-entered:ref-selector#inputEntered
+ tab-selected:ref-selector#tabSelected
+ focus-list:ref-selector#focusFirstListMember
+ "
+ query-endpoint="/rlkamalapurkar/bodeplot/refs"
+ can-create
+ cache-key="v0:1659311748.791003"
+ current-committish="bWFpbg=="
+ default-branch="bWFpbg=="
+ name-with-owner="cmxrYW1hbGFwdXJrYXIvYm9kZXBsb3Q="
+ prefetch-on-mouseover
+ >
+
+ <template data-target="ref-selector.fetchFailedTemplate">
+ <div class="SelectMenu-message" data-index="{{ index }}">Could not load branches</div>
+ </template>
+
+ <template data-target="ref-selector.noMatchTemplate">
+ <create-repo-from-selector
+ check-tag-name-exists-path="/rlkamalapurkar/bodeplot/branches/check_tag_name_exists"
+ >
+ <!-- '"` --><!-- </textarea></xmp> --></option></form><form data-turbo="false" action="/rlkamalapurkar/bodeplot/branches" accept-charset="UTF-8" method="post"><input type="hidden" name="authenticity_token" value="QGlzjQLPl1KNTliI718ftUfagHXoew8ag3bp6SDD0zsy4i3sfZVOq9GftSvr99xgBcHEajrOklgyirFbQUkobw" />
+ <input data-target="create-repo-from-selector.refName" type="hidden" name="name" value="{{ refName }}">
+ <input type="hidden" name="branch" value="main">
+ <input type="hidden" name="path_binary" value="UkVBRE1FLm1k">
+
+ <button
+ class="SelectMenu-item wb-break-word"
+ type="submit"
+ role="menuitem"
+ data-index="{{ index }}"
+ data-action="click:create-repo-from-selector#createBranch"
+ data-hydro-click="{&quot;event_type&quot;:&quot;repository.click&quot;,&quot;payload&quot;:{&quot;target&quot;:&quot;REFS_SELECTOR_MENU_CREATE_BRANCH&quot;,&quot;repository_id&quot;:418699104,&quot;ref_name&quot;:&quot;{{ refName }}&quot;,&quot;originating_url&quot;:&quot;https://github.com/rlkamalapurkar/bodeplot/blob/main/README.md&quot;,&quot;user_id&quot;:30264720}}" data-hydro-click-hmac="9fda4c4a10f512ebc519e02d0be8d92e6b0a32175be5e7f9d0c30f18b0b408f6">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-git-branch SelectMenu-icon flex-self-baseline">
+ <path fill-rule="evenodd" d="M11.75 2.5a.75.75 0 100 1.5.75.75 0 000-1.5zm-2.25.75a2.25 2.25 0 113 2.122V6A2.5 2.5 0 0110 8.5H6a1 1 0 00-1 1v1.128a2.251 2.251 0 11-1.5 0V5.372a2.25 2.25 0 111.5 0v1.836A2.492 2.492 0 016 7h4a1 1 0 001-1v-.628A2.25 2.25 0 019.5 3.25zM4.25 12a.75.75 0 100 1.5.75.75 0 000-1.5zM3.5 3.25a.75.75 0 111.5 0 .75.75 0 01-1.5 0z"></path>
+</svg>
+ <div>
+ <span class="text-bold">Create branch: {{ refName }}</span>
+ <span class="color-fg-muted">from ‘main’</span>
+ <input type="hidden" value="bwbGb9hWRwCbSi08at_u3MFyO38lrBfqeLMgH7fKWSG1LbPZbIxfuQMOvQS97-tN_cGMhfVc3EEMlukVnfqklw" data-csrf="true" data-target="create-repo-from-selector.checkTagNameExistsPathCsrf" />
+ </div>
+ </button>
+</form> </create-repo-from-selector>
+</template>
+
+
+ <div data-target="ref-selector.listContainer" role="menu" class="SelectMenu-list " data-turbo-frame="repo-content-turbo-frame">
+ <div class="SelectMenu-loading pt-3 pb-0 overflow-hidden" aria-label="Menu is loading">
+ <svg style="box-sizing: content-box; color: var(--color-icon-primary);" width="32" height="32" viewBox="0 0 16 16" fill="none" data-view-component="true" class="anim-rotate">
+ <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" />
+ <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke" />
+</svg>
+ </div>
+ </div>
+
+
+
+<template data-target="ref-selector.itemTemplate">
+ <a href="https://github.com/rlkamalapurkar/bodeplot/blob/{{ urlEncodedRefName }}/README.md" class="SelectMenu-item" role="menuitemradio" rel="nofollow" aria-checked="{{ isCurrent }}" data-index="{{ index }}" >
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check SelectMenu-icon SelectMenu-icon--check">
+ <path fill-rule="evenodd" d="M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z"></path>
+</svg>
+ <span class="flex-1 css-truncate css-truncate-overflow {{ isFilteringClass }}">{{ refName }}</span>
+ <span hidden="{{ isNotDefault }}" class="Label Label--secondary flex-self-start">default</span>
+ </a>
+</template>
+
+
+ <footer class="SelectMenu-footer"><a href="/rlkamalapurkar/bodeplot/branches">View all branches</a></footer>
+ </ref-selector>
+
+ </div>
+
+ <div role="tabpanel" id="tags-menu" data-filter-placeholder="Find a tag" tabindex="" hidden class="d-flex flex-column flex-auto overflow-auto">
+ <ref-selector
+ type="tag"
+ data-action="
+ input-entered:ref-selector#inputEntered
+ tab-selected:ref-selector#tabSelected
+ focus-list:ref-selector#focusFirstListMember
+ "
+ data-targets="input-demux.sinks"
+ query-endpoint="/rlkamalapurkar/bodeplot/refs"
+ cache-key="v0:1659311748.791003"
+ current-committish="bWFpbg=="
+ default-branch="bWFpbg=="
+ name-with-owner="cmxrYW1hbGFwdXJrYXIvYm9kZXBsb3Q="
+ >
+
+ <template data-target="ref-selector.fetchFailedTemplate">
+ <div class="SelectMenu-message" data-index="{{ index }}">Could not load tags</div>
+ </template>
+
+ <template data-target="ref-selector.noMatchTemplate">
+ <div class="SelectMenu-message" data-index="{{ index }}">Nothing to show</div>
+ </template>
+
+
+
+<template data-target="ref-selector.itemTemplate">
+ <a href="https://github.com/rlkamalapurkar/bodeplot/blob/{{ urlEncodedRefName }}/README.md" class="SelectMenu-item" role="menuitemradio" rel="nofollow" aria-checked="{{ isCurrent }}" data-index="{{ index }}" >
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check SelectMenu-icon SelectMenu-icon--check">
+ <path fill-rule="evenodd" d="M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z"></path>
+</svg>
+ <span class="flex-1 css-truncate css-truncate-overflow {{ isFilteringClass }}">{{ refName }}</span>
+ <span hidden="{{ isNotDefault }}" class="Label Label--secondary flex-self-start">default</span>
+ </a>
+</template>
+
+
+ <div data-target="ref-selector.listContainer" role="menu" class="SelectMenu-list" data-turbo-frame="repo-content-turbo-frame">
+ <div class="SelectMenu-loading pt-3 pb-0 overflow-hidden" aria-label="Menu is loading">
+ <svg style="box-sizing: content-box; color: var(--color-icon-primary);" width="32" height="32" viewBox="0 0 16 16" fill="none" data-view-component="true" class="anim-rotate">
+ <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" />
+ <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke" />
+</svg>
+ </div>
+ </div>
+ <footer class="SelectMenu-footer"><a href="/rlkamalapurkar/bodeplot/tags">View all tags</a></footer>
+ </ref-selector>
+ </div>
+ </tab-container>
+ </input-demux>
+ </div>
+</div>
+
+ </details>
+
+</div>
+
+
+<div class="Overlay--hidden Overlay-backdrop--center" data-modal-dialog-overlay>
+ <modal-dialog role="dialog" id="warn-tag-match-create-branch-dialog" aria-modal="true" aria-labelledby="warn-tag-match-create-branch-dialog-header" data-view-component="true" class="Overlay Overlay--width-large Overlay--height-auto Overlay--motion-scaleFade">
+ <header class="Overlay-header Overlay-header--large Overlay-header--divided">
+ <div class="Overlay-headerContentWrap">
+ <div class="Overlay-titleWrap">
+ <h1 id="warn-tag-match-create-branch-dialog-header" class="Overlay-title">Name already in use</h1>
+ </div>
+ <div class="Overlay-actionWrap">
+ <button data-close-dialog-id="warn-tag-match-create-branch-dialog" aria-label="Close" type="button" data-view-component="true" class="close-button Overlay-closeButton"><svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x">
+ <path fill-rule="evenodd" d="M3.72 3.72a.75.75 0 011.06 0L8 6.94l3.22-3.22a.75.75 0 111.06 1.06L9.06 8l3.22 3.22a.75.75 0 11-1.06 1.06L8 9.06l-3.22 3.22a.75.75 0 01-1.06-1.06L6.94 8 3.72 4.78a.75.75 0 010-1.06z"></path>
+</svg></button>
+ </div>
+ </div>
+ </header>
+ <div class="Overlay-body ">
+
+ <div data-view-component="true"> A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
+</div>
+
+ </div>
+ <footer class="Overlay-footer Overlay-footer--alignEnd">
+ <button data-close-dialog-id="warn-tag-match-create-branch-dialog" type="button" data-view-component="true" class="btn"> Cancel
+</button>
+ <button data-submit-dialog-id="warn-tag-match-create-branch-dialog" type="button" data-view-component="true" class="btn-danger btn"> Create
+</button>
+ </footer>
+</modal-dialog></div>
+
+
+ <h2 id="blob-path" class="breadcrumb flex-auto flex-self-center min-width-0 text-normal mx-2 width-full width-md-auto flex-order-1 flex-md-order-none mt-3 mt-md-0">
+ <span class="js-repo-root text-bold"><span class="js-path-segment d-inline-block wb-break-all"><a data-turbo-frame="repo-content-turbo-frame" href="/rlkamalapurkar/bodeplot"><span>bodeplot</span></a></span></span><span class="separator">/</span><strong class="final-path">README.md</strong>
+ </h2>
+ <a href="/rlkamalapurkar/bodeplot/find/main" data-pjax="" data-hotkey="t" data-view-component="true" class="btn mr-2 d-none d-md-block"> Go to file
+</a>
+ <details id="blob-more-options-details" data-view-component="true" class="details-overlay details-reset position-relative">
+ <summary role="button" data-view-component="true" class="btn"> <svg aria-label="More options" role="img" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-kebab-horizontal">
+ <path d="M8 9a1.5 1.5 0 100-3 1.5 1.5 0 000 3zM1.5 9a1.5 1.5 0 100-3 1.5 1.5 0 000 3zm13 0a1.5 1.5 0 100-3 1.5 1.5 0 000 3z"></path>
+</svg>
+</summary>
+ <div data-view-component="true"> <ul class="dropdown-menu dropdown-menu-sw">
+ <li class="d-block d-md-none">
+ <a class="dropdown-item d-flex flex-items-baseline" data-hydro-click="{&quot;event_type&quot;:&quot;repository.click&quot;,&quot;payload&quot;:{&quot;target&quot;:&quot;FIND_FILE_BUTTON&quot;,&quot;repository_id&quot;:418699104,&quot;originating_url&quot;:&quot;https://github.com/rlkamalapurkar/bodeplot/blob/main/README.md&quot;,&quot;user_id&quot;:30264720}}" data-hydro-click-hmac="fb7cdb895bb620eec974c9330f682a2da5f71c043cbe0d7c7a5046d827154f9a" data-ga-click="Repository, find file, location:repo overview" data-hotkey="t" href="/rlkamalapurkar/bodeplot/find/main">
+ <span class="flex-auto">Go to file</span>
+ <span class="text-small color-fg-muted" aria-hidden="true">T</span>
+</a> </li>
+ <li data-toggle-for="blob-more-options-details">
+ <button data-toggle-for="jumpto-line-details-dialog" type="button" data-view-component="true" class="dropdown-item btn-link"> <span class="d-flex flex-items-baseline">
+ <span class="flex-auto">Go to line</span>
+ <span class="text-small color-fg-muted" aria-hidden="true">L</span>
+ </span>
+</button> </li>
+ <li class="dropdown-divider" role="none"></li>
+ <li>
+ <clipboard-copy data-toggle-for="blob-more-options-details" aria-label="Copy path" value="README.md" data-view-component="true" class="dropdown-item cursor-pointer">
+
+ Copy path
+
+</clipboard-copy> </li>
+ <li>
+ <clipboard-copy data-toggle-for="blob-more-options-details" aria-label="Copy permalink" value="https://github.com/rlkamalapurkar/bodeplot/blob/3746d1613a5eea9f1e26d4cf5bcce954068463f3/README.md" data-view-component="true" class="dropdown-item cursor-pointer">
+
+ <span class="d-flex flex-items-baseline">
+ <span class="flex-auto">Copy permalink</span>
+ </span>
+
+</clipboard-copy> </li>
+ </ul>
+</div>
+</details></div>
+
+
+
+
+
+ <div id="spoof-warning" class="mt-0 pb-3" hidden aria-hidden>
+ <div data-view-component="true" class="flash flash-warn mt-0 clearfix">
+
+
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert float-left mt-1">
+ <path fill-rule="evenodd" d="M8.22 1.754a.25.25 0 00-.44 0L1.698 13.132a.25.25 0 00.22.368h12.164a.25.25 0 00.22-.368L8.22 1.754zm-1.763-.707c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0114.082 15H1.918a1.75 1.75 0 01-1.543-2.575L6.457 1.047zM9 11a1 1 0 11-2 0 1 1 0 012 0zm-.25-5.25a.75.75 0 00-1.5 0v2.5a.75.75 0 001.5 0v-2.5z"></path>
+</svg>
+
+ <div class="overflow-hidden">This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.</div>
+
+
+
+</div></div>
+
+ <include-fragment src="/rlkamalapurkar/bodeplot/spoofed_commit_check/3746d1613a5eea9f1e26d4cf5bcce954068463f3" data-test-selector="spoofed-commit-check"></include-fragment>
+
+ <div class="Box d-flex flex-column flex-shrink-0 mb-3">
+ <include-fragment src="/rlkamalapurkar/bodeplot/contributors/main/README.md" class="commit-loader">
+ <div class="Box-header d-flex flex-items-center">
+ <div class="Skeleton avatar avatar-user flex-shrink-0 ml-n1 mr-n1 mt-n1 mb-n1" style="width:24px;height:24px;"></div>
+ <div class="Skeleton Skeleton--text col-5 ml-2">&nbsp;</div>
+ </div>
+
+ <div class="Box-body d-flex flex-items-center" >
+ <div class="Skeleton Skeleton--text col-1">&nbsp;</div>
+ <span class="color-fg-danger h6 loader-error">Cannot retrieve contributors at this time</span>
+ </div>
+</include-fragment></div>
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <div data-target="readme-toc.content" class="Box mt-3 position-relative">
+
+ <div
+ class="Box-header js-blob-header py-2 pr-2 d-flex flex-shrink-0 flex-md-row flex-items-center"
+
+ >
+
+
+ <div class="text-mono f6 flex-auto pr-3 flex-order-2 flex-md-order-1">
+
+ 57 lines (50 sloc)
+ <span class="file-info-divider"></span>
+ 3.79 KB
+ </div>
+
+ <div class="d-flex py-1 py-md-0 flex-auto flex-order-1 flex-md-order-2 flex-sm-grow-0 flex-justify-between hide-sm hide-md">
+ <div class="BtnGroup">
+ <a href="/rlkamalapurkar/bodeplot/blob/main/README.md?plain=1" data-permalink-href="/rlkamalapurkar/bodeplot/blob/3746d1613a5eea9f1e26d4cf5bcce954068463f3/README.md?plain=1" aria-label="Display the source blob" data-view-component="true" class="source tooltipped tooltipped tooltipped-n js-permalink-replaceable-link btn-sm btn BtnGroup-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code">
+ <path fill-rule="evenodd" d="M4.72 3.22a.75.75 0 011.06 1.06L2.06 8l3.72 3.72a.75.75 0 11-1.06 1.06L.47 8.53a.75.75 0 010-1.06l4.25-4.25zm6.56 0a.75.75 0 10-1.06 1.06L13.94 8l-3.72 3.72a.75.75 0 101.06 1.06l4.25-4.25a.75.75 0 000-1.06l-4.25-4.25z"></path>
+</svg>
+</a> <a href="/rlkamalapurkar/bodeplot/blob/main/README.md" data-permalink-href="/rlkamalapurkar/bodeplot/blob/3746d1613a5eea9f1e26d4cf5bcce954068463f3/README.md" aria-label="Display the rendered blob" data-view-component="true" class="rendered tooltipped tooltipped tooltipped-n selected js-permalink-replaceable-link btn-sm btn BtnGroup-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-file">
+ <path fill-rule="evenodd" d="M3.75 1.5a.25.25 0 00-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 00.25-.25V6h-2.75A1.75 1.75 0 019 4.25V1.5H3.75zm6.75.062V4.25c0 .138.112.25.25.25h2.688a.252.252 0 00-.011-.013l-2.914-2.914a.272.272 0 00-.013-.011zM2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0113.25 16h-9.5A1.75 1.75 0 012 14.25V1.75z"></path>
+</svg>
+</a> </div>
+
+
+ <div class="BtnGroup">
+ <a data-permalink-href="/rlkamalapurkar/bodeplot/raw/3746d1613a5eea9f1e26d4cf5bcce954068463f3/README.md" href="/rlkamalapurkar/bodeplot/raw/main/README.md" id="raw-url" data-view-component="true" class="js-permalink-replaceable-link btn-sm btn BtnGroup-item"> Raw
+</a> <a data-permalink-href="/rlkamalapurkar/bodeplot/blame/3746d1613a5eea9f1e26d4cf5bcce954068463f3/README.md" href="/rlkamalapurkar/bodeplot/blame/main/README.md" data-hotkey="b" data-view-component="true" class="js-update-url-with-hash js-permalink-replaceable-link btn-sm btn BtnGroup-item"> Blame
+</a> </div>
+
+ <div class="d-flex">
+
+<div class="ml-1" data-test-selector="edit-dropdown-menu-component">
+ <form class="BtnGroup-parent js-update-url-with-hash " data-turbo="false" action="/rlkamalapurkar/bodeplot/edit/main/README.md" accept-charset="UTF-8" method="post"><input type="hidden" name="authenticity_token" value="CpD0Mbb428UDrTltW8bN4zKtn3yEMXxUKteHmfFN0H0Hl1DJj29emWcu7ejnNXNxo69LfCfhlZOdAZ68uFnKXA" autocomplete="off" />
+ <button title="Edit this file" data-hotkey="e" data-disable-with="" data-test-selector="edit-icon-button" type="submit" data-view-component="true" class="btn-sm BtnGroup-item btn"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-pencil">
+ <path fill-rule="evenodd" d="M11.013 1.427a1.75 1.75 0 012.474 0l1.086 1.086a1.75 1.75 0 010 2.474l-8.61 8.61c-.21.21-.47.364-.756.445l-3.251.93a.75.75 0 01-.927-.928l.929-3.25a1.75 1.75 0 01.445-.758l8.61-8.61zm1.414 1.06a.25.25 0 00-.354 0L10.811 3.75l1.439 1.44 1.263-1.263a.25.25 0 000-.354l-1.086-1.086zM11.189 6.25L9.75 4.81l-6.286 6.287a.25.25 0 00-.064.108l-.558 1.953 1.953-.558a.249.249 0 00.108-.064l6.286-6.286z"></path>
+</svg>
+</button></form>
+ <details class="details-reset details-overlay select-menu BtnGroup-parent d-inline-block position-relative">
+ <summary data-disable-invalid="" data-disable-with="" data-dropdown-tracking="{&quot;type&quot;:&quot;blob_edit_dropdown.more_options_click&quot;,&quot;context&quot;:{&quot;repository_id&quot;:418699104,&quot;actor_id&quot;:30264720,&quot;github_dev_enabled&quot;:true,&quot;edit_enabled&quot;:true,&quot;small_screen&quot;:false}}" aria-label="Select additional options" data-view-component="true" class="js-blob-dropdown-click select-menu-button btn-sm btn BtnGroup-item float-none px-2">
+</summary> <div class="SelectMenu right-0">
+ <div class="SelectMenu-modal width-full">
+ <div class="SelectMenu-list SelectMenu-list--borderless py-2">
+ <form class="SelectMenu-item js-update-url-with-hash " data-turbo="false" action="/rlkamalapurkar/bodeplot/edit/main/README.md" accept-charset="UTF-8" method="post"><input type="hidden" name="authenticity_token" value="NUYBggXktjjzJvc90oNvcvGFjVlgsikTMP1DMSH3paM4QaV6PHMzZJelI7hucNHgYIdZWcNiwNSHK1oUaOO_gg" autocomplete="off" />
+ <button title="Edit this file" data-test-selector="edit-text-button" type="submit" data-view-component="true" class="btn-invisible btn width-full d-flex flex-justify-between color-fg-default text-normal p-0"> <div class="mr-5">Edit this file</div>
+ <div class="color-fg-muted">E</div>
+</button></form>
+ <a aria-label="Open this file in github.dev" data-test-selector="github-dev-link" data-dropdown-tracking="{&quot;type&quot;:&quot;blob_edit_dropdown.dev_link_click&quot;,&quot;context&quot;:{&quot;repository_id&quot;:418699104,&quot;actor_id&quot;:30264720,&quot;edit_enabled&quot;:true,&quot;small_screen&quot;:false}}" href="https://github.dev/" data-view-component="true" class="SelectMenu-item js-github-dev-shortcut js-blob-dropdown-click width-full d-flex flex-justify-between color-fg-default f5 text-normal">
+ <div class="mr-5 no-wrap">Open in github.dev</div>
+ <div class="color-fg-muted">.</div>
+</a>
+ <a data-platforms="windows,mac" data-test-selector="github-desktop-link" aria-label="Open this file in GitHub Desktop" href="x-github-client://openRepo/https://github.com/rlkamalapurkar/bodeplot?branch=main&amp;filepath=README.md" data-view-component="true" class="SelectMenu-item no-wrap js-remove-unless-platform width-full text-normal color-fg-default f5">
+ Open in GitHub Desktop
+</a> </div>
+ </div>
+ </div>
+ </details>
+</div>
+
+
+
+<div data-test-selector="remote-clipboard-copy">
+ <remote-clipboard-copy class="d-inline-block btn-octicon" style="height: 26px" data-src="/rlkamalapurkar/bodeplot/raw/3746d1613a5eea9f1e26d4cf5bcce954068463f3/README.md" data-action="click:remote-clipboard-copy#remoteCopy">
+
+
+ <span data-target="remote-clipboard-copy.idle"> <span class="tooltipped tooltipped-nw cursor-pointer" data-hydro-click="{&quot;event_type&quot;:&quot;repository.click&quot;,&quot;payload&quot;:{&quot;target&quot;:&quot;COPY_RAW_CONTENTS_BUTTON&quot;,&quot;repository_id&quot;:418699104,&quot;originating_url&quot;:&quot;https://github.com/rlkamalapurkar/bodeplot/blob/main/README.md&quot;,&quot;user_id&quot;:30264720}}" data-hydro-click-hmac="590819b86a6597904260fa37e4352ec933f85c73726d54cb2737729a0be26f39" aria-label="Copy raw contents">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copy">
+ <path fill-rule="evenodd" d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 010 1.5h-1.5a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-1.5a.75.75 0 011.5 0v1.5A1.75 1.75 0 019.25 16h-7.5A1.75 1.75 0 010 14.25v-7.5z"></path><path fill-rule="evenodd" d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0114.25 11h-7.5A1.75 1.75 0 015 9.25v-7.5zm1.75-.25a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-7.5a.25.25 0 00-.25-.25h-7.5z"></path>
+</svg>
+</span></span>
+ <span data-target="remote-clipboard-copy.fetching" hidden="hidden"> <svg style="box-sizing: content-box; color: var(--color-icon-primary);" width="16" height="16" viewBox="0 0 16 16" fill="none" data-view-component="true" class="anim-rotate">
+ <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" />
+ <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke" />
+</svg>
+</span>
+ <span data-target="remote-clipboard-copy.success" hidden="hidden"> <span class="tooltipped tooltipped-nw" aria-label="Copied!">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check color-fg-success">
+ <path fill-rule="evenodd" d="M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z"></path>
+</svg>
+ </span>
+</span>
+ <span data-target="remote-clipboard-copy.error" hidden="hidden"> <span class="tooltipped tooltipped-nw" aria-label="Something went wrong. Try again.">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert color-fg-attention">
+ <path fill-rule="evenodd" d="M8.22 1.754a.25.25 0 00-.44 0L1.698 13.132a.25.25 0 00.22.368h12.164a.25.25 0 00.22-.368L8.22 1.754zm-1.763-.707c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0114.082 15H1.918a1.75 1.75 0 01-1.543-2.575L6.457 1.047zM9 11a1 1 0 11-2 0 1 1 0 012 0zm-.25-5.25a.75.75 0 00-1.5 0v2.5a.75.75 0 001.5 0v-2.5z"></path>
+</svg>
+ </span>
+</span>
+</remote-clipboard-copy></div>
+
+
+ <!-- '"` --><!-- </textarea></xmp> --></option></form><form class="inline-form" data-turbo="false" action="/rlkamalapurkar/bodeplot/delete/main/README.md" accept-charset="UTF-8" method="post"><input type="hidden" name="authenticity_token" value="KffW6ZvgwQ5oTWmocEt5U7zNRKdzCDM-2tokVSpzNFsptpLcbtrEn-PvNnHSOBr-hNOV4TIgjmFd74MkeZL2Zw" />
+ <button class="btn-octicon btn-octicon-danger tooltipped tooltipped-nw" type="submit"
+ aria-label="Delete this file" data-disable-with>
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-trash">
+ <path fill-rule="evenodd" d="M6.5 1.75a.25.25 0 01.25-.25h2.5a.25.25 0 01.25.25V3h-3V1.75zm4.5 0V3h2.25a.75.75 0 010 1.5H2.75a.75.75 0 010-1.5H5V1.75C5 .784 5.784 0 6.75 0h2.5C10.216 0 11 .784 11 1.75zM4.496 6.675a.75.75 0 10-1.492.15l.66 6.6A1.75 1.75 0 005.405 15h5.19c.9 0 1.652-.681 1.741-1.576l.66-6.6a.75.75 0 00-1.492-.149l-.66 6.6a.25.25 0 01-.249.225h-5.19a.25.25 0 01-.249-.225l-.66-6.6z"></path>
+</svg>
+ </button>
+</form> </div>
+ </div>
+
+ <div class="d-flex hide-lg hide-xl flex-order-2 flex-grow-0">
+ <details class="dropdown details-reset details-overlay d-inline-block">
+ <summary
+ class="js-blob-dropdown-click btn-octicon"
+ aria-haspopup="true"
+ aria-label="possible actions"
+ data-test-selector="small-screen-more-options"
+ data-dropdown-tracking="{&quot;type&quot;:&quot;blob_edit_dropdown.more_options_click&quot;,&quot;context&quot;:{&quot;repository_id&quot;:418699104,&quot;actor_id&quot;:30264720,&quot;github_dev_enabled&quot;:true,&quot;edit_enabled&quot;:true,&quot;small_screen&quot;:true}}"
+ >
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-kebab-horizontal">
+ <path d="M8 9a1.5 1.5 0 100-3 1.5 1.5 0 000 3zM1.5 9a1.5 1.5 0 100-3 1.5 1.5 0 000 3zm13 0a1.5 1.5 0 100-3 1.5 1.5 0 000 3z"></path>
+</svg>
+ </summary>
+
+ <ul class="dropdown-menu dropdown-menu-sw" style="width: 175px">
+ <li>
+ <a class="dropdown-item tooltipped tooltipped-nw js-remove-unless-platform"
+ data-platforms="windows,mac"
+ href="x-github-client://openRepo/https://github.com/rlkamalapurkar/bodeplot?branch=main&amp;filepath=README.md">
+ Open with Desktop
+ </a>
+ </li>
+ <li>
+ <a class="dropdown-item" href="/rlkamalapurkar/bodeplot/raw/main/README.md">
+ View raw
+ </a>
+ </li>
+ <li>
+ <remote-clipboard-copy class="dropdown-item" data-src="/rlkamalapurkar/bodeplot/raw/main/README.md" data-action="click:remote-clipboard-copy#remoteCopy">
+
+
+ <span data-target="remote-clipboard-copy.idle"> <span class="cursor-pointer" data-hydro-click="{&quot;event_type&quot;:&quot;repository.click&quot;,&quot;payload&quot;:{&quot;target&quot;:&quot;COPY_RAW_CONTENTS_BUTTON&quot;,&quot;repository_id&quot;:418699104,&quot;originating_url&quot;:&quot;https://github.com/rlkamalapurkar/bodeplot/blob/main/README.md&quot;,&quot;user_id&quot;:30264720}}" data-hydro-click-hmac="590819b86a6597904260fa37e4352ec933f85c73726d54cb2737729a0be26f39">
+ Copy raw contents
+</span></span>
+ <span data-target="remote-clipboard-copy.fetching" hidden="hidden"> Copy raw contents
+ <span class="d-inline-block position-relative" style="top: 3px">
+ <svg aria-label="fetching contents…" style="box-sizing: content-box; color: var(--color-icon-primary);" width="16" height="16" viewBox="0 0 16 16" fill="none" data-view-component="true" class="anim-rotate">
+ <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" />
+ <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke" />
+</svg>
+ </span>
+</span>
+ <span data-target="remote-clipboard-copy.success" hidden="hidden"> Copy raw contents
+ <svg aria-label="Copied!" role="img" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check color-fg-success">
+ <path fill-rule="evenodd" d="M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z"></path>
+</svg>
+</span>
+ <span data-target="remote-clipboard-copy.error" hidden="hidden"> Copy raw contents
+ <svg aria-label="Something went wrong. Try again." role="img" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert color-fg-attention">
+ <path fill-rule="evenodd" d="M8.22 1.754a.25.25 0 00-.44 0L1.698 13.132a.25.25 0 00.22.368h12.164a.25.25 0 00.22-.368L8.22 1.754zm-1.763-.707c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0114.082 15H1.918a1.75 1.75 0 01-1.543-2.575L6.457 1.047zM9 11a1 1 0 11-2 0 1 1 0 012 0zm-.25-5.25a.75.75 0 00-1.5 0v2.5a.75.75 0 001.5 0v-2.5z"></path>
+</svg>
+</span>
+</remote-clipboard-copy> </li>
+ <li>
+ <a class="dropdown-item" href="/rlkamalapurkar/bodeplot/blame/main/README.md">
+ View blame
+ </a>
+ </li>
+
+ <li class="dropdown-divider" role="none"></li>
+ <li>
+ <a class="dropdown-item" href="/rlkamalapurkar/bodeplot/edit/main/README.md">Edit file</a>
+ </li>
+ <li>
+ <a class="dropdown-item js-github-dev-shortcut js-blob-dropdown-click" data-test-selector="small-screen-github-dev-link" data-dropdown-tracking="{&quot;type&quot;:&quot;blob_edit_dropdown.dev_link_click&quot;,&quot;context&quot;:{&quot;repository_id&quot;:418699104,&quot;actor_id&quot;:30264720,&quot;edit_enabled&quot;:true,&quot;small_screen&quot;:true}}" href="https://github.dev/">Open with github.dev</a>
+ </li>
+ <li>
+ <a class="dropdown-item menu-item-danger" href="/rlkamalapurkar/bodeplot/delete/main/README.md">Delete file</a>
+ </li>
+ </ul>
+ </details>
+ </div>
+</div>
+
+
+ <div id="readme" class="Box-body readme blob js-code-block-container p-5 p-xl-6 gist-border-0">
+ <article class="markdown-body entry-content container-lg" itemprop="text"><h1 dir="auto"><a id="user-content-bodeplot" class="anchor" aria-hidden="true" href="#bodeplot"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a>bodeplot</h1>
+<p dir="auto">LaTeX package to plot Bode, Nichols, and Nyquist diagrams.</p>
+<p dir="auto">Inspired by the <code>bodegraph</code> package.</p>
+<p dir="auto"><em>Version 1.0.8 and newer store <code>gnuplot</code> temporary files in the working directory. Use class option <code>declutter</code> to restore pre-v1.0.8 behavior. Option <code>declutter</code> can cause errors if used with a <code>tikzexternalize</code> prefix.</em></p>
+<p dir="auto">Compilation instructions:</p>
+<ol dir="auto">
+<li><code>latex bodeplot.ins</code> to generate <code>bodeplot.sty</code></li>
+<li>To compile documentation (needs <code>gnuplot</code> on system PATH):</li>
+</ol>
+<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="pdflatex bodeplot.dtx --shell-escape
+makeindex -s gind.ist bodeplot.idx
+makeindex -s gglo.ist -o bodeplot.gls bodeplot.glo
pdflatex bodeplot.dtx --shell-escape
+pdflatex bodeplot.dtx --shell-escape"><pre class="notranslate"><code>pdflatex bodeplot.dtx --shell-escape
makeindex -s gind.ist bodeplot.idx
makeindex -s gglo.ist -o bodeplot.gls bodeplot.glo
pdflatex bodeplot.dtx --shell-escape
pdflatex bodeplot.dtx --shell-escape
-```
-Added functionality:
- - New `\BodeZPK` and `\BodeTF` commands to generate Bode plots of any transfer function given either poles, zeros, gain, and delay, or numerator and denominator coefficients and delay
- - Support for unstable poles and zeros.
- - Support for complex poles and zeros.
- - Support for general stable and unstable second order transfer functions.
- - Support for both `gnuplot` (default) and `pgfplots` (package option `pgf`).
- - Support for linear and asymptotic approximation of magnitude and phase plots of any transfer function given poles, zeros, and gain.
-
-Main Bode/Nyquist/Nichols commands:
-Given Zeros, Poles, Gain, and Delay (Bode plots support asymptotic and linear approximation for systems without delays):
- - `\BodeZPK[object1/type1/{options1},object2/type2/{options2},...]{z/{zeros},p/{poles},k/gain,d/delay}{min-frequency}{max-frequency}`
- - `\NicholsZPK[plot/{options},axes/{options}]{z/{zeros},p/{poles},k/gain,d/delay}{min-frequency}{max-frequency}`
- - `\NyquistZPK[plot/{options},axes/{options}]{z/{zeros},p/{poles},k/gain,d/delay}{min-frequency}{max-frequency}`
-
-Given Numerator and denominator coefficients and delay (does not support approximation yet):
- - `\BodeTF[object1/type1/{options1},object2/type2/{options2},...]{num/{coeff},den/{coeff},d/delay}{min-frequency}{max-frequency}`
- - `\NicholsTF[plot/{options},axes/{options}]{num/{coeff},den/{coeff},d/delay}`
- - `\NyquistTF[plot/{options},axes/{options}]{num/{coeff},den/{coeff},d/delay}`
-
-Other new environments and associated commands:
- - `BodePlot` environment
- - `\addBodeZPKPlots[{approximation1/{plot-options1}},{approximation2/{plot-options2}},...]{plot-type (phase or magnitude)}{z/{zeros},p/{poles},k/gain,d/delay}`
- - `\addBodeTFPlot[plot-options]{plot-type (phase or magnitude)}{num/{coeff},den/{coeff},d/delay}`
- - `\addBodeComponentPlot[plot-options]{basic_component_plot_command}`
- - Basic component plot commands: ***(append `Lin` to get linear approximation and `Asymp` to get asymptotic approximation)*** ***(change `Pole` to `Zero` to get inverse plots)*** ***(change `Mag` to `Ph` to get phase plots)***
- - `\MagK{a}` - Pure gain, G(s) = a.
- - `\MagPole{a}{b}` - Single pole at s = a+bi, G(s) = 1/(s - a-bi).
- - `\MagCSPoles{z}{w}` - Cannonical Second order system, G(s) = 1/(s^2 + 2zws + w^2).
- - `\MagSOPoles{a}{b}` - Second Order system, G(s) = 1/(s^2 + as + b).
- - `\MagDel{T}` - Pure delay, G(s) = exp(-Ts) (does not admit asymptotic approximation).
- - `NicholsChart` environment
- - `\addNicholsZPKChart[plot-options]{z/{zeros},p/{poles},k/gain,d/delay}`
- - `\addNicholsTFChart[plot-options]{num/{coeff},den/{coeff},d/delay}`
- - `NyquistPlot` environment
- - `\addNyquistZPKPlot[plot-options]{z/{zeros},p/{poles},k/gain,d/delay}`
- - `\addNyquistTFPlot[plot-options]{num/{coeff},den/{coeff},d/delay}`
-
-Limitation: TF commands are wrapped between 0 and 360 degrees in `pgf` mode.
+</code></pre></div>
+<p dir="auto">Added functionality:</p>
+<ul dir="auto">
+<li>New <code>\BodeZPK</code> and <code>\BodeTF</code> commands to generate Bode plots of any transfer function given either poles, zeros, gain, and delay, or numerator and denominator coefficients and delay</li>
+<li>Support for unstable poles and zeros.</li>
+<li>Support for complex poles and zeros.</li>
+<li>Support for general stable and unstable second order transfer functions.</li>
+<li>Support for both <code>gnuplot</code> (default) and <code>pgfplots</code> (package option <code>pgf</code>).</li>
+<li>Support for <code>rad/s</code> (default) and <code>Hz</code> (package option <code>Hz</code> or <code>pgf</code> key <code>frequency unit=Hz</code> for per-plot change) frequency units.</li>
+<li>Support for <code>deg</code> (default) and <code>rad</code> (package option <code>rad</code> or <code>pgf</code> key <code>phase unit=rad</code> for per-plot change) phase units.</li>
+<li>Support for linear and asymptotic approximation of magnitude and phase plots of any transfer function given poles, zeros, and gain.</li>
+</ul>
+<p dir="auto">Main Bode/Nyquist/Nichols commands:
+Given Zeros, Poles, Gain, and Delay (Bode plots support asymptotic and linear approximation for systems without delays):</p>
+<ul dir="auto">
+<li><code>\BodeZPK[object1/type1/{options1},object2/type2/{options2},...]{z/{zeros},p/{poles},k/gain,d/delay}{min-frequency}{max-frequency}</code></li>
+<li><code>\NicholsZPK[plot/{options},axes/{options}]{z/{zeros},p/{poles},k/gain,d/delay}{min-frequency}{max-frequency}</code></li>
+<li><code>\NyquistZPK[plot/{options},axes/{options}]{z/{zeros},p/{poles},k/gain,d/delay}{min-frequency}{max-frequency}</code></li>
+</ul>
+<p dir="auto">Given Numerator and denominator coefficients and delay (does not support approximation yet):</p>
+<ul dir="auto">
+<li><code>\BodeTF[object1/type1/{options1},object2/type2/{options2},...]{num/{coeff},den/{coeff},d/delay}{min-frequency}{max-frequency}</code></li>
+<li><code>\NicholsTF[plot/{options},axes/{options}]{num/{coeff},den/{coeff},d/delay}</code></li>
+<li><code>\NyquistTF[plot/{options},axes/{options}]{num/{coeff},den/{coeff},d/delay}</code></li>
+</ul>
+<p dir="auto">Other new environments and associated commands:</p>
+<ul dir="auto">
+<li><code>BodePlot</code> environment
+<ul dir="auto">
+<li><code>\addBodeZPKPlots[{approximation1/{plot-options1}},{approximation2/{plot-options2}},...]{plot-type (phase or magnitude)}{z/{zeros},p/{poles},k/gain,d/delay}</code></li>
+<li><code>\addBodeTFPlot[plot-options]{plot-type (phase or magnitude)}{num/{coeff},den/{coeff},d/delay}</code></li>
+<li><code>\addBodeComponentPlot[plot-options]{basic_component_plot_command}</code>
+<ul dir="auto">
+<li>Basic component plot commands: <em><strong>(append <code>Lin</code> to get linear approximation and <code>Asymp</code> to get asymptotic approximation)</strong></em> <em><strong>(change <code>Pole</code> to <code>Zero</code> to get inverse plots)</strong></em> <em><strong>(change <code>Mag</code> to <code>Ph</code> to get phase plots)</strong></em></li>
+<li><code>\MagK{a}</code> - Pure gain, G(s) = a.</li>
+<li><code>\MagPole{a}{b}</code> - Single pole at s = a+bi, G(s) = 1/(s - a-bi).</li>
+<li><code>\MagCSPoles{z}{w}</code> - Cannonical Second order system, G(s) = 1/(s^2 + 2zws + w^2).</li>
+<li><code>\MagSOPoles{a}{b}</code> - Second Order system, G(s) = 1/(s^2 + as + b).</li>
+<li><code>\MagDel{T}</code> - Pure delay, G(s) = exp(-Ts) (does not admit asymptotic approximation).</li>
+</ul>
+</li>
+</ul>
+</li>
+<li><code>NicholsChart</code> environment
+<ul dir="auto">
+<li><code>\addNicholsZPKChart[plot-options]{z/{zeros},p/{poles},k/gain,d/delay}</code></li>
+<li><code>\addNicholsTFChart[plot-options]{num/{coeff},den/{coeff},d/delay}</code></li>
+</ul>
+</li>
+<li><code>NyquistPlot</code> environment
+<ul dir="auto">
+<li><code>\addNyquistZPKPlot[plot-options]{z/{zeros},p/{poles},k/gain,d/delay}</code></li>
+<li><code>\addNyquistTFPlot[plot-options]{num/{coeff},den/{coeff},d/delay}</code></li>
+</ul>
+</li>
+</ul>
+<p dir="auto">Limitation: TF commands are wrapped between 0 and 360 degrees in <code>pgf</code> mode.</p>
+</article>
+ </div>
+
+ </div>
+
+
+
+
+ <details class="details-reset details-overlay details-overlay-dark" id="jumpto-line-details-dialog">
+ <summary data-hotkey="l" aria-label="Jump to line"></summary>
+ <details-dialog class="Box Box--overlay d-flex flex-column anim-fade-in fast linejump" aria-label="Jump to line">
+ <!-- '"` --><!-- </textarea></xmp> --></option></form><form class="js-jump-to-line-form Box-body d-flex" data-turbo="false" action="" accept-charset="UTF-8" method="get">
+ <input class="form-control flex-auto mr-3 linejump-input js-jump-to-line-field" type="text" placeholder="Jump to line&hellip;" aria-label="Jump to line" autofocus>
+ <button data-close-dialog="" type="submit" data-view-component="true" class="btn"> Go
+</button>
+</form> </details-dialog>
+ </details>
+
+
+
+</div>
+
+ </div>
+
+
+ </div>
+
+ </turbo-frame>
+
+
+ </main>
+ </div>
+
+ </div>
+
+ <footer class="footer width-full container-xl p-responsive">
+ <h2 class='sr-only'>Footer</h2>
+
+ <div class="position-relative d-flex flex-items-center pb-2 f6 color-fg-muted border-top color-border-muted flex-column-reverse flex-lg-row flex-wrap flex-lg-nowrap mt-6 pt-6">
+ <div class="list-style-none d-flex flex-wrap col-0 col-lg-2 flex-justify-start flex-lg-justify-between mb-2 mb-lg-0">
+ <div class="mt-2 mt-lg-0 d-flex flex-items-center">
+ <a aria-label="Homepage" title="GitHub" class="footer-octicon mr-2" href="https://github.com">
+ <svg aria-hidden="true" height="24" viewBox="0 0 16 16" version="1.1" width="24" data-view-component="true" class="octicon octicon-mark-github">
+ <path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"></path>
+</svg>
+</a> <span>
+ &copy; 2022 GitHub, Inc.
+ </span>
+ </div>
+ </div>
+
+ <nav aria-label='footer' class="col-12 col-lg-8">
+ <h3 class='sr-only' id='sr-footer-heading'>Footer navigation</h3>
+ <ul class="list-style-none d-flex flex-wrap col-12 flex-justify-center flex-lg-justify-between mb-2 mb-lg-0" aria-labelledby='sr-footer-heading'>
+ <li class="mr-3 mr-lg-0"><a href="https://docs.github.com/en/github/site-policy/github-terms-of-service" data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to terms&quot;,&quot;label&quot;:&quot;text:terms&quot;}">Terms</a></li>
+ <li class="mr-3 mr-lg-0"><a href="https://docs.github.com/en/github/site-policy/github-privacy-statement" data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to privacy&quot;,&quot;label&quot;:&quot;text:privacy&quot;}">Privacy</a></li>
+ <li class="mr-3 mr-lg-0"><a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to security&quot;,&quot;label&quot;:&quot;text:security&quot;}" href="https://github.com/security">Security</a></li>
+ <li class="mr-3 mr-lg-0"><a href="https://www.githubstatus.com/" data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to status&quot;,&quot;label&quot;:&quot;text:status&quot;}">Status</a></li>
+ <li class="mr-3 mr-lg-0"><a data-ga-click="Footer, go to help, text:Docs" href="https://docs.github.com">Docs</a></li>
+ <li class="mr-3 mr-lg-0"><a href="https://support.github.com?tags=dotcom-footer" data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to contact&quot;,&quot;label&quot;:&quot;text:contact&quot;}">Contact GitHub</a></li>
+ <li class="mr-3 mr-lg-0"><a href="https://github.com/pricing" data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to Pricing&quot;,&quot;label&quot;:&quot;text:Pricing&quot;}">Pricing</a></li>
+ <li class="mr-3 mr-lg-0"><a href="https://docs.github.com" data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to api&quot;,&quot;label&quot;:&quot;text:api&quot;}">API</a></li>
+ <li class="mr-3 mr-lg-0"><a href="https://services.github.com" data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to training&quot;,&quot;label&quot;:&quot;text:training&quot;}">Training</a></li>
+ <li class="mr-3 mr-lg-0"><a href="https://github.blog" data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to blog&quot;,&quot;label&quot;:&quot;text:blog&quot;}">Blog</a></li>
+ <li><a data-ga-click="Footer, go to about, text:about" href="https://github.com/about">About</a></li>
+ </ul>
+ </nav>
+ </div>
+
+ <div class="d-flex flex-justify-center pb-6">
+ <span class="f6 color-fg-muted"></span>
+ </div>
+</footer>
+
+
+
+
+ <div id="ajax-error-message" class="ajax-error-message flash flash-error" hidden>
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
+ <path fill-rule="evenodd" d="M8.22 1.754a.25.25 0 00-.44 0L1.698 13.132a.25.25 0 00.22.368h12.164a.25.25 0 00.22-.368L8.22 1.754zm-1.763-.707c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0114.082 15H1.918a1.75 1.75 0 01-1.543-2.575L6.457 1.047zM9 11a1 1 0 11-2 0 1 1 0 012 0zm-.25-5.25a.75.75 0 00-1.5 0v2.5a.75.75 0 001.5 0v-2.5z"></path>
+</svg>
+ <button type="button" class="flash-close js-ajax-error-dismiss" aria-label="Dismiss error">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x">
+ <path fill-rule="evenodd" d="M3.72 3.72a.75.75 0 011.06 0L8 6.94l3.22-3.22a.75.75 0 111.06 1.06L9.06 8l3.22 3.22a.75.75 0 11-1.06 1.06L8 9.06l-3.22 3.22a.75.75 0 01-1.06-1.06L6.94 8 3.72 4.78a.75.75 0 010-1.06z"></path>
+</svg>
+ </button>
+ You can’t perform that action at this time.
+ </div>
+
+ <div class="js-stale-session-flash flash flash-warn flash-banner" hidden
+ >
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
+ <path fill-rule="evenodd" d="M8.22 1.754a.25.25 0 00-.44 0L1.698 13.132a.25.25 0 00.22.368h12.164a.25.25 0 00.22-.368L8.22 1.754zm-1.763-.707c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0114.082 15H1.918a1.75 1.75 0 01-1.543-2.575L6.457 1.047zM9 11a1 1 0 11-2 0 1 1 0 012 0zm-.25-5.25a.75.75 0 00-1.5 0v2.5a.75.75 0 001.5 0v-2.5z"></path>
+</svg>
+ <span class="js-stale-session-flash-signed-in" hidden>You signed in with another tab or window. <a href="">Reload</a> to refresh your session.</span>
+ <span class="js-stale-session-flash-signed-out" hidden>You signed out in another tab or window. <a href="">Reload</a> to refresh your session.</span>
+ </div>
+ <template id="site-details-dialog">
+ <details class="details-reset details-overlay details-overlay-dark lh-default color-fg-default hx_rsm" open>
+ <summary role="button" aria-label="Close dialog"></summary>
+ <details-dialog class="Box Box--overlay d-flex flex-column anim-fade-in fast hx_rsm-dialog hx_rsm-modal">
+ <button class="Box-btn-octicon m-0 btn-octicon position-absolute right-0 top-0" type="button" aria-label="Close dialog" data-close-dialog>
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x">
+ <path fill-rule="evenodd" d="M3.72 3.72a.75.75 0 011.06 0L8 6.94l3.22-3.22a.75.75 0 111.06 1.06L9.06 8l3.22 3.22a.75.75 0 11-1.06 1.06L8 9.06l-3.22 3.22a.75.75 0 01-1.06-1.06L6.94 8 3.72 4.78a.75.75 0 010-1.06z"></path>
+</svg>
+ </button>
+ <div class="octocat-spinner my-6 js-details-dialog-spinner"></div>
+ </details-dialog>
+ </details>
+</template>
+
+ <div class="Popover js-hovercard-content position-absolute" style="display: none; outline: none;" tabindex="0">
+ <div class="Popover-message Popover-message--bottom-left Popover-message--large Box color-shadow-large" style="width:360px;">
+ </div>
+</div>
+
+ <template id="snippet-clipboard-copy-button">
+ <div class="zeroclipboard-container position-absolute right-0 top-0">
+ <clipboard-copy aria-label="Copy" class="ClipboardButton btn js-clipboard-copy m-2 p-0 tooltipped-no-delay" data-copy-feedback="Copied!" data-tooltip-direction="w">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copy js-clipboard-copy-icon m-2">
+ <path fill-rule="evenodd" d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 010 1.5h-1.5a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-1.5a.75.75 0 011.5 0v1.5A1.75 1.75 0 019.25 16h-7.5A1.75 1.75 0 010 14.25v-7.5z"></path><path fill-rule="evenodd" d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0114.25 11h-7.5A1.75 1.75 0 015 9.25v-7.5zm1.75-.25a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-7.5a.25.25 0 00-.25-.25h-7.5z"></path>
+</svg>
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check js-clipboard-check-icon color-fg-success d-none m-2">
+ <path fill-rule="evenodd" d="M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z"></path>
+</svg>
+ </clipboard-copy>
+ </div>
+</template>
+
+
+ <style>
+ .user-mention[href$="/rlkamalapurkar"] {
+ color: var(--color-user-mention-fg);
+ background-color: var(--color-user-mention-bg);
+ border-radius: 2px;
+ margin-left: -2px;
+ margin-right: -2px;
+ padding: 0 2px;
+ }
+ </style>
+
+
+ </body>
+</html>
+
diff --git a/graphics/pgf/contrib/bodeplot/bodeplot.dtx b/graphics/pgf/contrib/bodeplot/bodeplot.dtx
index aad1eb47d6..8b39af91e0 100644
--- a/graphics/pgf/contrib/bodeplot/bodeplot.dtx
+++ b/graphics/pgf/contrib/bodeplot/bodeplot.dtx
@@ -1,2118 +1,11546 @@
-% \iffalse meta-comment
-%
-% Copyright (C) 2021 by Rushikesh Kamalapurkar <rlkamalapurkar@gmail.com>
-% -----------------------------------------------------------
-%
-% This file may be distributed and/or modified under the conditions of
-% the LaTeX Project Public License, either version 1.3c of this license
-% or (at your option) any later version. The latest version of this
-% license is in:
-%
-% http://www.latex-project.org/lppl.txt
-%
-% and version 1.3c or later is part of all distributions of LaTeX
-% version 2006/05/20 or later.
-%
-% \fi
-%
-% \iffalse
-%<package>\NeedsTeXFormat{LaTeX2e}[2006/05/20]
-%<package>\ProvidesPackage{bodeplot}
-%<package>\RequirePackage{pdftexcmds}
-%<package>\RequirePackage{ifplatform}
-%<package>\RequirePackage{pgfplots}
-%<package> \pgfplotsset{compat=1.18}
-%<package> \usepgfplotslibrary{groupplots}
-%
-%<*driver>
-\documentclass{ltxdoc}
-\usepackage{cprotect}
-\usepackage[declutter]{bodeplot}
-\usepackage[colorlinks]{hyperref}
-\usepackage{iftex}
- \iftutex % LuaTeX, XeTeX
- \usepackage{fontspec}
- \setmonofont{DejaVuSansMono}[Scale=MatchUppercase]
- \else % old engines
- \usepackage[T1]{fontenc}
- \usepackage{lmodern}
- \usepackage[scaled]{DejaVuSansMono}
- \fi
-\usepackage{showexpl}
- \lstset{
- explpreset={numbers=none},
- language=[LaTeX]Tex,
- basicstyle=\ttfamily\tiny,
- commentstyle=\itshape\ttfamily\tiny,
- showspaces=false,
- showstringspaces=false,
- breaklines=true,
- backgroundcolor=\color{white!90!black},
- breakautoindent=true,
- captionpos=t
- }
-\usepackage{geometry}
- \geometry{lmargin=2in,rmargin=1in,tmargin=1in,bmargin=1in}
-\usetikzlibrary{decorations.markings,arrows.meta,spy,backgrounds}
-\usepackage[nottoc]{tocbibind}
-\sloppy
-\EnableCrossrefs
-\CodelineIndex
-\RecordChanges
-\begin{document}
- \DocInput{bodeplot.dtx}
- \PrintChanges
- \PrintIndex
-\end{document}
-%</driver>
-% \fi
-%
-% \CheckSum{1723}
-%
-% \changes{v1.0}{2021/10/25}{Initial release}
-% \changes{v1.0.4}{2021/11/05}{Fixed unintended optional argument macro expansion}
-% \changes{v1.0.6}{2021/11/18}{Fixed issue \#3}
-% \changes{v1.0.7}{2021/12/02}{Removed unnecessary semicolons}
-% \changes{v1.0.7}{2022/01/18}{Updated documentation}
-% \changes{v1.0.8}{2022/07/06}{Added a new class option `declutter'}
-% \changes{v1.1.0}{2022/07/06}{Fixed phase wrapping in gnuplot mode}
-% \changes{v1.1.1}{2022/07/31}{Enable Hz and rad units}
-%
-% \GetFileInfo{bodeplot.sty}
-% \DoNotIndex{\newcommand,\xdef,\gdef,\def,\edef,\addplot,\approx,\arabic,\opt,\typ,\obj,\else,\if@pgfarg,\if@Hzarg,\if@radarg,\if@declutterarg,\fi,\begin,\end,\feature,\footnotesize,\draw,\detokenize,\DeclareOption,\foreach,\ifdim,\ifodd,\Im,\Re,\let,\newif,\nextgroupplot,\noexpand,\expandafter,\unexpanded,\PackageError,\PackageWarning,\relax,\RequirePackage,\tikzset,\pgfmathsetmacro,\pgfmathtruncatemacro,\ProcessOptions}
-%
-% \title{The \textsf{bodeplot} package\\version 1.1.1}
-% \author{Rushikesh Kamalapurkar \\ \texttt{rlkamalapurkar@gmail.com}}
-%
-% \maketitle
-% \tableofcontents
-% \clearpage
-% \section{Introduction}
-%
-% Generate Bode, Nyquist, and Nichols plots for transfer functions in the canonical (TF) form \begin{equation}G(s) = e^{-Ts}\frac{b_ms^m+\cdots+b_1s+b_0}{a_ns^n+\cdots+a_1s+a_0}\label{eq:TF}\end{equation} and the zero-pole-gain (ZPK) form \begin{equation}G(s) = Ke^{-Ts}\frac{(s-z_1)(s-z_2)\cdots(s-z_m)}{(s-p_1)(s-p_2)\cdots(s-p_n)}.\label{eq:ZPK}\end{equation} In the equations above, $b_m,\cdots,b_0$ and $a_n,\cdots,a_0$ are real coefficients, $T\geq 0$ is the loop delay, $z_1,\cdots,z_m$ and $p_1,\cdots,p_n$ are complex zeros and poles of the transfer function, respectively, and $K\in \Re$ is the loop gain.
-%
-% For transfer functions in the ZPK format in (\ref{eq:ZPK}) \emph{with zero delay}, this package also supports linear and asymptotic approximation of Bode plots.
-%
-% By default, all phase plots use degrees as units. Use the |rad| package option or the optional argument |tikz/{phase unit=rad}| to generate plots in radians. The |phase unit| key accepts either |rad| or |deg| as inputs and needs to be added to the |tikzpicture| environment that contains the plots.
-%
-% By default, frequency inputs and outputs are in radians per second. Use the |Hz| package option or the optional argument |tikz/{frequency unit=Hz}| to generate plots in hertz. The |frequency unit| key accepts either |rad| or |Hz| as inputs and needs to be added to the |tikzpicture| environment that contains the plots.
-% \subsection{External Dependencies}
-% By default, the package uses |gnuplot| to do all the computations. If |gnuplot| is not available, the |pgf| package option can be used to do the calculations using the native |pgf| math engine. Compilation using the |pgf| math engine is typically slower, but the end result should be the identical (other than phase wrapping in the TF form, see limitations below).
-%\subsection{Directory Structure}
-% Since version 1.0.8, the |bodeplot| package places all |gnuplot| temporary files in the working directory. The package option |declutter| restores the original behavior where the temporary files are placed in a folder called |gnuplot|.
-% \subsection{Limitations}
-% \begin{itemize}
-% \item In |pgf| mode, Bode phase plots and Nichols charts in TF form wrap angles so that they are always between 0 and 360$^\circ$ or 0 and $2\pi$ radian. As such, these plots will show phase wrapping discontinuities. Since v1.1.1, in |gnuplot| mode, the package uses the |smooth unwrap| filter to correct wrapping discontinuities. As of now, I have not found a way to do this in |pgf| mode, any merge requests or ideas you may have are welcome!
-% \item Use of the |declutter| option with other directory management tools such as a |tikzexternalize| prefix is not recommended.
-% \end{itemize}
-% \clearpage
-% \section{TL;DR}
-% All Bode plots in this section are for the transfer function (with and without a transport delay)
-% \begin{equation}
-% G(s) = 10\frac{s(s+0.1+0.5\mathrm{i})(s+0.1-0.5\mathrm{i})}{(s+0.5+10\mathrm{i})(s+0.5-10\mathrm{i})} = \frac{s(10s^2+2s+2.6)}{(s^2+s+100.25)}.
-% \end{equation}
-% \iffalse
-%<*ignore>
-% \fi
-
-\hrulefill
-
-{\centering Bode plot in ZPK format
-\begin{LTXexample}[pos=l,hsep=20pt,width=0.5\textwidth]
-\BodeZPK{%
- z/{0,{-0.1,-0.5},{-0.1,0.5}},
- p/{{-0.5,-10},{-0.5,10}},
- k/10%
-}
-{0.01}
-{100}
-\end{LTXexample}
-
-\hrulefill
-
-Same Bode plot over the same frequency range but supplied in Hz, in TF format with arrow decoration, transport delay, unit, and color customization (the phase plot may show wrapping if the |pgf| package option is used)
-\begin{LTXexample}[pos=r,width=0.5\textwidth]
-\BodeTF[%
- samples=1000,
- plot/mag/{blue,thick},
- plot/ph/{green,thick},
- tikz/{%
- >=latex,
- phase unit=rad,
- frequency unit=Hz%
- },
- commands/mag/{
- \draw[->](axis cs:0.1,40) -- (axis cs:{10/(2*pi)},60);
- \node at (axis cs: 0.08,30) {\tiny Resonant Peak};
- }%
-]
-{%
- num/{10,2,2.6,0},
- den/{1,1,100.25}%
-}
-{0.01/(2*pi)}
-{100/(2*pi)}
-\end{LTXexample}
-
-\hrulefill
-\clearpage
-\hrulefill
-
-Linear approximation with customization
-\begin{LTXexample}[pos=l,hsep=20pt,width=0.5\textwidth]
-\BodeZPK[%
- plot/mag/{red,thick},
- plot/ph/{blue,thick},
- axes/mag/{ytick distance=40},
- axes/ph/{ytick distance=90},
- approx/linear%
-]{%
- z/{0,{-0.1,-0.5},{-0.1,0.5}},
- p/{{-0.5,-10},{-0.5,10}},
- k/10%
-}
-{0.01}
-{100}
-\end{LTXexample}
-
-\hrulefill
-
-Plot with delay and customization
-\begin{LTXexample}[pos=r,hsep=20pt,width=0.5\textwidth]
-\BodeZPK[%
- plot/mag/{blue,thick},
- plot/ph/{green,thick},
- axes/mag/ytick distance=40,
- axes/ph/ytick distance=90%
-]{%
- z/{0,{-0.1,-0.5},{-0.1,0.5}},
- p/{{-0.5,-10},{-0.5,10}},
- k/10,
- d/0.01%
-}
-{0.01}
-{100}
-\end{LTXexample}
-
-\hrulefill
-\clearpage
-\hrulefill
-
-Individual gain and phase plots with more customization
-
-\begin{minipage}[t]{0.45\textwidth}
-\begin{LTXexample}[pos=t,width=\columnwidth]
-\begin{BodeMagPlot}[%
- axes/{height=2cm,
- width=4cm}
-]
-{0.01}
-{100}
- \addBodeZPKPlots[%
- true/{black,thick},
- linear/{red,dashed,thick},
- asymptotic/{blue,dotted,thick}%
- ]
- {magnitude}
- {%
- z/{0,{-0.1,-0.5},{-0.1,0.5}},
- p/{{-0.5,-10},{-0.5,10}},
- k/10%
- }
-\end{BodeMagPlot}
-\end{LTXexample}
-\end{minipage}\hfill
-\begin{minipage}[t]{0.45\textwidth}
-\begin{LTXexample}[pos=t,width=\columnwidth]
-\begin{BodePhPlot}[%
- height=2cm,
- width=4cm,
- ytick distance=90
-]
-{0.01}
-{100}
- \addBodeZPKPlots[%
- true/{black,thick},
- linear/{red,dashed,thick},
- asymptotic/{blue,dotted,thick}%
- ]
- {phase}
- {%
- z/{0,{-0.1,-0.5},{-0.1,0.5}},
- p/{{-0.5,-10},{-0.5,10}},
- k/10%
- }
-\end{BodePhPlot}
-\end{LTXexample}
-\end{minipage}
-
-\hrulefill
-
-Nichols chart
-\begin{LTXexample}[pos=l,hsep=20pt,width=0.5\textwidth]
-\NicholsZPK[samples=1000]
-{%
- z/{0,{-0.1,-0.5},{-0.1,0.5}},
- p/{{-0.5,-10},{-0.5,10}},
- k/10,
- d/0.01%
-}
-{0.001}
-{500}
-\end{LTXexample}
-
-\hrulefill
-
-Same Nichols chart in TF format (may show wrapping in |pgf| mode)
-\begin{LTXexample}[pos=r,hsep=20pt,width=0.5\textwidth]
-\NicholsTF[samples=1000]
-{%
- num/{10,2,2.6,0},
- den/{1,1,100.25},
- d/0.01%
-}
-{0.001}
-{500}
-\end{LTXexample}
-
-\hrulefill
-\clearpage
-\hrulefill
-
-Multiple Nichols charts with customization
-\begin{LTXexample}[pos=l,hsep=20pt,width=0.5\textwidth]
-\begin{NicholsChart}[%
- ytick distance=20,
- xtick distance=30
-]
-{0.001}
-{100}
- \addNicholsZPKChart [red,samples=1000] {%
- z/{0,{-0.1,-0.5},{-0.1,0.5}},
- p/{{-0.5,-10},{-0.5,10}},
- k/10%
- }
- \addNicholsZPKChart [blue,samples=1000] {%
- z/{0,{-0.1,-0.5},{-0.1,0.5}},
- p/{{-0.5,-10},{-0.5,10}},
- k/5%
- }
-\end{NicholsChart}
-\end{LTXexample}
-
-\hrulefill
-
-Nyquist plot
-\begin{LTXexample}[pos=r,hsep=20pt,width=0.5\textwidth]
-\NyquistZPK[plot/{red,thick,samples=1000}]
-{%
- z/{0,{-0.1,-0.5},{-0.1,0.5}},
- p/{{-0.5,-10},{-0.5,10}},
- k/10%
-}
-{-30}
-{30}
-\end{LTXexample}
-
-\hrulefill
-
-Nyquist plot in TF format with arrows
-\begin{LTXexample}[pos=l,width=0.5\textwidth]
-\NyquistTF[%
- plot/{%
- samples=1000,
- postaction=decorate,
- decoration={%
- markings,
- mark=between positions 0.1 and 0.9 step 5em with {%
- \arrow{Stealth [length=2mm, blue]}
- }
- }
- }%
-]
-{%
- num/{10,2,2.6,0},
- den/{1,1,100.25}%
-}
-{-30}
-{30}
-\end{LTXexample}
-
-\hrulefill
-\clearpage
-\hrulefill
-
-Multiple Nyquist plots with customization
-\begin{LTXexample}[pos=r,hsep=20pt,width=0.5\textwidth]
-\begin{NyquistPlot}{-30}{30}
- \addNyquistZPKPlot [red,samples=1000] {%
- z/{0,{-0.1,-0.5},{-0.1,0.5}},
- p/{{-0.5,-10},{-0.5,10}},
- k/10%
- }
- \addNyquistZPKPlot [blue,samples=1000] {%
- z/{0,{-0.1,-0.5},{-0.1,0.5}},
- p/{{-0.5,-10},{-0.5,10}},
- k/5%
- }
-\end{NyquistPlot}
-\end{LTXexample}
-
-\hrulefill
-
-Nyquist plots with additional commands, using two different macros
-
-\begin{minipage}[t]{0.48\textwidth}
-\begin{LTXexample}[pos=t,width=\columnwidth]
-\begin{NyquistPlot}[%
- tikz/{
- spy using outlines={%
- circle,
- magnification=3,
- connect spies,
- size=2cm
- }
- }%
-]
-{-30}{30}
- \addNyquistZPKPlot [blue,samples=1000] {%
- z/{0,{-0.1,-0.5},{-0.1,0.5}},
- p/{{-0.5,-10},{-0.5,10}},
- k/0.5%
- }
- \coordinate (spyon) at (axis cs:0,0);
- \coordinate (spyat) at (axis cs:-22,5);
- \spy [green] on (spyon) in
- node [fill=white] at (spyat);
-\end{NyquistPlot}
-\end{LTXexample}
-\end{minipage}\hfill
-\begin{minipage}[t]{0.48\textwidth}
-\begin{LTXexample}[pos=t,width=\columnwidth]
-\NyquistZPK[%
- plot/{blue,samples=1000},
- tikz/{
- spy using outlines={%
- circle,
- magnification=3,
- connect spies,
- size=2cm
- }
- },
- commands/{
- \coordinate (spyon) at (axis cs:0,0);
- \coordinate (spyat) at (axis cs:-22,5);
- \spy [green] on (spyon) in
- node [fill=white] at (spyat);
- }%
-]
-{%
- z/{0,{-0.1,-0.5},{-0.1,0.5}},
- p/{{-0.5,-10},{-0.5,10}},
- k/0.5%
-}
-{-30}
-{30}
-\end{LTXexample}
-\end{minipage}}
-
-\hrulefill
-\clearpage
-
-% \iffalse
-%</ignore>
-% \fi
-%
-% \section{Usage}
-% \noindent In all the macros described here, the frequency limits supplied by the user are assumed to be in |rad/s| unless either the |Hz| package option is used or the optional argument |tikz/{frequency unit=Hz}| is supplied to the |tikzpicture| environment. All phase plots are getenrated in degrees unless either the |rad| package option is used or the optional argument |tikz/{frequency unit=rad}| is supplied to the |tikzpicture| environment.
-%
-% \subsection{Bode plots}
-% \DescribeMacro{\BodeZPK}
-% |\BodeZPK| \oarg{obj1/typ1/\marg{opt1},obj2/typ2/\marg{opt2},...}\\
-% \hspace*{2em}\marg{z/\marg{zeros},p/\marg{poles},k/\marg{gain},d/\marg{delay}}\\
-% \hspace*{2em}\marg{min-freq}\marg{max-freq}
-%
-% \noindent Plots the Bode plot of a transfer function given in ZPK format using the |groupplot| environment. The three mandatory arguments include: (1) a list of tuples, comprised of the zeros, the poles, the gain, and the transport delay of the transfer function, (2) the lower end of the frequency range for the $x-$axis, and (3) the higher end of the frequency range for the $x-$axis. The zeros and the poles are complex numbers, entered as a comma-separated list of comma-separated lists, of the form |{{real part 1,imaginary part 1},| |{real part 2,imaginary part 2},...}|. If the imaginary part is not provided, it is assumed to be zero.
-%
-% The optional argument is comprised of a comma separated list of tuples, either |obj/typ/{opt}|, or |obj/{opt}|, or just |{opt}|. Each tuple passes options to different |pgfplots| macros that generate the group, the axes, and the plots according to:
-% \begin{itemize}
-% \item Tuples of the form |obj/typ/{opt}|:
-% \begin{itemize}
-% \item |plot/typ/{opt}|: modify plot properties by adding options |{opt}| to the |\addplot| macro for the magnitude plot if |typ| is |mag| and the phase plot if |typ| is |ph|.
-% \item |axes/typ/{opt}|: modify axis properties by adding options |{opt}| to the |\nextgroupplot| macro for the magnitude plot if |typ| is |mag| and the phase plot if |typ| is |ph|.
-% \item |commands/typ/{opt}|: add any valid TikZ commands (including the the parametric function generator macros in this package, such as |\addBodeZPKPlots|, |\addBodeTFPlot|, and |\addBodeComponentPlot|) to the magnitude plot if |typ| is |mag| and the phase plot if |typ| is |ph|. The commands passed to |opt| need to be valid TikZ commands, separated by semicolons as usual. For example, a TikZ command is used in the description of the |\BodeTF| macro below to mark the gain crossover frequency on the Bode Magnitude plot.
-% \end{itemize}
-% \item Tuples of the form |obj/{opt}|:
-% \begin{itemize}
-% \item |plot/{opt}|: adds options |{opt}| to |\addplot| macros for both the magnitude and the phase plots.
-% \item |axes/{opt}|: adds options |{opt}| to |\nextgroupplot| macros for both the magnitude and the phase plots.
-% \item |group/{opt}|: adds options |{opt}| to the |groupplot| environment.
-% \item |tikz/{opt}|: adds options |{opt}| to the |tikzpicture| environment.
-% \item |approx/linear|: plots linear approximation.
-% \item |approx/asymptotic|: plots asymptotic approximation.
-% \end{itemize}
-% \item Tuples of the form |{opt}| add all of the supplied options to |\addplot| macros for both the magnitude and the phase plots.
-% \end{itemize}
-% The options |{opt}| can be any |key=value| options that are supported by the |pgfplots| macros they are added to.
-
-% For example, given a transfer function \begin{equation}G(s) = 10\frac{s(s+0.1+0.5\mathrm{i})(s+0.1-0.5\mathrm{i})}{(s+0.5+10\mathrm{i})(s+0.5-10\mathrm{i})},\label{eq:ZPKExample}\end{equation} its Bode plot over the frequency range $[0.01,100]$ can be generated using\\
-% |\BodeZPK [blue,thick]|\\
-% | {z/{0,{-0.1,-0.5},{-0.1,0.5}},p/{{-0.5,-10},{-0.5,10}},k/10}|\\
-% | {0.01}{100}|\\
-% which generates the plot in Figure \ref{simpleBode}. If a delay is not specified, it is assumed to be zero. If a gain is not specified, it is assumed to be 1. By default, each of the axes, excluding ticks and labels, are 5cm wide and 2.5cm high. The width and the height, along with other properties of the plots, the axes, and the group can be customized using native |pgf| keys as shown in the example below.
-%
-% \begin{figure}
-% \begin{center}
-% \BodeZPK[blue,thick]{z/{0,{-0.1,-0.5},{-0.1,0.5}},p/{{-0.5,-10},{-0.5,10}},k/10}{0.01}{100}
-% \cprotect\caption{\label{simpleBode}Output of the default |\BodeZPK| macro.}
-% \end{center}
-% \end{figure}
-% As demonstrated in this example, if a single comma-separated list of options is passed, it applies to both the magnitude and the phase plots. Without any optional arguments, we gets a thick black Bode plot.
-%
-% A linear approximation of the Bode plot with customization of the plots, the axes, and the group can be generated using\\
-% |\BodeZPK[plot/mag/{red,thick},plot/ph/{blue,thick},|\\
-% | axes/mag/{ytick distance=40,xmajorticks=true,|\\
-% | xlabel={Frequency (rad/s)}},axes/ph/{ytick distance=90},|\\
-% | group/{group style={group size=2 by 1,horizontal sep=2cm,|\\
-% | width=4cm,height=2cm}},approx/linear]|\\
-% | {z/{0,{-0.1,-0.5},{-0.1,0.5}},p/{{-0.5,-10},{-0.5,10}},k/10}|\\
-% | {0.01}{100}|\\
-% which generates the plot in Figure \ref{customBode}.
-%
-% \begin{figure}
-% \begin{center}
-% \BodeZPK[plot/mag/{red,thick},plot/ph/{blue,thick},axes/mag/{ytick distance=40,xmajorticks=true,xlabel={Frequency (rad/s)}},axes/ph/{ytick distance=90},approx/linear,group/{group style={group size = 2 by 1,horizontal sep=2cm},width=4cm,height=2cm}] {z/{0,{-0.1,-0.5},{-0.1,0.5}},p/{{-0.5,-10},{-0.5,10}},g/10} {0.01} {100}
-% \cprotect\caption{\label{customBode}Customization of the default |\BodeZPK| macro.}
-% \end{center}
-% \end{figure}
-%
-% \DescribeMacro{\BodeTF}
-% |\BodeTF| \oarg{obj1/typ1/\marg{opt1},obj2/typ2/\marg{opt2},...}\\
-% \hspace*{2em}\marg{num/\marg{coeffs},den/\marg{coeffs},d/\marg{delay}}\\
-% \hspace*{2em}\marg{min-freq}\marg{max-freq} \rmfamily
-%
-% \noindent Plots the Bode plot of a transfer function given in TF format. The three mandatory arguments include: (1) a list of tuples comprised of the coefficients in the numerator and the denominator of the transfer function and the transport delay, (2) the lower end of the frequency range for the $x-$ axis, and (3) the higher end of the frequency range for the $x-$axis. The coefficients are entered as a comma-separated list, in order from the highest degree of $s$ to the lowest, with zeros for missing degrees. The optional arguments are the same as |\BodeZPK|, except that linear/asymptotic approximation is not supported, so |approx/...| is ignored.
-%
-% For example, given the same transfer function as (\ref{eq:ZPKExample}) in TF form and with a small transport delay, \begin{equation}G(s) = e^{-0.01s}\frac{s(10s^2+2s+2.6)}{(s^2+s+100.25)},\label{eq:TFExample}\end{equation} its Bode plot over the frequency range $[0.01,100]$ can be generated using\\
-% |\BodeTF[commands/mag/{\node at (axis cs: 2.1,0) |\\
-% | [circle,fill,inner sep=0.05cm,label=below:{$\omega_{gc}$}]{};}]|\\
-% | {num/{10,2,2.6,0},den/{1,1,100.25},d/0.01}|\\
-% | {0.01}{100}|\\
-% which generates the plot in Figure \ref{simpleBodeTF}. Note the $0$ added to the numerator coefficients to account for the fact that the numerator does not have a constant term in it. Note the semicolon after the TikZ command passed to the |\commands| option.
-%
-% \begin{figure}
-% \begin{center}
-% \BodeTF[commands/mag/{\node at (axis cs: 2.1,0) [circle,fill,inner sep=0.05cm,label=below:{$\omega_{gc}$}] {};}]{num/{10,2,2.6,0},den/{1,1,100.25},d/0.01}{0.01}{100}
-% \cprotect\caption{\label{simpleBodeTF}Output of the |\BodeTF| macro with an optional TikZ command used to mark the gain crossover frequency.}
-% \end{center}
-% \end{figure}
-%
-% \DescribeEnv{BodeMagPlot}
-% |\begin{BodeMagPlot}|\oarg{obj1/\marg{opt1},obj2/\marg{opt2},...}\\
-% \hspace*{3em}\marg{min-frequency}\marg{max-frequency}\\
-% \hspace*{2em}|\addBode...|\\
-% \hspace*{1.5em}|\end{BodeMagPlot}|\\
-% The |BodeMagPlot| environment works in conjunction with the parametric function generator macros |\addBodeZPKPlots|, |\addBodeTFPlot|, and |\addBodeComponentPlot|, intended to be used for magnitude plots. The optional argument is comprised of a comma separated list of tuples, either |obj/{opt}| or just |{opt}|. Each tuple passes options to different |pgfplots| macros that generate the axes and the plots according to:
-% \begin{itemize}
-% \item Tuples of the form |obj/{opt}|:
-% \begin{itemize}
-% \item |tikz/{opt}|: modify picture properties by adding options |{opt}| to the |tikzpicture| environment.
-% \item |axes/{opt}|: modify axis properties by adding options |{opt}| to the |semilogaxis| environment.
-% \item |commands/{opt}|: add any valid TikZ commands inside |semilogaxis| environment. The commands passed to |opt| need to be valid TikZ commands, separated by semicolons as usual.
-% \end{itemize}
-% \item Tuples of the form |{opt}| are passed directly to the |semilogaxis| environment.
-% \end{itemize}
-% The frequency limits are translated to the x-axis limits and the domain of the |semilogaxis| environment. Example usage in the description of |\addBodeZPKPlots|, |\addBodeTFPlot|, and |\addBodeComponentPlot|.
-%
-%\DescribeEnv{BodePhPlot}
-% |\begin{BodePhPlot}|\oarg{obj1/\marg{opt1},obj2/\marg{opt2},...}\\
- % \hspace*{3em}\marg{min-frequency}\marg{max-frequency}\\
- % \hspace*{2em}|\addBode...|\\
- % \hspace*{1.5em}|\end{BodePhPlot}|\\
-% Intended to be used for phase plots, otherwise same as the |BodeMagPlot| environment
-%
-% \DescribeMacro{\addBodeZPKPlots}
-% |\addBodeZPKPlots| \oarg{approx1/\marg{opt1},approx2/\marg{opt2},...}\\
-% \hspace*{2em}\marg{plot-type}\\
-% \hspace*{2em}\marg{z/\marg{zeros},p/\marg{poles},k/\marg{gain},d/\marg{delay}}
-%
-% \noindent Generates the appropriate parametric functions and supplies them to multiple |\addplot| macros, one for each |approx/{opt}| pair in the optional argument. If no optional argument is supplied, then a single |\addplot| command corresponding to a thick true Bode plot is generated. If an optional argument is supplied, it needs to be one of |true/{opt}|, |linear/{opt}|, or |asymptotic/{opt}|. This macro can be used inside any |semilogaxis| environment as long as a domain for the x-axis is supplied through either the |approx/{opt}| interface or directly in the optional argument of the |semilogaxis| environment. Use with the |BodePlot| environment supplied with this package is recommended. The second mandatory argument, |plot-type| is either |magnitude| or |phase|. If it is not equal to |phase|, it is assumed to be |magnitude|. The last mandatory argument is the same as |\BodeZPK|.
-%
-% For example, given the transfer function in (\ref{eq:ZPKExample}), its linear, asymptotic, and true Bode plots can be superimposed using
-%\begin{verbatim}
-%\begin{BodeMagPlot}[height=2cm,width=4cm] {0.01} {100}
-% \addBodeZPKPlots[%
-% true/{black,thick},
-% linear/{red,dashed,thick},
-% asymptotic/{blue,dotted,thick}]
-% {magnitude}
-% {z/{0,{-0.1,-0.5},{-0.1,0.5}},p/{{-0.5,-10},{-0.5,10}},k/10}
-%\end{BodeMagPlot}
-%
-%\begin{BodePhPlot}[height=2cm, width=4cm, ytick distance=90] {0.01} {100}
-% \addBodeZPKPlots[%
-% true/{black,thick},
-% linear/{red,dashed,thick},
-% asymptotic/{blue,dotted,thick}]
-% {phase}
-% {z/{0,{-0.1,-0.5},{-0.1,0.5}},p/{{-0.5,-10},{-0.5,10}},k/10}
-%\end{BodePhPlot}
-%\end{verbatim}
-% \begin{figure}
-% \begin{center}
-% \begin{BodeMagPlot}[height=2cm,width=4cm]{0.01}{100}
-% \addBodeZPKPlots[%
-% true/{black,thick},
-% linear/{red,dashed,thick},
-% asymptotic/{blue,dotted,thick}]
-% {magnitude}
-% {z/{0,{-0.1,-0.5},{-0.1,0.5}},p/{{-0.5,-10},{-0.5,10}},k/10}
-% \end{BodeMagPlot}
-% \begin{BodePhPlot}[height=2cm,width=4cm,ytick distance=90]{0.01}{100}
-% \addBodeZPKPlots[%
-% true/{black,thick},
-% linear/{red,dashed,thick},
-% asymptotic/{blue,dotted,thick}]
-% {phase}
-% {z/{0,{-0.1,-0.5},{-0.1,0.5}},p/{{-0.5,-10},{-0.5,10}},k/10}
-% \end{BodePhPlot}
-% \end{center}
-% \caption{\label{multiBodeZPK}Superimposed approximate and true Bode plots using the \texttt{BodeMagPlot} and \texttt{BodePhPlot} environments and the \texttt{\textbackslash addBodeZPKPlots} macro.}
-% \end{figure}
-% which generates the plot in Figure \ref{multiBodeZPK}.
-%
-% \DescribeMacro{\addBodeTFPlot}
-% |\addBodeTFPlot|\oarg{plot-options}\\
-% \hspace*{2em}\marg{plot-type}\\
-% \hspace*{2em}\marg{num/\marg{coeffs},den/\marg{coeffs},d/\marg{delay}}
-%
-% \noindent Generates a single parametric function for either Bode magnitude or phase plot of a transfer function in TF form. The generated parametric function is passed to the |\addplot| macro. This macro can be used inside any |semilogaxis| environment as long as a domain for the x-axis is supplied through either the |plot-options| interface or directly in the optional argument of the container |semilogaxis| environment. Use with the |BodePlot| environment supplied with this package is recommended. The second mandatory argument, |plot-type| is either magnitude or |phase|. If it is not equal to |phase|, it is assumed to be |magnitude|. The last mandatory argument is the same as |\BodeTF|.
-%
-% \DescribeMacro{\addBodeComponentPlot}
-% |\addBodeComponentPlot|\oarg{plot-options}\marg{plot-command}
-%
-% \noindent Generates a single parametric function corresponding to the mandatory argument |plot-command| and passes it to the |\addplot| macro. The plot command can be any parametric function that uses |t| as the independent variable. The parametric function must be |gnuplot| compatible (or |pgfplots| compatible if the package is loaded using the |pgf| option). The intended use of this macro is to plot the parametric functions generated using the basic component macros described in Section \ref{sec:BasicComponents} below.
-%
-% \subsubsection{Basic components up to first order\label{sec:BasicComponents}}
-%
-% \DescribeMacro{\TypeFeatureApprox}
-% |\TypeFeatureApprox|\marg{real-part}\marg{imaginary-part}
-%
-% \noindent This entry describes 20 different macros of the form |\TypeFeatureApprox| that take the real part and the imaginary part of a complex number as arguments. The |Type| in the macro name should be replaced by either |Mag| or |Ph| to generate a parametric function corresponding to the magnitude or the phase plot, respectively. The |Feature| in the macro name should be replaced by one of |K|, |Pole|, |Zero|, or |Del|, to generate the Bode plot of a gain, a complex pole, a complex zero, or a transport delay, respectively. If the |Feature| is set to either |K| or |Del|, the |imaginary-part| mandatory argument is ignored. The |Approx| in the macro name should either be removed, or it should be replaced by |Lin| or |Asymp| to generate the true Bode plot, the linear approximation, or the asymptotic approximation, respectively. If the |Feature| is set to |Del|, then |Approx| has to be removed. For example,
-% \begin{itemize}
-% \item |\MagK{k}{0}| or |\MagK{k}{400}| generates a parametric function for the true Bode magnitude of $ G(s) = k $
-% \item |\PhPoleLin{a}{b}| generates a parametric function for the linear approximation of the Bode phase of $ G(s) = \frac{1}{s-a-\mathrm{i}b} $.
-% \item |\PhDel{T}{200}| or |\PhDel{T}{0}| generates a parametric function for the Bode phase of $ G(s) = e^{-Ts} $.
-% \end{itemize}
-% All 20 of the macros defined by combinations of |Type|, |Feature|, and |Approx|, and any |gnuplot| (or |pgfplot| if the |pgf| class option is loaded) compatible function of the 20 macros can be used as |plot-command| in the |addBodeComponentPlot| macro. This is sufficient to generate the Bode plot of any rational transfer function with delay. For example, the Bode phase plot in Figure \ref{multiBodeZPK} can also be generated using:
-%\begin{verbatim}
-%\begin{BodePhPlot}[ytick distance=90]{0.01}{100}
-% \addBodeComponentPlot[black,thick]{\PhZero{0}{0} + \PhZero{-0.1}{-0.5} +
-% \PhZero{-0.1}{0.5} + \PhPole{-0.5}{-10} + \PhPole{-0.5}{10} +
-% \PhK{10}{0}}
-% \addBodeComponentPlot[red,dashed,thick] {\PhZeroLin{0}{0} +
-% \PhZeroLin{-0.1}{-0.5} + \PhZeroLin{-0.1}{0.5} +
-% \PhPoleLin{-0.5}{-10} + \PhPoleLin{-0.5}{10} + \PhKLin{10}{20}}
-% \addBodeComponentPlot[blue,dotted,thick] {\PhZeroAsymp{0}{0} +
-% \PhZeroAsymp{-0.1}{-0.5} + \PhZeroAsymp{-0.1}{0.5} +
-% \PhPoleAsymp{-0.5}{-10} + \PhPoleAsymp{-0.5}{10} + \PhKAsymp{10}{40}}
-%\end{BodePhPlot}
-%\end{verbatim}
-%\begin{figure}
-% \begin{center}
-% \begin{BodePhPlot}[ytick distance=90]{0.01}{100}
-% \addBodeComponentPlot[black,thick] {\PhZero{0}{0} + \PhZero{-0.1}{-0.5} + \PhZero{-0.1}{0.5} + \PhPole{-0.5}{-10} + \PhPole{-0.5}{10} + \PhK{10}{0}}
-% \addBodeComponentPlot[red,dashed,thick] {\PhZeroLin{0}{0} + \PhZeroLin{-0.1}{-0.5} + \PhZeroLin{-0.1}{0.5} + \PhPoleLin{-0.5}{-10} + \PhPoleLin{-0.5}{10} + \PhKLin{10}{20}}
-% \addBodeComponentPlot[blue,dotted,thick] {\PhZeroAsymp{0}{0} + \PhZeroAsymp{-0.1}{-0.5} + \PhZeroAsymp{-0.1}{0.5} + \PhPoleAsymp{-0.5}{-10} + \PhPoleAsymp{-0.5}{10} + \PhKAsymp{10}{40}}
-% \end{BodePhPlot}
-% \end{center}
-% \caption{\label{multiBodeComponents}Superimposed approximate and true Bode Phase plot using the \texttt{BodePhPlot} environment, the \texttt{\textbackslash addBodeComponentPlot} macro, and several macros of the \texttt{\textbackslash TypeFeatureApprox} form.}
-%\end{figure}
-% which gives us the plot in Figure \ref{multiBodeComponents}.
-%
-% \subsubsection{Basic components of the second order}
-%
-% \DescribeMacro{\TypeSOFeatureApprox}
-% |\TypeSOFeatureApprox|\marg{a1}\marg{a0}
-%
-% \noindent This entry describes 12 different macros of the form |\TypeSOFeatureApprox| that take the coefficients $ a_1 $ and $ a_0 $ of a general second order system as inputs. The |Feature| in the macro name should be replaced by either |Poles| or |Zeros| to generate the Bode plot of $G(s)=\frac{1}{s^2+a_1 s+a_0}$ or $G(s)=s^2+a_1 s+a_0$, respectively. The |Type| in the macro name should be replaced by either |Mag| or |Ph| to generate a parametric function corresponding to the magnitude or the phase plot, respectively. The |Approx| in the macro name should either be removed, or it should be replaced by |Lin| or |Asymp| to generate the true Bode plot, the linear approximation, or the asymptotic approximation, respectively.
-%
-% \DescribeMacro{\MagSOFeaturePeak}
-% |\MagSOFeaturePeak|\oarg{draw-options}\marg{a1}\marg{a0}
-%
-% \noindent This entry describes 2 different macros of the form |\MagSOFeaturePeak| that take the the coefficients $ a_1 $ and $ a_0 $ of a general second order system as inputs, and draw a resonant peak using the |\draw| TikZ macro. The |Feature| in the macro name should be replaced by either |Poles| or |Zeros| to generate a peak for poles and a valley for zeros, respectively. For example, the command
-%\begin{verbatim}
-%\begin{BodeMagPlot}[xlabel={}]{0.1}{10}
-% \addBodeComponentPlot[red,dashed,thick]{\MagSOPoles{0.2}{1}}
-% \addBodeComponentPlot[black,thick]{\MagSOPolesLin{0.2}{1}}
-% \MagSOPolesPeak[thick]{0.2}{1}
-%\end{BodeMagPlot}
-%\end{verbatim}
-% generates the plot in Figure \ref{BodePeak}.
-%
-% \begin{figure}
-% \begin{center}
-% \begin{BodeMagPlot}[xlabel={}]{0.1}{10}
-% \addBodeComponentPlot[red,dashed,thick]{\MagSOPoles{0.2}{1}}
-% \addBodeComponentPlot[black,thick]{\MagSOPolesLin{0.2}{1}}
-% \MagSOPolesPeak[very thick]{0.2}{1}
-% \end{BodeMagPlot}
-% \end{center}
-% \cprotect\caption{\label{BodePeak} Resonant peak in asymptotic Bode plot using |\MagSOPolesPeak|.}
-% \end{figure}
-%
-% \DescribeMacro{\TypeCSFeatureApprox}
-% |\TypeCSFeatureApprox|\marg{zeta}\marg{omega-n}
-%
-% \noindent This entry describes 12 different macros of the form |\TypeCSFeatureApprox| that take the damping ratio, $ \zeta $, and the natural frequency, $ \omega_n $ of a canonical second order system as inputs. The |Type| in the macro name should be replaced by either |Mag| or |Ph| to generate a parametric function corresponding to the magnitude or the phase plot, respectively. The |Feature| in the macro name should be replaced by either |Poles| or |Zeros| to generate the Bode plot of $G(s)=\frac{1}{s^2+2\zeta\omega_n s+\omega_n^2}$ or $G(s)=s^2+2\zeta\omega_n s+\omega_n^2$, respectively. The |Approx| in the macro name should either be removed, or it should be replaced by |Lin| or |Asymp| to generate the true Bode plot, the linear approximation, or the asymptotic approximation, respectively.
-%
-% \DescribeMacro{\MagCSFeaturePeak}
-% |\MagCSFeaturePeak|\oarg{draw-options}\marg{zeta}\marg{omega-n}
-%
-% \noindent This entry describes 2 different macros of the form |\MagCSFeaturePeak| that take the damping ratio, $ \zeta $, and the natural frequency, $ \omega_n $ of a canonical second order system as inputs, and draw a resonant peak using the |\draw| TikZ macro. The |Feature| in the macro name should be replaced by either |Poles| or |Zeros| to generate a peak for poles and a valley for zeros, respectively.
-%
-% \DescribeMacro{\MagCCFeaturePeak}
-% |\MagCCFeaturePeak|\oarg{draw-options}\marg{real-part}\marg{imaginary-part}
-%
-% \noindent This entry describes 2 different macros of the form |\MagCCFeaturePeak| that take the real and imaginary parts of a pair of complex conjugate poles or zeros as inputs, and draw a resonant peak using the |\draw| TikZ macro. The |Feature| in the macro name should be replaced by either |Poles| or |Zeros| to generate a peak for poles and a valley for zeros, respectively.
-%
-% \subsection{Nyquist plots}
-% \DescribeMacro{\NyquistZPK}
-% |\NyquistZPK| \oarg{plot/\marg{opt},axes/\marg{opt}}\\
-% \hspace*{2em}\marg{z/\marg{zeros},p/\marg{poles},k/\marg{gain},d/\marg{delay}}\\
-% \hspace*{2em}\marg{min-freq}\marg{max-freq}
-%
-% \noindent Plots the Nyquist plot of a transfer function given in ZPK format with a thick red $+$ marking the critical point (-1,0). The mandatory arguments are the same as |\BodeZPK|. Since there is only one plot in a Nyquist diagram, the |\typ| specifier in the optional argument tuples is not needed. As such, the supported optional argument tuples are |plot/{opt}|, which passes |{opt}| to |\addplot|, |axes/{opt}|, which passes |{\opt}| to the |axis| environment, and |tikz/{opt}|, which passes |{\opt}| to the |tikzpicture| environment. Asymptotic/linear approximations are not supported in Nyquist plots. If just |{opt}| is provided as the optional argument, it is interpreted as |plot/{opt}|. Arrows to indicate the direction of increasing $\omega$ can be added by adding |\usetikzlibrary{decorations.markings}| and |\usetikzlibrary{arrows.meta}| to the preamble and then passing a tuple of the form\\
-%|plot/{postaction=decorate,decoration={markings,|\\
-%| mark=between positions 0.1 and 0.9 step 5em with|\\
-%| {\arrow{Stealth| |[length=2mm, blue]}}}}|\\
-%\textbf{Caution:} with a high number of samples, adding arrows in this way may cause the error message |! Dimension too big|.
-%
-% For example, the command\\
-% |\NyquistZPK[plot/{red,thick,samples=2000},axes/{blue,thick}]|\\
-% | {z/{0,{-0.1,-0.5},{-0.1,0.5}},p/{{-0.5,-10},{-0.5,10}},k/10}|\\
-% | {-30}{30}|\\
-% generates the Nyquist plot in Figure \ref{simpleNyquistZPK}.
-%
-% \begin{figure}
-% \begin{center}
-% \NyquistZPK[plot/{red,thick,samples=2000},axes/{blue,thick}] {z/{0,{-0.1,-0.5},{-0.1,0.5}},p/{{-0.5,-10},{-0.5,10}},k/10} {-30} {30}
-% \cprotect\caption{\label{simpleNyquistZPK}Output of the |\NyquistZPK| macro.}
-% \end{center}
-% \end{figure}
-%
-% % \DescribeMacro{\NyquistTF}
-% |\NyquistTF| \oarg{plot/\marg{opt},axes/\marg{opt}}\\
-% \hspace*{2em}\marg{num/\marg{coeffs},den/\marg{coeffs},d/\marg{delay}}\\
-% \hspace*{2em}\marg{min-freq}\marg{max-freq}
-%
-% \noindent Nyquist plot of a transfer function given in TF format. Same mandatory arguments as |\BodeTF| and same optional arguments as |\NyquistZPK|. For example, the command\\
-% |\NyquistTF[plot/{green,thick,samples=500,postaction=decorate,|\\
-% | decoration={markings,|\\
-% | mark=between positions 0.1 and 0.9 step 5em|\\
-% | with{\arrow{Stealth[length=2mm, blue]}}}}]|\\
-% | {num/{10,2,2.6,0},den/{1,1,100.25}}|\\
-% | {-30}{30}|\\
-% generates the Nyquist plot in Figure \ref{simpleNyquistTF}.
-%
-% \begin{figure}
-% \begin{center}
-% \NyquistTF[plot/{green,thick,samples=500,postaction=decorate,decoration={markings,mark=between positions 0.1 and 0.9 step 5em with {\arrow{Stealth[length=2mm, blue]}}}}] {num/{10,2,2.6,0},den/{1,1,100.25},d/0.01} {-30} {30}
-% \cprotect\caption{\label{simpleNyquistTF}Output of the |\NyquistTF| macro with direction arrows. Increasing the number of samples can cause |decorations.markings| to throw errors.}
-% \end{center}
-% \end{figure}
-%
-% \DescribeEnv{NyquistPlot}
-% |\begin{NyquistPlot}|\oarg{obj1/\marg{opt1},obj2/\marg{opt2},...}\\
-% \hspace*{3em}\marg{min-frequency}\marg{max-frequency}\\
-% \hspace*{2em}|\addNyquist...|\\
-% \hspace*{1.5em}|\end{NyquistPlot}|\\
-% The |NyquistPlot| environment works in conjunction with the parametric function generator macros |\addNyquistZPKPlot| and |\addNyquistTFPlot|. The optional argument is comprised of a comma separated list of tuples, either |obj/{opt}| or just |{opt}|. Each tuple passes options to different |pgfplots| macros that generate the axes and the plots according to:
-% \begin{itemize}
-% \item Tuples of the form |obj/{opt}|:
-% \begin{itemize}
-% \item |tikz/{opt}|: modify picture properties by adding options |{opt}| to the |tikzpicture| environment.
-% \item |axes/{opt}|: modify axis properties by adding options |{opt}| to the |axis| environment.
-% \item |commands/{opt}|: add any valid TikZ commands inside |axis| environment. The commands passed to |opt| need to be valid TikZ commands, separated by semicolons as usual.
-% \end{itemize}
-% \item Tuples of the form |{opt}| are passed directly to the |axis| environment.
-% \end{itemize}
-% The frequency limits are translated to the x-axis limits and the domain of the |axis| environment.
-%
-% \DescribeMacro{\addNyquistZPKPlot}
-% |\addNyquistZPKPlot|\oarg{plot-options}\\
-% \hspace*{2em}\marg{z/\marg{zeros},p/\marg{poles},k/\marg{gain},d/\marg{delay}}
-%
-% \noindent Generates a twp parametric functions for the magnitude and the phase a transfer function in ZPK form. The generated magnitude and phase parametric functions are converted to real and imaginary part parametric functions and passed to the |\addplot| macro. This macro can be used inside any |axis| environment as long as a domain for the x-axis is supplied through either the |plot-options| interface or directly in the optional argument of the container |axis| environment. Use with the |NyquistPlot| environment supplied with this package is recommended. The mandatory argument is the same as |\BodeZPK|.
-%
-% \DescribeMacro{\addNyquistTFPlot}
-% |\addNyquistTFPlot|\oarg{plot-options}\\
-% \hspace*{2em}\marg{num/\marg{coeffs},den/\marg{coeffs},d/\marg{delay}}
-%
-% \noindent Similar to |\addNyquistZPKPlot|, with a transfer function input in the TF form.
-%
-% \subsection{Nichols charts}
-% \DescribeMacro{\NicholsZPK}
-% |\NicholsZPK| \oarg{plot/\marg{opt},axes/\marg{opt}}\\
-% \hspace*{2em}\marg{z/\marg{zeros},p/\marg{poles},k/\marg{gain},d/\marg{delay}}\\
-% \hspace*{2em}\marg{min-freq}\marg{max-freq}
-%
-% \noindent Nichols chart of a transfer function given in ZPK format. Same arguments as |\NyquistZPK|.
-%
-% \DescribeMacro{\NicholsTF}
-% |\NicholsTF| \oarg{plot/\marg{opt},axes/\marg{opt}}\\
-% \hspace*{2em}\marg{num/\marg{coeffs},den/\marg{coeffs},d/\marg{delay}}\\
-% \hspace*{2em}\marg{min-freq}\marg{max-freq}
-%
-% \noindent Nichols chart of a transfer function given in TF format. Same arguments as |\NyquistTF|. For example, the command\\
-% |\NicholsTF[plot/{green,thick,samples=2000}]|\\
-% | {num/{10,2,2.6,0},den/{1,1,100.25},d/0.01}|\\
-% | {0.001}{100}|\\
-% generates the Nichols chart in Figure \ref{simpleNicholsTF}.
-%
-% \begin{figure}
-% \begin{center}
-% \NicholsTF[plot/{green,thick,samples=2000}] {num/{10,2,2.6,0},den/{1,1,100.25},d/0.01} {0.001} {100}
-% \cprotect\caption{\label{simpleNicholsTF}Output of the |\NyquistZPK| macro.}
-% \end{center}
-% \end{figure}
-%
-%
-% \DescribeEnv{NicholsChart}
-% |\begin{NicholsChart}|\oarg{obj1/\marg{opt1},obj2/\marg{opt2},...}\\
-% \hspace*{3em}\marg{min-frequency}\marg{max-frequency}\\
-% \hspace*{2em}|\addNichols...|\\
-% \hspace*{1.5em}|\end{NicholsChart}|\\
-% The |NicholsChart| environment works in conjunction with the parametric function generator macros |\addNicholsZPKChart| and |\addNicholsTFChart|. The optional argument is comprised of a comma separated list of tuples, either |obj/{opt}| or just |{opt}|. Each tuple passes options to different |pgfplots| macros that generate the axes and the plots according to:
-% \begin{itemize}
-% \item Tuples of the form |obj/{opt}|:
-% \begin{itemize}
-% \item |tikz/{opt}|: modify picture properties by adding options |{opt}| to the |tikzpicture| environment.
-% \item |axes/{opt}|: modify axis properties by adding options |{opt}| to the |axis| environment.
-% \item |commands/{opt}|: add any valid TikZ commands inside |axis| environment. The commands passed to |opt| need to be valid TikZ commands, separated by semicolons as usual.
-% \end{itemize}
-% \item Tuples of the form |{opt}| are passed directly to the |axis| environment.
-% \end{itemize}
-% The frequency limits are translated to the x-axis limits and the domain of the |axis| environment.
-%
-% \DescribeMacro{\addNicholsZPKChart}
-% |\addNicholsZPKChart|\oarg{plot-options}\\
-% \hspace*{2em}\marg{z/\marg{zeros},p/\marg{poles},k/\marg{gain},d/\marg{delay}}
-%
-% \noindent Generates a twp parametric functions for the magnitude and the phase a transfer function in ZPK form. The generated magnitude and phase parametric functions are passed to the |\addplot| macro. This macro can be used inside any |axis| environment as long as a domain for the x-axis is supplied through either the |plot-options| interface or directly in the optional argument of the container |axis| environment. Use with the |NicholsChart| environment supplied with this package is recommended. The mandatory argument is the same as |\BodeZPK|.
-%
-% \DescribeMacro{\addNicholsTFChart}
-% |\addNicholsTFChart|\oarg{plot-options}\\
-% \hspace*{2em}\marg{num/\marg{coeffs},den/\marg{coeffs},d/\marg{delay}}
-%
-% \noindent Similar to |\addNicholsZPKChart|, with a transfer function input in the TF form.
-%
-% \StopEventually{\PrintIndex}
-% \clearpage
-% \section{Implementation}
-% \subsection{Initialization}
-% \begin{macro}{\n@mod}
-% \begin{macro}{\n@pow}
-% \begin{macro}{gnuplot@id}
-% \begin{macro}{gnuplot@prefix}
-% \changes{v1.0.3}{2021/11/03}{Added jobname to gnuplot prefix}
-% \changes{v1.0.8}{2022/07/06}{Fixed issue \#6}
-% This code is needed to support both |pgfplots| and |gnuplot| simultaneously. New macros are defined for the |pow| and |mod| functions to address differences between the two math engines. We start by processing the class options.
-% \begin{macrocode}
-\newif\if@pgfarg\@pgfargfalse
-\DeclareOption{pgf}{
- \@pgfargtrue
-}
-\newif\if@declutterarg\@declutterargfalse
-\DeclareOption{declutter}{
- \@declutterargtrue
-}
-\newif\if@radarg\@radargfalse
-\DeclareOption{rad}{
- \@radargtrue
-}
-\newif\if@hzarg\@hzargfalse
-\DeclareOption{Hz}{
- \@hzargtrue
-}
-\ProcessOptions\relax
-% \end{macrocode}
-% Then, we define two new macros to unify |pgfplots| and |gnuplot|.
-% \begin{macrocode}
-\newcommand{\n@mod}[2]{(#1)-(floor((#1)/(#2))*(#2))}
-\if@pgfarg
- \newcommand{\n@pow}[2]{(#1)^(#2)}
- \pgfplotsset{
- trig format plots=rad
- }
-\else
- \newcommand{\n@pow}[2]{(#1)**(#2)}
-% \end{macrocode}
-% Then, we create a counter so that a new data table is generated and for each new plot. If the plot macros have not changed, the tables, once generated, can be reused by |gnuplot|, which reduces compilation time. The |declutter| option is used to enable the |gnuplot| directory to declutter the working directory.
-% \begin{macrocode}
- \newcounter{gnuplot@id}
- \setcounter{gnuplot@id}{0}
- \if@declutterarg
- \edef\bodeplot@prefix{gnuplot/\jobname}
- \else
- \edef\bodeplot@prefix{\jobname}
- \fi
- \tikzset{
- gnuplot@prefix/.style={
- id=\arabic{gnuplot@id},
- prefix=\bodeplot@prefix
- }
- }
-% \end{macrocode}
-% If the operating system is not Windows, and if the |declutter| option is not passed, we create the |gnuplot| folder if it does not already exist. \changes{v1.0.2}{2021/11/01}{Fixed issue \#1}
-% \begin{macrocode}
- \ifwindows\else
- \if@declutterarg
- \immediate\write18{mkdir -p gnuplot}
- \fi
- \fi
-\fi
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \begin{macro}{bode@style}
-% Default axis properties for all plot macros are collected in this |pgf| style.
-% \begin{macrocode}
-\pgfplotsset{
- bode@style/.style = {
- label style={font=\footnotesize},
- tick label style={font=\footnotesize},
- grid=both,
- major grid style={color=gray!80},
- minor grid style={color=gray!20},
- x label style={at={(ticklabel cs:0.5)},anchor=near ticklabel},
- y label style={at={(ticklabel cs:0.5)},anchor=near ticklabel},
- scale only axis,
- samples=200,
- width=5cm,
- log basis x=10
- }
-}
-% \end{macrocode}
-% \end{macro}
-% \begin{macro}{freq@filter}
-% \begin{macro}{freq@label}
-% \begin{macro}{freq@scale}
-% \begin{macro}{ph@scale}
-% \begin{macro}{ph@x@label}
-% \begin{macro}{ph@y@label}
-% These macros handle the |Hz| and |rad| class options and two new |pgf| keys named |frequency unit| and |phase unit| for conversion of frequency and phase units, respectively. \changes{v1.1.1}{2022/07/31}{New macros to enable `Hz' and `rad' units for frequency and phase, respectively}
-% \begin{macrocode}
-\pgfplotsset{freq@filter/.style = {}}
-\def\freq@scale{1}
-\pgfplotsset{freq@label/.style = {xlabel = {Frequency (rad/s)}}}
-\pgfplotsset{ph@x@label/.style = {xlabel={Phase (deg)}}}
-\pgfplotsset{ph@y@label/.style = {ylabel={Phase (deg)}}}
-\def\ph@scale{180/pi}
-\if@radarg
- \pgfplotsset{ph@y@label/.style = {ylabel={Phase (rad)}}}
- \pgfplotsset{ph@x@label/.style = {xlabel={Phase (rad)}}}
- \def\ph@scale{1}
-\fi
-\if@hzarg
- \def\freq@scale{2*pi}
- \pgfplotsset{freq@label/.style = {xlabel = {Frequency (Hz)}}}
- \if@pgfarg
- \pgfplotsset{freq@filter/.style = {x filter/.expression={x-log10(2*pi)}}}
- \fi
-\fi
-\tikzset{
- phase unit/.initial={deg},
- phase unit/.default={deg},
- phase unit/.is choice,
- phase unit/deg/.code={
- \renewcommand{\ph@scale}{180/pi}
- \pgfplotsset{ph@x@label/.style = {xlabel={Phase (deg)}}}
- \pgfplotsset{ph@y@label/.style = {ylabel={Phase (deg)}}}
- },
- phase unit/rad/.code={
- \renewcommand{\ph@scale}{1}
- \pgfplotsset{ph@y@label/.style = {ylabel={Phase (rad)}}}
- \pgfplotsset{ph@x@label/.style = {xlabel={Phase (rad)}}}
- },
- frequency unit/.initial={rad},
- frequency unit/.default={rad},
- frequency unit/.is choice,
- frequency unit/Hz/.code={
- \renewcommand{\freq@scale}{2*pi}
- \pgfplotsset{freq@label/.style = {xlabel = {Frequency (Hz)}}}
- \if@pgfarg
- \pgfplotsset{freq@filter/.style = {x filter/.expression={x-log10(2*pi)}}}
- \fi
- },
- frequency unit/rad/.code={
- \renewcommand{\freq@scale}{1}
- \pgfplotsset{freq@label/.style = {xlabel = {Frequency (rad/s)}}}
- }
-}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \begin{macro}{get@interval@start}
-% \begin{macro}{get@interval@end}
-% Internal macros to extract start and end frequency limits from domain specifications.\changes{v1.1.1}{2022/07/31}{New macros to enable `Hz' and `rad' units for frequency and phase, respectively}
-% \begin{macrocode}
-\def\get@interval@start#1:#2\@nil{#1}
-\def\get@interval@end#1:#2\@nil{#2}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \subsection{Parametric function generators for poles, zeros, gains, and delays.}
-% All calculations are carried out assuming that frequeny inputs are in |rad/s|. Magnitude outputs are in |dB| and phase outputs are in degrees or radians, depending on the value of |\ph@scale|.
-% \begin{macro}{\MagK}
-% \begin{macro}{\MagKAsymp}
-% \begin{macro}{\MagKLin}
-% \begin{macro}{\PhK}
-% \begin{macro}{\PhKAsymp}
-% \begin{macro}{\PhKLin}
-% True, linear, and asymptotic magnitude and phase parametric functions for a pure gain $G(s)=k+0\mathrm{i}$. The macros take two arguments corresponding to real and imaginary part of the gain to facilitate code reuse between delays, gains, poles, and zeros, but only real gains are supported. The second argument, if supplied, is ignored.
-% \begin{macrocode}
-\newcommand*{\MagK}[2]{(20*log10(abs(#1)))}
-\newcommand*{\MagKAsymp}{\MagK}
-\newcommand*{\MagKLin}{\MagK}
-\newcommand*{\PhK}[2]{((#1<0?-pi:0)*\ph@scale)}
-\newcommand*{\PhKAsymp}{\PhK}
-\newcommand*{\PhKLin}{\PhK}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \begin{macro}{\PhKAsymp}
-% \begin{macro}{\PhKLin}
-% True magnitude and phase parametric functions for a pure delay $G(s)=e^{-Ts}$. The macros take two arguments corresponding to real and imaginary part of the gain to facilitate code reuse between delays, gains, poles, and zeros, but only real gains are supported. The second argument, if supplied, is ignored.
-% \begin{macrocode}
-\newcommand*{\MagDel}[2]{0}
-\newcommand*{\PhDel}[2]{(-#1*t*\ph@scale)}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \begin{macro}{\MagPole}
-% \begin{macro}{\MagPoleAsymp}
-% \begin{macro}{\MagPoleLin}
-% \begin{macro}{\PhPole}
-% \begin{macro}{\PhPoleAsymp}
-% \begin{macro}{\PhPoleLin}
-% These macros are the building blocks for most of the plotting functions provided by this package. We start with Parametric function for the true magnitude of a complex pole.
-% \begin{macrocode}
-\newcommand*{\MagPole}[2]
- {(-20*log10(sqrt(\n@pow{#1}{2} + \n@pow{t - (#2)}{2})))}
-% \end{macrocode}
-% Parametric function for linear approximation of the magnitude of a complex pole.
-% \begin{macrocode}
-\newcommand*{\MagPoleLin}[2]{(t < sqrt(\n@pow{#1}{2} + \n@pow{#2}{2}) ?
- -20*log10(sqrt(\n@pow{#1}{2} + \n@pow{#2}{2})) :
- -20*log10(t)
- )}
-% \end{macrocode}
-% Parametric function for asymptotic approximation of the magnitude of a complex pole, same as linear approximation.
-% \begin{macrocode}
-\newcommand*{\MagPoleAsymp}{\MagPoleLin}
-% \end{macrocode}
-% Parametric function for the true phase of a complex pole.
-% \begin{macrocode}
-\newcommand*{\PhPole}[2]{((#1 > 0 ? (#2 > 0 ?
- (\n@mod{-atan2((t - (#2)),-(#1))}{2*pi}) :
- (-atan2((t - (#2)),-(#1)))) :
- (-atan2((t - (#2)),-(#1))))*\ph@scale)}
-% \end{macrocode}
-% Parametric function for linear approximation of the phase of a complex pole.
-% \begin{macrocode}
-\newcommand*{\PhPoleLin}[2]{
- ((abs(#1)+abs(#2) == 0 ? -pi/2 :
- (t < (sqrt(\n@pow{#1}{2} + \n@pow{#2}{2}) /
- (\n@pow{10}{sqrt(\n@pow{#1}{2}/(\n@pow{#1}{2} + \n@pow{#2}{2}))})) ?
- (-atan2(-(#2),-(#1))) :
- (t >= (sqrt(\n@pow{#1}{2} + \n@pow{#2}{2}) *
- (\n@pow{10}{sqrt(\n@pow{#1}{2}/(\n@pow{#1}{2} + \n@pow{#2}{2}))})) ?
- (#2>0?(#1>0?3*pi/2:-pi/2):-pi/2) :
- (-atan2(-(#2),-(#1)) + (log10(t/(sqrt(\n@pow{#1}{2} + \n@pow{#2}{2}) /
- (\n@pow{10}{sqrt(\n@pow{#1}{2}/(\n@pow{#1}{2} +
- \n@pow{#2}{2}))}))))*((#2>0?(#1>0?3*pi/2:-pi/2):-pi/2) + atan2(-(#2),-(#1)))/
- (log10(\n@pow{10}{sqrt((4*\n@pow{#1}{2})/
- (\n@pow{#1}{2} + \n@pow{#2}{2}))}))))))*\ph@scale)}
-% \end{macrocode}
-% Parametric function for asymptotic approximation of the phase of a complex pole.
-% \begin{macrocode}
-\newcommand*{\PhPoleAsymp}[2]{((t < (sqrt(\n@pow{#1}{2} + \n@pow{#2}{2})) ?
- (-atan2(-(#2),-(#1))) :
- (#2>0?(#1>0?3*pi/2:-pi/2):-pi/2))*\ph@scale)}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \begin{macro}{\MagZero}
-% \begin{macro}{\MagZeroAsymp}
-% \begin{macro}{\MagZeroLin}
-% \begin{macro}{\PhZero}
-% \begin{macro}{\PhZeroAsymp}
-% \begin{macro}{\PhZeroLin}
-% Plots of zeros are defined to be negative of plots of poles. The |0-| is necessary due to a bug in |gnuplot| (fixed in version 5.4, patchlevel 3).
-% \begin{macrocode}
-\newcommand*{\MagZero}{0-\MagPole}
-\newcommand*{\MagZeroLin}{0-\MagPoleLin}
-\newcommand*{\MagZeroAsymp}{0-\MagPoleAsymp}
-\newcommand*{\PhZero}{0-\PhPole}
-\newcommand*{\PhZeroLin}{0-\PhPoleLin}
-\newcommand*{\PhZeroAsymp}{0-\PhPoleAsymp}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \subsection{Second order systems.}
-% Although second order systems can be dealt with using the macros defined so far, the following dedicated macros for second order systems involve less computation.
-% \begin{macro}{\MagCSPoles}
-% \begin{macro}{\MagCSPolesAsymp}
-% \begin{macro}{\MagCSPolesLin}
-% \begin{macro}{\PhCSPoles}
-% \begin{macro}{\PhCSPolesAsymp}
-% \begin{macro}{\PhCSPolesLin}
-% \begin{macro}{\MagCSZeros}
-% \begin{macro}{\MagCSZerosAsymp}
-% \begin{macro}{\MagCSZerosLin}
-% \begin{macro}{\PhCSZeros}
-% \begin{macro}{\PhCSZerosAsymp}
-% \begin{macro}{\PhCSZerosLin}
-% Consider the canonical second order transfer function $G(s) = \frac{1}{s^2 + 2 \zeta w_n s + w_n^2}$. We start with true, linear, and asymptotic magnitude plots for this transfer function.
-% \begin{macrocode}
-\newcommand*{\MagCSPoles}[2]{(-20*log10(sqrt(\n@pow{\n@pow{#2}{2}
- - \n@pow{t}{2}}{2} + \n@pow{2*#1*#2*t}{2})))}
-\newcommand*{\MagCSPolesLin}[2]{(t < #2 ? -40*log10(#2) : - 40*log10(t))}
-\newcommand*{\MagCSPolesAsymp}{\MagCSPolesLin}
-% \end{macrocode}
-% Then, we have true, linear, and asymptotic phase plots for the canonical second order transfer function.
-% \begin{macrocode}
-\newcommand*{\PhCSPoles}[2]{((-atan2((2*(#1)*(#2)*t),(\n@pow{#2}{2}
- - \n@pow{t}{2})))*\ph@scale)}
-\newcommand*{\PhCSPolesLin}[2]{((t < (#2 / (\n@pow{10}{abs(#1)})) ?
- 0 :
- (t >= (#2 * (\n@pow{10}{abs(#1)})) ?
- (#1>0 ? -pi : pi) :
- (#1>0 ? (-pi*(log10(t*(\n@pow{10}{#1})/#2))/(2*#1)) :
- (pi*(log10(t*(\n@pow{10}{abs(#1)})/#2))/(2*abs(#1))))))*\ph@scale)}
-\newcommand*{\PhCSPolesAsymp}[2]{((#1>0?(t<#2?0:-pi):(t<#2?0:pi))*\ph@scale)}
-% \end{macrocode}
-% Plots of the inverse function $G(s)=s^2+2\zeta\omega_n s+\omega_n^2$ are defined to be negative of plots of poles. The |0-| is necessary due to a bug in |gnuplot| (fixed in version 5.4, patchlevel 3).
-% \begin{macrocode}
-\newcommand*{\MagCSZeros}{0-\MagCSPoles}
-\newcommand*{\MagCSZerosLin}{0-\MagCSPolesLin}
-\newcommand*{\MagCSZerosAsymp}{0-\MagCSPolesAsymp}
-\newcommand*{\PhCSZeros}{0-\PhCSPoles}
-\newcommand*{\PhCSZerosLin}{0-\PhCSPolesLin}
-\newcommand*{\PhCSZerosAsymp}{0-\PhCSPolesAsymp}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \begin{macro}{\MagCSPolesPeak}
-% \begin{macro}{\MagCSZerosPeak}
-% These macros are used to add a resonant peak to linear and asymptotic plots of canonical second order poles and zeros. Since the plots are parametric, a separate |\draw| command is needed to add a vertical arrow.
-% \begin{macrocode}
-\newcommand*{\MagCSPolesPeak}[3][]{
- \draw[#1,->] (axis cs:{#3},{-40*log10(#3)}) --
- (axis cs:{#3},{-40*log10(#3)-20*log10(2*abs(#2))})
-}
-\newcommand*{\MagCSZerosPeak}[3][]{
- \draw[#1,->] (axis cs:{#3},{40*log10(#3)}) --
- (axis cs:{#3},{40*log10(#3)+20*log10(2*abs(#2))})
-}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \begin{macro}{\MagSOPoles}
-% \begin{macro}{\MagSOPolesAsymp}
-% \begin{macro}{\MagSOPolesLin}
-% \begin{macro}{\PhSOPoles}
-% \begin{macro}{\PhSOPolesAsymp}
-% \begin{macro}{\PhSOPolesLin}
-% \begin{macro}{\MagSOZeros}
-% \begin{macro}{\MagSOZerosAsymp}
-% \begin{macro}{\MagSOZerosLin}
-% \begin{macro}{\PhSOZeros}
-% \begin{macro}{\PhSOZerosAsymp}
-% \begin{macro}{\PhSOZerosLin}
-% Consider a general second order transfer function $G(s) = \frac{1}{s^2 + a s + b}$. We start with true, linear, and asymptotic magnitude plots for this transfer function.
-% \begin{macrocode}
-\newcommand*{\MagSOPoles}[2]{
- (-20*log10(sqrt(\n@pow{#2 - \n@pow{t}{2}}{2} + \n@pow{#1*t}{2})))}
-\newcommand*{\MagSOPolesLin}[2]{
- (t < sqrt(abs(#2)) ? -20*log10(abs(#2)) : - 40*log10(t))}
-\newcommand*{\MagSOPolesAsymp}{\MagSOPolesLin}
-% \end{macrocode}
-% Then, we have true, linear, and asymptotic phase plots for the general second order transfer function.
-% \begin{macrocode}
-\newcommand*{\PhSOPoles}[2]{((-atan2((#1)*t,((#2) - \n@pow{t}{2})))*\ph@scale)}
-\newcommand*{\PhSOPolesLin}[2]{((#2>0 ?
- \PhCSPolesLin{(#1/(2*sqrt(#2)))}{(sqrt(#2))} :
- (#1>0 ? -pi : pi))*\ph@scale)}
-\newcommand*{\PhSOPolesAsymp}[2]{((#2>0 ?
- \PhCSPolesAsymp{(#1/(2*sqrt(#2)))}{(sqrt(#2))} :
- (#1>0 ? -pi : pi))*\ph@scale)}
-% \end{macrocode}
-% Plots of the inverse function $G(s)=s^2+as+b$ are defined to be negative of plots of poles. The |0-| is necessary due to a bug in |gnuplot| (fixed in version 5.4, patchlevel 3).
-% \begin{macrocode}
-\newcommand*{\MagSOZeros}{0-\MagSOPoles}
-\newcommand*{\MagSOZerosLin}{0-\MagSOPolesLin}
-\newcommand*{\MagSOZerosAsymp}{0-\MagSOPolesAsymp}
-\newcommand*{\PhSOZeros}{0-\PhSOPoles}
-\newcommand*{\PhSOZerosLin}{0-\PhSOPolesLin}
-\newcommand*{\PhSOZerosAsymp}{0-\PhSOPolesAsymp}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \begin{macro}{\MagSOPolesPeak}
-% \begin{macro}{\MagSOZerosPeak}
-% These macros are used to add a resonant peak to linear and asymptotic plots of general second order poles and zeros. Since the plots are parametric, a separate |\draw| command is needed to add a vertical arrow.
-% \begin{macrocode}
-\newcommand*{\MagSOPolesPeak}[3][]{
- \draw[#1,->] (axis cs:{sqrt(abs(#3))},{-20*log10(abs(#3))}) --
- (axis cs:{sqrt(abs(#3))},{-20*log10(abs(#3)) -
- 20*log10(abs(#2/sqrt(abs(#3))))});
-}
-\newcommand*{\MagSOZerosPeak}[3][]{
- \draw[#1,->] (axis cs:{sqrt(abs(#3))},{20*log10(abs(#3))}) --
- (axis cs:{sqrt(abs(#3))},{20*log10(abs(#3)) +
- 20*log10(abs(#2/sqrt(abs(#3))))});
-}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \subsection{Commands for Bode plots}
-% \subsubsection{User macros}
-% \begin{macro}{\BodeZPK}
-% This macro takes lists of complex poles and zeros of the form |{re,im}|, and values of gain and delay as inputs and constructs parametric functions for the Bode magnitude and phase plots. This is done by adding together the parametric functions generated by the macros for individual zeros, poles, gain, and delay, described above. The parametric functions are then plotted in a |tikzpicture| environment using the |\addplot| macro. Unless the package is loaded with the option |pgf|, the parametric functions are evaluated using |gnuplot|. \changes{v1.0.1}{2021/10/29}{Pass arbitrary TikZ commands as options.}
-% \begin{macrocode}
-\newcommand{\BodeZPK}[4][approx/true]{
-% \end{macrocode}
-% Most of the work is done by the |\parse@opt| and the |\build@ZPK@plot| macros, described in the 'Internal macros' section. The former is used to parse the optional arguments and the latter to extract poles, zeros, gain, and delay from the first mandatory argument and to generate macros |\func@mag| and |\func@ph| that hold the magnitude and phase parametric functions. The |\noexpand| macros below are needed to so that only the macro |\opt@group| is expanded. \changes{v1.0.3}{2021/11/03}{Added Tikz option}\changes{v1.1.1}{2022/07/31}{Enabled `Hz' and `rad' units for frequency and phase, respectively}
-% \begin{macrocode}
- \parse@opt{#1}
- \gdef\func@mag{}
- \gdef\func@ph{}
- \edef\temp@cmd{\noexpand\begin{tikzpicture} [\unexpanded\expandafter{\opt@tikz}]}
- \temp@cmd
- \build@ZPK@plot{\func@mag}{\func@ph}{\opt@approx}{#2}
- \edef\temp@cmd{\noexpand\begin{groupplot}[
- bode@style,
- xmin=#3,
- xmax=#4,
- domain=#3*\freq@scale:#4*\freq@scale,
- height=2.5cm,
- xmode=log,
- group style = {group size = 1 by 2,vertical sep=0.25cm},
- \opt@group
- ]}
- \temp@cmd
-% \end{macrocode}
-% To ensure frequency tick marks on magnitude and the phase plots are always aligned, we use the |groupplot| library. The |\noexpand| and |\unexpanded\expandafter| macros below are used to expand macros in the plot and group optional arguments.
-% \begin{macrocode}
- \edef\temp@mag@cmd{\noexpand\nextgroupplot [ylabel={Gain (dB)}, xmajorticks=false, \optmag@axes]
- \noexpand\addplot [freq@filter, variable=t, thick, \optmag@plot]}
- \edef\temp@ph@cmd{\noexpand\nextgroupplot [ph@y@label, freq@label, \optph@axes]
- \noexpand\addplot [freq@filter, variable=t, thick, \optph@plot]}
- \if@pgfarg
- \temp@mag@cmd {\func@mag};
- \optmag@commands
- \temp@ph@cmd {\func@ph};
- \optph@commands
- \else
-% \end{macrocode}
-% In |gnuplot| mode, we increment the |gnuplot@id| counter before every plot to make sure that new and reusable |.gnuplot| and |.table| files are generated for every plot. We use |raw gnuplot| to make sure that the tables generated by |gnuplot| use the correct phase and frequency units as supplied by the user.
-% \begin{macrocode}
- \stepcounter{gnuplot@id}
- \temp@mag@cmd gnuplot [raw gnuplot, gnuplot@prefix]
- { set table $meta;
- set dummy t;
- set logscale x 10;
- set xrange [#3*\freq@scale:#4*\freq@scale];
- set samples \pgfkeysvalueof{/pgfplots/samples};
- plot \func@mag;
- set table "\bodeplot@prefix\arabic{gnuplot@id}.table";
- plot "$meta" using ($1/(\freq@scale)):($2);
- };
- \optmag@commands
- \stepcounter{gnuplot@id}
- \temp@ph@cmd gnuplot [raw gnuplot, gnuplot@prefix]
- { set table $meta;
- set dummy t;
- set logscale x 10;
- set xrange [#3*\freq@scale:#4*\freq@scale];
- set samples \pgfkeysvalueof{/pgfplots/samples};
- plot \func@ph;
- set table "\bodeplot@prefix\arabic{gnuplot@id}.table";
- plot "$meta" using ($1/(\freq@scale)):($2);
- };
- \optph@commands
- \fi
- \end{groupplot}
- \end{tikzpicture}
-}
-% \end{macrocode}
-% \end{macro}
-% \begin{macro}{\BodeTF}
-% Implementation of this macro is very similar to the |\BodeZPK| macro above. The only difference is the lack of linear and asymptotic plots and slightly different parsing of the mandatory arguments. \changes{v1.0.3}{2021/11/03}{Added Tikz option} \changes{v1.1.0}{2022/07/06}{Fixed phase wrapping in gnuplot mode}\changes{v1.1.1}{2022/07/31}{Enabled `Hz' and `rad' units for frequency and phase, respectively}
-% \begin{macrocode}
-\newcommand{\BodeTF}[4][]{
- \parse@opt{#1}
- \gdef\func@mag{}
- \gdef\func@ph{}
- \edef\temp@cmd{\noexpand\begin{tikzpicture} [\unexpanded\expandafter{\opt@tikz}]}
- \temp@cmd
- \build@TF@plot{\func@mag}{\func@ph}{#2}
- \edef\temp@cmd{\noexpand\begin{groupplot}[
- bode@style,
- xmin=#3,
- xmax=#4,
- domain=#3*\freq@scale:#4*\freq@scale,
- height=2.5cm,
- xmode=log,
- group style = {group size = 1 by 2,vertical sep=0.25cm},
- \opt@group
- ]}
- \temp@cmd
- \edef\temp@mag@cmd{\noexpand\nextgroupplot [ylabel={Gain (dB)}, xmajorticks=false, \optmag@axes]
- \noexpand\addplot [freq@filter, variable=t, thick, \optmag@plot]}
- \edef\temp@ph@cmd{\noexpand\nextgroupplot [ph@y@label, freq@label, \optph@axes]
- \noexpand\addplot [freq@filter, variable=t, thick, \optph@plot]}
- \if@pgfarg
- \temp@mag@cmd {\func@mag};
- \optmag@commands
- \temp@ph@cmd {\n@mod{\func@ph}{2*pi*\ph@scale}};
- \optph@commands
- \else
- \stepcounter{gnuplot@id}
- \temp@mag@cmd gnuplot [raw gnuplot, gnuplot@prefix]
- { set table $meta;
- set dummy t;
- set logscale x 10;
- set xrange [#3*\freq@scale:#4*\freq@scale];
- set samples \pgfkeysvalueof{/pgfplots/samples};
- plot \func@mag;
- set table "\bodeplot@prefix\arabic{gnuplot@id}.table";
- plot "$meta" using ($1/(\freq@scale)):($2);
- };
- \optmag@commands
- \stepcounter{gnuplot@id}
- \temp@ph@cmd gnuplot [raw gnuplot, gnuplot@prefix]
- { set table $meta;
- set dummy t;
- set logscale x 10;
- set trange [#3*\freq@scale:#4*\freq@scale];
- set samples \pgfkeysvalueof{/pgfplots/samples};
- plot '+' using (t) : ((\func@ph)/(\ph@scale)) smooth unwrap;
- set table "\bodeplot@prefix\arabic{gnuplot@id}.table";
- plot "$meta" using ($1/(\freq@scale)):($2*\ph@scale);
- };
- \optph@commands
- \fi
- \end{groupplot}
- \end{tikzpicture}
-}
-% \end{macrocode}
-% \end{macro}
-% \begin{macro}{\addBodeZPKPlots}
-% This macro is designed to issues multiple |\addplot| macros for the same set of poles, zeros, gain, and delay. All of the work is done by the |\build@ZPK@plot| macro. \changes{v1.0.1}{2021/10/29}{Improved optional argument handling.}\changes{v1.1.1}{2022/07/31}{Enabled `Hz' and `rad' units for frequency and phase, respectively}
-% \begin{macrocode}
-\newcommand{\addBodeZPKPlots}[3][true/{}]{
- \foreach \approx/\opt in {#1} {
- \gdef\plot@macro{}
- \gdef\temp@macro{}
- \ifnum\pdf@strcmp{#2}{phase}=0
- \build@ZPK@plot{\temp@macro}{\plot@macro}{\approx}{#3}
- \else
- \build@ZPK@plot{\plot@macro}{\temp@macro}{\approx}{#3}
- \fi
- \edef\supplied@domain{\pgfkeysvalueof{/pgfplots/domain}}
- \edef\domain@start{\expandafter\get@interval@start\supplied@domain\@nil}
- \edef\domain@end{\expandafter\get@interval@end\supplied@domain\@nil}
- \if@pgfarg
- \edef\temp@cmd{\noexpand\addplot [freq@filter, domain=\domain@start*\freq@scale:\domain@end*\freq@scale, variable=t, thick, \opt]}
- \temp@cmd {\plot@macro};
- \else
- \stepcounter{gnuplot@id}
- \edef\temp@cmd{\noexpand\addplot [variable=t, thick, \opt]}
- \temp@cmd gnuplot [raw gnuplot, gnuplot@prefix]
- { set table $meta;
- set dummy t;
- set logscale x 10;
- set xrange [\domain@start*\freq@scale:\domain@end*\freq@scale];
- set samples \pgfkeysvalueof{/pgfplots/samples};
- plot \plot@macro;
- set table "\bodeplot@prefix\arabic{gnuplot@id}.table";
- plot "$meta" using ($1/(\freq@scale)):($2);
- };
- \fi
- }
-}
-% \end{macrocode}
-%\end{macro}
-% \begin{macro}{\addBodeTFPlot}
-% This macro is designed to issues a single |\addplot| macros for the set of coefficients and delay. All of the work is done by the |\build@TF@plot| macro. \changes{v1.1.0}{2022/07/06}{Fixed phase wrapping in gnuplot mode}\changes{v1.1.1}{2022/07/31}{Enabled `Hz' and `rad' units for frequency and phase, respectively}
-% \begin{macrocode}
-\newcommand{\addBodeTFPlot}[3][thick]{
- \gdef\plot@macro{}
- \gdef\temp@macro{}
- \ifnum\pdf@strcmp{#2}{phase}=0
- \build@TF@plot{\temp@macro}{\plot@macro}{#3}
- \else
- \build@TF@plot{\plot@macro}{\temp@macro}{#3}
- \fi
- \edef\supplied@domain{\pgfkeysvalueof{/pgfplots/domain}}
- \edef\domain@start{\expandafter\get@interval@start\supplied@domain\@nil}
- \edef\domain@end{\expandafter\get@interval@end\supplied@domain\@nil}
- \if@pgfarg
- \ifnum\pdf@strcmp{#2}{phase}=0
- \addplot [freq@filter, domain=\domain@start*\freq@scale:\domain@end*\freq@scale, variable=t, #1]{\n@mod{\plot@macro}{2*pi}};
- \else
- \addplot [freq@filter, domain=\domain@start*\freq@scale:\domain@end*\freq@scale, variable=t, #1]{\plot@macro};
- \fi
- \else
- \stepcounter{gnuplot@id}
- \ifnum\pdf@strcmp{#2}{phase}=0
- \addplot [variable=t, #1] gnuplot [raw gnuplot, gnuplot@prefix]
- { set table $meta;
- set dummy t;
- set logscale x 10;
- set trange [\domain@start*\freq@scale:\domain@end*\freq@scale];
- set samples \pgfkeysvalueof{/pgfplots/samples};
- plot '+' using (t) : ((\plot@macro)/(\ph@scale)) smooth unwrap;
- set table "\bodeplot@prefix\arabic{gnuplot@id}.table";
- plot "$meta" using ($1/(\freq@scale)):($2*\ph@scale);
- };
- \else
- \addplot [variable=t, #1] gnuplot [raw gnuplot, gnuplot@prefix]
- { set table $meta;
- set dummy t;
- set logscale x 10;
- set xrange [\domain@start*\freq@scale:\domain@end*\freq@scale];
- set samples \pgfkeysvalueof{/pgfplots/samples};
- plot \plot@macro;
- set table "\bodeplot@prefix\arabic{gnuplot@id}.table";
- plot "$meta" using ($1/(\freq@scale)):($2);
- };
- \fi
- \fi
-}
-% \end{macrocode}
-%\end{macro}
-% \begin{macro}{\addBodeComponentPlot}
-% This macro is designed to issue a single |\addplot| macro capable of plotting linear combinations of the basic components described in Section \ref{sec:BasicComponents}. The only work to do here is to handle the |pgf| package option.\changes{v1.1.1}{2022/07/31}{Enabled `Hz' and `rad' units for frequency and phase, respectively}
-% \begin{macrocode}
-\newcommand{\addBodeComponentPlot}[2][thick]{
- \edef\supplied@domain{\pgfkeysvalueof{/pgfplots/domain}}
- \edef\domain@start{\expandafter\get@interval@start\supplied@domain\@nil}
- \edef\domain@end{\expandafter\get@interval@end\supplied@domain\@nil}
- \if@pgfarg
- \addplot [freq@filter, domain=\domain@start*\freq@scale:\domain@end*\freq@scale, variable=t, #1] {#2};
- \else
- \stepcounter{gnuplot@id}
- \addplot [variable=t, #1] gnuplot [raw gnuplot, gnuplot@prefix]
- { set table $meta;
- set dummy t;
- set logscale x 10;
- set xrange [\domain@start*\freq@scale:\domain@end*\freq@scale];
- set samples \pgfkeysvalueof{/pgfplots/samples};
- plot #2;
- set table "\bodeplot@prefix\arabic{gnuplot@id}.table";
- plot "$meta" using ($1/(\freq@scale)):($2);
- };
- \fi
-}
-% \end{macrocode}
-%\end{macro}
-% \begin{environment}{BodePhPlot}
-% An environment to host phase plot macros that pass parametric functions to |\addplot| macros. Uses the defaults specified in |bode@style| to create a shortcut that includes the |tikzpicture| and |semilogaxis| environments.\changes{v1.1.0}{2022/07/20}{Added separate environments for phase and magnitude plots}\changes{v1.1.1}{2022/07/31}{Enabled `Hz' and `rad' units for frequency and phase, respectively}
-% \begin{macrocode}
-\newenvironment{BodePhPlot}[3][]{
- \parse@env@opt{#1}
- \edef\temp@cmd{\noexpand\begin{tikzpicture} [\unexpanded\expandafter{\opt@tikz}]
- \noexpand\begin{semilogxaxis}[
- ph@y@label,
- freq@label,
- bode@style,
- xmin={#2},
- xmax={#3},
- domain=#2:#3,
- height=2.5cm,
- \unexpanded\expandafter{\opt@axes}
- ]
- }
- \temp@cmd
-}{
- \end{semilogxaxis}
- \end{tikzpicture}
-}
-% \end{macrocode}
-% \end{environment}
-% \begin{environment}{BodeMagPlot}
-% An environment to host magnitude plot macros that pass parametric functions to |\addplot| macros. Uses the defaults specified in |bode@style| to create a shortcut that includes the |tikzpicture| and |semilogaxis| environments.\changes{v1.1.0}{2022/07/20}{Added separate environments for phase and magnitude plots}\changes{v1.1.1}{2022/07/31}{Enabled `Hz' and `rad' units for frequency and phase, respectively}
-% \begin{macrocode}
-\newenvironment{BodeMagPlot}[3][]{
- \parse@env@opt{#1}
- \edef\temp@cmd{\noexpand\begin{tikzpicture} [\unexpanded\expandafter{\opt@tikz}]
- \noexpand\begin{semilogxaxis}[
- bode@style,
- freq@label,
- xmin={#2},
- xmax={#3},
- domain=#2:#3,
- height=2.5cm,
- ylabel={Gain (dB)},
- \unexpanded\expandafter{\opt@axes}
- ]
- }
- \temp@cmd
-}{
- \end{semilogxaxis}
- \end{tikzpicture}
-}
-% \end{macrocode}
-% \end{environment}
-% \begin{environment}{BodePlot}
-% Same as |BodeMagPlot|. The |BodePlot| environment is deprecated as of v1.1.0, please use the |BodePhPlot| and |BodeMagPlot| environments instead.\changes{v1.0.3}{2021/11/03}{Added tikz option to environments}\changes{v1.1.0}{2022/02/20}{Deprecated BodePlot environment}\changes{v1.1.1}{2022/07/31}{Enabled `Hz' and `rad' units for frequency and phase, respectively}
-% \begin{macrocode}
-\newenvironment{BodePlot}[3][]{
- \parse@env@opt{#1}
- \edef\temp@cmd{\noexpand\begin{tikzpicture} [\unexpanded\expandafter{\opt@tikz}]
- \noexpand\begin{semilogxaxis}[
- bode@style,
- freq@label,
- xmin={#2},
- xmax={#3},
- domain=#2:#3,
- height=2.5cm,
- \unexpanded\expandafter{\opt@axes}
- ]
- }
- \temp@cmd
-}{
- \end{semilogxaxis}
- \end{tikzpicture}
-}
-% \end{macrocode}
-% \end{environment}
-% \subsubsection{Internal macros}
-% \begin{macro}{\add@feature}
-% This is an internal macro to add a basic component (pole, zero, gain, or delay), described using one of the macros in Section \ref{sec:BasicComponents} (input |#2|), to a parametric function stored in a global macro (input |#1|). The basic component value (input |#3|) is a complex number of the form |{re,im}|. If the imaginary part is missing, it is assumed to be zero. Implementation made possible by \href{https://tex.stackexchange.com/a/619637/110602}{this StackExchange answer}.
-% \begin{macrocode}
-\newcommand*{\add@feature}[3]{
- \ifcat$\detokenize\expandafter{#1}$
- \xdef#1{\unexpanded\expandafter{#1 0+#2}}
- \else
- \xdef#1{\unexpanded\expandafter{#1+#2}}
- \fi
- \foreach \y [count=\n] in #3 {
- \xdef#1{\unexpanded\expandafter{#1}{\y}}
- \xdef\Last@LoopValue{\n}
- }
- \ifnum\Last@LoopValue=1
- \xdef#1{\unexpanded\expandafter{#1}{0}}
- \fi
-}
-% \end{macrocode}
-%\end{macro}
-% \begin{macro}{\build@ZPK@plot}
-% This is an internal macro to build parametric Bode magnitude and phase plots by concatenating basic component (pole, zero, gain, or delay) macros (Section \ref{sec:BasicComponents}) to global magnitude and phase macros (inputs |#1| and |#2|). The |\add@feature| macro is used to do the concatenation. The basic component macros are inferred from a |feature/{values}| list, where |feature| is one of |z|,|p|,|k|, and |d|, for zeros, poles, gain, and delay, respectively, and |{values}| is a comma separated list of comma separated lists (complex numbers of the form |{re,im}|). If the imaginary part is missing, it is assumed to be zero.
-% \begin{macrocode}
-\newcommand{\build@ZPK@plot}[4]{
- \foreach \feature/\values in {#4} {
- \ifnum\pdf@strcmp{\feature}{z}=0
- \foreach \z in \values {
- \ifnum\pdf@strcmp{#3}{linear}=0
- \add@feature{#2}{\PhZeroLin}{\z}
- \add@feature{#1}{\MagZeroLin}{\z}
- \else
- \ifnum\pdf@strcmp{#3}{asymptotic}=0
- \add@feature{#2}{\PhZeroAsymp}{\z}
- \add@feature{#1}{\MagZeroAsymp}{\z}
- \else
- \add@feature{#2}{\PhZero}{\z}
- \add@feature{#1}{\MagZero}{\z}
- \fi
- \fi
- }
- \fi
- \ifnum\pdf@strcmp{\feature}{p}=0
- \foreach \p in \values {
- \ifnum\pdf@strcmp{#3}{linear}=0
- \add@feature{#2}{\PhPoleLin}{\p}
- \add@feature{#1}{\MagPoleLin}{\p}
- \else
- \ifnum\pdf@strcmp{#3}{asymptotic}=0
- \add@feature{#2}{\PhPoleAsymp}{\p}
- \add@feature{#1}{\MagPoleAsymp}{\p}
- \else
- \add@feature{#2}{\PhPole}{\p}
- \add@feature{#1}{\MagPole}{\p}
- \fi
- \fi
- }
- \fi
- \ifnum\pdf@strcmp{\feature}{k}=0
- \ifnum\pdf@strcmp{#3}{linear}=0
- \add@feature{#2}{\PhKLin}{\values}
- \add@feature{#1}{\MagKLin}{\values}
- \else
- \ifnum\pdf@strcmp{#3}{asymptotic}=0
- \add@feature{#2}{\PhKAsymp}{\values}
- \add@feature{#1}{\MagKAsymp}{\values}
- \else
- \add@feature{#2}{\PhK}{\values}
- \add@feature{#1}{\MagK}{\values}
- \fi
- \fi
- \fi
- \ifnum\pdf@strcmp{\feature}{d}=0
- \ifnum\pdf@strcmp{#3}{linear}=0
- \PackageError {bodeplot} {Linear approximation for pure delays is not
- supported.} {Plot the true Bode plot using `true' instead of `linear'.}
- \else
- \ifnum\pdf@strcmp{#3}{asymptotic}=0
- \PackageError {bodeplot} {Asymptotic approximation for pure delays is not
- supported.} {Plot the true Bode plot using `true' instead of `asymptotic'.}
- \else
- \ifdim\values pt < 0pt
- \PackageError {bodeplot} {Delay needs to be a positive number.}
- \fi
- \add@feature{#2}{\PhDel}{\values}
- \add@feature{#1}{\MagDel}{\values}
- \fi
- \fi
- \fi
- }
-}
-% \end{macrocode}
-%\end{macro}
-% \begin{macro}{\build@TF@plot}
-% This is an internal macro to build parametric Bode magnitude and phase functions by computing the magnitude and the phase given numerator and denominator coefficients and delay (input |#3|). The functions are assigned to user-supplied global magnitude and phase macros (inputs |#1| and |#2|). \changes{v1.0.8}{2022/07/05}{Included phase due to delay in wrapping.}\changes{v1.1.1}{2022/07/31}{Enabled `Hz' and `rad' units for frequency and phase, respectively}
-% \begin{macrocode}
-\newcommand{\build@TF@plot}[3]{
- \gdef\num@real{0}
- \gdef\num@im{0}
- \gdef\den@real{0}
- \gdef\den@im{0}
- \gdef\loop@delay{0}
- \foreach \feature/\values in {#3} {
- \ifnum\pdf@strcmp{\feature}{num}=0
- \foreach \numcoeff [count=\numpow] in \values {
- \xdef\num@degree{\numpow}
- }
- \foreach \numcoeff [count=\numpow] in \values {
- \pgfmathtruncatemacro{\currentdegree}{\num@degree-\numpow}
- \ifnum\currentdegree = 0
- \xdef\num@real{\num@real+\numcoeff}
- \else
- \ifodd\currentdegree
- \xdef\num@im{\num@im+(\numcoeff*(\n@pow{-1}{(\currentdegree-1)/2})*%
- (\n@pow{t}{\currentdegree}))}
- \else
- \xdef\num@real{\num@real+(\numcoeff*(\n@pow{-1}{(\currentdegree)/2})*%
- (\n@pow{t}{\currentdegree}))}
- \fi
- \fi
- }
- \fi
- \ifnum\pdf@strcmp{\feature}{den}=0
- \foreach \dencoeff [count=\denpow] in \values {
- \xdef\den@degree{\denpow}
- }
- \foreach \dencoeff [count=\denpow] in \values {
- \pgfmathtruncatemacro{\currentdegree}{\den@degree-\denpow}
- \ifnum\currentdegree = 0
- \xdef\den@real{\den@real+\dencoeff}
- \else
- \ifodd\currentdegree
- \xdef\den@im{\den@im+(\dencoeff*(\n@pow{-1}{(\currentdegree-1)/2})*%
- (\n@pow{t}{\currentdegree}))}
- \else
- \xdef\den@real{\den@real+(\dencoeff*(\n@pow{-1}{(\currentdegree)/2})*%
- (\n@pow{t}{\currentdegree}))}
- \fi
- \fi
+
+
+
+
+
+
+
+<!DOCTYPE html>
+<html lang="en" data-color-mode="auto" data-light-theme="light" data-dark-theme="dark" data-a11y-animated-images="system">
+ <head>
+ <meta charset="utf-8">
+ <link rel="dns-prefetch" href="https://github.githubassets.com">
+ <link rel="dns-prefetch" href="https://avatars.githubusercontent.com">
+ <link rel="dns-prefetch" href="https://github-cloud.s3.amazonaws.com">
+ <link rel="dns-prefetch" href="https://user-images.githubusercontent.com/">
+ <link rel="preconnect" href="https://github.githubassets.com" crossorigin>
+ <link rel="preconnect" href="https://avatars.githubusercontent.com">
+
+
+
+ <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/light-5178aee0ee76.css" /><link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/dark-217d4f9c8e70.css" /><link data-color-theme="dark_dimmed" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_dimmed-0adfa28f0e68.css" /><link data-color-theme="dark_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_high_contrast-1c8575b36644.css" /><link data-color-theme="dark_colorblind" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_colorblind-5113d2be20b0.css" /><link data-color-theme="light_colorblind" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_colorblind-c96add742484.css" /><link data-color-theme="light_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_high_contrast-290f92f5e867.css" /><link data-color-theme="light_tritanopia" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_tritanopia-cdd88f146bf7.css" /><link data-color-theme="dark_tritanopia" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_tritanopia-2171ea0f078b.css" />
+
+ <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-5508e6d5461e.css" />
+ <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/global-d3a0fca0d75c.css" />
+ <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/github-d9fe73e621ce.css" />
+ <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/code-7cc3c15b62f7.css" />
+
+ <meta name="optimizely-datafile" content="{&quot;groups&quot;: [], &quot;environmentKey&quot;: &quot;production&quot;, &quot;rollouts&quot;: [], &quot;typedAudiences&quot;: [], &quot;projectId&quot;: &quot;16737760170&quot;, &quot;variables&quot;: [], &quot;featureFlags&quot;: [], &quot;experiments&quot;: [], &quot;version&quot;: &quot;4&quot;, &quot;audiences&quot;: [{&quot;conditions&quot;: &quot;[\&quot;or\&quot;, {\&quot;match\&quot;: \&quot;exact\&quot;, \&quot;name\&quot;: \&quot;$opt_dummy_attribute\&quot;, \&quot;type\&quot;: \&quot;custom_attribute\&quot;, \&quot;value\&quot;: \&quot;$opt_dummy_value\&quot;}]&quot;, &quot;id&quot;: &quot;$opt_dummy_audience&quot;, &quot;name&quot;: &quot;Optimizely-Generated Audience for Backwards Compatibility&quot;}], &quot;anonymizeIP&quot;: true, &quot;sdkKey&quot;: &quot;WTc6awnGuYDdG98CYRban&quot;, &quot;attributes&quot;: [{&quot;id&quot;: &quot;16822470375&quot;, &quot;key&quot;: &quot;user_id&quot;}, {&quot;id&quot;: &quot;17143601254&quot;, &quot;key&quot;: &quot;spammy&quot;}, {&quot;id&quot;: &quot;18175660309&quot;, &quot;key&quot;: &quot;organization_plan&quot;}, {&quot;id&quot;: &quot;18813001570&quot;, &quot;key&quot;: &quot;is_logged_in&quot;}, {&quot;id&quot;: &quot;19073851829&quot;, &quot;key&quot;: &quot;geo&quot;}, {&quot;id&quot;: &quot;20175462351&quot;, &quot;key&quot;: &quot;requestedCurrency&quot;}, {&quot;id&quot;: &quot;20785470195&quot;, &quot;key&quot;: &quot;country_code&quot;}, {&quot;id&quot;: &quot;21656311196&quot;, &quot;key&quot;: &quot;opened_downgrade_dialog&quot;}], &quot;botFiltering&quot;: false, &quot;accountId&quot;: &quot;16737760170&quot;, &quot;events&quot;: [{&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;17911811441&quot;, &quot;key&quot;: &quot;hydro_click.dashboard.teacher_toolbox_cta&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18124116703&quot;, &quot;key&quot;: &quot;submit.organizations.complete_sign_up&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18145892387&quot;, &quot;key&quot;: &quot;no_metric.tracked_outside_of_optimizely&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18178755568&quot;, &quot;key&quot;: &quot;click.org_onboarding_checklist.add_repo&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18180553241&quot;, &quot;key&quot;: &quot;submit.repository_imports.create&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18186103728&quot;, &quot;key&quot;: &quot;click.help.learn_more_about_repository_creation&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18188530140&quot;, &quot;key&quot;: &quot;test_event&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18191963644&quot;, &quot;key&quot;: &quot;click.empty_org_repo_cta.transfer_repository&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18195612788&quot;, &quot;key&quot;: &quot;click.empty_org_repo_cta.import_repository&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18210945499&quot;, &quot;key&quot;: &quot;click.org_onboarding_checklist.invite_members&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18211063248&quot;, &quot;key&quot;: &quot;click.empty_org_repo_cta.create_repository&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18215721889&quot;, &quot;key&quot;: &quot;click.org_onboarding_checklist.update_profile&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18224360785&quot;, &quot;key&quot;: &quot;click.org_onboarding_checklist.dismiss&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18234832286&quot;, &quot;key&quot;: &quot;submit.organization_activation.complete&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18252392383&quot;, &quot;key&quot;: &quot;submit.org_repository.create&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18257551537&quot;, &quot;key&quot;: &quot;submit.org_member_invitation.create&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18259522260&quot;, &quot;key&quot;: &quot;submit.organization_profile.update&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18564603625&quot;, &quot;key&quot;: &quot;view.classroom_select_organization&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18568612016&quot;, &quot;key&quot;: &quot;click.classroom_sign_in_click&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18572592540&quot;, &quot;key&quot;: &quot;view.classroom_name&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18574203855&quot;, &quot;key&quot;: &quot;click.classroom_create_organization&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18582053415&quot;, &quot;key&quot;: &quot;click.classroom_select_organization&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18589463420&quot;, &quot;key&quot;: &quot;click.classroom_create_classroom&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18591323364&quot;, &quot;key&quot;: &quot;click.classroom_create_first_classroom&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18591652321&quot;, &quot;key&quot;: &quot;click.classroom_grant_access&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18607131425&quot;, &quot;key&quot;: &quot;view.classroom_creation&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18831680583&quot;, &quot;key&quot;: &quot;upgrade_account_plan&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;19064064515&quot;, &quot;key&quot;: &quot;click.signup&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;19075373687&quot;, &quot;key&quot;: &quot;click.view_account_billing_page&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;19077355841&quot;, &quot;key&quot;: &quot;click.dismiss_signup_prompt&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;19079713938&quot;, &quot;key&quot;: &quot;click.contact_sales&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;19120963070&quot;, &quot;key&quot;: &quot;click.compare_account_plans&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;19151690317&quot;, &quot;key&quot;: &quot;click.upgrade_account_cta&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;19424193129&quot;, &quot;key&quot;: &quot;click.open_account_switcher&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;19520330825&quot;, &quot;key&quot;: &quot;click.visit_account_profile&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;19540970635&quot;, &quot;key&quot;: &quot;click.switch_account_context&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;19730198868&quot;, &quot;key&quot;: &quot;submit.homepage_signup&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;19820830627&quot;, &quot;key&quot;: &quot;click.homepage_signup&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;19988571001&quot;, &quot;key&quot;: &quot;click.create_enterprise_trial&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20036538294&quot;, &quot;key&quot;: &quot;click.create_organization_team&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20040653299&quot;, &quot;key&quot;: &quot;click.input_enterprise_trial_form&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20062030003&quot;, &quot;key&quot;: &quot;click.continue_with_team&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20068947153&quot;, &quot;key&quot;: &quot;click.create_organization_free&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20086636658&quot;, &quot;key&quot;: &quot;click.signup_continue.username&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20091648988&quot;, &quot;key&quot;: &quot;click.signup_continue.create_account&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20103637615&quot;, &quot;key&quot;: &quot;click.signup_continue.email&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20111574253&quot;, &quot;key&quot;: &quot;click.signup_continue.password&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20120044111&quot;, &quot;key&quot;: &quot;view.pricing_page&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20152062109&quot;, &quot;key&quot;: &quot;submit.create_account&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20165800992&quot;, &quot;key&quot;: &quot;submit.upgrade_payment_form&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20171520319&quot;, &quot;key&quot;: &quot;submit.create_organization&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20222645674&quot;, &quot;key&quot;: &quot;click.recommended_plan_in_signup.discuss_your_needs&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20227443657&quot;, &quot;key&quot;: &quot;submit.verify_primary_user_email&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20234607160&quot;, &quot;key&quot;: &quot;click.recommended_plan_in_signup.try_enterprise&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20238175784&quot;, &quot;key&quot;: &quot;click.recommended_plan_in_signup.team&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20239847212&quot;, &quot;key&quot;: &quot;click.recommended_plan_in_signup.continue_free&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20251097193&quot;, &quot;key&quot;: &quot;recommended_plan&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20438619534&quot;, &quot;key&quot;: &quot;click.pricing_calculator.1_member&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20456699683&quot;, &quot;key&quot;: &quot;click.pricing_calculator.15_members&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20467868331&quot;, &quot;key&quot;: &quot;click.pricing_calculator.10_members&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20476267432&quot;, &quot;key&quot;: &quot;click.trial_days_remaining&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20476357660&quot;, &quot;key&quot;: &quot;click.discover_feature&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20479287901&quot;, &quot;key&quot;: &quot;click.pricing_calculator.custom_members&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20481107083&quot;, &quot;key&quot;: &quot;click.recommended_plan_in_signup.apply_teacher_benefits&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20483089392&quot;, &quot;key&quot;: &quot;click.pricing_calculator.5_members&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20484283944&quot;, &quot;key&quot;: &quot;click.onboarding_task&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20484996281&quot;, &quot;key&quot;: &quot;click.recommended_plan_in_signup.apply_student_benefits&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20486713726&quot;, &quot;key&quot;: &quot;click.onboarding_task_breadcrumb&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20490791319&quot;, &quot;key&quot;: &quot;click.upgrade_to_enterprise&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20491786766&quot;, &quot;key&quot;: &quot;click.talk_to_us&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20494144087&quot;, &quot;key&quot;: &quot;click.dismiss_enterprise_trial&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20499722759&quot;, &quot;key&quot;: &quot;completed_all_tasks&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20500710104&quot;, &quot;key&quot;: &quot;completed_onboarding_tasks&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20513160672&quot;, &quot;key&quot;: &quot;click.read_doc&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20516196762&quot;, &quot;key&quot;: &quot;actions_enabled&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20518980986&quot;, &quot;key&quot;: &quot;click.dismiss_trial_banner&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20535446721&quot;, &quot;key&quot;: &quot;click.issue_actions_prompt.dismiss_prompt&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20557002247&quot;, &quot;key&quot;: &quot;click.issue_actions_prompt.setup_workflow&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20595070227&quot;, &quot;key&quot;: &quot;click.pull_request_setup_workflow&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20626600314&quot;, &quot;key&quot;: &quot;click.seats_input&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20642310305&quot;, &quot;key&quot;: &quot;click.decrease_seats_number&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20662990045&quot;, &quot;key&quot;: &quot;click.increase_seats_number&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20679620969&quot;, &quot;key&quot;: &quot;click.public_product_roadmap&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20761240940&quot;, &quot;key&quot;: &quot;click.dismiss_survey_banner&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20767210721&quot;, &quot;key&quot;: &quot;click.take_survey&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20795281201&quot;, &quot;key&quot;: &quot;click.archive_list&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20966790249&quot;, &quot;key&quot;: &quot;contact_sales.submit&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20996500333&quot;, &quot;key&quot;: &quot;contact_sales.existing_customer&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20996890162&quot;, &quot;key&quot;: &quot;contact_sales.blank_message_field&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;21000470317&quot;, &quot;key&quot;: &quot;contact_sales.personal_email&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;21002790172&quot;, &quot;key&quot;: &quot;contact_sales.blank_phone_field&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;21354412592&quot;, &quot;key&quot;: &quot;click.dismiss_create_readme&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;21366102546&quot;, &quot;key&quot;: &quot;click.dismiss_zero_user_content&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;21370252505&quot;, &quot;key&quot;: &quot;account_did_downgrade&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;21370840408&quot;, &quot;key&quot;: &quot;click.cta_create_readme&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;21375451068&quot;, &quot;key&quot;: &quot;click.cta_create_new_repository&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;21385390948&quot;, &quot;key&quot;: &quot;click.zero_user_content&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;21467712175&quot;, &quot;key&quot;: &quot;click.downgrade_keep&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;21484112202&quot;, &quot;key&quot;: &quot;click.downgrade&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;21495292213&quot;, &quot;key&quot;: &quot;click.downgrade_survey_exit&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;21508241468&quot;, &quot;key&quot;: &quot;click.downgrade_survey_submit&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;21512030356&quot;, &quot;key&quot;: &quot;click.downgrade_support&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;21539090022&quot;, &quot;key&quot;: &quot;click.downgrade_exit&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;21543640644&quot;, &quot;key&quot;: &quot;click_fetch_upstream&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;21646510300&quot;, &quot;key&quot;: &quot;click.move_your_work&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;21656151116&quot;, &quot;key&quot;: &quot;click.add_branch_protection_rule&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;21663860599&quot;, &quot;key&quot;: &quot;click.downgrade_dialog_open&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;21687860483&quot;, &quot;key&quot;: &quot;click.learn_about_protected_branches&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;21689050333&quot;, &quot;key&quot;: &quot;click.dismiss_protect_this_branch&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;21864370109&quot;, &quot;key&quot;: &quot;click.sign_in&quot;}], &quot;revision&quot;: &quot;1367&quot;}" />
+
+
+ <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/wp-runtime-b59a0e362e81.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_manuelpuyol_turbo_dist_turbo_es2017-esm_js-7ca92c8d513d.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_stacktrace-parser_dist_stack-trace-parser_esm_js-node_modules_github_bro-d351f6-c1d63d230b29.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/environment-4b8bfb4aa754.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_selector-observer_dist_index_esm_js-650337916dbd.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_delegated-events_dist_index_js-node_modules_github_details-dialog-elemen-63debe-4a2f37f7419e.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_auto-complete-element_dist_index_js-node_modules_github_catalyst_-6afc16-fa4f01d20b81.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_fzy_js_index_js-node_modules_github_markdown-toolbar-element_dist_index_js-5936f45973f5.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_time-elements_dist_index_js-74b4ec51ce20.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_file-attachment-element_dist_index_js-node_modules_github_text-ex-3415a8-daf4603c6e6b.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_filter-input-element_dist_index_js-node_modules_github_remote-inp-45d711-b0ab6a967ae1.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/github-elements-e7701ef9a8c3.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/element-registry-866f36727ef8.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_lit-html_lit-html_js-e954e8c01c93.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_mini-throttle_dist_index_js-node_modules_github_remote-form_dist_-ece2b0-917c0dad4566.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_primer_behaviors_dist_esm_dimensions_js-node_modules_github_hydro-analyt-fed224-54236d9d6de1.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_alive-client_dist_index_js-156187f13fbb.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_filter-input-element_dist_index_js-node_modules_github_paste-mark-c3e01c-82f4760ef552.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_updatable-content_ts-62df1309213c.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_sticky-scroll-into-view_ts-5035229a4e5d.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_behaviors_keyboard-shortcuts-helper_ts-app_assets_modules_github_be-ac2ea2-e5885e2381d2.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_behaviors_batch-deferred-content_ts-app_assets_modules_github_behav-dc1370-6456e197635f.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_behaviors_commenting_edit_ts-app_assets_modules_github_behaviors_ht-83c235-02b38260d85d.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/behaviors-362d7c554824.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_delegated-events_dist_index_js-node_modules_github_catalyst_lib_index_js-06ff533-60844731e2b9.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/notifications-global-e71e7f99b10d.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_optimizely_optimizely-sdk_dist_optimizely_browser_es_min_js-node_modules-4de5ed-a1d36fafc3a7.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/optimizely-beee345dedab.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_virtualized-list_es_index_js-node_modules_github_template-parts_lib_index_js-17ccfc4926a4.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_filter-input-element_dist_index_js-node_modules_github_mini-throt-bb75aa-97625d2d4f26.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_file-attachment-element_dist_index_js-node_modules_github_mini-th-699a01-5abf39efc269.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_ref-selector_ts-23a59aa1d1c9.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/repositories-41124485c7c9.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_clipboard-copy-element_dist_index_esm_js-node_modules_github_remo-8e6bec-4a54aa10cc28.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_mini-throttle_dist_decorators_js-node_modules_scroll-anchoring_di-e71893-60cf13769d05.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_diffs_blob-lines_ts-app_assets_modules_github_diffs_linkable-line-n-dca161-ceb6301d2ba3.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/diffs-96fffae01eaa.js"></script>
+
+
+ <title>bodeplot/bodeplot.dtx at main · rlkamalapurkar/bodeplot</title>
+
+
+
+
+
+ <meta name="request-id" content="463F:7A0B:59FCB9D:857966A:635E0EB1" data-turbo-transient="true" /><meta name="html-safe-nonce" content="933697d380b0a314f0c8c2db1c8bb934f54a74a795aa0670561ae936cec19b01" data-turbo-transient="true" /><meta name="visitor-payload" content="eyJyZWZlcnJlciI6Imh0dHBzOi8vZ2l0aHViLmNvbS9ybGthbWFsYXB1cmthci9ib2RlcGxvdCIsInJlcXVlc3RfaWQiOiI0NjNGOjdBMEI6NTlGQ0I5RDo4NTc5NjZBOjYzNUUwRUIxIiwidmlzaXRvcl9pZCI6IjcxOTA1ODcwNzY5NzgwMjIyMzciLCJyZWdpb25fZWRnZSI6ImlhZCIsInJlZ2lvbl9yZW5kZXIiOiJpYWQifQ==" data-turbo-transient="true" /><meta name="visitor-hmac" content="47cb1fa8149c35fb9e132162c9bafb4ecccde981b7c23b8eb4cfdb39e7f8229d" data-turbo-transient="true" />
+
+ <meta name="hovercard-subject-tag" content="repository:418699104" data-turbo-transient>
+
+
+ <meta name="github-keyboard-shortcuts" content="repository,source-code,file-tree" data-turbo-transient="true" />
+
+
+ <meta name="selected-link" value="repo_source" data-turbo-transient>
+
+ <meta name="google-site-verification" content="c1kuD-K2HIVF635lypcsWPoD4kilo5-jA_wBFyT4uMY">
+ <meta name="google-site-verification" content="KT5gs8h0wvaagLKAVWq8bbeNwnZZK1r1XQysX3xurLU">
+ <meta name="google-site-verification" content="ZzhVyEFwb7w3e0-uOTltm8Jsck2F5StVihD0exw2fsA">
+ <meta name="google-site-verification" content="GXs5KoUUkNCoaAZn7wPN-t01Pywp9M3sEjnt_3_ZWPc">
+ <meta name="google-site-verification" content="Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I">
+
+<meta name="octolytics-url" content="https://collector.github.com/github/collect" /><meta name="octolytics-actor-id" content="30264720" /><meta name="octolytics-actor-login" content="rlkamalapurkar" /><meta name="octolytics-actor-hash" content="3cce62c367e83c02faf0c427366d604b6f38f73f7a6d187b1727d291ebe3b1d6" />
+
+ <meta name="analytics-location" content="/&lt;user-name&gt;/&lt;repo-name&gt;/blob/show" data-turbo-transient="true" />
+
+
+
+
+
+
+
+
+ <meta name="user-login" content="rlkamalapurkar">
+
+ <link rel="sudo-modal" href="/sessions/sudo_modal">
+
+ <meta name="viewport" content="width=device-width">
+
+ <meta name="description" content="LaTeX package to plot Bode diagrams. Contribute to rlkamalapurkar/bodeplot development by creating an account on GitHub.">
+ <link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="GitHub">
+ <link rel="fluid-icon" href="https://github.com/fluidicon.png" title="GitHub">
+ <meta property="fb:app_id" content="1401488693436528">
+ <meta name="apple-itunes-app" content="app-id=1477376905" />
+ <meta name="twitter:image:src" content="https://opengraph.githubassets.com/75d13310abaea2c3a6b08281cd0dc89cb30b997fb8ca3fd9cfec936cb36a8649/rlkamalapurkar/bodeplot" /><meta name="twitter:site" content="@github" /><meta name="twitter:card" content="summary_large_image" /><meta name="twitter:title" content="bodeplot/bodeplot.dtx at main · rlkamalapurkar/bodeplot" /><meta name="twitter:description" content="LaTeX package to plot Bode diagrams. Contribute to rlkamalapurkar/bodeplot development by creating an account on GitHub." />
+ <meta property="og:image" content="https://opengraph.githubassets.com/75d13310abaea2c3a6b08281cd0dc89cb30b997fb8ca3fd9cfec936cb36a8649/rlkamalapurkar/bodeplot" /><meta property="og:image:alt" content="LaTeX package to plot Bode diagrams. Contribute to rlkamalapurkar/bodeplot development by creating an account on GitHub." /><meta property="og:image:width" content="1200" /><meta property="og:image:height" content="600" /><meta property="og:site_name" content="GitHub" /><meta property="og:type" content="object" /><meta property="og:title" content="bodeplot/bodeplot.dtx at main · rlkamalapurkar/bodeplot" /><meta property="og:url" content="https://github.com/rlkamalapurkar/bodeplot" /><meta property="og:description" content="LaTeX package to plot Bode diagrams. Contribute to rlkamalapurkar/bodeplot development by creating an account on GitHub." />
+
+ <link rel="assets" href="https://github.githubassets.com/">
+ <link rel="shared-web-socket" href="wss://alive.github.com/_sockets/u/30264720/ws?session=eyJ2IjoiVjMiLCJ1IjozMDI2NDcyMCwicyI6OTgyMjY4Njg5LCJjIjoxNjcyMTU4NzA0LCJ0IjoxNjY3MTA4NTUyfQ==--f8c1cf5fe10e5974f7f31513a3a5219d593f046edf3ac25ca3f04453c9980364" data-refresh-url="/_alive" data-session-id="fb8691b3307882b02af8fc5d6f24656c8a25319007c2330370f80ba9a25465ab">
+ <link rel="shared-web-socket-src" href="/assets-cdn/worker/socket-worker-b87581f5816c.js">
+
+
+ <meta name="hostname" content="github.com">
+
+
+ <meta name="keyboard-shortcuts-preference" content="all">
+ <script type="application/json" id="memex_keyboard_shortcuts_preference">"all"</script>
+
+ <meta name="expected-hostname" content="github.com">
+
+ <meta name="enabled-features" content="ACTIONS_RUN_NAME,IMAGE_METRIC_TRACKING,GEOJSON_AZURE_MAPS,STRICT_DEFERRED_DIFF_LINES_CHECKS">
+
+
+ <meta http-equiv="x-pjax-version" content="56d9d73658be7d98108b9c9ab739f0ae1ee3bca4f394e843ca812a557dd9f356" data-turbo-track="reload">
+ <meta http-equiv="x-pjax-csp-version" content="196a13434ccf3e32885dfa5574a2cfb5e2e8e4987d0b1b46aa95067a394485c1" data-turbo-track="reload">
+ <meta http-equiv="x-pjax-css-version" content="38ca272926597b58c4df943237eec5e109768b1182e12017c8041d0104e24596" data-turbo-track="reload">
+ <meta http-equiv="x-pjax-js-version" content="973193c59b7fdfa00b79e99c79606fcda8afd73b3a100b55c0fb6ef8d8dab2da" data-turbo-track="reload">
+
+ <meta name="turbo-cache-control" content="no-preview" data-turbo-transient="">
+
+ <meta data-hydrostats="publish">
+
+ <meta name="go-import" content="github.com/rlkamalapurkar/bodeplot git https://github.com/rlkamalapurkar/bodeplot.git">
+
+ <meta name="octolytics-dimension-user_id" content="30264720" /><meta name="octolytics-dimension-user_login" content="rlkamalapurkar" /><meta name="octolytics-dimension-repository_id" content="418699104" /><meta name="octolytics-dimension-repository_nwo" content="rlkamalapurkar/bodeplot" /><meta name="octolytics-dimension-repository_public" content="true" /><meta name="octolytics-dimension-repository_is_fork" content="false" /><meta name="octolytics-dimension-repository_network_root_id" content="418699104" /><meta name="octolytics-dimension-repository_network_root_nwo" content="rlkamalapurkar/bodeplot" />
+
+
+
+ <link rel="canonical" href="https://github.com/rlkamalapurkar/bodeplot/blob/main/bodeplot.dtx" data-turbo-transient>
+ <meta name="turbo-body-classes" content="logged-in env-production page-responsive page-blob">
+
+
+ <meta name="browser-stats-url" content="https://api.github.com/_private/browser/stats">
+
+ <meta name="browser-errors-url" content="https://api.github.com/_private/browser/errors">
+
+ <meta name="browser-optimizely-client-errors-url" content="https://api.github.com/_private/browser/optimizely_client/errors">
+
+ <link rel="mask-icon" href="https://github.githubassets.com/pinned-octocat.svg" color="#000000">
+ <link rel="alternate icon" class="js-site-favicon" type="image/png" href="https://github.githubassets.com/favicons/favicon.png">
+ <link rel="icon" class="js-site-favicon" type="image/svg+xml" href="https://github.githubassets.com/favicons/favicon.svg">
+
+<meta name="theme-color" content="#1e2327">
+<meta name="color-scheme" content="light dark" />
+
+
+ <link rel="manifest" href="/manifest.json" crossOrigin="use-credentials">
+
+ </head>
+
+ <body class="logged-in env-production page-responsive page-blob" style="word-wrap: break-word;">
+
+
+ <div class="position-relative js-header-wrapper ">
+ <a href="#start-of-content" class="p-3 color-bg-accent-emphasis color-fg-on-emphasis show-on-focus js-skip-to-content">Skip to content</a>
+ <span data-view-component="true" class="progress-pjax-loader Progress position-fixed width-full">
+ <span style="width: 0%;" data-view-component="true" class="Progress-item progress-pjax-loader-bar left-0 top-0 color-bg-accent-emphasis"></span>
+</span>
+
+
+
+ <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_mini-throttle_dist_decorators_js-node_modules_github_command-pale-51fe14-9a1b633e9244.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_clipboard-copy-element_dist_index_esm_js-node_modules_delegated-e-976da2-e22766eedf00.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_command-palette_items_help-item_ts-app_assets_modules_github_comman-48ad9d-300540e938f3.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/command-palette-7174ee8c0061.js"></script>
+
+ <header class="Header js-details-container Details px-3 px-md-4 px-lg-5 flex-wrap flex-md-nowrap" role="banner">
+
+ <div class="Header-item mt-n1 mb-n1 d-none d-md-flex">
+ <a
+ class="Header-link"
+ href="https://github.com/"
+ data-hotkey="g d"
+ aria-label="Homepage "
+ data-turbo="false"
+ data-analytics-event="{&quot;category&quot;:&quot;Header&quot;,&quot;action&quot;:&quot;go to dashboard&quot;,&quot;label&quot;:&quot;icon:logo&quot;}"
+>
+ <svg height="32" aria-hidden="true" viewBox="0 0 16 16" version="1.1" width="32" data-view-component="true" class="octicon octicon-mark-github v-align-middle">
+ <path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"></path>
+</svg>
+</a>
+
+ </div>
+
+ <div class="Header-item d-md-none">
+ <button aria-label="Toggle navigation" aria-expanded="false" type="button" data-view-component="true" class="Header-link js-details-target btn-link"> <svg aria-hidden="true" height="24" viewBox="0 0 16 16" version="1.1" width="24" data-view-component="true" class="octicon octicon-three-bars">
+ <path fill-rule="evenodd" d="M1 2.75A.75.75 0 011.75 2h12.5a.75.75 0 110 1.5H1.75A.75.75 0 011 2.75zm0 5A.75.75 0 011.75 7h12.5a.75.75 0 110 1.5H1.75A.75.75 0 011 7.75zM1.75 12a.75.75 0 100 1.5h12.5a.75.75 0 100-1.5H1.75z"></path>
+</svg>
+</button> </div>
+
+ <div class="Header-item Header-item--full flex-column flex-md-row width-full flex-order-2 flex-md-order-none mr-0 mt-3 mt-md-0 Details-content--hidden-not-important d-md-flex">
+
+
+
+
+<div class="header-search flex-auto position-relative js-site-search flex-self-stretch flex-md-self-auto mb-3 mb-md-0 mr-0 mr-md-3 scoped-search site-scoped-search js-jump-to"
+>
+ <div class="position-relative">
+ <!-- '"` --><!-- </textarea></xmp> --></option></form><form class="js-site-search-form" role="search" aria-label="Site" data-scope-type="Repository" data-scope-id="418699104" data-scoped-search-url="/rlkamalapurkar/bodeplot/search" data-owner-scoped-search-url="/users/rlkamalapurkar/search" data-unscoped-search-url="/search" data-turbo="false" action="/rlkamalapurkar/bodeplot/search" accept-charset="UTF-8" method="get">
+ <label class="form-control header-search-wrapper input-sm p-0 js-chromeless-input-container header-search-wrapper-jump-to position-relative d-flex flex-justify-between flex-items-center">
+ <input type="text"
+ class="form-control js-site-search-focus header-search-input jump-to-field js-jump-to-field js-site-search-field is-clearable"
+ data-hotkey=s,/
+ name="q"
+ data-test-selector="nav-search-input"
+ placeholder="Search or jump to…"
+ data-unscoped-placeholder="Search or jump to…"
+ data-scoped-placeholder="Search or jump to…"
+ autocapitalize="off"
+ role="combobox"
+ aria-haspopup="listbox"
+ aria-expanded="false"
+ aria-autocomplete="list"
+ aria-controls="jump-to-results"
+ aria-label="Search or jump to…"
+ data-jump-to-suggestions-path="/_graphql/GetSuggestedNavigationDestinations"
+ spellcheck="false"
+ autocomplete="off"
+ >
+ <input type="hidden" value="Q_HsAvjiOju5gOxmvcjCEz9eGVhvpxox0K9yTlMez3NWxjEO6DO0jYku8_NAQqftkp07GuIkLCqkKHGYas1e9Q" data-csrf="true" class="js-data-jump-to-suggestions-path-csrf" />
+ <input type="hidden" class="js-site-search-type-field" name="type" >
+ <svg xmlns="http://www.w3.org/2000/svg" width="22" height="20" aria-hidden="true" class="mr-1 header-search-key-slash"><path fill="none" stroke="#979A9C" opacity=".4" d="M3.5.5h12c1.7 0 3 1.3 3 3v13c0 1.7-1.3 3-3 3h-12c-1.7 0-3-1.3-3-3v-13c0-1.7 1.3-3 3-3z"></path><path fill="#979A9C" d="M11.8 6L8 15.1h-.9L10.8 6h1z"></path></svg>
+
+
+ <div class="Box position-absolute overflow-hidden d-none jump-to-suggestions js-jump-to-suggestions-container">
+
+<ul class="d-none js-jump-to-suggestions-template-container">
+
+
+<li class="d-flex flex-justify-start flex-items-center p-0 f5 navigation-item js-navigation-item js-jump-to-suggestion" role="option">
+ <a tabindex="-1" class="no-underline d-flex flex-auto flex-items-center jump-to-suggestions-path js-jump-to-suggestion-path js-navigation-open p-2" href="" data-item-type="suggestion">
+ <div class="jump-to-octicon js-jump-to-octicon flex-shrink-0 mr-2 text-center d-none">
+ <svg title="Repository" aria-label="Repository" role="img" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo js-jump-to-octicon-repo d-none flex-shrink-0">
+ <path fill-rule="evenodd" d="M2 2.5A2.5 2.5 0 014.5 0h8.75a.75.75 0 01.75.75v12.5a.75.75 0 01-.75.75h-2.5a.75.75 0 110-1.5h1.75v-2h-8a1 1 0 00-.714 1.7.75.75 0 01-1.072 1.05A2.495 2.495 0 012 11.5v-9zm10.5-1V9h-8c-.356 0-.694.074-1 .208V2.5a1 1 0 011-1h8zM5 12.25v3.25a.25.25 0 00.4.2l1.45-1.087a.25.25 0 01.3 0L8.6 15.7a.25.25 0 00.4-.2v-3.25a.25.25 0 00-.25-.25h-3.5a.25.25 0 00-.25.25z"></path>
+</svg>
+ <svg title="Project" aria-label="Project" role="img" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-project js-jump-to-octicon-project d-none flex-shrink-0">
+ <path fill-rule="evenodd" d="M1.75 0A1.75 1.75 0 000 1.75v12.5C0 15.216.784 16 1.75 16h12.5A1.75 1.75 0 0016 14.25V1.75A1.75 1.75 0 0014.25 0H1.75zM1.5 1.75a.25.25 0 01.25-.25h12.5a.25.25 0 01.25.25v12.5a.25.25 0 01-.25.25H1.75a.25.25 0 01-.25-.25V1.75zM11.75 3a.75.75 0 00-.75.75v7.5a.75.75 0 001.5 0v-7.5a.75.75 0 00-.75-.75zm-8.25.75a.75.75 0 011.5 0v5.5a.75.75 0 01-1.5 0v-5.5zM8 3a.75.75 0 00-.75.75v3.5a.75.75 0 001.5 0v-3.5A.75.75 0 008 3z"></path>
+</svg>
+ <svg title="Search" aria-label="Search" role="img" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-search js-jump-to-octicon-search d-none flex-shrink-0">
+ <path fill-rule="evenodd" d="M11.5 7a4.499 4.499 0 11-8.998 0A4.499 4.499 0 0111.5 7zm-.82 4.74a6 6 0 111.06-1.06l3.04 3.04a.75.75 0 11-1.06 1.06l-3.04-3.04z"></path>
+</svg>
+ </div>
+
+ <img class="avatar mr-2 flex-shrink-0 js-jump-to-suggestion-avatar d-none" alt="" aria-label="Team" src="" width="28" height="28">
+
+ <div class="jump-to-suggestion-name js-jump-to-suggestion-name flex-auto overflow-hidden text-left no-wrap css-truncate css-truncate-target">
+ </div>
+
+ <div class="border rounded-2 flex-shrink-0 color-bg-subtle px-1 color-fg-muted ml-1 f6 d-none js-jump-to-badge-search">
+ <span class="js-jump-to-badge-search-text-default d-none" aria-label="in this repository">
+ In this repository
+ </span>
+ <span class="js-jump-to-badge-search-text-global d-none" aria-label="in all of GitHub">
+ All GitHub
+ </span>
+ <span aria-hidden="true" class="d-inline-block ml-1 v-align-middle">↵</span>
+ </div>
+
+ <div aria-hidden="true" class="border rounded-2 flex-shrink-0 color-bg-subtle px-1 color-fg-muted ml-1 f6 d-none d-on-nav-focus js-jump-to-badge-jump">
+ Jump to
+ <span class="d-inline-block ml-1 v-align-middle">↵</span>
+ </div>
+ </a>
+</li>
+
+</ul>
+
+<ul class="d-none js-jump-to-no-results-template-container">
+ <li class="d-flex flex-justify-center flex-items-center f5 d-none js-jump-to-suggestion p-2">
+ <span class="color-fg-muted">No suggested jump to results</span>
+ </li>
+</ul>
+
+<ul id="jump-to-results" role="listbox" class="p-0 m-0 js-navigation-container jump-to-suggestions-results-container js-jump-to-suggestions-results-container">
+
+
+<li class="d-flex flex-justify-start flex-items-center p-0 f5 navigation-item js-navigation-item js-jump-to-scoped-search d-none" role="option">
+ <a tabindex="-1" class="no-underline d-flex flex-auto flex-items-center jump-to-suggestions-path js-jump-to-suggestion-path js-navigation-open p-2" href="" data-item-type="scoped_search">
+ <div class="jump-to-octicon js-jump-to-octicon flex-shrink-0 mr-2 text-center d-none">
+ <svg title="Repository" aria-label="Repository" role="img" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo js-jump-to-octicon-repo d-none flex-shrink-0">
+ <path fill-rule="evenodd" d="M2 2.5A2.5 2.5 0 014.5 0h8.75a.75.75 0 01.75.75v12.5a.75.75 0 01-.75.75h-2.5a.75.75 0 110-1.5h1.75v-2h-8a1 1 0 00-.714 1.7.75.75 0 01-1.072 1.05A2.495 2.495 0 012 11.5v-9zm10.5-1V9h-8c-.356 0-.694.074-1 .208V2.5a1 1 0 011-1h8zM5 12.25v3.25a.25.25 0 00.4.2l1.45-1.087a.25.25 0 01.3 0L8.6 15.7a.25.25 0 00.4-.2v-3.25a.25.25 0 00-.25-.25h-3.5a.25.25 0 00-.25.25z"></path>
+</svg>
+ <svg title="Project" aria-label="Project" role="img" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-project js-jump-to-octicon-project d-none flex-shrink-0">
+ <path fill-rule="evenodd" d="M1.75 0A1.75 1.75 0 000 1.75v12.5C0 15.216.784 16 1.75 16h12.5A1.75 1.75 0 0016 14.25V1.75A1.75 1.75 0 0014.25 0H1.75zM1.5 1.75a.25.25 0 01.25-.25h12.5a.25.25 0 01.25.25v12.5a.25.25 0 01-.25.25H1.75a.25.25 0 01-.25-.25V1.75zM11.75 3a.75.75 0 00-.75.75v7.5a.75.75 0 001.5 0v-7.5a.75.75 0 00-.75-.75zm-8.25.75a.75.75 0 011.5 0v5.5a.75.75 0 01-1.5 0v-5.5zM8 3a.75.75 0 00-.75.75v3.5a.75.75 0 001.5 0v-3.5A.75.75 0 008 3z"></path>
+</svg>
+ <svg title="Search" aria-label="Search" role="img" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-search js-jump-to-octicon-search d-none flex-shrink-0">
+ <path fill-rule="evenodd" d="M11.5 7a4.499 4.499 0 11-8.998 0A4.499 4.499 0 0111.5 7zm-.82 4.74a6 6 0 111.06-1.06l3.04 3.04a.75.75 0 11-1.06 1.06l-3.04-3.04z"></path>
+</svg>
+ </div>
+
+ <img class="avatar mr-2 flex-shrink-0 js-jump-to-suggestion-avatar d-none" alt="" aria-label="Team" src="" width="28" height="28">
+
+ <div class="jump-to-suggestion-name js-jump-to-suggestion-name flex-auto overflow-hidden text-left no-wrap css-truncate css-truncate-target">
+ </div>
+
+ <div class="border rounded-2 flex-shrink-0 color-bg-subtle px-1 color-fg-muted ml-1 f6 d-none js-jump-to-badge-search">
+ <span class="js-jump-to-badge-search-text-default d-none" aria-label="in this repository">
+ In this repository
+ </span>
+ <span class="js-jump-to-badge-search-text-global d-none" aria-label="in all of GitHub">
+ All GitHub
+ </span>
+ <span aria-hidden="true" class="d-inline-block ml-1 v-align-middle">↵</span>
+ </div>
+
+ <div aria-hidden="true" class="border rounded-2 flex-shrink-0 color-bg-subtle px-1 color-fg-muted ml-1 f6 d-none d-on-nav-focus js-jump-to-badge-jump">
+ Jump to
+ <span class="d-inline-block ml-1 v-align-middle">↵</span>
+ </div>
+ </a>
+</li>
+
+
+
+<li class="d-flex flex-justify-start flex-items-center p-0 f5 navigation-item js-navigation-item js-jump-to-owner-scoped-search d-none" role="option">
+ <a tabindex="-1" class="no-underline d-flex flex-auto flex-items-center jump-to-suggestions-path js-jump-to-suggestion-path js-navigation-open p-2" href="" data-item-type="owner_scoped_search">
+ <div class="jump-to-octicon js-jump-to-octicon flex-shrink-0 mr-2 text-center d-none">
+ <svg title="Repository" aria-label="Repository" role="img" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo js-jump-to-octicon-repo d-none flex-shrink-0">
+ <path fill-rule="evenodd" d="M2 2.5A2.5 2.5 0 014.5 0h8.75a.75.75 0 01.75.75v12.5a.75.75 0 01-.75.75h-2.5a.75.75 0 110-1.5h1.75v-2h-8a1 1 0 00-.714 1.7.75.75 0 01-1.072 1.05A2.495 2.495 0 012 11.5v-9zm10.5-1V9h-8c-.356 0-.694.074-1 .208V2.5a1 1 0 011-1h8zM5 12.25v3.25a.25.25 0 00.4.2l1.45-1.087a.25.25 0 01.3 0L8.6 15.7a.25.25 0 00.4-.2v-3.25a.25.25 0 00-.25-.25h-3.5a.25.25 0 00-.25.25z"></path>
+</svg>
+ <svg title="Project" aria-label="Project" role="img" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-project js-jump-to-octicon-project d-none flex-shrink-0">
+ <path fill-rule="evenodd" d="M1.75 0A1.75 1.75 0 000 1.75v12.5C0 15.216.784 16 1.75 16h12.5A1.75 1.75 0 0016 14.25V1.75A1.75 1.75 0 0014.25 0H1.75zM1.5 1.75a.25.25 0 01.25-.25h12.5a.25.25 0 01.25.25v12.5a.25.25 0 01-.25.25H1.75a.25.25 0 01-.25-.25V1.75zM11.75 3a.75.75 0 00-.75.75v7.5a.75.75 0 001.5 0v-7.5a.75.75 0 00-.75-.75zm-8.25.75a.75.75 0 011.5 0v5.5a.75.75 0 01-1.5 0v-5.5zM8 3a.75.75 0 00-.75.75v3.5a.75.75 0 001.5 0v-3.5A.75.75 0 008 3z"></path>
+</svg>
+ <svg title="Search" aria-label="Search" role="img" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-search js-jump-to-octicon-search d-none flex-shrink-0">
+ <path fill-rule="evenodd" d="M11.5 7a4.499 4.499 0 11-8.998 0A4.499 4.499 0 0111.5 7zm-.82 4.74a6 6 0 111.06-1.06l3.04 3.04a.75.75 0 11-1.06 1.06l-3.04-3.04z"></path>
+</svg>
+ </div>
+
+ <img class="avatar mr-2 flex-shrink-0 js-jump-to-suggestion-avatar d-none" alt="" aria-label="Team" src="" width="28" height="28">
+
+ <div class="jump-to-suggestion-name js-jump-to-suggestion-name flex-auto overflow-hidden text-left no-wrap css-truncate css-truncate-target">
+ </div>
+
+ <div class="border rounded-2 flex-shrink-0 color-bg-subtle px-1 color-fg-muted ml-1 f6 d-none js-jump-to-badge-search">
+ <span class="js-jump-to-badge-search-text-default d-none" aria-label="in this user">
+ In this user
+ </span>
+ <span class="js-jump-to-badge-search-text-global d-none" aria-label="in all of GitHub">
+ All GitHub
+ </span>
+ <span aria-hidden="true" class="d-inline-block ml-1 v-align-middle">↵</span>
+ </div>
+
+ <div aria-hidden="true" class="border rounded-2 flex-shrink-0 color-bg-subtle px-1 color-fg-muted ml-1 f6 d-none d-on-nav-focus js-jump-to-badge-jump">
+ Jump to
+ <span class="d-inline-block ml-1 v-align-middle">↵</span>
+ </div>
+ </a>
+</li>
+
+
+
+<li class="d-flex flex-justify-start flex-items-center p-0 f5 navigation-item js-navigation-item js-jump-to-global-search d-none" role="option">
+ <a tabindex="-1" class="no-underline d-flex flex-auto flex-items-center jump-to-suggestions-path js-jump-to-suggestion-path js-navigation-open p-2" href="" data-item-type="global_search">
+ <div class="jump-to-octicon js-jump-to-octicon flex-shrink-0 mr-2 text-center d-none">
+ <svg title="Repository" aria-label="Repository" role="img" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo js-jump-to-octicon-repo d-none flex-shrink-0">
+ <path fill-rule="evenodd" d="M2 2.5A2.5 2.5 0 014.5 0h8.75a.75.75 0 01.75.75v12.5a.75.75 0 01-.75.75h-2.5a.75.75 0 110-1.5h1.75v-2h-8a1 1 0 00-.714 1.7.75.75 0 01-1.072 1.05A2.495 2.495 0 012 11.5v-9zm10.5-1V9h-8c-.356 0-.694.074-1 .208V2.5a1 1 0 011-1h8zM5 12.25v3.25a.25.25 0 00.4.2l1.45-1.087a.25.25 0 01.3 0L8.6 15.7a.25.25 0 00.4-.2v-3.25a.25.25 0 00-.25-.25h-3.5a.25.25 0 00-.25.25z"></path>
+</svg>
+ <svg title="Project" aria-label="Project" role="img" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-project js-jump-to-octicon-project d-none flex-shrink-0">
+ <path fill-rule="evenodd" d="M1.75 0A1.75 1.75 0 000 1.75v12.5C0 15.216.784 16 1.75 16h12.5A1.75 1.75 0 0016 14.25V1.75A1.75 1.75 0 0014.25 0H1.75zM1.5 1.75a.25.25 0 01.25-.25h12.5a.25.25 0 01.25.25v12.5a.25.25 0 01-.25.25H1.75a.25.25 0 01-.25-.25V1.75zM11.75 3a.75.75 0 00-.75.75v7.5a.75.75 0 001.5 0v-7.5a.75.75 0 00-.75-.75zm-8.25.75a.75.75 0 011.5 0v5.5a.75.75 0 01-1.5 0v-5.5zM8 3a.75.75 0 00-.75.75v3.5a.75.75 0 001.5 0v-3.5A.75.75 0 008 3z"></path>
+</svg>
+ <svg title="Search" aria-label="Search" role="img" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-search js-jump-to-octicon-search d-none flex-shrink-0">
+ <path fill-rule="evenodd" d="M11.5 7a4.499 4.499 0 11-8.998 0A4.499 4.499 0 0111.5 7zm-.82 4.74a6 6 0 111.06-1.06l3.04 3.04a.75.75 0 11-1.06 1.06l-3.04-3.04z"></path>
+</svg>
+ </div>
+
+ <img class="avatar mr-2 flex-shrink-0 js-jump-to-suggestion-avatar d-none" alt="" aria-label="Team" src="" width="28" height="28">
+
+ <div class="jump-to-suggestion-name js-jump-to-suggestion-name flex-auto overflow-hidden text-left no-wrap css-truncate css-truncate-target">
+ </div>
+
+ <div class="border rounded-2 flex-shrink-0 color-bg-subtle px-1 color-fg-muted ml-1 f6 d-none js-jump-to-badge-search">
+ <span class="js-jump-to-badge-search-text-default d-none" aria-label="in this repository">
+ In this repository
+ </span>
+ <span class="js-jump-to-badge-search-text-global d-none" aria-label="in all of GitHub">
+ All GitHub
+ </span>
+ <span aria-hidden="true" class="d-inline-block ml-1 v-align-middle">↵</span>
+ </div>
+
+ <div aria-hidden="true" class="border rounded-2 flex-shrink-0 color-bg-subtle px-1 color-fg-muted ml-1 f6 d-none d-on-nav-focus js-jump-to-badge-jump">
+ Jump to
+ <span class="d-inline-block ml-1 v-align-middle">↵</span>
+ </div>
+ </a>
+</li>
+
+
+ <li class="d-flex flex-justify-center flex-items-center p-0 f5 js-jump-to-suggestion">
+ <svg style="box-sizing: content-box; color: var(--color-icon-primary);" width="32" height="32" viewBox="0 0 16 16" fill="none" data-view-component="true" class="m-3 anim-rotate">
+ <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" />
+ <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke" />
+</svg>
+ </li>
+</ul>
+
+ </div>
+ </label>
+</form> </div>
+</div>
+
+ <nav id="global-nav" class="d-flex flex-column flex-md-row flex-self-stretch flex-md-self-auto" aria-label="Global">
+ <a class="Header-link py-md-3 d-block d-md-none py-2 border-top border-md-top-0 border-white-fade" data-ga-click="Header, click, Nav menu - item:dashboard:user" aria-label="Dashboard" data-turbo="false" href="/dashboard">Dashboard</a>
+
+ <a class="js-selected-navigation-item Header-link mt-md-n3 mb-md-n3 py-2 py-md-3 mr-0 mr-md-3 border-top border-md-top-0 border-white-fade" data-hotkey="g p" data-ga-click="Header, click, Nav menu - item:pulls context:user" aria-label="Pull requests you created" data-turbo="false" data-selected-links="/pulls /pulls/assigned /pulls/mentioned /pulls" href="/pulls">
+ Pull<span class="d-inline d-md-none d-lg-inline"> request</span>s
+</a>
+ <a class="js-selected-navigation-item Header-link mt-md-n3 mb-md-n3 py-2 py-md-3 mr-0 mr-md-3 border-top border-md-top-0 border-white-fade" data-hotkey="g i" data-ga-click="Header, click, Nav menu - item:issues context:user" aria-label="Issues you created" data-turbo="false" data-selected-links="/issues /issues/assigned /issues/mentioned /issues" href="/issues">Issues</a>
+
+ <a class="js-selected-navigation-item Header-link mt-md-n3 mb-md-n3 py-2 py-md-3 mr-0 mr-md-3 border-top border-md-top-0 border-white-fade d-md-none" data-ga-click="Header, click, Nav menu - item:workspaces context:user" data-turbo="false" data-selected-links="/codespaces /codespaces" href="/codespaces">Codespaces</a>
+
+ <div class="d-flex position-relative">
+ <a class="js-selected-navigation-item Header-link flex-auto mt-md-n3 mb-md-n3 py-2 py-md-3 mr-0 mr-md-3 border-top border-md-top-0 border-white-fade" data-ga-click="Header, click, Nav menu - item:marketplace context:user" data-octo-click="marketplace_click" data-octo-dimensions="location:nav_bar" data-turbo="false" data-selected-links=" /marketplace" href="/marketplace">Marketplace</a>
+ </div>
+
+ <a class="js-selected-navigation-item Header-link mt-md-n3 mb-md-n3 py-2 py-md-3 mr-0 mr-md-3 border-top border-md-top-0 border-white-fade" data-ga-click="Header, click, Nav menu - item:explore" data-turbo="false" data-selected-links="/explore /trending /trending/developers /integrations /integrations/feature/code /integrations/feature/collaborate /integrations/feature/ship showcases showcases_search showcases_landing /explore" href="/explore">Explore</a>
+
+ <a class="js-selected-navigation-item Header-link d-block d-md-none py-2 py-md-3 border-top border-md-top-0 border-white-fade" data-ga-click="Header, click, Nav menu - item:Sponsors" data-hydro-click="{&quot;event_type&quot;:&quot;sponsors.button_click&quot;,&quot;payload&quot;:{&quot;button&quot;:&quot;HEADER_SPONSORS_DASHBOARD&quot;,&quot;sponsorable_login&quot;:&quot;rlkamalapurkar&quot;,&quot;originating_url&quot;:&quot;https://github.com/rlkamalapurkar/bodeplot/blob/main/bodeplot.dtx&quot;,&quot;user_id&quot;:30264720}}" data-hydro-click-hmac="d30bfbb34ef6fa7dd7465b704b895b99860f2ab781d3caecba66e46261216335" data-turbo="false" data-selected-links=" /sponsors/accounts" href="/sponsors/accounts">Sponsors</a>
+
+ <a class="Header-link d-block d-md-none mr-0 mr-md-3 py-2 py-md-3 border-top border-md-top-0 border-white-fade" data-turbo="false" href="/settings/profile">Settings</a>
+
+ <a class="Header-link d-block d-md-none mr-0 mr-md-3 py-2 py-md-3 border-top border-md-top-0 border-white-fade" data-turbo="false" href="/rlkamalapurkar">
+ <img class="avatar avatar-user" loading="lazy" decoding="async" src="https://avatars.githubusercontent.com/u/30264720?s=40&amp;v=4" width="20" height="20" alt="@rlkamalapurkar" />
+ rlkamalapurkar
+</a>
+ <!-- '"` --><!-- </textarea></xmp> --></option></form><form data-turbo="false" action="/logout" accept-charset="UTF-8" method="post"><input type="hidden" name="authenticity_token" value="mIxgGAatepzZ5HEXoEUwFwD03aNq7tE9PTvx-dFHSBXcY2gNr1fd-7YpG6QHRpUX1FiSQ8iAZG3_qrGk_PUbSQ" />
+ <button
+ type="submit"
+ class="Header-link mr-0 mr-md-3 py-2 py-md-3 border-top border-md-top-0 border-white-fade d-md-none btn-link d-block width-full text-left"
+ style="padding-left: 2px;"
+ data-analytics-event="{&quot;category&quot;:&quot;Header&quot;,&quot;action&quot;:&quot;sign out&quot;,&quot;label&quot;:&quot;icon:logout&quot;}"
+ >
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-sign-out v-align-middle">
+ <path fill-rule="evenodd" d="M2 2.75C2 1.784 2.784 1 3.75 1h2.5a.75.75 0 010 1.5h-2.5a.25.25 0 00-.25.25v10.5c0 .138.112.25.25.25h2.5a.75.75 0 010 1.5h-2.5A1.75 1.75 0 012 13.25V2.75zm10.44 4.5H6.75a.75.75 0 000 1.5h5.69l-1.97 1.97a.75.75 0 101.06 1.06l3.25-3.25a.75.75 0 000-1.06l-3.25-3.25a.75.75 0 10-1.06 1.06l1.97 1.97z"></path>
+</svg>
+ Sign out
+ </button>
+</form></nav>
+
+ </div>
+
+ <div class="Header-item Header-item--full flex-justify-center d-md-none position-relative">
+ <a
+ class="Header-link"
+ href="https://github.com/"
+ data-hotkey="g d"
+ aria-label="Homepage "
+ data-turbo="false"
+ data-analytics-event="{&quot;category&quot;:&quot;Header&quot;,&quot;action&quot;:&quot;go to dashboard&quot;,&quot;label&quot;:&quot;icon:logo&quot;}"
+>
+ <svg height="32" aria-hidden="true" viewBox="0 0 16 16" version="1.1" width="32" data-view-component="true" class="octicon octicon-mark-github v-align-middle">
+ <path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"></path>
+</svg>
+</a>
+
+ </div>
+
+ <div class="Header-item mr-0 mr-md-3 flex-order-1 flex-md-order-none">
+
+
+<notification-indicator data-channel="eyJjIjoibm90aWZpY2F0aW9uLWNoYW5nZWQ6MzAyNjQ3MjAiLCJ0IjoxNjY3MTA4NTUyfQ==--e8a72a119a537521c17451f4169941629670279627843583e1938df8e56a253d" data-indicator-mode="none" data-tooltip-global="You have unread notifications" data-tooltip-unavailable="Notifications are unavailable at the moment." data-tooltip-none="You have no unread notifications" data-view-component="true" class="js-socket-channel">
+ <a id="AppHeader-notifications-button" href="/notifications"
+ class="Header-link notification-indicator position-relative tooltipped tooltipped-sw"
+
+
+
+ data-hotkey="g n"
+ data-target="notification-indicator.link"
+ aria-label="Notifications"
+
+ data-analytics-event="{&quot;category&quot;:&quot;Header&quot;,&quot;action&quot;:&quot;go to notifications&quot;,&quot;label&quot;:&quot;icon:read&quot;}"
+ >
+
+ <span
+ data-target="notification-indicator.badge"
+ class="mail-status unread" hidden>
+ </span>
+
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-bell">
+ <path d="M8 16a2 2 0 001.985-1.75c.017-.137-.097-.25-.235-.25h-3.5c-.138 0-.252.113-.235.25A2 2 0 008 16z"></path><path fill-rule="evenodd" d="M8 1.5A3.5 3.5 0 004.5 5v2.947c0 .346-.102.683-.294.97l-1.703 2.556a.018.018 0 00-.003.01l.001.006c0 .002.002.004.004.006a.017.017 0 00.006.004l.007.001h10.964l.007-.001a.016.016 0 00.006-.004.016.016 0 00.004-.006l.001-.007a.017.017 0 00-.003-.01l-1.703-2.554a1.75 1.75 0 01-.294-.97V5A3.5 3.5 0 008 1.5zM3 5a5 5 0 0110 0v2.947c0 .05.015.098.042.139l1.703 2.555A1.518 1.518 0 0113.482 13H2.518a1.518 1.518 0 01-1.263-2.36l1.703-2.554A.25.25 0 003 7.947V5z"></path>
+</svg>
+ </a>
+
+</notification-indicator>
+ </div>
+
+
+ <div class="Header-item position-relative d-none d-md-flex">
+ <details class="details-overlay details-reset">
+ <summary
+ class="Header-link"
+ aria-label="Create new…"
+ data-analytics-event="{&quot;category&quot;:&quot;Header&quot;,&quot;action&quot;:&quot;create new&quot;,&quot;label&quot;:&quot;icon:add&quot;}"
+ >
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-plus">
+ <path fill-rule="evenodd" d="M7.75 2a.75.75 0 01.75.75V7h4.25a.75.75 0 110 1.5H8.5v4.25a.75.75 0 11-1.5 0V8.5H2.75a.75.75 0 010-1.5H7V2.75A.75.75 0 017.75 2z"></path>
+</svg> <span class="dropdown-caret"></span>
+ </summary>
+ <details-menu class="dropdown-menu dropdown-menu-sw">
+
+<a role="menuitem" class="dropdown-item" href="/new" data-ga-click="Header, create new repository">
+ New repository
+</a>
+
+ <a role="menuitem" class="dropdown-item" href="/new/import" data-ga-click="Header, import a repository">
+ Import repository
+ </a>
+
+
+<a role="menuitem" class="dropdown-item" href="https://gist.github.com/" data-ga-click="Header, create new gist">
+ New gist
+</a>
+
+ <a role="menuitem" class="dropdown-item" href="/organizations/new" data-ga-click="Header, create new organization">
+ New organization
+ </a>
+
+
+
+ </details-menu>
+</details>
+
+ </div>
+
+ <div class="Header-item position-relative mr-0 d-none d-md-flex">
+
+ <details class="details-overlay details-reset js-feature-preview-indicator-container" data-feature-preview-indicator-src="/users/rlkamalapurkar/feature_preview/indicator_check">
+
+ <summary
+ class="Header-link"
+ aria-label="View profile and more"
+ data-analytics-event="{&quot;category&quot;:&quot;Header&quot;,&quot;action&quot;:&quot;show menu&quot;,&quot;label&quot;:&quot;icon:avatar&quot;}"
+ >
+ <img src="https://avatars.githubusercontent.com/u/30264720?s=40&amp;v=4" alt="@rlkamalapurkar" size="20" height="20" width="20" data-view-component="true" class="avatar avatar-small circle" />
+ <span class="unread-indicator js-feature-preview-indicator" style="top: 1px;" hidden></span>
+ <span class="dropdown-caret"></span>
+ </summary>
+ <details-menu
+ class="dropdown-menu dropdown-menu-sw"
+ style="width: 180px"
+
+ preload>
+ <include-fragment src="/users/30264720/menu" loading="lazy">
+ <p class="text-center mt-3" data-hide-on-error>
+ <svg style="box-sizing: content-box; color: var(--color-icon-primary);" width="32" height="32" viewBox="0 0 16 16" fill="none" data-view-component="true" class="anim-rotate">
+ <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" />
+ <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke" />
+</svg>
+ </p>
+ <p class="ml-1 mb-2 mt-2 color-fg-default" data-show-on-error>
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
+ <path fill-rule="evenodd" d="M8.22 1.754a.25.25 0 00-.44 0L1.698 13.132a.25.25 0 00.22.368h12.164a.25.25 0 00.22-.368L8.22 1.754zm-1.763-.707c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0114.082 15H1.918a1.75 1.75 0 01-1.543-2.575L6.457 1.047zM9 11a1 1 0 11-2 0 1 1 0 012 0zm-.25-5.25a.75.75 0 00-1.5 0v2.5a.75.75 0 001.5 0v-2.5z"></path>
+</svg>
+ Sorry, something went wrong.
+ </p>
+ </include-fragment>
+ </details-menu>
+</details>
+
+ </div>
+</header>
+
+
+ </div>
+
+ <div id="start-of-content" class="show-on-focus"></div>
+
+
+
+
+
+
+
+ <div id="js-flash-container" data-turbo-replace>
+
+
+
+
+ <template class="js-flash-template">
+
+<div class="flash flash-full {{ className }}">
+ <div class="px-2" >
+ <button autofocus class="flash-close js-flash-close" type="button" aria-label="Dismiss this message">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x">
+ <path fill-rule="evenodd" d="M3.72 3.72a.75.75 0 011.06 0L8 6.94l3.22-3.22a.75.75 0 111.06 1.06L9.06 8l3.22 3.22a.75.75 0 11-1.06 1.06L8 9.06l-3.22 3.22a.75.75 0 01-1.06-1.06L6.94 8 3.72 4.78a.75.75 0 010-1.06z"></path>
+</svg>
+ </button>
+ <div aria-atomic="true" role="alert" class="js-flash-alert">
+
+ <div>{{ message }}</div>
+
+ </div>
+ </div>
+</div>
+ </template>
+</div>
+
+
+
+ <include-fragment class="js-notification-shelf-include-fragment" data-base-src="https://github.com/notifications/beta/shelf"></include-fragment>
+
+
+
+
+
+ <details
+ class="details-reset details-overlay details-overlay-dark js-command-palette-dialog"
+ id="command-palette-pjax-container"
+ data-turbo-replace
+>
+ <summary aria-label="command palette trigger">
+ </summary>
+ <details-dialog class="command-palette-details-dialog d-flex flex-column flex-justify-center height-fit" aria-label="command palette">
+ <command-palette
+ class="command-palette color-bg-default rounded-3 border color-shadow-small"
+ return-to=/rlkamalapurkar/bodeplot/blob/main/bodeplot.dtx
+ user-id="30264720"
+ activation-hotkey="Mod+k,Mod+Alt+k"
+ command-mode-hotkey="Mod+Shift+k"
+ data-action="
+ command-palette-input-ready:command-palette#inputReady
+ command-palette-page-stack-updated:command-palette#updateInputScope
+ itemsUpdated:command-palette#itemsUpdated
+ keydown:command-palette#onKeydown
+ loadingStateChanged:command-palette#loadingStateChanged
+ selectedItemChanged:command-palette#selectedItemChanged
+ pageFetchError:command-palette#pageFetchError
+ ">
+
+ <command-palette-mode
+ data-char="#"
+ data-scope-types="[&quot;&quot;]"
+ data-placeholder="Search issues and pull requests"
+ ></command-palette-mode>
+ <command-palette-mode
+ data-char="#"
+ data-scope-types="[&quot;owner&quot;,&quot;repository&quot;]"
+ data-placeholder="Search issues, pull requests, discussions, and projects"
+ ></command-palette-mode>
+ <command-palette-mode
+ data-char="!"
+ data-scope-types="[&quot;owner&quot;,&quot;repository&quot;]"
+ data-placeholder="Search projects"
+ ></command-palette-mode>
+ <command-palette-mode
+ data-char="@"
+ data-scope-types="[&quot;&quot;]"
+ data-placeholder="Search or jump to a user, organization, or repository"
+ ></command-palette-mode>
+ <command-palette-mode
+ data-char="@"
+ data-scope-types="[&quot;owner&quot;]"
+ data-placeholder="Search or jump to a repository"
+ ></command-palette-mode>
+ <command-palette-mode
+ data-char="/"
+ data-scope-types="[&quot;repository&quot;]"
+ data-placeholder="Search files"
+ ></command-palette-mode>
+ <command-palette-mode
+ data-char="?"
+ ></command-palette-mode>
+ <command-palette-mode
+ data-char="&gt;"
+ data-placeholder="Run a command"
+ ></command-palette-mode>
+ <command-palette-mode
+ data-char=""
+ data-scope-types="[&quot;&quot;]"
+ data-placeholder="Search or jump to..."
+ ></command-palette-mode>
+ <command-palette-mode
+ data-char=""
+ data-scope-types="[&quot;owner&quot;]"
+ data-placeholder="Search or jump to..."
+ ></command-palette-mode>
+ <command-palette-mode
+ class="js-command-palette-default-mode"
+ data-char=""
+ data-placeholder="Search or jump to..."
+ ></command-palette-mode>
+
+ <command-palette-input placeholder="Search or jump to..."
+
+ data-action="
+ command-palette-input:command-palette#onInput
+ command-palette-select:command-palette#onSelect
+ command-palette-descope:command-palette#onDescope
+ command-palette-cleared:command-palette#onInputClear
+ "
+ >
+ <div class="js-search-icon d-flex flex-items-center mr-2" style="height: 26px">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-search color-fg-muted">
+ <path fill-rule="evenodd" d="M11.5 7a4.499 4.499 0 11-8.998 0A4.499 4.499 0 0111.5 7zm-.82 4.74a6 6 0 111.06-1.06l3.04 3.04a.75.75 0 11-1.06 1.06l-3.04-3.04z"></path>
+</svg>
+ </div>
+ <div class="js-spinner d-flex flex-items-center mr-2 color-fg-muted" hidden>
+ <svg aria-label="Loading" class="anim-rotate" viewBox="0 0 16 16" fill="none" width="16" height="16">
+ <circle
+ cx="8"
+ cy="8"
+ r="7"
+ stroke="currentColor"
+ stroke-opacity="0.25"
+ stroke-width="2"
+ vector-effect="non-scaling-stroke"
+ ></circle>
+ <path
+ d="M15 8a7.002 7.002 0 00-7-7"
+ stroke="currentColor"
+ stroke-width="2"
+ stroke-linecap="round"
+ vector-effect="non-scaling-stroke"
+ ></path>
+ </svg>
+ </div>
+ <command-palette-scope >
+ <div data-target="command-palette-scope.placeholder" hidden class="color-fg-subtle">/&nbsp;&nbsp;<span class="text-semibold color-fg-default">...</span>&nbsp;&nbsp;/&nbsp;&nbsp;</div>
+ <command-palette-token
+ data-text="rlkamalapurkar"
+ data-id="MDQ6VXNlcjMwMjY0NzIw"
+ data-type="owner"
+ data-value="rlkamalapurkar"
+ data-targets="command-palette-scope.tokens"
+ class="color-fg-default text-semibold"
+ style="white-space:nowrap;line-height:20px;"
+ >rlkamalapurkar<span class="color-fg-subtle text-normal">&nbsp;&nbsp;/&nbsp;&nbsp;</span></command-palette-token>
+ <command-palette-token
+ data-text="bodeplot"
+ data-id="R_kgDOGPTXYA"
+ data-type="repository"
+ data-value="bodeplot"
+ data-targets="command-palette-scope.tokens"
+ class="color-fg-default text-semibold"
+ style="white-space:nowrap;line-height:20px;"
+ >bodeplot<span class="color-fg-subtle text-normal">&nbsp;&nbsp;/&nbsp;&nbsp;</span></command-palette-token>
+ </command-palette-scope>
+ <div class="command-palette-input-group flex-1 form-control border-0 box-shadow-none" style="z-index: 0">
+ <div class="command-palette-typeahead position-absolute d-flex flex-items-center Truncate">
+ <span class="typeahead-segment input-mirror" data-target="command-palette-input.mirror"></span>
+ <span class="Truncate-text" data-target="command-palette-input.typeaheadText"></span>
+ <span class="typeahead-segment" data-target="command-palette-input.typeaheadPlaceholder"></span>
+ </div>
+ <input
+ class="js-overlay-input typeahead-input d-none"
+ disabled
+ tabindex="-1"
+ aria-label="Hidden input for typeahead"
+ >
+ <input
+ type="text"
+ autocomplete="off"
+ autocorrect="off"
+ autocapitalize="off"
+ spellcheck="false"
+ class="js-input typeahead-input form-control border-0 box-shadow-none input-block width-full no-focus-indicator"
+ aria-label="Command palette input"
+ aria-haspopup="listbox"
+ aria-expanded="false"
+ aria-autocomplete="list"
+ aria-controls="command-palette-page-stack"
+ role="combobox"
+ data-action="
+ input:command-palette-input#onInput
+ keydown:command-palette-input#onKeydown
+ "
+ >
+ </div>
+ <div data-view-component="true" class="position-relative d-inline-block">
+ <button aria-keyshortcuts="Control+Backspace" data-action="click:command-palette-input#onClear keypress:command-palette-input#onClear" data-target="command-palette-input.clearButton" id="command-palette-clear-button" hidden="hidden" type="button" data-view-component="true" class="btn-octicon command-palette-input-clear-button"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x-circle-fill">
+ <path fill-rule="evenodd" d="M2.343 13.657A8 8 0 1113.657 2.343 8 8 0 012.343 13.657zM6.03 4.97a.75.75 0 00-1.06 1.06L6.94 8 4.97 9.97a.75.75 0 101.06 1.06L8 9.06l1.97 1.97a.75.75 0 101.06-1.06L9.06 8l1.97-1.97a.75.75 0 10-1.06-1.06L8 6.94 6.03 4.97z"></path>
+</svg>
+</button> <tool-tip for="command-palette-clear-button" data-direction="w" data-type="label" data-view-component="true" class="sr-only position-absolute">Clear Command Palette</tool-tip>
+</div>
+ </command-palette-input>
+
+ <command-palette-page-stack
+ data-default-scope-id="R_kgDOGPTXYA"
+ data-default-scope-type="Repository"
+ data-action="command-palette-page-octicons-cached:command-palette-page-stack#cacheOcticons"
+ >
+ <command-palette-tip
+ class="color-fg-muted f6 px-3 py-1 my-2"
+ data-scope-types="[&quot;&quot;,&quot;owner&quot;,&quot;repository&quot;]"
+ data-mode=""
+ data-value="">
+ <div class="d-flex flex-items-start flex-justify-between">
+ <div>
+ <span class="text-bold">Tip:</span>
+ Type <kbd class="hx_kbd">#</kbd> to search pull requests
+ </div>
+ <div class="ml-2 flex-shrink-0">
+ Type <kbd class="hx_kbd">?</kbd> for help and tips
+ </div>
+ </div>
+ </command-palette-tip>
+ <command-palette-tip
+ class="color-fg-muted f6 px-3 py-1 my-2"
+ data-scope-types="[&quot;&quot;,&quot;owner&quot;,&quot;repository&quot;]"
+ data-mode=""
+ data-value="">
+ <div class="d-flex flex-items-start flex-justify-between">
+ <div>
+ <span class="text-bold">Tip:</span>
+ Type <kbd class="hx_kbd">#</kbd> to search issues
+ </div>
+ <div class="ml-2 flex-shrink-0">
+ Type <kbd class="hx_kbd">?</kbd> for help and tips
+ </div>
+ </div>
+ </command-palette-tip>
+ <command-palette-tip
+ class="color-fg-muted f6 px-3 py-1 my-2"
+ data-scope-types="[&quot;owner&quot;,&quot;repository&quot;]"
+ data-mode=""
+ data-value="">
+ <div class="d-flex flex-items-start flex-justify-between">
+ <div>
+ <span class="text-bold">Tip:</span>
+ Type <kbd class="hx_kbd">#</kbd> to search discussions
+ </div>
+ <div class="ml-2 flex-shrink-0">
+ Type <kbd class="hx_kbd">?</kbd> for help and tips
+ </div>
+ </div>
+ </command-palette-tip>
+ <command-palette-tip
+ class="color-fg-muted f6 px-3 py-1 my-2"
+ data-scope-types="[&quot;owner&quot;,&quot;repository&quot;]"
+ data-mode=""
+ data-value="">
+ <div class="d-flex flex-items-start flex-justify-between">
+ <div>
+ <span class="text-bold">Tip:</span>
+ Type <kbd class="hx_kbd">!</kbd> to search projects
+ </div>
+ <div class="ml-2 flex-shrink-0">
+ Type <kbd class="hx_kbd">?</kbd> for help and tips
+ </div>
+ </div>
+ </command-palette-tip>
+ <command-palette-tip
+ class="color-fg-muted f6 px-3 py-1 my-2"
+ data-scope-types="[&quot;owner&quot;]"
+ data-mode=""
+ data-value="">
+ <div class="d-flex flex-items-start flex-justify-between">
+ <div>
+ <span class="text-bold">Tip:</span>
+ Type <kbd class="hx_kbd">@</kbd> to search teams
+ </div>
+ <div class="ml-2 flex-shrink-0">
+ Type <kbd class="hx_kbd">?</kbd> for help and tips
+ </div>
+ </div>
+ </command-palette-tip>
+ <command-palette-tip
+ class="color-fg-muted f6 px-3 py-1 my-2"
+ data-scope-types="[&quot;&quot;]"
+ data-mode=""
+ data-value="">
+ <div class="d-flex flex-items-start flex-justify-between">
+ <div>
+ <span class="text-bold">Tip:</span>
+ Type <kbd class="hx_kbd">@</kbd> to search people and organizations
+ </div>
+ <div class="ml-2 flex-shrink-0">
+ Type <kbd class="hx_kbd">?</kbd> for help and tips
+ </div>
+ </div>
+ </command-palette-tip>
+ <command-palette-tip
+ class="color-fg-muted f6 px-3 py-1 my-2"
+ data-scope-types="[&quot;&quot;,&quot;owner&quot;,&quot;repository&quot;]"
+ data-mode=""
+ data-value="">
+ <div class="d-flex flex-items-start flex-justify-between">
+ <div>
+ <span class="text-bold">Tip:</span>
+ Type <kbd class="hx_kbd">&gt;</kbd> to activate command mode
+ </div>
+ <div class="ml-2 flex-shrink-0">
+ Type <kbd class="hx_kbd">?</kbd> for help and tips
+ </div>
+ </div>
+ </command-palette-tip>
+ <command-palette-tip
+ class="color-fg-muted f6 px-3 py-1 my-2"
+ data-scope-types="[&quot;&quot;,&quot;owner&quot;,&quot;repository&quot;]"
+ data-mode=""
+ data-value="">
+ <div class="d-flex flex-items-start flex-justify-between">
+ <div>
+ <span class="text-bold">Tip:</span>
+ Go to your accessibility settings to change your keyboard shortcuts
+ </div>
+ <div class="ml-2 flex-shrink-0">
+ Type <kbd class="hx_kbd">?</kbd> for help and tips
+ </div>
+ </div>
+ </command-palette-tip>
+ <command-palette-tip
+ class="color-fg-muted f6 px-3 py-1 my-2"
+ data-scope-types="[&quot;&quot;,&quot;owner&quot;,&quot;repository&quot;]"
+ data-mode="#"
+ data-value="">
+ <div class="d-flex flex-items-start flex-justify-between">
+ <div>
+ <span class="text-bold">Tip:</span>
+ Type author:@me to search your content
+ </div>
+ <div class="ml-2 flex-shrink-0">
+ Type <kbd class="hx_kbd">?</kbd> for help and tips
+ </div>
+ </div>
+ </command-palette-tip>
+ <command-palette-tip
+ class="color-fg-muted f6 px-3 py-1 my-2"
+ data-scope-types="[&quot;&quot;,&quot;owner&quot;,&quot;repository&quot;]"
+ data-mode="#"
+ data-value="">
+ <div class="d-flex flex-items-start flex-justify-between">
+ <div>
+ <span class="text-bold">Tip:</span>
+ Type is:pr to filter to pull requests
+ </div>
+ <div class="ml-2 flex-shrink-0">
+ Type <kbd class="hx_kbd">?</kbd> for help and tips
+ </div>
+ </div>
+ </command-palette-tip>
+ <command-palette-tip
+ class="color-fg-muted f6 px-3 py-1 my-2"
+ data-scope-types="[&quot;&quot;,&quot;owner&quot;,&quot;repository&quot;]"
+ data-mode="#"
+ data-value="">
+ <div class="d-flex flex-items-start flex-justify-between">
+ <div>
+ <span class="text-bold">Tip:</span>
+ Type is:issue to filter to issues
+ </div>
+ <div class="ml-2 flex-shrink-0">
+ Type <kbd class="hx_kbd">?</kbd> for help and tips
+ </div>
+ </div>
+ </command-palette-tip>
+ <command-palette-tip
+ class="color-fg-muted f6 px-3 py-1 my-2"
+ data-scope-types="[&quot;owner&quot;,&quot;repository&quot;]"
+ data-mode="#"
+ data-value="">
+ <div class="d-flex flex-items-start flex-justify-between">
+ <div>
+ <span class="text-bold">Tip:</span>
+ Type is:project to filter to projects
+ </div>
+ <div class="ml-2 flex-shrink-0">
+ Type <kbd class="hx_kbd">?</kbd> for help and tips
+ </div>
+ </div>
+ </command-palette-tip>
+ <command-palette-tip
+ class="color-fg-muted f6 px-3 py-1 my-2"
+ data-scope-types="[&quot;&quot;,&quot;owner&quot;,&quot;repository&quot;]"
+ data-mode="#"
+ data-value="">
+ <div class="d-flex flex-items-start flex-justify-between">
+ <div>
+ <span class="text-bold">Tip:</span>
+ Type is:open to filter to open content
+ </div>
+ <div class="ml-2 flex-shrink-0">
+ Type <kbd class="hx_kbd">?</kbd> for help and tips
+ </div>
+ </div>
+ </command-palette-tip>
+ <command-palette-tip class="mx-3 my-2 flash flash-error d-flex flex-items-center" data-scope-types="*" data-on-error>
+ <div>
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
+ <path fill-rule="evenodd" d="M8.22 1.754a.25.25 0 00-.44 0L1.698 13.132a.25.25 0 00.22.368h12.164a.25.25 0 00.22-.368L8.22 1.754zm-1.763-.707c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0114.082 15H1.918a1.75 1.75 0 01-1.543-2.575L6.457 1.047zM9 11a1 1 0 11-2 0 1 1 0 012 0zm-.25-5.25a.75.75 0 00-1.5 0v2.5a.75.75 0 001.5 0v-2.5z"></path>
+</svg>
+ </div>
+ <div class="px-2">
+ We’ve encountered an error and some results aren't available at this time. Type a new search or try again later.
+ </div>
+ </command-palette-tip>
+ <command-palette-tip class="h4 color-fg-default pl-3 pb-2 pt-3" data-on-empty data-scope-types="*" data-match-mode="[^?]|^$">
+ No results matched your search
+ </command-palette-tip>
+
+ <div hidden>
+
+ <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="arrow-right-color-fg-muted">
+ <svg height="16" class="octicon octicon-arrow-right color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M8.22 2.97a.75.75 0 011.06 0l4.25 4.25a.75.75 0 010 1.06l-4.25 4.25a.75.75 0 01-1.06-1.06l2.97-2.97H3.75a.75.75 0 010-1.5h7.44L8.22 4.03a.75.75 0 010-1.06z"></path></svg>
+ </div>
+ <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="arrow-right-color-fg-default">
+ <svg height="16" class="octicon octicon-arrow-right color-fg-default" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M8.22 2.97a.75.75 0 011.06 0l4.25 4.25a.75.75 0 010 1.06l-4.25 4.25a.75.75 0 01-1.06-1.06l2.97-2.97H3.75a.75.75 0 010-1.5h7.44L8.22 4.03a.75.75 0 010-1.06z"></path></svg>
+ </div>
+ <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="codespaces-color-fg-muted">
+ <svg height="16" class="octicon octicon-codespaces color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M2 1.75C2 .784 2.784 0 3.75 0h8.5C13.216 0 14 .784 14 1.75v5a1.75 1.75 0 01-1.75 1.75h-8.5A1.75 1.75 0 012 6.75v-5zm1.75-.25a.25.25 0 00-.25.25v5c0 .138.112.25.25.25h8.5a.25.25 0 00.25-.25v-5a.25.25 0 00-.25-.25h-8.5zM0 11.25c0-.966.784-1.75 1.75-1.75h12.5c.966 0 1.75.784 1.75 1.75v3A1.75 1.75 0 0114.25 16H1.75A1.75 1.75 0 010 14.25v-3zM1.75 11a.25.25 0 00-.25.25v3c0 .138.112.25.25.25h12.5a.25.25 0 00.25-.25v-3a.25.25 0 00-.25-.25H1.75z"></path><path fill-rule="evenodd" d="M3 12.75a.75.75 0 01.75-.75h.5a.75.75 0 010 1.5h-.5a.75.75 0 01-.75-.75zm4 0a.75.75 0 01.75-.75h4.5a.75.75 0 010 1.5h-4.5a.75.75 0 01-.75-.75z"></path></svg>
+ </div>
+ <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="copy-color-fg-muted">
+ <svg height="16" class="octicon octicon-copy color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 010 1.5h-1.5a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-1.5a.75.75 0 011.5 0v1.5A1.75 1.75 0 019.25 16h-7.5A1.75 1.75 0 010 14.25v-7.5z"></path><path fill-rule="evenodd" d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0114.25 11h-7.5A1.75 1.75 0 015 9.25v-7.5zm1.75-.25a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-7.5a.25.25 0 00-.25-.25h-7.5z"></path></svg>
+ </div>
+ <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="dash-color-fg-muted">
+ <svg height="16" class="octicon octicon-dash color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M2 7.75A.75.75 0 012.75 7h10a.75.75 0 010 1.5h-10A.75.75 0 012 7.75z"></path></svg>
+ </div>
+ <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="file-color-fg-muted">
+ <svg height="16" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M3.75 1.5a.25.25 0 00-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 00.25-.25V6h-2.75A1.75 1.75 0 019 4.25V1.5H3.75zm6.75.062V4.25c0 .138.112.25.25.25h2.688a.252.252 0 00-.011-.013l-2.914-2.914a.272.272 0 00-.013-.011zM2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0113.25 16h-9.5A1.75 1.75 0 012 14.25V1.75z"></path></svg>
+ </div>
+ <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="gear-color-fg-muted">
+ <svg height="16" class="octicon octicon-gear color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M7.429 1.525a6.593 6.593 0 011.142 0c.036.003.108.036.137.146l.289 1.105c.147.56.55.967.997 1.189.174.086.341.183.501.29.417.278.97.423 1.53.27l1.102-.303c.11-.03.175.016.195.046.219.31.41.641.573.989.014.031.022.11-.059.19l-.815.806c-.411.406-.562.957-.53 1.456a4.588 4.588 0 010 .582c-.032.499.119 1.05.53 1.456l.815.806c.08.08.073.159.059.19a6.494 6.494 0 01-.573.99c-.02.029-.086.074-.195.045l-1.103-.303c-.559-.153-1.112-.008-1.529.27-.16.107-.327.204-.5.29-.449.222-.851.628-.998 1.189l-.289 1.105c-.029.11-.101.143-.137.146a6.613 6.613 0 01-1.142 0c-.036-.003-.108-.037-.137-.146l-.289-1.105c-.147-.56-.55-.967-.997-1.189a4.502 4.502 0 01-.501-.29c-.417-.278-.97-.423-1.53-.27l-1.102.303c-.11.03-.175-.016-.195-.046a6.492 6.492 0 01-.573-.989c-.014-.031-.022-.11.059-.19l.815-.806c.411-.406.562-.957.53-1.456a4.587 4.587 0 010-.582c.032-.499-.119-1.05-.53-1.456l-.815-.806c-.08-.08-.073-.159-.059-.19a6.44 6.44 0 01.573-.99c.02-.029.086-.075.195-.045l1.103.303c.559.153 1.112.008 1.529-.27.16-.107.327-.204.5-.29.449-.222.851-.628.998-1.189l.289-1.105c.029-.11.101-.143.137-.146zM8 0c-.236 0-.47.01-.701.03-.743.065-1.29.615-1.458 1.261l-.29 1.106c-.017.066-.078.158-.211.224a5.994 5.994 0 00-.668.386c-.123.082-.233.09-.3.071L3.27 2.776c-.644-.177-1.392.02-1.82.63a7.977 7.977 0 00-.704 1.217c-.315.675-.111 1.422.363 1.891l.815.806c.05.048.098.147.088.294a6.084 6.084 0 000 .772c.01.147-.038.246-.088.294l-.815.806c-.474.469-.678 1.216-.363 1.891.2.428.436.835.704 1.218.428.609 1.176.806 1.82.63l1.103-.303c.066-.019.176-.011.299.071.213.143.436.272.668.386.133.066.194.158.212.224l.289 1.106c.169.646.715 1.196 1.458 1.26a8.094 8.094 0 001.402 0c.743-.064 1.29-.614 1.458-1.26l.29-1.106c.017-.066.078-.158.211-.224a5.98 5.98 0 00.668-.386c.123-.082.233-.09.3-.071l1.102.302c.644.177 1.392-.02 1.82-.63.268-.382.505-.789.704-1.217.315-.675.111-1.422-.364-1.891l-.814-.806c-.05-.048-.098-.147-.088-.294a6.1 6.1 0 000-.772c-.01-.147.039-.246.088-.294l.814-.806c.475-.469.679-1.216.364-1.891a7.992 7.992 0 00-.704-1.218c-.428-.609-1.176-.806-1.82-.63l-1.103.303c-.066.019-.176.011-.299-.071a5.991 5.991 0 00-.668-.386c-.133-.066-.194-.158-.212-.224L10.16 1.29C9.99.645 9.444.095 8.701.031A8.094 8.094 0 008 0zm1.5 8a1.5 1.5 0 11-3 0 1.5 1.5 0 013 0zM11 8a3 3 0 11-6 0 3 3 0 016 0z"></path></svg>
+ </div>
+ <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="lock-color-fg-muted">
+ <svg height="16" class="octicon octicon-lock color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M4 4v2h-.25A1.75 1.75 0 002 7.75v5.5c0 .966.784 1.75 1.75 1.75h8.5A1.75 1.75 0 0014 13.25v-5.5A1.75 1.75 0 0012.25 6H12V4a4 4 0 10-8 0zm6.5 2V4a2.5 2.5 0 00-5 0v2h5zM12 7.5h.25a.25.25 0 01.25.25v5.5a.25.25 0 01-.25.25h-8.5a.25.25 0 01-.25-.25v-5.5a.25.25 0 01.25-.25H12z"></path></svg>
+ </div>
+ <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="moon-color-fg-muted">
+ <svg height="16" class="octicon octicon-moon color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M9.598 1.591a.75.75 0 01.785-.175 7 7 0 11-8.967 8.967.75.75 0 01.961-.96 5.5 5.5 0 007.046-7.046.75.75 0 01.175-.786zm1.616 1.945a7 7 0 01-7.678 7.678 5.5 5.5 0 107.678-7.678z"></path></svg>
+ </div>
+ <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="person-color-fg-muted">
+ <svg height="16" class="octicon octicon-person color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M10.5 5a2.5 2.5 0 11-5 0 2.5 2.5 0 015 0zm.061 3.073a4 4 0 10-5.123 0 6.004 6.004 0 00-3.431 5.142.75.75 0 001.498.07 4.5 4.5 0 018.99 0 .75.75 0 101.498-.07 6.005 6.005 0 00-3.432-5.142z"></path></svg>
+ </div>
+ <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="pencil-color-fg-muted">
+ <svg height="16" class="octicon octicon-pencil color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M11.013 1.427a1.75 1.75 0 012.474 0l1.086 1.086a1.75 1.75 0 010 2.474l-8.61 8.61c-.21.21-.47.364-.756.445l-3.251.93a.75.75 0 01-.927-.928l.929-3.25a1.75 1.75 0 01.445-.758l8.61-8.61zm1.414 1.06a.25.25 0 00-.354 0L10.811 3.75l1.439 1.44 1.263-1.263a.25.25 0 000-.354l-1.086-1.086zM11.189 6.25L9.75 4.81l-6.286 6.287a.25.25 0 00-.064.108l-.558 1.953 1.953-.558a.249.249 0 00.108-.064l6.286-6.286z"></path></svg>
+ </div>
+ <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="issue-opened-open">
+ <svg height="16" class="octicon octicon-issue-opened open" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path d="M8 9.5a1.5 1.5 0 100-3 1.5 1.5 0 000 3z"></path><path fill-rule="evenodd" d="M8 0a8 8 0 100 16A8 8 0 008 0zM1.5 8a6.5 6.5 0 1113 0 6.5 6.5 0 01-13 0z"></path></svg>
+ </div>
+ <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="git-pull-request-draft-color-fg-muted">
+ <svg height="16" class="octicon octicon-git-pull-request-draft color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M2.5 3.25a.75.75 0 111.5 0 .75.75 0 01-1.5 0zM3.25 1a2.25 2.25 0 00-.75 4.372v5.256a2.251 2.251 0 101.5 0V5.372A2.25 2.25 0 003.25 1zm0 11a.75.75 0 100 1.5.75.75 0 000-1.5zm9.5 3a2.25 2.25 0 100-4.5 2.25 2.25 0 000 4.5zm0-3a.75.75 0 100 1.5.75.75 0 000-1.5z"></path><path d="M14 7.5a1.25 1.25 0 11-2.5 0 1.25 1.25 0 012.5 0zm0-4.25a1.25 1.25 0 11-2.5 0 1.25 1.25 0 012.5 0z"></path></svg>
+ </div>
+ <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="search-color-fg-muted">
+ <svg height="16" class="octicon octicon-search color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M11.5 7a4.499 4.499 0 11-8.998 0A4.499 4.499 0 0111.5 7zm-.82 4.74a6 6 0 111.06-1.06l3.04 3.04a.75.75 0 11-1.06 1.06l-3.04-3.04z"></path></svg>
+ </div>
+ <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="sun-color-fg-muted">
+ <svg height="16" class="octicon octicon-sun color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M8 10.5a2.5 2.5 0 100-5 2.5 2.5 0 000 5zM8 12a4 4 0 100-8 4 4 0 000 8zM8 0a.75.75 0 01.75.75v1.5a.75.75 0 01-1.5 0V.75A.75.75 0 018 0zm0 13a.75.75 0 01.75.75v1.5a.75.75 0 01-1.5 0v-1.5A.75.75 0 018 13zM2.343 2.343a.75.75 0 011.061 0l1.06 1.061a.75.75 0 01-1.06 1.06l-1.06-1.06a.75.75 0 010-1.06zm9.193 9.193a.75.75 0 011.06 0l1.061 1.06a.75.75 0 01-1.06 1.061l-1.061-1.06a.75.75 0 010-1.061zM16 8a.75.75 0 01-.75.75h-1.5a.75.75 0 010-1.5h1.5A.75.75 0 0116 8zM3 8a.75.75 0 01-.75.75H.75a.75.75 0 010-1.5h1.5A.75.75 0 013 8zm10.657-5.657a.75.75 0 010 1.061l-1.061 1.06a.75.75 0 11-1.06-1.06l1.06-1.06a.75.75 0 011.06 0zm-9.193 9.193a.75.75 0 010 1.06l-1.06 1.061a.75.75 0 11-1.061-1.06l1.06-1.061a.75.75 0 011.061 0z"></path></svg>
+ </div>
+ <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="sync-color-fg-muted">
+ <svg height="16" class="octicon octicon-sync color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M8 2.5a5.487 5.487 0 00-4.131 1.869l1.204 1.204A.25.25 0 014.896 6H1.25A.25.25 0 011 5.75V2.104a.25.25 0 01.427-.177l1.38 1.38A7.001 7.001 0 0114.95 7.16a.75.75 0 11-1.49.178A5.501 5.501 0 008 2.5zM1.705 8.005a.75.75 0 01.834.656 5.501 5.501 0 009.592 2.97l-1.204-1.204a.25.25 0 01.177-.427h3.646a.25.25 0 01.25.25v3.646a.25.25 0 01-.427.177l-1.38-1.38A7.001 7.001 0 011.05 8.84a.75.75 0 01.656-.834z"></path></svg>
+ </div>
+ <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="trash-color-fg-muted">
+ <svg height="16" class="octicon octicon-trash color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M6.5 1.75a.25.25 0 01.25-.25h2.5a.25.25 0 01.25.25V3h-3V1.75zm4.5 0V3h2.25a.75.75 0 010 1.5H2.75a.75.75 0 010-1.5H5V1.75C5 .784 5.784 0 6.75 0h2.5C10.216 0 11 .784 11 1.75zM4.496 6.675a.75.75 0 10-1.492.15l.66 6.6A1.75 1.75 0 005.405 15h5.19c.9 0 1.652-.681 1.741-1.576l.66-6.6a.75.75 0 00-1.492-.149l-.66 6.6a.25.25 0 01-.249.225h-5.19a.25.25 0 01-.249-.225l-.66-6.6z"></path></svg>
+ </div>
+ <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="key-color-fg-muted">
+ <svg height="16" class="octicon octicon-key color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M6.5 5.5a4 4 0 112.731 3.795.75.75 0 00-.768.18L7.44 10.5H6.25a.75.75 0 00-.75.75v1.19l-.06.06H4.25a.75.75 0 00-.75.75v1.19l-.06.06H1.75a.25.25 0 01-.25-.25v-1.69l5.024-5.023a.75.75 0 00.181-.768A3.995 3.995 0 016.5 5.5zm4-5.5a5.5 5.5 0 00-5.348 6.788L.22 11.72a.75.75 0 00-.22.53v2C0 15.216.784 16 1.75 16h2a.75.75 0 00.53-.22l.5-.5a.75.75 0 00.22-.53V14h.75a.75.75 0 00.53-.22l.5-.5a.75.75 0 00.22-.53V12h.75a.75.75 0 00.53-.22l.932-.932A5.5 5.5 0 1010.5 0zm.5 6a1 1 0 100-2 1 1 0 000 2z"></path></svg>
+ </div>
+ <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="comment-discussion-color-fg-muted">
+ <svg height="16" class="octicon octicon-comment-discussion color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M1.5 2.75a.25.25 0 01.25-.25h8.5a.25.25 0 01.25.25v5.5a.25.25 0 01-.25.25h-3.5a.75.75 0 00-.53.22L3.5 11.44V9.25a.75.75 0 00-.75-.75h-1a.25.25 0 01-.25-.25v-5.5zM1.75 1A1.75 1.75 0 000 2.75v5.5C0 9.216.784 10 1.75 10H2v1.543a1.457 1.457 0 002.487 1.03L7.061 10h3.189A1.75 1.75 0 0012 8.25v-5.5A1.75 1.75 0 0010.25 1h-8.5zM14.5 4.75a.25.25 0 00-.25-.25h-.5a.75.75 0 110-1.5h.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0114.25 12H14v1.543a1.457 1.457 0 01-2.487 1.03L9.22 12.28a.75.75 0 111.06-1.06l2.22 2.22v-2.19a.75.75 0 01.75-.75h1a.25.25 0 00.25-.25v-5.5z"></path></svg>
+ </div>
+ <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="bell-color-fg-muted">
+ <svg height="16" class="octicon octicon-bell color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path d="M8 16a2 2 0 001.985-1.75c.017-.137-.097-.25-.235-.25h-3.5c-.138 0-.252.113-.235.25A2 2 0 008 16z"></path><path fill-rule="evenodd" d="M8 1.5A3.5 3.5 0 004.5 5v2.947c0 .346-.102.683-.294.97l-1.703 2.556a.018.018 0 00-.003.01l.001.006c0 .002.002.004.004.006a.017.017 0 00.006.004l.007.001h10.964l.007-.001a.016.016 0 00.006-.004.016.016 0 00.004-.006l.001-.007a.017.017 0 00-.003-.01l-1.703-2.554a1.75 1.75 0 01-.294-.97V5A3.5 3.5 0 008 1.5zM3 5a5 5 0 0110 0v2.947c0 .05.015.098.042.139l1.703 2.555A1.518 1.518 0 0113.482 13H2.518a1.518 1.518 0 01-1.263-2.36l1.703-2.554A.25.25 0 003 7.947V5z"></path></svg>
+ </div>
+ <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="bell-slash-color-fg-muted">
+ <svg height="16" class="octicon octicon-bell-slash color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M8 1.5c-.997 0-1.895.416-2.534 1.086A.75.75 0 014.38 1.55 5 5 0 0113 5v2.373a.75.75 0 01-1.5 0V5A3.5 3.5 0 008 1.5zM4.182 4.31L1.19 2.143a.75.75 0 10-.88 1.214L3 5.305v2.642a.25.25 0 01-.042.139L1.255 10.64A1.518 1.518 0 002.518 13h11.108l1.184.857a.75.75 0 10.88-1.214l-1.375-.996a1.196 1.196 0 00-.013-.01L4.198 4.321a.733.733 0 00-.016-.011zm7.373 7.19L4.5 6.391v1.556c0 .346-.102.683-.294.97l-1.703 2.556a.018.018 0 00-.003.01.015.015 0 00.005.012.017.017 0 00.006.004l.007.001h9.037zM8 16a2 2 0 001.985-1.75c.017-.137-.097-.25-.235-.25h-3.5c-.138 0-.252.113-.235.25A2 2 0 008 16z"></path></svg>
+ </div>
+ <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="paintbrush-color-fg-muted">
+ <svg height="16" class="octicon octicon-paintbrush color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M11.134 1.535C9.722 2.562 8.16 4.057 6.889 5.312 5.8 6.387 5.041 7.401 4.575 8.294a3.745 3.745 0 00-3.227 1.054c-.43.431-.69 1.066-.86 1.657a11.982 11.982 0 00-.358 1.914A21.263 21.263 0 000 15.203v.054l.75-.007-.007.75h.054a14.404 14.404 0 00.654-.012 21.243 21.243 0 001.63-.118c.62-.07 1.3-.18 1.914-.357.592-.17 1.226-.43 1.657-.861a3.745 3.745 0 001.055-3.217c.908-.461 1.942-1.216 3.04-2.3 1.279-1.262 2.764-2.825 3.775-4.249.501-.706.923-1.428 1.125-2.096.2-.659.235-1.469-.368-2.07-.606-.607-1.42-.55-2.069-.34-.66.213-1.376.646-2.076 1.155zm-3.95 8.48a3.76 3.76 0 00-1.19-1.192 9.758 9.758 0 011.161-1.607l1.658 1.658a9.853 9.853 0 01-1.63 1.142zM.742 16l.007-.75-.75.008A.75.75 0 00.743 16zM12.016 2.749c-1.224.89-2.605 2.189-3.822 3.384l1.718 1.718c1.21-1.205 2.51-2.597 3.387-3.833.47-.662.78-1.227.912-1.662.134-.444.032-.551.009-.575h-.001V1.78c-.014-.014-.112-.113-.548.027-.432.14-.995.462-1.655.942zM1.62 13.089a19.56 19.56 0 00-.104 1.395 19.55 19.55 0 001.396-.104 10.528 10.528 0 001.668-.309c.526-.151.856-.325 1.011-.48a2.25 2.25 0 00-3.182-3.182c-.155.155-.329.485-.48 1.01a10.515 10.515 0 00-.309 1.67z"></path></svg>
+ </div>
+
+ <command-palette-item-group
+ data-group-id="top"
+ data-group-title="Top result"
+ data-group-hint=""
+ data-group-limits="{}"
+ data-default-priority="0"
+ >
+ </command-palette-item-group>
+ <command-palette-item-group
+ data-group-id="commands"
+ data-group-title="Commands"
+ data-group-hint="Type &gt; to filter"
+ data-group-limits="{&quot;static_items_page&quot;:50,&quot;issue&quot;:50,&quot;pull_request&quot;:50,&quot;discussion&quot;:50}"
+ data-default-priority="1"
+ >
+ </command-palette-item-group>
+ <command-palette-item-group
+ data-group-id="global_commands"
+ data-group-title="Global Commands"
+ data-group-hint="Type &gt; to filter"
+ data-group-limits="{&quot;issue&quot;:0,&quot;pull_request&quot;:0,&quot;discussion&quot;:0}"
+ data-default-priority="2"
+ >
+ </command-palette-item-group>
+ <command-palette-item-group
+ data-group-id="this_page"
+ data-group-title="This Page"
+ data-group-hint=""
+ data-group-limits="{}"
+ data-default-priority="3"
+ >
+ </command-palette-item-group>
+ <command-palette-item-group
+ data-group-id="files"
+ data-group-title="Files"
+ data-group-hint=""
+ data-group-limits="{}"
+ data-default-priority="4"
+ >
+ </command-palette-item-group>
+ <command-palette-item-group
+ data-group-id="default"
+ data-group-title="Default"
+ data-group-hint=""
+ data-group-limits="{&quot;static_items_page&quot;:50}"
+ data-default-priority="5"
+ >
+ </command-palette-item-group>
+ <command-palette-item-group
+ data-group-id="pages"
+ data-group-title="Pages"
+ data-group-hint=""
+ data-group-limits="{&quot;repository&quot;:10}"
+ data-default-priority="6"
+ >
+ </command-palette-item-group>
+ <command-palette-item-group
+ data-group-id="access_policies"
+ data-group-title="Access Policies"
+ data-group-hint=""
+ data-group-limits="{}"
+ data-default-priority="7"
+ >
+ </command-palette-item-group>
+ <command-palette-item-group
+ data-group-id="organizations"
+ data-group-title="Organizations"
+ data-group-hint=""
+ data-group-limits="{}"
+ data-default-priority="8"
+ >
+ </command-palette-item-group>
+ <command-palette-item-group
+ data-group-id="repositories"
+ data-group-title="Repositories"
+ data-group-hint=""
+ data-group-limits="{}"
+ data-default-priority="9"
+ >
+ </command-palette-item-group>
+ <command-palette-item-group
+ data-group-id="references"
+ data-group-title="Issues, pull requests, and discussions"
+ data-group-hint="Type # to filter"
+ data-group-limits="{}"
+ data-default-priority="10"
+ >
+ </command-palette-item-group>
+ <command-palette-item-group
+ data-group-id="teams"
+ data-group-title="Teams"
+ data-group-hint=""
+ data-group-limits="{}"
+ data-default-priority="11"
+ >
+ </command-palette-item-group>
+ <command-palette-item-group
+ data-group-id="users"
+ data-group-title="Users"
+ data-group-hint=""
+ data-group-limits="{}"
+ data-default-priority="12"
+ >
+ </command-palette-item-group>
+ <command-palette-item-group
+ data-group-id="projects"
+ data-group-title="Projects"
+ data-group-hint=""
+ data-group-limits="{}"
+ data-default-priority="13"
+ >
+ </command-palette-item-group>
+ <command-palette-item-group
+ data-group-id="footer"
+ data-group-title="Footer"
+ data-group-hint=""
+ data-group-limits="{}"
+ data-default-priority="14"
+ >
+ </command-palette-item-group>
+ <command-palette-item-group
+ data-group-id="modes_help"
+ data-group-title="Modes"
+ data-group-hint=""
+ data-group-limits="{}"
+ data-default-priority="15"
+ >
+ </command-palette-item-group>
+ <command-palette-item-group
+ data-group-id="filters_help"
+ data-group-title="Use filters in issues, pull requests, discussions, and projects"
+ data-group-hint=""
+ data-group-limits="{}"
+ data-default-priority="16"
+ >
+ </command-palette-item-group>
+
+ <command-palette-page
+ data-page-title="rlkamalapurkar"
+ data-scope-id="MDQ6VXNlcjMwMjY0NzIw"
+ data-scope-type="owner"
+ data-targets="command-palette-page-stack.defaultPages"
+ hidden
+ >
+ </command-palette-page>
+ <command-palette-page
+ data-page-title="bodeplot"
+ data-scope-id="R_kgDOGPTXYA"
+ data-scope-type="repository"
+ data-targets="command-palette-page-stack.defaultPages"
+ hidden
+ >
+ </command-palette-page>
+ </div>
+
+ <command-palette-page data-is-root>
+ </command-palette-page>
+ <command-palette-page
+ data-page-title="rlkamalapurkar"
+ data-scope-id="MDQ6VXNlcjMwMjY0NzIw"
+ data-scope-type="owner"
+ >
+ </command-palette-page>
+ <command-palette-page
+ data-page-title="bodeplot"
+ data-scope-id="R_kgDOGPTXYA"
+ data-scope-type="repository"
+ >
+ </command-palette-page>
+ </command-palette-page-stack>
+
+ <server-defined-provider data-type="search-links" data-targets="command-palette.serverDefinedProviderElements"></server-defined-provider>
+ <server-defined-provider data-type="help" data-targets="command-palette.serverDefinedProviderElements">
+ <command-palette-help
+ data-group="modes_help"
+ data-prefix="#"
+ data-scope-types="[&quot;&quot;]"
+ >
+ <span data-target="command-palette-help.titleElement">Search for <strong>issues</strong> and <strong>pull requests</strong></span>
+ <span data-target="command-palette-help.hintElement">
+ <kbd class="hx_kbd">#</kbd>
+ </span>
+ </command-palette-help>
+ <command-palette-help
+ data-group="modes_help"
+ data-prefix="#"
+ data-scope-types="[&quot;owner&quot;,&quot;repository&quot;]"
+ >
+ <span data-target="command-palette-help.titleElement">Search for <strong>issues, pull requests, discussions,</strong> and <strong>projects</strong></span>
+ <span data-target="command-palette-help.hintElement">
+ <kbd class="hx_kbd">#</kbd>
+ </span>
+ </command-palette-help>
+ <command-palette-help
+ data-group="modes_help"
+ data-prefix="@"
+ data-scope-types="[&quot;&quot;]"
+ >
+ <span data-target="command-palette-help.titleElement">Search for <strong>organizations, repositories,</strong> and <strong>users</strong></span>
+ <span data-target="command-palette-help.hintElement">
+ <kbd class="hx_kbd">@</kbd>
+ </span>
+ </command-palette-help>
+ <command-palette-help
+ data-group="modes_help"
+ data-prefix="!"
+ data-scope-types="[&quot;owner&quot;,&quot;repository&quot;]"
+ >
+ <span data-target="command-palette-help.titleElement">Search for <strong>projects</strong></span>
+ <span data-target="command-palette-help.hintElement">
+ <kbd class="hx_kbd">!</kbd>
+ </span>
+ </command-palette-help>
+ <command-palette-help
+ data-group="modes_help"
+ data-prefix="/"
+ data-scope-types="[&quot;repository&quot;]"
+ >
+ <span data-target="command-palette-help.titleElement">Search for <strong>files</strong></span>
+ <span data-target="command-palette-help.hintElement">
+ <kbd class="hx_kbd">/</kbd>
+ </span>
+ </command-palette-help>
+ <command-palette-help
+ data-group="modes_help"
+ data-prefix="&gt;"
+ >
+ <span data-target="command-palette-help.titleElement">Activate <strong>command mode</strong></span>
+ <span data-target="command-palette-help.hintElement">
+ <kbd class="hx_kbd">&gt;</kbd>
+ </span>
+ </command-palette-help>
+ <command-palette-help
+ data-group="filters_help"
+ data-prefix="# author:@me"
+ >
+ <span data-target="command-palette-help.titleElement">Search your issues, pull requests, and discussions</span>
+ <span data-target="command-palette-help.hintElement">
+ <kbd class="hx_kbd"># author:@me</kbd>
+ </span>
+ </command-palette-help>
+ <command-palette-help
+ data-group="filters_help"
+ data-prefix="# author:@me"
+ >
+ <span data-target="command-palette-help.titleElement">Search your issues, pull requests, and discussions</span>
+ <span data-target="command-palette-help.hintElement">
+ <kbd class="hx_kbd"># author:@me</kbd>
+ </span>
+ </command-palette-help>
+ <command-palette-help
+ data-group="filters_help"
+ data-prefix="# is:pr"
+ >
+ <span data-target="command-palette-help.titleElement">Filter to pull requests</span>
+ <span data-target="command-palette-help.hintElement">
+ <kbd class="hx_kbd"># is:pr</kbd>
+ </span>
+ </command-palette-help>
+ <command-palette-help
+ data-group="filters_help"
+ data-prefix="# is:issue"
+ >
+ <span data-target="command-palette-help.titleElement">Filter to issues</span>
+ <span data-target="command-palette-help.hintElement">
+ <kbd class="hx_kbd"># is:issue</kbd>
+ </span>
+ </command-palette-help>
+ <command-palette-help
+ data-group="filters_help"
+ data-prefix="# is:discussion"
+ data-scope-types="[&quot;owner&quot;,&quot;repository&quot;]"
+ >
+ <span data-target="command-palette-help.titleElement">Filter to discussions</span>
+ <span data-target="command-palette-help.hintElement">
+ <kbd class="hx_kbd"># is:discussion</kbd>
+ </span>
+ </command-palette-help>
+ <command-palette-help
+ data-group="filters_help"
+ data-prefix="# is:project"
+ data-scope-types="[&quot;owner&quot;,&quot;repository&quot;]"
+ >
+ <span data-target="command-palette-help.titleElement">Filter to projects</span>
+ <span data-target="command-palette-help.hintElement">
+ <kbd class="hx_kbd"># is:project</kbd>
+ </span>
+ </command-palette-help>
+ <command-palette-help
+ data-group="filters_help"
+ data-prefix="# is:open"
+ >
+ <span data-target="command-palette-help.titleElement">Filter to open issues, pull requests, and discussions</span>
+ <span data-target="command-palette-help.hintElement">
+ <kbd class="hx_kbd"># is:open</kbd>
+ </span>
+ </command-palette-help>
+ </server-defined-provider>
+
+ <server-defined-provider
+ data-type="commands"
+ data-fetch-debounce="0"
+ data-src="/command_palette/commands"
+ data-supported-modes="[]"
+ data-supports-commands
+
+ data-targets="command-palette.serverDefinedProviderElements"
+ ></server-defined-provider>
+ <server-defined-provider
+ data-type="prefetched"
+ data-fetch-debounce="0"
+ data-src="/command_palette/jump_to_page_navigation"
+ data-supported-modes="[&quot;&quot;]"
+ data-supported-scope-types="[&quot;&quot;,&quot;owner&quot;,&quot;repository&quot;]"
+
+ data-targets="command-palette.serverDefinedProviderElements"
+ ></server-defined-provider>
+ <server-defined-provider
+ data-type="remote"
+ data-fetch-debounce="200"
+ data-src="/command_palette/issues"
+ data-supported-modes="[&quot;#&quot;,&quot;#&quot;]"
+ data-supported-scope-types="[&quot;owner&quot;,&quot;repository&quot;,&quot;&quot;]"
+
+ data-targets="command-palette.serverDefinedProviderElements"
+ ></server-defined-provider>
+ <server-defined-provider
+ data-type="remote"
+ data-fetch-debounce="200"
+ data-src="/command_palette/jump_to"
+ data-supported-modes="[&quot;@&quot;,&quot;@&quot;]"
+ data-supported-scope-types="[&quot;&quot;,&quot;owner&quot;]"
+
+ data-targets="command-palette.serverDefinedProviderElements"
+ ></server-defined-provider>
+ <server-defined-provider
+ data-type="remote"
+ data-fetch-debounce="200"
+ data-src="/command_palette/jump_to_members_only"
+ data-supported-modes="[&quot;@&quot;,&quot;@&quot;,&quot;&quot;,&quot;&quot;]"
+ data-supported-scope-types="[&quot;&quot;,&quot;owner&quot;]"
+
+ data-targets="command-palette.serverDefinedProviderElements"
+ ></server-defined-provider>
+ <server-defined-provider
+ data-type="prefetched"
+ data-fetch-debounce="0"
+ data-src="/command_palette/jump_to_members_only_prefetched"
+ data-supported-modes="[&quot;@&quot;,&quot;@&quot;,&quot;&quot;,&quot;&quot;]"
+ data-supported-scope-types="[&quot;&quot;,&quot;owner&quot;]"
+
+ data-targets="command-palette.serverDefinedProviderElements"
+ ></server-defined-provider>
+ <server-defined-provider
+ data-type="files"
+ data-fetch-debounce="0"
+ data-src="/command_palette/files"
+ data-supported-modes="[&quot;/&quot;]"
+ data-supported-scope-types="[&quot;repository&quot;]"
+
+ data-targets="command-palette.serverDefinedProviderElements"
+ ></server-defined-provider>
+ <server-defined-provider
+ data-type="remote"
+ data-fetch-debounce="200"
+ data-src="/command_palette/discussions"
+ data-supported-modes="[&quot;#&quot;]"
+ data-supported-scope-types="[&quot;owner&quot;,&quot;repository&quot;]"
+
+ data-targets="command-palette.serverDefinedProviderElements"
+ ></server-defined-provider>
+ <server-defined-provider
+ data-type="remote"
+ data-fetch-debounce="200"
+ data-src="/command_palette/projects"
+ data-supported-modes="[&quot;#&quot;,&quot;!&quot;]"
+ data-supported-scope-types="[&quot;owner&quot;,&quot;repository&quot;]"
+
+ data-targets="command-palette.serverDefinedProviderElements"
+ ></server-defined-provider>
+ <server-defined-provider
+ data-type="prefetched"
+ data-fetch-debounce="0"
+ data-src="/command_palette/recent_issues"
+ data-supported-modes="[&quot;#&quot;,&quot;#&quot;]"
+ data-supported-scope-types="[&quot;owner&quot;,&quot;repository&quot;,&quot;&quot;]"
+
+ data-targets="command-palette.serverDefinedProviderElements"
+ ></server-defined-provider>
+ <server-defined-provider
+ data-type="remote"
+ data-fetch-debounce="200"
+ data-src="/command_palette/teams"
+ data-supported-modes="[&quot;@&quot;,&quot;&quot;]"
+ data-supported-scope-types="[&quot;owner&quot;]"
+
+ data-targets="command-palette.serverDefinedProviderElements"
+ ></server-defined-provider>
+ <server-defined-provider
+ data-type="remote"
+ data-fetch-debounce="200"
+ data-src="/command_palette/name_with_owner_repository"
+ data-supported-modes="[&quot;@&quot;,&quot;@&quot;,&quot;&quot;,&quot;&quot;]"
+ data-supported-scope-types="[&quot;&quot;,&quot;owner&quot;]"
+
+ data-targets="command-palette.serverDefinedProviderElements"
+ ></server-defined-provider>
+ </command-palette>
+ </details-dialog>
+</details>
+
+<div class="position-fixed bottom-0 left-0 ml-5 mb-5 js-command-palette-toasts" style="z-index: 1000">
+ <div hidden class="Toast Toast--loading">
+ <span class="Toast-icon">
+ <svg class="Toast--spinner" viewBox="0 0 32 32" width="18" height="18" aria-hidden="true">
+ <path
+ fill="#959da5"
+ d="M16 0 A16 16 0 0 0 16 32 A16 16 0 0 0 16 0 M16 4 A12 12 0 0 1 16 28 A12 12 0 0 1 16 4"
+ />
+ <path fill="#ffffff" d="M16 0 A16 16 0 0 1 32 16 L28 16 A12 12 0 0 0 16 4z"></path>
+ </svg>
+ </span>
+ <span class="Toast-content"></span>
+ </div>
+
+ <div hidden class="anim-fade-in fast Toast Toast--error">
+ <span class="Toast-icon">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-stop">
+ <path fill-rule="evenodd" d="M4.47.22A.75.75 0 015 0h6a.75.75 0 01.53.22l4.25 4.25c.141.14.22.331.22.53v6a.75.75 0 01-.22.53l-4.25 4.25A.75.75 0 0111 16H5a.75.75 0 01-.53-.22L.22 11.53A.75.75 0 010 11V5a.75.75 0 01.22-.53L4.47.22zm.84 1.28L1.5 5.31v5.38l3.81 3.81h5.38l3.81-3.81V5.31L10.69 1.5H5.31zM8 4a.75.75 0 01.75.75v3.5a.75.75 0 01-1.5 0v-3.5A.75.75 0 018 4zm0 8a1 1 0 100-2 1 1 0 000 2z"></path>
+</svg>
+ </span>
+ <span class="Toast-content"></span>
+ </div>
+
+ <div hidden class="anim-fade-in fast Toast Toast--warning">
+ <span class="Toast-icon">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
+ <path fill-rule="evenodd" d="M8.22 1.754a.25.25 0 00-.44 0L1.698 13.132a.25.25 0 00.22.368h12.164a.25.25 0 00.22-.368L8.22 1.754zm-1.763-.707c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0114.082 15H1.918a1.75 1.75 0 01-1.543-2.575L6.457 1.047zM9 11a1 1 0 11-2 0 1 1 0 012 0zm-.25-5.25a.75.75 0 00-1.5 0v2.5a.75.75 0 001.5 0v-2.5z"></path>
+</svg>
+ </span>
+ <span class="Toast-content"></span>
+ </div>
+
+
+ <div hidden class="anim-fade-in fast Toast Toast--success">
+ <span class="Toast-icon">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check">
+ <path fill-rule="evenodd" d="M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z"></path>
+</svg>
+ </span>
+ <span class="Toast-content"></span>
+ </div>
+
+ <div hidden class="anim-fade-in fast Toast">
+ <span class="Toast-icon">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-info">
+ <path fill-rule="evenodd" d="M8 1.5a6.5 6.5 0 100 13 6.5 6.5 0 000-13zM0 8a8 8 0 1116 0A8 8 0 010 8zm6.5-.25A.75.75 0 017.25 7h1a.75.75 0 01.75.75v2.75h.25a.75.75 0 010 1.5h-2a.75.75 0 010-1.5h.25v-2h-.25a.75.75 0 01-.75-.75zM8 6a1 1 0 100-2 1 1 0 000 2z"></path>
+</svg>
+ </span>
+ <span class="Toast-content"></span>
+ </div>
+</div>
+
+
+ <div
+ class="application-main "
+ data-commit-hovercards-enabled
+ data-discussion-hovercards-enabled
+ data-issue-and-pr-hovercards-enabled
+ >
+ <div itemscope itemtype="http://schema.org/SoftwareSourceCode" class="">
+ <main id="js-repo-pjax-container" >
+
+
+
+
+
+
+
+
+
+
+ <div id="repository-container-header" class="pt-3 hide-full-screen" style="background-color: var(--color-page-header-bg);" data-turbo-replace>
+
+ <div class="d-flex flex-wrap flex-justify-end mb-3 px-3 px-md-4 px-lg-5" style="gap: 1rem;">
+
+ <div class="flex-auto min-width-0 width-fit mr-3">
+
+ <div class=" d-flex flex-wrap flex-items-center wb-break-word f3 text-normal">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo color-fg-muted mr-2">
+ <path fill-rule="evenodd" d="M2 2.5A2.5 2.5 0 014.5 0h8.75a.75.75 0 01.75.75v12.5a.75.75 0 01-.75.75h-2.5a.75.75 0 110-1.5h1.75v-2h-8a1 1 0 00-.714 1.7.75.75 0 01-1.072 1.05A2.495 2.495 0 012 11.5v-9zm10.5-1V9h-8c-.356 0-.694.074-1 .208V2.5a1 1 0 011-1h8zM5 12.25v3.25a.25.25 0 00.4.2l1.45-1.087a.25.25 0 01.3 0L8.6 15.7a.25.25 0 00.4-.2v-3.25a.25.25 0 00-.25-.25h-3.5a.25.25 0 00-.25.25z"></path>
+</svg>
+
+ <span class="author flex-self-stretch" itemprop="author">
+ <a class="url fn" rel="author" data-hovercard-type="user" data-hovercard-url="/users/rlkamalapurkar/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/rlkamalapurkar">rlkamalapurkar</a>
+ </span>
+ <span class="mx-1 flex-self-stretch color-fg-muted">/</span>
+ <strong itemprop="name" class="mr-2 flex-self-stretch">
+ <a data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" href="/rlkamalapurkar/bodeplot">bodeplot</a>
+ </strong>
+
+ <span></span><span class="Label Label--secondary v-align-middle mr-1">Public</span>
+ </div>
+
+
+ </div>
+
+ <ul class="pagehead-actions flex-shrink-0 d-none d-md-inline" style="padding: 2px 0;">
+
+ <li>
+ <div class="float-left" data-test-selector="pin-repo-button">
+ <form data-turbo="false" action="/rlkamalapurkar/bodeplot/profile_pin" accept-charset="UTF-8" method="post"><input type="hidden" name="authenticity_token" value="efKDrRk8y7xWYWfGES0snbh9X2kt65PPpzE9o-qpQD3F9j3ADxLxBfQ8VqEAYFxtz1-80U86VlVDU97GT8yceQ" autocomplete="off" />
+ <button title="Pin this repository to your profile" type="submit" data-view-component="true" class="btn-sm btn"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-pin mr-2">
+ <path fill-rule="evenodd" d="M4.456.734a1.75 1.75 0 012.826.504l.613 1.327a3.081 3.081 0 002.084 1.707l2.454.584c1.332.317 1.8 1.972.832 2.94L11.06 10l3.72 3.72a.75.75 0 11-1.061 1.06L10 11.06l-2.204 2.205c-.968.968-2.623.5-2.94-.832l-.584-2.454a3.081 3.081 0 00-1.707-2.084l-1.327-.613a1.75 1.75 0 01-.504-2.826L4.456.734zM5.92 1.866a.25.25 0 00-.404-.072L1.794 5.516a.25.25 0 00.072.404l1.328.613A4.582 4.582 0 015.73 9.63l.584 2.454a.25.25 0 00.42.12l5.47-5.47a.25.25 0 00-.12-.42L9.63 5.73a4.581 4.581 0 01-3.098-2.537L5.92 1.866z"></path>
+</svg>Pin
+</button></form> </div>
+</li>
+
+
+ <li>
+ <notifications-list-subscription-form
+ data-action="notifications-dialog-label-toggled:notifications-list-subscription-form#handleDialogLabelToggle"
+ class="f5 position-relative"
+ >
+ <details
+ class="details-reset details-overlay f5 position-relative"
+ data-target="notifications-list-subscription-form.details"
+ data-action="toggle:notifications-list-subscription-form#detailsToggled"
+ >
+
+ <summary data-hydro-click="{&quot;event_type&quot;:&quot;repository.click&quot;,&quot;payload&quot;:{&quot;target&quot;:&quot;WATCH_BUTTON&quot;,&quot;repository_id&quot;:418699104,&quot;originating_url&quot;:&quot;https://github.com/rlkamalapurkar/bodeplot/blob/main/bodeplot.dtx&quot;,&quot;user_id&quot;:30264720}}" data-hydro-click-hmac="ef1d3ec417ba76c8764d8684e429ac0b279976194870ffa845da9e0605db9331" data-ga-click="Repository, click Watch settings, action:blob#show" aria-label="Notification settings" data-view-component="true" class="btn-sm btn"> <span data-menu-button>
+ <span
+
+
+ data-target="notifications-list-subscription-form.unwatchButtonCopy"
+ >
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-eye">
+ <path fill-rule="evenodd" d="M1.679 7.932c.412-.621 1.242-1.75 2.366-2.717C5.175 4.242 6.527 3.5 8 3.5c1.473 0 2.824.742 3.955 1.715 1.124.967 1.954 2.096 2.366 2.717a.119.119 0 010 .136c-.412.621-1.242 1.75-2.366 2.717C10.825 11.758 9.473 12.5 8 12.5c-1.473 0-2.824-.742-3.955-1.715C2.92 9.818 2.09 8.69 1.679 8.068a.119.119 0 010-.136zM8 2c-1.981 0-3.67.992-4.933 2.078C1.797 5.169.88 6.423.43 7.1a1.619 1.619 0 000 1.798c.45.678 1.367 1.932 2.637 3.024C4.329 13.008 6.019 14 8 14c1.981 0 3.67-.992 4.933-2.078 1.27-1.091 2.187-2.345 2.637-3.023a1.619 1.619 0 000-1.798c-.45-.678-1.367-1.932-2.637-3.023C11.671 2.992 9.981 2 8 2zm0 8a2 2 0 100-4 2 2 0 000 4z"></path>
+</svg>
+ Unwatch
+ </span>
+ <span
+ hidden
+
+ data-target="notifications-list-subscription-form.stopIgnoringButtonCopy"
+ >
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-bell-slash">
+ <path fill-rule="evenodd" d="M8 1.5c-.997 0-1.895.416-2.534 1.086A.75.75 0 014.38 1.55 5 5 0 0113 5v2.373a.75.75 0 01-1.5 0V5A3.5 3.5 0 008 1.5zM4.182 4.31L1.19 2.143a.75.75 0 10-.88 1.214L3 5.305v2.642a.25.25 0 01-.042.139L1.255 10.64A1.518 1.518 0 002.518 13h11.108l1.184.857a.75.75 0 10.88-1.214l-1.375-.996a1.196 1.196 0 00-.013-.01L4.198 4.321a.733.733 0 00-.016-.011zm7.373 7.19L4.5 6.391v1.556c0 .346-.102.683-.294.97l-1.703 2.556a.018.018 0 00-.003.01.015.015 0 00.005.012.017.017 0 00.006.004l.007.001h9.037zM8 16a2 2 0 001.985-1.75c.017-.137-.097-.25-.235-.25h-3.5c-.138 0-.252.113-.235.25A2 2 0 008 16z"></path>
+</svg>
+ Stop ignoring
+ </span>
+ <span
+ hidden
+
+ data-target="notifications-list-subscription-form.watchButtonCopy"
+ >
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-eye">
+ <path fill-rule="evenodd" d="M1.679 7.932c.412-.621 1.242-1.75 2.366-2.717C5.175 4.242 6.527 3.5 8 3.5c1.473 0 2.824.742 3.955 1.715 1.124.967 1.954 2.096 2.366 2.717a.119.119 0 010 .136c-.412.621-1.242 1.75-2.366 2.717C10.825 11.758 9.473 12.5 8 12.5c-1.473 0-2.824-.742-3.955-1.715C2.92 9.818 2.09 8.69 1.679 8.068a.119.119 0 010-.136zM8 2c-1.981 0-3.67.992-4.933 2.078C1.797 5.169.88 6.423.43 7.1a1.619 1.619 0 000 1.798c.45.678 1.367 1.932 2.637 3.024C4.329 13.008 6.019 14 8 14c1.981 0 3.67-.992 4.933-2.078 1.27-1.091 2.187-2.345 2.637-3.023a1.619 1.619 0 000-1.798c-.45-.678-1.367-1.932-2.637-3.023C11.671 2.992 9.981 2 8 2zm0 8a2 2 0 100-4 2 2 0 000 4z"></path>
+</svg>
+ Watch
+ </span>
+ </span>
+ <span id="repo-notifications-counter" data-target="notifications-list-subscription-form.socialCount" data-pjax-replace="true" data-turbo-replace="true" title="1" data-view-component="true" class="Counter">1</span>
+ <span class="dropdown-caret"></span>
+</summary>
+ <details-menu
+ class="SelectMenu "
+ role="menu"
+ data-target="notifications-list-subscription-form.menu"
+
+ >
+ <div class="SelectMenu-modal notifications-component-menu-modal">
+ <header class="SelectMenu-header">
+ <h3 class="SelectMenu-title">Notifications</h3>
+ <button class="SelectMenu-closeButton" type="button" aria-label="Close menu" data-action="click:notifications-list-subscription-form#closeMenu">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x">
+ <path fill-rule="evenodd" d="M3.72 3.72a.75.75 0 011.06 0L8 6.94l3.22-3.22a.75.75 0 111.06 1.06L9.06 8l3.22 3.22a.75.75 0 11-1.06 1.06L8 9.06l-3.22 3.22a.75.75 0 01-1.06-1.06L6.94 8 3.72 4.78a.75.75 0 010-1.06z"></path>
+</svg>
+ </button>
+ </header>
+
+ <div class="SelectMenu-list">
+ <form data-target="notifications-list-subscription-form.form" data-action="submit:notifications-list-subscription-form#submitForm" data-turbo="false" action="/notifications/subscribe" accept-charset="UTF-8" method="post"><input type="hidden" name="authenticity_token" value="ATW70sfjhJkV_6MKRJ-LuTHQJy54JQ3WtIKY3sCfYMWwUNYqY06UQxvue_yCrVLa8c2LarX3aEX4eycyvX0Q5g" autocomplete="off" />
+
+ <input type="hidden" name="repository_id" value="418699104">
+
+ <button
+ type="submit"
+ name="do"
+ value="included"
+ class="SelectMenu-item flex-items-start"
+ role="menuitemradio"
+ aria-checked="false"
+ data-targets="notifications-list-subscription-form.subscriptionButtons"
+
+ >
+ <span class="f5">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check SelectMenu-icon SelectMenu-icon--check">
+ <path fill-rule="evenodd" d="M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z"></path>
+</svg>
+ </span>
+ <div>
+ <div class="f5 text-bold">
+ Participating and @mentions
+ </div>
+ <div class="text-small color-fg-muted text-normal pb-1">
+ Only receive notifications from this repository when participating or @mentioned.
+ </div>
+ </div>
+ </button>
+
+ <button
+ type="submit"
+ name="do"
+ value="subscribed"
+ class="SelectMenu-item flex-items-start"
+ role="menuitemradio"
+ aria-checked="true"
+ data-targets="notifications-list-subscription-form.subscriptionButtons"
+ >
+ <span class="f5">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check SelectMenu-icon SelectMenu-icon--check">
+ <path fill-rule="evenodd" d="M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z"></path>
+</svg>
+ </span>
+ <div>
+ <div class="f5 text-bold">
+ All Activity
+ </div>
+ <div class="text-small color-fg-muted text-normal pb-1">
+ Notified of all notifications on this repository.
+ </div>
+ </div>
+ </button>
+
+ <button
+ type="submit"
+ name="do"
+ value="ignore"
+ class="SelectMenu-item flex-items-start"
+ role="menuitemradio"
+ aria-checked="false"
+ data-targets="notifications-list-subscription-form.subscriptionButtons"
+ >
+ <span class="f5">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check SelectMenu-icon SelectMenu-icon--check">
+ <path fill-rule="evenodd" d="M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z"></path>
+</svg>
+ </span>
+ <div>
+ <div class="f5 text-bold">
+ Ignore
+ </div>
+ <div class="text-small color-fg-muted text-normal pb-1">
+ Never be notified.
+ </div>
+ </div>
+ </button>
+</form>
+ <button
+ class="SelectMenu-item flex-items-start pr-3"
+ type="button"
+ role="menuitemradio"
+ data-target="notifications-list-subscription-form.customButton"
+ data-action="click:notifications-list-subscription-form#openCustomDialog"
+ aria-haspopup="true"
+ aria-checked="false"
+
+ >
+ <span class="f5">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check SelectMenu-icon SelectMenu-icon--check">
+ <path fill-rule="evenodd" d="M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z"></path>
+</svg>
+ </span>
+ <div>
+ <div class="d-flex flex-items-start flex-justify-between">
+ <div class="f5 text-bold">Custom</div>
+ <div class="f5 pr-1">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-arrow-right">
+ <path fill-rule="evenodd" d="M8.22 2.97a.75.75 0 011.06 0l4.25 4.25a.75.75 0 010 1.06l-4.25 4.25a.75.75 0 01-1.06-1.06l2.97-2.97H3.75a.75.75 0 010-1.5h7.44L8.22 4.03a.75.75 0 010-1.06z"></path>
+</svg>
+ </div>
+ </div>
+ <div class="text-small color-fg-muted text-normal pb-1">
+ Select events you want to be notified of in addition to participating and @mentions.
+ </div>
+ </div>
+ </button>
+
+ <div class="px-3 py-2 d-flex color-bg-subtle flex-items-center">
+ <span class="f5">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-device-mobile SelectMenu-icon SelectMenu-icon--device-mobile">
+ <path fill-rule="evenodd" d="M3.75 0A1.75 1.75 0 002 1.75v12.5c0 .966.784 1.75 1.75 1.75h8.5A1.75 1.75 0 0014 14.25V1.75A1.75 1.75 0 0012.25 0h-8.5zM3.5 1.75a.25.25 0 01.25-.25h8.5a.25.25 0 01.25.25v12.5a.25.25 0 01-.25.25h-8.5a.25.25 0 01-.25-.25V1.75zM8 13a1 1 0 100-2 1 1 0 000 2z"></path>
+</svg>
+ </span>
+ <span className="text-small color-fg-muted text-normal pb-1">
+ Get push notifications on <a target="_blank" rel="noopener noreferrer" href="https://apps.apple.com/app/apple-store/id1477376905?ct=watch-dropdown&amp;mt=8&amp;pt=524675">iOS</a> or <a target="_blank" rel="noopener noreferrer" href="https://play.google.com/store/apps/details?id=com.github.android&amp;referrer=utm_campaign%3Dwatch-dropdown%26utm_medium%3Dweb%26utm_source%3Dgithub">Android</a>.
+ </span>
+ </div>
+ </div>
+ </div>
+ </details-menu>
+
+ <details-dialog
+ class="notifications-component-dialog "
+ data-target="notifications-list-subscription-form.customDialog"
+ aria-label="Custom dialog"
+ hidden
+ >
+ <div class="SelectMenu-modal notifications-component-dialog-modal overflow-visible">
+ <form data-target="notifications-list-subscription-form.customform" data-action="submit:notifications-list-subscription-form#submitCustomForm" data-turbo="false" action="/notifications/subscribe" accept-charset="UTF-8" method="post"><input type="hidden" name="authenticity_token" value="_pIDQ2TOfJcfNTeIqZM7JlTOFKGtWZKw1VBvt9MFAqJP9267wGNsTREk735voeJFlNO45WCL9yOZqdBbrudygQ" autocomplete="off" />
+
+ <input type="hidden" name="repository_id" value="418699104">
+
+ <header class="d-sm-none SelectMenu-header pb-0 border-bottom-0 px-2 px-sm-3">
+ <h1 class="f3 SelectMenu-title d-inline-flex">
+ <button
+ class="color-bg-default border-0 px-2 py-0 m-0 Link--secondary f5"
+ aria-label="Return to menu"
+ type="button"
+ data-action="click:notifications-list-subscription-form#closeCustomDialog"
+ >
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-arrow-left">
+ <path fill-rule="evenodd" d="M7.78 12.53a.75.75 0 01-1.06 0L2.47 8.28a.75.75 0 010-1.06l4.25-4.25a.75.75 0 011.06 1.06L4.81 7h7.44a.75.75 0 010 1.5H4.81l2.97 2.97a.75.75 0 010 1.06z"></path>
+</svg>
+ </button>
+ Custom
+ </h1>
+ </header>
+
+ <header class="d-none d-sm-flex flex-items-start pt-1">
+ <button
+ class="border-0 px-2 pt-1 m-0 Link--secondary f5"
+ style="background-color: transparent;"
+ aria-label="Return to menu"
+ type="button"
+ data-action="click:notifications-list-subscription-form#closeCustomDialog"
+ >
+ <svg style="position: relative; left: 2px; top: 1px" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-arrow-left">
+ <path fill-rule="evenodd" d="M7.78 12.53a.75.75 0 01-1.06 0L2.47 8.28a.75.75 0 010-1.06l4.25-4.25a.75.75 0 011.06 1.06L4.81 7h7.44a.75.75 0 010 1.5H4.81l2.97 2.97a.75.75 0 010 1.06z"></path>
+</svg>
+ </button>
+
+ <h1 class="pt-1 pr-4 pb-0 pl-0 f5 text-bold">
+ Custom
+ </h1>
+ </header>
+
+ <fieldset>
+ <legend>
+ <div class="text-small color-fg-muted pt-0 pr-3 pb-3 pl-6 pl-sm-5 border-bottom mb-3">
+ Select events you want to be notified of in addition to participating and @mentions.
+ </div>
+ </legend>
+ <div data-target="notifications-list-subscription-form.labelInputs">
+ </div>
+ <div class="form-checkbox mr-3 ml-6 ml-sm-5 mb-2 mt-0">
+ <label class="f5 text-normal">
+ <input
+ type="checkbox"
+ name="thread_types[]"
+ value="Issue"
+ data-targets="notifications-list-subscription-form.threadTypeCheckboxes"
+ data-action="change:notifications-list-subscription-form#threadTypeCheckboxesUpdated"
+
+ >
+ Issues
+ </label>
+
+
+ </div>
+ <div class="form-checkbox mr-3 ml-6 ml-sm-5 mb-2 mt-0">
+ <label class="f5 text-normal">
+ <input
+ type="checkbox"
+ name="thread_types[]"
+ value="PullRequest"
+ data-targets="notifications-list-subscription-form.threadTypeCheckboxes"
+ data-action="change:notifications-list-subscription-form#threadTypeCheckboxesUpdated"
+
+ >
+ Pull requests
+ </label>
+
+
+ </div>
+ <div class="form-checkbox mr-3 ml-6 ml-sm-5 mb-2 mt-0">
+ <label class="f5 text-normal">
+ <input
+ type="checkbox"
+ name="thread_types[]"
+ value="Release"
+ data-targets="notifications-list-subscription-form.threadTypeCheckboxes"
+ data-action="change:notifications-list-subscription-form#threadTypeCheckboxesUpdated"
+
+ >
+ Releases
+ </label>
+
+
+ </div>
+ <div class="form-checkbox mr-3 ml-6 ml-sm-5 mb-2 mt-0">
+ <label class="f5 text-normal">
+ <input
+ type="checkbox"
+ name="thread_types[]"
+ value="Discussion"
+ data-targets="notifications-list-subscription-form.threadTypeCheckboxes"
+ data-action="change:notifications-list-subscription-form#threadTypeCheckboxesUpdated"
+
+ aria-describedby="Discussion-disabled"
+ aria-disabled="true"
+ >
+ Discussions
+ </label>
+
+ <div
+ id="Discussion-disabled"
+ class="color-fg-muted"
+ >
+ Discussions are not enabled for this repository
+ </div>
+
+ </div>
+ <div class="form-checkbox mr-3 ml-6 ml-sm-5 mb-2 mt-0">
+ <label class="f5 text-normal">
+ <input
+ type="checkbox"
+ name="thread_types[]"
+ value="SecurityAlert"
+ data-targets="notifications-list-subscription-form.threadTypeCheckboxes"
+ data-action="change:notifications-list-subscription-form#threadTypeCheckboxesUpdated"
+
+ >
+ Security alerts
+ </label>
+
+
+ </div>
+ </fieldset>
+ <div class="pt-2 pb-3 px-3 d-flex flex-justify-start flex-row-reverse">
+ <button name="do" value="custom" data-target="notifications-list-subscription-form.customSubmit" disabled="disabled" type="submit" data-view-component="true" class="btn-primary btn-sm btn ml-2"> Apply
+</button>
+
+ <button data-action="click:notifications-list-subscription-form#resetForm" data-close-dialog="" type="button" data-view-component="true" class="btn-sm btn"> Cancel
+</button>
+ </div>
+</form> </div>
+ </details-dialog>
+
+
+ <div class="notifications-component-dialog-overlay"></div>
+ </details>
+ </notifications-list-subscription-form>
+
+
+
+ </li>
+
+ <li>
+ <div data-view-component="true" class="BtnGroup">
+ <a icon="repo-forked" href="/rlkamalapurkar/bodeplot/fork" data-hydro-click="{&quot;event_type&quot;:&quot;repository.click&quot;,&quot;payload&quot;:{&quot;target&quot;:&quot;FORK_BUTTON&quot;,&quot;repository_id&quot;:418699104,&quot;originating_url&quot;:&quot;https://github.com/rlkamalapurkar/bodeplot/blob/main/bodeplot.dtx&quot;,&quot;user_id&quot;:30264720}}" data-hydro-click-hmac="94d183bd108fa76396cb80bc57658f0e8df407c86d663f5c8cc4b6b8c1ab7b45" data-ga-click="Repository, show fork modal, action:blob#show; text:Fork" aria-label="Fork your own copy of rlkamalapurkar/bodeplot" data-view-component="true" class="btn-sm btn BtnGroup-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo-forked mr-2">
+ <path fill-rule="evenodd" d="M5 3.25a.75.75 0 11-1.5 0 .75.75 0 011.5 0zm0 2.122a2.25 2.25 0 10-1.5 0v.878A2.25 2.25 0 005.75 8.5h1.5v2.128a2.251 2.251 0 101.5 0V8.5h1.5a2.25 2.25 0 002.25-2.25v-.878a2.25 2.25 0 10-1.5 0v.878a.75.75 0 01-.75.75h-4.5A.75.75 0 015 6.25v-.878zm3.75 7.378a.75.75 0 11-1.5 0 .75.75 0 011.5 0zm3-8.75a.75.75 0 100-1.5.75.75 0 000 1.5z"></path>
+</svg>Fork
+ <span id="repo-network-counter" data-pjax-replace="true" data-turbo-replace="true" title="1" data-view-component="true" class="Counter">1</span>
+</a>
+ <details group_item="true" id="my-forks-menu-418699104" data-view-component="true" class="details-reset details-overlay BtnGroup-parent d-inline-block position-relative">
+ <summary aria-label="See your forks of this repository" data-view-component="true" class="btn-sm btn BtnGroup-item px-2 float-none"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-triangle-down">
+ <path d="M4.427 7.427l3.396 3.396a.25.25 0 00.354 0l3.396-3.396A.25.25 0 0011.396 7H4.604a.25.25 0 00-.177.427z"></path>
+</svg>
+</summary>
+ <details-menu
+ class="SelectMenu right-0"
+ src="/rlkamalapurkar/bodeplot/my_forks_menu_content?can_fork=true"
+
+ role="menu"
+
+>
+ <div class="SelectMenu-modal">
+ <button class="SelectMenu-closeButton position-absolute right-0 m-2" type="button" aria-label="Close menu" data-toggle-for="details-977774">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x">
+ <path fill-rule="evenodd" d="M3.72 3.72a.75.75 0 011.06 0L8 6.94l3.22-3.22a.75.75 0 111.06 1.06L9.06 8l3.22 3.22a.75.75 0 11-1.06 1.06L8 9.06l-3.22 3.22a.75.75 0 01-1.06-1.06L6.94 8 3.72 4.78a.75.75 0 010-1.06z"></path>
+</svg>
+ </button>
+ <div
+ id="filter-menu-977774"
+ class="d-flex flex-column flex-1 overflow-hidden"
+>
+ <div
+ class="SelectMenu-list"
+ >
+
+ <include-fragment class="SelectMenu-loading" aria-label="Loading">
+ <svg style="box-sizing: content-box; color: var(--color-icon-primary);" width="32" height="32" viewBox="0 0 16 16" fill="none" data-view-component="true" class="anim-rotate">
+ <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" />
+ <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke" />
+</svg>
+ </include-fragment>
+ </div>
+
+ </div>
+ </div>
+ </details-menu>
+</details></div>
+ </li>
+
+ <li>
+ <template class="js-unstar-confirmation-dialog-template">
+ <div class="Box-header">
+ <h2 class="Box-title">Unstar this repository?</h2>
+ </div>
+ <div class="Box-body">
+ <p class="mb-3">
+ This will remove {{ repoNameWithOwner }} from the {{ listsWithCount }} that it's been added to.
+ </p>
+ <div class="form-actions">
+ <form class="js-social-confirmation-form" data-turbo="false" action="{{ confirmUrl }}" accept-charset="UTF-8" method="post">
+ <input type="hidden" name="authenticity_token" value="{{ confirmCsrfToken }}">
+ <input type="hidden" name="confirm" value="true">
+ <button data-close-dialog="true" type="submit" data-view-component="true" class="btn-danger btn width-full"> Unstar
+</button>
+</form> </div>
+ </div>
+</template>
+
+ <div data-view-component="true" class="js-toggler-container js-social-container starring-container d-flex">
+ <div data-view-component="true" class="starred BtnGroup flex-1">
+ <form class="js-social-form BtnGroup-parent flex-auto js-deferred-toggler-target" data-turbo="false" action="/rlkamalapurkar/bodeplot/unstar" accept-charset="UTF-8" method="post"><input type="hidden" name="authenticity_token" value="ucvHytu-cPZUh6wounE_iV4Ws-o6smDS8krqmMMNb0sKQZ38OYiYdQAYQyJOvGnp_szFTAU1SmPRPSj8m9mOYA" autocomplete="off" />
+ <input type="hidden" value="yBu7tYEgc1vuDgBt13NNHFgI5S2ZU83kIHJW4rii8yJ7keGDYxab2LqR72cjvht8-NKTi6bU51UDBZSG4HYSCQ" data-csrf="true" class="js-confirm-csrf-token" />
+ <input type="hidden" name="context" value="repository">
+ <button data-hydro-click="{&quot;event_type&quot;:&quot;repository.click&quot;,&quot;payload&quot;:{&quot;target&quot;:&quot;UNSTAR_BUTTON&quot;,&quot;repository_id&quot;:418699104,&quot;originating_url&quot;:&quot;https://github.com/rlkamalapurkar/bodeplot/blob/main/bodeplot.dtx&quot;,&quot;user_id&quot;:30264720}}" data-hydro-click-hmac="d162afc52b4773eeaf9cd5a81563456c8ccc8ea9cdb81ff9117d5b3da10322b6" data-ga-click="Repository, click unstar button, action:blob#show; text:Unstar" aria-label="Unstar this repository (3)" type="submit" data-view-component="true" class="rounded-left-2 btn-sm btn BtnGroup-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-star-fill starred-button-icon d-inline-block mr-2">
+ <path fill-rule="evenodd" d="M8 .25a.75.75 0 01.673.418l1.882 3.815 4.21.612a.75.75 0 01.416 1.279l-3.046 2.97.719 4.192a.75.75 0 01-1.088.791L8 12.347l-3.766 1.98a.75.75 0 01-1.088-.79l.72-4.194L.818 6.374a.75.75 0 01.416-1.28l4.21-.611L7.327.668A.75.75 0 018 .25z"></path>
+</svg><span data-view-component="true" class="d-inline">
+ Starred
+</span> <span id="repo-stars-counter-unstar" aria-label="3 users starred this repository" data-singular-suffix="user starred this repository" data-plural-suffix="users starred this repository" data-turbo-replace="true" title="3" data-view-component="true" class="Counter js-social-count">3</span>
+</button></form> <details id="details-user-list-418699104" data-view-component="true" class="details-reset details-overlay BtnGroup-parent js-user-list-menu d-inline-block position-relative">
+ <summary aria-label="Add this repository to a list" data-view-component="true" class="btn-sm btn BtnGroup-item px-2 float-none"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-triangle-down">
+ <path d="M4.427 7.427l3.396 3.396a.25.25 0 00.354 0l3.396-3.396A.25.25 0 0011.396 7H4.604a.25.25 0 00-.177.427z"></path>
+</svg>
+</summary>
+ <details-menu
+ class="SelectMenu right-0"
+ src="/rlkamalapurkar/bodeplot/lists"
+
+ role="menu"
+
+>
+ <div class="SelectMenu-modal">
+ <button class="SelectMenu-closeButton position-absolute right-0 m-2" type="button" aria-label="Close menu" data-toggle-for="details-01286f">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x">
+ <path fill-rule="evenodd" d="M3.72 3.72a.75.75 0 011.06 0L8 6.94l3.22-3.22a.75.75 0 111.06 1.06L9.06 8l3.22 3.22a.75.75 0 11-1.06 1.06L8 9.06l-3.22 3.22a.75.75 0 01-1.06-1.06L6.94 8 3.72 4.78a.75.75 0 010-1.06z"></path>
+</svg>
+ </button>
+ <div
+ id="filter-menu-01286f"
+ class="d-flex flex-column flex-1 overflow-hidden"
+>
+ <div
+ class="SelectMenu-list"
+ >
+
+ <include-fragment class="SelectMenu-loading" aria-label="Loading">
+ <svg style="box-sizing: content-box; color: var(--color-icon-primary);" width="32" height="32" viewBox="0 0 16 16" fill="none" data-view-component="true" class="anim-rotate">
+ <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" />
+ <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke" />
+</svg>
+ </include-fragment>
+ </div>
+
+ </div>
+ </div>
+ </details-menu>
+</details>
+</div>
+ <div data-view-component="true" class="unstarred BtnGroup flex-1">
+ <form class="js-social-form BtnGroup-parent flex-auto" data-turbo="false" action="/rlkamalapurkar/bodeplot/star" accept-charset="UTF-8" method="post"><input type="hidden" name="authenticity_token" value="ofOWdIflAHvENaAjBgT6QvWsPFaGJo3U7RRtogKxO2-rT8K8lnfVAZA82F-1e8mH6jqsteoOS-3RGGm81ekdww" autocomplete="off" />
+ <input type="hidden" name="context" value="repository">
+ <button data-hydro-click="{&quot;event_type&quot;:&quot;repository.click&quot;,&quot;payload&quot;:{&quot;target&quot;:&quot;STAR_BUTTON&quot;,&quot;repository_id&quot;:418699104,&quot;originating_url&quot;:&quot;https://github.com/rlkamalapurkar/bodeplot/blob/main/bodeplot.dtx&quot;,&quot;user_id&quot;:30264720}}" data-hydro-click-hmac="20ac21edb2315748efe8c57dc4c126d95588340f69f3502780aa00d7a7a5f756" data-ga-click="Repository, click star button, action:blob#show; text:Star" aria-label="Star this repository (3)" type="submit" data-view-component="true" class="js-toggler-target rounded-left-2 btn-sm btn BtnGroup-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-star d-inline-block mr-2">
+ <path fill-rule="evenodd" d="M8 .25a.75.75 0 01.673.418l1.882 3.815 4.21.612a.75.75 0 01.416 1.279l-3.046 2.97.719 4.192a.75.75 0 01-1.088.791L8 12.347l-3.766 1.98a.75.75 0 01-1.088-.79l.72-4.194L.818 6.374a.75.75 0 01.416-1.28l4.21-.611L7.327.668A.75.75 0 018 .25zm0 2.445L6.615 5.5a.75.75 0 01-.564.41l-3.097.45 2.24 2.184a.75.75 0 01.216.664l-.528 3.084 2.769-1.456a.75.75 0 01.698 0l2.77 1.456-.53-3.084a.75.75 0 01.216-.664l2.24-2.183-3.096-.45a.75.75 0 01-.564-.41L8 2.694v.001z"></path>
+</svg><span data-view-component="true" class="d-inline">
+ Star
+</span> <span id="repo-stars-counter-star" aria-label="3 users starred this repository" data-singular-suffix="user starred this repository" data-plural-suffix="users starred this repository" data-turbo-replace="true" title="3" data-view-component="true" class="Counter js-social-count">3</span>
+</button></form> <details id="details-user-list-418699104" data-view-component="true" class="details-reset details-overlay BtnGroup-parent js-user-list-menu d-inline-block position-relative">
+ <summary aria-label="Add this repository to a list" data-view-component="true" class="btn-sm btn BtnGroup-item px-2 float-none"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-triangle-down">
+ <path d="M4.427 7.427l3.396 3.396a.25.25 0 00.354 0l3.396-3.396A.25.25 0 0011.396 7H4.604a.25.25 0 00-.177.427z"></path>
+</svg>
+</summary>
+ <details-menu
+ class="SelectMenu right-0"
+ src="/rlkamalapurkar/bodeplot/lists"
+
+ role="menu"
+
+>
+ <div class="SelectMenu-modal">
+ <button class="SelectMenu-closeButton position-absolute right-0 m-2" type="button" aria-label="Close menu" data-toggle-for="details-01286f">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x">
+ <path fill-rule="evenodd" d="M3.72 3.72a.75.75 0 011.06 0L8 6.94l3.22-3.22a.75.75 0 111.06 1.06L9.06 8l3.22 3.22a.75.75 0 11-1.06 1.06L8 9.06l-3.22 3.22a.75.75 0 01-1.06-1.06L6.94 8 3.72 4.78a.75.75 0 010-1.06z"></path>
+</svg>
+ </button>
+ <div
+ id="filter-menu-01286f"
+ class="d-flex flex-column flex-1 overflow-hidden"
+>
+ <div
+ class="SelectMenu-list"
+ >
+
+ <include-fragment class="SelectMenu-loading" aria-label="Loading">
+ <svg style="box-sizing: content-box; color: var(--color-icon-primary);" width="32" height="32" viewBox="0 0 16 16" fill="none" data-view-component="true" class="anim-rotate">
+ <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" />
+ <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke" />
+</svg>
+ </include-fragment>
+ </div>
+
+ </div>
+ </div>
+ </details-menu>
+</details>
+</div></div>
+ </li>
+
+
+
+</ul>
+
+ </div>
+
+ <div id="responsive-meta-container" data-turbo-replace>
+</div>
+
+
+ <nav data-pjax="#js-repo-pjax-container" aria-label="Repository" data-view-component="true" class="js-repo-nav js-sidenav-container-pjax js-responsive-underlinenav overflow-hidden UnderlineNav px-3 px-md-4 px-lg-5">
+
+ <ul data-view-component="true" class="UnderlineNav-body list-style-none">
+ <li data-view-component="true" class="d-inline-flex">
+ <a id="code-tab" href="/rlkamalapurkar/bodeplot" data-tab-item="i0code-tab" data-selected-links="repo_source repo_downloads repo_commits repo_releases repo_tags repo_branches repo_packages repo_deployments /rlkamalapurkar/bodeplot" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g c" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Code&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" aria-current="page" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item selected">
+
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code UnderlineNav-octicon d-none d-sm-inline">
+ <path fill-rule="evenodd" d="M4.72 3.22a.75.75 0 011.06 1.06L2.06 8l3.72 3.72a.75.75 0 11-1.06 1.06L.47 8.53a.75.75 0 010-1.06l4.25-4.25zm6.56 0a.75.75 0 10-1.06 1.06L13.94 8l-3.72 3.72a.75.75 0 101.06 1.06l4.25-4.25a.75.75 0 000-1.06l-4.25-4.25z"></path>
+</svg>
+ <span data-content="Code">Code</span>
+ <span id="code-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span>
+
+
+
+</a></li>
+ <li data-view-component="true" class="d-inline-flex">
+ <a id="issues-tab" href="/rlkamalapurkar/bodeplot/issues" data-tab-item="i1issues-tab" data-selected-links="repo_issues repo_labels repo_milestones /rlkamalapurkar/bodeplot/issues" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g i" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Issues&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item">
+
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-issue-opened UnderlineNav-octicon d-none d-sm-inline">
+ <path d="M8 9.5a1.5 1.5 0 100-3 1.5 1.5 0 000 3z"></path><path fill-rule="evenodd" d="M8 0a8 8 0 100 16A8 8 0 008 0zM1.5 8a6.5 6.5 0 1113 0 6.5 6.5 0 01-13 0z"></path>
+</svg>
+ <span data-content="Issues">Issues</span>
+ <span id="issues-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="1" data-view-component="true" class="Counter">1</span>
+
+
+
+</a></li>
+ <li data-view-component="true" class="d-inline-flex">
+ <a id="pull-requests-tab" href="/rlkamalapurkar/bodeplot/pulls" data-tab-item="i2pull-requests-tab" data-selected-links="repo_pulls checks /rlkamalapurkar/bodeplot/pulls" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g p" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Pull requests&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item">
+
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-git-pull-request UnderlineNav-octicon d-none d-sm-inline">
+ <path fill-rule="evenodd" d="M7.177 3.073L9.573.677A.25.25 0 0110 .854v4.792a.25.25 0 01-.427.177L7.177 3.427a.25.25 0 010-.354zM3.75 2.5a.75.75 0 100 1.5.75.75 0 000-1.5zm-2.25.75a2.25 2.25 0 113 2.122v5.256a2.251 2.251 0 11-1.5 0V5.372A2.25 2.25 0 011.5 3.25zM11 2.5h-1V4h1a1 1 0 011 1v5.628a2.251 2.251 0 101.5 0V5A2.5 2.5 0 0011 2.5zm1 10.25a.75.75 0 111.5 0 .75.75 0 01-1.5 0zM3.75 12a.75.75 0 100 1.5.75.75 0 000-1.5z"></path>
+</svg>
+ <span data-content="Pull requests">Pull requests</span>
+ <span id="pull-requests-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="0" hidden="hidden" data-view-component="true" class="Counter">0</span>
+
+
+
+</a></li>
+ <li data-view-component="true" class="d-inline-flex">
+ <a id="actions-tab" href="/rlkamalapurkar/bodeplot/actions" data-tab-item="i3actions-tab" data-selected-links="repo_actions /rlkamalapurkar/bodeplot/actions" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g a" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Actions&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item">
+
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-play UnderlineNav-octicon d-none d-sm-inline">
+ <path fill-rule="evenodd" d="M1.5 8a6.5 6.5 0 1113 0 6.5 6.5 0 01-13 0zM8 0a8 8 0 100 16A8 8 0 008 0zM6.379 5.227A.25.25 0 006 5.442v5.117a.25.25 0 00.379.214l4.264-2.559a.25.25 0 000-.428L6.379 5.227z"></path>
+</svg>
+ <span data-content="Actions">Actions</span>
+ <span id="actions-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span>
+
+
+
+</a></li>
+ <li data-view-component="true" class="d-inline-flex">
+ <a id="projects-tab" href="/rlkamalapurkar/bodeplot/projects" data-tab-item="i4projects-tab" data-selected-links="repo_projects new_repo_project repo_project /rlkamalapurkar/bodeplot/projects" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g b" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Projects&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item">
+
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-table UnderlineNav-octicon d-none d-sm-inline">
+ <path fill-rule="evenodd" d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0114.25 16H1.75A1.75 1.75 0 010 14.25V1.75zM1.5 6.5v7.75c0 .138.112.25.25.25H5v-8H1.5zM5 5H1.5V1.75a.25.25 0 01.25-.25H5V5zm1.5 1.5v8h7.75a.25.25 0 00.25-.25V6.5h-8zm8-1.5h-8V1.5h7.75a.25.25 0 01.25.25V5z"></path>
+</svg>
+ <span data-content="Projects">Projects</span>
+ <span id="projects-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="0" hidden="hidden" data-view-component="true" class="Counter">0</span>
+
+
+
+</a></li>
+ <li data-view-component="true" class="d-inline-flex">
+ <a id="wiki-tab" href="/rlkamalapurkar/bodeplot/wiki" data-tab-item="i5wiki-tab" data-selected-links="repo_wiki /rlkamalapurkar/bodeplot/wiki" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g w" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Wiki&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item">
+
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-book UnderlineNav-octicon d-none d-sm-inline">
+ <path fill-rule="evenodd" d="M0 1.75A.75.75 0 01.75 1h4.253c1.227 0 2.317.59 3 1.501A3.744 3.744 0 0111.006 1h4.245a.75.75 0 01.75.75v10.5a.75.75 0 01-.75.75h-4.507a2.25 2.25 0 00-1.591.659l-.622.621a.75.75 0 01-1.06 0l-.622-.621A2.25 2.25 0 005.258 13H.75a.75.75 0 01-.75-.75V1.75zm8.755 3a2.25 2.25 0 012.25-2.25H14.5v9h-3.757c-.71 0-1.4.201-1.992.572l.004-7.322zm-1.504 7.324l.004-5.073-.002-2.253A2.25 2.25 0 005.003 2.5H1.5v9h3.757a3.75 3.75 0 011.994.574z"></path>
+</svg>
+ <span data-content="Wiki">Wiki</span>
+ <span id="wiki-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span>
+
+
+
+</a></li>
+ <li data-view-component="true" class="d-inline-flex">
+ <a id="security-tab" href="/rlkamalapurkar/bodeplot/security" data-tab-item="i6security-tab" data-selected-links="security overview alerts policy token_scanning code_scanning /rlkamalapurkar/bodeplot/security" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g s" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Security&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item">
+
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-shield UnderlineNav-octicon d-none d-sm-inline">
+ <path fill-rule="evenodd" d="M7.467.133a1.75 1.75 0 011.066 0l5.25 1.68A1.75 1.75 0 0115 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.7 1.7 0 01-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 011.217-1.667l5.25-1.68zm.61 1.429a.25.25 0 00-.153 0l-5.25 1.68a.25.25 0 00-.174.238V7c0 1.358.275 2.666 1.057 3.86.784 1.194 2.121 2.34 4.366 3.297a.2.2 0 00.154 0c2.245-.956 3.582-2.104 4.366-3.298C13.225 9.666 13.5 8.36 13.5 7V3.48a.25.25 0 00-.174-.237l-5.25-1.68zM9 10.5a1 1 0 11-2 0 1 1 0 012 0zm-.25-5.75a.75.75 0 10-1.5 0v3a.75.75 0 001.5 0v-3z"></path>
+</svg>
+ <span data-content="Security">Security</span>
+ <include-fragment src="/rlkamalapurkar/bodeplot/security/overall-count" accept="text/fragment+html"></include-fragment>
+
+
+</a></li>
+ <li data-view-component="true" class="d-inline-flex">
+ <a id="insights-tab" href="/rlkamalapurkar/bodeplot/pulse" data-tab-item="i7insights-tab" data-selected-links="repo_graphs repo_contributors dependency_graph dependabot_updates pulse people community /rlkamalapurkar/bodeplot/pulse" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Insights&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item">
+
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-graph UnderlineNav-octicon d-none d-sm-inline">
+ <path fill-rule="evenodd" d="M1.5 1.75a.75.75 0 00-1.5 0v12.5c0 .414.336.75.75.75h14.5a.75.75 0 000-1.5H1.5V1.75zm14.28 2.53a.75.75 0 00-1.06-1.06L10 7.94 7.53 5.47a.75.75 0 00-1.06 0L3.22 8.72a.75.75 0 001.06 1.06L7 7.06l2.47 2.47a.75.75 0 001.06 0l5.25-5.25z"></path>
+</svg>
+ <span data-content="Insights">Insights</span>
+ <span id="insights-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span>
+
+
+
+</a></li>
+ <li data-view-component="true" class="d-inline-flex">
+ <a id="settings-tab" href="/rlkamalapurkar/bodeplot/settings" data-tab-item="i8settings-tab" data-selected-links="repo_settings repo_branch_settings collaborators hooks integration_installations repo_keys_settings issue_template_editor secrets_settings_actions secrets_settings_codespaces secrets_settings_dependabot security_analysis key_links_settings repo_actions_settings notifications repository_actions_settings_runners repository_environments interaction_limits repository_actions_settings_general repository_actions_settings_add_new_runner repo_pages_settings repo_announcements repo_protected_tags_settings code_review_limits /rlkamalapurkar/bodeplot/settings" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Settings&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item">
+
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-gear UnderlineNav-octicon d-none d-sm-inline">
+ <path fill-rule="evenodd" d="M7.429 1.525a6.593 6.593 0 011.142 0c.036.003.108.036.137.146l.289 1.105c.147.56.55.967.997 1.189.174.086.341.183.501.29.417.278.97.423 1.53.27l1.102-.303c.11-.03.175.016.195.046.219.31.41.641.573.989.014.031.022.11-.059.19l-.815.806c-.411.406-.562.957-.53 1.456a4.588 4.588 0 010 .582c-.032.499.119 1.05.53 1.456l.815.806c.08.08.073.159.059.19a6.494 6.494 0 01-.573.99c-.02.029-.086.074-.195.045l-1.103-.303c-.559-.153-1.112-.008-1.529.27-.16.107-.327.204-.5.29-.449.222-.851.628-.998 1.189l-.289 1.105c-.029.11-.101.143-.137.146a6.613 6.613 0 01-1.142 0c-.036-.003-.108-.037-.137-.146l-.289-1.105c-.147-.56-.55-.967-.997-1.189a4.502 4.502 0 01-.501-.29c-.417-.278-.97-.423-1.53-.27l-1.102.303c-.11.03-.175-.016-.195-.046a6.492 6.492 0 01-.573-.989c-.014-.031-.022-.11.059-.19l.815-.806c.411-.406.562-.957.53-1.456a4.587 4.587 0 010-.582c.032-.499-.119-1.05-.53-1.456l-.815-.806c-.08-.08-.073-.159-.059-.19a6.44 6.44 0 01.573-.99c.02-.029.086-.075.195-.045l1.103.303c.559.153 1.112.008 1.529-.27.16-.107.327-.204.5-.29.449-.222.851-.628.998-1.189l.289-1.105c.029-.11.101-.143.137-.146zM8 0c-.236 0-.47.01-.701.03-.743.065-1.29.615-1.458 1.261l-.29 1.106c-.017.066-.078.158-.211.224a5.994 5.994 0 00-.668.386c-.123.082-.233.09-.3.071L3.27 2.776c-.644-.177-1.392.02-1.82.63a7.977 7.977 0 00-.704 1.217c-.315.675-.111 1.422.363 1.891l.815.806c.05.048.098.147.088.294a6.084 6.084 0 000 .772c.01.147-.038.246-.088.294l-.815.806c-.474.469-.678 1.216-.363 1.891.2.428.436.835.704 1.218.428.609 1.176.806 1.82.63l1.103-.303c.066-.019.176-.011.299.071.213.143.436.272.668.386.133.066.194.158.212.224l.289 1.106c.169.646.715 1.196 1.458 1.26a8.094 8.094 0 001.402 0c.743-.064 1.29-.614 1.458-1.26l.29-1.106c.017-.066.078-.158.211-.224a5.98 5.98 0 00.668-.386c.123-.082.233-.09.3-.071l1.102.302c.644.177 1.392-.02 1.82-.63.268-.382.505-.789.704-1.217.315-.675.111-1.422-.364-1.891l-.814-.806c-.05-.048-.098-.147-.088-.294a6.1 6.1 0 000-.772c-.01-.147.039-.246.088-.294l.814-.806c.475-.469.679-1.216.364-1.891a7.992 7.992 0 00-.704-1.218c-.428-.609-1.176-.806-1.82-.63l-1.103.303c-.066.019-.176.011-.299-.071a5.991 5.991 0 00-.668-.386c-.133-.066-.194-.158-.212-.224L10.16 1.29C9.99.645 9.444.095 8.701.031A8.094 8.094 0 008 0zm1.5 8a1.5 1.5 0 11-3 0 1.5 1.5 0 013 0zM11 8a3 3 0 11-6 0 3 3 0 016 0z"></path>
+</svg>
+ <span data-content="Settings">Settings</span>
+ <span id="settings-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span>
+
+
+
+</a></li>
+</ul>
+ <div style="visibility:hidden;" data-view-component="true" class="UnderlineNav-actions js-responsive-underlinenav-overflow position-absolute pr-3 pr-md-4 pr-lg-5 right-0"> <details data-view-component="true" class="details-overlay details-reset position-relative">
+ <summary role="button" data-view-component="true"> <div class="UnderlineNav-item mr-0 border-0">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-kebab-horizontal">
+ <path d="M8 9a1.5 1.5 0 100-3 1.5 1.5 0 000 3zM1.5 9a1.5 1.5 0 100-3 1.5 1.5 0 000 3zm13 0a1.5 1.5 0 100-3 1.5 1.5 0 000 3z"></path>
+</svg>
+ <span class="sr-only">More</span>
+ </div>
+</summary>
+ <details-menu role="menu" data-view-component="true" class="dropdown-menu dropdown-menu-sw"> <ul>
+ <li data-menu-item="i0code-tab" hidden>
+ <a role="menuitem" class="js-selected-navigation-item selected dropdown-item" aria-current="page" data-selected-links="repo_source repo_downloads repo_commits repo_releases repo_tags repo_branches repo_packages repo_deployments /rlkamalapurkar/bodeplot" href="/rlkamalapurkar/bodeplot">
+ Code
+</a> </li>
+ <li data-menu-item="i1issues-tab" hidden>
+ <a role="menuitem" class="js-selected-navigation-item dropdown-item" data-selected-links="repo_issues repo_labels repo_milestones /rlkamalapurkar/bodeplot/issues" href="/rlkamalapurkar/bodeplot/issues">
+ Issues
+</a> </li>
+ <li data-menu-item="i2pull-requests-tab" hidden>
+ <a role="menuitem" class="js-selected-navigation-item dropdown-item" data-selected-links="repo_pulls checks /rlkamalapurkar/bodeplot/pulls" href="/rlkamalapurkar/bodeplot/pulls">
+ Pull requests
+</a> </li>
+ <li data-menu-item="i3actions-tab" hidden>
+ <a role="menuitem" class="js-selected-navigation-item dropdown-item" data-selected-links="repo_actions /rlkamalapurkar/bodeplot/actions" href="/rlkamalapurkar/bodeplot/actions">
+ Actions
+</a> </li>
+ <li data-menu-item="i4projects-tab" hidden>
+ <a role="menuitem" class="js-selected-navigation-item dropdown-item" data-selected-links="repo_projects new_repo_project repo_project /rlkamalapurkar/bodeplot/projects" href="/rlkamalapurkar/bodeplot/projects">
+ Projects
+</a> </li>
+ <li data-menu-item="i5wiki-tab" hidden>
+ <a role="menuitem" class="js-selected-navigation-item dropdown-item" data-selected-links="repo_wiki /rlkamalapurkar/bodeplot/wiki" href="/rlkamalapurkar/bodeplot/wiki">
+ Wiki
+</a> </li>
+ <li data-menu-item="i6security-tab" hidden>
+ <a role="menuitem" class="js-selected-navigation-item dropdown-item" data-selected-links="security overview alerts policy token_scanning code_scanning /rlkamalapurkar/bodeplot/security" href="/rlkamalapurkar/bodeplot/security">
+ Security
+</a> </li>
+ <li data-menu-item="i7insights-tab" hidden>
+ <a role="menuitem" class="js-selected-navigation-item dropdown-item" data-selected-links="repo_graphs repo_contributors dependency_graph dependabot_updates pulse people community /rlkamalapurkar/bodeplot/pulse" href="/rlkamalapurkar/bodeplot/pulse">
+ Insights
+</a> </li>
+ <li data-menu-item="i8settings-tab" hidden>
+ <a role="menuitem" class="js-selected-navigation-item dropdown-item" data-selected-links="repo_settings repo_branch_settings collaborators hooks integration_installations repo_keys_settings issue_template_editor secrets_settings_actions secrets_settings_codespaces secrets_settings_dependabot security_analysis key_links_settings repo_actions_settings notifications repository_actions_settings_runners repository_environments interaction_limits repository_actions_settings_general repository_actions_settings_add_new_runner repo_pages_settings repo_announcements repo_protected_tags_settings code_review_limits /rlkamalapurkar/bodeplot/settings" href="/rlkamalapurkar/bodeplot/settings">
+ Settings
+</a> </li>
+ </ul>
+</details-menu>
+</details></div>
+</nav>
+
+
+
+ </div>
+
+
+
+ <turbo-frame id="repo-content-turbo-frame" target="_top" data-turbo-action="advance" class="">
+ <div id="repo-content-pjax-container" class="repository-content " >
+ <a href="https://github.dev/" class="d-none js-github-dev-shortcut" data-hotkey=".">Open in github.dev</a>
+ <a href="https://github.dev/" class="d-none js-github-dev-new-tab-shortcut" data-hotkey="Shift+.,Shift+&gt;,&gt;" target="_blank">Open in a new github.dev tab</a>
+
+
+
+
+
+
+ <div class="clearfix container-xl px-3 px-md-4 px-lg-5 mt-4">
+
+
+<div data-test-selector="blob-container">
+
+
+
+
+
+
+
+
+<a class="d-none js-permalink-shortcut" data-hotkey="y" href="/rlkamalapurkar/bodeplot/blob/3746d1613a5eea9f1e26d4cf5bcce954068463f3/bodeplot.dtx">Permalink</a>
+
+<div class="d-flex flex-items-start flex-shrink-0 pb-3 flex-wrap flex-md-nowrap flex-justify-between flex-md-justify-start">
+
+<div class="position-relative">
+ <details
+ class="js-branch-select-menu details-reset details-overlay mr-0 mb-0 "
+ id="branch-select-menu"
+ data-hydro-click-payload="{&quot;event_type&quot;:&quot;repository.click&quot;,&quot;payload&quot;:{&quot;target&quot;:&quot;REFS_SELECTOR_MENU&quot;,&quot;repository_id&quot;:418699104,&quot;originating_url&quot;:&quot;https://github.com/rlkamalapurkar/bodeplot/blob/main/bodeplot.dtx&quot;,&quot;user_id&quot;:30264720}}" data-hydro-click-hmac="c1c4620c331fe499395f23e4b11d705872e097180066faa617a9423d8fb0679d">
+ <summary class="btn css-truncate"
+ data-hotkey="w"
+ title="Switch branches or tags">
+ <svg text="gray" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-git-branch">
+ <path fill-rule="evenodd" d="M11.75 2.5a.75.75 0 100 1.5.75.75 0 000-1.5zm-2.25.75a2.25 2.25 0 113 2.122V6A2.5 2.5 0 0110 8.5H6a1 1 0 00-1 1v1.128a2.251 2.251 0 11-1.5 0V5.372a2.25 2.25 0 111.5 0v1.836A2.492 2.492 0 016 7h4a1 1 0 001-1v-.628A2.25 2.25 0 019.5 3.25zM4.25 12a.75.75 0 100 1.5.75.75 0 000-1.5zM3.5 3.25a.75.75 0 111.5 0 .75.75 0 01-1.5 0z"></path>
+</svg>
+ <span class="css-truncate-target" data-menu-button>main</span>
+ <span class="dropdown-caret"></span>
+ </summary>
+
+
+<div class="SelectMenu">
+ <div class="SelectMenu-modal">
+ <header class="SelectMenu-header">
+ <span class="SelectMenu-title">Switch branches/tags</span>
+ <button class="SelectMenu-closeButton" type="button" data-toggle-for="branch-select-menu"><svg aria-label="Close menu" aria-hidden="false" role="img" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x">
+ <path fill-rule="evenodd" d="M3.72 3.72a.75.75 0 011.06 0L8 6.94l3.22-3.22a.75.75 0 111.06 1.06L9.06 8l3.22 3.22a.75.75 0 11-1.06 1.06L8 9.06l-3.22 3.22a.75.75 0 01-1.06-1.06L6.94 8 3.72 4.78a.75.75 0 010-1.06z"></path>
+</svg></button>
+ </header>
+
+ <input-demux data-action="tab-container-change:input-demux#storeInput tab-container-changed:input-demux#updateInput">
+ <tab-container class="d-flex flex-column js-branches-tags-tabs" style="min-height: 0;">
+ <div class="SelectMenu-filter">
+ <input data-target="input-demux.source"
+ id="context-commitish-filter-field"
+ class="SelectMenu-input form-control"
+ aria-owns="ref-list-branches"
+ data-controls-ref-menu-id="ref-list-branches"
+ autofocus
+ autocomplete="off"
+ aria-label="Find or create a branch…"
+ placeholder="Find or create a branch…"
+ type="text"
+ >
+ </div>
+
+ <div class="SelectMenu-tabs" role="tablist" data-target="input-demux.control" >
+ <button class="SelectMenu-tab" type="button" role="tab" aria-selected="true">Branches</button>
+ <button class="SelectMenu-tab" type="button" role="tab">Tags</button>
+ </div>
+
+ <div role="tabpanel" id="ref-list-branches" data-filter-placeholder="Find or create a branch…" tabindex="" class="d-flex flex-column flex-auto overflow-auto">
+ <ref-selector
+ type="branch"
+ data-targets="input-demux.sinks"
+ data-action="
+ input-entered:ref-selector#inputEntered
+ tab-selected:ref-selector#tabSelected
+ focus-list:ref-selector#focusFirstListMember
+ "
+ query-endpoint="/rlkamalapurkar/bodeplot/refs"
+ can-create
+ cache-key="v0:1659311748.791003"
+ current-committish="bWFpbg=="
+ default-branch="bWFpbg=="
+ name-with-owner="cmxrYW1hbGFwdXJrYXIvYm9kZXBsb3Q="
+ prefetch-on-mouseover
+ >
+
+ <template data-target="ref-selector.fetchFailedTemplate">
+ <div class="SelectMenu-message" data-index="{{ index }}">Could not load branches</div>
+ </template>
+
+ <template data-target="ref-selector.noMatchTemplate">
+ <create-repo-from-selector
+ check-tag-name-exists-path="/rlkamalapurkar/bodeplot/branches/check_tag_name_exists"
+ >
+ <!-- '"` --><!-- </textarea></xmp> --></option></form><form data-turbo="false" action="/rlkamalapurkar/bodeplot/branches" accept-charset="UTF-8" method="post"><input type="hidden" name="authenticity_token" value="5rxM_5hefL56cgTlvQIw7QE6iLZfCHyochsLZc1CKr-UNxKe5wSlRyaj6Ua5qvM4QyHMqY294erD51PXrMjR6w" />
+ <input data-target="create-repo-from-selector.refName" type="hidden" name="name" value="{{ refName }}">
+ <input type="hidden" name="branch" value="main">
+ <input type="hidden" name="path_binary" value="Ym9kZXBsb3QuZHR4">
+
+ <button
+ class="SelectMenu-item wb-break-word"
+ type="submit"
+ role="menuitem"
+ data-index="{{ index }}"
+ data-action="click:create-repo-from-selector#createBranch"
+ data-hydro-click="{&quot;event_type&quot;:&quot;repository.click&quot;,&quot;payload&quot;:{&quot;target&quot;:&quot;REFS_SELECTOR_MENU_CREATE_BRANCH&quot;,&quot;repository_id&quot;:418699104,&quot;ref_name&quot;:&quot;{{ refName }}&quot;,&quot;originating_url&quot;:&quot;https://github.com/rlkamalapurkar/bodeplot/blob/main/bodeplot.dtx&quot;,&quot;user_id&quot;:30264720}}" data-hydro-click-hmac="e50274b5821d06e67a6f5ec2fc9d7477a5bbbf8b19542241a614390afe1c0b5c">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-git-branch SelectMenu-icon flex-self-baseline">
+ <path fill-rule="evenodd" d="M11.75 2.5a.75.75 0 100 1.5.75.75 0 000-1.5zm-2.25.75a2.25 2.25 0 113 2.122V6A2.5 2.5 0 0110 8.5H6a1 1 0 00-1 1v1.128a2.251 2.251 0 11-1.5 0V5.372a2.25 2.25 0 111.5 0v1.836A2.492 2.492 0 016 7h4a1 1 0 001-1v-.628A2.25 2.25 0 019.5 3.25zM4.25 12a.75.75 0 100 1.5.75.75 0 000-1.5zM3.5 3.25a.75.75 0 111.5 0 .75.75 0 01-1.5 0z"></path>
+</svg>
+ <div>
+ <span class="text-bold">Create branch: {{ refName }}</span>
+ <span class="color-fg-muted">from ‘main’</span>
+ <input type="hidden" value="vKcCT6KzpzIGITtvyWcnO17OG_IxNkmj8INgDHoywdtmjHf5Fmm_i55lq1ceVyKqYn2sCOHGggiEpqkGUAI8bQ" data-csrf="true" data-target="create-repo-from-selector.checkTagNameExistsPathCsrf" />
+ </div>
+ </button>
+</form> </create-repo-from-selector>
+</template>
+
+
+ <div data-target="ref-selector.listContainer" role="menu" class="SelectMenu-list " data-turbo-frame="repo-content-turbo-frame">
+ <div class="SelectMenu-loading pt-3 pb-0 overflow-hidden" aria-label="Menu is loading">
+ <svg style="box-sizing: content-box; color: var(--color-icon-primary);" width="32" height="32" viewBox="0 0 16 16" fill="none" data-view-component="true" class="anim-rotate">
+ <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" />
+ <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke" />
+</svg>
+ </div>
+ </div>
+
+
+
+<template data-target="ref-selector.itemTemplate">
+ <a href="https://github.com/rlkamalapurkar/bodeplot/blob/{{ urlEncodedRefName }}/bodeplot.dtx" class="SelectMenu-item" role="menuitemradio" rel="nofollow" aria-checked="{{ isCurrent }}" data-index="{{ index }}" >
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check SelectMenu-icon SelectMenu-icon--check">
+ <path fill-rule="evenodd" d="M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z"></path>
+</svg>
+ <span class="flex-1 css-truncate css-truncate-overflow {{ isFilteringClass }}">{{ refName }}</span>
+ <span hidden="{{ isNotDefault }}" class="Label Label--secondary flex-self-start">default</span>
+ </a>
+</template>
+
+
+ <footer class="SelectMenu-footer"><a href="/rlkamalapurkar/bodeplot/branches">View all branches</a></footer>
+ </ref-selector>
+
+ </div>
+
+ <div role="tabpanel" id="tags-menu" data-filter-placeholder="Find a tag" tabindex="" hidden class="d-flex flex-column flex-auto overflow-auto">
+ <ref-selector
+ type="tag"
+ data-action="
+ input-entered:ref-selector#inputEntered
+ tab-selected:ref-selector#tabSelected
+ focus-list:ref-selector#focusFirstListMember
+ "
+ data-targets="input-demux.sinks"
+ query-endpoint="/rlkamalapurkar/bodeplot/refs"
+ cache-key="v0:1659311748.791003"
+ current-committish="bWFpbg=="
+ default-branch="bWFpbg=="
+ name-with-owner="cmxrYW1hbGFwdXJrYXIvYm9kZXBsb3Q="
+ >
+
+ <template data-target="ref-selector.fetchFailedTemplate">
+ <div class="SelectMenu-message" data-index="{{ index }}">Could not load tags</div>
+ </template>
+
+ <template data-target="ref-selector.noMatchTemplate">
+ <div class="SelectMenu-message" data-index="{{ index }}">Nothing to show</div>
+ </template>
+
+
+
+<template data-target="ref-selector.itemTemplate">
+ <a href="https://github.com/rlkamalapurkar/bodeplot/blob/{{ urlEncodedRefName }}/bodeplot.dtx" class="SelectMenu-item" role="menuitemradio" rel="nofollow" aria-checked="{{ isCurrent }}" data-index="{{ index }}" >
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check SelectMenu-icon SelectMenu-icon--check">
+ <path fill-rule="evenodd" d="M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z"></path>
+</svg>
+ <span class="flex-1 css-truncate css-truncate-overflow {{ isFilteringClass }}">{{ refName }}</span>
+ <span hidden="{{ isNotDefault }}" class="Label Label--secondary flex-self-start">default</span>
+ </a>
+</template>
+
+
+ <div data-target="ref-selector.listContainer" role="menu" class="SelectMenu-list" data-turbo-frame="repo-content-turbo-frame">
+ <div class="SelectMenu-loading pt-3 pb-0 overflow-hidden" aria-label="Menu is loading">
+ <svg style="box-sizing: content-box; color: var(--color-icon-primary);" width="32" height="32" viewBox="0 0 16 16" fill="none" data-view-component="true" class="anim-rotate">
+ <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" />
+ <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke" />
+</svg>
+ </div>
+ </div>
+ <footer class="SelectMenu-footer"><a href="/rlkamalapurkar/bodeplot/tags">View all tags</a></footer>
+ </ref-selector>
+ </div>
+ </tab-container>
+ </input-demux>
+ </div>
+</div>
+
+ </details>
+
+</div>
+
+
+<div class="Overlay--hidden Overlay-backdrop--center" data-modal-dialog-overlay>
+ <modal-dialog role="dialog" id="warn-tag-match-create-branch-dialog" aria-modal="true" aria-labelledby="warn-tag-match-create-branch-dialog-header" data-view-component="true" class="Overlay Overlay--width-large Overlay--height-auto Overlay--motion-scaleFade">
+ <header class="Overlay-header Overlay-header--large Overlay-header--divided">
+ <div class="Overlay-headerContentWrap">
+ <div class="Overlay-titleWrap">
+ <h1 id="warn-tag-match-create-branch-dialog-header" class="Overlay-title">Name already in use</h1>
+ </div>
+ <div class="Overlay-actionWrap">
+ <button data-close-dialog-id="warn-tag-match-create-branch-dialog" aria-label="Close" type="button" data-view-component="true" class="close-button Overlay-closeButton"><svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x">
+ <path fill-rule="evenodd" d="M3.72 3.72a.75.75 0 011.06 0L8 6.94l3.22-3.22a.75.75 0 111.06 1.06L9.06 8l3.22 3.22a.75.75 0 11-1.06 1.06L8 9.06l-3.22 3.22a.75.75 0 01-1.06-1.06L6.94 8 3.72 4.78a.75.75 0 010-1.06z"></path>
+</svg></button>
+ </div>
+ </div>
+ </header>
+ <div class="Overlay-body ">
+
+ <div data-view-component="true"> A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
+</div>
+
+ </div>
+ <footer class="Overlay-footer Overlay-footer--alignEnd">
+ <button data-close-dialog-id="warn-tag-match-create-branch-dialog" type="button" data-view-component="true" class="btn"> Cancel
+</button>
+ <button data-submit-dialog-id="warn-tag-match-create-branch-dialog" type="button" data-view-component="true" class="btn-danger btn"> Create
+</button>
+ </footer>
+</modal-dialog></div>
+
+
+ <h2 id="blob-path" class="breadcrumb flex-auto flex-self-center min-width-0 text-normal mx-2 width-full width-md-auto flex-order-1 flex-md-order-none mt-3 mt-md-0">
+ <span class="js-repo-root text-bold"><span class="js-path-segment d-inline-block wb-break-all"><a data-turbo-frame="repo-content-turbo-frame" href="/rlkamalapurkar/bodeplot"><span>bodeplot</span></a></span></span><span class="separator">/</span><strong class="final-path">bodeplot.dtx</strong>
+ </h2>
+ <a href="/rlkamalapurkar/bodeplot/find/main" data-pjax="" data-hotkey="t" data-view-component="true" class="btn mr-2 d-none d-md-block"> Go to file
+</a>
+ <details id="blob-more-options-details" data-view-component="true" class="details-overlay details-reset position-relative">
+ <summary role="button" data-view-component="true" class="btn"> <svg aria-label="More options" role="img" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-kebab-horizontal">
+ <path d="M8 9a1.5 1.5 0 100-3 1.5 1.5 0 000 3zM1.5 9a1.5 1.5 0 100-3 1.5 1.5 0 000 3zm13 0a1.5 1.5 0 100-3 1.5 1.5 0 000 3z"></path>
+</svg>
+</summary>
+ <div data-view-component="true"> <ul class="dropdown-menu dropdown-menu-sw">
+ <li class="d-block d-md-none">
+ <a class="dropdown-item d-flex flex-items-baseline" data-hydro-click="{&quot;event_type&quot;:&quot;repository.click&quot;,&quot;payload&quot;:{&quot;target&quot;:&quot;FIND_FILE_BUTTON&quot;,&quot;repository_id&quot;:418699104,&quot;originating_url&quot;:&quot;https://github.com/rlkamalapurkar/bodeplot/blob/main/bodeplot.dtx&quot;,&quot;user_id&quot;:30264720}}" data-hydro-click-hmac="3a564da3df77b835819a7a4175de6ddf859493e7f607a77812c130b85186d0cd" data-ga-click="Repository, find file, location:repo overview" data-hotkey="t" href="/rlkamalapurkar/bodeplot/find/main">
+ <span class="flex-auto">Go to file</span>
+ <span class="text-small color-fg-muted" aria-hidden="true">T</span>
+</a> </li>
+ <li data-toggle-for="blob-more-options-details">
+ <button data-toggle-for="jumpto-line-details-dialog" type="button" data-view-component="true" class="dropdown-item btn-link"> <span class="d-flex flex-items-baseline">
+ <span class="flex-auto">Go to line</span>
+ <span class="text-small color-fg-muted" aria-hidden="true">L</span>
+ </span>
+</button> </li>
+ <li class="dropdown-divider" role="none"></li>
+ <li>
+ <clipboard-copy data-toggle-for="blob-more-options-details" aria-label="Copy path" value="bodeplot.dtx" data-view-component="true" class="dropdown-item cursor-pointer">
+
+ Copy path
+
+</clipboard-copy> </li>
+ <li>
+ <clipboard-copy data-toggle-for="blob-more-options-details" aria-label="Copy permalink" value="https://github.com/rlkamalapurkar/bodeplot/blob/3746d1613a5eea9f1e26d4cf5bcce954068463f3/bodeplot.dtx" data-view-component="true" class="dropdown-item cursor-pointer">
+
+ <span class="d-flex flex-items-baseline">
+ <span class="flex-auto">Copy permalink</span>
+ </span>
+
+</clipboard-copy> </li>
+ </ul>
+</div>
+</details></div>
+
+
+
+
+
+ <div id="spoof-warning" class="mt-0 pb-3" hidden aria-hidden>
+ <div data-view-component="true" class="flash flash-warn mt-0 clearfix">
+
+
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert float-left mt-1">
+ <path fill-rule="evenodd" d="M8.22 1.754a.25.25 0 00-.44 0L1.698 13.132a.25.25 0 00.22.368h12.164a.25.25 0 00.22-.368L8.22 1.754zm-1.763-.707c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0114.082 15H1.918a1.75 1.75 0 01-1.543-2.575L6.457 1.047zM9 11a1 1 0 11-2 0 1 1 0 012 0zm-.25-5.25a.75.75 0 00-1.5 0v2.5a.75.75 0 001.5 0v-2.5z"></path>
+</svg>
+
+ <div class="overflow-hidden">This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.</div>
+
+
+
+</div></div>
+
+ <include-fragment src="/rlkamalapurkar/bodeplot/spoofed_commit_check/3746d1613a5eea9f1e26d4cf5bcce954068463f3" data-test-selector="spoofed-commit-check"></include-fragment>
+
+ <div class="Box d-flex flex-column flex-shrink-0 mb-3">
+
+ <div class="Box-header Details js-details-container">
+ <div class="d-flex flex-items-center">
+ <span class="flex-shrink-0 ml-n1 mr-n1 mt-n1 mb-n1">
+ <a rel="author" data-hovercard-type="user" data-hovercard-url="/users/rlkamalapurkar/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/rlkamalapurkar"><img class="avatar avatar-user" src="https://avatars.githubusercontent.com/u/30264720?s=48&amp;v=4" width="24" height="24" alt="@rlkamalapurkar" /></a>
+ </span>
+ <div class="flex-1 d-flex flex-items-center ml-3 min-width-0">
+ <div class="css-truncate css-truncate-overflow">
+ <a class="text-bold Link--primary" rel="author" data-hovercard-type="user" data-hovercard-url="/users/rlkamalapurkar/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/rlkamalapurkar">rlkamalapurkar</a>
+
+ <span class="markdown-title">
+ <a data-pjax="true" title="Bump to 1.1.2" class="Link--secondary" href="/rlkamalapurkar/bodeplot/commit/3746d1613a5eea9f1e26d4cf5bcce954068463f3">Bump to 1.1.2</a>
+ </span>
+ </div>
+
+
+ <span class="ml-2">
+ <include-fragment accept="text/fragment+html" src="/rlkamalapurkar/bodeplot/commit/3746d1613a5eea9f1e26d4cf5bcce954068463f3/rollup?direction=e" class="d-inline"></include-fragment>
+ </span>
+ </div>
+ <div class="ml-3 d-flex flex-shrink-0 flex-items-center flex-justify-end color-fg-muted no-wrap">
+ <span class="d-none d-md-inline">
+ <span>Latest commit</span>
+ <a class="text-small text-mono Link--secondary" href="/rlkamalapurkar/bodeplot/commit/3746d1613a5eea9f1e26d4cf5bcce954068463f3" data-pjax>3746d16</a>
+ <span itemprop="dateModified"><relative-time datetime="2022-10-30T05:38:17Z" class="no-wrap">Oct 30, 2022</relative-time></span>
+ </span>
+
+ <a data-pjax href="/rlkamalapurkar/bodeplot/commits/main/bodeplot.dtx" class="ml-3 no-wrap Link--primary no-underline">
+ <svg text="gray" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-history">
+ <path fill-rule="evenodd" d="M1.643 3.143L.427 1.927A.25.25 0 000 2.104V5.75c0 .138.112.25.25.25h3.646a.25.25 0 00.177-.427L2.715 4.215a6.5 6.5 0 11-1.18 4.458.75.75 0 10-1.493.154 8.001 8.001 0 101.6-5.684zM7.75 4a.75.75 0 01.75.75v2.992l2.028.812a.75.75 0 01-.557 1.392l-2.5-1A.75.75 0 017 8.25v-3.5A.75.75 0 017.75 4z"></path>
+</svg>
+ <span class="d-none d-sm-inline">
+ <strong>History</strong>
+ </span>
+ </a>
+ </div>
+ </div>
+
+ </div>
+
+ <div class="Box-body d-flex flex-items-center flex-auto border-bottom-0 flex-wrap" >
+ <details class="details-reset details-overlay details-overlay-dark lh-default color-fg-default float-left mr-3" id="blob_contributors_box">
+ <summary class="Link--primary">
+ <svg text="gray" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-people">
+ <path fill-rule="evenodd" d="M5.5 3.5a2 2 0 100 4 2 2 0 000-4zM2 5.5a3.5 3.5 0 115.898 2.549 5.507 5.507 0 013.034 4.084.75.75 0 11-1.482.235 4.001 4.001 0 00-7.9 0 .75.75 0 01-1.482-.236A5.507 5.507 0 013.102 8.05 3.49 3.49 0 012 5.5zM11 4a.75.75 0 100 1.5 1.5 1.5 0 01.666 2.844.75.75 0 00-.416.672v.352a.75.75 0 00.574.73c1.2.289 2.162 1.2 2.522 2.372a.75.75 0 101.434-.44 5.01 5.01 0 00-2.56-3.012A3 3 0 0011 4z"></path>
+</svg>
+ <strong>1</strong>
+
+ contributor
+ </summary>
+ <details-dialog
+ class="Box Box--overlay d-flex flex-column anim-fade-in fast"
+ aria-label="Users who have contributed to this file"
+ src="/rlkamalapurkar/bodeplot/contributors-list/main/bodeplot.dtx" preload>
+ <div class="Box-header">
+ <button class="Box-btn-octicon btn-octicon float-right" type="button" aria-label="Close dialog" data-close-dialog>
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x">
+ <path fill-rule="evenodd" d="M3.72 3.72a.75.75 0 011.06 0L8 6.94l3.22-3.22a.75.75 0 111.06 1.06L9.06 8l3.22 3.22a.75.75 0 11-1.06 1.06L8 9.06l-3.22 3.22a.75.75 0 01-1.06-1.06L6.94 8 3.72 4.78a.75.75 0 010-1.06z"></path>
+</svg>
+ </button>
+ <h3 class="Box-title">
+ Users who have contributed to this file
+ </h3>
+ </div>
+ <include-fragment>
+ <svg style="box-sizing: content-box; color: var(--color-icon-primary);" width="32" height="32" viewBox="0 0 16 16" fill="none" data-view-component="true" class="my-3 mx-auto d-block anim-rotate">
+ <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" />
+ <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke" />
+</svg>
+ </include-fragment>
+ </details-dialog>
+ </details>
+ </div>
+</div>
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <div data-target="readme-toc.content" class="Box mt-3 position-relative">
+
+ <div
+ class="Box-header js-blob-header py-2 pr-2 d-flex flex-shrink-0 flex-md-row flex-items-center"
+
+ >
+
+
+ <div class="text-mono f6 flex-auto pr-3 flex-order-2 flex-md-order-1">
+
+ 2120 lines (2091 sloc)
+ <span class="file-info-divider"></span>
+ 95.6 KB
+ </div>
+
+ <div class="d-flex py-1 py-md-0 flex-auto flex-order-1 flex-md-order-2 flex-sm-grow-0 flex-justify-between hide-sm hide-md">
+
+
+ <div class="BtnGroup">
+ <a data-permalink-href="/rlkamalapurkar/bodeplot/raw/3746d1613a5eea9f1e26d4cf5bcce954068463f3/bodeplot.dtx" href="/rlkamalapurkar/bodeplot/raw/main/bodeplot.dtx" id="raw-url" data-view-component="true" class="js-permalink-replaceable-link btn-sm btn BtnGroup-item"> Raw
+</a> <a data-permalink-href="/rlkamalapurkar/bodeplot/blame/3746d1613a5eea9f1e26d4cf5bcce954068463f3/bodeplot.dtx" href="/rlkamalapurkar/bodeplot/blame/main/bodeplot.dtx" data-hotkey="b" data-view-component="true" class="js-update-url-with-hash js-permalink-replaceable-link btn-sm btn BtnGroup-item"> Blame
+</a> </div>
+
+ <div class="d-flex">
+
+<div class="ml-1" data-test-selector="edit-dropdown-menu-component">
+ <form class="BtnGroup-parent js-update-url-with-hash " data-turbo="false" action="/rlkamalapurkar/bodeplot/edit/main/bodeplot.dtx" accept-charset="UTF-8" method="post"><input type="hidden" name="authenticity_token" value="ogSciVVe3c6UjkSMOdTrooZ3CRariBs60fN-g5VkyVMU__FRgDboEtausap2D3k1WWmBYYtNuzrLhKbxcJNxfQ" autocomplete="off" />
+ <button title="Edit this file" data-hotkey="e" data-disable-with="" data-test-selector="edit-icon-button" type="submit" data-view-component="true" class="btn-sm BtnGroup-item btn"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-pencil">
+ <path fill-rule="evenodd" d="M11.013 1.427a1.75 1.75 0 012.474 0l1.086 1.086a1.75 1.75 0 010 2.474l-8.61 8.61c-.21.21-.47.364-.756.445l-3.251.93a.75.75 0 01-.927-.928l.929-3.25a1.75 1.75 0 01.445-.758l8.61-8.61zm1.414 1.06a.25.25 0 00-.354 0L10.811 3.75l1.439 1.44 1.263-1.263a.25.25 0 000-.354l-1.086-1.086zM11.189 6.25L9.75 4.81l-6.286 6.287a.25.25 0 00-.064.108l-.558 1.953 1.953-.558a.249.249 0 00.108-.064l6.286-6.286z"></path>
+</svg>
+</button></form>
+ <details class="details-reset details-overlay select-menu BtnGroup-parent d-inline-block position-relative">
+ <summary data-disable-invalid="" data-disable-with="" data-dropdown-tracking="{&quot;type&quot;:&quot;blob_edit_dropdown.more_options_click&quot;,&quot;context&quot;:{&quot;repository_id&quot;:418699104,&quot;actor_id&quot;:30264720,&quot;github_dev_enabled&quot;:true,&quot;edit_enabled&quot;:true,&quot;small_screen&quot;:false}}" aria-label="Select additional options" data-view-component="true" class="js-blob-dropdown-click select-menu-button btn-sm btn BtnGroup-item float-none px-2">
+</summary> <div class="SelectMenu right-0">
+ <div class="SelectMenu-modal width-full">
+ <div class="SelectMenu-list SelectMenu-list--borderless py-2">
+ <form class="SelectMenu-item js-update-url-with-hash " data-turbo="false" action="/rlkamalapurkar/bodeplot/edit/main/bodeplot.dtx" accept-charset="UTF-8" method="post"><input type="hidden" name="authenticity_token" value="Z36ugw0Ij6BSb-ME2cRu3lkTalu_y3lfjfAST0cdPlvRhcNb2GC6fBBPFiKWH_xJhg3iLJ8O2V-Xh8o9ouqGdQ" autocomplete="off" />
+ <button title="Edit this file" data-test-selector="edit-text-button" type="submit" data-view-component="true" class="btn-invisible btn width-full d-flex flex-justify-between color-fg-default text-normal p-0"> <div class="mr-5">Edit this file</div>
+ <div class="color-fg-muted">E</div>
+</button></form>
+ <a aria-label="Open this file in github.dev" data-test-selector="github-dev-link" data-dropdown-tracking="{&quot;type&quot;:&quot;blob_edit_dropdown.dev_link_click&quot;,&quot;context&quot;:{&quot;repository_id&quot;:418699104,&quot;actor_id&quot;:30264720,&quot;edit_enabled&quot;:true,&quot;small_screen&quot;:false}}" href="https://github.dev/" data-view-component="true" class="SelectMenu-item js-github-dev-shortcut js-blob-dropdown-click width-full d-flex flex-justify-between color-fg-default f5 text-normal">
+ <div class="mr-5 no-wrap">Open in github.dev</div>
+ <div class="color-fg-muted">.</div>
+</a>
+ <a data-platforms="windows,mac" data-test-selector="github-desktop-link" aria-label="Open this file in GitHub Desktop" href="x-github-client://openRepo/https://github.com/rlkamalapurkar/bodeplot?branch=main&amp;filepath=bodeplot.dtx" data-view-component="true" class="SelectMenu-item no-wrap js-remove-unless-platform width-full text-normal color-fg-default f5">
+ Open in GitHub Desktop
+</a> </div>
+ </div>
+ </div>
+ </details>
+</div>
+
+
+
+<div data-test-selector="remote-clipboard-copy">
+ <remote-clipboard-copy class="d-inline-block btn-octicon" style="height: 26px" data-src="/rlkamalapurkar/bodeplot/raw/3746d1613a5eea9f1e26d4cf5bcce954068463f3/bodeplot.dtx" data-action="click:remote-clipboard-copy#remoteCopy">
+
+
+ <span data-target="remote-clipboard-copy.idle"> <span class="tooltipped tooltipped-nw cursor-pointer" data-hydro-click="{&quot;event_type&quot;:&quot;repository.click&quot;,&quot;payload&quot;:{&quot;target&quot;:&quot;COPY_RAW_CONTENTS_BUTTON&quot;,&quot;repository_id&quot;:418699104,&quot;originating_url&quot;:&quot;https://github.com/rlkamalapurkar/bodeplot/blob/main/bodeplot.dtx&quot;,&quot;user_id&quot;:30264720}}" data-hydro-click-hmac="8f37951dad2d8aa3fb41b1693b2cae724a08266137cfd94460fe3d796b0dcc62" aria-label="Copy raw contents">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copy">
+ <path fill-rule="evenodd" d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 010 1.5h-1.5a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-1.5a.75.75 0 011.5 0v1.5A1.75 1.75 0 019.25 16h-7.5A1.75 1.75 0 010 14.25v-7.5z"></path><path fill-rule="evenodd" d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0114.25 11h-7.5A1.75 1.75 0 015 9.25v-7.5zm1.75-.25a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-7.5a.25.25 0 00-.25-.25h-7.5z"></path>
+</svg>
+</span></span>
+ <span data-target="remote-clipboard-copy.fetching" hidden="hidden"> <svg style="box-sizing: content-box; color: var(--color-icon-primary);" width="16" height="16" viewBox="0 0 16 16" fill="none" data-view-component="true" class="anim-rotate">
+ <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" />
+ <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke" />
+</svg>
+</span>
+ <span data-target="remote-clipboard-copy.success" hidden="hidden"> <span class="tooltipped tooltipped-nw" aria-label="Copied!">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check color-fg-success">
+ <path fill-rule="evenodd" d="M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z"></path>
+</svg>
+ </span>
+</span>
+ <span data-target="remote-clipboard-copy.error" hidden="hidden"> <span class="tooltipped tooltipped-nw" aria-label="Something went wrong. Try again.">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert color-fg-attention">
+ <path fill-rule="evenodd" d="M8.22 1.754a.25.25 0 00-.44 0L1.698 13.132a.25.25 0 00.22.368h12.164a.25.25 0 00.22-.368L8.22 1.754zm-1.763-.707c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0114.082 15H1.918a1.75 1.75 0 01-1.543-2.575L6.457 1.047zM9 11a1 1 0 11-2 0 1 1 0 012 0zm-.25-5.25a.75.75 0 00-1.5 0v2.5a.75.75 0 001.5 0v-2.5z"></path>
+</svg>
+ </span>
+</span>
+</remote-clipboard-copy></div>
+
+
+ <!-- '"` --><!-- </textarea></xmp> --></option></form><form class="inline-form" data-turbo="false" action="/rlkamalapurkar/bodeplot/delete/main/bodeplot.dtx" accept-charset="UTF-8" method="post"><input type="hidden" name="authenticity_token" value="82q89xa2ESvmLsnxxWrIHifQJfEadxnRIqMbSYWd-K4BNgOZnOnoTw7e-aAZAIZvwgWOcZTBYSfPON_62cqDqQ" />
+ <button class="btn-octicon btn-octicon-danger tooltipped tooltipped-nw" type="submit"
+ aria-label="Delete this file" data-disable-with>
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-trash">
+ <path fill-rule="evenodd" d="M6.5 1.75a.25.25 0 01.25-.25h2.5a.25.25 0 01.25.25V3h-3V1.75zm4.5 0V3h2.25a.75.75 0 010 1.5H2.75a.75.75 0 010-1.5H5V1.75C5 .784 5.784 0 6.75 0h2.5C10.216 0 11 .784 11 1.75zM4.496 6.675a.75.75 0 10-1.492.15l.66 6.6A1.75 1.75 0 005.405 15h5.19c.9 0 1.652-.681 1.741-1.576l.66-6.6a.75.75 0 00-1.492-.149l-.66 6.6a.25.25 0 01-.249.225h-5.19a.25.25 0 01-.249-.225l-.66-6.6z"></path>
+</svg>
+ </button>
+</form> </div>
+ </div>
+
+ <div class="d-flex hide-lg hide-xl flex-order-2 flex-grow-0">
+ <details class="dropdown details-reset details-overlay d-inline-block">
+ <summary
+ class="js-blob-dropdown-click btn-octicon"
+ aria-haspopup="true"
+ aria-label="possible actions"
+ data-test-selector="small-screen-more-options"
+ data-dropdown-tracking="{&quot;type&quot;:&quot;blob_edit_dropdown.more_options_click&quot;,&quot;context&quot;:{&quot;repository_id&quot;:418699104,&quot;actor_id&quot;:30264720,&quot;github_dev_enabled&quot;:true,&quot;edit_enabled&quot;:true,&quot;small_screen&quot;:true}}"
+ >
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-kebab-horizontal">
+ <path d="M8 9a1.5 1.5 0 100-3 1.5 1.5 0 000 3zM1.5 9a1.5 1.5 0 100-3 1.5 1.5 0 000 3zm13 0a1.5 1.5 0 100-3 1.5 1.5 0 000 3z"></path>
+</svg>
+ </summary>
+
+ <ul class="dropdown-menu dropdown-menu-sw" style="width: 175px">
+ <li>
+ <a class="dropdown-item tooltipped tooltipped-nw js-remove-unless-platform"
+ data-platforms="windows,mac"
+ href="x-github-client://openRepo/https://github.com/rlkamalapurkar/bodeplot?branch=main&amp;filepath=bodeplot.dtx">
+ Open with Desktop
+ </a>
+ </li>
+ <li>
+ <a class="dropdown-item" href="/rlkamalapurkar/bodeplot/raw/main/bodeplot.dtx">
+ View raw
+ </a>
+ </li>
+ <li>
+ <remote-clipboard-copy class="dropdown-item" data-src="/rlkamalapurkar/bodeplot/raw/main/bodeplot.dtx" data-action="click:remote-clipboard-copy#remoteCopy">
+
+
+ <span data-target="remote-clipboard-copy.idle"> <span class="cursor-pointer" data-hydro-click="{&quot;event_type&quot;:&quot;repository.click&quot;,&quot;payload&quot;:{&quot;target&quot;:&quot;COPY_RAW_CONTENTS_BUTTON&quot;,&quot;repository_id&quot;:418699104,&quot;originating_url&quot;:&quot;https://github.com/rlkamalapurkar/bodeplot/blob/main/bodeplot.dtx&quot;,&quot;user_id&quot;:30264720}}" data-hydro-click-hmac="8f37951dad2d8aa3fb41b1693b2cae724a08266137cfd94460fe3d796b0dcc62">
+ Copy raw contents
+</span></span>
+ <span data-target="remote-clipboard-copy.fetching" hidden="hidden"> Copy raw contents
+ <span class="d-inline-block position-relative" style="top: 3px">
+ <svg aria-label="fetching contents…" style="box-sizing: content-box; color: var(--color-icon-primary);" width="16" height="16" viewBox="0 0 16 16" fill="none" data-view-component="true" class="anim-rotate">
+ <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" />
+ <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke" />
+</svg>
+ </span>
+</span>
+ <span data-target="remote-clipboard-copy.success" hidden="hidden"> Copy raw contents
+ <svg aria-label="Copied!" role="img" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check color-fg-success">
+ <path fill-rule="evenodd" d="M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z"></path>
+</svg>
+</span>
+ <span data-target="remote-clipboard-copy.error" hidden="hidden"> Copy raw contents
+ <svg aria-label="Something went wrong. Try again." role="img" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert color-fg-attention">
+ <path fill-rule="evenodd" d="M8.22 1.754a.25.25 0 00-.44 0L1.698 13.132a.25.25 0 00.22.368h12.164a.25.25 0 00.22-.368L8.22 1.754zm-1.763-.707c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0114.082 15H1.918a1.75 1.75 0 01-1.543-2.575L6.457 1.047zM9 11a1 1 0 11-2 0 1 1 0 012 0zm-.25-5.25a.75.75 0 00-1.5 0v2.5a.75.75 0 001.5 0v-2.5z"></path>
+</svg>
+</span>
+</remote-clipboard-copy> </li>
+ <li>
+ <a class="dropdown-item" href="/rlkamalapurkar/bodeplot/blame/main/bodeplot.dtx">
+ View blame
+ </a>
+ </li>
+
+ <li class="dropdown-divider" role="none"></li>
+ <li>
+ <a class="dropdown-item" href="/rlkamalapurkar/bodeplot/edit/main/bodeplot.dtx">Edit file</a>
+ </li>
+ <li>
+ <a class="dropdown-item js-github-dev-shortcut js-blob-dropdown-click" data-test-selector="small-screen-github-dev-link" data-dropdown-tracking="{&quot;type&quot;:&quot;blob_edit_dropdown.dev_link_click&quot;,&quot;context&quot;:{&quot;repository_id&quot;:418699104,&quot;actor_id&quot;:30264720,&quot;edit_enabled&quot;:true,&quot;small_screen&quot;:true}}" href="https://github.dev/">Open with github.dev</a>
+ </li>
+ <li>
+ <a class="dropdown-item menu-item-danger" href="/rlkamalapurkar/bodeplot/delete/main/bodeplot.dtx">Delete file</a>
+ </li>
+ </ul>
+ </details>
+ </div>
+</div>
+
+
+
+ <div itemprop="text" class="Box-body p-0 blob-wrapper data type-tex gist-border-0">
+
+
+<div class="js-check-bidi js-blob-code-container blob-code-content">
+
+ <template class="js-file-alert-template">
+ <div data-view-component="true" class="flash flash-warn flash-full d-flex flex-items-center">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
+ <path fill-rule="evenodd" d="M8.22 1.754a.25.25 0 00-.44 0L1.698 13.132a.25.25 0 00.22.368h12.164a.25.25 0 00.22-.368L8.22 1.754zm-1.763-.707c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0114.082 15H1.918a1.75 1.75 0 01-1.543-2.575L6.457 1.047zM9 11a1 1 0 11-2 0 1 1 0 012 0zm-.25-5.25a.75.75 0 00-1.5 0v2.5a.75.75 0 001.5 0v-2.5z"></path>
+</svg>
+
+ <span>
+ This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
+ <a href="https://github.co/hiddenchars" target="_blank">Learn more about bidirectional Unicode characters</a>
+ </span>
+
+
+ <div data-view-component="true" class="flash-action"> <a href="{{ revealButtonHref }}" data-view-component="true" class="btn-sm btn"> Show hidden characters
+</a>
+</div>
+</div></template>
+<template class="js-line-alert-template">
+ <span aria-label="This line has hidden Unicode characters" data-view-component="true" class="line-alert tooltipped tooltipped-e">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
+ <path fill-rule="evenodd" d="M8.22 1.754a.25.25 0 00-.44 0L1.698 13.132a.25.25 0 00.22.368h12.164a.25.25 0 00.22-.368L8.22 1.754zm-1.763-.707c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0114.082 15H1.918a1.75 1.75 0 01-1.543-2.575L6.457 1.047zM9 11a1 1 0 11-2 0 1 1 0 012 0zm-.25-5.25a.75.75 0 00-1.5 0v2.5a.75.75 0 001.5 0v-2.5z"></path>
+</svg>
+</span></template>
+
+ <table data-hpc class="highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file" data-tab-size="8" data-paste-markdown-skip data-tagsearch-lang="TeX" data-tagsearch-path="bodeplot.dtx">
+ <tr>
+ <td id="L1" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1"></td>
+ <td id="LC1" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \iffalse meta-comment</span></td>
+ </tr>
+ <tr>
+ <td id="L2" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2"></td>
+ <td id="LC2" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L3" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="3"></td>
+ <td id="LC3" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> Copyright (C) 2021 by Rushikesh Kamalapurkar &lt;rlkamalapurkar@gmail.com&gt;</span></td>
+ </tr>
+ <tr>
+ <td id="L4" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="4"></td>
+ <td id="LC4" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> -----------------------------------------------------------</span></td>
+ </tr>
+ <tr>
+ <td id="L5" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="5"></td>
+ <td id="LC5" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L6" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="6"></td>
+ <td id="LC6" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> This file may be distributed and/or modified under the conditions of</span></td>
+ </tr>
+ <tr>
+ <td id="L7" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="7"></td>
+ <td id="LC7" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> the LaTeX Project Public License, either version 1.3c of this license</span></td>
+ </tr>
+ <tr>
+ <td id="L8" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="8"></td>
+ <td id="LC8" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> or (at your option) any later version. The latest version of this</span></td>
+ </tr>
+ <tr>
+ <td id="L9" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="9"></td>
+ <td id="LC9" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> license is in:</span></td>
+ </tr>
+ <tr>
+ <td id="L10" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="10"></td>
+ <td id="LC10" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L11" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="11"></td>
+ <td id="LC11" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> http://www.latex-project.org/lppl.txt</span></td>
+ </tr>
+ <tr>
+ <td id="L12" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="12"></td>
+ <td id="LC12" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L13" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="13"></td>
+ <td id="LC13" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> and version 1.3c or later is part of all distributions of LaTeX</span></td>
+ </tr>
+ <tr>
+ <td id="L14" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="14"></td>
+ <td id="LC14" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> version 2006/05/20 or later.</span></td>
+ </tr>
+ <tr>
+ <td id="L15" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="15"></td>
+ <td id="LC15" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L16" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="16"></td>
+ <td id="LC16" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \fi</span></td>
+ </tr>
+ <tr>
+ <td id="L17" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="17"></td>
+ <td id="LC17" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L18" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="18"></td>
+ <td id="LC18" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \iffalse</span></td>
+ </tr>
+ <tr>
+ <td id="L19" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="19"></td>
+ <td id="LC19" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>&lt;package&gt;\NeedsTeXFormat{LaTeX2e}[2006/05/20]</span></td>
+ </tr>
+ <tr>
+ <td id="L20" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="20"></td>
+ <td id="LC20" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>&lt;package&gt;\ProvidesPackage{bodeplot}</span></td>
+ </tr>
+ <tr>
+ <td id="L21" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="21"></td>
+ <td id="LC21" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>&lt;package&gt;\RequirePackage{pdftexcmds}</span></td>
+ </tr>
+ <tr>
+ <td id="L22" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="22"></td>
+ <td id="LC22" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>&lt;package&gt;\RequirePackage{ifplatform}</span></td>
+ </tr>
+ <tr>
+ <td id="L23" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="23"></td>
+ <td id="LC23" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>&lt;package&gt;\RequirePackage{environ}</span></td>
+ </tr>
+ <tr>
+ <td id="L24" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="24"></td>
+ <td id="LC24" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>&lt;package&gt;\RequirePackage{pgfplots}</span></td>
+ </tr>
+ <tr>
+ <td id="L25" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="25"></td>
+ <td id="LC25" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>&lt;package&gt; \pgfplotsset{compat=1.18}</span></td>
+ </tr>
+ <tr>
+ <td id="L26" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="26"></td>
+ <td id="LC26" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>&lt;package&gt; \usepgfplotslibrary{groupplots}</span></td>
+ </tr>
+ <tr>
+ <td id="L27" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="27"></td>
+ <td id="LC27" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L28" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="28"></td>
+ <td id="LC28" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>&lt;*driver&gt;</span></td>
+ </tr>
+ <tr>
+ <td id="L29" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="29"></td>
+ <td id="LC29" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\documentclass</span>{<span class="pl-c1">ltxdoc</span>}</td>
+ </tr>
+ <tr>
+ <td id="L30" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="30"></td>
+ <td id="LC30" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\usepackage</span>{<span class="pl-c1">cprotect</span>}</td>
+ </tr>
+ <tr>
+ <td id="L31" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="31"></td>
+ <td id="LC31" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\usepackage</span>[<span class="pl-v">declutter</span>]{<span class="pl-c1">bodeplot</span>}</td>
+ </tr>
+ <tr>
+ <td id="L32" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="32"></td>
+ <td id="LC32" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\usepackage</span>[<span class="pl-v">colorlinks</span>]{<span class="pl-c1">hyperref</span>}</td>
+ </tr>
+ <tr>
+ <td id="L33" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="33"></td>
+ <td id="LC33" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\usepackage</span>{<span class="pl-c1">iftex</span>}</td>
+ </tr>
+ <tr>
+ <td id="L34" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="34"></td>
+ <td id="LC34" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\iftutex</span> <span class="pl-c"><span class="pl-c">%</span> LuaTeX, XeTeX</span></td>
+ </tr>
+ <tr>
+ <td id="L35" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="35"></td>
+ <td id="LC35" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\usepackage</span>{<span class="pl-c1">fontspec</span>}</td>
+ </tr>
+ <tr>
+ <td id="L36" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="36"></td>
+ <td id="LC36" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\setmonofont</span>{DejaVuSansMono}[Scale=MatchUppercase]</td>
+ </tr>
+ <tr>
+ <td id="L37" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="37"></td>
+ <td id="LC37" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span> <span class="pl-c"><span class="pl-c">%</span> old engines</span></td>
+ </tr>
+ <tr>
+ <td id="L38" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="38"></td>
+ <td id="LC38" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\usepackage</span>[<span class="pl-v">T1</span>]{<span class="pl-c1">fontenc</span>}</td>
+ </tr>
+ <tr>
+ <td id="L39" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="39"></td>
+ <td id="LC39" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\usepackage</span>{<span class="pl-c1">lmodern</span>}</td>
+ </tr>
+ <tr>
+ <td id="L40" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="40"></td>
+ <td id="LC40" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\usepackage</span>[<span class="pl-v">scaled</span>]{<span class="pl-c1">DejaVuSansMono</span>}</td>
+ </tr>
+ <tr>
+ <td id="L41" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="41"></td>
+ <td id="LC41" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td>
+ </tr>
+ <tr>
+ <td id="L42" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="42"></td>
+ <td id="LC42" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\usepackage</span>{<span class="pl-c1">showexpl</span>}</td>
+ </tr>
+ <tr>
+ <td id="L43" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="43"></td>
+ <td id="LC43" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\lstset</span>{</td>
+ </tr>
+ <tr>
+ <td id="L44" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="44"></td>
+ <td id="LC44" class="blob-code blob-code-inner js-file-line"> explpreset={numbers=none},</td>
+ </tr>
+ <tr>
+ <td id="L45" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="45"></td>
+ <td id="LC45" class="blob-code blob-code-inner js-file-line"> language=[LaTeX]Tex,</td>
+ </tr>
+ <tr>
+ <td id="L46" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="46"></td>
+ <td id="LC46" class="blob-code blob-code-inner js-file-line"> basicstyle=<span class="pl-c1">\ttfamily\tiny</span>,</td>
+ </tr>
+ <tr>
+ <td id="L47" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="47"></td>
+ <td id="LC47" class="blob-code blob-code-inner js-file-line"> commentstyle=<span class="pl-c1">\itshape\ttfamily\tiny</span>,</td>
+ </tr>
+ <tr>
+ <td id="L48" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="48"></td>
+ <td id="LC48" class="blob-code blob-code-inner js-file-line"> showspaces=false,</td>
+ </tr>
+ <tr>
+ <td id="L49" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="49"></td>
+ <td id="LC49" class="blob-code blob-code-inner js-file-line"> showstringspaces=false,</td>
+ </tr>
+ <tr>
+ <td id="L50" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="50"></td>
+ <td id="LC50" class="blob-code blob-code-inner js-file-line"> breaklines=true,</td>
+ </tr>
+ <tr>
+ <td id="L51" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="51"></td>
+ <td id="LC51" class="blob-code blob-code-inner js-file-line"> backgroundcolor=<span class="pl-c1">\color</span>{white!90!black},</td>
+ </tr>
+ <tr>
+ <td id="L52" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="52"></td>
+ <td id="LC52" class="blob-code blob-code-inner js-file-line"> breakautoindent=true,</td>
+ </tr>
+ <tr>
+ <td id="L53" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="53"></td>
+ <td id="LC53" class="blob-code blob-code-inner js-file-line"> captionpos=t</td>
+ </tr>
+ <tr>
+ <td id="L54" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="54"></td>
+ <td id="LC54" class="blob-code blob-code-inner js-file-line"> }</td>
+ </tr>
+ <tr>
+ <td id="L55" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="55"></td>
+ <td id="LC55" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\usepackage</span>{<span class="pl-c1">geometry</span>}</td>
+ </tr>
+ <tr>
+ <td id="L56" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="56"></td>
+ <td id="LC56" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\geometry</span>{lmargin=2in,rmargin=1in,tmargin=1in,bmargin=1in}</td>
+ </tr>
+ <tr>
+ <td id="L57" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="57"></td>
+ <td id="LC57" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\usetikzlibrary</span>{decorations.markings,arrows.meta,spy,backgrounds}</td>
+ </tr>
+ <tr>
+ <td id="L58" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="58"></td>
+ <td id="LC58" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\usepackage</span>[<span class="pl-v">nottoc</span>]{<span class="pl-c1">tocbibind</span>}</td>
+ </tr>
+ <tr>
+ <td id="L59" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="59"></td>
+ <td id="LC59" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\sloppy</span></td>
+ </tr>
+ <tr>
+ <td id="L60" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="60"></td>
+ <td id="LC60" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\EnableCrossrefs</span></td>
+ </tr>
+ <tr>
+ <td id="L61" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="61"></td>
+ <td id="LC61" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\CodelineIndex</span></td>
+ </tr>
+ <tr>
+ <td id="L62" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="62"></td>
+ <td id="LC62" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\RecordChanges</span></td>
+ </tr>
+ <tr>
+ <td id="L63" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="63"></td>
+ <td id="LC63" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\begin</span>{<span class="pl-smi">document</span>}</td>
+ </tr>
+ <tr>
+ <td id="L64" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="64"></td>
+ <td id="LC64" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\DocInput</span>{bodeplot.dtx}</td>
+ </tr>
+ <tr>
+ <td id="L65" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="65"></td>
+ <td id="LC65" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\PrintChanges</span></td>
+ </tr>
+ <tr>
+ <td id="L66" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="66"></td>
+ <td id="LC66" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\PrintIndex</span></td>
+ </tr>
+ <tr>
+ <td id="L67" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="67"></td>
+ <td id="LC67" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\end</span>{<span class="pl-smi">document</span>}</td>
+ </tr>
+ <tr>
+ <td id="L68" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="68"></td>
+ <td id="LC68" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>&lt;/driver&gt;</span></td>
+ </tr>
+ <tr>
+ <td id="L69" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="69"></td>
+ <td id="LC69" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \fi</span></td>
+ </tr>
+ <tr>
+ <td id="L70" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="70"></td>
+ <td id="LC70" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L71" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="71"></td>
+ <td id="LC71" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \CheckSum{1726}</span></td>
+ </tr>
+ <tr>
+ <td id="L72" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="72"></td>
+ <td id="LC72" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L73" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="73"></td>
+ <td id="LC73" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \changes{v1.0}{2021/10/25}{Initial release}</span></td>
+ </tr>
+ <tr>
+ <td id="L74" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="74"></td>
+ <td id="LC74" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \changes{v1.0.4}{2021/11/05}{Fixed unintended optional argument macro expansion}</span></td>
+ </tr>
+ <tr>
+ <td id="L75" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="75"></td>
+ <td id="LC75" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \changes{v1.0.6}{2021/11/18}{Fixed issue \#3}</span></td>
+ </tr>
+ <tr>
+ <td id="L76" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="76"></td>
+ <td id="LC76" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \changes{v1.0.7}{2021/12/02}{Removed unnecessary semicolons}</span></td>
+ </tr>
+ <tr>
+ <td id="L77" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="77"></td>
+ <td id="LC77" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \changes{v1.0.7}{2022/01/18}{Updated documentation}</span></td>
+ </tr>
+ <tr>
+ <td id="L78" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="78"></td>
+ <td id="LC78" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \changes{v1.0.8}{2022/07/06}{Added a new class option `declutter&#39;}</span></td>
+ </tr>
+ <tr>
+ <td id="L79" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="79"></td>
+ <td id="LC79" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \changes{v1.1.0}{2022/07/06}{Fixed phase wrapping in gnuplot mode}</span></td>
+ </tr>
+ <tr>
+ <td id="L80" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="80"></td>
+ <td id="LC80" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \changes{v1.1.1}{2022/07/31}{Enable Hz and rad units}</span></td>
+ </tr>
+ <tr>
+ <td id="L81" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="81"></td>
+ <td id="LC81" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L82" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="82"></td>
+ <td id="LC82" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \GetFileInfo{bodeplot.sty}</span></td>
+ </tr>
+ <tr>
+ <td id="L83" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="83"></td>
+ <td id="LC83" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \DoNotIndex{\newcommand,\xdef,\gdef,\def,\edef,\addplot,\approx,\arabic,\opt,\typ,\obj,\else,\if@pgfarg,\if@Hzarg,\if@radarg,\if@declutterarg,\fi,\begin,\end,\feature,\footnotesize,\draw,\detokenize,\DeclareOption,\foreach,\ifdim,\ifodd,\Im,\Re,\let,\newif,\nextgroupplot,\noexpand,\expandafter,\unexpanded,\PackageError,\PackageWarning,\relax,\RequirePackage,\tikzset,\pgfmathsetmacro,\pgfmathtruncatemacro,\ProcessOptions}</span></td>
+ </tr>
+ <tr>
+ <td id="L84" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="84"></td>
+ <td id="LC84" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L85" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="85"></td>
+ <td id="LC85" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \title{The \textsf{bodeplot} package\\version 1.1.2}</span></td>
+ </tr>
+ <tr>
+ <td id="L86" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="86"></td>
+ <td id="LC86" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \author{Rushikesh Kamalapurkar \\ \texttt{rlkamalapurkar@gmail.com}}</span></td>
+ </tr>
+ <tr>
+ <td id="L87" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="87"></td>
+ <td id="LC87" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L88" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="88"></td>
+ <td id="LC88" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \maketitle</span></td>
+ </tr>
+ <tr>
+ <td id="L89" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="89"></td>
+ <td id="LC89" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \tableofcontents</span></td>
+ </tr>
+ <tr>
+ <td id="L90" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="90"></td>
+ <td id="LC90" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \clearpage</span></td>
+ </tr>
+ <tr>
+ <td id="L91" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="91"></td>
+ <td id="LC91" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \section{Introduction}</span></td>
+ </tr>
+ <tr>
+ <td id="L92" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="92"></td>
+ <td id="LC92" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L93" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="93"></td>
+ <td id="LC93" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> Generate Bode, Nyquist, and Nichols plots for transfer functions in the canonical (TF) form \begin{equation}G(s) = e^{-Ts}\frac{b_ms^m+\cdots+b_1s+b_0}{a_ns^n+\cdots+a_1s+a_0}\label{eq:TF}\end{equation} and the zero-pole-gain (ZPK) form \begin{equation}G(s) = Ke^{-Ts}\frac{(s-z_1)(s-z_2)\cdots(s-z_m)}{(s-p_1)(s-p_2)\cdots(s-p_n)}.\label{eq:ZPK}\end{equation} In the equations above, $b_m,\cdots,b_0$ and $a_n,\cdots,a_0$ are real coefficients, $T\geq 0$ is the loop delay, $z_1,\cdots,z_m$ and $p_1,\cdots,p_n$ are complex zeros and poles of the transfer function, respectively, and $K\in \Re$ is the loop gain.</span></td>
+ </tr>
+ <tr>
+ <td id="L94" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="94"></td>
+ <td id="LC94" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L95" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="95"></td>
+ <td id="LC95" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> For transfer functions in the ZPK format in (\ref{eq:ZPK}) \emph{with zero delay}, this package also supports linear and asymptotic approximation of Bode plots.</span></td>
+ </tr>
+ <tr>
+ <td id="L96" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="96"></td>
+ <td id="LC96" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> </span></td>
+ </tr>
+ <tr>
+ <td id="L97" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="97"></td>
+ <td id="LC97" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> By default, all phase plots use degrees as units. Use the |rad| package option or the optional argument |tikz/{phase unit=rad}| to generate plots in radians. The |phase unit| key accepts either |rad| or |deg| as inputs and needs to be added to the |tikzpicture| environment that contains the plots. </span></td>
+ </tr>
+ <tr>
+ <td id="L98" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="98"></td>
+ <td id="LC98" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L99" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="99"></td>
+ <td id="LC99" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> By default, frequency inputs and outputs are in radians per second. Use the |Hz| package option or the optional argument |tikz/{frequency unit=Hz}| to generate plots in hertz. The |frequency unit| key accepts either |rad| or |Hz| as inputs and needs to be added to the |tikzpicture| environment that contains the plots.</span></td>
+ </tr>
+ <tr>
+ <td id="L100" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="100"></td>
+ <td id="LC100" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \subsection{External Dependencies}</span></td>
+ </tr>
+ <tr>
+ <td id="L101" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="101"></td>
+ <td id="LC101" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> By default, the package uses |gnuplot| to do all the computations. If |gnuplot| is not available, the |pgf| package option can be used to do the calculations using the native |pgf| math engine. Compilation using the |pgf| math engine is typically slower, but the end result should be the identical (other than phase wrapping in the TF form, see limitations below).</span></td>
+ </tr>
+ <tr>
+ <td id="L102" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="102"></td>
+ <td id="LC102" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>\subsection{Directory Structure}</span></td>
+ </tr>
+ <tr>
+ <td id="L103" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="103"></td>
+ <td id="LC103" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> Since version 1.0.8, the |bodeplot| package places all |gnuplot| temporary files in the working directory. The package option |declutter| restores the original behavior where the temporary files are placed in a folder called |gnuplot|.</span></td>
+ </tr>
+ <tr>
+ <td id="L104" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="104"></td>
+ <td id="LC104" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \subsection{Limitations} </span></td>
+ </tr>
+ <tr>
+ <td id="L105" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="105"></td>
+ <td id="LC105" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{itemize}</span></td>
+ </tr>
+ <tr>
+ <td id="L106" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="106"></td>
+ <td id="LC106" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \item In |pgf| mode, Bode phase plots and Nichols charts in TF form wrap angles so that they are always between 0 and 360$^\circ$ or 0 and $2\pi$ radian. As such, these plots will show phase wrapping discontinuities. Since v1.1.1, in |gnuplot| mode, the package uses the |smooth unwrap| filter to correct wrapping discontinuities. As of now, I have not found a way to do this in |pgf| mode, any merge requests or ideas you may have are welcome!</span></td>
+ </tr>
+ <tr>
+ <td id="L107" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="107"></td>
+ <td id="LC107" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \item Use of the |declutter| option with other directory management tools such as a |tikzexternalize| prefix is not recommended.</span></td>
+ </tr>
+ <tr>
+ <td id="L108" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="108"></td>
+ <td id="LC108" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{itemize}</span></td>
+ </tr>
+ <tr>
+ <td id="L109" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="109"></td>
+ <td id="LC109" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \clearpage</span></td>
+ </tr>
+ <tr>
+ <td id="L110" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="110"></td>
+ <td id="LC110" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \section{TL;DR}</span></td>
+ </tr>
+ <tr>
+ <td id="L111" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="111"></td>
+ <td id="LC111" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> All Bode plots in this section are for the transfer function (with and without a transport delay)</span></td>
+ </tr>
+ <tr>
+ <td id="L112" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="112"></td>
+ <td id="LC112" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{equation}</span></td>
+ </tr>
+ <tr>
+ <td id="L113" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="113"></td>
+ <td id="LC113" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> G(s) = 10\frac{s(s+0.1+0.5\mathrm{i})(s+0.1-0.5\mathrm{i})}{(s+0.5+10\mathrm{i})(s+0.5-10\mathrm{i})} = \frac{s(10s^2+2s+2.6)}{(s^2+s+100.25)}.</span></td>
+ </tr>
+ <tr>
+ <td id="L114" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="114"></td>
+ <td id="LC114" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{equation}</span></td>
+ </tr>
+ <tr>
+ <td id="L115" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="115"></td>
+ <td id="LC115" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \iffalse</span></td>
+ </tr>
+ <tr>
+ <td id="L116" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="116"></td>
+ <td id="LC116" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>&lt;*ignore&gt;</span></td>
+ </tr>
+ <tr>
+ <td id="L117" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="117"></td>
+ <td id="LC117" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \fi</span></td>
+ </tr>
+ <tr>
+ <td id="L118" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="118"></td>
+ <td id="LC118" class="blob-code blob-code-inner js-file-line">
+</td>
+ </tr>
+ <tr>
+ <td id="L119" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="119"></td>
+ <td id="LC119" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\hrulefill</span></td>
+ </tr>
+ <tr>
+ <td id="L120" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="120"></td>
+ <td id="LC120" class="blob-code blob-code-inner js-file-line">
+</td>
+ </tr>
+ <tr>
+ <td id="L121" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="121"></td>
+ <td id="LC121" class="blob-code blob-code-inner js-file-line">{<span class="pl-c1">\centering</span> Bode plot in ZPK format</td>
+ </tr>
+ <tr>
+ <td id="L122" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="122"></td>
+ <td id="LC122" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\begin</span>{<span class="pl-smi">LTXexample</span>}[pos=l,hsep=20pt,width=0.5<span class="pl-c1">\textwidth</span>]</td>
+ </tr>
+ <tr>
+ <td id="L123" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="123"></td>
+ <td id="LC123" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\BodeZPK</span>{<span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L124" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="124"></td>
+ <td id="LC124" class="blob-code blob-code-inner js-file-line"> z/{0,{-0.1,-0.5},{-0.1,0.5}},</td>
+ </tr>
+ <tr>
+ <td id="L125" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="125"></td>
+ <td id="LC125" class="blob-code blob-code-inner js-file-line"> p/{{-0.5,-10},{-0.5,10}},</td>
+ </tr>
+ <tr>
+ <td id="L126" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="126"></td>
+ <td id="LC126" class="blob-code blob-code-inner js-file-line"> k/10<span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L127" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="127"></td>
+ <td id="LC127" class="blob-code blob-code-inner js-file-line">}</td>
+ </tr>
+ <tr>
+ <td id="L128" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="128"></td>
+ <td id="LC128" class="blob-code blob-code-inner js-file-line">{0.01}</td>
+ </tr>
+ <tr>
+ <td id="L129" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="129"></td>
+ <td id="LC129" class="blob-code blob-code-inner js-file-line">{100}</td>
+ </tr>
+ <tr>
+ <td id="L130" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="130"></td>
+ <td id="LC130" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\end</span>{<span class="pl-smi">LTXexample</span>}</td>
+ </tr>
+ <tr>
+ <td id="L131" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="131"></td>
+ <td id="LC131" class="blob-code blob-code-inner js-file-line">
+</td>
+ </tr>
+ <tr>
+ <td id="L132" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="132"></td>
+ <td id="LC132" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\hrulefill</span></td>
+ </tr>
+ <tr>
+ <td id="L133" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="133"></td>
+ <td id="LC133" class="blob-code blob-code-inner js-file-line">
+</td>
+ </tr>
+ <tr>
+ <td id="L134" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="134"></td>
+ <td id="LC134" class="blob-code blob-code-inner js-file-line">Same Bode plot over the same frequency range but supplied in Hz, in TF format with arrow decoration, transport delay, unit, and color customization (the phase plot may show wrapping if the |pgf| package option is used)</td>
+ </tr>
+ <tr>
+ <td id="L135" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="135"></td>
+ <td id="LC135" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\begin</span>{<span class="pl-smi">LTXexample</span>}[pos=r,width=0.5<span class="pl-c1">\textwidth</span>]</td>
+ </tr>
+ <tr>
+ <td id="L136" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="136"></td>
+ <td id="LC136" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\BodeTF</span>[<span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L137" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="137"></td>
+ <td id="LC137" class="blob-code blob-code-inner js-file-line"> samples=1000,</td>
+ </tr>
+ <tr>
+ <td id="L138" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="138"></td>
+ <td id="LC138" class="blob-code blob-code-inner js-file-line"> plot/mag/{blue,thick},</td>
+ </tr>
+ <tr>
+ <td id="L139" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="139"></td>
+ <td id="LC139" class="blob-code blob-code-inner js-file-line"> plot/ph/{green,thick},</td>
+ </tr>
+ <tr>
+ <td id="L140" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="140"></td>
+ <td id="LC140" class="blob-code blob-code-inner js-file-line"> tikz/{<span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L141" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="141"></td>
+ <td id="LC141" class="blob-code blob-code-inner js-file-line"> &gt;=latex,</td>
+ </tr>
+ <tr>
+ <td id="L142" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="142"></td>
+ <td id="LC142" class="blob-code blob-code-inner js-file-line"> phase unit=rad,</td>
+ </tr>
+ <tr>
+ <td id="L143" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="143"></td>
+ <td id="LC143" class="blob-code blob-code-inner js-file-line"> frequency unit=Hz<span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L144" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="144"></td>
+ <td id="LC144" class="blob-code blob-code-inner js-file-line"> },</td>
+ </tr>
+ <tr>
+ <td id="L145" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="145"></td>
+ <td id="LC145" class="blob-code blob-code-inner js-file-line"> commands/mag/{</td>
+ </tr>
+ <tr>
+ <td id="L146" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="146"></td>
+ <td id="LC146" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\draw</span>[-&gt;](axis cs:0.1,40) -- (axis cs:{10/(2*pi)},60);</td>
+ </tr>
+ <tr>
+ <td id="L147" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="147"></td>
+ <td id="LC147" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\node</span> at (axis cs: 0.08,30) {<span class="pl-c1">\tiny</span> Resonant Peak};</td>
+ </tr>
+ <tr>
+ <td id="L148" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="148"></td>
+ <td id="LC148" class="blob-code blob-code-inner js-file-line"> }<span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L149" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="149"></td>
+ <td id="LC149" class="blob-code blob-code-inner js-file-line">]</td>
+ </tr>
+ <tr>
+ <td id="L150" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="150"></td>
+ <td id="LC150" class="blob-code blob-code-inner js-file-line">{<span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L151" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="151"></td>
+ <td id="LC151" class="blob-code blob-code-inner js-file-line"> num/{10,2,2.6,0},</td>
+ </tr>
+ <tr>
+ <td id="L152" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="152"></td>
+ <td id="LC152" class="blob-code blob-code-inner js-file-line"> den/{1,1,100.25}<span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L153" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="153"></td>
+ <td id="LC153" class="blob-code blob-code-inner js-file-line">}</td>
+ </tr>
+ <tr>
+ <td id="L154" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="154"></td>
+ <td id="LC154" class="blob-code blob-code-inner js-file-line">{0.01/(2*pi)}</td>
+ </tr>
+ <tr>
+ <td id="L155" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="155"></td>
+ <td id="LC155" class="blob-code blob-code-inner js-file-line">{100/(2*pi)}</td>
+ </tr>
+ <tr>
+ <td id="L156" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="156"></td>
+ <td id="LC156" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\end</span>{<span class="pl-smi">LTXexample</span>}</td>
+ </tr>
+ <tr>
+ <td id="L157" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="157"></td>
+ <td id="LC157" class="blob-code blob-code-inner js-file-line">
+</td>
+ </tr>
+ <tr>
+ <td id="L158" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="158"></td>
+ <td id="LC158" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\hrulefill</span></td>
+ </tr>
+ <tr>
+ <td id="L159" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="159"></td>
+ <td id="LC159" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\clearpage</span></td>
+ </tr>
+ <tr>
+ <td id="L160" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="160"></td>
+ <td id="LC160" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\hrulefill</span></td>
+ </tr>
+ <tr>
+ <td id="L161" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="161"></td>
+ <td id="LC161" class="blob-code blob-code-inner js-file-line">
+</td>
+ </tr>
+ <tr>
+ <td id="L162" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="162"></td>
+ <td id="LC162" class="blob-code blob-code-inner js-file-line">Linear approximation with customization</td>
+ </tr>
+ <tr>
+ <td id="L163" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="163"></td>
+ <td id="LC163" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\begin</span>{<span class="pl-smi">LTXexample</span>}[pos=l,hsep=20pt,width=0.5<span class="pl-c1">\textwidth</span>]</td>
+ </tr>
+ <tr>
+ <td id="L164" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="164"></td>
+ <td id="LC164" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\BodeZPK</span>[<span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L165" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="165"></td>
+ <td id="LC165" class="blob-code blob-code-inner js-file-line"> plot/mag/{red,thick},</td>
+ </tr>
+ <tr>
+ <td id="L166" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="166"></td>
+ <td id="LC166" class="blob-code blob-code-inner js-file-line"> plot/ph/{blue,thick},</td>
+ </tr>
+ <tr>
+ <td id="L167" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="167"></td>
+ <td id="LC167" class="blob-code blob-code-inner js-file-line"> axes/mag/{ytick distance=40},</td>
+ </tr>
+ <tr>
+ <td id="L168" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="168"></td>
+ <td id="LC168" class="blob-code blob-code-inner js-file-line"> axes/ph/{ytick distance=90},</td>
+ </tr>
+ <tr>
+ <td id="L169" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="169"></td>
+ <td id="LC169" class="blob-code blob-code-inner js-file-line"> approx/linear<span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L170" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="170"></td>
+ <td id="LC170" class="blob-code blob-code-inner js-file-line">]{<span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L171" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="171"></td>
+ <td id="LC171" class="blob-code blob-code-inner js-file-line"> z/{0,{-0.1,-0.5},{-0.1,0.5}},</td>
+ </tr>
+ <tr>
+ <td id="L172" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="172"></td>
+ <td id="LC172" class="blob-code blob-code-inner js-file-line"> p/{{-0.5,-10},{-0.5,10}},</td>
+ </tr>
+ <tr>
+ <td id="L173" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="173"></td>
+ <td id="LC173" class="blob-code blob-code-inner js-file-line"> k/10<span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L174" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="174"></td>
+ <td id="LC174" class="blob-code blob-code-inner js-file-line">}</td>
+ </tr>
+ <tr>
+ <td id="L175" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="175"></td>
+ <td id="LC175" class="blob-code blob-code-inner js-file-line">{0.01}</td>
+ </tr>
+ <tr>
+ <td id="L176" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="176"></td>
+ <td id="LC176" class="blob-code blob-code-inner js-file-line">{100}</td>
+ </tr>
+ <tr>
+ <td id="L177" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="177"></td>
+ <td id="LC177" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\end</span>{<span class="pl-smi">LTXexample</span>}</td>
+ </tr>
+ <tr>
+ <td id="L178" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="178"></td>
+ <td id="LC178" class="blob-code blob-code-inner js-file-line">
+</td>
+ </tr>
+ <tr>
+ <td id="L179" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="179"></td>
+ <td id="LC179" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\hrulefill</span></td>
+ </tr>
+ <tr>
+ <td id="L180" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="180"></td>
+ <td id="LC180" class="blob-code blob-code-inner js-file-line">
+</td>
+ </tr>
+ <tr>
+ <td id="L181" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="181"></td>
+ <td id="LC181" class="blob-code blob-code-inner js-file-line">Plot with delay and customization</td>
+ </tr>
+ <tr>
+ <td id="L182" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="182"></td>
+ <td id="LC182" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\begin</span>{<span class="pl-smi">LTXexample</span>}[pos=r,hsep=20pt,width=0.5<span class="pl-c1">\textwidth</span>]</td>
+ </tr>
+ <tr>
+ <td id="L183" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="183"></td>
+ <td id="LC183" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\BodeZPK</span>[<span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L184" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="184"></td>
+ <td id="LC184" class="blob-code blob-code-inner js-file-line"> plot/mag/{blue,thick},</td>
+ </tr>
+ <tr>
+ <td id="L185" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="185"></td>
+ <td id="LC185" class="blob-code blob-code-inner js-file-line"> plot/ph/{green,thick},</td>
+ </tr>
+ <tr>
+ <td id="L186" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="186"></td>
+ <td id="LC186" class="blob-code blob-code-inner js-file-line"> axes/mag/ytick distance=40,</td>
+ </tr>
+ <tr>
+ <td id="L187" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="187"></td>
+ <td id="LC187" class="blob-code blob-code-inner js-file-line"> axes/ph/ytick distance=90<span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L188" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="188"></td>
+ <td id="LC188" class="blob-code blob-code-inner js-file-line">]{<span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L189" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="189"></td>
+ <td id="LC189" class="blob-code blob-code-inner js-file-line"> z/{0,{-0.1,-0.5},{-0.1,0.5}},</td>
+ </tr>
+ <tr>
+ <td id="L190" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="190"></td>
+ <td id="LC190" class="blob-code blob-code-inner js-file-line"> p/{{-0.5,-10},{-0.5,10}},</td>
+ </tr>
+ <tr>
+ <td id="L191" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="191"></td>
+ <td id="LC191" class="blob-code blob-code-inner js-file-line"> k/10,</td>
+ </tr>
+ <tr>
+ <td id="L192" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="192"></td>
+ <td id="LC192" class="blob-code blob-code-inner js-file-line"> d/0.01<span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L193" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="193"></td>
+ <td id="LC193" class="blob-code blob-code-inner js-file-line">}</td>
+ </tr>
+ <tr>
+ <td id="L194" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="194"></td>
+ <td id="LC194" class="blob-code blob-code-inner js-file-line">{0.01}</td>
+ </tr>
+ <tr>
+ <td id="L195" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="195"></td>
+ <td id="LC195" class="blob-code blob-code-inner js-file-line">{100}</td>
+ </tr>
+ <tr>
+ <td id="L196" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="196"></td>
+ <td id="LC196" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\end</span>{<span class="pl-smi">LTXexample</span>}</td>
+ </tr>
+ <tr>
+ <td id="L197" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="197"></td>
+ <td id="LC197" class="blob-code blob-code-inner js-file-line">
+</td>
+ </tr>
+ <tr>
+ <td id="L198" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="198"></td>
+ <td id="LC198" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\hrulefill</span></td>
+ </tr>
+ <tr>
+ <td id="L199" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="199"></td>
+ <td id="LC199" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\clearpage</span></td>
+ </tr>
+ <tr>
+ <td id="L200" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="200"></td>
+ <td id="LC200" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\hrulefill</span></td>
+ </tr>
+ <tr>
+ <td id="L201" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="201"></td>
+ <td id="LC201" class="blob-code blob-code-inner js-file-line">
+</td>
+ </tr>
+ <tr>
+ <td id="L202" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="202"></td>
+ <td id="LC202" class="blob-code blob-code-inner js-file-line">Individual gain and phase plots with more customization</td>
+ </tr>
+ <tr>
+ <td id="L203" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="203"></td>
+ <td id="LC203" class="blob-code blob-code-inner js-file-line">
+</td>
+ </tr>
+ <tr>
+ <td id="L204" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="204"></td>
+ <td id="LC204" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\begin</span>{<span class="pl-smi">minipage</span>}[t]{0.45<span class="pl-c1">\textwidth</span>}</td>
+ </tr>
+ <tr>
+ <td id="L205" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="205"></td>
+ <td id="LC205" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\begin</span>{<span class="pl-smi">LTXexample</span>}[pos=t,width=<span class="pl-c1">\columnwidth</span>]</td>
+ </tr>
+ <tr>
+ <td id="L206" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="206"></td>
+ <td id="LC206" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\begin</span>{<span class="pl-smi">BodeMagPlot</span>}[<span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L207" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="207"></td>
+ <td id="LC207" class="blob-code blob-code-inner js-file-line"> axes/{height=2cm,</td>
+ </tr>
+ <tr>
+ <td id="L208" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="208"></td>
+ <td id="LC208" class="blob-code blob-code-inner js-file-line"> width=4cm}</td>
+ </tr>
+ <tr>
+ <td id="L209" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="209"></td>
+ <td id="LC209" class="blob-code blob-code-inner js-file-line">]</td>
+ </tr>
+ <tr>
+ <td id="L210" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="210"></td>
+ <td id="LC210" class="blob-code blob-code-inner js-file-line">{0.01}</td>
+ </tr>
+ <tr>
+ <td id="L211" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="211"></td>
+ <td id="LC211" class="blob-code blob-code-inner js-file-line">{100}</td>
+ </tr>
+ <tr>
+ <td id="L212" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="212"></td>
+ <td id="LC212" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\addBodeZPKPlots</span>[<span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L213" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="213"></td>
+ <td id="LC213" class="blob-code blob-code-inner js-file-line"> true/{black,thick},</td>
+ </tr>
+ <tr>
+ <td id="L214" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="214"></td>
+ <td id="LC214" class="blob-code blob-code-inner js-file-line"> linear/{red,dashed,thick},</td>
+ </tr>
+ <tr>
+ <td id="L215" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="215"></td>
+ <td id="LC215" class="blob-code blob-code-inner js-file-line"> asymptotic/{blue,dotted,thick}<span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L216" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="216"></td>
+ <td id="LC216" class="blob-code blob-code-inner js-file-line"> ]</td>
+ </tr>
+ <tr>
+ <td id="L217" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="217"></td>
+ <td id="LC217" class="blob-code blob-code-inner js-file-line"> {magnitude}</td>
+ </tr>
+ <tr>
+ <td id="L218" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="218"></td>
+ <td id="LC218" class="blob-code blob-code-inner js-file-line"> {<span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L219" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="219"></td>
+ <td id="LC219" class="blob-code blob-code-inner js-file-line"> z/{0,{-0.1,-0.5},{-0.1,0.5}},</td>
+ </tr>
+ <tr>
+ <td id="L220" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="220"></td>
+ <td id="LC220" class="blob-code blob-code-inner js-file-line"> p/{{-0.5,-10},{-0.5,10}},</td>
+ </tr>
+ <tr>
+ <td id="L221" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="221"></td>
+ <td id="LC221" class="blob-code blob-code-inner js-file-line"> k/10<span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L222" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="222"></td>
+ <td id="LC222" class="blob-code blob-code-inner js-file-line"> }</td>
+ </tr>
+ <tr>
+ <td id="L223" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="223"></td>
+ <td id="LC223" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\end</span>{<span class="pl-smi">BodeMagPlot</span>}</td>
+ </tr>
+ <tr>
+ <td id="L224" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="224"></td>
+ <td id="LC224" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\end</span>{<span class="pl-smi">LTXexample</span>}</td>
+ </tr>
+ <tr>
+ <td id="L225" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="225"></td>
+ <td id="LC225" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\end</span>{<span class="pl-smi">minipage</span>}<span class="pl-c1">\hfill</span></td>
+ </tr>
+ <tr>
+ <td id="L226" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="226"></td>
+ <td id="LC226" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\begin</span>{<span class="pl-smi">minipage</span>}[t]{0.45<span class="pl-c1">\textwidth</span>}</td>
+ </tr>
+ <tr>
+ <td id="L227" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="227"></td>
+ <td id="LC227" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\begin</span>{<span class="pl-smi">LTXexample</span>}[pos=t,width=<span class="pl-c1">\columnwidth</span>]</td>
+ </tr>
+ <tr>
+ <td id="L228" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="228"></td>
+ <td id="LC228" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\begin</span>{<span class="pl-smi">BodePhPlot</span>}[<span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L229" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="229"></td>
+ <td id="LC229" class="blob-code blob-code-inner js-file-line"> height=2cm,</td>
+ </tr>
+ <tr>
+ <td id="L230" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="230"></td>
+ <td id="LC230" class="blob-code blob-code-inner js-file-line"> width=4cm,</td>
+ </tr>
+ <tr>
+ <td id="L231" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="231"></td>
+ <td id="LC231" class="blob-code blob-code-inner js-file-line"> ytick distance=90</td>
+ </tr>
+ <tr>
+ <td id="L232" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="232"></td>
+ <td id="LC232" class="blob-code blob-code-inner js-file-line">]</td>
+ </tr>
+ <tr>
+ <td id="L233" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="233"></td>
+ <td id="LC233" class="blob-code blob-code-inner js-file-line">{0.01}</td>
+ </tr>
+ <tr>
+ <td id="L234" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="234"></td>
+ <td id="LC234" class="blob-code blob-code-inner js-file-line">{100}</td>
+ </tr>
+ <tr>
+ <td id="L235" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="235"></td>
+ <td id="LC235" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\addBodeZPKPlots</span>[<span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L236" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="236"></td>
+ <td id="LC236" class="blob-code blob-code-inner js-file-line"> true/{black,thick},</td>
+ </tr>
+ <tr>
+ <td id="L237" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="237"></td>
+ <td id="LC237" class="blob-code blob-code-inner js-file-line"> linear/{red,dashed,thick},</td>
+ </tr>
+ <tr>
+ <td id="L238" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="238"></td>
+ <td id="LC238" class="blob-code blob-code-inner js-file-line"> asymptotic/{blue,dotted,thick}<span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L239" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="239"></td>
+ <td id="LC239" class="blob-code blob-code-inner js-file-line"> ]</td>
+ </tr>
+ <tr>
+ <td id="L240" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="240"></td>
+ <td id="LC240" class="blob-code blob-code-inner js-file-line"> {phase}</td>
+ </tr>
+ <tr>
+ <td id="L241" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="241"></td>
+ <td id="LC241" class="blob-code blob-code-inner js-file-line"> {<span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L242" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="242"></td>
+ <td id="LC242" class="blob-code blob-code-inner js-file-line"> z/{0,{-0.1,-0.5},{-0.1,0.5}},</td>
+ </tr>
+ <tr>
+ <td id="L243" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="243"></td>
+ <td id="LC243" class="blob-code blob-code-inner js-file-line"> p/{{-0.5,-10},{-0.5,10}},</td>
+ </tr>
+ <tr>
+ <td id="L244" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="244"></td>
+ <td id="LC244" class="blob-code blob-code-inner js-file-line"> k/10<span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L245" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="245"></td>
+ <td id="LC245" class="blob-code blob-code-inner js-file-line"> }</td>
+ </tr>
+ <tr>
+ <td id="L246" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="246"></td>
+ <td id="LC246" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\end</span>{<span class="pl-smi">BodePhPlot</span>}</td>
+ </tr>
+ <tr>
+ <td id="L247" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="247"></td>
+ <td id="LC247" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\end</span>{<span class="pl-smi">LTXexample</span>}</td>
+ </tr>
+ <tr>
+ <td id="L248" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="248"></td>
+ <td id="LC248" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\end</span>{<span class="pl-smi">minipage</span>}</td>
+ </tr>
+ <tr>
+ <td id="L249" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="249"></td>
+ <td id="LC249" class="blob-code blob-code-inner js-file-line">
+</td>
+ </tr>
+ <tr>
+ <td id="L250" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="250"></td>
+ <td id="LC250" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\hrulefill</span></td>
+ </tr>
+ <tr>
+ <td id="L251" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="251"></td>
+ <td id="LC251" class="blob-code blob-code-inner js-file-line">
+</td>
+ </tr>
+ <tr>
+ <td id="L252" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="252"></td>
+ <td id="LC252" class="blob-code blob-code-inner js-file-line">Nichols chart</td>
+ </tr>
+ <tr>
+ <td id="L253" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="253"></td>
+ <td id="LC253" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\begin</span>{<span class="pl-smi">LTXexample</span>}[pos=l,hsep=20pt,width=0.5<span class="pl-c1">\textwidth</span>]</td>
+ </tr>
+ <tr>
+ <td id="L254" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="254"></td>
+ <td id="LC254" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\NicholsZPK</span>[samples=1000]</td>
+ </tr>
+ <tr>
+ <td id="L255" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="255"></td>
+ <td id="LC255" class="blob-code blob-code-inner js-file-line">{<span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L256" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="256"></td>
+ <td id="LC256" class="blob-code blob-code-inner js-file-line"> z/{0,{-0.1,-0.5},{-0.1,0.5}},</td>
+ </tr>
+ <tr>
+ <td id="L257" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="257"></td>
+ <td id="LC257" class="blob-code blob-code-inner js-file-line"> p/{{-0.5,-10},{-0.5,10}},</td>
+ </tr>
+ <tr>
+ <td id="L258" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="258"></td>
+ <td id="LC258" class="blob-code blob-code-inner js-file-line"> k/10,</td>
+ </tr>
+ <tr>
+ <td id="L259" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="259"></td>
+ <td id="LC259" class="blob-code blob-code-inner js-file-line"> d/0.01<span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L260" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="260"></td>
+ <td id="LC260" class="blob-code blob-code-inner js-file-line">}</td>
+ </tr>
+ <tr>
+ <td id="L261" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="261"></td>
+ <td id="LC261" class="blob-code blob-code-inner js-file-line">{0.001}</td>
+ </tr>
+ <tr>
+ <td id="L262" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="262"></td>
+ <td id="LC262" class="blob-code blob-code-inner js-file-line">{500}</td>
+ </tr>
+ <tr>
+ <td id="L263" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="263"></td>
+ <td id="LC263" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\end</span>{<span class="pl-smi">LTXexample</span>}</td>
+ </tr>
+ <tr>
+ <td id="L264" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="264"></td>
+ <td id="LC264" class="blob-code blob-code-inner js-file-line">
+</td>
+ </tr>
+ <tr>
+ <td id="L265" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="265"></td>
+ <td id="LC265" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\hrulefill</span></td>
+ </tr>
+ <tr>
+ <td id="L266" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="266"></td>
+ <td id="LC266" class="blob-code blob-code-inner js-file-line">
+</td>
+ </tr>
+ <tr>
+ <td id="L267" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="267"></td>
+ <td id="LC267" class="blob-code blob-code-inner js-file-line">Same Nichols chart in TF format (may show wrapping in |pgf| mode)</td>
+ </tr>
+ <tr>
+ <td id="L268" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="268"></td>
+ <td id="LC268" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\begin</span>{<span class="pl-smi">LTXexample</span>}[pos=r,hsep=20pt,width=0.5<span class="pl-c1">\textwidth</span>]</td>
+ </tr>
+ <tr>
+ <td id="L269" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="269"></td>
+ <td id="LC269" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\NicholsTF</span>[samples=1000]</td>
+ </tr>
+ <tr>
+ <td id="L270" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="270"></td>
+ <td id="LC270" class="blob-code blob-code-inner js-file-line">{<span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L271" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="271"></td>
+ <td id="LC271" class="blob-code blob-code-inner js-file-line"> num/{10,2,2.6,0},</td>
+ </tr>
+ <tr>
+ <td id="L272" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="272"></td>
+ <td id="LC272" class="blob-code blob-code-inner js-file-line"> den/{1,1,100.25},</td>
+ </tr>
+ <tr>
+ <td id="L273" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="273"></td>
+ <td id="LC273" class="blob-code blob-code-inner js-file-line"> d/0.01<span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L274" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="274"></td>
+ <td id="LC274" class="blob-code blob-code-inner js-file-line">}</td>
+ </tr>
+ <tr>
+ <td id="L275" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="275"></td>
+ <td id="LC275" class="blob-code blob-code-inner js-file-line">{0.001}</td>
+ </tr>
+ <tr>
+ <td id="L276" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="276"></td>
+ <td id="LC276" class="blob-code blob-code-inner js-file-line">{500}</td>
+ </tr>
+ <tr>
+ <td id="L277" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="277"></td>
+ <td id="LC277" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\end</span>{<span class="pl-smi">LTXexample</span>}</td>
+ </tr>
+ <tr>
+ <td id="L278" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="278"></td>
+ <td id="LC278" class="blob-code blob-code-inner js-file-line">
+</td>
+ </tr>
+ <tr>
+ <td id="L279" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="279"></td>
+ <td id="LC279" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\hrulefill</span></td>
+ </tr>
+ <tr>
+ <td id="L280" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="280"></td>
+ <td id="LC280" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\clearpage</span></td>
+ </tr>
+ <tr>
+ <td id="L281" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="281"></td>
+ <td id="LC281" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\hrulefill</span></td>
+ </tr>
+ <tr>
+ <td id="L282" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="282"></td>
+ <td id="LC282" class="blob-code blob-code-inner js-file-line">
+</td>
+ </tr>
+ <tr>
+ <td id="L283" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="283"></td>
+ <td id="LC283" class="blob-code blob-code-inner js-file-line">Multiple Nichols charts with customization</td>
+ </tr>
+ <tr>
+ <td id="L284" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="284"></td>
+ <td id="LC284" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\begin</span>{<span class="pl-smi">LTXexample</span>}[pos=l,hsep=20pt,width=0.5<span class="pl-c1">\textwidth</span>]</td>
+ </tr>
+ <tr>
+ <td id="L285" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="285"></td>
+ <td id="LC285" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\begin</span>{<span class="pl-smi">NicholsChart</span>}[<span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L286" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="286"></td>
+ <td id="LC286" class="blob-code blob-code-inner js-file-line"> ytick distance=20,</td>
+ </tr>
+ <tr>
+ <td id="L287" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="287"></td>
+ <td id="LC287" class="blob-code blob-code-inner js-file-line"> xtick distance=30</td>
+ </tr>
+ <tr>
+ <td id="L288" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="288"></td>
+ <td id="LC288" class="blob-code blob-code-inner js-file-line">]</td>
+ </tr>
+ <tr>
+ <td id="L289" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="289"></td>
+ <td id="LC289" class="blob-code blob-code-inner js-file-line">{0.001}</td>
+ </tr>
+ <tr>
+ <td id="L290" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="290"></td>
+ <td id="LC290" class="blob-code blob-code-inner js-file-line">{100}</td>
+ </tr>
+ <tr>
+ <td id="L291" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="291"></td>
+ <td id="LC291" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\addNicholsZPKChart</span> [red,samples=1000] {<span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L292" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="292"></td>
+ <td id="LC292" class="blob-code blob-code-inner js-file-line"> z/{0,{-0.1,-0.5},{-0.1,0.5}},</td>
+ </tr>
+ <tr>
+ <td id="L293" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="293"></td>
+ <td id="LC293" class="blob-code blob-code-inner js-file-line"> p/{{-0.5,-10},{-0.5,10}},</td>
+ </tr>
+ <tr>
+ <td id="L294" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="294"></td>
+ <td id="LC294" class="blob-code blob-code-inner js-file-line"> k/10<span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L295" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="295"></td>
+ <td id="LC295" class="blob-code blob-code-inner js-file-line"> }</td>
+ </tr>
+ <tr>
+ <td id="L296" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="296"></td>
+ <td id="LC296" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\addNicholsZPKChart</span> [blue,samples=1000] {<span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L297" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="297"></td>
+ <td id="LC297" class="blob-code blob-code-inner js-file-line"> z/{0,{-0.1,-0.5},{-0.1,0.5}},</td>
+ </tr>
+ <tr>
+ <td id="L298" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="298"></td>
+ <td id="LC298" class="blob-code blob-code-inner js-file-line"> p/{{-0.5,-10},{-0.5,10}},</td>
+ </tr>
+ <tr>
+ <td id="L299" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="299"></td>
+ <td id="LC299" class="blob-code blob-code-inner js-file-line"> k/5<span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L300" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="300"></td>
+ <td id="LC300" class="blob-code blob-code-inner js-file-line"> }</td>
+ </tr>
+ <tr>
+ <td id="L301" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="301"></td>
+ <td id="LC301" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\end</span>{<span class="pl-smi">NicholsChart</span>}</td>
+ </tr>
+ <tr>
+ <td id="L302" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="302"></td>
+ <td id="LC302" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\end</span>{<span class="pl-smi">LTXexample</span>}</td>
+ </tr>
+ <tr>
+ <td id="L303" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="303"></td>
+ <td id="LC303" class="blob-code blob-code-inner js-file-line">
+</td>
+ </tr>
+ <tr>
+ <td id="L304" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="304"></td>
+ <td id="LC304" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\hrulefill</span></td>
+ </tr>
+ <tr>
+ <td id="L305" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="305"></td>
+ <td id="LC305" class="blob-code blob-code-inner js-file-line">
+</td>
+ </tr>
+ <tr>
+ <td id="L306" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="306"></td>
+ <td id="LC306" class="blob-code blob-code-inner js-file-line">Nyquist plot</td>
+ </tr>
+ <tr>
+ <td id="L307" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="307"></td>
+ <td id="LC307" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\begin</span>{<span class="pl-smi">LTXexample</span>}[pos=r,hsep=20pt,width=0.5<span class="pl-c1">\textwidth</span>]</td>
+ </tr>
+ <tr>
+ <td id="L308" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="308"></td>
+ <td id="LC308" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\NyquistZPK</span>[plot/{red,thick,samples=1000}]</td>
+ </tr>
+ <tr>
+ <td id="L309" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="309"></td>
+ <td id="LC309" class="blob-code blob-code-inner js-file-line">{<span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L310" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="310"></td>
+ <td id="LC310" class="blob-code blob-code-inner js-file-line"> z/{0,{-0.1,-0.5},{-0.1,0.5}},</td>
+ </tr>
+ <tr>
+ <td id="L311" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="311"></td>
+ <td id="LC311" class="blob-code blob-code-inner js-file-line"> p/{{-0.5,-10},{-0.5,10}},</td>
+ </tr>
+ <tr>
+ <td id="L312" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="312"></td>
+ <td id="LC312" class="blob-code blob-code-inner js-file-line"> k/10<span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L313" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="313"></td>
+ <td id="LC313" class="blob-code blob-code-inner js-file-line">}</td>
+ </tr>
+ <tr>
+ <td id="L314" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="314"></td>
+ <td id="LC314" class="blob-code blob-code-inner js-file-line">{-30}</td>
+ </tr>
+ <tr>
+ <td id="L315" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="315"></td>
+ <td id="LC315" class="blob-code blob-code-inner js-file-line">{30}</td>
+ </tr>
+ <tr>
+ <td id="L316" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="316"></td>
+ <td id="LC316" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\end</span>{<span class="pl-smi">LTXexample</span>}</td>
+ </tr>
+ <tr>
+ <td id="L317" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="317"></td>
+ <td id="LC317" class="blob-code blob-code-inner js-file-line">
+</td>
+ </tr>
+ <tr>
+ <td id="L318" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="318"></td>
+ <td id="LC318" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\hrulefill</span></td>
+ </tr>
+ <tr>
+ <td id="L319" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="319"></td>
+ <td id="LC319" class="blob-code blob-code-inner js-file-line">
+</td>
+ </tr>
+ <tr>
+ <td id="L320" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="320"></td>
+ <td id="LC320" class="blob-code blob-code-inner js-file-line">Nyquist plot in TF format with arrows</td>
+ </tr>
+ <tr>
+ <td id="L321" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="321"></td>
+ <td id="LC321" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\begin</span>{<span class="pl-smi">LTXexample</span>}[pos=l,width=0.5<span class="pl-c1">\textwidth</span>]</td>
+ </tr>
+ <tr>
+ <td id="L322" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="322"></td>
+ <td id="LC322" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\NyquistTF</span>[<span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L323" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="323"></td>
+ <td id="LC323" class="blob-code blob-code-inner js-file-line"> plot/{<span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L324" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="324"></td>
+ <td id="LC324" class="blob-code blob-code-inner js-file-line"> samples=1000,</td>
+ </tr>
+ <tr>
+ <td id="L325" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="325"></td>
+ <td id="LC325" class="blob-code blob-code-inner js-file-line"> postaction=decorate,</td>
+ </tr>
+ <tr>
+ <td id="L326" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="326"></td>
+ <td id="LC326" class="blob-code blob-code-inner js-file-line"> decoration={<span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L327" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="327"></td>
+ <td id="LC327" class="blob-code blob-code-inner js-file-line"> markings,</td>
+ </tr>
+ <tr>
+ <td id="L328" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="328"></td>
+ <td id="LC328" class="blob-code blob-code-inner js-file-line"> mark=between positions 0.1 and 0.9 step 5em with {<span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L329" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="329"></td>
+ <td id="LC329" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\arrow</span>{Stealth [length=2mm, blue]}</td>
+ </tr>
+ <tr>
+ <td id="L330" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="330"></td>
+ <td id="LC330" class="blob-code blob-code-inner js-file-line"> }</td>
+ </tr>
+ <tr>
+ <td id="L331" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="331"></td>
+ <td id="LC331" class="blob-code blob-code-inner js-file-line"> }</td>
+ </tr>
+ <tr>
+ <td id="L332" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="332"></td>
+ <td id="LC332" class="blob-code blob-code-inner js-file-line"> }<span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L333" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="333"></td>
+ <td id="LC333" class="blob-code blob-code-inner js-file-line">]</td>
+ </tr>
+ <tr>
+ <td id="L334" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="334"></td>
+ <td id="LC334" class="blob-code blob-code-inner js-file-line">{<span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L335" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="335"></td>
+ <td id="LC335" class="blob-code blob-code-inner js-file-line"> num/{10,2,2.6,0},</td>
+ </tr>
+ <tr>
+ <td id="L336" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="336"></td>
+ <td id="LC336" class="blob-code blob-code-inner js-file-line"> den/{1,1,100.25}<span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L337" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="337"></td>
+ <td id="LC337" class="blob-code blob-code-inner js-file-line">}</td>
+ </tr>
+ <tr>
+ <td id="L338" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="338"></td>
+ <td id="LC338" class="blob-code blob-code-inner js-file-line">{-30}</td>
+ </tr>
+ <tr>
+ <td id="L339" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="339"></td>
+ <td id="LC339" class="blob-code blob-code-inner js-file-line">{30}</td>
+ </tr>
+ <tr>
+ <td id="L340" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="340"></td>
+ <td id="LC340" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\end</span>{<span class="pl-smi">LTXexample</span>}</td>
+ </tr>
+ <tr>
+ <td id="L341" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="341"></td>
+ <td id="LC341" class="blob-code blob-code-inner js-file-line">
+</td>
+ </tr>
+ <tr>
+ <td id="L342" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="342"></td>
+ <td id="LC342" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\hrulefill</span></td>
+ </tr>
+ <tr>
+ <td id="L343" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="343"></td>
+ <td id="LC343" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\clearpage</span></td>
+ </tr>
+ <tr>
+ <td id="L344" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="344"></td>
+ <td id="LC344" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\hrulefill</span></td>
+ </tr>
+ <tr>
+ <td id="L345" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="345"></td>
+ <td id="LC345" class="blob-code blob-code-inner js-file-line">
+</td>
+ </tr>
+ <tr>
+ <td id="L346" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="346"></td>
+ <td id="LC346" class="blob-code blob-code-inner js-file-line">Multiple Nyquist plots with customization</td>
+ </tr>
+ <tr>
+ <td id="L347" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="347"></td>
+ <td id="LC347" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\begin</span>{<span class="pl-smi">LTXexample</span>}[pos=r,hsep=20pt,width=0.5<span class="pl-c1">\textwidth</span>]</td>
+ </tr>
+ <tr>
+ <td id="L348" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="348"></td>
+ <td id="LC348" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\begin</span>{<span class="pl-smi">NyquistPlot</span>}{-30}{30}</td>
+ </tr>
+ <tr>
+ <td id="L349" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="349"></td>
+ <td id="LC349" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\addNyquistZPKPlot</span> [red,samples=1000] {<span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L350" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="350"></td>
+ <td id="LC350" class="blob-code blob-code-inner js-file-line"> z/{0,{-0.1,-0.5},{-0.1,0.5}},</td>
+ </tr>
+ <tr>
+ <td id="L351" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="351"></td>
+ <td id="LC351" class="blob-code blob-code-inner js-file-line"> p/{{-0.5,-10},{-0.5,10}},</td>
+ </tr>
+ <tr>
+ <td id="L352" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="352"></td>
+ <td id="LC352" class="blob-code blob-code-inner js-file-line"> k/10<span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L353" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="353"></td>
+ <td id="LC353" class="blob-code blob-code-inner js-file-line"> }</td>
+ </tr>
+ <tr>
+ <td id="L354" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="354"></td>
+ <td id="LC354" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\addNyquistZPKPlot</span> [blue,samples=1000] {<span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L355" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="355"></td>
+ <td id="LC355" class="blob-code blob-code-inner js-file-line"> z/{0,{-0.1,-0.5},{-0.1,0.5}},</td>
+ </tr>
+ <tr>
+ <td id="L356" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="356"></td>
+ <td id="LC356" class="blob-code blob-code-inner js-file-line"> p/{{-0.5,-10},{-0.5,10}},</td>
+ </tr>
+ <tr>
+ <td id="L357" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="357"></td>
+ <td id="LC357" class="blob-code blob-code-inner js-file-line"> k/5<span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L358" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="358"></td>
+ <td id="LC358" class="blob-code blob-code-inner js-file-line"> }</td>
+ </tr>
+ <tr>
+ <td id="L359" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="359"></td>
+ <td id="LC359" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\end</span>{<span class="pl-smi">NyquistPlot</span>}</td>
+ </tr>
+ <tr>
+ <td id="L360" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="360"></td>
+ <td id="LC360" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\end</span>{<span class="pl-smi">LTXexample</span>}</td>
+ </tr>
+ <tr>
+ <td id="L361" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="361"></td>
+ <td id="LC361" class="blob-code blob-code-inner js-file-line">
+</td>
+ </tr>
+ <tr>
+ <td id="L362" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="362"></td>
+ <td id="LC362" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\hrulefill</span></td>
+ </tr>
+ <tr>
+ <td id="L363" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="363"></td>
+ <td id="LC363" class="blob-code blob-code-inner js-file-line">
+</td>
+ </tr>
+ <tr>
+ <td id="L364" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="364"></td>
+ <td id="LC364" class="blob-code blob-code-inner js-file-line">Nyquist plots with additional commands, using two different macros</td>
+ </tr>
+ <tr>
+ <td id="L365" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="365"></td>
+ <td id="LC365" class="blob-code blob-code-inner js-file-line">
+</td>
+ </tr>
+ <tr>
+ <td id="L366" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="366"></td>
+ <td id="LC366" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\begin</span>{<span class="pl-smi">minipage</span>}[t]{0.48<span class="pl-c1">\textwidth</span>}</td>
+ </tr>
+ <tr>
+ <td id="L367" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="367"></td>
+ <td id="LC367" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\begin</span>{<span class="pl-smi">LTXexample</span>}[pos=t,width=<span class="pl-c1">\columnwidth</span>]</td>
+ </tr>
+ <tr>
+ <td id="L368" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="368"></td>
+ <td id="LC368" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\begin</span>{<span class="pl-smi">NyquistPlot</span>}[<span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L369" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="369"></td>
+ <td id="LC369" class="blob-code blob-code-inner js-file-line"> tikz/{</td>
+ </tr>
+ <tr>
+ <td id="L370" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="370"></td>
+ <td id="LC370" class="blob-code blob-code-inner js-file-line"> spy using outlines={<span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L371" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="371"></td>
+ <td id="LC371" class="blob-code blob-code-inner js-file-line"> circle,</td>
+ </tr>
+ <tr>
+ <td id="L372" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="372"></td>
+ <td id="LC372" class="blob-code blob-code-inner js-file-line"> magnification=3, </td>
+ </tr>
+ <tr>
+ <td id="L373" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="373"></td>
+ <td id="LC373" class="blob-code blob-code-inner js-file-line"> connect spies,</td>
+ </tr>
+ <tr>
+ <td id="L374" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="374"></td>
+ <td id="LC374" class="blob-code blob-code-inner js-file-line"> size=2cm</td>
+ </tr>
+ <tr>
+ <td id="L375" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="375"></td>
+ <td id="LC375" class="blob-code blob-code-inner js-file-line"> }</td>
+ </tr>
+ <tr>
+ <td id="L376" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="376"></td>
+ <td id="LC376" class="blob-code blob-code-inner js-file-line"> }<span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L377" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="377"></td>
+ <td id="LC377" class="blob-code blob-code-inner js-file-line">]</td>
+ </tr>
+ <tr>
+ <td id="L378" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="378"></td>
+ <td id="LC378" class="blob-code blob-code-inner js-file-line">{-30}{30}</td>
+ </tr>
+ <tr>
+ <td id="L379" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="379"></td>
+ <td id="LC379" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\addNyquistZPKPlot</span> [blue,samples=1000] {<span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L380" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="380"></td>
+ <td id="LC380" class="blob-code blob-code-inner js-file-line"> z/{0,{-0.1,-0.5},{-0.1,0.5}},</td>
+ </tr>
+ <tr>
+ <td id="L381" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="381"></td>
+ <td id="LC381" class="blob-code blob-code-inner js-file-line"> p/{{-0.5,-10},{-0.5,10}},</td>
+ </tr>
+ <tr>
+ <td id="L382" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="382"></td>
+ <td id="LC382" class="blob-code blob-code-inner js-file-line"> k/0.5<span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L383" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="383"></td>
+ <td id="LC383" class="blob-code blob-code-inner js-file-line"> }</td>
+ </tr>
+ <tr>
+ <td id="L384" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="384"></td>
+ <td id="LC384" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\coordinate</span> (spyon) at (axis cs:0,0);</td>
+ </tr>
+ <tr>
+ <td id="L385" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="385"></td>
+ <td id="LC385" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\coordinate</span> (spyat) at (axis cs:-22,5);</td>
+ </tr>
+ <tr>
+ <td id="L386" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="386"></td>
+ <td id="LC386" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\spy</span> [green] on (spyon) in </td>
+ </tr>
+ <tr>
+ <td id="L387" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="387"></td>
+ <td id="LC387" class="blob-code blob-code-inner js-file-line"> node [fill=white] at (spyat);</td>
+ </tr>
+ <tr>
+ <td id="L388" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="388"></td>
+ <td id="LC388" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\end</span>{<span class="pl-smi">NyquistPlot</span>}</td>
+ </tr>
+ <tr>
+ <td id="L389" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="389"></td>
+ <td id="LC389" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\end</span>{<span class="pl-smi">LTXexample</span>}</td>
+ </tr>
+ <tr>
+ <td id="L390" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="390"></td>
+ <td id="LC390" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\end</span>{<span class="pl-smi">minipage</span>}<span class="pl-c1">\hfill</span></td>
+ </tr>
+ <tr>
+ <td id="L391" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="391"></td>
+ <td id="LC391" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\begin</span>{<span class="pl-smi">minipage</span>}[t]{0.48<span class="pl-c1">\textwidth</span>}</td>
+ </tr>
+ <tr>
+ <td id="L392" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="392"></td>
+ <td id="LC392" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\begin</span>{<span class="pl-smi">LTXexample</span>}[pos=t,width=<span class="pl-c1">\columnwidth</span>]</td>
+ </tr>
+ <tr>
+ <td id="L393" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="393"></td>
+ <td id="LC393" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\NyquistZPK</span>[<span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L394" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="394"></td>
+ <td id="LC394" class="blob-code blob-code-inner js-file-line"> plot/{blue,samples=1000},</td>
+ </tr>
+ <tr>
+ <td id="L395" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="395"></td>
+ <td id="LC395" class="blob-code blob-code-inner js-file-line"> tikz/{</td>
+ </tr>
+ <tr>
+ <td id="L396" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="396"></td>
+ <td id="LC396" class="blob-code blob-code-inner js-file-line"> spy using outlines={<span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L397" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="397"></td>
+ <td id="LC397" class="blob-code blob-code-inner js-file-line"> circle,</td>
+ </tr>
+ <tr>
+ <td id="L398" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="398"></td>
+ <td id="LC398" class="blob-code blob-code-inner js-file-line"> magnification=3, </td>
+ </tr>
+ <tr>
+ <td id="L399" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="399"></td>
+ <td id="LC399" class="blob-code blob-code-inner js-file-line"> connect spies,</td>
+ </tr>
+ <tr>
+ <td id="L400" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="400"></td>
+ <td id="LC400" class="blob-code blob-code-inner js-file-line"> size=2cm</td>
+ </tr>
+ <tr>
+ <td id="L401" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="401"></td>
+ <td id="LC401" class="blob-code blob-code-inner js-file-line"> }</td>
+ </tr>
+ <tr>
+ <td id="L402" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="402"></td>
+ <td id="LC402" class="blob-code blob-code-inner js-file-line"> },</td>
+ </tr>
+ <tr>
+ <td id="L403" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="403"></td>
+ <td id="LC403" class="blob-code blob-code-inner js-file-line"> commands/{</td>
+ </tr>
+ <tr>
+ <td id="L404" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="404"></td>
+ <td id="LC404" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\coordinate</span> (spyon) at (axis cs:0,0);</td>
+ </tr>
+ <tr>
+ <td id="L405" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="405"></td>
+ <td id="LC405" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\coordinate</span> (spyat) at (axis cs:-22,5);</td>
+ </tr>
+ <tr>
+ <td id="L406" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="406"></td>
+ <td id="LC406" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\spy</span> [green] on (spyon) in </td>
+ </tr>
+ <tr>
+ <td id="L407" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="407"></td>
+ <td id="LC407" class="blob-code blob-code-inner js-file-line"> node [fill=white] at (spyat);</td>
+ </tr>
+ <tr>
+ <td id="L408" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="408"></td>
+ <td id="LC408" class="blob-code blob-code-inner js-file-line"> }<span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L409" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="409"></td>
+ <td id="LC409" class="blob-code blob-code-inner js-file-line">]</td>
+ </tr>
+ <tr>
+ <td id="L410" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="410"></td>
+ <td id="LC410" class="blob-code blob-code-inner js-file-line">{<span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L411" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="411"></td>
+ <td id="LC411" class="blob-code blob-code-inner js-file-line"> z/{0,{-0.1,-0.5},{-0.1,0.5}},</td>
+ </tr>
+ <tr>
+ <td id="L412" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="412"></td>
+ <td id="LC412" class="blob-code blob-code-inner js-file-line"> p/{{-0.5,-10},{-0.5,10}},</td>
+ </tr>
+ <tr>
+ <td id="L413" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="413"></td>
+ <td id="LC413" class="blob-code blob-code-inner js-file-line"> k/0.5<span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L414" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="414"></td>
+ <td id="LC414" class="blob-code blob-code-inner js-file-line">}</td>
+ </tr>
+ <tr>
+ <td id="L415" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="415"></td>
+ <td id="LC415" class="blob-code blob-code-inner js-file-line">{-30}</td>
+ </tr>
+ <tr>
+ <td id="L416" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="416"></td>
+ <td id="LC416" class="blob-code blob-code-inner js-file-line">{30}</td>
+ </tr>
+ <tr>
+ <td id="L417" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="417"></td>
+ <td id="LC417" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\end</span>{<span class="pl-smi">LTXexample</span>}</td>
+ </tr>
+ <tr>
+ <td id="L418" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="418"></td>
+ <td id="LC418" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\end</span>{<span class="pl-smi">minipage</span>}}</td>
+ </tr>
+ <tr>
+ <td id="L419" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="419"></td>
+ <td id="LC419" class="blob-code blob-code-inner js-file-line">
+</td>
+ </tr>
+ <tr>
+ <td id="L420" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="420"></td>
+ <td id="LC420" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\hrulefill</span></td>
+ </tr>
+ <tr>
+ <td id="L421" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="421"></td>
+ <td id="LC421" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\clearpage</span></td>
+ </tr>
+ <tr>
+ <td id="L422" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="422"></td>
+ <td id="LC422" class="blob-code blob-code-inner js-file-line">
+</td>
+ </tr>
+ <tr>
+ <td id="L423" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="423"></td>
+ <td id="LC423" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \iffalse</span></td>
+ </tr>
+ <tr>
+ <td id="L424" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="424"></td>
+ <td id="LC424" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>&lt;/ignore&gt;</span></td>
+ </tr>
+ <tr>
+ <td id="L425" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="425"></td>
+ <td id="LC425" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \fi</span></td>
+ </tr>
+ <tr>
+ <td id="L426" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="426"></td>
+ <td id="LC426" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> </span></td>
+ </tr>
+ <tr>
+ <td id="L427" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="427"></td>
+ <td id="LC427" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \section{Usage}</span></td>
+ </tr>
+ <tr>
+ <td id="L428" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="428"></td>
+ <td id="LC428" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \noindent In all the macros described here, the frequency limits supplied by the user are assumed to be in |rad/s| unless either the |Hz| package option is used or the optional argument |tikz/{frequency unit=Hz}| is supplied to the |tikzpicture| environment. All phase plots are getenrated in degrees unless either the |rad| package option is used or the optional argument |tikz/{frequency unit=rad}| is supplied to the |tikzpicture| environment.</span></td>
+ </tr>
+ <tr>
+ <td id="L429" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="429"></td>
+ <td id="LC429" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L430" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="430"></td>
+ <td id="LC430" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \subsection{Bode plots}</span></td>
+ </tr>
+ <tr>
+ <td id="L431" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="431"></td>
+ <td id="LC431" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \DescribeMacro{\BodeZPK}</span></td>
+ </tr>
+ <tr>
+ <td id="L432" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="432"></td>
+ <td id="LC432" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> |\BodeZPK| \oarg{obj1/typ1/\marg{opt1},obj2/typ2/\marg{opt2},...}\\</span></td>
+ </tr>
+ <tr>
+ <td id="L433" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="433"></td>
+ <td id="LC433" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \hspace*{2em}\marg{z/\marg{zeros},p/\marg{poles},k/\marg{gain},d/\marg{delay}}\\</span></td>
+ </tr>
+ <tr>
+ <td id="L434" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="434"></td>
+ <td id="LC434" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \hspace*{2em}\marg{min-freq}\marg{max-freq}</span></td>
+ </tr>
+ <tr>
+ <td id="L435" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="435"></td>
+ <td id="LC435" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L436" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="436"></td>
+ <td id="LC436" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \noindent Plots the Bode plot of a transfer function given in ZPK format using the |groupplot| environment. The three mandatory arguments include: (1) a list of tuples, comprised of the zeros, the poles, the gain, and the transport delay of the transfer function, (2) the lower end of the frequency range for the $x-$axis, and (3) the higher end of the frequency range for the $x-$axis. The zeros and the poles are complex numbers, entered as a comma-separated list of comma-separated lists, of the form |{{real part 1,imaginary part 1},| |{real part 2,imaginary part 2},...}|. If the imaginary part is not provided, it is assumed to be zero.</span></td>
+ </tr>
+ <tr>
+ <td id="L437" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="437"></td>
+ <td id="LC437" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L438" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="438"></td>
+ <td id="LC438" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> The optional argument is comprised of a comma separated list of tuples, either |obj/typ/{opt}|, or |obj/{opt}|, or just |{opt}|. Each tuple passes options to different |pgfplots| macros that generate the group, the axes, and the plots according to:</span></td>
+ </tr>
+ <tr>
+ <td id="L439" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="439"></td>
+ <td id="LC439" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{itemize}</span></td>
+ </tr>
+ <tr>
+ <td id="L440" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="440"></td>
+ <td id="LC440" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \item Tuples of the form |obj/typ/{opt}|:</span></td>
+ </tr>
+ <tr>
+ <td id="L441" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="441"></td>
+ <td id="LC441" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{itemize}</span></td>
+ </tr>
+ <tr>
+ <td id="L442" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="442"></td>
+ <td id="LC442" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \item |plot/typ/{opt}|: modify plot properties by adding options |{opt}| to the |\addplot| macro for the magnitude plot if |typ| is |mag| and the phase plot if |typ| is |ph|.</span></td>
+ </tr>
+ <tr>
+ <td id="L443" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="443"></td>
+ <td id="LC443" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \item |axes/typ/{opt}|: modify axis properties by adding options |{opt}| to the |\nextgroupplot| macro for the magnitude plot if |typ| is |mag| and the phase plot if |typ| is |ph|.</span></td>
+ </tr>
+ <tr>
+ <td id="L444" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="444"></td>
+ <td id="LC444" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \item |commands/typ/{opt}|: add any valid TikZ commands (including the the parametric function generator macros in this package, such as |\addBodeZPKPlots|, |\addBodeTFPlot|, and |\addBodeComponentPlot|) to the magnitude plot if |typ| is |mag| and the phase plot if |typ| is |ph|. The commands passed to |opt| need to be valid TikZ commands, separated by semicolons as usual. For example, a TikZ command is used in the description of the |\BodeTF| macro below to mark the gain crossover frequency on the Bode Magnitude plot. </span></td>
+ </tr>
+ <tr>
+ <td id="L445" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="445"></td>
+ <td id="LC445" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{itemize}</span></td>
+ </tr>
+ <tr>
+ <td id="L446" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="446"></td>
+ <td id="LC446" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \item Tuples of the form |obj/{opt}|:</span></td>
+ </tr>
+ <tr>
+ <td id="L447" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="447"></td>
+ <td id="LC447" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{itemize}</span></td>
+ </tr>
+ <tr>
+ <td id="L448" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="448"></td>
+ <td id="LC448" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \item |plot/{opt}|: adds options |{opt}| to |\addplot| macros for both the magnitude and the phase plots.</span></td>
+ </tr>
+ <tr>
+ <td id="L449" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="449"></td>
+ <td id="LC449" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \item |axes/{opt}|: adds options |{opt}| to |\nextgroupplot| macros for both the magnitude and the phase plots.</span></td>
+ </tr>
+ <tr>
+ <td id="L450" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="450"></td>
+ <td id="LC450" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \item |group/{opt}|: adds options |{opt}| to the |groupplot| environment.</span></td>
+ </tr>
+ <tr>
+ <td id="L451" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="451"></td>
+ <td id="LC451" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \item |tikz/{opt}|: adds options |{opt}| to the |tikzpicture| environment.</span></td>
+ </tr>
+ <tr>
+ <td id="L452" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="452"></td>
+ <td id="LC452" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \item |approx/linear|: plots linear approximation.</span></td>
+ </tr>
+ <tr>
+ <td id="L453" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="453"></td>
+ <td id="LC453" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \item |approx/asymptotic|: plots asymptotic approximation.</span></td>
+ </tr>
+ <tr>
+ <td id="L454" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="454"></td>
+ <td id="LC454" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{itemize}</span></td>
+ </tr>
+ <tr>
+ <td id="L455" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="455"></td>
+ <td id="LC455" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \item Tuples of the form |{opt}| add all of the supplied options to |\addplot| macros for both the magnitude and the phase plots.</span></td>
+ </tr>
+ <tr>
+ <td id="L456" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="456"></td>
+ <td id="LC456" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{itemize}</span></td>
+ </tr>
+ <tr>
+ <td id="L457" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="457"></td>
+ <td id="LC457" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> The options |{opt}| can be any |key=value| options that are supported by the |pgfplots| macros they are added to.</span></td>
+ </tr>
+ <tr>
+ <td id="L458" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="458"></td>
+ <td id="LC458" class="blob-code blob-code-inner js-file-line">
+</td>
+ </tr>
+ <tr>
+ <td id="L459" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="459"></td>
+ <td id="LC459" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> For example, given a transfer function \begin{equation}G(s) = 10\frac{s(s+0.1+0.5\mathrm{i})(s+0.1-0.5\mathrm{i})}{(s+0.5+10\mathrm{i})(s+0.5-10\mathrm{i})},\label{eq:ZPKExample}\end{equation} its Bode plot over the frequency range $[0.01,100]$ can be generated using\\</span></td>
+ </tr>
+ <tr>
+ <td id="L460" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="460"></td>
+ <td id="LC460" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> |\BodeZPK [blue,thick]|\\</span></td>
+ </tr>
+ <tr>
+ <td id="L461" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="461"></td>
+ <td id="LC461" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> | {z/{0,{-0.1,-0.5},{-0.1,0.5}},p/{{-0.5,-10},{-0.5,10}},k/10}|\\</span></td>
+ </tr>
+ <tr>
+ <td id="L462" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="462"></td>
+ <td id="LC462" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> | {0.01}{100}|\\</span></td>
+ </tr>
+ <tr>
+ <td id="L463" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="463"></td>
+ <td id="LC463" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> which generates the plot in Figure \ref{simpleBode}. If a delay is not specified, it is assumed to be zero. If a gain is not specified, it is assumed to be 1. By default, each of the axes, excluding ticks and labels, are 5cm wide and 2.5cm high. The width and the height, along with other properties of the plots, the axes, and the group can be customized using native |pgf| keys as shown in the example below.</span></td>
+ </tr>
+ <tr>
+ <td id="L464" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="464"></td>
+ <td id="LC464" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L465" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="465"></td>
+ <td id="LC465" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{figure}</span></td>
+ </tr>
+ <tr>
+ <td id="L466" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="466"></td>
+ <td id="LC466" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{center}</span></td>
+ </tr>
+ <tr>
+ <td id="L467" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="467"></td>
+ <td id="LC467" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \BodeZPK[blue,thick]{z/{0,{-0.1,-0.5},{-0.1,0.5}},p/{{-0.5,-10},{-0.5,10}},k/10}{0.01}{100}</span></td>
+ </tr>
+ <tr>
+ <td id="L468" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="468"></td>
+ <td id="LC468" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \cprotect\caption{\label{simpleBode}Output of the default |\BodeZPK| macro.}</span></td>
+ </tr>
+ <tr>
+ <td id="L469" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="469"></td>
+ <td id="LC469" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{center}</span></td>
+ </tr>
+ <tr>
+ <td id="L470" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="470"></td>
+ <td id="LC470" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{figure}</span></td>
+ </tr>
+ <tr>
+ <td id="L471" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="471"></td>
+ <td id="LC471" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> As demonstrated in this example, if a single comma-separated list of options is passed, it applies to both the magnitude and the phase plots. Without any optional arguments, we gets a thick black Bode plot.</span></td>
+ </tr>
+ <tr>
+ <td id="L472" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="472"></td>
+ <td id="LC472" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L473" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="473"></td>
+ <td id="LC473" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> A linear approximation of the Bode plot with customization of the plots, the axes, and the group can be generated using\\</span></td>
+ </tr>
+ <tr>
+ <td id="L474" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="474"></td>
+ <td id="LC474" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> |\BodeZPK[plot/mag/{red,thick},plot/ph/{blue,thick},|\\</span></td>
+ </tr>
+ <tr>
+ <td id="L475" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="475"></td>
+ <td id="LC475" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> | axes/mag/{ytick distance=40,xmajorticks=true,|\\</span></td>
+ </tr>
+ <tr>
+ <td id="L476" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="476"></td>
+ <td id="LC476" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> | xlabel={Frequency (rad/s)}},axes/ph/{ytick distance=90},|\\</span></td>
+ </tr>
+ <tr>
+ <td id="L477" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="477"></td>
+ <td id="LC477" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> | group/{group style={group size=2 by 1,horizontal sep=2cm,|\\</span></td>
+ </tr>
+ <tr>
+ <td id="L478" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="478"></td>
+ <td id="LC478" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> | width=4cm,height=2cm}},approx/linear]|\\</span></td>
+ </tr>
+ <tr>
+ <td id="L479" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="479"></td>
+ <td id="LC479" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> | {z/{0,{-0.1,-0.5},{-0.1,0.5}},p/{{-0.5,-10},{-0.5,10}},k/10}|\\</span></td>
+ </tr>
+ <tr>
+ <td id="L480" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="480"></td>
+ <td id="LC480" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> | {0.01}{100}|\\</span></td>
+ </tr>
+ <tr>
+ <td id="L481" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="481"></td>
+ <td id="LC481" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> which generates the plot in Figure \ref{customBode}.</span></td>
+ </tr>
+ <tr>
+ <td id="L482" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="482"></td>
+ <td id="LC482" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L483" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="483"></td>
+ <td id="LC483" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{figure}</span></td>
+ </tr>
+ <tr>
+ <td id="L484" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="484"></td>
+ <td id="LC484" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{center}</span></td>
+ </tr>
+ <tr>
+ <td id="L485" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="485"></td>
+ <td id="LC485" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \BodeZPK[plot/mag/{red,thick},plot/ph/{blue,thick},axes/mag/{ytick distance=40,xmajorticks=true,xlabel={Frequency (rad/s)}},axes/ph/{ytick distance=90},approx/linear,group/{group style={group size = 2 by 1,horizontal sep=2cm},width=4cm,height=2cm}] {z/{0,{-0.1,-0.5},{-0.1,0.5}},p/{{-0.5,-10},{-0.5,10}},g/10} {0.01} {100}</span></td>
+ </tr>
+ <tr>
+ <td id="L486" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="486"></td>
+ <td id="LC486" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \cprotect\caption{\label{customBode}Customization of the default |\BodeZPK| macro.}</span></td>
+ </tr>
+ <tr>
+ <td id="L487" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="487"></td>
+ <td id="LC487" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{center}</span></td>
+ </tr>
+ <tr>
+ <td id="L488" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="488"></td>
+ <td id="LC488" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{figure}</span></td>
+ </tr>
+ <tr>
+ <td id="L489" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="489"></td>
+ <td id="LC489" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L490" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="490"></td>
+ <td id="LC490" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \DescribeMacro{\BodeTF}</span></td>
+ </tr>
+ <tr>
+ <td id="L491" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="491"></td>
+ <td id="LC491" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> |\BodeTF| \oarg{obj1/typ1/\marg{opt1},obj2/typ2/\marg{opt2},...}\\</span></td>
+ </tr>
+ <tr>
+ <td id="L492" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="492"></td>
+ <td id="LC492" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \hspace*{2em}\marg{num/\marg{coeffs},den/\marg{coeffs},d/\marg{delay}}\\</span></td>
+ </tr>
+ <tr>
+ <td id="L493" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="493"></td>
+ <td id="LC493" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \hspace*{2em}\marg{min-freq}\marg{max-freq} \rmfamily</span></td>
+ </tr>
+ <tr>
+ <td id="L494" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="494"></td>
+ <td id="LC494" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L495" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="495"></td>
+ <td id="LC495" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \noindent Plots the Bode plot of a transfer function given in TF format. The three mandatory arguments include: (1) a list of tuples comprised of the coefficients in the numerator and the denominator of the transfer function and the transport delay, (2) the lower end of the frequency range for the $x-$ axis, and (3) the higher end of the frequency range for the $x-$axis. The coefficients are entered as a comma-separated list, in order from the highest degree of $s$ to the lowest, with zeros for missing degrees. The optional arguments are the same as |\BodeZPK|, except that linear/asymptotic approximation is not supported, so |approx/...| is ignored.</span></td>
+ </tr>
+ <tr>
+ <td id="L496" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="496"></td>
+ <td id="LC496" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L497" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="497"></td>
+ <td id="LC497" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> For example, given the same transfer function as (\ref{eq:ZPKExample}) in TF form and with a small transport delay, \begin{equation}G(s) = e^{-0.01s}\frac{s(10s^2+2s+2.6)}{(s^2+s+100.25)},\label{eq:TFExample}\end{equation} its Bode plot over the frequency range $[0.01,100]$ can be generated using\\</span></td>
+ </tr>
+ <tr>
+ <td id="L498" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="498"></td>
+ <td id="LC498" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> |\BodeTF[commands/mag/{\node at (axis cs: 2.1,0) |\\</span></td>
+ </tr>
+ <tr>
+ <td id="L499" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="499"></td>
+ <td id="LC499" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> | [circle,fill,inner sep=0.05cm,label=below:{$\omega_{gc}$}]{};}]|\\</span></td>
+ </tr>
+ <tr>
+ <td id="L500" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="500"></td>
+ <td id="LC500" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> | {num/{10,2,2.6,0},den/{1,1,100.25},d/0.01}|\\</span></td>
+ </tr>
+ <tr>
+ <td id="L501" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="501"></td>
+ <td id="LC501" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> | {0.01}{100}|\\</span></td>
+ </tr>
+ <tr>
+ <td id="L502" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="502"></td>
+ <td id="LC502" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> which generates the plot in Figure \ref{simpleBodeTF}. Note the $0$ added to the numerator coefficients to account for the fact that the numerator does not have a constant term in it. Note the semicolon after the TikZ command passed to the |\commands| option.</span></td>
+ </tr>
+ <tr>
+ <td id="L503" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="503"></td>
+ <td id="LC503" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L504" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="504"></td>
+ <td id="LC504" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{figure}</span></td>
+ </tr>
+ <tr>
+ <td id="L505" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="505"></td>
+ <td id="LC505" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{center}</span></td>
+ </tr>
+ <tr>
+ <td id="L506" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="506"></td>
+ <td id="LC506" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \BodeTF[commands/mag/{\node at (axis cs: 2.1,0) [circle,fill,inner sep=0.05cm,label=below:{$\omega_{gc}$}] {};}]{num/{10,2,2.6,0},den/{1,1,100.25},d/0.01}{0.01}{100}</span></td>
+ </tr>
+ <tr>
+ <td id="L507" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="507"></td>
+ <td id="LC507" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \cprotect\caption{\label{simpleBodeTF}Output of the |\BodeTF| macro with an optional TikZ command used to mark the gain crossover frequency.}</span></td>
+ </tr>
+ <tr>
+ <td id="L508" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="508"></td>
+ <td id="LC508" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{center}</span></td>
+ </tr>
+ <tr>
+ <td id="L509" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="509"></td>
+ <td id="LC509" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{figure}</span></td>
+ </tr>
+ <tr>
+ <td id="L510" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="510"></td>
+ <td id="LC510" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L511" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="511"></td>
+ <td id="LC511" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \DescribeEnv{BodeMagPlot}</span></td>
+ </tr>
+ <tr>
+ <td id="L512" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="512"></td>
+ <td id="LC512" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> |\begin{BodeMagPlot}|\oarg{obj1/\marg{opt1},obj2/\marg{opt2},...}\\</span></td>
+ </tr>
+ <tr>
+ <td id="L513" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="513"></td>
+ <td id="LC513" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \hspace*{3em}\marg{min-frequency}\marg{max-frequency}\\</span></td>
+ </tr>
+ <tr>
+ <td id="L514" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="514"></td>
+ <td id="LC514" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \hspace*{2em}|\addBode...|\\</span></td>
+ </tr>
+ <tr>
+ <td id="L515" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="515"></td>
+ <td id="LC515" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \hspace*{1.5em}|\end{BodeMagPlot}|\\</span></td>
+ </tr>
+ <tr>
+ <td id="L516" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="516"></td>
+ <td id="LC516" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> The |BodeMagPlot| environment works in conjunction with the parametric function generator macros |\addBodeZPKPlots|, |\addBodeTFPlot|, and |\addBodeComponentPlot|, intended to be used for magnitude plots. The optional argument is comprised of a comma separated list of tuples, either |obj/{opt}| or just |{opt}|. Each tuple passes options to different |pgfplots| macros that generate the axes and the plots according to:</span></td>
+ </tr>
+ <tr>
+ <td id="L517" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="517"></td>
+ <td id="LC517" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{itemize}</span></td>
+ </tr>
+ <tr>
+ <td id="L518" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="518"></td>
+ <td id="LC518" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \item Tuples of the form |obj/{opt}|:</span></td>
+ </tr>
+ <tr>
+ <td id="L519" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="519"></td>
+ <td id="LC519" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{itemize}</span></td>
+ </tr>
+ <tr>
+ <td id="L520" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="520"></td>
+ <td id="LC520" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \item |tikz/{opt}|: modify picture properties by adding options |{opt}| to the |tikzpicture| environment.</span></td>
+ </tr>
+ <tr>
+ <td id="L521" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="521"></td>
+ <td id="LC521" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \item |axes/{opt}|: modify axis properties by adding options |{opt}| to the |semilogaxis| environment.</span></td>
+ </tr>
+ <tr>
+ <td id="L522" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="522"></td>
+ <td id="LC522" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \item |commands/{opt}|: add any valid TikZ commands inside |semilogaxis| environment. The commands passed to |opt| need to be valid TikZ commands, separated by semicolons as usual.</span></td>
+ </tr>
+ <tr>
+ <td id="L523" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="523"></td>
+ <td id="LC523" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{itemize}</span></td>
+ </tr>
+ <tr>
+ <td id="L524" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="524"></td>
+ <td id="LC524" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \item Tuples of the form |{opt}| are passed directly to the |semilogaxis| environment.</span></td>
+ </tr>
+ <tr>
+ <td id="L525" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="525"></td>
+ <td id="LC525" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{itemize}</span></td>
+ </tr>
+ <tr>
+ <td id="L526" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="526"></td>
+ <td id="LC526" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> The frequency limits are translated to the x-axis limits and the domain of the |semilogaxis| environment. Example usage in the description of |\addBodeZPKPlots|, |\addBodeTFPlot|, and |\addBodeComponentPlot|.</span></td>
+ </tr>
+ <tr>
+ <td id="L527" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="527"></td>
+ <td id="LC527" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L528" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="528"></td>
+ <td id="LC528" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>\DescribeEnv{BodePhPlot}</span></td>
+ </tr>
+ <tr>
+ <td id="L529" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="529"></td>
+ <td id="LC529" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> |\begin{BodePhPlot}|\oarg{obj1/\marg{opt1},obj2/\marg{opt2},...}\\</span></td>
+ </tr>
+ <tr>
+ <td id="L530" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="530"></td>
+ <td id="LC530" class="blob-code blob-code-inner js-file-line"> <span class="pl-c"><span class="pl-c">%</span> \hspace*{3em}\marg{min-frequency}\marg{max-frequency}\\</span></td>
+ </tr>
+ <tr>
+ <td id="L531" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="531"></td>
+ <td id="LC531" class="blob-code blob-code-inner js-file-line"> <span class="pl-c"><span class="pl-c">%</span> \hspace*{2em}|\addBode...|\\</span></td>
+ </tr>
+ <tr>
+ <td id="L532" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="532"></td>
+ <td id="LC532" class="blob-code blob-code-inner js-file-line"> <span class="pl-c"><span class="pl-c">%</span> \hspace*{1.5em}|\end{BodePhPlot}|\\</span></td>
+ </tr>
+ <tr>
+ <td id="L533" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="533"></td>
+ <td id="LC533" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> Intended to be used for phase plots, otherwise same as the |BodeMagPlot| environment</span></td>
+ </tr>
+ <tr>
+ <td id="L534" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="534"></td>
+ <td id="LC534" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L535" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="535"></td>
+ <td id="LC535" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \DescribeMacro{\addBodeZPKPlots}</span></td>
+ </tr>
+ <tr>
+ <td id="L536" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="536"></td>
+ <td id="LC536" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> |\addBodeZPKPlots| \oarg{approx1/\marg{opt1},approx2/\marg{opt2},...}\\</span></td>
+ </tr>
+ <tr>
+ <td id="L537" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="537"></td>
+ <td id="LC537" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \hspace*{2em}\marg{plot-type}\\</span></td>
+ </tr>
+ <tr>
+ <td id="L538" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="538"></td>
+ <td id="LC538" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \hspace*{2em}\marg{z/\marg{zeros},p/\marg{poles},k/\marg{gain},d/\marg{delay}}</span></td>
+ </tr>
+ <tr>
+ <td id="L539" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="539"></td>
+ <td id="LC539" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L540" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="540"></td>
+ <td id="LC540" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \noindent Generates the appropriate parametric functions and supplies them to multiple |\addplot| macros, one for each |approx/{opt}| pair in the optional argument. If no optional argument is supplied, then a single |\addplot| command corresponding to a thick true Bode plot is generated. If an optional argument is supplied, it needs to be one of |true/{opt}|, |linear/{opt}|, or |asymptotic/{opt}|. This macro can be used inside any |semilogaxis| environment as long as a domain for the x-axis is supplied through either the |approx/{opt}| interface or directly in the optional argument of the |semilogaxis| environment. Use with the |BodePlot| environment supplied with this package is recommended. The second mandatory argument, |plot-type| is either |magnitude| or |phase|. If it is not equal to |phase|, it is assumed to be |magnitude|. The last mandatory argument is the same as |\BodeZPK|.</span></td>
+ </tr>
+ <tr>
+ <td id="L541" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="541"></td>
+ <td id="LC541" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L542" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="542"></td>
+ <td id="LC542" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> For example, given the transfer function in (\ref{eq:ZPKExample}), its linear, asymptotic, and true Bode plots can be superimposed using</span></td>
+ </tr>
+ <tr>
+ <td id="L543" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="543"></td>
+ <td id="LC543" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>\begin{verbatim}</span></td>
+ </tr>
+ <tr>
+ <td id="L544" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="544"></td>
+ <td id="LC544" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>\begin{BodeMagPlot}[height=2cm,width=4cm] {0.01} {100}</span></td>
+ </tr>
+ <tr>
+ <td id="L545" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="545"></td>
+ <td id="LC545" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \addBodeZPKPlots[%</span></td>
+ </tr>
+ <tr>
+ <td id="L546" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="546"></td>
+ <td id="LC546" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> true/{black,thick},</span></td>
+ </tr>
+ <tr>
+ <td id="L547" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="547"></td>
+ <td id="LC547" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> linear/{red,dashed,thick},</span></td>
+ </tr>
+ <tr>
+ <td id="L548" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="548"></td>
+ <td id="LC548" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> asymptotic/{blue,dotted,thick}]</span></td>
+ </tr>
+ <tr>
+ <td id="L549" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="549"></td>
+ <td id="LC549" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> {magnitude}</span></td>
+ </tr>
+ <tr>
+ <td id="L550" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="550"></td>
+ <td id="LC550" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> {z/{0,{-0.1,-0.5},{-0.1,0.5}},p/{{-0.5,-10},{-0.5,10}},k/10}</span></td>
+ </tr>
+ <tr>
+ <td id="L551" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="551"></td>
+ <td id="LC551" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>\end{BodeMagPlot}</span></td>
+ </tr>
+ <tr>
+ <td id="L552" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="552"></td>
+ <td id="LC552" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L553" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="553"></td>
+ <td id="LC553" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>\begin{BodePhPlot}[height=2cm, width=4cm, ytick distance=90] {0.01} {100}</span></td>
+ </tr>
+ <tr>
+ <td id="L554" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="554"></td>
+ <td id="LC554" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \addBodeZPKPlots[%</span></td>
+ </tr>
+ <tr>
+ <td id="L555" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="555"></td>
+ <td id="LC555" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> true/{black,thick},</span></td>
+ </tr>
+ <tr>
+ <td id="L556" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="556"></td>
+ <td id="LC556" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> linear/{red,dashed,thick},</span></td>
+ </tr>
+ <tr>
+ <td id="L557" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="557"></td>
+ <td id="LC557" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> asymptotic/{blue,dotted,thick}]</span></td>
+ </tr>
+ <tr>
+ <td id="L558" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="558"></td>
+ <td id="LC558" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> {phase}</span></td>
+ </tr>
+ <tr>
+ <td id="L559" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="559"></td>
+ <td id="LC559" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> {z/{0,{-0.1,-0.5},{-0.1,0.5}},p/{{-0.5,-10},{-0.5,10}},k/10}</span></td>
+ </tr>
+ <tr>
+ <td id="L560" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="560"></td>
+ <td id="LC560" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>\end{BodePhPlot}</span></td>
+ </tr>
+ <tr>
+ <td id="L561" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="561"></td>
+ <td id="LC561" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>\end{verbatim}</span></td>
+ </tr>
+ <tr>
+ <td id="L562" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="562"></td>
+ <td id="LC562" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{figure}</span></td>
+ </tr>
+ <tr>
+ <td id="L563" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="563"></td>
+ <td id="LC563" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{center}</span></td>
+ </tr>
+ <tr>
+ <td id="L564" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="564"></td>
+ <td id="LC564" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{BodeMagPlot}[height=2cm,width=4cm]{0.01}{100}</span></td>
+ </tr>
+ <tr>
+ <td id="L565" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="565"></td>
+ <td id="LC565" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \addBodeZPKPlots[%</span></td>
+ </tr>
+ <tr>
+ <td id="L566" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="566"></td>
+ <td id="LC566" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> true/{black,thick},</span></td>
+ </tr>
+ <tr>
+ <td id="L567" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="567"></td>
+ <td id="LC567" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> linear/{red,dashed,thick},</span></td>
+ </tr>
+ <tr>
+ <td id="L568" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="568"></td>
+ <td id="LC568" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> asymptotic/{blue,dotted,thick}]</span></td>
+ </tr>
+ <tr>
+ <td id="L569" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="569"></td>
+ <td id="LC569" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> {magnitude}</span></td>
+ </tr>
+ <tr>
+ <td id="L570" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="570"></td>
+ <td id="LC570" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> {z/{0,{-0.1,-0.5},{-0.1,0.5}},p/{{-0.5,-10},{-0.5,10}},k/10}</span></td>
+ </tr>
+ <tr>
+ <td id="L571" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="571"></td>
+ <td id="LC571" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{BodeMagPlot}</span></td>
+ </tr>
+ <tr>
+ <td id="L572" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="572"></td>
+ <td id="LC572" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{BodePhPlot}[height=2cm,width=4cm,ytick distance=90]{0.01}{100}</span></td>
+ </tr>
+ <tr>
+ <td id="L573" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="573"></td>
+ <td id="LC573" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \addBodeZPKPlots[%</span></td>
+ </tr>
+ <tr>
+ <td id="L574" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="574"></td>
+ <td id="LC574" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> true/{black,thick},</span></td>
+ </tr>
+ <tr>
+ <td id="L575" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="575"></td>
+ <td id="LC575" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> linear/{red,dashed,thick},</span></td>
+ </tr>
+ <tr>
+ <td id="L576" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="576"></td>
+ <td id="LC576" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> asymptotic/{blue,dotted,thick}]</span></td>
+ </tr>
+ <tr>
+ <td id="L577" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="577"></td>
+ <td id="LC577" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> {phase}</span></td>
+ </tr>
+ <tr>
+ <td id="L578" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="578"></td>
+ <td id="LC578" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> {z/{0,{-0.1,-0.5},{-0.1,0.5}},p/{{-0.5,-10},{-0.5,10}},k/10}</span></td>
+ </tr>
+ <tr>
+ <td id="L579" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="579"></td>
+ <td id="LC579" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{BodePhPlot}</span></td>
+ </tr>
+ <tr>
+ <td id="L580" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="580"></td>
+ <td id="LC580" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{center}</span></td>
+ </tr>
+ <tr>
+ <td id="L581" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="581"></td>
+ <td id="LC581" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \caption{\label{multiBodeZPK}Superimposed approximate and true Bode plots using the \texttt{BodeMagPlot} and \texttt{BodePhPlot} environments and the \texttt{\textbackslash addBodeZPKPlots} macro.}</span></td>
+ </tr>
+ <tr>
+ <td id="L582" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="582"></td>
+ <td id="LC582" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{figure}</span></td>
+ </tr>
+ <tr>
+ <td id="L583" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="583"></td>
+ <td id="LC583" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> which generates the plot in Figure \ref{multiBodeZPK}.</span></td>
+ </tr>
+ <tr>
+ <td id="L584" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="584"></td>
+ <td id="LC584" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L585" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="585"></td>
+ <td id="LC585" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \DescribeMacro{\addBodeTFPlot}</span></td>
+ </tr>
+ <tr>
+ <td id="L586" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="586"></td>
+ <td id="LC586" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> |\addBodeTFPlot|\oarg{plot-options}\\</span></td>
+ </tr>
+ <tr>
+ <td id="L587" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="587"></td>
+ <td id="LC587" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \hspace*{2em}\marg{plot-type}\\</span></td>
+ </tr>
+ <tr>
+ <td id="L588" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="588"></td>
+ <td id="LC588" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \hspace*{2em}\marg{num/\marg{coeffs},den/\marg{coeffs},d/\marg{delay}}</span></td>
+ </tr>
+ <tr>
+ <td id="L589" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="589"></td>
+ <td id="LC589" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L590" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="590"></td>
+ <td id="LC590" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \noindent Generates a single parametric function for either Bode magnitude or phase plot of a transfer function in TF form. The generated parametric function is passed to the |\addplot| macro. This macro can be used inside any |semilogaxis| environment as long as a domain for the x-axis is supplied through either the |plot-options| interface or directly in the optional argument of the container |semilogaxis| environment. Use with the |BodePlot| environment supplied with this package is recommended. The second mandatory argument, |plot-type| is either magnitude or |phase|. If it is not equal to |phase|, it is assumed to be |magnitude|. The last mandatory argument is the same as |\BodeTF|.</span></td>
+ </tr>
+ <tr>
+ <td id="L591" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="591"></td>
+ <td id="LC591" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L592" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="592"></td>
+ <td id="LC592" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \DescribeMacro{\addBodeComponentPlot}</span></td>
+ </tr>
+ <tr>
+ <td id="L593" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="593"></td>
+ <td id="LC593" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> |\addBodeComponentPlot|\oarg{plot-options}\marg{plot-command}</span></td>
+ </tr>
+ <tr>
+ <td id="L594" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="594"></td>
+ <td id="LC594" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L595" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="595"></td>
+ <td id="LC595" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \noindent Generates a single parametric function corresponding to the mandatory argument |plot-command| and passes it to the |\addplot| macro. The plot command can be any parametric function that uses |t| as the independent variable. The parametric function must be |gnuplot| compatible (or |pgfplots| compatible if the package is loaded using the |pgf| option). The intended use of this macro is to plot the parametric functions generated using the basic component macros described in Section \ref{sec:BasicComponents} below.</span></td>
+ </tr>
+ <tr>
+ <td id="L596" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="596"></td>
+ <td id="LC596" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L597" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="597"></td>
+ <td id="LC597" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \subsubsection{Basic components up to first order\label{sec:BasicComponents}}</span></td>
+ </tr>
+ <tr>
+ <td id="L598" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="598"></td>
+ <td id="LC598" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L599" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="599"></td>
+ <td id="LC599" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \DescribeMacro{\TypeFeatureApprox}</span></td>
+ </tr>
+ <tr>
+ <td id="L600" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="600"></td>
+ <td id="LC600" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> |\TypeFeatureApprox|\marg{real-part}\marg{imaginary-part}</span></td>
+ </tr>
+ <tr>
+ <td id="L601" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="601"></td>
+ <td id="LC601" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L602" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="602"></td>
+ <td id="LC602" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \noindent This entry describes 20 different macros of the form |\TypeFeatureApprox| that take the real part and the imaginary part of a complex number as arguments. The |Type| in the macro name should be replaced by either |Mag| or |Ph| to generate a parametric function corresponding to the magnitude or the phase plot, respectively. The |Feature| in the macro name should be replaced by one of |K|, |Pole|, |Zero|, or |Del|, to generate the Bode plot of a gain, a complex pole, a complex zero, or a transport delay, respectively. If the |Feature| is set to either |K| or |Del|, the |imaginary-part| mandatory argument is ignored. The |Approx| in the macro name should either be removed, or it should be replaced by |Lin| or |Asymp| to generate the true Bode plot, the linear approximation, or the asymptotic approximation, respectively. If the |Feature| is set to |Del|, then |Approx| has to be removed. For example, </span></td>
+ </tr>
+ <tr>
+ <td id="L603" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="603"></td>
+ <td id="LC603" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{itemize}</span></td>
+ </tr>
+ <tr>
+ <td id="L604" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="604"></td>
+ <td id="LC604" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \item |\MagK{k}{0}| or |\MagK{k}{400}| generates a parametric function for the true Bode magnitude of $ G(s) = k $</span></td>
+ </tr>
+ <tr>
+ <td id="L605" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="605"></td>
+ <td id="LC605" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \item |\PhPoleLin{a}{b}| generates a parametric function for the linear approximation of the Bode phase of $ G(s) = \frac{1}{s-a-\mathrm{i}b} $.</span></td>
+ </tr>
+ <tr>
+ <td id="L606" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="606"></td>
+ <td id="LC606" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \item |\PhDel{T}{200}| or |\PhDel{T}{0}| generates a parametric function for the Bode phase of $ G(s) = e^{-Ts} $.</span></td>
+ </tr>
+ <tr>
+ <td id="L607" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="607"></td>
+ <td id="LC607" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{itemize}</span></td>
+ </tr>
+ <tr>
+ <td id="L608" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="608"></td>
+ <td id="LC608" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> All 20 of the macros defined by combinations of |Type|, |Feature|, and |Approx|, and any |gnuplot| (or |pgfplot| if the |pgf| class option is loaded) compatible function of the 20 macros can be used as |plot-command| in the |addBodeComponentPlot| macro. This is sufficient to generate the Bode plot of any rational transfer function with delay. For example, the Bode phase plot in Figure \ref{multiBodeZPK} can also be generated using:</span></td>
+ </tr>
+ <tr>
+ <td id="L609" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="609"></td>
+ <td id="LC609" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>\begin{verbatim}</span></td>
+ </tr>
+ <tr>
+ <td id="L610" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="610"></td>
+ <td id="LC610" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>\begin{BodePhPlot}[ytick distance=90]{0.01}{100}</span></td>
+ </tr>
+ <tr>
+ <td id="L611" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="611"></td>
+ <td id="LC611" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \addBodeComponentPlot[black,thick]{\PhZero{0}{0} + \PhZero{-0.1}{-0.5} +</span></td>
+ </tr>
+ <tr>
+ <td id="L612" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="612"></td>
+ <td id="LC612" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \PhZero{-0.1}{0.5} + \PhPole{-0.5}{-10} + \PhPole{-0.5}{10} +</span></td>
+ </tr>
+ <tr>
+ <td id="L613" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="613"></td>
+ <td id="LC613" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \PhK{10}{0}}</span></td>
+ </tr>
+ <tr>
+ <td id="L614" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="614"></td>
+ <td id="LC614" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \addBodeComponentPlot[red,dashed,thick] {\PhZeroLin{0}{0} + </span></td>
+ </tr>
+ <tr>
+ <td id="L615" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="615"></td>
+ <td id="LC615" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \PhZeroLin{-0.1}{-0.5} + \PhZeroLin{-0.1}{0.5} +</span></td>
+ </tr>
+ <tr>
+ <td id="L616" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="616"></td>
+ <td id="LC616" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \PhPoleLin{-0.5}{-10} + \PhPoleLin{-0.5}{10} + \PhKLin{10}{20}}</span></td>
+ </tr>
+ <tr>
+ <td id="L617" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="617"></td>
+ <td id="LC617" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \addBodeComponentPlot[blue,dotted,thick] {\PhZeroAsymp{0}{0} + </span></td>
+ </tr>
+ <tr>
+ <td id="L618" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="618"></td>
+ <td id="LC618" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \PhZeroAsymp{-0.1}{-0.5} + \PhZeroAsymp{-0.1}{0.5} + </span></td>
+ </tr>
+ <tr>
+ <td id="L619" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="619"></td>
+ <td id="LC619" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \PhPoleAsymp{-0.5}{-10} + \PhPoleAsymp{-0.5}{10} + \PhKAsymp{10}{40}}</span></td>
+ </tr>
+ <tr>
+ <td id="L620" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="620"></td>
+ <td id="LC620" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>\end{BodePhPlot}</span></td>
+ </tr>
+ <tr>
+ <td id="L621" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="621"></td>
+ <td id="LC621" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>\end{verbatim}</span></td>
+ </tr>
+ <tr>
+ <td id="L622" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="622"></td>
+ <td id="LC622" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>\begin{figure}</span></td>
+ </tr>
+ <tr>
+ <td id="L623" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="623"></td>
+ <td id="LC623" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{center}</span></td>
+ </tr>
+ <tr>
+ <td id="L624" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="624"></td>
+ <td id="LC624" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{BodePhPlot}[ytick distance=90]{0.01}{100}</span></td>
+ </tr>
+ <tr>
+ <td id="L625" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="625"></td>
+ <td id="LC625" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \addBodeComponentPlot[black,thick] {\PhZero{0}{0} + \PhZero{-0.1}{-0.5} + \PhZero{-0.1}{0.5} + \PhPole{-0.5}{-10} + \PhPole{-0.5}{10} + \PhK{10}{0}}</span></td>
+ </tr>
+ <tr>
+ <td id="L626" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="626"></td>
+ <td id="LC626" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \addBodeComponentPlot[red,dashed,thick] {\PhZeroLin{0}{0} + \PhZeroLin{-0.1}{-0.5} + \PhZeroLin{-0.1}{0.5} + \PhPoleLin{-0.5}{-10} + \PhPoleLin{-0.5}{10} + \PhKLin{10}{20}}</span></td>
+ </tr>
+ <tr>
+ <td id="L627" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="627"></td>
+ <td id="LC627" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \addBodeComponentPlot[blue,dotted,thick] {\PhZeroAsymp{0}{0} + \PhZeroAsymp{-0.1}{-0.5} + \PhZeroAsymp{-0.1}{0.5} + \PhPoleAsymp{-0.5}{-10} + \PhPoleAsymp{-0.5}{10} + \PhKAsymp{10}{40}}</span></td>
+ </tr>
+ <tr>
+ <td id="L628" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="628"></td>
+ <td id="LC628" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{BodePhPlot}</span></td>
+ </tr>
+ <tr>
+ <td id="L629" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="629"></td>
+ <td id="LC629" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{center}</span></td>
+ </tr>
+ <tr>
+ <td id="L630" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="630"></td>
+ <td id="LC630" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \caption{\label{multiBodeComponents}Superimposed approximate and true Bode Phase plot using the \texttt{BodePhPlot} environment, the \texttt{\textbackslash addBodeComponentPlot} macro, and several macros of the \texttt{\textbackslash TypeFeatureApprox} form.}</span></td>
+ </tr>
+ <tr>
+ <td id="L631" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="631"></td>
+ <td id="LC631" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>\end{figure}</span></td>
+ </tr>
+ <tr>
+ <td id="L632" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="632"></td>
+ <td id="LC632" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> which gives us the plot in Figure \ref{multiBodeComponents}.</span></td>
+ </tr>
+ <tr>
+ <td id="L633" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="633"></td>
+ <td id="LC633" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L634" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="634"></td>
+ <td id="LC634" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \subsubsection{Basic components of the second order}</span></td>
+ </tr>
+ <tr>
+ <td id="L635" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="635"></td>
+ <td id="LC635" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L636" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="636"></td>
+ <td id="LC636" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \DescribeMacro{\TypeSOFeatureApprox}</span></td>
+ </tr>
+ <tr>
+ <td id="L637" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="637"></td>
+ <td id="LC637" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> |\TypeSOFeatureApprox|\marg{a1}\marg{a0}</span></td>
+ </tr>
+ <tr>
+ <td id="L638" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="638"></td>
+ <td id="LC638" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L639" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="639"></td>
+ <td id="LC639" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \noindent This entry describes 12 different macros of the form |\TypeSOFeatureApprox| that take the coefficients $ a_1 $ and $ a_0 $ of a general second order system as inputs. The |Feature| in the macro name should be replaced by either |Poles| or |Zeros| to generate the Bode plot of $G(s)=\frac{1}{s^2+a_1 s+a_0}$ or $G(s)=s^2+a_1 s+a_0$, respectively. The |Type| in the macro name should be replaced by either |Mag| or |Ph| to generate a parametric function corresponding to the magnitude or the phase plot, respectively. The |Approx| in the macro name should either be removed, or it should be replaced by |Lin| or |Asymp| to generate the true Bode plot, the linear approximation, or the asymptotic approximation, respectively.</span></td>
+ </tr>
+ <tr>
+ <td id="L640" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="640"></td>
+ <td id="LC640" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> </span></td>
+ </tr>
+ <tr>
+ <td id="L641" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="641"></td>
+ <td id="LC641" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \DescribeMacro{\MagSOFeaturePeak}</span></td>
+ </tr>
+ <tr>
+ <td id="L642" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="642"></td>
+ <td id="LC642" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> |\MagSOFeaturePeak|\oarg{draw-options}\marg{a1}\marg{a0}</span></td>
+ </tr>
+ <tr>
+ <td id="L643" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="643"></td>
+ <td id="LC643" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L644" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="644"></td>
+ <td id="LC644" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \noindent This entry describes 2 different macros of the form |\MagSOFeaturePeak| that take the the coefficients $ a_1 $ and $ a_0 $ of a general second order system as inputs, and draw a resonant peak using the |\draw| TikZ macro. The |Feature| in the macro name should be replaced by either |Poles| or |Zeros| to generate a peak for poles and a valley for zeros, respectively. For example, the command</span></td>
+ </tr>
+ <tr>
+ <td id="L645" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="645"></td>
+ <td id="LC645" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>\begin{verbatim}</span></td>
+ </tr>
+ <tr>
+ <td id="L646" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="646"></td>
+ <td id="LC646" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>\begin{BodeMagPlot}[xlabel={}]{0.1}{10}</span></td>
+ </tr>
+ <tr>
+ <td id="L647" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="647"></td>
+ <td id="LC647" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \addBodeComponentPlot[red,dashed,thick]{\MagSOPoles{0.2}{1}}</span></td>
+ </tr>
+ <tr>
+ <td id="L648" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="648"></td>
+ <td id="LC648" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \addBodeComponentPlot[black,thick]{\MagSOPolesLin{0.2}{1}}</span></td>
+ </tr>
+ <tr>
+ <td id="L649" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="649"></td>
+ <td id="LC649" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \MagSOPolesPeak[thick]{0.2}{1}</span></td>
+ </tr>
+ <tr>
+ <td id="L650" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="650"></td>
+ <td id="LC650" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>\end{BodeMagPlot}</span></td>
+ </tr>
+ <tr>
+ <td id="L651" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="651"></td>
+ <td id="LC651" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>\end{verbatim}</span></td>
+ </tr>
+ <tr>
+ <td id="L652" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="652"></td>
+ <td id="LC652" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> generates the plot in Figure \ref{BodePeak}.</span></td>
+ </tr>
+ <tr>
+ <td id="L653" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="653"></td>
+ <td id="LC653" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L654" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="654"></td>
+ <td id="LC654" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{figure}</span></td>
+ </tr>
+ <tr>
+ <td id="L655" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="655"></td>
+ <td id="LC655" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{center}</span></td>
+ </tr>
+ <tr>
+ <td id="L656" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="656"></td>
+ <td id="LC656" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{BodeMagPlot}[xlabel={}]{0.1}{10}</span></td>
+ </tr>
+ <tr>
+ <td id="L657" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="657"></td>
+ <td id="LC657" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \addBodeComponentPlot[red,dashed,thick]{\MagSOPoles{0.2}{1}}</span></td>
+ </tr>
+ <tr>
+ <td id="L658" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="658"></td>
+ <td id="LC658" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \addBodeComponentPlot[black,thick]{\MagSOPolesLin{0.2}{1}}</span></td>
+ </tr>
+ <tr>
+ <td id="L659" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="659"></td>
+ <td id="LC659" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \MagSOPolesPeak[very thick]{0.2}{1}</span></td>
+ </tr>
+ <tr>
+ <td id="L660" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="660"></td>
+ <td id="LC660" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{BodeMagPlot}</span></td>
+ </tr>
+ <tr>
+ <td id="L661" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="661"></td>
+ <td id="LC661" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{center}</span></td>
+ </tr>
+ <tr>
+ <td id="L662" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="662"></td>
+ <td id="LC662" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \cprotect\caption{\label{BodePeak} Resonant peak in asymptotic Bode plot using |\MagSOPolesPeak|.}</span></td>
+ </tr>
+ <tr>
+ <td id="L663" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="663"></td>
+ <td id="LC663" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{figure}</span></td>
+ </tr>
+ <tr>
+ <td id="L664" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="664"></td>
+ <td id="LC664" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L665" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="665"></td>
+ <td id="LC665" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \DescribeMacro{\TypeCSFeatureApprox}</span></td>
+ </tr>
+ <tr>
+ <td id="L666" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="666"></td>
+ <td id="LC666" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> |\TypeCSFeatureApprox|\marg{zeta}\marg{omega-n}</span></td>
+ </tr>
+ <tr>
+ <td id="L667" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="667"></td>
+ <td id="LC667" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L668" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="668"></td>
+ <td id="LC668" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \noindent This entry describes 12 different macros of the form |\TypeCSFeatureApprox| that take the damping ratio, $ \zeta $, and the natural frequency, $ \omega_n $ of a canonical second order system as inputs. The |Type| in the macro name should be replaced by either |Mag| or |Ph| to generate a parametric function corresponding to the magnitude or the phase plot, respectively. The |Feature| in the macro name should be replaced by either |Poles| or |Zeros| to generate the Bode plot of $G(s)=\frac{1}{s^2+2\zeta\omega_n s+\omega_n^2}$ or $G(s)=s^2+2\zeta\omega_n s+\omega_n^2$, respectively. The |Approx| in the macro name should either be removed, or it should be replaced by |Lin| or |Asymp| to generate the true Bode plot, the linear approximation, or the asymptotic approximation, respectively.</span></td>
+ </tr>
+ <tr>
+ <td id="L669" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="669"></td>
+ <td id="LC669" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L670" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="670"></td>
+ <td id="LC670" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \DescribeMacro{\MagCSFeaturePeak}</span></td>
+ </tr>
+ <tr>
+ <td id="L671" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="671"></td>
+ <td id="LC671" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> |\MagCSFeaturePeak|\oarg{draw-options}\marg{zeta}\marg{omega-n}</span></td>
+ </tr>
+ <tr>
+ <td id="L672" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="672"></td>
+ <td id="LC672" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L673" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="673"></td>
+ <td id="LC673" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \noindent This entry describes 2 different macros of the form |\MagCSFeaturePeak| that take the damping ratio, $ \zeta $, and the natural frequency, $ \omega_n $ of a canonical second order system as inputs, and draw a resonant peak using the |\draw| TikZ macro. The |Feature| in the macro name should be replaced by either |Poles| or |Zeros| to generate a peak for poles and a valley for zeros, respectively.</span></td>
+ </tr>
+ <tr>
+ <td id="L674" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="674"></td>
+ <td id="LC674" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L675" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="675"></td>
+ <td id="LC675" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \DescribeMacro{\MagCCFeaturePeak}</span></td>
+ </tr>
+ <tr>
+ <td id="L676" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="676"></td>
+ <td id="LC676" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> |\MagCCFeaturePeak|\oarg{draw-options}\marg{real-part}\marg{imaginary-part}</span></td>
+ </tr>
+ <tr>
+ <td id="L677" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="677"></td>
+ <td id="LC677" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L678" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="678"></td>
+ <td id="LC678" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \noindent This entry describes 2 different macros of the form |\MagCCFeaturePeak| that take the real and imaginary parts of a pair of complex conjugate poles or zeros as inputs, and draw a resonant peak using the |\draw| TikZ macro. The |Feature| in the macro name should be replaced by either |Poles| or |Zeros| to generate a peak for poles and a valley for zeros, respectively.</span></td>
+ </tr>
+ <tr>
+ <td id="L679" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="679"></td>
+ <td id="LC679" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L680" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="680"></td>
+ <td id="LC680" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \subsection{Nyquist plots}</span></td>
+ </tr>
+ <tr>
+ <td id="L681" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="681"></td>
+ <td id="LC681" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \DescribeMacro{\NyquistZPK}</span></td>
+ </tr>
+ <tr>
+ <td id="L682" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="682"></td>
+ <td id="LC682" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> |\NyquistZPK| \oarg{plot/\marg{opt},axes/\marg{opt}}\\</span></td>
+ </tr>
+ <tr>
+ <td id="L683" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="683"></td>
+ <td id="LC683" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \hspace*{2em}\marg{z/\marg{zeros},p/\marg{poles},k/\marg{gain},d/\marg{delay}}\\</span></td>
+ </tr>
+ <tr>
+ <td id="L684" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="684"></td>
+ <td id="LC684" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \hspace*{2em}\marg{min-freq}\marg{max-freq}</span></td>
+ </tr>
+ <tr>
+ <td id="L685" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="685"></td>
+ <td id="LC685" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L686" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="686"></td>
+ <td id="LC686" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \noindent Plots the Nyquist plot of a transfer function given in ZPK format with a thick red $+$ marking the critical point (-1,0). The mandatory arguments are the same as |\BodeZPK|. Since there is only one plot in a Nyquist diagram, the |\typ| specifier in the optional argument tuples is not needed. As such, the supported optional argument tuples are |plot/{opt}|, which passes |{opt}| to |\addplot|, |axes/{opt}|, which passes |{\opt}| to the |axis| environment, and |tikz/{opt}|, which passes |{\opt}| to the |tikzpicture| environment. Asymptotic/linear approximations are not supported in Nyquist plots. If just |{opt}| is provided as the optional argument, it is interpreted as |plot/{opt}|. Arrows to indicate the direction of increasing $\omega$ can be added by adding |\usetikzlibrary{decorations.markings}| and |\usetikzlibrary{arrows.meta}| to the preamble and then passing a tuple of the form\\</span></td>
+ </tr>
+ <tr>
+ <td id="L687" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="687"></td>
+ <td id="LC687" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>|plot/{postaction=decorate,decoration={markings,|\\</span></td>
+ </tr>
+ <tr>
+ <td id="L688" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="688"></td>
+ <td id="LC688" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>| mark=between positions 0.1 and 0.9 step 5em with|\\</span></td>
+ </tr>
+ <tr>
+ <td id="L689" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="689"></td>
+ <td id="LC689" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>| {\arrow{Stealth| |[length=2mm, blue]}}}}|\\</span></td>
+ </tr>
+ <tr>
+ <td id="L690" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="690"></td>
+ <td id="LC690" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>\textbf{Caution:} with a high number of samples, adding arrows in this way may cause the error message |! Dimension too big|.</span></td>
+ </tr>
+ <tr>
+ <td id="L691" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="691"></td>
+ <td id="LC691" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L692" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="692"></td>
+ <td id="LC692" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> For example, the command\\</span></td>
+ </tr>
+ <tr>
+ <td id="L693" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="693"></td>
+ <td id="LC693" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> |\NyquistZPK[plot/{red,thick,samples=2000},axes/{blue,thick}]|\\</span></td>
+ </tr>
+ <tr>
+ <td id="L694" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="694"></td>
+ <td id="LC694" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> | {z/{0,{-0.1,-0.5},{-0.1,0.5}},p/{{-0.5,-10},{-0.5,10}},k/10}|\\</span></td>
+ </tr>
+ <tr>
+ <td id="L695" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="695"></td>
+ <td id="LC695" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> | {-30}{30}|\\</span></td>
+ </tr>
+ <tr>
+ <td id="L696" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="696"></td>
+ <td id="LC696" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> generates the Nyquist plot in Figure \ref{simpleNyquistZPK}.</span></td>
+ </tr>
+ <tr>
+ <td id="L697" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="697"></td>
+ <td id="LC697" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L698" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="698"></td>
+ <td id="LC698" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{figure}</span></td>
+ </tr>
+ <tr>
+ <td id="L699" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="699"></td>
+ <td id="LC699" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{center}</span></td>
+ </tr>
+ <tr>
+ <td id="L700" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="700"></td>
+ <td id="LC700" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \NyquistZPK[plot/{red,thick,samples=2000},axes/{blue,thick}] {z/{0,{-0.1,-0.5},{-0.1,0.5}},p/{{-0.5,-10},{-0.5,10}},k/10} {-30} {30}</span></td>
+ </tr>
+ <tr>
+ <td id="L701" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="701"></td>
+ <td id="LC701" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \cprotect\caption{\label{simpleNyquistZPK}Output of the |\NyquistZPK| macro.}</span></td>
+ </tr>
+ <tr>
+ <td id="L702" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="702"></td>
+ <td id="LC702" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{center}</span></td>
+ </tr>
+ <tr>
+ <td id="L703" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="703"></td>
+ <td id="LC703" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{figure}</span></td>
+ </tr>
+ <tr>
+ <td id="L704" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="704"></td>
+ <td id="LC704" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L705" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="705"></td>
+ <td id="LC705" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> % \DescribeMacro{\NyquistTF}</span></td>
+ </tr>
+ <tr>
+ <td id="L706" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="706"></td>
+ <td id="LC706" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> |\NyquistTF| \oarg{plot/\marg{opt},axes/\marg{opt}}\\</span></td>
+ </tr>
+ <tr>
+ <td id="L707" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="707"></td>
+ <td id="LC707" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \hspace*{2em}\marg{num/\marg{coeffs},den/\marg{coeffs},d/\marg{delay}}\\</span></td>
+ </tr>
+ <tr>
+ <td id="L708" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="708"></td>
+ <td id="LC708" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \hspace*{2em}\marg{min-freq}\marg{max-freq}</span></td>
+ </tr>
+ <tr>
+ <td id="L709" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="709"></td>
+ <td id="LC709" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L710" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="710"></td>
+ <td id="LC710" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \noindent Nyquist plot of a transfer function given in TF format. Same mandatory arguments as |\BodeTF| and same optional arguments as |\NyquistZPK|. For example, the command\\</span></td>
+ </tr>
+ <tr>
+ <td id="L711" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="711"></td>
+ <td id="LC711" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> |\NyquistTF[plot/{green,thick,samples=500,postaction=decorate,|\\</span></td>
+ </tr>
+ <tr>
+ <td id="L712" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="712"></td>
+ <td id="LC712" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> | decoration={markings,|\\</span></td>
+ </tr>
+ <tr>
+ <td id="L713" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="713"></td>
+ <td id="LC713" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> | mark=between positions 0.1 and 0.9 step 5em|\\</span></td>
+ </tr>
+ <tr>
+ <td id="L714" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="714"></td>
+ <td id="LC714" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> | with{\arrow{Stealth[length=2mm, blue]}}}}]|\\</span></td>
+ </tr>
+ <tr>
+ <td id="L715" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="715"></td>
+ <td id="LC715" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> | {num/{10,2,2.6,0},den/{1,1,100.25}}|\\</span></td>
+ </tr>
+ <tr>
+ <td id="L716" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="716"></td>
+ <td id="LC716" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> | {-30}{30}|\\</span></td>
+ </tr>
+ <tr>
+ <td id="L717" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="717"></td>
+ <td id="LC717" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> generates the Nyquist plot in Figure \ref{simpleNyquistTF}.</span></td>
+ </tr>
+ <tr>
+ <td id="L718" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="718"></td>
+ <td id="LC718" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L719" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="719"></td>
+ <td id="LC719" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{figure}</span></td>
+ </tr>
+ <tr>
+ <td id="L720" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="720"></td>
+ <td id="LC720" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{center}</span></td>
+ </tr>
+ <tr>
+ <td id="L721" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="721"></td>
+ <td id="LC721" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \NyquistTF[plot/{green,thick,samples=500,postaction=decorate,decoration={markings,mark=between positions 0.1 and 0.9 step 5em with {\arrow{Stealth[length=2mm, blue]}}}}] {num/{10,2,2.6,0},den/{1,1,100.25},d/0.01} {-30} {30}</span></td>
+ </tr>
+ <tr>
+ <td id="L722" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="722"></td>
+ <td id="LC722" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \cprotect\caption{\label{simpleNyquistTF}Output of the |\NyquistTF| macro with direction arrows. Increasing the number of samples can cause |decorations.markings| to throw errors.}</span></td>
+ </tr>
+ <tr>
+ <td id="L723" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="723"></td>
+ <td id="LC723" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{center}</span></td>
+ </tr>
+ <tr>
+ <td id="L724" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="724"></td>
+ <td id="LC724" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{figure}</span></td>
+ </tr>
+ <tr>
+ <td id="L725" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="725"></td>
+ <td id="LC725" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L726" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="726"></td>
+ <td id="LC726" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \DescribeEnv{NyquistPlot}</span></td>
+ </tr>
+ <tr>
+ <td id="L727" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="727"></td>
+ <td id="LC727" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> |\begin{NyquistPlot}|\oarg{obj1/\marg{opt1},obj2/\marg{opt2},...}\\</span></td>
+ </tr>
+ <tr>
+ <td id="L728" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="728"></td>
+ <td id="LC728" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \hspace*{3em}\marg{min-frequency}\marg{max-frequency}\\</span></td>
+ </tr>
+ <tr>
+ <td id="L729" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="729"></td>
+ <td id="LC729" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \hspace*{2em}|\addNyquist...|\\</span></td>
+ </tr>
+ <tr>
+ <td id="L730" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="730"></td>
+ <td id="LC730" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \hspace*{1.5em}|\end{NyquistPlot}|\\</span></td>
+ </tr>
+ <tr>
+ <td id="L731" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="731"></td>
+ <td id="LC731" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> The |NyquistPlot| environment works in conjunction with the parametric function generator macros |\addNyquistZPKPlot| and |\addNyquistTFPlot|. The optional argument is comprised of a comma separated list of tuples, either |obj/{opt}| or just |{opt}|. Each tuple passes options to different |pgfplots| macros that generate the axes and the plots according to:</span></td>
+ </tr>
+ <tr>
+ <td id="L732" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="732"></td>
+ <td id="LC732" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{itemize}</span></td>
+ </tr>
+ <tr>
+ <td id="L733" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="733"></td>
+ <td id="LC733" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \item Tuples of the form |obj/{opt}|:</span></td>
+ </tr>
+ <tr>
+ <td id="L734" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="734"></td>
+ <td id="LC734" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{itemize}</span></td>
+ </tr>
+ <tr>
+ <td id="L735" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="735"></td>
+ <td id="LC735" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \item |tikz/{opt}|: modify picture properties by adding options |{opt}| to the |tikzpicture| environment.</span></td>
+ </tr>
+ <tr>
+ <td id="L736" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="736"></td>
+ <td id="LC736" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \item |axes/{opt}|: modify axis properties by adding options |{opt}| to the |axis| environment.</span></td>
+ </tr>
+ <tr>
+ <td id="L737" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="737"></td>
+ <td id="LC737" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \item |commands/{opt}|: add any valid TikZ commands inside |axis| environment. The commands passed to |opt| need to be valid TikZ commands, separated by semicolons as usual.</span></td>
+ </tr>
+ <tr>
+ <td id="L738" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="738"></td>
+ <td id="LC738" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{itemize}</span></td>
+ </tr>
+ <tr>
+ <td id="L739" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="739"></td>
+ <td id="LC739" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \item Tuples of the form |{opt}| are passed directly to the |axis| environment.</span></td>
+ </tr>
+ <tr>
+ <td id="L740" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="740"></td>
+ <td id="LC740" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{itemize}</span></td>
+ </tr>
+ <tr>
+ <td id="L741" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="741"></td>
+ <td id="LC741" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> The frequency limits are translated to the x-axis limits and the domain of the |axis| environment.</span></td>
+ </tr>
+ <tr>
+ <td id="L742" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="742"></td>
+ <td id="LC742" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L743" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="743"></td>
+ <td id="LC743" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \DescribeMacro{\addNyquistZPKPlot}</span></td>
+ </tr>
+ <tr>
+ <td id="L744" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="744"></td>
+ <td id="LC744" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> |\addNyquistZPKPlot|\oarg{plot-options}\\</span></td>
+ </tr>
+ <tr>
+ <td id="L745" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="745"></td>
+ <td id="LC745" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \hspace*{2em}\marg{z/\marg{zeros},p/\marg{poles},k/\marg{gain},d/\marg{delay}}</span></td>
+ </tr>
+ <tr>
+ <td id="L746" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="746"></td>
+ <td id="LC746" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L747" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="747"></td>
+ <td id="LC747" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \noindent Generates a twp parametric functions for the magnitude and the phase a transfer function in ZPK form. The generated magnitude and phase parametric functions are converted to real and imaginary part parametric functions and passed to the |\addplot| macro. This macro can be used inside any |axis| environment as long as a domain for the x-axis is supplied through either the |plot-options| interface or directly in the optional argument of the container |axis| environment. Use with the |NyquistPlot| environment supplied with this package is recommended. The mandatory argument is the same as |\BodeZPK|.</span></td>
+ </tr>
+ <tr>
+ <td id="L748" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="748"></td>
+ <td id="LC748" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L749" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="749"></td>
+ <td id="LC749" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \DescribeMacro{\addNyquistTFPlot}</span></td>
+ </tr>
+ <tr>
+ <td id="L750" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="750"></td>
+ <td id="LC750" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> |\addNyquistTFPlot|\oarg{plot-options}\\</span></td>
+ </tr>
+ <tr>
+ <td id="L751" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="751"></td>
+ <td id="LC751" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \hspace*{2em}\marg{num/\marg{coeffs},den/\marg{coeffs},d/\marg{delay}}</span></td>
+ </tr>
+ <tr>
+ <td id="L752" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="752"></td>
+ <td id="LC752" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L753" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="753"></td>
+ <td id="LC753" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \noindent Similar to |\addNyquistZPKPlot|, with a transfer function input in the TF form.</span></td>
+ </tr>
+ <tr>
+ <td id="L754" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="754"></td>
+ <td id="LC754" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L755" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="755"></td>
+ <td id="LC755" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \subsection{Nichols charts}</span></td>
+ </tr>
+ <tr>
+ <td id="L756" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="756"></td>
+ <td id="LC756" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \DescribeMacro{\NicholsZPK}</span></td>
+ </tr>
+ <tr>
+ <td id="L757" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="757"></td>
+ <td id="LC757" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> |\NicholsZPK| \oarg{plot/\marg{opt},axes/\marg{opt}}\\</span></td>
+ </tr>
+ <tr>
+ <td id="L758" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="758"></td>
+ <td id="LC758" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \hspace*{2em}\marg{z/\marg{zeros},p/\marg{poles},k/\marg{gain},d/\marg{delay}}\\</span></td>
+ </tr>
+ <tr>
+ <td id="L759" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="759"></td>
+ <td id="LC759" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \hspace*{2em}\marg{min-freq}\marg{max-freq}</span></td>
+ </tr>
+ <tr>
+ <td id="L760" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="760"></td>
+ <td id="LC760" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L761" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="761"></td>
+ <td id="LC761" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \noindent Nichols chart of a transfer function given in ZPK format. Same arguments as |\NyquistZPK|.</span></td>
+ </tr>
+ <tr>
+ <td id="L762" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="762"></td>
+ <td id="LC762" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L763" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="763"></td>
+ <td id="LC763" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \DescribeMacro{\NicholsTF}</span></td>
+ </tr>
+ <tr>
+ <td id="L764" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="764"></td>
+ <td id="LC764" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> |\NicholsTF| \oarg{plot/\marg{opt},axes/\marg{opt}}\\</span></td>
+ </tr>
+ <tr>
+ <td id="L765" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="765"></td>
+ <td id="LC765" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \hspace*{2em}\marg{num/\marg{coeffs},den/\marg{coeffs},d/\marg{delay}}\\</span></td>
+ </tr>
+ <tr>
+ <td id="L766" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="766"></td>
+ <td id="LC766" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \hspace*{2em}\marg{min-freq}\marg{max-freq}</span></td>
+ </tr>
+ <tr>
+ <td id="L767" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="767"></td>
+ <td id="LC767" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L768" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="768"></td>
+ <td id="LC768" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \noindent Nichols chart of a transfer function given in TF format. Same arguments as |\NyquistTF|. For example, the command\\</span></td>
+ </tr>
+ <tr>
+ <td id="L769" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="769"></td>
+ <td id="LC769" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> |\NicholsTF[plot/{green,thick,samples=2000}]|\\</span></td>
+ </tr>
+ <tr>
+ <td id="L770" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="770"></td>
+ <td id="LC770" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> | {num/{10,2,2.6,0},den/{1,1,100.25},d/0.01}|\\</span></td>
+ </tr>
+ <tr>
+ <td id="L771" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="771"></td>
+ <td id="LC771" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> | {0.001}{100}|\\</span></td>
+ </tr>
+ <tr>
+ <td id="L772" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="772"></td>
+ <td id="LC772" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> generates the Nichols chart in Figure \ref{simpleNicholsTF}.</span></td>
+ </tr>
+ <tr>
+ <td id="L773" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="773"></td>
+ <td id="LC773" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L774" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="774"></td>
+ <td id="LC774" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{figure}</span></td>
+ </tr>
+ <tr>
+ <td id="L775" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="775"></td>
+ <td id="LC775" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{center}</span></td>
+ </tr>
+ <tr>
+ <td id="L776" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="776"></td>
+ <td id="LC776" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \NicholsTF[plot/{green,thick,samples=2000}] {num/{10,2,2.6,0},den/{1,1,100.25},d/0.01} {0.001} {100}</span></td>
+ </tr>
+ <tr>
+ <td id="L777" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="777"></td>
+ <td id="LC777" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \cprotect\caption{\label{simpleNicholsTF}Output of the |\NyquistZPK| macro.}</span></td>
+ </tr>
+ <tr>
+ <td id="L778" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="778"></td>
+ <td id="LC778" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{center}</span></td>
+ </tr>
+ <tr>
+ <td id="L779" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="779"></td>
+ <td id="LC779" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{figure}</span></td>
+ </tr>
+ <tr>
+ <td id="L780" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="780"></td>
+ <td id="LC780" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L781" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="781"></td>
+ <td id="LC781" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L782" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="782"></td>
+ <td id="LC782" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \DescribeEnv{NicholsChart}</span></td>
+ </tr>
+ <tr>
+ <td id="L783" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="783"></td>
+ <td id="LC783" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> |\begin{NicholsChart}|\oarg{obj1/\marg{opt1},obj2/\marg{opt2},...}\\</span></td>
+ </tr>
+ <tr>
+ <td id="L784" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="784"></td>
+ <td id="LC784" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \hspace*{3em}\marg{min-frequency}\marg{max-frequency}\\</span></td>
+ </tr>
+ <tr>
+ <td id="L785" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="785"></td>
+ <td id="LC785" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \hspace*{2em}|\addNichols...|\\</span></td>
+ </tr>
+ <tr>
+ <td id="L786" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="786"></td>
+ <td id="LC786" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \hspace*{1.5em}|\end{NicholsChart}|\\</span></td>
+ </tr>
+ <tr>
+ <td id="L787" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="787"></td>
+ <td id="LC787" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> The |NicholsChart| environment works in conjunction with the parametric function generator macros |\addNicholsZPKChart| and |\addNicholsTFChart|. The optional argument is comprised of a comma separated list of tuples, either |obj/{opt}| or just |{opt}|. Each tuple passes options to different |pgfplots| macros that generate the axes and the plots according to:</span></td>
+ </tr>
+ <tr>
+ <td id="L788" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="788"></td>
+ <td id="LC788" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{itemize}</span></td>
+ </tr>
+ <tr>
+ <td id="L789" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="789"></td>
+ <td id="LC789" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \item Tuples of the form |obj/{opt}|:</span></td>
+ </tr>
+ <tr>
+ <td id="L790" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="790"></td>
+ <td id="LC790" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{itemize}</span></td>
+ </tr>
+ <tr>
+ <td id="L791" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="791"></td>
+ <td id="LC791" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \item |tikz/{opt}|: modify picture properties by adding options |{opt}| to the |tikzpicture| environment.</span></td>
+ </tr>
+ <tr>
+ <td id="L792" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="792"></td>
+ <td id="LC792" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \item |axes/{opt}|: modify axis properties by adding options |{opt}| to the |axis| environment.</span></td>
+ </tr>
+ <tr>
+ <td id="L793" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="793"></td>
+ <td id="LC793" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \item |commands/{opt}|: add any valid TikZ commands inside |axis| environment. The commands passed to |opt| need to be valid TikZ commands, separated by semicolons as usual.</span></td>
+ </tr>
+ <tr>
+ <td id="L794" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="794"></td>
+ <td id="LC794" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{itemize}</span></td>
+ </tr>
+ <tr>
+ <td id="L795" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="795"></td>
+ <td id="LC795" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \item Tuples of the form |{opt}| are passed directly to the |axis| environment.</span></td>
+ </tr>
+ <tr>
+ <td id="L796" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="796"></td>
+ <td id="LC796" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{itemize}</span></td>
+ </tr>
+ <tr>
+ <td id="L797" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="797"></td>
+ <td id="LC797" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> The frequency limits are translated to the x-axis limits and the domain of the |axis| environment.</span></td>
+ </tr>
+ <tr>
+ <td id="L798" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="798"></td>
+ <td id="LC798" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L799" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="799"></td>
+ <td id="LC799" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \DescribeMacro{\addNicholsZPKChart}</span></td>
+ </tr>
+ <tr>
+ <td id="L800" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="800"></td>
+ <td id="LC800" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> |\addNicholsZPKChart|\oarg{plot-options}\\</span></td>
+ </tr>
+ <tr>
+ <td id="L801" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="801"></td>
+ <td id="LC801" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \hspace*{2em}\marg{z/\marg{zeros},p/\marg{poles},k/\marg{gain},d/\marg{delay}}</span></td>
+ </tr>
+ <tr>
+ <td id="L802" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="802"></td>
+ <td id="LC802" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L803" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="803"></td>
+ <td id="LC803" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \noindent Generates a twp parametric functions for the magnitude and the phase a transfer function in ZPK form. The generated magnitude and phase parametric functions are passed to the |\addplot| macro. This macro can be used inside any |axis| environment as long as a domain for the x-axis is supplied through either the |plot-options| interface or directly in the optional argument of the container |axis| environment. Use with the |NicholsChart| environment supplied with this package is recommended. The mandatory argument is the same as |\BodeZPK|.</span></td>
+ </tr>
+ <tr>
+ <td id="L804" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="804"></td>
+ <td id="LC804" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L805" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="805"></td>
+ <td id="LC805" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \DescribeMacro{\addNicholsTFChart}</span></td>
+ </tr>
+ <tr>
+ <td id="L806" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="806"></td>
+ <td id="LC806" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> |\addNicholsTFChart|\oarg{plot-options}\\</span></td>
+ </tr>
+ <tr>
+ <td id="L807" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="807"></td>
+ <td id="LC807" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \hspace*{2em}\marg{num/\marg{coeffs},den/\marg{coeffs},d/\marg{delay}}</span></td>
+ </tr>
+ <tr>
+ <td id="L808" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="808"></td>
+ <td id="LC808" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L809" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="809"></td>
+ <td id="LC809" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \noindent Similar to |\addNicholsZPKChart|, with a transfer function input in the TF form.</span></td>
+ </tr>
+ <tr>
+ <td id="L810" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="810"></td>
+ <td id="LC810" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L811" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="811"></td>
+ <td id="LC811" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \StopEventually{\PrintIndex}</span></td>
+ </tr>
+ <tr>
+ <td id="L812" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="812"></td>
+ <td id="LC812" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \clearpage</span></td>
+ </tr>
+ <tr>
+ <td id="L813" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="813"></td>
+ <td id="LC813" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \section{Implementation}</span></td>
+ </tr>
+ <tr>
+ <td id="L814" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="814"></td>
+ <td id="LC814" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \subsection{Initialization}</span></td>
+ </tr>
+ <tr>
+ <td id="L815" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="815"></td>
+ <td id="LC815" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\n@mod}</span></td>
+ </tr>
+ <tr>
+ <td id="L816" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="816"></td>
+ <td id="LC816" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\n@pow}</span></td>
+ </tr>
+ <tr>
+ <td id="L817" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="817"></td>
+ <td id="LC817" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{gnuplot@id}</span></td>
+ </tr>
+ <tr>
+ <td id="L818" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="818"></td>
+ <td id="LC818" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{gnuplot@prefix}</span></td>
+ </tr>
+ <tr>
+ <td id="L819" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="819"></td>
+ <td id="LC819" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \changes{v1.0.3}{2021/11/03}{Added jobname to gnuplot prefix}</span></td>
+ </tr>
+ <tr>
+ <td id="L820" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="820"></td>
+ <td id="LC820" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \changes{v1.0.8}{2022/07/06}{Fixed issue \#6}</span></td>
+ </tr>
+ <tr>
+ <td id="L821" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="821"></td>
+ <td id="LC821" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> This code is needed to support both |pgfplots| and |gnuplot| simultaneously. New macros are defined for the |pow| and |mod| functions to address differences between the two math engines. We start by processing the class options. </span></td>
+ </tr>
+ <tr>
+ <td id="L822" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="822"></td>
+ <td id="LC822" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L823" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="823"></td>
+ <td id="LC823" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\newif</span><span class="pl-k">\if</span>@pgfarg<span class="pl-c1">\@pgfargfalse</span></td>
+ </tr>
+ <tr>
+ <td id="L824" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="824"></td>
+ <td id="LC824" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\DeclareOption</span>{pgf}{</td>
+ </tr>
+ <tr>
+ <td id="L825" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="825"></td>
+ <td id="LC825" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\@pgfargtrue</span></td>
+ </tr>
+ <tr>
+ <td id="L826" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="826"></td>
+ <td id="LC826" class="blob-code blob-code-inner js-file-line">}</td>
+ </tr>
+ <tr>
+ <td id="L827" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="827"></td>
+ <td id="LC827" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\newif</span><span class="pl-k">\if</span>@declutterarg<span class="pl-c1">\@declutterargfalse</span></td>
+ </tr>
+ <tr>
+ <td id="L828" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="828"></td>
+ <td id="LC828" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\DeclareOption</span>{declutter}{</td>
+ </tr>
+ <tr>
+ <td id="L829" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="829"></td>
+ <td id="LC829" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\@declutterargtrue</span></td>
+ </tr>
+ <tr>
+ <td id="L830" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="830"></td>
+ <td id="LC830" class="blob-code blob-code-inner js-file-line">}</td>
+ </tr>
+ <tr>
+ <td id="L831" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="831"></td>
+ <td id="LC831" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\newif</span><span class="pl-k">\if</span>@radarg<span class="pl-c1">\@radargfalse</span></td>
+ </tr>
+ <tr>
+ <td id="L832" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="832"></td>
+ <td id="LC832" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\DeclareOption</span>{rad}{</td>
+ </tr>
+ <tr>
+ <td id="L833" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="833"></td>
+ <td id="LC833" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\@radargtrue</span></td>
+ </tr>
+ <tr>
+ <td id="L834" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="834"></td>
+ <td id="LC834" class="blob-code blob-code-inner js-file-line">}</td>
+ </tr>
+ <tr>
+ <td id="L835" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="835"></td>
+ <td id="LC835" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\newif</span><span class="pl-k">\if</span>@hzarg<span class="pl-c1">\@hzargfalse</span></td>
+ </tr>
+ <tr>
+ <td id="L836" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="836"></td>
+ <td id="LC836" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\DeclareOption</span>{Hz}{</td>
+ </tr>
+ <tr>
+ <td id="L837" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="837"></td>
+ <td id="LC837" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\@hzargtrue</span></td>
+ </tr>
+ <tr>
+ <td id="L838" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="838"></td>
+ <td id="LC838" class="blob-code blob-code-inner js-file-line">}</td>
+ </tr>
+ <tr>
+ <td id="L839" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="839"></td>
+ <td id="LC839" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\ProcessOptions\relax</span></td>
+ </tr>
+ <tr>
+ <td id="L840" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="840"></td>
+ <td id="LC840" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L841" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="841"></td>
+ <td id="LC841" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> Then, we define two new macros to unify |pgfplots| and |gnuplot|.</span></td>
+ </tr>
+ <tr>
+ <td id="L842" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="842"></td>
+ <td id="LC842" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L843" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="843"></td>
+ <td id="LC843" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>{<span class="pl-c1">\n@mod</span>}[2]{(#1)-(floor((#1)/(#2))*(#2))}</td>
+ </tr>
+ <tr>
+ <td id="L844" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="844"></td>
+ <td id="LC844" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\if</span>@pgfarg</td>
+ </tr>
+ <tr>
+ <td id="L845" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="845"></td>
+ <td id="LC845" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\newcommand</span>{<span class="pl-c1">\n@pow</span>}[2]{(#1)^(#2)}</td>
+ </tr>
+ <tr>
+ <td id="L846" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="846"></td>
+ <td id="LC846" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\pgfplotsset</span>{</td>
+ </tr>
+ <tr>
+ <td id="L847" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="847"></td>
+ <td id="LC847" class="blob-code blob-code-inner js-file-line"> trig format plots=rad</td>
+ </tr>
+ <tr>
+ <td id="L848" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="848"></td>
+ <td id="LC848" class="blob-code blob-code-inner js-file-line"> }</td>
+ </tr>
+ <tr>
+ <td id="L849" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="849"></td>
+ <td id="LC849" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\else</span></td>
+ </tr>
+ <tr>
+ <td id="L850" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="850"></td>
+ <td id="LC850" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\newcommand</span>{<span class="pl-c1">\n@pow</span>}[2]{(#1)**(#2)}</td>
+ </tr>
+ <tr>
+ <td id="L851" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="851"></td>
+ <td id="LC851" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L852" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="852"></td>
+ <td id="LC852" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> Then, we create a counter so that a new data table is generated and for each new plot. If the plot macros have not changed, the tables, once generated, can be reused by |gnuplot|, which reduces compilation time. The |declutter| option is used to enable the |gnuplot| directory to declutter the working directory.</span></td>
+ </tr>
+ <tr>
+ <td id="L853" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="853"></td>
+ <td id="LC853" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L854" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="854"></td>
+ <td id="LC854" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\newcounter</span>{gnuplot@id}</td>
+ </tr>
+ <tr>
+ <td id="L855" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="855"></td>
+ <td id="LC855" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\setcounter</span>{gnuplot@id}{0}</td>
+ </tr>
+ <tr>
+ <td id="L856" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="856"></td>
+ <td id="LC856" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\if</span>@declutterarg</td>
+ </tr>
+ <tr>
+ <td id="L857" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="857"></td>
+ <td id="LC857" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\bodeplot@prefix</span>{gnuplot/<span class="pl-c1">\jobname</span>}</td>
+ </tr>
+ <tr>
+ <td id="L858" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="858"></td>
+ <td id="LC858" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td>
+ </tr>
+ <tr>
+ <td id="L859" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="859"></td>
+ <td id="LC859" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\bodeplot@prefix</span>{<span class="pl-c1">\jobname</span>}</td>
+ </tr>
+ <tr>
+ <td id="L860" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="860"></td>
+ <td id="LC860" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td>
+ </tr>
+ <tr>
+ <td id="L861" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="861"></td>
+ <td id="LC861" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\tikzset</span>{</td>
+ </tr>
+ <tr>
+ <td id="L862" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="862"></td>
+ <td id="LC862" class="blob-code blob-code-inner js-file-line"> gnuplot@prefix/.style={</td>
+ </tr>
+ <tr>
+ <td id="L863" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="863"></td>
+ <td id="LC863" class="blob-code blob-code-inner js-file-line"> id=<span class="pl-c1">\arabic</span>{gnuplot@id},</td>
+ </tr>
+ <tr>
+ <td id="L864" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="864"></td>
+ <td id="LC864" class="blob-code blob-code-inner js-file-line"> prefix=<span class="pl-c1">\bodeplot@prefix</span></td>
+ </tr>
+ <tr>
+ <td id="L865" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="865"></td>
+ <td id="LC865" class="blob-code blob-code-inner js-file-line"> }</td>
+ </tr>
+ <tr>
+ <td id="L866" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="866"></td>
+ <td id="LC866" class="blob-code blob-code-inner js-file-line"> }</td>
+ </tr>
+ <tr>
+ <td id="L867" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="867"></td>
+ <td id="LC867" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L868" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="868"></td>
+ <td id="LC868" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> If the operating system is not Windows, and if the |declutter| option is not passed, we create the |gnuplot| folder if it does not already exist. \changes{v1.0.2}{2021/11/01}{Fixed issue \#1}</span></td>
+ </tr>
+ <tr>
+ <td id="L869" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="869"></td>
+ <td id="LC869" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L870" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="870"></td>
+ <td id="LC870" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\ifwindows</span><span class="pl-k">\else</span></td>
+ </tr>
+ <tr>
+ <td id="L871" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="871"></td>
+ <td id="LC871" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\if</span>@declutterarg</td>
+ </tr>
+ <tr>
+ <td id="L872" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="872"></td>
+ <td id="LC872" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\immediate\write</span>18{mkdir -p gnuplot}</td>
+ </tr>
+ <tr>
+ <td id="L873" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="873"></td>
+ <td id="LC873" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td>
+ </tr>
+ <tr>
+ <td id="L874" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="874"></td>
+ <td id="LC874" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td>
+ </tr>
+ <tr>
+ <td id="L875" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="875"></td>
+ <td id="LC875" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\fi</span></td>
+ </tr>
+ <tr>
+ <td id="L876" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="876"></td>
+ <td id="LC876" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L877" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="877"></td>
+ <td id="LC877" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L878" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="878"></td>
+ <td id="LC878" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L879" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="879"></td>
+ <td id="LC879" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L880" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="880"></td>
+ <td id="LC880" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L881" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="881"></td>
+ <td id="LC881" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{bode@style}</span></td>
+ </tr>
+ <tr>
+ <td id="L882" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="882"></td>
+ <td id="LC882" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> Default axis properties for all plot macros are collected in this |pgf| style.</span></td>
+ </tr>
+ <tr>
+ <td id="L883" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="883"></td>
+ <td id="LC883" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L884" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="884"></td>
+ <td id="LC884" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\pgfplotsset</span>{</td>
+ </tr>
+ <tr>
+ <td id="L885" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="885"></td>
+ <td id="LC885" class="blob-code blob-code-inner js-file-line"> bode@style/.style = {</td>
+ </tr>
+ <tr>
+ <td id="L886" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="886"></td>
+ <td id="LC886" class="blob-code blob-code-inner js-file-line"> label style={font=<span class="pl-c1">\footnotesize</span>},</td>
+ </tr>
+ <tr>
+ <td id="L887" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="887"></td>
+ <td id="LC887" class="blob-code blob-code-inner js-file-line"> tick label style={font=<span class="pl-c1">\footnotesize</span>},</td>
+ </tr>
+ <tr>
+ <td id="L888" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="888"></td>
+ <td id="LC888" class="blob-code blob-code-inner js-file-line"> grid=both,</td>
+ </tr>
+ <tr>
+ <td id="L889" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="889"></td>
+ <td id="LC889" class="blob-code blob-code-inner js-file-line"> major grid style={color=gray!80},</td>
+ </tr>
+ <tr>
+ <td id="L890" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="890"></td>
+ <td id="LC890" class="blob-code blob-code-inner js-file-line"> minor grid style={color=gray!20},</td>
+ </tr>
+ <tr>
+ <td id="L891" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="891"></td>
+ <td id="LC891" class="blob-code blob-code-inner js-file-line"> x label style={at={(ticklabel cs:0.5)},anchor=near ticklabel},</td>
+ </tr>
+ <tr>
+ <td id="L892" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="892"></td>
+ <td id="LC892" class="blob-code blob-code-inner js-file-line"> y label style={at={(ticklabel cs:0.5)},anchor=near ticklabel},</td>
+ </tr>
+ <tr>
+ <td id="L893" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="893"></td>
+ <td id="LC893" class="blob-code blob-code-inner js-file-line"> scale only axis,</td>
+ </tr>
+ <tr>
+ <td id="L894" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="894"></td>
+ <td id="LC894" class="blob-code blob-code-inner js-file-line"> samples=200,</td>
+ </tr>
+ <tr>
+ <td id="L895" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="895"></td>
+ <td id="LC895" class="blob-code blob-code-inner js-file-line"> width=5cm,</td>
+ </tr>
+ <tr>
+ <td id="L896" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="896"></td>
+ <td id="LC896" class="blob-code blob-code-inner js-file-line"> log basis x=10</td>
+ </tr>
+ <tr>
+ <td id="L897" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="897"></td>
+ <td id="LC897" class="blob-code blob-code-inner js-file-line"> }</td>
+ </tr>
+ <tr>
+ <td id="L898" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="898"></td>
+ <td id="LC898" class="blob-code blob-code-inner js-file-line">}</td>
+ </tr>
+ <tr>
+ <td id="L899" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="899"></td>
+ <td id="LC899" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L900" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="900"></td>
+ <td id="LC900" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L901" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="901"></td>
+ <td id="LC901" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{freq@filter}</span></td>
+ </tr>
+ <tr>
+ <td id="L902" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="902"></td>
+ <td id="LC902" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{freq@label}</span></td>
+ </tr>
+ <tr>
+ <td id="L903" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="903"></td>
+ <td id="LC903" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{freq@scale}</span></td>
+ </tr>
+ <tr>
+ <td id="L904" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="904"></td>
+ <td id="LC904" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{ph@scale}</span></td>
+ </tr>
+ <tr>
+ <td id="L905" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="905"></td>
+ <td id="LC905" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{ph@x@label}</span></td>
+ </tr>
+ <tr>
+ <td id="L906" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="906"></td>
+ <td id="LC906" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{ph@y@label}</span></td>
+ </tr>
+ <tr>
+ <td id="L907" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="907"></td>
+ <td id="LC907" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> These macros handle the |Hz| and |rad| class options and two new |pgf| keys named |frequency unit| and |phase unit| for conversion of frequency and phase units, respectively. \changes{v1.1.1}{2022/07/31}{New macros to enable `Hz&#39; and `rad&#39; units for frequency and phase, respectively}</span></td>
+ </tr>
+ <tr>
+ <td id="L908" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="908"></td>
+ <td id="LC908" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L909" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="909"></td>
+ <td id="LC909" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\pgfplotsset</span>{freq@filter/.style = {}}</td>
+ </tr>
+ <tr>
+ <td id="L910" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="910"></td>
+ <td id="LC910" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\def\freq@scale</span>{1}</td>
+ </tr>
+ <tr>
+ <td id="L911" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="911"></td>
+ <td id="LC911" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\pgfplotsset</span>{freq@label/.style = {xlabel = {Frequency (rad/s)}}}</td>
+ </tr>
+ <tr>
+ <td id="L912" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="912"></td>
+ <td id="LC912" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\pgfplotsset</span>{ph@x@label/.style = {xlabel={Phase (deg)}}}</td>
+ </tr>
+ <tr>
+ <td id="L913" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="913"></td>
+ <td id="LC913" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\pgfplotsset</span>{ph@y@label/.style = {ylabel={Phase (deg)}}}</td>
+ </tr>
+ <tr>
+ <td id="L914" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="914"></td>
+ <td id="LC914" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\def\ph@scale</span>{180/pi}</td>
+ </tr>
+ <tr>
+ <td id="L915" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="915"></td>
+ <td id="LC915" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\if</span>@radarg</td>
+ </tr>
+ <tr>
+ <td id="L916" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="916"></td>
+ <td id="LC916" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\pgfplotsset</span>{ph@y@label/.style = {ylabel={Phase (rad)}}}</td>
+ </tr>
+ <tr>
+ <td id="L917" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="917"></td>
+ <td id="LC917" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\pgfplotsset</span>{ph@x@label/.style = {xlabel={Phase (rad)}}}</td>
+ </tr>
+ <tr>
+ <td id="L918" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="918"></td>
+ <td id="LC918" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\def\ph@scale</span>{1}</td>
+ </tr>
+ <tr>
+ <td id="L919" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="919"></td>
+ <td id="LC919" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\fi</span></td>
+ </tr>
+ <tr>
+ <td id="L920" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="920"></td>
+ <td id="LC920" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\if</span>@hzarg</td>
+ </tr>
+ <tr>
+ <td id="L921" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="921"></td>
+ <td id="LC921" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\def\freq@scale</span>{2*pi}</td>
+ </tr>
+ <tr>
+ <td id="L922" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="922"></td>
+ <td id="LC922" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\pgfplotsset</span>{freq@label/.style = {xlabel = {Frequency (Hz)}}}</td>
+ </tr>
+ <tr>
+ <td id="L923" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="923"></td>
+ <td id="LC923" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\if</span>@pgfarg</td>
+ </tr>
+ <tr>
+ <td id="L924" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="924"></td>
+ <td id="LC924" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\pgfplotsset</span>{freq@filter/.style = {x filter/.expression={x-log10(2*pi)}}}</td>
+ </tr>
+ <tr>
+ <td id="L925" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="925"></td>
+ <td id="LC925" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td>
+ </tr>
+ <tr>
+ <td id="L926" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="926"></td>
+ <td id="LC926" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\fi</span></td>
+ </tr>
+ <tr>
+ <td id="L927" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="927"></td>
+ <td id="LC927" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\tikzset</span>{</td>
+ </tr>
+ <tr>
+ <td id="L928" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="928"></td>
+ <td id="LC928" class="blob-code blob-code-inner js-file-line"> phase unit/.initial={deg},</td>
+ </tr>
+ <tr>
+ <td id="L929" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="929"></td>
+ <td id="LC929" class="blob-code blob-code-inner js-file-line"> phase unit/.default={deg},</td>
+ </tr>
+ <tr>
+ <td id="L930" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="930"></td>
+ <td id="LC930" class="blob-code blob-code-inner js-file-line"> phase unit/.is choice,</td>
+ </tr>
+ <tr>
+ <td id="L931" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="931"></td>
+ <td id="LC931" class="blob-code blob-code-inner js-file-line"> phase unit/deg/.code={</td>
+ </tr>
+ <tr>
+ <td id="L932" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="932"></td>
+ <td id="LC932" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\renewcommand</span>{<span class="pl-c1">\ph@scale</span>}{180/pi}</td>
+ </tr>
+ <tr>
+ <td id="L933" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="933"></td>
+ <td id="LC933" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\pgfplotsset</span>{ph@x@label/.style = {xlabel={Phase (deg)}}}</td>
+ </tr>
+ <tr>
+ <td id="L934" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="934"></td>
+ <td id="LC934" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\pgfplotsset</span>{ph@y@label/.style = {ylabel={Phase (deg)}}}</td>
+ </tr>
+ <tr>
+ <td id="L935" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="935"></td>
+ <td id="LC935" class="blob-code blob-code-inner js-file-line"> },</td>
+ </tr>
+ <tr>
+ <td id="L936" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="936"></td>
+ <td id="LC936" class="blob-code blob-code-inner js-file-line"> phase unit/rad/.code={</td>
+ </tr>
+ <tr>
+ <td id="L937" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="937"></td>
+ <td id="LC937" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\renewcommand</span>{<span class="pl-c1">\ph@scale</span>}{1}</td>
+ </tr>
+ <tr>
+ <td id="L938" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="938"></td>
+ <td id="LC938" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\pgfplotsset</span>{ph@y@label/.style = {ylabel={Phase (rad)}}}</td>
+ </tr>
+ <tr>
+ <td id="L939" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="939"></td>
+ <td id="LC939" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\pgfplotsset</span>{ph@x@label/.style = {xlabel={Phase (rad)}}}</td>
+ </tr>
+ <tr>
+ <td id="L940" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="940"></td>
+ <td id="LC940" class="blob-code blob-code-inner js-file-line"> },</td>
+ </tr>
+ <tr>
+ <td id="L941" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="941"></td>
+ <td id="LC941" class="blob-code blob-code-inner js-file-line"> frequency unit/.initial={rad},</td>
+ </tr>
+ <tr>
+ <td id="L942" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="942"></td>
+ <td id="LC942" class="blob-code blob-code-inner js-file-line"> frequency unit/.default={rad},</td>
+ </tr>
+ <tr>
+ <td id="L943" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="943"></td>
+ <td id="LC943" class="blob-code blob-code-inner js-file-line"> frequency unit/.is choice,</td>
+ </tr>
+ <tr>
+ <td id="L944" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="944"></td>
+ <td id="LC944" class="blob-code blob-code-inner js-file-line"> frequency unit/Hz/.code={</td>
+ </tr>
+ <tr>
+ <td id="L945" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="945"></td>
+ <td id="LC945" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\renewcommand</span>{<span class="pl-c1">\freq@scale</span>}{2*pi}</td>
+ </tr>
+ <tr>
+ <td id="L946" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="946"></td>
+ <td id="LC946" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\pgfplotsset</span>{freq@label/.style = {xlabel = {Frequency (Hz)}}}</td>
+ </tr>
+ <tr>
+ <td id="L947" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="947"></td>
+ <td id="LC947" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\if</span>@pgfarg</td>
+ </tr>
+ <tr>
+ <td id="L948" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="948"></td>
+ <td id="LC948" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\pgfplotsset</span>{freq@filter/.style = {x filter/.expression={x-log10(2*pi)}}}</td>
+ </tr>
+ <tr>
+ <td id="L949" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="949"></td>
+ <td id="LC949" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td>
+ </tr>
+ <tr>
+ <td id="L950" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="950"></td>
+ <td id="LC950" class="blob-code blob-code-inner js-file-line"> },</td>
+ </tr>
+ <tr>
+ <td id="L951" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="951"></td>
+ <td id="LC951" class="blob-code blob-code-inner js-file-line"> frequency unit/rad/.code={</td>
+ </tr>
+ <tr>
+ <td id="L952" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="952"></td>
+ <td id="LC952" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\renewcommand</span>{<span class="pl-c1">\freq@scale</span>}{1}</td>
+ </tr>
+ <tr>
+ <td id="L953" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="953"></td>
+ <td id="LC953" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\pgfplotsset</span>{freq@label/.style = {xlabel = {Frequency (rad/s)}}}</td>
+ </tr>
+ <tr>
+ <td id="L954" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="954"></td>
+ <td id="LC954" class="blob-code blob-code-inner js-file-line"> }</td>
+ </tr>
+ <tr>
+ <td id="L955" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="955"></td>
+ <td id="LC955" class="blob-code blob-code-inner js-file-line">}</td>
+ </tr>
+ <tr>
+ <td id="L956" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="956"></td>
+ <td id="LC956" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L957" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="957"></td>
+ <td id="LC957" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L958" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="958"></td>
+ <td id="LC958" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L959" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="959"></td>
+ <td id="LC959" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L960" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="960"></td>
+ <td id="LC960" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L961" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="961"></td>
+ <td id="LC961" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L962" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="962"></td>
+ <td id="LC962" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L963" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="963"></td>
+ <td id="LC963" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{get@interval@start}</span></td>
+ </tr>
+ <tr>
+ <td id="L964" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="964"></td>
+ <td id="LC964" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{get@interval@end}</span></td>
+ </tr>
+ <tr>
+ <td id="L965" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="965"></td>
+ <td id="LC965" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> Internal macros to extract start and end frequency limits from domain specifications.\changes{v1.1.1}{2022/07/31}{New macros to enable `Hz&#39; and `rad&#39; units for frequency and phase, respectively}</span></td>
+ </tr>
+ <tr>
+ <td id="L966" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="966"></td>
+ <td id="LC966" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L967" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="967"></td>
+ <td id="LC967" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\def\get@interval@start</span>#1:#2<span class="pl-c1">\@nil</span>{#1}</td>
+ </tr>
+ <tr>
+ <td id="L968" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="968"></td>
+ <td id="LC968" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\def\get@interval@end</span>#1:#2<span class="pl-c1">\@nil</span>{#2}</td>
+ </tr>
+ <tr>
+ <td id="L969" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="969"></td>
+ <td id="LC969" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L970" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="970"></td>
+ <td id="LC970" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L971" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="971"></td>
+ <td id="LC971" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L972" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="972"></td>
+ <td id="LC972" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \subsection{Parametric function generators for poles, zeros, gains, and delays.}</span></td>
+ </tr>
+ <tr>
+ <td id="L973" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="973"></td>
+ <td id="LC973" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> All calculations are carried out assuming that frequeny inputs are in |rad/s|. Magnitude outputs are in |dB| and phase outputs are in degrees or radians, depending on the value of |\ph@scale|.</span></td>
+ </tr>
+ <tr>
+ <td id="L974" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="974"></td>
+ <td id="LC974" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\MagK}</span></td>
+ </tr>
+ <tr>
+ <td id="L975" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="975"></td>
+ <td id="LC975" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\MagKAsymp}</span></td>
+ </tr>
+ <tr>
+ <td id="L976" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="976"></td>
+ <td id="LC976" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\MagKLin}</span></td>
+ </tr>
+ <tr>
+ <td id="L977" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="977"></td>
+ <td id="LC977" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\PhK}</span></td>
+ </tr>
+ <tr>
+ <td id="L978" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="978"></td>
+ <td id="LC978" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\PhKAsymp}</span></td>
+ </tr>
+ <tr>
+ <td id="L979" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="979"></td>
+ <td id="LC979" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\PhKLin}</span></td>
+ </tr>
+ <tr>
+ <td id="L980" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="980"></td>
+ <td id="LC980" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> True, linear, and asymptotic magnitude and phase parametric functions for a pure gain $G(s)=k+0\mathrm{i}$. The macros take two arguments corresponding to real and imaginary part of the gain to facilitate code reuse between delays, gains, poles, and zeros, but only real gains are supported. The second argument, if supplied, is ignored.</span></td>
+ </tr>
+ <tr>
+ <td id="L981" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="981"></td>
+ <td id="LC981" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L982" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="982"></td>
+ <td id="LC982" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\MagK</span>}[2]{(20*log10(abs(#1)))}</td>
+ </tr>
+ <tr>
+ <td id="L983" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="983"></td>
+ <td id="LC983" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\MagKAsymp</span>}{<span class="pl-c1">\MagK</span>}</td>
+ </tr>
+ <tr>
+ <td id="L984" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="984"></td>
+ <td id="LC984" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\MagKLin</span>}{<span class="pl-c1">\MagK</span>}</td>
+ </tr>
+ <tr>
+ <td id="L985" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="985"></td>
+ <td id="LC985" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\PhK</span>}[2]{((#1&lt;0?-pi:0)*<span class="pl-c1">\ph@scale</span>)}</td>
+ </tr>
+ <tr>
+ <td id="L986" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="986"></td>
+ <td id="LC986" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\PhKAsymp</span>}{<span class="pl-c1">\PhK</span>}</td>
+ </tr>
+ <tr>
+ <td id="L987" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="987"></td>
+ <td id="LC987" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\PhKLin</span>}{<span class="pl-c1">\PhK</span>}</td>
+ </tr>
+ <tr>
+ <td id="L988" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="988"></td>
+ <td id="LC988" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L989" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="989"></td>
+ <td id="LC989" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L990" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="990"></td>
+ <td id="LC990" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L991" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="991"></td>
+ <td id="LC991" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L992" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="992"></td>
+ <td id="LC992" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L993" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="993"></td>
+ <td id="LC993" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L994" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="994"></td>
+ <td id="LC994" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L995" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="995"></td>
+ <td id="LC995" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\PhKAsymp}</span></td>
+ </tr>
+ <tr>
+ <td id="L996" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="996"></td>
+ <td id="LC996" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\PhKLin}</span></td>
+ </tr>
+ <tr>
+ <td id="L997" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="997"></td>
+ <td id="LC997" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> True magnitude and phase parametric functions for a pure delay $G(s)=e^{-Ts}$. The macros take two arguments corresponding to real and imaginary part of the gain to facilitate code reuse between delays, gains, poles, and zeros, but only real gains are supported. The second argument, if supplied, is ignored.</span></td>
+ </tr>
+ <tr>
+ <td id="L998" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="998"></td>
+ <td id="LC998" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L999" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="999"></td>
+ <td id="LC999" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\MagDel</span>}[2]{0}</td>
+ </tr>
+ <tr>
+ <td id="L1000" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1000"></td>
+ <td id="LC1000" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\PhDel</span>}[2]{(-#1*t*<span class="pl-c1">\ph@scale</span>)}</td>
+ </tr>
+ <tr>
+ <td id="L1001" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1001"></td>
+ <td id="LC1001" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1002" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1002"></td>
+ <td id="LC1002" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L1003" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1003"></td>
+ <td id="LC1003" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L1004" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1004"></td>
+ <td id="LC1004" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\MagPole}</span></td>
+ </tr>
+ <tr>
+ <td id="L1005" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1005"></td>
+ <td id="LC1005" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\MagPoleAsymp}</span></td>
+ </tr>
+ <tr>
+ <td id="L1006" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1006"></td>
+ <td id="LC1006" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\MagPoleLin}</span></td>
+ </tr>
+ <tr>
+ <td id="L1007" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1007"></td>
+ <td id="LC1007" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\PhPole}</span></td>
+ </tr>
+ <tr>
+ <td id="L1008" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1008"></td>
+ <td id="LC1008" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\PhPoleAsymp}</span></td>
+ </tr>
+ <tr>
+ <td id="L1009" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1009"></td>
+ <td id="LC1009" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\PhPoleLin}</span></td>
+ </tr>
+ <tr>
+ <td id="L1010" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1010"></td>
+ <td id="LC1010" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> These macros are the building blocks for most of the plotting functions provided by this package. We start with Parametric function for the true magnitude of a complex pole.</span></td>
+ </tr>
+ <tr>
+ <td id="L1011" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1011"></td>
+ <td id="LC1011" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1012" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1012"></td>
+ <td id="LC1012" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\MagPole</span>}[2]</td>
+ </tr>
+ <tr>
+ <td id="L1013" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1013"></td>
+ <td id="LC1013" class="blob-code blob-code-inner js-file-line"> {(-20*log10(sqrt(<span class="pl-c1">\n@pow</span>{#1}{2} + <span class="pl-c1">\n@pow</span>{t - (#2)}{2})))}</td>
+ </tr>
+ <tr>
+ <td id="L1014" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1014"></td>
+ <td id="LC1014" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1015" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1015"></td>
+ <td id="LC1015" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> Parametric function for linear approximation of the magnitude of a complex pole.</span></td>
+ </tr>
+ <tr>
+ <td id="L1016" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1016"></td>
+ <td id="LC1016" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1017" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1017"></td>
+ <td id="LC1017" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\MagPoleLin</span>}[2]{(t &lt; sqrt(<span class="pl-c1">\n@pow</span>{#1}{2} + <span class="pl-c1">\n@pow</span>{#2}{2}) ?</td>
+ </tr>
+ <tr>
+ <td id="L1018" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1018"></td>
+ <td id="LC1018" class="blob-code blob-code-inner js-file-line"> -20*log10(sqrt(<span class="pl-c1">\n@pow</span>{#1}{2} + <span class="pl-c1">\n@pow</span>{#2}{2})) :</td>
+ </tr>
+ <tr>
+ <td id="L1019" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1019"></td>
+ <td id="LC1019" class="blob-code blob-code-inner js-file-line"> -20*log10(t)</td>
+ </tr>
+ <tr>
+ <td id="L1020" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1020"></td>
+ <td id="LC1020" class="blob-code blob-code-inner js-file-line"> )}</td>
+ </tr>
+ <tr>
+ <td id="L1021" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1021"></td>
+ <td id="LC1021" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1022" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1022"></td>
+ <td id="LC1022" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> Parametric function for asymptotic approximation of the magnitude of a complex pole, same as linear approximation.</span></td>
+ </tr>
+ <tr>
+ <td id="L1023" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1023"></td>
+ <td id="LC1023" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1024" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1024"></td>
+ <td id="LC1024" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\MagPoleAsymp</span>}{<span class="pl-c1">\MagPoleLin</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1025" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1025"></td>
+ <td id="LC1025" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1026" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1026"></td>
+ <td id="LC1026" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> Parametric function for the true phase of a complex pole.</span></td>
+ </tr>
+ <tr>
+ <td id="L1027" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1027"></td>
+ <td id="LC1027" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1028" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1028"></td>
+ <td id="LC1028" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\PhPole</span>}[2]{((#1 &gt; 0 ? (#2 &gt; 0 ?</td>
+ </tr>
+ <tr>
+ <td id="L1029" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1029"></td>
+ <td id="LC1029" class="blob-code blob-code-inner js-file-line"> (<span class="pl-c1">\n@mod</span>{-atan2((t - (#2)),-(#1))}{2*pi}) :</td>
+ </tr>
+ <tr>
+ <td id="L1030" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1030"></td>
+ <td id="LC1030" class="blob-code blob-code-inner js-file-line"> (-atan2((t - (#2)),-(#1)))) :</td>
+ </tr>
+ <tr>
+ <td id="L1031" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1031"></td>
+ <td id="LC1031" class="blob-code blob-code-inner js-file-line"> (-atan2((t - (#2)),-(#1))))*<span class="pl-c1">\ph@scale</span>)}</td>
+ </tr>
+ <tr>
+ <td id="L1032" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1032"></td>
+ <td id="LC1032" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1033" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1033"></td>
+ <td id="LC1033" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> Parametric function for linear approximation of the phase of a complex pole.</span></td>
+ </tr>
+ <tr>
+ <td id="L1034" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1034"></td>
+ <td id="LC1034" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1035" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1035"></td>
+ <td id="LC1035" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\PhPoleLin</span>}[2]{</td>
+ </tr>
+ <tr>
+ <td id="L1036" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1036"></td>
+ <td id="LC1036" class="blob-code blob-code-inner js-file-line"> ((abs(#1)+abs(#2) == 0 ? -pi/2 :</td>
+ </tr>
+ <tr>
+ <td id="L1037" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1037"></td>
+ <td id="LC1037" class="blob-code blob-code-inner js-file-line"> (t &lt; (sqrt(<span class="pl-c1">\n@pow</span>{#1}{2} + <span class="pl-c1">\n@pow</span>{#2}{2}) /</td>
+ </tr>
+ <tr>
+ <td id="L1038" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1038"></td>
+ <td id="LC1038" class="blob-code blob-code-inner js-file-line"> (<span class="pl-c1">\n@pow</span>{10}{sqrt(<span class="pl-c1">\n@pow</span>{#1}{2}/(<span class="pl-c1">\n@pow</span>{#1}{2} + <span class="pl-c1">\n@pow</span>{#2}{2}))})) ?</td>
+ </tr>
+ <tr>
+ <td id="L1039" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1039"></td>
+ <td id="LC1039" class="blob-code blob-code-inner js-file-line"> (-atan2(-(#2),-(#1))) :</td>
+ </tr>
+ <tr>
+ <td id="L1040" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1040"></td>
+ <td id="LC1040" class="blob-code blob-code-inner js-file-line"> (t &gt;= (sqrt(<span class="pl-c1">\n@pow</span>{#1}{2} + <span class="pl-c1">\n@pow</span>{#2}{2}) *</td>
+ </tr>
+ <tr>
+ <td id="L1041" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1041"></td>
+ <td id="LC1041" class="blob-code blob-code-inner js-file-line"> (<span class="pl-c1">\n@pow</span>{10}{sqrt(<span class="pl-c1">\n@pow</span>{#1}{2}/(<span class="pl-c1">\n@pow</span>{#1}{2} + <span class="pl-c1">\n@pow</span>{#2}{2}))})) ?</td>
+ </tr>
+ <tr>
+ <td id="L1042" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1042"></td>
+ <td id="LC1042" class="blob-code blob-code-inner js-file-line"> (#2&gt;0?(#1&gt;0?3*pi/2:-pi/2):-pi/2) :</td>
+ </tr>
+ <tr>
+ <td id="L1043" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1043"></td>
+ <td id="LC1043" class="blob-code blob-code-inner js-file-line"> (-atan2(-(#2),-(#1)) + (log10(t/(sqrt(<span class="pl-c1">\n@pow</span>{#1}{2} + <span class="pl-c1">\n@pow</span>{#2}{2}) /</td>
+ </tr>
+ <tr>
+ <td id="L1044" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1044"></td>
+ <td id="LC1044" class="blob-code blob-code-inner js-file-line"> (<span class="pl-c1">\n@pow</span>{10}{sqrt(<span class="pl-c1">\n@pow</span>{#1}{2}/(<span class="pl-c1">\n@pow</span>{#1}{2} +</td>
+ </tr>
+ <tr>
+ <td id="L1045" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1045"></td>
+ <td id="LC1045" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\n@pow</span>{#2}{2}))}))))*((#2&gt;0?(#1&gt;0?3*pi/2:-pi/2):-pi/2) + atan2(-(#2),-(#1)))/</td>
+ </tr>
+ <tr>
+ <td id="L1046" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1046"></td>
+ <td id="LC1046" class="blob-code blob-code-inner js-file-line"> (log10(<span class="pl-c1">\n@pow</span>{10}{sqrt((4*<span class="pl-c1">\n@pow</span>{#1}{2})/</td>
+ </tr>
+ <tr>
+ <td id="L1047" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1047"></td>
+ <td id="LC1047" class="blob-code blob-code-inner js-file-line"> (<span class="pl-c1">\n@pow</span>{#1}{2} + <span class="pl-c1">\n@pow</span>{#2}{2}))}))))))*<span class="pl-c1">\ph@scale</span>)}</td>
+ </tr>
+ <tr>
+ <td id="L1048" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1048"></td>
+ <td id="LC1048" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1049" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1049"></td>
+ <td id="LC1049" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> Parametric function for asymptotic approximation of the phase of a complex pole.</span></td>
+ </tr>
+ <tr>
+ <td id="L1050" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1050"></td>
+ <td id="LC1050" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1051" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1051"></td>
+ <td id="LC1051" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\PhPoleAsymp</span>}[2]{((t &lt; (sqrt(<span class="pl-c1">\n@pow</span>{#1}{2} + <span class="pl-c1">\n@pow</span>{#2}{2})) ?</td>
+ </tr>
+ <tr>
+ <td id="L1052" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1052"></td>
+ <td id="LC1052" class="blob-code blob-code-inner js-file-line"> (-atan2(-(#2),-(#1))) :</td>
+ </tr>
+ <tr>
+ <td id="L1053" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1053"></td>
+ <td id="LC1053" class="blob-code blob-code-inner js-file-line"> (#2&gt;0?(#1&gt;0?3*pi/2:-pi/2):-pi/2))*<span class="pl-c1">\ph@scale</span>)}</td>
+ </tr>
+ <tr>
+ <td id="L1054" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1054"></td>
+ <td id="LC1054" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1055" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1055"></td>
+ <td id="LC1055" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L1056" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1056"></td>
+ <td id="LC1056" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L1057" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1057"></td>
+ <td id="LC1057" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L1058" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1058"></td>
+ <td id="LC1058" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L1059" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1059"></td>
+ <td id="LC1059" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L1060" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1060"></td>
+ <td id="LC1060" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L1061" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1061"></td>
+ <td id="LC1061" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\MagZero}</span></td>
+ </tr>
+ <tr>
+ <td id="L1062" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1062"></td>
+ <td id="LC1062" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\MagZeroAsymp}</span></td>
+ </tr>
+ <tr>
+ <td id="L1063" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1063"></td>
+ <td id="LC1063" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\MagZeroLin}</span></td>
+ </tr>
+ <tr>
+ <td id="L1064" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1064"></td>
+ <td id="LC1064" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\PhZero}</span></td>
+ </tr>
+ <tr>
+ <td id="L1065" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1065"></td>
+ <td id="LC1065" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\PhZeroAsymp}</span></td>
+ </tr>
+ <tr>
+ <td id="L1066" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1066"></td>
+ <td id="LC1066" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\PhZeroLin}</span></td>
+ </tr>
+ <tr>
+ <td id="L1067" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1067"></td>
+ <td id="LC1067" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> Plots of zeros are defined to be negative of plots of poles. The |0-| is necessary due to a bug in |gnuplot| (fixed in version 5.4, patchlevel 3).</span></td>
+ </tr>
+ <tr>
+ <td id="L1068" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1068"></td>
+ <td id="LC1068" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1069" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1069"></td>
+ <td id="LC1069" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\MagZero</span>}{0-<span class="pl-c1">\MagPole</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1070" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1070"></td>
+ <td id="LC1070" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\MagZeroLin</span>}{0-<span class="pl-c1">\MagPoleLin</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1071" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1071"></td>
+ <td id="LC1071" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\MagZeroAsymp</span>}{0-<span class="pl-c1">\MagPoleAsymp</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1072" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1072"></td>
+ <td id="LC1072" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\PhZero</span>}{0-<span class="pl-c1">\PhPole</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1073" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1073"></td>
+ <td id="LC1073" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\PhZeroLin</span>}{0-<span class="pl-c1">\PhPoleLin</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1074" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1074"></td>
+ <td id="LC1074" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\PhZeroAsymp</span>}{0-<span class="pl-c1">\PhPoleAsymp</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1075" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1075"></td>
+ <td id="LC1075" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1076" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1076"></td>
+ <td id="LC1076" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L1077" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1077"></td>
+ <td id="LC1077" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L1078" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1078"></td>
+ <td id="LC1078" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L1079" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1079"></td>
+ <td id="LC1079" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L1080" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1080"></td>
+ <td id="LC1080" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L1081" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1081"></td>
+ <td id="LC1081" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L1082" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1082"></td>
+ <td id="LC1082" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \subsection{Second order systems.}</span></td>
+ </tr>
+ <tr>
+ <td id="L1083" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1083"></td>
+ <td id="LC1083" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> Although second order systems can be dealt with using the macros defined so far, the following dedicated macros for second order systems involve less computation. </span></td>
+ </tr>
+ <tr>
+ <td id="L1084" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1084"></td>
+ <td id="LC1084" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\MagCSPoles}</span></td>
+ </tr>
+ <tr>
+ <td id="L1085" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1085"></td>
+ <td id="LC1085" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\MagCSPolesAsymp}</span></td>
+ </tr>
+ <tr>
+ <td id="L1086" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1086"></td>
+ <td id="LC1086" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\MagCSPolesLin}</span></td>
+ </tr>
+ <tr>
+ <td id="L1087" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1087"></td>
+ <td id="LC1087" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\PhCSPoles}</span></td>
+ </tr>
+ <tr>
+ <td id="L1088" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1088"></td>
+ <td id="LC1088" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\PhCSPolesAsymp}</span></td>
+ </tr>
+ <tr>
+ <td id="L1089" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1089"></td>
+ <td id="LC1089" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\PhCSPolesLin}</span></td>
+ </tr>
+ <tr>
+ <td id="L1090" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1090"></td>
+ <td id="LC1090" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\MagCSZeros}</span></td>
+ </tr>
+ <tr>
+ <td id="L1091" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1091"></td>
+ <td id="LC1091" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\MagCSZerosAsymp}</span></td>
+ </tr>
+ <tr>
+ <td id="L1092" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1092"></td>
+ <td id="LC1092" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\MagCSZerosLin}</span></td>
+ </tr>
+ <tr>
+ <td id="L1093" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1093"></td>
+ <td id="LC1093" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\PhCSZeros}</span></td>
+ </tr>
+ <tr>
+ <td id="L1094" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1094"></td>
+ <td id="LC1094" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\PhCSZerosAsymp}</span></td>
+ </tr>
+ <tr>
+ <td id="L1095" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1095"></td>
+ <td id="LC1095" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\PhCSZerosLin}</span></td>
+ </tr>
+ <tr>
+ <td id="L1096" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1096"></td>
+ <td id="LC1096" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> Consider the canonical second order transfer function $G(s) = \frac{1}{s^2 + 2 \zeta w_n s + w_n^2}$. We start with true, linear, and asymptotic magnitude plots for this transfer function.</span></td>
+ </tr>
+ <tr>
+ <td id="L1097" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1097"></td>
+ <td id="LC1097" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1098" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1098"></td>
+ <td id="LC1098" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\MagCSPoles</span>}[2]{(-20*log10(sqrt(<span class="pl-c1">\n@pow</span>{<span class="pl-c1">\n@pow</span>{#2}{2} </td>
+ </tr>
+ <tr>
+ <td id="L1099" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1099"></td>
+ <td id="LC1099" class="blob-code blob-code-inner js-file-line"> - <span class="pl-c1">\n@pow</span>{t}{2}}{2} + <span class="pl-c1">\n@pow</span>{2*#1*#2*t}{2})))}</td>
+ </tr>
+ <tr>
+ <td id="L1100" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1100"></td>
+ <td id="LC1100" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\MagCSPolesLin</span>}[2]{(t &lt; #2 ? -40*log10(#2) : - 40*log10(t))}</td>
+ </tr>
+ <tr>
+ <td id="L1101" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1101"></td>
+ <td id="LC1101" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\MagCSPolesAsymp</span>}{<span class="pl-c1">\MagCSPolesLin</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1102" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1102"></td>
+ <td id="LC1102" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1103" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1103"></td>
+ <td id="LC1103" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> Then, we have true, linear, and asymptotic phase plots for the canonical second order transfer function.</span></td>
+ </tr>
+ <tr>
+ <td id="L1104" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1104"></td>
+ <td id="LC1104" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1105" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1105"></td>
+ <td id="LC1105" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\PhCSPoles</span>}[2]{((-atan2((2*(#1)*(#2)*t),(<span class="pl-c1">\n@pow</span>{#2}{2}</td>
+ </tr>
+ <tr>
+ <td id="L1106" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1106"></td>
+ <td id="LC1106" class="blob-code blob-code-inner js-file-line"> - <span class="pl-c1">\n@pow</span>{t}{2})))*<span class="pl-c1">\ph@scale</span>)}</td>
+ </tr>
+ <tr>
+ <td id="L1107" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1107"></td>
+ <td id="LC1107" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\PhCSPolesLin</span>}[2]{((t &lt; (#2 / (<span class="pl-c1">\n@pow</span>{10}{abs(#1)})) ?</td>
+ </tr>
+ <tr>
+ <td id="L1108" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1108"></td>
+ <td id="LC1108" class="blob-code blob-code-inner js-file-line"> 0 :</td>
+ </tr>
+ <tr>
+ <td id="L1109" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1109"></td>
+ <td id="LC1109" class="blob-code blob-code-inner js-file-line"> (t &gt;= (#2 * (<span class="pl-c1">\n@pow</span>{10}{abs(#1)})) ?</td>
+ </tr>
+ <tr>
+ <td id="L1110" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1110"></td>
+ <td id="LC1110" class="blob-code blob-code-inner js-file-line"> (#1&gt;0 ? -pi : pi) :</td>
+ </tr>
+ <tr>
+ <td id="L1111" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1111"></td>
+ <td id="LC1111" class="blob-code blob-code-inner js-file-line"> (#1&gt;0 ? (-pi*(log10(t*(<span class="pl-c1">\n@pow</span>{10}{#1})/#2))/(2*#1)) :</td>
+ </tr>
+ <tr>
+ <td id="L1112" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1112"></td>
+ <td id="LC1112" class="blob-code blob-code-inner js-file-line"> (pi*(log10(t*(<span class="pl-c1">\n@pow</span>{10}{abs(#1)})/#2))/(2*abs(#1))))))*<span class="pl-c1">\ph@scale</span>)}</td>
+ </tr>
+ <tr>
+ <td id="L1113" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1113"></td>
+ <td id="LC1113" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\PhCSPolesAsymp</span>}[2]{((#1&gt;0?(t&lt;#2?0:-pi):(t&lt;#2?0:pi))*<span class="pl-c1">\ph@scale</span>)}</td>
+ </tr>
+ <tr>
+ <td id="L1114" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1114"></td>
+ <td id="LC1114" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1115" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1115"></td>
+ <td id="LC1115" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> Plots of the inverse function $G(s)=s^2+2\zeta\omega_n s+\omega_n^2$ are defined to be negative of plots of poles. The |0-| is necessary due to a bug in |gnuplot| (fixed in version 5.4, patchlevel 3).</span></td>
+ </tr>
+ <tr>
+ <td id="L1116" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1116"></td>
+ <td id="LC1116" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1117" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1117"></td>
+ <td id="LC1117" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\MagCSZeros</span>}{0-<span class="pl-c1">\MagCSPoles</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1118" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1118"></td>
+ <td id="LC1118" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\MagCSZerosLin</span>}{0-<span class="pl-c1">\MagCSPolesLin</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1119" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1119"></td>
+ <td id="LC1119" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\MagCSZerosAsymp</span>}{0-<span class="pl-c1">\MagCSPolesAsymp</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1120" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1120"></td>
+ <td id="LC1120" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\PhCSZeros</span>}{0-<span class="pl-c1">\PhCSPoles</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1121" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1121"></td>
+ <td id="LC1121" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\PhCSZerosLin</span>}{0-<span class="pl-c1">\PhCSPolesLin</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1122" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1122"></td>
+ <td id="LC1122" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\PhCSZerosAsymp</span>}{0-<span class="pl-c1">\PhCSPolesAsymp</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1123" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1123"></td>
+ <td id="LC1123" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1124" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1124"></td>
+ <td id="LC1124" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L1125" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1125"></td>
+ <td id="LC1125" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L1126" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1126"></td>
+ <td id="LC1126" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L1127" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1127"></td>
+ <td id="LC1127" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L1128" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1128"></td>
+ <td id="LC1128" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L1129" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1129"></td>
+ <td id="LC1129" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L1130" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1130"></td>
+ <td id="LC1130" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L1131" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1131"></td>
+ <td id="LC1131" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L1132" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1132"></td>
+ <td id="LC1132" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L1133" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1133"></td>
+ <td id="LC1133" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L1134" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1134"></td>
+ <td id="LC1134" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L1135" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1135"></td>
+ <td id="LC1135" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L1136" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1136"></td>
+ <td id="LC1136" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\MagCSPolesPeak}</span></td>
+ </tr>
+ <tr>
+ <td id="L1137" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1137"></td>
+ <td id="LC1137" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\MagCSZerosPeak}</span></td>
+ </tr>
+ <tr>
+ <td id="L1138" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1138"></td>
+ <td id="LC1138" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> These macros are used to add a resonant peak to linear and asymptotic plots of canonical second order poles and zeros. Since the plots are parametric, a separate |\draw| command is needed to add a vertical arrow.</span></td>
+ </tr>
+ <tr>
+ <td id="L1139" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1139"></td>
+ <td id="LC1139" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1140" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1140"></td>
+ <td id="LC1140" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\MagCSPolesPeak</span>}[3][]{</td>
+ </tr>
+ <tr>
+ <td id="L1141" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1141"></td>
+ <td id="LC1141" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\draw</span>[#1,-&gt;] (axis cs:{#3},{-40*log10(#3)}) -- </td>
+ </tr>
+ <tr>
+ <td id="L1142" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1142"></td>
+ <td id="LC1142" class="blob-code blob-code-inner js-file-line"> (axis cs:{#3},{-40*log10(#3)-20*log10(2*abs(#2))})</td>
+ </tr>
+ <tr>
+ <td id="L1143" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1143"></td>
+ <td id="LC1143" class="blob-code blob-code-inner js-file-line">}</td>
+ </tr>
+ <tr>
+ <td id="L1144" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1144"></td>
+ <td id="LC1144" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\MagCSZerosPeak</span>}[3][]{</td>
+ </tr>
+ <tr>
+ <td id="L1145" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1145"></td>
+ <td id="LC1145" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\draw</span>[#1,-&gt;] (axis cs:{#3},{40*log10(#3)}) -- </td>
+ </tr>
+ <tr>
+ <td id="L1146" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1146"></td>
+ <td id="LC1146" class="blob-code blob-code-inner js-file-line"> (axis cs:{#3},{40*log10(#3)+20*log10(2*abs(#2))})</td>
+ </tr>
+ <tr>
+ <td id="L1147" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1147"></td>
+ <td id="LC1147" class="blob-code blob-code-inner js-file-line">}</td>
+ </tr>
+ <tr>
+ <td id="L1148" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1148"></td>
+ <td id="LC1148" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1149" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1149"></td>
+ <td id="LC1149" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L1150" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1150"></td>
+ <td id="LC1150" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L1151" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1151"></td>
+ <td id="LC1151" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\MagSOPoles}</span></td>
+ </tr>
+ <tr>
+ <td id="L1152" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1152"></td>
+ <td id="LC1152" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\MagSOPolesAsymp}</span></td>
+ </tr>
+ <tr>
+ <td id="L1153" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1153"></td>
+ <td id="LC1153" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\MagSOPolesLin}</span></td>
+ </tr>
+ <tr>
+ <td id="L1154" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1154"></td>
+ <td id="LC1154" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\PhSOPoles}</span></td>
+ </tr>
+ <tr>
+ <td id="L1155" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1155"></td>
+ <td id="LC1155" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\PhSOPolesAsymp}</span></td>
+ </tr>
+ <tr>
+ <td id="L1156" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1156"></td>
+ <td id="LC1156" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\PhSOPolesLin}</span></td>
+ </tr>
+ <tr>
+ <td id="L1157" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1157"></td>
+ <td id="LC1157" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\MagSOZeros}</span></td>
+ </tr>
+ <tr>
+ <td id="L1158" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1158"></td>
+ <td id="LC1158" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\MagSOZerosAsymp}</span></td>
+ </tr>
+ <tr>
+ <td id="L1159" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1159"></td>
+ <td id="LC1159" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\MagSOZerosLin}</span></td>
+ </tr>
+ <tr>
+ <td id="L1160" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1160"></td>
+ <td id="LC1160" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\PhSOZeros}</span></td>
+ </tr>
+ <tr>
+ <td id="L1161" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1161"></td>
+ <td id="LC1161" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\PhSOZerosAsymp}</span></td>
+ </tr>
+ <tr>
+ <td id="L1162" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1162"></td>
+ <td id="LC1162" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\PhSOZerosLin}</span></td>
+ </tr>
+ <tr>
+ <td id="L1163" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1163"></td>
+ <td id="LC1163" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> Consider a general second order transfer function $G(s) = \frac{1}{s^2 + a s + b}$. We start with true, linear, and asymptotic magnitude plots for this transfer function.</span></td>
+ </tr>
+ <tr>
+ <td id="L1164" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1164"></td>
+ <td id="LC1164" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \changes{v1.1.2}{2022/10/29}{Fix scaling bug introduced in v1.1.1}</span></td>
+ </tr>
+ <tr>
+ <td id="L1165" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1165"></td>
+ <td id="LC1165" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1166" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1166"></td>
+ <td id="LC1166" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\MagSOPoles</span>}[2]{</td>
+ </tr>
+ <tr>
+ <td id="L1167" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1167"></td>
+ <td id="LC1167" class="blob-code blob-code-inner js-file-line"> (-20*log10(sqrt(<span class="pl-c1">\n@pow</span>{#2 - <span class="pl-c1">\n@pow</span>{t}{2}}{2} + <span class="pl-c1">\n@pow</span>{#1*t}{2})))}</td>
+ </tr>
+ <tr>
+ <td id="L1168" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1168"></td>
+ <td id="LC1168" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\MagSOPolesLin</span>}[2]{</td>
+ </tr>
+ <tr>
+ <td id="L1169" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1169"></td>
+ <td id="LC1169" class="blob-code blob-code-inner js-file-line"> (t &lt; sqrt(abs(#2)) ? -20*log10(abs(#2)) : - 40*log10(t))}</td>
+ </tr>
+ <tr>
+ <td id="L1170" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1170"></td>
+ <td id="LC1170" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\MagSOPolesAsymp</span>}{<span class="pl-c1">\MagSOPolesLin</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1171" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1171"></td>
+ <td id="LC1171" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1172" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1172"></td>
+ <td id="LC1172" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> Then, we have true, linear, and asymptotic phase plots for the general second order transfer function.</span></td>
+ </tr>
+ <tr>
+ <td id="L1173" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1173"></td>
+ <td id="LC1173" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1174" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1174"></td>
+ <td id="LC1174" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\PhSOPoles</span>}[2]{((-atan2((#1)*t,((#2) - <span class="pl-c1">\n@pow</span>{t}{2})))*<span class="pl-c1">\ph@scale</span>)}</td>
+ </tr>
+ <tr>
+ <td id="L1175" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1175"></td>
+ <td id="LC1175" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\PhSOPolesLin</span>}[2]{((#2&gt;0 ?</td>
+ </tr>
+ <tr>
+ <td id="L1176" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1176"></td>
+ <td id="LC1176" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\PhCSPolesLin</span>{(#1/(2*sqrt(#2)))}{(sqrt(#2))} :</td>
+ </tr>
+ <tr>
+ <td id="L1177" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1177"></td>
+ <td id="LC1177" class="blob-code blob-code-inner js-file-line"> (#1&gt;0 ? -pi : pi)))}</td>
+ </tr>
+ <tr>
+ <td id="L1178" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1178"></td>
+ <td id="LC1178" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\PhSOPolesAsymp</span>}[2]{((#2&gt;0 ?</td>
+ </tr>
+ <tr>
+ <td id="L1179" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1179"></td>
+ <td id="LC1179" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\PhCSPolesAsymp</span>{(#1/(2*sqrt(#2)))}{(sqrt(#2))} :</td>
+ </tr>
+ <tr>
+ <td id="L1180" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1180"></td>
+ <td id="LC1180" class="blob-code blob-code-inner js-file-line"> (#1&gt;0 ? -pi : pi)))}</td>
+ </tr>
+ <tr>
+ <td id="L1181" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1181"></td>
+ <td id="LC1181" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1182" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1182"></td>
+ <td id="LC1182" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> Plots of the inverse function $G(s)=s^2+as+b$ are defined to be negative of plots of poles. The |0-| is necessary due to a bug in |gnuplot| (fixed in version 5.4, patchlevel 3).</span></td>
+ </tr>
+ <tr>
+ <td id="L1183" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1183"></td>
+ <td id="LC1183" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1184" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1184"></td>
+ <td id="LC1184" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\MagSOZeros</span>}{0-<span class="pl-c1">\MagSOPoles</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1185" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1185"></td>
+ <td id="LC1185" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\MagSOZerosLin</span>}{0-<span class="pl-c1">\MagSOPolesLin</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1186" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1186"></td>
+ <td id="LC1186" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\MagSOZerosAsymp</span>}{0-<span class="pl-c1">\MagSOPolesAsymp</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1187" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1187"></td>
+ <td id="LC1187" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\PhSOZeros</span>}{0-<span class="pl-c1">\PhSOPoles</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1188" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1188"></td>
+ <td id="LC1188" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\PhSOZerosLin</span>}{0-<span class="pl-c1">\PhSOPolesLin</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1189" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1189"></td>
+ <td id="LC1189" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\PhSOZerosAsymp</span>}{0-<span class="pl-c1">\PhSOPolesAsymp</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1190" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1190"></td>
+ <td id="LC1190" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1191" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1191"></td>
+ <td id="LC1191" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L1192" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1192"></td>
+ <td id="LC1192" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L1193" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1193"></td>
+ <td id="LC1193" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L1194" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1194"></td>
+ <td id="LC1194" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L1195" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1195"></td>
+ <td id="LC1195" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L1196" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1196"></td>
+ <td id="LC1196" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L1197" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1197"></td>
+ <td id="LC1197" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L1198" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1198"></td>
+ <td id="LC1198" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L1199" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1199"></td>
+ <td id="LC1199" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L1200" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1200"></td>
+ <td id="LC1200" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L1201" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1201"></td>
+ <td id="LC1201" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L1202" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1202"></td>
+ <td id="LC1202" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L1203" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1203"></td>
+ <td id="LC1203" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\MagSOPolesPeak}</span></td>
+ </tr>
+ <tr>
+ <td id="L1204" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1204"></td>
+ <td id="LC1204" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\MagSOZerosPeak}</span></td>
+ </tr>
+ <tr>
+ <td id="L1205" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1205"></td>
+ <td id="LC1205" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> These macros are used to add a resonant peak to linear and asymptotic plots of general second order poles and zeros. Since the plots are parametric, a separate |\draw| command is needed to add a vertical arrow.</span></td>
+ </tr>
+ <tr>
+ <td id="L1206" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1206"></td>
+ <td id="LC1206" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1207" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1207"></td>
+ <td id="LC1207" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\MagSOPolesPeak</span>}[3][]{</td>
+ </tr>
+ <tr>
+ <td id="L1208" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1208"></td>
+ <td id="LC1208" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\draw</span>[#1,-&gt;] (axis cs:{sqrt(abs(#3))},{-20*log10(abs(#3))}) -- </td>
+ </tr>
+ <tr>
+ <td id="L1209" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1209"></td>
+ <td id="LC1209" class="blob-code blob-code-inner js-file-line"> (axis cs:{sqrt(abs(#3))},{-20*log10(abs(#3)) - </td>
+ </tr>
+ <tr>
+ <td id="L1210" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1210"></td>
+ <td id="LC1210" class="blob-code blob-code-inner js-file-line"> 20*log10(abs(#2/sqrt(abs(#3))))});</td>
+ </tr>
+ <tr>
+ <td id="L1211" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1211"></td>
+ <td id="LC1211" class="blob-code blob-code-inner js-file-line">}</td>
+ </tr>
+ <tr>
+ <td id="L1212" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1212"></td>
+ <td id="LC1212" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\MagSOZerosPeak</span>}[3][]{</td>
+ </tr>
+ <tr>
+ <td id="L1213" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1213"></td>
+ <td id="LC1213" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\draw</span>[#1,-&gt;] (axis cs:{sqrt(abs(#3))},{20*log10(abs(#3))}) -- </td>
+ </tr>
+ <tr>
+ <td id="L1214" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1214"></td>
+ <td id="LC1214" class="blob-code blob-code-inner js-file-line"> (axis cs:{sqrt(abs(#3))},{20*log10(abs(#3)) + </td>
+ </tr>
+ <tr>
+ <td id="L1215" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1215"></td>
+ <td id="LC1215" class="blob-code blob-code-inner js-file-line"> 20*log10(abs(#2/sqrt(abs(#3))))});</td>
+ </tr>
+ <tr>
+ <td id="L1216" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1216"></td>
+ <td id="LC1216" class="blob-code blob-code-inner js-file-line">}</td>
+ </tr>
+ <tr>
+ <td id="L1217" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1217"></td>
+ <td id="LC1217" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1218" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1218"></td>
+ <td id="LC1218" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L1219" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1219"></td>
+ <td id="LC1219" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L1220" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1220"></td>
+ <td id="LC1220" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \subsection{Commands for Bode plots}</span></td>
+ </tr>
+ <tr>
+ <td id="L1221" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1221"></td>
+ <td id="LC1221" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \subsubsection{User macros}</span></td>
+ </tr>
+ <tr>
+ <td id="L1222" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1222"></td>
+ <td id="LC1222" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\BodeZPK}</span></td>
+ </tr>
+ <tr>
+ <td id="L1223" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1223"></td>
+ <td id="LC1223" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> This macro takes lists of complex poles and zeros of the form |{re,im}|, and values of gain and delay as inputs and constructs parametric functions for the Bode magnitude and phase plots. This is done by adding together the parametric functions generated by the macros for individual zeros, poles, gain, and delay, described above. The parametric functions are then plotted in a |tikzpicture| environment using the |\addplot| macro. Unless the package is loaded with the option |pgf|, the parametric functions are evaluated using |gnuplot|. \changes{v1.0.1}{2021/10/29}{Pass arbitrary TikZ commands as options.}</span></td>
+ </tr>
+ <tr>
+ <td id="L1224" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1224"></td>
+ <td id="LC1224" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1225" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1225"></td>
+ <td id="LC1225" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>{<span class="pl-c1">\BodeZPK</span>}[4][approx/true]{</td>
+ </tr>
+ <tr>
+ <td id="L1226" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1226"></td>
+ <td id="LC1226" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1227" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1227"></td>
+ <td id="LC1227" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> Most of the work is done by the |\parse@opt| and the |\build@ZPK@plot| macros, described in the &#39;Internal macros&#39; section. The former is used to parse the optional arguments and the latter to extract poles, zeros, gain, and delay from the first mandatory argument and to generate macros |\func@mag| and |\func@ph| that hold the magnitude and phase parametric functions. The |\noexpand| macros below are needed to so that only the macro |\opt@group| is expanded. \changes{v1.0.3}{2021/11/03}{Added Tikz option}\changes{v1.1.1}{2022/07/31}{Enabled `Hz&#39; and `rad&#39; units for frequency and phase, respectively}</span></td>
+ </tr>
+ <tr>
+ <td id="L1228" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1228"></td>
+ <td id="LC1228" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1229" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1229"></td>
+ <td id="LC1229" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\parse@opt</span>{#1}</td>
+ </tr>
+ <tr>
+ <td id="L1230" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1230"></td>
+ <td id="LC1230" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\func@mag</span>{}</td>
+ </tr>
+ <tr>
+ <td id="L1231" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1231"></td>
+ <td id="LC1231" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\func@ph</span>{}</td>
+ </tr>
+ <tr>
+ <td id="L1232" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1232"></td>
+ <td id="LC1232" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\temp@cmd</span>{<span class="pl-c1">\noexpand</span><span class="pl-c1">\begin</span>{<span class="pl-smi">tikzpicture</span>} [<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt@tikz</span>}]}</td>
+ </tr>
+ <tr>
+ <td id="L1233" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1233"></td>
+ <td id="LC1233" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\temp@cmd</span></td>
+ </tr>
+ <tr>
+ <td id="L1234" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1234"></td>
+ <td id="LC1234" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\build@ZPK@plot</span>{<span class="pl-c1">\func@mag</span>}{<span class="pl-c1">\func@ph</span>}{<span class="pl-c1">\opt@approx</span>}{#2}</td>
+ </tr>
+ <tr>
+ <td id="L1235" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1235"></td>
+ <td id="LC1235" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\temp@cmd</span>{<span class="pl-c1">\noexpand</span><span class="pl-c1">\begin</span>{<span class="pl-smi">groupplot</span>}[</td>
+ </tr>
+ <tr>
+ <td id="L1236" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1236"></td>
+ <td id="LC1236" class="blob-code blob-code-inner js-file-line"> bode@style,</td>
+ </tr>
+ <tr>
+ <td id="L1237" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1237"></td>
+ <td id="LC1237" class="blob-code blob-code-inner js-file-line"> xmin=#3,</td>
+ </tr>
+ <tr>
+ <td id="L1238" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1238"></td>
+ <td id="LC1238" class="blob-code blob-code-inner js-file-line"> xmax=#4,</td>
+ </tr>
+ <tr>
+ <td id="L1239" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1239"></td>
+ <td id="LC1239" class="blob-code blob-code-inner js-file-line"> domain=#3*<span class="pl-c1">\freq@scale</span>:#4*<span class="pl-c1">\freq@scale</span>,</td>
+ </tr>
+ <tr>
+ <td id="L1240" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1240"></td>
+ <td id="LC1240" class="blob-code blob-code-inner js-file-line"> height=2.5cm,</td>
+ </tr>
+ <tr>
+ <td id="L1241" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1241"></td>
+ <td id="LC1241" class="blob-code blob-code-inner js-file-line"> xmode=log,</td>
+ </tr>
+ <tr>
+ <td id="L1242" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1242"></td>
+ <td id="LC1242" class="blob-code blob-code-inner js-file-line"> group style = {group size = 1 by 2,vertical sep=0.25cm},</td>
+ </tr>
+ <tr>
+ <td id="L1243" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1243"></td>
+ <td id="LC1243" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\opt@group</span></td>
+ </tr>
+ <tr>
+ <td id="L1244" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1244"></td>
+ <td id="LC1244" class="blob-code blob-code-inner js-file-line"> ]}</td>
+ </tr>
+ <tr>
+ <td id="L1245" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1245"></td>
+ <td id="LC1245" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\temp@cmd</span></td>
+ </tr>
+ <tr>
+ <td id="L1246" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1246"></td>
+ <td id="LC1246" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1247" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1247"></td>
+ <td id="LC1247" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> To ensure frequency tick marks on magnitude and the phase plots are always aligned, we use the |groupplot| library. The |\noexpand| and |\unexpanded\expandafter| macros below are used to expand macros in the plot and group optional arguments.</span></td>
+ </tr>
+ <tr>
+ <td id="L1248" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1248"></td>
+ <td id="LC1248" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1249" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1249"></td>
+ <td id="LC1249" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\temp@mag@cmd</span>{<span class="pl-c1">\noexpand\nextgroupplot</span> [ylabel={Gain (dB)}, xmajorticks=false, <span class="pl-c1">\optmag@axes</span>]</td>
+ </tr>
+ <tr>
+ <td id="L1250" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1250"></td>
+ <td id="LC1250" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\noexpand\addplot</span> [freq@filter, variable=t, thick, <span class="pl-c1">\optmag@plot</span>]}</td>
+ </tr>
+ <tr>
+ <td id="L1251" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1251"></td>
+ <td id="LC1251" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\temp@ph@cmd</span>{<span class="pl-c1">\noexpand\nextgroupplot</span> [ph@y@label, freq@label, <span class="pl-c1">\optph@axes</span>]</td>
+ </tr>
+ <tr>
+ <td id="L1252" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1252"></td>
+ <td id="LC1252" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\noexpand\addplot</span> [freq@filter, variable=t, thick, <span class="pl-c1">\optph@plot</span>]}</td>
+ </tr>
+ <tr>
+ <td id="L1253" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1253"></td>
+ <td id="LC1253" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\if</span>@pgfarg</td>
+ </tr>
+ <tr>
+ <td id="L1254" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1254"></td>
+ <td id="LC1254" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\temp@mag@cmd</span> {<span class="pl-c1">\func@mag</span>};</td>
+ </tr>
+ <tr>
+ <td id="L1255" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1255"></td>
+ <td id="LC1255" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\optmag@commands</span></td>
+ </tr>
+ <tr>
+ <td id="L1256" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1256"></td>
+ <td id="LC1256" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\temp@ph@cmd</span> {<span class="pl-c1">\func@ph</span>};</td>
+ </tr>
+ <tr>
+ <td id="L1257" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1257"></td>
+ <td id="LC1257" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\optph@commands</span></td>
+ </tr>
+ <tr>
+ <td id="L1258" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1258"></td>
+ <td id="LC1258" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td>
+ </tr>
+ <tr>
+ <td id="L1259" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1259"></td>
+ <td id="LC1259" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1260" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1260"></td>
+ <td id="LC1260" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> In |gnuplot| mode, we increment the |gnuplot@id| counter before every plot to make sure that new and reusable |.gnuplot| and |.table| files are generated for every plot. We use |raw gnuplot| to make sure that the tables generated by |gnuplot| use the correct phase and frequency units as supplied by the user.</span></td>
+ </tr>
+ <tr>
+ <td id="L1261" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1261"></td>
+ <td id="LC1261" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1262" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1262"></td>
+ <td id="LC1262" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\stepcounter</span>{gnuplot@id}</td>
+ </tr>
+ <tr>
+ <td id="L1263" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1263"></td>
+ <td id="LC1263" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\temp@mag@cmd</span> gnuplot [raw gnuplot, gnuplot@prefix]</td>
+ </tr>
+ <tr>
+ <td id="L1264" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1264"></td>
+ <td id="LC1264" class="blob-code blob-code-inner js-file-line"> { set table <span class="pl-s"><span class="pl-pds">$</span>meta;</span></td>
+ </tr>
+ <tr>
+ <td id="L1265" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1265"></td>
+ <td id="LC1265" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set dummy t;</span></td>
+ </tr>
+ <tr>
+ <td id="L1266" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1266"></td>
+ <td id="LC1266" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set logscale x <span class="pl-c1">10</span>;</span></td>
+ </tr>
+ <tr>
+ <td id="L1267" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1267"></td>
+ <td id="LC1267" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set xrange [#<span class="pl-c1">3</span>*<span class="pl-c1">\freq</span>@scale:#<span class="pl-c1">4</span>*<span class="pl-c1">\freq</span>@scale];</span></td>
+ </tr>
+ <tr>
+ <td id="L1268" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1268"></td>
+ <td id="LC1268" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set samples <span class="pl-c1">\pgfkeysvalueof</span>{/pgfplots/samples};</span></td>
+ </tr>
+ <tr>
+ <td id="L1269" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1269"></td>
+ <td id="LC1269" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> plot <span class="pl-c1">\func</span>@mag;</span></td>
+ </tr>
+ <tr>
+ <td id="L1270" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1270"></td>
+ <td id="LC1270" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set table &quot;<span class="pl-c1">\bodeplot</span>@prefix<span class="pl-c1">\arabic</span>{gnuplot@id}.table&quot;;</span></td>
+ </tr>
+ <tr>
+ <td id="L1271" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1271"></td>
+ <td id="LC1271" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> plot &quot;<span class="pl-pds">$</span></span>meta&quot; using (<span class="pl-s"><span class="pl-pds">$</span><span class="pl-c1">1</span>/(<span class="pl-c1">\freq</span>@scale)):(<span class="pl-pds">$</span></span>2);</td>
+ </tr>
+ <tr>
+ <td id="L1272" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1272"></td>
+ <td id="LC1272" class="blob-code blob-code-inner js-file-line"> };</td>
+ </tr>
+ <tr>
+ <td id="L1273" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1273"></td>
+ <td id="LC1273" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\optmag@commands</span></td>
+ </tr>
+ <tr>
+ <td id="L1274" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1274"></td>
+ <td id="LC1274" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\stepcounter</span>{gnuplot@id}</td>
+ </tr>
+ <tr>
+ <td id="L1275" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1275"></td>
+ <td id="LC1275" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\temp@ph@cmd</span> gnuplot [raw gnuplot, gnuplot@prefix]</td>
+ </tr>
+ <tr>
+ <td id="L1276" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1276"></td>
+ <td id="LC1276" class="blob-code blob-code-inner js-file-line"> { set table <span class="pl-s"><span class="pl-pds">$</span>meta;</span></td>
+ </tr>
+ <tr>
+ <td id="L1277" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1277"></td>
+ <td id="LC1277" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set dummy t;</span></td>
+ </tr>
+ <tr>
+ <td id="L1278" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1278"></td>
+ <td id="LC1278" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set logscale x <span class="pl-c1">10</span>;</span></td>
+ </tr>
+ <tr>
+ <td id="L1279" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1279"></td>
+ <td id="LC1279" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set xrange [#<span class="pl-c1">3</span>*<span class="pl-c1">\freq</span>@scale:#<span class="pl-c1">4</span>*<span class="pl-c1">\freq</span>@scale];</span></td>
+ </tr>
+ <tr>
+ <td id="L1280" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1280"></td>
+ <td id="LC1280" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set samples <span class="pl-c1">\pgfkeysvalueof</span>{/pgfplots/samples};</span></td>
+ </tr>
+ <tr>
+ <td id="L1281" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1281"></td>
+ <td id="LC1281" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> plot <span class="pl-c1">\func</span>@ph;</span></td>
+ </tr>
+ <tr>
+ <td id="L1282" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1282"></td>
+ <td id="LC1282" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set table &quot;<span class="pl-c1">\bodeplot</span>@prefix<span class="pl-c1">\arabic</span>{gnuplot@id}.table&quot;;</span></td>
+ </tr>
+ <tr>
+ <td id="L1283" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1283"></td>
+ <td id="LC1283" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> plot &quot;<span class="pl-pds">$</span></span>meta&quot; using (<span class="pl-s"><span class="pl-pds">$</span><span class="pl-c1">1</span>/(<span class="pl-c1">\freq</span>@scale)):(<span class="pl-pds">$</span></span>2);</td>
+ </tr>
+ <tr>
+ <td id="L1284" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1284"></td>
+ <td id="LC1284" class="blob-code blob-code-inner js-file-line"> };</td>
+ </tr>
+ <tr>
+ <td id="L1285" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1285"></td>
+ <td id="LC1285" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\optph@commands</span></td>
+ </tr>
+ <tr>
+ <td id="L1286" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1286"></td>
+ <td id="LC1286" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td>
+ </tr>
+ <tr>
+ <td id="L1287" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1287"></td>
+ <td id="LC1287" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\end</span>{<span class="pl-smi">groupplot</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1288" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1288"></td>
+ <td id="LC1288" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\end</span>{tikzpicture}</td>
+ </tr>
+ <tr>
+ <td id="L1289" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1289"></td>
+ <td id="LC1289" class="blob-code blob-code-inner js-file-line">}</td>
+ </tr>
+ <tr>
+ <td id="L1290" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1290"></td>
+ <td id="LC1290" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1291" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1291"></td>
+ <td id="LC1291" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L1292" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1292"></td>
+ <td id="LC1292" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\BodeTF}</span></td>
+ </tr>
+ <tr>
+ <td id="L1293" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1293"></td>
+ <td id="LC1293" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> Implementation of this macro is very similar to the |\BodeZPK| macro above. The only difference is the lack of linear and asymptotic plots and slightly different parsing of the mandatory arguments. \changes{v1.0.3}{2021/11/03}{Added Tikz option} \changes{v1.1.0}{2022/07/06}{Fixed phase wrapping in gnuplot mode}\changes{v1.1.1}{2022/07/31}{Enabled `Hz&#39; and `rad&#39; units for frequency and phase, respectively}</span></td>
+ </tr>
+ <tr>
+ <td id="L1294" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1294"></td>
+ <td id="LC1294" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1295" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1295"></td>
+ <td id="LC1295" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>{<span class="pl-c1">\BodeTF</span>}[4][]{</td>
+ </tr>
+ <tr>
+ <td id="L1296" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1296"></td>
+ <td id="LC1296" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\parse@opt</span>{#1}</td>
+ </tr>
+ <tr>
+ <td id="L1297" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1297"></td>
+ <td id="LC1297" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\func@mag</span>{}</td>
+ </tr>
+ <tr>
+ <td id="L1298" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1298"></td>
+ <td id="LC1298" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\func@ph</span>{}</td>
+ </tr>
+ <tr>
+ <td id="L1299" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1299"></td>
+ <td id="LC1299" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\temp@cmd</span>{<span class="pl-c1">\noexpand</span><span class="pl-c1">\begin</span>{<span class="pl-smi">tikzpicture</span>} [<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt@tikz</span>}]}</td>
+ </tr>
+ <tr>
+ <td id="L1300" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1300"></td>
+ <td id="LC1300" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\temp@cmd</span></td>
+ </tr>
+ <tr>
+ <td id="L1301" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1301"></td>
+ <td id="LC1301" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\build@TF@plot</span>{<span class="pl-c1">\func@mag</span>}{<span class="pl-c1">\func@ph</span>}{#2}</td>
+ </tr>
+ <tr>
+ <td id="L1302" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1302"></td>
+ <td id="LC1302" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\temp@cmd</span>{<span class="pl-c1">\noexpand</span><span class="pl-c1">\begin</span>{<span class="pl-smi">groupplot</span>}[</td>
+ </tr>
+ <tr>
+ <td id="L1303" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1303"></td>
+ <td id="LC1303" class="blob-code blob-code-inner js-file-line"> bode@style,</td>
+ </tr>
+ <tr>
+ <td id="L1304" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1304"></td>
+ <td id="LC1304" class="blob-code blob-code-inner js-file-line"> xmin=#3,</td>
+ </tr>
+ <tr>
+ <td id="L1305" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1305"></td>
+ <td id="LC1305" class="blob-code blob-code-inner js-file-line"> xmax=#4,</td>
+ </tr>
+ <tr>
+ <td id="L1306" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1306"></td>
+ <td id="LC1306" class="blob-code blob-code-inner js-file-line"> domain=#3*<span class="pl-c1">\freq@scale</span>:#4*<span class="pl-c1">\freq@scale</span>,</td>
+ </tr>
+ <tr>
+ <td id="L1307" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1307"></td>
+ <td id="LC1307" class="blob-code blob-code-inner js-file-line"> height=2.5cm,</td>
+ </tr>
+ <tr>
+ <td id="L1308" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1308"></td>
+ <td id="LC1308" class="blob-code blob-code-inner js-file-line"> xmode=log,</td>
+ </tr>
+ <tr>
+ <td id="L1309" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1309"></td>
+ <td id="LC1309" class="blob-code blob-code-inner js-file-line"> group style = {group size = 1 by 2,vertical sep=0.25cm},</td>
+ </tr>
+ <tr>
+ <td id="L1310" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1310"></td>
+ <td id="LC1310" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\opt@group</span></td>
+ </tr>
+ <tr>
+ <td id="L1311" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1311"></td>
+ <td id="LC1311" class="blob-code blob-code-inner js-file-line"> ]}</td>
+ </tr>
+ <tr>
+ <td id="L1312" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1312"></td>
+ <td id="LC1312" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\temp@cmd</span></td>
+ </tr>
+ <tr>
+ <td id="L1313" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1313"></td>
+ <td id="LC1313" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\temp@mag@cmd</span>{<span class="pl-c1">\noexpand\nextgroupplot</span> [ylabel={Gain (dB)}, xmajorticks=false, <span class="pl-c1">\optmag@axes</span>]</td>
+ </tr>
+ <tr>
+ <td id="L1314" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1314"></td>
+ <td id="LC1314" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\noexpand\addplot</span> [freq@filter, variable=t, thick, <span class="pl-c1">\optmag@plot</span>]}</td>
+ </tr>
+ <tr>
+ <td id="L1315" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1315"></td>
+ <td id="LC1315" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\temp@ph@cmd</span>{<span class="pl-c1">\noexpand\nextgroupplot</span> [ph@y@label, freq@label, <span class="pl-c1">\optph@axes</span>]</td>
+ </tr>
+ <tr>
+ <td id="L1316" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1316"></td>
+ <td id="LC1316" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\noexpand\addplot</span> [freq@filter, variable=t, thick, <span class="pl-c1">\optph@plot</span>]}</td>
+ </tr>
+ <tr>
+ <td id="L1317" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1317"></td>
+ <td id="LC1317" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\if</span>@pgfarg</td>
+ </tr>
+ <tr>
+ <td id="L1318" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1318"></td>
+ <td id="LC1318" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\temp@mag@cmd</span> {<span class="pl-c1">\func@mag</span>};</td>
+ </tr>
+ <tr>
+ <td id="L1319" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1319"></td>
+ <td id="LC1319" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\optmag@commands</span></td>
+ </tr>
+ <tr>
+ <td id="L1320" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1320"></td>
+ <td id="LC1320" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\temp@ph@cmd</span> {<span class="pl-c1">\n@mod</span>{<span class="pl-c1">\func@ph</span>}{2*pi*<span class="pl-c1">\ph@scale</span>}};</td>
+ </tr>
+ <tr>
+ <td id="L1321" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1321"></td>
+ <td id="LC1321" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\optph@commands</span></td>
+ </tr>
+ <tr>
+ <td id="L1322" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1322"></td>
+ <td id="LC1322" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td>
+ </tr>
+ <tr>
+ <td id="L1323" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1323"></td>
+ <td id="LC1323" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\stepcounter</span>{gnuplot@id}</td>
+ </tr>
+ <tr>
+ <td id="L1324" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1324"></td>
+ <td id="LC1324" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\temp@mag@cmd</span> gnuplot [raw gnuplot, gnuplot@prefix]</td>
+ </tr>
+ <tr>
+ <td id="L1325" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1325"></td>
+ <td id="LC1325" class="blob-code blob-code-inner js-file-line"> { set table <span class="pl-s"><span class="pl-pds">$</span>meta;</span></td>
+ </tr>
+ <tr>
+ <td id="L1326" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1326"></td>
+ <td id="LC1326" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set dummy t;</span></td>
+ </tr>
+ <tr>
+ <td id="L1327" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1327"></td>
+ <td id="LC1327" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set logscale x <span class="pl-c1">10</span>;</span></td>
+ </tr>
+ <tr>
+ <td id="L1328" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1328"></td>
+ <td id="LC1328" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set xrange [#<span class="pl-c1">3</span>*<span class="pl-c1">\freq</span>@scale:#<span class="pl-c1">4</span>*<span class="pl-c1">\freq</span>@scale];</span></td>
+ </tr>
+ <tr>
+ <td id="L1329" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1329"></td>
+ <td id="LC1329" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set samples <span class="pl-c1">\pgfkeysvalueof</span>{/pgfplots/samples};</span></td>
+ </tr>
+ <tr>
+ <td id="L1330" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1330"></td>
+ <td id="LC1330" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> plot <span class="pl-c1">\func</span>@mag;</span></td>
+ </tr>
+ <tr>
+ <td id="L1331" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1331"></td>
+ <td id="LC1331" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set table &quot;<span class="pl-c1">\bodeplot</span>@prefix<span class="pl-c1">\arabic</span>{gnuplot@id}.table&quot;;</span></td>
+ </tr>
+ <tr>
+ <td id="L1332" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1332"></td>
+ <td id="LC1332" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> plot &quot;<span class="pl-pds">$</span></span>meta&quot; using (<span class="pl-s"><span class="pl-pds">$</span><span class="pl-c1">1</span>/(<span class="pl-c1">\freq</span>@scale)):(<span class="pl-pds">$</span></span>2);</td>
+ </tr>
+ <tr>
+ <td id="L1333" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1333"></td>
+ <td id="LC1333" class="blob-code blob-code-inner js-file-line"> };</td>
+ </tr>
+ <tr>
+ <td id="L1334" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1334"></td>
+ <td id="LC1334" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\optmag@commands</span></td>
+ </tr>
+ <tr>
+ <td id="L1335" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1335"></td>
+ <td id="LC1335" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\stepcounter</span>{gnuplot@id}</td>
+ </tr>
+ <tr>
+ <td id="L1336" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1336"></td>
+ <td id="LC1336" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\temp@ph@cmd</span> gnuplot [raw gnuplot, gnuplot@prefix]</td>
+ </tr>
+ <tr>
+ <td id="L1337" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1337"></td>
+ <td id="LC1337" class="blob-code blob-code-inner js-file-line"> { set table <span class="pl-s"><span class="pl-pds">$</span>meta;</span></td>
+ </tr>
+ <tr>
+ <td id="L1338" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1338"></td>
+ <td id="LC1338" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set dummy t;</span></td>
+ </tr>
+ <tr>
+ <td id="L1339" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1339"></td>
+ <td id="LC1339" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set logscale x <span class="pl-c1">10</span>;</span></td>
+ </tr>
+ <tr>
+ <td id="L1340" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1340"></td>
+ <td id="LC1340" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set trange [#<span class="pl-c1">3</span>*<span class="pl-c1">\freq</span>@scale:#<span class="pl-c1">4</span>*<span class="pl-c1">\freq</span>@scale];</span></td>
+ </tr>
+ <tr>
+ <td id="L1341" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1341"></td>
+ <td id="LC1341" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set samples <span class="pl-c1">\pgfkeysvalueof</span>{/pgfplots/samples};</span></td>
+ </tr>
+ <tr>
+ <td id="L1342" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1342"></td>
+ <td id="LC1342" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> plot &#39;+&#39; using (t) : ((<span class="pl-c1">\func</span>@ph)/(<span class="pl-c1">\ph</span>@scale)) smooth unwrap;</span></td>
+ </tr>
+ <tr>
+ <td id="L1343" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1343"></td>
+ <td id="LC1343" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set table &quot;<span class="pl-c1">\bodeplot</span>@prefix<span class="pl-c1">\arabic</span>{gnuplot@id}.table&quot;;</span></td>
+ </tr>
+ <tr>
+ <td id="L1344" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1344"></td>
+ <td id="LC1344" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> plot &quot;<span class="pl-pds">$</span></span>meta&quot; using (<span class="pl-s"><span class="pl-pds">$</span><span class="pl-c1">1</span>/(<span class="pl-c1">\freq</span>@scale)):(<span class="pl-pds">$</span></span>2*<span class="pl-c1">\ph@scale</span>);</td>
+ </tr>
+ <tr>
+ <td id="L1345" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1345"></td>
+ <td id="LC1345" class="blob-code blob-code-inner js-file-line"> };</td>
+ </tr>
+ <tr>
+ <td id="L1346" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1346"></td>
+ <td id="LC1346" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\optph@commands</span></td>
+ </tr>
+ <tr>
+ <td id="L1347" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1347"></td>
+ <td id="LC1347" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td>
+ </tr>
+ <tr>
+ <td id="L1348" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1348"></td>
+ <td id="LC1348" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\end</span>{<span class="pl-smi">groupplot</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1349" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1349"></td>
+ <td id="LC1349" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\end</span>{tikzpicture}</td>
+ </tr>
+ <tr>
+ <td id="L1350" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1350"></td>
+ <td id="LC1350" class="blob-code blob-code-inner js-file-line">}</td>
+ </tr>
+ <tr>
+ <td id="L1351" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1351"></td>
+ <td id="LC1351" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode} </span></td>
+ </tr>
+ <tr>
+ <td id="L1352" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1352"></td>
+ <td id="LC1352" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L1353" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1353"></td>
+ <td id="LC1353" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\addBodeZPKPlots}</span></td>
+ </tr>
+ <tr>
+ <td id="L1354" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1354"></td>
+ <td id="LC1354" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> This macro is designed to issues multiple |\addplot| macros for the same set of poles, zeros, gain, and delay. All of the work is done by the |\build@ZPK@plot| macro. \changes{v1.0.1}{2021/10/29}{Improved optional argument handling.}\changes{v1.1.1}{2022/07/31}{Enabled `Hz&#39; and `rad&#39; units for frequency and phase, respectively}</span></td>
+ </tr>
+ <tr>
+ <td id="L1355" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1355"></td>
+ <td id="LC1355" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1356" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1356"></td>
+ <td id="LC1356" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>{<span class="pl-c1">\addBodeZPKPlots</span>}[3][true/{}]{</td>
+ </tr>
+ <tr>
+ <td id="L1357" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1357"></td>
+ <td id="LC1357" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\foreach</span> <span class="pl-c1">\approx</span>/<span class="pl-c1">\opt</span> in {#1} {</td>
+ </tr>
+ <tr>
+ <td id="L1358" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1358"></td>
+ <td id="LC1358" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\plot@macro</span>{}</td>
+ </tr>
+ <tr>
+ <td id="L1359" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1359"></td>
+ <td id="LC1359" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\temp@macro</span>{}</td>
+ </tr>
+ <tr>
+ <td id="L1360" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1360"></td>
+ <td id="LC1360" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\pdf@strcmp</span>{#2}{phase}=0</td>
+ </tr>
+ <tr>
+ <td id="L1361" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1361"></td>
+ <td id="LC1361" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\build@ZPK@plot</span>{<span class="pl-c1">\temp@macro</span>}{<span class="pl-c1">\plot@macro</span>}{<span class="pl-c1">\approx</span>}{#3}</td>
+ </tr>
+ <tr>
+ <td id="L1362" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1362"></td>
+ <td id="LC1362" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td>
+ </tr>
+ <tr>
+ <td id="L1363" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1363"></td>
+ <td id="LC1363" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\build@ZPK@plot</span>{<span class="pl-c1">\plot@macro</span>}{<span class="pl-c1">\temp@macro</span>}{<span class="pl-c1">\approx</span>}{#3}</td>
+ </tr>
+ <tr>
+ <td id="L1364" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1364"></td>
+ <td id="LC1364" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td>
+ </tr>
+ <tr>
+ <td id="L1365" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1365"></td>
+ <td id="LC1365" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\supplied@domain</span>{<span class="pl-c1">\pgfkeysvalueof</span>{/pgfplots/domain}}</td>
+ </tr>
+ <tr>
+ <td id="L1366" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1366"></td>
+ <td id="LC1366" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\domain@start</span>{<span class="pl-c1">\expandafter\get@interval@start\supplied@domain\@nil</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1367" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1367"></td>
+ <td id="LC1367" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\domain@end</span>{<span class="pl-c1">\expandafter\get@interval@end\supplied@domain\@nil</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1368" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1368"></td>
+ <td id="LC1368" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\if</span>@pgfarg</td>
+ </tr>
+ <tr>
+ <td id="L1369" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1369"></td>
+ <td id="LC1369" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\temp@cmd</span>{<span class="pl-c1">\noexpand\addplot</span> [freq@filter, domain=<span class="pl-c1">\domain@start</span>*<span class="pl-c1">\freq@scale</span>:<span class="pl-c1">\domain@end</span>*<span class="pl-c1">\freq@scale</span>, variable=t, thick, <span class="pl-c1">\opt</span>]}</td>
+ </tr>
+ <tr>
+ <td id="L1370" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1370"></td>
+ <td id="LC1370" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\temp@cmd</span> {<span class="pl-c1">\plot@macro</span>};</td>
+ </tr>
+ <tr>
+ <td id="L1371" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1371"></td>
+ <td id="LC1371" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td>
+ </tr>
+ <tr>
+ <td id="L1372" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1372"></td>
+ <td id="LC1372" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\stepcounter</span>{gnuplot@id}</td>
+ </tr>
+ <tr>
+ <td id="L1373" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1373"></td>
+ <td id="LC1373" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\temp@cmd</span>{<span class="pl-c1">\noexpand\addplot</span> [variable=t, thick, <span class="pl-c1">\opt</span>]}</td>
+ </tr>
+ <tr>
+ <td id="L1374" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1374"></td>
+ <td id="LC1374" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\temp@cmd</span> gnuplot [raw gnuplot, gnuplot@prefix]</td>
+ </tr>
+ <tr>
+ <td id="L1375" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1375"></td>
+ <td id="LC1375" class="blob-code blob-code-inner js-file-line"> { set table <span class="pl-s"><span class="pl-pds">$</span>meta;</span></td>
+ </tr>
+ <tr>
+ <td id="L1376" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1376"></td>
+ <td id="LC1376" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set dummy t;</span></td>
+ </tr>
+ <tr>
+ <td id="L1377" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1377"></td>
+ <td id="LC1377" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set logscale x <span class="pl-c1">10</span>;</span></td>
+ </tr>
+ <tr>
+ <td id="L1378" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1378"></td>
+ <td id="LC1378" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set xrange [<span class="pl-c1">\domain</span>@start*<span class="pl-c1">\freq</span>@scale:<span class="pl-c1">\domain</span>@end*<span class="pl-c1">\freq</span>@scale];</span></td>
+ </tr>
+ <tr>
+ <td id="L1379" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1379"></td>
+ <td id="LC1379" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set samples <span class="pl-c1">\pgfkeysvalueof</span>{/pgfplots/samples};</span></td>
+ </tr>
+ <tr>
+ <td id="L1380" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1380"></td>
+ <td id="LC1380" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> plot <span class="pl-c1">\plot</span>@macro;</span></td>
+ </tr>
+ <tr>
+ <td id="L1381" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1381"></td>
+ <td id="LC1381" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set table &quot;<span class="pl-c1">\bodeplot</span>@prefix<span class="pl-c1">\arabic</span>{gnuplot@id}.table&quot;;</span></td>
+ </tr>
+ <tr>
+ <td id="L1382" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1382"></td>
+ <td id="LC1382" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> plot &quot;<span class="pl-pds">$</span></span>meta&quot; using (<span class="pl-s"><span class="pl-pds">$</span><span class="pl-c1">1</span>/(<span class="pl-c1">\freq</span>@scale)):(<span class="pl-pds">$</span></span>2);</td>
+ </tr>
+ <tr>
+ <td id="L1383" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1383"></td>
+ <td id="LC1383" class="blob-code blob-code-inner js-file-line"> };</td>
+ </tr>
+ <tr>
+ <td id="L1384" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1384"></td>
+ <td id="LC1384" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td>
+ </tr>
+ <tr>
+ <td id="L1385" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1385"></td>
+ <td id="LC1385" class="blob-code blob-code-inner js-file-line"> }</td>
+ </tr>
+ <tr>
+ <td id="L1386" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1386"></td>
+ <td id="LC1386" class="blob-code blob-code-inner js-file-line">}</td>
+ </tr>
+ <tr>
+ <td id="L1387" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1387"></td>
+ <td id="LC1387" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1388" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1388"></td>
+ <td id="LC1388" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>\end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L1389" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1389"></td>
+ <td id="LC1389" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\addBodeTFPlot}</span></td>
+ </tr>
+ <tr>
+ <td id="L1390" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1390"></td>
+ <td id="LC1390" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> This macro is designed to issues a single |\addplot| macros for the set of coefficients and delay. All of the work is done by the |\build@TF@plot| macro. \changes{v1.1.0}{2022/07/06}{Fixed phase wrapping in gnuplot mode}\changes{v1.1.1}{2022/07/31}{Enabled `Hz&#39; and `rad&#39; units for frequency and phase, respectively}</span></td>
+ </tr>
+ <tr>
+ <td id="L1391" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1391"></td>
+ <td id="LC1391" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1392" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1392"></td>
+ <td id="LC1392" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>{<span class="pl-c1">\addBodeTFPlot</span>}[3][thick]{</td>
+ </tr>
+ <tr>
+ <td id="L1393" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1393"></td>
+ <td id="LC1393" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\plot@macro</span>{}</td>
+ </tr>
+ <tr>
+ <td id="L1394" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1394"></td>
+ <td id="LC1394" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\temp@macro</span>{}</td>
+ </tr>
+ <tr>
+ <td id="L1395" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1395"></td>
+ <td id="LC1395" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\pdf@strcmp</span>{#2}{phase}=0</td>
+ </tr>
+ <tr>
+ <td id="L1396" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1396"></td>
+ <td id="LC1396" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\build@TF@plot</span>{<span class="pl-c1">\temp@macro</span>}{<span class="pl-c1">\plot@macro</span>}{#3}</td>
+ </tr>
+ <tr>
+ <td id="L1397" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1397"></td>
+ <td id="LC1397" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td>
+ </tr>
+ <tr>
+ <td id="L1398" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1398"></td>
+ <td id="LC1398" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\build@TF@plot</span>{<span class="pl-c1">\plot@macro</span>}{<span class="pl-c1">\temp@macro</span>}{#3}</td>
+ </tr>
+ <tr>
+ <td id="L1399" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1399"></td>
+ <td id="LC1399" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td>
+ </tr>
+ <tr>
+ <td id="L1400" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1400"></td>
+ <td id="LC1400" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\supplied@domain</span>{<span class="pl-c1">\pgfkeysvalueof</span>{/pgfplots/domain}}</td>
+ </tr>
+ <tr>
+ <td id="L1401" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1401"></td>
+ <td id="LC1401" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\domain@start</span>{<span class="pl-c1">\expandafter\get@interval@start\supplied@domain\@nil</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1402" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1402"></td>
+ <td id="LC1402" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\domain@end</span>{<span class="pl-c1">\expandafter\get@interval@end\supplied@domain\@nil</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1403" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1403"></td>
+ <td id="LC1403" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\if</span>@pgfarg</td>
+ </tr>
+ <tr>
+ <td id="L1404" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1404"></td>
+ <td id="LC1404" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\pdf@strcmp</span>{#2}{phase}=0</td>
+ </tr>
+ <tr>
+ <td id="L1405" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1405"></td>
+ <td id="LC1405" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\addplot</span> [freq@filter, domain=<span class="pl-c1">\domain@start</span>*<span class="pl-c1">\freq@scale</span>:<span class="pl-c1">\domain@end</span>*<span class="pl-c1">\freq@scale</span>, variable=t, #1]{<span class="pl-c1">\n@mod</span>{<span class="pl-c1">\plot@macro</span>}{2*pi}};</td>
+ </tr>
+ <tr>
+ <td id="L1406" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1406"></td>
+ <td id="LC1406" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td>
+ </tr>
+ <tr>
+ <td id="L1407" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1407"></td>
+ <td id="LC1407" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\addplot</span> [freq@filter, domain=<span class="pl-c1">\domain@start</span>*<span class="pl-c1">\freq@scale</span>:<span class="pl-c1">\domain@end</span>*<span class="pl-c1">\freq@scale</span>, variable=t, #1]{<span class="pl-c1">\plot@macro</span>};</td>
+ </tr>
+ <tr>
+ <td id="L1408" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1408"></td>
+ <td id="LC1408" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td>
+ </tr>
+ <tr>
+ <td id="L1409" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1409"></td>
+ <td id="LC1409" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td>
+ </tr>
+ <tr>
+ <td id="L1410" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1410"></td>
+ <td id="LC1410" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\stepcounter</span>{gnuplot@id}</td>
+ </tr>
+ <tr>
+ <td id="L1411" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1411"></td>
+ <td id="LC1411" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\pdf@strcmp</span>{#2}{phase}=0</td>
+ </tr>
+ <tr>
+ <td id="L1412" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1412"></td>
+ <td id="LC1412" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\addplot</span> [variable=t, #1] gnuplot [raw gnuplot, gnuplot@prefix]</td>
+ </tr>
+ <tr>
+ <td id="L1413" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1413"></td>
+ <td id="LC1413" class="blob-code blob-code-inner js-file-line"> { set table <span class="pl-s"><span class="pl-pds">$</span>meta;</span></td>
+ </tr>
+ <tr>
+ <td id="L1414" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1414"></td>
+ <td id="LC1414" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set dummy t;</span></td>
+ </tr>
+ <tr>
+ <td id="L1415" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1415"></td>
+ <td id="LC1415" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set logscale x <span class="pl-c1">10</span>;</span></td>
+ </tr>
+ <tr>
+ <td id="L1416" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1416"></td>
+ <td id="LC1416" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set trange [<span class="pl-c1">\domain</span>@start*<span class="pl-c1">\freq</span>@scale:<span class="pl-c1">\domain</span>@end*<span class="pl-c1">\freq</span>@scale];</span></td>
+ </tr>
+ <tr>
+ <td id="L1417" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1417"></td>
+ <td id="LC1417" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set samples <span class="pl-c1">\pgfkeysvalueof</span>{/pgfplots/samples};</span></td>
+ </tr>
+ <tr>
+ <td id="L1418" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1418"></td>
+ <td id="LC1418" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> plot &#39;+&#39; using (t) : ((<span class="pl-c1">\plot</span>@macro)/(<span class="pl-c1">\ph</span>@scale)) smooth unwrap;</span></td>
+ </tr>
+ <tr>
+ <td id="L1419" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1419"></td>
+ <td id="LC1419" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set table &quot;<span class="pl-c1">\bodeplot</span>@prefix<span class="pl-c1">\arabic</span>{gnuplot@id}.table&quot;;</span></td>
+ </tr>
+ <tr>
+ <td id="L1420" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1420"></td>
+ <td id="LC1420" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> plot &quot;<span class="pl-pds">$</span></span>meta&quot; using (<span class="pl-s"><span class="pl-pds">$</span><span class="pl-c1">1</span>/(<span class="pl-c1">\freq</span>@scale)):(<span class="pl-pds">$</span></span>2*<span class="pl-c1">\ph@scale</span>);</td>
+ </tr>
+ <tr>
+ <td id="L1421" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1421"></td>
+ <td id="LC1421" class="blob-code blob-code-inner js-file-line"> };</td>
+ </tr>
+ <tr>
+ <td id="L1422" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1422"></td>
+ <td id="LC1422" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td>
+ </tr>
+ <tr>
+ <td id="L1423" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1423"></td>
+ <td id="LC1423" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\addplot</span> [variable=t, #1] gnuplot [raw gnuplot, gnuplot@prefix]</td>
+ </tr>
+ <tr>
+ <td id="L1424" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1424"></td>
+ <td id="LC1424" class="blob-code blob-code-inner js-file-line"> { set table <span class="pl-s"><span class="pl-pds">$</span>meta;</span></td>
+ </tr>
+ <tr>
+ <td id="L1425" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1425"></td>
+ <td id="LC1425" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set dummy t;</span></td>
+ </tr>
+ <tr>
+ <td id="L1426" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1426"></td>
+ <td id="LC1426" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set logscale x <span class="pl-c1">10</span>;</span></td>
+ </tr>
+ <tr>
+ <td id="L1427" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1427"></td>
+ <td id="LC1427" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set xrange [<span class="pl-c1">\domain</span>@start*<span class="pl-c1">\freq</span>@scale:<span class="pl-c1">\domain</span>@end*<span class="pl-c1">\freq</span>@scale];</span></td>
+ </tr>
+ <tr>
+ <td id="L1428" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1428"></td>
+ <td id="LC1428" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set samples <span class="pl-c1">\pgfkeysvalueof</span>{/pgfplots/samples};</span></td>
+ </tr>
+ <tr>
+ <td id="L1429" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1429"></td>
+ <td id="LC1429" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> plot <span class="pl-c1">\plot</span>@macro;</span></td>
+ </tr>
+ <tr>
+ <td id="L1430" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1430"></td>
+ <td id="LC1430" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set table &quot;<span class="pl-c1">\bodeplot</span>@prefix<span class="pl-c1">\arabic</span>{gnuplot@id}.table&quot;;</span></td>
+ </tr>
+ <tr>
+ <td id="L1431" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1431"></td>
+ <td id="LC1431" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> plot &quot;<span class="pl-pds">$</span></span>meta&quot; using (<span class="pl-s"><span class="pl-pds">$</span><span class="pl-c1">1</span>/(<span class="pl-c1">\freq</span>@scale)):(<span class="pl-pds">$</span></span>2);</td>
+ </tr>
+ <tr>
+ <td id="L1432" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1432"></td>
+ <td id="LC1432" class="blob-code blob-code-inner js-file-line"> };</td>
+ </tr>
+ <tr>
+ <td id="L1433" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1433"></td>
+ <td id="LC1433" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td>
+ </tr>
+ <tr>
+ <td id="L1434" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1434"></td>
+ <td id="LC1434" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td>
+ </tr>
+ <tr>
+ <td id="L1435" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1435"></td>
+ <td id="LC1435" class="blob-code blob-code-inner js-file-line">}</td>
+ </tr>
+ <tr>
+ <td id="L1436" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1436"></td>
+ <td id="LC1436" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1437" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1437"></td>
+ <td id="LC1437" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>\end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L1438" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1438"></td>
+ <td id="LC1438" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\addBodeComponentPlot}</span></td>
+ </tr>
+ <tr>
+ <td id="L1439" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1439"></td>
+ <td id="LC1439" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> This macro is designed to issue a single |\addplot| macro capable of plotting linear combinations of the basic components described in Section \ref{sec:BasicComponents}. The only work to do here is to handle the |pgf| package option.\changes{v1.1.1}{2022/07/31}{Enabled `Hz&#39; and `rad&#39; units for frequency and phase, respectively}</span></td>
+ </tr>
+ <tr>
+ <td id="L1440" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1440"></td>
+ <td id="LC1440" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1441" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1441"></td>
+ <td id="LC1441" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>{<span class="pl-c1">\addBodeComponentPlot</span>}[2][thick]{</td>
+ </tr>
+ <tr>
+ <td id="L1442" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1442"></td>
+ <td id="LC1442" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\supplied@domain</span>{<span class="pl-c1">\pgfkeysvalueof</span>{/pgfplots/domain}}</td>
+ </tr>
+ <tr>
+ <td id="L1443" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1443"></td>
+ <td id="LC1443" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\domain@start</span>{<span class="pl-c1">\expandafter\get@interval@start\supplied@domain\@nil</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1444" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1444"></td>
+ <td id="LC1444" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\domain@end</span>{<span class="pl-c1">\expandafter\get@interval@end\supplied@domain\@nil</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1445" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1445"></td>
+ <td id="LC1445" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\if</span>@pgfarg</td>
+ </tr>
+ <tr>
+ <td id="L1446" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1446"></td>
+ <td id="LC1446" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\addplot</span> [freq@filter, domain=<span class="pl-c1">\domain@start</span>*<span class="pl-c1">\freq@scale</span>:<span class="pl-c1">\domain@end</span>*<span class="pl-c1">\freq@scale</span>, variable=t, #1] {#2};</td>
+ </tr>
+ <tr>
+ <td id="L1447" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1447"></td>
+ <td id="LC1447" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td>
+ </tr>
+ <tr>
+ <td id="L1448" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1448"></td>
+ <td id="LC1448" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\stepcounter</span>{gnuplot@id}</td>
+ </tr>
+ <tr>
+ <td id="L1449" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1449"></td>
+ <td id="LC1449" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\addplot</span> [variable=t, #1] gnuplot [raw gnuplot, gnuplot@prefix]</td>
+ </tr>
+ <tr>
+ <td id="L1450" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1450"></td>
+ <td id="LC1450" class="blob-code blob-code-inner js-file-line"> { set table <span class="pl-s"><span class="pl-pds">$</span>meta;</span></td>
+ </tr>
+ <tr>
+ <td id="L1451" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1451"></td>
+ <td id="LC1451" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set dummy t;</span></td>
+ </tr>
+ <tr>
+ <td id="L1452" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1452"></td>
+ <td id="LC1452" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set logscale x <span class="pl-c1">10</span>;</span></td>
+ </tr>
+ <tr>
+ <td id="L1453" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1453"></td>
+ <td id="LC1453" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set xrange [<span class="pl-c1">\domain</span>@start*<span class="pl-c1">\freq</span>@scale:<span class="pl-c1">\domain</span>@end*<span class="pl-c1">\freq</span>@scale];</span></td>
+ </tr>
+ <tr>
+ <td id="L1454" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1454"></td>
+ <td id="LC1454" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set samples <span class="pl-c1">\pgfkeysvalueof</span>{/pgfplots/samples};</span></td>
+ </tr>
+ <tr>
+ <td id="L1455" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1455"></td>
+ <td id="LC1455" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> plot #<span class="pl-c1">2</span>;</span></td>
+ </tr>
+ <tr>
+ <td id="L1456" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1456"></td>
+ <td id="LC1456" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set table &quot;<span class="pl-c1">\bodeplot</span>@prefix<span class="pl-c1">\arabic</span>{gnuplot@id}.table&quot;;</span></td>
+ </tr>
+ <tr>
+ <td id="L1457" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1457"></td>
+ <td id="LC1457" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> plot &quot;<span class="pl-pds">$</span></span>meta&quot; using (<span class="pl-s"><span class="pl-pds">$</span><span class="pl-c1">1</span>/(<span class="pl-c1">\freq</span>@scale)):(<span class="pl-pds">$</span></span>2);</td>
+ </tr>
+ <tr>
+ <td id="L1458" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1458"></td>
+ <td id="LC1458" class="blob-code blob-code-inner js-file-line"> };</td>
+ </tr>
+ <tr>
+ <td id="L1459" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1459"></td>
+ <td id="LC1459" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td>
+ </tr>
+ <tr>
+ <td id="L1460" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1460"></td>
+ <td id="LC1460" class="blob-code blob-code-inner js-file-line">}</td>
+ </tr>
+ <tr>
+ <td id="L1461" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1461"></td>
+ <td id="LC1461" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1462" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1462"></td>
+ <td id="LC1462" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>\end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L1463" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1463"></td>
+ <td id="LC1463" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{environment}{BodePhPlot}</span></td>
+ </tr>
+ <tr>
+ <td id="L1464" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1464"></td>
+ <td id="LC1464" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> An environment to host phase plot macros that pass parametric functions to |\addplot| macros. Uses the defaults specified in |bode@style| to create a shortcut that includes the |tikzpicture| and |semilogaxis| environments.\changes{v1.1.0}{2022/07/20}{Added separate environments for phase and magnitude plots}\changes{v1.1.1}{2022/07/31}{Enabled `Hz&#39; and `rad&#39; units for frequency and phase, respectively}\changes{v1.1.2}{2022/10/29}{Defined using the `NewEnviron&#39; command from the `environ&#39; package to fix conflicts with externalization}</span></td>
+ </tr>
+ <tr>
+ <td id="L1465" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1465"></td>
+ <td id="LC1465" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1466" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1466"></td>
+ <td id="LC1466" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\NewEnviron</span>{BodePhPlot}[3][]{</td>
+ </tr>
+ <tr>
+ <td id="L1467" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1467"></td>
+ <td id="LC1467" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\parse@env@opt</span>{#1}</td>
+ </tr>
+ <tr>
+ <td id="L1468" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1468"></td>
+ <td id="LC1468" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\temp@cmd</span>{<span class="pl-c1">\noexpand</span><span class="pl-c1">\begin</span>{<span class="pl-smi">tikzpicture</span>} [<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt@tikz</span>}]</td>
+ </tr>
+ <tr>
+ <td id="L1469" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1469"></td>
+ <td id="LC1469" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\noexpand</span><span class="pl-c1">\begin</span>{<span class="pl-smi">semilogxaxis</span>}[</td>
+ </tr>
+ <tr>
+ <td id="L1470" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1470"></td>
+ <td id="LC1470" class="blob-code blob-code-inner js-file-line"> ph@y@label,</td>
+ </tr>
+ <tr>
+ <td id="L1471" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1471"></td>
+ <td id="LC1471" class="blob-code blob-code-inner js-file-line"> freq@label,</td>
+ </tr>
+ <tr>
+ <td id="L1472" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1472"></td>
+ <td id="LC1472" class="blob-code blob-code-inner js-file-line"> bode@style,</td>
+ </tr>
+ <tr>
+ <td id="L1473" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1473"></td>
+ <td id="LC1473" class="blob-code blob-code-inner js-file-line"> xmin={#2},</td>
+ </tr>
+ <tr>
+ <td id="L1474" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1474"></td>
+ <td id="LC1474" class="blob-code blob-code-inner js-file-line"> xmax={#3},</td>
+ </tr>
+ <tr>
+ <td id="L1475" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1475"></td>
+ <td id="LC1475" class="blob-code blob-code-inner js-file-line"> domain=#2:#3,</td>
+ </tr>
+ <tr>
+ <td id="L1476" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1476"></td>
+ <td id="LC1476" class="blob-code blob-code-inner js-file-line"> height=2.5cm,</td>
+ </tr>
+ <tr>
+ <td id="L1477" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1477"></td>
+ <td id="LC1477" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt@axes</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1478" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1478"></td>
+ <td id="LC1478" class="blob-code blob-code-inner js-file-line"> ]</td>
+ </tr>
+ <tr>
+ <td id="L1479" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1479"></td>
+ <td id="LC1479" class="blob-code blob-code-inner js-file-line"> }</td>
+ </tr>
+ <tr>
+ <td id="L1480" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1480"></td>
+ <td id="LC1480" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\temp@cmd</span></td>
+ </tr>
+ <tr>
+ <td id="L1481" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1481"></td>
+ <td id="LC1481" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\BODY</span></td>
+ </tr>
+ <tr>
+ <td id="L1482" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1482"></td>
+ <td id="LC1482" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\end</span>{<span class="pl-smi">semilogxaxis</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1483" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1483"></td>
+ <td id="LC1483" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\end</span>{<span class="pl-smi">tikzpicture</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1484" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1484"></td>
+ <td id="LC1484" class="blob-code blob-code-inner js-file-line">}</td>
+ </tr>
+ <tr>
+ <td id="L1485" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1485"></td>
+ <td id="LC1485" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1486" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1486"></td>
+ <td id="LC1486" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{environment}</span></td>
+ </tr>
+ <tr>
+ <td id="L1487" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1487"></td>
+ <td id="LC1487" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{environment}{BodeMagPlot}</span></td>
+ </tr>
+ <tr>
+ <td id="L1488" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1488"></td>
+ <td id="LC1488" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> An environment to host magnitude plot macros that pass parametric functions to |\addplot| macros. Uses the defaults specified in |bode@style| to create a shortcut that includes the |tikzpicture| and |semilogaxis| environments.\changes{v1.1.0}{2022/07/20}{Added separate environments for phase and magnitude plots}\changes{v1.1.1}{2022/07/31}{Enabled `Hz&#39; and `rad&#39; units for frequency and phase, respectively}\changes{v1.1.2}{2022/10/29}{Defined using the `NewEnviron&#39; command from the `environ&#39; package to fix conflicts with externalization}</span></td>
+ </tr>
+ <tr>
+ <td id="L1489" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1489"></td>
+ <td id="LC1489" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1490" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1490"></td>
+ <td id="LC1490" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\NewEnviron</span>{BodeMagPlot}[3][]{</td>
+ </tr>
+ <tr>
+ <td id="L1491" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1491"></td>
+ <td id="LC1491" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\parse@env@opt</span>{#1}</td>
+ </tr>
+ <tr>
+ <td id="L1492" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1492"></td>
+ <td id="LC1492" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\temp@cmd</span>{<span class="pl-c1">\noexpand</span><span class="pl-c1">\begin</span>{<span class="pl-smi">tikzpicture</span>} [<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt@tikz</span>}]</td>
+ </tr>
+ <tr>
+ <td id="L1493" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1493"></td>
+ <td id="LC1493" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\noexpand</span><span class="pl-c1">\begin</span>{<span class="pl-smi">semilogxaxis</span>}[</td>
+ </tr>
+ <tr>
+ <td id="L1494" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1494"></td>
+ <td id="LC1494" class="blob-code blob-code-inner js-file-line"> bode@style,</td>
+ </tr>
+ <tr>
+ <td id="L1495" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1495"></td>
+ <td id="LC1495" class="blob-code blob-code-inner js-file-line"> freq@label,</td>
+ </tr>
+ <tr>
+ <td id="L1496" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1496"></td>
+ <td id="LC1496" class="blob-code blob-code-inner js-file-line"> xmin={#2},</td>
+ </tr>
+ <tr>
+ <td id="L1497" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1497"></td>
+ <td id="LC1497" class="blob-code blob-code-inner js-file-line"> xmax={#3},</td>
+ </tr>
+ <tr>
+ <td id="L1498" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1498"></td>
+ <td id="LC1498" class="blob-code blob-code-inner js-file-line"> domain=#2:#3,</td>
+ </tr>
+ <tr>
+ <td id="L1499" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1499"></td>
+ <td id="LC1499" class="blob-code blob-code-inner js-file-line"> height=2.5cm,</td>
+ </tr>
+ <tr>
+ <td id="L1500" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1500"></td>
+ <td id="LC1500" class="blob-code blob-code-inner js-file-line"> ylabel={Gain (dB)},</td>
+ </tr>
+ <tr>
+ <td id="L1501" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1501"></td>
+ <td id="LC1501" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt@axes</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1502" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1502"></td>
+ <td id="LC1502" class="blob-code blob-code-inner js-file-line"> ]</td>
+ </tr>
+ <tr>
+ <td id="L1503" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1503"></td>
+ <td id="LC1503" class="blob-code blob-code-inner js-file-line"> }</td>
+ </tr>
+ <tr>
+ <td id="L1504" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1504"></td>
+ <td id="LC1504" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\temp@cmd</span></td>
+ </tr>
+ <tr>
+ <td id="L1505" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1505"></td>
+ <td id="LC1505" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\BODY</span></td>
+ </tr>
+ <tr>
+ <td id="L1506" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1506"></td>
+ <td id="LC1506" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\end</span>{<span class="pl-smi">semilogxaxis</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1507" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1507"></td>
+ <td id="LC1507" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\end</span>{<span class="pl-smi">tikzpicture</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1508" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1508"></td>
+ <td id="LC1508" class="blob-code blob-code-inner js-file-line">}</td>
+ </tr>
+ <tr>
+ <td id="L1509" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1509"></td>
+ <td id="LC1509" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1510" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1510"></td>
+ <td id="LC1510" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{environment}</span></td>
+ </tr>
+ <tr>
+ <td id="L1511" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1511"></td>
+ <td id="LC1511" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{environment}{BodePlot}</span></td>
+ </tr>
+ <tr>
+ <td id="L1512" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1512"></td>
+ <td id="LC1512" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> Same as |BodeMagPlot|. The |BodePlot| environment is deprecated as of v1.1.0, please use the |BodePhPlot| and |BodeMagPlot| environments instead.\changes{v1.0.3}{2021/11/03}{Added tikz option to environments}\changes{v1.1.0}{2022/02/20}{Deprecated BodePlot environment}\changes{v1.1.1}{2022/07/31}{Enabled `Hz&#39; and `rad&#39; units for frequency and phase, respectively}\changes{v1.1.2}{2022/10/29}{Defined using the `NewEnviron&#39; command from the `environ&#39; package to fix conflicts with externalization}</span></td>
+ </tr>
+ <tr>
+ <td id="L1513" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1513"></td>
+ <td id="LC1513" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1514" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1514"></td>
+ <td id="LC1514" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\NewEnviron</span>{BodePlot}[3][]{</td>
+ </tr>
+ <tr>
+ <td id="L1515" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1515"></td>
+ <td id="LC1515" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\parse@env@opt</span>{#1}</td>
+ </tr>
+ <tr>
+ <td id="L1516" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1516"></td>
+ <td id="LC1516" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\temp@cmd</span>{<span class="pl-c1">\noexpand</span><span class="pl-c1">\begin</span>{<span class="pl-smi">tikzpicture</span>} [<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt@tikz</span>}]</td>
+ </tr>
+ <tr>
+ <td id="L1517" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1517"></td>
+ <td id="LC1517" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\noexpand</span><span class="pl-c1">\begin</span>{<span class="pl-smi">semilogxaxis</span>}[</td>
+ </tr>
+ <tr>
+ <td id="L1518" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1518"></td>
+ <td id="LC1518" class="blob-code blob-code-inner js-file-line"> bode@style,</td>
+ </tr>
+ <tr>
+ <td id="L1519" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1519"></td>
+ <td id="LC1519" class="blob-code blob-code-inner js-file-line"> freq@label,</td>
+ </tr>
+ <tr>
+ <td id="L1520" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1520"></td>
+ <td id="LC1520" class="blob-code blob-code-inner js-file-line"> xmin={#2},</td>
+ </tr>
+ <tr>
+ <td id="L1521" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1521"></td>
+ <td id="LC1521" class="blob-code blob-code-inner js-file-line"> xmax={#3},</td>
+ </tr>
+ <tr>
+ <td id="L1522" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1522"></td>
+ <td id="LC1522" class="blob-code blob-code-inner js-file-line"> domain=#2:#3,</td>
+ </tr>
+ <tr>
+ <td id="L1523" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1523"></td>
+ <td id="LC1523" class="blob-code blob-code-inner js-file-line"> height=2.5cm,</td>
+ </tr>
+ <tr>
+ <td id="L1524" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1524"></td>
+ <td id="LC1524" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt@axes</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1525" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1525"></td>
+ <td id="LC1525" class="blob-code blob-code-inner js-file-line"> ]</td>
+ </tr>
+ <tr>
+ <td id="L1526" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1526"></td>
+ <td id="LC1526" class="blob-code blob-code-inner js-file-line"> }</td>
+ </tr>
+ <tr>
+ <td id="L1527" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1527"></td>
+ <td id="LC1527" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\temp@cmd</span></td>
+ </tr>
+ <tr>
+ <td id="L1528" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1528"></td>
+ <td id="LC1528" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\BODY</span></td>
+ </tr>
+ <tr>
+ <td id="L1529" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1529"></td>
+ <td id="LC1529" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\end</span>{<span class="pl-smi">semilogxaxis</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1530" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1530"></td>
+ <td id="LC1530" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\end</span>{<span class="pl-smi">tikzpicture</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1531" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1531"></td>
+ <td id="LC1531" class="blob-code blob-code-inner js-file-line">}</td>
+ </tr>
+ <tr>
+ <td id="L1532" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1532"></td>
+ <td id="LC1532" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1533" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1533"></td>
+ <td id="LC1533" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{environment}</span></td>
+ </tr>
+ <tr>
+ <td id="L1534" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1534"></td>
+ <td id="LC1534" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \subsubsection{Internal macros}</span></td>
+ </tr>
+ <tr>
+ <td id="L1535" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1535"></td>
+ <td id="LC1535" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\add@feature}</span></td>
+ </tr>
+ <tr>
+ <td id="L1536" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1536"></td>
+ <td id="LC1536" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> This is an internal macro to add a basic component (pole, zero, gain, or delay), described using one of the macros in Section \ref{sec:BasicComponents} (input |#2|), to a parametric function stored in a global macro (input |#1|). The basic component value (input |#3|) is a complex number of the form |{re,im}|. If the imaginary part is missing, it is assumed to be zero. Implementation made possible by \href{https://tex.stackexchange.com/a/619637/110602}{this StackExchange answer}.</span></td>
+ </tr>
+ <tr>
+ <td id="L1537" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1537"></td>
+ <td id="LC1537" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1538" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1538"></td>
+ <td id="LC1538" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\add@feature</span>}[3]{</td>
+ </tr>
+ <tr>
+ <td id="L1539" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1539"></td>
+ <td id="LC1539" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifcat</span><span class="pl-s"><span class="pl-pds">$</span><span class="pl-c1">\detokenize\expandafter</span>{#1}<span class="pl-pds">$</span></span></td>
+ </tr>
+ <tr>
+ <td id="L1540" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1540"></td>
+ <td id="LC1540" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef</span>#1{<span class="pl-c1">\unexpanded\expandafter</span>{#1 0+#2}}</td>
+ </tr>
+ <tr>
+ <td id="L1541" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1541"></td>
+ <td id="LC1541" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td>
+ </tr>
+ <tr>
+ <td id="L1542" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1542"></td>
+ <td id="LC1542" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef</span>#1{<span class="pl-c1">\unexpanded\expandafter</span>{#1+#2}}</td>
+ </tr>
+ <tr>
+ <td id="L1543" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1543"></td>
+ <td id="LC1543" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td>
+ </tr>
+ <tr>
+ <td id="L1544" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1544"></td>
+ <td id="LC1544" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\foreach</span> <span class="pl-c1">\y</span> [count=<span class="pl-c1">\n</span>] in #3 {</td>
+ </tr>
+ <tr>
+ <td id="L1545" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1545"></td>
+ <td id="LC1545" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef</span>#1{<span class="pl-c1">\unexpanded\expandafter</span>{#1}{<span class="pl-c1">\y</span>}}</td>
+ </tr>
+ <tr>
+ <td id="L1546" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1546"></td>
+ <td id="LC1546" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef\Last@LoopValue</span>{<span class="pl-c1">\n</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1547" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1547"></td>
+ <td id="LC1547" class="blob-code blob-code-inner js-file-line"> }</td>
+ </tr>
+ <tr>
+ <td id="L1548" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1548"></td>
+ <td id="LC1548" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\Last@LoopValue</span>=1</td>
+ </tr>
+ <tr>
+ <td id="L1549" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1549"></td>
+ <td id="LC1549" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef</span>#1{<span class="pl-c1">\unexpanded\expandafter</span>{#1}{0}}</td>
+ </tr>
+ <tr>
+ <td id="L1550" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1550"></td>
+ <td id="LC1550" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td>
+ </tr>
+ <tr>
+ <td id="L1551" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1551"></td>
+ <td id="LC1551" class="blob-code blob-code-inner js-file-line">}</td>
+ </tr>
+ <tr>
+ <td id="L1552" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1552"></td>
+ <td id="LC1552" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1553" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1553"></td>
+ <td id="LC1553" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>\end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L1554" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1554"></td>
+ <td id="LC1554" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\build@ZPK@plot}</span></td>
+ </tr>
+ <tr>
+ <td id="L1555" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1555"></td>
+ <td id="LC1555" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> This is an internal macro to build parametric Bode magnitude and phase plots by concatenating basic component (pole, zero, gain, or delay) macros (Section \ref{sec:BasicComponents}) to global magnitude and phase macros (inputs |#1| and |#2|). The |\add@feature| macro is used to do the concatenation. The basic component macros are inferred from a |feature/{values}| list, where |feature| is one of |z|,|p|,|k|, and |d|, for zeros, poles, gain, and delay, respectively, and |{values}| is a comma separated list of comma separated lists (complex numbers of the form |{re,im}|). If the imaginary part is missing, it is assumed to be zero.</span></td>
+ </tr>
+ <tr>
+ <td id="L1556" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1556"></td>
+ <td id="LC1556" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1557" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1557"></td>
+ <td id="LC1557" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>{<span class="pl-c1">\build@ZPK@plot</span>}[4]{</td>
+ </tr>
+ <tr>
+ <td id="L1558" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1558"></td>
+ <td id="LC1558" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\foreach</span> <span class="pl-c1">\feature</span>/<span class="pl-c1">\values</span> in {#4} {</td>
+ </tr>
+ <tr>
+ <td id="L1559" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1559"></td>
+ <td id="LC1559" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\pdf@strcmp</span>{<span class="pl-c1">\feature</span>}{z}=0</td>
+ </tr>
+ <tr>
+ <td id="L1560" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1560"></td>
+ <td id="LC1560" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\foreach</span> <span class="pl-c1">\z</span> in <span class="pl-c1">\values</span> {</td>
+ </tr>
+ <tr>
+ <td id="L1561" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1561"></td>
+ <td id="LC1561" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\pdf@strcmp</span>{#3}{linear}=0</td>
+ </tr>
+ <tr>
+ <td id="L1562" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1562"></td>
+ <td id="LC1562" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\add@feature</span>{#2}{<span class="pl-c1">\PhZeroLin</span>}{<span class="pl-c1">\z</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1563" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1563"></td>
+ <td id="LC1563" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\add@feature</span>{#1}{<span class="pl-c1">\MagZeroLin</span>}{<span class="pl-c1">\z</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1564" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1564"></td>
+ <td id="LC1564" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td>
+ </tr>
+ <tr>
+ <td id="L1565" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1565"></td>
+ <td id="LC1565" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\pdf@strcmp</span>{#3}{asymptotic}=0</td>
+ </tr>
+ <tr>
+ <td id="L1566" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1566"></td>
+ <td id="LC1566" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\add@feature</span>{#2}{<span class="pl-c1">\PhZeroAsymp</span>}{<span class="pl-c1">\z</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1567" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1567"></td>
+ <td id="LC1567" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\add@feature</span>{#1}{<span class="pl-c1">\MagZeroAsymp</span>}{<span class="pl-c1">\z</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1568" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1568"></td>
+ <td id="LC1568" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td>
+ </tr>
+ <tr>
+ <td id="L1569" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1569"></td>
+ <td id="LC1569" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\add@feature</span>{#2}{<span class="pl-c1">\PhZero</span>}{<span class="pl-c1">\z</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1570" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1570"></td>
+ <td id="LC1570" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\add@feature</span>{#1}{<span class="pl-c1">\MagZero</span>}{<span class="pl-c1">\z</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1571" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1571"></td>
+ <td id="LC1571" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td>
+ </tr>
+ <tr>
+ <td id="L1572" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1572"></td>
+ <td id="LC1572" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td>
+ </tr>
+ <tr>
+ <td id="L1573" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1573"></td>
+ <td id="LC1573" class="blob-code blob-code-inner js-file-line"> }</td>
+ </tr>
+ <tr>
+ <td id="L1574" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1574"></td>
+ <td id="LC1574" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td>
+ </tr>
+ <tr>
+ <td id="L1575" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1575"></td>
+ <td id="LC1575" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\pdf@strcmp</span>{<span class="pl-c1">\feature</span>}{p}=0</td>
+ </tr>
+ <tr>
+ <td id="L1576" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1576"></td>
+ <td id="LC1576" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\foreach</span> <span class="pl-c1">\p</span> in <span class="pl-c1">\values</span> {</td>
+ </tr>
+ <tr>
+ <td id="L1577" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1577"></td>
+ <td id="LC1577" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\pdf@strcmp</span>{#3}{linear}=0</td>
+ </tr>
+ <tr>
+ <td id="L1578" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1578"></td>
+ <td id="LC1578" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\add@feature</span>{#2}{<span class="pl-c1">\PhPoleLin</span>}{<span class="pl-c1">\p</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1579" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1579"></td>
+ <td id="LC1579" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\add@feature</span>{#1}{<span class="pl-c1">\MagPoleLin</span>}{<span class="pl-c1">\p</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1580" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1580"></td>
+ <td id="LC1580" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td>
+ </tr>
+ <tr>
+ <td id="L1581" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1581"></td>
+ <td id="LC1581" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\pdf@strcmp</span>{#3}{asymptotic}=0</td>
+ </tr>
+ <tr>
+ <td id="L1582" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1582"></td>
+ <td id="LC1582" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\add@feature</span>{#2}{<span class="pl-c1">\PhPoleAsymp</span>}{<span class="pl-c1">\p</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1583" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1583"></td>
+ <td id="LC1583" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\add@feature</span>{#1}{<span class="pl-c1">\MagPoleAsymp</span>}{<span class="pl-c1">\p</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1584" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1584"></td>
+ <td id="LC1584" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td>
+ </tr>
+ <tr>
+ <td id="L1585" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1585"></td>
+ <td id="LC1585" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\add@feature</span>{#2}{<span class="pl-c1">\PhPole</span>}{<span class="pl-c1">\p</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1586" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1586"></td>
+ <td id="LC1586" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\add@feature</span>{#1}{<span class="pl-c1">\MagPole</span>}{<span class="pl-c1">\p</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1587" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1587"></td>
+ <td id="LC1587" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td>
+ </tr>
+ <tr>
+ <td id="L1588" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1588"></td>
+ <td id="LC1588" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td>
+ </tr>
+ <tr>
+ <td id="L1589" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1589"></td>
+ <td id="LC1589" class="blob-code blob-code-inner js-file-line"> }</td>
+ </tr>
+ <tr>
+ <td id="L1590" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1590"></td>
+ <td id="LC1590" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td>
+ </tr>
+ <tr>
+ <td id="L1591" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1591"></td>
+ <td id="LC1591" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\pdf@strcmp</span>{<span class="pl-c1">\feature</span>}{k}=0</td>
+ </tr>
+ <tr>
+ <td id="L1592" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1592"></td>
+ <td id="LC1592" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\pdf@strcmp</span>{#3}{linear}=0</td>
+ </tr>
+ <tr>
+ <td id="L1593" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1593"></td>
+ <td id="LC1593" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\add@feature</span>{#2}{<span class="pl-c1">\PhKLin</span>}{<span class="pl-c1">\values</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1594" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1594"></td>
+ <td id="LC1594" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\add@feature</span>{#1}{<span class="pl-c1">\MagKLin</span>}{<span class="pl-c1">\values</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1595" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1595"></td>
+ <td id="LC1595" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td>
+ </tr>
+ <tr>
+ <td id="L1596" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1596"></td>
+ <td id="LC1596" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\pdf@strcmp</span>{#3}{asymptotic}=0</td>
+ </tr>
+ <tr>
+ <td id="L1597" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1597"></td>
+ <td id="LC1597" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\add@feature</span>{#2}{<span class="pl-c1">\PhKAsymp</span>}{<span class="pl-c1">\values</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1598" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1598"></td>
+ <td id="LC1598" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\add@feature</span>{#1}{<span class="pl-c1">\MagKAsymp</span>}{<span class="pl-c1">\values</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1599" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1599"></td>
+ <td id="LC1599" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td>
+ </tr>
+ <tr>
+ <td id="L1600" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1600"></td>
+ <td id="LC1600" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\add@feature</span>{#2}{<span class="pl-c1">\PhK</span>}{<span class="pl-c1">\values</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1601" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1601"></td>
+ <td id="LC1601" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\add@feature</span>{#1}{<span class="pl-c1">\MagK</span>}{<span class="pl-c1">\values</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1602" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1602"></td>
+ <td id="LC1602" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td>
+ </tr>
+ <tr>
+ <td id="L1603" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1603"></td>
+ <td id="LC1603" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td>
+ </tr>
+ <tr>
+ <td id="L1604" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1604"></td>
+ <td id="LC1604" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td>
+ </tr>
+ <tr>
+ <td id="L1605" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1605"></td>
+ <td id="LC1605" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\pdf@strcmp</span>{<span class="pl-c1">\feature</span>}{d}=0</td>
+ </tr>
+ <tr>
+ <td id="L1606" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1606"></td>
+ <td id="LC1606" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\pdf@strcmp</span>{#3}{linear}=0</td>
+ </tr>
+ <tr>
+ <td id="L1607" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1607"></td>
+ <td id="LC1607" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\PackageError</span> {bodeplot} {Linear approximation for pure delays is not</td>
+ </tr>
+ <tr>
+ <td id="L1608" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1608"></td>
+ <td id="LC1608" class="blob-code blob-code-inner js-file-line"> supported.} {Plot the true Bode plot using `true&#39; instead of `linear&#39;.}</td>
+ </tr>
+ <tr>
+ <td id="L1609" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1609"></td>
+ <td id="LC1609" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td>
+ </tr>
+ <tr>
+ <td id="L1610" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1610"></td>
+ <td id="LC1610" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\pdf@strcmp</span>{#3}{asymptotic}=0</td>
+ </tr>
+ <tr>
+ <td id="L1611" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1611"></td>
+ <td id="LC1611" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\PackageError</span> {bodeplot} {Asymptotic approximation for pure delays is not</td>
+ </tr>
+ <tr>
+ <td id="L1612" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1612"></td>
+ <td id="LC1612" class="blob-code blob-code-inner js-file-line"> supported.} {Plot the true Bode plot using `true&#39; instead of `asymptotic&#39;.}</td>
+ </tr>
+ <tr>
+ <td id="L1613" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1613"></td>
+ <td id="LC1613" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td>
+ </tr>
+ <tr>
+ <td id="L1614" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1614"></td>
+ <td id="LC1614" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifdim</span><span class="pl-c1">\values</span> pt &lt; 0pt</td>
+ </tr>
+ <tr>
+ <td id="L1615" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1615"></td>
+ <td id="LC1615" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\PackageError</span> {bodeplot} {Delay needs to be a positive number.}</td>
+ </tr>
+ <tr>
+ <td id="L1616" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1616"></td>
+ <td id="LC1616" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td>
+ </tr>
+ <tr>
+ <td id="L1617" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1617"></td>
+ <td id="LC1617" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\add@feature</span>{#2}{<span class="pl-c1">\PhDel</span>}{<span class="pl-c1">\values</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1618" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1618"></td>
+ <td id="LC1618" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\add@feature</span>{#1}{<span class="pl-c1">\MagDel</span>}{<span class="pl-c1">\values</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1619" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1619"></td>
+ <td id="LC1619" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td>
+ </tr>
+ <tr>
+ <td id="L1620" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1620"></td>
+ <td id="LC1620" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td>
+ </tr>
+ <tr>
+ <td id="L1621" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1621"></td>
+ <td id="LC1621" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td>
+ </tr>
+ <tr>
+ <td id="L1622" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1622"></td>
+ <td id="LC1622" class="blob-code blob-code-inner js-file-line"> }</td>
+ </tr>
+ <tr>
+ <td id="L1623" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1623"></td>
+ <td id="LC1623" class="blob-code blob-code-inner js-file-line">}</td>
+ </tr>
+ <tr>
+ <td id="L1624" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1624"></td>
+ <td id="LC1624" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1625" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1625"></td>
+ <td id="LC1625" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>\end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L1626" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1626"></td>
+ <td id="LC1626" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\build@TF@plot}</span></td>
+ </tr>
+ <tr>
+ <td id="L1627" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1627"></td>
+ <td id="LC1627" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> This is an internal macro to build parametric Bode magnitude and phase functions by computing the magnitude and the phase given numerator and denominator coefficients and delay (input |#3|). The functions are assigned to user-supplied global magnitude and phase macros (inputs |#1| and |#2|). \changes{v1.0.8}{2022/07/05}{Included phase due to delay in wrapping.}\changes{v1.1.1}{2022/07/31}{Enabled `Hz&#39; and `rad&#39; units for frequency and phase, respectively}</span></td>
+ </tr>
+ <tr>
+ <td id="L1628" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1628"></td>
+ <td id="LC1628" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1629" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1629"></td>
+ <td id="LC1629" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>{<span class="pl-c1">\build@TF@plot</span>}[3]{</td>
+ </tr>
+ <tr>
+ <td id="L1630" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1630"></td>
+ <td id="LC1630" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\num@real</span>{0}</td>
+ </tr>
+ <tr>
+ <td id="L1631" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1631"></td>
+ <td id="LC1631" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\num@im</span>{0}</td>
+ </tr>
+ <tr>
+ <td id="L1632" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1632"></td>
+ <td id="LC1632" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\den@real</span>{0}</td>
+ </tr>
+ <tr>
+ <td id="L1633" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1633"></td>
+ <td id="LC1633" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\den@im</span>{0}</td>
+ </tr>
+ <tr>
+ <td id="L1634" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1634"></td>
+ <td id="LC1634" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\loop@delay</span>{0}</td>
+ </tr>
+ <tr>
+ <td id="L1635" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1635"></td>
+ <td id="LC1635" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\foreach</span> <span class="pl-c1">\feature</span>/<span class="pl-c1">\values</span> in {#3} {</td>
+ </tr>
+ <tr>
+ <td id="L1636" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1636"></td>
+ <td id="LC1636" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\pdf@strcmp</span>{<span class="pl-c1">\feature</span>}{num}=0</td>
+ </tr>
+ <tr>
+ <td id="L1637" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1637"></td>
+ <td id="LC1637" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\foreach</span> <span class="pl-c1">\numcoeff</span> [count=<span class="pl-c1">\numpow</span>] in <span class="pl-c1">\values</span> {</td>
+ </tr>
+ <tr>
+ <td id="L1638" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1638"></td>
+ <td id="LC1638" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef\num@degree</span>{<span class="pl-c1">\numpow</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1639" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1639"></td>
+ <td id="LC1639" class="blob-code blob-code-inner js-file-line"> }</td>
+ </tr>
+ <tr>
+ <td id="L1640" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1640"></td>
+ <td id="LC1640" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\foreach</span> <span class="pl-c1">\numcoeff</span> [count=<span class="pl-c1">\numpow</span>] in <span class="pl-c1">\values</span> {</td>
+ </tr>
+ <tr>
+ <td id="L1641" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1641"></td>
+ <td id="LC1641" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\pgfmathtruncatemacro</span>{<span class="pl-c1">\currentdegree</span>}{<span class="pl-c1">\num@degree</span>-<span class="pl-c1">\numpow</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1642" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1642"></td>
+ <td id="LC1642" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\currentdegree</span> = 0</td>
+ </tr>
+ <tr>
+ <td id="L1643" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1643"></td>
+ <td id="LC1643" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef\num@real</span>{<span class="pl-c1">\num@real</span>+<span class="pl-c1">\numcoeff</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1644" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1644"></td>
+ <td id="LC1644" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td>
+ </tr>
+ <tr>
+ <td id="L1645" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1645"></td>
+ <td id="LC1645" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifodd</span><span class="pl-c1">\currentdegree</span></td>
+ </tr>
+ <tr>
+ <td id="L1646" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1646"></td>
+ <td id="LC1646" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef\num@im</span>{<span class="pl-c1">\num@im</span>+(<span class="pl-c1">\numcoeff</span>*(<span class="pl-c1">\n@pow</span>{-1}{(<span class="pl-c1">\currentdegree</span>-1)/2})*<span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L1647" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1647"></td>
+ <td id="LC1647" class="blob-code blob-code-inner js-file-line"> (<span class="pl-c1">\n@pow</span>{t}{<span class="pl-c1">\currentdegree</span>}))}</td>
+ </tr>
+ <tr>
+ <td id="L1648" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1648"></td>
+ <td id="LC1648" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td>
+ </tr>
+ <tr>
+ <td id="L1649" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1649"></td>
+ <td id="LC1649" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef\num@real</span>{<span class="pl-c1">\num@real</span>+(<span class="pl-c1">\numcoeff</span>*(<span class="pl-c1">\n@pow</span>{-1}{(<span class="pl-c1">\currentdegree</span>)/2})*<span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L1650" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1650"></td>
+ <td id="LC1650" class="blob-code blob-code-inner js-file-line"> (<span class="pl-c1">\n@pow</span>{t}{<span class="pl-c1">\currentdegree</span>}))}</td>
+ </tr>
+ <tr>
+ <td id="L1651" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1651"></td>
+ <td id="LC1651" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td>
+ </tr>
+ <tr>
+ <td id="L1652" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1652"></td>
+ <td id="LC1652" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td>
+ </tr>
+ <tr>
+ <td id="L1653" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1653"></td>
+ <td id="LC1653" class="blob-code blob-code-inner js-file-line"> }</td>
+ </tr>
+ <tr>
+ <td id="L1654" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1654"></td>
+ <td id="LC1654" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td>
+ </tr>
+ <tr>
+ <td id="L1655" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1655"></td>
+ <td id="LC1655" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\pdf@strcmp</span>{<span class="pl-c1">\feature</span>}{den}=0</td>
+ </tr>
+ <tr>
+ <td id="L1656" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1656"></td>
+ <td id="LC1656" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\foreach</span> <span class="pl-c1">\dencoeff</span> [count=<span class="pl-c1">\denpow</span>] in <span class="pl-c1">\values</span> {</td>
+ </tr>
+ <tr>
+ <td id="L1657" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1657"></td>
+ <td id="LC1657" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef\den@degree</span>{<span class="pl-c1">\denpow</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1658" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1658"></td>
+ <td id="LC1658" class="blob-code blob-code-inner js-file-line"> }</td>
+ </tr>
+ <tr>
+ <td id="L1659" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1659"></td>
+ <td id="LC1659" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\foreach</span> <span class="pl-c1">\dencoeff</span> [count=<span class="pl-c1">\denpow</span>] in <span class="pl-c1">\values</span> {</td>
+ </tr>
+ <tr>
+ <td id="L1660" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1660"></td>
+ <td id="LC1660" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\pgfmathtruncatemacro</span>{<span class="pl-c1">\currentdegree</span>}{<span class="pl-c1">\den@degree</span>-<span class="pl-c1">\denpow</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1661" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1661"></td>
+ <td id="LC1661" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\currentdegree</span> = 0</td>
+ </tr>
+ <tr>
+ <td id="L1662" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1662"></td>
+ <td id="LC1662" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef\den@real</span>{<span class="pl-c1">\den@real</span>+<span class="pl-c1">\dencoeff</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1663" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1663"></td>
+ <td id="LC1663" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td>
+ </tr>
+ <tr>
+ <td id="L1664" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1664"></td>
+ <td id="LC1664" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifodd</span><span class="pl-c1">\currentdegree</span></td>
+ </tr>
+ <tr>
+ <td id="L1665" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1665"></td>
+ <td id="LC1665" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef\den@im</span>{<span class="pl-c1">\den@im</span>+(<span class="pl-c1">\dencoeff</span>*(<span class="pl-c1">\n@pow</span>{-1}{(<span class="pl-c1">\currentdegree</span>-1)/2})*<span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L1666" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1666"></td>
+ <td id="LC1666" class="blob-code blob-code-inner js-file-line"> (<span class="pl-c1">\n@pow</span>{t}{<span class="pl-c1">\currentdegree</span>}))}</td>
+ </tr>
+ <tr>
+ <td id="L1667" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1667"></td>
+ <td id="LC1667" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td>
+ </tr>
+ <tr>
+ <td id="L1668" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1668"></td>
+ <td id="LC1668" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef\den@real</span>{<span class="pl-c1">\den@real</span>+(<span class="pl-c1">\dencoeff</span>*(<span class="pl-c1">\n@pow</span>{-1}{(<span class="pl-c1">\currentdegree</span>)/2})*<span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L1669" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1669"></td>
+ <td id="LC1669" class="blob-code blob-code-inner js-file-line"> (<span class="pl-c1">\n@pow</span>{t}{<span class="pl-c1">\currentdegree</span>}))}</td>
+ </tr>
+ <tr>
+ <td id="L1670" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1670"></td>
+ <td id="LC1670" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td>
+ </tr>
+ <tr>
+ <td id="L1671" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1671"></td>
+ <td id="LC1671" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td>
+ </tr>
+ <tr>
+ <td id="L1672" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1672"></td>
+ <td id="LC1672" class="blob-code blob-code-inner js-file-line"> }</td>
+ </tr>
+ <tr>
+ <td id="L1673" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1673"></td>
+ <td id="LC1673" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td>
+ </tr>
+ <tr>
+ <td id="L1674" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1674"></td>
+ <td id="LC1674" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\pdf@strcmp</span>{<span class="pl-c1">\feature</span>}{d}=0</td>
+ </tr>
+ <tr>
+ <td id="L1675" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1675"></td>
+ <td id="LC1675" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef\loop@delay</span>{<span class="pl-c1">\values</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1676" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1676"></td>
+ <td id="LC1676" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td>
+ </tr>
+ <tr>
+ <td id="L1677" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1677"></td>
+ <td id="LC1677" class="blob-code blob-code-inner js-file-line"> }</td>
+ </tr>
+ <tr>
+ <td id="L1678" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1678"></td>
+ <td id="LC1678" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef</span>#2{((atan2((<span class="pl-c1">\num@im</span>),(<span class="pl-c1">\num@real</span>))-atan2((<span class="pl-c1">\den@im</span>),<span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L1679" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1679"></td>
+ <td id="LC1679" class="blob-code blob-code-inner js-file-line"> (<span class="pl-c1">\den@real</span>))-<span class="pl-c1">\loop@delay</span>*t)*(<span class="pl-c1">\ph@scale</span>))}</td>
+ </tr>
+ <tr>
+ <td id="L1680" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1680"></td>
+ <td id="LC1680" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef</span>#1{(20*log10(sqrt((<span class="pl-c1">\n@pow</span>{<span class="pl-c1">\num@real</span>}{2})+(<span class="pl-c1">\n@pow</span>{<span class="pl-c1">\num@im</span>}{2})))-<span class="pl-c"><span class="pl-c">%</span></span></td>
+ </tr>
+ <tr>
+ <td id="L1681" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1681"></td>
+ <td id="LC1681" class="blob-code blob-code-inner js-file-line"> 20*log10(sqrt((<span class="pl-c1">\n@pow</span>{<span class="pl-c1">\den@real</span>}{2})+(<span class="pl-c1">\n@pow</span>{<span class="pl-c1">\den@im</span>}{2}))))}</td>
+ </tr>
+ <tr>
+ <td id="L1682" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1682"></td>
+ <td id="LC1682" class="blob-code blob-code-inner js-file-line">}</td>
+ </tr>
+ <tr>
+ <td id="L1683" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1683"></td>
+ <td id="LC1683" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1684" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1684"></td>
+ <td id="LC1684" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>\end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L1685" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1685"></td>
+ <td id="LC1685" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\parse@opt}</span></td>
+ </tr>
+ <tr>
+ <td id="L1686" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1686"></td>
+ <td id="LC1686" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> Parses options supplied to the main Bode macros. A |for| loop over tuples of the form |\obj/\typ/\opt| with a long list of nested if-else statements does the job. If the input |\obj| is |plot|, |axes|, |group|, |approx|, or |tikz| the corresponding |\opt| are passed, unexpanded, to the |\addplot| macro, the |\nextgroupplot| macro, the |groupplot| environment, the |\build@ZPK@plot| macro, and the |tikzpicture| environment, respectively. If |\obj| is |commands|, the corresponding |\opt| are stored, unexpanded, in the macros |\optph@commands| and |\optmag@commands|, to be executed in appropriate |axis| environments. \changes{v1.0.3}{2021/11/03}{Added Tikz option} \changes{v1.0.5}{2021/11/15}{Fixed a bug}</span></td>
+ </tr>
+ <tr>
+ <td id="L1687" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1687"></td>
+ <td id="LC1687" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1688" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1688"></td>
+ <td id="LC1688" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>{<span class="pl-c1">\parse@opt</span>}[1]{</td>
+ </tr>
+ <tr>
+ <td id="L1689" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1689"></td>
+ <td id="LC1689" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\optmag@axes</span>{}</td>
+ </tr>
+ <tr>
+ <td id="L1690" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1690"></td>
+ <td id="LC1690" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\optph@axes</span>{}</td>
+ </tr>
+ <tr>
+ <td id="L1691" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1691"></td>
+ <td id="LC1691" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\optph@plot</span>{}</td>
+ </tr>
+ <tr>
+ <td id="L1692" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1692"></td>
+ <td id="LC1692" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\optmag@plot</span>{}</td>
+ </tr>
+ <tr>
+ <td id="L1693" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1693"></td>
+ <td id="LC1693" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\opt@group</span>{}</td>
+ </tr>
+ <tr>
+ <td id="L1694" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1694"></td>
+ <td id="LC1694" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\opt@approx</span>{}</td>
+ </tr>
+ <tr>
+ <td id="L1695" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1695"></td>
+ <td id="LC1695" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\optph@commands</span>{}</td>
+ </tr>
+ <tr>
+ <td id="L1696" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1696"></td>
+ <td id="LC1696" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\optmag@commands</span>{}</td>
+ </tr>
+ <tr>
+ <td id="L1697" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1697"></td>
+ <td id="LC1697" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\opt@tikz</span>{}</td>
+ </tr>
+ <tr>
+ <td id="L1698" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1698"></td>
+ <td id="LC1698" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\foreach</span> <span class="pl-c1">\obj</span>/<span class="pl-c1">\typ</span>/<span class="pl-c1">\opt</span> in {#1} {</td>
+ </tr>
+ <tr>
+ <td id="L1699" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1699"></td>
+ <td id="LC1699" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\pdf@strcmp</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\obj</span>}}{plot}=0</td>
+ </tr>
+ <tr>
+ <td id="L1700" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1700"></td>
+ <td id="LC1700" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\pdf@strcmp</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\typ</span>}}{mag}=0</td>
+ </tr>
+ <tr>
+ <td id="L1701" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1701"></td>
+ <td id="LC1701" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef\optmag@plot</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt</span>}}</td>
+ </tr>
+ <tr>
+ <td id="L1702" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1702"></td>
+ <td id="LC1702" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td>
+ </tr>
+ <tr>
+ <td id="L1703" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1703"></td>
+ <td id="LC1703" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\pdf@strcmp</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\typ</span>}}{ph}=0</td>
+ </tr>
+ <tr>
+ <td id="L1704" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1704"></td>
+ <td id="LC1704" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef\optph@plot</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt</span>}}</td>
+ </tr>
+ <tr>
+ <td id="L1705" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1705"></td>
+ <td id="LC1705" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td>
+ </tr>
+ <tr>
+ <td id="L1706" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1706"></td>
+ <td id="LC1706" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef\optmag@plot</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt</span>}}</td>
+ </tr>
+ <tr>
+ <td id="L1707" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1707"></td>
+ <td id="LC1707" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef\optph@plot</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt</span>}}</td>
+ </tr>
+ <tr>
+ <td id="L1708" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1708"></td>
+ <td id="LC1708" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td>
+ </tr>
+ <tr>
+ <td id="L1709" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1709"></td>
+ <td id="LC1709" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td>
+ </tr>
+ <tr>
+ <td id="L1710" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1710"></td>
+ <td id="LC1710" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td>
+ </tr>
+ <tr>
+ <td id="L1711" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1711"></td>
+ <td id="LC1711" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\pdf@strcmp</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\obj</span>}}{axes}=0</td>
+ </tr>
+ <tr>
+ <td id="L1712" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1712"></td>
+ <td id="LC1712" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\pdf@strcmp</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\typ</span>}}{mag}=0</td>
+ </tr>
+ <tr>
+ <td id="L1713" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1713"></td>
+ <td id="LC1713" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef\optmag@axes</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt</span>}}</td>
+ </tr>
+ <tr>
+ <td id="L1714" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1714"></td>
+ <td id="LC1714" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td>
+ </tr>
+ <tr>
+ <td id="L1715" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1715"></td>
+ <td id="LC1715" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\pdf@strcmp</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\typ</span>}}{ph}=0</td>
+ </tr>
+ <tr>
+ <td id="L1716" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1716"></td>
+ <td id="LC1716" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef\optph@axes</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt</span>}}</td>
+ </tr>
+ <tr>
+ <td id="L1717" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1717"></td>
+ <td id="LC1717" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td>
+ </tr>
+ <tr>
+ <td id="L1718" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1718"></td>
+ <td id="LC1718" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef\optmag@axes</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt</span>}}</td>
+ </tr>
+ <tr>
+ <td id="L1719" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1719"></td>
+ <td id="LC1719" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef\optph@axes</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt</span>}}</td>
+ </tr>
+ <tr>
+ <td id="L1720" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1720"></td>
+ <td id="LC1720" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td>
+ </tr>
+ <tr>
+ <td id="L1721" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1721"></td>
+ <td id="LC1721" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td>
+ </tr>
+ <tr>
+ <td id="L1722" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1722"></td>
+ <td id="LC1722" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td>
+ </tr>
+ <tr>
+ <td id="L1723" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1723"></td>
+ <td id="LC1723" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\pdf@strcmp</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\obj</span>}}{group}=0</td>
+ </tr>
+ <tr>
+ <td id="L1724" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1724"></td>
+ <td id="LC1724" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef\opt@group</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt</span>}}</td>
+ </tr>
+ <tr>
+ <td id="L1725" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1725"></td>
+ <td id="LC1725" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td>
+ </tr>
+ <tr>
+ <td id="L1726" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1726"></td>
+ <td id="LC1726" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\pdf@strcmp</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\obj</span>}}{approx}=0</td>
+ </tr>
+ <tr>
+ <td id="L1727" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1727"></td>
+ <td id="LC1727" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef\opt@approx</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt</span>}}</td>
+ </tr>
+ <tr>
+ <td id="L1728" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1728"></td>
+ <td id="LC1728" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td>
+ </tr>
+ <tr>
+ <td id="L1729" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1729"></td>
+ <td id="LC1729" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\pdf@strcmp</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\obj</span>}}{commands}=0</td>
+ </tr>
+ <tr>
+ <td id="L1730" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1730"></td>
+ <td id="LC1730" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\pdf@strcmp</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\typ</span>}}{ph}=0</td>
+ </tr>
+ <tr>
+ <td id="L1731" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1731"></td>
+ <td id="LC1731" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef\optph@commands</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt</span>}}</td>
+ </tr>
+ <tr>
+ <td id="L1732" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1732"></td>
+ <td id="LC1732" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td>
+ </tr>
+ <tr>
+ <td id="L1733" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1733"></td>
+ <td id="LC1733" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef\optmag@commands</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt</span>}}</td>
+ </tr>
+ <tr>
+ <td id="L1734" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1734"></td>
+ <td id="LC1734" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td>
+ </tr>
+ <tr>
+ <td id="L1735" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1735"></td>
+ <td id="LC1735" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td>
+ </tr>
+ <tr>
+ <td id="L1736" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1736"></td>
+ <td id="LC1736" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\pdf@strcmp</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\obj</span>}}{tikz}=0</td>
+ </tr>
+ <tr>
+ <td id="L1737" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1737"></td>
+ <td id="LC1737" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef\opt@tikz</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt</span>}}</td>
+ </tr>
+ <tr>
+ <td id="L1738" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1738"></td>
+ <td id="LC1738" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td>
+ </tr>
+ <tr>
+ <td id="L1739" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1739"></td>
+ <td id="LC1739" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef\optmag@plot</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\optmag@plot</span>},</td>
+ </tr>
+ <tr>
+ <td id="L1740" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1740"></td>
+ <td id="LC1740" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\obj</span>}}</td>
+ </tr>
+ <tr>
+ <td id="L1741" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1741"></td>
+ <td id="LC1741" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef\optph@plot</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\optph@plot</span>},</td>
+ </tr>
+ <tr>
+ <td id="L1742" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1742"></td>
+ <td id="LC1742" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\obj</span>}}</td>
+ </tr>
+ <tr>
+ <td id="L1743" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1743"></td>
+ <td id="LC1743" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td>
+ </tr>
+ <tr>
+ <td id="L1744" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1744"></td>
+ <td id="LC1744" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td>
+ </tr>
+ <tr>
+ <td id="L1745" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1745"></td>
+ <td id="LC1745" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td>
+ </tr>
+ <tr>
+ <td id="L1746" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1746"></td>
+ <td id="LC1746" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td>
+ </tr>
+ <tr>
+ <td id="L1747" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1747"></td>
+ <td id="LC1747" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td>
+ </tr>
+ <tr>
+ <td id="L1748" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1748"></td>
+ <td id="LC1748" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td>
+ </tr>
+ <tr>
+ <td id="L1749" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1749"></td>
+ <td id="LC1749" class="blob-code blob-code-inner js-file-line"> }</td>
+ </tr>
+ <tr>
+ <td id="L1750" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1750"></td>
+ <td id="LC1750" class="blob-code blob-code-inner js-file-line">}</td>
+ </tr>
+ <tr>
+ <td id="L1751" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1751"></td>
+ <td id="LC1751" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1752" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1752"></td>
+ <td id="LC1752" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>\end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L1753" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1753"></td>
+ <td id="LC1753" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\parse@env@opt}</span></td>
+ </tr>
+ <tr>
+ <td id="L1754" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1754"></td>
+ <td id="LC1754" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> Parses options supplied to the Bode, Nyquist, and Nichols environments. A |for| loop over tuples of the form |\obj/\opt|, processed using nested if-else statements does the job. The input |\obj| should either be |axes| or |tikz|, and the corresponding |\opt| are passed, unexpanded, to the |axis| environment and the |tikzpicture| environment, respectively. \changes{v1.0.3}{2021/11/03}{Added tikz option to environments}</span></td>
+ </tr>
+ <tr>
+ <td id="L1755" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1755"></td>
+ <td id="LC1755" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1756" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1756"></td>
+ <td id="LC1756" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>{<span class="pl-c1">\parse@env@opt</span>}[1]{</td>
+ </tr>
+ <tr>
+ <td id="L1757" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1757"></td>
+ <td id="LC1757" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\opt@axes</span>{}</td>
+ </tr>
+ <tr>
+ <td id="L1758" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1758"></td>
+ <td id="LC1758" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\opt@tikz</span>{}</td>
+ </tr>
+ <tr>
+ <td id="L1759" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1759"></td>
+ <td id="LC1759" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\foreach</span> <span class="pl-c1">\obj</span>/<span class="pl-c1">\opt</span> in {#1} {</td>
+ </tr>
+ <tr>
+ <td id="L1760" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1760"></td>
+ <td id="LC1760" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\pdf@strcmp</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\obj</span>}}{axes}=0</td>
+ </tr>
+ <tr>
+ <td id="L1761" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1761"></td>
+ <td id="LC1761" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef\opt@axes</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt</span>}}</td>
+ </tr>
+ <tr>
+ <td id="L1762" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1762"></td>
+ <td id="LC1762" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td>
+ </tr>
+ <tr>
+ <td id="L1763" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1763"></td>
+ <td id="LC1763" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\pdf@strcmp</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\obj</span>}}{tikz}=0</td>
+ </tr>
+ <tr>
+ <td id="L1764" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1764"></td>
+ <td id="LC1764" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef\opt@tikz</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt</span>}}</td>
+ </tr>
+ <tr>
+ <td id="L1765" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1765"></td>
+ <td id="LC1765" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td>
+ </tr>
+ <tr>
+ <td id="L1766" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1766"></td>
+ <td id="LC1766" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef\opt@axes</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt@axes</span>},</td>
+ </tr>
+ <tr>
+ <td id="L1767" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1767"></td>
+ <td id="LC1767" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\obj</span>}}</td>
+ </tr>
+ <tr>
+ <td id="L1768" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1768"></td>
+ <td id="LC1768" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td>
+ </tr>
+ <tr>
+ <td id="L1769" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1769"></td>
+ <td id="LC1769" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td>
+ </tr>
+ <tr>
+ <td id="L1770" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1770"></td>
+ <td id="LC1770" class="blob-code blob-code-inner js-file-line"> }</td>
+ </tr>
+ <tr>
+ <td id="L1771" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1771"></td>
+ <td id="LC1771" class="blob-code blob-code-inner js-file-line">}</td>
+ </tr>
+ <tr>
+ <td id="L1772" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1772"></td>
+ <td id="LC1772" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1773" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1773"></td>
+ <td id="LC1773" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L1774" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1774"></td>
+ <td id="LC1774" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \subsection{Nyquist plots}</span></td>
+ </tr>
+ <tr>
+ <td id="L1775" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1775"></td>
+ <td id="LC1775" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \subsubsection{User macros}</span></td>
+ </tr>
+ <tr>
+ <td id="L1776" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1776"></td>
+ <td id="LC1776" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\NyquistZPK}</span></td>
+ </tr>
+ <tr>
+ <td id="L1777" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1777"></td>
+ <td id="LC1777" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> Converts magnitude and phase parametric functions built using |\build@ZPK@plot| into real part and imaginary part parametric functions. A plot of these is the Nyquist plot. The parametric functions are then plotted in a |tikzpicture| environment using the |\addplot| macro. Unless the package is loaded with the option |pgf|, the parametric functions are evaluated using |gnuplot|. A large number of samples is typically needed to get a smooth plot because frequencies near 0 result in plot points that are very close to each other. Linear frequency sampling is unnecessarily fine near zero and very coarse for large $\omega$. Logarithmic sampling makes it worse, perhaps inverse logarithmic sampling will help, pull requests to fix that are welcome! \changes{v1.0.3}{2021/11/03}{Added commands and tikz options}\changes{v1.1.1}{2022/07/31}{Enabled `Hz&#39; and `rad&#39; units for frequency and phase, respectively}</span></td>
+ </tr>
+ <tr>
+ <td id="L1778" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1778"></td>
+ <td id="LC1778" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1779" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1779"></td>
+ <td id="LC1779" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>{<span class="pl-c1">\NyquistZPK</span>}[4][]{</td>
+ </tr>
+ <tr>
+ <td id="L1780" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1780"></td>
+ <td id="LC1780" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\parse@N@opt</span>{#1}</td>
+ </tr>
+ <tr>
+ <td id="L1781" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1781"></td>
+ <td id="LC1781" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\func@mag</span>{}</td>
+ </tr>
+ <tr>
+ <td id="L1782" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1782"></td>
+ <td id="LC1782" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\func@ph</span>{}</td>
+ </tr>
+ <tr>
+ <td id="L1783" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1783"></td>
+ <td id="LC1783" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\temp@cmd</span>{<span class="pl-c1">\noexpand</span><span class="pl-c1">\begin</span>{<span class="pl-smi">tikzpicture</span>} [<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt@tikz</span>}]}</td>
+ </tr>
+ <tr>
+ <td id="L1784" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1784"></td>
+ <td id="LC1784" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\temp@cmd</span></td>
+ </tr>
+ <tr>
+ <td id="L1785" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1785"></td>
+ <td id="LC1785" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\build@ZPK@plot</span>{<span class="pl-c1">\func@mag</span>}{<span class="pl-c1">\func@ph</span>}{}{#2}</td>
+ </tr>
+ <tr>
+ <td id="L1786" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1786"></td>
+ <td id="LC1786" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\temp@cmd</span>{<span class="pl-c1">\noexpand</span><span class="pl-c1">\begin</span>{<span class="pl-smi">axis</span>}[</td>
+ </tr>
+ <tr>
+ <td id="L1787" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1787"></td>
+ <td id="LC1787" class="blob-code blob-code-inner js-file-line"> bode@style,</td>
+ </tr>
+ <tr>
+ <td id="L1788" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1788"></td>
+ <td id="LC1788" class="blob-code blob-code-inner js-file-line"> domain=#3*<span class="pl-c1">\freq@scale</span>:#4*<span class="pl-c1">\freq@scale</span>,</td>
+ </tr>
+ <tr>
+ <td id="L1789" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1789"></td>
+ <td id="LC1789" class="blob-code blob-code-inner js-file-line"> height=5cm,</td>
+ </tr>
+ <tr>
+ <td id="L1790" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1790"></td>
+ <td id="LC1790" class="blob-code blob-code-inner js-file-line"> xlabel={<span class="pl-s"><span class="pl-pds">$</span><span class="pl-c1">\Re</span><span class="pl-pds">$</span></span>},</td>
+ </tr>
+ <tr>
+ <td id="L1791" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1791"></td>
+ <td id="LC1791" class="blob-code blob-code-inner js-file-line"> ylabel={<span class="pl-s"><span class="pl-pds">$</span><span class="pl-c1">\Im</span><span class="pl-pds">$</span></span>},</td>
+ </tr>
+ <tr>
+ <td id="L1792" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1792"></td>
+ <td id="LC1792" class="blob-code blob-code-inner js-file-line"> samples=500,</td>
+ </tr>
+ <tr>
+ <td id="L1793" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1793"></td>
+ <td id="LC1793" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt@axes</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1794" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1794"></td>
+ <td id="LC1794" class="blob-code blob-code-inner js-file-line"> ]}</td>
+ </tr>
+ <tr>
+ <td id="L1795" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1795"></td>
+ <td id="LC1795" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\temp@cmd</span></td>
+ </tr>
+ <tr>
+ <td id="L1796" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1796"></td>
+ <td id="LC1796" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\addplot</span> [only marks,mark=+,thick,red] (-1 , 0);</td>
+ </tr>
+ <tr>
+ <td id="L1797" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1797"></td>
+ <td id="LC1797" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\temp@cmd</span>{<span class="pl-c1">\noexpand\addplot</span> [variable=t, thick, <span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt@plot</span>}]}</td>
+ </tr>
+ <tr>
+ <td id="L1798" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1798"></td>
+ <td id="LC1798" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\if</span>@pgfarg</td>
+ </tr>
+ <tr>
+ <td id="L1799" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1799"></td>
+ <td id="LC1799" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\temp@cmd</span> ( {<span class="pl-c1">\n@pow</span>{10}{((<span class="pl-c1">\func@mag</span>)/20)}*cos((<span class="pl-c1">\func@ph</span>)/(<span class="pl-c1">\ph@scale</span>))},</td>
+ </tr>
+ <tr>
+ <td id="L1800" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1800"></td>
+ <td id="LC1800" class="blob-code blob-code-inner js-file-line"> {<span class="pl-c1">\n@pow</span>{10}{((<span class="pl-c1">\func@mag</span>)/20)}*sin((<span class="pl-c1">\func@ph</span>)/(<span class="pl-c1">\ph@scale</span>))} );</td>
+ </tr>
+ <tr>
+ <td id="L1801" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1801"></td>
+ <td id="LC1801" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\opt@commands</span></td>
+ </tr>
+ <tr>
+ <td id="L1802" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1802"></td>
+ <td id="LC1802" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td>
+ </tr>
+ <tr>
+ <td id="L1803" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1803"></td>
+ <td id="LC1803" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\stepcounter</span>{gnuplot@id}</td>
+ </tr>
+ <tr>
+ <td id="L1804" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1804"></td>
+ <td id="LC1804" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\temp@cmd</span> gnuplot [parametric, gnuplot@prefix] {</td>
+ </tr>
+ <tr>
+ <td id="L1805" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1805"></td>
+ <td id="LC1805" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\n@pow</span>{10}{((<span class="pl-c1">\func@mag</span>)/20)}*cos((<span class="pl-c1">\func@ph</span>)/(<span class="pl-c1">\ph@scale</span>)),</td>
+ </tr>
+ <tr>
+ <td id="L1806" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1806"></td>
+ <td id="LC1806" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\n@pow</span>{10}{((<span class="pl-c1">\func@mag</span>)/20)}*sin((<span class="pl-c1">\func@ph</span>)/(<span class="pl-c1">\ph@scale</span>))</td>
+ </tr>
+ <tr>
+ <td id="L1807" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1807"></td>
+ <td id="LC1807" class="blob-code blob-code-inner js-file-line"> };</td>
+ </tr>
+ <tr>
+ <td id="L1808" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1808"></td>
+ <td id="LC1808" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\opt@commands</span></td>
+ </tr>
+ <tr>
+ <td id="L1809" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1809"></td>
+ <td id="LC1809" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td>
+ </tr>
+ <tr>
+ <td id="L1810" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1810"></td>
+ <td id="LC1810" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\end</span>{<span class="pl-smi">axis</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1811" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1811"></td>
+ <td id="LC1811" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\end</span>{tikzpicture}</td>
+ </tr>
+ <tr>
+ <td id="L1812" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1812"></td>
+ <td id="LC1812" class="blob-code blob-code-inner js-file-line">}</td>
+ </tr>
+ <tr>
+ <td id="L1813" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1813"></td>
+ <td id="LC1813" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1814" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1814"></td>
+ <td id="LC1814" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L1815" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1815"></td>
+ <td id="LC1815" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\NyquistTF}</span></td>
+ </tr>
+ <tr>
+ <td id="L1816" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1816"></td>
+ <td id="LC1816" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> Implementation of this macro is very similar to the |\NyquistZPK| macro above. The only difference is a slightly different parsing of the mandatory arguments via |\build@TF@plot|. \changes{v1.0.3}{2021/11/03}{Added commands and tikz options}\changes{v1.1.1}{2022/07/31}{Enabled `Hz&#39; and `rad&#39; units for frequency and phase, respectively}</span></td>
+ </tr>
+ <tr>
+ <td id="L1817" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1817"></td>
+ <td id="LC1817" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1818" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1818"></td>
+ <td id="LC1818" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>{<span class="pl-c1">\NyquistTF</span>}[4][]{</td>
+ </tr>
+ <tr>
+ <td id="L1819" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1819"></td>
+ <td id="LC1819" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\parse@N@opt</span>{#1}</td>
+ </tr>
+ <tr>
+ <td id="L1820" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1820"></td>
+ <td id="LC1820" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\func@mag</span>{}</td>
+ </tr>
+ <tr>
+ <td id="L1821" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1821"></td>
+ <td id="LC1821" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\func@ph</span>{}</td>
+ </tr>
+ <tr>
+ <td id="L1822" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1822"></td>
+ <td id="LC1822" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\temp@cmd</span>{<span class="pl-c1">\noexpand</span><span class="pl-c1">\begin</span>{<span class="pl-smi">tikzpicture</span>} [<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt@tikz</span>}]}</td>
+ </tr>
+ <tr>
+ <td id="L1823" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1823"></td>
+ <td id="LC1823" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\temp@cmd</span></td>
+ </tr>
+ <tr>
+ <td id="L1824" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1824"></td>
+ <td id="LC1824" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\build@TF@plot</span>{<span class="pl-c1">\func@mag</span>}{<span class="pl-c1">\func@ph</span>}{#2}</td>
+ </tr>
+ <tr>
+ <td id="L1825" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1825"></td>
+ <td id="LC1825" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\temp@cmd</span>{<span class="pl-c1">\noexpand</span><span class="pl-c1">\begin</span>{<span class="pl-smi">axis</span>}[</td>
+ </tr>
+ <tr>
+ <td id="L1826" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1826"></td>
+ <td id="LC1826" class="blob-code blob-code-inner js-file-line"> bode@style,</td>
+ </tr>
+ <tr>
+ <td id="L1827" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1827"></td>
+ <td id="LC1827" class="blob-code blob-code-inner js-file-line"> domain=#3*<span class="pl-c1">\freq@scale</span>:#4*<span class="pl-c1">\freq@scale</span>,</td>
+ </tr>
+ <tr>
+ <td id="L1828" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1828"></td>
+ <td id="LC1828" class="blob-code blob-code-inner js-file-line"> height=5cm,</td>
+ </tr>
+ <tr>
+ <td id="L1829" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1829"></td>
+ <td id="LC1829" class="blob-code blob-code-inner js-file-line"> xlabel={<span class="pl-s"><span class="pl-pds">$</span><span class="pl-c1">\Re</span><span class="pl-pds">$</span></span>},</td>
+ </tr>
+ <tr>
+ <td id="L1830" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1830"></td>
+ <td id="LC1830" class="blob-code blob-code-inner js-file-line"> ylabel={<span class="pl-s"><span class="pl-pds">$</span><span class="pl-c1">\Im</span><span class="pl-pds">$</span></span>},</td>
+ </tr>
+ <tr>
+ <td id="L1831" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1831"></td>
+ <td id="LC1831" class="blob-code blob-code-inner js-file-line"> samples=500,</td>
+ </tr>
+ <tr>
+ <td id="L1832" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1832"></td>
+ <td id="LC1832" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt@axes</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1833" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1833"></td>
+ <td id="LC1833" class="blob-code blob-code-inner js-file-line"> ]}</td>
+ </tr>
+ <tr>
+ <td id="L1834" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1834"></td>
+ <td id="LC1834" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\temp@cmd</span></td>
+ </tr>
+ <tr>
+ <td id="L1835" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1835"></td>
+ <td id="LC1835" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\addplot</span> [only marks, mark=+, thick, red] (-1 , 0);</td>
+ </tr>
+ <tr>
+ <td id="L1836" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1836"></td>
+ <td id="LC1836" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\temp@cmd</span>{<span class="pl-c1">\noexpand\addplot</span> [variable=t, thick, <span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt@plot</span>}]}</td>
+ </tr>
+ <tr>
+ <td id="L1837" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1837"></td>
+ <td id="LC1837" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\if</span>@pgfarg</td>
+ </tr>
+ <tr>
+ <td id="L1838" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1838"></td>
+ <td id="LC1838" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\temp@cmd</span> ( {<span class="pl-c1">\n@pow</span>{10}{((<span class="pl-c1">\func@mag</span>)/20)}*cos((<span class="pl-c1">\func@ph</span>)/(<span class="pl-c1">\ph@scale</span>))},</td>
+ </tr>
+ <tr>
+ <td id="L1839" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1839"></td>
+ <td id="LC1839" class="blob-code blob-code-inner js-file-line"> {<span class="pl-c1">\n@pow</span>{10}{((<span class="pl-c1">\func@mag</span>)/20)}*sin((<span class="pl-c1">\func@ph</span>)/(<span class="pl-c1">\ph@scale</span>))} );</td>
+ </tr>
+ <tr>
+ <td id="L1840" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1840"></td>
+ <td id="LC1840" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\opt@commands</span></td>
+ </tr>
+ <tr>
+ <td id="L1841" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1841"></td>
+ <td id="LC1841" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td>
+ </tr>
+ <tr>
+ <td id="L1842" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1842"></td>
+ <td id="LC1842" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\stepcounter</span>{gnuplot@id}</td>
+ </tr>
+ <tr>
+ <td id="L1843" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1843"></td>
+ <td id="LC1843" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\temp@cmd</span> gnuplot [parametric, gnuplot@prefix] {</td>
+ </tr>
+ <tr>
+ <td id="L1844" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1844"></td>
+ <td id="LC1844" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\n@pow</span>{10}{((<span class="pl-c1">\func@mag</span>)/20)}*cos((<span class="pl-c1">\func@ph</span>)/(<span class="pl-c1">\ph@scale</span>)),</td>
+ </tr>
+ <tr>
+ <td id="L1845" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1845"></td>
+ <td id="LC1845" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\n@pow</span>{10}{((<span class="pl-c1">\func@mag</span>)/20)}*sin((<span class="pl-c1">\func@ph</span>)/(<span class="pl-c1">\ph@scale</span>))</td>
+ </tr>
+ <tr>
+ <td id="L1846" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1846"></td>
+ <td id="LC1846" class="blob-code blob-code-inner js-file-line"> };</td>
+ </tr>
+ <tr>
+ <td id="L1847" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1847"></td>
+ <td id="LC1847" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\opt@commands</span></td>
+ </tr>
+ <tr>
+ <td id="L1848" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1848"></td>
+ <td id="LC1848" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td>
+ </tr>
+ <tr>
+ <td id="L1849" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1849"></td>
+ <td id="LC1849" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\end</span>{<span class="pl-smi">axis</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1850" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1850"></td>
+ <td id="LC1850" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\end</span>{tikzpicture}</td>
+ </tr>
+ <tr>
+ <td id="L1851" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1851"></td>
+ <td id="LC1851" class="blob-code blob-code-inner js-file-line">}</td>
+ </tr>
+ <tr>
+ <td id="L1852" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1852"></td>
+ <td id="LC1852" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1853" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1853"></td>
+ <td id="LC1853" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L1854" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1854"></td>
+ <td id="LC1854" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\addNyquistZPKPlot}</span></td>
+ </tr>
+ <tr>
+ <td id="L1855" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1855"></td>
+ <td id="LC1855" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> Adds Nyquist plot of a transfer function in ZPK form. This macro is designed to pass two parametric function to an |\addplot| macro. The parametric functions for phase (|\func@ph|) and magnitude (|\func@mag|) are built using the |\build@ZPK@plot| macro, converted to real and imaginary parts and passed to |\addplot| commands.\changes{v1.1.1}{2022/07/31}{Enabled `Hz&#39; and `rad&#39; units for frequency and phase, respectively}</span></td>
+ </tr>
+ <tr>
+ <td id="L1856" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1856"></td>
+ <td id="LC1856" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1857" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1857"></td>
+ <td id="LC1857" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>{<span class="pl-c1">\addNyquistZPKPlot</span>}[2][]{</td>
+ </tr>
+ <tr>
+ <td id="L1858" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1858"></td>
+ <td id="LC1858" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\func@mag</span>{}</td>
+ </tr>
+ <tr>
+ <td id="L1859" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1859"></td>
+ <td id="LC1859" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\func@ph</span>{}</td>
+ </tr>
+ <tr>
+ <td id="L1860" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1860"></td>
+ <td id="LC1860" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\build@ZPK@plot</span>{<span class="pl-c1">\func@mag</span>}{<span class="pl-c1">\func@ph</span>}{}{#2}</td>
+ </tr>
+ <tr>
+ <td id="L1861" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1861"></td>
+ <td id="LC1861" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\supplied@domain</span>{<span class="pl-c1">\pgfkeysvalueof</span>{/pgfplots/domain}}</td>
+ </tr>
+ <tr>
+ <td id="L1862" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1862"></td>
+ <td id="LC1862" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\domain@start</span>{<span class="pl-c1">\expandafter\get@interval@start\supplied@domain\@nil</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1863" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1863"></td>
+ <td id="LC1863" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\domain@end</span>{<span class="pl-c1">\expandafter\get@interval@end\supplied@domain\@nil</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1864" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1864"></td>
+ <td id="LC1864" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\if</span>@pgfarg</td>
+ </tr>
+ <tr>
+ <td id="L1865" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1865"></td>
+ <td id="LC1865" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\addplot</span> [domain=<span class="pl-c1">\domain@start</span>*<span class="pl-c1">\freq@scale</span>:<span class="pl-c1">\domain@end</span>*<span class="pl-c1">\freq@scale</span>, variable=t, #1] ( {<span class="pl-c1">\n@pow</span>{10}{((<span class="pl-c1">\func@mag</span>)/20)}*cos((<span class="pl-c1">\func@ph</span>)/(<span class="pl-c1">\ph@scale</span>))},</td>
+ </tr>
+ <tr>
+ <td id="L1866" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1866"></td>
+ <td id="LC1866" class="blob-code blob-code-inner js-file-line"> {<span class="pl-c1">\n@pow</span>{10}{((<span class="pl-c1">\func@mag</span>)/20)}*sin((<span class="pl-c1">\func@ph</span>)/(<span class="pl-c1">\ph@scale</span>))} );</td>
+ </tr>
+ <tr>
+ <td id="L1867" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1867"></td>
+ <td id="LC1867" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td>
+ </tr>
+ <tr>
+ <td id="L1868" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1868"></td>
+ <td id="LC1868" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\stepcounter</span>{gnuplot@id}</td>
+ </tr>
+ <tr>
+ <td id="L1869" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1869"></td>
+ <td id="LC1869" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\addplot</span> [domain=<span class="pl-c1">\domain@start</span>*<span class="pl-c1">\freq@scale</span>:<span class="pl-c1">\domain@end</span>*<span class="pl-c1">\freq@scale</span>, variable=t, #1] gnuplot [parametric, gnuplot@prefix] {</td>
+ </tr>
+ <tr>
+ <td id="L1870" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1870"></td>
+ <td id="LC1870" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\n@pow</span>{10}{((<span class="pl-c1">\func@mag</span>)/20)}*cos((<span class="pl-c1">\func@ph</span>)/(<span class="pl-c1">\ph@scale</span>)),</td>
+ </tr>
+ <tr>
+ <td id="L1871" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1871"></td>
+ <td id="LC1871" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\n@pow</span>{10}{((<span class="pl-c1">\func@mag</span>)/20)}*sin((<span class="pl-c1">\func@ph</span>)/(<span class="pl-c1">\ph@scale</span>))</td>
+ </tr>
+ <tr>
+ <td id="L1872" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1872"></td>
+ <td id="LC1872" class="blob-code blob-code-inner js-file-line"> };</td>
+ </tr>
+ <tr>
+ <td id="L1873" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1873"></td>
+ <td id="LC1873" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td>
+ </tr>
+ <tr>
+ <td id="L1874" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1874"></td>
+ <td id="LC1874" class="blob-code blob-code-inner js-file-line">}</td>
+ </tr>
+ <tr>
+ <td id="L1875" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1875"></td>
+ <td id="LC1875" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1876" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1876"></td>
+ <td id="LC1876" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>\end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L1877" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1877"></td>
+ <td id="LC1877" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\addNyquistTFPlot}</span></td>
+ </tr>
+ <tr>
+ <td id="L1878" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1878"></td>
+ <td id="LC1878" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> Adds Nyquist plot of a transfer function in TF form. This macro is designed to pass two parametric function to an |\addplot| macro. The parametric functions for phase (|\func@ph|) and magnitude (|\func@mag|) are built using the |\build@TF@plot| macro, converted to real and imaginary parts and passed to |\addplot| commands.\changes{v1.1.1}{2022/07/31}{Enabled `Hz&#39; and `rad&#39; units for frequency and phase, respectively}</span></td>
+ </tr>
+ <tr>
+ <td id="L1879" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1879"></td>
+ <td id="LC1879" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1880" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1880"></td>
+ <td id="LC1880" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>{<span class="pl-c1">\addNyquistTFPlot</span>}[2][]{</td>
+ </tr>
+ <tr>
+ <td id="L1881" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1881"></td>
+ <td id="LC1881" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\func@mag</span>{}</td>
+ </tr>
+ <tr>
+ <td id="L1882" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1882"></td>
+ <td id="LC1882" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\func@ph</span>{}</td>
+ </tr>
+ <tr>
+ <td id="L1883" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1883"></td>
+ <td id="LC1883" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\build@TF@plot</span>{<span class="pl-c1">\func@mag</span>}{<span class="pl-c1">\func@ph</span>}{#2}</td>
+ </tr>
+ <tr>
+ <td id="L1884" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1884"></td>
+ <td id="LC1884" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\supplied@domain</span>{<span class="pl-c1">\pgfkeysvalueof</span>{/pgfplots/domain}}</td>
+ </tr>
+ <tr>
+ <td id="L1885" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1885"></td>
+ <td id="LC1885" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\domain@start</span>{<span class="pl-c1">\expandafter\get@interval@start\supplied@domain\@nil</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1886" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1886"></td>
+ <td id="LC1886" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\domain@end</span>{<span class="pl-c1">\expandafter\get@interval@end\supplied@domain\@nil</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1887" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1887"></td>
+ <td id="LC1887" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\if</span>@pgfarg</td>
+ </tr>
+ <tr>
+ <td id="L1888" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1888"></td>
+ <td id="LC1888" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\addplot</span> [domain=<span class="pl-c1">\domain@start</span>*<span class="pl-c1">\freq@scale</span>:<span class="pl-c1">\domain@end</span>*<span class="pl-c1">\freq@scale</span>, variable=t, #1] ( {<span class="pl-c1">\n@pow</span>{10}{((<span class="pl-c1">\func@mag</span>)/20)}*cos((<span class="pl-c1">\func@ph</span>)/(<span class="pl-c1">\ph@scale</span>))},</td>
+ </tr>
+ <tr>
+ <td id="L1889" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1889"></td>
+ <td id="LC1889" class="blob-code blob-code-inner js-file-line"> {<span class="pl-c1">\n@pow</span>{10}{((<span class="pl-c1">\func@mag</span>)/20)}*sin((<span class="pl-c1">\func@ph</span>)/(<span class="pl-c1">\ph@scale</span>))} );</td>
+ </tr>
+ <tr>
+ <td id="L1890" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1890"></td>
+ <td id="LC1890" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td>
+ </tr>
+ <tr>
+ <td id="L1891" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1891"></td>
+ <td id="LC1891" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\stepcounter</span>{gnuplot@id}</td>
+ </tr>
+ <tr>
+ <td id="L1892" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1892"></td>
+ <td id="LC1892" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\addplot</span> [domain=<span class="pl-c1">\domain@start</span>*<span class="pl-c1">\freq@scale</span>:<span class="pl-c1">\domain@end</span>*<span class="pl-c1">\freq@scale</span>, variable=t, #1] gnuplot [parametric, gnuplot@prefix]{</td>
+ </tr>
+ <tr>
+ <td id="L1893" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1893"></td>
+ <td id="LC1893" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\n@pow</span>{10}{((<span class="pl-c1">\func@mag</span>)/20)}*cos((<span class="pl-c1">\func@ph</span>)/(<span class="pl-c1">\ph@scale</span>)),</td>
+ </tr>
+ <tr>
+ <td id="L1894" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1894"></td>
+ <td id="LC1894" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\n@pow</span>{10}{((<span class="pl-c1">\func@mag</span>)/20)}*sin((<span class="pl-c1">\func@ph</span>)/(<span class="pl-c1">\ph@scale</span>))</td>
+ </tr>
+ <tr>
+ <td id="L1895" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1895"></td>
+ <td id="LC1895" class="blob-code blob-code-inner js-file-line"> };</td>
+ </tr>
+ <tr>
+ <td id="L1896" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1896"></td>
+ <td id="LC1896" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td>
+ </tr>
+ <tr>
+ <td id="L1897" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1897"></td>
+ <td id="LC1897" class="blob-code blob-code-inner js-file-line">}</td>
+ </tr>
+ <tr>
+ <td id="L1898" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1898"></td>
+ <td id="LC1898" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1899" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1899"></td>
+ <td id="LC1899" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>\end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L1900" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1900"></td>
+ <td id="LC1900" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>\begin{macro}{NyquistPlot}</span></td>
+ </tr>
+ <tr>
+ <td id="L1901" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1901"></td>
+ <td id="LC1901" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> An environment to host |\addNyquist...| macros that pass parametric functions to |\addplot|. Uses the defaults specified in |bode@style| to create a shortcut that includes the |tikzpicture| and |axis| environments. \changes{v1.0.3}{2021/11/03}{Added tikz option to environments}\changes{v1.1.2}{2022/10/29}{Defined using the `NewEniron&#39; command from the `environ&#39; package to fix conflicts with externalization}</span></td>
+ </tr>
+ <tr>
+ <td id="L1902" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1902"></td>
+ <td id="LC1902" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1903" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1903"></td>
+ <td id="LC1903" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\NewEnviron</span>{NyquistPlot}[3][]{</td>
+ </tr>
+ <tr>
+ <td id="L1904" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1904"></td>
+ <td id="LC1904" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\parse@env@opt</span>{#1}</td>
+ </tr>
+ <tr>
+ <td id="L1905" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1905"></td>
+ <td id="LC1905" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\temp@cmd</span>{<span class="pl-c1">\noexpand</span><span class="pl-c1">\begin</span>{<span class="pl-smi">tikzpicture</span>} [<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt@tikz</span>}]</td>
+ </tr>
+ <tr>
+ <td id="L1906" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1906"></td>
+ <td id="LC1906" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\noexpand</span><span class="pl-c1">\begin</span>{<span class="pl-smi">axis</span>}[</td>
+ </tr>
+ <tr>
+ <td id="L1907" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1907"></td>
+ <td id="LC1907" class="blob-code blob-code-inner js-file-line"> bode@style,</td>
+ </tr>
+ <tr>
+ <td id="L1908" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1908"></td>
+ <td id="LC1908" class="blob-code blob-code-inner js-file-line"> height=5cm,</td>
+ </tr>
+ <tr>
+ <td id="L1909" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1909"></td>
+ <td id="LC1909" class="blob-code blob-code-inner js-file-line"> domain=#2:#3,</td>
+ </tr>
+ <tr>
+ <td id="L1910" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1910"></td>
+ <td id="LC1910" class="blob-code blob-code-inner js-file-line"> xlabel={<span class="pl-s"><span class="pl-pds">$</span><span class="pl-c1">\Re</span><span class="pl-pds">$</span></span>},</td>
+ </tr>
+ <tr>
+ <td id="L1911" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1911"></td>
+ <td id="LC1911" class="blob-code blob-code-inner js-file-line"> ylabel={<span class="pl-s"><span class="pl-pds">$</span><span class="pl-c1">\Im</span><span class="pl-pds">$</span></span>},</td>
+ </tr>
+ <tr>
+ <td id="L1912" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1912"></td>
+ <td id="LC1912" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt@axes</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1913" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1913"></td>
+ <td id="LC1913" class="blob-code blob-code-inner js-file-line"> ]</td>
+ </tr>
+ <tr>
+ <td id="L1914" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1914"></td>
+ <td id="LC1914" class="blob-code blob-code-inner js-file-line"> }</td>
+ </tr>
+ <tr>
+ <td id="L1915" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1915"></td>
+ <td id="LC1915" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\temp@cmd</span></td>
+ </tr>
+ <tr>
+ <td id="L1916" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1916"></td>
+ <td id="LC1916" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\addplot</span> [only marks,mark=+,thick,red] (-1 , 0);</td>
+ </tr>
+ <tr>
+ <td id="L1917" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1917"></td>
+ <td id="LC1917" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\BODY</span></td>
+ </tr>
+ <tr>
+ <td id="L1918" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1918"></td>
+ <td id="LC1918" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\end</span>{<span class="pl-smi">axis</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1919" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1919"></td>
+ <td id="LC1919" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\end</span>{<span class="pl-smi">tikzpicture</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1920" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1920"></td>
+ <td id="LC1920" class="blob-code blob-code-inner js-file-line">}</td>
+ </tr>
+ <tr>
+ <td id="L1921" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1921"></td>
+ <td id="LC1921" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1922" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1922"></td>
+ <td id="LC1922" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>\end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L1923" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1923"></td>
+ <td id="LC1923" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \subsubsection{Internal commands\label{sec:NInternal}}</span></td>
+ </tr>
+ <tr>
+ <td id="L1924" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1924"></td>
+ <td id="LC1924" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\parse@N@opt}</span></td>
+ </tr>
+ <tr>
+ <td id="L1925" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1925"></td>
+ <td id="LC1925" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> Parses options supplied to the main Nyquist and Nichols macros. A |for| loop over tuples of the form |\obj/\opt|, processed using nested if-else statements does the job. If the input |\obj| is |plot|, |axes|, or |tikz| then the corresponding |\opt| are passed, unexpanded, to the |\addplot| macro, the |axis| environment, and the |tikzpicture| environment, respectively. \changes{v1.0.3}{2021/11/03}{Added commands and tikz options}</span></td>
+ </tr>
+ <tr>
+ <td id="L1926" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1926"></td>
+ <td id="LC1926" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1927" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1927"></td>
+ <td id="LC1927" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>{<span class="pl-c1">\parse@N@opt</span>}[1]{</td>
+ </tr>
+ <tr>
+ <td id="L1928" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1928"></td>
+ <td id="LC1928" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\opt@axes</span>{}</td>
+ </tr>
+ <tr>
+ <td id="L1929" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1929"></td>
+ <td id="LC1929" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\opt@plot</span>{}</td>
+ </tr>
+ <tr>
+ <td id="L1930" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1930"></td>
+ <td id="LC1930" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\opt@commands</span>{}</td>
+ </tr>
+ <tr>
+ <td id="L1931" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1931"></td>
+ <td id="LC1931" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\opt@tikz</span>{}</td>
+ </tr>
+ <tr>
+ <td id="L1932" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1932"></td>
+ <td id="LC1932" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\foreach</span> <span class="pl-c1">\obj</span>/<span class="pl-c1">\opt</span> in {#1} {</td>
+ </tr>
+ <tr>
+ <td id="L1933" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1933"></td>
+ <td id="LC1933" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\pdf@strcmp</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\obj</span>}}{axes}=0</td>
+ </tr>
+ <tr>
+ <td id="L1934" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1934"></td>
+ <td id="LC1934" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef\opt@axes</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt</span>}}</td>
+ </tr>
+ <tr>
+ <td id="L1935" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1935"></td>
+ <td id="LC1935" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td>
+ </tr>
+ <tr>
+ <td id="L1936" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1936"></td>
+ <td id="LC1936" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\pdf@strcmp</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\obj</span>}}{plot}=0</td>
+ </tr>
+ <tr>
+ <td id="L1937" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1937"></td>
+ <td id="LC1937" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef\opt@plot</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt</span>}}</td>
+ </tr>
+ <tr>
+ <td id="L1938" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1938"></td>
+ <td id="LC1938" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td>
+ </tr>
+ <tr>
+ <td id="L1939" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1939"></td>
+ <td id="LC1939" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\pdf@strcmp</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\obj</span>}}{commands}=0</td>
+ </tr>
+ <tr>
+ <td id="L1940" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1940"></td>
+ <td id="LC1940" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef\opt@commands</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt</span>}}</td>
+ </tr>
+ <tr>
+ <td id="L1941" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1941"></td>
+ <td id="LC1941" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td>
+ </tr>
+ <tr>
+ <td id="L1942" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1942"></td>
+ <td id="LC1942" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\pdf@strcmp</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\obj</span>}}{tikz}=0</td>
+ </tr>
+ <tr>
+ <td id="L1943" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1943"></td>
+ <td id="LC1943" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef\opt@tikz</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt</span>}}</td>
+ </tr>
+ <tr>
+ <td id="L1944" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1944"></td>
+ <td id="LC1944" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td>
+ </tr>
+ <tr>
+ <td id="L1945" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1945"></td>
+ <td id="LC1945" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef\opt@plot</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt@plot</span>},</td>
+ </tr>
+ <tr>
+ <td id="L1946" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1946"></td>
+ <td id="LC1946" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\obj</span>}}</td>
+ </tr>
+ <tr>
+ <td id="L1947" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1947"></td>
+ <td id="LC1947" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td>
+ </tr>
+ <tr>
+ <td id="L1948" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1948"></td>
+ <td id="LC1948" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td>
+ </tr>
+ <tr>
+ <td id="L1949" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1949"></td>
+ <td id="LC1949" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td>
+ </tr>
+ <tr>
+ <td id="L1950" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1950"></td>
+ <td id="LC1950" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td>
+ </tr>
+ <tr>
+ <td id="L1951" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1951"></td>
+ <td id="LC1951" class="blob-code blob-code-inner js-file-line"> }</td>
+ </tr>
+ <tr>
+ <td id="L1952" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1952"></td>
+ <td id="LC1952" class="blob-code blob-code-inner js-file-line">}</td>
+ </tr>
+ <tr>
+ <td id="L1953" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1953"></td>
+ <td id="LC1953" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1954" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1954"></td>
+ <td id="LC1954" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L1955" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1955"></td>
+ <td id="LC1955" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \subsection{Nichols charts}</span></td>
+ </tr>
+ <tr>
+ <td id="L1956" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1956"></td>
+ <td id="LC1956" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\NicholsZPK}</span></td>
+ </tr>
+ <tr>
+ <td id="L1957" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1957"></td>
+ <td id="LC1957" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \changes{v1.0.3}{2021/11/03}{Added commands and tikz options}</span></td>
+ </tr>
+ <tr>
+ <td id="L1958" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1958"></td>
+ <td id="LC1958" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\NicholsTF}</span></td>
+ </tr>
+ <tr>
+ <td id="L1959" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1959"></td>
+ <td id="LC1959" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \changes{v1.0.3}{2021/11/03}{Added commands and tikz options}</span></td>
+ </tr>
+ <tr>
+ <td id="L1960" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1960"></td>
+ <td id="LC1960" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{NicholsChart}</span></td>
+ </tr>
+ <tr>
+ <td id="L1961" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1961"></td>
+ <td id="LC1961" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \changes{v1.0.3}{2021/11/03}{Added tikz option to environments}\changes{v1.1.2}{2022/10/29}{Defined using the `NewEniron&#39; command from the `environ&#39; package to fix conflicts with externalization}</span></td>
+ </tr>
+ <tr>
+ <td id="L1962" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1962"></td>
+ <td id="LC1962" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\addNicholsZPKChart}</span></td>
+ </tr>
+ <tr>
+ <td id="L1963" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1963"></td>
+ <td id="LC1963" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\addNicholsTFChart}</span></td>
+ </tr>
+ <tr>
+ <td id="L1964" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1964"></td>
+ <td id="LC1964" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> These macros and the |NicholsChart| environment generate Nichols charts, and they are implemented similar to their Nyquist counterparts.\changes{v1.1.1}{2022/07/31}{Enabled `Hz&#39; and `rad&#39; units for frequency and phase, respectively}</span></td>
+ </tr>
+ <tr>
+ <td id="L1965" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1965"></td>
+ <td id="LC1965" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L1966" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1966"></td>
+ <td id="LC1966" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>{<span class="pl-c1">\NicholsZPK</span>}[4][]{</td>
+ </tr>
+ <tr>
+ <td id="L1967" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1967"></td>
+ <td id="LC1967" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\parse@N@opt</span>{#1}</td>
+ </tr>
+ <tr>
+ <td id="L1968" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1968"></td>
+ <td id="LC1968" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\func@mag</span>{}</td>
+ </tr>
+ <tr>
+ <td id="L1969" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1969"></td>
+ <td id="LC1969" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\func@ph</span>{}</td>
+ </tr>
+ <tr>
+ <td id="L1970" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1970"></td>
+ <td id="LC1970" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\temp@cmd</span>{<span class="pl-c1">\noexpand</span><span class="pl-c1">\begin</span>{<span class="pl-smi">tikzpicture</span>} [<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt@tikz</span>}]}</td>
+ </tr>
+ <tr>
+ <td id="L1971" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1971"></td>
+ <td id="LC1971" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\temp@cmd</span></td>
+ </tr>
+ <tr>
+ <td id="L1972" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1972"></td>
+ <td id="LC1972" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\build@ZPK@plot</span>{<span class="pl-c1">\func@mag</span>}{<span class="pl-c1">\func@ph</span>}{}{#2}</td>
+ </tr>
+ <tr>
+ <td id="L1973" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1973"></td>
+ <td id="LC1973" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\temp@cmd</span>{<span class="pl-c1">\noexpand</span><span class="pl-c1">\begin</span>{<span class="pl-smi">axis</span>}[</td>
+ </tr>
+ <tr>
+ <td id="L1974" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1974"></td>
+ <td id="LC1974" class="blob-code blob-code-inner js-file-line"> ph@x@label,</td>
+ </tr>
+ <tr>
+ <td id="L1975" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1975"></td>
+ <td id="LC1975" class="blob-code blob-code-inner js-file-line"> bode@style,</td>
+ </tr>
+ <tr>
+ <td id="L1976" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1976"></td>
+ <td id="LC1976" class="blob-code blob-code-inner js-file-line"> domain=#3*<span class="pl-c1">\freq@scale</span>:#4*<span class="pl-c1">\freq@scale</span>,</td>
+ </tr>
+ <tr>
+ <td id="L1977" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1977"></td>
+ <td id="LC1977" class="blob-code blob-code-inner js-file-line"> height=5cm,</td>
+ </tr>
+ <tr>
+ <td id="L1978" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1978"></td>
+ <td id="LC1978" class="blob-code blob-code-inner js-file-line"> ylabel={Gain (dB)},</td>
+ </tr>
+ <tr>
+ <td id="L1979" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1979"></td>
+ <td id="LC1979" class="blob-code blob-code-inner js-file-line"> samples=500,</td>
+ </tr>
+ <tr>
+ <td id="L1980" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1980"></td>
+ <td id="LC1980" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt@axes</span>}</td>
+ </tr>
+ <tr>
+ <td id="L1981" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1981"></td>
+ <td id="LC1981" class="blob-code blob-code-inner js-file-line"> ]}</td>
+ </tr>
+ <tr>
+ <td id="L1982" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1982"></td>
+ <td id="LC1982" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\temp@cmd</span></td>
+ </tr>
+ <tr>
+ <td id="L1983" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1983"></td>
+ <td id="LC1983" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\temp@cmd</span>{<span class="pl-c1">\noexpand\addplot</span> [variable=t,thick,<span class="pl-c1">\opt@plot</span>]}</td>
+ </tr>
+ <tr>
+ <td id="L1984" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1984"></td>
+ <td id="LC1984" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\if</span>@pgfarg</td>
+ </tr>
+ <tr>
+ <td id="L1985" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1985"></td>
+ <td id="LC1985" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\temp@cmd</span> ( {<span class="pl-c1">\func@ph</span>} , {<span class="pl-c1">\func@mag</span>} );</td>
+ </tr>
+ <tr>
+ <td id="L1986" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1986"></td>
+ <td id="LC1986" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\opt@commands</span></td>
+ </tr>
+ <tr>
+ <td id="L1987" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1987"></td>
+ <td id="LC1987" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td>
+ </tr>
+ <tr>
+ <td id="L1988" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1988"></td>
+ <td id="LC1988" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\stepcounter</span>{gnuplot@id}</td>
+ </tr>
+ <tr>
+ <td id="L1989" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1989"></td>
+ <td id="LC1989" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\temp@cmd</span> gnuplot [raw gnuplot, gnuplot@prefix]</td>
+ </tr>
+ <tr>
+ <td id="L1990" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1990"></td>
+ <td id="LC1990" class="blob-code blob-code-inner js-file-line"> { set table <span class="pl-s"><span class="pl-pds">$</span>meta;</span></td>
+ </tr>
+ <tr>
+ <td id="L1991" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1991"></td>
+ <td id="LC1991" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set logscale x <span class="pl-c1">10</span>;</span></td>
+ </tr>
+ <tr>
+ <td id="L1992" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1992"></td>
+ <td id="LC1992" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set dummy t;</span></td>
+ </tr>
+ <tr>
+ <td id="L1993" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1993"></td>
+ <td id="LC1993" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set samples <span class="pl-c1">\pgfkeysvalueof</span>{/pgfplots/samples};</span></td>
+ </tr>
+ <tr>
+ <td id="L1994" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1994"></td>
+ <td id="LC1994" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set trange [#<span class="pl-c1">3</span>*<span class="pl-c1">\freq</span>@scale:#<span class="pl-c1">4</span>*<span class="pl-c1">\freq</span>@scale];</span></td>
+ </tr>
+ <tr>
+ <td id="L1995" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1995"></td>
+ <td id="LC1995" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> plot &#39;+&#39; using (<span class="pl-c1">\func</span>@mag) : ((<span class="pl-c1">\func</span>@ph)/(<span class="pl-c1">\ph</span>@scale));</span></td>
+ </tr>
+ <tr>
+ <td id="L1996" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1996"></td>
+ <td id="LC1996" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> unset logscale x;</span></td>
+ </tr>
+ <tr>
+ <td id="L1997" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1997"></td>
+ <td id="LC1997" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set table &quot;<span class="pl-c1">\bodeplot</span>@prefix<span class="pl-c1">\arabic</span>{gnuplot@id}.table&quot;;</span></td>
+ </tr>
+ <tr>
+ <td id="L1998" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1998"></td>
+ <td id="LC1998" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> plot &quot;<span class="pl-pds">$</span></span>meta&quot; using (<span class="pl-s"><span class="pl-pds">$</span><span class="pl-c1">2</span>*<span class="pl-c1">\ph</span>@scale):(<span class="pl-pds">$</span></span>1);</td>
+ </tr>
+ <tr>
+ <td id="L1999" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1999"></td>
+ <td id="LC1999" class="blob-code blob-code-inner js-file-line"> };</td>
+ </tr>
+ <tr>
+ <td id="L2000" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2000"></td>
+ <td id="LC2000" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\opt@commands</span></td>
+ </tr>
+ <tr>
+ <td id="L2001" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2001"></td>
+ <td id="LC2001" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td>
+ </tr>
+ <tr>
+ <td id="L2002" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2002"></td>
+ <td id="LC2002" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\end</span>{<span class="pl-smi">axis</span>}</td>
+ </tr>
+ <tr>
+ <td id="L2003" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2003"></td>
+ <td id="LC2003" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\end</span>{tikzpicture}</td>
+ </tr>
+ <tr>
+ <td id="L2004" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2004"></td>
+ <td id="LC2004" class="blob-code blob-code-inner js-file-line">}</td>
+ </tr>
+ <tr>
+ <td id="L2005" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2005"></td>
+ <td id="LC2005" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>{<span class="pl-c1">\NicholsTF</span>}[4][]{</td>
+ </tr>
+ <tr>
+ <td id="L2006" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2006"></td>
+ <td id="LC2006" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\parse@N@opt</span>{#1}</td>
+ </tr>
+ <tr>
+ <td id="L2007" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2007"></td>
+ <td id="LC2007" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\func@mag</span>{}</td>
+ </tr>
+ <tr>
+ <td id="L2008" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2008"></td>
+ <td id="LC2008" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\func@ph</span>{}</td>
+ </tr>
+ <tr>
+ <td id="L2009" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2009"></td>
+ <td id="LC2009" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\temp@cmd</span>{<span class="pl-c1">\noexpand</span><span class="pl-c1">\begin</span>{<span class="pl-smi">tikzpicture</span>} [<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt@tikz</span>}]}</td>
+ </tr>
+ <tr>
+ <td id="L2010" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2010"></td>
+ <td id="LC2010" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\temp@cmd</span></td>
+ </tr>
+ <tr>
+ <td id="L2011" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2011"></td>
+ <td id="LC2011" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\build@TF@plot</span>{<span class="pl-c1">\func@mag</span>}{<span class="pl-c1">\func@ph</span>}{#2}</td>
+ </tr>
+ <tr>
+ <td id="L2012" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2012"></td>
+ <td id="LC2012" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\temp@cmd</span>{<span class="pl-c1">\noexpand</span><span class="pl-c1">\begin</span>{<span class="pl-smi">axis</span>}[</td>
+ </tr>
+ <tr>
+ <td id="L2013" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2013"></td>
+ <td id="LC2013" class="blob-code blob-code-inner js-file-line"> ph@x@label,</td>
+ </tr>
+ <tr>
+ <td id="L2014" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2014"></td>
+ <td id="LC2014" class="blob-code blob-code-inner js-file-line"> bode@style,</td>
+ </tr>
+ <tr>
+ <td id="L2015" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2015"></td>
+ <td id="LC2015" class="blob-code blob-code-inner js-file-line"> domain=#3*<span class="pl-c1">\freq@scale</span>:#4*<span class="pl-c1">\freq@scale</span>,</td>
+ </tr>
+ <tr>
+ <td id="L2016" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2016"></td>
+ <td id="LC2016" class="blob-code blob-code-inner js-file-line"> height=5cm,</td>
+ </tr>
+ <tr>
+ <td id="L2017" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2017"></td>
+ <td id="LC2017" class="blob-code blob-code-inner js-file-line"> ylabel={Gain (dB)},</td>
+ </tr>
+ <tr>
+ <td id="L2018" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2018"></td>
+ <td id="LC2018" class="blob-code blob-code-inner js-file-line"> samples=500,</td>
+ </tr>
+ <tr>
+ <td id="L2019" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2019"></td>
+ <td id="LC2019" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt@axes</span>}</td>
+ </tr>
+ <tr>
+ <td id="L2020" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2020"></td>
+ <td id="LC2020" class="blob-code blob-code-inner js-file-line"> ]}</td>
+ </tr>
+ <tr>
+ <td id="L2021" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2021"></td>
+ <td id="LC2021" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\temp@cmd</span></td>
+ </tr>
+ <tr>
+ <td id="L2022" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2022"></td>
+ <td id="LC2022" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\temp@cmd</span>{<span class="pl-c1">\noexpand\addplot</span> [variable=t,thick, <span class="pl-c1">\opt@plot</span>]}</td>
+ </tr>
+ <tr>
+ <td id="L2023" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2023"></td>
+ <td id="LC2023" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\if</span>@pgfarg</td>
+ </tr>
+ <tr>
+ <td id="L2024" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2024"></td>
+ <td id="LC2024" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\temp@cmd</span> ( {<span class="pl-c1">\n@mod</span>{<span class="pl-c1">\func@ph</span>}{2*pi*<span class="pl-c1">\ph@scale</span>}} , {<span class="pl-c1">\func@mag</span>} );</td>
+ </tr>
+ <tr>
+ <td id="L2025" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2025"></td>
+ <td id="LC2025" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\opt@commands</span></td>
+ </tr>
+ <tr>
+ <td id="L2026" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2026"></td>
+ <td id="LC2026" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td>
+ </tr>
+ <tr>
+ <td id="L2027" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2027"></td>
+ <td id="LC2027" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\stepcounter</span>{gnuplot@id}</td>
+ </tr>
+ <tr>
+ <td id="L2028" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2028"></td>
+ <td id="LC2028" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\temp@cmd</span> gnuplot [raw gnuplot, gnuplot@prefix]</td>
+ </tr>
+ <tr>
+ <td id="L2029" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2029"></td>
+ <td id="LC2029" class="blob-code blob-code-inner js-file-line"> { set table <span class="pl-s"><span class="pl-pds">$</span>meta<span class="pl-c1">1</span>;</span></td>
+ </tr>
+ <tr>
+ <td id="L2030" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2030"></td>
+ <td id="LC2030" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set logscale x <span class="pl-c1">10</span>;</span></td>
+ </tr>
+ <tr>
+ <td id="L2031" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2031"></td>
+ <td id="LC2031" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set dummy t;</span></td>
+ </tr>
+ <tr>
+ <td id="L2032" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2032"></td>
+ <td id="LC2032" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set samples <span class="pl-c1">\pgfkeysvalueof</span>{/pgfplots/samples};</span></td>
+ </tr>
+ <tr>
+ <td id="L2033" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2033"></td>
+ <td id="LC2033" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set trange [#<span class="pl-c1">3</span>*<span class="pl-c1">\freq</span>@scale:#<span class="pl-c1">4</span>*<span class="pl-c1">\freq</span>@scale];</span></td>
+ </tr>
+ <tr>
+ <td id="L2034" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2034"></td>
+ <td id="LC2034" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> plot &#39;+&#39; using (<span class="pl-c1">\func</span>@mag) : ((<span class="pl-c1">\func</span>@ph)/(<span class="pl-c1">\ph</span>@scale));</span></td>
+ </tr>
+ <tr>
+ <td id="L2035" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2035"></td>
+ <td id="LC2035" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> unset logscale x;</span></td>
+ </tr>
+ <tr>
+ <td id="L2036" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2036"></td>
+ <td id="LC2036" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set table <span class="pl-pds">$</span></span>meta2;</td>
+ </tr>
+ <tr>
+ <td id="L2037" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2037"></td>
+ <td id="LC2037" class="blob-code blob-code-inner js-file-line"> plot <span class="pl-ii">&quot;$meta1&quot;</span> using (<span class="pl-s"><span class="pl-pds">$</span><span class="pl-c1">1</span>):(<span class="pl-pds">$</span></span>2) smooth unwrap;</td>
+ </tr>
+ <tr>
+ <td id="L2038" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2038"></td>
+ <td id="LC2038" class="blob-code blob-code-inner js-file-line"> set table <span class="pl-ii">&quot;\bodeplot@prefix\arabic{gnuplot@id}.table&quot;</span>;</td>
+ </tr>
+ <tr>
+ <td id="L2039" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2039"></td>
+ <td id="LC2039" class="blob-code blob-code-inner js-file-line"> plot <span class="pl-ii">&quot;$meta2&quot;</span> using (<span class="pl-s"><span class="pl-pds">$</span><span class="pl-c1">2</span>*<span class="pl-c1">\ph</span>@scale):(<span class="pl-pds">$</span></span>1);</td>
+ </tr>
+ <tr>
+ <td id="L2040" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2040"></td>
+ <td id="LC2040" class="blob-code blob-code-inner js-file-line"> };</td>
+ </tr>
+ <tr>
+ <td id="L2041" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2041"></td>
+ <td id="LC2041" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\opt@commands</span></td>
+ </tr>
+ <tr>
+ <td id="L2042" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2042"></td>
+ <td id="LC2042" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td>
+ </tr>
+ <tr>
+ <td id="L2043" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2043"></td>
+ <td id="LC2043" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\end</span>{<span class="pl-smi">axis</span>}</td>
+ </tr>
+ <tr>
+ <td id="L2044" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2044"></td>
+ <td id="LC2044" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\end</span>{tikzpicture}</td>
+ </tr>
+ <tr>
+ <td id="L2045" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2045"></td>
+ <td id="LC2045" class="blob-code blob-code-inner js-file-line">}</td>
+ </tr>
+ <tr>
+ <td id="L2046" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2046"></td>
+ <td id="LC2046" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\NewEnviron</span>{NicholsChart}[3][]{</td>
+ </tr>
+ <tr>
+ <td id="L2047" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2047"></td>
+ <td id="LC2047" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\parse@env@opt</span>{#1}</td>
+ </tr>
+ <tr>
+ <td id="L2048" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2048"></td>
+ <td id="LC2048" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\temp@cmd</span>{<span class="pl-c1">\noexpand</span><span class="pl-c1">\begin</span>{<span class="pl-smi">tikzpicture</span>} [<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt@tikz</span>}]</td>
+ </tr>
+ <tr>
+ <td id="L2049" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2049"></td>
+ <td id="LC2049" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\noexpand</span><span class="pl-c1">\begin</span>{<span class="pl-smi">axis</span>}[</td>
+ </tr>
+ <tr>
+ <td id="L2050" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2050"></td>
+ <td id="LC2050" class="blob-code blob-code-inner js-file-line"> ph@x@label,</td>
+ </tr>
+ <tr>
+ <td id="L2051" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2051"></td>
+ <td id="LC2051" class="blob-code blob-code-inner js-file-line"> bode@style,</td>
+ </tr>
+ <tr>
+ <td id="L2052" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2052"></td>
+ <td id="LC2052" class="blob-code blob-code-inner js-file-line"> domain=#2:#3,</td>
+ </tr>
+ <tr>
+ <td id="L2053" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2053"></td>
+ <td id="LC2053" class="blob-code blob-code-inner js-file-line"> height=5cm,</td>
+ </tr>
+ <tr>
+ <td id="L2054" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2054"></td>
+ <td id="LC2054" class="blob-code blob-code-inner js-file-line"> ylabel={Gain (dB)},</td>
+ </tr>
+ <tr>
+ <td id="L2055" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2055"></td>
+ <td id="LC2055" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt@axes</span>}</td>
+ </tr>
+ <tr>
+ <td id="L2056" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2056"></td>
+ <td id="LC2056" class="blob-code blob-code-inner js-file-line"> ]</td>
+ </tr>
+ <tr>
+ <td id="L2057" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2057"></td>
+ <td id="LC2057" class="blob-code blob-code-inner js-file-line"> }</td>
+ </tr>
+ <tr>
+ <td id="L2058" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2058"></td>
+ <td id="LC2058" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\temp@cmd</span></td>
+ </tr>
+ <tr>
+ <td id="L2059" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2059"></td>
+ <td id="LC2059" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\BODY</span></td>
+ </tr>
+ <tr>
+ <td id="L2060" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2060"></td>
+ <td id="LC2060" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\end</span>{<span class="pl-smi">axis</span>}</td>
+ </tr>
+ <tr>
+ <td id="L2061" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2061"></td>
+ <td id="LC2061" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\end</span>{<span class="pl-smi">tikzpicture</span>}</td>
+ </tr>
+ <tr>
+ <td id="L2062" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2062"></td>
+ <td id="LC2062" class="blob-code blob-code-inner js-file-line">}</td>
+ </tr>
+ <tr>
+ <td id="L2063" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2063"></td>
+ <td id="LC2063" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>{<span class="pl-c1">\addNicholsZPKChart</span>}[2][]{</td>
+ </tr>
+ <tr>
+ <td id="L2064" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2064"></td>
+ <td id="LC2064" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\func@mag</span>{}</td>
+ </tr>
+ <tr>
+ <td id="L2065" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2065"></td>
+ <td id="LC2065" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\func@ph</span>{}</td>
+ </tr>
+ <tr>
+ <td id="L2066" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2066"></td>
+ <td id="LC2066" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\build@ZPK@plot</span>{<span class="pl-c1">\func@mag</span>}{<span class="pl-c1">\func@ph</span>}{}{#2}</td>
+ </tr>
+ <tr>
+ <td id="L2067" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2067"></td>
+ <td id="LC2067" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\supplied@domain</span>{<span class="pl-c1">\pgfkeysvalueof</span>{/pgfplots/domain}}</td>
+ </tr>
+ <tr>
+ <td id="L2068" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2068"></td>
+ <td id="LC2068" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\domain@start</span>{<span class="pl-c1">\expandafter\get@interval@start\supplied@domain\@nil</span>}</td>
+ </tr>
+ <tr>
+ <td id="L2069" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2069"></td>
+ <td id="LC2069" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\domain@end</span>{<span class="pl-c1">\expandafter\get@interval@end\supplied@domain\@nil</span>}</td>
+ </tr>
+ <tr>
+ <td id="L2070" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2070"></td>
+ <td id="LC2070" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\if</span>@pgfarg</td>
+ </tr>
+ <tr>
+ <td id="L2071" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2071"></td>
+ <td id="LC2071" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\addplot</span> [variable=t, domain=<span class="pl-c1">\domain@start</span>*<span class="pl-c1">\freq@scale</span>:<span class="pl-c1">\domain@end</span>*<span class="pl-c1">\freq@scale</span>, #1] ( {<span class="pl-c1">\func@ph</span>} , {<span class="pl-c1">\func@mag</span>} );</td>
+ </tr>
+ <tr>
+ <td id="L2072" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2072"></td>
+ <td id="LC2072" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td>
+ </tr>
+ <tr>
+ <td id="L2073" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2073"></td>
+ <td id="LC2073" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\stepcounter</span>{gnuplot@id}</td>
+ </tr>
+ <tr>
+ <td id="L2074" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2074"></td>
+ <td id="LC2074" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\addplot</span> [#1] gnuplot [raw gnuplot, gnuplot@prefix]</td>
+ </tr>
+ <tr>
+ <td id="L2075" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2075"></td>
+ <td id="LC2075" class="blob-code blob-code-inner js-file-line"> { set table <span class="pl-s"><span class="pl-pds">$</span>meta;</span></td>
+ </tr>
+ <tr>
+ <td id="L2076" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2076"></td>
+ <td id="LC2076" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set logscale x <span class="pl-c1">10</span>;</span></td>
+ </tr>
+ <tr>
+ <td id="L2077" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2077"></td>
+ <td id="LC2077" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set dummy t;</span></td>
+ </tr>
+ <tr>
+ <td id="L2078" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2078"></td>
+ <td id="LC2078" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set samples <span class="pl-c1">\pgfkeysvalueof</span>{/pgfplots/samples};</span></td>
+ </tr>
+ <tr>
+ <td id="L2079" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2079"></td>
+ <td id="LC2079" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set trange [<span class="pl-c1">\domain</span>@start*<span class="pl-c1">\freq</span>@scale:<span class="pl-c1">\domain</span>@end*<span class="pl-c1">\freq</span>@scale];</span></td>
+ </tr>
+ <tr>
+ <td id="L2080" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2080"></td>
+ <td id="LC2080" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> plot &#39;+&#39; using (<span class="pl-c1">\func</span>@mag) : ((<span class="pl-c1">\func</span>@ph)/(<span class="pl-c1">\ph</span>@scale));</span></td>
+ </tr>
+ <tr>
+ <td id="L2081" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2081"></td>
+ <td id="LC2081" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> unset logscale x;</span></td>
+ </tr>
+ <tr>
+ <td id="L2082" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2082"></td>
+ <td id="LC2082" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set table &quot;<span class="pl-c1">\bodeplot</span>@prefix<span class="pl-c1">\arabic</span>{gnuplot@id}.table&quot;;</span></td>
+ </tr>
+ <tr>
+ <td id="L2083" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2083"></td>
+ <td id="LC2083" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> plot &quot;<span class="pl-pds">$</span></span>meta&quot; using (<span class="pl-s"><span class="pl-pds">$</span><span class="pl-c1">2</span>*<span class="pl-c1">\ph</span>@scale):(<span class="pl-pds">$</span></span>1);</td>
+ </tr>
+ <tr>
+ <td id="L2084" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2084"></td>
+ <td id="LC2084" class="blob-code blob-code-inner js-file-line"> };</td>
+ </tr>
+ <tr>
+ <td id="L2085" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2085"></td>
+ <td id="LC2085" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td>
+ </tr>
+ <tr>
+ <td id="L2086" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2086"></td>
+ <td id="LC2086" class="blob-code blob-code-inner js-file-line">}</td>
+ </tr>
+ <tr>
+ <td id="L2087" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2087"></td>
+ <td id="LC2087" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>{<span class="pl-c1">\addNicholsTFChart</span>}[2][]{</td>
+ </tr>
+ <tr>
+ <td id="L2088" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2088"></td>
+ <td id="LC2088" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\func@mag</span>{}</td>
+ </tr>
+ <tr>
+ <td id="L2089" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2089"></td>
+ <td id="LC2089" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\func@ph</span>{}</td>
+ </tr>
+ <tr>
+ <td id="L2090" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2090"></td>
+ <td id="LC2090" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\build@TF@plot</span>{<span class="pl-c1">\func@mag</span>}{<span class="pl-c1">\func@ph</span>}{#2}</td>
+ </tr>
+ <tr>
+ <td id="L2091" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2091"></td>
+ <td id="LC2091" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\supplied@domain</span>{<span class="pl-c1">\pgfkeysvalueof</span>{/pgfplots/domain}}</td>
+ </tr>
+ <tr>
+ <td id="L2092" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2092"></td>
+ <td id="LC2092" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\domain@start</span>{<span class="pl-c1">\expandafter\get@interval@start\supplied@domain\@nil</span>}</td>
+ </tr>
+ <tr>
+ <td id="L2093" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2093"></td>
+ <td id="LC2093" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\domain@end</span>{<span class="pl-c1">\expandafter\get@interval@end\supplied@domain\@nil</span>}</td>
+ </tr>
+ <tr>
+ <td id="L2094" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2094"></td>
+ <td id="LC2094" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\if</span>@pgfarg</td>
+ </tr>
+ <tr>
+ <td id="L2095" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2095"></td>
+ <td id="LC2095" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\addplot</span> [variable=t, domain=<span class="pl-c1">\domain@start</span>*<span class="pl-c1">\freq@scale</span>:<span class="pl-c1">\domain@end</span>*<span class="pl-c1">\freq@scale</span>, #1] ( {<span class="pl-c1">\n@mod</span>{<span class="pl-c1">\func@ph</span>}{2*pi*<span class="pl-c1">\ph@scale</span>}} , {<span class="pl-c1">\func@mag</span>} );</td>
+ </tr>
+ <tr>
+ <td id="L2096" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2096"></td>
+ <td id="LC2096" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td>
+ </tr>
+ <tr>
+ <td id="L2097" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2097"></td>
+ <td id="LC2097" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\stepcounter</span>{gnuplot@id}</td>
+ </tr>
+ <tr>
+ <td id="L2098" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2098"></td>
+ <td id="LC2098" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\addplot</span> [#1] gnuplot [raw gnuplot, gnuplot@prefix]</td>
+ </tr>
+ <tr>
+ <td id="L2099" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2099"></td>
+ <td id="LC2099" class="blob-code blob-code-inner js-file-line"> { set table <span class="pl-s"><span class="pl-pds">$</span>meta<span class="pl-c1">1</span>;</span></td>
+ </tr>
+ <tr>
+ <td id="L2100" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2100"></td>
+ <td id="LC2100" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set logscale x <span class="pl-c1">10</span>;</span></td>
+ </tr>
+ <tr>
+ <td id="L2101" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2101"></td>
+ <td id="LC2101" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set dummy t;</span></td>
+ </tr>
+ <tr>
+ <td id="L2102" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2102"></td>
+ <td id="LC2102" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set samples <span class="pl-c1">\pgfkeysvalueof</span>{/pgfplots/samples};</span></td>
+ </tr>
+ <tr>
+ <td id="L2103" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2103"></td>
+ <td id="LC2103" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set trange [<span class="pl-c1">\domain</span>@start*<span class="pl-c1">\freq</span>@scale:<span class="pl-c1">\domain</span>@end*<span class="pl-c1">\freq</span>@scale];</span></td>
+ </tr>
+ <tr>
+ <td id="L2104" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2104"></td>
+ <td id="LC2104" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> plot &#39;+&#39; using (<span class="pl-c1">\func</span>@mag) : ((<span class="pl-c1">\func</span>@ph)/(<span class="pl-c1">\ph</span>@scale));</span></td>
+ </tr>
+ <tr>
+ <td id="L2105" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2105"></td>
+ <td id="LC2105" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> unset logscale x;</span></td>
+ </tr>
+ <tr>
+ <td id="L2106" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2106"></td>
+ <td id="LC2106" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set table <span class="pl-pds">$</span></span>meta2;</td>
+ </tr>
+ <tr>
+ <td id="L2107" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2107"></td>
+ <td id="LC2107" class="blob-code blob-code-inner js-file-line"> plot <span class="pl-ii">&quot;$meta1&quot;</span> using (<span class="pl-s"><span class="pl-pds">$</span><span class="pl-c1">1</span>):(<span class="pl-pds">$</span></span>2) smooth unwrap;</td>
+ </tr>
+ <tr>
+ <td id="L2108" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2108"></td>
+ <td id="LC2108" class="blob-code blob-code-inner js-file-line"> set table <span class="pl-ii">&quot;\bodeplot@prefix\arabic{gnuplot@id}.table&quot;</span>;</td>
+ </tr>
+ <tr>
+ <td id="L2109" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2109"></td>
+ <td id="LC2109" class="blob-code blob-code-inner js-file-line"> plot <span class="pl-ii">&quot;$meta2&quot;</span> using (<span class="pl-s"><span class="pl-pds">$</span><span class="pl-c1">2</span>*<span class="pl-c1">\ph</span>@scale):(<span class="pl-pds">$</span></span>1);</td>
+ </tr>
+ <tr>
+ <td id="L2110" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2110"></td>
+ <td id="LC2110" class="blob-code blob-code-inner js-file-line"> };</td>
+ </tr>
+ <tr>
+ <td id="L2111" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2111"></td>
+ <td id="LC2111" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td>
+ </tr>
+ <tr>
+ <td id="L2112" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2112"></td>
+ <td id="LC2112" class="blob-code blob-code-inner js-file-line">}</td>
+ </tr>
+ <tr>
+ <td id="L2113" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2113"></td>
+ <td id="LC2113" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td>
+ </tr>
+ <tr>
+ <td id="L2114" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2114"></td>
+ <td id="LC2114" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L2115" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2115"></td>
+ <td id="LC2115" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L2116" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2116"></td>
+ <td id="LC2116" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L2117" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2117"></td>
+ <td id="LC2117" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L2118" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2118"></td>
+ <td id="LC2118" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td>
+ </tr>
+ <tr>
+ <td id="L2119" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2119"></td>
+ <td id="LC2119" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \Finale</span></td>
+ </tr>
+ <tr>
+ <td id="L2120" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2120"></td>
+ <td id="LC2120" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\endinput</span></td>
+ </tr>
+ </table>
+</div>
+
+ <details class="details-reset details-overlay BlobToolbar position-absolute js-file-line-actions dropdown d-none" aria-hidden="true">
+ <summary class="btn-octicon ml-0 px-2 p-0 color-bg-default border color-border-default rounded-2" aria-label="Inline file action toolbar">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-kebab-horizontal">
+ <path d="M8 9a1.5 1.5 0 100-3 1.5 1.5 0 000 3zM1.5 9a1.5 1.5 0 100-3 1.5 1.5 0 000 3zm13 0a1.5 1.5 0 100-3 1.5 1.5 0 000 3z"></path>
+</svg>
+ </summary>
+ <details-menu>
+
+ <ul class="BlobToolbar-dropdown dropdown-menu dropdown-menu-se ml-2 mt-2"
+ style="width:185px"
+ >
+ <li>
+ <clipboard-copy role="menuitem" class="dropdown-item" id="js-copy-lines" style="cursor:pointer;" aria-label="Copy lines">
+ Copy lines
+ </clipboard-copy>
+ </li>
+ <li>
+ <clipboard-copy role="menuitem" class="dropdown-item" id="js-copy-permalink" style="cursor:pointer;" aria-label="Copy permalink">
+ Copy permalink
+ </clipboard-copy>
+ </li>
+ <li><a class="dropdown-item js-update-url-with-hash" id="js-view-git-blame" role="menuitem" href="/rlkamalapurkar/bodeplot/blame/3746d1613a5eea9f1e26d4cf5bcce954068463f3/bodeplot.dtx">View git blame</a></li>
+ <li><a class="dropdown-item" id="js-new-issue" role="menuitem" href="/rlkamalapurkar/bodeplot/issues/new">Reference in new issue</a></li>
+ </ul>
+ </details-menu>
+ </details>
+
+ </div>
+
+ </div>
+
+
+
+
+ <details class="details-reset details-overlay details-overlay-dark" id="jumpto-line-details-dialog">
+ <summary data-hotkey="l" aria-label="Jump to line"></summary>
+ <details-dialog class="Box Box--overlay d-flex flex-column anim-fade-in fast linejump" aria-label="Jump to line">
+ <!-- '"` --><!-- </textarea></xmp> --></option></form><form class="js-jump-to-line-form Box-body d-flex" data-turbo="false" action="" accept-charset="UTF-8" method="get">
+ <input class="form-control flex-auto mr-3 linejump-input js-jump-to-line-field" type="text" placeholder="Jump to line&hellip;" aria-label="Jump to line" autofocus>
+ <button data-close-dialog="" type="submit" data-view-component="true" class="btn"> Go
+</button>
+</form> </details-dialog>
+ </details>
+
+
+
+</div>
+
+ </div>
+
+
+ </div>
+
+ </turbo-frame>
+
+
+ </main>
+ </div>
+
+ </div>
+
+ <footer class="footer width-full container-xl p-responsive">
+ <h2 class='sr-only'>Footer</h2>
+
+ <div class="position-relative d-flex flex-items-center pb-2 f6 color-fg-muted border-top color-border-muted flex-column-reverse flex-lg-row flex-wrap flex-lg-nowrap mt-6 pt-6">
+ <div class="list-style-none d-flex flex-wrap col-0 col-lg-2 flex-justify-start flex-lg-justify-between mb-2 mb-lg-0">
+ <div class="mt-2 mt-lg-0 d-flex flex-items-center">
+ <a aria-label="Homepage" title="GitHub" class="footer-octicon mr-2" href="https://github.com">
+ <svg aria-hidden="true" height="24" viewBox="0 0 16 16" version="1.1" width="24" data-view-component="true" class="octicon octicon-mark-github">
+ <path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"></path>
+</svg>
+</a> <span>
+ &copy; 2022 GitHub, Inc.
+ </span>
+ </div>
+ </div>
+
+ <nav aria-label='footer' class="col-12 col-lg-8">
+ <h3 class='sr-only' id='sr-footer-heading'>Footer navigation</h3>
+ <ul class="list-style-none d-flex flex-wrap col-12 flex-justify-center flex-lg-justify-between mb-2 mb-lg-0" aria-labelledby='sr-footer-heading'>
+ <li class="mr-3 mr-lg-0"><a href="https://docs.github.com/en/github/site-policy/github-terms-of-service" data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to terms&quot;,&quot;label&quot;:&quot;text:terms&quot;}">Terms</a></li>
+ <li class="mr-3 mr-lg-0"><a href="https://docs.github.com/en/github/site-policy/github-privacy-statement" data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to privacy&quot;,&quot;label&quot;:&quot;text:privacy&quot;}">Privacy</a></li>
+ <li class="mr-3 mr-lg-0"><a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to security&quot;,&quot;label&quot;:&quot;text:security&quot;}" href="https://github.com/security">Security</a></li>
+ <li class="mr-3 mr-lg-0"><a href="https://www.githubstatus.com/" data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to status&quot;,&quot;label&quot;:&quot;text:status&quot;}">Status</a></li>
+ <li class="mr-3 mr-lg-0"><a data-ga-click="Footer, go to help, text:Docs" href="https://docs.github.com">Docs</a></li>
+ <li class="mr-3 mr-lg-0"><a href="https://support.github.com?tags=dotcom-footer" data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to contact&quot;,&quot;label&quot;:&quot;text:contact&quot;}">Contact GitHub</a></li>
+ <li class="mr-3 mr-lg-0"><a href="https://github.com/pricing" data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to Pricing&quot;,&quot;label&quot;:&quot;text:Pricing&quot;}">Pricing</a></li>
+ <li class="mr-3 mr-lg-0"><a href="https://docs.github.com" data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to api&quot;,&quot;label&quot;:&quot;text:api&quot;}">API</a></li>
+ <li class="mr-3 mr-lg-0"><a href="https://services.github.com" data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to training&quot;,&quot;label&quot;:&quot;text:training&quot;}">Training</a></li>
+ <li class="mr-3 mr-lg-0"><a href="https://github.blog" data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to blog&quot;,&quot;label&quot;:&quot;text:blog&quot;}">Blog</a></li>
+ <li><a data-ga-click="Footer, go to about, text:about" href="https://github.com/about">About</a></li>
+ </ul>
+ </nav>
+ </div>
+
+ <div class="d-flex flex-justify-center pb-6">
+ <span class="f6 color-fg-muted"></span>
+ </div>
+</footer>
+
+
+
+
+ <div id="ajax-error-message" class="ajax-error-message flash flash-error" hidden>
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
+ <path fill-rule="evenodd" d="M8.22 1.754a.25.25 0 00-.44 0L1.698 13.132a.25.25 0 00.22.368h12.164a.25.25 0 00.22-.368L8.22 1.754zm-1.763-.707c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0114.082 15H1.918a1.75 1.75 0 01-1.543-2.575L6.457 1.047zM9 11a1 1 0 11-2 0 1 1 0 012 0zm-.25-5.25a.75.75 0 00-1.5 0v2.5a.75.75 0 001.5 0v-2.5z"></path>
+</svg>
+ <button type="button" class="flash-close js-ajax-error-dismiss" aria-label="Dismiss error">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x">
+ <path fill-rule="evenodd" d="M3.72 3.72a.75.75 0 011.06 0L8 6.94l3.22-3.22a.75.75 0 111.06 1.06L9.06 8l3.22 3.22a.75.75 0 11-1.06 1.06L8 9.06l-3.22 3.22a.75.75 0 01-1.06-1.06L6.94 8 3.72 4.78a.75.75 0 010-1.06z"></path>
+</svg>
+ </button>
+ You can’t perform that action at this time.
+ </div>
+
+ <div class="js-stale-session-flash flash flash-warn flash-banner" hidden
+ >
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
+ <path fill-rule="evenodd" d="M8.22 1.754a.25.25 0 00-.44 0L1.698 13.132a.25.25 0 00.22.368h12.164a.25.25 0 00.22-.368L8.22 1.754zm-1.763-.707c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0114.082 15H1.918a1.75 1.75 0 01-1.543-2.575L6.457 1.047zM9 11a1 1 0 11-2 0 1 1 0 012 0zm-.25-5.25a.75.75 0 00-1.5 0v2.5a.75.75 0 001.5 0v-2.5z"></path>
+</svg>
+ <span class="js-stale-session-flash-signed-in" hidden>You signed in with another tab or window. <a href="">Reload</a> to refresh your session.</span>
+ <span class="js-stale-session-flash-signed-out" hidden>You signed out in another tab or window. <a href="">Reload</a> to refresh your session.</span>
+ </div>
+ <template id="site-details-dialog">
+ <details class="details-reset details-overlay details-overlay-dark lh-default color-fg-default hx_rsm" open>
+ <summary role="button" aria-label="Close dialog"></summary>
+ <details-dialog class="Box Box--overlay d-flex flex-column anim-fade-in fast hx_rsm-dialog hx_rsm-modal">
+ <button class="Box-btn-octicon m-0 btn-octicon position-absolute right-0 top-0" type="button" aria-label="Close dialog" data-close-dialog>
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x">
+ <path fill-rule="evenodd" d="M3.72 3.72a.75.75 0 011.06 0L8 6.94l3.22-3.22a.75.75 0 111.06 1.06L9.06 8l3.22 3.22a.75.75 0 11-1.06 1.06L8 9.06l-3.22 3.22a.75.75 0 01-1.06-1.06L6.94 8 3.72 4.78a.75.75 0 010-1.06z"></path>
+</svg>
+ </button>
+ <div class="octocat-spinner my-6 js-details-dialog-spinner"></div>
+ </details-dialog>
+ </details>
+</template>
+
+ <div class="Popover js-hovercard-content position-absolute" style="display: none; outline: none;" tabindex="0">
+ <div class="Popover-message Popover-message--bottom-left Popover-message--large Box color-shadow-large" style="width:360px;">
+ </div>
+</div>
+
+ <template id="snippet-clipboard-copy-button">
+ <div class="zeroclipboard-container position-absolute right-0 top-0">
+ <clipboard-copy aria-label="Copy" class="ClipboardButton btn js-clipboard-copy m-2 p-0 tooltipped-no-delay" data-copy-feedback="Copied!" data-tooltip-direction="w">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copy js-clipboard-copy-icon m-2">
+ <path fill-rule="evenodd" d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 010 1.5h-1.5a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-1.5a.75.75 0 011.5 0v1.5A1.75 1.75 0 019.25 16h-7.5A1.75 1.75 0 010 14.25v-7.5z"></path><path fill-rule="evenodd" d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0114.25 11h-7.5A1.75 1.75 0 015 9.25v-7.5zm1.75-.25a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-7.5a.25.25 0 00-.25-.25h-7.5z"></path>
+</svg>
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check js-clipboard-check-icon color-fg-success d-none m-2">
+ <path fill-rule="evenodd" d="M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z"></path>
+</svg>
+ </clipboard-copy>
+ </div>
+</template>
+
+
+ <style>
+ .user-mention[href$="/rlkamalapurkar"] {
+ color: var(--color-user-mention-fg);
+ background-color: var(--color-user-mention-bg);
+ border-radius: 2px;
+ margin-left: -2px;
+ margin-right: -2px;
+ padding: 0 2px;
}
- \fi
- \ifnum\pdf@strcmp{\feature}{d}=0
- \xdef\loop@delay{\values}
- \fi
- }
- \xdef#2{((atan2((\num@im),(\num@real))-atan2((\den@im),%
- (\den@real))-\loop@delay*t)*(\ph@scale))}
- \xdef#1{(20*log10(sqrt((\n@pow{\num@real}{2})+(\n@pow{\num@im}{2})))-%
- 20*log10(sqrt((\n@pow{\den@real}{2})+(\n@pow{\den@im}{2}))))}
-}
-% \end{macrocode}
-%\end{macro}
-% \begin{macro}{\parse@opt}
-% Parses options supplied to the main Bode macros. A |for| loop over tuples of the form |\obj/\typ/\opt| with a long list of nested if-else statements does the job. If the input |\obj| is |plot|, |axes|, |group|, |approx|, or |tikz| the corresponding |\opt| are passed, unexpanded, to the |\addplot| macro, the |\nextgroupplot| macro, the |groupplot| environment, the |\build@ZPK@plot| macro, and the |tikzpicture| environment, respectively. If |\obj| is |commands|, the corresponding |\opt| are stored, unexpanded, in the macros |\optph@commands| and |\optmag@commands|, to be executed in appropriate |axis| environments. \changes{v1.0.3}{2021/11/03}{Added Tikz option} \changes{v1.0.5}{2021/11/15}{Fixed a bug}
-% \begin{macrocode}
-\newcommand{\parse@opt}[1]{
- \gdef\optmag@axes{}
- \gdef\optph@axes{}
- \gdef\optph@plot{}
- \gdef\optmag@plot{}
- \gdef\opt@group{}
- \gdef\opt@approx{}
- \gdef\optph@commands{}
- \gdef\optmag@commands{}
- \gdef\opt@tikz{}
- \foreach \obj/\typ/\opt in {#1} {
- \ifnum\pdf@strcmp{\unexpanded\expandafter{\obj}}{plot}=0
- \ifnum\pdf@strcmp{\unexpanded\expandafter{\typ}}{mag}=0
- \xdef\optmag@plot{\unexpanded\expandafter{\opt}}
- \else
- \ifnum\pdf@strcmp{\unexpanded\expandafter{\typ}}{ph}=0
- \xdef\optph@plot{\unexpanded\expandafter{\opt}}
- \else
- \xdef\optmag@plot{\unexpanded\expandafter{\opt}}
- \xdef\optph@plot{\unexpanded\expandafter{\opt}}
- \fi
- \fi
- \else
- \ifnum\pdf@strcmp{\unexpanded\expandafter{\obj}}{axes}=0
- \ifnum\pdf@strcmp{\unexpanded\expandafter{\typ}}{mag}=0
- \xdef\optmag@axes{\unexpanded\expandafter{\opt}}
- \else
- \ifnum\pdf@strcmp{\unexpanded\expandafter{\typ}}{ph}=0
- \xdef\optph@axes{\unexpanded\expandafter{\opt}}
- \else
- \xdef\optmag@axes{\unexpanded\expandafter{\opt}}
- \xdef\optph@axes{\unexpanded\expandafter{\opt}}
- \fi
- \fi
- \else
- \ifnum\pdf@strcmp{\unexpanded\expandafter{\obj}}{group}=0
- \xdef\opt@group{\unexpanded\expandafter{\opt}}
- \else
- \ifnum\pdf@strcmp{\unexpanded\expandafter{\obj}}{approx}=0
- \xdef\opt@approx{\unexpanded\expandafter{\opt}}
- \else
- \ifnum\pdf@strcmp{\unexpanded\expandafter{\obj}}{commands}=0
- \ifnum\pdf@strcmp{\unexpanded\expandafter{\typ}}{ph}=0
- \xdef\optph@commands{\unexpanded\expandafter{\opt}}
- \else
- \xdef\optmag@commands{\unexpanded\expandafter{\opt}}
- \fi
- \else
- \ifnum\pdf@strcmp{\unexpanded\expandafter{\obj}}{tikz}=0
- \xdef\opt@tikz{\unexpanded\expandafter{\opt}}
- \else
- \xdef\optmag@plot{\unexpanded\expandafter{\optmag@plot},
- \unexpanded\expandafter{\obj}}
- \xdef\optph@plot{\unexpanded\expandafter{\optph@plot},
- \unexpanded\expandafter{\obj}}
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- }
-}
-% \end{macrocode}
-%\end{macro}
-% \begin{macro}{\parse@env@opt}
-% Parses options supplied to the Bode, Nyquist, and Nichols environments. A |for| loop over tuples of the form |\obj/\opt|, processed using nested if-else statements does the job. The input |\obj| should either be |axes| or |tikz|, and the corresponding |\opt| are passed, unexpanded, to the |axis| environment and the |tikzpicture| environment, respectively. \changes{v1.0.3}{2021/11/03}{Added tikz option to environments}
-% \begin{macrocode}
-\newcommand{\parse@env@opt}[1]{
- \gdef\opt@axes{}
- \gdef\opt@tikz{}
- \foreach \obj/\opt in {#1} {
- \ifnum\pdf@strcmp{\unexpanded\expandafter{\obj}}{axes}=0
- \xdef\opt@axes{\unexpanded\expandafter{\opt}}
- \else
- \ifnum\pdf@strcmp{\unexpanded\expandafter{\obj}}{tikz}=0
- \xdef\opt@tikz{\unexpanded\expandafter{\opt}}
- \else
- \xdef\opt@axes{\unexpanded\expandafter{\opt@axes},
- \unexpanded\expandafter{\obj}}
- \fi
- \fi
- }
-}
-% \end{macrocode}
-% \end{macro}
-% \subsection{Nyquist plots}
-% \subsubsection{User macros}
-% \begin{macro}{\NyquistZPK}
-% Converts magnitude and phase parametric functions built using |\build@ZPK@plot| into real part and imaginary part parametric functions. A plot of these is the Nyquist plot. The parametric functions are then plotted in a |tikzpicture| environment using the |\addplot| macro. Unless the package is loaded with the option |pgf|, the parametric functions are evaluated using |gnuplot|. A large number of samples is typically needed to get a smooth plot because frequencies near 0 result in plot points that are very close to each other. Linear frequency sampling is unnecessarily fine near zero and very coarse for large $\omega$. Logarithmic sampling makes it worse, perhaps inverse logarithmic sampling will help, pull requests to fix that are welcome! \changes{v1.0.3}{2021/11/03}{Added commands and tikz options}\changes{v1.1.1}{2022/07/31}{Enabled `Hz' and `rad' units for frequency and phase, respectively}
-% \begin{macrocode}
-\newcommand{\NyquistZPK}[4][]{
- \parse@N@opt{#1}
- \gdef\func@mag{}
- \gdef\func@ph{}
- \edef\temp@cmd{\noexpand\begin{tikzpicture} [\unexpanded\expandafter{\opt@tikz}]}
- \temp@cmd
- \build@ZPK@plot{\func@mag}{\func@ph}{}{#2}
- \edef\temp@cmd{\noexpand\begin{axis}[
- bode@style,
- domain=#3*\freq@scale:#4*\freq@scale,
- height=5cm,
- xlabel={$\Re$},
- ylabel={$\Im$},
- samples=500,
- \unexpanded\expandafter{\opt@axes}
- ]}
- \temp@cmd
- \addplot [only marks,mark=+,thick,red] (-1 , 0);
- \edef\temp@cmd{\noexpand\addplot [variable=t, thick, \unexpanded\expandafter{\opt@plot}]}
- \if@pgfarg
- \temp@cmd ( {\n@pow{10}{((\func@mag)/20)}*cos((\func@ph)/(\ph@scale))},
- {\n@pow{10}{((\func@mag)/20)}*sin((\func@ph)/(\ph@scale))} );
- \opt@commands
- \else
- \stepcounter{gnuplot@id}
- \temp@cmd gnuplot [parametric, gnuplot@prefix] {
- \n@pow{10}{((\func@mag)/20)}*cos((\func@ph)/(\ph@scale)),
- \n@pow{10}{((\func@mag)/20)}*sin((\func@ph)/(\ph@scale))
- };
- \opt@commands
- \fi
- \end{axis}
- \end{tikzpicture}
-}
-% \end{macrocode}
-% \end{macro}
-% \begin{macro}{\NyquistTF}
-% Implementation of this macro is very similar to the |\NyquistZPK| macro above. The only difference is a slightly different parsing of the mandatory arguments via |\build@TF@plot|. \changes{v1.0.3}{2021/11/03}{Added commands and tikz options}\changes{v1.1.1}{2022/07/31}{Enabled `Hz' and `rad' units for frequency and phase, respectively}
-% \begin{macrocode}
-\newcommand{\NyquistTF}[4][]{
- \parse@N@opt{#1}
- \gdef\func@mag{}
- \gdef\func@ph{}
- \edef\temp@cmd{\noexpand\begin{tikzpicture} [\unexpanded\expandafter{\opt@tikz}]}
- \temp@cmd
- \build@TF@plot{\func@mag}{\func@ph}{#2}
- \edef\temp@cmd{\noexpand\begin{axis}[
- bode@style,
- domain=#3*\freq@scale:#4*\freq@scale,
- height=5cm,
- xlabel={$\Re$},
- ylabel={$\Im$},
- samples=500,
- \unexpanded\expandafter{\opt@axes}
- ]}
- \temp@cmd
- \addplot [only marks, mark=+, thick, red] (-1 , 0);
- \edef\temp@cmd{\noexpand\addplot [variable=t, thick, \unexpanded\expandafter{\opt@plot}]}
- \if@pgfarg
- \temp@cmd ( {\n@pow{10}{((\func@mag)/20)}*cos((\func@ph)/(\ph@scale))},
- {\n@pow{10}{((\func@mag)/20)}*sin((\func@ph)/(\ph@scale))} );
- \opt@commands
- \else
- \stepcounter{gnuplot@id}
- \temp@cmd gnuplot [parametric, gnuplot@prefix] {
- \n@pow{10}{((\func@mag)/20)}*cos((\func@ph)/(\ph@scale)),
- \n@pow{10}{((\func@mag)/20)}*sin((\func@ph)/(\ph@scale))
- };
- \opt@commands
- \fi
- \end{axis}
- \end{tikzpicture}
-}
-% \end{macrocode}
-% \end{macro}
-% \begin{macro}{\addNyquistZPKPlot}
-% Adds Nyquist plot of a transfer function in ZPK form. This macro is designed to pass two parametric function to an |\addplot| macro. The parametric functions for phase (|\func@ph|) and magnitude (|\func@mag|) are built using the |\build@ZPK@plot| macro, converted to real and imaginary parts and passed to |\addplot| commands.\changes{v1.1.1}{2022/07/31}{Enabled `Hz' and `rad' units for frequency and phase, respectively}
-% \begin{macrocode}
-\newcommand{\addNyquistZPKPlot}[2][]{
- \gdef\func@mag{}
- \gdef\func@ph{}
- \build@ZPK@plot{\func@mag}{\func@ph}{}{#2}
- \edef\supplied@domain{\pgfkeysvalueof{/pgfplots/domain}}
- \edef\domain@start{\expandafter\get@interval@start\supplied@domain\@nil}
- \edef\domain@end{\expandafter\get@interval@end\supplied@domain\@nil}
- \if@pgfarg
- \addplot [domain=\domain@start*\freq@scale:\domain@end*\freq@scale, variable=t, #1] ( {\n@pow{10}{((\func@mag)/20)}*cos((\func@ph)/(\ph@scale))},
- {\n@pow{10}{((\func@mag)/20)}*sin((\func@ph)/(\ph@scale))} );
- \else
- \stepcounter{gnuplot@id}
- \addplot [domain=\domain@start*\freq@scale:\domain@end*\freq@scale, variable=t, #1] gnuplot [parametric, gnuplot@prefix] {
- \n@pow{10}{((\func@mag)/20)}*cos((\func@ph)/(\ph@scale)),
- \n@pow{10}{((\func@mag)/20)}*sin((\func@ph)/(\ph@scale))
- };
- \fi
-}
-% \end{macrocode}
-%\end{macro}
-% \begin{macro}{\addNyquistTFPlot}
-% Adds Nyquist plot of a transfer function in TF form. This macro is designed to pass two parametric function to an |\addplot| macro. The parametric functions for phase (|\func@ph|) and magnitude (|\func@mag|) are built using the |\build@TF@plot| macro, converted to real and imaginary parts and passed to |\addplot| commands.\changes{v1.1.1}{2022/07/31}{Enabled `Hz' and `rad' units for frequency and phase, respectively}
-% \begin{macrocode}
-\newcommand{\addNyquistTFPlot}[2][]{
- \gdef\func@mag{}
- \gdef\func@ph{}
- \build@TF@plot{\func@mag}{\func@ph}{#2}
- \edef\supplied@domain{\pgfkeysvalueof{/pgfplots/domain}}
- \edef\domain@start{\expandafter\get@interval@start\supplied@domain\@nil}
- \edef\domain@end{\expandafter\get@interval@end\supplied@domain\@nil}
- \if@pgfarg
- \addplot [domain=\domain@start*\freq@scale:\domain@end*\freq@scale, variable=t, #1] ( {\n@pow{10}{((\func@mag)/20)}*cos((\func@ph)/(\ph@scale))},
- {\n@pow{10}{((\func@mag)/20)}*sin((\func@ph)/(\ph@scale))} );
- \else
- \stepcounter{gnuplot@id}
- \addplot [domain=\domain@start*\freq@scale:\domain@end*\freq@scale, variable=t, #1] gnuplot [parametric, gnuplot@prefix]{
- \n@pow{10}{((\func@mag)/20)}*cos((\func@ph)/(\ph@scale)),
- \n@pow{10}{((\func@mag)/20)}*sin((\func@ph)/(\ph@scale))
- };
- \fi
-}
-% \end{macrocode}
-%\end{macro}
-%\begin{macro}{NyquistPlot}
-% An environment to host |\addNyquist...| macros that pass parametric functions to |\addplot|. Uses the defaults specified in |bode@style| to create a shortcut that includes the |tikzpicture| and |axis| environments. \changes{v1.0.3}{2021/11/03}{Added tikz option to environments}
-% \begin{macrocode}
-\newenvironment{NyquistPlot}[3][]{
- \parse@env@opt{#1}
- \edef\temp@cmd{\noexpand\begin{tikzpicture} [\unexpanded\expandafter{\opt@tikz}]
- \noexpand\begin{axis}[
- bode@style,
- height=5cm,
- domain=#2:#3,
- xlabel={$\Re$},
- ylabel={$\Im$},
- \unexpanded\expandafter{\opt@axes}
- ]
- }
- \temp@cmd
- \addplot [only marks,mark=+,thick,red] (-1 , 0);
-}{
- \end{axis}
- \end{tikzpicture}
-}
-% \end{macrocode}
-%\end{macro}
-% \subsubsection{Internal commands\label{sec:NInternal}}
-% \begin{macro}{\parse@N@opt}
-% Parses options supplied to the main Nyquist and Nichols macros. A |for| loop over tuples of the form |\obj/\opt|, processed using nested if-else statements does the job. If the input |\obj| is |plot|, |axes|, or |tikz| then the corresponding |\opt| are passed, unexpanded, to the |\addplot| macro, the |axis| environment, and the |tikzpicture| environment, respectively. \changes{v1.0.3}{2021/11/03}{Added commands and tikz options}
-% \begin{macrocode}
-\newcommand{\parse@N@opt}[1]{
- \gdef\opt@axes{}
- \gdef\opt@plot{}
- \gdef\opt@commands{}
- \gdef\opt@tikz{}
- \foreach \obj/\opt in {#1} {
- \ifnum\pdf@strcmp{\unexpanded\expandafter{\obj}}{axes}=0
- \xdef\opt@axes{\unexpanded\expandafter{\opt}}
- \else
- \ifnum\pdf@strcmp{\unexpanded\expandafter{\obj}}{plot}=0
- \xdef\opt@plot{\unexpanded\expandafter{\opt}}
- \else
- \ifnum\pdf@strcmp{\unexpanded\expandafter{\obj}}{commands}=0
- \xdef\opt@commands{\unexpanded\expandafter{\opt}}
- \else
- \ifnum\pdf@strcmp{\unexpanded\expandafter{\obj}}{tikz}=0
- \xdef\opt@tikz{\unexpanded\expandafter{\opt}}
- \else
- \xdef\opt@plot{\unexpanded\expandafter{\opt@plot},
- \unexpanded\expandafter{\obj}}
- \fi
- \fi
- \fi
- \fi
- }
-}
-% \end{macrocode}
-% \end{macro}
-% \subsection{Nichols charts}
-% \begin{macro}{\NicholsZPK}
-% \changes{v1.0.3}{2021/11/03}{Added commands and tikz options}
-% \begin{macro}{\NicholsTF}
-% \changes{v1.0.3}{2021/11/03}{Added commands and tikz options}
-% \begin{macro}{NicholsChart}
-% \changes{v1.0.3}{2021/11/03}{Added tikz option to environments}
-% \begin{macro}{\addNicholsZPKChart}
-% \begin{macro}{\addNicholsTFChart}
-% These macros and the |NicholsChart| environment generate Nichols charts, and they are implemented similar to their Nyquist counterparts.\changes{v1.1.1}{2022/07/31}{Enabled `Hz' and `rad' units for frequency and phase, respectively}
-% \begin{macrocode}
-\newcommand{\NicholsZPK}[4][]{
- \parse@N@opt{#1}
- \gdef\func@mag{}
- \gdef\func@ph{}
- \edef\temp@cmd{\noexpand\begin{tikzpicture} [\unexpanded\expandafter{\opt@tikz}]}
- \temp@cmd
- \build@ZPK@plot{\func@mag}{\func@ph}{}{#2}
- \edef\temp@cmd{\noexpand\begin{axis}[
- ph@x@label,
- bode@style,
- domain=#3*\freq@scale:#4*\freq@scale,
- height=5cm,
- ylabel={Gain (dB)},
- samples=500,
- \unexpanded\expandafter{\opt@axes}
- ]}
- \temp@cmd
- \edef\temp@cmd{\noexpand\addplot [variable=t,thick,\opt@plot]}
- \if@pgfarg
- \temp@cmd ( {\func@ph} , {\func@mag} );
- \opt@commands
- \else
- \stepcounter{gnuplot@id}
- \temp@cmd gnuplot [raw gnuplot, gnuplot@prefix]
- { set table $meta;
- set logscale x 10;
- set dummy t;
- set samples \pgfkeysvalueof{/pgfplots/samples};
- set trange [#3*\freq@scale:#4*\freq@scale];
- plot '+' using (\func@mag) : ((\func@ph)/(\ph@scale));
- unset logscale x;
- set table "\bodeplot@prefix\arabic{gnuplot@id}.table";
- plot "$meta" using ($2*\ph@scale):($1);
- };
- \opt@commands
- \fi
- \end{axis}
- \end{tikzpicture}
-}
-\newcommand{\NicholsTF}[4][]{
- \parse@N@opt{#1}
- \gdef\func@mag{}
- \gdef\func@ph{}
- \edef\temp@cmd{\noexpand\begin{tikzpicture} [\unexpanded\expandafter{\opt@tikz}]}
- \temp@cmd
- \build@TF@plot{\func@mag}{\func@ph}{#2}
- \edef\temp@cmd{\noexpand\begin{axis}[
- ph@x@label,
- bode@style,
- domain=#3*\freq@scale:#4*\freq@scale,
- height=5cm,
- ylabel={Gain (dB)},
- samples=500,
- \unexpanded\expandafter{\opt@axes}
- ]}
- \temp@cmd
- \edef\temp@cmd{\noexpand\addplot [variable=t,thick, \opt@plot]}
- \if@pgfarg
- \temp@cmd ( {\n@mod{\func@ph}{2*pi*\ph@scale}} , {\func@mag} );
- \opt@commands
- \else
- \stepcounter{gnuplot@id}
- \temp@cmd gnuplot [raw gnuplot, gnuplot@prefix]
- { set table $meta1;
- set logscale x 10;
- set dummy t;
- set samples \pgfkeysvalueof{/pgfplots/samples};
- set trange [#3*\freq@scale:#4*\freq@scale];
- plot '+' using (\func@mag) : ((\func@ph)/(\ph@scale));
- unset logscale x;
- set table $meta2;
- plot "$meta1" using ($1):($2) smooth unwrap;
- set table "\bodeplot@prefix\arabic{gnuplot@id}.table";
- plot "$meta2" using ($2*\ph@scale):($1);
- };
- \opt@commands
- \fi
- \end{axis}
- \end{tikzpicture}
-}
-\newenvironment{NicholsChart}[3][]{
- \parse@env@opt{#1}
- \edef\temp@cmd{\noexpand\begin{tikzpicture} [\unexpanded\expandafter{\opt@tikz}]
- \noexpand\begin{axis}[
- ph@x@label,
- bode@style,
- domain=#2:#3,
- height=5cm,
- ylabel={Gain (dB)},
- \unexpanded\expandafter{\opt@axes}
- ]
- }
- \temp@cmd
-}{
- \end{axis}
- \end{tikzpicture}
-}
-\newcommand{\addNicholsZPKChart}[2][]{
- \gdef\func@mag{}
- \gdef\func@ph{}
- \build@ZPK@plot{\func@mag}{\func@ph}{}{#2}
- \edef\supplied@domain{\pgfkeysvalueof{/pgfplots/domain}}
- \edef\domain@start{\expandafter\get@interval@start\supplied@domain\@nil}
- \edef\domain@end{\expandafter\get@interval@end\supplied@domain\@nil}
- \if@pgfarg
- \addplot [variable=t, domain=\domain@start*\freq@scale:\domain@end*\freq@scale, #1] ( {\func@ph} , {\func@mag} );
- \else
- \stepcounter{gnuplot@id}
- \addplot [#1] gnuplot [raw gnuplot, gnuplot@prefix]
- { set table $meta;
- set logscale x 10;
- set dummy t;
- set samples \pgfkeysvalueof{/pgfplots/samples};
- set trange [\domain@start*\freq@scale:\domain@end*\freq@scale];
- plot '+' using (\func@mag) : ((\func@ph)/(\ph@scale));
- unset logscale x;
- set table "\bodeplot@prefix\arabic{gnuplot@id}.table";
- plot "$meta" using ($2*\ph@scale):($1);
- };
- \fi
-}
-\newcommand{\addNicholsTFChart}[2][]{
- \gdef\func@mag{}
- \gdef\func@ph{}
- \build@TF@plot{\func@mag}{\func@ph}{#2}
- \edef\supplied@domain{\pgfkeysvalueof{/pgfplots/domain}}
- \edef\domain@start{\expandafter\get@interval@start\supplied@domain\@nil}
- \edef\domain@end{\expandafter\get@interval@end\supplied@domain\@nil}
- \if@pgfarg
- \addplot [variable=t, domain=\domain@start*\freq@scale:\domain@end*\freq@scale, #1] ( {\n@mod{\func@ph}{2*pi*\ph@scale}} , {\func@mag} );
- \else
- \stepcounter{gnuplot@id}
- \addplot [#1] gnuplot [raw gnuplot, gnuplot@prefix]
- { set table $meta1;
- set logscale x 10;
- set dummy t;
- set samples \pgfkeysvalueof{/pgfplots/samples};
- set trange [\domain@start*\freq@scale:\domain@end*\freq@scale];
- plot '+' using (\func@mag) : ((\func@ph)/(\ph@scale));
- unset logscale x;
- set table $meta2;
- plot "$meta1" using ($1):($2) smooth unwrap;
- set table "\bodeplot@prefix\arabic{gnuplot@id}.table";
- plot "$meta2" using ($2*\ph@scale):($1);
- };
- \fi
-}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \Finale
-\endinput \ No newline at end of file
+ </style>
+
+
+ </body>
+</html>
+
diff --git a/graphics/pgf/contrib/bodeplot/bodeplot.ins b/graphics/pgf/contrib/bodeplot/bodeplot.ins
index 1a80024f83..88209ac674 100644
--- a/graphics/pgf/contrib/bodeplot/bodeplot.ins
+++ b/graphics/pgf/contrib/bodeplot/bodeplot.ins
@@ -1,41 +1,3138 @@
-%%
-%% Copyright (C) 2021 by Rushikesh Kamalapurkar
-%%
-%% This file may be distributed and/or modified under the
-%% conditions of the LaTeX Project Public License, either
-%% version 1.3c of this license or (at your option) any later
-%% version. The latest version of this license is in:
-%%
-%% http://www.latex-project.org/lppl.txt
-%%
-%% and version 1.3c or later is part of all distributions of
-%% LaTeX version 2006/05/20 or later.
-%%
-\input docstrip.tex
-\keepsilent
-\usedir{tex/latex/bodeplot}
-\preamble
-This is a generated file.
-Copyright (C) 2021 by Rushikesh Kamalapurkar
-This file may be distributed and/or modified under the
-conditions of the LaTeX Project Public License, either
-version 1.3c of this license or (at your option) any later
-version. The latest version of this license is in:
-http://www.latex-project.org/lppl.txt
-and version 1.3c or later is part of all distributions of
-LaTeX version 2006/05/20 or later.
-\endpreamble
-\generate{\file{bodeplot.sty}{\from{bodeplot.dtx}{package}}}
-\Msg{*********************************************************}
-\Msg{*}
-\Msg{* To finish the installation you have to move the}
-\Msg{* following file into a directory searched by TeX:}
-\Msg{*}
-\Msg{* bodeplot.sty}
-\Msg{*}
-\Msg{* To produce the documentation run the file bodeplot.dtx}
-\Msg{* through LaTeX.}
-\Msg{*}
-\Msg{* Happy TeXing!}
-\Msg{*********************************************************}
-\endbatchfile \ No newline at end of file
+
+
+
+
+
+
+
+<!DOCTYPE html>
+<html lang="en" data-color-mode="auto" data-light-theme="light" data-dark-theme="dark" data-a11y-animated-images="system">
+ <head>
+ <meta charset="utf-8">
+ <link rel="dns-prefetch" href="https://github.githubassets.com">
+ <link rel="dns-prefetch" href="https://avatars.githubusercontent.com">
+ <link rel="dns-prefetch" href="https://github-cloud.s3.amazonaws.com">
+ <link rel="dns-prefetch" href="https://user-images.githubusercontent.com/">
+ <link rel="preconnect" href="https://github.githubassets.com" crossorigin>
+ <link rel="preconnect" href="https://avatars.githubusercontent.com">
+
+
+
+ <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/light-5178aee0ee76.css" /><link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/dark-217d4f9c8e70.css" /><link data-color-theme="dark_dimmed" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_dimmed-0adfa28f0e68.css" /><link data-color-theme="dark_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_high_contrast-1c8575b36644.css" /><link data-color-theme="dark_colorblind" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_colorblind-5113d2be20b0.css" /><link data-color-theme="light_colorblind" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_colorblind-c96add742484.css" /><link data-color-theme="light_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_high_contrast-290f92f5e867.css" /><link data-color-theme="light_tritanopia" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_tritanopia-cdd88f146bf7.css" /><link data-color-theme="dark_tritanopia" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_tritanopia-2171ea0f078b.css" />
+
+ <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-5508e6d5461e.css" />
+ <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/global-d3a0fca0d75c.css" />
+ <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/github-d9fe73e621ce.css" />
+ <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/code-7cc3c15b62f7.css" />
+
+ <meta name="optimizely-datafile" content="{&quot;groups&quot;: [], &quot;environmentKey&quot;: &quot;production&quot;, &quot;rollouts&quot;: [], &quot;typedAudiences&quot;: [], &quot;projectId&quot;: &quot;16737760170&quot;, &quot;variables&quot;: [], &quot;featureFlags&quot;: [], &quot;experiments&quot;: [], &quot;version&quot;: &quot;4&quot;, &quot;audiences&quot;: [{&quot;conditions&quot;: &quot;[\&quot;or\&quot;, {\&quot;match\&quot;: \&quot;exact\&quot;, \&quot;name\&quot;: \&quot;$opt_dummy_attribute\&quot;, \&quot;type\&quot;: \&quot;custom_attribute\&quot;, \&quot;value\&quot;: \&quot;$opt_dummy_value\&quot;}]&quot;, &quot;id&quot;: &quot;$opt_dummy_audience&quot;, &quot;name&quot;: &quot;Optimizely-Generated Audience for Backwards Compatibility&quot;}], &quot;anonymizeIP&quot;: true, &quot;sdkKey&quot;: &quot;WTc6awnGuYDdG98CYRban&quot;, &quot;attributes&quot;: [{&quot;id&quot;: &quot;16822470375&quot;, &quot;key&quot;: &quot;user_id&quot;}, {&quot;id&quot;: &quot;17143601254&quot;, &quot;key&quot;: &quot;spammy&quot;}, {&quot;id&quot;: &quot;18175660309&quot;, &quot;key&quot;: &quot;organization_plan&quot;}, {&quot;id&quot;: &quot;18813001570&quot;, &quot;key&quot;: &quot;is_logged_in&quot;}, {&quot;id&quot;: &quot;19073851829&quot;, &quot;key&quot;: &quot;geo&quot;}, {&quot;id&quot;: &quot;20175462351&quot;, &quot;key&quot;: &quot;requestedCurrency&quot;}, {&quot;id&quot;: &quot;20785470195&quot;, &quot;key&quot;: &quot;country_code&quot;}, {&quot;id&quot;: &quot;21656311196&quot;, &quot;key&quot;: &quot;opened_downgrade_dialog&quot;}], &quot;botFiltering&quot;: false, &quot;accountId&quot;: &quot;16737760170&quot;, &quot;events&quot;: [{&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;17911811441&quot;, &quot;key&quot;: &quot;hydro_click.dashboard.teacher_toolbox_cta&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18124116703&quot;, &quot;key&quot;: &quot;submit.organizations.complete_sign_up&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18145892387&quot;, &quot;key&quot;: &quot;no_metric.tracked_outside_of_optimizely&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18178755568&quot;, &quot;key&quot;: &quot;click.org_onboarding_checklist.add_repo&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18180553241&quot;, &quot;key&quot;: &quot;submit.repository_imports.create&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18186103728&quot;, &quot;key&quot;: &quot;click.help.learn_more_about_repository_creation&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18188530140&quot;, &quot;key&quot;: &quot;test_event&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18191963644&quot;, &quot;key&quot;: &quot;click.empty_org_repo_cta.transfer_repository&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18195612788&quot;, &quot;key&quot;: &quot;click.empty_org_repo_cta.import_repository&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18210945499&quot;, &quot;key&quot;: &quot;click.org_onboarding_checklist.invite_members&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18211063248&quot;, &quot;key&quot;: &quot;click.empty_org_repo_cta.create_repository&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18215721889&quot;, &quot;key&quot;: &quot;click.org_onboarding_checklist.update_profile&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18224360785&quot;, &quot;key&quot;: &quot;click.org_onboarding_checklist.dismiss&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18234832286&quot;, &quot;key&quot;: &quot;submit.organization_activation.complete&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18252392383&quot;, &quot;key&quot;: &quot;submit.org_repository.create&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18257551537&quot;, &quot;key&quot;: &quot;submit.org_member_invitation.create&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18259522260&quot;, &quot;key&quot;: &quot;submit.organization_profile.update&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18564603625&quot;, &quot;key&quot;: &quot;view.classroom_select_organization&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18568612016&quot;, &quot;key&quot;: &quot;click.classroom_sign_in_click&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18572592540&quot;, &quot;key&quot;: &quot;view.classroom_name&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18574203855&quot;, &quot;key&quot;: &quot;click.classroom_create_organization&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18582053415&quot;, &quot;key&quot;: &quot;click.classroom_select_organization&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18589463420&quot;, &quot;key&quot;: &quot;click.classroom_create_classroom&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18591323364&quot;, &quot;key&quot;: &quot;click.classroom_create_first_classroom&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18591652321&quot;, &quot;key&quot;: &quot;click.classroom_grant_access&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18607131425&quot;, &quot;key&quot;: &quot;view.classroom_creation&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18831680583&quot;, &quot;key&quot;: &quot;upgrade_account_plan&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;19064064515&quot;, &quot;key&quot;: &quot;click.signup&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;19075373687&quot;, &quot;key&quot;: &quot;click.view_account_billing_page&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;19077355841&quot;, &quot;key&quot;: &quot;click.dismiss_signup_prompt&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;19079713938&quot;, &quot;key&quot;: &quot;click.contact_sales&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;19120963070&quot;, &quot;key&quot;: &quot;click.compare_account_plans&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;19151690317&quot;, &quot;key&quot;: &quot;click.upgrade_account_cta&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;19424193129&quot;, &quot;key&quot;: &quot;click.open_account_switcher&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;19520330825&quot;, &quot;key&quot;: &quot;click.visit_account_profile&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;19540970635&quot;, &quot;key&quot;: &quot;click.switch_account_context&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;19730198868&quot;, &quot;key&quot;: &quot;submit.homepage_signup&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;19820830627&quot;, &quot;key&quot;: &quot;click.homepage_signup&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;19988571001&quot;, &quot;key&quot;: &quot;click.create_enterprise_trial&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20036538294&quot;, &quot;key&quot;: &quot;click.create_organization_team&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20040653299&quot;, &quot;key&quot;: &quot;click.input_enterprise_trial_form&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20062030003&quot;, &quot;key&quot;: &quot;click.continue_with_team&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20068947153&quot;, &quot;key&quot;: &quot;click.create_organization_free&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20086636658&quot;, &quot;key&quot;: &quot;click.signup_continue.username&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20091648988&quot;, &quot;key&quot;: &quot;click.signup_continue.create_account&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20103637615&quot;, &quot;key&quot;: &quot;click.signup_continue.email&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20111574253&quot;, &quot;key&quot;: &quot;click.signup_continue.password&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20120044111&quot;, &quot;key&quot;: &quot;view.pricing_page&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20152062109&quot;, &quot;key&quot;: &quot;submit.create_account&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20165800992&quot;, &quot;key&quot;: &quot;submit.upgrade_payment_form&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20171520319&quot;, &quot;key&quot;: &quot;submit.create_organization&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20222645674&quot;, &quot;key&quot;: &quot;click.recommended_plan_in_signup.discuss_your_needs&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20227443657&quot;, &quot;key&quot;: &quot;submit.verify_primary_user_email&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20234607160&quot;, &quot;key&quot;: &quot;click.recommended_plan_in_signup.try_enterprise&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20238175784&quot;, &quot;key&quot;: &quot;click.recommended_plan_in_signup.team&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20239847212&quot;, &quot;key&quot;: &quot;click.recommended_plan_in_signup.continue_free&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20251097193&quot;, &quot;key&quot;: &quot;recommended_plan&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20438619534&quot;, &quot;key&quot;: &quot;click.pricing_calculator.1_member&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20456699683&quot;, &quot;key&quot;: &quot;click.pricing_calculator.15_members&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20467868331&quot;, &quot;key&quot;: &quot;click.pricing_calculator.10_members&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20476267432&quot;, &quot;key&quot;: &quot;click.trial_days_remaining&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20476357660&quot;, &quot;key&quot;: &quot;click.discover_feature&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20479287901&quot;, &quot;key&quot;: &quot;click.pricing_calculator.custom_members&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20481107083&quot;, &quot;key&quot;: &quot;click.recommended_plan_in_signup.apply_teacher_benefits&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20483089392&quot;, &quot;key&quot;: &quot;click.pricing_calculator.5_members&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20484283944&quot;, &quot;key&quot;: &quot;click.onboarding_task&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20484996281&quot;, &quot;key&quot;: &quot;click.recommended_plan_in_signup.apply_student_benefits&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20486713726&quot;, &quot;key&quot;: &quot;click.onboarding_task_breadcrumb&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20490791319&quot;, &quot;key&quot;: &quot;click.upgrade_to_enterprise&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20491786766&quot;, &quot;key&quot;: &quot;click.talk_to_us&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20494144087&quot;, &quot;key&quot;: &quot;click.dismiss_enterprise_trial&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20499722759&quot;, &quot;key&quot;: &quot;completed_all_tasks&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20500710104&quot;, &quot;key&quot;: &quot;completed_onboarding_tasks&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20513160672&quot;, &quot;key&quot;: &quot;click.read_doc&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20516196762&quot;, &quot;key&quot;: &quot;actions_enabled&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20518980986&quot;, &quot;key&quot;: &quot;click.dismiss_trial_banner&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20535446721&quot;, &quot;key&quot;: &quot;click.issue_actions_prompt.dismiss_prompt&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20557002247&quot;, &quot;key&quot;: &quot;click.issue_actions_prompt.setup_workflow&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20595070227&quot;, &quot;key&quot;: &quot;click.pull_request_setup_workflow&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20626600314&quot;, &quot;key&quot;: &quot;click.seats_input&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20642310305&quot;, &quot;key&quot;: &quot;click.decrease_seats_number&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20662990045&quot;, &quot;key&quot;: &quot;click.increase_seats_number&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20679620969&quot;, &quot;key&quot;: &quot;click.public_product_roadmap&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20761240940&quot;, &quot;key&quot;: &quot;click.dismiss_survey_banner&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20767210721&quot;, &quot;key&quot;: &quot;click.take_survey&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20795281201&quot;, &quot;key&quot;: &quot;click.archive_list&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20966790249&quot;, &quot;key&quot;: &quot;contact_sales.submit&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20996500333&quot;, &quot;key&quot;: &quot;contact_sales.existing_customer&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;20996890162&quot;, &quot;key&quot;: &quot;contact_sales.blank_message_field&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;21000470317&quot;, &quot;key&quot;: &quot;contact_sales.personal_email&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;21002790172&quot;, &quot;key&quot;: &quot;contact_sales.blank_phone_field&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;21354412592&quot;, &quot;key&quot;: &quot;click.dismiss_create_readme&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;21366102546&quot;, &quot;key&quot;: &quot;click.dismiss_zero_user_content&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;21370252505&quot;, &quot;key&quot;: &quot;account_did_downgrade&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;21370840408&quot;, &quot;key&quot;: &quot;click.cta_create_readme&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;21375451068&quot;, &quot;key&quot;: &quot;click.cta_create_new_repository&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;21385390948&quot;, &quot;key&quot;: &quot;click.zero_user_content&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;21467712175&quot;, &quot;key&quot;: &quot;click.downgrade_keep&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;21484112202&quot;, &quot;key&quot;: &quot;click.downgrade&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;21495292213&quot;, &quot;key&quot;: &quot;click.downgrade_survey_exit&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;21508241468&quot;, &quot;key&quot;: &quot;click.downgrade_survey_submit&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;21512030356&quot;, &quot;key&quot;: &quot;click.downgrade_support&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;21539090022&quot;, &quot;key&quot;: &quot;click.downgrade_exit&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;21543640644&quot;, &quot;key&quot;: &quot;click_fetch_upstream&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;21646510300&quot;, &quot;key&quot;: &quot;click.move_your_work&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;21656151116&quot;, &quot;key&quot;: &quot;click.add_branch_protection_rule&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;21663860599&quot;, &quot;key&quot;: &quot;click.downgrade_dialog_open&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;21687860483&quot;, &quot;key&quot;: &quot;click.learn_about_protected_branches&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;21689050333&quot;, &quot;key&quot;: &quot;click.dismiss_protect_this_branch&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;21864370109&quot;, &quot;key&quot;: &quot;click.sign_in&quot;}], &quot;revision&quot;: &quot;1367&quot;}" />
+
+
+ <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/wp-runtime-b59a0e362e81.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_manuelpuyol_turbo_dist_turbo_es2017-esm_js-7ca92c8d513d.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_stacktrace-parser_dist_stack-trace-parser_esm_js-node_modules_github_bro-d351f6-c1d63d230b29.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/environment-4b8bfb4aa754.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_selector-observer_dist_index_esm_js-650337916dbd.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_delegated-events_dist_index_js-node_modules_github_details-dialog-elemen-63debe-4a2f37f7419e.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_auto-complete-element_dist_index_js-node_modules_github_catalyst_-6afc16-fa4f01d20b81.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_fzy_js_index_js-node_modules_github_markdown-toolbar-element_dist_index_js-5936f45973f5.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_time-elements_dist_index_js-74b4ec51ce20.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_file-attachment-element_dist_index_js-node_modules_github_text-ex-3415a8-daf4603c6e6b.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_filter-input-element_dist_index_js-node_modules_github_remote-inp-45d711-b0ab6a967ae1.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/github-elements-e7701ef9a8c3.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/element-registry-866f36727ef8.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_lit-html_lit-html_js-e954e8c01c93.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_mini-throttle_dist_index_js-node_modules_github_remote-form_dist_-ece2b0-917c0dad4566.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_primer_behaviors_dist_esm_dimensions_js-node_modules_github_hydro-analyt-fed224-54236d9d6de1.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_alive-client_dist_index_js-156187f13fbb.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_filter-input-element_dist_index_js-node_modules_github_paste-mark-c3e01c-82f4760ef552.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_updatable-content_ts-62df1309213c.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_sticky-scroll-into-view_ts-5035229a4e5d.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_behaviors_keyboard-shortcuts-helper_ts-app_assets_modules_github_be-ac2ea2-e5885e2381d2.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_behaviors_batch-deferred-content_ts-app_assets_modules_github_behav-dc1370-6456e197635f.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_behaviors_commenting_edit_ts-app_assets_modules_github_behaviors_ht-83c235-02b38260d85d.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/behaviors-362d7c554824.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_delegated-events_dist_index_js-node_modules_github_catalyst_lib_index_js-06ff533-60844731e2b9.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/notifications-global-e71e7f99b10d.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_optimizely_optimizely-sdk_dist_optimizely_browser_es_min_js-node_modules-4de5ed-a1d36fafc3a7.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/optimizely-beee345dedab.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_virtualized-list_es_index_js-node_modules_github_template-parts_lib_index_js-17ccfc4926a4.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_filter-input-element_dist_index_js-node_modules_github_mini-throt-bb75aa-97625d2d4f26.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_file-attachment-element_dist_index_js-node_modules_github_mini-th-699a01-5abf39efc269.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_ref-selector_ts-23a59aa1d1c9.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/repositories-41124485c7c9.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_clipboard-copy-element_dist_index_esm_js-node_modules_github_remo-8e6bec-4a54aa10cc28.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_mini-throttle_dist_decorators_js-node_modules_scroll-anchoring_di-e71893-60cf13769d05.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_diffs_blob-lines_ts-app_assets_modules_github_diffs_linkable-line-n-dca161-ceb6301d2ba3.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/diffs-96fffae01eaa.js"></script>
+
+
+ <title>bodeplot/bodeplot.ins at main · rlkamalapurkar/bodeplot</title>
+
+
+
+
+
+ <meta name="request-id" content="463F:7A0B:59FCE76:8579A8F:635E0EC8" data-turbo-transient="true" /><meta name="html-safe-nonce" content="933697d380b0a314f0c8c2db1c8bb934f54a74a795aa0670561ae936cec19b01" data-turbo-transient="true" /><meta name="visitor-payload" content="eyJyZWZlcnJlciI6Imh0dHBzOi8vZ2l0aHViLmNvbS9ybGthbWFsYXB1cmthci9ib2RlcGxvdCIsInJlcXVlc3RfaWQiOiI0NjNGOjdBMEI6NTlGQ0U3Njo4NTc5QThGOjYzNUUwRUM4IiwidmlzaXRvcl9pZCI6IjcxOTA1ODcwNzY5NzgwMjIyMzciLCJyZWdpb25fZWRnZSI6ImlhZCIsInJlZ2lvbl9yZW5kZXIiOiJpYWQifQ==" data-turbo-transient="true" /><meta name="visitor-hmac" content="5b039b8a6c4bb6c3cba97f4646b3c18c150aa49d1d23fbed36aa637697a92235" data-turbo-transient="true" />
+
+ <meta name="hovercard-subject-tag" content="repository:418699104" data-turbo-transient>
+
+
+ <meta name="github-keyboard-shortcuts" content="repository,source-code,file-tree" data-turbo-transient="true" />
+
+
+ <meta name="selected-link" value="repo_source" data-turbo-transient>
+
+ <meta name="google-site-verification" content="c1kuD-K2HIVF635lypcsWPoD4kilo5-jA_wBFyT4uMY">
+ <meta name="google-site-verification" content="KT5gs8h0wvaagLKAVWq8bbeNwnZZK1r1XQysX3xurLU">
+ <meta name="google-site-verification" content="ZzhVyEFwb7w3e0-uOTltm8Jsck2F5StVihD0exw2fsA">
+ <meta name="google-site-verification" content="GXs5KoUUkNCoaAZn7wPN-t01Pywp9M3sEjnt_3_ZWPc">
+ <meta name="google-site-verification" content="Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I">
+
+<meta name="octolytics-url" content="https://collector.github.com/github/collect" /><meta name="octolytics-actor-id" content="30264720" /><meta name="octolytics-actor-login" content="rlkamalapurkar" /><meta name="octolytics-actor-hash" content="3cce62c367e83c02faf0c427366d604b6f38f73f7a6d187b1727d291ebe3b1d6" />
+
+ <meta name="analytics-location" content="/&lt;user-name&gt;/&lt;repo-name&gt;/blob/show" data-turbo-transient="true" />
+
+
+
+
+
+
+
+
+ <meta name="user-login" content="rlkamalapurkar">
+
+ <link rel="sudo-modal" href="/sessions/sudo_modal">
+
+ <meta name="viewport" content="width=device-width">
+
+ <meta name="description" content="LaTeX package to plot Bode diagrams. Contribute to rlkamalapurkar/bodeplot development by creating an account on GitHub.">
+ <link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="GitHub">
+ <link rel="fluid-icon" href="https://github.com/fluidicon.png" title="GitHub">
+ <meta property="fb:app_id" content="1401488693436528">
+ <meta name="apple-itunes-app" content="app-id=1477376905" />
+ <meta name="twitter:image:src" content="https://opengraph.githubassets.com/75d13310abaea2c3a6b08281cd0dc89cb30b997fb8ca3fd9cfec936cb36a8649/rlkamalapurkar/bodeplot" /><meta name="twitter:site" content="@github" /><meta name="twitter:card" content="summary_large_image" /><meta name="twitter:title" content="bodeplot/bodeplot.ins at main · rlkamalapurkar/bodeplot" /><meta name="twitter:description" content="LaTeX package to plot Bode diagrams. Contribute to rlkamalapurkar/bodeplot development by creating an account on GitHub." />
+ <meta property="og:image" content="https://opengraph.githubassets.com/75d13310abaea2c3a6b08281cd0dc89cb30b997fb8ca3fd9cfec936cb36a8649/rlkamalapurkar/bodeplot" /><meta property="og:image:alt" content="LaTeX package to plot Bode diagrams. Contribute to rlkamalapurkar/bodeplot development by creating an account on GitHub." /><meta property="og:image:width" content="1200" /><meta property="og:image:height" content="600" /><meta property="og:site_name" content="GitHub" /><meta property="og:type" content="object" /><meta property="og:title" content="bodeplot/bodeplot.ins at main · rlkamalapurkar/bodeplot" /><meta property="og:url" content="https://github.com/rlkamalapurkar/bodeplot" /><meta property="og:description" content="LaTeX package to plot Bode diagrams. Contribute to rlkamalapurkar/bodeplot development by creating an account on GitHub." />
+
+ <link rel="assets" href="https://github.githubassets.com/">
+ <link rel="shared-web-socket" href="wss://alive.github.com/_sockets/u/30264720/ws?session=eyJ2IjoiVjMiLCJ1IjozMDI2NDcyMCwicyI6OTgyMjY4Njg5LCJjIjoxNzQxMTY0MTEzLCJ0IjoxNjY3MTA4NTU2fQ==--1b1bcf3d4693f85f29f49612a48d08896ec101e1d56f6ad94f71b66a6e304c63" data-refresh-url="/_alive" data-session-id="fb8691b3307882b02af8fc5d6f24656c8a25319007c2330370f80ba9a25465ab">
+ <link rel="shared-web-socket-src" href="/assets-cdn/worker/socket-worker-b87581f5816c.js">
+
+
+ <meta name="hostname" content="github.com">
+
+
+ <meta name="keyboard-shortcuts-preference" content="all">
+ <script type="application/json" id="memex_keyboard_shortcuts_preference">"all"</script>
+
+ <meta name="expected-hostname" content="github.com">
+
+ <meta name="enabled-features" content="ACTIONS_RUN_NAME,IMAGE_METRIC_TRACKING,GEOJSON_AZURE_MAPS,STRICT_DEFERRED_DIFF_LINES_CHECKS">
+
+
+ <meta http-equiv="x-pjax-version" content="56d9d73658be7d98108b9c9ab739f0ae1ee3bca4f394e843ca812a557dd9f356" data-turbo-track="reload">
+ <meta http-equiv="x-pjax-csp-version" content="196a13434ccf3e32885dfa5574a2cfb5e2e8e4987d0b1b46aa95067a394485c1" data-turbo-track="reload">
+ <meta http-equiv="x-pjax-css-version" content="38ca272926597b58c4df943237eec5e109768b1182e12017c8041d0104e24596" data-turbo-track="reload">
+ <meta http-equiv="x-pjax-js-version" content="973193c59b7fdfa00b79e99c79606fcda8afd73b3a100b55c0fb6ef8d8dab2da" data-turbo-track="reload">
+
+ <meta name="turbo-cache-control" content="no-preview" data-turbo-transient="">
+
+ <meta data-hydrostats="publish">
+
+ <meta name="go-import" content="github.com/rlkamalapurkar/bodeplot git https://github.com/rlkamalapurkar/bodeplot.git">
+
+ <meta name="octolytics-dimension-user_id" content="30264720" /><meta name="octolytics-dimension-user_login" content="rlkamalapurkar" /><meta name="octolytics-dimension-repository_id" content="418699104" /><meta name="octolytics-dimension-repository_nwo" content="rlkamalapurkar/bodeplot" /><meta name="octolytics-dimension-repository_public" content="true" /><meta name="octolytics-dimension-repository_is_fork" content="false" /><meta name="octolytics-dimension-repository_network_root_id" content="418699104" /><meta name="octolytics-dimension-repository_network_root_nwo" content="rlkamalapurkar/bodeplot" />
+
+
+
+ <link rel="canonical" href="https://github.com/rlkamalapurkar/bodeplot/blob/main/bodeplot.ins" data-turbo-transient>
+ <meta name="turbo-body-classes" content="logged-in env-production page-responsive page-blob">
+
+
+ <meta name="browser-stats-url" content="https://api.github.com/_private/browser/stats">
+
+ <meta name="browser-errors-url" content="https://api.github.com/_private/browser/errors">
+
+ <meta name="browser-optimizely-client-errors-url" content="https://api.github.com/_private/browser/optimizely_client/errors">
+
+ <link rel="mask-icon" href="https://github.githubassets.com/pinned-octocat.svg" color="#000000">
+ <link rel="alternate icon" class="js-site-favicon" type="image/png" href="https://github.githubassets.com/favicons/favicon.png">
+ <link rel="icon" class="js-site-favicon" type="image/svg+xml" href="https://github.githubassets.com/favicons/favicon.svg">
+
+<meta name="theme-color" content="#1e2327">
+<meta name="color-scheme" content="light dark" />
+
+
+ <link rel="manifest" href="/manifest.json" crossOrigin="use-credentials">
+
+ </head>
+
+ <body class="logged-in env-production page-responsive page-blob" style="word-wrap: break-word;">
+
+
+ <div class="position-relative js-header-wrapper ">
+ <a href="#start-of-content" class="p-3 color-bg-accent-emphasis color-fg-on-emphasis show-on-focus js-skip-to-content">Skip to content</a>
+ <span data-view-component="true" class="progress-pjax-loader Progress position-fixed width-full">
+ <span style="width: 0%;" data-view-component="true" class="Progress-item progress-pjax-loader-bar left-0 top-0 color-bg-accent-emphasis"></span>
+</span>
+
+
+
+ <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_mini-throttle_dist_decorators_js-node_modules_github_command-pale-51fe14-9a1b633e9244.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_clipboard-copy-element_dist_index_esm_js-node_modules_delegated-e-976da2-e22766eedf00.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_command-palette_items_help-item_ts-app_assets_modules_github_comman-48ad9d-300540e938f3.js"></script>
+<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/command-palette-7174ee8c0061.js"></script>
+
+ <header class="Header js-details-container Details px-3 px-md-4 px-lg-5 flex-wrap flex-md-nowrap" role="banner">
+
+ <div class="Header-item mt-n1 mb-n1 d-none d-md-flex">
+ <a
+ class="Header-link"
+ href="https://github.com/"
+ data-hotkey="g d"
+ aria-label="Homepage "
+ data-turbo="false"
+ data-analytics-event="{&quot;category&quot;:&quot;Header&quot;,&quot;action&quot;:&quot;go to dashboard&quot;,&quot;label&quot;:&quot;icon:logo&quot;}"
+>
+ <svg height="32" aria-hidden="true" viewBox="0 0 16 16" version="1.1" width="32" data-view-component="true" class="octicon octicon-mark-github v-align-middle">
+ <path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"></path>
+</svg>
+</a>
+
+ </div>
+
+ <div class="Header-item d-md-none">
+ <button aria-label="Toggle navigation" aria-expanded="false" type="button" data-view-component="true" class="Header-link js-details-target btn-link"> <svg aria-hidden="true" height="24" viewBox="0 0 16 16" version="1.1" width="24" data-view-component="true" class="octicon octicon-three-bars">
+ <path fill-rule="evenodd" d="M1 2.75A.75.75 0 011.75 2h12.5a.75.75 0 110 1.5H1.75A.75.75 0 011 2.75zm0 5A.75.75 0 011.75 7h12.5a.75.75 0 110 1.5H1.75A.75.75 0 011 7.75zM1.75 12a.75.75 0 100 1.5h12.5a.75.75 0 100-1.5H1.75z"></path>
+</svg>
+</button> </div>
+
+ <div class="Header-item Header-item--full flex-column flex-md-row width-full flex-order-2 flex-md-order-none mr-0 mt-3 mt-md-0 Details-content--hidden-not-important d-md-flex">
+
+
+
+
+<div class="header-search flex-auto position-relative js-site-search flex-self-stretch flex-md-self-auto mb-3 mb-md-0 mr-0 mr-md-3 scoped-search site-scoped-search js-jump-to"
+>
+ <div class="position-relative">
+ <!-- '"` --><!-- </textarea></xmp> --></option></form><form class="js-site-search-form" role="search" aria-label="Site" data-scope-type="Repository" data-scope-id="418699104" data-scoped-search-url="/rlkamalapurkar/bodeplot/search" data-owner-scoped-search-url="/users/rlkamalapurkar/search" data-unscoped-search-url="/search" data-turbo="false" action="/rlkamalapurkar/bodeplot/search" accept-charset="UTF-8" method="get">
+ <label class="form-control header-search-wrapper input-sm p-0 js-chromeless-input-container header-search-wrapper-jump-to position-relative d-flex flex-justify-between flex-items-center">
+ <input type="text"
+ class="form-control js-site-search-focus header-search-input jump-to-field js-jump-to-field js-site-search-field is-clearable"
+ data-hotkey=s,/
+ name="q"
+ data-test-selector="nav-search-input"
+ placeholder="Search or jump to…"
+ data-unscoped-placeholder="Search or jump to…"
+ data-scoped-placeholder="Search or jump to…"
+ autocapitalize="off"
+ role="combobox"
+ aria-haspopup="listbox"
+ aria-expanded="false"
+ aria-autocomplete="list"
+ aria-controls="jump-to-results"
+ aria-label="Search or jump to…"
+ data-jump-to-suggestions-path="/_graphql/GetSuggestedNavigationDestinations"
+ spellcheck="false"
+ autocomplete="off"
+ >
+ <input type="hidden" value="u-BojdQkhZDD5KOAYdNVCM7yZ-WIGxHS5BRMNfSma8Ou17WBxPULJvNKvBWcWTD2YzFFpwWYJ8mQk0_jzXX6RQ" data-csrf="true" class="js-data-jump-to-suggestions-path-csrf" />
+ <input type="hidden" class="js-site-search-type-field" name="type" >
+ <svg xmlns="http://www.w3.org/2000/svg" width="22" height="20" aria-hidden="true" class="mr-1 header-search-key-slash"><path fill="none" stroke="#979A9C" opacity=".4" d="M3.5.5h12c1.7 0 3 1.3 3 3v13c0 1.7-1.3 3-3 3h-12c-1.7 0-3-1.3-3-3v-13c0-1.7 1.3-3 3-3z"></path><path fill="#979A9C" d="M11.8 6L8 15.1h-.9L10.8 6h1z"></path></svg>
+
+
+ <div class="Box position-absolute overflow-hidden d-none jump-to-suggestions js-jump-to-suggestions-container">
+
+<ul class="d-none js-jump-to-suggestions-template-container">
+
+
+<li class="d-flex flex-justify-start flex-items-center p-0 f5 navigation-item js-navigation-item js-jump-to-suggestion" role="option">
+ <a tabindex="-1" class="no-underline d-flex flex-auto flex-items-center jump-to-suggestions-path js-jump-to-suggestion-path js-navigation-open p-2" href="" data-item-type="suggestion">
+ <div class="jump-to-octicon js-jump-to-octicon flex-shrink-0 mr-2 text-center d-none">
+ <svg title="Repository" aria-label="Repository" role="img" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo js-jump-to-octicon-repo d-none flex-shrink-0">
+ <path fill-rule="evenodd" d="M2 2.5A2.5 2.5 0 014.5 0h8.75a.75.75 0 01.75.75v12.5a.75.75 0 01-.75.75h-2.5a.75.75 0 110-1.5h1.75v-2h-8a1 1 0 00-.714 1.7.75.75 0 01-1.072 1.05A2.495 2.495 0 012 11.5v-9zm10.5-1V9h-8c-.356 0-.694.074-1 .208V2.5a1 1 0 011-1h8zM5 12.25v3.25a.25.25 0 00.4.2l1.45-1.087a.25.25 0 01.3 0L8.6 15.7a.25.25 0 00.4-.2v-3.25a.25.25 0 00-.25-.25h-3.5a.25.25 0 00-.25.25z"></path>
+</svg>
+ <svg title="Project" aria-label="Project" role="img" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-project js-jump-to-octicon-project d-none flex-shrink-0">
+ <path fill-rule="evenodd" d="M1.75 0A1.75 1.75 0 000 1.75v12.5C0 15.216.784 16 1.75 16h12.5A1.75 1.75 0 0016 14.25V1.75A1.75 1.75 0 0014.25 0H1.75zM1.5 1.75a.25.25 0 01.25-.25h12.5a.25.25 0 01.25.25v12.5a.25.25 0 01-.25.25H1.75a.25.25 0 01-.25-.25V1.75zM11.75 3a.75.75 0 00-.75.75v7.5a.75.75 0 001.5 0v-7.5a.75.75 0 00-.75-.75zm-8.25.75a.75.75 0 011.5 0v5.5a.75.75 0 01-1.5 0v-5.5zM8 3a.75.75 0 00-.75.75v3.5a.75.75 0 001.5 0v-3.5A.75.75 0 008 3z"></path>
+</svg>
+ <svg title="Search" aria-label="Search" role="img" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-search js-jump-to-octicon-search d-none flex-shrink-0">
+ <path fill-rule="evenodd" d="M11.5 7a4.499 4.499 0 11-8.998 0A4.499 4.499 0 0111.5 7zm-.82 4.74a6 6 0 111.06-1.06l3.04 3.04a.75.75 0 11-1.06 1.06l-3.04-3.04z"></path>
+</svg>
+ </div>
+
+ <img class="avatar mr-2 flex-shrink-0 js-jump-to-suggestion-avatar d-none" alt="" aria-label="Team" src="" width="28" height="28">
+
+ <div class="jump-to-suggestion-name js-jump-to-suggestion-name flex-auto overflow-hidden text-left no-wrap css-truncate css-truncate-target">
+ </div>
+
+ <div class="border rounded-2 flex-shrink-0 color-bg-subtle px-1 color-fg-muted ml-1 f6 d-none js-jump-to-badge-search">
+ <span class="js-jump-to-badge-search-text-default d-none" aria-label="in this repository">
+ In this repository
+ </span>
+ <span class="js-jump-to-badge-search-text-global d-none" aria-label="in all of GitHub">
+ All GitHub
+ </span>
+ <span aria-hidden="true" class="d-inline-block ml-1 v-align-middle">↵</span>
+ </div>
+
+ <div aria-hidden="true" class="border rounded-2 flex-shrink-0 color-bg-subtle px-1 color-fg-muted ml-1 f6 d-none d-on-nav-focus js-jump-to-badge-jump">
+ Jump to
+ <span class="d-inline-block ml-1 v-align-middle">↵</span>
+ </div>
+ </a>
+</li>
+
+</ul>
+
+<ul class="d-none js-jump-to-no-results-template-container">
+ <li class="d-flex flex-justify-center flex-items-center f5 d-none js-jump-to-suggestion p-2">
+ <span class="color-fg-muted">No suggested jump to results</span>
+ </li>
+</ul>
+
+<ul id="jump-to-results" role="listbox" class="p-0 m-0 js-navigation-container jump-to-suggestions-results-container js-jump-to-suggestions-results-container">
+
+
+<li class="d-flex flex-justify-start flex-items-center p-0 f5 navigation-item js-navigation-item js-jump-to-scoped-search d-none" role="option">
+ <a tabindex="-1" class="no-underline d-flex flex-auto flex-items-center jump-to-suggestions-path js-jump-to-suggestion-path js-navigation-open p-2" href="" data-item-type="scoped_search">
+ <div class="jump-to-octicon js-jump-to-octicon flex-shrink-0 mr-2 text-center d-none">
+ <svg title="Repository" aria-label="Repository" role="img" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo js-jump-to-octicon-repo d-none flex-shrink-0">
+ <path fill-rule="evenodd" d="M2 2.5A2.5 2.5 0 014.5 0h8.75a.75.75 0 01.75.75v12.5a.75.75 0 01-.75.75h-2.5a.75.75 0 110-1.5h1.75v-2h-8a1 1 0 00-.714 1.7.75.75 0 01-1.072 1.05A2.495 2.495 0 012 11.5v-9zm10.5-1V9h-8c-.356 0-.694.074-1 .208V2.5a1 1 0 011-1h8zM5 12.25v3.25a.25.25 0 00.4.2l1.45-1.087a.25.25 0 01.3 0L8.6 15.7a.25.25 0 00.4-.2v-3.25a.25.25 0 00-.25-.25h-3.5a.25.25 0 00-.25.25z"></path>
+</svg>
+ <svg title="Project" aria-label="Project" role="img" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-project js-jump-to-octicon-project d-none flex-shrink-0">
+ <path fill-rule="evenodd" d="M1.75 0A1.75 1.75 0 000 1.75v12.5C0 15.216.784 16 1.75 16h12.5A1.75 1.75 0 0016 14.25V1.75A1.75 1.75 0 0014.25 0H1.75zM1.5 1.75a.25.25 0 01.25-.25h12.5a.25.25 0 01.25.25v12.5a.25.25 0 01-.25.25H1.75a.25.25 0 01-.25-.25V1.75zM11.75 3a.75.75 0 00-.75.75v7.5a.75.75 0 001.5 0v-7.5a.75.75 0 00-.75-.75zm-8.25.75a.75.75 0 011.5 0v5.5a.75.75 0 01-1.5 0v-5.5zM8 3a.75.75 0 00-.75.75v3.5a.75.75 0 001.5 0v-3.5A.75.75 0 008 3z"></path>
+</svg>
+ <svg title="Search" aria-label="Search" role="img" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-search js-jump-to-octicon-search d-none flex-shrink-0">
+ <path fill-rule="evenodd" d="M11.5 7a4.499 4.499 0 11-8.998 0A4.499 4.499 0 0111.5 7zm-.82 4.74a6 6 0 111.06-1.06l3.04 3.04a.75.75 0 11-1.06 1.06l-3.04-3.04z"></path>
+</svg>
+ </div>
+
+ <img class="avatar mr-2 flex-shrink-0 js-jump-to-suggestion-avatar d-none" alt="" aria-label="Team" src="" width="28" height="28">
+
+ <div class="jump-to-suggestion-name js-jump-to-suggestion-name flex-auto overflow-hidden text-left no-wrap css-truncate css-truncate-target">
+ </div>
+
+ <div class="border rounded-2 flex-shrink-0 color-bg-subtle px-1 color-fg-muted ml-1 f6 d-none js-jump-to-badge-search">
+ <span class="js-jump-to-badge-search-text-default d-none" aria-label="in this repository">
+ In this repository
+ </span>
+ <span class="js-jump-to-badge-search-text-global d-none" aria-label="in all of GitHub">
+ All GitHub
+ </span>
+ <span aria-hidden="true" class="d-inline-block ml-1 v-align-middle">↵</span>
+ </div>
+
+ <div aria-hidden="true" class="border rounded-2 flex-shrink-0 color-bg-subtle px-1 color-fg-muted ml-1 f6 d-none d-on-nav-focus js-jump-to-badge-jump">
+ Jump to
+ <span class="d-inline-block ml-1 v-align-middle">↵</span>
+ </div>
+ </a>
+</li>
+
+
+
+<li class="d-flex flex-justify-start flex-items-center p-0 f5 navigation-item js-navigation-item js-jump-to-owner-scoped-search d-none" role="option">
+ <a tabindex="-1" class="no-underline d-flex flex-auto flex-items-center jump-to-suggestions-path js-jump-to-suggestion-path js-navigation-open p-2" href="" data-item-type="owner_scoped_search">
+ <div class="jump-to-octicon js-jump-to-octicon flex-shrink-0 mr-2 text-center d-none">
+ <svg title="Repository" aria-label="Repository" role="img" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo js-jump-to-octicon-repo d-none flex-shrink-0">
+ <path fill-rule="evenodd" d="M2 2.5A2.5 2.5 0 014.5 0h8.75a.75.75 0 01.75.75v12.5a.75.75 0 01-.75.75h-2.5a.75.75 0 110-1.5h1.75v-2h-8a1 1 0 00-.714 1.7.75.75 0 01-1.072 1.05A2.495 2.495 0 012 11.5v-9zm10.5-1V9h-8c-.356 0-.694.074-1 .208V2.5a1 1 0 011-1h8zM5 12.25v3.25a.25.25 0 00.4.2l1.45-1.087a.25.25 0 01.3 0L8.6 15.7a.25.25 0 00.4-.2v-3.25a.25.25 0 00-.25-.25h-3.5a.25.25 0 00-.25.25z"></path>
+</svg>
+ <svg title="Project" aria-label="Project" role="img" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-project js-jump-to-octicon-project d-none flex-shrink-0">
+ <path fill-rule="evenodd" d="M1.75 0A1.75 1.75 0 000 1.75v12.5C0 15.216.784 16 1.75 16h12.5A1.75 1.75 0 0016 14.25V1.75A1.75 1.75 0 0014.25 0H1.75zM1.5 1.75a.25.25 0 01.25-.25h12.5a.25.25 0 01.25.25v12.5a.25.25 0 01-.25.25H1.75a.25.25 0 01-.25-.25V1.75zM11.75 3a.75.75 0 00-.75.75v7.5a.75.75 0 001.5 0v-7.5a.75.75 0 00-.75-.75zm-8.25.75a.75.75 0 011.5 0v5.5a.75.75 0 01-1.5 0v-5.5zM8 3a.75.75 0 00-.75.75v3.5a.75.75 0 001.5 0v-3.5A.75.75 0 008 3z"></path>
+</svg>
+ <svg title="Search" aria-label="Search" role="img" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-search js-jump-to-octicon-search d-none flex-shrink-0">
+ <path fill-rule="evenodd" d="M11.5 7a4.499 4.499 0 11-8.998 0A4.499 4.499 0 0111.5 7zm-.82 4.74a6 6 0 111.06-1.06l3.04 3.04a.75.75 0 11-1.06 1.06l-3.04-3.04z"></path>
+</svg>
+ </div>
+
+ <img class="avatar mr-2 flex-shrink-0 js-jump-to-suggestion-avatar d-none" alt="" aria-label="Team" src="" width="28" height="28">
+
+ <div class="jump-to-suggestion-name js-jump-to-suggestion-name flex-auto overflow-hidden text-left no-wrap css-truncate css-truncate-target">
+ </div>
+
+ <div class="border rounded-2 flex-shrink-0 color-bg-subtle px-1 color-fg-muted ml-1 f6 d-none js-jump-to-badge-search">
+ <span class="js-jump-to-badge-search-text-default d-none" aria-label="in this user">
+ In this user
+ </span>
+ <span class="js-jump-to-badge-search-text-global d-none" aria-label="in all of GitHub">
+ All GitHub
+ </span>
+ <span aria-hidden="true" class="d-inline-block ml-1 v-align-middle">↵</span>
+ </div>
+
+ <div aria-hidden="true" class="border rounded-2 flex-shrink-0 color-bg-subtle px-1 color-fg-muted ml-1 f6 d-none d-on-nav-focus js-jump-to-badge-jump">
+ Jump to
+ <span class="d-inline-block ml-1 v-align-middle">↵</span>
+ </div>
+ </a>
+</li>
+
+
+
+<li class="d-flex flex-justify-start flex-items-center p-0 f5 navigation-item js-navigation-item js-jump-to-global-search d-none" role="option">
+ <a tabindex="-1" class="no-underline d-flex flex-auto flex-items-center jump-to-suggestions-path js-jump-to-suggestion-path js-navigation-open p-2" href="" data-item-type="global_search">
+ <div class="jump-to-octicon js-jump-to-octicon flex-shrink-0 mr-2 text-center d-none">
+ <svg title="Repository" aria-label="Repository" role="img" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo js-jump-to-octicon-repo d-none flex-shrink-0">
+ <path fill-rule="evenodd" d="M2 2.5A2.5 2.5 0 014.5 0h8.75a.75.75 0 01.75.75v12.5a.75.75 0 01-.75.75h-2.5a.75.75 0 110-1.5h1.75v-2h-8a1 1 0 00-.714 1.7.75.75 0 01-1.072 1.05A2.495 2.495 0 012 11.5v-9zm10.5-1V9h-8c-.356 0-.694.074-1 .208V2.5a1 1 0 011-1h8zM5 12.25v3.25a.25.25 0 00.4.2l1.45-1.087a.25.25 0 01.3 0L8.6 15.7a.25.25 0 00.4-.2v-3.25a.25.25 0 00-.25-.25h-3.5a.25.25 0 00-.25.25z"></path>
+</svg>
+ <svg title="Project" aria-label="Project" role="img" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-project js-jump-to-octicon-project d-none flex-shrink-0">
+ <path fill-rule="evenodd" d="M1.75 0A1.75 1.75 0 000 1.75v12.5C0 15.216.784 16 1.75 16h12.5A1.75 1.75 0 0016 14.25V1.75A1.75 1.75 0 0014.25 0H1.75zM1.5 1.75a.25.25 0 01.25-.25h12.5a.25.25 0 01.25.25v12.5a.25.25 0 01-.25.25H1.75a.25.25 0 01-.25-.25V1.75zM11.75 3a.75.75 0 00-.75.75v7.5a.75.75 0 001.5 0v-7.5a.75.75 0 00-.75-.75zm-8.25.75a.75.75 0 011.5 0v5.5a.75.75 0 01-1.5 0v-5.5zM8 3a.75.75 0 00-.75.75v3.5a.75.75 0 001.5 0v-3.5A.75.75 0 008 3z"></path>
+</svg>
+ <svg title="Search" aria-label="Search" role="img" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-search js-jump-to-octicon-search d-none flex-shrink-0">
+ <path fill-rule="evenodd" d="M11.5 7a4.499 4.499 0 11-8.998 0A4.499 4.499 0 0111.5 7zm-.82 4.74a6 6 0 111.06-1.06l3.04 3.04a.75.75 0 11-1.06 1.06l-3.04-3.04z"></path>
+</svg>
+ </div>
+
+ <img class="avatar mr-2 flex-shrink-0 js-jump-to-suggestion-avatar d-none" alt="" aria-label="Team" src="" width="28" height="28">
+
+ <div class="jump-to-suggestion-name js-jump-to-suggestion-name flex-auto overflow-hidden text-left no-wrap css-truncate css-truncate-target">
+ </div>
+
+ <div class="border rounded-2 flex-shrink-0 color-bg-subtle px-1 color-fg-muted ml-1 f6 d-none js-jump-to-badge-search">
+ <span class="js-jump-to-badge-search-text-default d-none" aria-label="in this repository">
+ In this repository
+ </span>
+ <span class="js-jump-to-badge-search-text-global d-none" aria-label="in all of GitHub">
+ All GitHub
+ </span>
+ <span aria-hidden="true" class="d-inline-block ml-1 v-align-middle">↵</span>
+ </div>
+
+ <div aria-hidden="true" class="border rounded-2 flex-shrink-0 color-bg-subtle px-1 color-fg-muted ml-1 f6 d-none d-on-nav-focus js-jump-to-badge-jump">
+ Jump to
+ <span class="d-inline-block ml-1 v-align-middle">↵</span>
+ </div>
+ </a>
+</li>
+
+
+ <li class="d-flex flex-justify-center flex-items-center p-0 f5 js-jump-to-suggestion">
+ <svg style="box-sizing: content-box; color: var(--color-icon-primary);" width="32" height="32" viewBox="0 0 16 16" fill="none" data-view-component="true" class="m-3 anim-rotate">
+ <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" />
+ <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke" />
+</svg>
+ </li>
+</ul>
+
+ </div>
+ </label>
+</form> </div>
+</div>
+
+ <nav id="global-nav" class="d-flex flex-column flex-md-row flex-self-stretch flex-md-self-auto" aria-label="Global">
+ <a class="Header-link py-md-3 d-block d-md-none py-2 border-top border-md-top-0 border-white-fade" data-ga-click="Header, click, Nav menu - item:dashboard:user" aria-label="Dashboard" data-turbo="false" href="/dashboard">Dashboard</a>
+
+ <a class="js-selected-navigation-item Header-link mt-md-n3 mb-md-n3 py-2 py-md-3 mr-0 mr-md-3 border-top border-md-top-0 border-white-fade" data-hotkey="g p" data-ga-click="Header, click, Nav menu - item:pulls context:user" aria-label="Pull requests you created" data-turbo="false" data-selected-links="/pulls /pulls/assigned /pulls/mentioned /pulls" href="/pulls">
+ Pull<span class="d-inline d-md-none d-lg-inline"> request</span>s
+</a>
+ <a class="js-selected-navigation-item Header-link mt-md-n3 mb-md-n3 py-2 py-md-3 mr-0 mr-md-3 border-top border-md-top-0 border-white-fade" data-hotkey="g i" data-ga-click="Header, click, Nav menu - item:issues context:user" aria-label="Issues you created" data-turbo="false" data-selected-links="/issues /issues/assigned /issues/mentioned /issues" href="/issues">Issues</a>
+
+ <a class="js-selected-navigation-item Header-link mt-md-n3 mb-md-n3 py-2 py-md-3 mr-0 mr-md-3 border-top border-md-top-0 border-white-fade d-md-none" data-ga-click="Header, click, Nav menu - item:workspaces context:user" data-turbo="false" data-selected-links="/codespaces /codespaces" href="/codespaces">Codespaces</a>
+
+ <div class="d-flex position-relative">
+ <a class="js-selected-navigation-item Header-link flex-auto mt-md-n3 mb-md-n3 py-2 py-md-3 mr-0 mr-md-3 border-top border-md-top-0 border-white-fade" data-ga-click="Header, click, Nav menu - item:marketplace context:user" data-octo-click="marketplace_click" data-octo-dimensions="location:nav_bar" data-turbo="false" data-selected-links=" /marketplace" href="/marketplace">Marketplace</a>
+ </div>
+
+ <a class="js-selected-navigation-item Header-link mt-md-n3 mb-md-n3 py-2 py-md-3 mr-0 mr-md-3 border-top border-md-top-0 border-white-fade" data-ga-click="Header, click, Nav menu - item:explore" data-turbo="false" data-selected-links="/explore /trending /trending/developers /integrations /integrations/feature/code /integrations/feature/collaborate /integrations/feature/ship showcases showcases_search showcases_landing /explore" href="/explore">Explore</a>
+
+ <a class="js-selected-navigation-item Header-link d-block d-md-none py-2 py-md-3 border-top border-md-top-0 border-white-fade" data-ga-click="Header, click, Nav menu - item:Sponsors" data-hydro-click="{&quot;event_type&quot;:&quot;sponsors.button_click&quot;,&quot;payload&quot;:{&quot;button&quot;:&quot;HEADER_SPONSORS_DASHBOARD&quot;,&quot;sponsorable_login&quot;:&quot;rlkamalapurkar&quot;,&quot;originating_url&quot;:&quot;https://github.com/rlkamalapurkar/bodeplot/blob/main/bodeplot.ins&quot;,&quot;user_id&quot;:30264720}}" data-hydro-click-hmac="690b90d4001585e6d7d299a9fed51fc3e900e201442ccebce7a699d81345b0e9" data-turbo="false" data-selected-links=" /sponsors/accounts" href="/sponsors/accounts">Sponsors</a>
+
+ <a class="Header-link d-block d-md-none mr-0 mr-md-3 py-2 py-md-3 border-top border-md-top-0 border-white-fade" data-turbo="false" href="/settings/profile">Settings</a>
+
+ <a class="Header-link d-block d-md-none mr-0 mr-md-3 py-2 py-md-3 border-top border-md-top-0 border-white-fade" data-turbo="false" href="/rlkamalapurkar">
+ <img class="avatar avatar-user" loading="lazy" decoding="async" src="https://avatars.githubusercontent.com/u/30264720?s=40&amp;v=4" width="20" height="20" alt="@rlkamalapurkar" />
+ rlkamalapurkar
+</a>
+ <!-- '"` --><!-- </textarea></xmp> --></option></form><form data-turbo="false" action="/logout" accept-charset="UTF-8" method="post"><input type="hidden" name="authenticity_token" value="Uuxx1iokpP-JHJVBMA7aF3I1JlgbBaEePWrylrI-nkAWA3nDg94DmObR__KXDX8XpplpuLlrFE7_-7LLn4zNHA" />
+ <button
+ type="submit"
+ class="Header-link mr-0 mr-md-3 py-2 py-md-3 border-top border-md-top-0 border-white-fade d-md-none btn-link d-block width-full text-left"
+ style="padding-left: 2px;"
+ data-analytics-event="{&quot;category&quot;:&quot;Header&quot;,&quot;action&quot;:&quot;sign out&quot;,&quot;label&quot;:&quot;icon:logout&quot;}"
+ >
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-sign-out v-align-middle">
+ <path fill-rule="evenodd" d="M2 2.75C2 1.784 2.784 1 3.75 1h2.5a.75.75 0 010 1.5h-2.5a.25.25 0 00-.25.25v10.5c0 .138.112.25.25.25h2.5a.75.75 0 010 1.5h-2.5A1.75 1.75 0 012 13.25V2.75zm10.44 4.5H6.75a.75.75 0 000 1.5h5.69l-1.97 1.97a.75.75 0 101.06 1.06l3.25-3.25a.75.75 0 000-1.06l-3.25-3.25a.75.75 0 10-1.06 1.06l1.97 1.97z"></path>
+</svg>
+ Sign out
+ </button>
+</form></nav>
+
+ </div>
+
+ <div class="Header-item Header-item--full flex-justify-center d-md-none position-relative">
+ <a
+ class="Header-link"
+ href="https://github.com/"
+ data-hotkey="g d"
+ aria-label="Homepage "
+ data-turbo="false"
+ data-analytics-event="{&quot;category&quot;:&quot;Header&quot;,&quot;action&quot;:&quot;go to dashboard&quot;,&quot;label&quot;:&quot;icon:logo&quot;}"
+>
+ <svg height="32" aria-hidden="true" viewBox="0 0 16 16" version="1.1" width="32" data-view-component="true" class="octicon octicon-mark-github v-align-middle">
+ <path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"></path>
+</svg>
+</a>
+
+ </div>
+
+ <div class="Header-item mr-0 mr-md-3 flex-order-1 flex-md-order-none">
+
+
+<notification-indicator data-channel="eyJjIjoibm90aWZpY2F0aW9uLWNoYW5nZWQ6MzAyNjQ3MjAiLCJ0IjoxNjY3MTA4NTU2fQ==--b89a35ec4cae363260099e0869f9318784caf38cb866fcf34454bb109e89c7c6" data-indicator-mode="none" data-tooltip-global="You have unread notifications" data-tooltip-unavailable="Notifications are unavailable at the moment." data-tooltip-none="You have no unread notifications" data-view-component="true" class="js-socket-channel">
+ <a id="AppHeader-notifications-button" href="/notifications"
+ class="Header-link notification-indicator position-relative tooltipped tooltipped-sw"
+
+
+
+ data-hotkey="g n"
+ data-target="notification-indicator.link"
+ aria-label="Notifications"
+
+ data-analytics-event="{&quot;category&quot;:&quot;Header&quot;,&quot;action&quot;:&quot;go to notifications&quot;,&quot;label&quot;:&quot;icon:read&quot;}"
+ >
+
+ <span
+ data-target="notification-indicator.badge"
+ class="mail-status unread" hidden>
+ </span>
+
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-bell">
+ <path d="M8 16a2 2 0 001.985-1.75c.017-.137-.097-.25-.235-.25h-3.5c-.138 0-.252.113-.235.25A2 2 0 008 16z"></path><path fill-rule="evenodd" d="M8 1.5A3.5 3.5 0 004.5 5v2.947c0 .346-.102.683-.294.97l-1.703 2.556a.018.018 0 00-.003.01l.001.006c0 .002.002.004.004.006a.017.017 0 00.006.004l.007.001h10.964l.007-.001a.016.016 0 00.006-.004.016.016 0 00.004-.006l.001-.007a.017.017 0 00-.003-.01l-1.703-2.554a1.75 1.75 0 01-.294-.97V5A3.5 3.5 0 008 1.5zM3 5a5 5 0 0110 0v2.947c0 .05.015.098.042.139l1.703 2.555A1.518 1.518 0 0113.482 13H2.518a1.518 1.518 0 01-1.263-2.36l1.703-2.554A.25.25 0 003 7.947V5z"></path>
+</svg>
+ </a>
+
+</notification-indicator>
+ </div>
+
+
+ <div class="Header-item position-relative d-none d-md-flex">
+ <details class="details-overlay details-reset">
+ <summary
+ class="Header-link"
+ aria-label="Create new…"
+ data-analytics-event="{&quot;category&quot;:&quot;Header&quot;,&quot;action&quot;:&quot;create new&quot;,&quot;label&quot;:&quot;icon:add&quot;}"
+ >
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-plus">
+ <path fill-rule="evenodd" d="M7.75 2a.75.75 0 01.75.75V7h4.25a.75.75 0 110 1.5H8.5v4.25a.75.75 0 11-1.5 0V8.5H2.75a.75.75 0 010-1.5H7V2.75A.75.75 0 017.75 2z"></path>
+</svg> <span class="dropdown-caret"></span>
+ </summary>
+ <details-menu class="dropdown-menu dropdown-menu-sw">
+
+<a role="menuitem" class="dropdown-item" href="/new" data-ga-click="Header, create new repository">
+ New repository
+</a>
+
+ <a role="menuitem" class="dropdown-item" href="/new/import" data-ga-click="Header, import a repository">
+ Import repository
+ </a>
+
+
+<a role="menuitem" class="dropdown-item" href="https://gist.github.com/" data-ga-click="Header, create new gist">
+ New gist
+</a>
+
+ <a role="menuitem" class="dropdown-item" href="/organizations/new" data-ga-click="Header, create new organization">
+ New organization
+ </a>
+
+
+
+ </details-menu>
+</details>
+
+ </div>
+
+ <div class="Header-item position-relative mr-0 d-none d-md-flex">
+
+ <details class="details-overlay details-reset js-feature-preview-indicator-container" data-feature-preview-indicator-src="/users/rlkamalapurkar/feature_preview/indicator_check">
+
+ <summary
+ class="Header-link"
+ aria-label="View profile and more"
+ data-analytics-event="{&quot;category&quot;:&quot;Header&quot;,&quot;action&quot;:&quot;show menu&quot;,&quot;label&quot;:&quot;icon:avatar&quot;}"
+ >
+ <img src="https://avatars.githubusercontent.com/u/30264720?s=40&amp;v=4" alt="@rlkamalapurkar" size="20" height="20" width="20" data-view-component="true" class="avatar avatar-small circle" />
+ <span class="unread-indicator js-feature-preview-indicator" style="top: 1px;" hidden></span>
+ <span class="dropdown-caret"></span>
+ </summary>
+ <details-menu
+ class="dropdown-menu dropdown-menu-sw"
+ style="width: 180px"
+
+ preload>
+ <include-fragment src="/users/30264720/menu" loading="lazy">
+ <p class="text-center mt-3" data-hide-on-error>
+ <svg style="box-sizing: content-box; color: var(--color-icon-primary);" width="32" height="32" viewBox="0 0 16 16" fill="none" data-view-component="true" class="anim-rotate">
+ <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" />
+ <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke" />
+</svg>
+ </p>
+ <p class="ml-1 mb-2 mt-2 color-fg-default" data-show-on-error>
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
+ <path fill-rule="evenodd" d="M8.22 1.754a.25.25 0 00-.44 0L1.698 13.132a.25.25 0 00.22.368h12.164a.25.25 0 00.22-.368L8.22 1.754zm-1.763-.707c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0114.082 15H1.918a1.75 1.75 0 01-1.543-2.575L6.457 1.047zM9 11a1 1 0 11-2 0 1 1 0 012 0zm-.25-5.25a.75.75 0 00-1.5 0v2.5a.75.75 0 001.5 0v-2.5z"></path>
+</svg>
+ Sorry, something went wrong.
+ </p>
+ </include-fragment>
+ </details-menu>
+</details>
+
+ </div>
+</header>
+
+
+ </div>
+
+ <div id="start-of-content" class="show-on-focus"></div>
+
+
+
+
+
+
+
+ <div id="js-flash-container" data-turbo-replace>
+
+
+
+
+ <template class="js-flash-template">
+
+<div class="flash flash-full {{ className }}">
+ <div class="px-2" >
+ <button autofocus class="flash-close js-flash-close" type="button" aria-label="Dismiss this message">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x">
+ <path fill-rule="evenodd" d="M3.72 3.72a.75.75 0 011.06 0L8 6.94l3.22-3.22a.75.75 0 111.06 1.06L9.06 8l3.22 3.22a.75.75 0 11-1.06 1.06L8 9.06l-3.22 3.22a.75.75 0 01-1.06-1.06L6.94 8 3.72 4.78a.75.75 0 010-1.06z"></path>
+</svg>
+ </button>
+ <div aria-atomic="true" role="alert" class="js-flash-alert">
+
+ <div>{{ message }}</div>
+
+ </div>
+ </div>
+</div>
+ </template>
+</div>
+
+
+
+ <include-fragment class="js-notification-shelf-include-fragment" data-base-src="https://github.com/notifications/beta/shelf"></include-fragment>
+
+
+
+
+
+ <details
+ class="details-reset details-overlay details-overlay-dark js-command-palette-dialog"
+ id="command-palette-pjax-container"
+ data-turbo-replace
+>
+ <summary aria-label="command palette trigger">
+ </summary>
+ <details-dialog class="command-palette-details-dialog d-flex flex-column flex-justify-center height-fit" aria-label="command palette">
+ <command-palette
+ class="command-palette color-bg-default rounded-3 border color-shadow-small"
+ return-to=/rlkamalapurkar/bodeplot/blob/main/bodeplot.ins
+ user-id="30264720"
+ activation-hotkey="Mod+k,Mod+Alt+k"
+ command-mode-hotkey="Mod+Shift+k"
+ data-action="
+ command-palette-input-ready:command-palette#inputReady
+ command-palette-page-stack-updated:command-palette#updateInputScope
+ itemsUpdated:command-palette#itemsUpdated
+ keydown:command-palette#onKeydown
+ loadingStateChanged:command-palette#loadingStateChanged
+ selectedItemChanged:command-palette#selectedItemChanged
+ pageFetchError:command-palette#pageFetchError
+ ">
+
+ <command-palette-mode
+ data-char="#"
+ data-scope-types="[&quot;&quot;]"
+ data-placeholder="Search issues and pull requests"
+ ></command-palette-mode>
+ <command-palette-mode
+ data-char="#"
+ data-scope-types="[&quot;owner&quot;,&quot;repository&quot;]"
+ data-placeholder="Search issues, pull requests, discussions, and projects"
+ ></command-palette-mode>
+ <command-palette-mode
+ data-char="!"
+ data-scope-types="[&quot;owner&quot;,&quot;repository&quot;]"
+ data-placeholder="Search projects"
+ ></command-palette-mode>
+ <command-palette-mode
+ data-char="@"
+ data-scope-types="[&quot;&quot;]"
+ data-placeholder="Search or jump to a user, organization, or repository"
+ ></command-palette-mode>
+ <command-palette-mode
+ data-char="@"
+ data-scope-types="[&quot;owner&quot;]"
+ data-placeholder="Search or jump to a repository"
+ ></command-palette-mode>
+ <command-palette-mode
+ data-char="/"
+ data-scope-types="[&quot;repository&quot;]"
+ data-placeholder="Search files"
+ ></command-palette-mode>
+ <command-palette-mode
+ data-char="?"
+ ></command-palette-mode>
+ <command-palette-mode
+ data-char="&gt;"
+ data-placeholder="Run a command"
+ ></command-palette-mode>
+ <command-palette-mode
+ data-char=""
+ data-scope-types="[&quot;&quot;]"
+ data-placeholder="Search or jump to..."
+ ></command-palette-mode>
+ <command-palette-mode
+ data-char=""
+ data-scope-types="[&quot;owner&quot;]"
+ data-placeholder="Search or jump to..."
+ ></command-palette-mode>
+ <command-palette-mode
+ class="js-command-palette-default-mode"
+ data-char=""
+ data-placeholder="Search or jump to..."
+ ></command-palette-mode>
+
+ <command-palette-input placeholder="Search or jump to..."
+
+ data-action="
+ command-palette-input:command-palette#onInput
+ command-palette-select:command-palette#onSelect
+ command-palette-descope:command-palette#onDescope
+ command-palette-cleared:command-palette#onInputClear
+ "
+ >
+ <div class="js-search-icon d-flex flex-items-center mr-2" style="height: 26px">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-search color-fg-muted">
+ <path fill-rule="evenodd" d="M11.5 7a4.499 4.499 0 11-8.998 0A4.499 4.499 0 0111.5 7zm-.82 4.74a6 6 0 111.06-1.06l3.04 3.04a.75.75 0 11-1.06 1.06l-3.04-3.04z"></path>
+</svg>
+ </div>
+ <div class="js-spinner d-flex flex-items-center mr-2 color-fg-muted" hidden>
+ <svg aria-label="Loading" class="anim-rotate" viewBox="0 0 16 16" fill="none" width="16" height="16">
+ <circle
+ cx="8"
+ cy="8"
+ r="7"
+ stroke="currentColor"
+ stroke-opacity="0.25"
+ stroke-width="2"
+ vector-effect="non-scaling-stroke"
+ ></circle>
+ <path
+ d="M15 8a7.002 7.002 0 00-7-7"
+ stroke="currentColor"
+ stroke-width="2"
+ stroke-linecap="round"
+ vector-effect="non-scaling-stroke"
+ ></path>
+ </svg>
+ </div>
+ <command-palette-scope >
+ <div data-target="command-palette-scope.placeholder" hidden class="color-fg-subtle">/&nbsp;&nbsp;<span class="text-semibold color-fg-default">...</span>&nbsp;&nbsp;/&nbsp;&nbsp;</div>
+ <command-palette-token
+ data-text="rlkamalapurkar"
+ data-id="MDQ6VXNlcjMwMjY0NzIw"
+ data-type="owner"
+ data-value="rlkamalapurkar"
+ data-targets="command-palette-scope.tokens"
+ class="color-fg-default text-semibold"
+ style="white-space:nowrap;line-height:20px;"
+ >rlkamalapurkar<span class="color-fg-subtle text-normal">&nbsp;&nbsp;/&nbsp;&nbsp;</span></command-palette-token>
+ <command-palette-token
+ data-text="bodeplot"
+ data-id="R_kgDOGPTXYA"
+ data-type="repository"
+ data-value="bodeplot"
+ data-targets="command-palette-scope.tokens"
+ class="color-fg-default text-semibold"
+ style="white-space:nowrap;line-height:20px;"
+ >bodeplot<span class="color-fg-subtle text-normal">&nbsp;&nbsp;/&nbsp;&nbsp;</span></command-palette-token>
+ </command-palette-scope>
+ <div class="command-palette-input-group flex-1 form-control border-0 box-shadow-none" style="z-index: 0">
+ <div class="command-palette-typeahead position-absolute d-flex flex-items-center Truncate">
+ <span class="typeahead-segment input-mirror" data-target="command-palette-input.mirror"></span>
+ <span class="Truncate-text" data-target="command-palette-input.typeaheadText"></span>
+ <span class="typeahead-segment" data-target="command-palette-input.typeaheadPlaceholder"></span>
+ </div>
+ <input
+ class="js-overlay-input typeahead-input d-none"
+ disabled
+ tabindex="-1"
+ aria-label="Hidden input for typeahead"
+ >
+ <input
+ type="text"
+ autocomplete="off"
+ autocorrect="off"
+ autocapitalize="off"
+ spellcheck="false"
+ class="js-input typeahead-input form-control border-0 box-shadow-none input-block width-full no-focus-indicator"
+ aria-label="Command palette input"
+ aria-haspopup="listbox"
+ aria-expanded="false"
+ aria-autocomplete="list"
+ aria-controls="command-palette-page-stack"
+ role="combobox"
+ data-action="
+ input:command-palette-input#onInput
+ keydown:command-palette-input#onKeydown
+ "
+ >
+ </div>
+ <div data-view-component="true" class="position-relative d-inline-block">
+ <button aria-keyshortcuts="Control+Backspace" data-action="click:command-palette-input#onClear keypress:command-palette-input#onClear" data-target="command-palette-input.clearButton" id="command-palette-clear-button" hidden="hidden" type="button" data-view-component="true" class="btn-octicon command-palette-input-clear-button"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x-circle-fill">
+ <path fill-rule="evenodd" d="M2.343 13.657A8 8 0 1113.657 2.343 8 8 0 012.343 13.657zM6.03 4.97a.75.75 0 00-1.06 1.06L6.94 8 4.97 9.97a.75.75 0 101.06 1.06L8 9.06l1.97 1.97a.75.75 0 101.06-1.06L9.06 8l1.97-1.97a.75.75 0 10-1.06-1.06L8 6.94 6.03 4.97z"></path>
+</svg>
+</button> <tool-tip for="command-palette-clear-button" data-direction="w" data-type="label" data-view-component="true" class="sr-only position-absolute">Clear Command Palette</tool-tip>
+</div>
+ </command-palette-input>
+
+ <command-palette-page-stack
+ data-default-scope-id="R_kgDOGPTXYA"
+ data-default-scope-type="Repository"
+ data-action="command-palette-page-octicons-cached:command-palette-page-stack#cacheOcticons"
+ >
+ <command-palette-tip
+ class="color-fg-muted f6 px-3 py-1 my-2"
+ data-scope-types="[&quot;&quot;,&quot;owner&quot;,&quot;repository&quot;]"
+ data-mode=""
+ data-value="">
+ <div class="d-flex flex-items-start flex-justify-between">
+ <div>
+ <span class="text-bold">Tip:</span>
+ Type <kbd class="hx_kbd">#</kbd> to search pull requests
+ </div>
+ <div class="ml-2 flex-shrink-0">
+ Type <kbd class="hx_kbd">?</kbd> for help and tips
+ </div>
+ </div>
+ </command-palette-tip>
+ <command-palette-tip
+ class="color-fg-muted f6 px-3 py-1 my-2"
+ data-scope-types="[&quot;&quot;,&quot;owner&quot;,&quot;repository&quot;]"
+ data-mode=""
+ data-value="">
+ <div class="d-flex flex-items-start flex-justify-between">
+ <div>
+ <span class="text-bold">Tip:</span>
+ Type <kbd class="hx_kbd">#</kbd> to search issues
+ </div>
+ <div class="ml-2 flex-shrink-0">
+ Type <kbd class="hx_kbd">?</kbd> for help and tips
+ </div>
+ </div>
+ </command-palette-tip>
+ <command-palette-tip
+ class="color-fg-muted f6 px-3 py-1 my-2"
+ data-scope-types="[&quot;owner&quot;,&quot;repository&quot;]"
+ data-mode=""
+ data-value="">
+ <div class="d-flex flex-items-start flex-justify-between">
+ <div>
+ <span class="text-bold">Tip:</span>
+ Type <kbd class="hx_kbd">#</kbd> to search discussions
+ </div>
+ <div class="ml-2 flex-shrink-0">
+ Type <kbd class="hx_kbd">?</kbd> for help and tips
+ </div>
+ </div>
+ </command-palette-tip>
+ <command-palette-tip
+ class="color-fg-muted f6 px-3 py-1 my-2"
+ data-scope-types="[&quot;owner&quot;,&quot;repository&quot;]"
+ data-mode=""
+ data-value="">
+ <div class="d-flex flex-items-start flex-justify-between">
+ <div>
+ <span class="text-bold">Tip:</span>
+ Type <kbd class="hx_kbd">!</kbd> to search projects
+ </div>
+ <div class="ml-2 flex-shrink-0">
+ Type <kbd class="hx_kbd">?</kbd> for help and tips
+ </div>
+ </div>
+ </command-palette-tip>
+ <command-palette-tip
+ class="color-fg-muted f6 px-3 py-1 my-2"
+ data-scope-types="[&quot;owner&quot;]"
+ data-mode=""
+ data-value="">
+ <div class="d-flex flex-items-start flex-justify-between">
+ <div>
+ <span class="text-bold">Tip:</span>
+ Type <kbd class="hx_kbd">@</kbd> to search teams
+ </div>
+ <div class="ml-2 flex-shrink-0">
+ Type <kbd class="hx_kbd">?</kbd> for help and tips
+ </div>
+ </div>
+ </command-palette-tip>
+ <command-palette-tip
+ class="color-fg-muted f6 px-3 py-1 my-2"
+ data-scope-types="[&quot;&quot;]"
+ data-mode=""
+ data-value="">
+ <div class="d-flex flex-items-start flex-justify-between">
+ <div>
+ <span class="text-bold">Tip:</span>
+ Type <kbd class="hx_kbd">@</kbd> to search people and organizations
+ </div>
+ <div class="ml-2 flex-shrink-0">
+ Type <kbd class="hx_kbd">?</kbd> for help and tips
+ </div>
+ </div>
+ </command-palette-tip>
+ <command-palette-tip
+ class="color-fg-muted f6 px-3 py-1 my-2"
+ data-scope-types="[&quot;&quot;,&quot;owner&quot;,&quot;repository&quot;]"
+ data-mode=""
+ data-value="">
+ <div class="d-flex flex-items-start flex-justify-between">
+ <div>
+ <span class="text-bold">Tip:</span>
+ Type <kbd class="hx_kbd">&gt;</kbd> to activate command mode
+ </div>
+ <div class="ml-2 flex-shrink-0">
+ Type <kbd class="hx_kbd">?</kbd> for help and tips
+ </div>
+ </div>
+ </command-palette-tip>
+ <command-palette-tip
+ class="color-fg-muted f6 px-3 py-1 my-2"
+ data-scope-types="[&quot;&quot;,&quot;owner&quot;,&quot;repository&quot;]"
+ data-mode=""
+ data-value="">
+ <div class="d-flex flex-items-start flex-justify-between">
+ <div>
+ <span class="text-bold">Tip:</span>
+ Go to your accessibility settings to change your keyboard shortcuts
+ </div>
+ <div class="ml-2 flex-shrink-0">
+ Type <kbd class="hx_kbd">?</kbd> for help and tips
+ </div>
+ </div>
+ </command-palette-tip>
+ <command-palette-tip
+ class="color-fg-muted f6 px-3 py-1 my-2"
+ data-scope-types="[&quot;&quot;,&quot;owner&quot;,&quot;repository&quot;]"
+ data-mode="#"
+ data-value="">
+ <div class="d-flex flex-items-start flex-justify-between">
+ <div>
+ <span class="text-bold">Tip:</span>
+ Type author:@me to search your content
+ </div>
+ <div class="ml-2 flex-shrink-0">
+ Type <kbd class="hx_kbd">?</kbd> for help and tips
+ </div>
+ </div>
+ </command-palette-tip>
+ <command-palette-tip
+ class="color-fg-muted f6 px-3 py-1 my-2"
+ data-scope-types="[&quot;&quot;,&quot;owner&quot;,&quot;repository&quot;]"
+ data-mode="#"
+ data-value="">
+ <div class="d-flex flex-items-start flex-justify-between">
+ <div>
+ <span class="text-bold">Tip:</span>
+ Type is:pr to filter to pull requests
+ </div>
+ <div class="ml-2 flex-shrink-0">
+ Type <kbd class="hx_kbd">?</kbd> for help and tips
+ </div>
+ </div>
+ </command-palette-tip>
+ <command-palette-tip
+ class="color-fg-muted f6 px-3 py-1 my-2"
+ data-scope-types="[&quot;&quot;,&quot;owner&quot;,&quot;repository&quot;]"
+ data-mode="#"
+ data-value="">
+ <div class="d-flex flex-items-start flex-justify-between">
+ <div>
+ <span class="text-bold">Tip:</span>
+ Type is:issue to filter to issues
+ </div>
+ <div class="ml-2 flex-shrink-0">
+ Type <kbd class="hx_kbd">?</kbd> for help and tips
+ </div>
+ </div>
+ </command-palette-tip>
+ <command-palette-tip
+ class="color-fg-muted f6 px-3 py-1 my-2"
+ data-scope-types="[&quot;owner&quot;,&quot;repository&quot;]"
+ data-mode="#"
+ data-value="">
+ <div class="d-flex flex-items-start flex-justify-between">
+ <div>
+ <span class="text-bold">Tip:</span>
+ Type is:project to filter to projects
+ </div>
+ <div class="ml-2 flex-shrink-0">
+ Type <kbd class="hx_kbd">?</kbd> for help and tips
+ </div>
+ </div>
+ </command-palette-tip>
+ <command-palette-tip
+ class="color-fg-muted f6 px-3 py-1 my-2"
+ data-scope-types="[&quot;&quot;,&quot;owner&quot;,&quot;repository&quot;]"
+ data-mode="#"
+ data-value="">
+ <div class="d-flex flex-items-start flex-justify-between">
+ <div>
+ <span class="text-bold">Tip:</span>
+ Type is:open to filter to open content
+ </div>
+ <div class="ml-2 flex-shrink-0">
+ Type <kbd class="hx_kbd">?</kbd> for help and tips
+ </div>
+ </div>
+ </command-palette-tip>
+ <command-palette-tip class="mx-3 my-2 flash flash-error d-flex flex-items-center" data-scope-types="*" data-on-error>
+ <div>
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
+ <path fill-rule="evenodd" d="M8.22 1.754a.25.25 0 00-.44 0L1.698 13.132a.25.25 0 00.22.368h12.164a.25.25 0 00.22-.368L8.22 1.754zm-1.763-.707c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0114.082 15H1.918a1.75 1.75 0 01-1.543-2.575L6.457 1.047zM9 11a1 1 0 11-2 0 1 1 0 012 0zm-.25-5.25a.75.75 0 00-1.5 0v2.5a.75.75 0 001.5 0v-2.5z"></path>
+</svg>
+ </div>
+ <div class="px-2">
+ We’ve encountered an error and some results aren't available at this time. Type a new search or try again later.
+ </div>
+ </command-palette-tip>
+ <command-palette-tip class="h4 color-fg-default pl-3 pb-2 pt-3" data-on-empty data-scope-types="*" data-match-mode="[^?]|^$">
+ No results matched your search
+ </command-palette-tip>
+
+ <div hidden>
+
+ <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="arrow-right-color-fg-muted">
+ <svg height="16" class="octicon octicon-arrow-right color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M8.22 2.97a.75.75 0 011.06 0l4.25 4.25a.75.75 0 010 1.06l-4.25 4.25a.75.75 0 01-1.06-1.06l2.97-2.97H3.75a.75.75 0 010-1.5h7.44L8.22 4.03a.75.75 0 010-1.06z"></path></svg>
+ </div>
+ <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="arrow-right-color-fg-default">
+ <svg height="16" class="octicon octicon-arrow-right color-fg-default" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M8.22 2.97a.75.75 0 011.06 0l4.25 4.25a.75.75 0 010 1.06l-4.25 4.25a.75.75 0 01-1.06-1.06l2.97-2.97H3.75a.75.75 0 010-1.5h7.44L8.22 4.03a.75.75 0 010-1.06z"></path></svg>
+ </div>
+ <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="codespaces-color-fg-muted">
+ <svg height="16" class="octicon octicon-codespaces color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M2 1.75C2 .784 2.784 0 3.75 0h8.5C13.216 0 14 .784 14 1.75v5a1.75 1.75 0 01-1.75 1.75h-8.5A1.75 1.75 0 012 6.75v-5zm1.75-.25a.25.25 0 00-.25.25v5c0 .138.112.25.25.25h8.5a.25.25 0 00.25-.25v-5a.25.25 0 00-.25-.25h-8.5zM0 11.25c0-.966.784-1.75 1.75-1.75h12.5c.966 0 1.75.784 1.75 1.75v3A1.75 1.75 0 0114.25 16H1.75A1.75 1.75 0 010 14.25v-3zM1.75 11a.25.25 0 00-.25.25v3c0 .138.112.25.25.25h12.5a.25.25 0 00.25-.25v-3a.25.25 0 00-.25-.25H1.75z"></path><path fill-rule="evenodd" d="M3 12.75a.75.75 0 01.75-.75h.5a.75.75 0 010 1.5h-.5a.75.75 0 01-.75-.75zm4 0a.75.75 0 01.75-.75h4.5a.75.75 0 010 1.5h-4.5a.75.75 0 01-.75-.75z"></path></svg>
+ </div>
+ <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="copy-color-fg-muted">
+ <svg height="16" class="octicon octicon-copy color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 010 1.5h-1.5a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-1.5a.75.75 0 011.5 0v1.5A1.75 1.75 0 019.25 16h-7.5A1.75 1.75 0 010 14.25v-7.5z"></path><path fill-rule="evenodd" d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0114.25 11h-7.5A1.75 1.75 0 015 9.25v-7.5zm1.75-.25a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-7.5a.25.25 0 00-.25-.25h-7.5z"></path></svg>
+ </div>
+ <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="dash-color-fg-muted">
+ <svg height="16" class="octicon octicon-dash color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M2 7.75A.75.75 0 012.75 7h10a.75.75 0 010 1.5h-10A.75.75 0 012 7.75z"></path></svg>
+ </div>
+ <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="file-color-fg-muted">
+ <svg height="16" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M3.75 1.5a.25.25 0 00-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 00.25-.25V6h-2.75A1.75 1.75 0 019 4.25V1.5H3.75zm6.75.062V4.25c0 .138.112.25.25.25h2.688a.252.252 0 00-.011-.013l-2.914-2.914a.272.272 0 00-.013-.011zM2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0113.25 16h-9.5A1.75 1.75 0 012 14.25V1.75z"></path></svg>
+ </div>
+ <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="gear-color-fg-muted">
+ <svg height="16" class="octicon octicon-gear color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M7.429 1.525a6.593 6.593 0 011.142 0c.036.003.108.036.137.146l.289 1.105c.147.56.55.967.997 1.189.174.086.341.183.501.29.417.278.97.423 1.53.27l1.102-.303c.11-.03.175.016.195.046.219.31.41.641.573.989.014.031.022.11-.059.19l-.815.806c-.411.406-.562.957-.53 1.456a4.588 4.588 0 010 .582c-.032.499.119 1.05.53 1.456l.815.806c.08.08.073.159.059.19a6.494 6.494 0 01-.573.99c-.02.029-.086.074-.195.045l-1.103-.303c-.559-.153-1.112-.008-1.529.27-.16.107-.327.204-.5.29-.449.222-.851.628-.998 1.189l-.289 1.105c-.029.11-.101.143-.137.146a6.613 6.613 0 01-1.142 0c-.036-.003-.108-.037-.137-.146l-.289-1.105c-.147-.56-.55-.967-.997-1.189a4.502 4.502 0 01-.501-.29c-.417-.278-.97-.423-1.53-.27l-1.102.303c-.11.03-.175-.016-.195-.046a6.492 6.492 0 01-.573-.989c-.014-.031-.022-.11.059-.19l.815-.806c.411-.406.562-.957.53-1.456a4.587 4.587 0 010-.582c.032-.499-.119-1.05-.53-1.456l-.815-.806c-.08-.08-.073-.159-.059-.19a6.44 6.44 0 01.573-.99c.02-.029.086-.075.195-.045l1.103.303c.559.153 1.112.008 1.529-.27.16-.107.327-.204.5-.29.449-.222.851-.628.998-1.189l.289-1.105c.029-.11.101-.143.137-.146zM8 0c-.236 0-.47.01-.701.03-.743.065-1.29.615-1.458 1.261l-.29 1.106c-.017.066-.078.158-.211.224a5.994 5.994 0 00-.668.386c-.123.082-.233.09-.3.071L3.27 2.776c-.644-.177-1.392.02-1.82.63a7.977 7.977 0 00-.704 1.217c-.315.675-.111 1.422.363 1.891l.815.806c.05.048.098.147.088.294a6.084 6.084 0 000 .772c.01.147-.038.246-.088.294l-.815.806c-.474.469-.678 1.216-.363 1.891.2.428.436.835.704 1.218.428.609 1.176.806 1.82.63l1.103-.303c.066-.019.176-.011.299.071.213.143.436.272.668.386.133.066.194.158.212.224l.289 1.106c.169.646.715 1.196 1.458 1.26a8.094 8.094 0 001.402 0c.743-.064 1.29-.614 1.458-1.26l.29-1.106c.017-.066.078-.158.211-.224a5.98 5.98 0 00.668-.386c.123-.082.233-.09.3-.071l1.102.302c.644.177 1.392-.02 1.82-.63.268-.382.505-.789.704-1.217.315-.675.111-1.422-.364-1.891l-.814-.806c-.05-.048-.098-.147-.088-.294a6.1 6.1 0 000-.772c-.01-.147.039-.246.088-.294l.814-.806c.475-.469.679-1.216.364-1.891a7.992 7.992 0 00-.704-1.218c-.428-.609-1.176-.806-1.82-.63l-1.103.303c-.066.019-.176.011-.299-.071a5.991 5.991 0 00-.668-.386c-.133-.066-.194-.158-.212-.224L10.16 1.29C9.99.645 9.444.095 8.701.031A8.094 8.094 0 008 0zm1.5 8a1.5 1.5 0 11-3 0 1.5 1.5 0 013 0zM11 8a3 3 0 11-6 0 3 3 0 016 0z"></path></svg>
+ </div>
+ <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="lock-color-fg-muted">
+ <svg height="16" class="octicon octicon-lock color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M4 4v2h-.25A1.75 1.75 0 002 7.75v5.5c0 .966.784 1.75 1.75 1.75h8.5A1.75 1.75 0 0014 13.25v-5.5A1.75 1.75 0 0012.25 6H12V4a4 4 0 10-8 0zm6.5 2V4a2.5 2.5 0 00-5 0v2h5zM12 7.5h.25a.25.25 0 01.25.25v5.5a.25.25 0 01-.25.25h-8.5a.25.25 0 01-.25-.25v-5.5a.25.25 0 01.25-.25H12z"></path></svg>
+ </div>
+ <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="moon-color-fg-muted">
+ <svg height="16" class="octicon octicon-moon color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M9.598 1.591a.75.75 0 01.785-.175 7 7 0 11-8.967 8.967.75.75 0 01.961-.96 5.5 5.5 0 007.046-7.046.75.75 0 01.175-.786zm1.616 1.945a7 7 0 01-7.678 7.678 5.5 5.5 0 107.678-7.678z"></path></svg>
+ </div>
+ <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="person-color-fg-muted">
+ <svg height="16" class="octicon octicon-person color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M10.5 5a2.5 2.5 0 11-5 0 2.5 2.5 0 015 0zm.061 3.073a4 4 0 10-5.123 0 6.004 6.004 0 00-3.431 5.142.75.75 0 001.498.07 4.5 4.5 0 018.99 0 .75.75 0 101.498-.07 6.005 6.005 0 00-3.432-5.142z"></path></svg>
+ </div>
+ <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="pencil-color-fg-muted">
+ <svg height="16" class="octicon octicon-pencil color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M11.013 1.427a1.75 1.75 0 012.474 0l1.086 1.086a1.75 1.75 0 010 2.474l-8.61 8.61c-.21.21-.47.364-.756.445l-3.251.93a.75.75 0 01-.927-.928l.929-3.25a1.75 1.75 0 01.445-.758l8.61-8.61zm1.414 1.06a.25.25 0 00-.354 0L10.811 3.75l1.439 1.44 1.263-1.263a.25.25 0 000-.354l-1.086-1.086zM11.189 6.25L9.75 4.81l-6.286 6.287a.25.25 0 00-.064.108l-.558 1.953 1.953-.558a.249.249 0 00.108-.064l6.286-6.286z"></path></svg>
+ </div>
+ <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="issue-opened-open">
+ <svg height="16" class="octicon octicon-issue-opened open" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path d="M8 9.5a1.5 1.5 0 100-3 1.5 1.5 0 000 3z"></path><path fill-rule="evenodd" d="M8 0a8 8 0 100 16A8 8 0 008 0zM1.5 8a6.5 6.5 0 1113 0 6.5 6.5 0 01-13 0z"></path></svg>
+ </div>
+ <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="git-pull-request-draft-color-fg-muted">
+ <svg height="16" class="octicon octicon-git-pull-request-draft color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M2.5 3.25a.75.75 0 111.5 0 .75.75 0 01-1.5 0zM3.25 1a2.25 2.25 0 00-.75 4.372v5.256a2.251 2.251 0 101.5 0V5.372A2.25 2.25 0 003.25 1zm0 11a.75.75 0 100 1.5.75.75 0 000-1.5zm9.5 3a2.25 2.25 0 100-4.5 2.25 2.25 0 000 4.5zm0-3a.75.75 0 100 1.5.75.75 0 000-1.5z"></path><path d="M14 7.5a1.25 1.25 0 11-2.5 0 1.25 1.25 0 012.5 0zm0-4.25a1.25 1.25 0 11-2.5 0 1.25 1.25 0 012.5 0z"></path></svg>
+ </div>
+ <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="search-color-fg-muted">
+ <svg height="16" class="octicon octicon-search color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M11.5 7a4.499 4.499 0 11-8.998 0A4.499 4.499 0 0111.5 7zm-.82 4.74a6 6 0 111.06-1.06l3.04 3.04a.75.75 0 11-1.06 1.06l-3.04-3.04z"></path></svg>
+ </div>
+ <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="sun-color-fg-muted">
+ <svg height="16" class="octicon octicon-sun color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M8 10.5a2.5 2.5 0 100-5 2.5 2.5 0 000 5zM8 12a4 4 0 100-8 4 4 0 000 8zM8 0a.75.75 0 01.75.75v1.5a.75.75 0 01-1.5 0V.75A.75.75 0 018 0zm0 13a.75.75 0 01.75.75v1.5a.75.75 0 01-1.5 0v-1.5A.75.75 0 018 13zM2.343 2.343a.75.75 0 011.061 0l1.06 1.061a.75.75 0 01-1.06 1.06l-1.06-1.06a.75.75 0 010-1.06zm9.193 9.193a.75.75 0 011.06 0l1.061 1.06a.75.75 0 01-1.06 1.061l-1.061-1.06a.75.75 0 010-1.061zM16 8a.75.75 0 01-.75.75h-1.5a.75.75 0 010-1.5h1.5A.75.75 0 0116 8zM3 8a.75.75 0 01-.75.75H.75a.75.75 0 010-1.5h1.5A.75.75 0 013 8zm10.657-5.657a.75.75 0 010 1.061l-1.061 1.06a.75.75 0 11-1.06-1.06l1.06-1.06a.75.75 0 011.06 0zm-9.193 9.193a.75.75 0 010 1.06l-1.06 1.061a.75.75 0 11-1.061-1.06l1.06-1.061a.75.75 0 011.061 0z"></path></svg>
+ </div>
+ <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="sync-color-fg-muted">
+ <svg height="16" class="octicon octicon-sync color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M8 2.5a5.487 5.487 0 00-4.131 1.869l1.204 1.204A.25.25 0 014.896 6H1.25A.25.25 0 011 5.75V2.104a.25.25 0 01.427-.177l1.38 1.38A7.001 7.001 0 0114.95 7.16a.75.75 0 11-1.49.178A5.501 5.501 0 008 2.5zM1.705 8.005a.75.75 0 01.834.656 5.501 5.501 0 009.592 2.97l-1.204-1.204a.25.25 0 01.177-.427h3.646a.25.25 0 01.25.25v3.646a.25.25 0 01-.427.177l-1.38-1.38A7.001 7.001 0 011.05 8.84a.75.75 0 01.656-.834z"></path></svg>
+ </div>
+ <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="trash-color-fg-muted">
+ <svg height="16" class="octicon octicon-trash color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M6.5 1.75a.25.25 0 01.25-.25h2.5a.25.25 0 01.25.25V3h-3V1.75zm4.5 0V3h2.25a.75.75 0 010 1.5H2.75a.75.75 0 010-1.5H5V1.75C5 .784 5.784 0 6.75 0h2.5C10.216 0 11 .784 11 1.75zM4.496 6.675a.75.75 0 10-1.492.15l.66 6.6A1.75 1.75 0 005.405 15h5.19c.9 0 1.652-.681 1.741-1.576l.66-6.6a.75.75 0 00-1.492-.149l-.66 6.6a.25.25 0 01-.249.225h-5.19a.25.25 0 01-.249-.225l-.66-6.6z"></path></svg>
+ </div>
+ <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="key-color-fg-muted">
+ <svg height="16" class="octicon octicon-key color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M6.5 5.5a4 4 0 112.731 3.795.75.75 0 00-.768.18L7.44 10.5H6.25a.75.75 0 00-.75.75v1.19l-.06.06H4.25a.75.75 0 00-.75.75v1.19l-.06.06H1.75a.25.25 0 01-.25-.25v-1.69l5.024-5.023a.75.75 0 00.181-.768A3.995 3.995 0 016.5 5.5zm4-5.5a5.5 5.5 0 00-5.348 6.788L.22 11.72a.75.75 0 00-.22.53v2C0 15.216.784 16 1.75 16h2a.75.75 0 00.53-.22l.5-.5a.75.75 0 00.22-.53V14h.75a.75.75 0 00.53-.22l.5-.5a.75.75 0 00.22-.53V12h.75a.75.75 0 00.53-.22l.932-.932A5.5 5.5 0 1010.5 0zm.5 6a1 1 0 100-2 1 1 0 000 2z"></path></svg>
+ </div>
+ <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="comment-discussion-color-fg-muted">
+ <svg height="16" class="octicon octicon-comment-discussion color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M1.5 2.75a.25.25 0 01.25-.25h8.5a.25.25 0 01.25.25v5.5a.25.25 0 01-.25.25h-3.5a.75.75 0 00-.53.22L3.5 11.44V9.25a.75.75 0 00-.75-.75h-1a.25.25 0 01-.25-.25v-5.5zM1.75 1A1.75 1.75 0 000 2.75v5.5C0 9.216.784 10 1.75 10H2v1.543a1.457 1.457 0 002.487 1.03L7.061 10h3.189A1.75 1.75 0 0012 8.25v-5.5A1.75 1.75 0 0010.25 1h-8.5zM14.5 4.75a.25.25 0 00-.25-.25h-.5a.75.75 0 110-1.5h.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0114.25 12H14v1.543a1.457 1.457 0 01-2.487 1.03L9.22 12.28a.75.75 0 111.06-1.06l2.22 2.22v-2.19a.75.75 0 01.75-.75h1a.25.25 0 00.25-.25v-5.5z"></path></svg>
+ </div>
+ <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="bell-color-fg-muted">
+ <svg height="16" class="octicon octicon-bell color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path d="M8 16a2 2 0 001.985-1.75c.017-.137-.097-.25-.235-.25h-3.5c-.138 0-.252.113-.235.25A2 2 0 008 16z"></path><path fill-rule="evenodd" d="M8 1.5A3.5 3.5 0 004.5 5v2.947c0 .346-.102.683-.294.97l-1.703 2.556a.018.018 0 00-.003.01l.001.006c0 .002.002.004.004.006a.017.017 0 00.006.004l.007.001h10.964l.007-.001a.016.016 0 00.006-.004.016.016 0 00.004-.006l.001-.007a.017.017 0 00-.003-.01l-1.703-2.554a1.75 1.75 0 01-.294-.97V5A3.5 3.5 0 008 1.5zM3 5a5 5 0 0110 0v2.947c0 .05.015.098.042.139l1.703 2.555A1.518 1.518 0 0113.482 13H2.518a1.518 1.518 0 01-1.263-2.36l1.703-2.554A.25.25 0 003 7.947V5z"></path></svg>
+ </div>
+ <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="bell-slash-color-fg-muted">
+ <svg height="16" class="octicon octicon-bell-slash color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M8 1.5c-.997 0-1.895.416-2.534 1.086A.75.75 0 014.38 1.55 5 5 0 0113 5v2.373a.75.75 0 01-1.5 0V5A3.5 3.5 0 008 1.5zM4.182 4.31L1.19 2.143a.75.75 0 10-.88 1.214L3 5.305v2.642a.25.25 0 01-.042.139L1.255 10.64A1.518 1.518 0 002.518 13h11.108l1.184.857a.75.75 0 10.88-1.214l-1.375-.996a1.196 1.196 0 00-.013-.01L4.198 4.321a.733.733 0 00-.016-.011zm7.373 7.19L4.5 6.391v1.556c0 .346-.102.683-.294.97l-1.703 2.556a.018.018 0 00-.003.01.015.015 0 00.005.012.017.017 0 00.006.004l.007.001h9.037zM8 16a2 2 0 001.985-1.75c.017-.137-.097-.25-.235-.25h-3.5c-.138 0-.252.113-.235.25A2 2 0 008 16z"></path></svg>
+ </div>
+ <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="paintbrush-color-fg-muted">
+ <svg height="16" class="octicon octicon-paintbrush color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M11.134 1.535C9.722 2.562 8.16 4.057 6.889 5.312 5.8 6.387 5.041 7.401 4.575 8.294a3.745 3.745 0 00-3.227 1.054c-.43.431-.69 1.066-.86 1.657a11.982 11.982 0 00-.358 1.914A21.263 21.263 0 000 15.203v.054l.75-.007-.007.75h.054a14.404 14.404 0 00.654-.012 21.243 21.243 0 001.63-.118c.62-.07 1.3-.18 1.914-.357.592-.17 1.226-.43 1.657-.861a3.745 3.745 0 001.055-3.217c.908-.461 1.942-1.216 3.04-2.3 1.279-1.262 2.764-2.825 3.775-4.249.501-.706.923-1.428 1.125-2.096.2-.659.235-1.469-.368-2.07-.606-.607-1.42-.55-2.069-.34-.66.213-1.376.646-2.076 1.155zm-3.95 8.48a3.76 3.76 0 00-1.19-1.192 9.758 9.758 0 011.161-1.607l1.658 1.658a9.853 9.853 0 01-1.63 1.142zM.742 16l.007-.75-.75.008A.75.75 0 00.743 16zM12.016 2.749c-1.224.89-2.605 2.189-3.822 3.384l1.718 1.718c1.21-1.205 2.51-2.597 3.387-3.833.47-.662.78-1.227.912-1.662.134-.444.032-.551.009-.575h-.001V1.78c-.014-.014-.112-.113-.548.027-.432.14-.995.462-1.655.942zM1.62 13.089a19.56 19.56 0 00-.104 1.395 19.55 19.55 0 001.396-.104 10.528 10.528 0 001.668-.309c.526-.151.856-.325 1.011-.48a2.25 2.25 0 00-3.182-3.182c-.155.155-.329.485-.48 1.01a10.515 10.515 0 00-.309 1.67z"></path></svg>
+ </div>
+
+ <command-palette-item-group
+ data-group-id="top"
+ data-group-title="Top result"
+ data-group-hint=""
+ data-group-limits="{}"
+ data-default-priority="0"
+ >
+ </command-palette-item-group>
+ <command-palette-item-group
+ data-group-id="commands"
+ data-group-title="Commands"
+ data-group-hint="Type &gt; to filter"
+ data-group-limits="{&quot;static_items_page&quot;:50,&quot;issue&quot;:50,&quot;pull_request&quot;:50,&quot;discussion&quot;:50}"
+ data-default-priority="1"
+ >
+ </command-palette-item-group>
+ <command-palette-item-group
+ data-group-id="global_commands"
+ data-group-title="Global Commands"
+ data-group-hint="Type &gt; to filter"
+ data-group-limits="{&quot;issue&quot;:0,&quot;pull_request&quot;:0,&quot;discussion&quot;:0}"
+ data-default-priority="2"
+ >
+ </command-palette-item-group>
+ <command-palette-item-group
+ data-group-id="this_page"
+ data-group-title="This Page"
+ data-group-hint=""
+ data-group-limits="{}"
+ data-default-priority="3"
+ >
+ </command-palette-item-group>
+ <command-palette-item-group
+ data-group-id="files"
+ data-group-title="Files"
+ data-group-hint=""
+ data-group-limits="{}"
+ data-default-priority="4"
+ >
+ </command-palette-item-group>
+ <command-palette-item-group
+ data-group-id="default"
+ data-group-title="Default"
+ data-group-hint=""
+ data-group-limits="{&quot;static_items_page&quot;:50}"
+ data-default-priority="5"
+ >
+ </command-palette-item-group>
+ <command-palette-item-group
+ data-group-id="pages"
+ data-group-title="Pages"
+ data-group-hint=""
+ data-group-limits="{&quot;repository&quot;:10}"
+ data-default-priority="6"
+ >
+ </command-palette-item-group>
+ <command-palette-item-group
+ data-group-id="access_policies"
+ data-group-title="Access Policies"
+ data-group-hint=""
+ data-group-limits="{}"
+ data-default-priority="7"
+ >
+ </command-palette-item-group>
+ <command-palette-item-group
+ data-group-id="organizations"
+ data-group-title="Organizations"
+ data-group-hint=""
+ data-group-limits="{}"
+ data-default-priority="8"
+ >
+ </command-palette-item-group>
+ <command-palette-item-group
+ data-group-id="repositories"
+ data-group-title="Repositories"
+ data-group-hint=""
+ data-group-limits="{}"
+ data-default-priority="9"
+ >
+ </command-palette-item-group>
+ <command-palette-item-group
+ data-group-id="references"
+ data-group-title="Issues, pull requests, and discussions"
+ data-group-hint="Type # to filter"
+ data-group-limits="{}"
+ data-default-priority="10"
+ >
+ </command-palette-item-group>
+ <command-palette-item-group
+ data-group-id="teams"
+ data-group-title="Teams"
+ data-group-hint=""
+ data-group-limits="{}"
+ data-default-priority="11"
+ >
+ </command-palette-item-group>
+ <command-palette-item-group
+ data-group-id="users"
+ data-group-title="Users"
+ data-group-hint=""
+ data-group-limits="{}"
+ data-default-priority="12"
+ >
+ </command-palette-item-group>
+ <command-palette-item-group
+ data-group-id="projects"
+ data-group-title="Projects"
+ data-group-hint=""
+ data-group-limits="{}"
+ data-default-priority="13"
+ >
+ </command-palette-item-group>
+ <command-palette-item-group
+ data-group-id="footer"
+ data-group-title="Footer"
+ data-group-hint=""
+ data-group-limits="{}"
+ data-default-priority="14"
+ >
+ </command-palette-item-group>
+ <command-palette-item-group
+ data-group-id="modes_help"
+ data-group-title="Modes"
+ data-group-hint=""
+ data-group-limits="{}"
+ data-default-priority="15"
+ >
+ </command-palette-item-group>
+ <command-palette-item-group
+ data-group-id="filters_help"
+ data-group-title="Use filters in issues, pull requests, discussions, and projects"
+ data-group-hint=""
+ data-group-limits="{}"
+ data-default-priority="16"
+ >
+ </command-palette-item-group>
+
+ <command-palette-page
+ data-page-title="rlkamalapurkar"
+ data-scope-id="MDQ6VXNlcjMwMjY0NzIw"
+ data-scope-type="owner"
+ data-targets="command-palette-page-stack.defaultPages"
+ hidden
+ >
+ </command-palette-page>
+ <command-palette-page
+ data-page-title="bodeplot"
+ data-scope-id="R_kgDOGPTXYA"
+ data-scope-type="repository"
+ data-targets="command-palette-page-stack.defaultPages"
+ hidden
+ >
+ </command-palette-page>
+ </div>
+
+ <command-palette-page data-is-root>
+ </command-palette-page>
+ <command-palette-page
+ data-page-title="rlkamalapurkar"
+ data-scope-id="MDQ6VXNlcjMwMjY0NzIw"
+ data-scope-type="owner"
+ >
+ </command-palette-page>
+ <command-palette-page
+ data-page-title="bodeplot"
+ data-scope-id="R_kgDOGPTXYA"
+ data-scope-type="repository"
+ >
+ </command-palette-page>
+ </command-palette-page-stack>
+
+ <server-defined-provider data-type="search-links" data-targets="command-palette.serverDefinedProviderElements"></server-defined-provider>
+ <server-defined-provider data-type="help" data-targets="command-palette.serverDefinedProviderElements">
+ <command-palette-help
+ data-group="modes_help"
+ data-prefix="#"
+ data-scope-types="[&quot;&quot;]"
+ >
+ <span data-target="command-palette-help.titleElement">Search for <strong>issues</strong> and <strong>pull requests</strong></span>
+ <span data-target="command-palette-help.hintElement">
+ <kbd class="hx_kbd">#</kbd>
+ </span>
+ </command-palette-help>
+ <command-palette-help
+ data-group="modes_help"
+ data-prefix="#"
+ data-scope-types="[&quot;owner&quot;,&quot;repository&quot;]"
+ >
+ <span data-target="command-palette-help.titleElement">Search for <strong>issues, pull requests, discussions,</strong> and <strong>projects</strong></span>
+ <span data-target="command-palette-help.hintElement">
+ <kbd class="hx_kbd">#</kbd>
+ </span>
+ </command-palette-help>
+ <command-palette-help
+ data-group="modes_help"
+ data-prefix="@"
+ data-scope-types="[&quot;&quot;]"
+ >
+ <span data-target="command-palette-help.titleElement">Search for <strong>organizations, repositories,</strong> and <strong>users</strong></span>
+ <span data-target="command-palette-help.hintElement">
+ <kbd class="hx_kbd">@</kbd>
+ </span>
+ </command-palette-help>
+ <command-palette-help
+ data-group="modes_help"
+ data-prefix="!"
+ data-scope-types="[&quot;owner&quot;,&quot;repository&quot;]"
+ >
+ <span data-target="command-palette-help.titleElement">Search for <strong>projects</strong></span>
+ <span data-target="command-palette-help.hintElement">
+ <kbd class="hx_kbd">!</kbd>
+ </span>
+ </command-palette-help>
+ <command-palette-help
+ data-group="modes_help"
+ data-prefix="/"
+ data-scope-types="[&quot;repository&quot;]"
+ >
+ <span data-target="command-palette-help.titleElement">Search for <strong>files</strong></span>
+ <span data-target="command-palette-help.hintElement">
+ <kbd class="hx_kbd">/</kbd>
+ </span>
+ </command-palette-help>
+ <command-palette-help
+ data-group="modes_help"
+ data-prefix="&gt;"
+ >
+ <span data-target="command-palette-help.titleElement">Activate <strong>command mode</strong></span>
+ <span data-target="command-palette-help.hintElement">
+ <kbd class="hx_kbd">&gt;</kbd>
+ </span>
+ </command-palette-help>
+ <command-palette-help
+ data-group="filters_help"
+ data-prefix="# author:@me"
+ >
+ <span data-target="command-palette-help.titleElement">Search your issues, pull requests, and discussions</span>
+ <span data-target="command-palette-help.hintElement">
+ <kbd class="hx_kbd"># author:@me</kbd>
+ </span>
+ </command-palette-help>
+ <command-palette-help
+ data-group="filters_help"
+ data-prefix="# author:@me"
+ >
+ <span data-target="command-palette-help.titleElement">Search your issues, pull requests, and discussions</span>
+ <span data-target="command-palette-help.hintElement">
+ <kbd class="hx_kbd"># author:@me</kbd>
+ </span>
+ </command-palette-help>
+ <command-palette-help
+ data-group="filters_help"
+ data-prefix="# is:pr"
+ >
+ <span data-target="command-palette-help.titleElement">Filter to pull requests</span>
+ <span data-target="command-palette-help.hintElement">
+ <kbd class="hx_kbd"># is:pr</kbd>
+ </span>
+ </command-palette-help>
+ <command-palette-help
+ data-group="filters_help"
+ data-prefix="# is:issue"
+ >
+ <span data-target="command-palette-help.titleElement">Filter to issues</span>
+ <span data-target="command-palette-help.hintElement">
+ <kbd class="hx_kbd"># is:issue</kbd>
+ </span>
+ </command-palette-help>
+ <command-palette-help
+ data-group="filters_help"
+ data-prefix="# is:discussion"
+ data-scope-types="[&quot;owner&quot;,&quot;repository&quot;]"
+ >
+ <span data-target="command-palette-help.titleElement">Filter to discussions</span>
+ <span data-target="command-palette-help.hintElement">
+ <kbd class="hx_kbd"># is:discussion</kbd>
+ </span>
+ </command-palette-help>
+ <command-palette-help
+ data-group="filters_help"
+ data-prefix="# is:project"
+ data-scope-types="[&quot;owner&quot;,&quot;repository&quot;]"
+ >
+ <span data-target="command-palette-help.titleElement">Filter to projects</span>
+ <span data-target="command-palette-help.hintElement">
+ <kbd class="hx_kbd"># is:project</kbd>
+ </span>
+ </command-palette-help>
+ <command-palette-help
+ data-group="filters_help"
+ data-prefix="# is:open"
+ >
+ <span data-target="command-palette-help.titleElement">Filter to open issues, pull requests, and discussions</span>
+ <span data-target="command-palette-help.hintElement">
+ <kbd class="hx_kbd"># is:open</kbd>
+ </span>
+ </command-palette-help>
+ </server-defined-provider>
+
+ <server-defined-provider
+ data-type="commands"
+ data-fetch-debounce="0"
+ data-src="/command_palette/commands"
+ data-supported-modes="[]"
+ data-supports-commands
+
+ data-targets="command-palette.serverDefinedProviderElements"
+ ></server-defined-provider>
+ <server-defined-provider
+ data-type="prefetched"
+ data-fetch-debounce="0"
+ data-src="/command_palette/jump_to_page_navigation"
+ data-supported-modes="[&quot;&quot;]"
+ data-supported-scope-types="[&quot;&quot;,&quot;owner&quot;,&quot;repository&quot;]"
+
+ data-targets="command-palette.serverDefinedProviderElements"
+ ></server-defined-provider>
+ <server-defined-provider
+ data-type="remote"
+ data-fetch-debounce="200"
+ data-src="/command_palette/issues"
+ data-supported-modes="[&quot;#&quot;,&quot;#&quot;]"
+ data-supported-scope-types="[&quot;owner&quot;,&quot;repository&quot;,&quot;&quot;]"
+
+ data-targets="command-palette.serverDefinedProviderElements"
+ ></server-defined-provider>
+ <server-defined-provider
+ data-type="remote"
+ data-fetch-debounce="200"
+ data-src="/command_palette/jump_to"
+ data-supported-modes="[&quot;@&quot;,&quot;@&quot;]"
+ data-supported-scope-types="[&quot;&quot;,&quot;owner&quot;]"
+
+ data-targets="command-palette.serverDefinedProviderElements"
+ ></server-defined-provider>
+ <server-defined-provider
+ data-type="remote"
+ data-fetch-debounce="200"
+ data-src="/command_palette/jump_to_members_only"
+ data-supported-modes="[&quot;@&quot;,&quot;@&quot;,&quot;&quot;,&quot;&quot;]"
+ data-supported-scope-types="[&quot;&quot;,&quot;owner&quot;]"
+
+ data-targets="command-palette.serverDefinedProviderElements"
+ ></server-defined-provider>
+ <server-defined-provider
+ data-type="prefetched"
+ data-fetch-debounce="0"
+ data-src="/command_palette/jump_to_members_only_prefetched"
+ data-supported-modes="[&quot;@&quot;,&quot;@&quot;,&quot;&quot;,&quot;&quot;]"
+ data-supported-scope-types="[&quot;&quot;,&quot;owner&quot;]"
+
+ data-targets="command-palette.serverDefinedProviderElements"
+ ></server-defined-provider>
+ <server-defined-provider
+ data-type="files"
+ data-fetch-debounce="0"
+ data-src="/command_palette/files"
+ data-supported-modes="[&quot;/&quot;]"
+ data-supported-scope-types="[&quot;repository&quot;]"
+
+ data-targets="command-palette.serverDefinedProviderElements"
+ ></server-defined-provider>
+ <server-defined-provider
+ data-type="remote"
+ data-fetch-debounce="200"
+ data-src="/command_palette/discussions"
+ data-supported-modes="[&quot;#&quot;]"
+ data-supported-scope-types="[&quot;owner&quot;,&quot;repository&quot;]"
+
+ data-targets="command-palette.serverDefinedProviderElements"
+ ></server-defined-provider>
+ <server-defined-provider
+ data-type="remote"
+ data-fetch-debounce="200"
+ data-src="/command_palette/projects"
+ data-supported-modes="[&quot;#&quot;,&quot;!&quot;]"
+ data-supported-scope-types="[&quot;owner&quot;,&quot;repository&quot;]"
+
+ data-targets="command-palette.serverDefinedProviderElements"
+ ></server-defined-provider>
+ <server-defined-provider
+ data-type="prefetched"
+ data-fetch-debounce="0"
+ data-src="/command_palette/recent_issues"
+ data-supported-modes="[&quot;#&quot;,&quot;#&quot;]"
+ data-supported-scope-types="[&quot;owner&quot;,&quot;repository&quot;,&quot;&quot;]"
+
+ data-targets="command-palette.serverDefinedProviderElements"
+ ></server-defined-provider>
+ <server-defined-provider
+ data-type="remote"
+ data-fetch-debounce="200"
+ data-src="/command_palette/teams"
+ data-supported-modes="[&quot;@&quot;,&quot;&quot;]"
+ data-supported-scope-types="[&quot;owner&quot;]"
+
+ data-targets="command-palette.serverDefinedProviderElements"
+ ></server-defined-provider>
+ <server-defined-provider
+ data-type="remote"
+ data-fetch-debounce="200"
+ data-src="/command_palette/name_with_owner_repository"
+ data-supported-modes="[&quot;@&quot;,&quot;@&quot;,&quot;&quot;,&quot;&quot;]"
+ data-supported-scope-types="[&quot;&quot;,&quot;owner&quot;]"
+
+ data-targets="command-palette.serverDefinedProviderElements"
+ ></server-defined-provider>
+ </command-palette>
+ </details-dialog>
+</details>
+
+<div class="position-fixed bottom-0 left-0 ml-5 mb-5 js-command-palette-toasts" style="z-index: 1000">
+ <div hidden class="Toast Toast--loading">
+ <span class="Toast-icon">
+ <svg class="Toast--spinner" viewBox="0 0 32 32" width="18" height="18" aria-hidden="true">
+ <path
+ fill="#959da5"
+ d="M16 0 A16 16 0 0 0 16 32 A16 16 0 0 0 16 0 M16 4 A12 12 0 0 1 16 28 A12 12 0 0 1 16 4"
+ />
+ <path fill="#ffffff" d="M16 0 A16 16 0 0 1 32 16 L28 16 A12 12 0 0 0 16 4z"></path>
+ </svg>
+ </span>
+ <span class="Toast-content"></span>
+ </div>
+
+ <div hidden class="anim-fade-in fast Toast Toast--error">
+ <span class="Toast-icon">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-stop">
+ <path fill-rule="evenodd" d="M4.47.22A.75.75 0 015 0h6a.75.75 0 01.53.22l4.25 4.25c.141.14.22.331.22.53v6a.75.75 0 01-.22.53l-4.25 4.25A.75.75 0 0111 16H5a.75.75 0 01-.53-.22L.22 11.53A.75.75 0 010 11V5a.75.75 0 01.22-.53L4.47.22zm.84 1.28L1.5 5.31v5.38l3.81 3.81h5.38l3.81-3.81V5.31L10.69 1.5H5.31zM8 4a.75.75 0 01.75.75v3.5a.75.75 0 01-1.5 0v-3.5A.75.75 0 018 4zm0 8a1 1 0 100-2 1 1 0 000 2z"></path>
+</svg>
+ </span>
+ <span class="Toast-content"></span>
+ </div>
+
+ <div hidden class="anim-fade-in fast Toast Toast--warning">
+ <span class="Toast-icon">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
+ <path fill-rule="evenodd" d="M8.22 1.754a.25.25 0 00-.44 0L1.698 13.132a.25.25 0 00.22.368h12.164a.25.25 0 00.22-.368L8.22 1.754zm-1.763-.707c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0114.082 15H1.918a1.75 1.75 0 01-1.543-2.575L6.457 1.047zM9 11a1 1 0 11-2 0 1 1 0 012 0zm-.25-5.25a.75.75 0 00-1.5 0v2.5a.75.75 0 001.5 0v-2.5z"></path>
+</svg>
+ </span>
+ <span class="Toast-content"></span>
+ </div>
+
+
+ <div hidden class="anim-fade-in fast Toast Toast--success">
+ <span class="Toast-icon">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check">
+ <path fill-rule="evenodd" d="M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z"></path>
+</svg>
+ </span>
+ <span class="Toast-content"></span>
+ </div>
+
+ <div hidden class="anim-fade-in fast Toast">
+ <span class="Toast-icon">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-info">
+ <path fill-rule="evenodd" d="M8 1.5a6.5 6.5 0 100 13 6.5 6.5 0 000-13zM0 8a8 8 0 1116 0A8 8 0 010 8zm6.5-.25A.75.75 0 017.25 7h1a.75.75 0 01.75.75v2.75h.25a.75.75 0 010 1.5h-2a.75.75 0 010-1.5h.25v-2h-.25a.75.75 0 01-.75-.75zM8 6a1 1 0 100-2 1 1 0 000 2z"></path>
+</svg>
+ </span>
+ <span class="Toast-content"></span>
+ </div>
+</div>
+
+
+ <div
+ class="application-main "
+ data-commit-hovercards-enabled
+ data-discussion-hovercards-enabled
+ data-issue-and-pr-hovercards-enabled
+ >
+ <div itemscope itemtype="http://schema.org/SoftwareSourceCode" class="">
+ <main id="js-repo-pjax-container" >
+
+
+
+
+
+
+
+
+
+
+ <div id="repository-container-header" class="pt-3 hide-full-screen" style="background-color: var(--color-page-header-bg);" data-turbo-replace>
+
+ <div class="d-flex flex-wrap flex-justify-end mb-3 px-3 px-md-4 px-lg-5" style="gap: 1rem;">
+
+ <div class="flex-auto min-width-0 width-fit mr-3">
+
+ <div class=" d-flex flex-wrap flex-items-center wb-break-word f3 text-normal">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo color-fg-muted mr-2">
+ <path fill-rule="evenodd" d="M2 2.5A2.5 2.5 0 014.5 0h8.75a.75.75 0 01.75.75v12.5a.75.75 0 01-.75.75h-2.5a.75.75 0 110-1.5h1.75v-2h-8a1 1 0 00-.714 1.7.75.75 0 01-1.072 1.05A2.495 2.495 0 012 11.5v-9zm10.5-1V9h-8c-.356 0-.694.074-1 .208V2.5a1 1 0 011-1h8zM5 12.25v3.25a.25.25 0 00.4.2l1.45-1.087a.25.25 0 01.3 0L8.6 15.7a.25.25 0 00.4-.2v-3.25a.25.25 0 00-.25-.25h-3.5a.25.25 0 00-.25.25z"></path>
+</svg>
+
+ <span class="author flex-self-stretch" itemprop="author">
+ <a class="url fn" rel="author" data-hovercard-type="user" data-hovercard-url="/users/rlkamalapurkar/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/rlkamalapurkar">rlkamalapurkar</a>
+ </span>
+ <span class="mx-1 flex-self-stretch color-fg-muted">/</span>
+ <strong itemprop="name" class="mr-2 flex-self-stretch">
+ <a data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" href="/rlkamalapurkar/bodeplot">bodeplot</a>
+ </strong>
+
+ <span></span><span class="Label Label--secondary v-align-middle mr-1">Public</span>
+ </div>
+
+
+ </div>
+
+ <ul class="pagehead-actions flex-shrink-0 d-none d-md-inline" style="padding: 2px 0;">
+
+ <li>
+ <div class="float-left" data-test-selector="pin-repo-button">
+ <form data-turbo="false" action="/rlkamalapurkar/bodeplot/profile_pin" accept-charset="UTF-8" method="post"><input type="hidden" name="authenticity_token" value="gJAPaWAD9LtZOwYXuT5wQNVH7Hep6LEFv8j-uRukiik8lLEEdi3OAvtmN3CocwCwomUPz8s5dJ9bqh3cvsFWbQ" autocomplete="off" />
+ <button title="Pin this repository to your profile" type="submit" data-view-component="true" class="btn-sm btn"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-pin mr-2">
+ <path fill-rule="evenodd" d="M4.456.734a1.75 1.75 0 012.826.504l.613 1.327a3.081 3.081 0 002.084 1.707l2.454.584c1.332.317 1.8 1.972.832 2.94L11.06 10l3.72 3.72a.75.75 0 11-1.061 1.06L10 11.06l-2.204 2.205c-.968.968-2.623.5-2.94-.832l-.584-2.454a3.081 3.081 0 00-1.707-2.084l-1.327-.613a1.75 1.75 0 01-.504-2.826L4.456.734zM5.92 1.866a.25.25 0 00-.404-.072L1.794 5.516a.25.25 0 00.072.404l1.328.613A4.582 4.582 0 015.73 9.63l.584 2.454a.25.25 0 00.42.12l5.47-5.47a.25.25 0 00-.12-.42L9.63 5.73a4.581 4.581 0 01-3.098-2.537L5.92 1.866z"></path>
+</svg>Pin
+</button></form> </div>
+</li>
+
+
+ <li>
+ <notifications-list-subscription-form
+ data-action="notifications-dialog-label-toggled:notifications-list-subscription-form#handleDialogLabelToggle"
+ class="f5 position-relative"
+ >
+ <details
+ class="details-reset details-overlay f5 position-relative"
+ data-target="notifications-list-subscription-form.details"
+ data-action="toggle:notifications-list-subscription-form#detailsToggled"
+ >
+
+ <summary data-hydro-click="{&quot;event_type&quot;:&quot;repository.click&quot;,&quot;payload&quot;:{&quot;target&quot;:&quot;WATCH_BUTTON&quot;,&quot;repository_id&quot;:418699104,&quot;originating_url&quot;:&quot;https://github.com/rlkamalapurkar/bodeplot/blob/main/bodeplot.ins&quot;,&quot;user_id&quot;:30264720}}" data-hydro-click-hmac="84036c9dc3ea6f68782480bb11dba72e0408c3c47003ccd129c207a86dbcb54d" data-ga-click="Repository, click Watch settings, action:blob#show" aria-label="Notification settings" data-view-component="true" class="btn-sm btn"> <span data-menu-button>
+ <span
+
+
+ data-target="notifications-list-subscription-form.unwatchButtonCopy"
+ >
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-eye">
+ <path fill-rule="evenodd" d="M1.679 7.932c.412-.621 1.242-1.75 2.366-2.717C5.175 4.242 6.527 3.5 8 3.5c1.473 0 2.824.742 3.955 1.715 1.124.967 1.954 2.096 2.366 2.717a.119.119 0 010 .136c-.412.621-1.242 1.75-2.366 2.717C10.825 11.758 9.473 12.5 8 12.5c-1.473 0-2.824-.742-3.955-1.715C2.92 9.818 2.09 8.69 1.679 8.068a.119.119 0 010-.136zM8 2c-1.981 0-3.67.992-4.933 2.078C1.797 5.169.88 6.423.43 7.1a1.619 1.619 0 000 1.798c.45.678 1.367 1.932 2.637 3.024C4.329 13.008 6.019 14 8 14c1.981 0 3.67-.992 4.933-2.078 1.27-1.091 2.187-2.345 2.637-3.023a1.619 1.619 0 000-1.798c-.45-.678-1.367-1.932-2.637-3.023C11.671 2.992 9.981 2 8 2zm0 8a2 2 0 100-4 2 2 0 000 4z"></path>
+</svg>
+ Unwatch
+ </span>
+ <span
+ hidden
+
+ data-target="notifications-list-subscription-form.stopIgnoringButtonCopy"
+ >
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-bell-slash">
+ <path fill-rule="evenodd" d="M8 1.5c-.997 0-1.895.416-2.534 1.086A.75.75 0 014.38 1.55 5 5 0 0113 5v2.373a.75.75 0 01-1.5 0V5A3.5 3.5 0 008 1.5zM4.182 4.31L1.19 2.143a.75.75 0 10-.88 1.214L3 5.305v2.642a.25.25 0 01-.042.139L1.255 10.64A1.518 1.518 0 002.518 13h11.108l1.184.857a.75.75 0 10.88-1.214l-1.375-.996a1.196 1.196 0 00-.013-.01L4.198 4.321a.733.733 0 00-.016-.011zm7.373 7.19L4.5 6.391v1.556c0 .346-.102.683-.294.97l-1.703 2.556a.018.018 0 00-.003.01.015.015 0 00.005.012.017.017 0 00.006.004l.007.001h9.037zM8 16a2 2 0 001.985-1.75c.017-.137-.097-.25-.235-.25h-3.5c-.138 0-.252.113-.235.25A2 2 0 008 16z"></path>
+</svg>
+ Stop ignoring
+ </span>
+ <span
+ hidden
+
+ data-target="notifications-list-subscription-form.watchButtonCopy"
+ >
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-eye">
+ <path fill-rule="evenodd" d="M1.679 7.932c.412-.621 1.242-1.75 2.366-2.717C5.175 4.242 6.527 3.5 8 3.5c1.473 0 2.824.742 3.955 1.715 1.124.967 1.954 2.096 2.366 2.717a.119.119 0 010 .136c-.412.621-1.242 1.75-2.366 2.717C10.825 11.758 9.473 12.5 8 12.5c-1.473 0-2.824-.742-3.955-1.715C2.92 9.818 2.09 8.69 1.679 8.068a.119.119 0 010-.136zM8 2c-1.981 0-3.67.992-4.933 2.078C1.797 5.169.88 6.423.43 7.1a1.619 1.619 0 000 1.798c.45.678 1.367 1.932 2.637 3.024C4.329 13.008 6.019 14 8 14c1.981 0 3.67-.992 4.933-2.078 1.27-1.091 2.187-2.345 2.637-3.023a1.619 1.619 0 000-1.798c-.45-.678-1.367-1.932-2.637-3.023C11.671 2.992 9.981 2 8 2zm0 8a2 2 0 100-4 2 2 0 000 4z"></path>
+</svg>
+ Watch
+ </span>
+ </span>
+ <span id="repo-notifications-counter" data-target="notifications-list-subscription-form.socialCount" data-pjax-replace="true" data-turbo-replace="true" title="1" data-view-component="true" class="Counter">1</span>
+ <span class="dropdown-caret"></span>
+</summary>
+ <details-menu
+ class="SelectMenu "
+ role="menu"
+ data-target="notifications-list-subscription-form.menu"
+
+ >
+ <div class="SelectMenu-modal notifications-component-menu-modal">
+ <header class="SelectMenu-header">
+ <h3 class="SelectMenu-title">Notifications</h3>
+ <button class="SelectMenu-closeButton" type="button" aria-label="Close menu" data-action="click:notifications-list-subscription-form#closeMenu">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x">
+ <path fill-rule="evenodd" d="M3.72 3.72a.75.75 0 011.06 0L8 6.94l3.22-3.22a.75.75 0 111.06 1.06L9.06 8l3.22 3.22a.75.75 0 11-1.06 1.06L8 9.06l-3.22 3.22a.75.75 0 01-1.06-1.06L6.94 8 3.72 4.78a.75.75 0 010-1.06z"></path>
+</svg>
+ </button>
+ </header>
+
+ <div class="SelectMenu-list">
+ <form data-target="notifications-list-subscription-form.form" data-action="submit:notifications-list-subscription-form#submitForm" data-turbo="false" action="/notifications/subscribe" accept-charset="UTF-8" method="post"><input type="hidden" name="authenticity_token" value="xjOeSIqu797w-ALETTZ7XhbxZiPmnOMgFnQxzNzHlR53VvOwLgP_BP7p2jKLBKI91uzKZytOhrNajY4goSXlPQ" autocomplete="off" />
+
+ <input type="hidden" name="repository_id" value="418699104">
+
+ <button
+ type="submit"
+ name="do"
+ value="included"
+ class="SelectMenu-item flex-items-start"
+ role="menuitemradio"
+ aria-checked="false"
+ data-targets="notifications-list-subscription-form.subscriptionButtons"
+
+ >
+ <span class="f5">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check SelectMenu-icon SelectMenu-icon--check">
+ <path fill-rule="evenodd" d="M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z"></path>
+</svg>
+ </span>
+ <div>
+ <div class="f5 text-bold">
+ Participating and @mentions
+ </div>
+ <div class="text-small color-fg-muted text-normal pb-1">
+ Only receive notifications from this repository when participating or @mentioned.
+ </div>
+ </div>
+ </button>
+
+ <button
+ type="submit"
+ name="do"
+ value="subscribed"
+ class="SelectMenu-item flex-items-start"
+ role="menuitemradio"
+ aria-checked="true"
+ data-targets="notifications-list-subscription-form.subscriptionButtons"
+ >
+ <span class="f5">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check SelectMenu-icon SelectMenu-icon--check">
+ <path fill-rule="evenodd" d="M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z"></path>
+</svg>
+ </span>
+ <div>
+ <div class="f5 text-bold">
+ All Activity
+ </div>
+ <div class="text-small color-fg-muted text-normal pb-1">
+ Notified of all notifications on this repository.
+ </div>
+ </div>
+ </button>
+
+ <button
+ type="submit"
+ name="do"
+ value="ignore"
+ class="SelectMenu-item flex-items-start"
+ role="menuitemradio"
+ aria-checked="false"
+ data-targets="notifications-list-subscription-form.subscriptionButtons"
+ >
+ <span class="f5">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check SelectMenu-icon SelectMenu-icon--check">
+ <path fill-rule="evenodd" d="M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z"></path>
+</svg>
+ </span>
+ <div>
+ <div class="f5 text-bold">
+ Ignore
+ </div>
+ <div class="text-small color-fg-muted text-normal pb-1">
+ Never be notified.
+ </div>
+ </div>
+ </button>
+</form>
+ <button
+ class="SelectMenu-item flex-items-start pr-3"
+ type="button"
+ role="menuitemradio"
+ data-target="notifications-list-subscription-form.customButton"
+ data-action="click:notifications-list-subscription-form#openCustomDialog"
+ aria-haspopup="true"
+ aria-checked="false"
+
+ >
+ <span class="f5">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check SelectMenu-icon SelectMenu-icon--check">
+ <path fill-rule="evenodd" d="M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z"></path>
+</svg>
+ </span>
+ <div>
+ <div class="d-flex flex-items-start flex-justify-between">
+ <div class="f5 text-bold">Custom</div>
+ <div class="f5 pr-1">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-arrow-right">
+ <path fill-rule="evenodd" d="M8.22 2.97a.75.75 0 011.06 0l4.25 4.25a.75.75 0 010 1.06l-4.25 4.25a.75.75 0 01-1.06-1.06l2.97-2.97H3.75a.75.75 0 010-1.5h7.44L8.22 4.03a.75.75 0 010-1.06z"></path>
+</svg>
+ </div>
+ </div>
+ <div class="text-small color-fg-muted text-normal pb-1">
+ Select events you want to be notified of in addition to participating and @mentions.
+ </div>
+ </div>
+ </button>
+
+ <div class="px-3 py-2 d-flex color-bg-subtle flex-items-center">
+ <span class="f5">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-device-mobile SelectMenu-icon SelectMenu-icon--device-mobile">
+ <path fill-rule="evenodd" d="M3.75 0A1.75 1.75 0 002 1.75v12.5c0 .966.784 1.75 1.75 1.75h8.5A1.75 1.75 0 0014 14.25V1.75A1.75 1.75 0 0012.25 0h-8.5zM3.5 1.75a.25.25 0 01.25-.25h8.5a.25.25 0 01.25.25v12.5a.25.25 0 01-.25.25h-8.5a.25.25 0 01-.25-.25V1.75zM8 13a1 1 0 100-2 1 1 0 000 2z"></path>
+</svg>
+ </span>
+ <span className="text-small color-fg-muted text-normal pb-1">
+ Get push notifications on <a target="_blank" rel="noopener noreferrer" href="https://apps.apple.com/app/apple-store/id1477376905?ct=watch-dropdown&amp;mt=8&amp;pt=524675">iOS</a> or <a target="_blank" rel="noopener noreferrer" href="https://play.google.com/store/apps/details?id=com.github.android&amp;referrer=utm_campaign%3Dwatch-dropdown%26utm_medium%3Dweb%26utm_source%3Dgithub">Android</a>.
+ </span>
+ </div>
+ </div>
+ </div>
+ </details-menu>
+
+ <details-dialog
+ class="notifications-component-dialog "
+ data-target="notifications-list-subscription-form.customDialog"
+ aria-label="Custom dialog"
+ hidden
+ >
+ <div class="SelectMenu-modal notifications-component-dialog-modal overflow-visible">
+ <form data-target="notifications-list-subscription-form.customform" data-action="submit:notifications-list-subscription-form#submitCustomForm" data-turbo="false" action="/notifications/subscribe" accept-charset="UTF-8" method="post"><input type="hidden" name="authenticity_token" value="QWGBWNCP13QRFhVPEs_Joqjuat4NYHMeJkVrBDTRzY_wBOygdCLHrh8HzbnU_RDBaPPGmsCyFo1qvNToSTO9rA" autocomplete="off" />
+
+ <input type="hidden" name="repository_id" value="418699104">
+
+ <header class="d-sm-none SelectMenu-header pb-0 border-bottom-0 px-2 px-sm-3">
+ <h1 class="f3 SelectMenu-title d-inline-flex">
+ <button
+ class="color-bg-default border-0 px-2 py-0 m-0 Link--secondary f5"
+ aria-label="Return to menu"
+ type="button"
+ data-action="click:notifications-list-subscription-form#closeCustomDialog"
+ >
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-arrow-left">
+ <path fill-rule="evenodd" d="M7.78 12.53a.75.75 0 01-1.06 0L2.47 8.28a.75.75 0 010-1.06l4.25-4.25a.75.75 0 011.06 1.06L4.81 7h7.44a.75.75 0 010 1.5H4.81l2.97 2.97a.75.75 0 010 1.06z"></path>
+</svg>
+ </button>
+ Custom
+ </h1>
+ </header>
+
+ <header class="d-none d-sm-flex flex-items-start pt-1">
+ <button
+ class="border-0 px-2 pt-1 m-0 Link--secondary f5"
+ style="background-color: transparent;"
+ aria-label="Return to menu"
+ type="button"
+ data-action="click:notifications-list-subscription-form#closeCustomDialog"
+ >
+ <svg style="position: relative; left: 2px; top: 1px" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-arrow-left">
+ <path fill-rule="evenodd" d="M7.78 12.53a.75.75 0 01-1.06 0L2.47 8.28a.75.75 0 010-1.06l4.25-4.25a.75.75 0 011.06 1.06L4.81 7h7.44a.75.75 0 010 1.5H4.81l2.97 2.97a.75.75 0 010 1.06z"></path>
+</svg>
+ </button>
+
+ <h1 class="pt-1 pr-4 pb-0 pl-0 f5 text-bold">
+ Custom
+ </h1>
+ </header>
+
+ <fieldset>
+ <legend>
+ <div class="text-small color-fg-muted pt-0 pr-3 pb-3 pl-6 pl-sm-5 border-bottom mb-3">
+ Select events you want to be notified of in addition to participating and @mentions.
+ </div>
+ </legend>
+ <div data-target="notifications-list-subscription-form.labelInputs">
+ </div>
+ <div class="form-checkbox mr-3 ml-6 ml-sm-5 mb-2 mt-0">
+ <label class="f5 text-normal">
+ <input
+ type="checkbox"
+ name="thread_types[]"
+ value="Issue"
+ data-targets="notifications-list-subscription-form.threadTypeCheckboxes"
+ data-action="change:notifications-list-subscription-form#threadTypeCheckboxesUpdated"
+
+ >
+ Issues
+ </label>
+
+
+ </div>
+ <div class="form-checkbox mr-3 ml-6 ml-sm-5 mb-2 mt-0">
+ <label class="f5 text-normal">
+ <input
+ type="checkbox"
+ name="thread_types[]"
+ value="PullRequest"
+ data-targets="notifications-list-subscription-form.threadTypeCheckboxes"
+ data-action="change:notifications-list-subscription-form#threadTypeCheckboxesUpdated"
+
+ >
+ Pull requests
+ </label>
+
+
+ </div>
+ <div class="form-checkbox mr-3 ml-6 ml-sm-5 mb-2 mt-0">
+ <label class="f5 text-normal">
+ <input
+ type="checkbox"
+ name="thread_types[]"
+ value="Release"
+ data-targets="notifications-list-subscription-form.threadTypeCheckboxes"
+ data-action="change:notifications-list-subscription-form#threadTypeCheckboxesUpdated"
+
+ >
+ Releases
+ </label>
+
+
+ </div>
+ <div class="form-checkbox mr-3 ml-6 ml-sm-5 mb-2 mt-0">
+ <label class="f5 text-normal">
+ <input
+ type="checkbox"
+ name="thread_types[]"
+ value="Discussion"
+ data-targets="notifications-list-subscription-form.threadTypeCheckboxes"
+ data-action="change:notifications-list-subscription-form#threadTypeCheckboxesUpdated"
+
+ aria-describedby="Discussion-disabled"
+ aria-disabled="true"
+ >
+ Discussions
+ </label>
+
+ <div
+ id="Discussion-disabled"
+ class="color-fg-muted"
+ >
+ Discussions are not enabled for this repository
+ </div>
+
+ </div>
+ <div class="form-checkbox mr-3 ml-6 ml-sm-5 mb-2 mt-0">
+ <label class="f5 text-normal">
+ <input
+ type="checkbox"
+ name="thread_types[]"
+ value="SecurityAlert"
+ data-targets="notifications-list-subscription-form.threadTypeCheckboxes"
+ data-action="change:notifications-list-subscription-form#threadTypeCheckboxesUpdated"
+
+ >
+ Security alerts
+ </label>
+
+
+ </div>
+ </fieldset>
+ <div class="pt-2 pb-3 px-3 d-flex flex-justify-start flex-row-reverse">
+ <button name="do" value="custom" data-target="notifications-list-subscription-form.customSubmit" disabled="disabled" type="submit" data-view-component="true" class="btn-primary btn-sm btn ml-2"> Apply
+</button>
+
+ <button data-action="click:notifications-list-subscription-form#resetForm" data-close-dialog="" type="button" data-view-component="true" class="btn-sm btn"> Cancel
+</button>
+ </div>
+</form> </div>
+ </details-dialog>
+
+
+ <div class="notifications-component-dialog-overlay"></div>
+ </details>
+ </notifications-list-subscription-form>
+
+
+
+ </li>
+
+ <li>
+ <div data-view-component="true" class="BtnGroup">
+ <a icon="repo-forked" href="/rlkamalapurkar/bodeplot/fork" data-hydro-click="{&quot;event_type&quot;:&quot;repository.click&quot;,&quot;payload&quot;:{&quot;target&quot;:&quot;FORK_BUTTON&quot;,&quot;repository_id&quot;:418699104,&quot;originating_url&quot;:&quot;https://github.com/rlkamalapurkar/bodeplot/blob/main/bodeplot.ins&quot;,&quot;user_id&quot;:30264720}}" data-hydro-click-hmac="2e98aaf65ea3ffc6a3d60e6e99592fe8ef965969c0fdc02035d09df67082b41f" data-ga-click="Repository, show fork modal, action:blob#show; text:Fork" aria-label="Fork your own copy of rlkamalapurkar/bodeplot" data-view-component="true" class="btn-sm btn BtnGroup-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo-forked mr-2">
+ <path fill-rule="evenodd" d="M5 3.25a.75.75 0 11-1.5 0 .75.75 0 011.5 0zm0 2.122a2.25 2.25 0 10-1.5 0v.878A2.25 2.25 0 005.75 8.5h1.5v2.128a2.251 2.251 0 101.5 0V8.5h1.5a2.25 2.25 0 002.25-2.25v-.878a2.25 2.25 0 10-1.5 0v.878a.75.75 0 01-.75.75h-4.5A.75.75 0 015 6.25v-.878zm3.75 7.378a.75.75 0 11-1.5 0 .75.75 0 011.5 0zm3-8.75a.75.75 0 100-1.5.75.75 0 000 1.5z"></path>
+</svg>Fork
+ <span id="repo-network-counter" data-pjax-replace="true" data-turbo-replace="true" title="1" data-view-component="true" class="Counter">1</span>
+</a>
+ <details group_item="true" id="my-forks-menu-418699104" data-view-component="true" class="details-reset details-overlay BtnGroup-parent d-inline-block position-relative">
+ <summary aria-label="See your forks of this repository" data-view-component="true" class="btn-sm btn BtnGroup-item px-2 float-none"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-triangle-down">
+ <path d="M4.427 7.427l3.396 3.396a.25.25 0 00.354 0l3.396-3.396A.25.25 0 0011.396 7H4.604a.25.25 0 00-.177.427z"></path>
+</svg>
+</summary>
+ <details-menu
+ class="SelectMenu right-0"
+ src="/rlkamalapurkar/bodeplot/my_forks_menu_content?can_fork=true"
+
+ role="menu"
+
+>
+ <div class="SelectMenu-modal">
+ <button class="SelectMenu-closeButton position-absolute right-0 m-2" type="button" aria-label="Close menu" data-toggle-for="details-463992">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x">
+ <path fill-rule="evenodd" d="M3.72 3.72a.75.75 0 011.06 0L8 6.94l3.22-3.22a.75.75 0 111.06 1.06L9.06 8l3.22 3.22a.75.75 0 11-1.06 1.06L8 9.06l-3.22 3.22a.75.75 0 01-1.06-1.06L6.94 8 3.72 4.78a.75.75 0 010-1.06z"></path>
+</svg>
+ </button>
+ <div
+ id="filter-menu-463992"
+ class="d-flex flex-column flex-1 overflow-hidden"
+>
+ <div
+ class="SelectMenu-list"
+ >
+
+ <include-fragment class="SelectMenu-loading" aria-label="Loading">
+ <svg style="box-sizing: content-box; color: var(--color-icon-primary);" width="32" height="32" viewBox="0 0 16 16" fill="none" data-view-component="true" class="anim-rotate">
+ <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" />
+ <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke" />
+</svg>
+ </include-fragment>
+ </div>
+
+ </div>
+ </div>
+ </details-menu>
+</details></div>
+ </li>
+
+ <li>
+ <template class="js-unstar-confirmation-dialog-template">
+ <div class="Box-header">
+ <h2 class="Box-title">Unstar this repository?</h2>
+ </div>
+ <div class="Box-body">
+ <p class="mb-3">
+ This will remove {{ repoNameWithOwner }} from the {{ listsWithCount }} that it's been added to.
+ </p>
+ <div class="form-actions">
+ <form class="js-social-confirmation-form" data-turbo="false" action="{{ confirmUrl }}" accept-charset="UTF-8" method="post">
+ <input type="hidden" name="authenticity_token" value="{{ confirmCsrfToken }}">
+ <input type="hidden" name="confirm" value="true">
+ <button data-close-dialog="true" type="submit" data-view-component="true" class="btn-danger btn width-full"> Unstar
+</button>
+</form> </div>
+ </div>
+</template>
+
+ <div data-view-component="true" class="js-toggler-container js-social-container starring-container d-flex">
+ <div data-view-component="true" class="starred BtnGroup flex-1">
+ <form class="js-social-form BtnGroup-parent flex-auto js-deferred-toggler-target" data-turbo="false" action="/rlkamalapurkar/bodeplot/unstar" accept-charset="UTF-8" method="post"><input type="hidden" name="authenticity_token" value="ueIX11olrMt6FQcOIbEJCid4qwpUT-xgQUOihIlxY8cKaE3huBNESC6K6ATVfF9qh6LdrGvIxtFiNGDg0aWC7A" autocomplete="off" />
+ <input type="hidden" value="_V-mZaPTtsyurIaUtW0MSv-t0dac3nmipnjCBBhFtDJO1fxTQeVeT_ozaZ5BoFoqX3encKNZUxOFDwBgQJFVGQ" data-csrf="true" class="js-confirm-csrf-token" />
+ <input type="hidden" name="context" value="repository">
+ <button data-hydro-click="{&quot;event_type&quot;:&quot;repository.click&quot;,&quot;payload&quot;:{&quot;target&quot;:&quot;UNSTAR_BUTTON&quot;,&quot;repository_id&quot;:418699104,&quot;originating_url&quot;:&quot;https://github.com/rlkamalapurkar/bodeplot/blob/main/bodeplot.ins&quot;,&quot;user_id&quot;:30264720}}" data-hydro-click-hmac="f45da2eb71b369cc608776b7a4da9f4ea89c3872c0fc759a363900821cae2787" data-ga-click="Repository, click unstar button, action:blob#show; text:Unstar" aria-label="Unstar this repository (3)" type="submit" data-view-component="true" class="rounded-left-2 btn-sm btn BtnGroup-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-star-fill starred-button-icon d-inline-block mr-2">
+ <path fill-rule="evenodd" d="M8 .25a.75.75 0 01.673.418l1.882 3.815 4.21.612a.75.75 0 01.416 1.279l-3.046 2.97.719 4.192a.75.75 0 01-1.088.791L8 12.347l-3.766 1.98a.75.75 0 01-1.088-.79l.72-4.194L.818 6.374a.75.75 0 01.416-1.28l4.21-.611L7.327.668A.75.75 0 018 .25z"></path>
+</svg><span data-view-component="true" class="d-inline">
+ Starred
+</span> <span id="repo-stars-counter-unstar" aria-label="3 users starred this repository" data-singular-suffix="user starred this repository" data-plural-suffix="users starred this repository" data-turbo-replace="true" title="3" data-view-component="true" class="Counter js-social-count">3</span>
+</button></form> <details id="details-user-list-418699104" data-view-component="true" class="details-reset details-overlay BtnGroup-parent js-user-list-menu d-inline-block position-relative">
+ <summary aria-label="Add this repository to a list" data-view-component="true" class="btn-sm btn BtnGroup-item px-2 float-none"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-triangle-down">
+ <path d="M4.427 7.427l3.396 3.396a.25.25 0 00.354 0l3.396-3.396A.25.25 0 0011.396 7H4.604a.25.25 0 00-.177.427z"></path>
+</svg>
+</summary>
+ <details-menu
+ class="SelectMenu right-0"
+ src="/rlkamalapurkar/bodeplot/lists"
+
+ role="menu"
+
+>
+ <div class="SelectMenu-modal">
+ <button class="SelectMenu-closeButton position-absolute right-0 m-2" type="button" aria-label="Close menu" data-toggle-for="details-bc244f">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x">
+ <path fill-rule="evenodd" d="M3.72 3.72a.75.75 0 011.06 0L8 6.94l3.22-3.22a.75.75 0 111.06 1.06L9.06 8l3.22 3.22a.75.75 0 11-1.06 1.06L8 9.06l-3.22 3.22a.75.75 0 01-1.06-1.06L6.94 8 3.72 4.78a.75.75 0 010-1.06z"></path>
+</svg>
+ </button>
+ <div
+ id="filter-menu-bc244f"
+ class="d-flex flex-column flex-1 overflow-hidden"
+>
+ <div
+ class="SelectMenu-list"
+ >
+
+ <include-fragment class="SelectMenu-loading" aria-label="Loading">
+ <svg style="box-sizing: content-box; color: var(--color-icon-primary);" width="32" height="32" viewBox="0 0 16 16" fill="none" data-view-component="true" class="anim-rotate">
+ <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" />
+ <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke" />
+</svg>
+ </include-fragment>
+ </div>
+
+ </div>
+ </div>
+ </details-menu>
+</details>
+</div>
+ <div data-view-component="true" class="unstarred BtnGroup flex-1">
+ <form class="js-social-form BtnGroup-parent flex-auto" data-turbo="false" action="/rlkamalapurkar/bodeplot/star" accept-charset="UTF-8" method="post"><input type="hidden" name="authenticity_token" value="ptqfQ2DATeYht5qx6nMm79UBOK1EkMoWMHItlaw8fhesZsuLcVKYnHW-4s1ZDBUqypeoTii4DC8MfimLe2RYuw" autocomplete="off" />
+ <input type="hidden" name="context" value="repository">
+ <button data-hydro-click="{&quot;event_type&quot;:&quot;repository.click&quot;,&quot;payload&quot;:{&quot;target&quot;:&quot;STAR_BUTTON&quot;,&quot;repository_id&quot;:418699104,&quot;originating_url&quot;:&quot;https://github.com/rlkamalapurkar/bodeplot/blob/main/bodeplot.ins&quot;,&quot;user_id&quot;:30264720}}" data-hydro-click-hmac="c7690dd02647051c37f96c6a9e1daea35cd45b7fba660ef05616388ae5ee4142" data-ga-click="Repository, click star button, action:blob#show; text:Star" aria-label="Star this repository (3)" type="submit" data-view-component="true" class="js-toggler-target rounded-left-2 btn-sm btn BtnGroup-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-star d-inline-block mr-2">
+ <path fill-rule="evenodd" d="M8 .25a.75.75 0 01.673.418l1.882 3.815 4.21.612a.75.75 0 01.416 1.279l-3.046 2.97.719 4.192a.75.75 0 01-1.088.791L8 12.347l-3.766 1.98a.75.75 0 01-1.088-.79l.72-4.194L.818 6.374a.75.75 0 01.416-1.28l4.21-.611L7.327.668A.75.75 0 018 .25zm0 2.445L6.615 5.5a.75.75 0 01-.564.41l-3.097.45 2.24 2.184a.75.75 0 01.216.664l-.528 3.084 2.769-1.456a.75.75 0 01.698 0l2.77 1.456-.53-3.084a.75.75 0 01.216-.664l2.24-2.183-3.096-.45a.75.75 0 01-.564-.41L8 2.694v.001z"></path>
+</svg><span data-view-component="true" class="d-inline">
+ Star
+</span> <span id="repo-stars-counter-star" aria-label="3 users starred this repository" data-singular-suffix="user starred this repository" data-plural-suffix="users starred this repository" data-turbo-replace="true" title="3" data-view-component="true" class="Counter js-social-count">3</span>
+</button></form> <details id="details-user-list-418699104" data-view-component="true" class="details-reset details-overlay BtnGroup-parent js-user-list-menu d-inline-block position-relative">
+ <summary aria-label="Add this repository to a list" data-view-component="true" class="btn-sm btn BtnGroup-item px-2 float-none"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-triangle-down">
+ <path d="M4.427 7.427l3.396 3.396a.25.25 0 00.354 0l3.396-3.396A.25.25 0 0011.396 7H4.604a.25.25 0 00-.177.427z"></path>
+</svg>
+</summary>
+ <details-menu
+ class="SelectMenu right-0"
+ src="/rlkamalapurkar/bodeplot/lists"
+
+ role="menu"
+
+>
+ <div class="SelectMenu-modal">
+ <button class="SelectMenu-closeButton position-absolute right-0 m-2" type="button" aria-label="Close menu" data-toggle-for="details-bc244f">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x">
+ <path fill-rule="evenodd" d="M3.72 3.72a.75.75 0 011.06 0L8 6.94l3.22-3.22a.75.75 0 111.06 1.06L9.06 8l3.22 3.22a.75.75 0 11-1.06 1.06L8 9.06l-3.22 3.22a.75.75 0 01-1.06-1.06L6.94 8 3.72 4.78a.75.75 0 010-1.06z"></path>
+</svg>
+ </button>
+ <div
+ id="filter-menu-bc244f"
+ class="d-flex flex-column flex-1 overflow-hidden"
+>
+ <div
+ class="SelectMenu-list"
+ >
+
+ <include-fragment class="SelectMenu-loading" aria-label="Loading">
+ <svg style="box-sizing: content-box; color: var(--color-icon-primary);" width="32" height="32" viewBox="0 0 16 16" fill="none" data-view-component="true" class="anim-rotate">
+ <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" />
+ <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke" />
+</svg>
+ </include-fragment>
+ </div>
+
+ </div>
+ </div>
+ </details-menu>
+</details>
+</div></div>
+ </li>
+
+
+
+</ul>
+
+ </div>
+
+ <div id="responsive-meta-container" data-turbo-replace>
+</div>
+
+
+ <nav data-pjax="#js-repo-pjax-container" aria-label="Repository" data-view-component="true" class="js-repo-nav js-sidenav-container-pjax js-responsive-underlinenav overflow-hidden UnderlineNav px-3 px-md-4 px-lg-5">
+
+ <ul data-view-component="true" class="UnderlineNav-body list-style-none">
+ <li data-view-component="true" class="d-inline-flex">
+ <a id="code-tab" href="/rlkamalapurkar/bodeplot" data-tab-item="i0code-tab" data-selected-links="repo_source repo_downloads repo_commits repo_releases repo_tags repo_branches repo_packages repo_deployments /rlkamalapurkar/bodeplot" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g c" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Code&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" aria-current="page" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item selected">
+
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code UnderlineNav-octicon d-none d-sm-inline">
+ <path fill-rule="evenodd" d="M4.72 3.22a.75.75 0 011.06 1.06L2.06 8l3.72 3.72a.75.75 0 11-1.06 1.06L.47 8.53a.75.75 0 010-1.06l4.25-4.25zm6.56 0a.75.75 0 10-1.06 1.06L13.94 8l-3.72 3.72a.75.75 0 101.06 1.06l4.25-4.25a.75.75 0 000-1.06l-4.25-4.25z"></path>
+</svg>
+ <span data-content="Code">Code</span>
+ <span id="code-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span>
+
+
+
+</a></li>
+ <li data-view-component="true" class="d-inline-flex">
+ <a id="issues-tab" href="/rlkamalapurkar/bodeplot/issues" data-tab-item="i1issues-tab" data-selected-links="repo_issues repo_labels repo_milestones /rlkamalapurkar/bodeplot/issues" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g i" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Issues&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item">
+
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-issue-opened UnderlineNav-octicon d-none d-sm-inline">
+ <path d="M8 9.5a1.5 1.5 0 100-3 1.5 1.5 0 000 3z"></path><path fill-rule="evenodd" d="M8 0a8 8 0 100 16A8 8 0 008 0zM1.5 8a6.5 6.5 0 1113 0 6.5 6.5 0 01-13 0z"></path>
+</svg>
+ <span data-content="Issues">Issues</span>
+ <span id="issues-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="1" data-view-component="true" class="Counter">1</span>
+
+
+
+</a></li>
+ <li data-view-component="true" class="d-inline-flex">
+ <a id="pull-requests-tab" href="/rlkamalapurkar/bodeplot/pulls" data-tab-item="i2pull-requests-tab" data-selected-links="repo_pulls checks /rlkamalapurkar/bodeplot/pulls" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g p" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Pull requests&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item">
+
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-git-pull-request UnderlineNav-octicon d-none d-sm-inline">
+ <path fill-rule="evenodd" d="M7.177 3.073L9.573.677A.25.25 0 0110 .854v4.792a.25.25 0 01-.427.177L7.177 3.427a.25.25 0 010-.354zM3.75 2.5a.75.75 0 100 1.5.75.75 0 000-1.5zm-2.25.75a2.25 2.25 0 113 2.122v5.256a2.251 2.251 0 11-1.5 0V5.372A2.25 2.25 0 011.5 3.25zM11 2.5h-1V4h1a1 1 0 011 1v5.628a2.251 2.251 0 101.5 0V5A2.5 2.5 0 0011 2.5zm1 10.25a.75.75 0 111.5 0 .75.75 0 01-1.5 0zM3.75 12a.75.75 0 100 1.5.75.75 0 000-1.5z"></path>
+</svg>
+ <span data-content="Pull requests">Pull requests</span>
+ <span id="pull-requests-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="0" hidden="hidden" data-view-component="true" class="Counter">0</span>
+
+
+
+</a></li>
+ <li data-view-component="true" class="d-inline-flex">
+ <a id="actions-tab" href="/rlkamalapurkar/bodeplot/actions" data-tab-item="i3actions-tab" data-selected-links="repo_actions /rlkamalapurkar/bodeplot/actions" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g a" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Actions&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item">
+
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-play UnderlineNav-octicon d-none d-sm-inline">
+ <path fill-rule="evenodd" d="M1.5 8a6.5 6.5 0 1113 0 6.5 6.5 0 01-13 0zM8 0a8 8 0 100 16A8 8 0 008 0zM6.379 5.227A.25.25 0 006 5.442v5.117a.25.25 0 00.379.214l4.264-2.559a.25.25 0 000-.428L6.379 5.227z"></path>
+</svg>
+ <span data-content="Actions">Actions</span>
+ <span id="actions-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span>
+
+
+
+</a></li>
+ <li data-view-component="true" class="d-inline-flex">
+ <a id="projects-tab" href="/rlkamalapurkar/bodeplot/projects" data-tab-item="i4projects-tab" data-selected-links="repo_projects new_repo_project repo_project /rlkamalapurkar/bodeplot/projects" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g b" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Projects&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item">
+
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-table UnderlineNav-octicon d-none d-sm-inline">
+ <path fill-rule="evenodd" d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0114.25 16H1.75A1.75 1.75 0 010 14.25V1.75zM1.5 6.5v7.75c0 .138.112.25.25.25H5v-8H1.5zM5 5H1.5V1.75a.25.25 0 01.25-.25H5V5zm1.5 1.5v8h7.75a.25.25 0 00.25-.25V6.5h-8zm8-1.5h-8V1.5h7.75a.25.25 0 01.25.25V5z"></path>
+</svg>
+ <span data-content="Projects">Projects</span>
+ <span id="projects-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="0" hidden="hidden" data-view-component="true" class="Counter">0</span>
+
+
+
+</a></li>
+ <li data-view-component="true" class="d-inline-flex">
+ <a id="wiki-tab" href="/rlkamalapurkar/bodeplot/wiki" data-tab-item="i5wiki-tab" data-selected-links="repo_wiki /rlkamalapurkar/bodeplot/wiki" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g w" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Wiki&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item">
+
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-book UnderlineNav-octicon d-none d-sm-inline">
+ <path fill-rule="evenodd" d="M0 1.75A.75.75 0 01.75 1h4.253c1.227 0 2.317.59 3 1.501A3.744 3.744 0 0111.006 1h4.245a.75.75 0 01.75.75v10.5a.75.75 0 01-.75.75h-4.507a2.25 2.25 0 00-1.591.659l-.622.621a.75.75 0 01-1.06 0l-.622-.621A2.25 2.25 0 005.258 13H.75a.75.75 0 01-.75-.75V1.75zm8.755 3a2.25 2.25 0 012.25-2.25H14.5v9h-3.757c-.71 0-1.4.201-1.992.572l.004-7.322zm-1.504 7.324l.004-5.073-.002-2.253A2.25 2.25 0 005.003 2.5H1.5v9h3.757a3.75 3.75 0 011.994.574z"></path>
+</svg>
+ <span data-content="Wiki">Wiki</span>
+ <span id="wiki-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span>
+
+
+
+</a></li>
+ <li data-view-component="true" class="d-inline-flex">
+ <a id="security-tab" href="/rlkamalapurkar/bodeplot/security" data-tab-item="i6security-tab" data-selected-links="security overview alerts policy token_scanning code_scanning /rlkamalapurkar/bodeplot/security" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g s" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Security&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item">
+
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-shield UnderlineNav-octicon d-none d-sm-inline">
+ <path fill-rule="evenodd" d="M7.467.133a1.75 1.75 0 011.066 0l5.25 1.68A1.75 1.75 0 0115 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.7 1.7 0 01-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 011.217-1.667l5.25-1.68zm.61 1.429a.25.25 0 00-.153 0l-5.25 1.68a.25.25 0 00-.174.238V7c0 1.358.275 2.666 1.057 3.86.784 1.194 2.121 2.34 4.366 3.297a.2.2 0 00.154 0c2.245-.956 3.582-2.104 4.366-3.298C13.225 9.666 13.5 8.36 13.5 7V3.48a.25.25 0 00-.174-.237l-5.25-1.68zM9 10.5a1 1 0 11-2 0 1 1 0 012 0zm-.25-5.75a.75.75 0 10-1.5 0v3a.75.75 0 001.5 0v-3z"></path>
+</svg>
+ <span data-content="Security">Security</span>
+ <include-fragment src="/rlkamalapurkar/bodeplot/security/overall-count" accept="text/fragment+html"></include-fragment>
+
+
+</a></li>
+ <li data-view-component="true" class="d-inline-flex">
+ <a id="insights-tab" href="/rlkamalapurkar/bodeplot/pulse" data-tab-item="i7insights-tab" data-selected-links="repo_graphs repo_contributors dependency_graph dependabot_updates pulse people community /rlkamalapurkar/bodeplot/pulse" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Insights&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item">
+
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-graph UnderlineNav-octicon d-none d-sm-inline">
+ <path fill-rule="evenodd" d="M1.5 1.75a.75.75 0 00-1.5 0v12.5c0 .414.336.75.75.75h14.5a.75.75 0 000-1.5H1.5V1.75zm14.28 2.53a.75.75 0 00-1.06-1.06L10 7.94 7.53 5.47a.75.75 0 00-1.06 0L3.22 8.72a.75.75 0 001.06 1.06L7 7.06l2.47 2.47a.75.75 0 001.06 0l5.25-5.25z"></path>
+</svg>
+ <span data-content="Insights">Insights</span>
+ <span id="insights-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span>
+
+
+
+</a></li>
+ <li data-view-component="true" class="d-inline-flex">
+ <a id="settings-tab" href="/rlkamalapurkar/bodeplot/settings" data-tab-item="i8settings-tab" data-selected-links="repo_settings repo_branch_settings collaborators hooks integration_installations repo_keys_settings issue_template_editor secrets_settings_actions secrets_settings_codespaces secrets_settings_dependabot security_analysis key_links_settings repo_actions_settings notifications repository_actions_settings_runners repository_environments interaction_limits repository_actions_settings_general repository_actions_settings_add_new_runner repo_pages_settings repo_announcements repo_protected_tags_settings code_review_limits /rlkamalapurkar/bodeplot/settings" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Settings&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item">
+
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-gear UnderlineNav-octicon d-none d-sm-inline">
+ <path fill-rule="evenodd" d="M7.429 1.525a6.593 6.593 0 011.142 0c.036.003.108.036.137.146l.289 1.105c.147.56.55.967.997 1.189.174.086.341.183.501.29.417.278.97.423 1.53.27l1.102-.303c.11-.03.175.016.195.046.219.31.41.641.573.989.014.031.022.11-.059.19l-.815.806c-.411.406-.562.957-.53 1.456a4.588 4.588 0 010 .582c-.032.499.119 1.05.53 1.456l.815.806c.08.08.073.159.059.19a6.494 6.494 0 01-.573.99c-.02.029-.086.074-.195.045l-1.103-.303c-.559-.153-1.112-.008-1.529.27-.16.107-.327.204-.5.29-.449.222-.851.628-.998 1.189l-.289 1.105c-.029.11-.101.143-.137.146a6.613 6.613 0 01-1.142 0c-.036-.003-.108-.037-.137-.146l-.289-1.105c-.147-.56-.55-.967-.997-1.189a4.502 4.502 0 01-.501-.29c-.417-.278-.97-.423-1.53-.27l-1.102.303c-.11.03-.175-.016-.195-.046a6.492 6.492 0 01-.573-.989c-.014-.031-.022-.11.059-.19l.815-.806c.411-.406.562-.957.53-1.456a4.587 4.587 0 010-.582c.032-.499-.119-1.05-.53-1.456l-.815-.806c-.08-.08-.073-.159-.059-.19a6.44 6.44 0 01.573-.99c.02-.029.086-.075.195-.045l1.103.303c.559.153 1.112.008 1.529-.27.16-.107.327-.204.5-.29.449-.222.851-.628.998-1.189l.289-1.105c.029-.11.101-.143.137-.146zM8 0c-.236 0-.47.01-.701.03-.743.065-1.29.615-1.458 1.261l-.29 1.106c-.017.066-.078.158-.211.224a5.994 5.994 0 00-.668.386c-.123.082-.233.09-.3.071L3.27 2.776c-.644-.177-1.392.02-1.82.63a7.977 7.977 0 00-.704 1.217c-.315.675-.111 1.422.363 1.891l.815.806c.05.048.098.147.088.294a6.084 6.084 0 000 .772c.01.147-.038.246-.088.294l-.815.806c-.474.469-.678 1.216-.363 1.891.2.428.436.835.704 1.218.428.609 1.176.806 1.82.63l1.103-.303c.066-.019.176-.011.299.071.213.143.436.272.668.386.133.066.194.158.212.224l.289 1.106c.169.646.715 1.196 1.458 1.26a8.094 8.094 0 001.402 0c.743-.064 1.29-.614 1.458-1.26l.29-1.106c.017-.066.078-.158.211-.224a5.98 5.98 0 00.668-.386c.123-.082.233-.09.3-.071l1.102.302c.644.177 1.392-.02 1.82-.63.268-.382.505-.789.704-1.217.315-.675.111-1.422-.364-1.891l-.814-.806c-.05-.048-.098-.147-.088-.294a6.1 6.1 0 000-.772c-.01-.147.039-.246.088-.294l.814-.806c.475-.469.679-1.216.364-1.891a7.992 7.992 0 00-.704-1.218c-.428-.609-1.176-.806-1.82-.63l-1.103.303c-.066.019-.176.011-.299-.071a5.991 5.991 0 00-.668-.386c-.133-.066-.194-.158-.212-.224L10.16 1.29C9.99.645 9.444.095 8.701.031A8.094 8.094 0 008 0zm1.5 8a1.5 1.5 0 11-3 0 1.5 1.5 0 013 0zM11 8a3 3 0 11-6 0 3 3 0 016 0z"></path>
+</svg>
+ <span data-content="Settings">Settings</span>
+ <span id="settings-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span>
+
+
+
+</a></li>
+</ul>
+ <div style="visibility:hidden;" data-view-component="true" class="UnderlineNav-actions js-responsive-underlinenav-overflow position-absolute pr-3 pr-md-4 pr-lg-5 right-0"> <details data-view-component="true" class="details-overlay details-reset position-relative">
+ <summary role="button" data-view-component="true"> <div class="UnderlineNav-item mr-0 border-0">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-kebab-horizontal">
+ <path d="M8 9a1.5 1.5 0 100-3 1.5 1.5 0 000 3zM1.5 9a1.5 1.5 0 100-3 1.5 1.5 0 000 3zm13 0a1.5 1.5 0 100-3 1.5 1.5 0 000 3z"></path>
+</svg>
+ <span class="sr-only">More</span>
+ </div>
+</summary>
+ <details-menu role="menu" data-view-component="true" class="dropdown-menu dropdown-menu-sw"> <ul>
+ <li data-menu-item="i0code-tab" hidden>
+ <a role="menuitem" class="js-selected-navigation-item selected dropdown-item" aria-current="page" data-selected-links="repo_source repo_downloads repo_commits repo_releases repo_tags repo_branches repo_packages repo_deployments /rlkamalapurkar/bodeplot" href="/rlkamalapurkar/bodeplot">
+ Code
+</a> </li>
+ <li data-menu-item="i1issues-tab" hidden>
+ <a role="menuitem" class="js-selected-navigation-item dropdown-item" data-selected-links="repo_issues repo_labels repo_milestones /rlkamalapurkar/bodeplot/issues" href="/rlkamalapurkar/bodeplot/issues">
+ Issues
+</a> </li>
+ <li data-menu-item="i2pull-requests-tab" hidden>
+ <a role="menuitem" class="js-selected-navigation-item dropdown-item" data-selected-links="repo_pulls checks /rlkamalapurkar/bodeplot/pulls" href="/rlkamalapurkar/bodeplot/pulls">
+ Pull requests
+</a> </li>
+ <li data-menu-item="i3actions-tab" hidden>
+ <a role="menuitem" class="js-selected-navigation-item dropdown-item" data-selected-links="repo_actions /rlkamalapurkar/bodeplot/actions" href="/rlkamalapurkar/bodeplot/actions">
+ Actions
+</a> </li>
+ <li data-menu-item="i4projects-tab" hidden>
+ <a role="menuitem" class="js-selected-navigation-item dropdown-item" data-selected-links="repo_projects new_repo_project repo_project /rlkamalapurkar/bodeplot/projects" href="/rlkamalapurkar/bodeplot/projects">
+ Projects
+</a> </li>
+ <li data-menu-item="i5wiki-tab" hidden>
+ <a role="menuitem" class="js-selected-navigation-item dropdown-item" data-selected-links="repo_wiki /rlkamalapurkar/bodeplot/wiki" href="/rlkamalapurkar/bodeplot/wiki">
+ Wiki
+</a> </li>
+ <li data-menu-item="i6security-tab" hidden>
+ <a role="menuitem" class="js-selected-navigation-item dropdown-item" data-selected-links="security overview alerts policy token_scanning code_scanning /rlkamalapurkar/bodeplot/security" href="/rlkamalapurkar/bodeplot/security">
+ Security
+</a> </li>
+ <li data-menu-item="i7insights-tab" hidden>
+ <a role="menuitem" class="js-selected-navigation-item dropdown-item" data-selected-links="repo_graphs repo_contributors dependency_graph dependabot_updates pulse people community /rlkamalapurkar/bodeplot/pulse" href="/rlkamalapurkar/bodeplot/pulse">
+ Insights
+</a> </li>
+ <li data-menu-item="i8settings-tab" hidden>
+ <a role="menuitem" class="js-selected-navigation-item dropdown-item" data-selected-links="repo_settings repo_branch_settings collaborators hooks integration_installations repo_keys_settings issue_template_editor secrets_settings_actions secrets_settings_codespaces secrets_settings_dependabot security_analysis key_links_settings repo_actions_settings notifications repository_actions_settings_runners repository_environments interaction_limits repository_actions_settings_general repository_actions_settings_add_new_runner repo_pages_settings repo_announcements repo_protected_tags_settings code_review_limits /rlkamalapurkar/bodeplot/settings" href="/rlkamalapurkar/bodeplot/settings">
+ Settings
+</a> </li>
+ </ul>
+</details-menu>
+</details></div>
+</nav>
+
+
+
+ </div>
+
+
+
+ <turbo-frame id="repo-content-turbo-frame" target="_top" data-turbo-action="advance" class="">
+ <div id="repo-content-pjax-container" class="repository-content " >
+ <a href="https://github.dev/" class="d-none js-github-dev-shortcut" data-hotkey=".">Open in github.dev</a>
+ <a href="https://github.dev/" class="d-none js-github-dev-new-tab-shortcut" data-hotkey="Shift+.,Shift+&gt;,&gt;" target="_blank">Open in a new github.dev tab</a>
+
+
+
+
+
+
+ <div class="clearfix container-xl px-3 px-md-4 px-lg-5 mt-4">
+
+
+<div data-test-selector="blob-container">
+
+
+
+
+
+
+
+
+<a class="d-none js-permalink-shortcut" data-hotkey="y" href="/rlkamalapurkar/bodeplot/blob/3746d1613a5eea9f1e26d4cf5bcce954068463f3/bodeplot.ins">Permalink</a>
+
+<div class="d-flex flex-items-start flex-shrink-0 pb-3 flex-wrap flex-md-nowrap flex-justify-between flex-md-justify-start">
+
+<div class="position-relative">
+ <details
+ class="js-branch-select-menu details-reset details-overlay mr-0 mb-0 "
+ id="branch-select-menu"
+ data-hydro-click-payload="{&quot;event_type&quot;:&quot;repository.click&quot;,&quot;payload&quot;:{&quot;target&quot;:&quot;REFS_SELECTOR_MENU&quot;,&quot;repository_id&quot;:418699104,&quot;originating_url&quot;:&quot;https://github.com/rlkamalapurkar/bodeplot/blob/main/bodeplot.ins&quot;,&quot;user_id&quot;:30264720}}" data-hydro-click-hmac="3677b34ccf9cbeb77d77f5171057dc5757e09cedaa0b58d70e9572f47e8d310e">
+ <summary class="btn css-truncate"
+ data-hotkey="w"
+ title="Switch branches or tags">
+ <svg text="gray" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-git-branch">
+ <path fill-rule="evenodd" d="M11.75 2.5a.75.75 0 100 1.5.75.75 0 000-1.5zm-2.25.75a2.25 2.25 0 113 2.122V6A2.5 2.5 0 0110 8.5H6a1 1 0 00-1 1v1.128a2.251 2.251 0 11-1.5 0V5.372a2.25 2.25 0 111.5 0v1.836A2.492 2.492 0 016 7h4a1 1 0 001-1v-.628A2.25 2.25 0 019.5 3.25zM4.25 12a.75.75 0 100 1.5.75.75 0 000-1.5zM3.5 3.25a.75.75 0 111.5 0 .75.75 0 01-1.5 0z"></path>
+</svg>
+ <span class="css-truncate-target" data-menu-button>main</span>
+ <span class="dropdown-caret"></span>
+ </summary>
+
+
+<div class="SelectMenu">
+ <div class="SelectMenu-modal">
+ <header class="SelectMenu-header">
+ <span class="SelectMenu-title">Switch branches/tags</span>
+ <button class="SelectMenu-closeButton" type="button" data-toggle-for="branch-select-menu"><svg aria-label="Close menu" aria-hidden="false" role="img" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x">
+ <path fill-rule="evenodd" d="M3.72 3.72a.75.75 0 011.06 0L8 6.94l3.22-3.22a.75.75 0 111.06 1.06L9.06 8l3.22 3.22a.75.75 0 11-1.06 1.06L8 9.06l-3.22 3.22a.75.75 0 01-1.06-1.06L6.94 8 3.72 4.78a.75.75 0 010-1.06z"></path>
+</svg></button>
+ </header>
+
+ <input-demux data-action="tab-container-change:input-demux#storeInput tab-container-changed:input-demux#updateInput">
+ <tab-container class="d-flex flex-column js-branches-tags-tabs" style="min-height: 0;">
+ <div class="SelectMenu-filter">
+ <input data-target="input-demux.source"
+ id="context-commitish-filter-field"
+ class="SelectMenu-input form-control"
+ aria-owns="ref-list-branches"
+ data-controls-ref-menu-id="ref-list-branches"
+ autofocus
+ autocomplete="off"
+ aria-label="Find or create a branch…"
+ placeholder="Find or create a branch…"
+ type="text"
+ >
+ </div>
+
+ <div class="SelectMenu-tabs" role="tablist" data-target="input-demux.control" >
+ <button class="SelectMenu-tab" type="button" role="tab" aria-selected="true">Branches</button>
+ <button class="SelectMenu-tab" type="button" role="tab">Tags</button>
+ </div>
+
+ <div role="tabpanel" id="ref-list-branches" data-filter-placeholder="Find or create a branch…" tabindex="" class="d-flex flex-column flex-auto overflow-auto">
+ <ref-selector
+ type="branch"
+ data-targets="input-demux.sinks"
+ data-action="
+ input-entered:ref-selector#inputEntered
+ tab-selected:ref-selector#tabSelected
+ focus-list:ref-selector#focusFirstListMember
+ "
+ query-endpoint="/rlkamalapurkar/bodeplot/refs"
+ can-create
+ cache-key="v0:1659311748.791003"
+ current-committish="bWFpbg=="
+ default-branch="bWFpbg=="
+ name-with-owner="cmxrYW1hbGFwdXJrYXIvYm9kZXBsb3Q="
+ prefetch-on-mouseover
+ >
+
+ <template data-target="ref-selector.fetchFailedTemplate">
+ <div class="SelectMenu-message" data-index="{{ index }}">Could not load branches</div>
+ </template>
+
+ <template data-target="ref-selector.noMatchTemplate">
+ <create-repo-from-selector
+ check-tag-name-exists-path="/rlkamalapurkar/bodeplot/branches/check_tag_name_exists"
+ >
+ <!-- '"` --><!-- </textarea></xmp> --></option></form><form data-turbo="false" action="/rlkamalapurkar/bodeplot/branches" accept-charset="UTF-8" method="post"><input type="hidden" name="authenticity_token" value="ww1zb1eqIBkXE8aApucf4gXYPWidYddy55h9tOUJwC-xhi0OKPD54EvCKyOiT9w3R8N5d0_USjBWZCUGhIM7ew" />
+ <input data-target="create-repo-from-selector.refName" type="hidden" name="name" value="{{ refName }}">
+ <input type="hidden" name="branch" value="main">
+ <input type="hidden" name="path_binary" value="Ym9kZXBsb3QuaW5z">
+
+ <button
+ class="SelectMenu-item wb-break-word"
+ type="submit"
+ role="menuitem"
+ data-index="{{ index }}"
+ data-action="click:create-repo-from-selector#createBranch"
+ data-hydro-click="{&quot;event_type&quot;:&quot;repository.click&quot;,&quot;payload&quot;:{&quot;target&quot;:&quot;REFS_SELECTOR_MENU_CREATE_BRANCH&quot;,&quot;repository_id&quot;:418699104,&quot;ref_name&quot;:&quot;{{ refName }}&quot;,&quot;originating_url&quot;:&quot;https://github.com/rlkamalapurkar/bodeplot/blob/main/bodeplot.ins&quot;,&quot;user_id&quot;:30264720}}" data-hydro-click-hmac="8fd40af2f6cd16fcf6eec3843b28a8d976aeed65c137a34bfce860387c1fa160">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-git-branch SelectMenu-icon flex-self-baseline">
+ <path fill-rule="evenodd" d="M11.75 2.5a.75.75 0 100 1.5.75.75 0 000-1.5zm-2.25.75a2.25 2.25 0 113 2.122V6A2.5 2.5 0 0110 8.5H6a1 1 0 00-1 1v1.128a2.251 2.251 0 11-1.5 0V5.372a2.25 2.25 0 111.5 0v1.836A2.492 2.492 0 016 7h4a1 1 0 001-1v-.628A2.25 2.25 0 019.5 3.25zM4.25 12a.75.75 0 100 1.5.75.75 0 000-1.5zM3.5 3.25a.75.75 0 111.5 0 .75.75 0 01-1.5 0z"></path>
+</svg>
+ <div>
+ <span class="text-bold">Create branch: {{ refName }}</span>
+ <span class="color-fg-muted">from ‘main’</span>
+ <input type="hidden" value="8vvP-jJwZ2zW2NYPfv39InIe2xFCZ08rdpyobok87vco0LpMhqp_1U6cRjepzfizTq1s65KXhIACuWFkowwTQQ" data-csrf="true" data-target="create-repo-from-selector.checkTagNameExistsPathCsrf" />
+ </div>
+ </button>
+</form> </create-repo-from-selector>
+</template>
+
+
+ <div data-target="ref-selector.listContainer" role="menu" class="SelectMenu-list " data-turbo-frame="repo-content-turbo-frame">
+ <div class="SelectMenu-loading pt-3 pb-0 overflow-hidden" aria-label="Menu is loading">
+ <svg style="box-sizing: content-box; color: var(--color-icon-primary);" width="32" height="32" viewBox="0 0 16 16" fill="none" data-view-component="true" class="anim-rotate">
+ <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" />
+ <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke" />
+</svg>
+ </div>
+ </div>
+
+
+
+<template data-target="ref-selector.itemTemplate">
+ <a href="https://github.com/rlkamalapurkar/bodeplot/blob/{{ urlEncodedRefName }}/bodeplot.ins" class="SelectMenu-item" role="menuitemradio" rel="nofollow" aria-checked="{{ isCurrent }}" data-index="{{ index }}" >
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check SelectMenu-icon SelectMenu-icon--check">
+ <path fill-rule="evenodd" d="M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z"></path>
+</svg>
+ <span class="flex-1 css-truncate css-truncate-overflow {{ isFilteringClass }}">{{ refName }}</span>
+ <span hidden="{{ isNotDefault }}" class="Label Label--secondary flex-self-start">default</span>
+ </a>
+</template>
+
+
+ <footer class="SelectMenu-footer"><a href="/rlkamalapurkar/bodeplot/branches">View all branches</a></footer>
+ </ref-selector>
+
+ </div>
+
+ <div role="tabpanel" id="tags-menu" data-filter-placeholder="Find a tag" tabindex="" hidden class="d-flex flex-column flex-auto overflow-auto">
+ <ref-selector
+ type="tag"
+ data-action="
+ input-entered:ref-selector#inputEntered
+ tab-selected:ref-selector#tabSelected
+ focus-list:ref-selector#focusFirstListMember
+ "
+ data-targets="input-demux.sinks"
+ query-endpoint="/rlkamalapurkar/bodeplot/refs"
+ cache-key="v0:1659311748.791003"
+ current-committish="bWFpbg=="
+ default-branch="bWFpbg=="
+ name-with-owner="cmxrYW1hbGFwdXJrYXIvYm9kZXBsb3Q="
+ >
+
+ <template data-target="ref-selector.fetchFailedTemplate">
+ <div class="SelectMenu-message" data-index="{{ index }}">Could not load tags</div>
+ </template>
+
+ <template data-target="ref-selector.noMatchTemplate">
+ <div class="SelectMenu-message" data-index="{{ index }}">Nothing to show</div>
+ </template>
+
+
+
+<template data-target="ref-selector.itemTemplate">
+ <a href="https://github.com/rlkamalapurkar/bodeplot/blob/{{ urlEncodedRefName }}/bodeplot.ins" class="SelectMenu-item" role="menuitemradio" rel="nofollow" aria-checked="{{ isCurrent }}" data-index="{{ index }}" >
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check SelectMenu-icon SelectMenu-icon--check">
+ <path fill-rule="evenodd" d="M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z"></path>
+</svg>
+ <span class="flex-1 css-truncate css-truncate-overflow {{ isFilteringClass }}">{{ refName }}</span>
+ <span hidden="{{ isNotDefault }}" class="Label Label--secondary flex-self-start">default</span>
+ </a>
+</template>
+
+
+ <div data-target="ref-selector.listContainer" role="menu" class="SelectMenu-list" data-turbo-frame="repo-content-turbo-frame">
+ <div class="SelectMenu-loading pt-3 pb-0 overflow-hidden" aria-label="Menu is loading">
+ <svg style="box-sizing: content-box; color: var(--color-icon-primary);" width="32" height="32" viewBox="0 0 16 16" fill="none" data-view-component="true" class="anim-rotate">
+ <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" />
+ <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke" />
+</svg>
+ </div>
+ </div>
+ <footer class="SelectMenu-footer"><a href="/rlkamalapurkar/bodeplot/tags">View all tags</a></footer>
+ </ref-selector>
+ </div>
+ </tab-container>
+ </input-demux>
+ </div>
+</div>
+
+ </details>
+
+</div>
+
+
+<div class="Overlay--hidden Overlay-backdrop--center" data-modal-dialog-overlay>
+ <modal-dialog role="dialog" id="warn-tag-match-create-branch-dialog" aria-modal="true" aria-labelledby="warn-tag-match-create-branch-dialog-header" data-view-component="true" class="Overlay Overlay--width-large Overlay--height-auto Overlay--motion-scaleFade">
+ <header class="Overlay-header Overlay-header--large Overlay-header--divided">
+ <div class="Overlay-headerContentWrap">
+ <div class="Overlay-titleWrap">
+ <h1 id="warn-tag-match-create-branch-dialog-header" class="Overlay-title">Name already in use</h1>
+ </div>
+ <div class="Overlay-actionWrap">
+ <button data-close-dialog-id="warn-tag-match-create-branch-dialog" aria-label="Close" type="button" data-view-component="true" class="close-button Overlay-closeButton"><svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x">
+ <path fill-rule="evenodd" d="M3.72 3.72a.75.75 0 011.06 0L8 6.94l3.22-3.22a.75.75 0 111.06 1.06L9.06 8l3.22 3.22a.75.75 0 11-1.06 1.06L8 9.06l-3.22 3.22a.75.75 0 01-1.06-1.06L6.94 8 3.72 4.78a.75.75 0 010-1.06z"></path>
+</svg></button>
+ </div>
+ </div>
+ </header>
+ <div class="Overlay-body ">
+
+ <div data-view-component="true"> A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
+</div>
+
+ </div>
+ <footer class="Overlay-footer Overlay-footer--alignEnd">
+ <button data-close-dialog-id="warn-tag-match-create-branch-dialog" type="button" data-view-component="true" class="btn"> Cancel
+</button>
+ <button data-submit-dialog-id="warn-tag-match-create-branch-dialog" type="button" data-view-component="true" class="btn-danger btn"> Create
+</button>
+ </footer>
+</modal-dialog></div>
+
+
+ <h2 id="blob-path" class="breadcrumb flex-auto flex-self-center min-width-0 text-normal mx-2 width-full width-md-auto flex-order-1 flex-md-order-none mt-3 mt-md-0">
+ <span class="js-repo-root text-bold"><span class="js-path-segment d-inline-block wb-break-all"><a data-turbo-frame="repo-content-turbo-frame" href="/rlkamalapurkar/bodeplot"><span>bodeplot</span></a></span></span><span class="separator">/</span><strong class="final-path">bodeplot.ins</strong>
+ </h2>
+ <a href="/rlkamalapurkar/bodeplot/find/main" data-pjax="" data-hotkey="t" data-view-component="true" class="btn mr-2 d-none d-md-block"> Go to file
+</a>
+ <details id="blob-more-options-details" data-view-component="true" class="details-overlay details-reset position-relative">
+ <summary role="button" data-view-component="true" class="btn"> <svg aria-label="More options" role="img" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-kebab-horizontal">
+ <path d="M8 9a1.5 1.5 0 100-3 1.5 1.5 0 000 3zM1.5 9a1.5 1.5 0 100-3 1.5 1.5 0 000 3zm13 0a1.5 1.5 0 100-3 1.5 1.5 0 000 3z"></path>
+</svg>
+</summary>
+ <div data-view-component="true"> <ul class="dropdown-menu dropdown-menu-sw">
+ <li class="d-block d-md-none">
+ <a class="dropdown-item d-flex flex-items-baseline" data-hydro-click="{&quot;event_type&quot;:&quot;repository.click&quot;,&quot;payload&quot;:{&quot;target&quot;:&quot;FIND_FILE_BUTTON&quot;,&quot;repository_id&quot;:418699104,&quot;originating_url&quot;:&quot;https://github.com/rlkamalapurkar/bodeplot/blob/main/bodeplot.ins&quot;,&quot;user_id&quot;:30264720}}" data-hydro-click-hmac="1961b18d19552ce6c6f9b726b49b3222e21cf521d76a2ee8d57d1f014ea15585" data-ga-click="Repository, find file, location:repo overview" data-hotkey="t" href="/rlkamalapurkar/bodeplot/find/main">
+ <span class="flex-auto">Go to file</span>
+ <span class="text-small color-fg-muted" aria-hidden="true">T</span>
+</a> </li>
+ <li data-toggle-for="blob-more-options-details">
+ <button data-toggle-for="jumpto-line-details-dialog" type="button" data-view-component="true" class="dropdown-item btn-link"> <span class="d-flex flex-items-baseline">
+ <span class="flex-auto">Go to line</span>
+ <span class="text-small color-fg-muted" aria-hidden="true">L</span>
+ </span>
+</button> </li>
+ <li class="dropdown-divider" role="none"></li>
+ <li>
+ <clipboard-copy data-toggle-for="blob-more-options-details" aria-label="Copy path" value="bodeplot.ins" data-view-component="true" class="dropdown-item cursor-pointer">
+
+ Copy path
+
+</clipboard-copy> </li>
+ <li>
+ <clipboard-copy data-toggle-for="blob-more-options-details" aria-label="Copy permalink" value="https://github.com/rlkamalapurkar/bodeplot/blob/3746d1613a5eea9f1e26d4cf5bcce954068463f3/bodeplot.ins" data-view-component="true" class="dropdown-item cursor-pointer">
+
+ <span class="d-flex flex-items-baseline">
+ <span class="flex-auto">Copy permalink</span>
+ </span>
+
+</clipboard-copy> </li>
+ </ul>
+</div>
+</details></div>
+
+
+
+
+
+ <div id="spoof-warning" class="mt-0 pb-3" hidden aria-hidden>
+ <div data-view-component="true" class="flash flash-warn mt-0 clearfix">
+
+
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert float-left mt-1">
+ <path fill-rule="evenodd" d="M8.22 1.754a.25.25 0 00-.44 0L1.698 13.132a.25.25 0 00.22.368h12.164a.25.25 0 00.22-.368L8.22 1.754zm-1.763-.707c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0114.082 15H1.918a1.75 1.75 0 01-1.543-2.575L6.457 1.047zM9 11a1 1 0 11-2 0 1 1 0 012 0zm-.25-5.25a.75.75 0 00-1.5 0v2.5a.75.75 0 001.5 0v-2.5z"></path>
+</svg>
+
+ <div class="overflow-hidden">This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.</div>
+
+
+
+</div></div>
+
+ <include-fragment src="/rlkamalapurkar/bodeplot/spoofed_commit_check/3746d1613a5eea9f1e26d4cf5bcce954068463f3" data-test-selector="spoofed-commit-check"></include-fragment>
+
+ <div class="Box d-flex flex-column flex-shrink-0 mb-3">
+ <include-fragment src="/rlkamalapurkar/bodeplot/contributors/main/bodeplot.ins" class="commit-loader">
+ <div class="Box-header d-flex flex-items-center">
+ <div class="Skeleton avatar avatar-user flex-shrink-0 ml-n1 mr-n1 mt-n1 mb-n1" style="width:24px;height:24px;"></div>
+ <div class="Skeleton Skeleton--text col-5 ml-2">&nbsp;</div>
+ </div>
+
+ <div class="Box-body d-flex flex-items-center" >
+ <div class="Skeleton Skeleton--text col-1">&nbsp;</div>
+ <span class="color-fg-danger h6 loader-error">Cannot retrieve contributors at this time</span>
+ </div>
+</include-fragment></div>
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <div data-target="readme-toc.content" class="Box mt-3 position-relative">
+
+ <div
+ class="Box-header js-blob-header py-2 pr-2 d-flex flex-shrink-0 flex-md-row flex-items-center"
+
+ >
+
+
+ <div class="text-mono f6 flex-auto pr-3 flex-order-2 flex-md-order-1">
+
+ 41 lines (41 sloc)
+ <span class="file-info-divider"></span>
+ 1.38 KB
+ </div>
+
+ <div class="d-flex py-1 py-md-0 flex-auto flex-order-1 flex-md-order-2 flex-sm-grow-0 flex-justify-between hide-sm hide-md">
+
+
+ <div class="BtnGroup">
+ <a data-permalink-href="/rlkamalapurkar/bodeplot/raw/3746d1613a5eea9f1e26d4cf5bcce954068463f3/bodeplot.ins" href="/rlkamalapurkar/bodeplot/raw/main/bodeplot.ins" id="raw-url" data-view-component="true" class="js-permalink-replaceable-link btn-sm btn BtnGroup-item"> Raw
+</a> <a data-permalink-href="/rlkamalapurkar/bodeplot/blame/3746d1613a5eea9f1e26d4cf5bcce954068463f3/bodeplot.ins" href="/rlkamalapurkar/bodeplot/blame/main/bodeplot.ins" data-hotkey="b" data-view-component="true" class="js-update-url-with-hash js-permalink-replaceable-link btn-sm btn BtnGroup-item"> Blame
+</a> </div>
+
+ <div class="d-flex">
+
+<div class="ml-1" data-test-selector="edit-dropdown-menu-component">
+ <form class="BtnGroup-parent js-update-url-with-hash " data-turbo="false" action="/rlkamalapurkar/bodeplot/edit/main/bodeplot.ins" accept-charset="UTF-8" method="post"><input type="hidden" name="authenticity_token" value="HGwTMyQRCUP5PzuVKajdA7WGAMfIiEDJUsU3vY4XEb-xuajbpcadnujx2jZNwvQqMza4e9uYRdSuTGitVak9dw" autocomplete="off" />
+ <button title="Edit this file" data-hotkey="e" data-disable-with="" data-test-selector="edit-icon-button" type="submit" data-view-component="true" class="btn-sm BtnGroup-item btn"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-pencil">
+ <path fill-rule="evenodd" d="M11.013 1.427a1.75 1.75 0 012.474 0l1.086 1.086a1.75 1.75 0 010 2.474l-8.61 8.61c-.21.21-.47.364-.756.445l-3.251.93a.75.75 0 01-.927-.928l.929-3.25a1.75 1.75 0 01.445-.758l8.61-8.61zm1.414 1.06a.25.25 0 00-.354 0L10.811 3.75l1.439 1.44 1.263-1.263a.25.25 0 000-.354l-1.086-1.086zM11.189 6.25L9.75 4.81l-6.286 6.287a.25.25 0 00-.064.108l-.558 1.953 1.953-.558a.249.249 0 00.108-.064l6.286-6.286z"></path>
+</svg>
+</button></form>
+ <details class="details-reset details-overlay select-menu BtnGroup-parent d-inline-block position-relative">
+ <summary data-disable-invalid="" data-disable-with="" data-dropdown-tracking="{&quot;type&quot;:&quot;blob_edit_dropdown.more_options_click&quot;,&quot;context&quot;:{&quot;repository_id&quot;:418699104,&quot;actor_id&quot;:30264720,&quot;github_dev_enabled&quot;:true,&quot;edit_enabled&quot;:true,&quot;small_screen&quot;:false}}" aria-label="Select additional options" data-view-component="true" class="js-blob-dropdown-click select-menu-button btn-sm btn BtnGroup-item float-none px-2">
+</summary> <div class="SelectMenu right-0">
+ <div class="SelectMenu-modal width-full">
+ <div class="SelectMenu-list SelectMenu-list--borderless py-2">
+ <form class="SelectMenu-item js-update-url-with-hash " data-turbo="false" action="/rlkamalapurkar/bodeplot/edit/main/bodeplot.ins" accept-charset="UTF-8" method="post"><input type="hidden" name="authenticity_token" value="Aroqb6jUcYH0so90G_qw9TUIZAJalMt-HVExoez7Yxuvb5GHKQPlXOV8btd_kJncs7jcvkmEzmPh2G6xN0VP0w" autocomplete="off" />
+ <button title="Edit this file" data-test-selector="edit-text-button" type="submit" data-view-component="true" class="btn-invisible btn width-full d-flex flex-justify-between color-fg-default text-normal p-0"> <div class="mr-5">Edit this file</div>
+ <div class="color-fg-muted">E</div>
+</button></form>
+ <a aria-label="Open this file in github.dev" data-test-selector="github-dev-link" data-dropdown-tracking="{&quot;type&quot;:&quot;blob_edit_dropdown.dev_link_click&quot;,&quot;context&quot;:{&quot;repository_id&quot;:418699104,&quot;actor_id&quot;:30264720,&quot;edit_enabled&quot;:true,&quot;small_screen&quot;:false}}" href="https://github.dev/" data-view-component="true" class="SelectMenu-item js-github-dev-shortcut js-blob-dropdown-click width-full d-flex flex-justify-between color-fg-default f5 text-normal">
+ <div class="mr-5 no-wrap">Open in github.dev</div>
+ <div class="color-fg-muted">.</div>
+</a>
+ <a data-platforms="windows,mac" data-test-selector="github-desktop-link" aria-label="Open this file in GitHub Desktop" href="x-github-client://openRepo/https://github.com/rlkamalapurkar/bodeplot?branch=main&amp;filepath=bodeplot.ins" data-view-component="true" class="SelectMenu-item no-wrap js-remove-unless-platform width-full text-normal color-fg-default f5">
+ Open in GitHub Desktop
+</a> </div>
+ </div>
+ </div>
+ </details>
+</div>
+
+
+
+<div data-test-selector="remote-clipboard-copy">
+ <remote-clipboard-copy class="d-inline-block btn-octicon" style="height: 26px" data-src="/rlkamalapurkar/bodeplot/raw/3746d1613a5eea9f1e26d4cf5bcce954068463f3/bodeplot.ins" data-action="click:remote-clipboard-copy#remoteCopy">
+
+
+ <span data-target="remote-clipboard-copy.idle"> <span class="tooltipped tooltipped-nw cursor-pointer" data-hydro-click="{&quot;event_type&quot;:&quot;repository.click&quot;,&quot;payload&quot;:{&quot;target&quot;:&quot;COPY_RAW_CONTENTS_BUTTON&quot;,&quot;repository_id&quot;:418699104,&quot;originating_url&quot;:&quot;https://github.com/rlkamalapurkar/bodeplot/blob/main/bodeplot.ins&quot;,&quot;user_id&quot;:30264720}}" data-hydro-click-hmac="52ec4934459c40e440931c5519915d103a19ef42502ff893f7f5987f3d01dd20" aria-label="Copy raw contents">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copy">
+ <path fill-rule="evenodd" d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 010 1.5h-1.5a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-1.5a.75.75 0 011.5 0v1.5A1.75 1.75 0 019.25 16h-7.5A1.75 1.75 0 010 14.25v-7.5z"></path><path fill-rule="evenodd" d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0114.25 11h-7.5A1.75 1.75 0 015 9.25v-7.5zm1.75-.25a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-7.5a.25.25 0 00-.25-.25h-7.5z"></path>
+</svg>
+</span></span>
+ <span data-target="remote-clipboard-copy.fetching" hidden="hidden"> <svg style="box-sizing: content-box; color: var(--color-icon-primary);" width="16" height="16" viewBox="0 0 16 16" fill="none" data-view-component="true" class="anim-rotate">
+ <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" />
+ <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke" />
+</svg>
+</span>
+ <span data-target="remote-clipboard-copy.success" hidden="hidden"> <span class="tooltipped tooltipped-nw" aria-label="Copied!">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check color-fg-success">
+ <path fill-rule="evenodd" d="M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z"></path>
+</svg>
+ </span>
+</span>
+ <span data-target="remote-clipboard-copy.error" hidden="hidden"> <span class="tooltipped tooltipped-nw" aria-label="Something went wrong. Try again.">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert color-fg-attention">
+ <path fill-rule="evenodd" d="M8.22 1.754a.25.25 0 00-.44 0L1.698 13.132a.25.25 0 00.22.368h12.164a.25.25 0 00.22-.368L8.22 1.754zm-1.763-.707c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0114.082 15H1.918a1.75 1.75 0 01-1.543-2.575L6.457 1.047zM9 11a1 1 0 11-2 0 1 1 0 012 0zm-.25-5.25a.75.75 0 00-1.5 0v2.5a.75.75 0 001.5 0v-2.5z"></path>
+</svg>
+ </span>
+</span>
+</remote-clipboard-copy></div>
+
+
+ <!-- '"` --><!-- </textarea></xmp> --></option></form><form class="inline-form" data-turbo="false" action="/rlkamalapurkar/bodeplot/delete/main/bodeplot.ins" accept-charset="UTF-8" method="post"><input type="hidden" name="authenticity_token" value="_uWY6NykTZtLKm7ZXgxJcycM-3nBklwpxm8nZAgyD5wx4uY6bysqVtDFFjWBVHScK0CTBoAZIRAdTv2hZtNYbw" />
+ <button class="btn-octicon btn-octicon-danger tooltipped tooltipped-nw" type="submit"
+ aria-label="Delete this file" data-disable-with>
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-trash">
+ <path fill-rule="evenodd" d="M6.5 1.75a.25.25 0 01.25-.25h2.5a.25.25 0 01.25.25V3h-3V1.75zm4.5 0V3h2.25a.75.75 0 010 1.5H2.75a.75.75 0 010-1.5H5V1.75C5 .784 5.784 0 6.75 0h2.5C10.216 0 11 .784 11 1.75zM4.496 6.675a.75.75 0 10-1.492.15l.66 6.6A1.75 1.75 0 005.405 15h5.19c.9 0 1.652-.681 1.741-1.576l.66-6.6a.75.75 0 00-1.492-.149l-.66 6.6a.25.25 0 01-.249.225h-5.19a.25.25 0 01-.249-.225l-.66-6.6z"></path>
+</svg>
+ </button>
+</form> </div>
+ </div>
+
+ <div class="d-flex hide-lg hide-xl flex-order-2 flex-grow-0">
+ <details class="dropdown details-reset details-overlay d-inline-block">
+ <summary
+ class="js-blob-dropdown-click btn-octicon"
+ aria-haspopup="true"
+ aria-label="possible actions"
+ data-test-selector="small-screen-more-options"
+ data-dropdown-tracking="{&quot;type&quot;:&quot;blob_edit_dropdown.more_options_click&quot;,&quot;context&quot;:{&quot;repository_id&quot;:418699104,&quot;actor_id&quot;:30264720,&quot;github_dev_enabled&quot;:true,&quot;edit_enabled&quot;:true,&quot;small_screen&quot;:true}}"
+ >
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-kebab-horizontal">
+ <path d="M8 9a1.5 1.5 0 100-3 1.5 1.5 0 000 3zM1.5 9a1.5 1.5 0 100-3 1.5 1.5 0 000 3zm13 0a1.5 1.5 0 100-3 1.5 1.5 0 000 3z"></path>
+</svg>
+ </summary>
+
+ <ul class="dropdown-menu dropdown-menu-sw" style="width: 175px">
+ <li>
+ <a class="dropdown-item tooltipped tooltipped-nw js-remove-unless-platform"
+ data-platforms="windows,mac"
+ href="x-github-client://openRepo/https://github.com/rlkamalapurkar/bodeplot?branch=main&amp;filepath=bodeplot.ins">
+ Open with Desktop
+ </a>
+ </li>
+ <li>
+ <a class="dropdown-item" href="/rlkamalapurkar/bodeplot/raw/main/bodeplot.ins">
+ View raw
+ </a>
+ </li>
+ <li>
+ <remote-clipboard-copy class="dropdown-item" data-src="/rlkamalapurkar/bodeplot/raw/main/bodeplot.ins" data-action="click:remote-clipboard-copy#remoteCopy">
+
+
+ <span data-target="remote-clipboard-copy.idle"> <span class="cursor-pointer" data-hydro-click="{&quot;event_type&quot;:&quot;repository.click&quot;,&quot;payload&quot;:{&quot;target&quot;:&quot;COPY_RAW_CONTENTS_BUTTON&quot;,&quot;repository_id&quot;:418699104,&quot;originating_url&quot;:&quot;https://github.com/rlkamalapurkar/bodeplot/blob/main/bodeplot.ins&quot;,&quot;user_id&quot;:30264720}}" data-hydro-click-hmac="52ec4934459c40e440931c5519915d103a19ef42502ff893f7f5987f3d01dd20">
+ Copy raw contents
+</span></span>
+ <span data-target="remote-clipboard-copy.fetching" hidden="hidden"> Copy raw contents
+ <span class="d-inline-block position-relative" style="top: 3px">
+ <svg aria-label="fetching contents…" style="box-sizing: content-box; color: var(--color-icon-primary);" width="16" height="16" viewBox="0 0 16 16" fill="none" data-view-component="true" class="anim-rotate">
+ <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" />
+ <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke" />
+</svg>
+ </span>
+</span>
+ <span data-target="remote-clipboard-copy.success" hidden="hidden"> Copy raw contents
+ <svg aria-label="Copied!" role="img" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check color-fg-success">
+ <path fill-rule="evenodd" d="M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z"></path>
+</svg>
+</span>
+ <span data-target="remote-clipboard-copy.error" hidden="hidden"> Copy raw contents
+ <svg aria-label="Something went wrong. Try again." role="img" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert color-fg-attention">
+ <path fill-rule="evenodd" d="M8.22 1.754a.25.25 0 00-.44 0L1.698 13.132a.25.25 0 00.22.368h12.164a.25.25 0 00.22-.368L8.22 1.754zm-1.763-.707c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0114.082 15H1.918a1.75 1.75 0 01-1.543-2.575L6.457 1.047zM9 11a1 1 0 11-2 0 1 1 0 012 0zm-.25-5.25a.75.75 0 00-1.5 0v2.5a.75.75 0 001.5 0v-2.5z"></path>
+</svg>
+</span>
+</remote-clipboard-copy> </li>
+ <li>
+ <a class="dropdown-item" href="/rlkamalapurkar/bodeplot/blame/main/bodeplot.ins">
+ View blame
+ </a>
+ </li>
+
+ <li class="dropdown-divider" role="none"></li>
+ <li>
+ <a class="dropdown-item" href="/rlkamalapurkar/bodeplot/edit/main/bodeplot.ins">Edit file</a>
+ </li>
+ <li>
+ <a class="dropdown-item js-github-dev-shortcut js-blob-dropdown-click" data-test-selector="small-screen-github-dev-link" data-dropdown-tracking="{&quot;type&quot;:&quot;blob_edit_dropdown.dev_link_click&quot;,&quot;context&quot;:{&quot;repository_id&quot;:418699104,&quot;actor_id&quot;:30264720,&quot;edit_enabled&quot;:true,&quot;small_screen&quot;:true}}" href="https://github.dev/">Open with github.dev</a>
+ </li>
+ <li>
+ <a class="dropdown-item menu-item-danger" href="/rlkamalapurkar/bodeplot/delete/main/bodeplot.ins">Delete file</a>
+ </li>
+ </ul>
+ </details>
+ </div>
+</div>
+
+
+
+ <div itemprop="text" class="Box-body p-0 blob-wrapper data type-tex gist-border-0">
+
+
+<div class="js-check-bidi js-blob-code-container blob-code-content">
+
+ <template class="js-file-alert-template">
+ <div data-view-component="true" class="flash flash-warn flash-full d-flex flex-items-center">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
+ <path fill-rule="evenodd" d="M8.22 1.754a.25.25 0 00-.44 0L1.698 13.132a.25.25 0 00.22.368h12.164a.25.25 0 00.22-.368L8.22 1.754zm-1.763-.707c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0114.082 15H1.918a1.75 1.75 0 01-1.543-2.575L6.457 1.047zM9 11a1 1 0 11-2 0 1 1 0 012 0zm-.25-5.25a.75.75 0 00-1.5 0v2.5a.75.75 0 001.5 0v-2.5z"></path>
+</svg>
+
+ <span>
+ This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
+ <a href="https://github.co/hiddenchars" target="_blank">Learn more about bidirectional Unicode characters</a>
+ </span>
+
+
+ <div data-view-component="true" class="flash-action"> <a href="{{ revealButtonHref }}" data-view-component="true" class="btn-sm btn"> Show hidden characters
+</a>
+</div>
+</div></template>
+<template class="js-line-alert-template">
+ <span aria-label="This line has hidden Unicode characters" data-view-component="true" class="line-alert tooltipped tooltipped-e">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
+ <path fill-rule="evenodd" d="M8.22 1.754a.25.25 0 00-.44 0L1.698 13.132a.25.25 0 00.22.368h12.164a.25.25 0 00.22-.368L8.22 1.754zm-1.763-.707c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0114.082 15H1.918a1.75 1.75 0 01-1.543-2.575L6.457 1.047zM9 11a1 1 0 11-2 0 1 1 0 012 0zm-.25-5.25a.75.75 0 00-1.5 0v2.5a.75.75 0 001.5 0v-2.5z"></path>
+</svg>
+</span></template>
+
+ <table data-hpc class="highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file" data-tab-size="8" data-paste-markdown-skip data-tagsearch-lang="TeX" data-tagsearch-path="bodeplot.ins">
+ <tr>
+ <td id="L1" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1"></td>
+ <td id="LC1" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>%</span></td>
+ </tr>
+ <tr>
+ <td id="L2" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2"></td>
+ <td id="LC2" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>% Copyright (C) 2021 by Rushikesh Kamalapurkar</span></td>
+ </tr>
+ <tr>
+ <td id="L3" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="3"></td>
+ <td id="LC3" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>%</span></td>
+ </tr>
+ <tr>
+ <td id="L4" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="4"></td>
+ <td id="LC4" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>% This file may be distributed and/or modified under the</span></td>
+ </tr>
+ <tr>
+ <td id="L5" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="5"></td>
+ <td id="LC5" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>% conditions of the LaTeX Project Public License, either</span></td>
+ </tr>
+ <tr>
+ <td id="L6" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="6"></td>
+ <td id="LC6" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>% version 1.3c of this license or (at your option) any later</span></td>
+ </tr>
+ <tr>
+ <td id="L7" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="7"></td>
+ <td id="LC7" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>% version. The latest version of this license is in:</span></td>
+ </tr>
+ <tr>
+ <td id="L8" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="8"></td>
+ <td id="LC8" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>%</span></td>
+ </tr>
+ <tr>
+ <td id="L9" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="9"></td>
+ <td id="LC9" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>% http://www.latex-project.org/lppl.txt</span></td>
+ </tr>
+ <tr>
+ <td id="L10" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="10"></td>
+ <td id="LC10" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>%</span></td>
+ </tr>
+ <tr>
+ <td id="L11" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="11"></td>
+ <td id="LC11" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>% and version 1.3c or later is part of all distributions of</span></td>
+ </tr>
+ <tr>
+ <td id="L12" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="12"></td>
+ <td id="LC12" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>% LaTeX version 2006/05/20 or later.</span></td>
+ </tr>
+ <tr>
+ <td id="L13" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="13"></td>
+ <td id="LC13" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>%</span></td>
+ </tr>
+ <tr>
+ <td id="L14" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="14"></td>
+ <td id="LC14" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\input</span> docstrip.tex</td>
+ </tr>
+ <tr>
+ <td id="L15" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="15"></td>
+ <td id="LC15" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\keepsilent</span></td>
+ </tr>
+ <tr>
+ <td id="L16" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="16"></td>
+ <td id="LC16" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\usedir</span>{tex/latex/bodeplot}</td>
+ </tr>
+ <tr>
+ <td id="L17" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="17"></td>
+ <td id="LC17" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\preamble</span></td>
+ </tr>
+ <tr>
+ <td id="L18" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="18"></td>
+ <td id="LC18" class="blob-code blob-code-inner js-file-line">This is a generated file.</td>
+ </tr>
+ <tr>
+ <td id="L19" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="19"></td>
+ <td id="LC19" class="blob-code blob-code-inner js-file-line">Copyright (C) 2021 by Rushikesh Kamalapurkar</td>
+ </tr>
+ <tr>
+ <td id="L20" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="20"></td>
+ <td id="LC20" class="blob-code blob-code-inner js-file-line">This file may be distributed and/or modified under the</td>
+ </tr>
+ <tr>
+ <td id="L21" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="21"></td>
+ <td id="LC21" class="blob-code blob-code-inner js-file-line">conditions of the LaTeX Project Public License, either</td>
+ </tr>
+ <tr>
+ <td id="L22" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="22"></td>
+ <td id="LC22" class="blob-code blob-code-inner js-file-line">version 1.3c of this license or (at your option) any later</td>
+ </tr>
+ <tr>
+ <td id="L23" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="23"></td>
+ <td id="LC23" class="blob-code blob-code-inner js-file-line">version. The latest version of this license is in:</td>
+ </tr>
+ <tr>
+ <td id="L24" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="24"></td>
+ <td id="LC24" class="blob-code blob-code-inner js-file-line">http://www.latex-project.org/lppl.txt</td>
+ </tr>
+ <tr>
+ <td id="L25" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="25"></td>
+ <td id="LC25" class="blob-code blob-code-inner js-file-line">and version 1.3c or later is part of all distributions of</td>
+ </tr>
+ <tr>
+ <td id="L26" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="26"></td>
+ <td id="LC26" class="blob-code blob-code-inner js-file-line">LaTeX version 2006/05/20 or later.</td>
+ </tr>
+ <tr>
+ <td id="L27" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="27"></td>
+ <td id="LC27" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\endpreamble</span></td>
+ </tr>
+ <tr>
+ <td id="L28" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="28"></td>
+ <td id="LC28" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\generate</span>{<span class="pl-c1">\file</span>{bodeplot.sty}{<span class="pl-c1">\from</span>{bodeplot.dtx}{package}}}</td>
+ </tr>
+ <tr>
+ <td id="L29" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="29"></td>
+ <td id="LC29" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\Msg</span>{*********************************************************}</td>
+ </tr>
+ <tr>
+ <td id="L30" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="30"></td>
+ <td id="LC30" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\Msg</span>{*}</td>
+ </tr>
+ <tr>
+ <td id="L31" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="31"></td>
+ <td id="LC31" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\Msg</span>{* To finish the installation you have to move the}</td>
+ </tr>
+ <tr>
+ <td id="L32" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="32"></td>
+ <td id="LC32" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\Msg</span>{* following file into a directory searched by TeX:}</td>
+ </tr>
+ <tr>
+ <td id="L33" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="33"></td>
+ <td id="LC33" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\Msg</span>{*}</td>
+ </tr>
+ <tr>
+ <td id="L34" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="34"></td>
+ <td id="LC34" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\Msg</span>{* bodeplot.sty}</td>
+ </tr>
+ <tr>
+ <td id="L35" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="35"></td>
+ <td id="LC35" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\Msg</span>{*}</td>
+ </tr>
+ <tr>
+ <td id="L36" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="36"></td>
+ <td id="LC36" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\Msg</span>{* To produce the documentation run the file bodeplot.dtx}</td>
+ </tr>
+ <tr>
+ <td id="L37" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="37"></td>
+ <td id="LC37" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\Msg</span>{* through LaTeX.}</td>
+ </tr>
+ <tr>
+ <td id="L38" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="38"></td>
+ <td id="LC38" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\Msg</span>{*}</td>
+ </tr>
+ <tr>
+ <td id="L39" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="39"></td>
+ <td id="LC39" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\Msg</span>{* Happy TeXing!}</td>
+ </tr>
+ <tr>
+ <td id="L40" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="40"></td>
+ <td id="LC40" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\Msg</span>{*********************************************************}</td>
+ </tr>
+ <tr>
+ <td id="L41" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="41"></td>
+ <td id="LC41" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\endbatchfile</span></td>
+ </tr>
+ </table>
+</div>
+
+ <details class="details-reset details-overlay BlobToolbar position-absolute js-file-line-actions dropdown d-none" aria-hidden="true">
+ <summary class="btn-octicon ml-0 px-2 p-0 color-bg-default border color-border-default rounded-2" aria-label="Inline file action toolbar">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-kebab-horizontal">
+ <path d="M8 9a1.5 1.5 0 100-3 1.5 1.5 0 000 3zM1.5 9a1.5 1.5 0 100-3 1.5 1.5 0 000 3zm13 0a1.5 1.5 0 100-3 1.5 1.5 0 000 3z"></path>
+</svg>
+ </summary>
+ <details-menu>
+
+ <ul class="BlobToolbar-dropdown dropdown-menu dropdown-menu-se ml-2 mt-2"
+ style="width:185px"
+ >
+ <li>
+ <clipboard-copy role="menuitem" class="dropdown-item" id="js-copy-lines" style="cursor:pointer;" aria-label="Copy lines">
+ Copy lines
+ </clipboard-copy>
+ </li>
+ <li>
+ <clipboard-copy role="menuitem" class="dropdown-item" id="js-copy-permalink" style="cursor:pointer;" aria-label="Copy permalink">
+ Copy permalink
+ </clipboard-copy>
+ </li>
+ <li><a class="dropdown-item js-update-url-with-hash" id="js-view-git-blame" role="menuitem" href="/rlkamalapurkar/bodeplot/blame/3746d1613a5eea9f1e26d4cf5bcce954068463f3/bodeplot.ins">View git blame</a></li>
+ <li><a class="dropdown-item" id="js-new-issue" role="menuitem" href="/rlkamalapurkar/bodeplot/issues/new">Reference in new issue</a></li>
+ </ul>
+ </details-menu>
+ </details>
+
+ </div>
+
+ </div>
+
+
+
+
+ <details class="details-reset details-overlay details-overlay-dark" id="jumpto-line-details-dialog">
+ <summary data-hotkey="l" aria-label="Jump to line"></summary>
+ <details-dialog class="Box Box--overlay d-flex flex-column anim-fade-in fast linejump" aria-label="Jump to line">
+ <!-- '"` --><!-- </textarea></xmp> --></option></form><form class="js-jump-to-line-form Box-body d-flex" data-turbo="false" action="" accept-charset="UTF-8" method="get">
+ <input class="form-control flex-auto mr-3 linejump-input js-jump-to-line-field" type="text" placeholder="Jump to line&hellip;" aria-label="Jump to line" autofocus>
+ <button data-close-dialog="" type="submit" data-view-component="true" class="btn"> Go
+</button>
+</form> </details-dialog>
+ </details>
+
+
+
+</div>
+
+ </div>
+
+
+ </div>
+
+ </turbo-frame>
+
+
+ </main>
+ </div>
+
+ </div>
+
+ <footer class="footer width-full container-xl p-responsive">
+ <h2 class='sr-only'>Footer</h2>
+
+ <div class="position-relative d-flex flex-items-center pb-2 f6 color-fg-muted border-top color-border-muted flex-column-reverse flex-lg-row flex-wrap flex-lg-nowrap mt-6 pt-6">
+ <div class="list-style-none d-flex flex-wrap col-0 col-lg-2 flex-justify-start flex-lg-justify-between mb-2 mb-lg-0">
+ <div class="mt-2 mt-lg-0 d-flex flex-items-center">
+ <a aria-label="Homepage" title="GitHub" class="footer-octicon mr-2" href="https://github.com">
+ <svg aria-hidden="true" height="24" viewBox="0 0 16 16" version="1.1" width="24" data-view-component="true" class="octicon octicon-mark-github">
+ <path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"></path>
+</svg>
+</a> <span>
+ &copy; 2022 GitHub, Inc.
+ </span>
+ </div>
+ </div>
+
+ <nav aria-label='footer' class="col-12 col-lg-8">
+ <h3 class='sr-only' id='sr-footer-heading'>Footer navigation</h3>
+ <ul class="list-style-none d-flex flex-wrap col-12 flex-justify-center flex-lg-justify-between mb-2 mb-lg-0" aria-labelledby='sr-footer-heading'>
+ <li class="mr-3 mr-lg-0"><a href="https://docs.github.com/en/github/site-policy/github-terms-of-service" data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to terms&quot;,&quot;label&quot;:&quot;text:terms&quot;}">Terms</a></li>
+ <li class="mr-3 mr-lg-0"><a href="https://docs.github.com/en/github/site-policy/github-privacy-statement" data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to privacy&quot;,&quot;label&quot;:&quot;text:privacy&quot;}">Privacy</a></li>
+ <li class="mr-3 mr-lg-0"><a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to security&quot;,&quot;label&quot;:&quot;text:security&quot;}" href="https://github.com/security">Security</a></li>
+ <li class="mr-3 mr-lg-0"><a href="https://www.githubstatus.com/" data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to status&quot;,&quot;label&quot;:&quot;text:status&quot;}">Status</a></li>
+ <li class="mr-3 mr-lg-0"><a data-ga-click="Footer, go to help, text:Docs" href="https://docs.github.com">Docs</a></li>
+ <li class="mr-3 mr-lg-0"><a href="https://support.github.com?tags=dotcom-footer" data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to contact&quot;,&quot;label&quot;:&quot;text:contact&quot;}">Contact GitHub</a></li>
+ <li class="mr-3 mr-lg-0"><a href="https://github.com/pricing" data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to Pricing&quot;,&quot;label&quot;:&quot;text:Pricing&quot;}">Pricing</a></li>
+ <li class="mr-3 mr-lg-0"><a href="https://docs.github.com" data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to api&quot;,&quot;label&quot;:&quot;text:api&quot;}">API</a></li>
+ <li class="mr-3 mr-lg-0"><a href="https://services.github.com" data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to training&quot;,&quot;label&quot;:&quot;text:training&quot;}">Training</a></li>
+ <li class="mr-3 mr-lg-0"><a href="https://github.blog" data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to blog&quot;,&quot;label&quot;:&quot;text:blog&quot;}">Blog</a></li>
+ <li><a data-ga-click="Footer, go to about, text:about" href="https://github.com/about">About</a></li>
+ </ul>
+ </nav>
+ </div>
+
+ <div class="d-flex flex-justify-center pb-6">
+ <span class="f6 color-fg-muted"></span>
+ </div>
+</footer>
+
+
+
+
+ <div id="ajax-error-message" class="ajax-error-message flash flash-error" hidden>
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
+ <path fill-rule="evenodd" d="M8.22 1.754a.25.25 0 00-.44 0L1.698 13.132a.25.25 0 00.22.368h12.164a.25.25 0 00.22-.368L8.22 1.754zm-1.763-.707c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0114.082 15H1.918a1.75 1.75 0 01-1.543-2.575L6.457 1.047zM9 11a1 1 0 11-2 0 1 1 0 012 0zm-.25-5.25a.75.75 0 00-1.5 0v2.5a.75.75 0 001.5 0v-2.5z"></path>
+</svg>
+ <button type="button" class="flash-close js-ajax-error-dismiss" aria-label="Dismiss error">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x">
+ <path fill-rule="evenodd" d="M3.72 3.72a.75.75 0 011.06 0L8 6.94l3.22-3.22a.75.75 0 111.06 1.06L9.06 8l3.22 3.22a.75.75 0 11-1.06 1.06L8 9.06l-3.22 3.22a.75.75 0 01-1.06-1.06L6.94 8 3.72 4.78a.75.75 0 010-1.06z"></path>
+</svg>
+ </button>
+ You can’t perform that action at this time.
+ </div>
+
+ <div class="js-stale-session-flash flash flash-warn flash-banner" hidden
+ >
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
+ <path fill-rule="evenodd" d="M8.22 1.754a.25.25 0 00-.44 0L1.698 13.132a.25.25 0 00.22.368h12.164a.25.25 0 00.22-.368L8.22 1.754zm-1.763-.707c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0114.082 15H1.918a1.75 1.75 0 01-1.543-2.575L6.457 1.047zM9 11a1 1 0 11-2 0 1 1 0 012 0zm-.25-5.25a.75.75 0 00-1.5 0v2.5a.75.75 0 001.5 0v-2.5z"></path>
+</svg>
+ <span class="js-stale-session-flash-signed-in" hidden>You signed in with another tab or window. <a href="">Reload</a> to refresh your session.</span>
+ <span class="js-stale-session-flash-signed-out" hidden>You signed out in another tab or window. <a href="">Reload</a> to refresh your session.</span>
+ </div>
+ <template id="site-details-dialog">
+ <details class="details-reset details-overlay details-overlay-dark lh-default color-fg-default hx_rsm" open>
+ <summary role="button" aria-label="Close dialog"></summary>
+ <details-dialog class="Box Box--overlay d-flex flex-column anim-fade-in fast hx_rsm-dialog hx_rsm-modal">
+ <button class="Box-btn-octicon m-0 btn-octicon position-absolute right-0 top-0" type="button" aria-label="Close dialog" data-close-dialog>
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x">
+ <path fill-rule="evenodd" d="M3.72 3.72a.75.75 0 011.06 0L8 6.94l3.22-3.22a.75.75 0 111.06 1.06L9.06 8l3.22 3.22a.75.75 0 11-1.06 1.06L8 9.06l-3.22 3.22a.75.75 0 01-1.06-1.06L6.94 8 3.72 4.78a.75.75 0 010-1.06z"></path>
+</svg>
+ </button>
+ <div class="octocat-spinner my-6 js-details-dialog-spinner"></div>
+ </details-dialog>
+ </details>
+</template>
+
+ <div class="Popover js-hovercard-content position-absolute" style="display: none; outline: none;" tabindex="0">
+ <div class="Popover-message Popover-message--bottom-left Popover-message--large Box color-shadow-large" style="width:360px;">
+ </div>
+</div>
+
+ <template id="snippet-clipboard-copy-button">
+ <div class="zeroclipboard-container position-absolute right-0 top-0">
+ <clipboard-copy aria-label="Copy" class="ClipboardButton btn js-clipboard-copy m-2 p-0 tooltipped-no-delay" data-copy-feedback="Copied!" data-tooltip-direction="w">
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copy js-clipboard-copy-icon m-2">
+ <path fill-rule="evenodd" d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 010 1.5h-1.5a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-1.5a.75.75 0 011.5 0v1.5A1.75 1.75 0 019.25 16h-7.5A1.75 1.75 0 010 14.25v-7.5z"></path><path fill-rule="evenodd" d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0114.25 11h-7.5A1.75 1.75 0 015 9.25v-7.5zm1.75-.25a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-7.5a.25.25 0 00-.25-.25h-7.5z"></path>
+</svg>
+ <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check js-clipboard-check-icon color-fg-success d-none m-2">
+ <path fill-rule="evenodd" d="M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z"></path>
+</svg>
+ </clipboard-copy>
+ </div>
+</template>
+
+
+ <style>
+ .user-mention[href$="/rlkamalapurkar"] {
+ color: var(--color-user-mention-fg);
+ background-color: var(--color-user-mention-bg);
+ border-radius: 2px;
+ margin-left: -2px;
+ margin-right: -2px;
+ padding: 0 2px;
+ }
+ </style>
+
+
+ </body>
+</html>
+
diff --git a/graphics/pgf/contrib/bodeplot/bodeplot.pdf b/graphics/pgf/contrib/bodeplot/bodeplot.pdf
index e47b655740..f866f3ba55 100644
--- a/graphics/pgf/contrib/bodeplot/bodeplot.pdf
+++ b/graphics/pgf/contrib/bodeplot/bodeplot.pdf
Binary files differ
diff --git a/macros/generic/tracklang/CHANGES b/macros/generic/tracklang/CHANGES
index 8725ee915d..a873a80927 100644
--- a/macros/generic/tracklang/CHANGES
+++ b/macros/generic/tracklang/CHANGES
@@ -1,3 +1,9 @@
+v1.6 (2022-10-29);
+
+ * Replaced \x with \@tracklang@x
+
+ * Added check for polyglossia's \xpg@bcp@loaded and \mainbabelname
+
v1.5 (2020-06-30):
* Removed redundant code and added debug message to
diff --git a/macros/generic/tracklang/README b/macros/generic/tracklang/README
index caac438bc4..be053cda76 100644
--- a/macros/generic/tracklang/README
+++ b/macros/generic/tracklang/README
@@ -1,6 +1,6 @@
-Generic TeX Bundle : tracklang v1.5
+Generic TeX Bundle : tracklang v1.6
-Last Modified : 2020-06-30
+Last Modified : 2022-10-29
Author : Nicola Talbot (dickimaw-books.com/contact)
@@ -9,7 +9,7 @@ Licence:
This material is subject to the LaTeX Project Public License.
See http://www.ctan.org/license/lppl1.3 for the details of that license.
-Copyright 2014-2020 Nicola Talbot
+Copyright 2014-2022 Nicola Talbot
Description:
diff --git a/macros/generic/tracklang/samples/animals/sample-animals-babel.pdf b/macros/generic/tracklang/samples/animals/sample-animals-babel.pdf
index 35cb126385..eaae49c629 100644
--- a/macros/generic/tracklang/samples/animals/sample-animals-babel.pdf
+++ b/macros/generic/tracklang/samples/animals/sample-animals-babel.pdf
Binary files differ
diff --git a/macros/generic/tracklang/samples/animals/sample-animals-de-poly.pdf b/macros/generic/tracklang/samples/animals/sample-animals-de-poly.pdf
index 73ce65645d..978dca7662 100644
--- a/macros/generic/tracklang/samples/animals/sample-animals-de-poly.pdf
+++ b/macros/generic/tracklang/samples/animals/sample-animals-de-poly.pdf
Binary files differ
diff --git a/macros/generic/tracklang/samples/animals/sample-animals-de-poly.tex b/macros/generic/tracklang/samples/animals/sample-animals-de-poly.tex
index bb96c76cd4..1d8335e411 100644
--- a/macros/generic/tracklang/samples/animals/sample-animals-de-poly.tex
+++ b/macros/generic/tracklang/samples/animals/sample-animals-de-poly.tex
@@ -3,6 +3,7 @@
\usepackage{polyglossia}
\setmainlanguage{german}
+\setotherlanguage[variant=uk]{english}
\usepackage{animals}
diff --git a/macros/generic/tracklang/samples/animals/sample-animals-de.pdf b/macros/generic/tracklang/samples/animals/sample-animals-de.pdf
index 6ee9ea4efa..2b8babf868 100644
--- a/macros/generic/tracklang/samples/animals/sample-animals-de.pdf
+++ b/macros/generic/tracklang/samples/animals/sample-animals-de.pdf
Binary files differ
diff --git a/macros/generic/tracklang/samples/animals/sample-animals-poly.pdf b/macros/generic/tracklang/samples/animals/sample-animals-poly.pdf
index 19144645ce..ab30068b06 100644
--- a/macros/generic/tracklang/samples/animals/sample-animals-poly.pdf
+++ b/macros/generic/tracklang/samples/animals/sample-animals-poly.pdf
Binary files differ
diff --git a/macros/generic/tracklang/samples/animals/sample-animals-sr-poly.pdf b/macros/generic/tracklang/samples/animals/sample-animals-sr-poly.pdf
deleted file mode 100644
index 7e746cba6a..0000000000
--- a/macros/generic/tracklang/samples/animals/sample-animals-sr-poly.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/generic/tracklang/samples/animals/sample-animals.pdf b/macros/generic/tracklang/samples/animals/sample-animals.pdf
index 89632f165a..a041ee1c86 100644
--- a/macros/generic/tracklang/samples/animals/sample-animals.pdf
+++ b/macros/generic/tracklang/samples/animals/sample-animals.pdf
Binary files differ
diff --git a/macros/generic/tracklang/samples/animals/sample-animals2-de.pdf b/macros/generic/tracklang/samples/animals/sample-animals2-de.pdf
index 5f22dca624..fe493b0128 100644
--- a/macros/generic/tracklang/samples/animals/sample-animals2-de.pdf
+++ b/macros/generic/tracklang/samples/animals/sample-animals2-de.pdf
Binary files differ
diff --git a/macros/generic/tracklang/samples/animals/sample-animals2-de2.pdf b/macros/generic/tracklang/samples/animals/sample-animals2-de2.pdf
index b2277b8b98..f49bedd70e 100644
--- a/macros/generic/tracklang/samples/animals/sample-animals2-de2.pdf
+++ b/macros/generic/tracklang/samples/animals/sample-animals2-de2.pdf
Binary files differ
diff --git a/macros/generic/tracklang/samples/animals/sample-animals2-de3.pdf b/macros/generic/tracklang/samples/animals/sample-animals2-de3.pdf
index 069a48e10c..ca3fd6436c 100644
--- a/macros/generic/tracklang/samples/animals/sample-animals2-de3.pdf
+++ b/macros/generic/tracklang/samples/animals/sample-animals2-de3.pdf
Binary files differ
diff --git a/macros/generic/tracklang/samples/animals/sample-animals2-de4.pdf b/macros/generic/tracklang/samples/animals/sample-animals2-de4.pdf
index ce6a514e5c..147cebfa75 100644
--- a/macros/generic/tracklang/samples/animals/sample-animals2-de4.pdf
+++ b/macros/generic/tracklang/samples/animals/sample-animals2-de4.pdf
Binary files differ
diff --git a/macros/generic/tracklang/samples/animals/sample-animals2-poly.pdf b/macros/generic/tracklang/samples/animals/sample-animals2-poly.pdf
index 8809c66b85..34a77bb8af 100644
--- a/macros/generic/tracklang/samples/animals/sample-animals2-poly.pdf
+++ b/macros/generic/tracklang/samples/animals/sample-animals2-poly.pdf
Binary files differ
diff --git a/macros/generic/tracklang/samples/animals/sample-animals2.pdf b/macros/generic/tracklang/samples/animals/sample-animals2.pdf
index fbd7a234d6..3569a4e0a7 100644
--- a/macros/generic/tracklang/samples/animals/sample-animals2.pdf
+++ b/macros/generic/tracklang/samples/animals/sample-animals2.pdf
Binary files differ
diff --git a/macros/generic/tracklang/samples/regions/sample-regions.pdf b/macros/generic/tracklang/samples/regions/sample-regions.pdf
index fab8f6977b..1ce67099c9 100644
--- a/macros/generic/tracklang/samples/regions/sample-regions.pdf
+++ b/macros/generic/tracklang/samples/regions/sample-regions.pdf
Binary files differ
diff --git a/macros/generic/tracklang/samples/regions/sample-regions2-manx.pdf b/macros/generic/tracklang/samples/regions/sample-regions2-manx.pdf
index 93f3428fb3..30857213d9 100644
--- a/macros/generic/tracklang/samples/regions/sample-regions2-manx.pdf
+++ b/macros/generic/tracklang/samples/regions/sample-regions2-manx.pdf
Binary files differ
diff --git a/macros/generic/tracklang/samples/regions/sample-regions2-map.pdf b/macros/generic/tracklang/samples/regions/sample-regions2-map.pdf
index db87696734..5584b2cbbb 100644
--- a/macros/generic/tracklang/samples/regions/sample-regions2-map.pdf
+++ b/macros/generic/tracklang/samples/regions/sample-regions2-map.pdf
Binary files differ
diff --git a/macros/generic/tracklang/samples/regions/sample-regions2-map2.pdf b/macros/generic/tracklang/samples/regions/sample-regions2-map2.pdf
index 4784228ed8..0f1bbdee0f 100644
--- a/macros/generic/tracklang/samples/regions/sample-regions2-map2.pdf
+++ b/macros/generic/tracklang/samples/regions/sample-regions2-map2.pdf
Binary files differ
diff --git a/macros/generic/tracklang/samples/regions/sample-regions2-map3.pdf b/macros/generic/tracklang/samples/regions/sample-regions2-map3.pdf
index 90546af2b0..033e92230f 100644
--- a/macros/generic/tracklang/samples/regions/sample-regions2-map3.pdf
+++ b/macros/generic/tracklang/samples/regions/sample-regions2-map3.pdf
Binary files differ
diff --git a/macros/generic/tracklang/samples/regions/sample-regions2-nomap.pdf b/macros/generic/tracklang/samples/regions/sample-regions2-nomap.pdf
index 167a38fcf7..317868d773 100644
--- a/macros/generic/tracklang/samples/regions/sample-regions2-nomap.pdf
+++ b/macros/generic/tracklang/samples/regions/sample-regions2-nomap.pdf
Binary files differ
diff --git a/macros/generic/tracklang/samples/regions/sample-regions2.pdf b/macros/generic/tracklang/samples/regions/sample-regions2.pdf
index d7393715ff..beff20b615 100644
--- a/macros/generic/tracklang/samples/regions/sample-regions2.pdf
+++ b/macros/generic/tracklang/samples/regions/sample-regions2.pdf
Binary files differ
diff --git a/macros/generic/tracklang/samples/sample-tracklang.pdf b/macros/generic/tracklang/samples/sample-tracklang.pdf
index 6d5a7dbf53..673ab5eca0 100644
--- a/macros/generic/tracklang/samples/sample-tracklang.pdf
+++ b/macros/generic/tracklang/samples/sample-tracklang.pdf
Binary files differ
diff --git a/macros/generic/tracklang/samples/sample-tracklang2.pdf b/macros/generic/tracklang/samples/sample-tracklang2.pdf
index d2f16a3e3e..a30b727c2f 100644
--- a/macros/generic/tracklang/samples/sample-tracklang2.pdf
+++ b/macros/generic/tracklang/samples/sample-tracklang2.pdf
Binary files differ
diff --git a/macros/generic/tracklang/samples/sample-tracklang3.pdf b/macros/generic/tracklang/samples/sample-tracklang3.pdf
index 8966ec23fa..bf447bd2c1 100644
--- a/macros/generic/tracklang/samples/sample-tracklang3.pdf
+++ b/macros/generic/tracklang/samples/sample-tracklang3.pdf
Binary files differ
diff --git a/macros/generic/tracklang/samples/sample-tracklang4.pdf b/macros/generic/tracklang/samples/sample-tracklang4.pdf
index b65563f2fd..814a359e94 100644
--- a/macros/generic/tracklang/samples/sample-tracklang4.pdf
+++ b/macros/generic/tracklang/samples/sample-tracklang4.pdf
Binary files differ
diff --git a/macros/generic/tracklang/samples/sample-tracklang5.pdf b/macros/generic/tracklang/samples/sample-tracklang5.pdf
index 3446d96ec5..eb7216d024 100644
--- a/macros/generic/tracklang/samples/sample-tracklang5.pdf
+++ b/macros/generic/tracklang/samples/sample-tracklang5.pdf
Binary files differ
diff --git a/macros/generic/tracklang/samples/sample-tracklang6.pdf b/macros/generic/tracklang/samples/sample-tracklang6.pdf
index 1f3cce82ec..f99105384c 100644
--- a/macros/generic/tracklang/samples/sample-tracklang6.pdf
+++ b/macros/generic/tracklang/samples/sample-tracklang6.pdf
Binary files differ
diff --git a/macros/generic/tracklang/tracklang-code.pdf b/macros/generic/tracklang/tracklang-code.pdf
new file mode 100644
index 0000000000..919ae64212
--- /dev/null
+++ b/macros/generic/tracklang/tracklang-code.pdf
Binary files differ
diff --git a/macros/generic/tracklang/tracklang-manual.html b/macros/generic/tracklang/tracklang-manual.html
new file mode 100644
index 0000000000..e45ec14494
--- /dev/null
+++ b/macros/generic/tracklang/tracklang-manual.html
@@ -0,0 +1,6522 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<meta name="generator" content="TeX Parser Library">
+ <title>tracklang.sty v1.6:
+tracking language options</title>
+<style type="text/css">
+#main {margin-left: 5%; margin-right: 15%}
+div.tomain {position: absolute; left: 0pt; width: 5%; text-align: right; font-size: x-small;}
+div.tomain a {text-decoration: none;}
+div.labellink {display: inline; font-size: x-small; margin-left: 1em; margin-right: 1em;}
+div.marginleft {position: absolute; left: 0pt; width: 5%;}
+div.marginright {position: absolute; right: 0pt; width: 15%;}
+div.displaymath { display: block; text-align: center; }
+span.eqno { float: right; }
+div.table { display: block; text-align: center; }
+table.tabular-cm
+{
+ display: inline-table;
+ border-collapse: collapse;
+ align: center;
+ vertical-align: middle;
+}
+table.tabular-cb
+{
+ display: inline-table;
+ border-collapse: collapse;
+ align: center;
+ vertical-align: bottom;
+}
+table.tabular-ct
+{
+ display: inline-table;
+ border-collapse: collapse;
+ align: center;
+ vertical-align: top;
+}
+table.tabular-lm
+{
+ display: inline-table;
+ border-collapse: collapse;
+ align: left;
+ vertical-align: middle;
+}
+table.tabular-lb
+{
+ display: inline-table;
+ border-collapse: collapse;
+ align: left;
+ vertical-align: bottom;
+}
+table.tabular-lt
+{
+ display: inline-table;
+ border-collapse: collapse;
+ align: left;
+ vertical-align: top;
+}
+table.tabular-rm
+{
+ display: inline-table;
+ border-collapse: collapse;
+ align: right;
+ vertical-align: middle;
+}
+table.tabular-rb
+{
+ display: inline-table;
+ border-collapse: collapse;
+ align: right;
+ vertical-align: bottom;
+}
+table.tabular-rt
+{
+ display: inline-table;
+ border-collapse: collapse;
+ align: right;
+ vertical-align: top;
+}
+table.tabular-m
+{
+ display: inline-table;
+ border-collapse: collapse;
+ vertical-align: middle;
+}
+table.tabular-b
+{
+ display: inline-table;
+ border-collapse: collapse;
+ vertical-align: bottom;
+}
+table.tabular-t
+{
+ display: inline-table;
+ border-collapse: collapse;
+ vertical-align: top;
+}
+table.tabular-l
+{
+ display: inline-table;
+ border-collapse: collapse;
+ align: left;
+}
+table.tabular-c
+{
+ display: inline-table;
+ border-collapse: collapse;
+ align: center;
+}
+table.tabular-r
+{
+ display: inline-table;
+ border-collapse: collapse;
+ align: right;
+}
+pre { white-space: pre-wrap; }
+div.figure { display: block; text-align: center; }
+div.caption { display: block; text-align: center; }
+div.marginpar { float: right; }
+div.abstract { display: block; margin-right: 4em; margin-left: 4em;}
+div.title { display: block; text-align: center; font-size: x-large;}
+div.author { display: block; text-align: center; font-size: large;}
+div.date { display: block; text-align: center; font-size: medium;}
+div.bibliography { display: block; margin-left: 4em; }
+div.bibitem { display: inline; float: left; text-indent: -3em; }
+span.numberline { display: inline-block; width: 3em; }
+.toc-subsection span.numberline { display: inline-block; width: 3em; }
+.toc-subsubsection span.numberline { display: inline-block; width: 4em; }
+.toc-paragraph span.numberline { display: inline-block; width: 5em; }
+.toc-subparagraph span.numberline { display: inline-block; width: 6em; }
+nav ul { list-style-type: none; }
+.toc-part { padding-left: 0em; padding-bottom: 1ex; padding-top: 1ex; font-weight: bold; font-size: large;}
+.toc-chapter { padding-left: 0em; padding-bottom: .25ex; padding-top: .25ex; font-weight: bold; }
+.toc-section { padding-left: .5em; }
+.toc-subsection { padding-left: 1.5em; }
+.toc-subsubsection { padding-left: 2em; }
+.toc-paragraph { padding-left: 2.5em; }
+.toc-subparagraph { padding-left: 3em; }
+.part { font-size: x-large; font-weight: bold; }
+div.bigskip { padding-left: 0pt; padding-right: 0pt; padding-top: 0pt; padding-bottom: 2ex;}
+div.medskip { padding-left: 0pt; padding-right: 0pt; padding-top: 0pt; padding-bottom: 1ex;}
+div.smallskip { padding-left: 0pt; padding-right: 0pt; padding-top: 0pt; padding-bottom: .5ex;}
+span.quad { padding-left: 0pt; padding-right: 1em; padding-top: 0pt; padding-bottom: 0pt;}
+span.qquad { padding-left: 0pt; padding-right: 2em; padding-top: 0pt; padding-bottom: 0pt;}
+.displaylist { display: block; list-style-type: none; }
+.inlinelist { display: inline; }
+dl.inlinetitle dt { display: inline-block; margin-left: 0; margin-right: 1em;}
+dl.inlinetitle dd { display: inline; margin: 0; }
+dl.inlinetitle dd::after { display: block; content: ''; }
+dl.inlineblock dt { display: inline-block; margin-left: 0; margin-right: 1em;}
+dl.inlineblock dd { display: inline; margin: 0; }
+dl.inlineblock dd::after { display: block; content: ''; }
+.clearfix::after { content: ""; clear: both; display: table; }
+span.inlineitem { margin-right: .5em; margin-left: .5em; }
+span.numitem { float: left; margin-left: -3em; text-align: right; min-width: 2.5em; }
+span.bulletitem { float: left; margin-left: -1em; }
+span.descitem { font: normal; font-weight: bold; }
+div.indexspace { min-height: 2ex; }
+.cell-noborder-nosep-r {border-top: none; border-right: none; border-left: none; padding-left: 0px; padding-right: 0px; text-align: right; }
+.cell-noborder-bothsep-l {border-top: none; border-right: none; border-left: none; padding-left: 6.000000pt; padding-right: 6.000000pt; text-align: left; }
+.cell-noborder-bothsep-r {border-top: none; border-right: none; border-left: none; padding-left: 6.000000pt; padding-right: 6.000000pt; text-align: right; }
+.cell-noborder-bothsep-halfwidth {border-top: none; border-right: none; border-left: none; padding-left: 6.000000pt; width: 50.000000%; padding-right: 6.000000pt; text-align: left; }
+.cell-noborder-nosep-l {border-top: none; border-right: none; border-left: none; padding-left: 0px; padding-right: 0px; text-align: left; }
+.cell-noborder-rightsep-l {border-top: none; border-right: none; border-left: none; padding-left: 6.000000pt; padding-right: 0px; text-align: left; }
+.cell-noborder-leftsep-r {border-top: none; border-right: none; border-left: none; padding-left: 6.000000pt; padding-right: 0px; text-align: right; }
+.cell-noborder-bothsep-c {border-top: none; border-right: none; border-left: none; padding-left: 6.000000pt; padding-right: 6.000000pt; text-align: center; }
+.cell-noborder-bothsep-eightypc {border-top: none; border-right: none; border-left: none; padding-left: 6.000000pt; width: 80.000000%; padding-right: 6.000000pt; text-align: left; }
+.cell-noborder-rightsep-c {border-top: none; border-right: none; border-left: none; padding-left: 0px; padding-right: 6.000000pt; text-align: center; }
+.cell-noborder-bothsep-threequarterwidth {border-top: none; border-right: none; border-left: none; padding-left: 6.000000pt; width: 75.000000%; padding-right: 6.000000pt; text-align: left; }
+.cell-noborder-rightsep-r {border-top: none; border-right: none; border-left: none; padding-left: 0px; padding-right: 6.000000pt; text-align: right; }
+.cell-noborder-bothsep-quarterwidth {border-top: none; border-right: none; border-left: none; padding-left: 6.000000pt; width: 25.000000%; padding-right: 6.000000pt; text-align: left; }
+.cell-noborder-rightsep-c {border-top: none; border-right: none; border-left: none; padding-left: 6.000000pt; padding-right: 0px; text-align: center; }
+.cell-noborder-rightsep-l {border-top: none; border-right: none; border-left: none; padding-left: 0px; padding-right: 6.000000pt; text-align: left; }
+.cell-noborder-nosep-c {border-top: none; border-right: none; border-left: none; padding-left: 0px; padding-right: 0px; text-align: center; }
+span.mbox {border-style: none; }
+span.frame {border-style: solid; border-width: 1.000000pt; padding: 0.000000pt; }
+span.boxed {text-align: center; vertical-align: middle; border-style: solid; border-width: 2.000000pt; padding: 0.000000pt; width: 1.000000em; height: 1.000000em; display: inline-block; }
+span.circled {text-align: center; vertical-align: middle; border-style: solid; border-width: 2.000000pt; padding: 1.000000pt; border-radius: 5000.000000%;width: 1.000000em; height: 1.000000em; display: inline-block; }
+span.overlapped {text-align: center; border-style: none; padding: 0.000000pt; width: 1.000000em; height: 1.000000em; display: inline-block; }
+span.overlapper {text-align: center; border-style: none; padding: 0.000000pt; margin-left: -1.000000em; width: 1.000000em; height: 1.000000em; display: inline-block; }
+span.overlappertop {text-align: center; vertical-align: top; border-style: none; padding: 0.000000pt; margin-left: -1.000000em; width: 1.000000em; height: 1.000000em; display: inline-block; }
+span.partialoverlapper {text-align: center; border-style: none; padding: 0.000000pt; margin-left: -0.750000em; width: 1.000000em; height: 1.000000em; display: inline-block; }
+span.quarterleft {text-align: center; vertical-align: middle; border-style: none; padding: 0.000000pt; transform: rotate(-90.000000deg); -ms-transform: rotate(-90.000000deg); -webkit-transform: rotate(-90.000000deg); display: inline-block; }
+span.quarterright {text-align: center; vertical-align: middle; border-style: none; padding: 0.000000pt; transform: rotate(90.000000deg); -ms-transform: rotate(90.000000deg); -webkit-transform: rotate(90.000000deg); display: inline-block; }
+span.eighthleft {text-align: center; vertical-align: middle; border-style: none; padding: 0.000000pt; transform: rotate(-45.000000deg); -ms-transform: rotate(-45.000000deg); -webkit-transform: rotate(-45.000000deg); display: inline-block; }
+span.eighthright {text-align: center; vertical-align: middle; border-style: none; padding: 0.000000pt; transform: rotate(45.000000deg); -ms-transform: rotate(45.000000deg); -webkit-transform: rotate(45.000000deg); display: inline-block; }
+span.halfturn {text-align: center; vertical-align: middle; border-style: none; padding: 0.000000pt; transform: rotate(180.000000deg); -ms-transform: rotate(180.000000deg); -webkit-transform: rotate(180.000000deg); display: inline-block; }
+span.fwsdisabledicon {border-style: none; color: gray; }
+span.fwsactiveicon {border-style: none; color: green; }
+table.glossary-ruled { border-top: solid 2px; border-bottom: solid 2px; border-collapse: collapse; }
+tr.glossary-ruled { border-bottom: solid 1px; }
+.cell-left-border { border-left: solid 1px; }
+table.glossary-ruled td { vertical-align: text-top; }
+table.glossary td { vertical-align: text-top; }
+div.glossary-children{ padding-left: 1em; }
+span.glsshowtargetfonttext {font-family: monospace; font-size: x-small; border-style: none; }
+dfn { font-style: normal; font-weight: bold; } a { text-decoration: none; } a:hover { text-decoration: underline; } div.tablefns { border-top: solid; } div.example { border-bottom: solid silver; padding: 20px; } div.example div.title { font-weight: bold; font-size: large; }
+div.sidenote {font-size: x-small; float: right; border-style: none; }
+span.advantage {border-style: none; color: green; }
+span.disadvantage {border-style: none; color: red; }
+strong.strong {font-weight: bold; border-style: none; }
+em.booktitle {font-style: italic; font-variant: normal; border-style: none; }
+code.code {font-family: monospace; border-style: none; }
+code.cmd {font-family: monospace; border-style: none; }
+span.cmdfmt {font-family: monospace; border-style: none; }
+span.comment {border-style: none; color: rgb(94,94,94); }
+code.csfmt {font-family: monospace; border-style: none; color: rgb(84,111,26); }
+span.csfmtfont {font-family: monospace; border-style: none; }
+span.csfmtcolourfont {font-family: monospace; border-style: none; color: rgb(84,111,26); }
+span.appfmt {font-family: monospace; border-style: none; }
+span.styfmt {font-family: monospace; border-style: none; }
+span.clsfmt {font-family: monospace; border-style: none; }
+span.envfmt {font-family: monospace; border-style: none; }
+span.optfmt {font-family: monospace; border-style: none; }
+span.csoptfmt {font-family: monospace; border-style: none; color: rgb(104,34,139); }
+span.styoptfmt {font-family: monospace; border-style: none; color: rgb(104,34,139); }
+span.clsoptfmt {font-family: monospace; border-style: none; }
+span.ctrfmt {font-family: monospace; border-style: none; }
+span.filefmt {font-family: monospace; border-style: none; }
+span.extfmt {font-family: monospace; border-style: none; }
+span.deprecatedorbannedfmt {border-style: none; color: rgb(204,0,0); }
+span.summarylocfmt {font-style: italic; font-variant: normal; border-style: none; }
+span.menufmt {font-family: monospace; border-style: none; }
+code.cbeg {font-family: monospace; border-style: none; }
+code.cend {font-family: monospace; border-style: none; }
+span.termslocfmt {font-style: italic; font-variant: normal; border-style: none; }
+span.crossreftag {font-style: italic; font-variant: normal; border-style: none; }
+div.crossref {border-style: none; margin-left: 1.000000em; }
+span.longargfmt {font-family: monospace; border-style: none; }
+span.shortargfmt {font-family: monospace; border-style: none; }
+span.qt {border-style: none; }
+code.qtt {font-family: monospace; border-style: none; }
+em.metainner {font-style: italic; font-variant: normal; border-style: none; }
+span.meta {font-family: serif; border-style: none; color: black; }
+em.initvalnotefmtinner {font-style: italic; font-variant: normal; border-style: none; }
+span.initvalnotefmt {font-family: serif; border-style: none; color: black; }
+span.summarytag {font-style: italic; font-variant: normal; border-style: none; }
+div.importanttitle {text-align: right; border-style: none; color: red; }
+div.important {border-style: solid; border-color: red; border-width: 2.000000pt; padding: 2.000000pt; background-color: rgb(255,235,235); }
+div.warningtitle {text-align: right; border-style: none; color: red; }
+div.warning {border-style: solid; border-color: red; border-width: 2.000000pt; padding: 2.000000pt; background-color: rgb(255,235,235); }
+div.informationtitle {text-align: right; border-style: none; color: rgb(0,128,128); }
+div.information {border-style: solid; border-color: rgb(0,128,128); border-width: 2.000000pt; padding: 2.000000pt; background-color: rgb(240,255,255); }
+div.pinnedboxtitle {text-align: right; border-style: none; color: black; }
+div.pinnedbox {border-style: solid; border-color: black; border-width: 2.000000pt; padding: 2.000000pt; background-color: rgb(255,255,191); }
+div.terminaltitle {text-align: right; border-style: none; color: black; }
+pre.terminal {font-family: monospace; border-style: solid; border-color: black; border-width: 2.000000pt; padding: 2.000000pt; background-color: rgb(250,250,250); }
+div.transcripttitle {text-align: right; border-style: none; color: black; }
+pre.transcript {font-family: monospace; border-style: solid; border-color: black; border-width: 2.000000pt; padding: 2.000000pt; background-color: rgb(250,250,250); }
+div.ctrboxtitle {text-align: right; border-style: none; color: black; }
+div.ctrbox {border-style: solid; border-color: black; border-width: 2.000000pt; padding: 2.000000pt; background-color: rgb(255,255,191); }
+div.codeboxtitle {text-align: right; border-style: none; color: black; }
+pre.codebox {font-family: monospace; border-style: solid; border-color: black; border-width: 2.000000pt; padding: 2.000000pt; background-color: rgb(250,250,250); }
+div.resultboxtitle {text-align: right; border-style: none; color: black; }
+div.resultbox {border-style: solid; border-color: black; border-width: 2.000000pt; padding: 2.000000pt; }
+div.badcodeboxtitle {text-align: right; border-style: none; color: black; }
+pre.badcodebox {font-family: monospace; border-style: solid; border-color: black; border-width: 2.000000pt; padding: 2.000000pt; background-color: rgb(250,250,250); }
+div.unicodeboxtitle {text-align: right; border-style: none; color: black; }
+pre.unicodebox {font-family: monospace; border-style: solid; border-color: black; border-width: 2.000000pt; padding: 2.000000pt; background-color: rgb(250,250,250); }
+pre.compactcodebox {font-family: monospace; border-style: solid; border-color: black; border-width: 1.000000pt; padding: 2.000000pt; background-color: rgb(250,250,250); }
+pre.sidebysidecode {font-family: monospace; font-size: small; vertical-align: top; border-style: solid; border-color: black; border-width: 1.000000pt; padding: 2.000000pt; margin-right: 3.000000%; margin-top: 0.000000pt; background-color: rgb(250,250,250); width: 47.000000%; display: inline-block; }
+div.sidebysideresult {vertical-align: top; border-style: solid; border-color: black; border-width: 1.000000pt; padding: 2.000000pt; margin-top: 0.000000pt; width: 47.000000%; display: inline-block; }
+div.defnbox {border-style: solid; border-color: black; border-width: 1.000000pt; padding: 2.000000pt; background-color: rgb(255,255,191); }
+div.optionsummarybox {border-style: solid; border-color: black; border-width: 1.000000pt; padding: 2.000000pt; background-color: rgb(255,255,191); }
+div.optionvaluesummarybox {border-style: none; margin-left: 40.000000pt; }
+span.floatrightbox {float: right; border-style: none; }
+div.noteBox {border-style: none; }
+div.settingsboxtitle {text-align: right; border-style: none; color: black; }
+div.settingsbox {border-style: solid; border-color: black; border-width: 2.000000pt; padding: 2.000000pt; background-color: rgb(255,255,227); }
+div.optionvalueboxtitle {text-align: right; border-style: none; color: black; }
+div.optionvaluebox {border-style: solid; border-color: black; border-width: 2.000000pt; padding: 2.000000pt; background-color: rgb(255,255,245); }
+div.nlctuserguideidx0 {border-style: none; margin-left: 0.000000pt; }
+div.nlctuserguideidx1 {border-style: none; margin-left: 20.000000pt; }
+div.nlctuserguideidx2 {border-style: none; margin-left: 40.000000pt; }
+div.nlctusernavbox {border-style: none; }
+div.abstractheader {font-weight: bold; text-align: center; border-style: none; }
+div.filedef {font-family: monospace; text-align: left; border-style: none; }
+div.tablefn {font-size: x-small; border-style: none; }
+div.tablefns {text-align: left; border-style: none; width: 80.000000%; }
+code.envvarfmt {font-family: monospace; border-style: none; color: rgb(54,100,139); }
+code.langtagfmt {font-family: monospace; border-style: none; color: rgb(82,139,139); }
+</style>
+</head>
+<body>
+<div id="main">
+ <header><div class="title">tracklang.sty v1.6: tracking language options</div><!-- end of title --><div class="author">Nicola L.C. Talbot<br>
+ Dickimaw Books<br>
+ <a href="https://www.dickimaw-books.com/">dickimaw-books.com</a></div><!-- end of author --><div class="date">2022-10-29 </div><!-- end of date --></header><p>
+<p>
+
+<div class="abstract"><div class="abstractheader">Abstract</div><!-- end of abstractheader -->
+ The <a id="wrglossary.1"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> package is provided for package developers who want a simple interface to find out which languages the user has requested through packages such as <a id="wrglossary.2"></a><a href="#glo:pkg.babel"><span class="styfmt">babel</span></a> and <a id="wrglossary.3"></a><a href="#glo:pkg.polyglossia"><span class="styfmt">polyglossia</span></a>. <span style="font-style: italic; font-variant: normal; ">This package doesn’t provide any translations.</span> Its purpose is simply to track which languages have been requested by the user. Generic TeX code is in <a id="wrglossary.4"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> for non-LaTeX users.<p>
+If the <a id="wrglossary.5"></a><a href="#glo:dual.shellescape">shell escape</a> is enabled or <a id="wrglossary.6"></a><a href="#glo:directlua"><code class="csfmt">\directlua</code></a> is available, this package may also be used to query the <a id="wrglossary.7"></a><a href="#glo:opt.envvar.LCALL"><code class="envvarfmt">LC_ALL</code></a> or <a id="wrglossary.8"></a><a href="#glo:opt.envvar.LANG"><code class="envvarfmt">LANG</code></a> environment variable (see §<a href="#sec:langsty">6</a>). Windows users, who don’t have the locale stored in environment variables, can use <a id="wrglossary.9"></a><a href="#glo:app.texosquery"><span class="appfmt">texosquery</span></a> in combination with <a id="wrglossary.10"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a>. (Similarly if <a id="wrglossary.11"></a><a href="#glo:opt.envvar.LCALL"><code class="envvarfmt">LC_ALL</code></a> or <a id="wrglossary.12"></a><a href="#glo:opt.envvar.LANG"><code class="envvarfmt">LANG</code></a> don’t contain sufficient information.) In order to use <a id="wrglossary.13"></a><a href="#glo:app.texosquery"><span class="appfmt">texosquery</span></a> through the restricted <a id="wrglossary.14"></a><a href="#glo:dual.shellescape">shell escape</a>, you must have at least Java 8 and set up <a id="wrglossary.15"></a><a href="#glo:file.texosquery.cfg"><span class="filefmt">texosquery.cfg</span></a> appropriately. (See the <a id="wrglossary.16"></a><a href="#glo:app.texosquery"><span class="appfmt">texosquery</span></a> manual for further details.) </div><!-- end of abstract -->
+<p>
+The fundamental aim of this generic package is to be able to effectively say: <blockquote> The user (that is, the <span style="font-style: italic; font-variant: normal; ">document</span> author) wants to use dialects <code class="langtagfmt">xx-XX</code>, <code class="langtagfmt">yy-YY-Scrp</code>, etc in their document. Any packages used by their document that provide multilingual or region-dependent support should do whatever is required to activate the settings for those languages and regions (or warn the user that there’s no support). </blockquote> Naturally, this is only of use if the locale-sensitive packages use <a id="wrglossary.17"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> to pick up this information, which is entirely up to the package authors, but at the moment there’s no standard method for packages to detect the required language and region. The aim of <a id="wrglossary.18"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> is to provide that method. In particular, the emphasis is on using <a id="wrglossary.19"></a><a href="#glo:ISO">ISO</a> language and region codes rather than hard-coding the various language labels used by different language packages.<p>
+Related articles: <a href="https://tug.org/TUGboat/tb2016-3/http://www.tug.org/TUGboat/tb37-3/tb117talbot.pdf"><span class="qt">“Localisation of TeX documents: <span class="styfmt">tracklang</span>.â€</span> <span style="font-style: italic; font-variant: normal; ">TUGboat</span>, Volume 37 (2016), No. 3</a>, <a href="https://www.dickimaw-books.com/latex/tracklang">Localisation with <span class="filefmt">tracklang.tex</span></a>, and <a href="https://www.dickimaw-books.com/faqs.php?category=tracklang"><span class="styfmt">tracklang</span> FAQ</a>.<p>
+<nav class="toc">
+<section id="toc"><!-- start of section toc --><div class="tomain"><a href="#main">[top]</a></div>
+<h1><!-- start of chapter header -->Contents<div class="labellink"><a href="#toc">[link]</a></div></h1><!-- end of chapter header -->
+
+<ul>
+<li class="toc-part"><a href="#part.I"><span class="numberline">I</span>User Guide</a></li><!-- end of toc-part -->
+
+<li class="toc-chapter"><a href="#sec:intro"><span class="numberline">1</span>Introduction</a></li><!-- end of toc-chapter -->
+
+<li class="toc-chapter"><a href="#sec:summary"><span class="numberline">2</span>Summary of Use</a></li><!-- end of toc-chapter -->
+
+<ul>
+<li class="toc-section"><a href="#sec:summary-doc"><span class="numberline">2.1</span>Document Level</a></li><!-- end of toc-section -->
+
+<ul>
+<li class="toc-subsection"><a href="#sec:tex"><span class="numberline">2.1.1</span>Generic TeX</a></li><!-- end of toc-subsection -->
+
+<li class="toc-subsection"><a href="#sec:latex"><span class="numberline">2.1.2</span>LaTeX</a></li><!-- end of toc-subsection -->
+</ul>
+<li class="toc-section"><a href="#sec:summary-localepkg"><span class="numberline">2.2</span>Locale-Sensitive Packages</a></li><!-- end of toc-section -->
+
+<li class="toc-section"><a href="#sec:summary-langpkg"><span class="numberline">2.3</span>Language Packages</a></li><!-- end of toc-section -->
+</ul>
+<li class="toc-chapter"><a href="#sec:generic"><span class="numberline">3</span>Generic Use</a></li><!-- end of toc-chapter -->
+
+<li class="toc-chapter"><a href="#sec:supplpkgs"><span class="numberline">4</span>Supplementary Packages</a></li><!-- end of toc-chapter -->
+
+<li class="toc-chapter"><a href="#sec:user"><span class="numberline">5</span>Detecting the User’s Requested Languages</a></li><!-- end of toc-chapter -->
+
+<ul>
+<li class="toc-section"><a href="#sec:examples"><span class="numberline">5.1</span>Examples</a></li><!-- end of toc-section -->
+
+<ul>
+<li class="toc-subsection"><a href="#sec:animals"><span class="numberline">5.1.1</span><span style="font-family: monospace; ">animals.sty</span></a></li><!-- end of toc-subsection -->
+
+<li class="toc-subsection"><a href="#sec:regions"><span class="numberline">5.1.2</span><span style="font-family: monospace; ">regions.sty</span></a></li><!-- end of toc-subsection -->
+</ul></ul>
+<li class="toc-chapter"><a href="#sec:langsty"><span class="numberline">6</span>Adding Support for Language Tracking</a></li><!-- end of toc-chapter -->
+
+<ul>
+<li class="toc-section"><a href="#sec:initnewlang"><span class="numberline">6.1</span>Initialising a New Language or Dialect</a></li><!-- end of toc-section -->
+
+<li class="toc-section"><a href="#sec:selectlanguage"><span class="numberline">6.2</span>Switching Language or Dialect</a></li><!-- end of toc-section -->
+
+<li class="toc-section"><a href="#sec:newscripts"><span class="numberline">6.3</span>Defining New Scripts</a></li><!-- end of toc-section -->
+
+<li class="toc-section"><a href="#sec:newregions"><span class="numberline">6.4</span>Defining New Regions</a></li><!-- end of toc-section -->
+
+<li class="toc-section"><a href="#sec:newlanguages"><span class="numberline">6.5</span>Defining a New Language</a></li><!-- end of toc-section -->
+
+<li class="toc-section"><a href="#sec:definelabels"><span class="numberline">6.6</span>Defining New <span style="font-family: sans-serif; ">tracklang</span> Labels</a></li><!-- end of toc-section -->
+
+<li class="toc-section"><a href="#sec:examplenewlang"><span class="numberline">6.7</span>Example (<span style="font-family: monospace; ">alien.sty</span>)</a></li><!-- end of toc-section -->
+</ul>
+<li class="toc-part"><a href="#part.II"><span class="numberline">II</span>Summaries</a></li><!-- end of toc-part -->
+
+<li class="toc-chapter"><a href="#sec:regscriptmappings"><span class="numberline">A</span>Region and Script Mappings</a></li><!-- end of toc-chapter -->
+
+<li class="toc-chapter"><a href="#symbols">Symbols</a></li><!-- end of toc-chapter -->
+
+<li class="toc-chapter"><a href="#glossary">Glossary</a></li><!-- end of toc-chapter -->
+
+<li class="toc-chapter"><a href="#cmdsummary">Command Summary</a></li><!-- end of toc-chapter -->
+
+<ul>
+<li class="toc-section"><a href="#summary.index@">Command Summary: @</a></li><!-- end of toc-section -->
+
+<li class="toc-section"><a href="#summary.index6553600">Command Summary: A</a></li><!-- end of toc-section -->
+
+<li class="toc-section"><a href="#summary.index6684672">Command Summary: C</a></li><!-- end of toc-section -->
+
+<li class="toc-section"><a href="#summary.index6881280">Command Summary: F</a></li><!-- end of toc-section -->
+
+<li class="toc-section"><a href="#summary.index6946816">Command Summary: G</a></li><!-- end of toc-section -->
+
+<li class="toc-section"><a href="#summary.index7077888">Command Summary: I</a></li><!-- end of toc-section -->
+
+<li class="toc-section"><a href="#summary.index7733248">Command Summary: S</a></li><!-- end of toc-section -->
+
+<li class="toc-section"><a href="#summary.index7798784">Command Summary: T</a></li><!-- end of toc-section -->
+</ul>
+<li class="toc-chapter"><a href="#index">Index</a></li><!-- end of toc-chapter -->
+ </ul></nav><!-- end of toc -->
+</section><!-- end of section toc -->
+
+<section id="chapter*.2"><!-- start of section chapter*.2 --><div class="tomain"><a href="#main">[top]</a></div>
+<h1><!-- start of chapter header -->List of Tables<div class="labellink"><a href="#chapter*.2">[link]</a></div></h1><!-- end of chapter header -->
+<div class="lot">
+<div class="toc-table"><a href="#tab:isoopts"><span class="numberline">1.1</span>Predefined ISO Language-Region Dialects</a></div><!-- end of toc-table -->
+
+<div class="toc-table"><a href="#tab:rootlangopts"><span class="numberline">1.2</span>Predefined Root Languages</a></div><!-- end of toc-table -->
+
+<div class="toc-table"><a href="#tab:nonisoopts"><span class="numberline">1.3</span>Predefined Non-ISO Dialects</a></div><!-- end of toc-table -->
+
+<div class="toc-table"><a href="#tab:regionmappings"><span class="numberline">A.1</span>Region Mappings</a></div><!-- end of toc-table -->
+
+<div class="toc-table"><a href="#tab:scriptmappings"><span class="numberline">A.2</span>Script Mappings</a></div><!-- end of toc-table -->
+ </div><!-- end of lot --><p>
+
+</section><!-- end of section chapter*.2 -->
+
+<section id="part.I"><!-- start of section part.I --><div class="tomain"><a href="#main">[top]</a></div>
+<div class="part"><!-- start of part header -->I. User Guide<div class="labellink"><a href="#part.I">[link]</a></div></div><!-- end of part header -->
+<p>
+
+</section><!-- end of section part.I -->
+
+<section id="sec:intro"><!-- start of section sec:intro --><div class="tomain"><a href="#main">[top]</a></div>
+<h1><!-- start of chapter header -->1. Introduction<div class="labellink"><a href="#sec:intro">[link]</a></div></h1><!-- end of chapter header -->
+<p>
+When I’m developing a package that provides multilingual support (for example, <a id="wrglossary.20"></a><a href="#glo:pkg.glossaries"><span class="styfmt">glossaries</span></a>) it’s cumbersome trying to work out if the user has requested translations for fixed text. This usually involves checking if <a id="wrglossary.21"></a><a href="#glo:pkg.babel"><span class="styfmt">babel</span></a> or <a id="wrglossary.22"></a><a href="#glo:pkg.translator"><span class="styfmt">translator</span></a> or <a id="wrglossary.23"></a><a href="#glo:pkg.polyglossia"><span class="styfmt">polyglossia</span></a> has been loaded and, if so, what language settings have been used. The result can be a tangled mass of conditional code. The alternative is to tell users to add the language as a document class option, which they may or may not want to do, or to tell them to supply the language settings to every package they load that provides multilingual support, which users are even less likely to want to do.<p>
+The <a id="wrglossary.24"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> package tries to neaten this up by working out as much of this information as possible for you and providing a command that iterates through the loaded languages. This way, you can just iterate through the list of tracked languages and, for each language, either define the translations or warn the user that there’s no translation for that language.<p>
+This package works best with <a id="wrglossary.25"></a><a href="#glo:pkg.ngerman"><span class="styfmt">ngerman</span></a> and <a id="wrglossary.26"></a><a href="#glo:pkg.german"><span class="styfmt">german</span></a> (since it’s a simple test to determine if they have been loaded) and recent versions of <a id="wrglossary.27"></a><a href="#glo:pkg.polyglossia"><span class="styfmt">polyglossia</span></a> (which conveniently provides <a id="wrglossary.28"></a><a href="#glo:xpg@bcp@loaded"><code class="csfmt">\xpg@bcp@loaded</code></a>) or when the language options are specified in the document class option list. It works fairly well with <a id="wrglossary.29"></a><a href="#glo:pkg.translator"><span class="styfmt">translator</span></a> but will additionally assume the root language was also requested when a dialect is specified. So, for example, <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><code class="cmd">\usepackage</code>[<a id="wrglossary.30"></a><a href="#glo:opt.british"><span class="optfmt">british</span></a>]{translator}
+<code class="cmd">\usepackage</code>{tracklang}
+</pre> is equivalent to <pre class="compactcodebox"><code class="cmd">\usepackage</code>[<a id="wrglossary.31"></a><a href="#glo:opt.british"><span class="optfmt">british</span></a>]{translator}
+<code class="cmd">\usepackage</code>[<a id="wrglossary.32"></a><a href="#glo:opt.english"><span class="optfmt">english</span></a>,<a id="wrglossary.33"></a><a href="#glo:opt.british"><span class="optfmt">british</span></a>]{tracklang}
+</pre> This means that <a id="wrglossary.34"></a><a href="#glo:ForEachTrackedDialect"><code class="csfmt">\ForEachTrackedDialect</code></a> will iterate through the list <span class="qt">“<a id="wrglossary.35"></a><a href="#glo:opt.english"><span class="optfmt">english</span></a>,<a id="wrglossary.36"></a><a href="#glo:opt.british"><span class="optfmt">british</span></a>â€</span> instead of just <span class="qt">“<a id="wrglossary.37"></a><a href="#glo:opt.british"><span class="optfmt">british</span></a>â€</span>, which can result in some redundancy.<p>
+Unfortunately I can’t find any way of detecting a list of languages loaded through <a id="wrglossary.38"></a><a href="#glo:pkg.babel"><span class="styfmt">babel</span>’s</a> new <a id="wrglossary.39"></a><a href="#glo:babelprovide"><code class="csfmt">\babelprovide</code></a> command. As far as I can tell, the only stored list is in <a id="wrglossary.40"></a><a href="#glo:bbl@loaded"><code class="csfmt">\bbl@loaded</code></a> which only contains the languages loaded through package options.<p>
+If the <a id="wrglossary.41"></a><a href="#glo:pkg.ngerman"><span class="styfmt">ngerman</span></a> package has been loaded, <a id="wrglossary.42"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> effectively does: <pre class="compactcodebox"><a id="wrglossary.43"></a><a href="#glo:TrackPredefinedDialect"><code class="csfmt">\TrackPredefinedDialect</code></a>{<a id="wrglossary.44"></a><a href="#glo:opt.ngerman"><span class="optfmt">ngerman</span></a>}
+</pre> Similarly, if the <a id="wrglossary.45"></a><a href="#glo:pkg.german"><span class="styfmt">german</span></a> package has been loaded, <a id="wrglossary.46"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> effectively does <pre class="compactcodebox"><a id="wrglossary.47"></a><a href="#glo:TrackPredefinedDialect"><code class="csfmt">\TrackPredefinedDialect</code></a>{<a id="wrglossary.48"></a><a href="#glo:opt.german"><span class="optfmt">german</span></a>}
+</pre><p>
+If any document class or package options are passed to <a id="wrglossary.49"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a>, then <a id="wrglossary.50"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> won’t bother checking for <a id="wrglossary.51"></a><a href="#glo:pkg.babel"><span class="styfmt">babel</span></a>, <a id="wrglossary.52"></a><a href="#glo:pkg.translator"><span class="styfmt">translator</span></a>, <a id="wrglossary.53"></a><a href="#glo:pkg.ngerman"><span class="styfmt">ngerman</span></a>, <a id="wrglossary.54"></a><a href="#glo:pkg.german"><span class="styfmt">german</span></a> or <a id="wrglossary.55"></a><a href="#glo:pkg.polyglossia"><span class="styfmt">polyglossia</span></a>. So, if the above example is changed to: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><code class="cmd">\documentclass</code>[<a id="wrglossary.56"></a><a href="#glo:opt.british"><span class="optfmt">british</span></a>]{article}
+<code class="cmd">\usepackage</code>{translator}
+<code class="cmd">\usepackage</code>{tracklang}
+</pre> then the dialect list will just consist of <span class="qt">“<a id="wrglossary.57"></a><a href="#glo:opt.british"><span class="optfmt">british</span></a>â€</span> rather than <span class="qt">“<a id="wrglossary.58"></a><a href="#glo:opt.english"><span class="optfmt">english</span></a>,<a id="wrglossary.59"></a><a href="#glo:opt.british"><span class="optfmt">british</span></a>â€</span>. This does, however, mean that if the user mixes class and package options, only the class options will be detected. For example: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><code class="cmd">\documentclass</code>[<a id="wrglossary.60"></a><a href="#glo:opt.british"><span class="optfmt">british</span></a>]{article}
+<code class="cmd">\usepackage</code>[<a id="wrglossary.61"></a><a href="#glo:opt.french"><span class="optfmt">french</span></a>]{babel}
+<code class="cmd">\usepackage</code>{tracklang}
+</pre> In this case, only the <a id="wrglossary.62"></a><a href="#glo:opt.british"><span class="optfmt">british</span></a> option will be detected. The user can therefore use the document class option (or <a id="wrglossary.63"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> package option) to override the dialect and set the country code (where provided). For example: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><code class="cmd">\documentclass</code>[<a id="wrglossary.64"></a><a href="#glo:opt.es-MX"><span class="optfmt">es-MX</span></a>]{article}
+<code class="cmd">\usepackage</code>[<a id="wrglossary.65"></a><a href="#glo:opt.spanish"><span class="optfmt">spanish</span></a>]{babel}
+<code class="cmd">\usepackage</code>{tracklang}
+</pre> This sets the dialect to <a id="wrglossary.66"></a><a href="#glo:opt.mexicanspanish"><span class="optfmt">mexicanspanish</span></a> and the root language to <a id="wrglossary.67"></a><a href="#glo:opt.spanish"><span class="optfmt">spanish</span></a>. <p>
+Predefined dialects are listed in Tables <a href="#tab:isoopts">1.1</a>, <a href="#tab:rootlangopts">1.2</a> & <a href="#tab:nonisoopts">1.3</a>. These may be passed in the document class options or used in <a id="wrglossary.68"></a><a href="#glo:TrackPredefinedDialect"><code class="csfmt">\TrackPredefinedDialect</code></a>, as illustrated above. <p>
+§<a href="#sec:summary">2</a> provides brief examples of use for those who want a general overview before reading the more detailed sections. §<a href="#sec:generic">3</a> describes generic commands for identifying the document languages. §<a href="#sec:user">5</a> is for package writers who want to add multilingual support to their package and need to know which settings the user has requested through language packages like <a id="wrglossary.69"></a><a href="#glo:pkg.babel"><span class="styfmt">babel</span></a>. §<a href="#sec:langsty">6</a> is for developers of language definition packages who want to help other package writers to detect what languages have been requested.<p>
+
+<table class="glossary-ruled">
+<caption id="tab:isoopts">Table&nbsp;1: Predefined <a href="#glo:ISO">ISO</a> Language-Region Dialects. (<a href="#glo:ISO">ISO</a> tag or dialect label may be used as a package option or with <a href="#glo:TrackPredefinedDialect"><code class="csfmt">\TrackPredefinedDialect</code></a>)</caption>
+<tr class="glossary-ruled">
+<th class="glossary-name cell-noborder-bothsep-l">ISO Tag</th>
+<th class="glossary-other cell-noborder-bothsep-l">Dialect Label</th>
+<th class="glossary-name cell-noborder-bothsep-l cell-left-border">ISO Tag</th>
+<th class="glossary-other cell-noborder-bothsep-l">Dialect Label</th></tr>
+
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.cy-GB"><span class="optfmt">cy-GB</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l"><span class="optfmt">GBwelsh</span>
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.de-AT"><span class="optfmt">de-AT</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l"><span class="optfmt">austrian</span></tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.de-AT-1996"><span class="optfmt">de-AT-1996</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l"><span class="optfmt">naustrian</span>
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.de-BE"><span class="optfmt">de-BE</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l"><span class="optfmt">belgiangerman</span></tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.de-CH"><span class="optfmt">de-CH</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l"><span class="optfmt">swissgerman</span>
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.de-CH-1996"><span class="optfmt">de-CH-1996</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l"><span class="optfmt">nswissgerman</span></tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.de-DE"><span class="optfmt">de-DE</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l"><span class="optfmt">germanDE</span>
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.de-DE-1996"><span class="optfmt">de-DE-1996</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l"><span class="optfmt">ngermanDE</span></tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.en-AU"><span class="optfmt">en-AU</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l"><span class="optfmt">australian</span>
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.en-CA"><span class="optfmt">en-CA</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l"><span class="optfmt">canadian</span></tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.en-GB"><span class="optfmt">en-GB</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l"><span class="optfmt">british</span>
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.en-GG"><span class="optfmt">en-GG</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l"><span class="optfmt">guernseyenglish</span></tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.en-IE"><span class="optfmt">en-IE</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l"><span class="optfmt">IEenglish</span>
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.en-IM"><span class="optfmt">en-IM</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l"><span class="optfmt">isleofmanenglish</span></tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.en-JE"><span class="optfmt">en-JE</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l"><span class="optfmt">jerseyenglish</span>
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.en-MT"><span class="optfmt">en-MT</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l"><span class="optfmt">maltaenglish</span></tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.en-NZ"><span class="optfmt">en-NZ</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l"><span class="optfmt">newzealand</span>
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.en-US"><span class="optfmt">en-US</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l"><span class="optfmt">american</span></tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.es-AR"><span class="optfmt">es-AR</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l"><span class="optfmt">argentinespanish</span>
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.es-BO"><span class="optfmt">es-BO</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l"><span class="optfmt">bolivianspanish</span></tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.es-CL"><span class="optfmt">es-CL</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l"><span class="optfmt">chilianspanish</span>
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.es-CO"><span class="optfmt">es-CO</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l"><span class="optfmt">columbianspanish</span></tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.es-CR"><span class="optfmt">es-CR</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l"><span class="optfmt">costaricanspanish</span>
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.es-CU"><span class="optfmt">es-CU</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l"><span class="optfmt">cubanspanish</span></tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.es-DO"><span class="optfmt">es-DO</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l"><span class="optfmt">dominicanspanish</span>
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.es-EC"><span class="optfmt">es-EC</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l"><span class="optfmt">ecudorianspanish</span></tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.es-ES"><span class="optfmt">es-ES</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l"><span class="optfmt">spainspanish</span>
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.es-GT"><span class="optfmt">es-GT</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l"><span class="optfmt">guatemalanspanish</span></tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.es-HN"><span class="optfmt">es-HN</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l"><span class="optfmt">honduranspanish</span>
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.es-MX"><span class="optfmt">es-MX</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l"><span class="optfmt">mexicanspanish</span></tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.es-NI"><span class="optfmt">es-NI</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l"><span class="optfmt">nicaraguanspanish</span>
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.es-PA"><span class="optfmt">es-PA</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l"><span class="optfmt">panamaspanish</span></tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.es-PE"><span class="optfmt">es-PE</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l"><span class="optfmt">peruvianspanish</span>
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.es-PR"><span class="optfmt">es-PR</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l"><span class="optfmt">puertoricospanish</span></tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.es-PY"><span class="optfmt">es-PY</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l"><span class="optfmt">paraguayspanish</span>
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.es-SV"><span class="optfmt">es-SV</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l"><span class="optfmt">elsalvadorspanish</span></tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.es-UY"><span class="optfmt">es-UY</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l"><span class="optfmt">uruguayspanish</span>
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.es-VE"><span class="optfmt">es-VE</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l"><span class="optfmt">venezuelanspanish</span></tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.fr-BE"><span class="optfmt">fr-BE</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l"><span class="optfmt">belgique</span>
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.fr-CA"><span class="optfmt">fr-CA</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l"><span class="optfmt">canadien</span></tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.fr-CH"><span class="optfmt">fr-CH</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l"><span class="optfmt">swissfrench</span>
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.fr-FR"><span class="optfmt">fr-FR</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l"><span class="optfmt">france</span></tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.fr-GG"><span class="optfmt">fr-GG</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l"><span class="optfmt">guernseyfrench</span>
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.fr-JE"><span class="optfmt">fr-JE</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l"><span class="optfmt">jerseyfrench</span></tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.ga-GB"><span class="optfmt">ga-GB</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l"><span class="optfmt">GBirish</span>
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.ga-IE"><span class="optfmt">ga-IE</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l"><span class="optfmt">IEirish</span></tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.gd-GB"><span class="optfmt">gd-GB</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l"><span class="optfmt">GBscottish</span>
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.hr-HR"><span class="optfmt">hr-HR</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l"><span class="optfmt">croatia</span></tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.hu-HU"><span class="optfmt">hu-HU</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l"><span class="optfmt">hungarian</span>
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.id-IN"><span class="optfmt">id-IN</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l"><span class="optfmt">bahasa</span></tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.it-CH"><span class="optfmt">it-CH</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l"><span class="optfmt">swissitalian</span>
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.it-HR"><span class="optfmt">it-HR</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l"><span class="optfmt">istriacountyitalian</span></tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.it-IT"><span class="optfmt">it-IT</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l"><span class="optfmt">italy</span>
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.it-SI"><span class="optfmt">it-SI</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l"><span class="optfmt">sloveneistriaitalian</span></tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.it-SM"><span class="optfmt">it-SM</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l"><span class="optfmt">sanmarino</span>
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.it-VA"><span class="optfmt">it-VA</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l"><span class="optfmt">vatican</span></tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.ms-MY"><span class="optfmt">ms-MY</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l"><span class="optfmt">malay</span>
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.mt-MT"><span class="optfmt">mt-MT</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l"><span class="optfmt">maltamaltese</span></tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.nl-BE"><span class="optfmt">nl-BE</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l"><span class="optfmt">flemish</span>
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.nl-NL"><span class="optfmt">nl-NL</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l"><span class="optfmt">netherlands</span></tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.pt-BR"><span class="optfmt">pt-BR</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l"><span class="optfmt">brazilian</span>
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.pt-PT"><span class="optfmt">pt-PT</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l"><span class="optfmt">portugal</span></tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.rm-CH"><span class="optfmt">rm-CH</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l"><span class="optfmt">swissromansh</span>
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.sl-SI"><span class="optfmt">sl-SI</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l"><span class="optfmt">slovenia</span></tr><tr><td colspan="4" class="glossary-postamble">Other combinations need to be set with <a href="#glo:TrackLocale"><code class="csfmt">\TrackLocale</code></a> or <a href="#glo:TrackLanguageTag"><code class="csfmt">\TrackLanguageTag</code></a></td></tr></table>
+<p>
+
+<table class="glossary">
+<caption id="tab:rootlangopts">Table&nbsp;2: Predefined Root Languages. (<sup><span title="dagger marker" class="icon">†</span></sup>Has an associated territory.) The corresponding tag obtained with <code class="code"><a href="#glo:GetTrackedLanguageTag"><code class="csfmt">\GetTrackedLanguageTag</code></a>{<span class="meta">〈<em class="metainner">dialect</em>〉</span>}</code> is shown in parentheses</caption>
+
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.abkhaz"><span class="optfmt">abkhaz</span></dfn> (<span class="optfmt">ab</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.afar"><span class="optfmt">afar</span></dfn> (<span class="optfmt">aa</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.afrikaans"><span class="optfmt">afrikaans</span></dfn> (<span class="optfmt">af</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.akan"><span class="optfmt">akan</span></dfn> (<span class="optfmt">ak</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.albanian"><span class="optfmt">albanian</span></dfn> (<span class="optfmt">sq</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.amharic"><span class="optfmt">amharic</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">am-ET</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.anglosaxon"><span class="optfmt">anglosaxon</span></dfn> (<span class="optfmt">ang</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.apache"><span class="optfmt">apache</span></dfn> (<span class="optfmt">apa</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.arabic"><span class="optfmt">arabic</span></dfn> (<span class="optfmt">ar</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.aragonese"><span class="optfmt">aragonese</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">an-ES</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.armenian"><span class="optfmt">armenian</span></dfn> (<span class="optfmt">hy</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.assamese"><span class="optfmt">assamese</span></dfn> (<span class="optfmt">as</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.asturian"><span class="optfmt">asturian</span></dfn> (<span class="optfmt">ast</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.avaric"><span class="optfmt">avaric</span></dfn> (<span class="optfmt">av</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.avestan"><span class="optfmt">avestan</span></dfn> (<span class="optfmt">ae</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.aymara"><span class="optfmt">aymara</span></dfn> (<span class="optfmt">ay</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.azerbaijani"><span class="optfmt">azerbaijani</span></dfn> (<span class="optfmt">az</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.bahasai"><span class="optfmt">bahasai</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">id-IN</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.bahasam"><span class="optfmt">bahasam</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">ms-MY</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.bambara"><span class="optfmt">bambara</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">bm-ML</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.bashkir"><span class="optfmt">bashkir</span></dfn> (<span class="optfmt">ba</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.basque"><span class="optfmt">basque</span></dfn> (<span class="optfmt">eu</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.belarusian"><span class="optfmt">belarusian</span></dfn> (<span class="optfmt">be</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.bengali"><span class="optfmt">bengali</span></dfn> (<span class="optfmt">bn</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.berber"><span class="optfmt">berber</span></dfn> (<span class="optfmt">ber</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.bihari"><span class="optfmt">bihari</span></dfn> (<span class="optfmt">bh</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.bislama"><span class="optfmt">bislama</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">bi-VU</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.bokmal"><span class="optfmt">bokmal</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">nb-NO</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.bosnian"><span class="optfmt">bosnian</span></dfn> (<span class="optfmt">bs</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.breton"><span class="optfmt">breton</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">br-FR</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.bulgarian"><span class="optfmt">bulgarian</span></dfn> (<span class="optfmt">bg</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.burmese"><span class="optfmt">burmese</span></dfn> (<span class="optfmt">my</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.catalan"><span class="optfmt">catalan</span></dfn> (<span class="optfmt">ca</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.chamorro"><span class="optfmt">chamorro</span></dfn> (<span class="optfmt">ch</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.chechen"><span class="optfmt">chechen</span></dfn> (<span class="optfmt">ce</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.chichewa"><span class="optfmt">chichewa</span></dfn> (<span class="optfmt">ny</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.chinese"><span class="optfmt">chinese</span></dfn> (<span class="optfmt">zh</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.churchslavonic"><span class="optfmt">churchslavonic</span></dfn> (<span class="optfmt">cu</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.chuvash"><span class="optfmt">chuvash</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">cv-RU</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.coptic"><span class="optfmt">coptic</span></dfn> (<span class="optfmt">cop</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.cornish"><span class="optfmt">cornish</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">kw-GB</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.corsican"><span class="optfmt">corsican</span></dfn> (<span class="optfmt">co</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.cree"><span class="optfmt">cree</span></dfn> (<span class="optfmt">cr</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.croatian"><span class="optfmt">croatian</span></dfn> (<span class="optfmt">hr</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.czech"><span class="optfmt">czech</span></dfn> (<span class="optfmt">cs</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.danish"><span class="optfmt">danish</span></dfn> (<span class="optfmt">da</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.divehi"><span class="optfmt">divehi</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">dv-MV</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.dutch"><span class="optfmt">dutch</span></dfn> (<span class="optfmt">nl</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.dzongkha"><span class="optfmt">dzongkha</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">dz-BT</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.easternpunjabi"><span class="optfmt">easternpunjabi</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">pa-IN</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.english"><span class="optfmt">english</span></dfn> (<span class="optfmt">en</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.esperanto"><span class="optfmt">esperanto</span></dfn> (<span class="optfmt">eo</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.estonian"><span class="optfmt">estonian</span></dfn> (<span class="optfmt">et</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.ewe"><span class="optfmt">ewe</span></dfn> (<span class="optfmt">ee</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.faroese"><span class="optfmt">faroese</span></dfn> (<span class="optfmt">fo</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.farsi"><span class="optfmt">farsi</span></dfn> (<span class="optfmt">fa</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.fijian"><span class="optfmt">fijian</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">fj-FJ</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.finnish"><span class="optfmt">finnish</span></dfn> (<span class="optfmt">fi</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.french"><span class="optfmt">french</span></dfn> (<span class="optfmt">fr</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.friulan"><span class="optfmt">friulan</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">fur-IT</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.fula"><span class="optfmt">fula</span></dfn> (<span class="optfmt">ff</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.galician"><span class="optfmt">galician</span></dfn> (<span class="optfmt">gl</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.ganda"><span class="optfmt">ganda</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">lg-UG</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.georgian"><span class="optfmt">georgian</span></dfn> (<span class="optfmt">ka</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.german"><span class="optfmt">german</span></dfn> (<span class="optfmt">de</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.greek"><span class="optfmt">greek</span></dfn> (<span class="optfmt">el</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.guarani"><span class="optfmt">guarani</span></dfn> (<span class="optfmt">gn</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.gujarati"><span class="optfmt">gujarati</span></dfn> (<span class="optfmt">gu</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.haitian"><span class="optfmt">haitian</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">ht-HT</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.hausa"><span class="optfmt">hausa</span></dfn> (<span class="optfmt">ha</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.hebrew"><span class="optfmt">hebrew</span></dfn> (<span class="optfmt">he</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.herero"><span class="optfmt">herero</span></dfn> (<span class="optfmt">hz</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.hindi"><span class="optfmt">hindi</span></dfn> (<span class="optfmt">hi</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.hirimotu"><span class="optfmt">hirimotu</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">ho-PG</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.icelandic"><span class="optfmt">icelandic</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">is-IS</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.ido"><span class="optfmt">ido</span></dfn> (<span class="optfmt">io</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.igbo"><span class="optfmt">igbo</span></dfn> (<span class="optfmt">ig</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.interlingua"><span class="optfmt">interlingua</span></dfn> (<span class="optfmt">ia</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.interlingue"><span class="optfmt">interlingue</span></dfn> (<span class="optfmt">ie</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.inuktitut"><span class="optfmt">inuktitut</span></dfn> (<span class="optfmt">iu</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.inupiaq"><span class="optfmt">inupiaq</span></dfn> (<span class="optfmt">ik</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.irish"><span class="optfmt">irish</span></dfn> (<span class="optfmt">ga</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.italian"><span class="optfmt">italian</span></dfn> (<span class="optfmt">it</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.japanese"><span class="optfmt">japanese</span></dfn> (<span class="optfmt">ja</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.javanese"><span class="optfmt">javanese</span></dfn> (<span class="optfmt">jv</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.kalaallisut"><span class="optfmt">kalaallisut</span></dfn> (<span class="optfmt">kl</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.kannada"><span class="optfmt">kannada</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">kn-IN</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.kanuri"><span class="optfmt">kanuri</span></dfn> (<span class="optfmt">kr</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.kashmiri"><span class="optfmt">kashmiri</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">ks-IN</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.kazakh"><span class="optfmt">kazakh</span></dfn> (<span class="optfmt">kk</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.khmer"><span class="optfmt">khmer</span></dfn> (<span class="optfmt">km</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.kikuyu"><span class="optfmt">kikuyu</span></dfn> (<span class="optfmt">ki</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.kinyarwanda"><span class="optfmt">kinyarwanda</span></dfn> (<span class="optfmt">rw</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.kirundi"><span class="optfmt">kirundi</span></dfn> (<span class="optfmt">rn</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.komi"><span class="optfmt">komi</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">kv-RU</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.kongo"><span class="optfmt">kongo</span></dfn> (<span class="optfmt">kg</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.korean"><span class="optfmt">korean</span></dfn> (<span class="optfmt">ko</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.kurdish"><span class="optfmt">kurdish</span></dfn> (<span class="optfmt">ku</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.kwanyama"><span class="optfmt">kwanyama</span></dfn> (<span class="optfmt">kj</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.kyrgyz"><span class="optfmt">kyrgyz</span></dfn> (<span class="optfmt">ky</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.lao"><span class="optfmt">lao</span></dfn> (<span class="optfmt">lo</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.latin"><span class="optfmt">latin</span></dfn> (<span class="optfmt">la</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.latvian"><span class="optfmt">latvian</span></dfn> (<span class="optfmt">lv</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.limburgish"><span class="optfmt">limburgish</span></dfn> (<span class="optfmt">li</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.lingala"><span class="optfmt">lingala</span></dfn> (<span class="optfmt">ln</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.lithuanian"><span class="optfmt">lithuanian</span></dfn> (<span class="optfmt">lt</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.lsorbian"><span class="optfmt">lsorbian</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">dsb-DE</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.lubakatanga"><span class="optfmt">lubakatanga</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">lu-CD</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.luxembourgish"><span class="optfmt">luxembourgish</span></dfn> (<span class="optfmt">lb</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.macedonian"><span class="optfmt">macedonian</span></dfn> (<span class="optfmt">mk</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.magyar"><span class="optfmt">magyar</span></dfn> (<span class="optfmt">hu</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.malagasy"><span class="optfmt">malagasy</span></dfn> (<span class="optfmt">mg</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.malayalam"><span class="optfmt">malayalam</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">ml-IN</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.maltese"><span class="optfmt">maltese</span></dfn> (<span class="optfmt">mt</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.manx"><span class="optfmt">manx</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">gv-IM</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.maori"><span class="optfmt">maori</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">mi-NZ</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.marathi"><span class="optfmt">marathi</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">mr-IN</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.marshallese"><span class="optfmt">marshallese</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">mh-MH</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.mongolian"><span class="optfmt">mongolian</span></dfn> (<span class="optfmt">mn</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.nauruan"><span class="optfmt">nauruan</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">na-NR</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.navajo"><span class="optfmt">navajo</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">nv-US</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.ndonga"><span class="optfmt">ndonga</span></dfn> (<span class="optfmt">ng</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.nepali"><span class="optfmt">nepali</span></dfn> (<span class="optfmt">ne</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.nko"><span class="optfmt">nko</span></dfn> (<span class="optfmt">nqo</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.norsk"><span class="optfmt">norsk</span></dfn> (<span class="optfmt">no</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.northernndebele"><span class="optfmt">northernndebele</span></dfn> (<span class="optfmt">nd</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.northernsotho"><span class="optfmt">northernsotho</span></dfn> (<span class="optfmt">nso</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.nuosu"><span class="optfmt">nuosu</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">ii-CN</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.nynorsk"><span class="optfmt">nynorsk</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">nn-NO</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.occitan"><span class="optfmt">occitan</span></dfn> (<span class="optfmt">oc</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.ojibwe"><span class="optfmt">ojibwe</span></dfn> (<span class="optfmt">oj</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.oriya"><span class="optfmt">oriya</span></dfn> (<span class="optfmt">or</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.oromo"><span class="optfmt">oromo</span></dfn> (<span class="optfmt">om</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.ossetian"><span class="optfmt">ossetian</span></dfn> (<span class="optfmt">os</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.pali"><span class="optfmt">pali</span></dfn> (<span class="optfmt">pi</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.pashto"><span class="optfmt">pashto</span></dfn> (<span class="optfmt">ps</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.piedmontese"><span class="optfmt">piedmontese</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">pms-IT</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.polish"><span class="optfmt">polish</span></dfn> (<span class="optfmt">pl</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.portuges"><span class="optfmt">portuges</span></dfn> (<span class="optfmt">pt</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.quechua"><span class="optfmt">quechua</span></dfn> (<span class="optfmt">qu</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.romanian"><span class="optfmt">romanian</span></dfn> (<span class="optfmt">ro</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.romansh"><span class="optfmt">romansh</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">rm-CH</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.russian"><span class="optfmt">russian</span></dfn> (<span class="optfmt">ru</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.samin"><span class="optfmt">samin</span></dfn> (<span class="optfmt">se</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.samoan"><span class="optfmt">samoan</span></dfn> (<span class="optfmt">sm</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.sango"><span class="optfmt">sango</span></dfn> (<span class="optfmt">sg</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.sanskrit"><span class="optfmt">sanskrit</span></dfn> (<span class="optfmt">sa</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.sardinian"><span class="optfmt">sardinian</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">sc-IT</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.scottish"><span class="optfmt">scottish</span></dfn> (<span class="optfmt">gd</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.serbian"><span class="optfmt">serbian</span></dfn> (<span class="optfmt">sr</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.shona"><span class="optfmt">shona</span></dfn> (<span class="optfmt">sn</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.sindhi"><span class="optfmt">sindhi</span></dfn> (<span class="optfmt">sd</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.sinhalese"><span class="optfmt">sinhalese</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">si-LK</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.slovak"><span class="optfmt">slovak</span></dfn> (<span class="optfmt">sk</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.slovene"><span class="optfmt">slovene</span></dfn> (<span class="optfmt">sl</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.somali"><span class="optfmt">somali</span></dfn> (<span class="optfmt">so</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.southernndebele"><span class="optfmt">southernndebele</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">nr-ZA</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.southernsotho"><span class="optfmt">southernsotho</span></dfn> (<span class="optfmt">st</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.spanish"><span class="optfmt">spanish</span></dfn> (<span class="optfmt">es</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.sudanese"><span class="optfmt">sudanese</span></dfn> (<span class="optfmt">su</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.swahili"><span class="optfmt">swahili</span></dfn> (<span class="optfmt">sw</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.swati"><span class="optfmt">swati</span></dfn> (<span class="optfmt">ss</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.swedish"><span class="optfmt">swedish</span></dfn> (<span class="optfmt">sv</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.syriac"><span class="optfmt">syriac</span></dfn> (<span class="optfmt">syr</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.tagalog"><span class="optfmt">tagalog</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">tl-PH</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.tahitian"><span class="optfmt">tahitian</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">ty-PF</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.tai"><span class="optfmt">tai</span></dfn> (<span class="optfmt">tai</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.tajik"><span class="optfmt">tajik</span></dfn> (<span class="optfmt">tg</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.tamil"><span class="optfmt">tamil</span></dfn> (<span class="optfmt">ta</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.tatar"><span class="optfmt">tatar</span></dfn> (<span class="optfmt">tt</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.telugu"><span class="optfmt">telugu</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">te-IN</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.thai"><span class="optfmt">thai</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">th-TH</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.tibetan"><span class="optfmt">tibetan</span></dfn> (<span class="optfmt">bo</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.tigrinya"><span class="optfmt">tigrinya</span></dfn> (<span class="optfmt">ti</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.tonga"><span class="optfmt">tonga</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">to-TO</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.tsonga"><span class="optfmt">tsonga</span></dfn> (<span class="optfmt">ts</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.tswana"><span class="optfmt">tswana</span></dfn> (<span class="optfmt">tn</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.turkish"><span class="optfmt">turkish</span></dfn> (<span class="optfmt">tr</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.turkmen"><span class="optfmt">turkmen</span></dfn> (<span class="optfmt">tk</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.twi"><span class="optfmt">twi</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">tw-GH</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.ukrainian"><span class="optfmt">ukrainian</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">uk-UA</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.undetermined"><span class="optfmt">undetermined</span></dfn> (<span class="optfmt">und</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.urdu"><span class="optfmt">urdu</span></dfn> (<span class="optfmt">ur</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.usorbian"><span class="optfmt">usorbian</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">hsb-DE</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.uyghur"><span class="optfmt">uyghur</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">ug-CN</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.uzbek"><span class="optfmt">uzbek</span></dfn> (<span class="optfmt">uz</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.venda"><span class="optfmt">venda</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">ve-ZA</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.vietnamese"><span class="optfmt">vietnamese</span></dfn> (<span class="optfmt">vi</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.volapuk"><span class="optfmt">volapuk</span></dfn> (<span class="optfmt">vo</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.walloon"><span class="optfmt">walloon</span></dfn> (<span class="optfmt">wa</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.welsh"><span class="optfmt">welsh</span></dfn> (<span class="optfmt">cy</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.westernfrisian"><span class="optfmt">westernfrisian</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">fy-NL</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.wolof"><span class="optfmt">wolof</span></dfn> (<span class="optfmt">wo</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.xhosa"><span class="optfmt">xhosa</span></dfn> (<span class="optfmt">xh</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.yiddish"><span class="optfmt">yiddish</span></dfn> (<span class="optfmt">yi</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.yoruba"><span class="optfmt">yoruba</span></dfn> (<span class="optfmt">yo</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.zhuang"><span class="optfmt">zhuang</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">za-CN</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.zulu"><span class="optfmt">zulu</span></dfn> (<span class="optfmt">zu</span>)</tr></table>
+<p>
+
+<table class="glossary">
+<caption id="tab:nonisoopts">Table&nbsp;3: Predefined Non-ISO Dialects. (<sup><span title="dagger marker" class="icon">†</span></sup>Has an associated territory.) The corresponding language tag obtained with <code class="code"><a href="#glo:GetTrackedLanguageTag"><code class="csfmt">\GetTrackedLanguageTag</code></a>{<span class="meta">〈<em class="metainner">dialect</em>〉</span>}</code> is shown in parentheses. If the dialect has a corresponding mapping for the closest matching non-root language <a href="#glo:captionsdialect"><code class="csfmt">\captions<span class="meta">〈<em class="metainner">dialect</em>〉</span></code></a> or <a href="#glo:datedialect"><code class="csfmt">\date<span class="meta">〈<em class="metainner">dialect</em>〉</span></code></a>, this is also included after the tag following a slash.</caption>
+
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.acadian"><span class="optfmt">acadian</span></dfn> (<span class="optfmt">fr</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.american"><span class="optfmt">american</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">en-US</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.argentinespanish"><span class="optfmt">argentinespanish</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">es-AR</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.australian"><span class="optfmt">australian</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">en-AU</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.austrian"><span class="optfmt">austrian</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">de-AT</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.bahasa"><span class="optfmt">bahasa</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">id-IN</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.belgiangerman"><span class="optfmt">belgiangerman</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">de-BE</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.belgique"><span class="optfmt">belgique</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">fr-BE</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.bolivianspanish"><span class="optfmt">bolivianspanish</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">es-BO</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.brazil"><span class="optfmt">brazil</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">pt-BR</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.brazilian"><span class="optfmt">brazilian</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">pt-BR</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.british"><span class="optfmt">british</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">en-GB</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.canadian"><span class="optfmt">canadian</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">en-CA</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.canadien"><span class="optfmt">canadien</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">fr-CA</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.chilianspanish"><span class="optfmt">chilianspanish</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">es-CL</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.columbianspanish"><span class="optfmt">columbianspanish</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">es-CO</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.costaricanspanish"><span class="optfmt">costaricanspanish</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">es-CR</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.croatia"><span class="optfmt">croatia</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">hr-HR</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.cubanspanish"><span class="optfmt">cubanspanish</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">es-CU</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.cymraeg"><span class="optfmt">cymraeg</span></dfn> (<span class="optfmt">cy</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.deutsch"><span class="optfmt">deutsch</span></dfn> (<span class="optfmt">de</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.dominicanspanish"><span class="optfmt">dominicanspanish</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">es-DO</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.ecudorianspanish"><span class="optfmt">ecudorianspanish</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">es-EC</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.elsalvadorspanish"><span class="optfmt">elsalvadorspanish</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">es-SV</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.flemish"><span class="optfmt">flemish</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">nl-BE</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.francais"><span class="optfmt">francais</span></dfn> (<span class="optfmt">fr</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.france"><span class="optfmt">france</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">fr-FR</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.frenchb"><span class="optfmt">frenchb</span></dfn> (<span class="optfmt">fr</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.friulano"><span class="optfmt">friulano</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">fur-IT</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.friulian"><span class="optfmt">friulian</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">fur-IT</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.furlan"><span class="optfmt">furlan</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">fur-IT</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.gaeilge"><span class="optfmt">gaeilge</span></dfn> (<span class="optfmt">ga</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.gaelic"><span class="optfmt">gaelic</span></dfn> (<span class="optfmt">gd</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.galicien"><span class="optfmt">galicien</span></dfn> (<span class="optfmt">gl</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.GBirish"><span class="optfmt">GBirish</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">ga-GB</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.GBscottish"><span class="optfmt">GBscottish</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">gd-GB</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.GBwelsh"><span class="optfmt">GBwelsh</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">cy-GB</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.germanb"><span class="optfmt">germanb</span></dfn> (<span class="optfmt">de</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.germanDE"><span class="optfmt">germanDE</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">de-DE</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.guatemalanspanish"><span class="optfmt">guatemalanspanish</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">es-GT</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.guernseyenglish"><span class="optfmt">guernseyenglish</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">en-GG</span> / <a href="#glo:opt.british"><span class="optfmt">british</span></a>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.guernseyfrench"><span class="optfmt">guernseyfrench</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">fr-GG</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.honduranspanish"><span class="optfmt">honduranspanish</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">es-HN</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.hungarian"><span class="optfmt">hungarian</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">hu-HU</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.IEenglish"><span class="optfmt">IEenglish</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">en-IE</span> / <a href="#glo:opt.british"><span class="optfmt">british</span></a>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.IEirish"><span class="optfmt">IEirish</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">ga-IE</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.indon"><span class="optfmt">indon</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">id-IN</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.indonesian"><span class="optfmt">indonesian</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">id-IN</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.isleofmanenglish"><span class="optfmt">isleofmanenglish</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">en-IM</span> / <a href="#glo:opt.british"><span class="optfmt">british</span></a>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.istriacountycroatian"><span class="optfmt">istriacountycroatian</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">hr-HR</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.istriacountyitalian"><span class="optfmt">istriacountyitalian</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">it-HR</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.italy"><span class="optfmt">italy</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">it-IT</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.jerseyenglish"><span class="optfmt">jerseyenglish</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">en-JE</span> / <a href="#glo:opt.british"><span class="optfmt">british</span></a>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.jerseyfrench"><span class="optfmt">jerseyfrench</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">fr-JE</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.kurmanji"><span class="optfmt">kurmanji</span></dfn> (<span class="optfmt">ku</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.latein"><span class="optfmt">latein</span></dfn> (<span class="optfmt">la</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.lowersorbian"><span class="optfmt">lowersorbian</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">dsb-DE</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.malay"><span class="optfmt">malay</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">ms-MY</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.maltaenglish"><span class="optfmt">maltaenglish</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">en-MT</span> / <a href="#glo:opt.british"><span class="optfmt">british</span></a>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.maltamaltese"><span class="optfmt">maltamaltese</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">mt-MT</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.mexicanspanish"><span class="optfmt">mexicanspanish</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">es-MX</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.meyalu"><span class="optfmt">meyalu</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">ms-MY</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.naustrian"><span class="optfmt">naustrian</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">de-AT-1996</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.nbelgiangerman"><span class="optfmt">nbelgiangerman</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">de-BE-1996</span> / <a href="#glo:opt.ngerman"><span class="optfmt">ngerman</span></a>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.netherlands"><span class="optfmt">netherlands</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">nl-NL</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.newzealand"><span class="optfmt">newzealand</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">en-NZ</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.ngerman"><span class="optfmt">ngerman</span></dfn> (<span class="optfmt">de-1996</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.ngermanb"><span class="optfmt">ngermanb</span></dfn> (<span class="optfmt">de-1996</span> / <a href="#glo:opt.ngerman"><span class="optfmt">ngerman</span></a>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.ngermanDE"><span class="optfmt">ngermanDE</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">de-DE-1996</span> / <a href="#glo:opt.ngerman"><span class="optfmt">ngerman</span></a>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.nicaraguanspanish"><span class="optfmt">nicaraguanspanish</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">es-NI</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.nil"><span class="optfmt">nil</span></dfn> (<span class="optfmt">und</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.norwegian"><span class="optfmt">norwegian</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">no-NO</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.nswissgerman"><span class="optfmt">nswissgerman</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">de-CH-1996</span> / <a href="#glo:opt.ngerman"><span class="optfmt">ngerman</span></a>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.panamaspanish"><span class="optfmt">panamaspanish</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">es-PA</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.paraguayspanish"><span class="optfmt">paraguayspanish</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">es-PY</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.persian"><span class="optfmt">persian</span></dfn> (<span class="optfmt">fa</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.peruvianspanish"><span class="optfmt">peruvianspanish</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">es-PE</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.piemonteis"><span class="optfmt">piemonteis</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">pms-IT</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.polutoniko"><span class="optfmt">polutoniko</span></dfn> (<span class="optfmt">el</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.polutonikogreek"><span class="optfmt">polutonikogreek</span></dfn> (<span class="optfmt">el</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.portugal"><span class="optfmt">portugal</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">pt-PT</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.portuguese"><span class="optfmt">portuguese</span></dfn> (<span class="optfmt">pt</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.puertoricospanish"><span class="optfmt">puertoricospanish</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">es-PR</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.romanche"><span class="optfmt">romanche</span></dfn> (<span class="optfmt">rm-CH</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.romansch"><span class="optfmt">romansch</span></dfn> (<span class="optfmt">rm-CH</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.rumantsch"><span class="optfmt">rumantsch</span></dfn> (<span class="optfmt">rm-CH</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.russianb"><span class="optfmt">russianb</span></dfn> (<span class="optfmt">ru</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.sanmarino"><span class="optfmt">sanmarino</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">it-SM</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.serbianc"><span class="optfmt">serbianc</span></dfn> (<span class="optfmt">sr-Cyrl</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.serbianl"><span class="optfmt">serbianl</span></dfn> (<span class="optfmt">sr-Latn</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.sloveneistriaitalian"><span class="optfmt">sloveneistriaitalian</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">it-SI</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.sloveneistriaslovenian"><span class="optfmt">sloveneistriaslovenian</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">sl-SI</span> / <a href="#glo:opt.slovenian"><span class="optfmt">slovenian</span></a>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.slovenia"><span class="optfmt">slovenia</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">sl-SI</span> / <a href="#glo:opt.slovenian"><span class="optfmt">slovenian</span></a>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.slovenian"><span class="optfmt">slovenian</span></dfn> (<span class="optfmt">sl</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.spainspanish"><span class="optfmt">spainspanish</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">es-ES</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.swissfrench"><span class="optfmt">swissfrench</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">fr-CH</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.swissgerman"><span class="optfmt">swissgerman</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">de-CH</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.swissitalian"><span class="optfmt">swissitalian</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">it-CH</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.swissromansh"><span class="optfmt">swissromansh</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">rm-CH</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.UKenglish"><span class="optfmt">UKenglish</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">en-GB</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.ukraine"><span class="optfmt">ukraine</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">uk-UA</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.ukraineb"><span class="optfmt">ukraineb</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">uk-UA</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.uppersorbian"><span class="optfmt">uppersorbian</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">hsb-DE</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.uruguayspanish"><span class="optfmt">uruguayspanish</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">es-UY</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.USenglish"><span class="optfmt">USenglish</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">en-US</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.valencian"><span class="optfmt">valencian</span></dfn> (<span class="optfmt">ca</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.valencien"><span class="optfmt">valencien</span></dfn> (<span class="optfmt">ca</span>)
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.vatican"><span class="optfmt">vatican</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">it-VA</span>)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.venezuelanspanish"><span class="optfmt">venezuelanspanish</span><sup><span title="dagger marker" class="icon">†</span></sup></dfn> (<span class="optfmt">es-VE</span>)<td colspan="1"></td><td colspan="1"></td></tr></table>
+<p>
+
+</section><!-- end of section sec:intro -->
+
+<section id="sec:summary"><!-- start of section sec:summary --><div class="tomain"><a href="#main">[top]</a></div>
+<h1><!-- start of chapter header -->2. Summary of Use<div class="labellink"><a href="#sec:summary">[link]</a></div></h1><!-- end of chapter header -->
+<p>
+There are three levels of use:
+<ol class="displaylist">
+ <li><span class="numitem">1.</span>document level (code used by document authors);<p>
+<li><span class="numitem">2.</span>locale-sensitive package level (code for package authors who need to know what languages or locale the document is using, such as <a id="wrglossary.70"></a><a href="#glo:pkg.glossaries"><span class="styfmt">glossaries</span></a> to translate commands like <code class="cmd">\descriptionname</code> or <a id="wrglossary.71"></a><a href="#glo:pkg.datetime2"><span class="styfmt">datetime2</span></a> to provide localised formats or time zone information);<p>
+<li><span class="numitem">3.</span>language set-up level (code for packages that set up the document languages, such as <a id="wrglossary.72"></a><a href="#glo:pkg.babel"><span class="styfmt">babel</span></a> or <a id="wrglossary.73"></a><a href="#glo:pkg.polyglossia"><span class="styfmt">polyglossia</span></a>).
+</ol>
+<p>
+
+</section><!-- end of section sec:summary -->
+
+<section id="sec:summary-doc"><!-- start of section sec:summary-doc --><div class="tomain"><a href="#main">[top]</a></div>
+<h2><!-- start of section header -->2.1. Document Level<div class="labellink"><a href="#sec:summary-doc">[link]</a></div></h2><!-- end of section header -->
+<p>
+Document level use can be divided into generic TeX use (§<a href="#sec:tex">2.1.1</a>) and LaTeX-specific use (§<a href="#sec:latex">2.1.2</a>).<p>
+
+</section><!-- end of section sec:summary-doc -->
+
+<section id="sec:tex"><!-- start of section sec:tex --><div class="tomain"><a href="#main">[top]</a></div>
+<h3><!-- start of subsection header -->2.1.1. Generic TeX<div class="labellink"><a href="#sec:tex">[link]</a></div></h3><!-- end of subsection header -->
+<p>
+This section is for generic TeX use. The <a id="wrglossary.74"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> files are loaded with <a id="wrglossary.75"></a><a href="#glo:input"><code class="csfmt">\input</code></a>. See §<a href="#sec:latex">2.1.2</a> for LaTeX use.<p>
+A Unix-like user wants the locale information picked up from the locale environment variable (the <a id="wrglossary.76"></a><a href="#glo:ext.tex"><span class="extfmt">tex</span></a> extension may be omitted): <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.77"></a><a href="#glo:input"><code class="csfmt">\input</code></a> <a id="wrglossary.78"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> <span class="comment">% v1.3</span>
+<a id="wrglossary.79"></a><a href="#glo:TrackLangFromEnv"><code class="csfmt">\TrackLangFromEnv</code></a>
+<span class="comment">% load packages that use tracklang for localisation</span>
+</pre><p>
+A Windows user wants the locale information picked up from the operating system (again the <a id="wrglossary.80"></a><a href="#glo:ext.tex"><span class="extfmt">tex</span></a> extension may be omitted): <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.81"></a><a href="#glo:input"><code class="csfmt">\input</code></a> <a id="wrglossary.82"></a><a href="#glo:file.texosquery.tex"><span class="filefmt">texosquery.tex</span></a>
+<a id="wrglossary.83"></a><a href="#glo:input"><code class="csfmt">\input</code></a> <a id="wrglossary.84"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> <span class="comment">% v1.3</span>
+<a id="wrglossary.85"></a><a href="#glo:TrackLangFromEnv"><code class="csfmt">\TrackLangFromEnv</code></a>
+<span class="comment">% load packages that use tracklang for localisation</span>
+</pre> Or (<a id="wrglossary.86"></a><a href="#glo:pkg.texosquery"><span class="styfmt">texosquery</span></a> v1.2) <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.87"></a><a href="#glo:input"><code class="csfmt">\input</code></a> <a id="wrglossary.88"></a><a href="#glo:file.texosquery.tex"><span class="filefmt">texosquery.tex</span></a> <span class="comment">% v1.2</span>
+<a id="wrglossary.89"></a><a href="#glo:input"><code class="csfmt">\input</code></a> <a id="wrglossary.90"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> <span class="comment">% v1.3</span>
+
+<a id="wrglossary.91"></a><a href="#glo:TeXOSQueryLangTag"><code class="csfmt">\TeXOSQueryLangTag</code></a>{<code class="cmd">\langtag</code>}
+<a id="wrglossary.92"></a><a href="#glo:TrackLanguageTag"><code class="csfmt">\TrackLanguageTag</code></a>{<code class="cmd">\langtag</code>}
+<span class="comment">% load packages that use tracklang for localisation</span>
+</pre> A Unix-like user who may or may not have <a id="wrglossary.93"></a><a href="#glo:app.texosquery"><span class="appfmt">texosquery</span></a> setup to run in the <a id="wrglossary.94"></a><a href="#glo:dual.shellescape">shell escape</a>: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.95"></a><a href="#glo:input"><code class="csfmt">\input</code></a> <a id="wrglossary.96"></a><a href="#glo:file.texosquery.tex"><span class="filefmt">texosquery.tex</span></a>
+<a id="wrglossary.97"></a><a href="#glo:input"><code class="csfmt">\input</code></a> <a id="wrglossary.98"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> <span class="comment">% v1.3</span>
+
+<code class="cmd">\ifx</code><a id="wrglossary.99"></a><a href="#glo:TeXOSQueryLangTag"><code class="csfmt">\TeXOSQueryLangTag</code></a><code class="cmd">\undefined</code>
+ <a id="wrglossary.100"></a><a href="#glo:TrackLangFromEnv"><code class="csfmt">\TrackLangFromEnv</code></a>
+<code class="cmd">\else</code>
+ <a id="wrglossary.101"></a><a href="#glo:TeXOSQueryLangTag"><code class="csfmt">\TeXOSQueryLangTag</code></a>{<code class="cmd">\langtag</code>}
+ <a id="wrglossary.102"></a><a href="#glo:TrackLanguageTag"><code class="csfmt">\TrackLanguageTag</code></a>{<code class="cmd">\langtag</code>}
+<code class="cmd">\fi</code>
+<span class="comment">% load packages that use tracklang for localisation</span>
+</pre><p>
+A user is writing in Italy in Armenian with a Latin <a id="wrglossary.103"></a><a href="#glo:idx.script">script</a> (<a id="wrglossary.104"></a><a href="#glo:opt.Latn"><span class="optfmt">Latn</span></a>) and the arevela <a id="wrglossary.105"></a><a href="#glo:idx.variant">variant</a>: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.106"></a><a href="#glo:input"><code class="csfmt">\input</code></a> <a id="wrglossary.107"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> <span class="comment">% v1.3</span>
+<a id="wrglossary.108"></a><a href="#glo:TrackLanguageTag"><code class="csfmt">\TrackLanguageTag</code></a>{hy-Latn-IT-arevela}
+<span class="comment">% load packages that use tracklang for localisation</span>
+</pre><p>
+A user is writing in English in the UK: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.109"></a><a href="#glo:input"><code class="csfmt">\input</code></a> <a id="wrglossary.110"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a>
+<a id="wrglossary.111"></a><a href="#glo:TrackPredefinedDialect"><code class="csfmt">\TrackPredefinedDialect</code></a>{british}
+<span class="comment">% load packages that use tracklang for localisation</span>
+</pre><p>
+Find out information about the current language (supplied in <a id="wrglossary.112"></a><a href="#glo:languagename"><code class="csfmt">\languagename</code></a>): <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.113"></a><a href="#glo:SetCurrentTrackedDialect"><code class="csfmt">\SetCurrentTrackedDialect</code></a>{<a id="wrglossary.114"></a><a href="#glo:languagename"><code class="csfmt">\languagename</code></a>}
+Dialect: <a id="wrglossary.115"></a><a href="#glo:CurrentTrackedDialect"><code class="csfmt">\CurrentTrackedDialect</code></a>.
+Language: <a id="wrglossary.116"></a><a href="#glo:CurrentTrackedLanguage"><code class="csfmt">\CurrentTrackedLanguage</code></a>.
+ISO Code: <a id="wrglossary.117"></a><a href="#glo:CurrentTrackedIsoCode"><code class="csfmt">\CurrentTrackedIsoCode</code></a>.
+Region: <a id="wrglossary.118"></a><a href="#glo:CurrentTrackedRegion"><code class="csfmt">\CurrentTrackedRegion</code></a>.
+Modifier: <a id="wrglossary.119"></a><a href="#glo:CurrentTrackedDialectModifier"><code class="csfmt">\CurrentTrackedDialectModifier</code></a>.
+Variant: <a id="wrglossary.120"></a><a href="#glo:CurrentTrackedDialectVariant"><code class="csfmt">\CurrentTrackedDialectVariant</code></a>.
+Script: <a id="wrglossary.121"></a><a href="#glo:CurrentTrackedDialectScript"><code class="csfmt">\CurrentTrackedDialectScript</code></a>.
+Sub-Lang: <a id="wrglossary.122"></a><a href="#glo:CurrentTrackedDialectSubLang"><code class="csfmt">\CurrentTrackedDialectSubLang</code></a>.
+Additional: <a id="wrglossary.123"></a><a href="#glo:CurrentTrackedDialectAdditional"><code class="csfmt">\CurrentTrackedDialectAdditional</code></a>.
+Language Tag: <a id="wrglossary.124"></a><a href="#glo:CurrentTrackedLanguageTag"><code class="csfmt">\CurrentTrackedLanguageTag</code></a>.
+</pre> Additional information about the <a id="wrglossary.125"></a><a href="#glo:idx.script">script</a> can be obtained by also loading <a id="wrglossary.126"></a><a href="#glo:pkg.tracklang-scripts"><span class="styfmt">tracklang-scripts</span></a>: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.127"></a><a href="#glo:input"><code class="csfmt">\input</code></a> <a id="wrglossary.128"></a><a href="#glo:file.tracklang-scripts.tex"><span class="filefmt">tracklang-scripts.tex</span></a>
+</pre> The name, numeric code and direction can now be obtained: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div>Name: <a id="wrglossary.129"></a><a href="#glo:TrackLangScriptAlphaToName"><code class="csfmt">\TrackLangScriptAlphaToName</code></a>{<a id="wrglossary.130"></a><a href="#glo:CurrentTrackedDialectScript"><code class="csfmt">\CurrentTrackedDialectScript</code></a>}.
+Numeric:
+<a id="wrglossary.131"></a><a href="#glo:TrackLangScriptAlphaToNumeric"><code class="csfmt">\TrackLangScriptAlphaToNumeric</code></a>{<a id="wrglossary.132"></a><a href="#glo:CurrentTrackedDialectScript"><code class="csfmt">\CurrentTrackedDialectScript</code></a>}.
+Direction:
+<a id="wrglossary.133"></a><a href="#glo:TrackLangScriptAlphaToDir"><code class="csfmt">\TrackLangScriptAlphaToDir</code></a>{<a id="wrglossary.134"></a><a href="#glo:CurrentTrackedDialectScript"><code class="csfmt">\CurrentTrackedDialectScript</code></a>}.
+</pre> Test for a specific <a id="wrglossary.135"></a><a href="#glo:idx.script">script</a> (in this case <a id="wrglossary.136"></a><a href="#glo:opt.Latn"><span class="optfmt">Latn</span></a>): <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div>Latin?
+<code class="cmd">\ifx</code><a id="wrglossary.137"></a><a href="#glo:CurrentTrackedDialectScript"><code class="csfmt">\CurrentTrackedDialectScript</code></a><a id="wrglossary.138"></a><a href="#glo:TrackLangScriptCode"><code class="csfmt">\TrackLangScriptLatn</code></a>
+ Yes
+<code class="cmd">\else</code>
+ No
+<code class="cmd">\fi</code>
+</pre><p>
+
+</section><!-- end of section sec:tex -->
+
+<section id="sec:latex"><!-- start of section sec:latex --><div class="tomain"><a href="#main">[top]</a></div>
+<h3><!-- start of subsection header -->2.1.2. LaTeX<div class="labellink"><a href="#sec:latex">[link]</a></div></h3><!-- end of subsection header -->
+<p>
+This section is for LaTeX use. See §<a href="#sec:tex">2.1.1</a> for generic TeX use.<p>
+With newer versions of <a id="wrglossary.139"></a><a href="#glo:pkg.polyglossia"><span class="styfmt">polyglossia</span></a>, where <a id="wrglossary.140"></a><a href="#glo:xpg@bcp@loaded"><code class="csfmt">\xpg@bcp@loaded</code></a> is defined, you just need to make sure the languages are set before <a id="wrglossary.141"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> is loaded: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><code class="cmd">\documentclass</code>{article}
+<code class="cmd">\usepackage</code>{polyglossia}
+<code class="cmd">\setmainlanguage</code>[variant=uk]{english}
+<span class="comment">% load packages that use tracklang for localisation</span>
+</pre> For older versions of <a id="wrglossary.142"></a><a href="#glo:pkg.polyglossia"><span class="styfmt">polyglossia</span></a> where the regional information is required, use recognised class options: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><code class="cmd">\documentclass</code>[<a id="wrglossary.143"></a><a href="#glo:opt.en-GB"><span class="optfmt">en-GB</span></a>]{article}
+<code class="cmd">\usepackage</code>{polyglossia}
+<code class="cmd">\setmainlanguage</code>[variant=uk]{english}
+<span class="comment">% load packages that use tracklang for localisation</span>
+</pre><p>
+For <a id="wrglossary.144"></a><a href="#glo:pkg.babel"><span class="styfmt">babel</span></a> users where the supplied <a id="wrglossary.145"></a><a href="#glo:pkg.babel"><span class="styfmt">babel</span></a> dialect label is sufficient, and is passed either through the document class or package options, there’s no need to do anything special: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><code class="cmd">\documentclass</code>[<a id="wrglossary.146"></a><a href="#glo:opt.british"><span class="optfmt">british</span></a>,<a id="wrglossary.147"></a><a href="#glo:opt.canadien"><span class="optfmt">canadien</span></a>]{article}
+<code class="cmd">\usepackage</code>[T1]{fontenc}
+<code class="cmd">\usepackage</code>{babel}
+<span class="comment">% load packages that use tracklang for localisation</span>
+</pre> If the region is important but there’s no <a id="wrglossary.148"></a><a href="#glo:pkg.babel"><span class="styfmt">babel</span></a> dialect that represents it, there are several options. The first method is to use the class options recognised by <a id="wrglossary.149"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> and the root language labels when loading <a id="wrglossary.150"></a><a href="#glo:pkg.babel"><span class="styfmt">babel</span></a>: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><code class="cmd">\documentclass</code>[<a id="wrglossary.151"></a><a href="#glo:opt.en-IE"><span class="optfmt">en-IE</span></a>,<a id="wrglossary.152"></a><a href="#glo:opt.ga-IE"><span class="optfmt">ga-IE</span></a>]{article}
+<code class="cmd">\usepackage</code>[english,irish]{babel}
+<span class="comment">% load packages that use tracklang for localisation</span>
+</pre><p>
+Another method with <a id="wrglossary.153"></a><a href="#glo:pkg.babel"><span class="styfmt">babel</span></a> is to use <a id="wrglossary.154"></a><a href="#glo:TrackLanguageTag"><code class="csfmt">\TrackLanguageTag</code></a> and map the new dialect label to the nearest matching <a id="wrglossary.155"></a><a href="#glo:captionsdialect"><code class="csfmt">\captions<span class="meta">〈<em class="metainner">dialect</em>〉</span></code></a>: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><code class="cmd">\documentclass</code>{article}
+
+<code class="cmd">\usepackage</code>{tracklang}<span class="comment">% v1.3</span>
+<a id="wrglossary.156"></a><a href="#glo:TrackLanguageTag"><code class="csfmt">\TrackLanguageTag</code></a>{<a id="wrglossary.157"></a><a href="#glo:opt.en-MT"><span class="optfmt">en-MT</span></a>}
+<a id="wrglossary.158"></a><a href="#glo:SetTrackedDialectLabelMap"><code class="csfmt">\SetTrackedDialectLabelMap</code></a>{<a id="wrglossary.159"></a><a href="#glo:TrackLangLastTrackedDialect"><code class="csfmt">\TrackLangLastTrackedDialect</code></a>}{<a id="wrglossary.160"></a><a href="#glo:opt.UKenglish"><span class="optfmt">UKenglish</span></a>}
+
+<code class="cmd">\usepackage</code>[UKenglish]{babel}
+<span class="comment">% load packages that use tracklang for localisation</span>
+</pre> This ensures that the <a id="wrglossary.161"></a><a href="#glo:captionsdialect"><code class="csfmt">\captionsUKenglish</code></a> hook is detected by the localisation packages. This mapping isn’t needed for <a id="wrglossary.162"></a><a href="#glo:pkg.polyglossia"><span class="styfmt">polyglossia</span></a> as the caption hooks use the root language label. This mapping also isn’t needed if <a id="wrglossary.163"></a><a href="#glo:opt.british"><span class="optfmt">british</span></a> is used instead of <a id="wrglossary.164"></a><a href="#glo:opt.UKenglish"><span class="optfmt">UKenglish</span></a> since the <a id="wrglossary.165"></a><a href="#glo:opt.en-MT"><span class="optfmt">en-MT</span></a> (<a id="wrglossary.166"></a><a href="#glo:opt.maltaenglish"><span class="optfmt">maltaenglish</span></a>) predefined dialect automatically sets up a mapping to <a id="wrglossary.167"></a><a href="#glo:opt.british"><span class="optfmt">british</span></a>. (The default mappings are shown in Table <a href="#tab:nonisoopts">1.3</a>.)<p>
+There’s no support for <a id="wrglossary.168"></a><a href="#glo:babelprovide"><code class="csfmt">\babelprovide</code></a>. If you are using <a id="wrglossary.169"></a><a href="#glo:babelprovide"><code class="csfmt">\babelprovide</code></a>, you will need to use the class option or <a id="wrglossary.170"></a><a href="#glo:TrackLanguageTag"><code class="csfmt">\TrackLanguageTag</code></a> as above.<p>
+
+</section><!-- end of section sec:latex -->
+
+<section id="sec:summary-localepkg"><!-- start of section sec:summary-localepkg --><div class="tomain"><a href="#main">[top]</a></div>
+<h2><!-- start of section header -->2.2. Locale-Sensitive Packages<div class="labellink"><a href="#sec:summary-localepkg">[link]</a></div></h2><!-- end of section header -->
+<p>
+Let’s suppose you are developing a package called <span class="filefmt">mypackage.sty</span> or <span class="filefmt">mypackage.tex</span> and you want to find out what languages the document author has requested. (See also: <a href="https://www.dickimaw-books.com/latex/tracklang/otherpkg.shtml">Using <span class="filefmt">tracklang.tex</span> in Packages with Localisation Features</a>.)<p>
+Generic TeX use (the <a id="wrglossary.171"></a><a href="#glo:ext.tex"><span class="extfmt">tex</span></a> extension may be omitted): <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.172"></a><a href="#glo:input"><code class="csfmt">\input</code></a> <a id="wrglossary.173"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a>
+</pre> (Most of the commands used in this section require at least <a id="wrglossary.174"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> version 1.3 but 1.4 is better if you want to include the <a id="wrglossary.175"></a><a href="#glo:idx.script">script</a> tag in the <a id="wrglossary.176"></a><a href="#glo:ext.ldf"><span class="extfmt">ldf</span></a> files.) Note that <a id="wrglossary.177"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> has a check to determine if it’s already been loaded, so you don’t need to worry about that.<p>
+LaTeX use: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.178"></a><a href="#glo:RequirePackage"><code class="csfmt">\RequirePackage</code></a>{tracklang}[2019/11/30]<span class="comment">% at least v1.4</span>
+</pre> This will picked up any language options supplied in the document class options and will also detect if <a id="wrglossary.179"></a><a href="#glo:pkg.babel"><span class="styfmt">babel</span></a> or <a id="wrglossary.180"></a><a href="#glo:pkg.polyglossia"><span class="styfmt">polyglossia</span></a> have been loaded.<p>
+(LaTeX) If you want to allow the user to set the locale in the package options: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.181"></a><a href="#glo:DeclareOption"><code class="csfmt">\DeclareOption</code></a>*{<a id="wrglossary.182"></a><a href="#glo:TrackLanguageTag"><code class="csfmt">\TrackLanguageTag</code></a>{<code class="cmd">\CurrentOption</code>}}
+</pre> This means the user can do, say, <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><code class="cmd">\usepackage</code>[hy-Latn-IT-arevela]{mypackage}
+</pre> With at least version 1.4, it’s better to use <a id="wrglossary.183"></a><a href="#glo:TrackIfKnownLanguage"><code class="csfmt">\TrackIfKnownLanguage</code></a>: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.184"></a><a href="#glo:DeclareOption"><code class="csfmt">\DeclareOption</code></a>*{<span class="comment">% </span>
+ <a id="wrglossary.185"></a><a href="#glo:TrackIfKnownLanguage"><code class="csfmt">\TrackIfKnownLanguage</code></a>{<code class="cmd">\CurrentOption</code>}<span class="comment">% </span>
+ {<span class="comment">% successful</span>
+ <code class="cmd">\PackageInfo</code>{mypackage}{Tracking language `<code class="cmd">\CurrentOption</code>'}<span class="comment">% </span>
+ }<span class="comment">% </span>
+ {<span class="comment">% failed</span>
+ <code class="cmd">\PackageError</code>{mypackage}<span class="comment">% </span>
+ {Unknown language specification `<code class="cmd">\CurrentOption</code>'}<span class="comment">% </span>
+ {You need to supply either a known dialect label
+ or a valid language tag}<span class="comment">% </span>
+ }<span class="comment">% </span>
+}
+</pre><p>
+<div class="information"><div class="informationtitle"><a href="#glo:sym.information"><span title="Information" class="icon">🛈</span></a></div><!-- end of informationtitle -->
+The rest of the example package in this section uses generic code. If you are using LaTeX, it’s better to replace <code class="cmd">\def</code> and <code class="cmd">\ifx</code> with more appropriate LaTeX commands. </div><!-- end of information -->
+<p>
+If you want to fetch the locale information from the operating system when the user hasn’t requested a language: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.186"></a><a href="#glo:AnyTrackedLanguages"><code class="csfmt">\AnyTrackedLanguages</code></a>
+{}
+{<span class="comment">% fetch locale information from the operating system</span>
+ <code class="cmd">\ifx</code><a id="wrglossary.187"></a><a href="#glo:TeXOSQueryLangTag"><code class="csfmt">\TeXOSQueryLangTag</code></a><code class="cmd">\undefined</code>
+ <span class="comment">% texosquery v1.2 not available</span>
+ <a id="wrglossary.188"></a><a href="#glo:TrackLangFromEnv"><code class="csfmt">\TrackLangFromEnv</code></a>
+ <code class="cmd">\else</code>
+ <span class="comment">% texosquery v1.2 available</span>
+ <a id="wrglossary.189"></a><a href="#glo:TeXOSQueryLangTag"><code class="csfmt">\TeXOSQueryLangTag</code></a>{<code class="cmd">\langtag</code>}
+ <a id="wrglossary.190"></a><a href="#glo:TrackLanguageTag"><code class="csfmt">\TrackLanguageTag</code></a>{<code class="cmd">\langtag</code>}
+ <code class="cmd">\fi</code>
+}
+</pre><p>
+Set up the defaults if necessary: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><code class="cmd">\def</code><code class="cmd">\fooname</code>{Foo}
+<code class="cmd">\def</code><code class="cmd">\barname</code>{Bar}
+</pre><p>
+Now load the resource files: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.191"></a><a href="#glo:AnyTrackedLanguages"><code class="csfmt">\AnyTrackedLanguages</code></a>
+{<span class="comment">% </span>
+ <a id="wrglossary.192"></a><a href="#glo:ForEachTrackedDialect"><code class="csfmt">\ForEachTrackedDialect</code></a>{<code class="cmd">\thisdialect</code>}{<span class="comment">% </span>
+ <a id="wrglossary.193"></a><a href="#glo:TrackLangRequireDialect"><code class="csfmt">\TrackLangRequireDialect</code></a>{mypackage}{<code class="cmd">\thisdialect</code>}<span class="comment">% </span>
+ }<span class="comment">% </span>
+}
+{}<span class="comment">% no tracked languages, default already set up</span>
+</pre><p>
+Each resource file has the naming scheme <a id="wrglossary.194"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt"></span><span class="meta">〈<em class="metainner">prefix</em>〉</span><span class="filefmt">-</span><span class="meta">〈<em class="metainner">localeid</em>〉</span><span class="filefmt">.ldf</span></a><a id="wrglossary.195"></a>. In this example, the <span class="meta">〈<em class="metainner">prefix</em>〉</span> is <span class="filefmt">mypackage</span>. The <span class="meta">〈<em class="metainner">localeid</em>〉</span> part may be the language or dialect label (for example, <a id="wrglossary.196"></a><a href="#glo:opt.english"><span class="optfmt">english</span></a> or <a id="wrglossary.197"></a><a href="#glo:opt.british"><span class="optfmt">british</span></a>) or a combination of the <a id="wrglossary.198"></a><a href="#glo:ISO">ISO</a> language and region codes (for example, <a id="wrglossary.199"></a><a href="#glo:opt.en-GB"><span class="optfmt">en-GB</span></a> or <a id="wrglossary.200"></a><a href="#glo:opt.english"><span class="optfmt">en</span></a> or <span class="optfmt">GB</span>). As from version 1.4, <span class="meta">〈<em class="metainner">localeid</em>〉</span> may also include the <a id="wrglossary.201"></a><a href="#glo:idx.script">script</a> or <a id="wrglossary.202"></a><a href="#glo:idx.variant">variant</a>. (See the definition of <a id="wrglossary.203"></a><a href="#glo:IfTrackedLanguageFileExists"><code class="csfmt">\IfTrackedLanguageFileExists</code></a> <a href="#pg:filesearch">below</a> for further details.)<p>
+The simplest scheme is to use the root language label (not the dialect label) for the base language settings and use the <a id="wrglossary.204"></a><a href="#glo:ISO">ISO</a> codes for regional support.<p>
+For example, the file <a id="wrglossary.205"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">mypackage-english.ldf</span></a>: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><span class="comment">% identify this file:</span>
+<a id="wrglossary.206"></a><a href="#glo:TrackLangProvidesResource"><code class="csfmt">\TrackLangProvidesResource</code></a>{english}[2016/10/06 v1.0]
+
+<a id="wrglossary.207"></a><a href="#glo:TrackLangAddToCaptions"><code class="csfmt">\TrackLangAddToCaptions</code></a>{<span class="comment">% </span>
+ <code class="cmd">\def</code><code class="cmd">\fooname</code>{Foo}<span class="comment">% </span>
+ <code class="cmd">\def</code><code class="cmd">\barname</code>{Bar}<span class="comment">% </span>
+}
+</pre> This sets up appropriate the <a id="wrglossary.208"></a><a href="#glo:captionsdialect"><code class="csfmt">\captions<span class="meta">〈<em class="metainner">dialect</em>〉</span></code></a> hook (if it’s found). For other hooks, such as <a id="wrglossary.209"></a><a href="#glo:datedialect"><code class="csfmt">\date<span class="meta">〈<em class="metainner">dialect</em>〉</span></code></a>, use <a id="wrglossary.210"></a><a href="#glo:TrackLangAddToHook"><code class="csfmt">\TrackLangAddToHook</code></a> or <a id="wrglossary.211"></a><a href="#glo:TrackLangRedefHook"><code class="csfmt">\TrackLangRedefHook</code></a> instead.<p>
+With pre-v1.4 versions of <a id="wrglossary.212"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a>, the <a id="wrglossary.213"></a><a href="#glo:idx.script">script</a> isn’t included in the file search. If it’s needed then either require at least v1.4 or have a base <a id="wrglossary.214"></a><a href="#glo:ext.ldf"><span class="extfmt">ldf</span></a> file that tries to load a version for the particular <a id="wrglossary.215"></a><a href="#glo:idx.script">script</a> (which can be accessed with <a id="wrglossary.216"></a><a href="#glo:CurrentTrackedDialectScript"><code class="csfmt">\CurrentTrackedDialectScript</code></a>). Here’s an example for a language with different writing systems. The resource file for Serbian <a id="wrglossary.217"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">mypackage-serbian.ldf</span></a>: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><span class="comment">% identify file:</span>
+<a id="wrglossary.218"></a><a href="#glo:TrackLangProvidesResource"><code class="csfmt">\TrackLangProvidesResource</code></a>{serbian}[2016/10/06 v1.0]
+
+<a id="wrglossary.219"></a><a href="#glo:TrackLangRequestResource"><code class="csfmt">\TrackLangRequestResource</code></a>{serbian-<a id="wrglossary.220"></a><a href="#glo:CurrentTrackedDialectScript"><code class="csfmt">\CurrentTrackedDialectScript</code></a>}
+{}<span class="comment">% file not found, do something sensible here</span>
+</pre> The file <a id="wrglossary.221"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">mypackage-serbian-Latn.ldf</span></a> sets up the Latin <a id="wrglossary.222"></a><a href="#glo:idx.script">script</a> (<a id="wrglossary.223"></a><a href="#glo:opt.Latn"><span class="optfmt">Latn</span></a>): <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.224"></a><a href="#glo:TrackLangProvidesResource"><code class="csfmt">\TrackLangProvidesResource</code></a>{serbian-Latn}[2016/10/06 v1.0]
+
+<a id="wrglossary.225"></a><a href="#glo:TrackLangAddToCaptions"><code class="csfmt">\TrackLangAddToCaptions</code></a>{<span class="comment">% </span>
+ <code class="cmd">\def</code><code class="cmd">\fooname</code>{...}<span class="comment">% provide appropriate Latin translations</span>
+ <code class="cmd">\def</code><code class="cmd">\barname</code>{...}<span class="comment">% </span>
+}
+</pre> The file <a id="wrglossary.226"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">mypackage-serbian-Cyrl.ldf</span></a> sets up the Cyrillic <a id="wrglossary.227"></a><a href="#glo:idx.script">script</a> (<a id="wrglossary.228"></a><a href="#glo:opt.Cyrl"><span class="optfmt">Cyrl</span></a>): <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.229"></a><a href="#glo:TrackLangProvidesResource"><code class="csfmt">\TrackLangProvidesResource</code></a>{serbian-Cyrl}[2016/10/06 v1.0]
+
+<a id="wrglossary.230"></a><a href="#glo:TrackLangAddToCaptions"><code class="csfmt">\TrackLangAddToCaptions</code></a>{<span class="comment">% </span>
+ <code class="cmd">\def</code><code class="cmd">\fooname</code>{...}<span class="comment">% provide appropriate Cyrillic translations</span>
+ <code class="cmd">\def</code><code class="cmd">\barname</code>{...}<span class="comment">% </span>
+}
+</pre> With v1.4+ you just need <a id="wrglossary.231"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">mypackage-sr-Latn.ldf</span></a> and <a id="wrglossary.232"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">mypackage-sr-Cyrl.ldf</span></a> for the regionless versions.<p>
+
+</section><!-- end of section sec:summary-localepkg -->
+
+<section id="sec:summary-langpkg"><!-- start of section sec:summary-langpkg --><div class="tomain"><a href="#main">[top]</a></div>
+<h2><!-- start of section header -->2.3. Language Packages<div class="labellink"><a href="#sec:summary-langpkg">[link]</a></div></h2><!-- end of section header -->
+<p>
+Let’s suppose now you’re the developer of a package that sets up the language, hyphenation patterns and so on. It would be really helpful to the locale-sensitive packages in §<a href="#sec:summary-localepkg">2.2</a> to know what languages the document author has requested. You can use the <a id="wrglossary.233"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> package to identify this information by tracking the requested localisation, so that other packages can have a consistent way of querying it. (See also: <a href="https://www.dickimaw-books.com/latex/tracklang/langpkg.shtml">Integrating <span class="filefmt">tracklang.tex</span> into Language Packages</a>.)<p>
+Generic use: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.234"></a><a href="#glo:input"><code class="csfmt">\input</code></a> tracklang
+</pre> Alternative LaTeX use: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.235"></a><a href="#glo:RequirePackage"><code class="csfmt">\RequirePackage</code></a>{tracklang}[2019/11/30]<span class="comment">% v1.4</span>
+</pre> Unlike <a id="wrglossary.236"></a><a href="#glo:input"><code class="csfmt">\input</code></a>, <a id="wrglossary.237"></a><a href="#glo:RequirePackage"><code class="csfmt">\RequirePackage</code></a> will allow <a id="wrglossary.238"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> to pick up the document class options, but using <a id="wrglossary.239"></a><a href="#glo:RequirePackage"><code class="csfmt">\RequirePackage</code></a> will also trigger the tests for known language packages. (If you want to find out if <a id="wrglossary.240"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> has already been loaded and locales have already been tracked, you can use the same code as in the previous section.)<p>
+When a user requests a particular language through your package, the simplest way of letting <a id="wrglossary.241"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> know about it is to use <a id="wrglossary.242"></a><a href="#glo:TrackPredefinedDialect"><code class="csfmt">\TrackPredefinedDialect</code></a> or <a id="wrglossary.243"></a><a href="#glo:TrackLanguageTag"><code class="csfmt">\TrackLanguageTag</code></a>. For example, if the user requests <a id="wrglossary.244"></a><a href="#glo:opt.british"><span class="optfmt">british</span></a>, that’s a predefined dialect so you can just do: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.245"></a><a href="#glo:TrackPredefinedDialect"><code class="csfmt">\TrackPredefinedDialect</code></a>{<a id="wrglossary.246"></a><a href="#glo:opt.british"><span class="optfmt">british</span></a>}
+</pre> Alternatively <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.247"></a><a href="#glo:TrackLanguageTag"><code class="csfmt">\TrackLanguageTag</code></a>{<a id="wrglossary.248"></a><a href="#glo:opt.en-GB"><span class="optfmt">en-GB</span></a>}
+</pre> If your package uses caption hooks, then you can set up a mapping between <a id="wrglossary.249"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a>’s internal dialect label and your caption label. For example, let’s suppose the closest match to English used in Malta (<a id="wrglossary.250"></a><a href="#glo:opt.en-MT"><span class="optfmt">en-MT</span></a>) is the dialect <a id="wrglossary.251"></a><a href="#glo:opt.UKenglish"><span class="optfmt">UKenglish</span></a> (for example, the date format is similar between GB and MT): <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.252"></a><a href="#glo:TrackLanguageTag"><code class="csfmt">\TrackLanguageTag</code></a>{<a id="wrglossary.253"></a><a href="#glo:opt.en-MT"><span class="optfmt">en-MT</span></a>}
+<a id="wrglossary.254"></a><a href="#glo:SetTrackedDialectLabelMap"><code class="csfmt">\SetTrackedDialectLabelMap</code></a>{<a id="wrglossary.255"></a><a href="#glo:TrackLangLastTrackedDialect"><code class="csfmt">\TrackLangLastTrackedDialect</code></a>}{<a id="wrglossary.256"></a><a href="#glo:opt.UKenglish"><span class="optfmt">UKenglish</span></a>}
+<code class="cmd">\def</code><a id="wrglossary.257"></a><a href="#glo:captionsdialect"><code class="csfmt">\captionsUKenglish</code></a>{<span class="comment">% </span>
+ <code class="cmd">\def</code><code class="cmd">\contentsname</code>{Contents}<span class="comment">% </span>
+ <span class="comment">% ...</span>
+}
+</pre> (The predefined <a id="wrglossary.258"></a><a href="#glo:opt.maltaenglish"><span class="optfmt">maltaenglish</span></a> option provided by <a id="wrglossary.259"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> automatically sets the mapping to <a id="wrglossary.260"></a><a href="#glo:opt.british"><span class="optfmt">british</span></a>, but the above method will change that mapping to <a id="wrglossary.261"></a><a href="#glo:opt.UKenglish"><span class="optfmt">UKenglish</span></a>.)<p>
+This now means that <a id="wrglossary.262"></a><a href="#glo:TrackLangAddToHook"><code class="csfmt">\TrackLangAddToHook</code></a> and <a id="wrglossary.263"></a><a href="#glo:TrackLangRedefHook"><code class="csfmt">\TrackLangRedefHook</code></a> commands can find your language hooks. You don’t need the map if your dialect label is the same as <a id="wrglossary.264"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a>’s root language label for that locale. For example: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.265"></a><a href="#glo:TrackLanguageTag"><code class="csfmt">\TrackLanguageTag</code></a>{<a id="wrglossary.266"></a><a href="#glo:opt.en-MT"><span class="optfmt">en-MT</span></a>}
+<code class="cmd">\def</code><a id="wrglossary.267"></a><a href="#glo:captionsdialect"><code class="csfmt">\captionsenglish</code></a>{<span class="comment">% </span>
+ <code class="cmd">\def</code><code class="cmd">\contentsname</code>{Contents}<span class="comment">% </span>
+ <span class="comment">% ...</span>
+}
+</pre><p>
+When the user switches language through commands like <a id="wrglossary.268"></a><a href="#glo:selectlanguage"><code class="csfmt">\selectlanguage</code></a> it would be useful to also use <code class="code"><a id="wrglossary.269"></a><a href="#glo:SetCurrentTrackedDialect"><code class="csfmt">\SetCurrentTrackedDialect</code></a>{<span class="meta">〈<em class="metainner">dialect</em>〉</span>}</code> to make it easier for the document author or locale-sensitive packages to pick up the current locale. The <span class="meta">〈<em class="metainner">dialect</em>〉</span> argument may be <a id="wrglossary.270"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a>’s internal dialect label or the dialect label you assigned with <a id="wrglossary.271"></a><a href="#glo:SetTrackedDialectLabelMap"><code class="csfmt">\SetTrackedDialectLabelMap</code></a>. It may also be the root language label, in which case <a id="wrglossary.272"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> will search for the last dialect to be tracked with that language. For example: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><code class="cmd">\def</code><a id="wrglossary.273"></a><a href="#glo:selectlanguage"><code class="csfmt">\selectlanguage</code></a>#1{<span class="comment">% </span>
+ <a id="wrglossary.274"></a><a href="#glo:SetCurrentTrackedDialect"><code class="csfmt">\SetCurrentTrackedDialect</code></a>{#1}<span class="comment">% </span>
+ <span class="comment">% set up hyphenation patterns etc</span>
+}
+</pre> See the example in §<a href="#sec:summary-doc">2.1</a> or the example in <a href="https://www.dickimaw-books.com/latex/tracklang/langpkg.shtml">Integrating <span class="filefmt">tracklang.tex</span> into Language Packages</a>.<p>
+
+</section><!-- end of section sec:summary-langpkg -->
+
+<section id="sec:generic"><!-- start of section sec:generic --><div class="tomain"><a href="#main">[top]</a></div>
+<h1><!-- start of chapter header -->3. Generic Use<div class="labellink"><a href="#sec:generic">[link]</a></div></h1><!-- end of chapter header -->
+<p>
+For plain TeX you can input <a id="wrglossary.275"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a>: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.276"></a><a href="#glo:input"><code class="csfmt">\input</code></a> tracklang
+</pre> or for TeX formats that have an argument form for <a id="wrglossary.277"></a><a href="#glo:input"><code class="csfmt">\input</code></a>: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.278"></a><a href="#glo:input"><code class="csfmt">\input</code></a>{tracklang}
+</pre> As from version 1.3, you don’t need to change the category code of <a id="wrglossary.279"></a><a href="#glo:idx.atletter"><code class="code">@</code></a> before loading <a id="wrglossary.280"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> as it will automatically be changed to 11 and switched back at the end (if required).<p>
+The LaTeX package <a id="wrglossary.281"></a><a href="#glo:pkg.tracklang"><span class="filefmt">tracklang.sty</span></a> inputs the generic TeX code in <a id="wrglossary.282"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a>, but before it does so it defines <div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.283"></a><code class="code"><dfn id="glo:@tracklang@declareoption"><code class="csfmt">\@tracklang@declareoption</code></dfn>{<span class="meta">〈<em class="metainner">dialect</em>〉</span>}</code></div><!-- end of pinnedbox -->
+ to <pre class="compactcodebox"><a id="wrglossary.284"></a><a href="#glo:DeclareOption"><code class="csfmt">\DeclareOption</code></a>{<span class="meta">〈<em class="metainner">dialect</em>〉</span>}{<a id="wrglossary.285"></a><a href="#glo:TrackPredefinedDialect"><code class="csfmt">\TrackPredefinedDialect</code></a>{<span class="meta">〈<em class="metainner">dialect</em>〉</span>}}
+</pre> If <a id="wrglossary.286"></a><a href="#glo:@tracklang@declareoption"><code class="csfmt">\@tracklang@declareoption</code></a> isn’t defined when <a id="wrglossary.287"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> is input, it will be defined to ignore its argument.<p>
+This means that all the predefined languages and dialects (Tables <a href="#tab:isoopts">1.1</a>, <a href="#tab:rootlangopts">1.2</a> & <a href="#tab:nonisoopts">1.3</a>) automatically become package options, so the <a id="wrglossary.288"></a><a href="#glo:pkg.tracklang"><span class="filefmt">tracklang.sty</span></a> package can pick up document class options and add them to <a id="wrglossary.289"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a>’s internal list of tracked document languages.<p>
+If you’re not using LaTeX, this option isn’t available although you can redefine <a id="wrglossary.290"></a><a href="#glo:@tracklang@declareoption"><code class="csfmt">\@tracklang@declareoption</code></a> to use something analogous to <a id="wrglossary.291"></a><a href="#glo:DeclareOption"><code class="csfmt">\DeclareOption</code></a>, if appropriate. Otherwise, the document languages need to be explicitly identified (using any of the following commands) so that <a id="wrglossary.292"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> knows about them.<p>
+<div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.293"></a><code class="code"><dfn id="glo:TrackPredefinedDialect"><code class="csfmt">\TrackPredefinedDialect</code></dfn>{<span class="meta">〈<em class="metainner">dialect label</em>〉</span>}</code></div><!-- end of pinnedbox -->
+ This will add the predefined dialect and its associated <a id="wrglossary.294"></a><a href="#glo:ISO">ISO</a> codes to the list of tracked document languages. The <span class="meta">〈<em class="metainner">dialect label</em>〉</span> may be any of those listed in Tables <a href="#tab:isoopts">1.1</a>, <a href="#tab:rootlangopts">1.2</a> & <a href="#tab:nonisoopts">1.3</a>.<p>
+For example: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.295"></a><a href="#glo:input"><code class="csfmt">\input</code></a> tracklang
+<a id="wrglossary.296"></a><a href="#glo:TrackPredefinedDialect"><code class="csfmt">\TrackPredefinedDialect</code></a>{<a id="wrglossary.297"></a><a href="#glo:opt.british"><span class="optfmt">british</span></a>}
+</pre> is the Plain TeX alternative to: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><code class="cmd">\documentclass</code>[<a id="wrglossary.298"></a><a href="#glo:opt.british"><span class="optfmt">british</span></a>]{article}
+<code class="cmd">\usepackage</code>{tracklang}
+</pre><p>
+Note that it’s impractical to define every possible language and region combination as it would significantly slow the time taken to load <a id="wrglossary.299"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> so, after version 1.3, I don’t intend adding any new predefined dialects. As from version 1.3, if you want to track a dialect that’s not predefined by <a id="wrglossary.300"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a>, then you can use: <div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.301"></a><code class="code"><dfn id="glo:TrackLocale"><code class="csfmt">\TrackLocale</code></dfn>{<span class="meta">〈<em class="metainner">locale</em>〉</span>}</code></div><!-- end of pinnedbox -->
+ If <span class="meta">〈<em class="metainner">locale</em>〉</span> is a recognised dialect, this is equivalent to using <a id="wrglossary.302"></a><a href="#glo:TrackPredefinedDialect"><code class="csfmt">\TrackPredefinedDialect</code></a>, otherwise <span class="meta">〈<em class="metainner">locale</em>〉</span> needs to be in one the following formats:
+<ul class="displaylist">
+ <li><span class="bulletitem">•</span><span class="meta">〈<em class="metainner"><a id="wrglossary.303"></a><a href="#glo:ISO">ISO</a> lang</em>〉</span> <li><span class="bulletitem">•</span><span class="meta">〈<em class="metainner"><a id="wrglossary.304"></a><a href="#glo:ISO">ISO</a> lang</em>〉</span><a id="wrglossary.305"></a><a href="#glo:idx.atmod"><code class="code">@</code></a><span class="meta">〈<em class="metainner">modifier</em>〉</span> <li><span class="bulletitem">•</span><span class="meta">〈<em class="metainner"><a id="wrglossary.306"></a><a href="#glo:ISO">ISO</a> lang</em>〉</span><a id="wrglossary.307"></a><a href="#glo:idx.hyphensep"><code class="code">-</code></a><span class="meta">〈<em class="metainner"><a id="wrglossary.308"></a><a href="#glo:ISO">ISO</a> country</em>〉</span> <li><span class="bulletitem">•</span><span class="meta">〈<em class="metainner"><a id="wrglossary.309"></a><a href="#glo:ISO">ISO</a> lang</em>〉</span><a id="wrglossary.310"></a><a href="#glo:idx.hyphensep"><code class="code">-</code></a><span class="meta">〈<em class="metainner"><a id="wrglossary.311"></a><a href="#glo:ISO">ISO</a> country</em>〉</span><a id="wrglossary.312"></a><a href="#glo:idx.atmod"><code class="code">@</code></a><span class="meta">〈<em class="metainner">modifier</em>〉</span>
+</ul>
+ where <span class="meta">〈<em class="metainner"><a id="wrglossary.313"></a><a href="#glo:ISO">ISO</a> lang</em>〉</span> is the <a id="wrglossary.314"></a><a href="#glo:idx.639-1">ISO <span class="mbox">639-1</span></a> or <a id="wrglossary.315"></a><a href="#glo:idx.639-2"><span class="mbox">639-2</span></a> code identifying the language (lower case), <span class="meta">〈<em class="metainner"><a id="wrglossary.316"></a><a href="#glo:ISO">ISO</a> country</em>〉</span> is the <a id="wrglossary.317"></a><a href="#glo:idx.3166-1"><span class="mbox">3166-1</span></a> <a id="wrglossary.318"></a><a href="#glo:ISO">ISO</a> code identifying the <a id="wrglossary.319"></a><a href="#glo:idx.territory">territory</a> (upper case) and <span class="meta">〈<em class="metainner">modifier</em>〉</span> is the <a id="wrglossary.320"></a><a href="#glo:idx.modifier">modifier</a> or <a id="wrglossary.321"></a><a href="#glo:idx.variant">variant</a>. The hyphen (<a id="wrglossary.322"></a><a href="#glo:idx.hyphensep"><code class="code">-</code></a>) may be replaced by an underscore character (<a id="wrglossary.323"></a><a href="#glo:idx.underscoresep"><code class="code">_</code></a>). <a id="wrglossary.324"></a><a href="#glo:idx.code-set">Code-set</a> information in the form <code class="code"><a id="wrglossary.325"></a><a href="#glo:idx.dotsep"><code class="code">.</code></a><span class="meta">〈<em class="metainner">codeset</em>〉</span></code> may optionally appear before the <a id="wrglossary.326"></a><a href="#glo:idx.modifier">modifier</a>. For example, <code class="code">de<a id="wrglossary.327"></a><a href="#glo:idx.hyphensep"><code class="code">-</code></a>DE<a id="wrglossary.328"></a><a href="#glo:idx.dotsep"><code class="code">.</code></a>utf8<a id="wrglossary.329"></a><a href="#glo:idx.atmod"><code class="code">@</code></a>new</code> (<a id="wrglossary.330"></a><a href="#glo:idx.modifier">modifier</a> is <span class="optfmt">new</span>) or <code class="code">en<a id="wrglossary.331"></a><a href="#glo:idx.hyphensep"><code class="code">-</code></a>GB<a id="wrglossary.332"></a><a href="#glo:idx.dotsep"><code class="code">.</code></a>utf8</code> (<a id="wrglossary.333"></a><a href="#glo:idx.modifier">modifier</a> is missing). The <a id="wrglossary.334"></a><a href="#glo:idx.code-set">code-set</a> will be ignored if present, but it won’t interfere with the parsing.<p>
+For example: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.335"></a><a href="#glo:TrackLocale"><code class="csfmt">\TrackLocale</code></a>{de<a id="wrglossary.336"></a><a href="#glo:idx.hyphensep"><code class="code">-</code></a>NA<a id="wrglossary.337"></a><a href="#glo:idx.atmod"><code class="code">@</code></a>new}
+</pre> indicates German in Namibia using the new spelling.<p>
+<div class="important"><div class="importanttitle"><a href="#glo:sym.important"><span title="Important" class="icon">ℹ</span></a></div><!-- end of importanttitle -->
+If a language has different <a id="wrglossary.338"></a><a href="#glo:idx.639-2T">ISO <span class="mbox">639-2</span> (T)</a> and <a id="wrglossary.339"></a><a href="#glo:idx.639-2B"><span class="mbox">639-2</span> (B)</a> codes, then the <span class="qt">“Tâ€</span> form should be used. (So for the above example, <code class="code">deu</code> may be used instead of <code class="code">de</code>, but <code class="code">ger</code> won’t be recognised.) </div><!-- end of important -->
+<p>
+Alternatively, you can use <div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.340"></a><code class="code"><dfn id="glo:TrackLanguageTag"><code class="csfmt">\TrackLanguageTag</code></dfn>{<span class="meta">〈<em class="metainner">tag</em>〉</span>}</code></div><!-- end of pinnedbox -->
+ where <span class="meta">〈<em class="metainner">tag</em>〉</span> is a regular, well-formed language tag or a recognised dialect label. (Irregular grandfather tags aren’t recognised.) This command will fully expand <span class="meta">〈<em class="metainner">tag</em>〉</span>. A warning is issued if the tag is empty.<p>
+If you want to first check that <span class="meta">〈<em class="metainner">tag</em>〉</span> includes a valid language code, then you can instead use: <div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.341"></a><code class="code"><dfn id="glo:TrackIfKnownLanguage"><code class="csfmt">\TrackIfKnownLanguage</code></dfn>{<span class="meta">〈<em class="metainner">tag</em>〉</span>}{<span class="meta">〈<em class="metainner">success code</em>〉</span>}{<span class="meta">〈<em class="metainner">fail code</em>〉</span>}</code></div><!-- end of pinnedbox -->
+ This will only track <span class="meta">〈<em class="metainner">tag</em>〉</span> (and then do <span class="meta">〈<em class="metainner">success code</em>〉</span>) if <span class="meta">〈<em class="metainner">tag</em>〉</span> starts with a valid language code (or is a predefined dialect) otherwise it will do <span class="meta">〈<em class="metainner">fail code</em>〉</span>. Both <a id="wrglossary.342"></a><a href="#glo:TrackLanguageTag"><code class="csfmt">\TrackLanguageTag</code></a> and <a id="wrglossary.343"></a><a href="#glo:TrackIfKnownLanguage"><code class="csfmt">\TrackIfKnownLanguage</code></a> will check if <span class="meta">〈<em class="metainner">tag</em>〉</span> is a predefined option. (This saves parsing the tag if it’s recognised.)<p>
+For example: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.344"></a><a href="#glo:TrackLanguageTag"><code class="csfmt">\TrackLanguageTag</code></a>{hy-Latn-IT-arevela}
+Latn-ME: <a id="wrglossary.345"></a><a href="#glo:TrackIfKnownLanguage"><code class="csfmt">\TrackIfKnownLanguage</code></a>{Latn-ME}{success}{fail}.
+brazilian: <a id="wrglossary.346"></a><a href="#glo:TrackIfKnownLanguage"><code class="csfmt">\TrackIfKnownLanguage</code></a>{brazilian}{success}{fail}.
+</pre> This will track <span class="optfmt">hy-Latn-IT-arevela</span> and <a id="wrglossary.347"></a><a href="#glo:opt.brazilian"><span class="optfmt">brazilian</span></a> (<span class="optfmt">pt-BR</span>) but not <span class="optfmt">Latn-ME</span> (because it doesn’t contain a valid language code) even though it’s a valid <a id="wrglossary.348"></a><a href="#glo:idx.script">script</a> and country code. The above is just for illustrative purposes. Typically the language tracking isn’t performed within the document text.<p>
+The <a id="wrglossary.349"></a><a href="#glo:pkg.datetime2"><span class="styfmt">datetime2</span></a> package assumes that any unknown package option is a language identifier. It could simply do: <pre class="compactcodebox"><a id="wrglossary.350"></a><a href="#glo:TrackLanguageTag"><code class="csfmt">\TrackLanguageTag</code></a>{<code class="cmd">\CurrentOption</code>}
+</pre> but users can make mistakes sometimes and this won’t provide any helpful information if they, for example, misspelt a package option or forgot the <span class="qt">“<span class="meta">〈<em class="metainner">key</em>〉</span>=â€</span> part of a <span class="meta">〈<em class="metainner">key</em>〉</span>=<span class="meta">〈<em class="metainner">value</em>〉</span> setting. Instead (as from v1.5.5) <a id="wrglossary.351"></a><a href="#glo:pkg.datetime2"><span class="styfmt">datetime2</span></a> now does: <pre class="compactcodebox"><a id="wrglossary.352"></a><a href="#glo:TrackIfKnownLanguage"><code class="csfmt">\TrackIfKnownLanguage</code></a>{<code class="cmd">\CurrentOption</code>}
+{...}<span class="comment">% known language</span>
+{<code class="cmd">\PackageError</code>{...}{...}{...}}
+</pre> This will now give the user some guidance. <p>
+If <span class="meta">〈<em class="metainner">tag</em>〉</span> contains a sub-language tag, this will be set as the <a id="wrglossary.353"></a><a href="#glo:idx.639-3"><span class="mbox">639-3</span></a> code for the <span style="font-style: italic; font-variant: normal; ">dialect</span> label. Note that this is different to the root language codes which are set using the language label. For example: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.354"></a><a href="#glo:TrackLanguageTag"><code class="csfmt">\TrackLanguageTag</code></a>{zh-cmn-Hans-CN}
+</pre> creates a new dialect with the label <code class="code">zhcmnHansCN</code>. The root language <a id="wrglossary.355"></a><a href="#glo:opt.chinese"><span class="optfmt">chinese</span></a> has the <a id="wrglossary.356"></a><a href="#glo:idx.639-1"><span class="mbox">639-1</span></a> code <span class="optfmt">zh</span> and the dialect <code class="code">zhcmnHansCN</code> has the <a id="wrglossary.357"></a><a href="#glo:idx.639-3">ISO <span class="mbox">639-3</span></a> code <span class="optfmt">cmn</span>. <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div>ISO 639-1: <a id="wrglossary.358"></a><a href="#glo:TrackedIsoCodeFromLanguage"><code class="csfmt">\TrackedIsoCodeFromLanguage</code></a>{639-1}{chinese}.
+ISO 639-3: <a id="wrglossary.359"></a><a href="#glo:TrackedIsoCodeFromLanguage"><code class="csfmt">\TrackedIsoCodeFromLanguage</code></a>{639-3}{zhcmnHansCN}.
+</pre><p>
+Version 1.2 of <a id="wrglossary.360"></a><a href="#glo:pkg.texosquery"><span class="styfmt">texosquery</span></a> provides the command <a id="wrglossary.361"></a><a href="#glo:TeXOSQueryLangTag"><code class="csfmt">\TeXOSQueryLangTag</code></a>, which may be used to fetch the operating system’s regional information as a language tag. These commands can be used as follows: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.362"></a><a href="#glo:input"><code class="csfmt">\input</code></a> tracklang <span class="comment">% v1.3</span>
+<a id="wrglossary.363"></a><a href="#glo:input"><code class="csfmt">\input</code></a> texosquery <span class="comment">% v1.2</span>
+
+<a id="wrglossary.364"></a><a href="#glo:TeXOSQueryLangTag"><code class="csfmt">\TeXOSQueryLangTag</code></a>{<code class="cmd">\langtag</code>}
+<a id="wrglossary.365"></a><a href="#glo:TrackLanguageTag"><code class="csfmt">\TrackLanguageTag</code></a>{<code class="cmd">\langtag</code>}
+</pre> (If the <a id="wrglossary.366"></a><a href="#glo:dual.shellescape">shell escape</a> is disabled, <code class="cmd">\langtag</code> will be empty, which will trigger a warning but no errors.)<p>
+Some of the predefined root language options listed in Table <a href="#tab:rootlangopts">1.2</a> have an associated region (denoted by <sup><span title="dagger marker" class="icon">†</span></sup>). If <a id="wrglossary.367"></a><a href="#glo:TrackLocale"><code class="csfmt">\TrackLocale</code></a> is used with just the language <a id="wrglossary.368"></a><a href="#glo:ISO">ISO</a> code, no region is tracked for that language. For example <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.369"></a><a href="#glo:TrackLocale"><code class="csfmt">\TrackLocale</code></a>{<a id="wrglossary.370"></a><a href="#glo:opt.manx"><span class="optfmt">manx</span></a>}
+</pre> will track the <span class="optfmt">IM</span> (Isle of Man) <a id="wrglossary.371"></a><a href="#glo:idx.3166-1">ISO <span class="mbox">3166-1</span></a> code but <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.372"></a><a href="#glo:TrackLocale"><code class="csfmt">\TrackLocale</code></a>{gv}
+</pre> won’t track the region. Similarly for <a id="wrglossary.373"></a><a href="#glo:TrackLanguageTag"><code class="csfmt">\TrackLanguageTag</code></a>.<p>
+(New to version 1.3.) There’s a similar command to <a id="wrglossary.374"></a><a href="#glo:TrackLocale"><code class="csfmt">\TrackLocale</code></a> that doesn’t take an argument: <div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.375"></a><code class="code"><dfn id="glo:TrackLangFromEnv"><code class="csfmt">\TrackLangFromEnv</code></dfn></code></div><!-- end of pinnedbox -->
+ If the <a id="wrglossary.376"></a><a href="#glo:dual.shellescape">shell escape</a> has been enabled or <a id="wrglossary.377"></a><a href="#glo:directlua"><code class="csfmt">\directlua</code></a> is available, this will try to get the language information from the system environment variables <a id="wrglossary.378"></a><a href="#glo:opt.envvar.LCALL"><code class="envvarfmt">LC_ALL</code></a> or <a id="wrglossary.379"></a><a href="#glo:opt.envvar.LANG"><code class="envvarfmt">LANG</code></a> and, if successful, track that.<p>
+Since <a id="wrglossary.380"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> is neither able to look up the <a id="wrglossary.381"></a><a href="#glo:POSIX">POSIX</a> locale tables nor interpret file locales, if the result is <code class="code">C</code> or <code class="code">POSIX</code> or starts with a forward slash <code class="code">/</code> then the locale value is treated as empty.<p>
+<div class="important"><div class="importanttitle"><a href="#glo:sym.important"><span title="Important" class="icon">ℹ</span></a></div><!-- end of importanttitle -->
+Not all operating systems use environment variables for the system locale information. For example, Windows stores the locale information in the registry. In which case, consider using <a id="wrglossary.382"></a><a href="#glo:pkg.texosquery"><span class="styfmt">texosquery</span></a>. </div><!-- end of important -->
+<p>
+If the operating system locale can’t be obtained from environment variables, then <a id="wrglossary.383"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> will use <a id="wrglossary.384"></a><a href="#glo:TeXOSQueryLocale"><code class="csfmt">\TeXOSQueryLocale</code></a> as a fallback if <a id="wrglossary.385"></a><a href="#glo:pkg.texosquery"><span class="styfmt">texosquery</span></a> has been loaded. Since <a id="wrglossary.386"></a><a href="#glo:pkg.texosquery"><span class="styfmt">texosquery</span></a> requires both the <a id="wrglossary.387"></a><a href="#glo:dual.shellescape">shell escape</a> and the Java runtime environment, <a id="wrglossary.388"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> doesn’t automatically load it.<p>
+Plain TeX example: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.389"></a><a href="#glo:input"><code class="csfmt">\input</code></a> texosquery
+<a id="wrglossary.390"></a><a href="#glo:input"><code class="csfmt">\input</code></a> tracklang
+<a id="wrglossary.391"></a><a href="#glo:TrackLangFromEnv"><code class="csfmt">\TrackLangFromEnv</code></a>
+</pre> Document build: <pre class="terminal"><div class="terminaltitle"><a href="#glo:sym.terminal"><span title="Terminal" class="icon">〉_</span></a></div><a id="wrglossary.392"></a><a href="#glo:app.etex"><span class="appfmt">etex</span></a> <a id="wrglossary.393"></a><a href="#glo:switch.shell-escape"><span class="longargfmt">--shell-escape</span></a> <span class="meta">〈<em class="metainner">filename</em>〉</span>
+</pre><p>
+LaTeX example: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><code class="cmd">\usepackage</code>{texosquery}
+<code class="cmd">\usepackage</code>{tracklang}
+<a id="wrglossary.394"></a><a href="#glo:TrackLangFromEnv"><code class="csfmt">\TrackLangFromEnv</code></a>
+</pre> Document build: <pre class="terminal"><div class="terminaltitle"><a href="#glo:sym.terminal"><span title="Terminal" class="icon">〉_</span></a></div><a id="wrglossary.395"></a><a href="#glo:app.pdflatex"><span class="appfmt">pdflatex</span></a> <a id="wrglossary.396"></a><a href="#glo:switch.shell-escape"><span class="longargfmt">--shell-escape</span></a> <span class="meta">〈<em class="metainner">filename</em>〉</span>
+</pre><p>
+If the locale can’t be determined, there will be warning messages. These can be suppressed using <div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.397"></a><code class="code"><dfn id="glo:TrackLangShowWarningsfalse"><code class="csfmt">\TrackLangShowWarningsfalse</code></dfn></code></div><!-- end of pinnedbox -->
+ or switched back on again using <div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.398"></a><code class="code"><dfn id="glo:TrackLangShowWarningstrue"><code class="csfmt">\TrackLangShowWarningstrue</code></dfn></code></div><!-- end of pinnedbox -->
+<p>
+For example, I have the environment variable <a id="wrglossary.399"></a><a href="#glo:opt.envvar.LANG"><code class="envvarfmt">LANG</code></a> set to <code class="code">en<a id="wrglossary.400"></a><a href="#glo:idx.underscoresep"><code class="code">_</code></a>GB<a id="wrglossary.401"></a><a href="#glo:idx.dotsep"><code class="code">.</code></a>utf8</code> on my Linux system so instead of <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.402"></a><a href="#glo:TrackPredefinedDialect"><code class="csfmt">\TrackPredefinedDialect</code></a>{<a id="wrglossary.403"></a><a href="#glo:opt.british"><span class="optfmt">british</span></a>}
+</pre> I can use <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.404"></a><a href="#glo:TrackLangFromEnv"><code class="csfmt">\TrackLangFromEnv</code></a>
+</pre><p>
+With LaTeX documents I can do <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><code class="cmd">\documentclass</code>{article}
+<code class="cmd">\usepackage</code>{tracklang}
+<a id="wrglossary.405"></a><a href="#glo:TrackLangFromEnv"><code class="csfmt">\TrackLangFromEnv</code></a>
+</pre> However, this only helps subsequently loaded packages that use <a id="wrglossary.406"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> to determine the required regional settings. For example: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><code class="cmd">\documentclass</code>{article}
+<code class="cmd">\usepackage</code>{tracklang}
+<a id="wrglossary.407"></a><a href="#glo:TrackLangFromEnv"><code class="csfmt">\TrackLangFromEnv</code></a>
+<code class="cmd">\usepackage</code>[useregional]{datetime2}
+</pre> In my case, with the <a id="wrglossary.408"></a><a href="#glo:opt.envvar.LANG"><code class="envvarfmt">LANG</code></a> environment variable set to <code class="code">en<a id="wrglossary.409"></a><a href="#glo:idx.underscoresep"><code class="code">_</code></a>GB<a id="wrglossary.410"></a><a href="#glo:idx.dotsep"><code class="code">.</code></a>utf8</code> and the <a id="wrglossary.411"></a><a href="#glo:dual.shellescape">shell escape</a> enabled, this automatically switches on the <a id="wrglossary.412"></a><a href="#glo:opt.en-GB"><span class="optfmt">en-GB</span></a> date style. Naturally this doesn’t help locale-sensitive packages that don’t use <a id="wrglossary.413"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a>.<p>
+The <a id="wrglossary.414"></a><a href="#glo:TrackLangFromEnv"><code class="csfmt">\TrackLangFromEnv</code></a> command also incidentally sets <a id="wrglossary.415"></a><a href="#glo:TrackLangEnv"><code class="csfmt">\TrackLangEnv</code></a> to the value of the environment variable or empty if the query was unsuccessful (for example, the <a id="wrglossary.416"></a><a href="#glo:dual.shellescape">shell escape</a> is unavailable).<p>
+If the command: <div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.417"></a><code class="code"><dfn id="glo:TrackLangEnv"><code class="csfmt">\TrackLangEnv</code></dfn></code><p>
+<div class="noteBox">user defined</div><!-- end of noteBox -->
+</div><!-- end of pinnedbox -->
+ is already defined before <a id="wrglossary.418"></a><a href="#glo:TrackLangFromEnv"><code class="csfmt">\TrackLangFromEnv</code></a> is used, then the environment variable won’t be queried and the value of <a id="wrglossary.419"></a><a href="#glo:TrackLangEnv"><code class="csfmt">\TrackLangEnv</code></a> will be parsed instead.<p>
+<div class="important"><div class="importanttitle"><a href="#glo:sym.important"><span title="Important" class="icon">ℹ</span></a></div><!-- end of importanttitle -->
+The parser which splits the locale string into its component parts first tries splitting on the underscore <a id="wrglossary.420"></a><a href="#glo:idx.underscoresep"><code class="code">_</code></a> with its usual category code 8, then tries splitting on a hyphen <a id="wrglossary.421"></a><a href="#glo:idx.hyphensep"><code class="code">-</code></a> with category code 12, and then tries splitting on the underscore <a id="wrglossary.422"></a><a href="#glo:idx.underscoresep"><code class="code">_</code></a> with category code 12. </div><!-- end of important -->
+<p>
+For example: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><code class="cmd">\def</code><a id="wrglossary.423"></a><a href="#glo:TrackLangEnv"><code class="csfmt">\TrackLangEnv</code></a>{en-GB}
+<a id="wrglossary.424"></a><a href="#glo:TrackLangFromEnv"><code class="csfmt">\TrackLangFromEnv</code></a>
+</pre> This doesn’t perform a <a id="wrglossary.425"></a><a href="#glo:dual.shellescape">shell escape</a> since <a id="wrglossary.426"></a><a href="#glo:TrackLangEnv"><code class="csfmt">\TrackLangEnv</code></a> is already defined. In this case, you may just as well use: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.427"></a><a href="#glo:TrackLocale"><code class="csfmt">\TrackLocale</code></a>{en-GB}
+</pre> (unless you happen to additionally require the component commands that are set by <a id="wrglossary.428"></a><a href="#glo:TrackLangFromEnv"><code class="csfmt">\TrackLangFromEnv</code></a>, see below.)<p>
+If the <a id="wrglossary.429"></a><a href="#glo:dual.shellescape">shell escape</a> is unavailable (for example, your TeX installation prohibits it), you can set this value when you invoke TeX. For example, if the document file is called <span class="filefmt">myDoc.tex</span> (and it’s in Plain TeX): <pre class="terminal"><div class="terminaltitle"><a href="#glo:sym.terminal"><span title="Terminal" class="icon">〉_</span></a></div><a id="wrglossary.430"></a><a href="#glo:app.tex"><span class="appfmt">tex</span></a> "<a id="wrglossary.431"></a><a href="#glo:idx.escbsl"><code class="code">\\</code></a>def<a id="wrglossary.432"></a><a href="#glo:idx.escbsl"><code class="code">\\</code></a><a id="wrglossary.433"></a><a href="#glo:TrackLangEnv"><span class="csfmtfont">TrackLangEnv</span></a>{<a id="wrglossary.434"></a><a href="#glo:idx.dollarenv"><code class="code">$</code></a><a id="wrglossary.435"></a><a href="#glo:opt.envvar.LANG"><code class="envvarfmt">LANG</code></a>}<a id="wrglossary.436"></a><a href="#glo:idx.escbsl"><code class="code">\\</code></a><a id="wrglossary.437"></a><a href="#glo:input"><span class="csfmtfont">input</span></a> myDoc"
+</pre><p>
+The <a id="wrglossary.438"></a><a href="#glo:TrackLangFromEnv"><code class="csfmt">\TrackLangFromEnv</code></a> command also happens to store the component parts of the environment variable value in the following commands. (These aren’t provided by <a id="wrglossary.439"></a><a href="#glo:TrackLocale"><code class="csfmt">\TrackLocale</code></a>.) If the information is unavailable, the relevant commands will be set to empty.<p>
+The language code is stored in: <div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.440"></a><code class="code"><dfn id="glo:TrackLangEnvLang"><code class="csfmt">\TrackLangEnvLang</code></dfn></code></div><!-- end of pinnedbox -->
+<p>
+The <a id="wrglossary.441"></a><a href="#glo:idx.territory">territory</a> (if present) is stored in: <div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.442"></a><code class="code"><dfn id="glo:TrackLangEnvTerritory"><code class="csfmt">\TrackLangEnvTerritory</code></dfn></code></div><!-- end of pinnedbox -->
+<p>
+The <a id="wrglossary.443"></a><a href="#glo:idx.code-set">code-set</a> (if present) is stored in: <div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.444"></a><code class="code"><dfn id="glo:TrackLangEnvCodeSet"><code class="csfmt">\TrackLangEnvCodeSet</code></dfn></code></div><!-- end of pinnedbox -->
+<p>
+The <a id="wrglossary.445"></a><a href="#glo:idx.modifier">modifier</a> (if present) is stored in: <div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.446"></a><code class="code"><dfn id="glo:TrackLangEnvModifier"><code class="csfmt">\TrackLangEnvModifier</code></dfn></code></div><!-- end of pinnedbox -->
+<p>
+If you want to query the language environment, but don’t want to track the result, you can just use: <div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.447"></a><code class="code"><dfn id="glo:TrackLangQueryEnv"><code class="csfmt">\TrackLangQueryEnv</code></dfn></code></div><!-- end of pinnedbox -->
+ This only tries to fetch the value of the language environment variable (and use <a id="wrglossary.448"></a><a href="#glo:pkg.texosquery"><span class="styfmt">texosquery</span></a> as a fallback, if it has been loaded). It doesn’t try to parse the result. The result is stored in <a id="wrglossary.449"></a><a href="#glo:TrackLangEnv"><code class="csfmt">\TrackLangEnv</code></a> (empty if unsuccessful). Unlike <a id="wrglossary.450"></a><a href="#glo:TrackLangFromEnv"><code class="csfmt">\TrackLangFromEnv</code></a>, this doesn’t check if <a id="wrglossary.451"></a><a href="#glo:TrackLangEnv"><code class="csfmt">\TrackLangEnv</code></a> already exists. A warning will occur if the shell escape is unavailable. For systems that store the locale information in environment variables, this is more efficient than using <a id="wrglossary.452"></a><a href="#glo:pkg.texosquery"><span class="styfmt">texosquery</span></a>’s <a id="wrglossary.453"></a><a href="#glo:TeXOSQueryLocale"><code class="csfmt">\TeXOSQueryLocale</code></a> command (which is what’s used as the fallback).<p>
+The above queries <a id="wrglossary.454"></a><a href="#glo:opt.envvar.LCALL"><code class="envvarfmt">LC_ALL</code></a> and, if that is unsuccessful, then queries <a id="wrglossary.455"></a><a href="#glo:opt.envvar.LANG"><code class="envvarfmt">LANG</code></a> (before optionally falling back on <a id="wrglossary.456"></a><a href="#glo:pkg.texosquery"><span class="styfmt">texosquery</span></a>). If you want another environment variable tried after <a id="wrglossary.457"></a><a href="#glo:opt.envvar.LCALL"><code class="envvarfmt">LC_ALL</code></a> and before <a id="wrglossary.458"></a><a href="#glo:opt.envvar.LANG"><code class="envvarfmt">LANG</code></a>, you can instead use: <div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.459"></a><code class="code"><dfn id="glo:TrackLangQueryOtherEnv"><code class="csfmt">\TrackLangQueryOtherEnv</code></dfn>{<span class="meta">〈<em class="metainner">env-name</em>〉</span>}</code></div><!-- end of pinnedbox -->
+ For example, to also query <a id="wrglossary.460"></a><a href="#glo:opt.envvar.LCMONETARY"><code class="envvarfmt">LC_MONETARY</code></a>: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.461"></a><a href="#glo:TrackLangQueryOtherEnv"><code class="csfmt">\TrackLangQueryOtherEnv</code></a>{<a id="wrglossary.462"></a><a href="#glo:opt.envvar.LCMONETARY"><code class="envvarfmt">LC_MONETARY</code></a>}
+</pre><p>
+Since this sets <a id="wrglossary.463"></a><a href="#glo:TrackLangEnv"><code class="csfmt">\TrackLangEnv</code></a>, you can use it before <a id="wrglossary.464"></a><a href="#glo:TrackLangFromEnv"><code class="csfmt">\TrackLangFromEnv</code></a>. For example: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.465"></a><a href="#glo:TrackLangQueryOtherEnv"><code class="csfmt">\TrackLangQueryOtherEnv</code></a>{<a id="wrglossary.466"></a><a href="#glo:opt.envvar.LCMONETARY"><code class="envvarfmt">LC_MONETARY</code></a>}
+<a id="wrglossary.467"></a><a href="#glo:TrackLangFromEnv"><code class="csfmt">\TrackLangFromEnv</code></a>
+</pre> Remember that if you only want to do the <a id="wrglossary.468"></a><a href="#glo:dual.shellescape">shell escape</a> if <a id="wrglossary.469"></a><a href="#glo:TrackLangEnv"><code class="csfmt">\TrackLangEnv</code></a> hasn’t already been defined, you can test for this first: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><code class="cmd">\ifx</code><a id="wrglossary.470"></a><a href="#glo:TrackLangEnv"><code class="csfmt">\TrackLangEnv</code></a><code class="cmd">\undefined</code>
+ <a id="wrglossary.471"></a><a href="#glo:TrackLangQueryOtherEnv"><code class="csfmt">\TrackLangQueryOtherEnv</code></a>{<a id="wrglossary.472"></a><a href="#glo:opt.envvar.LCMONETARY"><code class="envvarfmt">LC_MONETARY</code></a>}
+<code class="cmd">\fi</code>
+<a id="wrglossary.473"></a><a href="#glo:TrackLangFromEnv"><code class="csfmt">\TrackLangFromEnv</code></a>
+</pre><p>
+It’s also possible to just parse the value of <a id="wrglossary.474"></a><a href="#glo:TrackLangEnv"><code class="csfmt">\TrackLangEnv</code></a> without tracking the result using: <div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.475"></a><code class="code"><dfn id="glo:TrackLangParseFromEnv"><code class="csfmt">\TrackLangParseFromEnv</code></dfn></code></div><!-- end of pinnedbox -->
+ This is like <a id="wrglossary.476"></a><a href="#glo:TrackLangFromEnv"><code class="csfmt">\TrackLangFromEnv</code></a> but assumes that <a id="wrglossary.477"></a><a href="#glo:TrackLangEnv"><code class="csfmt">\TrackLangEnv</code></a> has already been set and doesn’t track the result. The component parts are stored as for <a id="wrglossary.478"></a><a href="#glo:TrackLangFromEnv"><code class="csfmt">\TrackLangFromEnv</code></a>.<p>
+Example (Plain TeX): <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.479"></a><a href="#glo:input"><code class="csfmt">\input</code></a> tracklang
+
+<code class="cmd">\def</code><a id="wrglossary.480"></a><a href="#glo:TrackLangEnv"><code class="csfmt">\TrackLangEnv</code></a>{fr<a id="wrglossary.481"></a><a href="#glo:idx.hyphensep"><code class="code">-</code></a>BE<a id="wrglossary.482"></a><a href="#glo:idx.dotsep"><code class="code">.</code></a>utf8<a id="wrglossary.483"></a><a href="#glo:idx.atmod"><code class="code">@</code></a>euro}
+
+<a id="wrglossary.484"></a><a href="#glo:TrackLangParseFromEnv"><code class="csfmt">\TrackLangParseFromEnv</code></a>
+
+Language: <a id="wrglossary.485"></a><a href="#glo:TrackLangEnvLang"><code class="csfmt">\TrackLangEnvLang</code></a>.
+Territory: <a id="wrglossary.486"></a><a href="#glo:TrackLangEnvTerritory"><code class="csfmt">\TrackLangEnvTerritory</code></a>.
+Codeset: <a id="wrglossary.487"></a><a href="#glo:TrackLangEnvCodeSet"><code class="csfmt">\TrackLangEnvCodeSet</code></a>.
+Modifier: <a id="wrglossary.488"></a><a href="#glo:TrackLangEnvModifier"><code class="csfmt">\TrackLangEnvModifier</code></a>.
+Any tracked languages? <a id="wrglossary.489"></a><a href="#glo:AnyTrackedLanguages"><code class="csfmt">\AnyTrackedLanguages</code></a>{Yes}{No}.
+</pre> This produces: <div class="resultbox"><div class="resultboxtitle"><a href="#glo:sym.result"><span title="Result" class="icon">🖺</span></a></div><!-- end of resultboxtitle -->
+Language: fr. Territory: BE. Codeset: utf8. Modifier: euro. Any tracked languages? No. </div><!-- end of resultbox -->
+<p>
+Compare this with: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.490"></a><a href="#glo:input"><code class="csfmt">\input</code></a> tracklang
+
+<code class="cmd">\def</code><a id="wrglossary.491"></a><a href="#glo:TrackLangEnv"><code class="csfmt">\TrackLangEnv</code></a>{fr<a id="wrglossary.492"></a><a href="#glo:idx.hyphensep"><code class="code">-</code></a>BE<a id="wrglossary.493"></a><a href="#glo:idx.dotsep"><code class="code">.</code></a>utf8<a id="wrglossary.494"></a><a href="#glo:idx.atmod"><code class="code">@</code></a>euro}
+
+<a id="wrglossary.495"></a><a href="#glo:TrackLangFromEnv"><code class="csfmt">\TrackLangFromEnv</code></a>
+
+Language: <a id="wrglossary.496"></a><a href="#glo:TrackLangEnvLang"><code class="csfmt">\TrackLangEnvLang</code></a>.
+Territory: <a id="wrglossary.497"></a><a href="#glo:TrackLangEnvTerritory"><code class="csfmt">\TrackLangEnvTerritory</code></a>.
+Codeset: <a id="wrglossary.498"></a><a href="#glo:TrackLangEnvCodeSet"><code class="csfmt">\TrackLangEnvCodeSet</code></a>.
+Modifier: <a id="wrglossary.499"></a><a href="#glo:TrackLangEnvModifier"><code class="csfmt">\TrackLangEnvModifier</code></a>.
+Any tracked languages? <a id="wrglossary.500"></a><a href="#glo:AnyTrackedLanguages"><code class="csfmt">\AnyTrackedLanguages</code></a>{Yes}{No}.
+Tracked dialect(s):<span class="comment">% </span>
+<a id="wrglossary.501"></a><a href="#glo:ForEachTrackedDialect"><code class="csfmt">\ForEachTrackedDialect</code></a>{<code class="cmd">\thisdialect</code>}{<code class="cmd">\space</code><code class="cmd">\thisdialect</code>}.
+</pre> This produces:<p>
+<div class="resultbox"><div class="resultboxtitle"><a href="#glo:sym.result"><span title="Result" class="icon">🖺</span></a></div><!-- end of resultboxtitle -->
+Language: fr. Territory: BE. Codeset: utf8. Modifier: euro. Any tracked languages? Yes. Tracked dialect(s): belgique. </div><!-- end of resultbox -->
+<p>
+If <a id="wrglossary.502"></a><a href="#glo:TrackLangFromEnv"><code class="csfmt">\TrackLangFromEnv</code></a> doesn’t recognise the given language and territory combination, it will define a new dialect and add that.<p>
+For example, <a id="wrglossary.503"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> doesn’t recognise <code class="code">en-BE</code>, so the sample document below defines a new dialect labelled <code class="code">enBEeuro</code>: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.504"></a><a href="#glo:input"><code class="csfmt">\input</code></a> tracklang
+
+<code class="cmd">\def</code><a id="wrglossary.505"></a><a href="#glo:TrackLangEnv"><code class="csfmt">\TrackLangEnv</code></a>{en<a id="wrglossary.506"></a><a href="#glo:idx.hyphensep"><code class="code">-</code></a>BE<a id="wrglossary.507"></a><a href="#glo:idx.dotsep"><code class="code">.</code></a>utf8<a id="wrglossary.508"></a><a href="#glo:idx.atmod"><code class="code">@</code></a>euro}
+
+<a id="wrglossary.509"></a><a href="#glo:TrackLangFromEnv"><code class="csfmt">\TrackLangFromEnv</code></a>
+
+Language: <a id="wrglossary.510"></a><a href="#glo:TrackLangEnvLang"><code class="csfmt">\TrackLangEnvLang</code></a>.
+Territory: <a id="wrglossary.511"></a><a href="#glo:TrackLangEnvTerritory"><code class="csfmt">\TrackLangEnvTerritory</code></a>.
+Codeset: <a id="wrglossary.512"></a><a href="#glo:TrackLangEnvCodeSet"><code class="csfmt">\TrackLangEnvCodeSet</code></a>.
+Modifier: <a id="wrglossary.513"></a><a href="#glo:TrackLangEnvModifier"><code class="csfmt">\TrackLangEnvModifier</code></a>.
+Any tracked languages? <a id="wrglossary.514"></a><a href="#glo:AnyTrackedLanguages"><code class="csfmt">\AnyTrackedLanguages</code></a>{Yes}{No}.
+Tracked dialect(s):<span class="comment">% </span>
+<a id="wrglossary.515"></a><a href="#glo:ForEachTrackedDialect"><code class="csfmt">\ForEachTrackedDialect</code></a>{<code class="cmd">\thisdialect</code>}{<code class="cmd">\space</code><code class="cmd">\thisdialect</code>}.
+</pre> This now produces: <div class="resultbox"><div class="resultboxtitle"><a href="#glo:sym.result"><span title="Result" class="icon">🖺</span></a></div><!-- end of resultboxtitle -->
+Language: en. Territory: BE. Codeset: utf8. Modifier: euro. Any tracked languages? Yes. Tracked dialect(s): enBEeuro. </div><!-- end of resultbox -->
+<p>
+
+</section><!-- end of section sec:generic -->
+
+<section id="sec:supplpkgs"><!-- start of section sec:supplpkgs --><div class="tomain"><a href="#main">[top]</a></div>
+<h1><!-- start of chapter header -->4. Supplementary Packages<div class="labellink"><a href="#sec:supplpkgs">[link]</a></div></h1><!-- end of chapter header -->
+<p>
+In addition to the main <a id="wrglossary.516"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> file and <a id="wrglossary.517"></a><a href="#glo:pkg.tracklang"><span class="filefmt">tracklang.sty</span></a> LaTeX wrapper, the <a id="wrglossary.518"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> package also provides supplementary files for region and script mappings.<p>
+<div class="filedef"><a id="wrglossary.519"></a><dfn id="glo:file.tracklang-region-codes.tex"><span class="filefmt">tracklang-region-codes.tex</span></dfn></div><!-- end of filedef -->
+ This file is only loaded if a mapping is required between numeric and alphabetic <a id="wrglossary.520"></a><a href="#glo:idx.territory">region</a> codes. If <a id="wrglossary.521"></a><a href="#glo:TrackLanguageTag"><code class="csfmt">\TrackLanguageTag</code></a> encounters a numeric <a id="wrglossary.522"></a><a href="#glo:idx.territory">region</a> code, it will automatically input <a id="wrglossary.523"></a><a href="#glo:file.tracklang-region-codes.tex"><span class="filefmt">tracklang-region-codes.tex</span></a>, if it hasn’t already been input. This file provides the following commands.<p>
+<div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.524"></a><code class="code"><dfn id="glo:TrackLangAlphaIIToNumericRegion"><code class="csfmt">\TrackLangAlphaIIToNumericRegion</code></dfn>{<span class="meta">〈<em class="metainner">alpha-2 code</em>〉</span>}</code></div><!-- end of pinnedbox -->
+ Expands to the numeric code corresponding to the given alpha-2 code or empty if no mapping has been supplied.<p>
+<div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.525"></a><code class="code"><dfn id="glo:TrackLangNumericToAlphaIIRegion"><code class="csfmt">\TrackLangNumericToAlphaIIRegion</code></dfn>{<span class="meta">〈<em class="metainner">numeric code</em>〉</span>}</code></div><!-- end of pinnedbox -->
+ Expands to the alpha-2 code corresponding to the given numeric code or empty if no mapping has been supplied.<p>
+<div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.526"></a><code class="code"><dfn id="glo:TrackLangIfKnownAlphaIIRegion"><code class="csfmt">\TrackLangIfKnownAlphaIIRegion</code></dfn>{<span class="meta">〈<em class="metainner">alpha-2 code</em>〉</span>}{<span class="meta">〈<em class="metainner">true</em>〉</span>}{<span class="meta">〈<em class="metainner">false</em>〉</span>}</code></div><!-- end of pinnedbox -->
+ Expands to <span class="meta">〈<em class="metainner">true</em>〉</span> if there’s an alpha-2 to numeric <a id="wrglossary.527"></a><a href="#glo:idx.territory">region</a> code mapping, otherwise expands to <span class="meta">〈<em class="metainner">false</em>〉</span>.<p>
+<div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.528"></a><code class="code"><dfn id="glo:TrackLangIfKnownNumericRegion"><code class="csfmt">\TrackLangIfKnownNumericRegion</code></dfn>{<span class="meta">〈<em class="metainner">numeric code</em>〉</span>}{<span class="meta">〈<em class="metainner">true</em>〉</span>}{<span class="meta">〈<em class="metainner">false</em>〉</span>}</code></div><!-- end of pinnedbox -->
+ Expands to <span class="meta">〈<em class="metainner">true</em>〉</span> if there’s a numeric to alpha-2 <a id="wrglossary.529"></a><a href="#glo:idx.territory">region</a> code mapping, otherwise expands to <span class="meta">〈<em class="metainner">false</em>〉</span>.<p>
+<div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.530"></a><code class="code"><dfn id="glo:TrackLangAlphaIIIToNumericRegion"><code class="csfmt">\TrackLangAlphaIIIToNumericRegion</code></dfn>{<span class="meta">〈<em class="metainner">alpha-3 code</em>〉</span>}</code></div><!-- end of pinnedbox -->
+ Expands to the numeric code corresponding to the given alpha-3 code or empty if no mapping has been supplied.<p>
+<div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.531"></a><code class="code"><dfn id="glo:TrackLangNumericToAlphaIIIRegion"><code class="csfmt">\TrackLangNumericToAlphaIIIRegion</code></dfn>{<span class="meta">〈<em class="metainner">numeric code</em>〉</span>}</code></div><!-- end of pinnedbox -->
+ Expands to the alpha-3 code corresponding to the given numeric code or empty if no mapping has been supplied.<p>
+<div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.532"></a><code class="code"><dfn id="glo:TrackLangIfKnownAlphaIIIRegion"><code class="csfmt">\TrackLangIfKnownAlphaIIIRegion</code></dfn>{<span class="meta">〈<em class="metainner">alpha-3 code</em>〉</span>}{<span class="meta">〈<em class="metainner">true</em>〉</span>}{<span class="meta">〈<em class="metainner">false</em>〉</span>}</code></div><!-- end of pinnedbox -->
+ Expands to <span class="meta">〈<em class="metainner">true</em>〉</span> if there’s an alpha-3 to numeric <a id="wrglossary.533"></a><a href="#glo:idx.territory">region</a> code mapping, otherwise expands to <span class="meta">〈<em class="metainner">false</em>〉</span>.<p>
+Mappings are established with: <div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.534"></a><code class="code"><dfn id="glo:TrackLangRegionMap"><code class="csfmt">\TrackLangRegionMap</code></dfn>{<span class="meta">〈<em class="metainner">numeric</em>〉</span>}{<span class="meta">〈<em class="metainner">alpha-2</em>〉</span>}{<span class="meta">〈<em class="metainner">alpha-3</em>〉</span>}</code></div><!-- end of pinnedbox -->
+ Predefined mappings are listed in Table <a href="#tab:regionmappings">A.1</a>.<p>
+When <a id="wrglossary.535"></a><a href="#glo:file.tracklang-region-codes.tex"><span class="filefmt">tracklang-region-codes.tex</span></a> is input, it can load additional files that provide supplementary mappings.<p>
+<div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.536"></a><code class="code"><dfn id="glo:TrackLangAddExtraRegionFile"><code class="csfmt">\TrackLangAddExtraRegionFile</code></dfn>{<span class="meta">〈<em class="metainner">file</em>〉</span>}</code></div><!-- end of pinnedbox -->
+ This command adds the supplied <span class="meta">〈<em class="metainner">file</em>〉</span> to the list of extra region code files that should be input by <a id="wrglossary.537"></a><a href="#glo:file.tracklang-region-codes.tex"><span class="filefmt">tracklang-region-codes.tex</span></a>, unless <a id="wrglossary.538"></a><a href="#glo:file.tracklang-region-codes.tex"><span class="filefmt">tracklang-region-codes.tex</span></a> has already been input, in which case <span class="meta">〈<em class="metainner">file</em>〉</span> will be input straight away.<p>
+<div class="filedef"><a id="wrglossary.539"></a><dfn id="glo:file.tracklang-scripts.tex"><span class="filefmt">tracklang-scripts.tex</span></dfn></div><!-- end of filedef -->
+ The <a id="wrglossary.540"></a><a href="#glo:pkg.tracklang-scripts"><span class="styfmt">tracklang-scripts</span></a> package provides information about <a id="wrglossary.541"></a><a href="#glo:idx.15924">ISO 15924</a> scripts. The file isn’t automatically loaded. If you want to use any of the commands provided in it you need to input it.<p>
+Plain TeX: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.542"></a><a href="#glo:input"><code class="csfmt">\input</code></a> tracklang-scripts
+</pre> There’s a simple wrapper package <a id="wrglossary.543"></a><a href="#glo:pkg.tracklang-scripts"><span class="filefmt">tracklang-scripts.sty</span></a> for LaTeX users: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><code class="cmd">\usepackage</code>{tracklang-scripts}
+</pre><p>
+<div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.544"></a><code class="code"><dfn id="glo:TrackLangScriptMap"><code class="csfmt">\TrackLangScriptMap</code></dfn>{<span class="meta">〈<em class="metainner">letter code</em>〉</span>}{<span class="meta">〈<em class="metainner">numeric code</em>〉</span>}{<span class="meta">〈<em class="metainner">script name</em>〉</span>}{<span class="meta">〈<em class="metainner">direction</em>〉</span>}{<span class="meta">〈<em class="metainner">parent script</em>〉</span>}</code></div><!-- end of pinnedbox -->
+ Defines a mapping. The first argument is the four letter alpha code, such as <a id="wrglossary.545"></a><a href="#glo:opt.Latn"><span class="optfmt">Latn</span></a> or <a id="wrglossary.546"></a><a href="#glo:opt.Cyrl"><span class="optfmt">Cyrl</span></a>. The second argument is the numeric code. The third argument is the script’s name, for example <span class="qt">“Imperial Aramaicâ€</span>. The fourth argument is the direction, which may be one of: <span class="optfmt">LR</span> (left-to-right), <span class="optfmt">RL</span> (right-to-left), <span class="optfmt">TB</span> (top-to-bottom), <span class="optfmt">varies</span> or <span class="optfmt">inherited</span>. The <span class="meta">〈<em class="metainner">parent</em>〉</span> argument is for the parent writing system, which may be left blank (currently unsupported).<p>
+This command defines: <div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.547"></a><code class="code"><dfn id="glo:TrackLangScriptCode"><code class="csfmt">\TrackLangScript<span class="meta">〈<em class="metainner">Code</em>〉</span></code></dfn></code></div><!-- end of pinnedbox -->
+ which expands to <span class="meta">〈<em class="metainner">Code</em>〉</span> for use with <a id="wrglossary.548"></a><a href="#glo:IfTrackedDialectIsScriptCs"><code class="csfmt">\IfTrackedDialectIsScriptCs</code></a>.<p>
+See Table <a href="#tab:scriptmappings">A.2</a> for a summary of all the mappings that are provided by the file <a id="wrglossary.549"></a><a href="#glo:file.tracklang-scripts.tex"><span class="filefmt">tracklang-scripts.tex</span></a>.<p>
+<div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.550"></a><code class="code"><dfn id="glo:TrackLangScriptAlphaToNumeric"><code class="csfmt">\TrackLangScriptAlphaToNumeric</code></dfn>{<span class="meta">〈<em class="metainner">alpha code</em>〉</span>}</code></div><!-- end of pinnedbox -->
+ Expands to the numeric code corresponding to the given alpha code or empty if no mapping.<p>
+<div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.551"></a><code class="code"><dfn id="glo:TrackLangScriptIfKnownAlpha"><code class="csfmt">\TrackLangScriptIfKnownAlpha</code></dfn>{<span class="meta">〈<em class="metainner">alpha code</em>〉</span>}{<span class="meta">〈<em class="metainner">true</em>〉</span>}{<span class="meta">〈<em class="metainner">false</em>〉</span>}</code></div><!-- end of pinnedbox -->
+ Expands to <span class="meta">〈<em class="metainner">true</em>〉</span> if there is a known alpha to numeric mapping or <span class="meta">〈<em class="metainner">false</em>〉</span> otherwise.<p>
+<div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.552"></a><code class="code"><dfn id="glo:TrackLangScriptNumericToAlpha"><code class="csfmt">\TrackLangScriptNumericToAlpha</code></dfn>{<span class="meta">〈<em class="metainner">numeric code</em>〉</span>}</code></div><!-- end of pinnedbox -->
+ Expands to the alpha code corresponding to the given numeric code or empty if no mapping.<p>
+<div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.553"></a><code class="code"><dfn id="glo:TrackLangScriptIfKnownNumeric"><code class="csfmt">\TrackLangScriptIfKnownNumeric</code></dfn>{<span class="meta">〈<em class="metainner">numeric code</em>〉</span>}{<span class="meta">〈<em class="metainner">true</em>〉</span>}{<span class="meta">〈<em class="metainner">false</em>〉</span>}</code></div><!-- end of pinnedbox -->
+ Expands to <span class="meta">〈<em class="metainner">true</em>〉</span> if there is a known numeric to alpha mapping or <span class="meta">〈<em class="metainner">false</em>〉</span> otherwise.<p>
+<div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.554"></a><code class="code"><dfn id="glo:TrackLangScriptAlphaToName"><code class="csfmt">\TrackLangScriptAlphaToName</code></dfn>{<span class="meta">〈<em class="metainner">alpha code</em>〉</span>}</code></div><!-- end of pinnedbox -->
+ Expands to the name corresponding to the given alpha code or empty if no mapping.<p>
+<div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.555"></a><code class="code"><dfn id="glo:TrackLangScriptAlphaToDir"><code class="csfmt">\TrackLangScriptAlphaToDir</code></dfn>{<span class="meta">〈<em class="metainner">alpha code</em>〉</span>}</code></div><!-- end of pinnedbox -->
+ Expands to the direction corresponding to the given alpha code or empty if no mapping.<p>
+<div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.556"></a><code class="code"><dfn id="glo:TrackLangScriptSetParent"><code class="csfmt">\TrackLangScriptSetParent</code></dfn>{<span class="meta">〈<em class="metainner">alpha code</em>〉</span>}{<span class="meta">〈<em class="metainner">parent alpha code</em>〉</span>}</code></div><!-- end of pinnedbox -->
+ Sets the parent for the given alpha code.<p>
+<div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.557"></a><code class="code"><dfn id="glo:TrackLangScriptGetParent"><code class="csfmt">\TrackLangScriptGetParent</code></dfn>{<span class="meta">〈<em class="metainner">alpha code</em>〉</span>}</code></div><!-- end of pinnedbox -->
+ Expands to the parent for the given alpha code or empty if no mapping.<p>
+<div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.558"></a><code class="code"><dfn id="glo:TrackLangScriptIfHasParent"><code class="csfmt">\TrackLangScriptIfHasParent</code></dfn>{<span class="meta">〈<em class="metainner">alpha code</em>〉</span>}{<span class="meta">〈<em class="metainner">true</em>〉</span>}{<span class="meta">〈<em class="metainner">false</em>〉</span>}</code></div><!-- end of pinnedbox -->
+ Expands to <span class="meta">〈<em class="metainner">true</em>〉</span> if the given alpha code has a parent or to <span class="meta">〈<em class="metainner">false</em>〉</span> otherwise. Note that if a parent is explicitly set to empty with <a id="wrglossary.559"></a><a href="#glo:TrackLangScriptSetParent"><code class="csfmt">\TrackLangScriptSetParent</code></a> then it will be considered defined, but if the <span class="meta">〈<em class="metainner">parent</em>〉</span> argument was empty in <a id="wrglossary.560"></a><a href="#glo:TrackLangScriptMap"><code class="csfmt">\TrackLangScriptMap</code></a>, then it will be undefined.<p>
+<div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.561"></a><code class="code"><dfn id="glo:TrackLangAddExtraScriptFile"><code class="csfmt">\TrackLangAddExtraScriptFile</code></dfn>{<span class="meta">〈<em class="metainner">file</em>〉</span>}</code></div><!-- end of pinnedbox -->
+ This command adds <span class="meta">〈<em class="metainner">file</em>〉</span> to the list of extra script files that should be input by <a id="wrglossary.562"></a><a href="#glo:file.tracklang-scripts.tex"><span class="filefmt">tracklang-scripts.tex</span></a>, unless <a id="wrglossary.563"></a><a href="#glo:file.tracklang-scripts.tex"><span class="filefmt">tracklang-scripts.tex</span></a> has already been input, in which case <span class="meta">〈<em class="metainner">file</em>〉</span> will be input straight away.<p>
+
+</section><!-- end of section sec:supplpkgs -->
+
+<section id="sec:user"><!-- start of section sec:user --><div class="tomain"><a href="#main">[top]</a></div>
+<h1><!-- start of chapter header -->5. Detecting the User’s Requested Languages<div class="labellink"><a href="#sec:user">[link]</a></div></h1><!-- end of chapter header -->
+<p>
+The <a id="wrglossary.564"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> package tries to track the loaded languages and the option names used to identify those languages. For want of a better term, the language option names are referred to as dialects even if they’re only a synonym for the language rather than an actual dialect. For example, if the user has requested <a id="wrglossary.565"></a><a href="#glo:opt.british"><span class="optfmt">british</span></a>, the <span style="font-style: italic; font-variant: normal; ">root language</span> label is <a id="wrglossary.566"></a><a href="#glo:opt.english"><span class="optfmt">english</span></a> and the dialect is <a id="wrglossary.567"></a><a href="#glo:opt.british"><span class="optfmt">british</span></a>, whereas if the user requested <a id="wrglossary.568"></a><a href="#glo:opt.UKenglish"><span class="optfmt">UKenglish</span></a>, the root language label is <a id="wrglossary.569"></a><a href="#glo:opt.english"><span class="optfmt">english</span></a> and the dialect is <a id="wrglossary.570"></a><a href="#glo:opt.UKenglish"><span class="optfmt">UKenglish</span></a>. The exceptions to this are the <a id="wrglossary.571"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> package options that have been specified in the form <span class="meta">〈<em class="metainner">iso lang</em>〉</span>-<span class="meta">〈<em class="metainner">iso country</em>〉</span> (listed in Table <a href="#tab:rootlangopts">1.2</a>). For example, the package option <a id="wrglossary.572"></a><a href="#glo:opt.british"><span class="optfmt">en-GB</span></a> behaves as though the user requested the package option <a id="wrglossary.573"></a><a href="#glo:opt.british"><span class="optfmt">british</span></a>.<p>
+If <a id="wrglossary.574"></a><a href="#glo:TrackLocale"><code class="csfmt">\TrackLocale</code></a> or <a id="wrglossary.575"></a><a href="#glo:TrackLangFromEnv"><code class="csfmt">\TrackLangFromEnv</code></a> are used and the locale isn’t recognised a new dialect is created with the label formed from the <a id="wrglossary.576"></a><a href="#glo:ISO">ISO</a> codes (and <a id="wrglossary.577"></a><a href="#glo:idx.modifier">modifier</a>, if present). Similarly for <a id="wrglossary.578"></a><a href="#glo:TrackLanguageTag"><code class="csfmt">\TrackLanguageTag</code></a> a new dialect is created with a label that’s essentially the language tag without the hyphen separators. For example, <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.579"></a><a href="#glo:TrackLocale"><code class="csfmt">\TrackLocale</code></a>{xx<a id="wrglossary.580"></a><a href="#glo:idx.hyphensep"><code class="code">-</code></a>YY}
+</pre> will add a new dialect with the label <code class="code">xxYY</code>, <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.581"></a><a href="#glo:TrackLocale"><code class="csfmt">\TrackLocale</code></a>{xx<a id="wrglossary.582"></a><a href="#glo:idx.hyphensep"><code class="code">-</code></a>YY<a id="wrglossary.583"></a><a href="#glo:idx.atmod"><code class="code">@</code></a>mod}
+</pre> will add a new dialect with the label <code class="code">xxYYmod</code> and <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.584"></a><a href="#glo:TrackLanguageTag"><code class="csfmt">\TrackLanguageTag</code></a>{xx-Latn-YY}
+</pre> will add a new dialect with the label <code class="code">xxLatnYY</code>.<p>
+<div class="important"><div class="importanttitle"><a href="#glo:sym.important"><span title="Important" class="icon">ℹ</span></a></div><!-- end of importanttitle -->
+If <a id="wrglossary.585"></a><a href="#glo:TrackLocale"><code class="csfmt">\TrackLocale</code></a> or <a id="wrglossary.586"></a><a href="#glo:TrackLangFromEnv"><code class="csfmt">\TrackLangFromEnv</code></a> find a <a id="wrglossary.587"></a><a href="#glo:idx.modifier">modifier</a>, the value will be sanitized to allow it to be used as a label. If the modifier is set explicitly using <a id="wrglossary.588"></a><a href="#glo:SetTrackedDialectModifier"><code class="csfmt">\SetTrackedDialectModifier</code></a>, no sanitization is performed. </div><!-- end of important -->
+<p>
+In addition to the root language label and the dialect identifier, many of the language options also have corresponding <a id="wrglossary.589"></a><a href="#glo:ISO">ISO</a> codes. In most cases there is an <a id="wrglossary.590"></a><a href="#glo:idx.639-1">ISO <span class="mbox">639-1</span></a> or an <a id="wrglossary.591"></a><a href="#glo:idx.639-2">ISO <span class="mbox">639-2</span></a> code (or both), and in some cases there is an <a id="wrglossary.592"></a><a href="#glo:idx.3166-1">ISO <span class="mbox">3166-1</span></a> code identifying the dialect <a id="wrglossary.593"></a><a href="#glo:idx.territory">region</a>. Where a language has different <a id="wrglossary.594"></a><a href="#glo:idx.639-2T">ISO <span class="mbox">639-2</span> (T)</a> and <a id="wrglossary.595"></a><a href="#glo:idx.639-2B"><span class="mbox">639-2</span> (B)</a> codes, the <span class="qt">“Tâ€</span> version is assumed.<p>
+When the <a id="wrglossary.596"></a><a href="#glo:pkg.tracklang"><span class="filefmt">tracklang.sty</span></a> LaTeX package is loaded, it first attempts to find the language options through the package options supplied to <a id="wrglossary.597"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a>. This means that any languages that have been supplied in the document class options should get identified (provided that the document class has used the standard option declaration mechanism). If no languages have been supplied in this way, <a id="wrglossary.598"></a><a href="#glo:pkg.tracklang"><span class="filefmt">tracklang.sty</span></a> then attempts to identify language settings in the following order:
+<ol class="displaylist">
+ <li><span class="numitem">1.</span>if <a id="wrglossary.599"></a><a href="#glo:bbl@loaded"><code class="csfmt">\bbl@loaded</code></a> is defined (<a id="wrglossary.600"></a><a href="#glo:pkg.babel"><span class="styfmt">babel</span></a>), <a id="wrglossary.601"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> will iterate over each label in that command definition;<p>
+<li><span class="numitem">2.</span>if <a id="wrglossary.602"></a><a href="#glo:trans@languages"><code class="csfmt">\trans@languages</code></a> is defined (<a id="wrglossary.603"></a><a href="#glo:pkg.translator"><span class="styfmt">translator</span></a>), <a id="wrglossary.604"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> will iterate over each label in that command definition;<p>
+<li><span class="numitem">3.</span>if <a id="wrglossary.605"></a><a href="#glo:pkg.ngerman"><span class="styfmt">ngerman</span></a> has been loaded, the <a id="wrglossary.606"></a><a href="#glo:opt.ngerman"><span class="optfmt">ngerman</span></a> dialect will be tracked;<p>
+<li><span class="numitem">4.</span>if <a id="wrglossary.607"></a><a href="#glo:pkg.german"><span class="styfmt">german</span></a> has been loaded, the <a id="wrglossary.608"></a><a href="#glo:opt.german"><span class="optfmt">german</span></a> root language will be tracked;<p>
+<li><span class="numitem">5.</span>if <a id="wrglossary.609"></a><a href="#glo:pkg.polyglossia"><span class="styfmt">polyglossia</span></a> has been loaded:<p>
+
+<ol class="displaylist">
+ <li><span class="numitem">(a)</span>if <a id="wrglossary.610"></a><a href="#glo:xpg@bcp@loaded"><code class="csfmt">\xpg@bcp@loaded</code></a> has been defined, <a id="wrglossary.611"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> will iterate over the <a id="wrglossary.612"></a><a href="#glo:idx.BCP47">BCP 47</a> tags in that command definition;<p>
+<li><span class="numitem">(b)</span>if <a id="wrglossary.613"></a><a href="#glo:xpg@loaded"><code class="csfmt">\xpg@loaded</code></a> has been defined, <a id="wrglossary.614"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> will iterate over each language label in that command definition;<p>
+<li><span class="numitem">(c)</span><a id="wrglossary.615"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> will iterate over all <a id="wrglossary.616"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> options and test if the root language has been loaded.
+</ol>
+<p>
+
+</ol>
+ Note that this references internal commands provided by other packages. Of these, only the <a id="wrglossary.617"></a><a href="#glo:pkg.polyglossia"><span class="styfmt">polyglossia</span></a> commands are documented in the package manual, and so are the only ones that can be relied on.<p>
+Each identified language and dialect is added to the <span style="font-style: italic; font-variant: normal; ">tracked language</span> and <span style="font-style: italic; font-variant: normal; ">tracked dialect</span> lists. Note that the tracked language and tracked dialect are labels rather than proper nouns. If a dialect label is identical to its root language label, the label will appear in both lists.<p>
+You can check whether or not any languages have been detected using: <div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.618"></a><code class="code"><dfn id="glo:AnyTrackedLanguages"><code class="csfmt">\AnyTrackedLanguages</code></dfn>{<span class="meta">〈<em class="metainner">true</em>〉</span>}{<span class="meta">〈<em class="metainner">false</em>〉</span>}</code></div><!-- end of pinnedbox -->
+ This will do <span class="meta">〈<em class="metainner">true</em>〉</span> if one or more languages have been tracked otherwise it will do <span class="meta">〈<em class="metainner">false</em>〉</span>. (Each detected dialect will automatically have the root language label added to the tracked language list, if it’s not already present.)<p>
+If you want to find out if any of the tracked dialects matches a particular language tag, you can use: <div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.619"></a><code class="code"><dfn id="glo:GetTrackedDialectFromLanguageTag"><code class="csfmt">\GetTrackedDialectFromLanguageTag</code></dfn>{<span class="meta">〈<em class="metainner">tag</em>〉</span>}{<span class="meta">〈<em class="metainner">cs</em>〉</span>}</code></div><!-- end of pinnedbox -->
+ If successful, the supplied control sequence <span class="meta">〈<em class="metainner">cs</em>〉</span> is set to the dialect label, otherwise <span class="meta">〈<em class="metainner">cs</em>〉</span> is set to empty. The test is for an exact match on the root language, <a id="wrglossary.620"></a><a href="#glo:idx.script">script</a>, sub-language, <a id="wrglossary.621"></a><a href="#glo:idx.variant">variant</a> and <a id="wrglossary.622"></a><a href="#glo:idx.territory">region</a>. The control sequence <span class="meta">〈<em class="metainner">cs</em>〉</span> will be empty if none of the tracked dialects matches all five of those elements. (If the script isn’t given explicitly, the default for that language is assumed.) In the event that <span class="meta">〈<em class="metainner">cs</em>〉</span> is empty, you can now (as from v1.3.6) get the closest match with: <div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.623"></a><code class="code"><dfn id="glo:TrackedDialectClosestSubMatch"><code class="csfmt">\TrackedDialectClosestSubMatch</code></dfn></code></div><!-- end of pinnedbox -->
+ (which is set by <a id="wrglossary.624"></a><a href="#glo:GetTrackedDialectFromLanguageTag"><code class="csfmt">\GetTrackedDialectFromLanguageTag</code></a>). This will be empty if no tracked dialects match on the root language or if there’s a tracked dialect label that exactly matches the label formed by concatenating the language code, sub-language, <a id="wrglossary.625"></a><a href="#glo:idx.script">script</a>, <a id="wrglossary.626"></a><a href="#glo:idx.territory">region</a>, <a id="wrglossary.627"></a><a href="#glo:idx.modifier">modifier</a> and <a id="wrglossary.628"></a><a href="#glo:idx.variant">variant</a>.<p>
+For example (Plain TeX): <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.629"></a><a href="#glo:input"><code class="csfmt">\input</code></a> tracklang
+<a id="wrglossary.630"></a><a href="#glo:TrackLanguageTag"><code class="csfmt">\TrackLanguageTag</code></a>{en-826}
+Has en-Latn-GB been tracked?
+<a id="wrglossary.631"></a><a href="#glo:GetTrackedDialectFromLanguageTag"><code class="csfmt">\GetTrackedDialectFromLanguageTag</code></a>{en-Latn-GB}{<code class="cmd">\thisdialect</code>}<span class="comment">% </span>
+<code class="cmd">\ifx</code><code class="cmd">\thisdialect</code><code class="cmd">\empty</code>
+ No!
+<code class="cmd">\else</code>
+ Yes! Dialect label: <code class="cmd">\thisdialect</code>.
+<code class="cmd">\fi</code>
+<code class="cmd">\bye</code>
+</pre> This matches because the <a id="wrglossary.632"></a><a href="#glo:idx.territory">territory</a> code <a id="wrglossary.633"></a><a href="#glo:opt.GB">826</a> is recognised as equivalent to the code <a id="wrglossary.634"></a><a href="#glo:opt.GB"><span class="optfmt">GB</span></a>, and the default <a id="wrglossary.635"></a><a href="#glo:idx.script">script</a> for <a id="wrglossary.636"></a><a href="#glo:opt.english"><span class="optfmt">english</span></a> is <a id="wrglossary.637"></a><a href="#glo:opt.Latn"><span class="optfmt">Latn</span></a>. In this case, the dialect label is <a id="wrglossary.638"></a><a href="#glo:opt.british"><span class="optfmt">british</span></a>. Note that this doesn’t require the use of <a id="wrglossary.639"></a><a href="#glo:TrackLanguageTag"><code class="csfmt">\TrackLanguageTag</code></a> to track the dialect. It also works if the dialect has been tracked using other commands, such as <a id="wrglossary.640"></a><a href="#glo:TrackLocale"><code class="csfmt">\TrackLocale</code></a>.<p>
+Here’s an example that doesn’t have an exact match, but does have a partial match: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.641"></a><a href="#glo:input"><code class="csfmt">\input</code></a> tracklang
+<a id="wrglossary.642"></a><a href="#glo:TrackLanguageTag"><code class="csfmt">\TrackLanguageTag</code></a>{de-CH-1996}
+Has de-DE-1996 been tracked?
+<a id="wrglossary.643"></a><a href="#glo:GetTrackedDialectFromLanguageTag"><code class="csfmt">\GetTrackedDialectFromLanguageTag</code></a>{de-DE-1996}{<code class="cmd">\thisdialect</code>}<span class="comment">% </span>
+<code class="cmd">\ifx</code><code class="cmd">\thisdialect</code><code class="cmd">\empty</code>
+ No!
+ <code class="cmd">\ifx</code><a id="wrglossary.644"></a><a href="#glo:TrackedDialectClosestSubMatch"><code class="csfmt">\TrackedDialectClosestSubMatch</code></a><code class="cmd">\empty</code>
+ No match on root language.
+ <code class="cmd">\else</code>
+ Closest match: <a id="wrglossary.645"></a><a href="#glo:TrackedDialectClosestSubMatch"><code class="csfmt">\TrackedDialectClosestSubMatch</code></a>.
+ <code class="cmd">\fi</code>
+<code class="cmd">\else</code>
+ Yes! Dialect label: <code class="cmd">\thisdialect</code>.
+<code class="cmd">\fi</code>
+<code class="cmd">\bye</code>
+</pre> In this case the result is: <div class="resultbox"><div class="resultboxtitle"><a href="#glo:sym.result"><span title="Result" class="icon">🖺</span></a></div><!-- end of resultboxtitle -->
+Has de-DE-1996 been tracked? No! Closest match: nswissgerman. </div><!-- end of resultbox -->
+<p>
+You can iterate through each tracked dialect using: <div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.646"></a><code class="code"><dfn id="glo:ForEachTrackedDialect"><code class="csfmt">\ForEachTrackedDialect</code></dfn>{<span class="meta">〈<em class="metainner">cs</em>〉</span>}{<span class="meta">〈<em class="metainner">body</em>〉</span>}</code></div><!-- end of pinnedbox -->
+ At the start of each iteration, this sets the control sequence <span class="meta">〈<em class="metainner">cs</em>〉</span> to the tracked dialect and does <span class="meta">〈<em class="metainner">body</em>〉</span>.<p>
+You can iterate through each tracked language using: <div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.647"></a><code class="code"><dfn id="glo:ForEachTrackedLanguage"><code class="csfmt">\ForEachTrackedLanguage</code></dfn>{<span class="meta">〈<em class="metainner">cs</em>〉</span>}{<span class="meta">〈<em class="metainner">body</em>〉</span>}</code></div><!-- end of pinnedbox -->
+ At the start of each iteration, this sets the control sequence <span class="meta">〈<em class="metainner">cs</em>〉</span> to the tracked language and does <span class="meta">〈<em class="metainner">body</em>〉</span>.<p>
+The above for-loops use the same internal mechanism as LaTeX’s <a id="wrglossary.648"></a><a href="#glo:@for"><code class="csfmt">\@for</code></a> loop. Since this isn’t defined by TeX, a similar command (<a id="wrglossary.649"></a><dfn id="glo:@tracklang@for"><code class="csfmt">\@tracklang@for</code></dfn>) will be defined that works in the same way.<p>
+The provided control sequence <span class="meta">〈<em class="metainner">cs</em>〉</span> is updated at the start of each iteration to the current element. The loop is terminated when this control sequence is set to <a id="wrglossary.650"></a><a href="#glo:@nil"><code class="csfmt">\@nil</code></a>. This special control sequence should never been used as it’s just a marker and isn’t actually defined. If you get an error message stating that <a id="wrglossary.651"></a><a href="#glo:@nil"><code class="csfmt">\@nil</code></a> is undefined, then it’s most likely due to a loop control sequence being used outside the loop. This can occur if the loop contains code that isn’t expanded until later. For example, if the loop code includes <a id="wrglossary.652"></a><a href="#glo:AtBeginDocument"><code class="csfmt">\AtBeginDocument</code></a>, you need to ensure that the loop control sequence is expanded before being added to the hook.<p>
+You can test if a root language has been detected using: <div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.653"></a><code class="code"><dfn id="glo:IfTrackedLanguage"><code class="csfmt">\IfTrackedLanguage</code></dfn>{<span class="meta">〈<em class="metainner">language-label</em>〉</span>}{<span class="meta">〈<em class="metainner">true</em>〉</span>}{<span class="meta">〈<em class="metainner">false</em>〉</span>}</code></div><!-- end of pinnedbox -->
+ where <span class="meta">〈<em class="metainner">language-label</em>〉</span> is the language label. If true, this does <span class="meta">〈<em class="metainner">true</em>〉</span> otherwise it does <span class="meta">〈<em class="metainner">false</em>〉</span>.<p>
+You can test if a particular dialect has been detected using: <div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.654"></a><code class="code"><dfn id="glo:IfTrackedDialect"><code class="csfmt">\IfTrackedDialect</code></dfn>{<span class="meta">〈<em class="metainner">dialect-label</em>〉</span>}{<span class="meta">〈<em class="metainner">true</em>〉</span>}{<span class="meta">〈<em class="metainner">false</em>〉</span>}</code></div><!-- end of pinnedbox -->
+ where <span class="meta">〈<em class="metainner">dialect-label</em>〉</span> is the dialect label. If the root language was explicitly specified, then it will also be detected as a dialect.<p>
+For example: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><code class="cmd">\documentclass</code>[<a id="wrglossary.655"></a><a href="#glo:opt.british"><span class="optfmt">british</span></a>,<a id="wrglossary.656"></a><a href="#glo:opt.dutch"><span class="optfmt">dutch</span></a>]{article}
+
+<code class="cmd">\usepackage</code>{tracklang}
+
+<code class="cbeg">\begin{document}</code>
+``english'' <a id="wrglossary.657"></a><a href="#glo:IfTrackedDialect"><code class="csfmt">\IfTrackedDialect</code></a>{english}{has}{hasn't} been specified.
+
+``british'' <a id="wrglossary.658"></a><a href="#glo:IfTrackedDialect"><code class="csfmt">\IfTrackedDialect</code></a>{british}{has}{hasn't} been specified.
+
+``flemish'' <a id="wrglossary.659"></a><a href="#glo:IfTrackedDialect"><code class="csfmt">\IfTrackedDialect</code></a>{flemish}{has}{hasn't} been specified.
+
+``dutch'' <a id="wrglossary.660"></a><a href="#glo:IfTrackedDialect"><code class="csfmt">\IfTrackedDialect</code></a>{dutch}{has}{hasn't} been specified.
+
+``english'' or an English variant
+<a id="wrglossary.661"></a><a href="#glo:IfTrackedLanguage"><code class="csfmt">\IfTrackedLanguage</code></a>{english}{has}{hasn't} been specified.
+<code class="cend">\end{document}</code>
+</pre> This produces: <div class="resultbox"><div class="resultboxtitle"><a href="#glo:sym.result"><span title="Result" class="icon">🖺</span></a></div><!-- end of resultboxtitle -->
+“english’’ hasn’t been specified.<p>
+“british’’ has been specified.<p>
+“flemish’’ hasn’t been specified.<p>
+“dutch’’ has been specified.<p>
+“english’’ or an English variant has been specified. </div><!-- end of resultbox -->
+<p>
+You can find the root language label for a given tracked dialect using: <div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.662"></a><code class="code"><dfn id="glo:TrackedLanguageFromDialect"><code class="csfmt">\TrackedLanguageFromDialect</code></dfn>{<span class="meta">〈<em class="metainner">dialect</em>〉</span>}</code></div><!-- end of pinnedbox -->
+ If <span class="meta">〈<em class="metainner">dialect</em>〉</span> hasn’t been defined this does nothing otherwise it expands to the root language label.<p>
+You can find the tracked dialects from a given root language using: <div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.663"></a><code class="code"><dfn id="glo:TrackedDialectsFromLanguage"><code class="csfmt">\TrackedDialectsFromLanguage</code></dfn>{<span class="meta">〈<em class="metainner">root language label</em>〉</span>}</code></div><!-- end of pinnedbox -->
+ This will expand to a comma-separated list of dialect labels if the root language label has been defined, otherwise it does nothing.<p>
+You can test if a language or dialect has a corresponding <a id="wrglossary.664"></a><a href="#glo:ISO">ISO</a> code using: <div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.665"></a><code class="code"><dfn id="glo:IfTrackedLanguageHasIsoCode"><code class="csfmt">\IfTrackedLanguageHasIsoCode</code></dfn>{<span class="meta">〈<em class="metainner">code type</em>〉</span>}{<span class="meta">〈<em class="metainner">label</em>〉</span>}{<span class="meta">〈<em class="metainner">true</em>〉</span>}{<span class="meta">〈<em class="metainner">false</em>〉</span>}</code></div><!-- end of pinnedbox -->
+ where <span class="meta">〈<em class="metainner">code type</em>〉</span> is the type of <a id="wrglossary.666"></a><a href="#glo:ISO">ISO</a> code (for example, <a id="wrglossary.667"></a><a href="#glo:idx.639-1"><span class="mbox">639-1</span></a> for root languages or <a id="wrglossary.668"></a><a href="#glo:idx.3166-1"><span class="mbox">3166-1</span></a> for regional dialects), and <span class="meta">〈<em class="metainner">label</em>〉</span> is the language or dialect label. Note that the <a id="wrglossary.669"></a><a href="#glo:idx.639-3"><span class="mbox">639-3</span></a> may be set for the dialect rather than root language for sub-languages parsed using <a id="wrglossary.670"></a><a href="#glo:TrackLanguageTag"><code class="csfmt">\TrackLanguageTag</code></a>.<p>
+Alternatively, you can test if a particular <a id="wrglossary.671"></a><a href="#glo:ISO">ISO</a> code has been defined using: <div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.672"></a><code class="code"><dfn id="glo:IfTrackedIsoCode"><code class="csfmt">\IfTrackedIsoCode</code></dfn>{<span class="meta">〈<em class="metainner">code type</em>〉</span>}{<span class="meta">〈<em class="metainner">code</em>〉</span>}{<span class="meta">〈<em class="metainner">true</em>〉</span>}{<span class="meta">〈<em class="metainner">false</em>〉</span>}</code></div><!-- end of pinnedbox -->
+ where <span class="meta">〈<em class="metainner">code type</em>〉</span> is again the type of <a id="wrglossary.673"></a><a href="#glo:ISO">ISO</a> code (for example, <a id="wrglossary.674"></a><a href="#glo:idx.639-1"><span class="mbox">639-1</span></a> or <a id="wrglossary.675"></a><a href="#glo:idx.3166-1"><span class="mbox">3166-1</span></a>), and <span class="meta">〈<em class="metainner">code</em>〉</span> is the particular code (for example, <a id="wrglossary.676"></a><a href="#glo:opt.english"><span class="optfmt">en</span></a> for <a id="wrglossary.677"></a><a href="#glo:idx.639-1">ISO <span class="mbox">639-1</span></a> or <a id="wrglossary.678"></a><a href="#glo:opt.GB"><span class="optfmt">GB</span></a> for <a id="wrglossary.679"></a><a href="#glo:idx.3166-1">ISO <span class="mbox">3166-1</span></a>).<p>
+You can fetch the language (or dialect) label associated with a given <a id="wrglossary.680"></a><a href="#glo:ISO">ISO</a> code using: <div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.681"></a><code class="code"><dfn id="glo:TrackedLanguageFromIsoCode"><code class="csfmt">\TrackedLanguageFromIsoCode</code></dfn>{<span class="meta">〈<em class="metainner">code type</em>〉</span>}{<span class="meta">〈<em class="metainner">code</em>〉</span>}</code></div><!-- end of pinnedbox -->
+ This does nothing if the given <span class="meta">〈<em class="metainner">code</em>〉</span> for the given <a id="wrglossary.682"></a><a href="#glo:ISO">ISO</a> <span class="meta">〈<em class="metainner">code type</em>〉</span> has not been defined, otherwise it expands a comma-separated list of language or dialect labels.<p>
+You can fetch the <a id="wrglossary.683"></a><a href="#glo:ISO">ISO</a> code for a given code type using: <div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.684"></a><code class="code"><dfn id="glo:TrackedIsoCodeFromLanguage"><code class="csfmt">\TrackedIsoCodeFromLanguage</code></dfn>{<span class="meta">〈<em class="metainner">code type</em>〉</span>}{<span class="meta">〈<em class="metainner">label</em>〉</span>}</code></div><!-- end of pinnedbox -->
+ where <span class="meta">〈<em class="metainner">label</em>〉</span> is the language or dialect label and <span class="meta">〈<em class="metainner">code type</em>〉</span> is the <a id="wrglossary.685"></a><a href="#glo:ISO">ISO</a> code type (for example, <a id="wrglossary.686"></a><a href="#glo:idx.639-1"><span class="mbox">639-1</span></a> or <a id="wrglossary.687"></a><a href="#glo:idx.3166-1"><span class="mbox">3166-1</span></a>). Unlike <a id="wrglossary.688"></a><a href="#glo:TrackedLanguageFromIsoCode"><code class="csfmt">\TrackedLanguageFromIsoCode</code></a>, this command only expands to a single label rather than a comma-separated list.<p>
+The above commands do nothing in the event of an unknown code or code type, so if you accidentally get the wrong code type, you won’t get an error. If you’re unsure of the code type, you can use the following commands: <div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.689"></a><code class="code"><dfn id="glo:TwoLetterIsoCountryCode"><code class="csfmt">\TwoLetterIsoCountryCode</code></dfn></code></div><!-- end of pinnedbox -->
+ This expands to <a id="wrglossary.690"></a><a href="#glo:idx.3166-1"><span class="mbox">3166-1</span></a> and is used for the two-letter country codes.<p>
+<div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.691"></a><code class="code"><dfn id="glo:TwoLetterIsoLanguageCode"><code class="csfmt">\TwoLetterIsoLanguageCode</code></dfn></code></div><!-- end of pinnedbox -->
+ This expands to <a id="wrglossary.692"></a><a href="#glo:idx.639-1"><span class="mbox">639-1</span></a> and is used for the two-letter root language codes.<p>
+<div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.693"></a><code class="code"><dfn id="glo:ThreeLetterIsoLanguageCode"><code class="csfmt">\ThreeLetterIsoLanguageCode</code></dfn></code></div><!-- end of pinnedbox -->
+ This expands to <a id="wrglossary.694"></a><a href="#glo:idx.639-2"><span class="mbox">639-2</span></a> and is used for the three-letter root language codes.<p>
+<div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.695"></a><code class="code"><dfn id="glo:ThreeLetterExtIsoLanguageCode"><code class="csfmt">\ThreeLetterExtIsoLanguageCode</code></dfn></code></div><!-- end of pinnedbox -->
+ This expands to <a id="wrglossary.696"></a><a href="#glo:idx.639-3"><span class="mbox">639-3</span></a>. This code is only used for a root language if there’s no <a id="wrglossary.697"></a><a href="#glo:idx.639-1"><span class="mbox">639-1</span></a> or <a id="wrglossary.698"></a><a href="#glo:idx.639-2"><span class="mbox">639-2</span></a> code. It may also be used for a dialect if a sub-language part has been set in the language tag parsed by <a id="wrglossary.699"></a><a href="#glo:TrackLanguageTag"><code class="csfmt">\TrackLanguageTag</code></a>.<p>
+The <code class="cmd">\Get…</code> commands below are designed to be expandable. If the supplied <span class="meta">〈<em class="metainner">dialect</em>〉</span> is unrecognised they expand to empty. Remember that the dialect must first be identified as a tracked language for it to be recognised.<p>
+As from v1.3, the language tag for a given dialect can be obtained using: <div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.700"></a><code class="code"><dfn id="glo:GetTrackedLanguageTag"><code class="csfmt">\GetTrackedLanguageTag</code></dfn>{<span class="meta">〈<em class="metainner">dialect</em>〉</span>}</code></div><!-- end of pinnedbox -->
+ where <span class="meta">〈<em class="metainner">dialect</em>〉</span> is the label identifying the dialect. Uses the <a id="wrglossary.701"></a><a href="#glo:opt.undetermined"><span class="optfmt">und</span></a> (undetermined) code for unknown languages.<p>
+As from v1.3, each tracked dialect may also have an associated modifier, which can be fetched using: <div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.702"></a><code class="code"><dfn id="glo:GetTrackedDialectModifier"><code class="csfmt">\GetTrackedDialectModifier</code></dfn>{<span class="meta">〈<em class="metainner">dialect</em>〉</span>}</code></div><!-- end of pinnedbox -->
+ where <span class="meta">〈<em class="metainner">dialect</em>〉</span> is the label identifying the dialect. This value is typically obtained by parsing a <a id="wrglossary.703"></a><a href="#glo:POSIX">POSIX</a> locale identifier with <a id="wrglossary.704"></a><a href="#glo:TrackLocale"><code class="csfmt">\TrackLocale</code></a> or <a id="wrglossary.705"></a><a href="#glo:TrackLangFromEnv"><code class="csfmt">\TrackLangFromEnv</code></a> but may be set explicitly. (See §<a href="#sec:langsty">6</a> for setting this value. Likewise for the following commands.)<p>
+You can test if a dialect has an associated <a id="wrglossary.706"></a><a href="#glo:idx.modifier">modifier</a> using: <div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.707"></a><code class="code"><dfn id="glo:IfHasTrackedDialectModifier"><code class="csfmt">\IfHasTrackedDialectModifier</code></dfn>{<span class="meta">〈<em class="metainner">dialect</em>〉</span>}{<span class="meta">〈<em class="metainner">true</em>〉</span>}{<span class="meta">〈<em class="metainner">false</em>〉</span>}</code></div><!-- end of pinnedbox -->
+ If the dialect has an associated <a id="wrglossary.708"></a><a href="#glo:idx.modifier">modifier</a> this does <span class="meta">〈<em class="metainner">true</em>〉</span> otherwise it does <span class="meta">〈<em class="metainner">false</em>〉</span>.<p>
+For example: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><code class="cmd">\documentclass</code>[<a id="wrglossary.709"></a><a href="#glo:opt.british"><span class="optfmt">british</span></a>,<a id="wrglossary.710"></a><a href="#glo:opt.francais"><span class="optfmt">francais</span></a>,<a id="wrglossary.711"></a><a href="#glo:opt.american"><span class="optfmt">american</span></a>,<a id="wrglossary.712"></a><a href="#glo:opt.canadian"><span class="optfmt">canadian</span></a>,<a id="wrglossary.713"></a><a href="#glo:opt.canadien"><span class="optfmt">canadien</span></a>,<a id="wrglossary.714"></a><a href="#glo:opt.dutch"><span class="optfmt">dutch</span></a>]{article}
+
+<code class="cmd">\usepackage</code>{tracklang}
+
+<code class="cbeg">\begin{document}</code>
+Languages:
+<a id="wrglossary.715"></a><a href="#glo:ForEachTrackedLanguage"><code class="csfmt">\ForEachTrackedLanguage</code></a>{<code class="cmd">\ThisLanguage</code>}{<code class="cmd">\ThisLanguage</code><code class="cmd">\space</code>
+(ISO <a id="wrglossary.716"></a><a href="#glo:TwoLetterIsoLanguageCode"><code class="csfmt">\TwoLetterIsoLanguageCode</code></a>:
+``<a id="wrglossary.717"></a><a href="#glo:TrackedIsoCodeFromLanguage"><code class="csfmt">\TrackedIsoCodeFromLanguage</code></a>{<a id="wrglossary.718"></a><a href="#glo:TwoLetterIsoLanguageCode"><code class="csfmt">\TwoLetterIsoLanguageCode</code></a>}{<code class="cmd">\ThisLanguage</code>}''). }
+
+Dialects:
+<a id="wrglossary.719"></a><a href="#glo:ForEachTrackedDialect"><code class="csfmt">\ForEachTrackedDialect</code></a>{<code class="cmd">\ThisDialect</code>}{<code class="cmd">\ThisDialect</code><code class="cmd">\space</code>
+(<a id="wrglossary.720"></a><a href="#glo:IfTrackedLanguageHasIsoCode"><code class="csfmt">\IfTrackedLanguageHasIsoCode</code></a>{<a id="wrglossary.721"></a><a href="#glo:TwoLetterIsoCountryCode"><code class="csfmt">\TwoLetterIsoCountryCode</code></a>}{<code class="cmd">\ThisDialect</code>}<span class="comment">% </span>
+ {ISO <a id="wrglossary.722"></a><a href="#glo:TwoLetterIsoCountryCode"><code class="csfmt">\TwoLetterIsoCountryCode</code></a>:
+ ``<a id="wrglossary.723"></a><a href="#glo:TrackedIsoCodeFromLanguage"><code class="csfmt">\TrackedIsoCodeFromLanguage</code></a>{<a id="wrglossary.724"></a><a href="#glo:TwoLetterIsoCountryCode"><code class="csfmt">\TwoLetterIsoCountryCode</code></a>}{<code class="cmd">\ThisDialect</code>}''} {no specific region};
+root: <a id="wrglossary.725"></a><a href="#glo:TrackedLanguageFromDialect"><code class="csfmt">\TrackedLanguageFromDialect</code></a>{<code class="cmd">\ThisDialect</code>}). }
+
+Language for ISO <a id="wrglossary.726"></a><a href="#glo:TwoLetterIsoCountryCode"><code class="csfmt">\TwoLetterIsoCountryCode</code></a><code class="cmd">\ </code>``GB'':
+<a id="wrglossary.727"></a><a href="#glo:TrackedLanguageFromIsoCode"><code class="csfmt">\TrackedLanguageFromIsoCode</code></a>{<a id="wrglossary.728"></a><a href="#glo:TwoLetterIsoCountryCode"><code class="csfmt">\TwoLetterIsoCountryCode</code></a>}{GB}.
+
+Language for ISO <a id="wrglossary.729"></a><a href="#glo:TwoLetterIsoCountryCode"><code class="csfmt">\TwoLetterIsoCountryCode</code></a><code class="cmd">\ </code>``CA'':
+<a id="wrglossary.730"></a><a href="#glo:TrackedLanguageFromIsoCode"><code class="csfmt">\TrackedLanguageFromIsoCode</code></a>{<a id="wrglossary.731"></a><a href="#glo:TwoLetterIsoCountryCode"><code class="csfmt">\TwoLetterIsoCountryCode</code></a>}{CA}.
+
+Country ISO <a id="wrglossary.732"></a><a href="#glo:TwoLetterIsoCountryCode"><code class="csfmt">\TwoLetterIsoCountryCode</code></a><code class="cmd">\ </code>code for ``canadian'':
+<a id="wrglossary.733"></a><a href="#glo:TrackedIsoCodeFromLanguage"><code class="csfmt">\TrackedIsoCodeFromLanguage</code></a>{<a id="wrglossary.734"></a><a href="#glo:TwoLetterIsoCountryCode"><code class="csfmt">\TwoLetterIsoCountryCode</code></a>}{canadian}.
+<code class="cend">\end{document}</code>
+</pre> This produces: <div class="resultbox"><div class="resultboxtitle"><a href="#glo:sym.result"><span title="Result" class="icon">🖺</span></a></div><!-- end of resultboxtitle -->
+Languages: english (ISO 639-1: “en’’). french (ISO 639-1: “fr’’). dutch (ISO 639-1: “nl’’).<p>
+Dialects: american (ISO 3166-1: “US’’; root: english). british (ISO 3166-1: “GB’’; root: english). canadian (ISO 3166-1: “CA’’; root: english). canadien (ISO 3166-1: “CA’’; root: french). dutch (no specific region; root: dutch). francais (no specific region; root: french).<p>
+Language for ISO 3166-1 “GB’’: british.<p>
+Language for ISO 3166-1 “CA’’: canadian,canadien.<p>
+Country ISO 3166-1 code for “canadian’’: CA. </div><!-- end of resultbox -->
+<p>
+As from v1.3, each tracked dialect may also have an associated variant, which can be fetched using: <div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.735"></a><code class="code"><dfn id="glo:GetTrackedDialectVariant"><code class="csfmt">\GetTrackedDialectVariant</code></dfn>{<span class="meta">〈<em class="metainner">dialect</em>〉</span>}</code></div><!-- end of pinnedbox -->
+ where <span class="meta">〈<em class="metainner">dialect</em>〉</span> is the label identifying the dialect. This value is typically obtained by parsing a language tag with <a id="wrglossary.736"></a><a href="#glo:TrackLanguageTag"><code class="csfmt">\TrackLanguageTag</code></a> but may be set explicitly.<p>
+You can test if a dialect has an associated variant using: <div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.737"></a><code class="code"><dfn id="glo:IfHasTrackedDialectVariant"><code class="csfmt">\IfHasTrackedDialectVariant</code></dfn>{<span class="meta">〈<em class="metainner">dialect</em>〉</span>}{<span class="meta">〈<em class="metainner">true</em>〉</span>}{<span class="meta">〈<em class="metainner">false</em>〉</span>}</code></div><!-- end of pinnedbox -->
+<p>
+As from v1.3, each tracked dialect may also have an associated script, which can be fetched using: <div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.738"></a><code class="code"><dfn id="glo:GetTrackedDialectScript"><code class="csfmt">\GetTrackedDialectScript</code></dfn>{<span class="meta">〈<em class="metainner">dialect</em>〉</span>}</code></div><!-- end of pinnedbox -->
+ where <span class="meta">〈<em class="metainner">dialect</em>〉</span> is the label identifying the dialect.<p>
+You can test if a dialect has an associated script using: <div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.739"></a><code class="code"><dfn id="glo:IfHasTrackedDialectScript"><code class="csfmt">\IfHasTrackedDialectScript</code></dfn>{<span class="meta">〈<em class="metainner">dialect</em>〉</span>}{<span class="meta">〈<em class="metainner">true</em>〉</span>}{<span class="meta">〈<em class="metainner">false</em>〉</span>}</code></div><!-- end of pinnedbox -->
+ If the dialect has an associated script this does <span class="meta">〈<em class="metainner">true</em>〉</span> otherwise it does <span class="meta">〈<em class="metainner">false</em>〉</span>. This information is provided for language packages that need to know what script is required, but there’s no guarantee that the script will actually be set in the document. Similarly for all the other attributes described here.<p>
+Note that the script should be a recognised four-letter <a id="wrglossary.740"></a><a href="#glo:idx.15924">ISO 15924</a> code, such as <a id="wrglossary.741"></a><a href="#glo:opt.Latn"><span class="optfmt">Latn</span></a> or <a id="wrglossary.742"></a><a href="#glo:opt.Cyrl"><span class="optfmt">Cyrl</span></a>. If a dialect doesn’t have an associated script then the default for the root language should be assumed. For example, <a id="wrglossary.743"></a><a href="#glo:opt.Latn"><span class="optfmt">Latn</span></a> for English dialects or <a id="wrglossary.744"></a><a href="#glo:opt.Cyrl"><span class="optfmt">Cyrl</span></a> for Russian dialects. The default script for known languages can be obtained using: <div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.745"></a><code class="code"><dfn id="glo:TrackLangGetDefaultScript"><code class="csfmt">\TrackLangGetDefaultScript</code></dfn>{<span class="meta">〈<em class="metainner">language</em>〉</span>}</code></div><!-- end of pinnedbox -->
+ Most root languages have a default script, but there are a few without one as it may depend on region, politics or ideology.<p>
+There’s a convenient expandable command for testing the script: <div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.746"></a><code class="code"><dfn id="glo:IfTrackedDialectIsScriptCs"><code class="csfmt">\IfTrackedDialectIsScriptCs</code></dfn>{<span class="meta">〈<em class="metainner">dialect</em>〉</span>}{<span class="meta">〈<em class="metainner">cs</em>〉</span>}{<span class="meta">〈<em class="metainner">true</em>〉</span>}{<span class="meta">〈<em class="metainner">false</em>〉</span>}</code></div><!-- end of pinnedbox -->
+ This tests if the given tracked dialect has an associated script and compares the value with the replacement text of <span class="meta">〈<em class="metainner">cs</em>〉</span>. If the dialect hasn’t been explicitly assigned a script, then test is performed against the default script for the root language.<p>
+The supplementary package <a id="wrglossary.747"></a><a href="#glo:pkg.tracklang-scripts"><span class="styfmt">tracklang-scripts</span></a> provides some additional commands relating to writing systems, including commands in the form <a id="wrglossary.748"></a><a href="#glo:TrackLangScriptCode"><code class="csfmt">\TrackLangScript<span class="meta">〈<em class="metainner">Code</em>〉</span></code></a> where <span class="meta">〈<em class="metainner">Code</em>〉</span> is the <a id="wrglossary.749"></a><a href="#glo:idx.15924">ISO 15924</a> four-letter code. If the dialect doesn’t have an associated script, <span class="meta">〈<em class="metainner">false</em>〉</span> is done. This package isn’t loaded automatically, so you’ll need to explicitly load it. The generic code is in <a id="wrglossary.750"></a><a href="#glo:file.tracklang-scripts.tex"><span class="filefmt">tracklang-scripts.tex</span></a>: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.751"></a><a href="#glo:input"><code class="csfmt">\input</code></a> tracklang-scripts
+</pre> There’s a convenient LaTeX wrapper <a id="wrglossary.752"></a><a href="#glo:pkg.tracklang-scripts"><span class="filefmt">tracklang-scripts.sty</span></a>: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><code class="cmd">\usepackage</code>{tracklang-scripts}
+</pre> See §<a href="#sec:supplpkgs">4</a> for further details of that package.<p>
+For example, the following defines a command to check if the given dialect should use a Latin <a id="wrglossary.753"></a><a href="#glo:idx.script">script</a>: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.754"></a><a href="#glo:input"><code class="csfmt">\input</code></a> tracklang-scripts
+<code class="cmd">\def</code><code class="cmd">\islatin</code>#1#2#3{<span class="comment">% </span>
+ <a id="wrglossary.755"></a><a href="#glo:IfTrackedDialectIsScriptCs"><code class="csfmt">\IfTrackedDialectIsScriptCs</code></a>{#1}{<a id="wrglossary.756"></a><a href="#glo:TrackLangScriptCode"><code class="csfmt">\TrackLangScriptLatn</code></a>}{#2}{#3}<span class="comment">% </span>
+}
+</pre><p>
+<div class="important"><div class="importanttitle"><a href="#glo:sym.important"><span title="Important" class="icon">ℹ</span></a></div><!-- end of importanttitle -->
+Note that the <a id="wrglossary.757"></a><a href="#glo:idx.script">script</a> value doesn’t mean that the document is actually using that script. It means that this is the user’s <span style="font-style: italic; font-variant: normal; ">desired</span> script, but whether that <a id="wrglossary.758"></a><a href="#glo:idx.script">script</a> is actually set relies on the appropriate settings in the relevant language package (such as <a id="wrglossary.759"></a><a href="#glo:pkg.polyglossia"><span class="styfmt">polyglossia</span>’s</a> <span class="optfmt">script</span> key). </div><!-- end of important -->
+<p>
+As from v1.3, each tracked dialect may also have a sub-language identifier (for example, <span class="optfmt">arevela</span>), which can be fetched using: <div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.760"></a><code class="code"><dfn id="glo:GetTrackedDialectSubLang"><code class="csfmt">\GetTrackedDialectSubLang</code></dfn>{<span class="meta">〈<em class="metainner">dialect</em>〉</span>}</code></div><!-- end of pinnedbox -->
+ where <span class="meta">〈<em class="metainner">dialect</em>〉</span> is the label identifying the dialect.<p>
+You can test if a dialect has an associated sub-tag using: <div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.761"></a><code class="code"><dfn id="glo:IfHasTrackedDialectSubLang"><code class="csfmt">\IfHasTrackedDialectSubLang</code></dfn>{<span class="meta">〈<em class="metainner">dialect</em>〉</span>}{<span class="meta">〈<em class="metainner">true</em>〉</span>}{<span class="meta">〈<em class="metainner">false</em>〉</span>}</code></div><!-- end of pinnedbox -->
+ If the dialect has an associated sub-tag this does <span class="meta">〈<em class="metainner">true</em>〉</span> otherwise it does <span class="meta">〈<em class="metainner">false</em>〉</span>.<p>
+As from v1.3, each tracked dialect may also have additional information, which can be fetched using: <div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.762"></a><code class="code"><dfn id="glo:GetTrackedDialectAdditional"><code class="csfmt">\GetTrackedDialectAdditional</code></dfn>{<span class="meta">〈<em class="metainner">dialect</em>〉</span>}</code></div><!-- end of pinnedbox -->
+ where <span class="meta">〈<em class="metainner">dialect</em>〉</span> is the label identifying the dialect.<p>
+You can test if a dialect has additional information using: <div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.763"></a><code class="code"><dfn id="glo:IfHasTrackedDialectAdditional"><code class="csfmt">\IfHasTrackedDialectAdditional</code></dfn>{<span class="meta">〈<em class="metainner">dialect</em>〉</span>}{<span class="meta">〈<em class="metainner">true</em>〉</span>}{<span class="meta">〈<em class="metainner">false</em>〉</span>}</code></div><!-- end of pinnedbox -->
+ If the dialect has additional information this does <span class="meta">〈<em class="metainner">true</em>〉</span> otherwise it does <span class="meta">〈<em class="metainner">false</em>〉</span>.<p>
+Most packages that implement multilingual support have a set of language definition files for each supported language or dialect. It may be that only the root language is needed, if there are no variations between that language’s dialect (for the purposes of that package), or it may be that separate definition files are required for each dialect. However it can be awkward trying to map the requested dialect or language label to the file name. Should, say, the file containing the French code be called <span class="filefmt"></span><span class="meta">〈<em class="metainner">prefix</em>〉</span><span class="filefmt">-french-</span><span class="meta">〈<em class="metainner">suffix</em>〉</span><span class="filefmt"></span> or <span class="filefmt"></span><span class="meta">〈<em class="metainner">prefix</em>〉</span><span class="filefmt">-frenchb-</span><span class="meta">〈<em class="metainner">suffix</em>〉</span><span class="filefmt"></span> or <span class="filefmt"></span><span class="meta">〈<em class="metainner">prefix</em>〉</span><span class="filefmt">-francais-</span><span class="meta">〈<em class="metainner">suffix</em>〉</span><span class="filefmt"></span>? Should, say, the file containing the British English code be called <span class="filefmt"></span><span class="meta">〈<em class="metainner">prefix</em>〉</span><span class="filefmt">-british-</span><span class="meta">〈<em class="metainner">suffix</em>〉</span><span class="filefmt"></span> or <span class="filefmt"></span><span class="meta">〈<em class="metainner">prefix</em>〉</span><span class="filefmt">-UKenglish-</span><span class="meta">〈<em class="metainner">suffix</em>〉</span><span class="filefmt"></span>? If you want to modularise the language support for your package so that each language module has a different maintainer will the maintainers know what tag to use for their language?<p>
+<a id="pg:filesearch"></a>To help with this, <a id="wrglossary.764"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> provides: <div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.765"></a><code class="code"><dfn id="glo:IfTrackedLanguageFileExists"><code class="csfmt">\IfTrackedLanguageFileExists</code></dfn>{<span class="meta">〈<em class="metainner">dialect</em>〉</span>}{<span class="meta">〈<em class="metainner">prefix</em>〉</span>}{<span class="meta">〈<em class="metainner">suffix</em>〉</span>}{<span class="meta">〈<em class="metainner">true code</em>〉</span>}{<span class="meta">〈<em class="metainner">false code</em>〉</span>}</code></div><!-- end of pinnedbox -->
+ This attempts to find the file called <span class="meta">〈<em class="metainner">prefix</em>〉</span><span class="meta">〈<em class="metainner">localeid</em>〉</span><span class="meta">〈<em class="metainner">suffix</em>〉</span> where <span class="meta">〈<em class="metainner">localeid</em>〉</span> is determined from <span class="meta">〈<em class="metainner">dialect</em>〉</span> (see below). If the file is found then <div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.766"></a><code class="code"><dfn id="glo:CurrentTrackedTag"><code class="csfmt">\CurrentTrackedTag</code></dfn></code></div><!-- end of pinnedbox -->
+ is set to <span class="meta">〈<em class="metainner">localeid</em>〉</span> and <span class="meta">〈<em class="metainner">true code</em>〉</span> is done, otherwise <span class="meta">〈<em class="metainner">false code</em>〉</span> is done. If this command is empty, then the dialect hasn’t been detected. If the dialect has been detected, but no file can be found, then <a id="wrglossary.767"></a><a href="#glo:CurrentTrackedTag"><code class="csfmt">\CurrentTrackedTag</code></a> is set to the final attempt at determining <span class="meta">〈<em class="metainner">localeid</em>〉</span>.<p>
+There’s a convenient shortcut command new to version 1.3: <div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.768"></a><code class="code"><dfn id="glo:TrackLangRequireDialect"><code class="csfmt">\TrackLangRequireDialect</code></dfn>[<span class="meta">〈<em class="metainner">load code</em>〉</span>]{<span class="meta">〈<em class="metainner">pkgname</em>〉</span>}{<span class="meta">〈<em class="metainner">dialect</em>〉</span>}</code></div><!-- end of pinnedbox -->
+ which uses <a id="wrglossary.769"></a><a href="#glo:IfTrackedLanguageFileExists"><code class="csfmt">\IfTrackedLanguageFileExists</code></a> to input the resource file if found. The prefix is given by <span class="meta">〈<em class="metainner">pkgname</em>〉</span><code class="code">-</code> and the suffix is <code class="code">.<a id="wrglossary.770"></a><a href="#glo:ext.ldf"><span class="extfmt">ldf</span></a></code>. A warning is issued if no resource file is found. Note that while it makes sense for <span class="meta">〈<em class="metainner">pkgname</em>〉</span> to be the same as the base name of the package that uses these resource files, they don’t have to be the same. This command additionally defines: <div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.771"></a><code class="code"><dfn id="glo:TrackLangRequireDialectPrefix"><code class="csfmt">\TrackLangRequireDialectPrefix</code></dfn></code></div><!-- end of pinnedbox -->
+ to <span class="meta">〈<em class="metainner">pkgname</em>〉</span>, which allows the prefix to be picked up by resource file commands, such as <a id="wrglossary.772"></a><a href="#glo:TrackLangProvidesResource"><code class="csfmt">\TrackLangProvidesResource</code></a> and <a id="wrglossary.773"></a><a href="#glo:TrackLangRequireResource"><code class="csfmt">\TrackLangRequireResource</code></a>. (See below.)<p>
+The optional argument <span class="meta">〈<em class="metainner">load code</em>〉</span> is the code that actually inputs the required file. This defaults to <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.774"></a><a href="#glo:TrackLangRequireResource"><code class="csfmt">\TrackLangRequireResource</code></a>{<a id="wrglossary.775"></a><a href="#glo:CurrentTrackedTag"><code class="csfmt">\CurrentTrackedTag</code></a>}
+</pre><p>
+The <a id="wrglossary.776"></a><a href="#glo:IfTrackedLanguageFileExists"><code class="csfmt">\IfTrackedLanguageFileExists</code></a> command sets up the current tracked dialect with: <pre class="compactcodebox"><a id="wrglossary.777"></a><a href="#glo:SetCurrentTrackedDialect"><code class="csfmt">\SetCurrentTrackedDialect</code></a>{dialect}
+</pre> which enables the following commands that may be used within <span class="meta">〈<em class="metainner">true code</em>〉</span> or <span class="meta">〈<em class="metainner">false code</em>〉</span>: <div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.778"></a><code class="code"><dfn id="glo:CurrentTrackedDialect"><code class="csfmt">\CurrentTrackedDialect</code></dfn></code></div><!-- end of pinnedbox -->
+ Expands to the dialect label.<p>
+<div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.779"></a><code class="code"><dfn id="glo:CurrentTrackedLanguage"><code class="csfmt">\CurrentTrackedLanguage</code></dfn></code></div><!-- end of pinnedbox -->
+ If the dialect hasn’t been detected, this command will be empty, otherwise it will expand to the root language label (which may be the same as the dialect label).<p>
+<div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.780"></a><code class="code"><dfn id="glo:CurrentTrackedRegion"><code class="csfmt">\CurrentTrackedRegion</code></dfn></code></div><!-- end of pinnedbox -->
+ If the dialect hasn’t been detected, this command will be empty. If the dialect has been assigned an <a id="wrglossary.781"></a><a href="#glo:idx.3166-1">ISO <span class="mbox">3166-1</span></a> code, <a id="wrglossary.782"></a><a href="#glo:CurrentTrackedRegion"><code class="csfmt">\CurrentTrackedRegion</code></a> will expand to that code, otherwise it will be empty.<p>
+<div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.783"></a><code class="code"><dfn id="glo:CurrentTrackedIsoCode"><code class="csfmt">\CurrentTrackedIsoCode</code></dfn></code></div><!-- end of pinnedbox -->
+ If the dialect hasn’t been detected, this command will be empty. Otherwise it may be empty or it may expand to the <a id="wrglossary.784"></a><a href="#glo:idx.639-1">ISO <span class="mbox">639-1</span></a> or <a id="wrglossary.785"></a><a href="#glo:idx.639-2">ISO <span class="mbox">639-2</span></a> or <a id="wrglossary.786"></a><a href="#glo:idx.639-3">ISO <span class="mbox">639-3</span></a> code.<p>
+<div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.787"></a><code class="code"><dfn id="glo:CurrentTrackedDialectModifier"><code class="csfmt">\CurrentTrackedDialectModifier</code></dfn></code></div><!-- end of pinnedbox -->
+ The dialect’s modifier or empty if not set. (This is set but not used in the set of possible <span class="meta">〈<em class="metainner">localeid</em>〉</span> values.)<p>
+<div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.788"></a><code class="code"><dfn id="glo:CurrentTrackedDialectVariant"><code class="csfmt">\CurrentTrackedDialectVariant</code></dfn></code></div><!-- end of pinnedbox -->
+ The dialect’s variant or empty if not set.<p>
+<div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.789"></a><code class="code"><dfn id="glo:CurrentTrackedDialectSubLang"><code class="csfmt">\CurrentTrackedDialectSubLang</code></dfn></code></div><!-- end of pinnedbox -->
+ The dialect’s sub-language code or empty if not set.<p>
+<div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.790"></a><code class="code"><dfn id="glo:CurrentTrackedDialectAdditional"><code class="csfmt">\CurrentTrackedDialectAdditional</code></dfn></code></div><!-- end of pinnedbox -->
+ The dialect’s additional information or empty if not set.<p>
+<div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.791"></a><code class="code"><dfn id="glo:CurrentTrackedLanguageTag"><code class="csfmt">\CurrentTrackedLanguageTag</code></dfn></code></div><!-- end of pinnedbox -->
+ The dialect’s language tag. Take care not to confuse this with <a id="wrglossary.792"></a><a href="#glo:CurrentTrackedTag"><code class="csfmt">\CurrentTrackedTag</code></a>.<p>
+<div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.793"></a><code class="code"><dfn id="glo:CurrentTrackedDialectScript"><code class="csfmt">\CurrentTrackedDialectScript</code></dfn></code></div><!-- end of pinnedbox -->
+ The dialect’s script. If the dialect doesn’t have the script set, the default script for the language is used instead.<p>
+<a id="wrglossary.794"></a><a href="#glo:IfTrackedLanguageFileExists"><code class="csfmt">\IfTrackedLanguageFileExists</code></a> behaves as follows:
+<ul class="displaylist">
+ <li><span class="bulletitem">•</span>If no dialect with the given label has been detected, the condition evaluates to <span style="font-style: italic; font-variant: normal; ">false</span> and <a id="wrglossary.795"></a><a href="#glo:CurrentTrackedTag"><code class="csfmt">\CurrentTrackedTag</code></a> is empty.<p>
+<li><span class="bulletitem">•</span>If a dialect with the given label has been detected, then:
+<ul class="displaylist">
+ <li><span class="bulletitem">&#x2013;</span>For each possible <span class="meta">〈<em class="metainner">localeid</em>〉</span> in an ordered set of tags determined by the dialect label (see below), the first file matching <span class="meta">〈<em class="metainner">prefix</em>〉</span><span class="meta">〈<em class="metainner">localeid</em>〉</span><span class="meta">〈<em class="metainner">suffix</em>〉</span> that’s found on TeX’s path results in the condition evaluating to <span style="font-style: italic; font-variant: normal; ">true</span> and <a id="wrglossary.796"></a><a href="#glo:CurrentTrackedTag"><code class="csfmt">\CurrentTrackedTag</code></a> is set to the current <span class="meta">〈<em class="metainner">localeid</em>〉</span> in the set. The rest of the set of possible values of <span class="meta">〈<em class="metainner">localeid</em>〉</span> is skipped.<p>
+<li><span class="bulletitem">&#x2013;</span>If no file matching <span class="meta">〈<em class="metainner">prefix</em>〉</span><span class="meta">〈<em class="metainner">localeid</em>〉</span><span class="meta">〈<em class="metainner">suffix</em>〉</span> is found on TeX’s path, then the condition evaluates to <span style="font-style: italic; font-variant: normal; ">false</span> and <a id="wrglossary.797"></a><a href="#glo:CurrentTrackedTag"><code class="csfmt">\CurrentTrackedTag</code></a> is set to the final <span class="meta">〈<em class="metainner">localeid</em>〉</span> in the set (the language label).
+</ul>
+
+</ul>
+<p>
+The ordered set of possible values of <span class="meta">〈<em class="metainner">localeid</em>〉</span> is determined from the given dialect. <div class="important"><div class="importanttitle"><a href="#glo:sym.important"><span title="Important" class="icon">ℹ</span></a></div><!-- end of importanttitle -->
+The ordering has changed in version 1.4, which now also includes the <a id="wrglossary.798"></a><a href="#glo:idx.script">script</a> and <a id="wrglossary.799"></a><a href="#glo:idx.variant">variant</a>. This new ordering should typically make the more common combinations closer to the start of the search. </div><!-- end of important -->
+ The possible values of <span class="meta">〈<em class="metainner">localeid</em>〉</span> are listed below in the order of priority used by <a id="wrglossary.800"></a><a href="#glo:IfTrackedLanguageFileExists"><code class="csfmt">\IfTrackedLanguageFileExists</code></a>. Note that the set may contain repetitions (for example, if the dialect label is the same as the root language label). If an item contains an element that hasn’t been set (such as the <a id="wrglossary.801"></a><a href="#glo:idx.639-3">ISO <span class="mbox">639-3</span></a> code or a sub-language <span class="meta">〈<em class="metainner">sublang</em>〉</span> or <a id="wrglossary.802"></a><a href="#glo:idx.variant">variant</a>) then that item is skipped.
+<ol class="displaylist">
+ <li><span class="numitem">1.</span><span class="meta">〈<em class="metainner">localeid</em>〉</span> is just the value of <a id="wrglossary.803"></a><a href="#glo:CurrentTrackedLanguageTag"><code class="csfmt">\CurrentTrackedLanguageTag</code></a>.<p>
+<li><span class="numitem">2.</span><span class="meta">〈<em class="metainner">localeid</em>〉</span> is just the dialect label.<p>
+<li><span class="numitem">3.</span><span class="meta">〈<em class="metainner">localeid</em>〉</span> is <span class="meta">〈<em class="metainner">ISO 639-1</em>〉</span><code class="code">-</code><span class="meta">〈<em class="metainner">sublang</em>〉</span><code class="code">-</code><span class="meta">〈<em class="metainner">script</em>〉</span><code class="code">-</code><span class="meta">〈<em class="metainner">region</em>〉</span>.<p>
+<li><span class="numitem">4.</span><span class="meta">〈<em class="metainner">localeid</em>〉</span> is <span class="meta">〈<em class="metainner">ISO 639-1</em>〉</span><code class="code">-</code><span class="meta">〈<em class="metainner">script</em>〉</span><code class="code">-</code><span class="meta">〈<em class="metainner">region</em>〉</span>.<p>
+<li><span class="numitem">5.</span><span class="meta">〈<em class="metainner">localeid</em>〉</span> is <span class="meta">〈<em class="metainner">ISO 639-1</em>〉</span><code class="code">-</code><span class="meta">〈<em class="metainner">sublang</em>〉</span><code class="code">-</code><span class="meta">〈<em class="metainner">region</em>〉</span> (if there’s no script or if the script is the default for the given language). <span class="meta">〈<em class="metainner">ISO 639-1</em>〉</span><code class="code">-</code><span class="meta">〈<em class="metainner">region</em>〉</span> (if there’s no script or if the script is the default for the given language).<p>
+<li><span class="numitem">6.</span><span class="meta">〈<em class="metainner">localeid</em>〉</span> is <span class="meta">〈<em class="metainner">ISO 639-1</em>〉</span><code class="code">-</code><span class="meta">〈<em class="metainner">sublang</em>〉</span><code class="code">-</code><span class="meta">〈<em class="metainner">script</em>〉</span>.<p>
+<li><span class="numitem">7.</span><span class="meta">〈<em class="metainner">localeid</em>〉</span> is <span class="meta">〈<em class="metainner">ISO 639-1</em>〉</span><code class="code">-</code><span class="meta">〈<em class="metainner">script</em>〉</span>.<p>
+<li><span class="numitem">8.</span><span class="meta">〈<em class="metainner">localeid</em>〉</span> is <span class="meta">〈<em class="metainner">ISO 639-1</em>〉</span><code class="code">-</code><span class="meta">〈<em class="metainner">sublang</em>〉</span>.<p>
+<li><span class="numitem">9.</span><span class="meta">〈<em class="metainner">localeid</em>〉</span> is just <span class="meta">〈<em class="metainner">ISO 639-1</em>〉</span>.<p>
+<li><span class="numitem">10.</span><span class="meta">〈<em class="metainner">localeid</em>〉</span> is <span class="meta">〈<em class="metainner">ISO 639-2</em>〉</span><code class="code">-</code><span class="meta">〈<em class="metainner">sublang</em>〉</span><code class="code">-</code><span class="meta">〈<em class="metainner">script</em>〉</span><code class="code">-</code><span class="meta">〈<em class="metainner">region</em>〉</span>.<p>
+<li><span class="numitem">11.</span><span class="meta">〈<em class="metainner">localeid</em>〉</span> is <span class="meta">〈<em class="metainner">ISO 639-2</em>〉</span><code class="code">-</code><span class="meta">〈<em class="metainner">script</em>〉</span><code class="code">-</code><span class="meta">〈<em class="metainner">region</em>〉</span>.<p>
+<li><span class="numitem">12.</span><span class="meta">〈<em class="metainner">localeid</em>〉</span> is <span class="meta">〈<em class="metainner">ISO 639-2</em>〉</span><code class="code">-</code><span class="meta">〈<em class="metainner">sublang</em>〉</span><code class="code">-</code><code class="code">region</code> (if there’s no script or if the script is the default for the given language). <span class="meta">〈<em class="metainner">ISO 639-2</em>〉</span><code class="code">-</code><span class="meta">〈<em class="metainner">region</em>〉</span> (if there’s no script or if the script is the default for the given language).<p>
+<li><span class="numitem">13.</span><span class="meta">〈<em class="metainner">localeid</em>〉</span> is <span class="meta">〈<em class="metainner">ISO 639-2</em>〉</span><code class="code">-</code><span class="meta">〈<em class="metainner">sublang</em>〉</span><code class="code">-</code><span class="meta">〈<em class="metainner">script</em>〉</span>.<p>
+<li><span class="numitem">14.</span><span class="meta">〈<em class="metainner">localeid</em>〉</span> is <span class="meta">〈<em class="metainner">ISO 639-2</em>〉</span><code class="code">-</code><span class="meta">〈<em class="metainner">script</em>〉</span>.<p>
+<li><span class="numitem">15.</span><span class="meta">〈<em class="metainner">localeid</em>〉</span> is <span class="meta">〈<em class="metainner">ISO 639-2</em>〉</span><code class="code">-</code><span class="meta">〈<em class="metainner">sublang</em>〉</span>. <li><span class="numitem">16.</span><span class="meta">〈<em class="metainner">localeid</em>〉</span> is just <span class="meta">〈<em class="metainner">ISO 639-2</em>〉</span>.<p>
+<li><span class="numitem">17.</span><span class="meta">〈<em class="metainner">localeid</em>〉</span> is <span class="meta">〈<em class="metainner">ISO 639-3</em>〉</span><code class="code">-</code><span class="meta">〈<em class="metainner">sublang</em>〉</span><code class="code">-</code><span class="meta">〈<em class="metainner">script</em>〉</span><code class="code">-</code><span class="meta">〈<em class="metainner">region</em>〉</span>.<p>
+<li><span class="numitem">18.</span><span class="meta">〈<em class="metainner">localeid</em>〉</span> is <span class="meta">〈<em class="metainner">ISO 639-3</em>〉</span><code class="code">-</code><span class="meta">〈<em class="metainner">script</em>〉</span><code class="code">-</code><span class="meta">〈<em class="metainner">region</em>〉</span>.<p>
+<li><span class="numitem">19.</span><span class="meta">〈<em class="metainner">localeid</em>〉</span> is <span class="meta">〈<em class="metainner">ISO 639-3</em>〉</span><code class="code">-</code><span class="meta">〈<em class="metainner">sublang</em>〉</span><code class="code">-</code><span class="meta">〈<em class="metainner">region</em>〉</span> (if there’s no script or if the script is the default for the given language). <span class="meta">〈<em class="metainner">ISO 639-3</em>〉</span><code class="code">-</code><span class="meta">〈<em class="metainner">region</em>〉</span> (if there’s no script or if the script is the default for the given language).<p>
+<li><span class="numitem">20.</span><span class="meta">〈<em class="metainner">localeid</em>〉</span> is <span class="meta">〈<em class="metainner">ISO 639-3</em>〉</span><code class="code">-</code><span class="meta">〈<em class="metainner">sublang</em>〉</span><code class="code">-</code><span class="meta">〈<em class="metainner">script</em>〉</span>.<p>
+<li><span class="numitem">21.</span><span class="meta">〈<em class="metainner">localeid</em>〉</span> is <span class="meta">〈<em class="metainner">ISO 639-3</em>〉</span><code class="code">-</code><span class="meta">〈<em class="metainner">script</em>〉</span>.<p>
+<li><span class="numitem">22.</span><span class="meta">〈<em class="metainner">localeid</em>〉</span> is <span class="meta">〈<em class="metainner">ISO 639-3</em>〉</span><code class="code">-</code><span class="meta">〈<em class="metainner">sublang</em>〉</span>.<p>
+<li><span class="numitem">23.</span><span class="meta">〈<em class="metainner">localeid</em>〉</span> is just <span class="meta">〈<em class="metainner">ISO 639-3</em>〉</span>.<p>
+<li><span class="numitem">24.</span><span class="meta">〈<em class="metainner">localeid</em>〉</span> is just <span class="meta">〈<em class="metainner">region</em>〉</span>.<p>
+<li><span class="numitem">25.</span><span class="meta">〈<em class="metainner">localeid</em>〉</span> is <span class="meta">〈<em class="metainner">ISO 639-1</em>〉</span><code class="code">-</code><span class="meta">〈<em class="metainner">sublang</em>〉</span><code class="code">-</code><span class="meta">〈<em class="metainner">variant</em>〉</span> or <span class="meta">〈<em class="metainner">ISO 639-1</em>〉</span><code class="code">-</code><span class="meta">〈<em class="metainner">variant</em>〉</span> if <span class="meta">〈<em class="metainner">sublang</em>〉</span> is missing.<p>
+<li><span class="numitem">26.</span><span class="meta">〈<em class="metainner">localeid</em>〉</span> is <span class="meta">〈<em class="metainner">ISO 639-2</em>〉</span><code class="code">-</code><span class="meta">〈<em class="metainner">sublang</em>〉</span><code class="code">-</code><span class="meta">〈<em class="metainner">variant</em>〉</span> or <span class="meta">〈<em class="metainner">ISO 639-2</em>〉</span><code class="code">-</code><span class="meta">〈<em class="metainner">variant</em>〉</span> if <span class="meta">〈<em class="metainner">sublang</em>〉</span> is missing.<p>
+<li><span class="numitem">27.</span><span class="meta">〈<em class="metainner">localeid</em>〉</span> is <span class="meta">〈<em class="metainner">ISO 639-3</em>〉</span><code class="code">-</code><span class="meta">〈<em class="metainner">sublang</em>〉</span><code class="code">-</code><span class="meta">〈<em class="metainner">variant</em>〉</span> or <span class="meta">〈<em class="metainner">ISO 639-3</em>〉</span><code class="code">-</code><span class="meta">〈<em class="metainner">variant</em>〉</span> if <span class="meta">〈<em class="metainner">sublang</em>〉</span> is missing.<p>
+<li><span class="numitem">28.</span><span class="meta">〈<em class="metainner">localeid</em>〉</span> is just the value of <a id="wrglossary.804"></a><a href="#glo:CurrentTrackedLanguage"><code class="csfmt">\CurrentTrackedLanguage</code></a> (the root language label).
+</ol>
+<p>
+For example (pre v1.3): <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.805"></a><a href="#glo:AnyTrackedLanguages"><code class="csfmt">\AnyTrackedLanguages</code></a>
+{<span class="comment">% </span>
+ <a id="wrglossary.806"></a><a href="#glo:ForEachTrackedDialect"><code class="csfmt">\ForEachTrackedDialect</code></a>{<code class="cmd">\ThisDialect</code>}<span class="comment">% </span>
+ {<span class="comment">% try to load the language file for this dialect</span>
+ <a id="wrglossary.807"></a><a href="#glo:IfTrackedLanguageFileExists"><code class="csfmt">\IfTrackedLanguageFileExists</code></a>{<code class="cmd">\ThisDialect</code>}<span class="comment">% </span>
+ {mypackage-}<span class="comment">% file prefix</span>
+ {.ldf}<span class="comment">% file suffix</span>
+ {<a id="wrglossary.808"></a><a href="#glo:input"><code class="csfmt">\input</code></a> mypackage-<a id="wrglossary.809"></a><a href="#glo:CurrentTrackedTag"><code class="csfmt">\CurrentTrackedTag</code></a>.ldf}<span class="comment">% file found</span>
+ {<span class="comment">% file not found</span>
+ <code class="cmd">\PackageWarning</code>{mypackage}{No support for language
+ `<code class="cmd">\ThisDialect</code>'}<span class="comment">% </span>
+ }<span class="comment">% </span>
+ }<span class="comment">% </span>
+}
+{<span class="comment">% no languages detected so use defaults</span>
+}
+</pre> With version 1.3 onwards, this can be written more concisely as: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.810"></a><a href="#glo:AnyTrackedLanguages"><code class="csfmt">\AnyTrackedLanguages</code></a>
+{<span class="comment">% </span>
+ <a id="wrglossary.811"></a><a href="#glo:ForEachTrackedDialect"><code class="csfmt">\ForEachTrackedDialect</code></a>{<code class="cmd">\ThisDialect</code>}<span class="comment">% </span>
+ {<span class="comment">% try to load the language file for this dialect</span>
+ <a id="wrglossary.812"></a><a href="#glo:TrackLangRequireDialect"><code class="csfmt">\TrackLangRequireDialect</code></a>{mypackage}{<code class="cmd">\ThisDialect</code>}<span class="comment">% </span>
+ }<span class="comment">% </span>
+}
+{<span class="comment">% no languages detected so use defaults</span>
+}
+</pre> which additionally enables the <a id="wrglossary.813"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> version 1.3 commands described below, such as <a id="wrglossary.814"></a><a href="#glo:TrackLangRequireResource"><code class="csfmt">\TrackLangRequireResource</code></a>.<p>
+<a id="pg.britishfilesearch"></a>If, for example, <code class="cmd">\ThisDialect</code> is <a id="wrglossary.815"></a><a href="#glo:opt.british"><span class="optfmt">british</span></a>, then the file search will be in the order:
+<ol class="displaylist">
+ <li><span class="numitem">1.</span><a id="wrglossary.816"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">mypackage-en-GB.ldf</span></a> (language tag) <li><span class="numitem">2.</span><a id="wrglossary.817"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">mypackage-british.ldf</span></a> (dialect label)<p>
+<li><span class="numitem">3.</span><a id="wrglossary.818"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">mypackage-en-Latn-GB.ldf</span></a> (<a id="wrglossary.819"></a><a href="#glo:idx.639-1"><span class="mbox">639-1</span></a> language code, <a id="wrglossary.820"></a><a href="#glo:idx.script">script</a>, <a id="wrglossary.821"></a><a href="#glo:idx.territory">region</a>) <li><span class="numitem">4.</span><a id="wrglossary.822"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">mypackage-en-GB.ldf</span></a> (<a id="wrglossary.823"></a><a href="#glo:idx.639-1"><span class="mbox">639-1</span></a> language code, <a id="wrglossary.824"></a><a href="#glo:idx.territory">region</a>) <li><span class="numitem">5.</span><a id="wrglossary.825"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">mypackage-en-Latn.ldf</span></a> (<a id="wrglossary.826"></a><a href="#glo:idx.639-1"><span class="mbox">639-1</span></a> language code, <a id="wrglossary.827"></a><a href="#glo:idx.script">script</a>) <li><span class="numitem">6.</span><a id="wrglossary.828"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">mypackage-en.ldf</span></a> (<a id="wrglossary.829"></a><a href="#glo:idx.639-1"><span class="mbox">639-1</span></a> language code)<p>
+<li><span class="numitem">7.</span><a id="wrglossary.830"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">mypackage-eng-Latn-GB.ldf</span></a> (<a id="wrglossary.831"></a><a href="#glo:idx.639-2"><span class="mbox">639-2</span></a> language code, <a id="wrglossary.832"></a><a href="#glo:idx.script">script</a>, <a id="wrglossary.833"></a><a href="#glo:idx.territory">region</a>) <li><span class="numitem">8.</span><a id="wrglossary.834"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">mypackage-eng-GB.ldf</span></a> (<a id="wrglossary.835"></a><a href="#glo:idx.639-2"><span class="mbox">639-2</span></a> language code, <a id="wrglossary.836"></a><a href="#glo:idx.territory">region</a>) <li><span class="numitem">9.</span><a id="wrglossary.837"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">mypackage-eng-Latn.ldf</span></a> (<a id="wrglossary.838"></a><a href="#glo:idx.639-2"><span class="mbox">639-2</span></a> language code, <a id="wrglossary.839"></a><a href="#glo:idx.script">script</a>) <li><span class="numitem">10.</span><a id="wrglossary.840"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">mypackage-eng.ldf</span></a> (<a id="wrglossary.841"></a><a href="#glo:idx.639-2"><span class="mbox">639-2</span></a> language code)<p>
+<li><span class="numitem">11.</span><a id="wrglossary.842"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">mypackage-GB.ldf</span></a> (<a id="wrglossary.843"></a><a href="#glo:idx.territory">region</a>) <li><span class="numitem">12.</span><a id="wrglossary.844"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">mypackage-english.ldf</span></a> (language label)
+</ol>
+<p>
+If, for example, <code class="cmd">\ThisDialect</code> is <a id="wrglossary.845"></a><a href="#glo:opt.naustrian"><span class="optfmt">naustrian</span></a>, then the file search will be in the order:
+<ol class="displaylist">
+ <li><span class="numitem">1.</span><a id="wrglossary.846"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">mypackage-de-AT-1996.ldf</span></a> (language tag) <li><span class="numitem">2.</span><a id="wrglossary.847"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">mypackage-naustrian.ldf</span></a> (dialect label)<p>
+<li><span class="numitem">3.</span><a id="wrglossary.848"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">mypackage-de-Latn-AT.ldf</span></a> (<a id="wrglossary.849"></a><a href="#glo:idx.639-1"><span class="mbox">639-1</span></a> language code, <a id="wrglossary.850"></a><a href="#glo:idx.script">script</a>, <a id="wrglossary.851"></a><a href="#glo:idx.territory">region</a>) <li><span class="numitem">4.</span><a id="wrglossary.852"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">mypackage-de-AT.ldf</span></a> (<a id="wrglossary.853"></a><a href="#glo:idx.639-1"><span class="mbox">639-1</span></a> language code, <a id="wrglossary.854"></a><a href="#glo:idx.territory">region</a>) <li><span class="numitem">5.</span><a id="wrglossary.855"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">mypackage-de-Latn.ldf</span></a> (<a id="wrglossary.856"></a><a href="#glo:idx.639-1"><span class="mbox">639-1</span></a> language code, <a id="wrglossary.857"></a><a href="#glo:idx.script">script</a>) <li><span class="numitem">6.</span><a id="wrglossary.858"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">mypackage-de.ldf</span></a> (<a id="wrglossary.859"></a><a href="#glo:idx.639-1"><span class="mbox">639-1</span></a> language code)<p>
+<li><span class="numitem">7.</span><a id="wrglossary.860"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">mypackage-deu-Latn-AT.ldf</span></a> (<a id="wrglossary.861"></a><a href="#glo:idx.639-2"><span class="mbox">639-2</span></a> language code, <a id="wrglossary.862"></a><a href="#glo:idx.script">script</a>, <a id="wrglossary.863"></a><a href="#glo:idx.territory">region</a>) <li><span class="numitem">8.</span><a id="wrglossary.864"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">mypackage-deu-AT.ldf</span></a> (<a id="wrglossary.865"></a><a href="#glo:idx.639-2"><span class="mbox">639-2</span></a> language code, <a id="wrglossary.866"></a><a href="#glo:idx.territory">region</a>) <li><span class="numitem">9.</span><a id="wrglossary.867"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">mypackage-deu-Latn.ldf</span></a> (<a id="wrglossary.868"></a><a href="#glo:idx.639-2"><span class="mbox">639-2</span></a> language code, <a id="wrglossary.869"></a><a href="#glo:idx.script">script</a>) <li><span class="numitem">10.</span><a id="wrglossary.870"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">mypackage-deu.ldf</span></a> (<a id="wrglossary.871"></a><a href="#glo:idx.639-2"><span class="mbox">639-2</span></a> language code)<p>
+<li><span class="numitem">11.</span><a id="wrglossary.872"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">mypackage-AT.ldf</span></a> (<a id="wrglossary.873"></a><a href="#glo:idx.territory">region</a>)<p>
+<li><span class="numitem">12.</span><a id="wrglossary.874"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">mypackage-de-1996.ldf</span></a> (<a id="wrglossary.875"></a><a href="#glo:idx.639-1"><span class="mbox">639-1</span></a> language code, <a id="wrglossary.876"></a><a href="#glo:idx.variant">variant</a>) <li><span class="numitem">13.</span><a id="wrglossary.877"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">mypackage-deu-1996.ldf</span></a> (<a id="wrglossary.878"></a><a href="#glo:idx.639-2"><span class="mbox">639-2</span></a> language code, <a id="wrglossary.879"></a><a href="#glo:idx.variant">variant</a>)<p>
+<li><span class="numitem">14.</span><a id="wrglossary.880"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">mypackage-german.ldf</span></a> (language label)
+</ol>
+<p>
+If, for example, <code class="cmd">\ThisDialect</code> is <a id="wrglossary.881"></a><a href="#glo:opt.francais"><span class="optfmt">francais</span></a>, then the file search will be in the order:
+<ol class="displaylist">
+ <li><span class="numitem">1.</span><a id="wrglossary.882"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">mypackage-fr.ldf</span></a> (language tag) <li><span class="numitem">2.</span><a id="wrglossary.883"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">mypackage-francais.ldf</span></a> (dialect label) <li><span class="numitem">3.</span><a id="wrglossary.884"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">mypackage-fr-Latn.ldf</span></a> (<a id="wrglossary.885"></a><a href="#glo:idx.639-1"><span class="mbox">639-1</span></a> language code, <a id="wrglossary.886"></a><a href="#glo:idx.script">script</a>) <li><span class="numitem">4.</span><a id="wrglossary.887"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">mypackage-fr.ldf</span></a> (<a id="wrglossary.888"></a><a href="#glo:idx.639-1"><span class="mbox">639-1</span></a> language code) <li><span class="numitem">5.</span><a id="wrglossary.889"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">mypackage-fra-Latn.ldf</span></a> (<a id="wrglossary.890"></a><a href="#glo:idx.639-2"><span class="mbox">639-2</span></a> language code, <a id="wrglossary.891"></a><a href="#glo:idx.script">script</a>) <li><span class="numitem">6.</span><a id="wrglossary.892"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">mypackage-fra.ldf</span></a> (<a id="wrglossary.893"></a><a href="#glo:idx.639-2"><span class="mbox">639-2</span></a> language code) <li><span class="numitem">7.</span><a id="wrglossary.894"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">mypackage-french.ldf</span></a> (language)
+</ol>
+ This is because the predefined <a id="wrglossary.895"></a><a href="#glo:opt.francais"><span class="optfmt">francais</span></a> option has no region assigned to it. Be careful if the dialect label is the actual root language. For example, if <code class="cmd">\ThisDialect</code> is <a id="wrglossary.896"></a><a href="#glo:opt.french"><span class="optfmt">french</span></a>, then the file search will be in the order:
+<ol class="displaylist">
+ <li><span class="numitem">1.</span><a id="wrglossary.897"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">mypackage-fr.ldf</span></a> (language tag) <li><span class="numitem">2.</span><a id="wrglossary.898"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">mypackage-french.ldf</span></a> (dialect label) <li><span class="numitem">3.</span><a id="wrglossary.899"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">mypackage-fr-Latn.ldf</span></a> (<a id="wrglossary.900"></a><a href="#glo:idx.639-1"><span class="mbox">639-1</span></a> language code, <a id="wrglossary.901"></a><a href="#glo:idx.script">script</a>) <li><span class="numitem">4.</span><a id="wrglossary.902"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">mypackage-fr.ldf</span></a> (<a id="wrglossary.903"></a><a href="#glo:idx.639-1"><span class="mbox">639-1</span></a> language code) <li><span class="numitem">5.</span><a id="wrglossary.904"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">mypackage-fra-Latn.ldf</span></a> (<a id="wrglossary.905"></a><a href="#glo:idx.639-2"><span class="mbox">639-2</span></a> language code, <a id="wrglossary.906"></a><a href="#glo:idx.script">script</a>) <li><span class="numitem">6.</span><a id="wrglossary.907"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">mypackage-fra.ldf</span></a> (<a id="wrglossary.908"></a><a href="#glo:idx.639-2"><span class="mbox">639-2</span></a> language code) <li><span class="numitem">7.</span><a id="wrglossary.909"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">mypackage-french.ldf</span></a> (language)
+</ol>
+ Note that the last try will always fail in this case since if the file exists, it will be found on the second try.<p>
+If the dialect label is identical to the root language label then it means that all associated information is the default for that language. For example, in the above case of <a id="wrglossary.910"></a><a href="#glo:opt.french"><span class="optfmt">french</span></a>, the script is <a id="wrglossary.911"></a><a href="#glo:opt.Latn"><span class="optfmt">Latn</span></a> and the region is unspecified. The root language label can therefore be used as the fallback in the event of no other match but for the specific case where the dialect is identical to the root language then all unnecessary file name checks can be skipped.<p>
+If you’re only providing support for the root languages (pre v1.3): <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.912"></a><a href="#glo:AnyTrackedLanguages"><code class="csfmt">\AnyTrackedLanguages</code></a>
+{<span class="comment">% </span>
+ <a id="wrglossary.913"></a><a href="#glo:ForEachTrackedLanguage"><code class="csfmt">\ForEachTrackedLanguage</code></a>{<code class="cmd">\ThisLanguage</code>}<span class="comment">% </span>
+ {<span class="comment">% try to load the language file for this root language</span>
+ <a id="wrglossary.914"></a><a href="#glo:IfTrackedLanguageFileExists"><code class="csfmt">\IfTrackedLanguageFileExists</code></a>{<code class="cmd">\ThisLanguage</code>}<span class="comment">% </span>
+ {mypackage-}<span class="comment">% file prefix</span>
+ {.ldf}<span class="comment">% file suffix</span>
+ {<a id="wrglossary.915"></a><a href="#glo:input"><code class="csfmt">\input</code></a> mypackage-<a id="wrglossary.916"></a><a href="#glo:CurrentTrackedTag"><code class="csfmt">\CurrentTrackedTag</code></a>.ldf}<span class="comment">% file found</span>
+ {<span class="comment">% file not found</span>
+ <code class="cmd">\PackageWarning</code>{mypackage}{No support for language
+ `<code class="cmd">\ThisLanguage</code>'}<span class="comment">% </span>
+ }<span class="comment">% </span>
+ }<span class="comment">% </span>
+}
+{<span class="comment">% no languages detected so use defaults</span>
+}
+</pre> With version 1.3 onwards, this can be written more concisely as: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.917"></a><a href="#glo:AnyTrackedLanguages"><code class="csfmt">\AnyTrackedLanguages</code></a>
+{<span class="comment">% </span>
+ <a id="wrglossary.918"></a><a href="#glo:ForEachTrackedLanguage"><code class="csfmt">\ForEachTrackedLanguage</code></a>{<code class="cmd">\ThisLanguage</code>}<span class="comment">% </span>
+ {<span class="comment">% try to load the language file for this root language</span>
+ <a id="wrglossary.919"></a><a href="#glo:TrackLangRequireDialect"><code class="csfmt">\TrackLangRequireDialect</code></a>{mypackage}{<code class="cmd">\ThisLanguage</code>}<span class="comment">% </span>
+ }<span class="comment">% </span>
+}
+{<span class="comment">% no languages detected so use defaults</span>
+}
+</pre> which additionally enables the commands described below. Note that in this case, if more than one dialect for the same language has been tracked, only the hooks for the last dialect for that language will be adjusted, so it’s usually best to iterate over the dialects.<p>
+The following <code class="cmd">\TrackLang…Resource…</code> commands may only be used in resource files that are loaded using <a id="wrglossary.920"></a><a href="#glo:TrackLangRequireDialect"><code class="csfmt">\TrackLangRequireDialect</code></a>. An error will occur if the file is input through some other method.<p>
+Within the resource file <a id="wrglossary.921"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt"></span><span class="meta">〈<em class="metainner">pkgname</em>〉</span><span class="filefmt">-</span><span class="meta">〈<em class="metainner">localeid</em>〉</span><span class="filefmt">.ldf</span></a>, you can identify the file using (new to version 1.3): <div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.922"></a><code class="code"><dfn id="glo:TrackLangProvidesResource"><code class="csfmt">\TrackLangProvidesResource</code></dfn>{<span class="meta">〈<em class="metainner">tag</em>〉</span>}{<span class="meta">〈<em class="metainner">version info</em>〉</span>}</code></div><!-- end of pinnedbox -->
+ where <span class="meta">〈<em class="metainner">tag</em>〉</span> is the locale identifier.<p>
+If <a id="wrglossary.923"></a><a href="#glo:ProvidesFile"><code class="csfmt">\ProvidesFile</code></a> is defined (through the LaTeX kernel) this is used, otherwise a simplified generic alternative is used that’s suitable for other TeX formats.<p>
+The resource file can load another resource file <a id="wrglossary.924"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt"></span><span class="meta">〈<em class="metainner">pkgname</em>〉</span><span class="filefmt">-</span><span class="meta">〈<em class="metainner">tag</em>〉</span><span class="filefmt">.ldf</span></a>, using (new to version 1.3): <div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.925"></a><code class="code"><dfn id="glo:TrackLangRequireResource"><code class="csfmt">\TrackLangRequireResource</code></dfn>{<span class="meta">〈<em class="metainner">tag</em>〉</span>}</code></div><!-- end of pinnedbox -->
+ For example, the dialect file <a id="wrglossary.926"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">foo-en-GB.ldf</span></a> might need to load the root language resource file <a id="wrglossary.927"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">foo-english.ldf</span></a>: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><span class="comment">% (In file <a id="wrglossary.928"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">foo-en-GB.ldf</span></a>)</span>
+<span class="comment">% Declare this regional file:</span>
+<a id="wrglossary.929"></a><a href="#glo:TrackLangProvidesResource"><code class="csfmt">\TrackLangProvidesResource</code></a>{en-GB}
+<span class="comment">% load root language file <a id="wrglossary.930"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">foo-english.ldf</span></a>:</span>
+<a id="wrglossary.931"></a><a href="#glo:TrackLangRequireResource"><code class="csfmt">\TrackLangRequireResource</code></a>{english}
+</pre> If <a id="wrglossary.932"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">foo-english.ldf</span></a> is also identified with <a id="wrglossary.933"></a><a href="#glo:TrackLangProvidesResource"><code class="csfmt">\TrackLangProvidesResource</code></a>, this will ensure that it’s only loaded once.<p>
+If you require the resource file and want to perform <span class="meta">〈<em class="metainner">code1</em>〉</span> if it’s loaded at this point or <span class="meta">〈<em class="metainner">code2</em>〉</span> if it’s already been loaded then you can use: <div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.934"></a><code class="code"><dfn id="glo:TrackLangRequireResourceOrDo"><code class="csfmt">\TrackLangRequireResourceOrDo</code></dfn>{<span class="meta">〈<em class="metainner">tag</em>〉</span>}{<span class="meta">〈<em class="metainner">code1</em>〉</span>}{<span class="meta">〈<em class="metainner">code2</em>〉</span>}</code></div><!-- end of pinnedbox -->
+<p>
+If you want to load a resource file if it exists (without an error if it doesn’t exist), then you can use <div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.935"></a><code class="code"><dfn id="glo:TrackLangRequestResource"><code class="csfmt">\TrackLangRequestResource</code></dfn>{<span class="meta">〈<em class="metainner">tag</em>〉</span>}{<span class="meta">〈<em class="metainner">not found code</em>〉</span>}</code></div><!-- end of pinnedbox -->
+ If the file doesn’t exist, <span class="meta">〈<em class="metainner">not found code</em>〉</span> is done.<p>
+<div class="important"><div class="importanttitle"><a href="#glo:sym.important"><span title="Important" class="icon">ℹ</span></a></div><!-- end of importanttitle -->
+Note that these <code class="cmd">\…Resource…</code> commands are only permitted within the resource files. They are internally enabled through <a id="wrglossary.936"></a><a href="#glo:TrackLangRequireDialect"><code class="csfmt">\TrackLangRequireDialect</code></a>. </div><!-- end of important -->
+<p>
+The above restriction on the resource files loaded through <a id="wrglossary.937"></a><a href="#glo:TrackLangRequireDialect"><code class="csfmt">\TrackLangRequireDialect</code></a>, and the fact that it internally uses <a id="wrglossary.938"></a><a href="#glo:IfTrackedLanguageFileExists"><code class="csfmt">\IfTrackedLanguageFileExists</code></a>, means that commands like <a id="wrglossary.939"></a><a href="#glo:CurrentTrackedLanguage"><code class="csfmt">\CurrentTrackedLanguage</code></a> or <a id="wrglossary.940"></a><a href="#glo:CurrentTrackedDialect"><code class="csfmt">\CurrentTrackedDialect</code></a> may be used in those files. This means that the name of the captions hook can be obtained through them. (Remember that the file <a id="wrglossary.941"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">foo-en-GB.ldf</span></a> might have been loaded with, say, the <a id="wrglossary.942"></a><a href="#glo:opt.british"><span class="optfmt">british</span></a> dialect or with the synonymous <a id="wrglossary.943"></a><a href="#glo:opt.UKenglish"><span class="optfmt">UKenglish</span></a> dialect or with a dialect label that doesn’t have a corresponding caption hook, such as <span class="optfmt">enGBLatn</span>.)<p>
+The <a id="wrglossary.944"></a><a href="#glo:pkg.polyglossia"><span class="styfmt">polyglossia</span></a> package has language caption hooks in the form <a id="wrglossary.945"></a><a href="#glo:captionsdialect"><code class="csfmt">\captions<span class="meta">〈<em class="metainner">language</em>〉</span></code></a> (where <span class="meta">〈<em class="metainner">language</em>〉</span> is the root language label) whereas <a id="wrglossary.946"></a><a href="#glo:pkg.babel"><span class="styfmt">babel</span></a> has dialect captions hooks in the form <a id="wrglossary.947"></a><a href="#glo:captionsdialect"><code class="csfmt">\captions<span class="meta">〈<em class="metainner">dialect</em>〉</span></code></a> (where <span class="meta">〈<em class="metainner">dialect</em>〉</span> is the dialect label). This leads to a rather cumbersome set of conditionals: <pre class="compactcodebox"><code class="cmd">\ifcsundef</code>{captions<a id="wrglossary.948"></a><a href="#glo:CurrentTrackedLanguage"><code class="csfmt">\CurrentTrackedLanguage</code></a>}
+{<span class="comment">% </span>
+ <code class="cmd">\ifcsundef</code>{captions<a id="wrglossary.949"></a><a href="#glo:CurrentTrackedDialect"><code class="csfmt">\CurrentTrackedDialect</code></a>}<span class="comment">% </span>
+ {}<span class="comment">% </span>
+ {<span class="comment">% </span>
+ <code class="cmd">\csgappto</code>{captions<a id="wrglossary.950"></a><a href="#glo:CurrentTrackedDialect"><code class="csfmt">\CurrentTrackedDialect</code></a>}{<span class="comment">% </span>
+ <span class="comment">% code to append to hook</span>
+ }<span class="comment">% </span>
+ }<span class="comment">% </span>
+}<span class="comment">% </span>
+{<span class="comment">% </span>
+ <code class="cmd">\csgappto</code>{captions<a id="wrglossary.951"></a><a href="#glo:CurrentTrackedLanguage"><code class="csfmt">\CurrentTrackedLanguage</code></a>}{<span class="comment">% </span>
+ <span class="comment">% code to append to hook</span>
+ }<span class="comment">% </span>
+}
+<span class="comment">% do code now to initialise</span>
+</pre> Note that the above has been simplified through the use of <a id="wrglossary.952"></a><a href="#glo:pkg.etoolbox"><span class="styfmt">etoolbox</span></a> commands, which isn’t suitable for generic use. It also doesn’t query the mapping from <a id="wrglossary.953"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span>’s</a> dialect label to the closest matching <a id="wrglossary.954"></a><a href="#glo:pkg.babel"><span class="styfmt">babel</span></a> dialect label.<p>
+Instead, <a id="wrglossary.955"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> provides a command to perform this set of conditionals using generic code: <div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.956"></a><code class="code"><dfn id="glo:TrackLangAddToHook"><code class="csfmt">\TrackLangAddToHook</code></dfn>{<span class="meta">〈<em class="metainner">code</em>〉</span>}{<span class="meta">〈<em class="metainner">type</em>〉</span>}</code></div><!-- end of pinnedbox -->
+ where <span class="meta">〈<em class="metainner">code</em>〉</span> is the code to append to the <span class="meta">〈<em class="metainner">type</em>〉</span> hook. This always performs <span class="meta">〈<em class="metainner">code</em>〉</span> after testing for the hook in case the hook is undefined or has already been called (for example, <a id="wrglossary.957"></a><a href="#glo:pkg.ngerman"><span class="styfmt">ngerman</span></a> uses <a id="wrglossary.958"></a><a href="#glo:captionsdialect"><code class="csfmt">\captionsngerman</code></a> when the package is loaded, not at the start of the document).<p>
+Note that this command is enabled through <a id="wrglossary.959"></a><a href="#glo:TrackLangRequireDialect"><code class="csfmt">\TrackLangRequireDialect</code></a> so should only be used inside resource files.<p>
+Since <span class="optfmt">captions</span> is a commonly used hook type, there’s a shortcut command provided: <div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.960"></a><code class="code"><dfn id="glo:TrackLangAddToCaptions"><code class="csfmt">\TrackLangAddToCaptions</code></dfn>{<span class="meta">〈<em class="metainner">code</em>〉</span>}</code></div><!-- end of pinnedbox -->
+ This is equivalent to <pre class="compactcodebox"><a id="wrglossary.961"></a><a href="#glo:TrackLangAddToHook"><code class="csfmt">\TrackLangAddToHook</code></a>{<span class="meta">〈<em class="metainner">code</em>〉</span>}{captions}
+</pre><p>
+There may be some hooks, such as <a id="wrglossary.962"></a><a href="#glo:datedialect"><code class="csfmt">\date<span class="meta">〈<em class="metainner">dialect</em>〉</span></code></a>, that need redefining rather than appending to, so there’s an analogous command: <div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.963"></a><code class="code"><dfn id="glo:TrackLangRedefHook"><code class="csfmt">\TrackLangRedefHook</code></dfn>{<span class="meta">〈<em class="metainner">code</em>〉</span>}{<span class="meta">〈<em class="metainner">type</em>〉</span>}</code></div><!-- end of pinnedbox -->
+ which will redefined the hook to do <span class="meta">〈<em class="metainner">code</em>〉</span>.<p>
+Note that no expansion is performed on <span class="meta">〈<em class="metainner">code</em>〉</span> when appending or redefining a hook.<p>
+
+</section><!-- end of section sec:user -->
+
+<section id="sec:examples"><!-- start of section sec:examples --><div class="tomain"><a href="#main">[top]</a></div>
+<h2><!-- start of section header -->5.1. Examples<div class="labellink"><a href="#sec:examples">[link]</a></div></h2><!-- end of section header -->
+<p>
+The examples in this section illustrate the above commands.<p>
+
+</section><!-- end of section sec:examples -->
+
+<section id="sec:animals"><!-- start of section sec:animals --><div class="tomain"><a href="#main">[top]</a></div>
+<h3><!-- start of subsection header -->5.1.1. <span class="filefmt">animals.sty</span><div class="labellink"><a href="#sec:animals">[link]</a></div></h3><!-- end of subsection header -->
+<p>
+This example is for a trivial package called <a id="wrglossary.964"></a><a href="#glo:file.animals.sty"><span class="filefmt">animals.sty</span></a> that defines three textual commands: <code class="cmd">\catname</code>, <code class="cmd">\dogname</code> and <code class="cmd">\ladybirdname</code>. The default values are: <span class="qt">“catâ€</span>, <span class="qt">“dogâ€</span> and <span class="qt">“bishy-barney-beeâ€</span>.<sup><a id="fnback-footnote.1"></a><a href="#footnote.1">1</a></sup> The supported languages are defined in files <a id="wrglossary.965"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">animals-</span><span class="meta">〈<em class="metainner">localeid</em>〉</span><span class="filefmt">.ldf</span></a>.<p>
+Here’s the code for <a id="wrglossary.966"></a><a href="#glo:file.animals.sty"><span class="filefmt">animals.sty</span></a>: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><span class="comment">% Example package animals.sty</span>
+<code class="cmd">\NeedsTeXFormat</code>{LaTeX2e}
+<code class="cmd">\ProvidesPackage</code>{animals}
+
+<code class="cmd">\RequirePackage</code>{tracklang}[2019/11/30]<span class="comment">% v1.4</span>
+
+<span class="comment">% Any undeclared options are language settings:</span>
+
+<code class="cmd">\DeclareOption</code>*{<span class="comment">% </span>
+ <a id="wrglossary.967"></a><a href="#glo:TrackIfKnownLanguage"><code class="csfmt">\TrackIfKnownLanguage</code></a>{<code class="cmd">\CurrentOption</code>}<span class="comment">% </span>
+ {<span class="comment">% successful</span>
+ <code class="cmd">\PackageInfo</code>{animals}{Tracking language `<code class="cmd">\CurrentOption</code>'}<span class="comment">% </span>
+ }<span class="comment">% </span>
+ {<span class="comment">% failed</span>
+ <code class="cmd">\PackageError</code>{animals}<span class="comment">% </span>
+ {Unknown language specification `<code class="cmd">\CurrentOption</code>'}<span class="comment">% </span>
+ {You need to supply either a known dialect label
+ or a valid language tag}<span class="comment">% </span>
+ }<span class="comment">% </span>
+}
+
+<code class="cmd">\ProcessOptions</code>
+
+<span class="comment">% Default definitions</span>
+<code class="cmd">\newcommand</code><code class="cmd">\catname</code>{cat}
+<code class="cmd">\newcommand</code><code class="cmd">\dogname</code>{dog}
+<code class="cmd">\newcommand</code><code class="cmd">\ladybirdname</code>{bishy-barney-bee}
+
+<a id="wrglossary.968"></a><a href="#glo:AnyTrackedLanguages"><code class="csfmt">\AnyTrackedLanguages</code></a>
+{<span class="comment">% </span>
+ <a id="wrglossary.969"></a><a href="#glo:ForEachTrackedDialect"><code class="csfmt">\ForEachTrackedDialect</code></a>{<code class="cmd">\this@dialect</code>}{<span class="comment">% </span>
+ <a id="wrglossary.970"></a><a href="#glo:TrackLangRequireDialect"><code class="csfmt">\TrackLangRequireDialect</code></a>{animals}{<code class="cmd">\this@dialect</code>}<span class="comment">% </span>
+ }<span class="comment">% </span>
+}
+{<span class="comment">% no tracked languages, default already set up</span>
+}
+
+<code class="cmd">\endinput</code>
+</pre> Here’s a Plain TeX version that picks up the language from the locale environment variable: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.971"></a><a href="#glo:input"><code class="csfmt">\input</code></a> tracklang
+
+<a id="wrglossary.972"></a><a href="#glo:TrackLangFromEnv"><code class="csfmt">\TrackLangFromEnv</code></a>
+
+<span class="comment">% Default definitions</span>
+<code class="cmd">\def</code><code class="cmd">\catname</code>{cat}
+<code class="cmd">\def</code><code class="cmd">\dogname</code>{dog}
+<code class="cmd">\def</code><code class="cmd">\ladybirdname</code>{bishy-barney-bee}
+
+<a id="wrglossary.973"></a><a href="#glo:AnyTrackedLanguages"><code class="csfmt">\AnyTrackedLanguages</code></a>
+{<span class="comment">% </span>
+ <a id="wrglossary.974"></a><a href="#glo:ForEachTrackedDialect"><code class="csfmt">\ForEachTrackedDialect</code></a>{<code class="cmd">\thisdialect</code>}{<span class="comment">% </span>
+ <a id="wrglossary.975"></a><a href="#glo:TrackLangRequireDialect"><code class="csfmt">\TrackLangRequireDialect</code></a>{animals}{<code class="cmd">\thisdialect</code>}<span class="comment">% </span>
+ }<span class="comment">% </span>
+}
+{<span class="comment">% no tracked languages, default already set up</span>
+}
+</pre> In the event that a user or supplementary package for some reason wants to load a resource file for a language that hasn’t been tracked, it might be worth providing a command for this purpose: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><code class="cmd">\newcommand</code>*{<code class="cmd">\RequireAnimalsDialect</code>}[1]{<span class="comment">% </span>
+ <a id="wrglossary.976"></a><a href="#glo:TrackLangRequireDialect"><code class="csfmt">\TrackLangRequireDialect</code></a>{animals}{#1}<span class="comment">% </span>
+}
+</pre> The loop can then be changed to: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.977"></a><a href="#glo:ForEachTrackedDialect"><code class="csfmt">\ForEachTrackedDialect</code></a>{<code class="cmd">\this@dialect</code>}{<span class="comment">% </span>
+ <code class="cmd">\RequireAnimalsDialect</code><code class="cmd">\this@dialect</code>
+}<span class="comment">% </span>
+</pre><p>
+The <a id="wrglossary.978"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">animals-english.ldf</span></a> file valid for both the Plain TeX and LaTeX formats contains: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.979"></a><a href="#glo:TrackLangProvidesResource"><code class="csfmt">\TrackLangProvidesResource</code></a>{english}
+
+<code class="cmd">\def</code><code class="cmd">\englishanimals</code>{<span class="comment">% </span>
+ <code class="cmd">\def</code><code class="cmd">\catname</code>{cat}<span class="comment">% </span>
+ <code class="cmd">\def</code><code class="cmd">\dogname</code>{dog}<span class="comment">% </span>
+ <code class="cmd">\def</code><code class="cmd">\ladybirdname</code>{bishy-barney-bee}<span class="comment">% </span>
+}
+
+<a id="wrglossary.980"></a><a href="#glo:TrackLangAddToCaptions"><code class="csfmt">\TrackLangAddToCaptions</code></a>{<code class="cmd">\englishanimals</code>}
+</pre> The <a id="wrglossary.981"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">animals-en-GB.ldf</span></a> file contains: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.982"></a><a href="#glo:TrackLangProvidesResource"><code class="csfmt">\TrackLangProvidesResource</code></a>{en-GB}
+<a id="wrglossary.983"></a><a href="#glo:TrackLangRequireResource"><code class="csfmt">\TrackLangRequireResource</code></a>{english}
+
+<code class="cmd">\def</code><code class="cmd">\enGBanimals</code>{<span class="comment">% </span>
+ <code class="cmd">\englishanimals</code>
+ <code class="cmd">\def</code><code class="cmd">\ladybirdname</code>{ladybird}<span class="comment">% </span>
+}
+<a id="wrglossary.984"></a><a href="#glo:TrackLangAddToCaptions"><code class="csfmt">\TrackLangAddToCaptions</code></a>{<code class="cmd">\enGBanimals</code>}
+</pre> The <a id="wrglossary.985"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">animals-en-US.ldf</span></a> file contains: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.986"></a><a href="#glo:TrackLangProvidesResource"><code class="csfmt">\TrackLangProvidesResource</code></a>{en-US}
+<a id="wrglossary.987"></a><a href="#glo:TrackLangRequireResource"><code class="csfmt">\TrackLangRequireResource</code></a>{english}
+
+<code class="cmd">\def</code><code class="cmd">\enUSanimals</code>{<span class="comment">% </span>
+ <code class="cmd">\englishanimals</code>
+ <code class="cmd">\def</code><code class="cmd">\ladybirdname</code>{ladybug}<span class="comment">% </span>
+}
+<a id="wrglossary.988"></a><a href="#glo:TrackLangAddToCaptions"><code class="csfmt">\TrackLangAddToCaptions</code></a>{<code class="cmd">\enUSanimals</code>}
+</pre> Here’s a German version in the file <a id="wrglossary.989"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">animals-german.ldf</span></a>: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.990"></a><a href="#glo:TrackLangProvidesResource"><code class="csfmt">\TrackLangProvidesResource</code></a>{german}
+
+<code class="cmd">\def</code><code class="cmd">\germananimals</code>{<span class="comment">% </span>
+ <code class="cmd">\def</code><code class="cmd">\catname</code>{Katze}<span class="comment">% </span>
+ <code class="cmd">\def</code><code class="cmd">\dogname</code>{Hund}<span class="comment">% </span>
+ <code class="cmd">\def</code><code class="cmd">\ladybirdname</code>{Marienk<code class="cmd">\"</code>afer}<span class="comment">% </span>
+}
+
+<a id="wrglossary.991"></a><a href="#glo:TrackLangAddToCaptions"><code class="csfmt">\TrackLangAddToCaptions</code></a>{<code class="cmd">\germananimals</code>}
+</pre><p>
+This means that if <a id="wrglossary.992"></a><a href="#glo:pkg.babel"><span class="styfmt">babel</span></a> or <a id="wrglossary.993"></a><a href="#glo:pkg.polyglossia"><span class="styfmt">polyglossia</span></a> are loaded, the redefinitions are automatically performed whenever the language is changed, but if there’s no caption mechanism the user can switch the fixed names using the <code class="cmd">\…animals</code> commands.<p>
+Here’s an example LaTeX document that doesn’t have any caption hooks: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><code class="cmd">\documentclass</code>[<a id="wrglossary.994"></a><a href="#glo:opt.english"><span class="optfmt">english</span></a>,<a id="wrglossary.995"></a><a href="#glo:opt.german"><span class="optfmt">german</span></a>]{article}
+
+<code class="cmd">\usepackage</code>{animals}
+
+<code class="cbeg">\begin{document}</code>
+<code class="cmd">\englishanimals</code>
+
+<code class="cmd">\catname</code>.
+<code class="cmd">\dogname</code>.
+<code class="cmd">\ladybirdname</code>.
+
+<code class="cmd">\germananimals</code>
+
+<code class="cmd">\catname</code>.
+<code class="cmd">\dogname</code>.
+<code class="cmd">\ladybirdname</code>.
+<code class="cend">\end{document}</code>
+</pre> Here’s a <a id="wrglossary.996"></a><a href="#glo:pkg.babel"><span class="styfmt">babel</span></a> example document: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><code class="cmd">\documentclass</code>[<a id="wrglossary.997"></a><a href="#glo:opt.american"><span class="optfmt">american</span></a>,<a id="wrglossary.998"></a><a href="#glo:opt.german"><span class="optfmt">german</span></a>,<a id="wrglossary.999"></a><a href="#glo:opt.british"><span class="optfmt">british</span></a>]{article}
+
+<code class="cmd">\usepackage</code>{babel}
+<code class="cmd">\usepackage</code>{animals}
+
+<code class="cbeg">\begin{document}</code>
+<code class="cmd">\selectlanguage</code>{american}
+
+<code class="cmd">\catname</code>.
+<code class="cmd">\dogname</code>.
+<code class="cmd">\ladybirdname</code>.
+
+<code class="cmd">\selectlanguage</code>{german}
+
+<code class="cmd">\catname</code>.
+<code class="cmd">\dogname</code>.
+<code class="cmd">\ladybirdname</code>.
+
+<code class="cmd">\selectlanguage</code>{british}
+
+<code class="cmd">\catname</code>.
+<code class="cmd">\dogname</code>.
+<code class="cmd">\ladybirdname</code>.
+<code class="cend">\end{document}</code>
+</pre><p>
+There is some redundancy with the above resource files. Consider the <a id="wrglossary.1000"></a><a href="#glo:pkg.babel"><span class="styfmt">babel</span></a> example above. The <a id="wrglossary.1001"></a><a href="#glo:opt.american"><span class="optfmt">american</span></a> dialect is the first option, so in that case <a id="wrglossary.1002"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">animals-en-US.ldf</span></a> is loaded followed by <a id="wrglossary.1003"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">animals-english.ldf</span></a>. This means that the <a id="wrglossary.1004"></a><a href="#glo:captionsdialect"><code class="csfmt">\captionsamerican</code></a> hook now includes <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><code class="cmd">\englishanimals</code>
+<code class="cmd">\enUSanimals</code>
+</pre> Since <code class="cmd">\enUSanimals</code> includes <code class="cmd">\englishanimals</code>, there is redundant code. However, when the <a id="wrglossary.1005"></a><a href="#glo:opt.british"><span class="optfmt">british</span></a> dialect is processed, this loads the file <a id="wrglossary.1006"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">animals-en-GB.ldf</span></a> but not the file <a id="wrglossary.1007"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">animals-english.ldf</span></a> (since it’s already been loaded). This means that <a id="wrglossary.1008"></a><a href="#glo:captionsdialect"><code class="csfmt">\captionsbritish</code></a> contains <code class="cmd">\enGBanimals</code> but not <code class="cmd">\englishanimals</code>.<p>
+If this redundancy is an issue (for example, there are so many redefinitions needed that it significantly slows the document build process), then it can be addressed with the following modifications. The <a id="wrglossary.1009"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">animals-en-GB.ldf</span></a> file is now: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.1010"></a><a href="#glo:TrackLangProvidesResource"><code class="csfmt">\TrackLangProvidesResource</code></a>{en-GB}
+
+<code class="cmd">\def</code><code class="cmd">\enGBanimals</code>{<span class="comment">% </span>
+ <code class="cmd">\englishanimals</code>
+ <code class="cmd">\def</code><code class="cmd">\ladybirdname</code>{ladybird}<span class="comment">% </span>
+}
+
+<a id="wrglossary.1011"></a><a href="#glo:TrackLangRequireResourceOrDo"><code class="csfmt">\TrackLangRequireResourceOrDo</code></a>{english}<span class="comment">% </span>
+{
+ <a id="wrglossary.1012"></a><a href="#glo:TrackLangAddToCaptions"><code class="csfmt">\TrackLangAddToCaptions</code></a>{<span class="comment">% </span>
+ <code class="cmd">\def</code><code class="cmd">\ladybirdname</code>{ladybird}<span class="comment">% </span>
+ }<span class="comment">% </span>
+}
+{
+ <a id="wrglossary.1013"></a><a href="#glo:TrackLangAddToCaptions"><code class="csfmt">\TrackLangAddToCaptions</code></a>{<code class="cmd">\enGBanimals</code>}
+}
+</pre> The <a id="wrglossary.1014"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">animals-en-US.ldf</span></a> file is now: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.1015"></a><a href="#glo:TrackLangProvidesResource"><code class="csfmt">\TrackLangProvidesResource</code></a>{en-US}
+
+<code class="cmd">\providecommand</code>*{<code class="cmd">\enUSanimals</code>}{<span class="comment">% </span>
+ <code class="cmd">\englishanimals</code>
+ <code class="cmd">\renewcommand</code>*{<code class="cmd">\ladybirdname</code>}{ladybug}<span class="comment">% </span>
+}
+
+<a id="wrglossary.1016"></a><a href="#glo:TrackLangRequireResourceOrDo"><code class="csfmt">\TrackLangRequireResourceOrDo</code></a>{english}
+{
+ <a id="wrglossary.1017"></a><a href="#glo:TrackLangAddToCaptions"><code class="csfmt">\TrackLangAddToCaptions</code></a>{<span class="comment">% </span>
+ <code class="cmd">\renewcommand</code>*{<code class="cmd">\ladybirdname</code>}{ladybird}<span class="comment">% </span>
+ }<span class="comment">% </span>
+}
+{
+ <a id="wrglossary.1018"></a><a href="#glo:TrackLangAddToCaptions"><code class="csfmt">\TrackLangAddToCaptions</code></a>{<code class="cmd">\enUSanimals</code>}
+}
+</pre> This means that the document that has the dialects listed in the order <a id="wrglossary.1019"></a><a href="#glo:opt.american"><span class="optfmt">american</span></a>, <a id="wrglossary.1020"></a><a href="#glo:opt.british"><span class="optfmt">british</span></a> now has <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><code class="cmd">\englishanimals</code>
+<code class="cmd">\def</code><code class="cmd">\ladybirdname</code>{ladybird}
+</pre> in the <a id="wrglossary.1021"></a><a href="#glo:captionsdialect"><code class="csfmt">\captionsbritish</code></a> hook and just <code class="cmd">\enUSanimals</code> in the <a id="wrglossary.1022"></a><a href="#glo:captionsdialect"><code class="csfmt">\captionsamerican</code></a> hook, which has removed most of the redundancy.<p>
+Note that <a id="wrglossary.1023"></a><a href="#glo:pkg.polyglossia"><span class="styfmt">polyglossia</span></a> has a <a id="wrglossary.1024"></a><a href="#glo:captionsdialect"><code class="csfmt">\captionsenglish</code></a> hook but not <a id="wrglossary.1025"></a><a href="#glo:captionsdialect"><code class="csfmt">\captionsamerican</code></a> or <a id="wrglossary.1026"></a><a href="#glo:captionsdialect"><code class="csfmt">\captionsbritish</code></a>, so this code doesn’t allow for switching between variants of the same language with <a id="wrglossary.1027"></a><a href="#glo:pkg.polyglossia"><span class="styfmt">polyglossia</span></a>.<p>
+
+</section><!-- end of section sec:animals -->
+
+<section id="sec:regions"><!-- start of section sec:regions --><div class="tomain"><a href="#main">[top]</a></div>
+<h3><!-- start of subsection header -->5.1.2. <span class="filefmt">regions.sty</span><div class="labellink"><a href="#sec:regions">[link]</a></div></h3><!-- end of subsection header -->
+<p>
+<a id="wrglossary.1028"></a><a href="#pg.britishfilesearch">Earlier</a>, I mentioned the search order for <a id="wrglossary.1029"></a><a href="#glo:IfTrackedLanguageFileExists"><code class="csfmt">\IfTrackedLanguageFileExists</code></a> where if, for example, the dialect is <a id="wrglossary.1030"></a><a href="#glo:opt.british"><span class="optfmt">british</span></a>, the file search (v1.4+) will be:
+<ol class="displaylist">
+ <li><span class="numitem">1.</span><a id="wrglossary.1031"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">mypackage-en-GB.ldf</span></a> (language tag) <li><span class="numitem">2.</span><a id="wrglossary.1032"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">mypackage-british.ldf</span></a> (dialect label)<p>
+<li><span class="numitem">3.</span><a id="wrglossary.1033"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">mypackage-en-Latn-GB.ldf</span></a> (<a id="wrglossary.1034"></a><a href="#glo:idx.639-1"><span class="mbox">639-1</span></a> language code, <a id="wrglossary.1035"></a><a href="#glo:idx.script">script</a>, <a id="wrglossary.1036"></a><a href="#glo:idx.territory">region</a>) <li><span class="numitem">4.</span><a id="wrglossary.1037"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">mypackage-en-GB.ldf</span></a> (<a id="wrglossary.1038"></a><a href="#glo:idx.639-1"><span class="mbox">639-1</span></a> language code, <a id="wrglossary.1039"></a><a href="#glo:idx.territory">region</a>) <li><span class="numitem">5.</span><a id="wrglossary.1040"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">mypackage-en-Latn.ldf</span></a> (<a id="wrglossary.1041"></a><a href="#glo:idx.639-1"><span class="mbox">639-1</span></a> language code, <a id="wrglossary.1042"></a><a href="#glo:idx.script">script</a>) <li><span class="numitem">6.</span><a id="wrglossary.1043"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">mypackage-en.ldf</span></a> (<a id="wrglossary.1044"></a><a href="#glo:idx.639-1"><span class="mbox">639-1</span></a> language code)<p>
+<li><span class="numitem">7.</span><a id="wrglossary.1045"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">mypackage-eng-Latn-GB.ldf</span></a> (<a id="wrglossary.1046"></a><a href="#glo:idx.639-2"><span class="mbox">639-2</span></a> language code, <a id="wrglossary.1047"></a><a href="#glo:idx.script">script</a>, <a id="wrglossary.1048"></a><a href="#glo:idx.territory">region</a>) <li><span class="numitem">8.</span><a id="wrglossary.1049"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">mypackage-eng-GB.ldf</span></a> (<a id="wrglossary.1050"></a><a href="#glo:idx.639-2"><span class="mbox">639-2</span></a> language code, <a id="wrglossary.1051"></a><a href="#glo:idx.territory">region</a>) <li><span class="numitem">9.</span><a id="wrglossary.1052"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">mypackage-eng-Latn.ldf</span></a> (<a id="wrglossary.1053"></a><a href="#glo:idx.639-2"><span class="mbox">639-2</span></a> language code, <a id="wrglossary.1054"></a><a href="#glo:idx.script">script</a>) <li><span class="numitem">10.</span><a id="wrglossary.1055"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">mypackage-eng.ldf</span></a> (<a id="wrglossary.1056"></a><a href="#glo:idx.639-2"><span class="mbox">639-2</span></a> language code)<p>
+<li><span class="numitem">11.</span><a id="wrglossary.1057"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">mypackage-GB.ldf</span></a> (<a id="wrglossary.1058"></a><a href="#glo:idx.territory">region</a>) <li><span class="numitem">12.</span><a id="wrglossary.1059"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">mypackage-english.ldf</span></a> (language label)
+</ol>
+ You may have wondered why <a id="wrglossary.1060"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">mypackage-GB.ldf</span></a> is included in the search given that some countries have multiple official languages, which means that the country code on its own may not indicate the language.<p>
+The reason for including just the country code as the <span class="meta">〈<em class="metainner">localeid</em>〉</span> in the file search is to allow for region rather than language dependent settings. For example, suppose I want to write a package that needs to know whether to use imperial or metric measurements in the document, but I also want to provide multilingual support. The language alone won’t tell me whether to use imperial or metric (for example, the US uses imperial and the UK uses metric for most product attributes). I could provide <a id="wrglossary.1061"></a><a href="#glo:ext.ldf"><span class="extfmt">ldf</span></a> files for every language and region combination, but this would result in a lot redundancy.<p>
+<a id="wrglossary.1062"></a><a href="#glo:TrackLangRequireDialect"><code class="csfmt">\TrackLangRequireDialect</code></a> has an optional argument for adjusting the way the resource files are loaded. Suppose I have <a id="wrglossary.1063"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">regions-</span><span class="meta">〈<em class="metainner">localeid</em>〉</span><span class="filefmt">.ldf</span></a> resource files, then <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.1064"></a><a href="#glo:TrackLangRequireDialect"><code class="csfmt">\TrackLangRequireDialect</code></a>{regions}{<code class="cmd">\this@dialect</code>}
+</pre> loads the resource file for the dialect given by <code class="cmd">\this@dialect</code> using: <pre class="compactcodebox"><a id="wrglossary.1065"></a><a href="#glo:TrackLangRequireResource"><code class="csfmt">\TrackLangRequireResource</code></a>{<a id="wrglossary.1066"></a><a href="#glo:CurrentTrackedTag"><code class="csfmt">\CurrentTrackedTag</code></a>}
+</pre> I can use the optional argument to also load the resource file for the root language as well: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><span class="comment">% custom file loader for regions.sty</span>
+<code class="cmd">\newcommand</code>*{<code class="cmd">\RequireRegionsDialect</code>}[1]{<span class="comment">% </span>
+ <a id="wrglossary.1067"></a><a href="#glo:TrackLangRequireDialect"><code class="csfmt">\TrackLangRequireDialect</code></a>
+ [<a id="wrglossary.1068"></a><a href="#glo:TrackLangRequireResource"><code class="csfmt">\TrackLangRequireResource</code></a>{<a id="wrglossary.1069"></a><a href="#glo:CurrentTrackedTag"><code class="csfmt">\CurrentTrackedTag</code></a>}<span class="comment">% </span>
+ <a id="wrglossary.1070"></a><a href="#glo:TrackLangRequireResource"><code class="csfmt">\TrackLangRequireResource</code></a>{<a id="wrglossary.1071"></a><a href="#glo:CurrentTrackedLanguage"><code class="csfmt">\CurrentTrackedLanguage</code></a>}<span class="comment">% </span>
+ ]<span class="comment">% </span>
+ {regions}{#1}<span class="comment">% </span>
+}
+</pre> Now the dialect <a id="wrglossary.1072"></a><a href="#glo:opt.british"><span class="optfmt">british</span></a> can load both <a id="wrglossary.1073"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">regions-GB.ldf</span></a> and <a id="wrglossary.1074"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">regions-english.ldf</span></a>.<p>
+The example package (<a id="wrglossary.1075"></a><a href="#glo:file.regions.sty"><span class="filefmt">regions.sty</span></a>) below illustrates this. <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><span class="comment">% Example package regions.sty</span>
+<code class="cmd">\NeedsTeXFormat</code>{LaTeX2e}
+<code class="cmd">\ProvidesPackage</code>{regions}
+
+<a id="wrglossary.1076"></a><a href="#glo:RequirePackage"><code class="csfmt">\RequirePackage</code></a>{tracklang}[2016/10/07]<span class="comment">% v1.3+</span>
+
+<code class="cmd">\DeclareOption</code>*{<a id="wrglossary.1077"></a><a href="#glo:TrackLanguageTag"><code class="csfmt">\TrackLanguageTag</code></a>{<code class="cmd">\CurrentOption</code>}}
+<code class="cmd">\ProcessOptions</code>
+
+<code class="cmd">\newcommand</code>*{<code class="cmd">\weightunit</code>}{kg}
+<code class="cmd">\newcommand</code>*{<code class="cmd">\lengthunit</code>}{mm}
+<code class="cmd">\newcommand</code>*{<code class="cmd">\currencyunit</code>}{EUR}
+
+<code class="cmd">\newcommand</code>*{<code class="cmd">\unitname</code>}{units}
+
+<code class="cmd">\newcommand</code>*{<code class="cmd">\RequireRegionsDialect</code>}[1]{<span class="comment">% </span>
+ <a id="wrglossary.1078"></a><a href="#glo:TrackLangRequireDialect"><code class="csfmt">\TrackLangRequireDialect</code></a>
+ [<a id="wrglossary.1079"></a><a href="#glo:TrackLangRequireResource"><code class="csfmt">\TrackLangRequireResource</code></a>{<a id="wrglossary.1080"></a><a href="#glo:CurrentTrackedTag"><code class="csfmt">\CurrentTrackedTag</code></a>}<span class="comment">% </span>
+ <a id="wrglossary.1081"></a><a href="#glo:TrackLangRequireResource"><code class="csfmt">\TrackLangRequireResource</code></a>{<a id="wrglossary.1082"></a><a href="#glo:CurrentTrackedLanguage"><code class="csfmt">\CurrentTrackedLanguage</code></a>}<span class="comment">% </span>
+ ]<span class="comment">% </span>
+ {regions}{#1}<span class="comment">% </span>
+}
+
+<a id="wrglossary.1083"></a><a href="#glo:AnyTrackedLanguages"><code class="csfmt">\AnyTrackedLanguages</code></a>
+{<span class="comment">% </span>
+ <a id="wrglossary.1084"></a><a href="#glo:ForEachTrackedDialect"><code class="csfmt">\ForEachTrackedDialect</code></a>{<code class="cmd">\this@dialect</code>}{<span class="comment">% </span>
+ <code class="cmd">\RequireRegionsDialect</code><code class="cmd">\this@dialect</code>
+ }<span class="comment">% </span>
+}
+{<span class="comment">% no tracked languages, default already set up</span>
+}
+
+<code class="cmd">\endinput</code>
+</pre> There are separate <a id="wrglossary.1085"></a><a href="#glo:ext.ldf"><span class="extfmt">ldf</span></a> files for region and language. First are the regions.<p>
+
+<ul class="displaylist">
+ <li><span class="bulletitem">•</span><a id="wrglossary.1086"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">regions-BE.ldf</span></a> (Belgium): <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.1087"></a><a href="#glo:TrackLangProvidesResource"><code class="csfmt">\TrackLangProvidesResource</code></a>{BE}
+
+<code class="cmd">\providecommand</code>*{<code class="cmd">\BEunits</code>}{<span class="comment">% </span>
+ <code class="cmd">\renewcommand</code>*{<code class="cmd">\weightunit</code>}{kg}<span class="comment">% </span>
+ <code class="cmd">\renewcommand</code>*{<code class="cmd">\lengthunit</code>}{mm}<span class="comment">% </span>
+ <code class="cmd">\renewcommand</code>*{<code class="cmd">\currencyunit</code>}{EUR}<span class="comment">% </span>
+}
+
+<a id="wrglossary.1088"></a><a href="#glo:TrackLangAddToCaptions"><code class="csfmt">\TrackLangAddToCaptions</code></a>{<code class="cmd">\BEunits</code>}
+</pre><p>
+<li><span class="bulletitem">•</span><a id="wrglossary.1089"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">regions-CA.ldf</span></a> (Canada): <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.1090"></a><a href="#glo:TrackLangProvidesResource"><code class="csfmt">\TrackLangProvidesResource</code></a>{CA}
+
+<code class="cmd">\providecommand</code>*{<code class="cmd">\CAunits</code>}{<span class="comment">% </span>
+ <code class="cmd">\renewcommand</code>*{<code class="cmd">\weightunit</code>}{kg}<span class="comment">% </span>
+ <code class="cmd">\renewcommand</code>*{<code class="cmd">\lengthunit</code>}{mm}<span class="comment">% </span>
+ <code class="cmd">\renewcommand</code>*{<code class="cmd">\currencyunit</code>}{CAD}<span class="comment">% </span>
+}
+
+<a id="wrglossary.1091"></a><a href="#glo:TrackLangAddToCaptions"><code class="csfmt">\TrackLangAddToCaptions</code></a>{<code class="cmd">\CAunits</code>}
+</pre><p>
+<li><span class="bulletitem">•</span><a id="wrglossary.1092"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">regions-GB.ldf</span></a> (Great Britain): <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.1093"></a><a href="#glo:TrackLangProvidesResource"><code class="csfmt">\TrackLangProvidesResource</code></a>{GB}
+
+<code class="cmd">\providecommand</code>*{<code class="cmd">\GBunits</code>}{<span class="comment">% </span>
+ <code class="cmd">\renewcommand</code>*{<code class="cmd">\weightunit</code>}{kg}<span class="comment">% </span>
+ <code class="cmd">\renewcommand</code>*{<code class="cmd">\lengthunit</code>}{mm}<span class="comment">% </span>
+ <code class="cmd">\renewcommand</code>*{<code class="cmd">\currencyunit</code>}{GBP}<span class="comment">% </span>
+}
+
+<a id="wrglossary.1094"></a><a href="#glo:TrackLangAddToCaptions"><code class="csfmt">\TrackLangAddToCaptions</code></a>{<code class="cmd">\GBunits</code>}
+</pre><p>
+<li><span class="bulletitem">•</span><a id="wrglossary.1095"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">regions-US.ldf</span></a> (USA): <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.1096"></a><a href="#glo:TrackLangProvidesResource"><code class="csfmt">\TrackLangProvidesResource</code></a>{US}
+
+<code class="cmd">\providecommand</code>*{<code class="cmd">\USunits</code>}{<span class="comment">% </span>
+ <code class="cmd">\renewcommand</code>*{<code class="cmd">\weightunit</code>}{lb}<span class="comment">% </span>
+ <code class="cmd">\renewcommand</code>*{<code class="cmd">\lengthunit</code>}{in}<span class="comment">% </span>
+ <code class="cmd">\renewcommand</code>*{<code class="cmd">\currencyunit</code>}{USD}<span class="comment">% </span>
+}
+
+<a id="wrglossary.1097"></a><a href="#glo:TrackLangAddToCaptions"><code class="csfmt">\TrackLangAddToCaptions</code></a>{<code class="cmd">\USunits</code>}
+</pre>
+</ul>
+ Now the language files:<p>
+
+<ul class="displaylist">
+ <li><span class="bulletitem">•</span><a id="wrglossary.1098"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">regions-dutch.ldf</span></a>: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.1099"></a><a href="#glo:TrackLangProvidesResource"><code class="csfmt">\TrackLangProvidesResource</code></a>{dutch}
+
+<code class="cmd">\providecommand</code>*{<code class="cmd">\dutchnames</code>}{<span class="comment">% </span>
+ <code class="cmd">\renewcommand</code>*{<code class="cmd">\unitname</code>}{meeteenheden}<span class="comment">% </span>
+}
+
+<a id="wrglossary.1100"></a><a href="#glo:TrackLangAddToCaptions"><code class="csfmt">\TrackLangAddToCaptions</code></a>{<code class="cmd">\dutchnames</code>}
+</pre><p>
+<li><span class="bulletitem">•</span><a id="wrglossary.1101"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">regions-english.ldf</span></a>: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.1102"></a><a href="#glo:TrackLangProvidesResource"><code class="csfmt">\TrackLangProvidesResource</code></a>{english}
+
+<code class="cmd">\providecommand</code>*{<code class="cmd">\englishnames</code>}{<span class="comment">% </span>
+ <code class="cmd">\renewcommand</code>*{<code class="cmd">\unitname</code>}{units}<span class="comment">% </span>
+}
+
+<a id="wrglossary.1103"></a><a href="#glo:TrackLangAddToCaptions"><code class="csfmt">\TrackLangAddToCaptions</code></a>{<code class="cmd">\englishnames</code>}
+</pre><p>
+<li><span class="bulletitem">•</span><a id="wrglossary.1104"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">regions-french.ldf</span></a>: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><code class="cmd">\TrackLangProvidesResource</code>{french}
+
+<code class="cmd">\providecommand</code>*{<code class="cmd">\frenchnames</code>}{<span class="comment">% </span>
+ <code class="cmd">\renewcommand</code>*{<code class="cmd">\unitname</code>}{unit<code class="cmd">\'</code>es}<span class="comment">% </span>
+}
+
+<a id="wrglossary.1105"></a><a href="#glo:TrackLangAddToCaptions"><code class="csfmt">\TrackLangAddToCaptions</code></a>{<code class="cmd">\frenchnames</code>}
+</pre><p>
+<li><span class="bulletitem">•</span><a id="wrglossary.1106"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">regions-german.ldf</span></a>: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.1107"></a><a href="#glo:TrackLangProvidesResource"><code class="csfmt">\TrackLangProvidesResource</code></a>{french}
+
+<code class="cmd">\providecommand</code>*{<code class="cmd">\germannames</code>}{<span class="comment">% </span>
+ <code class="cmd">\renewcommand</code>*{<code class="cmd">\unitname</code>}{Ma<code class="cmd">\ss</code> einheiten}<span class="comment">% </span>
+}
+
+<a id="wrglossary.1108"></a><a href="#glo:TrackLangAddToCaptions"><code class="csfmt">\TrackLangAddToCaptions</code></a>{<code class="cmd">\germannames</code>}
+</pre>
+</ul>
+<p>
+Here’s an example document that uses this package: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><code class="cmd">\documentclass</code>[<a id="wrglossary.1109"></a><a href="#glo:opt.canadien"><span class="optfmt">canadien</span></a>]{article}
+
+<code class="cmd">\usepackage</code>{regions}
+
+<code class="cbeg">\begin{document}</code>
+
+<code class="cmd">\unitname</code>: <code class="cmd">\weightunit</code>, <code class="cmd">\lengthunit</code>, <code class="cmd">\currencyunit</code>.
+
+<code class="cend">\end{document}</code>
+</pre><p>
+This works because the <span class="meta">〈<em class="metainner">localeid</em>〉</span> search looks for the country code before the root language label. However, this will fail if the dialect label is the same as a root language label that has an associated territory, marked with <sup><span title="dagger marker" class="icon">†</span></sup> in Table <a href="#tab:rootlangopts">1.2</a>, as then it will be picked up before the country code.<p>
+In the above example, <a id="wrglossary.1110"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">regions-CA.ldf</span></a> is matched rather than <a id="wrglossary.1111"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">regions-french.ldf</span></a>, so <a id="wrglossary.1112"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">regions-CA.ldf</span></a> is loaded by <pre class="compactcodebox"><a id="wrglossary.1113"></a><a href="#glo:TrackLangRequireResource"><code class="csfmt">\TrackLangRequireResource</code></a>{<a id="wrglossary.1114"></a><a href="#glo:CurrentTrackedTag"><code class="csfmt">\CurrentTrackedTag</code></a>}
+</pre> After this, the language file <a id="wrglossary.1115"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">regions-french.ldf</span></a> is then loaded: <pre class="compactcodebox"><a id="wrglossary.1116"></a><a href="#glo:TrackLangRequireResource"><code class="csfmt">\TrackLangRequireResource</code></a>{<a id="wrglossary.1117"></a><a href="#glo:CurrentTrackedLanguage"><code class="csfmt">\CurrentTrackedLanguage</code></a>}
+</pre><p>
+This assumes that there’s a country code <a id="wrglossary.1118"></a><a href="#glo:ext.ldf"><span class="extfmt">ldf</span></a> file available. This example needs a little modification to use default units in case the region is missing: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><span class="comment">% Modified example package regions.sty</span>
+<code class="cmd">\NeedsTeXFormat</code>{LaTeX2e}
+<code class="cmd">\ProvidesPackage</code>{regions}
+
+<span class="comment">% Pass all options to <a id="wrglossary.1119"></a><a href="#glo:pkg.tracklang"><span class="filefmt">tracklang.sty</span></a>:</span>
+<code class="cmd">\DeclareOption</code>*{<code class="cmd">\PassOptionsToPackage</code>{<code class="cmd">\CurrentOption</code>}{tracklang}}
+<code class="cmd">\ProcessOptions</code>
+
+<a id="wrglossary.1120"></a><a href="#glo:RequirePackage"><code class="csfmt">\RequirePackage</code></a>{tracklang}
+
+<code class="cmd">\newcommand</code>*{<code class="cmd">\weightunit</code>}{kg}
+<code class="cmd">\newcommand</code>*{<code class="cmd">\lengthunit</code>}{mm}
+<code class="cmd">\newcommand</code>*{<code class="cmd">\currencyunit</code>}{EUR}
+
+<code class="cmd">\newcommand</code>*{<code class="cmd">\unitname</code>}{units}
+
+<code class="cmd">\newcommand</code>*{<code class="cmd">\defaultunits</code>}{<span class="comment">% </span>
+ <code class="cmd">\renewcommand</code>*{<code class="cmd">\weightunit</code>}{kg}<span class="comment">% </span>
+ <code class="cmd">\renewcommand</code>*{<code class="cmd">\lengthunit</code>}{mm}<span class="comment">% </span>
+ <code class="cmd">\renewcommand</code>*{<code class="cmd">\currencyunit</code>}{EUR}<span class="comment">% </span>
+}
+
+<code class="cmd">\newcommand</code>*{<code class="cmd">\RequireRegionsDialect</code>}[1]{<span class="comment">% </span>
+ <a id="wrglossary.1121"></a><a href="#glo:TrackLangRequireDialect"><code class="csfmt">\TrackLangRequireDialect</code></a>
+ [<a id="wrglossary.1122"></a><a href="#glo:TrackLangRequireResource"><code class="csfmt">\TrackLangRequireResource</code></a>{<a id="wrglossary.1123"></a><a href="#glo:CurrentTrackedTag"><code class="csfmt">\CurrentTrackedTag</code></a>}<span class="comment">% </span>
+ <code class="cmd">\ifx</code><a id="wrglossary.1124"></a><a href="#glo:CurrentTrackedTag"><code class="csfmt">\CurrentTrackedTag</code></a><a id="wrglossary.1125"></a><a href="#glo:CurrentTrackedLanguage"><code class="csfmt">\CurrentTrackedLanguage</code></a>
+ <a id="wrglossary.1126"></a><a href="#glo:TrackLangAddToCaptions"><code class="csfmt">\TrackLangAddToCaptions</code></a>{<code class="cmd">\defaultunits</code>}<span class="comment">% </span>
+ <code class="cmd">\else</code>
+ <a id="wrglossary.1127"></a><a href="#glo:TrackLangRequireResource"><code class="csfmt">\TrackLangRequireResource</code></a>{<a id="wrglossary.1128"></a><a href="#glo:CurrentTrackedLanguage"><code class="csfmt">\CurrentTrackedLanguage</code></a>}<span class="comment">% </span>
+ <code class="cmd">\fi</code>
+ ]<span class="comment">% </span>
+ {regions}{#1}<span class="comment">% </span>
+}
+
+<a id="wrglossary.1129"></a><a href="#glo:AnyTrackedLanguages"><code class="csfmt">\AnyTrackedLanguages</code></a>
+{<span class="comment">% </span>
+ <a id="wrglossary.1130"></a><a href="#glo:ForEachTrackedDialect"><code class="csfmt">\ForEachTrackedDialect</code></a>{<code class="cmd">\this@dialect</code>}<span class="comment">% </span>
+ <code class="cmd">\RequireRegionsDialect</code><code class="cmd">\this@dialect</code>
+ <span class="comment">% </span>
+}
+{<span class="comment">% no tracked languages, default already set up</span>
+}
+
+<code class="cmd">\endinput</code>
+</pre> Note that we still have a problem for dialect labels that are identical to root language labels with an associated territory (such as <a id="wrglossary.1131"></a><a href="#glo:opt.manx"><span class="optfmt">manx</span></a>). This case can be checked with the following adjustment: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><code class="cmd">\newcommand</code>*{<code class="cmd">\RequireRegionsDialect</code>}[1]{<span class="comment">% </span>
+ <a id="wrglossary.1132"></a><a href="#glo:TrackLangRequireDialect"><code class="csfmt">\TrackLangRequireDialect</code></a>
+ [<a id="wrglossary.1133"></a><a href="#glo:TrackLangRequireResource"><code class="csfmt">\TrackLangRequireResource</code></a>{<a id="wrglossary.1134"></a><a href="#glo:CurrentTrackedTag"><code class="csfmt">\CurrentTrackedTag</code></a>}<span class="comment">% </span>
+ <code class="cmd">\ifx</code><a id="wrglossary.1135"></a><a href="#glo:CurrentTrackedTag"><code class="csfmt">\CurrentTrackedTag</code></a><a id="wrglossary.1136"></a><a href="#glo:CurrentTrackedLanguage"><code class="csfmt">\CurrentTrackedLanguage</code></a>
+ <code class="cmd">\ifx</code><a id="wrglossary.1137"></a><a href="#glo:CurrentTrackedRegion"><code class="csfmt">\CurrentTrackedRegion</code></a><code class="cmd">\empty</code>
+ <a id="wrglossary.1138"></a><a href="#glo:TrackLangAddToCaptions"><code class="csfmt">\TrackLangAddToCaptions</code></a>{<code class="cmd">\defaultunits</code>}<span class="comment">% </span>
+ <code class="cmd">\else</code>
+ <a id="wrglossary.1139"></a><a href="#glo:TrackLangRequireResource"><code class="csfmt">\TrackLangRequireResource</code></a>{<a id="wrglossary.1140"></a><a href="#glo:CurrentTrackedRegion"><code class="csfmt">\CurrentTrackedRegion</code></a>}<span class="comment">% </span>
+ <code class="cmd">\fi</code>
+ <code class="cmd">\else</code>
+ <a id="wrglossary.1141"></a><a href="#glo:TrackLangRequireResource"><code class="csfmt">\TrackLangRequireResource</code></a>{<a id="wrglossary.1142"></a><a href="#glo:CurrentTrackedLanguage"><code class="csfmt">\CurrentTrackedLanguage</code></a>}<span class="comment">% </span>
+ <code class="cmd">\fi</code>
+ ]<span class="comment">% </span>
+ {regions}{#1}<span class="comment">% </span>
+}
+</pre> In the case where both the dialect and root language label are <a id="wrglossary.1143"></a><a href="#glo:opt.manx"><span class="optfmt">manx</span></a> with the resource files <a id="wrglossary.1144"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">regions-manx.ldf</span></a> and <a id="wrglossary.1145"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">regions-IM.ldf</span></a>, then <a id="wrglossary.1146"></a><a href="#glo:CurrentTrackedTag"><code class="csfmt">\CurrentTrackedTag</code></a> will be <a id="wrglossary.1147"></a><a href="#glo:opt.manx"><span class="optfmt">manx</span></a> (the dialect label) so <a id="wrglossary.1148"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">regions-manx.ldf</span></a> will be loaded with: <pre class="compactcodebox"><a id="wrglossary.1149"></a><a href="#glo:TrackLangRequireResource"><code class="csfmt">\TrackLangRequireResource</code></a>{<a id="wrglossary.1150"></a><a href="#glo:CurrentTrackedTag"><code class="csfmt">\CurrentTrackedTag</code></a>}
+</pre> In this case <a id="wrglossary.1151"></a><a href="#glo:CurrentTrackedRegion"><code class="csfmt">\CurrentTrackedRegion</code></a> is <code class="code">IM</code> (that is, it’s not empty) so then <a id="wrglossary.1152"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">regions-IM.ldf</span></a> will be loaded with: <pre class="compactcodebox"><a id="wrglossary.1153"></a><a href="#glo:TrackLangRequireResource"><code class="csfmt">\TrackLangRequireResource</code></a>{<a id="wrglossary.1154"></a><a href="#glo:CurrentTrackedRegion"><code class="csfmt">\CurrentTrackedRegion</code></a>}
+</pre><p>
+Here’s another document that sets up dialects with <a id="wrglossary.1155"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> labels that aren’t recognised by <a id="wrglossary.1156"></a><a href="#glo:pkg.babel"><span class="styfmt">babel</span></a>. This means that there’s no corresponding <a id="wrglossary.1157"></a><a href="#glo:captionsdialect"><code class="csfmt">\captions<span class="meta">〈<em class="metainner">dialect</em>〉</span></code></a> hook for either the dialect label or the root language label, so mappings need to be defined from the <a id="wrglossary.1158"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> dialect label to the matching <a id="wrglossary.1159"></a><a href="#glo:pkg.babel"><span class="styfmt">babel</span></a> dialect label.<p>
+<pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><code class="cmd">\documentclass</code>{article}
+
+<code class="cmd">\usepackage</code>{tracklang}
+
+<a id="wrglossary.1160"></a><a href="#glo:TrackLanguageTag"><code class="csfmt">\TrackLanguageTag</code></a>{de-US-1996}
+<a id="wrglossary.1161"></a><a href="#glo:SetTrackedDialectLabelMap"><code class="csfmt">\SetTrackedDialectLabelMap</code></a>{<a id="wrglossary.1162"></a><a href="#glo:TrackLangLastTrackedDialect"><code class="csfmt">\TrackLangLastTrackedDialect</code></a>}{ngerman}
+
+<a id="wrglossary.1163"></a><a href="#glo:TrackLanguageTag"><code class="csfmt">\TrackLanguageTag</code></a>{en-MT}
+<a id="wrglossary.1164"></a><a href="#glo:SetTrackedDialectLabelMap"><code class="csfmt">\SetTrackedDialectLabelMap</code></a>{<a id="wrglossary.1165"></a><a href="#glo:TrackLangLastTrackedDialect"><code class="csfmt">\TrackLangLastTrackedDialect</code></a>}{UKenglish}
+
+<code class="cmd">\usepackage</code>[main=ngerman,UKenglish]{babel}
+<code class="cmd">\usepackage</code>{regions}
+
+<code class="cbeg">\begin{document}</code>
+<a id="wrglossary.1166"></a><a href="#glo:selectlanguage"><code class="csfmt">\selectlanguage</code></a>{ngerman}
+
+<code class="cmd">\unitname</code>: <code class="cmd">\weightunit</code>, <code class="cmd">\lengthunit</code>, <code class="cmd">\currencyunit</code>.
+
+<a id="wrglossary.1167"></a><a href="#glo:selectlanguage"><code class="csfmt">\selectlanguage</code></a>{UKenglish}
+
+<code class="cmd">\unitname</code>: <code class="cmd">\weightunit</code>, <code class="cmd">\lengthunit</code>, <code class="cmd">\currencyunit</code>.
+
+<code class="cend">\end{document}</code>
+</pre> This produces: <div class="resultbox"><div class="resultboxtitle"><a href="#glo:sym.result"><span title="Result" class="icon">🖺</span></a></div><!-- end of resultboxtitle -->
+Maßeinheiten: lb, in, USD.<p>
+units: kg, mm, EUR. </div><!-- end of resultbox -->
+ Compare this with: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><code class="cmd">\documentclass</code>{article}
+
+<code class="cmd">\usepackage</code>[main=ngerman,UKenglish]{babel}
+<code class="cmd">\usepackage</code>{regions}
+
+<code class="cbeg">\begin{document}</code>
+<a id="wrglossary.1168"></a><a href="#glo:selectlanguage"><code class="csfmt">\selectlanguage</code></a>{ngerman}
+
+<code class="cmd">\unitname</code>: <code class="cmd">\weightunit</code>, <code class="cmd">\lengthunit</code>, <code class="cmd">\currencyunit</code>.
+
+<a id="wrglossary.1169"></a><a href="#glo:selectlanguage"><code class="csfmt">\selectlanguage</code></a>{UKenglish}
+
+<code class="cmd">\unitname</code>: <code class="cmd">\weightunit</code>, <code class="cmd">\lengthunit</code>, <code class="cmd">\currencyunit</code>.
+
+<code class="cend">\end{document}</code>
+</pre> which produces: <div class="resultbox"><div class="resultboxtitle"><a href="#glo:sym.result"><span title="Result" class="icon">🖺</span></a></div><!-- end of resultboxtitle -->
+Maßeinheiten: kg, mm, EUR.<p>
+units: kg, mm, GBP. </div><!-- end of resultbox -->
+<p>
+Note that these mappings aren’t needed if <a id="wrglossary.1170"></a><a href="#glo:pkg.babel"><span class="styfmt">babel</span></a> is loaded with the root language labels instead. For example: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><code class="cmd">\documentclass</code>{article}
+
+<code class="cmd">\usepackage</code>{tracklang}
+
+<a id="wrglossary.1171"></a><a href="#glo:TrackLanguageTag"><code class="csfmt">\TrackLanguageTag</code></a>{de-US-1996}
+<a id="wrglossary.1172"></a><a href="#glo:SetTrackedDialectLabelMap"><code class="csfmt">\SetTrackedDialectLabelMap</code></a>{<a id="wrglossary.1173"></a><a href="#glo:TrackLangLastTrackedDialect"><code class="csfmt">\TrackLangLastTrackedDialect</code></a>}{ngerman}
+
+<a id="wrglossary.1174"></a><a href="#glo:TrackLanguageTag"><code class="csfmt">\TrackLanguageTag</code></a>{en-MT}
+
+<code class="cmd">\usepackage</code>[main=ngerman,english]{babel}
+<code class="cmd">\usepackage</code>{regions}
+
+<code class="cbeg">\begin{document}</code>
+<a id="wrglossary.1175"></a><a href="#glo:selectlanguage"><code class="csfmt">\selectlanguage</code></a>{ngerman}
+
+<code class="cmd">\unitname</code>: <code class="cmd">\weightunit</code>, <code class="cmd">\lengthunit</code>, <code class="cmd">\currencyunit</code>.
+
+<a id="wrglossary.1176"></a><a href="#glo:selectlanguage"><code class="csfmt">\selectlanguage</code></a>{english}
+
+<code class="cmd">\unitname</code>: <code class="cmd">\weightunit</code>, <code class="cmd">\lengthunit</code>, <code class="cmd">\currencyunit</code>.
+
+<code class="cend">\end{document}</code>
+</pre> No mapping is required for the <a id="wrglossary.1177"></a><a href="#glo:opt.en-MT"><span class="optfmt">en-MT</span></a> locale as it can pick up <a id="wrglossary.1178"></a><a href="#glo:captionsdialect"><code class="csfmt">\captionsenglish</code></a> when <a id="wrglossary.1179"></a><a href="#glo:TrackLangAddToHook"><code class="csfmt">\TrackLangAddToHook</code></a> (used by <a id="wrglossary.1180"></a><a href="#glo:TrackLangAddToCaptions"><code class="csfmt">\TrackLangAddToCaptions</code></a>) queries the root language label after failing to find the language hook from the dialect label.<p>
+Some of the predefined <a id="wrglossary.1181"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> dialects come with a mapping to the closest matching <a id="wrglossary.1182"></a><a href="#glo:pkg.babel"><span class="styfmt">babel</span></a> dialect label. For example, the option <a id="wrglossary.1183"></a><a href="#glo:opt.ngermanDE"><span class="optfmt">ngermanDE</span></a> listed in Table <a href="#tab:nonisoopts">1.3</a> automatically provides a mapping to <a id="wrglossary.1184"></a><a href="#glo:opt.ngerman"><span class="optfmt">ngerman</span></a>. Since a <a id="wrglossary.1185"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> dialect label can only map to one <a id="wrglossary.1186"></a><a href="#glo:pkg.babel"><span class="styfmt">babel</span></a> label, this can be problematic for synonymous labels such as <a id="wrglossary.1187"></a><a href="#glo:opt.british"><span class="optfmt">british</span></a>/<a id="wrglossary.1188"></a><a href="#glo:opt.UKenglish"><span class="optfmt">UKenglish</span></a> or <a id="wrglossary.1189"></a><a href="#glo:opt.american"><span class="optfmt">american</span></a>/<a id="wrglossary.1190"></a><a href="#glo:opt.USenglish"><span class="optfmt">USenglish</span></a>. The default mappings used by <a id="wrglossary.1191"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> are shown in Table <a href="#tab:nonisoopts">1.3</a>.<p>
+
+</section><!-- end of section sec:regions -->
+
+<section id="sec:langsty"><!-- start of section sec:langsty --><div class="tomain"><a href="#main">[top]</a></div>
+<h1><!-- start of chapter header -->6. Adding Support for Language Tracking<div class="labellink"><a href="#sec:langsty">[link]</a></div></h1><!-- end of chapter header -->
+<p>
+If you are writing a package that <span style="font-style: italic; font-variant: normal; ">sets up</span> the document languages (rather than a package that provides multilingual support if the user has already loaded a language package) then you can load <a id="wrglossary.1192"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> and use the commands below to help other packages track your provided languages. (See also: <a href="https://www.dickimaw-books.com/latex/tracklang/langpkg.shtml">Integrating <span class="filefmt">tracklang.tex</span> into Language Packages</a>.)<p>
+The <a id="wrglossary.1193"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> package can be loaded using <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.1194"></a><a href="#glo:input"><code class="csfmt">\input</code></a> tracklang
+</pre> or (LaTeX only) <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.1195"></a><a href="#glo:RequirePackage"><code class="csfmt">\RequirePackage</code></a>{tracklang}
+</pre><p>
+When using LaTeX, there’s a difference between the two. The first case prevents <a id="wrglossary.1196"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> from picking up the document class options but skips the check for known language packages. This check is redundant since your package is the language package, so you need to decide whether or not to allow the user to set up the localisation information through the document class options.<p>
+There’s a hook that, if defined, is performed by <a id="wrglossary.1197"></a><a href="#glo:pkg.tracklang"><span class="filefmt">tracklang.sty</span></a> after the package options have been loaded but before known language packages are checked: <div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.1198"></a><code class="code"><dfn id="glo:@tracklang@prelangpkgcheck@hook"><code class="csfmt">\@tracklang@prelangpkgcheck@hook</code></dfn></code></div><!-- end of pinnedbox -->
+<p>
+If you prefer <a id="wrglossary.1199"></a><a href="#glo:RequirePackage"><code class="csfmt">\RequirePackage</code></a> over <a id="wrglossary.1200"></a><a href="#glo:input"><code class="csfmt">\input</code></a> but you want to make <a id="wrglossary.1201"></a><a href="#glo:pkg.tracklang"><span class="filefmt">tracklang.sty</span></a> skip the check for known language packages then (as from v1.3.8) define the pre-language package check hook as follows: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><code class="cmd">\providecommand</code><a id="wrglossary.1202"></a><a href="#glo:@tracklang@prelangpkgcheck@hook"><code class="csfmt">\@tracklang@prelangpkgcheck@hook</code></a>{<code class="cmd">\endinput</code>}
+<a id="wrglossary.1203"></a><a href="#glo:RequirePackage"><code class="csfmt">\RequirePackage</code></a>{tracklang}[2019/10/06]<span class="comment">% v1.3.8+</span>
+</pre> This will still pick up languages supplied through the document class options.<p>
+If you just use <a id="wrglossary.1204"></a><a href="#glo:input"><code class="csfmt">\input</code></a>, there’s a test at the start of <a id="wrglossary.1205"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> to determine if it’s already been loaded, so you don’t need to worry if the document has already input it.<p>
+To integrate <a id="wrglossary.1206"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> into your language package, you need to consider the following steps:
+<ol class="displaylist">
+ <li><span class="numitem">1.</span>Does <a id="wrglossary.1207"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> define your supported <a id="wrglossary.1208"></a><a href="#glo:idx.15924">ISO 15924</a> language scripts in the <a id="wrglossary.1209"></a><a href="#glo:file.tracklang-scripts.tex"><span class="filefmt">tracklang-scripts.tex</span></a> file?<p>
+If yes, then skip this step. Otherwise create a file with the relevant <a id="wrglossary.1210"></a><a href="#glo:TrackLangScriptMap"><code class="csfmt">\TrackLangScriptMap</code></a> command for each unknown script and identify this new file with <a id="wrglossary.1211"></a><a href="#glo:TrackLangAddExtraScriptFile"><code class="csfmt">\TrackLangAddExtraScriptFile</code></a> (see §<a href="#sec:newscripts">6.3</a>). This usually won’t be necessary unless you have a custom script or a child script (a script that’s a sub-category of another script).<p>
+<li><span class="numitem">2.</span>Does <a id="wrglossary.1212"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> recognise the root language?<p>
+If yes, then skip this step.<p>
+If your package is setting up a language that <a id="wrglossary.1213"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> doesn’t recognise then you will need to define the root language using <a id="wrglossary.1214"></a><a href="#glo:TrackLangNewLanguage"><code class="csfmt">\TrackLangNewLanguage</code></a> (see §<a href="#sec:newlanguages">6.5</a>).<p>
+This usually won’t be the case as <a id="wrglossary.1215"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> should support all languages that have an official <a id="wrglossary.1216"></a><a href="#glo:idx.639-1">ISO <span class="mbox">639-1</span></a> alpha-2 code.<p>
+If you simply have a different label from <a id="wrglossary.1217"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> identifying the root language, then you can just set up your label as a dialect using <a id="wrglossary.1218"></a><a href="#glo:TrackLangProvidePredefinedDialect"><code class="csfmt">\TrackLangProvidePredefinedDialect</code></a>.<p>
+<li><span class="numitem">3.</span>Does <a id="wrglossary.1219"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> define the relevant <a id="wrglossary.1220"></a><a href="#glo:idx.3166-1">ISO <span class="mbox">3166-1</span></a> region codes in the <a id="wrglossary.1221"></a><a href="#glo:file.tracklang-region-codes.tex"><span class="filefmt">tracklang-region-codes.tex</span></a> file?<p>
+If yes, then skip this step. Otherwise create a file with the relevant <a id="wrglossary.1222"></a><a href="#glo:TrackLangRegionMap"><code class="csfmt">\TrackLangRegionMap</code></a> command for each new region and identify this new file with <a id="wrglossary.1223"></a><a href="#glo:TrackLangAddExtraRegionFile"><code class="csfmt">\TrackLangAddExtraRegionFile</code></a> (see §<a href="#sec:newregions">6.4</a>). This usually won’t be necessary as <a id="wrglossary.1224"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> should recognise all countries that have an alpha-2 region code, but you may require it if you need a broader region, such as EU.<p>
+<li><span class="numitem">4.</span>Do you want to define some convenient dialect labels that can be used with <a id="wrglossary.1225"></a><a href="#glo:TrackPredefinedDialect"><code class="csfmt">\TrackPredefinedDialect</code></a>?<p>
+If no, then skip this step. Otherwise you can use <a id="wrglossary.1226"></a><a href="#glo:TrackLangProvidePredefinedLanguage"><code class="csfmt">\TrackLangProvidePredefinedLanguage</code></a> for root languages and <a id="wrglossary.1227"></a><a href="#glo:TrackLangProvidePredefinedDialect"><code class="csfmt">\TrackLangProvidePredefinedDialect</code></a> for dialects with additional information, such as a region, sub-language or script (see §<a href="#sec:definelabels">6.6</a>).<p>
+<li><span class="numitem">5.</span>In your language initialisation code, add the <a id="wrglossary.1228"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> code to track the particular dialect (for example, use <a id="wrglossary.1229"></a><a href="#glo:TrackPredefinedDialect"><code class="csfmt">\TrackPredefinedDialect</code></a> for recognised dialect labels or use the <code class="csfmt">\AddTracked<span class="meta">〈<em class="metainner">Xxx</em>〉</span></code> set of commands). See §<a href="#sec:initnewlang">6.1</a>.<p>
+<li><span class="numitem">6.</span>In your language selection code (such as <a id="wrglossary.1230"></a><a href="#glo:selectlanguage"><code class="csfmt">\selectlanguage</code></a>), add <a id="wrglossary.1231"></a><a href="#glo:SetCurrentTrackedDialect"><code class="csfmt">\SetCurrentTrackedDialect</code></a>{<span class="meta">〈<em class="metainner">label</em>〉</span>} to allow the document author to easily query the current localisation settings (such as the region). See §<a href="#sec:selectlanguage">6.2</a>.
+</ol>
+<p>
+
+</section><!-- end of section sec:langsty -->
+
+<section id="sec:initnewlang"><!-- start of section sec:initnewlang --><div class="tomain"><a href="#main">[top]</a></div>
+<h2><!-- start of section header -->6.1. Initialising a New Language or Dialect<div class="labellink"><a href="#sec:initnewlang">[link]</a></div></h2><!-- end of section header -->
+<p>
+When the user requests a particular dialect through your language package, you can notify <a id="wrglossary.1232"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> of this choice using <pre class="compactcodebox"><a id="wrglossary.1233"></a><a href="#glo:TrackPredefinedDialect"><code class="csfmt">\TrackPredefinedDialect</code></a>{<span class="meta">〈<em class="metainner">dialect label</em>〉</span>}
+</pre> provided the dialect label is recognised by <a id="wrglossary.1234"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> (all those listed in Tables <a href="#tab:isoopts">1.1</a>, <a href="#tab:rootlangopts">1.2</a> & <a href="#tab:nonisoopts">1.3</a>).<p>
+If there’s no matching dialect predefined by <a id="wrglossary.1235"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a>, you can just use <a id="wrglossary.1236"></a><a href="#glo:TrackLocale"><code class="csfmt">\TrackLocale</code></a> or <a id="wrglossary.1237"></a><a href="#glo:TrackLanguageTag"><code class="csfmt">\TrackLanguageTag</code></a> (described in §<a href="#sec:generic">3</a>) with the appropriate <a id="wrglossary.1238"></a><a href="#glo:ISO">ISO</a> codes <span style="font-style: italic; font-variant: normal; ">if you’re not providing caption hooks</span>.<p>
+If you are providing a captions hook mechanism in the form <a id="wrglossary.1239"></a><a href="#glo:captionsdialect"><code class="csfmt">\captions<span class="meta">〈<em class="metainner">dialect</em>〉</span></code></a>, then if <span class="meta">〈<em class="metainner">dialect</em>〉</span> doesn’t match the corresponding <a id="wrglossary.1240"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> dialect label, you can provide a mapping using <a id="wrglossary.1241"></a><a href="#glo:SetTrackedDialectLabelMap"><code class="csfmt">\SetTrackedDialectLabelMap</code></a>, described below.<p>
+
+</section><!-- end of section sec:initnewlang -->
+
+<section id="sec:selectlanguage"><!-- start of section sec:selectlanguage --><div class="tomain"><a href="#main">[top]</a></div>
+<h2><!-- start of section header -->6.2. Switching Language or Dialect<div class="labellink"><a href="#sec:selectlanguage">[link]</a></div></h2><!-- end of section header -->
+<p>
+When the document author switches to a different language or dialect, the current localisation information can be set with: <div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.1242"></a><code class="code"><dfn id="glo:SetCurrentTrackedDialect"><code class="csfmt">\SetCurrentTrackedDialect</code></dfn>{<span class="meta">〈<em class="metainner">dialect</em>〉</span>}</code></div><!-- end of pinnedbox -->
+ where <span class="meta">〈<em class="metainner">dialect</em>〉</span> may the <a id="wrglossary.1243"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> dialect label, or the mapped label previously set through <a id="wrglossary.1244"></a><a href="#glo:SetTrackedDialectLabelMap"><code class="csfmt">\SetTrackedDialectLabelMap</code></a>, described below, or the language label (in which case the last dialect to be tracked with that root language will be assumed).<p>
+This will make the following commands available which may be of use to other packages:
+<ul class="displaylist">
+ <li><span class="bulletitem">•</span><a id="wrglossary.1245"></a><a href="#glo:CurrentTrackedDialect"><code class="csfmt">\CurrentTrackedDialect</code></a> The dialect label recognised by <a id="wrglossary.1246"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> (which may not be the same as <span class="meta">〈<em class="metainner">dialect</em>〉</span>).<p>
+<li><span class="bulletitem">•</span><a id="wrglossary.1247"></a><a href="#glo:CurrentTrackedLanguage"><code class="csfmt">\CurrentTrackedLanguage</code></a> The root language label used by <a id="wrglossary.1248"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a>.<p>
+<li><span class="bulletitem">•</span><a id="wrglossary.1249"></a><a href="#glo:CurrentTrackedDialectModifier"><code class="csfmt">\CurrentTrackedDialectModifier</code></a> The dialect modifier.<p>
+<li><span class="bulletitem">•</span><a id="wrglossary.1250"></a><a href="#glo:CurrentTrackedDialectVariant"><code class="csfmt">\CurrentTrackedDialectVariant</code></a> The dialect variant.<p>
+<li><span class="bulletitem">•</span><a id="wrglossary.1251"></a><a href="#glo:CurrentTrackedDialectScript"><code class="csfmt">\CurrentTrackedDialectScript</code></a> The dialect script. Note that if <a id="wrglossary.1252"></a><a href="#glo:pkg.tracklang-scripts"><span class="styfmt">tracklang-scripts</span></a> is also loaded, this allows the script direction to be accessed using <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.1253"></a><a href="#glo:TrackLangScriptAlphaToDir"><code class="csfmt">\TrackLangScriptAlphaToDir</code></a>{<a id="wrglossary.1254"></a><a href="#glo:CurrentTrackedDialectScript"><code class="csfmt">\CurrentTrackedDialectScript</code></a>}
+</pre> See §<a href="#sec:supplpkgs">4</a> for further details.<p>
+<li><span class="bulletitem">•</span><a id="wrglossary.1255"></a><a href="#glo:CurrentTrackedDialectSubLang"><code class="csfmt">\CurrentTrackedDialectSubLang</code></a> The dialect sub-language code.<p>
+<li><span class="bulletitem">•</span><a id="wrglossary.1256"></a><a href="#glo:GetTrackedDialectAdditional"><code class="csfmt">\GetTrackedDialectAdditional</code></a> The dialect’s additional information.<p>
+<li><span class="bulletitem">•</span><a id="wrglossary.1257"></a><a href="#glo:CurrentTrackedIsoCode"><code class="csfmt">\CurrentTrackedIsoCode</code></a> The dialect’s root language <a id="wrglossary.1258"></a><a href="#glo:ISO">ISO</a> code. (The first found in the sequence <a id="wrglossary.1259"></a><a href="#glo:idx.639-1"><span class="mbox">639-1</span></a>, <a id="wrglossary.1260"></a><a href="#glo:idx.639-2"><span class="mbox">639-2</span></a>, <a id="wrglossary.1261"></a><a href="#glo:idx.639-3"><span class="mbox">639-3</span></a>.)<p>
+<li><span class="bulletitem">•</span><a id="wrglossary.1262"></a><a href="#glo:CurrentTrackedRegion"><code class="csfmt">\CurrentTrackedRegion</code></a> The dialect’s <a id="wrglossary.1263"></a><a href="#glo:idx.3166-1">ISO <span class="mbox">3166-1</span></a> region code.<p>
+<li><span class="bulletitem">•</span><a id="wrglossary.1264"></a><a href="#glo:CurrentTrackedLanguageTag"><code class="csfmt">\CurrentTrackedLanguageTag</code></a> The dialect’s language tag.<p>
+
+</ul>
+ (Without this automated use of <a id="wrglossary.1265"></a><a href="#glo:SetCurrentTrackedDialect"><code class="csfmt">\SetCurrentTrackedDialect</code></a>, the same information can be picked up using commands like <a id="wrglossary.1266"></a><a href="#glo:GetTrackedDialectScript"><code class="csfmt">\GetTrackedDialectScript</code></a>, but that’s less convenient, especially if <a id="wrglossary.1267"></a><a href="#glo:languagename"><code class="csfmt">\languagename</code></a> needs to be converted to <span class="meta">〈<em class="metainner">dialect</em>〉</span>. See the accompanying sample file <span class="filefmt">sample-setlang.tex</span> for an example.)<p>
+
+</section><!-- end of section sec:selectlanguage -->
+
+<section id="sec:newscripts"><!-- start of section sec:newscripts --><div class="tomain"><a href="#main">[top]</a></div>
+<h2><!-- start of section header -->6.3. Defining New Scripts<div class="labellink"><a href="#sec:newscripts">[link]</a></div></h2><!-- end of section header -->
+<p>
+The <a id="wrglossary.1268"></a><a href="#glo:file.tracklang-scripts.tex"><span class="filefmt">tracklang-scripts.tex</span></a> file isn’t automatically loaded, but if it is then, as from v1.4, it contains a hook at the end of the file that can be used to load additional files that define supplementary scripts. This entails creating a file called, say, <span class="filefmt">mypackage-scripts.tex</span> that contains: <pre class="compactcodebox"><a id="wrglossary.1269"></a><a href="#glo:TrackLangScriptMap"><code class="csfmt">\TrackLangScriptMap</code></a>{<span class="meta">〈<em class="metainner">alpha code</em>〉</span>}{<span class="meta">〈<em class="metainner">numeric code</em>〉</span>}{<span class="meta">〈<em class="metainner">name</em>〉</span>}{<span class="meta">〈<em class="metainner">direction</em>〉</span>}{<span class="meta">〈<em class="metainner">parent script</em>〉</span>}
+</pre> The first argument <span class="meta">〈<em class="metainner">alpha code</em>〉</span> is the four-letter ISO 15924 code (such as <a id="wrglossary.1270"></a><a href="#glo:opt.Latn"><span class="optfmt">Latn</span></a>), the second argument is the numeric code (such as 215), the third argument <span class="meta">〈<em class="metainner">name</em>〉</span> is the name of the script (such as <span class="optfmt">Latin</span>), the fourth argument is the direction (such as <span class="optfmt">LR</span> for left-to-right) and the final argument is the parent script (leave blank if there’s no parent). Note that this command will override any previous mapping for those codes. No check is performed to determine if they have already been defined.<p>
+The supplementary file should be identified with: <pre class="compactcodebox"><a id="wrglossary.1271"></a><a href="#glo:TrackLangAddExtraScriptFile"><code class="csfmt">\TrackLangAddExtraScriptFile</code></a>{<span class="meta">〈<em class="metainner">filename</em>〉</span>}
+</pre><p>
+Additional information can be found in §<a href="#sec:supplpkgs">4</a>.<p>
+
+</section><!-- end of section sec:newscripts -->
+
+<section id="sec:newregions"><!-- start of section sec:newregions --><div class="tomain"><a href="#main">[top]</a></div>
+<h2><!-- start of section header -->6.4. Defining New Regions<div class="labellink"><a href="#sec:newregions">[link]</a></div></h2><!-- end of section header -->
+<p>
+The <a id="wrglossary.1272"></a><a href="#glo:file.tracklang-region-codes.tex"><span class="filefmt">tracklang-region-codes.tex</span></a> file isn’t automatically loaded, but if it is then, as from v1.4, it contains a hook at the end of the file that can be used to load additional files that define supplementary regions. This entails creating a file called, say, <span class="filefmt">mypackage-regions.tex</span> that contains: <pre class="compactcodebox"><a id="wrglossary.1273"></a><a href="#glo:TrackLangRegionMap"><code class="csfmt">\TrackLangRegionMap</code></a>{<span class="meta">〈<em class="metainner">numeric code</em>〉</span>}{<span class="meta">〈<em class="metainner">alpha-2 code</em>〉</span>}{<span class="meta">〈<em class="metainner">alpha-3 code</em>〉</span>}
+</pre> where the first argument is the numeric region code (such as 826), the second argument is the alpha-2 region code (such as <code class="code">GB</code>) and the third argument is the alpha-3 region code (such as <code class="code">GBR</code>). Note that this command will override any previous mapping for those codes. No check is performed to determine if they have already been defined.<p>
+The supplementary file should be identified with: <pre class="compactcodebox"><a id="wrglossary.1274"></a><a href="#glo:TrackLangAddExtraRegionFile"><code class="csfmt">\TrackLangAddExtraRegionFile</code></a>{<span class="meta">〈<em class="metainner">filename</em>〉</span>}
+</pre><p>
+Additional information can be found in §<a href="#sec:supplpkgs">4</a>.<p>
+
+</section><!-- end of section sec:newregions -->
+
+<section id="sec:newlanguages"><!-- start of section sec:newlanguages --><div class="tomain"><a href="#main">[top]</a></div>
+<h2><!-- start of section header -->6.5. Defining a New Language<div class="labellink"><a href="#sec:newlanguages">[link]</a></div></h2><!-- end of section header -->
+<p>
+(New to version 1.3.) If the root language isn’t recognised by <a id="wrglossary.1275"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> (not listed in Table <a href="#tab:rootlangopts">1.2</a>), then it can be defined (but not tracked at this point) using: <div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.1276"></a><code class="code"><dfn id="glo:TrackLangNewLanguage"><code class="csfmt">\TrackLangNewLanguage</code></dfn>{<span class="meta">〈<em class="metainner">language label</em>〉</span>}{<span class="meta">〈<em class="metainner">639-1 code</em>〉</span>}{<span class="meta">〈<em class="metainner">639-2 (T)</em>〉</span>}{<span class="meta">〈<em class="metainner">639-2 (B)</em>〉</span>}{<span class="meta">〈<em class="metainner">639-3</em>〉</span>}{<span class="meta">〈<em class="metainner">3166-1</em>〉</span>}{<span class="meta">〈<em class="metainner">default script</em>〉</span>}</code></div><!-- end of pinnedbox -->
+ where <span class="meta">〈<em class="metainner">language label</em>〉</span> is the root language label, <span class="meta">〈<em class="metainner">639-1 code</em>〉</span> is the <a id="wrglossary.1277"></a><a href="#glo:idx.639-1">ISO <span class="mbox">639-1</span></a> code for that language (may be empty if there isn’t one), <span class="meta">〈<em class="metainner">639-2 (T)</em>〉</span> is the <a id="wrglossary.1278"></a><a href="#glo:idx.639-2T">ISO <span class="mbox">639-2</span> (T)</a> code for that language (may be empty if there isn’t one), <span class="meta">〈<em class="metainner">639-2 (B)</em>〉</span> is the <a id="wrglossary.1279"></a><a href="#glo:idx.639-2B">ISO <span class="mbox">639-2</span> (B)</a> code for that language (may be empty if it’s the same as <span class="meta">〈<em class="metainner">639-2 (T)</em>〉</span>), <span class="meta">〈<em class="metainner">639-3</em>〉</span> is the <a id="wrglossary.1280"></a><a href="#glo:idx.639-3">ISO <span class="mbox">639-3</span></a> code for that language (empty if the same as the <a id="wrglossary.1281"></a><a href="#glo:idx.639-2"><span class="mbox">639-2</span></a> code), <span class="meta">〈<em class="metainner">3166-1</em>〉</span> is the territory <a id="wrglossary.1282"></a><a href="#glo:idx.3166-1">ISO <span class="mbox">3166-1</span></a> code for languages that are only spoken in one territory (should be empty if the language is spoken in multiple territories), and <span class="meta">〈<em class="metainner">default script</em>〉</span> is the default script (empty if disputed or varies according to region).<p>
+You can then track this language using: <div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.1283"></a><code class="code"><dfn id="glo:AddTrackedDialect"><code class="csfmt">\AddTrackedDialect</code></dfn>{<span class="meta">〈<em class="metainner">dialect label</em>〉</span>}{<span class="meta">〈<em class="metainner">root language label</em>〉</span>}</code></div><!-- end of pinnedbox -->
+ for dialects (where <span class="meta">〈<em class="metainner">dialect label</em>〉</span> is the dialect label and <span class="meta">〈<em class="metainner">root language label</em>〉</span> is the root language label) or, if no regional variant is needed, you can instead use: <div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.1284"></a><code class="code"><dfn id="glo:AddTrackedLanguage"><code class="csfmt">\AddTrackedLanguage</code></dfn>{<span class="meta">〈<em class="metainner">root language label</em>〉</span>}</code></div><!-- end of pinnedbox -->
+ This is equivalent to <pre class="compactcodebox"><a id="wrglossary.1285"></a><a href="#glo:AddTrackedDialect"><code class="csfmt">\AddTrackedDialect</code></a>{<span class="meta">〈<em class="metainner">root language label</em>〉</span>}{<span class="meta">〈<em class="metainner">root language label</em>〉</span>}
+</pre> Note that <a id="wrglossary.1286"></a><a href="#glo:AddTrackedDialect"><code class="csfmt">\AddTrackedDialect</code></a> defines: <div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.1287"></a><code class="code"><dfn id="glo:TrackLangLastTrackedDialect"><code class="csfmt">\TrackLangLastTrackedDialect</code></dfn></code></div><!-- end of pinnedbox -->
+ to the dialect label, which makes it easier to reference the last dialect to be tracked.<p>
+
+</section><!-- end of section sec:newlanguages -->
+
+<section id="sec:definelabels"><!-- start of section sec:definelabels --><div class="tomain"><a href="#main">[top]</a></div>
+<h2><!-- start of section header -->6.6. Defining New <span class="styfmt">tracklang</span> Labels<div class="labellink"><a href="#sec:definelabels">[link]</a></div></h2><!-- end of section header -->
+<p>
+A dialect label may be predefined with associated information that allows that particular combination to be easily tracked with <a id="wrglossary.1288"></a><a href="#glo:TrackPredefinedDialect"><code class="csfmt">\TrackPredefinedDialect</code></a>. In the case of a dialect label that only requires the information provided in <a id="wrglossary.1289"></a><a href="#glo:TrackLangNewLanguage"><code class="csfmt">\TrackLangNewLanguage</code></a> you can use: <div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.1290"></a><code class="code"><dfn id="glo:TrackLangProvidePredefinedLanguage"><code class="csfmt">\TrackLangProvidePredefinedLanguage</code></dfn>{<span class="meta">〈<em class="metainner">language label</em>〉</span>}</code></div><!-- end of pinnedbox -->
+ where <span class="meta">〈<em class="metainner">language label</em>〉</span> corresponds to the language label used in <a id="wrglossary.1291"></a><a href="#glo:TrackLangNewLanguage"><code class="csfmt">\TrackLangNewLanguage</code></a>. This allows <pre class="compactcodebox"><a id="wrglossary.1292"></a><a href="#glo:TrackPredefinedDialect"><code class="csfmt">\TrackPredefinedDialect</code></a>{<span class="meta">〈<em class="metainner">label</em>〉</span>}
+</pre> to not only track the root language but also the associated ISO codes.<p>
+If the dialect label doesn’t match the root language label then use: <div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.1293"></a><code class="code"><dfn id="glo:TrackLangProvidePredefinedDialect"><code class="csfmt">\TrackLangProvidePredefinedDialect</code></dfn>{<span class="meta">〈<em class="metainner">dialect label</em>〉</span>}{<span class="meta">〈<em class="metainner">root language label</em>〉</span>}{<span class="meta">〈<em class="metainner">3166-1 code</em>〉</span>}{<span class="meta">〈<em class="metainner">modifier</em>〉</span>}{<span class="meta">〈<em class="metainner">variant</em>〉</span>}{<span class="meta">〈<em class="metainner">map</em>〉</span>}{<span class="meta">〈<em class="metainner">script</em>〉</span>}</code></div><!-- end of pinnedbox -->
+ where <span class="meta">〈<em class="metainner">dialect label</em>〉</span> is the new <a id="wrglossary.1294"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> dialect label, {root language label} is the <a id="wrglossary.1295"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> root language label, <span class="meta">〈<em class="metainner">region</em>〉</span> is the <a id="wrglossary.1296"></a><a href="#glo:idx.3166-1">ISO <span class="mbox">3166-1</span></a> region code (may be empty), <span class="meta">〈<em class="metainner">modifier</em>〉</span> is the <a id="wrglossary.1297"></a><a href="#glo:idx.modifier">modifier</a> (may be empty), <span class="meta">〈<em class="metainner">variant</em>〉</span> is the <a id="wrglossary.1298"></a><a href="#glo:idx.variant">variant</a> information (may be empty), <span class="meta">〈<em class="metainner">map</em>〉</span> is your package’s language label that corresponds to the <a id="wrglossary.1299"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> dialect label supplied in the first argument (may be empty if identical), and <span class="meta">〈<em class="metainner">script</em>〉</span> is the <a id="wrglossary.1300"></a><a href="#glo:idx.15924">ISO 15924</a> alpha-4 script code (may be empty if it’s the same as the default script for the root language).<p>
+For compatibility with pre version 1.3, if the dialect isn’t predefined by <a id="wrglossary.1301"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a>, then you can use: <pre class="compactcodebox"><a id="wrglossary.1302"></a><a href="#glo:AddTrackedDialect"><code class="csfmt">\AddTrackedDialect</code></a>{dialect}{root language label}
+</pre> where <span class="meta">〈<em class="metainner">root language label</em>〉</span> is the label for the dialect’s root language (Table <a href="#tab:rootlangopts">1.2</a>) and <span class="meta">〈<em class="metainner">dialect</em>〉</span> matches the captions hook. If the dialect is already in the tracked dialect list, it won’t be added again. If the root language is already in the tracked language list, it won’t be added again. As from version 1.3 this additionally defines <a id="wrglossary.1303"></a><a href="#glo:TrackLangLastTrackedDialect"><code class="csfmt">\TrackLangLastTrackedDialect</code></a> to <span class="meta">〈<em class="metainner">dialect</em>〉</span> for convenient reference if required. Note that <a id="wrglossary.1304"></a><a href="#glo:AddTrackedDialect"><code class="csfmt">\AddTrackedDialect</code></a> is internally used by commands like <a id="wrglossary.1305"></a><a href="#glo:TrackPredefinedDialect"><code class="csfmt">\TrackPredefinedDialect</code></a>, <a id="wrglossary.1306"></a><a href="#glo:TrackLocale"><code class="csfmt">\TrackLocale</code></a> and <a id="wrglossary.1307"></a><a href="#glo:TrackLanguageTag"><code class="csfmt">\TrackLanguageTag</code></a>.<p>
+(New to version 1.3.) Many of the <a id="wrglossary.1308"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> dialect labels don’t have a corresponding match in various language packages. For example, <a id="wrglossary.1309"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> provides <a id="wrglossary.1310"></a><a href="#glo:opt.ngermanDE"><span class="optfmt">ngermanDE</span></a> but the closest match in <a id="wrglossary.1311"></a><a href="#glo:pkg.babel"><span class="styfmt">babel</span></a> is <a id="wrglossary.1312"></a><a href="#glo:opt.ngerman"><span class="optfmt">ngerman</span></a>. This means that the caption hook <a id="wrglossary.1313"></a><a href="#glo:captionsdialect"><code class="csfmt">\captionsngerman</code></a> can’t be accessed through: <pre class="compactcodebox"><code class="cmd">\csname</code> captions<a id="wrglossary.1314"></a><a href="#glo:CurrentTrackedDialect"><code class="csfmt">\CurrentTrackedDialect</code></a><code class="cmd">\endcsname</code>
+</pre> in the resource files. In this case, a mapping may be defined between the <a id="wrglossary.1315"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> dialect label and the closest matching label used by the language hooks. This is done through <div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.1316"></a><code class="code"><dfn id="glo:SetTrackedDialectLabelMap"><code class="csfmt">\SetTrackedDialectLabelMap</code></dfn>{<span class="meta">〈<em class="metainner">tracklang-label</em>〉</span>}{<span class="meta">〈<em class="metainner">hook-label</em>〉</span>}</code></div><!-- end of pinnedbox -->
+ where <span class="meta">〈<em class="metainner">tracklang-label</em>〉</span> is the <a id="wrglossary.1317"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> label and <span class="meta">〈<em class="metainner">hook-label</em>〉</span> is the language hook label. For example: <pre class="compactcodebox"><a id="wrglossary.1318"></a><a href="#glo:TrackLanguageTag"><code class="csfmt">\TrackLanguageTag</code></a>{de-AR-1996}
+<a id="wrglossary.1319"></a><a href="#glo:SetTrackedDialectLabelMap"><code class="csfmt">\SetTrackedDialectLabelMap</code></a>{<a id="wrglossary.1320"></a><a href="#glo:TrackLangLastTrackedDialect"><code class="csfmt">\TrackLangLastTrackedDialect</code></a>}{ngerman}
+</pre> Since <a id="wrglossary.1321"></a><a href="#glo:TrackLanguageTag"><code class="csfmt">\TrackLanguageTag</code></a> internally uses <a id="wrglossary.1322"></a><a href="#glo:AddTrackedDialect"><code class="csfmt">\AddTrackedDialect</code></a> the dialect label created by <a id="wrglossary.1323"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> can be accessed using <a id="wrglossary.1324"></a><a href="#glo:TrackLangLastTrackedDialect"><code class="csfmt">\TrackLangLastTrackedDialect</code></a>. This means that <a id="wrglossary.1325"></a><a href="#glo:TrackLangAddToCaptions"><code class="csfmt">\TrackLangAddToCaptions</code></a> can now find the <a id="wrglossary.1326"></a><a href="#glo:captionsdialect"><code class="csfmt">\captionsngerman</code></a> hook even though the <a id="wrglossary.1327"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> dialect label isn’t <a id="wrglossary.1328"></a><a href="#glo:opt.ngerman"><span class="optfmt">ngerman</span></a>.<p>
+(New to version 1.3.) If the root language label is recognised by <a id="wrglossary.1329"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a>, you can add the <a id="wrglossary.1330"></a><a href="#glo:ISO">ISO</a> codes using: <div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.1331"></a><code class="code"><dfn id="glo:AddTrackedLanguageIsoCodes"><code class="csfmt">\AddTrackedLanguageIsoCodes</code></dfn>{<span class="meta">〈<em class="metainner">root language label</em>〉</span>}</code></div><!-- end of pinnedbox -->
+<p>
+As from v1.3, you can also provide a modifier for a given dialect using: <div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.1332"></a><code class="code"><dfn id="glo:SetTrackedDialectModifier"><code class="csfmt">\SetTrackedDialectModifier</code></dfn>{<span class="meta">〈<em class="metainner">dialect</em>〉</span>}{<span class="meta">〈<em class="metainner">value</em>〉</span>}</code></div><!-- end of pinnedbox -->
+ where <span class="meta">〈<em class="metainner">dialect</em>〉</span> is the dialect label and <span class="meta">〈<em class="metainner">value</em>〉</span> is the modifier value. For example: <pre class="compactcodebox"><a id="wrglossary.1333"></a><a href="#glo:AddTrackedDialect"><code class="csfmt">\AddTrackedDialect</code></a>{oldgerman}{<a id="wrglossary.1334"></a><a href="#glo:opt.german"><span class="optfmt">german</span></a>}
+<a id="wrglossary.1335"></a><a href="#glo:AddTrackedLanguageIsoCodes"><code class="csfmt">\AddTrackedLanguageIsoCodes</code></a>{german}
+<a id="wrglossary.1336"></a><a href="#glo:SetTrackedDialectModifier"><code class="csfmt">\SetTrackedDialectModifier</code></a>{oldgerman}{old}
+</pre><p>
+Note that no sanitization is performed on <span class="meta">〈<em class="metainner">value</em>〉</span> when the modifier is set explicitly through <a id="wrglossary.1337"></a><a href="#glo:SetTrackedDialectModifier"><code class="csfmt">\SetTrackedDialectModifier</code></a>, since it’s assumed that any package that specifically sets the modifier in this way is using a sensible labelling system. If the modifier is obtained through commands like <a id="wrglossary.1338"></a><a href="#glo:TrackLocale"><code class="csfmt">\TrackLocale</code></a>, then the modifier is sanitized as the value may have been obtained from the operating system and there’s no guarantee that it won’t contain problematic characters.<p>
+The <a id="wrglossary.1339"></a><a href="#glo:idx.modifier">modifier</a> is typically obtained by parsing locale information in <a id="wrglossary.1340"></a><a href="#glo:POSIX">POSIX</a> format. <pre class="compactcodebox"><span class="meta">〈<em class="metainner">language</em>〉</span>[<a id="wrglossary.1341"></a><a href="#glo:idx.underscoresep"><code class="code">_</code></a><span class="meta">〈<em class="metainner">territory</em>〉</span>][<a id="wrglossary.1342"></a><a href="#glo:idx.dotsep"><code class="code">.</code></a><span class="meta">〈<em class="metainner">codeset</em>〉</span>][<a id="wrglossary.1343"></a><a href="#glo:idx.atmod"><code class="code">@</code></a><span class="meta">〈<em class="metainner">modifier</em>〉</span>]
+</pre> whereas the <a id="wrglossary.1344"></a><a href="#glo:idx.variant">variant</a> is typically obtained by parsing the language tag.<p>
+The information provided in the commands below (such as the script) are typically obtained by parsing the language tag. For example, with Serbian in the Latin alphabet the modifier would be <span class="optfmt">latin</span> whereas the script would be <a id="wrglossary.1345"></a><a href="#glo:opt.Latn"><span class="optfmt">Latn</span></a>: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.1346"></a><a href="#glo:AddTrackedDialect"><code class="csfmt">\AddTrackedDialect</code></a>{serbianlatin}{<a id="wrglossary.1347"></a><a href="#glo:opt.serbian"><span class="optfmt">serbian</span></a>}
+<a id="wrglossary.1348"></a><a href="#glo:AddTrackedLanguageIsoCodes"><code class="csfmt">\AddTrackedLanguageIsoCodes</code></a>{<a id="wrglossary.1349"></a><a href="#glo:opt.serbian"><span class="optfmt">serbian</span></a>}
+<a id="wrglossary.1350"></a><a href="#glo:SetTrackedDialectModifier"><code class="csfmt">\SetTrackedDialectModifier</code></a>{serbianlatin}{latin}
+<a id="wrglossary.1351"></a><a href="#glo:SetTrackedDialectScript"><code class="csfmt">\SetTrackedDialectScript</code></a>{serbianlatin}{<a id="wrglossary.1352"></a><a href="#glo:opt.Latn"><span class="optfmt">Latn</span></a>}
+</pre><p>
+As from v1.3, you can provide a script (for example, <a id="wrglossary.1353"></a><a href="#glo:opt.Latn"><span class="optfmt">Latn</span></a> or <a id="wrglossary.1354"></a><a href="#glo:opt.Cyrl"><span class="optfmt">Cyrl</span></a>) using: <div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.1355"></a><code class="code"><dfn id="glo:SetTrackedDialectScript"><code class="csfmt">\SetTrackedDialectScript</code></dfn>{<span class="meta">〈<em class="metainner">dialect</em>〉</span>}{<span class="meta">〈<em class="metainner">value</em>〉</span>}</code></div><!-- end of pinnedbox -->
+ where <span class="meta">〈<em class="metainner">dialect</em>〉</span> is the dialect label and <span class="meta">〈<em class="metainner">value</em>〉</span> is the <a id="wrglossary.1356"></a><a href="#glo:idx.15924">ISO 15924</a> alpha-4 script identifier. For example: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.1357"></a><a href="#glo:AddTrackedDialect"><code class="csfmt">\AddTrackedDialect</code></a>{serbiancyrl}{<a id="wrglossary.1358"></a><a href="#glo:opt.serbian"><span class="optfmt">serbian</span></a>}
+<a id="wrglossary.1359"></a><a href="#glo:AddTrackedLanguageIsoCodes"><code class="csfmt">\AddTrackedLanguageIsoCodes</code></a>{serbian}
+<a id="wrglossary.1360"></a><a href="#glo:SetTrackedDialectScript"><code class="csfmt">\SetTrackedDialectScript</code></a>{serbiancyrl}{<a id="wrglossary.1361"></a><a href="#glo:opt.Cyrl"><span class="optfmt">Cyrl</span></a>}
+</pre><p>
+As from v1.3, you can provide a variant for a given dialect using: <div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.1362"></a><code class="code"><dfn id="glo:SetTrackedDialectVariant"><code class="csfmt">\SetTrackedDialectVariant</code></dfn>{<span class="meta">〈<em class="metainner">dialect</em>〉</span>}{<span class="meta">〈<em class="metainner">value</em>〉</span>}</code></div><!-- end of pinnedbox -->
+ For example: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.1363"></a><a href="#glo:AddTrackedDialect"><code class="csfmt">\AddTrackedDialect</code></a>{german1901}{german}
+<a id="wrglossary.1364"></a><a href="#glo:SetTrackedDialectVariant"><code class="csfmt">\SetTrackedDialectVariant</code></a>{german1901}{1901}
+</pre><p>
+As from v1.3, you can also provide a sub-language using: <div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.1365"></a><code class="code"><dfn id="glo:SetTrackedDialectSubLang"><code class="csfmt">\SetTrackedDialectSubLang</code></dfn>{<span class="meta">〈<em class="metainner">dialect</em>〉</span>}{<span class="meta">〈<em class="metainner">value</em>〉</span>}</code></div><!-- end of pinnedbox -->
+ where <span class="meta">〈<em class="metainner">dialect</em>〉</span> is the dialect label and <span class="meta">〈<em class="metainner">value</em>〉</span> is the code. For example: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.1366"></a><a href="#glo:AddTrackedDialect"><code class="csfmt">\AddTrackedDialect</code></a>{mandarin}{<a id="wrglossary.1367"></a><a href="#glo:opt.chinese"><span class="optfmt">chinese</span></a>}
+<a id="wrglossary.1368"></a><a href="#glo:AddTrackedLanguageIsoCodes"><code class="csfmt">\AddTrackedLanguageIsoCodes</code></a>{<a id="wrglossary.1369"></a><a href="#glo:opt.chinese"><span class="optfmt">chinese</span></a>}
+<a id="wrglossary.1370"></a><a href="#glo:SetTrackedDialectSubLang"><code class="csfmt">\SetTrackedDialectSubLang</code></a>{mandarin}{cmn}
+<a id="wrglossary.1371"></a><a href="#glo:AddTrackedIsoLanguage"><code class="csfmt">\AddTrackedIsoLanguage</code></a>{639-3}{cmn}{mandarin}
+</pre><p>
+As from v1.3, you can also provide additional information using: <div class="pinnedbox"><div class="pinnedboxtitle"><a href="#glo:sym.definition"><span title="Definition" class="icon">📌</span></a></div><!-- end of pinnedboxtitle -->
+<a id="wrglossary.1372"></a><code class="code"><dfn id="glo:SetTrackedDialectAdditional"><code class="csfmt">\SetTrackedDialectAdditional</code></dfn>{<span class="meta">〈<em class="metainner">dialect</em>〉</span>}{<span class="meta">〈<em class="metainner">value</em>〉</span>}</code></div><!-- end of pinnedbox -->
+ where <span class="meta">〈<em class="metainner">dialect</em>〉</span> is the dialect label and <span class="meta">〈<em class="metainner">value</em>〉</span> is the additional information.<p>
+
+</section><!-- end of section sec:definelabels -->
+
+<section id="sec:examplenewlang"><!-- start of section sec:examplenewlang --><div class="tomain"><a href="#main">[top]</a></div>
+<h2><!-- start of section header -->6.7. Example (<span class="filefmt">alien.sty</span>)<div class="labellink"><a href="#sec:examplenewlang">[link]</a></div></h2><!-- end of section header -->
+<p>
+Suppose I want to create a language package <a id="wrglossary.1373"></a><a href="#glo:file.alien.sty"><span class="filefmt">alien.sty</span></a> that defines the <span class="optfmt">martian</span> language with regional dialects <span class="optfmt">lowermartian</span> and <span class="optfmt">uppermartian</span>. First, let’s suppose that <a id="wrglossary.1374"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> recognises the root language <span class="optfmt">martian</span>: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><code class="cmd">\ProvidesPackage</code>{alien}
+
+<a id="wrglossary.1375"></a><a href="#glo:input"><code class="csfmt">\input</code></a>tracklang<span class="comment">% v1.3</span>
+
+<code class="cmd">\DeclareOption</code>{martian}{<span class="comment">% </span>
+ <a id="wrglossary.1376"></a><a href="#glo:TrackPredefinedDialect"><code class="csfmt">\TrackPredefinedDialect</code></a>{martian}
+}
+<code class="cmd">\DeclareOption</code>{lowermartian}{<span class="comment">% </span>
+ <a id="wrglossary.1377"></a><a href="#glo:AddTrackedDialect"><code class="csfmt">\AddTrackedDialect</code></a>{lowermartian}{martian}
+ <a id="wrglossary.1378"></a><a href="#glo:AddTrackedLanguageIsoCodes"><code class="csfmt">\AddTrackedLanguageIsoCodes</code></a>{martian}
+ <a id="wrglossary.1379"></a><a href="#glo:AddTrackedIsoLanguage"><code class="csfmt">\AddTrackedIsoLanguage</code></a>{3166-1}{YY}{lowermartian}
+ <span class="comment">% other attributes such as</span>
+ <span class="comment">% <a id="wrglossary.1380"></a><a href="#glo:SetTrackedDialectVariant"><code class="csfmt">\SetTrackedDialectVariant</code></a>{lowermartian}{...}</span>
+}
+<code class="cmd">\DeclareOption</code>{uppermartian}{<span class="comment">% </span>
+ <a id="wrglossary.1381"></a><a href="#glo:AddTrackedDialect"><code class="csfmt">\AddTrackedDialect</code></a>{uppermartian}{martian}
+ <a id="wrglossary.1382"></a><a href="#glo:AddTrackedLanguageIsoCodes"><code class="csfmt">\AddTrackedLanguageIsoCodes</code></a>{martian}
+ <a id="wrglossary.1383"></a><a href="#glo:AddTrackedIsoLanguage"><code class="csfmt">\AddTrackedIsoLanguage</code></a>{3166-1}{XX}{uppermartian}
+ <span class="comment">% other attributes such as</span>
+ <span class="comment">% <a id="wrglossary.1384"></a><a href="#glo:SetTrackedDialectVariant"><code class="csfmt">\SetTrackedDialectVariant</code></a>{uppermartian}{...}</span>
+}
+
+<code class="cmd">\ProcessOptions</code>
+
+<code class="cmd">\newcommand</code>*{<a id="wrglossary.1385"></a><a href="#glo:selectlanguage"><code class="csfmt">\selectlanguage</code></a>}[1]{<span class="comment">% </span>
+ <code class="cmd">\def</code><a id="wrglossary.1386"></a><a href="#glo:languagename"><code class="csfmt">\languagename</code></a>{#1}<span class="comment">% </span>
+ <span class="comment">% other stuff</span>
+ <a id="wrglossary.1387"></a><a href="#glo:SetCurrentTrackedDialect"><code class="csfmt">\SetCurrentTrackedDialect</code></a>{#1}<span class="comment">% </span>
+}
+
+<a id="wrglossary.1388"></a><a href="#glo:AnyTrackedLanguages"><code class="csfmt">\AnyTrackedLanguages</code></a>
+{
+ <a id="wrglossary.1389"></a><a href="#glo:ForEachTrackedDialect"><code class="csfmt">\ForEachTrackedDialect</code></a>{<code class="cmd">\thisdialect</code>}
+ {<span class="comment">% </span>
+ <a id="wrglossary.1390"></a><a href="#glo:TrackLangRequireDialect"><code class="csfmt">\TrackLangRequireDialect</code></a>{alien}{<code class="cmd">\thisdialect</code>}
+ }
+}
+</pre> The caption commands and language set up are in the files <a id="wrglossary.1391"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">alien-</span><span class="meta">〈<em class="metainner">localeid</em>〉</span><span class="filefmt">.ldf</span></a> as in the examples from §<a href="#sec:examples">5.1</a>. This allows for the user having already loaded <a id="wrglossary.1392"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> before <a id="wrglossary.1393"></a><a href="#glo:file.alien.sty"><span class="styfmt">alien</span></a> and used <a id="wrglossary.1394"></a><a href="#glo:TrackLangFromEnv"><code class="csfmt">\TrackLangFromEnv</code></a> to pick up the locale from the operating system’s environment variables. (For example, they may have <a id="wrglossary.1395"></a><a href="#glo:opt.envvar.LANG"><code class="envvarfmt">LANG</code></a> set to <code class="code">xx<a id="wrglossary.1396"></a><a href="#glo:idx.underscoresep"><code class="code">_</code></a>YY</code>.)<p>
+The resource files may need to set the mapping between the <a id="wrglossary.1397"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> dialect label and the <a id="wrglossary.1398"></a><a href="#glo:file.alien.sty"><span class="styfmt">alien</span></a> dialect label. For example, in <a id="wrglossary.1399"></a><a href="#glo:file.prefix-localeid.ldf"><span class="filefmt">alien-xx-YY.ldf</span></a>: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><a id="wrglossary.1400"></a><a href="#glo:TrackLangProvidesResource"><code class="csfmt">\TrackLangProvidesResource</code></a>{xx-YY}
+
+<a id="wrglossary.1401"></a><a href="#glo:TrackLangRequireResource"><code class="csfmt">\TrackLangRequireResource</code></a>{martian}<span class="comment">% load common elements</span>
+
+<code class="cmd">\newcommand</code>{<a id="wrglossary.1402"></a><a href="#glo:captionsdialect"><code class="csfmt">\captionslowermartian</code></a>}{<span class="comment">% </span>
+ <a id="wrglossary.1403"></a><a href="#glo:captionsdialect"><code class="csfmt">\captionsmartian</code></a>
+ <code class="cmd">\def</code><code class="cmd">\contentsname</code>{X'flurp}<span class="comment">% regional variation</span>
+}
+
+<a id="wrglossary.1404"></a><a href="#glo:SetTrackedDialectLabelMap"><code class="csfmt">\SetTrackedDialectLabelMap</code></a>{<a id="wrglossary.1405"></a><a href="#glo:CurrentTrackedDialect"><code class="csfmt">\CurrentTrackedDialect</code></a>}{lowermartian}
+</pre><p>
+Now let’s consider the case where <a id="wrglossary.1406"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> doesn’t know about the <span class="optfmt">martian</span> language. In this case the user can’t track the dialect until the root language has been defined, so the user can’t use <a id="wrglossary.1407"></a><a href="#glo:TrackLangFromEnv"><code class="csfmt">\TrackLangFromEnv</code></a> before using the <a id="wrglossary.1408"></a><a href="#glo:file.alien.sty"><span class="styfmt">alien</span></a> package.<p>
+With <a id="wrglossary.1409"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> v1.3. The new root language can be defined with a minor adjustment to the above code: <pre class="codebox"><div class="codeboxtitle"><a href="#glo:sym.code"><span title="Input" class="icon">🖹</span></a></div><code class="cmd">\ProvidesPackage</code>{alien}
+
+<a id="wrglossary.1410"></a><a href="#glo:input"><code class="csfmt">\input</code></a>{tracklang}<span class="comment">% needs v1.3</span>
+
+<a id="wrglossary.1411"></a><a href="#glo:TrackLangIfKnownLang"><code class="csfmt">\TrackLangIfKnownLang</code></a>{martian}
+{}<span class="comment">% tracklang already knows about the martian language</span>
+{
+ <span class="comment">% tracklang doesn't known about the martian language, so define it</span>
+ <span class="comment">% with <a id="wrglossary.1412"></a><a href="#glo:idx.639-1">ISO <span class="mbox">639-1</span></a> (xx) and <a id="wrglossary.1413"></a><a href="#glo:idx.639-2">ISO <span class="mbox">639-2</span></a> (xxx) codes:</span>
+ <a id="wrglossary.1414"></a><a href="#glo:TrackLangNewLanguage"><code class="csfmt">\TrackLangNewLanguage</code></a>{martian}{xx}{xxx}{}{}{}{<a id="wrglossary.1415"></a><a href="#glo:opt.Latn"><span class="optfmt">Latn</span></a>}
+}
+</pre> The rest is as before.<p>
+Now other package writers who want to provide support for the Martian dialects can easily detect which language options the user requested through my package, <span style="font-style: italic; font-variant: normal; ">without needing to know anything about my <a id="wrglossary.1416"></a><a href="#glo:file.alien.sty"><span class="styfmt">alien</span></a> package</span>.<p>
+
+</section><!-- end of section sec:examplenewlang -->
+
+<section id="part.II"><!-- start of section part.II --><div class="tomain"><a href="#main">[top]</a></div>
+<div class="part"><!-- start of part header -->II. Summaries<div class="labellink"><a href="#part.II">[link]</a></div></div><!-- end of part header -->
+<p>
+<p>
+
+</section><!-- end of section part.II -->
+
+<section id="sec:regscriptmappings"><!-- start of section sec:regscriptmappings --><div class="tomain"><a href="#main">[top]</a></div>
+<h1><!-- start of chapter header -->A. Region and Script Mappings<div class="labellink"><a href="#sec:regscriptmappings">[link]</a></div></h1><!-- end of chapter header -->
+<p>
+Region mappings are listed in Table <a href="#tab:regionmappings">A.1</a>, and script mappings are listed in Table <a href="#tab:scriptmappings">A.2</a>.<p>
+
+<table class="glossary-ruled">
+<caption id="tab:regionmappings">Table&nbsp;4: Region Mappings</caption>
+<tr class="glossary-ruled">
+<th class="glossary-name cell-noborder-bothsep-l">Alpha-2</th>
+<th class="glossary-other cell-noborder-bothsep-l">Alpha-3</th>
+<th class="glossary-desc cell-noborder-bothsep-l">Numeric</th>
+<th class="glossary-name cell-noborder-bothsep-l cell-left-border">Alpha-2</th>
+<th class="glossary-other cell-noborder-bothsep-l">Alpha-3</th>
+<th class="glossary-desc cell-noborder-bothsep-l">Numeric</th></tr>
+
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.AD"><span class="optfmt">AD</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">AND</td>
+<td class="glossary-desc cell-noborder-bothsep-l">020
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.AE"><span class="optfmt">AE</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">ARE</td>
+<td class="glossary-desc cell-noborder-bothsep-l">784</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.AF"><span class="optfmt">AF</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">AFG</td>
+<td class="glossary-desc cell-noborder-bothsep-l">004
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.AG"><span class="optfmt">AG</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">ATG</td>
+<td class="glossary-desc cell-noborder-bothsep-l">028</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.AI"><span class="optfmt">AI</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">AIA</td>
+<td class="glossary-desc cell-noborder-bothsep-l">660
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.AL"><span class="optfmt">AL</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">ALB</td>
+<td class="glossary-desc cell-noborder-bothsep-l">008</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.AM"><span class="optfmt">AM</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">ARM</td>
+<td class="glossary-desc cell-noborder-bothsep-l">051
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.AO"><span class="optfmt">AO</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">AGO</td>
+<td class="glossary-desc cell-noborder-bothsep-l">024</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.AQ"><span class="optfmt">AQ</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">ATA</td>
+<td class="glossary-desc cell-noborder-bothsep-l">010
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.AR"><span class="optfmt">AR</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">ARG</td>
+<td class="glossary-desc cell-noborder-bothsep-l">032</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.AS"><span class="optfmt">AS</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">ASM</td>
+<td class="glossary-desc cell-noborder-bothsep-l">016
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.AT"><span class="optfmt">AT</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">AUT</td>
+<td class="glossary-desc cell-noborder-bothsep-l">040</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.AU"><span class="optfmt">AU</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">AUS</td>
+<td class="glossary-desc cell-noborder-bothsep-l">036
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.AW"><span class="optfmt">AW</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">ABW</td>
+<td class="glossary-desc cell-noborder-bothsep-l">533</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.AX"><span class="optfmt">AX</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">ALA</td>
+<td class="glossary-desc cell-noborder-bothsep-l">248
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.AZ"><span class="optfmt">AZ</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">AZE</td>
+<td class="glossary-desc cell-noborder-bothsep-l">031</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.BA"><span class="optfmt">BA</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">BIH</td>
+<td class="glossary-desc cell-noborder-bothsep-l">070
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.BB"><span class="optfmt">BB</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">BRB</td>
+<td class="glossary-desc cell-noborder-bothsep-l">052</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.BD"><span class="optfmt">BD</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">BGD</td>
+<td class="glossary-desc cell-noborder-bothsep-l">050
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.BE"><span class="optfmt">BE</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">BEL</td>
+<td class="glossary-desc cell-noborder-bothsep-l">056</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.BF"><span class="optfmt">BF</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">BFA</td>
+<td class="glossary-desc cell-noborder-bothsep-l">854
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.BG"><span class="optfmt">BG</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">BGR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">100</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.BH"><span class="optfmt">BH</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">BHR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">048
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.BI"><span class="optfmt">BI</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">BDI</td>
+<td class="glossary-desc cell-noborder-bothsep-l">108</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.BJ"><span class="optfmt">BJ</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">BEN</td>
+<td class="glossary-desc cell-noborder-bothsep-l">204
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.BL"><span class="optfmt">BL</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">BLM</td>
+<td class="glossary-desc cell-noborder-bothsep-l">652</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.BM"><span class="optfmt">BM</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">BMU</td>
+<td class="glossary-desc cell-noborder-bothsep-l">060
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.BN"><span class="optfmt">BN</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">BRN</td>
+<td class="glossary-desc cell-noborder-bothsep-l">096</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.BO"><span class="optfmt">BO</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">BOL</td>
+<td class="glossary-desc cell-noborder-bothsep-l">068
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.BQ"><span class="optfmt">BQ</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">BES</td>
+<td class="glossary-desc cell-noborder-bothsep-l">535</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.BR"><span class="optfmt">BR</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">BRA</td>
+<td class="glossary-desc cell-noborder-bothsep-l">076
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.BS"><span class="optfmt">BS</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">BHS</td>
+<td class="glossary-desc cell-noborder-bothsep-l">044</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.BT"><span class="optfmt">BT</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">BTN</td>
+<td class="glossary-desc cell-noborder-bothsep-l">064
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.BV"><span class="optfmt">BV</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">BVT</td>
+<td class="glossary-desc cell-noborder-bothsep-l">074</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.BW"><span class="optfmt">BW</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">BWA</td>
+<td class="glossary-desc cell-noborder-bothsep-l">072
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.BY"><span class="optfmt">BY</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">BLR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">112</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.BZ"><span class="optfmt">BZ</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">BLZ</td>
+<td class="glossary-desc cell-noborder-bothsep-l">084
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.CA"><span class="optfmt">CA</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">CAN</td>
+<td class="glossary-desc cell-noborder-bothsep-l">124</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.CC"><span class="optfmt">CC</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">CCK</td>
+<td class="glossary-desc cell-noborder-bothsep-l">166
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.CD"><span class="optfmt">CD</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">COD</td>
+<td class="glossary-desc cell-noborder-bothsep-l">180</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.CF"><span class="optfmt">CF</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">CAF</td>
+<td class="glossary-desc cell-noborder-bothsep-l">140
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.CG"><span class="optfmt">CG</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">COG</td>
+<td class="glossary-desc cell-noborder-bothsep-l">178</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.CH"><span class="optfmt">CH</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">CHE</td>
+<td class="glossary-desc cell-noborder-bothsep-l">756
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.CI"><span class="optfmt">CI</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">CIV</td>
+<td class="glossary-desc cell-noborder-bothsep-l">384</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.CK"><span class="optfmt">CK</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">COK</td>
+<td class="glossary-desc cell-noborder-bothsep-l">184
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.CL"><span class="optfmt">CL</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">CHL</td>
+<td class="glossary-desc cell-noborder-bothsep-l">152</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.CM"><span class="optfmt">CM</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">CMR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">120
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.CN"><span class="optfmt">CN</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">CHN</td>
+<td class="glossary-desc cell-noborder-bothsep-l">156</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.CO"><span class="optfmt">CO</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">COL</td>
+<td class="glossary-desc cell-noborder-bothsep-l">170
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.CR"><span class="optfmt">CR</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">CRI</td>
+<td class="glossary-desc cell-noborder-bothsep-l">188</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.CU"><span class="optfmt">CU</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">CUB</td>
+<td class="glossary-desc cell-noborder-bothsep-l">192
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.CV"><span class="optfmt">CV</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">CPV</td>
+<td class="glossary-desc cell-noborder-bothsep-l">132</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.CW"><span class="optfmt">CW</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">CUW</td>
+<td class="glossary-desc cell-noborder-bothsep-l">531
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.CX"><span class="optfmt">CX</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">CXR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">162</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.CY"><span class="optfmt">CY</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">CYP</td>
+<td class="glossary-desc cell-noborder-bothsep-l">196
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.CZ"><span class="optfmt">CZ</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">CZE</td>
+<td class="glossary-desc cell-noborder-bothsep-l">203</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.DE"><span class="optfmt">DE</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">DEU</td>
+<td class="glossary-desc cell-noborder-bothsep-l">276
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.DJ"><span class="optfmt">DJ</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">DJI</td>
+<td class="glossary-desc cell-noborder-bothsep-l">262</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.DK"><span class="optfmt">DK</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">DNK</td>
+<td class="glossary-desc cell-noborder-bothsep-l">208
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.DM"><span class="optfmt">DM</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">DMA</td>
+<td class="glossary-desc cell-noborder-bothsep-l">212</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.DO"><span class="optfmt">DO</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">DOM</td>
+<td class="glossary-desc cell-noborder-bothsep-l">214
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.DZ"><span class="optfmt">DZ</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">DZA</td>
+<td class="glossary-desc cell-noborder-bothsep-l">012</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.EC"><span class="optfmt">EC</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">ECU</td>
+<td class="glossary-desc cell-noborder-bothsep-l">218
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.EE"><span class="optfmt">EE</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">EST</td>
+<td class="glossary-desc cell-noborder-bothsep-l">233</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.EG"><span class="optfmt">EG</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">EGY</td>
+<td class="glossary-desc cell-noborder-bothsep-l">818
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.EH"><span class="optfmt">EH</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">ESH</td>
+<td class="glossary-desc cell-noborder-bothsep-l">732</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.ER"><span class="optfmt">ER</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">ERI</td>
+<td class="glossary-desc cell-noborder-bothsep-l">232
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.ES"><span class="optfmt">ES</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">ESP</td>
+<td class="glossary-desc cell-noborder-bothsep-l">724</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.ET"><span class="optfmt">ET</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">ETH</td>
+<td class="glossary-desc cell-noborder-bothsep-l">231
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.FI"><span class="optfmt">FI</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">FIN</td>
+<td class="glossary-desc cell-noborder-bothsep-l">246</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.FJ"><span class="optfmt">FJ</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">FJI</td>
+<td class="glossary-desc cell-noborder-bothsep-l">242
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.FK"><span class="optfmt">FK</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">FLK</td>
+<td class="glossary-desc cell-noborder-bothsep-l">238</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.FM"><span class="optfmt">FM</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">FSM</td>
+<td class="glossary-desc cell-noborder-bothsep-l">583
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.FO"><span class="optfmt">FO</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">FRO</td>
+<td class="glossary-desc cell-noborder-bothsep-l">234</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.FR"><span class="optfmt">FR</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">FRA</td>
+<td class="glossary-desc cell-noborder-bothsep-l">250
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.GA"><span class="optfmt">GA</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">GAB</td>
+<td class="glossary-desc cell-noborder-bothsep-l">266</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.GB"><span class="optfmt">GB</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">GBR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">826
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.GD"><span class="optfmt">GD</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">GRD</td>
+<td class="glossary-desc cell-noborder-bothsep-l">308</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.GE"><span class="optfmt">GE</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">GEO</td>
+<td class="glossary-desc cell-noborder-bothsep-l">268
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.GF"><span class="optfmt">GF</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">GUF</td>
+<td class="glossary-desc cell-noborder-bothsep-l">254</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.GG"><span class="optfmt">GG</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">GGY</td>
+<td class="glossary-desc cell-noborder-bothsep-l">831
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.GH"><span class="optfmt">GH</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">GHA</td>
+<td class="glossary-desc cell-noborder-bothsep-l">288</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.GI"><span class="optfmt">GI</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">GIB</td>
+<td class="glossary-desc cell-noborder-bothsep-l">292
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.GL"><span class="optfmt">GL</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">GRL</td>
+<td class="glossary-desc cell-noborder-bothsep-l">304</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.GM"><span class="optfmt">GM</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">GMB</td>
+<td class="glossary-desc cell-noborder-bothsep-l">270
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.GN"><span class="optfmt">GN</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">GIN</td>
+<td class="glossary-desc cell-noborder-bothsep-l">324</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.GP"><span class="optfmt">GP</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">GLP</td>
+<td class="glossary-desc cell-noborder-bothsep-l">312
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.GQ"><span class="optfmt">GQ</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">GNQ</td>
+<td class="glossary-desc cell-noborder-bothsep-l">226</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.GR"><span class="optfmt">GR</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">GRC</td>
+<td class="glossary-desc cell-noborder-bothsep-l">300
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.GS"><span class="optfmt">GS</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">SGS</td>
+<td class="glossary-desc cell-noborder-bothsep-l">239</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.GT"><span class="optfmt">GT</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">GTM</td>
+<td class="glossary-desc cell-noborder-bothsep-l">320
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.GU"><span class="optfmt">GU</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">GUM</td>
+<td class="glossary-desc cell-noborder-bothsep-l">316</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.GW"><span class="optfmt">GW</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">GNB</td>
+<td class="glossary-desc cell-noborder-bothsep-l">624
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.GY"><span class="optfmt">GY</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">GUY</td>
+<td class="glossary-desc cell-noborder-bothsep-l">328</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.HK"><span class="optfmt">HK</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">HKG</td>
+<td class="glossary-desc cell-noborder-bothsep-l">344
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.HM"><span class="optfmt">HM</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">HMD</td>
+<td class="glossary-desc cell-noborder-bothsep-l">334</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.HN"><span class="optfmt">HN</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">HND</td>
+<td class="glossary-desc cell-noborder-bothsep-l">340
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.HR"><span class="optfmt">HR</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">HRV</td>
+<td class="glossary-desc cell-noborder-bothsep-l">191</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.HT"><span class="optfmt">HT</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">HTI</td>
+<td class="glossary-desc cell-noborder-bothsep-l">332
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.HU"><span class="optfmt">HU</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">HUN</td>
+<td class="glossary-desc cell-noborder-bothsep-l">348</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.ID"><span class="optfmt">ID</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">IDN</td>
+<td class="glossary-desc cell-noborder-bothsep-l">360
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.IE"><span class="optfmt">IE</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">IRL</td>
+<td class="glossary-desc cell-noborder-bothsep-l">372</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.IL"><span class="optfmt">IL</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">ISR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">376
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.IM"><span class="optfmt">IM</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">IMN</td>
+<td class="glossary-desc cell-noborder-bothsep-l">833</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.IN"><span class="optfmt">IN</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">IND</td>
+<td class="glossary-desc cell-noborder-bothsep-l">356
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.IO"><span class="optfmt">IO</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">IOT</td>
+<td class="glossary-desc cell-noborder-bothsep-l">086</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.IQ"><span class="optfmt">IQ</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">IRQ</td>
+<td class="glossary-desc cell-noborder-bothsep-l">368
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.IR"><span class="optfmt">IR</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">IRN</td>
+<td class="glossary-desc cell-noborder-bothsep-l">364</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.IS"><span class="optfmt">IS</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">ISL</td>
+<td class="glossary-desc cell-noborder-bothsep-l">352
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.IT"><span class="optfmt">IT</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">ITA</td>
+<td class="glossary-desc cell-noborder-bothsep-l">380</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.JE"><span class="optfmt">JE</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">JEY</td>
+<td class="glossary-desc cell-noborder-bothsep-l">832
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.JM"><span class="optfmt">JM</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">JAM</td>
+<td class="glossary-desc cell-noborder-bothsep-l">388</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.JO"><span class="optfmt">JO</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">JOR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">400
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.JP"><span class="optfmt">JP</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">JPN</td>
+<td class="glossary-desc cell-noborder-bothsep-l">392</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.KE"><span class="optfmt">KE</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">KEN</td>
+<td class="glossary-desc cell-noborder-bothsep-l">404
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.KG"><span class="optfmt">KG</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">KGZ</td>
+<td class="glossary-desc cell-noborder-bothsep-l">417</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.KH"><span class="optfmt">KH</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">KHM</td>
+<td class="glossary-desc cell-noborder-bothsep-l">116
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.KI"><span class="optfmt">KI</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">KIR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">296</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.KM"><span class="optfmt">KM</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">COM</td>
+<td class="glossary-desc cell-noborder-bothsep-l">174
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.KN"><span class="optfmt">KN</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">KNA</td>
+<td class="glossary-desc cell-noborder-bothsep-l">659</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.KP"><span class="optfmt">KP</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">PRK</td>
+<td class="glossary-desc cell-noborder-bothsep-l">408
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.KR"><span class="optfmt">KR</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">KOR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">410</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.KW"><span class="optfmt">KW</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">KWT</td>
+<td class="glossary-desc cell-noborder-bothsep-l">414
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.KY"><span class="optfmt">KY</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">CYM</td>
+<td class="glossary-desc cell-noborder-bothsep-l">136</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.KZ"><span class="optfmt">KZ</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">KAZ</td>
+<td class="glossary-desc cell-noborder-bothsep-l">398
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.LA"><span class="optfmt">LA</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">LAO</td>
+<td class="glossary-desc cell-noborder-bothsep-l">418</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.LB"><span class="optfmt">LB</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">LBN</td>
+<td class="glossary-desc cell-noborder-bothsep-l">422
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.LC"><span class="optfmt">LC</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">LCA</td>
+<td class="glossary-desc cell-noborder-bothsep-l">662</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.LI"><span class="optfmt">LI</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">LIE</td>
+<td class="glossary-desc cell-noborder-bothsep-l">438
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.LK"><span class="optfmt">LK</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">LKA</td>
+<td class="glossary-desc cell-noborder-bothsep-l">144</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.LR"><span class="optfmt">LR</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">LBR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">430
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.LS"><span class="optfmt">LS</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">LSO</td>
+<td class="glossary-desc cell-noborder-bothsep-l">426</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.LT"><span class="optfmt">LT</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">LTU</td>
+<td class="glossary-desc cell-noborder-bothsep-l">440
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.LU"><span class="optfmt">LU</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">LUX</td>
+<td class="glossary-desc cell-noborder-bothsep-l">442</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.LV"><span class="optfmt">LV</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">LVA</td>
+<td class="glossary-desc cell-noborder-bothsep-l">428
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.LY"><span class="optfmt">LY</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">LBY</td>
+<td class="glossary-desc cell-noborder-bothsep-l">434</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.MA"><span class="optfmt">MA</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">MAR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">504
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.MC"><span class="optfmt">MC</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">MCO</td>
+<td class="glossary-desc cell-noborder-bothsep-l">492</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.MD"><span class="optfmt">MD</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">MDA</td>
+<td class="glossary-desc cell-noborder-bothsep-l">498
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.ME"><span class="optfmt">ME</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">MNE</td>
+<td class="glossary-desc cell-noborder-bothsep-l">499</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.MF"><span class="optfmt">MF</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">MAF</td>
+<td class="glossary-desc cell-noborder-bothsep-l">663
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.MG"><span class="optfmt">MG</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">MDG</td>
+<td class="glossary-desc cell-noborder-bothsep-l">450</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.MH"><span class="optfmt">MH</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">MHL</td>
+<td class="glossary-desc cell-noborder-bothsep-l">584
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.MK"><span class="optfmt">MK</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">MKD</td>
+<td class="glossary-desc cell-noborder-bothsep-l">807</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.ML"><span class="optfmt">ML</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">MLI</td>
+<td class="glossary-desc cell-noborder-bothsep-l">466
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.MM"><span class="optfmt">MM</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">MMR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">104</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.MN"><span class="optfmt">MN</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">MNG</td>
+<td class="glossary-desc cell-noborder-bothsep-l">496
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.MO"><span class="optfmt">MO</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">MAC</td>
+<td class="glossary-desc cell-noborder-bothsep-l">446</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.MP"><span class="optfmt">MP</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">MNP</td>
+<td class="glossary-desc cell-noborder-bothsep-l">580
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.MQ"><span class="optfmt">MQ</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">MTQ</td>
+<td class="glossary-desc cell-noborder-bothsep-l">474</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.MR"><span class="optfmt">MR</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">MRT</td>
+<td class="glossary-desc cell-noborder-bothsep-l">478
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.MS"><span class="optfmt">MS</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">MSR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">500</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.MT"><span class="optfmt">MT</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">MLT</td>
+<td class="glossary-desc cell-noborder-bothsep-l">470
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.MU"><span class="optfmt">MU</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">MUS</td>
+<td class="glossary-desc cell-noborder-bothsep-l">480</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.MV"><span class="optfmt">MV</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">MDV</td>
+<td class="glossary-desc cell-noborder-bothsep-l">462
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.MW"><span class="optfmt">MW</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">MWI</td>
+<td class="glossary-desc cell-noborder-bothsep-l">454</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.MX"><span class="optfmt">MX</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">MEX</td>
+<td class="glossary-desc cell-noborder-bothsep-l">484
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.MY"><span class="optfmt">MY</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">MYS</td>
+<td class="glossary-desc cell-noborder-bothsep-l">458</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.MZ"><span class="optfmt">MZ</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">MOZ</td>
+<td class="glossary-desc cell-noborder-bothsep-l">508
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.NA"><span class="optfmt">NA</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">NAM</td>
+<td class="glossary-desc cell-noborder-bothsep-l">516</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.NC"><span class="optfmt">NC</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">NCL</td>
+<td class="glossary-desc cell-noborder-bothsep-l">540
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.NE"><span class="optfmt">NE</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">NER</td>
+<td class="glossary-desc cell-noborder-bothsep-l">562</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.NF"><span class="optfmt">NF</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">NFK</td>
+<td class="glossary-desc cell-noborder-bothsep-l">574
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.NG"><span class="optfmt">NG</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">NGA</td>
+<td class="glossary-desc cell-noborder-bothsep-l">566</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.NI"><span class="optfmt">NI</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">NIC</td>
+<td class="glossary-desc cell-noborder-bothsep-l">558
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.NL"><span class="optfmt">NL</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">NLD</td>
+<td class="glossary-desc cell-noborder-bothsep-l">528</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.NO"><span class="optfmt">NO</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">NOR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">578
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.NP"><span class="optfmt">NP</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">NPL</td>
+<td class="glossary-desc cell-noborder-bothsep-l">524</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.NR"><span class="optfmt">NR</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">NRU</td>
+<td class="glossary-desc cell-noborder-bothsep-l">520
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.NU"><span class="optfmt">NU</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">NIU</td>
+<td class="glossary-desc cell-noborder-bothsep-l">570</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.NZ"><span class="optfmt">NZ</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">NZL</td>
+<td class="glossary-desc cell-noborder-bothsep-l">554
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.OM"><span class="optfmt">OM</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">OMN</td>
+<td class="glossary-desc cell-noborder-bothsep-l">512</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.PA"><span class="optfmt">PA</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">PAN</td>
+<td class="glossary-desc cell-noborder-bothsep-l">591
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.PE"><span class="optfmt">PE</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">PER</td>
+<td class="glossary-desc cell-noborder-bothsep-l">604</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.PF"><span class="optfmt">PF</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">PYF</td>
+<td class="glossary-desc cell-noborder-bothsep-l">258
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.PG"><span class="optfmt">PG</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">PNG</td>
+<td class="glossary-desc cell-noborder-bothsep-l">598</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.PH"><span class="optfmt">PH</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">PHL</td>
+<td class="glossary-desc cell-noborder-bothsep-l">608
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.PK"><span class="optfmt">PK</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">PAK</td>
+<td class="glossary-desc cell-noborder-bothsep-l">586</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.PL"><span class="optfmt">PL</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">POL</td>
+<td class="glossary-desc cell-noborder-bothsep-l">616
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.PM"><span class="optfmt">PM</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">SPM</td>
+<td class="glossary-desc cell-noborder-bothsep-l">666</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.PN"><span class="optfmt">PN</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">PCN</td>
+<td class="glossary-desc cell-noborder-bothsep-l">612
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.PR"><span class="optfmt">PR</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">PRI</td>
+<td class="glossary-desc cell-noborder-bothsep-l">630</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.PS"><span class="optfmt">PS</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">PSE</td>
+<td class="glossary-desc cell-noborder-bothsep-l">275
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.PT"><span class="optfmt">PT</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">PRT</td>
+<td class="glossary-desc cell-noborder-bothsep-l">620</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.PW"><span class="optfmt">PW</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">PLW</td>
+<td class="glossary-desc cell-noborder-bothsep-l">585
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.PY"><span class="optfmt">PY</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">PRY</td>
+<td class="glossary-desc cell-noborder-bothsep-l">600</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.QA"><span class="optfmt">QA</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">QAT</td>
+<td class="glossary-desc cell-noborder-bothsep-l">634
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.RE"><span class="optfmt">RE</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">REU</td>
+<td class="glossary-desc cell-noborder-bothsep-l">638</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.RO"><span class="optfmt">RO</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">ROU</td>
+<td class="glossary-desc cell-noborder-bothsep-l">642
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.RS"><span class="optfmt">RS</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">SRB</td>
+<td class="glossary-desc cell-noborder-bothsep-l">688</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.RU"><span class="optfmt">RU</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">RUS</td>
+<td class="glossary-desc cell-noborder-bothsep-l">643
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.RW"><span class="optfmt">RW</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">RWA</td>
+<td class="glossary-desc cell-noborder-bothsep-l">646</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.SA"><span class="optfmt">SA</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">SAU</td>
+<td class="glossary-desc cell-noborder-bothsep-l">682
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.SB"><span class="optfmt">SB</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">SLB</td>
+<td class="glossary-desc cell-noborder-bothsep-l">090</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.SC"><span class="optfmt">SC</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">SYC</td>
+<td class="glossary-desc cell-noborder-bothsep-l">690
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.SD"><span class="optfmt">SD</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">SDN</td>
+<td class="glossary-desc cell-noborder-bothsep-l">729</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.SE"><span class="optfmt">SE</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">SWE</td>
+<td class="glossary-desc cell-noborder-bothsep-l">752
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.SG"><span class="optfmt">SG</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">SGP</td>
+<td class="glossary-desc cell-noborder-bothsep-l">702</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.SH"><span class="optfmt">SH</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">SHN</td>
+<td class="glossary-desc cell-noborder-bothsep-l">654
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.SI"><span class="optfmt">SI</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">SVN</td>
+<td class="glossary-desc cell-noborder-bothsep-l">705</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.SJ"><span class="optfmt">SJ</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">SJM</td>
+<td class="glossary-desc cell-noborder-bothsep-l">744
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.SK"><span class="optfmt">SK</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">SVK</td>
+<td class="glossary-desc cell-noborder-bothsep-l">703</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.SL"><span class="optfmt">SL</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">SLE</td>
+<td class="glossary-desc cell-noborder-bothsep-l">694
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.SM"><span class="optfmt">SM</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">SMR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">674</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.SN"><span class="optfmt">SN</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">SEN</td>
+<td class="glossary-desc cell-noborder-bothsep-l">686
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.SO"><span class="optfmt">SO</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">SOM</td>
+<td class="glossary-desc cell-noborder-bothsep-l">706</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.SR"><span class="optfmt">SR</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">SUR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">740
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.SS"><span class="optfmt">SS</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">SSD</td>
+<td class="glossary-desc cell-noborder-bothsep-l">728</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.ST"><span class="optfmt">ST</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">STP</td>
+<td class="glossary-desc cell-noborder-bothsep-l">678
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.SV"><span class="optfmt">SV</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">SLV</td>
+<td class="glossary-desc cell-noborder-bothsep-l">222</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.SX"><span class="optfmt">SX</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">SXM</td>
+<td class="glossary-desc cell-noborder-bothsep-l">534
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.SY"><span class="optfmt">SY</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">SYR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">760</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.SZ"><span class="optfmt">SZ</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">SWZ</td>
+<td class="glossary-desc cell-noborder-bothsep-l">748
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.TC"><span class="optfmt">TC</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">TCA</td>
+<td class="glossary-desc cell-noborder-bothsep-l">796</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.TD"><span class="optfmt">TD</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">TCD</td>
+<td class="glossary-desc cell-noborder-bothsep-l">148
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.TF"><span class="optfmt">TF</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">ATF</td>
+<td class="glossary-desc cell-noborder-bothsep-l">260</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.TG"><span class="optfmt">TG</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">TGO</td>
+<td class="glossary-desc cell-noborder-bothsep-l">768
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.TH"><span class="optfmt">TH</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">THA</td>
+<td class="glossary-desc cell-noborder-bothsep-l">764</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.TJ"><span class="optfmt">TJ</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">TJK</td>
+<td class="glossary-desc cell-noborder-bothsep-l">762
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.TK"><span class="optfmt">TK</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">TKL</td>
+<td class="glossary-desc cell-noborder-bothsep-l">772</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.TL"><span class="optfmt">TL</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">TLS</td>
+<td class="glossary-desc cell-noborder-bothsep-l">626
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.TM"><span class="optfmt">TM</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">TKM</td>
+<td class="glossary-desc cell-noborder-bothsep-l">795</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.TN"><span class="optfmt">TN</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">TUN</td>
+<td class="glossary-desc cell-noborder-bothsep-l">788
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.TO"><span class="optfmt">TO</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">TON</td>
+<td class="glossary-desc cell-noborder-bothsep-l">776</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.TR"><span class="optfmt">TR</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">TUR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">792
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.TT"><span class="optfmt">TT</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">TTO</td>
+<td class="glossary-desc cell-noborder-bothsep-l">780</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.TV"><span class="optfmt">TV</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">TUV</td>
+<td class="glossary-desc cell-noborder-bothsep-l">798
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.TW"><span class="optfmt">TW</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">TWN</td>
+<td class="glossary-desc cell-noborder-bothsep-l">158</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.TZ"><span class="optfmt">TZ</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">TZA</td>
+<td class="glossary-desc cell-noborder-bothsep-l">834
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.UA"><span class="optfmt">UA</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">UKR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">804</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.UG"><span class="optfmt">UG</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">UGA</td>
+<td class="glossary-desc cell-noborder-bothsep-l">800
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.UM"><span class="optfmt">UM</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">UMI</td>
+<td class="glossary-desc cell-noborder-bothsep-l">581</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.US"><span class="optfmt">US</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">USA</td>
+<td class="glossary-desc cell-noborder-bothsep-l">840
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.UY"><span class="optfmt">UY</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">URY</td>
+<td class="glossary-desc cell-noborder-bothsep-l">858</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.UZ"><span class="optfmt">UZ</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">UZB</td>
+<td class="glossary-desc cell-noborder-bothsep-l">860
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.VA"><span class="optfmt">VA</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">VAT</td>
+<td class="glossary-desc cell-noborder-bothsep-l">336</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.VC"><span class="optfmt">VC</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">VCT</td>
+<td class="glossary-desc cell-noborder-bothsep-l">670
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.VE"><span class="optfmt">VE</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">VEN</td>
+<td class="glossary-desc cell-noborder-bothsep-l">862</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.VG"><span class="optfmt">VG</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">VGB</td>
+<td class="glossary-desc cell-noborder-bothsep-l">092
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.VI"><span class="optfmt">VI</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">VIR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">850</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.VN"><span class="optfmt">VN</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">VNM</td>
+<td class="glossary-desc cell-noborder-bothsep-l">704
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.VU"><span class="optfmt">VU</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">VUT</td>
+<td class="glossary-desc cell-noborder-bothsep-l">548</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.WF"><span class="optfmt">WF</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">WLF</td>
+<td class="glossary-desc cell-noborder-bothsep-l">876
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.WS"><span class="optfmt">WS</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">WSM</td>
+<td class="glossary-desc cell-noborder-bothsep-l">882</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.YE"><span class="optfmt">YE</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">YEM</td>
+<td class="glossary-desc cell-noborder-bothsep-l">887
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.YT"><span class="optfmt">YT</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">MYT</td>
+<td class="glossary-desc cell-noborder-bothsep-l">175</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.ZA"><span class="optfmt">ZA</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">ZAF</td>
+<td class="glossary-desc cell-noborder-bothsep-l">710
+<td class="glossary-name cell-noborder-bothsep-l cell-left-border"><dfn id="glo:opt.ZM"><span class="optfmt">ZM</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">ZMB</td>
+<td class="glossary-desc cell-noborder-bothsep-l">894</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.ZW"><span class="optfmt">ZW</span></dfn></td>
+<td class="glossary-other cell-noborder-bothsep-l">ZWE</td>
+<td class="glossary-desc cell-noborder-bothsep-l">716<td colspan="3" class="cell-left-border"></td></tr></table>
+<p>
+
+<table class="glossary-ruled">
+<caption id="tab:scriptmappings">Table&nbsp;5: Script Mappings</caption>
+<tr class="glossary-ruled">
+<th class="glossary-name cell-noborder-bothsep-l">Alpha-2</th>
+<th class="glossary-symbol cell-noborder-bothsep-c">Numeric</th>
+<th class="glossary-other cell-noborder-bothsep-l">Direction</th>
+<th class="glossary-desc cell-noborder-bothsep-l">Description</th></tr>
+
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Adlm"><span class="optfmt">Adlm</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">166</td>
+<td class="glossary-other cell-noborder-bothsep-l">RL</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Adlam.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Afak"><span class="optfmt">Afak</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">439</td>
+<td class="glossary-other cell-noborder-bothsep-l">varies</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Afaka.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Aghb"><span class="optfmt">Aghb</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">239</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Caucasian Albanian.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Ahom"><span class="optfmt">Ahom</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">338</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Ahom, Tai Ahom.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Arab"><span class="optfmt">Arab</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">160</td>
+<td class="glossary-other cell-noborder-bothsep-l">RL</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Arabic.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Aran"><span class="optfmt">Aran</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">161</td>
+<td class="glossary-other cell-noborder-bothsep-l">RL</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Arabic (Nastaliq variant).</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Armi"><span class="optfmt">Armi</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">124</td>
+<td class="glossary-other cell-noborder-bothsep-l">RL</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Imperial Aramaic.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Armn"><span class="optfmt">Armn</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">230</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Armenian.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Avst"><span class="optfmt">Avst</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">134</td>
+<td class="glossary-other cell-noborder-bothsep-l">RL</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Avestan.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Bali"><span class="optfmt">Bali</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">360</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Balinese.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Bamu"><span class="optfmt">Bamu</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">435</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Bamum.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Bass"><span class="optfmt">Bass</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">259</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Bassa Vah.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Batk"><span class="optfmt">Batk</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">365</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Batak.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Beng"><span class="optfmt">Beng</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">334</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Bhaiksuki.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Blis"><span class="optfmt">Blis</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">550</td>
+<td class="glossary-other cell-noborder-bothsep-l">varies</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Blissymbols.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Bopo"><span class="optfmt">Bopo</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">285</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Bopomofo.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Brah"><span class="optfmt">Brah</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">300</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Brahmi.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Brai"><span class="optfmt">Brai</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">570</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Braille.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Bugi"><span class="optfmt">Bugi</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">367</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Buginese.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Buhd"><span class="optfmt">Buhd</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">372</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Buhid.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Cakm"><span class="optfmt">Cakm</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">349</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Chakma.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Cans"><span class="optfmt">Cans</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">440</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Unified Canadian Aboriginal Syllabics.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Cari"><span class="optfmt">Cari</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">201</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Carian.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Cham"><span class="optfmt">Cham</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">358</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Cham.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Cher"><span class="optfmt">Cher</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">445</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Cherokee.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Cirt"><span class="optfmt">Cirt</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">291</td>
+<td class="glossary-other cell-noborder-bothsep-l">varies</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Cirth.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Copt"><span class="optfmt">Copt</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">204</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Coptic.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Cprt"><span class="optfmt">Cprt</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">403</td>
+<td class="glossary-other cell-noborder-bothsep-l">RL</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Cypriot.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Cyrl"><span class="optfmt">Cyrl</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">220</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Cyrillic.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Cyrs"><span class="optfmt">Cyrs</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">221</td>
+<td class="glossary-other cell-noborder-bothsep-l">varies</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Cyrillic (Old Church Slavonic variant).</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Deva"><span class="optfmt">Deva</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">315</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Devanagari (Nagari).</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Dsrt"><span class="optfmt">Dsrt</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">250</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Deseret (Mormon).</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Dupl"><span class="optfmt">Dupl</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">755</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Duployan shorthand, Duployan stenography.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Egyd"><span class="optfmt">Egyd</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">070</td>
+<td class="glossary-other cell-noborder-bothsep-l">RL</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Egyptian demotic.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Egyh"><span class="optfmt">Egyh</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">060</td>
+<td class="glossary-other cell-noborder-bothsep-l">RL</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Egyptian hieratic.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Egyp"><span class="optfmt">Egyp</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">050</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Egyptian hieroglyphs.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Elba"><span class="optfmt">Elba</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">226</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Elbasan.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Ethi"><span class="optfmt">Ethi</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">430</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Ethiopic (Ge’ez).</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Geok"><span class="optfmt">Geok</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">241</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Khutsuri (Asomtavruli and Nuskhuri).</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Geor"><span class="optfmt">Geor</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">240</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Georgian (Mkhedruli).</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Glag"><span class="optfmt">Glag</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">225</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Glagolitic.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Goth"><span class="optfmt">Goth</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">206</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Gothic.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Gran"><span class="optfmt">Gran</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">343</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Grantha.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Grek"><span class="optfmt">Grek</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">200</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Greek.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Gujr"><span class="optfmt">Gujr</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">320</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Gujarati.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Guru"><span class="optfmt">Guru</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">310</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Gurmukhi.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Hanb"><span class="optfmt">Hanb</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">503</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Han with Bopomofo (alias for Han + Bopomofo).</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Hang"><span class="optfmt">Hang</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">286</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Hangul.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Hani"><span class="optfmt">Hani</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">500</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Han (Hanzi, Kanji, Hanja).</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Hano"><span class="optfmt">Hano</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">371</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Hanunoo.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Hans"><span class="optfmt">Hans</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">501</td>
+<td class="glossary-other cell-noborder-bothsep-l">varies</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Han (Simplified variant).</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Hant"><span class="optfmt">Hant</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">502</td>
+<td class="glossary-other cell-noborder-bothsep-l">varies</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Han (Traditional variant).</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Hatr"><span class="optfmt">Hatr</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">127</td>
+<td class="glossary-other cell-noborder-bothsep-l">RL</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Hatran.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Hebr"><span class="optfmt">Hebr</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">125</td>
+<td class="glossary-other cell-noborder-bothsep-l">RL</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Hebrew.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Hira"><span class="optfmt">Hira</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">410</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Hiragana.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Hluw"><span class="optfmt">Hluw</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">080</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Anatolian Hieroglyphs (Luwian Hieroglyphs, Hittite Hieroglyphs).</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Hmng"><span class="optfmt">Hmng</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">450</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Pahawh Hmong.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Hrkt"><span class="optfmt">Hrkt</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">412</td>
+<td class="glossary-other cell-noborder-bothsep-l">varies</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Japanese syllabaries (alias for Hiragana + Katakana).</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Hung"><span class="optfmt">Hung</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">176</td>
+<td class="glossary-other cell-noborder-bothsep-l">RL</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Old Hungarian (Hungarian Runic).</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Inds"><span class="optfmt">Inds</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">610</td>
+<td class="glossary-other cell-noborder-bothsep-l">RL</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Indus (Harappan).</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Ital"><span class="optfmt">Ital</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">210</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Old Italic (Etruscan, Oscan, etc.)</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Jamo"><span class="optfmt">Jamo</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">284</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Jamo (alias for Jamo subset of Hangul).</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Java"><span class="optfmt">Java</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">361</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Javanese.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Jpan"><span class="optfmt">Jpan</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">413</td>
+<td class="glossary-other cell-noborder-bothsep-l">varies</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Japanese (alias for Han + Hiragana + Katakana).</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Jurc"><span class="optfmt">Jurc</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">510</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Jurchen.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Kali"><span class="optfmt">Kali</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">357</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Kayah Li.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Kana"><span class="optfmt">Kana</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">411</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Katakana.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Khar"><span class="optfmt">Khar</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">305</td>
+<td class="glossary-other cell-noborder-bothsep-l">RL</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Kharoshthi.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Khmr"><span class="optfmt">Khmr</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">355</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Khmer.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Khoj"><span class="optfmt">Khoj</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">322</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Khojki.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Kitl"><span class="optfmt">Kitl</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">505</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Khitan large script.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Kits"><span class="optfmt">Kits</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">288</td>
+<td class="glossary-other cell-noborder-bothsep-l">TB</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Khitan small script.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Knda"><span class="optfmt">Knda</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">345</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Kannada.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Kore"><span class="optfmt">Kore</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">287</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Korean (alias for Hangul + Han).</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Kpel"><span class="optfmt">Kpel</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">436</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Kpelle.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Kthi"><span class="optfmt">Kthi</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">317</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Kaithi.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Lana"><span class="optfmt">Lana</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">351</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Tai Tham (Lanna).</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Laoo"><span class="optfmt">Laoo</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">356</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Lao.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Latf"><span class="optfmt">Latf</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">217</td>
+<td class="glossary-other cell-noborder-bothsep-l">varies</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Latin (Fraktur variant).</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Latg"><span class="optfmt">Latg</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">216</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Latin (Gaelic variant).</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Latn"><span class="optfmt">Latn</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">215</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Latin.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Leke"><span class="optfmt">Leke</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">364</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Leke.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Lepc"><span class="optfmt">Lepc</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">335</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Lepcha.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Limb"><span class="optfmt">Limb</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">336</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Limbu.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Lina"><span class="optfmt">Lina</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">400</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Linear A.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Linb"><span class="optfmt">Linb</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">401</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Linear B.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Lisu"><span class="optfmt">Lisu</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">399</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Lisu (Fraser).</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Loma"><span class="optfmt">Loma</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">437</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Loma.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Lyci"><span class="optfmt">Lyci</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">202</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Lycian.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Lydi"><span class="optfmt">Lydi</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">116</td>
+<td class="glossary-other cell-noborder-bothsep-l">RL</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Lydian.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Mahj"><span class="optfmt">Mahj</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">314</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Mahajani.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Mand"><span class="optfmt">Mand</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">140</td>
+<td class="glossary-other cell-noborder-bothsep-l">RL</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Mandaic, Mandaean.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Mani"><span class="optfmt">Mani</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">139</td>
+<td class="glossary-other cell-noborder-bothsep-l">RL</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Manichaean.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Marc"><span class="optfmt">Marc</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">332</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Marchen.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Maya"><span class="optfmt">Maya</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">090</td>
+<td class="glossary-other cell-noborder-bothsep-l">varies</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Mayan hieroglyphs.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Mend"><span class="optfmt">Mend</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">438</td>
+<td class="glossary-other cell-noborder-bothsep-l">RL</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Mende Kikakui.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Merc"><span class="optfmt">Merc</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">101</td>
+<td class="glossary-other cell-noborder-bothsep-l">RL</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Meroitic Cursive.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Mero"><span class="optfmt">Mero</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">100</td>
+<td class="glossary-other cell-noborder-bothsep-l">RL</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Meroitic Hieroglyphs.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Mlym"><span class="optfmt">Mlym</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">347</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Malayalam.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Modi"><span class="optfmt">Modi</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">324</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Modi.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Mong"><span class="optfmt">Mong</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">145</td>
+<td class="glossary-other cell-noborder-bothsep-l">TB</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Mongolian.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Moon"><span class="optfmt">Moon</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">218</td>
+<td class="glossary-other cell-noborder-bothsep-l">varies</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Moon (Moon code, Moon script, Moon type).</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Mroo"><span class="optfmt">Mroo</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">199</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Mro, Mru.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Mtei"><span class="optfmt">Mtei</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">337</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Meitei Mayek (Meithei, Meetei).</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Mult"><span class="optfmt">Mult</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">323</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Multani.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Mymr"><span class="optfmt">Mymr</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">350</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Myanmar (Burmese).</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Narb"><span class="optfmt">Narb</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">106</td>
+<td class="glossary-other cell-noborder-bothsep-l">RL</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Old North Arabian (Ancient North Arabian).</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Nbat"><span class="optfmt">Nbat</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">159</td>
+<td class="glossary-other cell-noborder-bothsep-l">RL</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Nabataean.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Newa"><span class="optfmt">Newa</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">333</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Newa, Newar, Newari.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Nkgb"><span class="optfmt">Nkgb</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">420</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Nakhi Geba.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Nkoo"><span class="optfmt">Nkoo</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">165</td>
+<td class="glossary-other cell-noborder-bothsep-l">RL</td>
+<td class="glossary-desc cell-noborder-bothsep-l">N’Ko.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Nshu"><span class="optfmt">Nshu</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">499</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Nushu.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Ogam"><span class="optfmt">Ogam</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">212</td>
+<td class="glossary-other cell-noborder-bothsep-l">varies</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Ogham.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Olck"><span class="optfmt">Olck</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">261</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Ol Chiki.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Orkh"><span class="optfmt">Orkh</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">175</td>
+<td class="glossary-other cell-noborder-bothsep-l">RL</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Old Turkic, Orkhon Runic.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Orya"><span class="optfmt">Orya</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">327</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Oriya.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Osge"><span class="optfmt">Osge</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">219</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Osage.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Osma"><span class="optfmt">Osma</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">260</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Osmanya.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Palm"><span class="optfmt">Palm</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">126</td>
+<td class="glossary-other cell-noborder-bothsep-l">RL</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Palmyrene.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Pauc"><span class="optfmt">Pauc</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">263</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Pau Cin Hau.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Perm"><span class="optfmt">Perm</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">227</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Old Permic.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Phag"><span class="optfmt">Phag</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">331</td>
+<td class="glossary-other cell-noborder-bothsep-l">TB</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Phags-pa.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Phli"><span class="optfmt">Phli</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">131</td>
+<td class="glossary-other cell-noborder-bothsep-l">RL</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Inscriptional Pahlavi.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Phlp"><span class="optfmt">Phlp</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">132</td>
+<td class="glossary-other cell-noborder-bothsep-l">RL</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Psalter Pahlavi.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Phlv"><span class="optfmt">Phlv</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">133</td>
+<td class="glossary-other cell-noborder-bothsep-l">RL</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Book Pahlavi.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Phnx"><span class="optfmt">Phnx</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">115</td>
+<td class="glossary-other cell-noborder-bothsep-l">RL</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Phoenician.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Piqd"><span class="optfmt">Piqd</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">293</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Klingon (KLI plqaD).</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Plrd"><span class="optfmt">Plrd</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">282</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Miao (Pollard).</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Prti"><span class="optfmt">Prti</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">130</td>
+<td class="glossary-other cell-noborder-bothsep-l">RL</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Inscriptional Parthian.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Qaaa"><span class="optfmt">Qaaa</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">900</td>
+<td class="glossary-other cell-noborder-bothsep-l">varies</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Reserved for private use (start).</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Qaai"><span class="optfmt">Qaai</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">908</td>
+<td class="glossary-other cell-noborder-bothsep-l">varies</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Private use.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Qabx"><span class="optfmt">Qabx</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">949</td>
+<td class="glossary-other cell-noborder-bothsep-l">varies</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Reserved for private use (end).</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Rjng"><span class="optfmt">Rjng</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">363</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Rejang (Redjang, Kaganga).</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Roro"><span class="optfmt">Roro</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">620</td>
+<td class="glossary-other cell-noborder-bothsep-l">varies</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Rongorongo.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Runr"><span class="optfmt">Runr</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">211</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Runic.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Samr"><span class="optfmt">Samr</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">123</td>
+<td class="glossary-other cell-noborder-bothsep-l">RL</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Samaritan.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Sara"><span class="optfmt">Sara</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">292</td>
+<td class="glossary-other cell-noborder-bothsep-l">varies</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Sarati.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Sarb"><span class="optfmt">Sarb</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">105</td>
+<td class="glossary-other cell-noborder-bothsep-l">RL</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Old South Arabian.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Saur"><span class="optfmt">Saur</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">344</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Saurashtra.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Sgnw"><span class="optfmt">Sgnw</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">095</td>
+<td class="glossary-other cell-noborder-bothsep-l">TB</td>
+<td class="glossary-desc cell-noborder-bothsep-l">SignWriting.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Shaw"><span class="optfmt">Shaw</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">281</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Shavian (Shaw).</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Shrd"><span class="optfmt">Shrd</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">319</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Sharada.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Sidd"><span class="optfmt">Sidd</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">302</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Siddham.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Sind"><span class="optfmt">Sind</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">318</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Khudawadi, Sindhi.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Sinh"><span class="optfmt">Sinh</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">348</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Sinhala.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Sora"><span class="optfmt">Sora</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">398</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Sora Sompeng.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Sund"><span class="optfmt">Sund</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">362</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Sundanese.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Sylo"><span class="optfmt">Sylo</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">316</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Syloti Nagri.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Syrc"><span class="optfmt">Syrc</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">135</td>
+<td class="glossary-other cell-noborder-bothsep-l">RL</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Syriac.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Syre"><span class="optfmt">Syre</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">138</td>
+<td class="glossary-other cell-noborder-bothsep-l">RL</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Syriac (Estrangelo variant).</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Syrj"><span class="optfmt">Syrj</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">137</td>
+<td class="glossary-other cell-noborder-bothsep-l">RL</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Syriac (Western variant).</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Syrn"><span class="optfmt">Syrn</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">136</td>
+<td class="glossary-other cell-noborder-bothsep-l">RL</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Syriac (Eastern variant).</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Tagb"><span class="optfmt">Tagb</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">373</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Tagbanwa.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Takr"><span class="optfmt">Takr</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">321</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Takri.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Tale"><span class="optfmt">Tale</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">353</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Tai Le.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Talu"><span class="optfmt">Talu</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">354</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">New Tai Lue.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Taml"><span class="optfmt">Taml</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">346</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Tamil.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Tang"><span class="optfmt">Tang</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">520</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Tangut.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Tavt"><span class="optfmt">Tavt</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">359</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Tai Viet.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Telu"><span class="optfmt">Telu</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">340</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Telugu.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Teng"><span class="optfmt">Teng</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">290</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Tengwar.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Tfng"><span class="optfmt">Tfng</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">120</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Tifinagh (Berber).</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Tglg"><span class="optfmt">Tglg</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">370</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Tagalog (Baybayin, Alibata).</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Thaa"><span class="optfmt">Thaa</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">170</td>
+<td class="glossary-other cell-noborder-bothsep-l">RL</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Thaana.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Thai"><span class="optfmt">Thai</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">352</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Thai.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Tibt"><span class="optfmt">Tibt</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">330</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Tibetan.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Tirh"><span class="optfmt">Tirh</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">326</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Tirhuta.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Ugar"><span class="optfmt">Ugar</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">040</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Ugaritic.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Vaii"><span class="optfmt">Vaii</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">470</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Vai.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Visp"><span class="optfmt">Visp</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">280</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Visible Speech.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Wara"><span class="optfmt">Wara</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">262</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Warang Citi (Varang Kshiti).</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Wole"><span class="optfmt">Wole</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">480</td>
+<td class="glossary-other cell-noborder-bothsep-l">RL</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Woleai.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Xpeo"><span class="optfmt">Xpeo</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">030</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Old Persian.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Xsux"><span class="optfmt">Xsux</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">020</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Cuneiform, Sumero-Akkadian.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Yiii"><span class="optfmt">Yiii</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">460</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Yi.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Zinh"><span class="optfmt">Zinh</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">994</td>
+<td class="glossary-other cell-noborder-bothsep-l">inherited</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Inherited script.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Zmth"><span class="optfmt">Zmth</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">995</td>
+<td class="glossary-other cell-noborder-bothsep-l">LR</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Mathematical notation.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Zsye"><span class="optfmt">Zsye</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">993</td>
+<td class="glossary-other cell-noborder-bothsep-l">varies</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Symbols (emoji variant).</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Zsym"><span class="optfmt">Zsym</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">996</td>
+<td class="glossary-other cell-noborder-bothsep-l">varies</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Symbols.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Zxxx"><span class="optfmt">Zxxx</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">997</td>
+<td class="glossary-other cell-noborder-bothsep-l">varies</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Unwritten documents.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Zyyy"><span class="optfmt">Zyyy</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">998</td>
+<td class="glossary-other cell-noborder-bothsep-l">varies</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Undetermined script.</tr>
+<tr>
+<td class="glossary-name cell-noborder-bothsep-l"><dfn id="glo:opt.Zzzz"><span class="optfmt">Zzzz</span></dfn></td>
+<td class="glossary-symbol cell-noborder-bothsep-c">999</td>
+<td class="glossary-other cell-noborder-bothsep-l">varies</td>
+<td class="glossary-desc cell-noborder-bothsep-l">Uncoded script.</tr></table>
+<p>
+
+</section><!-- end of section sec:regscriptmappings -->
+
+<section id="symbols"><!-- start of section symbols --><div class="tomain"><a href="#main">[top]</a></div>
+<h1><!-- start of chapter header -->Symbols<div class="labellink"><a href="#symbols">[link]</a></div></h1><!-- end of chapter header -->
+
+<dl class="inlineblock">
+<dt><dfn id="glo:sym.definition">📌</dfn></dt>
+<dd>The syntax and usage of a command, environment or option etc.</dd>
+<dt><dfn id="glo:sym.important">ℹ</dfn></dt>
+<dd>An important message.</dd>
+<dt><dfn id="glo:sym.information">🛈</dfn></dt>
+<dd>Prominent information.</dd>
+<dt><dfn id="glo:sym.code">🖹</dfn></dt>
+<dd>LaTeX code to insert into your document.</dd>
+<dt><dfn id="glo:sym.result">🖺</dfn></dt>
+<dd>How the example code should appear in the PDF.</dd>
+<dt><dfn id="glo:sym.terminal">〉_</dfn></dt>
+<dd>A command-line application invocation that needs to be entered into a <a href="https://www.dickimaw-books.com/latex/novices/html/terminal.html">terminal or command prompt</a>.</dd>
+
+</dl>
+
+</section><!-- end of section symbols -->
+
+<section id="glossary"><!-- start of section glossary --><div class="tomain"><a href="#main">[top]</a></div>
+<h1><!-- start of chapter header -->Glossary<div class="labellink"><a href="#glossary">[link]</a></div></h1><!-- end of chapter header -->
+
+<dl>
+<dt><a id="wrglossary.1417"></a><dfn id="glo:dual.cli">Command-line interface (CLI)</dfn></dt>
+<dd>An application that doesn’t have a graphical user interface. That is, an application that doesn’t have any windows, buttons or menus and can be run in <a href="https://www.dickimaw-books.com/latex/novices/html/terminal.html">a command prompt or terminal</a>.</dd>
+<dt><a id="wrglossary.1418"></a><dfn id="glo:dual.shellescape">Shell escape</dfn></dt>
+<dd>TeX has the ability to run <a id="wrglossary.1419"></a><a href="#glo:dual.cli">CLI</a> applications while it’s typesetting a document. Whilst this is a convenient way of using tools to help build the document, it’s a security risk. To help protect users from arbitrary―and potentially dangerous―code from begin executed, TeX has a restricted mode, where only trusted applications are allowed to run. This is usually the default mode, but your TeX installation may be set up so that the shell escape is disabled by default. The unrestricted mode allows you to run any application from the shell escape. Take care about enabling this option. If you receive a document or package from an untrusted source, first run TeX with the shell escape disabled or in restricted mode and search the <a id="wrglossary.1420"></a><a href="#glo:ext.log"><span class="extfmt">log</span></a> file for <span class="qt">“runsystemâ€</span> before using the unrestricted mode. Note that LuaLaTeX additionally requires the <a id="wrglossary.1421"></a><a href="#glo:pkg.shellesc"><span class="styfmt">shellesc</span></a> package.</dd>
+
+</dl>
+
+</section><!-- end of section glossary -->
+
+<section id="cmdsummary"><!-- start of section cmdsummary --><div class="tomain"><a href="#main">[top]</a></div>
+<h1><!-- start of chapter header -->Command Summary<div class="labellink"><a href="#cmdsummary">[link]</a></div></h1><!-- end of chapter header -->
+
+</section><!-- end of section cmdsummary -->
+
+<section id="summary.index@"><!-- start of section summary.index@ --><div class="tomain"><a href="#main">[top]</a></div>
+<h2><!-- start of section header -->@<div class="labellink"><a href="#summary.index@">[link]</a></div></h2><!-- end of section header -->
+<div class="defnbox"><a id="wrglossary.1422"></a><a href="#glo:@tracklang@declareoption"><code class="csfmt">\@tracklang@declareoption</code></a><code class="code">{<span class="meta">〈<em class="metainner">dialect</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1423"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> v1.1+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Provided by <a id="wrglossary.1424"></a><a href="#glo:pkg.tracklang"><span class="filefmt">tracklang.sty</span></a> to declare <span class="meta">〈<em class="metainner">dialect</em>〉</span> as a package option that tracks <span class="meta">〈<em class="metainner">dialect</em>〉</span>. Provided by <a id="wrglossary.1425"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a>, if not already defined, to ignore its argument. <a href="#sec:generic">§3</a>; <a href="#wrglossary.283">19</a><p>
+<div class="defnbox"><a id="wrglossary.1426"></a><a href="#glo:@tracklang@for"><code class="csfmt">\@tracklang@for</code></a><code class="code"><span class="meta">〈<em class="metainner">cs</em>〉</span>:=<span class="meta">〈<em class="metainner">list</em>〉</span><span class="cmdfmt">\do</span>{<span class="meta">〈<em class="metainner">body</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1427"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.0+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+As LaTeX’s <a id="wrglossary.1428"></a><a href="#glo:@for"><code class="csfmt">\@for</code></a>. <a href="#sec:user">§5</a>; <a href="#wrglossary.649">37</a><p>
+<div class="defnbox"><a id="wrglossary.1429"></a><a href="#glo:@tracklang@prelangpkgcheck@hook"><code class="csfmt">\@tracklang@prelangpkgcheck@hook</code></a></div><!-- end of defnbox -->
+<p>
+If defined before <a id="wrglossary.1430"></a><a href="#glo:pkg.tracklang"><span class="filefmt">tracklang.sty</span></a> v1.3.8+ is loaded, this command will be done after package options have been processed but before the check for language packages, such as <a id="wrglossary.1431"></a><a href="#glo:pkg.babel"><span class="styfmt">babel</span></a> and <a id="wrglossary.1432"></a><a href="#glo:pkg.polyglossia"><span class="styfmt">polyglossia</span></a>. <a href="#sec:langsty">§6</a>; <a href="#wrglossary.1198">71</a><p>
+
+</section><!-- end of section summary.index@ -->
+
+<section id="summary.index6553600"><!-- start of section summary.index6553600 --><div class="tomain"><a href="#main">[top]</a></div>
+<h2><!-- start of section header -->A<div class="labellink"><a href="#summary.index6553600">[link]</a></div></h2><!-- end of section header -->
+<div class="defnbox"><a id="wrglossary.1433"></a><dfn id="glo:AddTrackedCountryIsoCode"><code class="csfmt">\AddTrackedCountryIsoCode</code></dfn><code class="code">{<span class="meta">〈<em class="metainner">language</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1434"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Adds the <a id="wrglossary.1435"></a><a href="#glo:idx.3166-1">ISO <span class="mbox">3166-1</span></a> code.<p>
+<div class="defnbox"><a id="wrglossary.1436"></a><a href="#glo:AddTrackedDialect"><code class="csfmt">\AddTrackedDialect</code></a><code class="code">{<span class="meta">〈<em class="metainner">dialect label</em>〉</span>}{<span class="meta">〈<em class="metainner">root language label</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1437"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.0+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Tracks a dialect. This command defines <a id="wrglossary.1438"></a><a href="#glo:TrackLangLastTrackedDialect"><code class="csfmt">\TrackLangLastTrackedDialect</code></a> to provide a convenient way to reference the last dialect to be tracked. <a href="#sec:newlanguages">§6.5</a>; <a href="#wrglossary.1283">75</a><p>
+<div class="defnbox"><a id="wrglossary.1439"></a><dfn id="glo:AddTrackedIsoLanguage"><code class="csfmt">\AddTrackedIsoLanguage</code></dfn><code class="code">{<span class="meta">〈<em class="metainner">code type</em>〉</span>}{<span class="meta">〈<em class="metainner">code</em>〉</span>}{<span class="meta">〈<em class="metainner">language</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1440"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.0+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Adds a mapping between the given <a id="wrglossary.1441"></a><a href="#glo:ISO">ISO</a> code and language name.<p>
+<div class="defnbox"><a id="wrglossary.1442"></a><a href="#glo:AddTrackedLanguage"><code class="csfmt">\AddTrackedLanguage</code></a><code class="code">{<span class="meta">〈<em class="metainner">root language label</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1443"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.0+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Shortcut for <code class="code"><a id="wrglossary.1444"></a><a href="#glo:AddTrackedDialect"><code class="csfmt">\AddTrackedDialect</code></a>{<span class="meta">〈<em class="metainner">root language label</em>〉</span>}{<span class="meta">〈<em class="metainner">root language label</em>〉</span>}</code>. <a href="#sec:newlanguages">§6.5</a>; <a href="#wrglossary.1284">75</a><p>
+<div class="defnbox"><a id="wrglossary.1445"></a><a href="#glo:AddTrackedLanguageIsoCodes"><code class="csfmt">\AddTrackedLanguageIsoCodes</code></a><code class="code">{<span class="meta">〈<em class="metainner">root language label</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1446"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Adds the <a id="wrglossary.1447"></a><a href="#glo:idx.639-1">ISO <span class="mbox">639-1</span></a>, <a id="wrglossary.1448"></a><a href="#glo:idx.639-2"><span class="mbox">639-2</span></a> and <a id="wrglossary.1449"></a><a href="#glo:idx.639-3"><span class="mbox">639-3</span></a> codes, which must have previously been declared using <a id="wrglossary.1450"></a><a href="#glo:TrackLangNewLanguage"><code class="csfmt">\TrackLangNewLanguage</code></a>. <a href="#sec:definelabels">§6.6</a>; <a href="#wrglossary.1331">77</a><p>
+<div class="defnbox"><a id="wrglossary.1451"></a><a href="#glo:AnyTrackedLanguages"><code class="csfmt">\AnyTrackedLanguages</code></a><code class="code">{<span class="meta">〈<em class="metainner">true</em>〉</span>}{<span class="meta">〈<em class="metainner">false</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1452"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.0+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Expands to <span class="meta">〈<em class="metainner">true</em>〉</span> if there are any tracked languages, otherwise expands to <span class="meta">〈<em class="metainner">false</em>〉</span>. <a href="#sec:user">§5</a>; <a href="#wrglossary.618">35</a><p>
+
+</section><!-- end of section summary.index6553600 -->
+
+<section id="summary.index6684672"><!-- start of section summary.index6684672 --><div class="tomain"><a href="#main">[top]</a></div>
+<h2><!-- start of section header -->C<div class="labellink"><a href="#summary.index6684672">[link]</a></div></h2><!-- end of section header -->
+<div class="defnbox"><a id="wrglossary.1453"></a><a href="#glo:CurrentTrackedDialect"><code class="csfmt">\CurrentTrackedDialect</code></a><span class="floatrightbox"><a id="wrglossary.1454"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Defined by <a id="wrglossary.1455"></a><a href="#glo:SetCurrentTrackedDialect"><code class="csfmt">\SetCurrentTrackedDialect</code></a> to the dialect label, which may be the supplied <span class="meta">〈<em class="metainner">dialect</em>〉</span> label or the mapped label or, if <span class="meta">〈<em class="metainner">dialect</em>〉</span> is a root language label, the last tracked dialect for the given root language. <a href="#sec:user">§5</a>; <a href="#wrglossary.778">46</a><p>
+<div class="defnbox"><a id="wrglossary.1456"></a><a href="#glo:CurrentTrackedDialectAdditional"><code class="csfmt">\CurrentTrackedDialectAdditional</code></a><span class="floatrightbox"><a id="wrglossary.1457"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Defined by <a id="wrglossary.1458"></a><a href="#glo:SetCurrentTrackedDialect"><code class="csfmt">\SetCurrentTrackedDialect</code></a> to the additional part associated with the dialect (may be empty). <a href="#sec:user">§5</a>; <a href="#wrglossary.790">46</a><p>
+<div class="defnbox"><a id="wrglossary.1459"></a><a href="#glo:CurrentTrackedDialectModifier"><code class="csfmt">\CurrentTrackedDialectModifier</code></a><span class="floatrightbox"><a id="wrglossary.1460"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Defined by <a id="wrglossary.1461"></a><a href="#glo:SetCurrentTrackedDialect"><code class="csfmt">\SetCurrentTrackedDialect</code></a> to the associated modifier (may be empty). <a href="#sec:user">§5</a>; <a href="#wrglossary.787">46</a><p>
+<div class="defnbox"><a id="wrglossary.1462"></a><a href="#glo:CurrentTrackedDialectScript"><code class="csfmt">\CurrentTrackedDialectScript</code></a><span class="floatrightbox"><a id="wrglossary.1463"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Defined by <a id="wrglossary.1464"></a><a href="#glo:SetCurrentTrackedDialect"><code class="csfmt">\SetCurrentTrackedDialect</code></a> to the script associated with the dialect, or to the default script for the language. <a href="#sec:user">§5</a>; <a href="#wrglossary.793">47</a><p>
+<div class="defnbox"><a id="wrglossary.1465"></a><a href="#glo:CurrentTrackedDialectSubLang"><code class="csfmt">\CurrentTrackedDialectSubLang</code></a><span class="floatrightbox"><a id="wrglossary.1466"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Defined by <a id="wrglossary.1467"></a><a href="#glo:SetCurrentTrackedDialect"><code class="csfmt">\SetCurrentTrackedDialect</code></a> to the sub language associated with the dialect (may be empty). <a href="#sec:user">§5</a>; <a href="#wrglossary.789">46</a><p>
+<div class="defnbox"><a id="wrglossary.1468"></a><a href="#glo:CurrentTrackedDialectVariant"><code class="csfmt">\CurrentTrackedDialectVariant</code></a><span class="floatrightbox"><a id="wrglossary.1469"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Defined by <a id="wrglossary.1470"></a><a href="#glo:SetCurrentTrackedDialect"><code class="csfmt">\SetCurrentTrackedDialect</code></a> to the associated variant (may be empty). <a href="#sec:user">§5</a>; <a href="#wrglossary.788">46</a><p>
+<div class="defnbox"><a id="wrglossary.1471"></a><a href="#glo:CurrentTrackedIsoCode"><code class="csfmt">\CurrentTrackedIsoCode</code></a><span class="floatrightbox"><a id="wrglossary.1472"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Defined by <a id="wrglossary.1473"></a><a href="#glo:SetCurrentTrackedDialect"><code class="csfmt">\SetCurrentTrackedDialect</code></a> to the <a id="wrglossary.1474"></a><a href="#glo:idx.639-1">ISO <span class="mbox">639-1</span></a> or <a id="wrglossary.1475"></a><a href="#glo:idx.639-2"><span class="mbox">639-2</span></a> or <a id="wrglossary.1476"></a><a href="#glo:idx.639-3"><span class="mbox">639-3</span></a> language code (may be empty). <a href="#sec:user">§5</a>; <a href="#wrglossary.783">46</a><p>
+<div class="defnbox"><a id="wrglossary.1477"></a><a href="#glo:CurrentTrackedLanguage"><code class="csfmt">\CurrentTrackedLanguage</code></a><span class="floatrightbox"><a id="wrglossary.1478"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Defined by <a id="wrglossary.1479"></a><a href="#glo:SetCurrentTrackedDialect"><code class="csfmt">\SetCurrentTrackedDialect</code></a> to the associated root language label. <a href="#sec:user">§5</a>; <a href="#wrglossary.779">46</a><p>
+<div class="defnbox"><a id="wrglossary.1480"></a><a href="#glo:CurrentTrackedLanguageTag"><code class="csfmt">\CurrentTrackedLanguageTag</code></a><span class="floatrightbox"><a id="wrglossary.1481"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Defined by <a id="wrglossary.1482"></a><a href="#glo:SetCurrentTrackedDialect"><code class="csfmt">\SetCurrentTrackedDialect</code></a> to the language tag that identifies the dialect or <a id="wrglossary.1483"></a><a href="#glo:opt.undetermined"><span class="optfmt">und</span></a> if no match. <a href="#sec:user">§5</a>; <a href="#wrglossary.791">47</a><p>
+<div class="defnbox"><a id="wrglossary.1484"></a><a href="#glo:CurrentTrackedRegion"><code class="csfmt">\CurrentTrackedRegion</code></a><span class="floatrightbox"><a id="wrglossary.1485"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Defined by <a id="wrglossary.1486"></a><a href="#glo:SetCurrentTrackedDialect"><code class="csfmt">\SetCurrentTrackedDialect</code></a> to the <a id="wrglossary.1487"></a><a href="#glo:idx.3166-1">ISO <span class="mbox">3166-1</span></a> region code associated with the dialect (may be empty). <a href="#sec:user">§5</a>; <a href="#wrglossary.780">46</a><p>
+<div class="defnbox"><a id="wrglossary.1488"></a><a href="#glo:CurrentTrackedTag"><code class="csfmt">\CurrentTrackedTag</code></a><span class="floatrightbox"><a id="wrglossary.1489"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.0+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Expands to the current tracked tag. <a href="#sec:user">§5</a>; <a href="#wrglossary.766">45</a><p>
+
+</section><!-- end of section summary.index6684672 -->
+
+<section id="summary.index6881280"><!-- start of section summary.index6881280 --><div class="tomain"><a href="#main">[top]</a></div>
+<h2><!-- start of section header -->F<div class="labellink"><a href="#summary.index6881280">[link]</a></div></h2><!-- end of section header -->
+<div class="defnbox"><a id="wrglossary.1490"></a><a href="#glo:ForEachTrackedDialect"><code class="csfmt">\ForEachTrackedDialect</code></a><code class="code">{<span class="meta">〈<em class="metainner">cs</em>〉</span>}{<span class="meta">〈<em class="metainner">body</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1491"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.0+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Iterates through the list of tracked dialects. On each iteration <span class="meta">〈<em class="metainner">cs</em>〉</span> is set to the dialect tag and <span class="meta">〈<em class="metainner">body</em>〉</span> is performed. <a href="#sec:user">§5</a>; <a href="#wrglossary.646">37</a><p>
+<div class="defnbox"><a id="wrglossary.1492"></a><a href="#glo:ForEachTrackedLanguage"><code class="csfmt">\ForEachTrackedLanguage</code></a><code class="code">{<span class="meta">〈<em class="metainner">cs</em>〉</span>}{<span class="meta">〈<em class="metainner">body</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1493"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.0+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Iterates through the list of tracked languages. On each iteration <span class="meta">〈<em class="metainner">cs</em>〉</span> is set to the language tag and <span class="meta">〈<em class="metainner">body</em>〉</span> is performed. <a href="#sec:user">§5</a>; <a href="#wrglossary.647">37</a><p>
+
+</section><!-- end of section summary.index6881280 -->
+
+<section id="summary.index6946816"><!-- start of section summary.index6946816 --><div class="tomain"><a href="#main">[top]</a></div>
+<h2><!-- start of section header -->G<div class="labellink"><a href="#summary.index6946816">[link]</a></div></h2><!-- end of section header -->
+<div class="defnbox"><a id="wrglossary.1494"></a><a href="#glo:GetTrackedDialectAdditional"><code class="csfmt">\GetTrackedDialectAdditional</code></a><code class="code">{<span class="meta">〈<em class="metainner">dialect</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1495"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Expands to the extra information for <span class="meta">〈<em class="metainner">dialect</em>〉</span>. <a href="#sec:user">§5</a>; <a href="#wrglossary.762">44</a><p>
+<div class="defnbox"><a id="wrglossary.1496"></a><a href="#glo:GetTrackedDialectFromLanguageTag"><code class="csfmt">\GetTrackedDialectFromLanguageTag</code></a><code class="code">{<span class="meta">〈<em class="metainner">tag</em>〉</span>}{<span class="meta">〈<em class="metainner">cs</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1497"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Finds the tracked dialect that matches the given language tag and stores the dialect label in <span class="meta">〈<em class="metainner">cs</em>〉</span>. If no match found, <span class="meta">〈<em class="metainner">cs</em>〉</span> will be empty. <a href="#sec:user">§5</a>; <a href="#wrglossary.619">36</a><p>
+<div class="defnbox"><a id="wrglossary.1498"></a><a href="#glo:GetTrackedDialectModifier"><code class="csfmt">\GetTrackedDialectModifier</code></a><code class="code">{<span class="meta">〈<em class="metainner">dialect</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1499"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Expands to the modifier for the given dialect. <a href="#sec:user">§5</a>; <a href="#wrglossary.702">40</a><p>
+<div class="defnbox"><a id="wrglossary.1500"></a><a href="#glo:GetTrackedDialectScript"><code class="csfmt">\GetTrackedDialectScript</code></a><code class="code">{<span class="meta">〈<em class="metainner">dialect</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1501"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Expands to the script for <span class="meta">〈<em class="metainner">dialect</em>〉</span>. <a href="#sec:user">§5</a>; <a href="#wrglossary.738">42</a><p>
+<div class="defnbox"><a id="wrglossary.1502"></a><a href="#glo:GetTrackedDialectSubLang"><code class="csfmt">\GetTrackedDialectSubLang</code></a><code class="code">{<span class="meta">〈<em class="metainner">dialect</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1503"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Expands to the sub-language for <span class="meta">〈<em class="metainner">dialect</em>〉</span>. <a href="#sec:user">§5</a>; <a href="#wrglossary.760">44</a><p>
+<div class="defnbox"><a id="wrglossary.1504"></a><a href="#glo:GetTrackedDialectVariant"><code class="csfmt">\GetTrackedDialectVariant</code></a><code class="code">{<span class="meta">〈<em class="metainner">dialect</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1505"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Expands to the modifier for <span class="meta">〈<em class="metainner">dialect</em>〉</span>. <a href="#sec:user">§5</a>; <a href="#wrglossary.735">42</a><p>
+<div class="defnbox"><a id="wrglossary.1506"></a><a href="#glo:GetTrackedLanguageTag"><code class="csfmt">\GetTrackedLanguageTag</code></a><code class="code">{<span class="meta">〈<em class="metainner">dialect</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1507"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Gets the language tag for <span class="meta">〈<em class="metainner">dialect</em>〉</span>. <a href="#sec:user">§5</a>; <a href="#wrglossary.700">40</a><p>
+
+</section><!-- end of section summary.index6946816 -->
+
+<section id="summary.index7077888"><!-- start of section summary.index7077888 --><div class="tomain"><a href="#main">[top]</a></div>
+<h2><!-- start of section header -->I<div class="labellink"><a href="#summary.index7077888">[link]</a></div></h2><!-- end of section header -->
+<div class="defnbox"><a id="wrglossary.1508"></a><a href="#glo:IfHasTrackedDialectAdditional"><code class="csfmt">\IfHasTrackedDialectAdditional</code></a><code class="code">{<span class="meta">〈<em class="metainner">dialect</em>〉</span>}{<span class="meta">〈<em class="metainner">true</em>〉</span>}{<span class="meta">〈<em class="metainner">false</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1509"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Expands to <span class="meta">〈<em class="metainner">true</em>〉</span> if there’s extra information for <span class="meta">〈<em class="metainner">dialect</em>〉</span>, otherwise expands to <span class="meta">〈<em class="metainner">false</em>〉</span>. <a href="#sec:user">§5</a>; <a href="#wrglossary.763">44</a><p>
+<div class="defnbox"><a id="wrglossary.1510"></a><a href="#glo:IfHasTrackedDialectModifier"><code class="csfmt">\IfHasTrackedDialectModifier</code></a><code class="code">{<span class="meta">〈<em class="metainner">dialect</em>〉</span>}{<span class="meta">〈<em class="metainner">true</em>〉</span>}{<span class="meta">〈<em class="metainner">false</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1511"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Expands to <span class="meta">〈<em class="metainner">true</em>〉</span> if there’s a modifier for the given dialect, otherwise expands to <span class="meta">〈<em class="metainner">false</em>〉</span>. <a href="#sec:user">§5</a>; <a href="#wrglossary.707">41</a><p>
+<div class="defnbox"><a id="wrglossary.1512"></a><a href="#glo:IfHasTrackedDialectScript"><code class="csfmt">\IfHasTrackedDialectScript</code></a><code class="code">{<span class="meta">〈<em class="metainner">dialect</em>〉</span>}{<span class="meta">〈<em class="metainner">true</em>〉</span>}{<span class="meta">〈<em class="metainner">false</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1513"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Expands to <span class="meta">〈<em class="metainner">true</em>〉</span> if there’s a script for <span class="meta">〈<em class="metainner">dialect</em>〉</span>, otherwise expands to <span class="meta">〈<em class="metainner">false</em>〉</span>. <a href="#sec:user">§5</a>; <a href="#wrglossary.739">42</a><p>
+<div class="defnbox"><a id="wrglossary.1514"></a><a href="#glo:IfHasTrackedDialectSubLang"><code class="csfmt">\IfHasTrackedDialectSubLang</code></a><code class="code">{<span class="meta">〈<em class="metainner">dialect</em>〉</span>}{<span class="meta">〈<em class="metainner">true</em>〉</span>}{<span class="meta">〈<em class="metainner">false</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1515"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Expands to <span class="meta">〈<em class="metainner">true</em>〉</span> if there’s a sub-language for <span class="meta">〈<em class="metainner">dialect</em>〉</span>, otherwise expands to <span class="meta">〈<em class="metainner">false</em>〉</span>. <a href="#sec:user">§5</a>; <a href="#wrglossary.761">44</a><p>
+<div class="defnbox"><a id="wrglossary.1516"></a><a href="#glo:IfHasTrackedDialectVariant"><code class="csfmt">\IfHasTrackedDialectVariant</code></a><code class="code">{<span class="meta">〈<em class="metainner">dialect</em>〉</span>}{<span class="meta">〈<em class="metainner">true</em>〉</span>}{<span class="meta">〈<em class="metainner">false</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1517"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Expands to <span class="meta">〈<em class="metainner">true</em>〉</span> if there’s a modifier for <span class="meta">〈<em class="metainner">dialect</em>〉</span>, otherwise expands to <span class="meta">〈<em class="metainner">false</em>〉</span>. <a href="#sec:user">§5</a>; <a href="#wrglossary.737">42</a><p>
+<div class="defnbox"><a id="wrglossary.1518"></a><a href="#glo:IfTrackedDialect"><code class="csfmt">\IfTrackedDialect</code></a><code class="code">{<span class="meta">〈<em class="metainner">dialect-label</em>〉</span>}{<span class="meta">〈<em class="metainner">true</em>〉</span>}{<span class="meta">〈<em class="metainner">false</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1519"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.0+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Does <span class="meta">〈<em class="metainner">true</em>〉</span> if the dialect identified by <span class="meta">〈<em class="metainner">dialect-label</em>〉</span> has been tracked, otherwise does <span class="meta">〈<em class="metainner">false</em>〉</span>. <a href="#sec:user">§5</a>; <a href="#wrglossary.654">38</a><p>
+<div class="defnbox"><a id="wrglossary.1520"></a><a href="#glo:IfTrackedDialectIsScriptCs"><code class="csfmt">\IfTrackedDialectIsScriptCs</code></a><code class="code">{<span class="meta">〈<em class="metainner">dialect</em>〉</span>}{<span class="meta">〈<em class="metainner">cs</em>〉</span>}{<span class="meta">〈<em class="metainner">true</em>〉</span>}{<span class="meta">〈<em class="metainner">false</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1521"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+If the given tracked dialect has an associated script and that script code matches the replacement text for the control sequence <span class="meta">〈<em class="metainner">cs</em>〉</span> then do <span class="meta">〈<em class="metainner">true</em>〉</span> otherwise to <span class="meta">〈<em class="metainner">false</em>〉</span>. If the tracked dialect doesn’t have an associated script then the default script for the root language is tested. <a href="#sec:user">§5</a>; <a href="#wrglossary.746">43</a><p>
+<div class="defnbox"><a id="wrglossary.1522"></a><a href="#glo:IfTrackedIsoCode"><code class="csfmt">\IfTrackedIsoCode</code></a><code class="code">{<span class="meta">〈<em class="metainner">code type</em>〉</span>}{<span class="meta">〈<em class="metainner">code</em>〉</span>}{<span class="meta">〈<em class="metainner">true</em>〉</span>}{<span class="meta">〈<em class="metainner">false</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1523"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.0+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Does <span class="meta">〈<em class="metainner">true</em>〉</span> if the given <a id="wrglossary.1524"></a><a href="#glo:ISO">ISO</a> code has been defined otherwise does <span class="meta">〈<em class="metainner">false</em>〉</span>. <a href="#sec:user">§5</a>; <a href="#wrglossary.672">39</a><p>
+<div class="defnbox"><a id="wrglossary.1525"></a><a href="#glo:IfTrackedLanguage"><code class="csfmt">\IfTrackedLanguage</code></a><code class="code">{<span class="meta">〈<em class="metainner">language-label</em>〉</span>}{<span class="meta">〈<em class="metainner">true</em>〉</span>}{<span class="meta">〈<em class="metainner">false</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1526"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.0+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Does <span class="meta">〈<em class="metainner">true</em>〉</span> if the language identified by <span class="meta">〈<em class="metainner">language-label</em>〉</span> has been tracked, otherwise does <span class="meta">〈<em class="metainner">false</em>〉</span>. <a href="#sec:user">§5</a>; <a href="#wrglossary.653">38</a><p>
+<div class="defnbox"><a id="wrglossary.1527"></a><a href="#glo:IfTrackedLanguageFileExists"><code class="csfmt">\IfTrackedLanguageFileExists</code></a><code class="code">{<span class="meta">〈<em class="metainner">dialect</em>〉</span>}{<span class="meta">〈<em class="metainner">prefix</em>〉</span>}{<span class="meta">〈<em class="metainner">suffix</em>〉</span>}{<span class="meta">〈<em class="metainner">true code</em>〉</span>}{<span class="meta">〈<em class="metainner">false code</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1528"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.0+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Does <code class="code"><a id="wrglossary.1529"></a><a href="#glo:SetCurrentTrackedDialect"><code class="csfmt">\SetCurrentTrackedDialect</code></a>{<span class="meta">〈<em class="metainner">dialect</em>〉</span>}</code> and if the dialect is recognised, then determines if the file <span class="filefmt"><span class="meta">〈<em class="metainner">prefix</em>〉</span><span class="meta">〈<em class="metainner">tag</em>〉</span><span class="meta">〈<em class="metainner">suffix</em>〉</span></span> exists. If it does, <a id="wrglossary.1530"></a><a href="#glo:CurrentTrackedTag"><code class="csfmt">\CurrentTrackedTag</code></a> is set to <span class="meta">〈<em class="metainner">tag</em>〉</span> and <span class="meta">〈<em class="metainner">true</em>〉</span> is done, otherwise <span class="meta">〈<em class="metainner">false</em>〉</span> is done. <a href="#sec:user">§5</a>; <a href="#wrglossary.765">45</a><p>
+<div class="defnbox"><a id="wrglossary.1531"></a><a href="#glo:IfTrackedLanguageHasIsoCode"><code class="csfmt">\IfTrackedLanguageHasIsoCode</code></a><code class="code">{<span class="meta">〈<em class="metainner">code type</em>〉</span>}{<span class="meta">〈<em class="metainner">label</em>〉</span>}{<span class="meta">〈<em class="metainner">true</em>〉</span>}{<span class="meta">〈<em class="metainner">false</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1532"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.0+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Does <span class="meta">〈<em class="metainner">true</em>〉</span> if the given language or dialect has a corresponding <a id="wrglossary.1533"></a><a href="#glo:ISO">ISO</a> code of the given type, otherwise does <span class="meta">〈<em class="metainner">false</em>〉</span>. <a href="#sec:user">§5</a>; <a href="#wrglossary.665">39</a><p>
+<div class="defnbox"><a id="wrglossary.1534"></a><dfn id="glo:ifTrackLangShowInfo"><code class="csfmt">\ifTrackLangShowInfo</code></dfn><code class="code"> <span class="meta">〈<em class="metainner">true</em>〉</span><code class="csfmt">\else</code> <span class="meta">〈<em class="metainner">false</em>〉</span><code class="csfmt">\fi</code></code><span class="floatrightbox"><span class="summarytag">initial: </span><code class="cmd">\iftrue</code>; <a id="wrglossary.1535"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Conditional that indicates whether or not to show information messages.<p>
+<div class="defnbox"><a id="wrglossary.1536"></a><dfn id="glo:ifTrackLangShowVerbose"><code class="csfmt">\ifTrackLangShowVerbose</code></dfn><code class="code"> <span class="meta">〈<em class="metainner">true</em>〉</span><code class="csfmt">\else</code> <span class="meta">〈<em class="metainner">false</em>〉</span><code class="csfmt">\fi</code></code><span class="floatrightbox"><span class="summarytag">initial: </span><code class="cmd">\iffalse</code>; <a id="wrglossary.1537"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.4+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Conditional that indicates whether or not to show verbose messages.<p>
+<div class="defnbox"><a id="wrglossary.1538"></a><dfn id="glo:ifTrackLangShowWarnings"><code class="csfmt">\ifTrackLangShowWarnings</code></dfn><code class="code"> <span class="meta">〈<em class="metainner">true</em>〉</span><code class="csfmt">\else</code> <span class="meta">〈<em class="metainner">false</em>〉</span><code class="csfmt">\fi</code></code><span class="floatrightbox"><span class="summarytag">initial: </span><code class="cmd">\iftrue</code>; <a id="wrglossary.1539"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Conditional that indicates whether or not to show warnings.<p>
+
+</section><!-- end of section summary.index7077888 -->
+
+<section id="summary.index7733248"><!-- start of section summary.index7733248 --><div class="tomain"><a href="#main">[top]</a></div>
+<h2><!-- start of section header -->S<div class="labellink"><a href="#summary.index7733248">[link]</a></div></h2><!-- end of section header -->
+<div class="defnbox"><a id="wrglossary.1540"></a><a href="#glo:SetCurrentTrackedDialect"><code class="csfmt">\SetCurrentTrackedDialect</code></a><code class="code">{<span class="meta">〈<em class="metainner">dialect</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1541"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Sets the current tracked dialect. <a href="#sec:selectlanguage">§6.2</a>; <a href="#wrglossary.1242">73</a><p>
+<div class="defnbox"><a id="wrglossary.1542"></a><a href="#glo:SetTrackedDialectAdditional"><code class="csfmt">\SetTrackedDialectAdditional</code></a><code class="code">{<span class="meta">〈<em class="metainner">dialect</em>〉</span>}{<span class="meta">〈<em class="metainner">value</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1543"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Sets the extra information for <span class="meta">〈<em class="metainner">dialect</em>〉</span> to <span class="meta">〈<em class="metainner">value</em>〉</span>. <a href="#sec:definelabels">§6.6</a>; <a href="#wrglossary.1372">79</a><p>
+<div class="defnbox"><a id="wrglossary.1544"></a><a href="#glo:SetTrackedDialectLabelMap"><code class="csfmt">\SetTrackedDialectLabelMap</code></a><code class="code">{<span class="meta">〈<em class="metainner">tracklang-label</em>〉</span>}{<span class="meta">〈<em class="metainner">hook-label</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1545"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Defines a mapping between a <a id="wrglossary.1546"></a><a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a> dialect label and the corresponding dialect label used by a language hook, such as <a id="wrglossary.1547"></a><a href="#glo:captionsdialect"><code class="csfmt">\captions<span class="meta">〈<em class="metainner">dialect</em>〉</span></code></a>. <a href="#sec:definelabels">§6.6</a>; <a href="#wrglossary.1316">77</a><p>
+<div class="defnbox"><a id="wrglossary.1548"></a><a href="#glo:SetTrackedDialectModifier"><code class="csfmt">\SetTrackedDialectModifier</code></a><code class="code">{<span class="meta">〈<em class="metainner">dialect</em>〉</span>}{<span class="meta">〈<em class="metainner">value</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1549"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Sets the modifier for the given <span class="meta">〈<em class="metainner">dialect</em>〉</span> to <span class="meta">〈<em class="metainner">value</em>〉</span>. <a href="#sec:definelabels">§6.6</a>; <a href="#wrglossary.1332">77</a><p>
+<div class="defnbox"><a id="wrglossary.1550"></a><a href="#glo:SetTrackedDialectScript"><code class="csfmt">\SetTrackedDialectScript</code></a><code class="code">{<span class="meta">〈<em class="metainner">dialect</em>〉</span>}{<span class="meta">〈<em class="metainner">value</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1551"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Sets the script for <span class="meta">〈<em class="metainner">dialect</em>〉</span> to <span class="meta">〈<em class="metainner">value</em>〉</span>. <a href="#sec:definelabels">§6.6</a>; <a href="#wrglossary.1355">78</a><p>
+<div class="defnbox"><a id="wrglossary.1552"></a><a href="#glo:SetTrackedDialectSubLang"><code class="csfmt">\SetTrackedDialectSubLang</code></a><code class="code">{<span class="meta">〈<em class="metainner">dialect</em>〉</span>}{<span class="meta">〈<em class="metainner">value</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1553"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Sets the sub-language for <span class="meta">〈<em class="metainner">dialect</em>〉</span> to <span class="meta">〈<em class="metainner">value</em>〉</span>. <a href="#sec:definelabels">§6.6</a>; <a href="#wrglossary.1365">79</a><p>
+<div class="defnbox"><a id="wrglossary.1554"></a><a href="#glo:SetTrackedDialectVariant"><code class="csfmt">\SetTrackedDialectVariant</code></a><code class="code">{<span class="meta">〈<em class="metainner">dialect</em>〉</span>}{<span class="meta">〈<em class="metainner">value</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1555"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Sets the modifier for <span class="meta">〈<em class="metainner">dialect</em>〉</span> to <span class="meta">〈<em class="metainner">value</em>〉</span>. <a href="#sec:definelabels">§6.6</a>; <a href="#wrglossary.1362">78</a><p>
+
+</section><!-- end of section summary.index7733248 -->
+
+<section id="summary.index7798784"><!-- start of section summary.index7798784 --><div class="tomain"><a href="#main">[top]</a></div>
+<h2><!-- start of section header -->T<div class="labellink"><a href="#summary.index7798784">[link]</a></div></h2><!-- end of section header -->
+<div class="defnbox"><a id="wrglossary.1556"></a><a href="#glo:ThreeLetterExtIsoLanguageCode"><code class="csfmt">\ThreeLetterExtIsoLanguageCode</code></a><span class="floatrightbox"><a id="wrglossary.1557"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Expands to <a id="wrglossary.1558"></a><a href="#glo:idx.639-3"><span class="mbox">639-3</span></a> (should not be redefined). <a href="#sec:user">§5</a>; <a href="#wrglossary.695">40</a><p>
+<div class="defnbox"><a id="wrglossary.1559"></a><a href="#glo:ThreeLetterIsoLanguageCode"><code class="csfmt">\ThreeLetterIsoLanguageCode</code></a><span class="floatrightbox"><a id="wrglossary.1560"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.0+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Expands to <a id="wrglossary.1561"></a><a href="#glo:idx.639-2"><span class="mbox">639-2</span></a> (should not be redefined). <a href="#sec:user">§5</a>; <a href="#wrglossary.693">40</a><p>
+<div class="defnbox"><a id="wrglossary.1562"></a><a href="#glo:TrackedDialectClosestSubMatch"><code class="csfmt">\TrackedDialectClosestSubMatch</code></a><span class="floatrightbox"><a id="wrglossary.1563"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3.6+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Defined by <a id="wrglossary.1564"></a><a href="#glo:GetTrackedDialectFromLanguageTag"><code class="csfmt">\GetTrackedDialectFromLanguageTag</code></a> to the closest match. <a href="#sec:user">§5</a>; <a href="#wrglossary.623">36</a><p>
+<div class="defnbox"><a id="wrglossary.1565"></a><a href="#glo:TrackedDialectsFromLanguage"><code class="csfmt">\TrackedDialectsFromLanguage</code></a><code class="code">{<span class="meta">〈<em class="metainner">root language label</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1566"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.0+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Expands to a comma-separated list of the tracked dialects with the given language. <a href="#sec:user">§5</a>; <a href="#wrglossary.663">39</a><p>
+<div class="defnbox"><a id="wrglossary.1567"></a><a href="#glo:TrackedIsoCodeFromLanguage"><code class="csfmt">\TrackedIsoCodeFromLanguage</code></a><code class="code">{<span class="meta">〈<em class="metainner">code type</em>〉</span>}{<span class="meta">〈<em class="metainner">label</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1568"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.0+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Expands to the code associated with the given language or dialect identified by <span class="meta">〈<em class="metainner">label</em>〉</span>. <a href="#sec:user">§5</a>; <a href="#wrglossary.684">39</a><p>
+<div class="defnbox"><a id="wrglossary.1569"></a><a href="#glo:TrackedLanguageFromDialect"><code class="csfmt">\TrackedLanguageFromDialect</code></a><code class="code">{<span class="meta">〈<em class="metainner">dialect</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1570"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.0+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Expands to the language from the given dialect. <a href="#sec:user">§5</a>; <a href="#wrglossary.662">39</a><p>
+<div class="defnbox"><a id="wrglossary.1571"></a><a href="#glo:TrackedLanguageFromIsoCode"><code class="csfmt">\TrackedLanguageFromIsoCode</code></a><code class="code">{<span class="meta">〈<em class="metainner">code type</em>〉</span>}{<span class="meta">〈<em class="metainner">code</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1572"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.0+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Expands to a comma-separated list of language or dialect labels associated with the given code. <a href="#sec:user">§5</a>; <a href="#wrglossary.681">39</a><p>
+<div class="defnbox"><a id="wrglossary.1573"></a><a href="#glo:TrackIfKnownLanguage"><code class="csfmt">\TrackIfKnownLanguage</code></a><code class="code">{<span class="meta">〈<em class="metainner">tag</em>〉</span>}{<span class="meta">〈<em class="metainner">success code</em>〉</span>}{<span class="meta">〈<em class="metainner">fail code</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1574"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3.9+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+As <a id="wrglossary.1575"></a><a href="#glo:TrackLanguageTag"><code class="csfmt">\TrackLanguageTag</code></a> but does <span class="meta">〈<em class="metainner">fail code</em>〉</span> if the tag doesn’t contain a valid language code. If successful, does <span class="meta">〈<em class="metainner">success code</em>〉</span> after tracking the language. <a href="#sec:generic">§3</a>; <a href="#wrglossary.341">21</a><p>
+<div class="defnbox"><a id="wrglossary.1576"></a><a href="#glo:TrackLangAddExtraRegionFile"><code class="csfmt">\TrackLangAddExtraRegionFile</code></a><code class="code">{<span class="meta">〈<em class="metainner">file</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1577"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.4+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Adds <span class="meta">〈<em class="metainner">file</em>〉</span> to the list of extra region code files that should be input by <a id="wrglossary.1578"></a><a href="#glo:file.tracklang-region-codes.tex"><span class="filefmt">tracklang-region-codes.tex</span></a>. <a href="#sec:supplpkgs">§4</a>; <a href="#wrglossary.536">31</a><p>
+<div class="defnbox"><a id="wrglossary.1579"></a><a href="#glo:TrackLangAddExtraScriptFile"><code class="csfmt">\TrackLangAddExtraScriptFile</code></a><code class="code">{<span class="meta">〈<em class="metainner">file</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1580"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.4+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Adds <span class="meta">〈<em class="metainner">file</em>〉</span> to the list of files that should be input by <a id="wrglossary.1581"></a><a href="#glo:file.tracklang-scripts.tex"><span class="filefmt">tracklang-scripts.tex</span></a>. <a href="#sec:supplpkgs">§4</a>; <a href="#wrglossary.561">33</a><p>
+<div class="defnbox"><a id="wrglossary.1582"></a><a href="#glo:TrackLangAddToCaptions"><code class="csfmt">\TrackLangAddToCaptions</code></a><code class="code">{<span class="meta">〈<em class="metainner">code</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1583"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+A shortcut that just does <code class="code"><a id="wrglossary.1584"></a><a href="#glo:TrackLangAddToHook"><code class="csfmt">\TrackLangAddToHook</code></a>{<span class="meta">〈<em class="metainner">code</em>〉</span>}{captions}</code>. <a href="#sec:user">§5</a>; <a href="#wrglossary.960">54</a><p>
+<div class="defnbox"><a id="wrglossary.1585"></a><a href="#glo:TrackLangAddToHook"><code class="csfmt">\TrackLangAddToHook</code></a><code class="code">{<span class="meta">〈<em class="metainner">code</em>〉</span>}{<span class="meta">〈<em class="metainner">type</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1586"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+For use within resource files, this can be used to add <span class="meta">〈<em class="metainner">code</em>〉</span> to the appropriate hook. <a href="#sec:user">§5</a>; <a href="#wrglossary.956">54</a><p>
+<div class="defnbox"><a id="wrglossary.1587"></a><a href="#glo:TrackLangAlphaIIIToNumericRegion"><code class="csfmt">\TrackLangAlphaIIIToNumericRegion</code></a><code class="code">{<span class="meta">〈<em class="metainner">alpha-3 code</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1588"></a><a href="#glo:file.tracklang-region-codes.tex"><span class="filefmt">tracklang-region-codes.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Expands to the numeric code corresponding to the given alpha-3 code. <a href="#sec:supplpkgs">§4</a>; <a href="#wrglossary.530">30</a><p>
+<div class="defnbox"><a id="wrglossary.1589"></a><a href="#glo:TrackLangAlphaIIToNumericRegion"><code class="csfmt">\TrackLangAlphaIIToNumericRegion</code></a><code class="code">{<span class="meta">〈<em class="metainner">alpha-2 code</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1590"></a><a href="#glo:file.tracklang-region-codes.tex"><span class="filefmt">tracklang-region-codes.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Expands to the numeric code corresponding to the given alpha-2 code. <a href="#sec:supplpkgs">§4</a>; <a href="#wrglossary.524">30</a><p>
+<div class="defnbox"><a id="wrglossary.1591"></a><dfn id="glo:TrackLangDeclareDialectOption"><code class="csfmt">\TrackLangDeclareDialectOption</code></dfn><code class="code">{<span class="meta">〈<em class="metainner">dialect</em>〉</span>}{<span class="meta">〈<em class="metainner">root language</em>〉</span>}{<span class="meta">〈<em class="metainner">3166-1 code</em>〉</span>}{<span class="meta">〈<em class="metainner">modifier</em>〉</span>}{<span class="meta">〈<em class="metainner">variant</em>〉</span>}{<span class="meta">〈<em class="metainner">map</em>〉</span>}{<span class="meta">〈<em class="metainner">script</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1592"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Defines a predefined dialect label that can be used by <a id="wrglossary.1593"></a><a href="#glo:TrackPredefinedDialect"><code class="csfmt">\TrackPredefinedDialect</code></a>.<p>
+<div class="defnbox"><a id="wrglossary.1594"></a><dfn id="glo:TrackLangDeclareLanguageOption"><code class="csfmt">\TrackLangDeclareLanguageOption</code></dfn><code class="code">{<span class="meta">〈<em class="metainner">language name</em>〉</span>}{<span class="meta">〈<em class="metainner">639-1 code</em>〉</span>}{<span class="meta">〈<em class="metainner">639-2 (T)</em>〉</span>}{<span class="meta">〈<em class="metainner">639-2 (B)</em>〉</span>}{<span class="meta">〈<em class="metainner">639-3</em>〉</span>}{<span class="meta">〈<em class="metainner">3166-1</em>〉</span>}{<span class="meta">〈<em class="metainner">default script</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1595"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Defines a new root language that’s declared as an option.<p>
+<div class="defnbox"><a id="wrglossary.1596"></a><a href="#glo:TrackLangEnv"><code class="csfmt">\TrackLangEnv</code></a><p>
+<div class="noteBox">(user defined)</div><!-- end of noteBox -->
+</div><!-- end of defnbox -->
+<p>
+May be defined using the same format as <a id="wrglossary.1597"></a><a href="#glo:opt.envvar.LCALL"><code class="envvarfmt">LC_ALL</code></a> before using <a id="wrglossary.1598"></a><a href="#glo:TrackLangParseFromEnv"><code class="csfmt">\TrackLangParseFromEnv</code></a> to skip the environment variable query. <a href="#sec:generic">§3</a>; <a href="#wrglossary.417">25</a><p>
+<div class="defnbox"><a id="wrglossary.1599"></a><a href="#glo:TrackLangEnvCodeSet"><code class="csfmt">\TrackLangEnvCodeSet</code></a><span class="floatrightbox"><a id="wrglossary.1600"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Set by <a id="wrglossary.1601"></a><a href="#glo:TrackLangParseFromEnv"><code class="csfmt">\TrackLangParseFromEnv</code></a> to the <a id="wrglossary.1602"></a><a href="#glo:idx.code-set">code-set</a>. <a href="#sec:generic">§3</a>; <a href="#wrglossary.444">26</a><p>
+<div class="defnbox"><a id="wrglossary.1603"></a><a href="#glo:TrackLangEnvLang"><code class="csfmt">\TrackLangEnvLang</code></a><span class="floatrightbox"><a id="wrglossary.1604"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Set by <a id="wrglossary.1605"></a><a href="#glo:TrackLangParseFromEnv"><code class="csfmt">\TrackLangParseFromEnv</code></a> to the language code. <a href="#sec:generic">§3</a>; <a href="#wrglossary.440">26</a><p>
+<div class="defnbox"><a id="wrglossary.1606"></a><a href="#glo:TrackLangEnvModifier"><code class="csfmt">\TrackLangEnvModifier</code></a><span class="floatrightbox"><a id="wrglossary.1607"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Set by <a id="wrglossary.1608"></a><a href="#glo:TrackLangParseFromEnv"><code class="csfmt">\TrackLangParseFromEnv</code></a> to the <a id="wrglossary.1609"></a><a href="#glo:idx.modifier">modifier</a>. <a href="#sec:generic">§3</a>; <a href="#wrglossary.446">26</a><p>
+<div class="defnbox"><a id="wrglossary.1610"></a><a href="#glo:TrackLangEnvTerritory"><code class="csfmt">\TrackLangEnvTerritory</code></a><span class="floatrightbox"><a id="wrglossary.1611"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Set by <a id="wrglossary.1612"></a><a href="#glo:TrackLangParseFromEnv"><code class="csfmt">\TrackLangParseFromEnv</code></a> to the <a id="wrglossary.1613"></a><a href="#glo:idx.territory">territory</a>. <a href="#sec:generic">§3</a>; <a href="#wrglossary.442">26</a><p>
+<div class="defnbox"><a id="wrglossary.1614"></a><a href="#glo:TrackLangFromEnv"><code class="csfmt">\TrackLangFromEnv</code></a><span class="floatrightbox"><a id="wrglossary.1615"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Queries environment variable if <a id="wrglossary.1616"></a><a href="#glo:TrackLangEnv"><code class="csfmt">\TrackLangEnv</code></a> not already set, parses <a id="wrglossary.1617"></a><a href="#glo:TrackLangEnv"><code class="csfmt">\TrackLangEnv</code></a> if it has been set, and adds the dialect if it’s recognised. <a href="#sec:generic">§3</a>; <a href="#wrglossary.375">23</a><p>
+<div class="defnbox"><a id="wrglossary.1618"></a><a href="#glo:TrackLangGetDefaultScript"><code class="csfmt">\TrackLangGetDefaultScript</code></a><code class="code">{<span class="meta">〈<em class="metainner">language</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1619"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Expands to the default script for the given language. <a href="#sec:user">§5</a>; <a href="#wrglossary.745">43</a><p>
+<div class="defnbox"><a id="wrglossary.1620"></a><dfn id="glo:TrackLangGetKnownCountry"><code class="csfmt">\TrackLangGetKnownCountry</code></dfn><code class="code">{<span class="meta">〈<em class="metainner">language</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1621"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Expands to the <a id="wrglossary.1622"></a><a href="#glo:idx.3166-1">ISO <span class="mbox">3166-1</span></a> country code for the given language.<p>
+<div class="defnbox"><a id="wrglossary.1623"></a><dfn id="glo:TrackLangGetKnownIsoThreeLetterLang"><code class="csfmt">\TrackLangGetKnownIsoThreeLetterLang</code></dfn><code class="code">{<span class="meta">〈<em class="metainner">language</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1624"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Expands to the <a id="wrglossary.1625"></a><a href="#glo:idx.639-2">ISO <span class="mbox">639-2</span></a> language code associated with <span class="meta">〈<em class="metainner">language</em>〉</span>.<p>
+<div class="defnbox"><a id="wrglossary.1626"></a><dfn id="glo:TrackLangGetKnownIsoThreeLetterLangB"><code class="csfmt">\TrackLangGetKnownIsoThreeLetterLangB</code></dfn><code class="code">{<span class="meta">〈<em class="metainner">language</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1627"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Expands to the <a id="wrglossary.1628"></a><a href="#glo:idx.639-2B">ISO <span class="mbox">639-2</span> (B)</a> language code associated with <span class="meta">〈<em class="metainner">language</em>〉</span>.<p>
+<div class="defnbox"><a id="wrglossary.1629"></a><dfn id="glo:TrackLangGetKnownIsoTwoLetterLang"><code class="csfmt">\TrackLangGetKnownIsoTwoLetterLang</code></dfn><code class="code">{<span class="meta">〈<em class="metainner">language</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1630"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Expands to the <a id="wrglossary.1631"></a><a href="#glo:idx.639-1">ISO <span class="mbox">639-1</span></a> language code associated with <span class="meta">〈<em class="metainner">language</em>〉</span>.<p>
+<div class="defnbox"><a id="wrglossary.1632"></a><dfn id="glo:TrackLangGetKnownLangFromIso"><code class="csfmt">\TrackLangGetKnownLangFromIso</code></dfn><code class="code">{<span class="meta">〈<em class="metainner">ISO code</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1633"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Expands to the root language label from the given <a id="wrglossary.1634"></a><a href="#glo:ISO">ISO</a> code (<a id="wrglossary.1635"></a><a href="#glo:idx.639-1"><span class="mbox">639-1</span></a> or <a id="wrglossary.1636"></a><a href="#glo:idx.639-2"><span class="mbox">639-2</span></a> or <a id="wrglossary.1637"></a><a href="#glo:idx.639-3"><span class="mbox">639-3</span></a>).<p>
+<div class="defnbox"><a id="wrglossary.1638"></a><dfn id="glo:TrackLangIfAlphaNumericChar"><code class="csfmt">\TrackLangIfAlphaNumericChar</code></dfn><code class="code">{<span class="meta">〈<em class="metainner">tag</em>〉</span>}{<span class="meta">〈<em class="metainner">true</em>〉</span>}{<span class="meta">〈<em class="metainner">false</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1639"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Does <span class="meta">〈<em class="metainner">true</em>〉</span> if the argument is a single alphanumeric character otherwise does <span class="meta">〈<em class="metainner">false</em>〉</span>.<p>
+<div class="defnbox"><a id="wrglossary.1640"></a><dfn id="glo:TrackLangIfHasDefaultScript"><code class="csfmt">\TrackLangIfHasDefaultScript</code></dfn><code class="code">{<span class="meta">〈<em class="metainner">language</em>〉</span>}{<span class="meta">〈<em class="metainner">true</em>〉</span>}{<span class="meta">〈<em class="metainner">false</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1641"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Does <span class="meta">〈<em class="metainner">true</em>〉</span> if the given language has a default script (but is not necessarily tracked), otherwise does <span class="meta">〈<em class="metainner">false</em>〉</span>.<p>
+<div class="defnbox"><a id="wrglossary.1642"></a><dfn id="glo:TrackLangIfHasKnownCountry"><code class="csfmt">\TrackLangIfHasKnownCountry</code></dfn><code class="code">{<span class="meta">〈<em class="metainner">language</em>〉</span>}{<span class="meta">〈<em class="metainner">true</em>〉</span>}{<span class="meta">〈<em class="metainner">false</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1643"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Does <span class="meta">〈<em class="metainner">true</em>〉</span> if the given language has an <a id="wrglossary.1644"></a><a href="#glo:idx.3166-1">ISO <span class="mbox">3166-1</span></a> country code (but is not necessarily tracked), otherwise does <span class="meta">〈<em class="metainner">false</em>〉</span>.<p>
+<div class="defnbox"><a id="wrglossary.1645"></a><a href="#glo:TrackLangIfKnownAlphaIIIRegion"><code class="csfmt">\TrackLangIfKnownAlphaIIIRegion</code></a><code class="code">{<span class="meta">〈<em class="metainner">alpha-3 code</em>〉</span>}{<span class="meta">〈<em class="metainner">true</em>〉</span>}{<span class="meta">〈<em class="metainner">false</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1646"></a><a href="#glo:file.tracklang-region-codes.tex"><span class="filefmt">tracklang-region-codes.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Expands to <span class="meta">〈<em class="metainner">true</em>〉</span> if there’s a known mapping for the given <span class="meta">〈<em class="metainner">alpha-3 code</em>〉</span>, otherwise expands to <span class="meta">〈<em class="metainner">false</em>〉</span>. <a href="#sec:supplpkgs">§4</a>; <a href="#wrglossary.532">31</a><p>
+<div class="defnbox"><a id="wrglossary.1647"></a><a href="#glo:TrackLangIfKnownAlphaIIRegion"><code class="csfmt">\TrackLangIfKnownAlphaIIRegion</code></a><code class="code">{<span class="meta">〈<em class="metainner">alpha-2 code</em>〉</span>}{<span class="meta">〈<em class="metainner">true</em>〉</span>}{<span class="meta">〈<em class="metainner">false</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1648"></a><a href="#glo:file.tracklang-region-codes.tex"><span class="filefmt">tracklang-region-codes.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Expands to <span class="meta">〈<em class="metainner">true</em>〉</span> if there’s a known mapping for the given alpha-2 <a id="wrglossary.1649"></a><a href="#glo:idx.territory">region</a> code, otherwise expands to <span class="meta">〈<em class="metainner">false</em>〉</span>. <a href="#sec:supplpkgs">§4</a>; <a href="#wrglossary.526">30</a><p>
+<div class="defnbox"><a id="wrglossary.1650"></a><dfn id="glo:TrackLangIfKnownIsoThreeLetterLang"><code class="csfmt">\TrackLangIfKnownIsoThreeLetterLang</code></dfn><code class="code">{<span class="meta">〈<em class="metainner">language</em>〉</span>}{<span class="meta">〈<em class="metainner">true</em>〉</span>}{<span class="meta">〈<em class="metainner">false</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1651"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Does <span class="meta">〈<em class="metainner">true</em>〉</span> if <span class="meta">〈<em class="metainner">language</em>〉</span> has an <a id="wrglossary.1652"></a><a href="#glo:idx.639-2">ISO <span class="mbox">639-2</span></a> code (but is not necessarily tracked), otherwise does <span class="meta">〈<em class="metainner">false</em>〉</span>.<p>
+<div class="defnbox"><a id="wrglossary.1653"></a><dfn id="glo:TrackLangIfKnownIsoThreeLetterLangB"><code class="csfmt">\TrackLangIfKnownIsoThreeLetterLangB</code></dfn><code class="code">{<span class="meta">〈<em class="metainner">language</em>〉</span>}{<span class="meta">〈<em class="metainner">true</em>〉</span>}{<span class="meta">〈<em class="metainner">false</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1654"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Does <span class="meta">〈<em class="metainner">true</em>〉</span> if <span class="meta">〈<em class="metainner">language</em>〉</span> has an <a id="wrglossary.1655"></a><a href="#glo:idx.639-2B">ISO <span class="mbox">639-2</span> (B)</a> code (but is not necessarily tracked), otherwise does <span class="meta">〈<em class="metainner">false</em>〉</span>.<p>
+<div class="defnbox"><a id="wrglossary.1656"></a><dfn id="glo:TrackLangIfKnownIsoTwoLetterLang"><code class="csfmt">\TrackLangIfKnownIsoTwoLetterLang</code></dfn><code class="code">{<span class="meta">〈<em class="metainner">language</em>〉</span>}{<span class="meta">〈<em class="metainner">true</em>〉</span>}{<span class="meta">〈<em class="metainner">false</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1657"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Does <span class="meta">〈<em class="metainner">true</em>〉</span> if <span class="meta">〈<em class="metainner">language</em>〉</span> has an <a id="wrglossary.1658"></a><a href="#glo:idx.639-1">ISO <span class="mbox">639-1</span></a> code (but is not necessarily tracked), otherwise does <span class="meta">〈<em class="metainner">false</em>〉</span>.<p>
+<div class="defnbox"><a id="wrglossary.1659"></a><dfn id="glo:TrackLangIfKnownLang"><code class="csfmt">\TrackLangIfKnownLang</code></dfn><code class="code">{<span class="meta">〈<em class="metainner">language</em>〉</span>}{<span class="meta">〈<em class="metainner">true</em>〉</span>}{<span class="meta">〈<em class="metainner">false</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1660"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Does <span class="meta">〈<em class="metainner">true</em>〉</span> if <span class="meta">〈<em class="metainner">language</em>〉</span> is known (but not necessarily tracked), otherwise does <span class="meta">〈<em class="metainner">false</em>〉</span>.<p>
+<div class="defnbox"><a id="wrglossary.1661"></a><dfn id="glo:TrackLangIfKnownLangFromIso"><code class="csfmt">\TrackLangIfKnownLangFromIso</code></dfn><code class="code">{<span class="meta">〈<em class="metainner">ISO code</em>〉</span>}{<span class="meta">〈<em class="metainner">true</em>〉</span>}{<span class="meta">〈<em class="metainner">false</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1662"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Does <span class="meta">〈<em class="metainner">true</em>〉</span> if the given language code (<a id="wrglossary.1663"></a><a href="#glo:idx.639-1"><span class="mbox">639-1</span></a> or <a id="wrglossary.1664"></a><a href="#glo:idx.639-2"><span class="mbox">639-2</span></a> or <a id="wrglossary.1665"></a><a href="#glo:idx.639-3"><span class="mbox">639-3</span></a>) is recognised (but not necessarily tracked), otherwise does <span class="meta">〈<em class="metainner">false</em>〉</span>.<p>
+<div class="defnbox"><a id="wrglossary.1666"></a><a href="#glo:TrackLangIfKnownNumericRegion"><code class="csfmt">\TrackLangIfKnownNumericRegion</code></a><code class="code">{<span class="meta">〈<em class="metainner">numeric code</em>〉</span>}{<span class="meta">〈<em class="metainner">true</em>〉</span>}{<span class="meta">〈<em class="metainner">false</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1667"></a><a href="#glo:file.tracklang-region-codes.tex"><span class="filefmt">tracklang-region-codes.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Expands to <span class="meta">〈<em class="metainner">true</em>〉</span> if there’s a known mapping for the given numeric <a id="wrglossary.1668"></a><a href="#glo:idx.territory">region</a> code, otherwise expands to <span class="meta">〈<em class="metainner">false</em>〉</span>. <a href="#sec:supplpkgs">§4</a>; <a href="#wrglossary.528">30</a><p>
+<div class="defnbox"><a id="wrglossary.1669"></a><dfn id="glo:TrackLangIfLanguageTag"><code class="csfmt">\TrackLangIfLanguageTag</code></dfn><code class="code">{<span class="meta">〈<em class="metainner">tag</em>〉</span>}{<span class="meta">〈<em class="metainner">true</em>〉</span>}{<span class="meta">〈<em class="metainner">false</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1670"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Does <span class="meta">〈<em class="metainner">true</em>〉</span> if the argument is a language tag otherwise does <span class="meta">〈<em class="metainner">false</em>〉</span>.<p>
+<div class="defnbox"><a id="wrglossary.1671"></a><dfn id="glo:TrackLangIfRegionTag"><code class="csfmt">\TrackLangIfRegionTag</code></dfn><code class="code">{<span class="meta">〈<em class="metainner">tag</em>〉</span>}{<span class="meta">〈<em class="metainner">true</em>〉</span>}{<span class="meta">〈<em class="metainner">false</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1672"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Does <span class="meta">〈<em class="metainner">true</em>〉</span> if the argument is a region tag otherwise does <span class="meta">〈<em class="metainner">false</em>〉</span>.<p>
+<div class="defnbox"><a id="wrglossary.1673"></a><dfn id="glo:TrackLangIfScriptTag"><code class="csfmt">\TrackLangIfScriptTag</code></dfn><code class="code">{<span class="meta">〈<em class="metainner">tag</em>〉</span>}{<span class="meta">〈<em class="metainner">true</em>〉</span>}{<span class="meta">〈<em class="metainner">false</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1674"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Does <span class="meta">〈<em class="metainner">true</em>〉</span> if the argument is a script tag otherwise does <span class="meta">〈<em class="metainner">false</em>〉</span>.<p>
+<div class="defnbox"><a id="wrglossary.1675"></a><dfn id="glo:TrackLangIfVariantTag"><code class="csfmt">\TrackLangIfVariantTag</code></dfn><code class="code">{<span class="meta">〈<em class="metainner">tag</em>〉</span>}{<span class="meta">〈<em class="metainner">true</em>〉</span>}{<span class="meta">〈<em class="metainner">false</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1676"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Does <span class="meta">〈<em class="metainner">true</em>〉</span> if the argument is a variant tag otherwise does <span class="meta">〈<em class="metainner">false</em>〉</span>.<p>
+<div class="defnbox"><a id="wrglossary.1677"></a><a href="#glo:TrackLangLastTrackedDialect"><code class="csfmt">\TrackLangLastTrackedDialect</code></a><span class="floatrightbox"><a id="wrglossary.1678"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Expands to the label of the last tracked dialect. <a href="#sec:newlanguages">§6.5</a>; <a href="#wrglossary.1287">76</a><p>
+<div class="defnbox"><a id="wrglossary.1679"></a><a href="#glo:TrackLangNewLanguage"><code class="csfmt">\TrackLangNewLanguage</code></a><code class="code">{<span class="meta">〈<em class="metainner">language label</em>〉</span>}{<span class="meta">〈<em class="metainner">639-1 code</em>〉</span>}{<span class="meta">〈<em class="metainner">639-2 (T)</em>〉</span>}{<span class="meta">〈<em class="metainner">639-2 (B)</em>〉</span>}{<span class="meta">〈<em class="metainner">639-3</em>〉</span>}{<span class="meta">〈<em class="metainner">3166-1</em>〉</span>}{<span class="meta">〈<em class="metainner">default script</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1680"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Identifies a new language that may be tracked. Apart from <span class="meta">〈<em class="metainner">language label</em>〉</span>, the other arguments may be empty if the information is unavailable. <a href="#sec:newlanguages">§6.5</a>; <a href="#wrglossary.1276">75</a><p>
+<div class="defnbox"><a id="wrglossary.1681"></a><a href="#glo:TrackLangNumericToAlphaIIIRegion"><code class="csfmt">\TrackLangNumericToAlphaIIIRegion</code></a><code class="code">{<span class="meta">〈<em class="metainner">numeric code</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1682"></a><a href="#glo:file.tracklang-region-codes.tex"><span class="filefmt">tracklang-region-codes.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Expands to the alpha-3 code corresponding to the given numeric code. <a href="#sec:supplpkgs">§4</a>; <a href="#wrglossary.531">31</a><p>
+<div class="defnbox"><a id="wrglossary.1683"></a><a href="#glo:TrackLangNumericToAlphaIIRegion"><code class="csfmt">\TrackLangNumericToAlphaIIRegion</code></a><code class="code">{<span class="meta">〈<em class="metainner">numeric code</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1684"></a><a href="#glo:file.tracklang-region-codes.tex"><span class="filefmt">tracklang-region-codes.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Expands to the alpha-2 code corresponding to the given numeric code. <a href="#sec:supplpkgs">§4</a>; <a href="#wrglossary.525">30</a><p>
+<div class="defnbox"><a id="wrglossary.1685"></a><a href="#glo:TrackLangParseFromEnv"><code class="csfmt">\TrackLangParseFromEnv</code></a><span class="floatrightbox"><a id="wrglossary.1686"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Attempts to obtain locale information from the expansion of <a id="wrglossary.1687"></a><a href="#glo:TrackLangEnv"><code class="csfmt">\TrackLangEnv</code></a>. <a href="#sec:generic">§3</a>; <a href="#wrglossary.475">27</a><p>
+<div class="defnbox"><a id="wrglossary.1688"></a><a href="#glo:TrackLangProvidePredefinedDialect"><code class="csfmt">\TrackLangProvidePredefinedDialect</code></a><code class="code">{<span class="meta">〈<em class="metainner">dialect label</em>〉</span>}{<span class="meta">〈<em class="metainner">root language label</em>〉</span>}{<span class="meta">〈<em class="metainner">3166-1 code</em>〉</span>}{<span class="meta">〈<em class="metainner">modifier</em>〉</span>}{<span class="meta">〈<em class="metainner">variant</em>〉</span>}{<span class="meta">〈<em class="metainner">map</em>〉</span>}{<span class="meta">〈<em class="metainner">script</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1689"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.4+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Defines a predefined dialect label that can be used by <a id="wrglossary.1690"></a><a href="#glo:TrackPredefinedDialect"><code class="csfmt">\TrackPredefinedDialect</code></a>. <a href="#sec:definelabels">§6.6</a>; <a href="#wrglossary.1293">76</a><p>
+<div class="defnbox"><a id="wrglossary.1691"></a><a href="#glo:TrackLangProvidePredefinedLanguage"><code class="csfmt">\TrackLangProvidePredefinedLanguage</code></a><code class="code">{<span class="meta">〈<em class="metainner">language label</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1692"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.4+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Sets up a language label for use with <a id="wrglossary.1693"></a><a href="#glo:TrackPredefinedDialect"><code class="csfmt">\TrackPredefinedDialect</code></a>. <a href="#sec:definelabels">§6.6</a>; <a href="#wrglossary.1290">76</a><p>
+<div class="defnbox"><a id="wrglossary.1694"></a><a href="#glo:TrackLangProvidesResource"><code class="csfmt">\TrackLangProvidesResource</code></a><code class="code">{<span class="meta">〈<em class="metainner">tag</em>〉</span>}{<span class="meta">〈<em class="metainner">version info</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1695"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Analogous to <a id="wrglossary.1696"></a><a href="#glo:ProvidesFile"><code class="csfmt">\ProvidesFile</code></a>. <a href="#sec:user">§5</a>; <a href="#wrglossary.922">52</a><p>
+<div class="defnbox"><a id="wrglossary.1697"></a><a href="#glo:TrackLangQueryEnv"><code class="csfmt">\TrackLangQueryEnv</code></a><span class="floatrightbox"><a id="wrglossary.1698"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Attempts to obtain locale information from the <a id="wrglossary.1699"></a><a href="#glo:opt.envvar.LCALL"><code class="envvarfmt">LC_ALL</code></a> environment variable via the <a id="wrglossary.1700"></a><a href="#glo:dual.shellescape">shell escape</a> or, with LuaTeX, <a id="wrglossary.1701"></a><a href="#glo:directlua"><code class="csfmt">\directlua</code></a>. <a href="#sec:generic">§3</a>; <a href="#wrglossary.447">26</a><p>
+<div class="defnbox"><a id="wrglossary.1702"></a><a href="#glo:TrackLangQueryOtherEnv"><code class="csfmt">\TrackLangQueryOtherEnv</code></a><code class="code">{<span class="meta">〈<em class="metainner">env-name</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1703"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Attempts to obtain locale information from the <a id="wrglossary.1704"></a><a href="#glo:opt.envvar.LCALL"><code class="envvarfmt">LC_ALL</code></a> environment variable and then by the <span class="meta">〈<em class="metainner">env-name</em>〉</span> environment variable via the <a id="wrglossary.1705"></a><a href="#glo:dual.shellescape">shell escape</a> or, with LuaTeX, <a id="wrglossary.1706"></a><a href="#glo:directlua"><code class="csfmt">\directlua</code></a>. <a href="#sec:generic">§3</a>; <a href="#wrglossary.459">26</a><p>
+<div class="defnbox"><a id="wrglossary.1707"></a><a href="#glo:TrackLangRedefHook"><code class="csfmt">\TrackLangRedefHook</code></a><code class="code">{<span class="meta">〈<em class="metainner">code</em>〉</span>}{<span class="meta">〈<em class="metainner">type</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1708"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.4+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Similar to <a id="wrglossary.1709"></a><a href="#glo:TrackLangAddToHook"><code class="csfmt">\TrackLangAddToHook</code></a> but redefines the hook rather than appending to it. <a href="#sec:user">§5</a>; <a href="#wrglossary.963">55</a><p>
+<div class="defnbox"><a id="wrglossary.1710"></a><a href="#glo:TrackLangRegionMap"><code class="csfmt">\TrackLangRegionMap</code></a><code class="code">{<span class="meta">〈<em class="metainner">numeric</em>〉</span>}{<span class="meta">〈<em class="metainner">alpha-2</em>〉</span>}{<span class="meta">〈<em class="metainner">alpha-3</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1711"></a><a href="#glo:file.tracklang-region-codes.tex"><span class="filefmt">tracklang-region-codes.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Establishes a mapping between a numeric <a id="wrglossary.1712"></a><a href="#glo:idx.territory">region</a> code and alpha-2 and alpha-3 codes. <a href="#sec:supplpkgs">§4</a>; <a href="#wrglossary.534">31</a><p>
+<div class="defnbox"><a id="wrglossary.1713"></a><a href="#glo:TrackLangRequestResource"><code class="csfmt">\TrackLangRequestResource</code></a><code class="code">{<span class="meta">〈<em class="metainner">tag</em>〉</span>}{<span class="meta">〈<em class="metainner">not found code</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1714"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+As <a id="wrglossary.1715"></a><a href="#glo:TrackLangRequireResource"><code class="csfmt">\TrackLangRequireResource</code></a> but does <span class="meta">〈<em class="metainner">not found code</em>〉</span> if the file doesn’t exist. <a href="#sec:user">§5</a>; <a href="#wrglossary.935">53</a><p>
+<div class="defnbox"><a id="wrglossary.1716"></a><a href="#glo:TrackLangRequireDialect"><code class="csfmt">\TrackLangRequireDialect</code></a><code class="code">[<span class="meta">〈<em class="metainner">load code</em>〉</span>]{<span class="meta">〈<em class="metainner">pkgname</em>〉</span>}{<span class="meta">〈<em class="metainner">dialect</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1717"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Loads the dialect for the given package. <a href="#sec:user">§5</a>; <a href="#wrglossary.768">45</a><p>
+<div class="defnbox"><a id="wrglossary.1718"></a><a href="#glo:TrackLangRequireDialectPrefix"><code class="csfmt">\TrackLangRequireDialectPrefix</code></a><span class="floatrightbox"><a id="wrglossary.1719"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Defined by <a id="wrglossary.1720"></a><a href="#glo:TrackLangRequireDialect"><code class="csfmt">\TrackLangRequireDialect</code></a>. <a href="#sec:user">§5</a>; <a href="#wrglossary.771">45</a><p>
+<div class="defnbox"><a id="wrglossary.1721"></a><a href="#glo:TrackLangRequireResource"><code class="csfmt">\TrackLangRequireResource</code></a><code class="code">{<span class="meta">〈<em class="metainner">tag</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1722"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Loads the appropriate <a id="wrglossary.1723"></a><a href="#glo:ext.ldf"><span class="extfmt">ldf</span></a> file if it hasn’t already been loaded. <a href="#sec:user">§5</a>; <a href="#wrglossary.925">53</a><p>
+<div class="defnbox"><a id="wrglossary.1724"></a><a href="#glo:TrackLangRequireResourceOrDo"><code class="csfmt">\TrackLangRequireResourceOrDo</code></a><code class="code">{<span class="meta">〈<em class="metainner">tag</em>〉</span>}{<span class="meta">〈<em class="metainner">code1</em>〉</span>}{<span class="meta">〈<em class="metainner">code2</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1725"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+As <a id="wrglossary.1726"></a><a href="#glo:TrackLangRequireResource"><code class="csfmt">\TrackLangRequireResource</code></a> but does <span class="meta">〈<em class="metainner">code1</em>〉</span> if the file is now loaded or <span class="meta">〈<em class="metainner">code2</em>〉</span> if the file has already been loaded. <a href="#sec:user">§5</a>; <a href="#wrglossary.934">53</a><p>
+<div class="defnbox"><a id="wrglossary.1727"></a><a href="#glo:TrackLangScriptAlphaToDir"><code class="csfmt">\TrackLangScriptAlphaToDir</code></a><code class="code">{<span class="meta">〈<em class="metainner">alpha code</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1728"></a><a href="#glo:file.tracklang-scripts.tex"><span class="filefmt">tracklang-scripts.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Expands to the direction associated with the given alpha script code. <a href="#sec:supplpkgs">§4</a>; <a href="#wrglossary.555">33</a><p>
+<div class="defnbox"><a id="wrglossary.1729"></a><a href="#glo:TrackLangScriptAlphaToName"><code class="csfmt">\TrackLangScriptAlphaToName</code></a><code class="code">{<span class="meta">〈<em class="metainner">alpha code</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1730"></a><a href="#glo:file.tracklang-scripts.tex"><span class="filefmt">tracklang-scripts.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Expands to the name associated with the given alpha script code. <a href="#sec:supplpkgs">§4</a>; <a href="#wrglossary.554">32</a><p>
+<div class="defnbox"><a id="wrglossary.1731"></a><a href="#glo:TrackLangScriptAlphaToNumeric"><code class="csfmt">\TrackLangScriptAlphaToNumeric</code></a><code class="code">{<span class="meta">〈<em class="metainner">alpha code</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1732"></a><a href="#glo:file.tracklang-scripts.tex"><span class="filefmt">tracklang-scripts.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Expands to the numeric script code corresponding to the given alpha code. <a href="#sec:supplpkgs">§4</a>; <a href="#wrglossary.550">32</a><p>
+<div class="defnbox"><a id="wrglossary.1733"></a><a href="#glo:TrackLangScriptCode"><code class="csfmt">\TrackLangScript<span class="meta">〈<em class="metainner">Code</em>〉</span></code></a><span class="floatrightbox"><a id="wrglossary.1734"></a><a href="#glo:file.tracklang-scripts.tex"><span class="filefmt">tracklang-scripts.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Set by <a id="wrglossary.1735"></a><a href="#glo:TrackLangScriptMap"><code class="csfmt">\TrackLangScriptMap</code></a> to the associated alpha code <span class="meta">〈<em class="metainner">Code</em>〉</span>. <a href="#sec:supplpkgs">§4</a>; <a href="#wrglossary.547">32</a><p>
+<div class="defnbox"><a id="wrglossary.1736"></a><a href="#glo:TrackLangScriptGetParent"><code class="csfmt">\TrackLangScriptGetParent</code></a><code class="code">{<span class="meta">〈<em class="metainner">alpha code</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1737"></a><a href="#glo:file.tracklang-scripts.tex"><span class="filefmt">tracklang-scripts.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Expands to the parent of the given alpha script code. <a href="#sec:supplpkgs">§4</a>; <a href="#wrglossary.557">33</a><p>
+<div class="defnbox"><a id="wrglossary.1738"></a><a href="#glo:TrackLangScriptIfHasParent"><code class="csfmt">\TrackLangScriptIfHasParent</code></a><code class="code">{<span class="meta">〈<em class="metainner">alpha code</em>〉</span>}{<span class="meta">〈<em class="metainner">true</em>〉</span>}{<span class="meta">〈<em class="metainner">false</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1739"></a><a href="#glo:file.tracklang-scripts.tex"><span class="filefmt">tracklang-scripts.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Expands to <span class="meta">〈<em class="metainner">true</em>〉</span> if the given alpha script code has a parent otherwise expands to <span class="meta">〈<em class="metainner">false</em>〉</span>. <a href="#sec:supplpkgs">§4</a>; <a href="#wrglossary.558">33</a><p>
+<div class="defnbox"><a id="wrglossary.1740"></a><a href="#glo:TrackLangScriptIfKnownAlpha"><code class="csfmt">\TrackLangScriptIfKnownAlpha</code></a><code class="code">{<span class="meta">〈<em class="metainner">alpha code</em>〉</span>}{<span class="meta">〈<em class="metainner">true</em>〉</span>}{<span class="meta">〈<em class="metainner">false</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1741"></a><a href="#glo:file.tracklang-scripts.tex"><span class="filefmt">tracklang-scripts.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Expands to <span class="meta">〈<em class="metainner">true</em>〉</span> if there’s a known mapping for the given alpha script code otherwise expands to <span class="meta">〈<em class="metainner">false</em>〉</span>. <a href="#sec:supplpkgs">§4</a>; <a href="#wrglossary.551">32</a><p>
+<div class="defnbox"><a id="wrglossary.1742"></a><a href="#glo:TrackLangScriptIfKnownNumeric"><code class="csfmt">\TrackLangScriptIfKnownNumeric</code></a><code class="code">{<span class="meta">〈<em class="metainner">numeric code</em>〉</span>}{<span class="meta">〈<em class="metainner">true</em>〉</span>}{<span class="meta">〈<em class="metainner">false</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1743"></a><a href="#glo:file.tracklang-scripts.tex"><span class="filefmt">tracklang-scripts.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Expands to <span class="meta">〈<em class="metainner">true</em>〉</span> if there’s a known mapping for the given numeric script code otherwise expands to <span class="meta">〈<em class="metainner">false</em>〉</span>. <a href="#sec:supplpkgs">§4</a>; <a href="#wrglossary.553">32</a><p>
+<div class="defnbox"><a id="wrglossary.1744"></a><a href="#glo:TrackLangScriptMap"><code class="csfmt">\TrackLangScriptMap</code></a><code class="code">{<span class="meta">〈<em class="metainner">letter code</em>〉</span>}{<span class="meta">〈<em class="metainner">numeric code</em>〉</span>}{<span class="meta">〈<em class="metainner">script name</em>〉</span>}{<span class="meta">〈<em class="metainner">direction</em>〉</span>}{<span class="meta">〈<em class="metainner">parent script</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1745"></a><a href="#glo:file.tracklang-scripts.tex"><span class="filefmt">tracklang-scripts.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Defines a mapping between an alpha code and a numeric code. <a href="#sec:supplpkgs">§4</a>; <a href="#wrglossary.544">32</a><p>
+<div class="defnbox"><a id="wrglossary.1746"></a><a href="#glo:TrackLangScriptNumericToAlpha"><code class="csfmt">\TrackLangScriptNumericToAlpha</code></a><code class="code">{<span class="meta">〈<em class="metainner">numeric code</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1747"></a><a href="#glo:file.tracklang-scripts.tex"><span class="filefmt">tracklang-scripts.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Expands to the alpha script code corresponding to the given numeric code. <a href="#sec:supplpkgs">§4</a>; <a href="#wrglossary.552">32</a><p>
+<div class="defnbox"><a id="wrglossary.1748"></a><a href="#glo:TrackLangScriptSetParent"><code class="csfmt">\TrackLangScriptSetParent</code></a><code class="code">{<span class="meta">〈<em class="metainner">alpha code</em>〉</span>}{<span class="meta">〈<em class="metainner">parent alpha code</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1749"></a><a href="#glo:file.tracklang-scripts.tex"><span class="filefmt">tracklang-scripts.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Sets the parent for the given alpha script code. <a href="#sec:supplpkgs">§4</a>; <a href="#wrglossary.556">33</a><p>
+<div class="defnbox"><a id="wrglossary.1750"></a><a href="#glo:TrackLangShowWarningsfalse"><code class="csfmt">\TrackLangShowWarningsfalse</code></a><span class="floatrightbox"><a id="wrglossary.1751"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Sets <a id="wrglossary.1752"></a><a href="#glo:ifTrackLangShowWarnings"><code class="csfmt">\ifTrackLangShowWarnings</code></a> to false. <a href="#sec:generic">§3</a>; <a href="#wrglossary.397">24</a><p>
+<div class="defnbox"><a id="wrglossary.1753"></a><a href="#glo:TrackLangShowWarningstrue"><code class="csfmt">\TrackLangShowWarningstrue</code></a><span class="floatrightbox"><a id="wrglossary.1754"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Sets <a id="wrglossary.1755"></a><a href="#glo:ifTrackLangShowWarnings"><code class="csfmt">\ifTrackLangShowWarnings</code></a> to true. <a href="#sec:generic">§3</a>; <a href="#wrglossary.398">24</a><p>
+<div class="defnbox"><a id="wrglossary.1756"></a><a href="#glo:TrackLanguageTag"><code class="csfmt">\TrackLanguageTag</code></a><code class="code">{<span class="meta">〈<em class="metainner">tag</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1757"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Parse <span class="meta">〈<em class="metainner">tag</em>〉</span>, which should be a regular, well-formed RFC 5646 language tag (not an irregular grandfather tag) and track the dialect. <a href="#sec:generic">§3</a>; <a href="#wrglossary.340">21</a><p>
+<div class="defnbox"><a id="wrglossary.1758"></a><a href="#glo:TrackLocale"><code class="csfmt">\TrackLocale</code></a><code class="code">{<span class="meta">〈<em class="metainner">locale</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1759"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.3+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Tracks the dialect identified by the given <span class="meta">〈<em class="metainner">locale</em>〉</span>, which may either be a predefined language/dialect or in the same format as <a id="wrglossary.1760"></a><a href="#glo:TrackLangEnv"><code class="csfmt">\TrackLangEnv</code></a>. <a href="#sec:generic">§3</a>; <a href="#wrglossary.301">20</a><p>
+<div class="defnbox"><a id="wrglossary.1761"></a><a href="#glo:TrackPredefinedDialect"><code class="csfmt">\TrackPredefinedDialect</code></a><code class="code">{<span class="meta">〈<em class="metainner">dialect label</em>〉</span>}</code><span class="floatrightbox"><a id="wrglossary.1762"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.0+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Tracks a predefined language or dialect. <a href="#sec:generic">§3</a>; <a href="#wrglossary.293">19</a><p>
+<div class="defnbox"><a id="wrglossary.1763"></a><a href="#glo:TwoLetterIsoCountryCode"><code class="csfmt">\TwoLetterIsoCountryCode</code></a><span class="floatrightbox"><a id="wrglossary.1764"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.0+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Expands to <a id="wrglossary.1765"></a><a href="#glo:idx.3166-1"><span class="mbox">3166-1</span></a> (should not be redefined). <a href="#sec:user">§5</a>; <a href="#wrglossary.689">40</a><p>
+<div class="defnbox"><a id="wrglossary.1766"></a><a href="#glo:TwoLetterIsoLanguageCode"><code class="csfmt">\TwoLetterIsoLanguageCode</code></a><span class="floatrightbox"><a id="wrglossary.1767"></a><a href="#glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></a> v1.0+</span><span class="clearfix"></span></div><!-- end of defnbox -->
+<p>
+Expands to <a id="wrglossary.1768"></a><a href="#glo:idx.639-1"><span class="mbox">639-1</span></a> (should not be redefined). <a href="#sec:user">§5</a>; <a href="#wrglossary.691">40</a><p>
+<p>
+
+</section><!-- end of section summary.index7798784 -->
+
+<section id="index"><!-- start of section index --><div class="tomain"><a href="#main">[top]</a></div>
+<h1><!-- start of chapter header -->Index<div class="labellink"><a href="#index">[link]</a></div></h1><!-- end of chapter header -->
+<div class="nlctusernavbox"><a href="#indexglssymbols">Symbols</a> <a href="#index@">@</a> <a href="#index6553600">A</a> <a href="#index6619136">B</a> <a href="#index6684672">C</a> <a href="#index6750208">D</a> <a href="#index6815744">E</a> <a href="#index6881280">F</a> <a href="#index6946816">G</a> <a href="#index7012352">H</a> <a href="#index7077888">I</a> <a href="#index7143424">J</a> <a href="#index7208960">K</a> <a href="#index7274496">L</a> <a href="#index7340032">M</a> <a href="#index7405568">N</a> <a href="#index7471104">O</a> <a href="#index7536640">P</a> <a href="#index7602176">Q</a> <a href="#index7667712">R</a> <a href="#index7733248">S</a> <a href="#index7798784">T</a> <a href="#index7864320">U</a> <a href="#index7929856">V</a> <a href="#index7995392">W</a> <a href="#index8060928">X</a> <a href="#index8126464">Y</a> <a href="#index8192000">Z</a></div><!-- end of nlctusernavbox -->
+
+</section><!-- end of section index -->
+
+<section id="indexglssymbols"><!-- start of section indexglssymbols --><div class="tomain"><a href="#main">[top]</a></div>
+<h2><!-- start of section header -->Symbols<div class="labellink"><a href="#indexglssymbols">[link]</a></div></h2><!-- end of section header -->
+<div class="nlctuserguideidx0"><dfn id="glo:idx.underscoresep"><code class="code">_</code> (separator)</dfn><span class="qquad"></span><a href="#wrglossary.323">20</a>, <a href="#wrglossary.400">24</a>, <a href="#wrglossary.420">25</a>, <a href="#wrglossary.1341">78</a>, <a href="#wrglossary.1396">80</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:idx.dotsep"><code class="code">.</code> (code-set)</dfn><span class="qquad"></span><a href="#wrglossary.325">20</a>, <a href="#wrglossary.401">24</a>, <a href="#wrglossary.1342">78</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:idx.escbsl"><code class="code">\\</code> (escaped backslash)</dfn><span class="qquad"></span><a href="#wrglossary.431">25</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:idx.dollarenv"><code class="code">$</code> (environment variable)</dfn><span class="qquad"></span><a href="#wrglossary.434">25</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:idx.hyphensep"><code class="code">-</code> (separator)</dfn><span class="qquad"></span><a href="#wrglossary.307">20</a>, <a href="#wrglossary.421">25</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:switch.shell-escape"><span class="longargfmt">--shell-escape</span></dfn><span class="qquad"></span><a href="#wrglossary.393">23</a>, <a href="#wrglossary.396">24</a></div><!-- end of nlctuserguideidx0 -->
+
+</section><!-- end of section indexglssymbols -->
+
+<section id="index@"><!-- start of section index@ --><div class="tomain"><a href="#main">[top]</a></div>
+<h2><!-- start of section header -->@<div class="labellink"><a href="#index@">[link]</a></div></h2><!-- end of section header -->
+<div class="nlctuserguideidx0"><dfn id="glo:idx.atletter"><code class="code">@</code> (catcode 11)</dfn><span class="qquad"></span><a href="#wrglossary.279">19</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:idx.atmod"><code class="code">@</code> (modifier)</dfn><span class="qquad"></span><a href="#wrglossary.305">20</a>, <a href="#wrglossary.1343">78</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:@for"><code class="csfmt">\@for</code></dfn><span class="qquad"></span><a href="#wrglossary.648">37</a>, <a href="#wrglossary.1428">94</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:@nil"><code class="csfmt">\@nil</code></dfn><span class="qquad"></span><a href="#wrglossary.650">37</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:@tracklang@declareoption"><code class="csfmt">\@tracklang@declareoption</code></a><span class="qquad"></span><a href="#sec:generic">§3</a>; <a href="#wrglossary.283">19</a>, <span class="summarylocfmt"><a href="#wrglossary.1422">94</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:@tracklang@for"><code class="csfmt">\@tracklang@for</code></a><span class="qquad"></span><a href="#sec:user">§5</a>; <a href="#wrglossary.649">37</a>, <span class="summarylocfmt"><a href="#wrglossary.1426">94</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:@tracklang@prelangpkgcheck@hook"><code class="csfmt">\@tracklang@prelangpkgcheck@hook</code></a><span class="qquad"></span><a href="#sec:langsty">§6</a>; <a href="#wrglossary.1198">71</a>, <span class="summarylocfmt"><a href="#wrglossary.1429">94</a></span></div><!-- end of nlctuserguideidx0 -->
+
+</section><!-- end of section index@ -->
+
+<section id="index6553600"><!-- start of section index6553600 --><div class="tomain"><a href="#main">[top]</a></div>
+<h2><!-- start of section header -->A<div class="labellink"><a href="#index6553600">[link]</a></div></h2><!-- end of section header -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.aa"><span class="optfmt">aa</span> (<a id="wrglossary.1769"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.afar"><span class="optfmt">afar</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.ab"><span class="optfmt">ab</span> (<a id="wrglossary.1770"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.abkhaz"><span class="optfmt">abkhaz</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.abkhaz"><span class="optfmt">abkhaz</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.acadian"><span class="optfmt">acadian</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.AD"><span class="optfmt">AD</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:AddTrackedCountryIsoCode"><code class="csfmt">\AddTrackedCountryIsoCode</code></a><span class="qquad"></span><span class="summarylocfmt"><a href="#wrglossary.1433">94</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:AddTrackedDialect"><code class="csfmt">\AddTrackedDialect</code></a><span class="qquad"></span><a href="#sec:newlanguages">§6.5</a>; <a href="#wrglossary.1283">75</a>–<a href="#wrglossary.1363">79</a>, <span class="summarylocfmt"><a href="#wrglossary.1436">94</a></span>, <a href="#wrglossary.1444">95</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:AddTrackedIsoLanguage"><code class="csfmt">\AddTrackedIsoLanguage</code></a><span class="qquad"></span><a href="#wrglossary.1371">79</a>, <span class="summarylocfmt"><a href="#wrglossary.1439">95</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:AddTrackedLanguage"><code class="csfmt">\AddTrackedLanguage</code></a><span class="qquad"></span><a href="#sec:newlanguages">§6.5</a>; <a href="#wrglossary.1284">75</a>, <span class="summarylocfmt"><a href="#wrglossary.1442">95</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:AddTrackedLanguageIsoCodes"><code class="csfmt">\AddTrackedLanguageIsoCodes</code></a><span class="qquad"></span><a href="#sec:definelabels">§6.6</a>; <a href="#wrglossary.1331">77</a>–<a href="#wrglossary.1368">79</a>, <span class="summarylocfmt"><a href="#wrglossary.1445">95</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Adlm"><span class="optfmt">Adlm</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.AE"><span class="optfmt">AE</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.ae"><span class="optfmt">ae</span> (<a id="wrglossary.1771"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.avestan"><span class="optfmt">avestan</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.AF"><span class="optfmt">AF</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.af"><span class="optfmt">af</span> (<a id="wrglossary.1772"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.afrikaans"><span class="optfmt">afrikaans</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Afak"><span class="optfmt">Afak</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.afar"><span class="optfmt">afar</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.afrikaans"><span class="optfmt">afrikaans</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.AG"><span class="optfmt">AG</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Aghb"><span class="optfmt">Aghb</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Ahom"><span class="optfmt">Ahom</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.AI"><span class="optfmt">AI</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.ak"><span class="optfmt">ak</span> (<a id="wrglossary.1773"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.akan"><span class="optfmt">akan</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.akan"><span class="optfmt">akan</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.AL"><span class="optfmt">AL</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.albanian"><span class="optfmt">albanian</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:file.alien.sty"><span class="filefmt">alien.sty</span></dfn><span class="qquad"></span><a href="#wrglossary.1373">79</a>–<a href="#wrglossary.1408">81</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:pkg.alien"><span class="styfmt">alien</span> package</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:file.alien.sty"><span class="filefmt">alien.sty</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.AM"><span class="optfmt">AM</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.am"><span class="optfmt">am</span> (<a id="wrglossary.1774"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.amharic"><span class="optfmt">amharic</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.american"><span class="optfmt">american</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a>; <a href="#wrglossary.1001">59</a>, <a href="#wrglossary.1019">60</a>, <a href="#wrglossary.1189">70</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.amharic"><span class="optfmt">amharic</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.an"><span class="optfmt">an</span> (<a id="wrglossary.1775"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.aragonese"><span class="optfmt">aragonese</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.ang"><span class="optfmt">ang</span> (<a id="wrglossary.1776"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.anglosaxon"><span class="optfmt">anglosaxon</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.anglosaxon"><span class="optfmt">anglosaxon</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:file.animals.sty"><span class="filefmt">animals.sty</span></dfn><span class="qquad"></span><a href="#wrglossary.964">55</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:AnyTrackedLanguages"><code class="csfmt">\AnyTrackedLanguages</code></a><span class="qquad"></span><a href="#sec:user">§5</a>; <a href="#wrglossary.186">14</a>, <a href="#wrglossary.191">15</a>, <a href="#wrglossary.618">35</a>, <span class="summarylocfmt"><a href="#wrglossary.1451">95</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.AO"><span class="optfmt">AO</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.apa"><span class="optfmt">apa</span> (<a id="wrglossary.1777"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.apache"><span class="optfmt">apache</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.apache"><span class="optfmt">apache</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.AQ"><span class="optfmt">AQ</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.AR"><span class="optfmt">AR</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.ar"><span class="optfmt">ar</span> (<a id="wrglossary.1778"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.arabic"><span class="optfmt">arabic</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Arab"><span class="optfmt">Arab</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.arabic"><span class="optfmt">arabic</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.aragonese"><span class="optfmt">aragonese</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Aran"><span class="optfmt">Aran</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.argentinespanish"><span class="optfmt">argentinespanish</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.armenian"><span class="optfmt">armenian</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Armi"><span class="optfmt">Armi</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Armn"><span class="optfmt">Armn</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.AS"><span class="optfmt">AS</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.as"><span class="optfmt">as</span> (<a id="wrglossary.1779"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.assamese"><span class="optfmt">assamese</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.assamese"><span class="optfmt">assamese</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.ast"><span class="optfmt">ast</span> (<a id="wrglossary.1780"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.asturian"><span class="optfmt">asturian</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.asturian"><span class="optfmt">asturian</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.AT"><span class="optfmt">AT</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:AtBeginDocument"><code class="csfmt">\AtBeginDocument</code></dfn><span class="qquad"></span><a href="#wrglossary.652">37</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.AU"><span class="optfmt">AU</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.australian"><span class="optfmt">australian</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.austrian"><span class="optfmt">austrian</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.av"><span class="optfmt">av</span> (<a id="wrglossary.1781"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.avaric"><span class="optfmt">avaric</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.avaric"><span class="optfmt">avaric</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.avestan"><span class="optfmt">avestan</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Avst"><span class="optfmt">Avst</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.AW"><span class="optfmt">AW</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.AX"><span class="optfmt">AX</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.ay"><span class="optfmt">ay</span> (<a id="wrglossary.1782"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.aymara"><span class="optfmt">aymara</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.aymara"><span class="optfmt">aymara</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.AZ"><span class="optfmt">AZ</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.az"><span class="optfmt">az</span> (<a id="wrglossary.1783"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.azerbaijani"><span class="optfmt">azerbaijani</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.azerbaijani"><span class="optfmt">azerbaijani</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+
+</section><!-- end of section index6553600 -->
+
+<section id="index6619136"><!-- start of section index6619136 --><div class="tomain"><a href="#main">[top]</a></div>
+<h2><!-- start of section header -->B<div class="labellink"><a href="#index6619136">[link]</a></div></h2><!-- end of section header -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.BA"><span class="optfmt">BA</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.ba"><span class="optfmt">ba</span> (<a id="wrglossary.1784"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.bashkir"><span class="optfmt">bashkir</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:pkg.babel"><span class="styfmt">babel</span> package</dfn><span class="qquad"></span><a href="#wrglossary.2">a</a>, <a href="#wrglossary.21">2</a>, <a href="#wrglossary.51">3</a>, <a href="#wrglossary.72">9</a>, <a href="#wrglossary.144">12</a>, <a href="#wrglossary.179">13</a>, <a href="#wrglossary.600">35</a>, <a href="#wrglossary.946">53</a>, <a href="#wrglossary.954">54</a>, <a href="#wrglossary.992">58</a>, <a href="#wrglossary.996">59</a>, <a href="#wrglossary.1156">68</a>–<a href="#wrglossary.1182">70</a>, <a href="#wrglossary.1311">77</a>, <a href="#wrglossary.1431">94</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:babelprovide"><code class="csfmt">\babelprovide</code></dfn><span class="qquad"></span><a href="#wrglossary.39">2</a>, <a href="#wrglossary.168">13</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.bahasa"><span class="optfmt">bahasa</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.bahasai"><span class="optfmt">bahasai</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.bahasam"><span class="optfmt">bahasam</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Bali"><span class="optfmt">Bali</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.bambara"><span class="optfmt">bambara</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Bamu"><span class="optfmt">Bamu</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.bashkir"><span class="optfmt">bashkir</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.basque"><span class="optfmt">basque</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Bass"><span class="optfmt">Bass</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Batk"><span class="optfmt">Batk</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.BB"><span class="optfmt">BB</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:bbl@loaded"><code class="csfmt">\bbl@loaded</code></dfn><span class="qquad"></span><a href="#wrglossary.40">2</a>, <a href="#wrglossary.599">35</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:idx.BCP47">BCP 47</dfn><span class="qquad"></span><a href="#wrglossary.612">35</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.BD"><span class="optfmt">BD</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.BE"><span class="optfmt">BE</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.be"><span class="optfmt">be</span> (<a id="wrglossary.1785"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.belarusian"><span class="optfmt">belarusian</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.belarusian"><span class="optfmt">belarusian</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.belgiangerman"><span class="optfmt">belgiangerman</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.belgique"><span class="optfmt">belgique</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Beng"><span class="optfmt">Beng</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.bengali"><span class="optfmt">bengali</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.ber"><span class="optfmt">ber</span> (<a id="wrglossary.1786"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.berber"><span class="optfmt">berber</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.berber"><span class="optfmt">berber</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.BF"><span class="optfmt">BF</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.BG"><span class="optfmt">BG</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.bg"><span class="optfmt">bg</span> (<a id="wrglossary.1787"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.bulgarian"><span class="optfmt">bulgarian</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.BH"><span class="optfmt">BH</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.bh"><span class="optfmt">bh</span> (<a id="wrglossary.1788"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.bihari"><span class="optfmt">bihari</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.BI"><span class="optfmt">BI</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.bi"><span class="optfmt">bi</span> (<a id="wrglossary.1789"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.bislama"><span class="optfmt">bislama</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.bihari"><span class="optfmt">bihari</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.bislama"><span class="optfmt">bislama</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.BJ"><span class="optfmt">BJ</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.BL"><span class="optfmt">BL</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Blis"><span class="optfmt">Blis</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.BM"><span class="optfmt">BM</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.bm"><span class="optfmt">bm</span> (<a id="wrglossary.1790"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.bambara"><span class="optfmt">bambara</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.BN"><span class="optfmt">BN</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.bn"><span class="optfmt">bn</span> (<a id="wrglossary.1791"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.bengali"><span class="optfmt">bengali</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.BO"><span class="optfmt">BO</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.bo"><span class="optfmt">bo</span> (<a id="wrglossary.1792"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.tibetan"><span class="optfmt">tibetan</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.bokmal"><span class="optfmt">bokmal</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.bolivianspanish"><span class="optfmt">bolivianspanish</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Bopo"><span class="optfmt">Bopo</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.bosnian"><span class="optfmt">bosnian</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.BQ"><span class="optfmt">BQ</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.BR"><span class="optfmt">BR</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.br"><span class="optfmt">br</span> (<a id="wrglossary.1793"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.breton"><span class="optfmt">breton</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Brah"><span class="optfmt">Brah</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Brai"><span class="optfmt">Brai</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.brazil"><span class="optfmt">brazil</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.brazilian"><span class="optfmt">brazilian</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a>; <a href="#wrglossary.347">21</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.breton"><span class="optfmt">breton</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.british"><span class="optfmt">british</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a>; <a href="#wrglossary.36">2</a>, <a href="#wrglossary.57">3</a>, <a href="#wrglossary.146">12</a>, <a href="#wrglossary.163">13</a>, <a href="#wrglossary.197">15</a>, <a href="#wrglossary.244">17</a>, <a href="#wrglossary.565">34</a>, <a href="#wrglossary.638">36</a>, <a href="#wrglossary.815">49</a>, <a href="#wrglossary.942">53</a>, <a href="#wrglossary.1005">59</a>–<a href="#wrglossary.1072">62</a>, <a href="#wrglossary.1187">70</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.BS"><span class="optfmt">BS</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.bs"><span class="optfmt">bs</span> (<a id="wrglossary.1794"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.bosnian"><span class="optfmt">bosnian</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.BT"><span class="optfmt">BT</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Bugi"><span class="optfmt">Bugi</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Buhd"><span class="optfmt">Buhd</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.bulgarian"><span class="optfmt">bulgarian</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.burmese"><span class="optfmt">burmese</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.BV"><span class="optfmt">BV</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.BW"><span class="optfmt">BW</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.BY"><span class="optfmt">BY</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.BZ"><span class="optfmt">BZ</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+
+</section><!-- end of section index6619136 -->
+
+<section id="index6684672"><!-- start of section index6684672 --><div class="tomain"><a href="#main">[top]</a></div>
+<h2><!-- start of section header -->C<div class="labellink"><a href="#index6684672">[link]</a></div></h2><!-- end of section header -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.CA"><span class="optfmt">CA</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.ca"><span class="optfmt">ca</span> (<a id="wrglossary.1795"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.catalan"><span class="optfmt">catalan</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Cakm"><span class="optfmt">Cakm</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.canadian"><span class="optfmt">canadian</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.canadien"><span class="optfmt">canadien</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a>; <a href="#wrglossary.147">12</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Cans"><span class="optfmt">Cans</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:captionsdialect"><code class="csfmt">\captions<span class="meta">〈<em class="metainner">dialect</em>〉</span></code></dfn><span class="qquad"></span><a href="#tab:nonisoopts">Table 1.3</a>; <a href="#wrglossary.155">12</a>, <a href="#wrglossary.161">13</a>, <a href="#wrglossary.208">15</a>, <a href="#wrglossary.945">53</a>, <a href="#wrglossary.947">54</a>, <a href="#wrglossary.1004">59</a>, <a href="#wrglossary.1021">61</a>, <a href="#wrglossary.1157">68</a>, <a href="#wrglossary.1178">70</a>, <a href="#wrglossary.1239">73</a>, <a href="#wrglossary.1313">77</a>, <a href="#wrglossary.1402">80</a>, <a href="#wrglossary.1403">81</a>, <a href="#wrglossary.1547">101</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Cari"><span class="optfmt">Cari</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.catalan"><span class="optfmt">catalan</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.CC"><span class="optfmt">CC</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.CD"><span class="optfmt">CD</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.ce"><span class="optfmt">ce</span> (<a id="wrglossary.1796"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.chechen"><span class="optfmt">chechen</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.CF"><span class="optfmt">CF</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.CG"><span class="optfmt">CG</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.CH"><span class="optfmt">CH</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.ch"><span class="optfmt">ch</span> (<a id="wrglossary.1797"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.chamorro"><span class="optfmt">chamorro</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Cham"><span class="optfmt">Cham</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.chamorro"><span class="optfmt">chamorro</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.chechen"><span class="optfmt">chechen</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Cher"><span class="optfmt">Cher</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.chichewa"><span class="optfmt">chichewa</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.chilianspanish"><span class="optfmt">chilianspanish</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.chinese"><span class="optfmt">chinese</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a>; <a href="#wrglossary.355">22</a>, <a href="#wrglossary.1367">79</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.churchslavonic"><span class="optfmt">churchslavonic</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.chuvash"><span class="optfmt">chuvash</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.CI"><span class="optfmt">CI</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Cirt"><span class="optfmt">Cirt</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.CK"><span class="optfmt">CK</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.CL"><span class="optfmt">CL</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:cli">CLI</dfn><span class="qquad"></span><span class="termslocfmt"><a href="#wrglossary.1417">93</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.CM"><span class="optfmt">CM</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.CN"><span class="optfmt">CN</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.CO"><span class="optfmt">CO</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.co"><span class="optfmt">co</span> (<a id="wrglossary.1798"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.corsican"><span class="optfmt">corsican</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:idx.code-set">code-set</dfn><span class="qquad"></span><a href="#wrglossary.324">20</a>, <a href="#wrglossary.443">26</a>, <a href="#wrglossary.1602">104</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.columbianspanish"><span class="optfmt">columbianspanish</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.cop"><span class="optfmt">cop</span> (<a id="wrglossary.1799"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.coptic"><span class="optfmt">coptic</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Copt"><span class="optfmt">Copt</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.coptic"><span class="optfmt">coptic</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.cornish"><span class="optfmt">cornish</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.corsican"><span class="optfmt">corsican</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.costaricanspanish"><span class="optfmt">costaricanspanish</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Cprt"><span class="optfmt">Cprt</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.CR"><span class="optfmt">CR</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.cr"><span class="optfmt">cr</span> (<a id="wrglossary.1800"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.cree"><span class="optfmt">cree</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.cree"><span class="optfmt">cree</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.croatia"><span class="optfmt">croatia</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.croatian"><span class="optfmt">croatian</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.cs"><span class="optfmt">cs</span> (<a id="wrglossary.1801"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.czech"><span class="optfmt">czech</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.CU"><span class="optfmt">CU</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.cu"><span class="optfmt">cu</span> (<a id="wrglossary.1802"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.churchslavonic"><span class="optfmt">churchslavonic</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.cubanspanish"><span class="optfmt">cubanspanish</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:CurrentTrackedDialect"><code class="csfmt">\CurrentTrackedDialect</code></a><span class="qquad"></span><a href="#sec:user">§5</a>; <a href="#wrglossary.115">10</a>, <a href="#wrglossary.778">46</a>, <a href="#wrglossary.940">53</a>, <a href="#wrglossary.1245">73</a>, <a href="#wrglossary.1405">81</a>, <span class="summarylocfmt"><a href="#wrglossary.1453">95</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:CurrentTrackedDialectAdditional"><code class="csfmt">\CurrentTrackedDialectAdditional</code></a><span class="qquad"></span><a href="#sec:user">§5</a>; <a href="#wrglossary.123">11</a>, <a href="#wrglossary.790">46</a>, <span class="summarylocfmt"><a href="#wrglossary.1456">95</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:CurrentTrackedDialectModifier"><code class="csfmt">\CurrentTrackedDialectModifier</code></a><span class="qquad"></span><a href="#sec:user">§5</a>; <a href="#wrglossary.119">11</a>, <a href="#wrglossary.787">46</a>, <a href="#wrglossary.1249">73</a>, <span class="summarylocfmt"><a href="#wrglossary.1459">95</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:CurrentTrackedDialectScript"><code class="csfmt">\CurrentTrackedDialectScript</code></a><span class="qquad"></span><a href="#sec:user">§5</a>; <a href="#wrglossary.121">11</a>, <a href="#wrglossary.216">15</a>, <a href="#wrglossary.793">47</a>, <a href="#wrglossary.1251">73</a>, <span class="summarylocfmt"><a href="#wrglossary.1462">96</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:CurrentTrackedDialectSubLang"><code class="csfmt">\CurrentTrackedDialectSubLang</code></a><span class="qquad"></span><a href="#sec:user">§5</a>; <a href="#wrglossary.122">11</a>, <a href="#wrglossary.789">46</a>, <a href="#wrglossary.1255">74</a>, <span class="summarylocfmt"><a href="#wrglossary.1465">96</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:CurrentTrackedDialectVariant"><code class="csfmt">\CurrentTrackedDialectVariant</code></a><span class="qquad"></span><a href="#sec:user">§5</a>; <a href="#wrglossary.120">11</a>, <a href="#wrglossary.788">46</a>, <a href="#wrglossary.1250">73</a>, <span class="summarylocfmt"><a href="#wrglossary.1468">96</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:CurrentTrackedIsoCode"><code class="csfmt">\CurrentTrackedIsoCode</code></a><span class="qquad"></span><a href="#sec:user">§5</a>; <a href="#wrglossary.117">11</a>, <a href="#wrglossary.783">46</a>, <a href="#wrglossary.1257">74</a>, <span class="summarylocfmt"><a href="#wrglossary.1471">96</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:CurrentTrackedLanguage"><code class="csfmt">\CurrentTrackedLanguage</code></a><span class="qquad"></span><a href="#sec:user">§5</a>; <a href="#wrglossary.116">11</a>, <a href="#wrglossary.779">46</a>, <a href="#wrglossary.804">49</a>, <a href="#wrglossary.939">53</a>, <a href="#wrglossary.1247">73</a>, <span class="summarylocfmt"><a href="#wrglossary.1477">96</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:CurrentTrackedLanguageTag"><code class="csfmt">\CurrentTrackedLanguageTag</code></a><span class="qquad"></span><a href="#sec:user">§5</a>; <a href="#wrglossary.124">11</a>, <a href="#wrglossary.791">47</a>, <a href="#wrglossary.1264">74</a>, <span class="summarylocfmt"><a href="#wrglossary.1480">96</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:CurrentTrackedRegion"><code class="csfmt">\CurrentTrackedRegion</code></a><span class="qquad"></span><a href="#sec:user">§5</a>; <a href="#wrglossary.118">11</a>, <a href="#wrglossary.780">46</a>, <a href="#wrglossary.1151">68</a>, <a href="#wrglossary.1262">74</a>, <span class="summarylocfmt"><a href="#wrglossary.1484">96</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:CurrentTrackedTag"><code class="csfmt">\CurrentTrackedTag</code></a><span class="qquad"></span><a href="#sec:user">§5</a>; <a href="#wrglossary.766">45</a>, <a href="#wrglossary.792">47</a>, <a href="#wrglossary.1146">68</a>, <span class="summarylocfmt"><a href="#wrglossary.1488">97</a></span>, <a href="#wrglossary.1530">100</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.CV"><span class="optfmt">CV</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.cv"><span class="optfmt">cv</span> (<a id="wrglossary.1803"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.chuvash"><span class="optfmt">chuvash</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.CW"><span class="optfmt">CW</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.CX"><span class="optfmt">CX</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.cy-GB"><span class="optfmt">cy-GB</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:isoopts">Table 1.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.CY"><span class="optfmt">CY</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.cy"><span class="optfmt">cy</span> (<a id="wrglossary.1804"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.welsh"><span class="optfmt">welsh</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.cymraeg"><span class="optfmt">cymraeg</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Cyrl"><span class="optfmt">Cyrl</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a>; <a href="#wrglossary.228">16</a>, <a href="#wrglossary.546">32</a>, <a href="#wrglossary.742">42</a>, <a href="#wrglossary.1354">78</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Cyrs"><span class="optfmt">Cyrs</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.CZ"><span class="optfmt">CZ</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.czech"><span class="optfmt">czech</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+
+</section><!-- end of section index6684672 -->
+
+<section id="index6750208"><!-- start of section index6750208 --><div class="tomain"><a href="#main">[top]</a></div>
+<h2><!-- start of section header -->D<div class="labellink"><a href="#index6750208">[link]</a></div></h2><!-- end of section header -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.da"><span class="optfmt">da</span> (<a id="wrglossary.1805"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.danish"><span class="optfmt">danish</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.danish"><span class="optfmt">danish</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:datedialect"><code class="csfmt">\date<span class="meta">〈<em class="metainner">dialect</em>〉</span></code></dfn><span class="qquad"></span><a href="#tab:nonisoopts">Table 1.3</a>; <a href="#wrglossary.209">15</a>, <a href="#wrglossary.962">55</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:pkg.datetime2"><span class="styfmt">datetime2</span> package</dfn><span class="qquad"></span><a href="#wrglossary.71">9</a>, <a href="#wrglossary.349">21</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.de-AT"><span class="optfmt">de-AT</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:isoopts">Table 1.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.de-AT-1996"><span class="optfmt">de-AT-1996</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:isoopts">Table 1.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.de-BE"><span class="optfmt">de-BE</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:isoopts">Table 1.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.de-CH"><span class="optfmt">de-CH</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:isoopts">Table 1.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.de-CH-1996"><span class="optfmt">de-CH-1996</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:isoopts">Table 1.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.de-DE"><span class="optfmt">de-DE</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:isoopts">Table 1.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.de-DE-1996"><span class="optfmt">de-DE-1996</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:isoopts">Table 1.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.DE"><span class="optfmt">DE</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.de"><span class="optfmt">de</span> (<a id="wrglossary.1806"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.german"><span class="optfmt">german</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:DeclareOption"><code class="csfmt">\DeclareOption</code></dfn><span class="qquad"></span><a href="#wrglossary.181">13</a>, <a href="#wrglossary.284">19</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.deutsch"><span class="optfmt">deutsch</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Deva"><span class="optfmt">Deva</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:directlua"><code class="csfmt">\directlua</code></dfn><span class="qquad"></span><a href="#wrglossary.6">a</a>, <a href="#wrglossary.377">23</a>, <a href="#wrglossary.1701">109</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.divehi"><span class="optfmt">divehi</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.DJ"><span class="optfmt">DJ</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.DK"><span class="optfmt">DK</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.DM"><span class="optfmt">DM</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.DO"><span class="optfmt">DO</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.dominicanspanish"><span class="optfmt">dominicanspanish</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.dsb"><span class="optfmt">dsb</span> (<a id="wrglossary.1807"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.lsorbian"><span class="optfmt">lsorbian</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Dsrt"><span class="optfmt">Dsrt</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Dupl"><span class="optfmt">Dupl</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.dutch"><span class="optfmt">dutch</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.dv"><span class="optfmt">dv</span> (<a id="wrglossary.1808"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.divehi"><span class="optfmt">divehi</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.DZ"><span class="optfmt">DZ</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.dz"><span class="optfmt">dz</span> (<a id="wrglossary.1809"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.dzongkha"><span class="optfmt">dzongkha</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.dzongkha"><span class="optfmt">dzongkha</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+
+</section><!-- end of section index6750208 -->
+
+<section id="index6815744"><!-- start of section index6815744 --><div class="tomain"><a href="#main">[top]</a></div>
+<h2><!-- start of section header -->E<div class="labellink"><a href="#index6815744">[link]</a></div></h2><!-- end of section header -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.easternpunjabi"><span class="optfmt">easternpunjabi</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.EC"><span class="optfmt">EC</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.ecudorianspanish"><span class="optfmt">ecudorianspanish</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.EE"><span class="optfmt">EE</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.ee"><span class="optfmt">ee</span> (<a id="wrglossary.1810"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.ewe"><span class="optfmt">ewe</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.EG"><span class="optfmt">EG</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Egyd"><span class="optfmt">Egyd</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Egyh"><span class="optfmt">Egyh</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Egyp"><span class="optfmt">Egyp</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.EH"><span class="optfmt">EH</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.el"><span class="optfmt">el</span> (<a id="wrglossary.1811"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.greek"><span class="optfmt">greek</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Elba"><span class="optfmt">Elba</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.elsalvadorspanish"><span class="optfmt">elsalvadorspanish</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.en-AU"><span class="optfmt">en-AU</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:isoopts">Table 1.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.en-CA"><span class="optfmt">en-CA</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:isoopts">Table 1.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.en-GB"><span class="optfmt">en-GB</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:isoopts">Table 1.1</a>; <a href="#wrglossary.143">12</a>, <a href="#wrglossary.199">15</a>, <a href="#wrglossary.412">24</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.en-GG"><span class="optfmt">en-GG</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:isoopts">Table 1.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.en-IE"><span class="optfmt">en-IE</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:isoopts">Table 1.1</a>; <a href="#wrglossary.151">12</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.en-IM"><span class="optfmt">en-IM</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:isoopts">Table 1.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.en-JE"><span class="optfmt">en-JE</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:isoopts">Table 1.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.en-MT"><span class="optfmt">en-MT</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:isoopts">Table 1.1</a>; <a href="#wrglossary.157">12</a>, <a href="#wrglossary.165">13</a>, <a href="#wrglossary.250">17</a>, <a href="#wrglossary.1177">70</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.en-NZ"><span class="optfmt">en-NZ</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:isoopts">Table 1.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.en-US"><span class="optfmt">en-US</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:isoopts">Table 1.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.en"><span class="optfmt">en</span> (<a id="wrglossary.1812"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.english"><span class="optfmt">english</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.english"><span class="optfmt">english</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a>; <a href="#wrglossary.35">2</a>, <a href="#wrglossary.58">3</a>, <a href="#wrglossary.196">15</a>, <a href="#wrglossary.566">34</a>, <a href="#wrglossary.636">36</a>, <a href="#wrglossary.676">39</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:idx.envvar">environment variables</dfn></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx1"><dfn id="glo:opt.envvar.LANG"><code class="envvarfmt">LANG</code></dfn><span class="qquad"></span><a href="#wrglossary.8">a</a>, <a href="#wrglossary.379">23</a>–<a href="#wrglossary.455">26</a>, <a href="#wrglossary.1395">80</a></div><!-- end of nlctuserguideidx1 -->
+<div class="nlctuserguideidx1"><dfn id="glo:opt.envvar.LCALL"><code class="envvarfmt">LC_ALL</code></dfn><span class="qquad"></span><a href="#wrglossary.7">a</a>, <a href="#wrglossary.378">23</a>, <a href="#wrglossary.454">26</a>, <a href="#wrglossary.1597">104</a>, <a href="#wrglossary.1699">109</a></div><!-- end of nlctuserguideidx1 -->
+<div class="nlctuserguideidx1"><dfn id="glo:opt.envvar.LCMONETARY"><code class="envvarfmt">LC_MONETARY</code></dfn><span class="qquad"></span><a href="#wrglossary.460">26</a></div><!-- end of nlctuserguideidx1 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.eo"><span class="optfmt">eo</span> (<a id="wrglossary.1813"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.esperanto"><span class="optfmt">esperanto</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.ER"><span class="optfmt">ER</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.es-AR"><span class="optfmt">es-AR</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:isoopts">Table 1.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.es-BO"><span class="optfmt">es-BO</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:isoopts">Table 1.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.es-CL"><span class="optfmt">es-CL</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:isoopts">Table 1.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.es-CO"><span class="optfmt">es-CO</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:isoopts">Table 1.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.es-CR"><span class="optfmt">es-CR</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:isoopts">Table 1.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.es-CU"><span class="optfmt">es-CU</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:isoopts">Table 1.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.es-DO"><span class="optfmt">es-DO</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:isoopts">Table 1.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.es-EC"><span class="optfmt">es-EC</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:isoopts">Table 1.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.es-ES"><span class="optfmt">es-ES</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:isoopts">Table 1.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.es-GT"><span class="optfmt">es-GT</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:isoopts">Table 1.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.es-HN"><span class="optfmt">es-HN</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:isoopts">Table 1.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.es-MX"><span class="optfmt">es-MX</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:isoopts">Table 1.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.es-NI"><span class="optfmt">es-NI</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:isoopts">Table 1.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.es-PA"><span class="optfmt">es-PA</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:isoopts">Table 1.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.es-PE"><span class="optfmt">es-PE</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:isoopts">Table 1.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.es-PR"><span class="optfmt">es-PR</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:isoopts">Table 1.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.es-PY"><span class="optfmt">es-PY</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:isoopts">Table 1.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.es-SV"><span class="optfmt">es-SV</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:isoopts">Table 1.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.es-UY"><span class="optfmt">es-UY</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:isoopts">Table 1.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.es-VE"><span class="optfmt">es-VE</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:isoopts">Table 1.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.ES"><span class="optfmt">ES</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.es"><span class="optfmt">es</span> (<a id="wrglossary.1814"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.spanish"><span class="optfmt">spanish</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.esperanto"><span class="optfmt">esperanto</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.estonian"><span class="optfmt">estonian</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.ET"><span class="optfmt">ET</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.et"><span class="optfmt">et</span> (<a id="wrglossary.1815"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.estonian"><span class="optfmt">estonian</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:app.etex"><span class="appfmt">etex</span> (application)</dfn><span class="qquad"></span><a href="#wrglossary.392">23</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Ethi"><span class="optfmt">Ethi</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:pkg.etoolbox"><span class="styfmt">etoolbox</span> package</dfn><span class="qquad"></span><a href="#wrglossary.952">54</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.eu"><span class="optfmt">eu</span> (<a id="wrglossary.1816"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.basque"><span class="optfmt">basque</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.ewe"><span class="optfmt">ewe</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+
+</section><!-- end of section index6815744 -->
+
+<section id="index6881280"><!-- start of section index6881280 --><div class="tomain"><a href="#main">[top]</a></div>
+<h2><!-- start of section header -->F<div class="labellink"><a href="#index6881280">[link]</a></div></h2><!-- end of section header -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.fa"><span class="optfmt">fa</span> (<a id="wrglossary.1817"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.farsi"><span class="optfmt">farsi</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.faroese"><span class="optfmt">faroese</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.farsi"><span class="optfmt">farsi</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.ff"><span class="optfmt">ff</span> (<a id="wrglossary.1818"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.fula"><span class="optfmt">fula</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.FI"><span class="optfmt">FI</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.fi"><span class="optfmt">fi</span> (<a id="wrglossary.1819"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.finnish"><span class="optfmt">finnish</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.fijian"><span class="optfmt">fijian</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:fileformat">file formats</dfn></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx1"><dfn id="glo:ext.ldf"><span class="extfmt">ldf</span></dfn><span class="qquad"></span><a href="#wrglossary.176">13</a>, <a href="#wrglossary.195">15</a>, <a href="#wrglossary.770">45</a>, <a href="#wrglossary.1061">62</a></div><!-- end of nlctuserguideidx1 -->
+<div class="nlctuserguideidx1"><dfn id="glo:ext.log"><span class="extfmt">log</span></dfn><span class="qquad"></span><a href="#wrglossary.1420">93</a></div><!-- end of nlctuserguideidx1 -->
+<div class="nlctuserguideidx1"><dfn id="glo:ext.tex"><span class="extfmt">tex</span></dfn><span class="qquad"></span><a href="#wrglossary.76">9</a></div><!-- end of nlctuserguideidx1 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.finnish"><span class="optfmt">finnish</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.FJ"><span class="optfmt">FJ</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.fj"><span class="optfmt">fj</span> (<a id="wrglossary.1820"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.fijian"><span class="optfmt">fijian</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.FK"><span class="optfmt">FK</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.flemish"><span class="optfmt">flemish</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.FM"><span class="optfmt">FM</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.FO"><span class="optfmt">FO</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.fo"><span class="optfmt">fo</span> (<a id="wrglossary.1821"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.faroese"><span class="optfmt">faroese</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:ForEachTrackedDialect"><code class="csfmt">\ForEachTrackedDialect</code></a><span class="qquad"></span><a href="#sec:user">§5</a>; <a href="#wrglossary.34">2</a>, <a href="#wrglossary.192">15</a>, <a href="#wrglossary.646">37</a>, <span class="summarylocfmt"><a href="#wrglossary.1490">97</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:ForEachTrackedLanguage"><code class="csfmt">\ForEachTrackedLanguage</code></a><span class="qquad"></span><a href="#sec:user">§5</a>; <a href="#wrglossary.647">37</a>, <span class="summarylocfmt"><a href="#wrglossary.1492">97</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.fr-BE"><span class="optfmt">fr-BE</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:isoopts">Table 1.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.fr-CA"><span class="optfmt">fr-CA</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:isoopts">Table 1.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.fr-CH"><span class="optfmt">fr-CH</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:isoopts">Table 1.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.fr-FR"><span class="optfmt">fr-FR</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:isoopts">Table 1.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.fr-GG"><span class="optfmt">fr-GG</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:isoopts">Table 1.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.fr-JE"><span class="optfmt">fr-JE</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:isoopts">Table 1.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.FR"><span class="optfmt">FR</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.fr"><span class="optfmt">fr</span> (<a id="wrglossary.1822"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.french"><span class="optfmt">french</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.francais"><span class="optfmt">francais</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a>; <a href="#wrglossary.881">51</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.france"><span class="optfmt">france</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.french"><span class="optfmt">french</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a>; <a href="#wrglossary.896">51</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.frenchb"><span class="optfmt">frenchb</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.friulan"><span class="optfmt">friulan</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.friulano"><span class="optfmt">friulano</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.friulian"><span class="optfmt">friulian</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.fula"><span class="optfmt">fula</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.fur"><span class="optfmt">fur</span> (<a id="wrglossary.1823"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.friulan"><span class="optfmt">friulan</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.furlan"><span class="optfmt">furlan</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.fy"><span class="optfmt">fy</span> (<a id="wrglossary.1824"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.westernfrisian"><span class="optfmt">westernfrisian</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+
+</section><!-- end of section index6881280 -->
+
+<section id="index6946816"><!-- start of section index6946816 --><div class="tomain"><a href="#main">[top]</a></div>
+<h2><!-- start of section header -->G<div class="labellink"><a href="#index6946816">[link]</a></div></h2><!-- end of section header -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.ga-GB"><span class="optfmt">ga-GB</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:isoopts">Table 1.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.ga-IE"><span class="optfmt">ga-IE</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:isoopts">Table 1.1</a>; <a href="#wrglossary.152">12</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.GA"><span class="optfmt">GA</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.ga"><span class="optfmt">ga</span> (<a id="wrglossary.1825"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.irish"><span class="optfmt">irish</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.gaeilge"><span class="optfmt">gaeilge</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.gaelic"><span class="optfmt">gaelic</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.galician"><span class="optfmt">galician</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.galicien"><span class="optfmt">galicien</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.ganda"><span class="optfmt">ganda</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.GB"><span class="optfmt">GB</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a>; <a href="#wrglossary.633">36</a>, <a href="#wrglossary.678">39</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.GBirish"><span class="optfmt">GBirish</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.GBscottish"><span class="optfmt">GBscottish</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.GBwelsh"><span class="optfmt">GBwelsh</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.gd-GB"><span class="optfmt">gd-GB</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:isoopts">Table 1.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.GD"><span class="optfmt">GD</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.gd"><span class="optfmt">gd</span> (<a id="wrglossary.1826"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.scottish"><span class="optfmt">scottish</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.GE"><span class="optfmt">GE</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Geok"><span class="optfmt">Geok</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Geor"><span class="optfmt">Geor</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.georgian"><span class="optfmt">georgian</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.german"><span class="optfmt">german</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a>; <a href="#wrglossary.608">35</a>, <a href="#wrglossary.1334">78</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:pkg.german"><span class="styfmt">german</span> package</dfn><span class="qquad"></span><a href="#wrglossary.26">2</a>, <a href="#wrglossary.54">3</a>, <a href="#wrglossary.607">35</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.germanb"><span class="optfmt">germanb</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.germanDE"><span class="optfmt">germanDE</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:GetTrackedDialectAdditional"><code class="csfmt">\GetTrackedDialectAdditional</code></a><span class="qquad"></span><a href="#sec:user">§5</a>; <a href="#wrglossary.762">44</a>, <a href="#wrglossary.1256">74</a>, <span class="summarylocfmt"><a href="#wrglossary.1494">97</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:GetTrackedDialectFromLanguageTag"><code class="csfmt">\GetTrackedDialectFromLanguageTag</code></a><span class="qquad"></span><a href="#sec:user">§5</a>; <a href="#wrglossary.619">36</a>, <span class="summarylocfmt"><a href="#wrglossary.1496">97</a></span>, <a href="#wrglossary.1564">102</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:GetTrackedDialectModifier"><code class="csfmt">\GetTrackedDialectModifier</code></a><span class="qquad"></span><a href="#sec:user">§5</a>; <a href="#wrglossary.702">40</a>, <span class="summarylocfmt"><a href="#wrglossary.1498">97</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:GetTrackedDialectScript"><code class="csfmt">\GetTrackedDialectScript</code></a><span class="qquad"></span><a href="#sec:user">§5</a>; <a href="#wrglossary.738">42</a>, <a href="#wrglossary.1266">74</a>, <span class="summarylocfmt"><a href="#wrglossary.1500">98</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:GetTrackedDialectSubLang"><code class="csfmt">\GetTrackedDialectSubLang</code></a><span class="qquad"></span><a href="#sec:user">§5</a>; <a href="#wrglossary.760">44</a>, <span class="summarylocfmt"><a href="#wrglossary.1502">98</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:GetTrackedDialectVariant"><code class="csfmt">\GetTrackedDialectVariant</code></a><span class="qquad"></span><a href="#sec:user">§5</a>; <a href="#wrglossary.735">42</a>, <span class="summarylocfmt"><a href="#wrglossary.1504">98</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:GetTrackedLanguageTag"><code class="csfmt">\GetTrackedLanguageTag</code></a><span class="qquad"></span><a href="#sec:user">§5</a>; <a href="#tab:rootlangopts">Table 1.2</a>, <a href="#tab:nonisoopts">Table 1.3</a>; <a href="#wrglossary.700">40</a>, <span class="summarylocfmt"><a href="#wrglossary.1506">98</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.GF"><span class="optfmt">GF</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.GG"><span class="optfmt">GG</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.GH"><span class="optfmt">GH</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.GI"><span class="optfmt">GI</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.GL"><span class="optfmt">GL</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.gl"><span class="optfmt">gl</span> (<a id="wrglossary.1827"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.galician"><span class="optfmt">galician</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Glag"><span class="optfmt">Glag</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:pkg.glossaries"><span class="styfmt">glossaries</span> package</dfn><span class="qquad"></span><a href="#wrglossary.20">2</a>, <a href="#wrglossary.70">9</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.GM"><span class="optfmt">GM</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.GN"><span class="optfmt">GN</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.gn"><span class="optfmt">gn</span> (<a id="wrglossary.1828"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.guarani"><span class="optfmt">guarani</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Goth"><span class="optfmt">Goth</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.GP"><span class="optfmt">GP</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.GQ"><span class="optfmt">GQ</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.GR"><span class="optfmt">GR</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Gran"><span class="optfmt">Gran</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.greek"><span class="optfmt">greek</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Grek"><span class="optfmt">Grek</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.GS"><span class="optfmt">GS</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.GT"><span class="optfmt">GT</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.GU"><span class="optfmt">GU</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.gu"><span class="optfmt">gu</span> (<a id="wrglossary.1829"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.gujarati"><span class="optfmt">gujarati</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.guarani"><span class="optfmt">guarani</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.guatemalanspanish"><span class="optfmt">guatemalanspanish</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.guernseyenglish"><span class="optfmt">guernseyenglish</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.guernseyfrench"><span class="optfmt">guernseyfrench</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.gujarati"><span class="optfmt">gujarati</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Gujr"><span class="optfmt">Gujr</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Guru"><span class="optfmt">Guru</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.gv"><span class="optfmt">gv</span> (<a id="wrglossary.1830"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.manx"><span class="optfmt">manx</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.GW"><span class="optfmt">GW</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.GY"><span class="optfmt">GY</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+
+</section><!-- end of section index6946816 -->
+
+<section id="index7012352"><!-- start of section index7012352 --><div class="tomain"><a href="#main">[top]</a></div>
+<h2><!-- start of section header -->H<div class="labellink"><a href="#index7012352">[link]</a></div></h2><!-- end of section header -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.ha"><span class="optfmt">ha</span> (<a id="wrglossary.1831"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.hausa"><span class="optfmt">hausa</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.haitian"><span class="optfmt">haitian</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Hanb"><span class="optfmt">Hanb</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Hang"><span class="optfmt">Hang</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Hani"><span class="optfmt">Hani</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Hano"><span class="optfmt">Hano</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Hans"><span class="optfmt">Hans</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Hant"><span class="optfmt">Hant</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Hatr"><span class="optfmt">Hatr</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.hausa"><span class="optfmt">hausa</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.he"><span class="optfmt">he</span> (<a id="wrglossary.1832"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.hebrew"><span class="optfmt">hebrew</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Hebr"><span class="optfmt">Hebr</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.hebrew"><span class="optfmt">hebrew</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.herero"><span class="optfmt">herero</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.hi"><span class="optfmt">hi</span> (<a id="wrglossary.1833"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.hindi"><span class="optfmt">hindi</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.hindi"><span class="optfmt">hindi</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Hira"><span class="optfmt">Hira</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.hirimotu"><span class="optfmt">hirimotu</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.HK"><span class="optfmt">HK</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Hluw"><span class="optfmt">Hluw</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.HM"><span class="optfmt">HM</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Hmng"><span class="optfmt">Hmng</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.HN"><span class="optfmt">HN</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.ho"><span class="optfmt">ho</span> (<a id="wrglossary.1834"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.hirimotu"><span class="optfmt">hirimotu</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.honduranspanish"><span class="optfmt">honduranspanish</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.hr-HR"><span class="optfmt">hr-HR</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:isoopts">Table 1.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.HR"><span class="optfmt">HR</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.hr"><span class="optfmt">hr</span> (<a id="wrglossary.1835"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.croatian"><span class="optfmt">croatian</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Hrkt"><span class="optfmt">Hrkt</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.hsb"><span class="optfmt">hsb</span> (<a id="wrglossary.1836"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.usorbian"><span class="optfmt">usorbian</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.HT"><span class="optfmt">HT</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.ht"><span class="optfmt">ht</span> (<a id="wrglossary.1837"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.haitian"><span class="optfmt">haitian</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.hu-HU"><span class="optfmt">hu-HU</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:isoopts">Table 1.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.HU"><span class="optfmt">HU</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.hu"><span class="optfmt">hu</span> (<a id="wrglossary.1838"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.magyar"><span class="optfmt">magyar</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Hung"><span class="optfmt">Hung</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.hungarian"><span class="optfmt">hungarian</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.hy"><span class="optfmt">hy</span> (<a id="wrglossary.1839"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.armenian"><span class="optfmt">armenian</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.hz"><span class="optfmt">hz</span> (<a id="wrglossary.1840"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.herero"><span class="optfmt">herero</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+
+</section><!-- end of section index7012352 -->
+
+<section id="index7077888"><!-- start of section index7077888 --><div class="tomain"><a href="#main">[top]</a></div>
+<h2><!-- start of section header -->I<div class="labellink"><a href="#index7077888">[link]</a></div></h2><!-- end of section header -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.ia"><span class="optfmt">ia</span> (<a id="wrglossary.1841"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.interlingua"><span class="optfmt">interlingua</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.icelandic"><span class="optfmt">icelandic</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.id-IN"><span class="optfmt">id-IN</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:isoopts">Table 1.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.ID"><span class="optfmt">ID</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.id"><span class="optfmt">id</span> (<a id="wrglossary.1842"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.bahasai"><span class="optfmt">bahasai</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.ido"><span class="optfmt">ido</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.IE"><span class="optfmt">IE</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.ie"><span class="optfmt">ie</span> (<a id="wrglossary.1843"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.interlingue"><span class="optfmt">interlingue</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.IEenglish"><span class="optfmt">IEenglish</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.IEirish"><span class="optfmt">IEirish</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:IfHasTrackedDialectAdditional"><code class="csfmt">\IfHasTrackedDialectAdditional</code></a><span class="qquad"></span><a href="#sec:user">§5</a>; <a href="#wrglossary.763">44</a>, <span class="summarylocfmt"><a href="#wrglossary.1508">98</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:IfHasTrackedDialectModifier"><code class="csfmt">\IfHasTrackedDialectModifier</code></a><span class="qquad"></span><a href="#sec:user">§5</a>; <a href="#wrglossary.707">41</a>, <span class="summarylocfmt"><a href="#wrglossary.1510">98</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:IfHasTrackedDialectScript"><code class="csfmt">\IfHasTrackedDialectScript</code></a><span class="qquad"></span><a href="#sec:user">§5</a>; <a href="#wrglossary.739">42</a>, <span class="summarylocfmt"><a href="#wrglossary.1512">98</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:IfHasTrackedDialectSubLang"><code class="csfmt">\IfHasTrackedDialectSubLang</code></a><span class="qquad"></span><a href="#sec:user">§5</a>; <a href="#wrglossary.761">44</a>, <span class="summarylocfmt"><a href="#wrglossary.1514">99</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:IfHasTrackedDialectVariant"><code class="csfmt">\IfHasTrackedDialectVariant</code></a><span class="qquad"></span><a href="#sec:user">§5</a>; <a href="#wrglossary.737">42</a>, <span class="summarylocfmt"><a href="#wrglossary.1516">99</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:IfTrackedDialect"><code class="csfmt">\IfTrackedDialect</code></a><span class="qquad"></span><a href="#sec:user">§5</a>; <a href="#wrglossary.654">38</a>, <span class="summarylocfmt"><a href="#wrglossary.1518">99</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:IfTrackedDialectIsScriptCs"><code class="csfmt">\IfTrackedDialectIsScriptCs</code></a><span class="qquad"></span><a href="#sec:user">§5</a>; <a href="#wrglossary.548">32</a>, <a href="#wrglossary.746">43</a>, <span class="summarylocfmt"><a href="#wrglossary.1520">99</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:IfTrackedIsoCode"><code class="csfmt">\IfTrackedIsoCode</code></a><span class="qquad"></span><a href="#sec:user">§5</a>; <a href="#wrglossary.672">39</a>, <span class="summarylocfmt"><a href="#wrglossary.1522">99</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:IfTrackedLanguage"><code class="csfmt">\IfTrackedLanguage</code></a><span class="qquad"></span><a href="#sec:user">§5</a>; <a href="#wrglossary.653">38</a>, <span class="summarylocfmt"><a href="#wrglossary.1525">99</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:IfTrackedLanguageFileExists"><code class="csfmt">\IfTrackedLanguageFileExists</code></a><span class="qquad"></span><a href="#sec:user">§5</a>; <a href="#wrglossary.203">15</a>, <a href="#wrglossary.765">45</a>, <a href="#wrglossary.794">47</a>, <a href="#wrglossary.938">53</a>, <a href="#wrglossary.1029">61</a>, <span class="summarylocfmt"><a href="#wrglossary.1527">100</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:IfTrackedLanguageHasIsoCode"><code class="csfmt">\IfTrackedLanguageHasIsoCode</code></a><span class="qquad"></span><a href="#sec:user">§5</a>; <a href="#wrglossary.665">39</a>, <span class="summarylocfmt"><a href="#wrglossary.1531">100</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:ifTrackLangShowInfo"><code class="csfmt">\ifTrackLangShowInfo</code></a><span class="qquad"></span><span class="summarylocfmt"><a href="#wrglossary.1534">100</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:ifTrackLangShowVerbose"><code class="csfmt">\ifTrackLangShowVerbose</code></a><span class="qquad"></span><span class="summarylocfmt"><a href="#wrglossary.1536">100</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:ifTrackLangShowWarnings"><code class="csfmt">\ifTrackLangShowWarnings</code></a><span class="qquad"></span><span class="summarylocfmt"><a href="#wrglossary.1538">100</a></span>, <a href="#wrglossary.1752">112</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.ig"><span class="optfmt">ig</span> (<a id="wrglossary.1844"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.igbo"><span class="optfmt">igbo</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.igbo"><span class="optfmt">igbo</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.ii"><span class="optfmt">ii</span> (<a id="wrglossary.1845"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.nuosu"><span class="optfmt">nuosu</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.ik"><span class="optfmt">ik</span> (<a id="wrglossary.1846"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.inupiaq"><span class="optfmt">inupiaq</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.IL"><span class="optfmt">IL</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.IM"><span class="optfmt">IM</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.IN"><span class="optfmt">IN</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.indon"><span class="optfmt">indon</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.indonesian"><span class="optfmt">indonesian</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Inds"><span class="optfmt">Inds</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:input"><code class="csfmt">\input</code></dfn><span class="qquad"></span><a href="#wrglossary.75">9</a>–<a href="#wrglossary.127">11</a>, <a href="#wrglossary.172">13</a>, <a href="#wrglossary.236">17</a>, <a href="#wrglossary.277">19</a>, <a href="#wrglossary.437">25</a>, <a href="#wrglossary.1200">71</a>, <a href="#wrglossary.1204">72</a>, <a href="#wrglossary.1410">81</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.interlingua"><span class="optfmt">interlingua</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.interlingue"><span class="optfmt">interlingue</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.inuktitut"><span class="optfmt">inuktitut</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.inupiaq"><span class="optfmt">inupiaq</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.IO"><span class="optfmt">IO</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.io"><span class="optfmt">io</span> (<a id="wrglossary.1847"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.ido"><span class="optfmt">ido</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.IQ"><span class="optfmt">IQ</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.IR"><span class="optfmt">IR</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.irish"><span class="optfmt">irish</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.IS"><span class="optfmt">IS</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.is"><span class="optfmt">is</span> (<a id="wrglossary.1848"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.icelandic"><span class="optfmt">icelandic</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.isleofmanenglish"><span class="optfmt">isleofmanenglish</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:ISO">ISO (International Organization for Standardization)</dfn><span class="qquad"></span><a href="#tab:isoopts">Table 1.1</a>; <a href="#wrglossary.19">b</a>, <a href="#wrglossary.204">15</a>, <a href="#wrglossary.664">39</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:idx.15924">ISO 15924</dfn><span class="qquad"></span><a href="#wrglossary.541">31</a>, <a href="#wrglossary.740">42</a>, <a href="#wrglossary.749">43</a>, <a href="#wrglossary.1208">72</a>, <a href="#wrglossary.1300">76</a>, <a href="#wrglossary.1356">78</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:idx.3166-1">ISO <span class="mbox">3166-1</span></dfn><span class="qquad"></span><a href="#wrglossary.317">20</a>, <a href="#wrglossary.371">22</a>, <a href="#wrglossary.592">35</a>, <a href="#wrglossary.668">39</a>, <a href="#wrglossary.690">40</a>, <a href="#wrglossary.781">46</a>, <a href="#wrglossary.1220">72</a>, <a href="#wrglossary.1263">74</a>–<a href="#wrglossary.1296">76</a>, <a href="#wrglossary.1435">94</a>, <a href="#wrglossary.1487">97</a>, <a href="#wrglossary.1622">105</a>, <a href="#wrglossary.1644">106</a>, <a href="#wrglossary.1765">113</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:idx.639-1">ISO <span class="mbox">639-1</span></dfn><span class="qquad"></span><a href="#wrglossary.314">20</a>, <a href="#wrglossary.356">22</a>, <a href="#wrglossary.590">34</a>, <a href="#wrglossary.667">39</a>, <a href="#wrglossary.692">40</a>, <a href="#wrglossary.784">46</a>, <a href="#wrglossary.819">50</a>, <a href="#wrglossary.885">51</a>, <a href="#wrglossary.1034">61</a>, <a href="#wrglossary.1216">72</a>, <a href="#wrglossary.1259">74</a>, <a href="#wrglossary.1277">75</a>, <a href="#wrglossary.1412">81</a>, <a href="#wrglossary.1447">95</a>, <a href="#wrglossary.1474">96</a>, <a href="#wrglossary.1631">105</a>, <a href="#wrglossary.1658">107</a>, <a href="#wrglossary.1768">113</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:idx.639-2">ISO <span class="mbox">639-2</span></dfn><span class="qquad"></span><a href="#wrglossary.315">20</a>, <a href="#wrglossary.591">34</a>, <a href="#wrglossary.694">40</a>, <a href="#wrglossary.785">46</a>, <a href="#wrglossary.831">50</a>, <a href="#wrglossary.890">51</a>, <a href="#wrglossary.1046">61</a>, <a href="#wrglossary.1260">74</a>, <a href="#wrglossary.1281">75</a>, <a href="#wrglossary.1413">81</a>, <a href="#wrglossary.1448">95</a>, <a href="#wrglossary.1475">96</a>, <a href="#wrglossary.1561">102</a>, <a href="#wrglossary.1625">105</a>–<a href="#wrglossary.1664">107</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx1"><dfn id="glo:idx.639-2B">ISO <span class="mbox">639-2</span> (B)</dfn><span class="qquad"></span><a href="#wrglossary.339">21</a>, <a href="#wrglossary.595">35</a>, <a href="#wrglossary.1279">75</a>, <a href="#wrglossary.1628">105</a>, <a href="#wrglossary.1655">106</a></div><!-- end of nlctuserguideidx1 -->
+<div class="nlctuserguideidx1"><dfn id="glo:idx.639-2T">ISO <span class="mbox">639-2</span> (T)</dfn><span class="qquad"></span><a href="#wrglossary.338">21</a>, <a href="#wrglossary.594">35</a>, <a href="#wrglossary.1278">75</a></div><!-- end of nlctuserguideidx1 -->
+<div class="nlctuserguideidx0"><dfn id="glo:idx.639-3">ISO <span class="mbox">639-3</span></dfn><span class="qquad"></span><a href="#wrglossary.353">22</a>, <a href="#wrglossary.669">39</a>, <a href="#wrglossary.696">40</a>, <a href="#wrglossary.786">46</a>, <a href="#wrglossary.801">47</a>, <a href="#wrglossary.1261">74</a>, <a href="#wrglossary.1280">75</a>, <a href="#wrglossary.1449">95</a>, <a href="#wrglossary.1476">96</a>, <a href="#wrglossary.1558">101</a>, <a href="#wrglossary.1637">105</a>, <a href="#wrglossary.1665">107</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.istriacountycroatian"><span class="optfmt">istriacountycroatian</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.istriacountyitalian"><span class="optfmt">istriacountyitalian</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.it-CH"><span class="optfmt">it-CH</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:isoopts">Table 1.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.it-HR"><span class="optfmt">it-HR</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:isoopts">Table 1.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.it-IT"><span class="optfmt">it-IT</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:isoopts">Table 1.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.it-SI"><span class="optfmt">it-SI</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:isoopts">Table 1.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.it-SM"><span class="optfmt">it-SM</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:isoopts">Table 1.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.it-VA"><span class="optfmt">it-VA</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:isoopts">Table 1.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.IT"><span class="optfmt">IT</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.it"><span class="optfmt">it</span> (<a id="wrglossary.1849"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.italian"><span class="optfmt">italian</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Ital"><span class="optfmt">Ital</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.italian"><span class="optfmt">italian</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.italy"><span class="optfmt">italy</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.iu"><span class="optfmt">iu</span> (<a id="wrglossary.1850"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.inuktitut"><span class="optfmt">inuktitut</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+
+</section><!-- end of section index7077888 -->
+
+<section id="index7143424"><!-- start of section index7143424 --><div class="tomain"><a href="#main">[top]</a></div>
+<h2><!-- start of section header -->J<div class="labellink"><a href="#index7143424">[link]</a></div></h2><!-- end of section header -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.ja"><span class="optfmt">ja</span> (<a id="wrglossary.1851"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.japanese"><span class="optfmt">japanese</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Jamo"><span class="optfmt">Jamo</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.japanese"><span class="optfmt">japanese</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Java"><span class="optfmt">Java</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.javanese"><span class="optfmt">javanese</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.JE"><span class="optfmt">JE</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.jerseyenglish"><span class="optfmt">jerseyenglish</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.jerseyfrench"><span class="optfmt">jerseyfrench</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.JM"><span class="optfmt">JM</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.JO"><span class="optfmt">JO</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.JP"><span class="optfmt">JP</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Jpan"><span class="optfmt">Jpan</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Jurc"><span class="optfmt">Jurc</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.jv"><span class="optfmt">jv</span> (<a id="wrglossary.1852"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.javanese"><span class="optfmt">javanese</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+
+</section><!-- end of section index7143424 -->
+
+<section id="index7208960"><!-- start of section index7208960 --><div class="tomain"><a href="#main">[top]</a></div>
+<h2><!-- start of section header -->K<div class="labellink"><a href="#index7208960">[link]</a></div></h2><!-- end of section header -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.ka"><span class="optfmt">ka</span> (<a id="wrglossary.1853"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.georgian"><span class="optfmt">georgian</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.kalaallisut"><span class="optfmt">kalaallisut</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Kali"><span class="optfmt">Kali</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Kana"><span class="optfmt">Kana</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.kannada"><span class="optfmt">kannada</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.kanuri"><span class="optfmt">kanuri</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.kashmiri"><span class="optfmt">kashmiri</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.kazakh"><span class="optfmt">kazakh</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.KE"><span class="optfmt">KE</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.KG"><span class="optfmt">KG</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.kg"><span class="optfmt">kg</span> (<a id="wrglossary.1854"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.kongo"><span class="optfmt">kongo</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.KH"><span class="optfmt">KH</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Khar"><span class="optfmt">Khar</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.khmer"><span class="optfmt">khmer</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Khmr"><span class="optfmt">Khmr</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Khoj"><span class="optfmt">Khoj</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.KI"><span class="optfmt">KI</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.ki"><span class="optfmt">ki</span> (<a id="wrglossary.1855"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.kikuyu"><span class="optfmt">kikuyu</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.kikuyu"><span class="optfmt">kikuyu</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.kinyarwanda"><span class="optfmt">kinyarwanda</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.kirundi"><span class="optfmt">kirundi</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Kitl"><span class="optfmt">Kitl</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Kits"><span class="optfmt">Kits</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.kj"><span class="optfmt">kj</span> (<a id="wrglossary.1856"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.kwanyama"><span class="optfmt">kwanyama</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.kk"><span class="optfmt">kk</span> (<a id="wrglossary.1857"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.kazakh"><span class="optfmt">kazakh</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.kl"><span class="optfmt">kl</span> (<a id="wrglossary.1858"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.kalaallisut"><span class="optfmt">kalaallisut</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.KM"><span class="optfmt">KM</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.km"><span class="optfmt">km</span> (<a id="wrglossary.1859"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.khmer"><span class="optfmt">khmer</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.KN"><span class="optfmt">KN</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.kn"><span class="optfmt">kn</span> (<a id="wrglossary.1860"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.kannada"><span class="optfmt">kannada</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Knda"><span class="optfmt">Knda</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.ko"><span class="optfmt">ko</span> (<a id="wrglossary.1861"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.korean"><span class="optfmt">korean</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.komi"><span class="optfmt">komi</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.kongo"><span class="optfmt">kongo</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Kore"><span class="optfmt">Kore</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.korean"><span class="optfmt">korean</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.KP"><span class="optfmt">KP</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Kpel"><span class="optfmt">Kpel</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:app.kpsewhich"><span class="appfmt">kpsewhich</span> (application)</dfn></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.KR"><span class="optfmt">KR</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.kr"><span class="optfmt">kr</span> (<a id="wrglossary.1862"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.kanuri"><span class="optfmt">kanuri</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.ks"><span class="optfmt">ks</span> (<a id="wrglossary.1863"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.kashmiri"><span class="optfmt">kashmiri</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Kthi"><span class="optfmt">Kthi</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.ku"><span class="optfmt">ku</span> (<a id="wrglossary.1864"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.kurdish"><span class="optfmt">kurdish</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.kurdish"><span class="optfmt">kurdish</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.kurmanji"><span class="optfmt">kurmanji</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.kv"><span class="optfmt">kv</span> (<a id="wrglossary.1865"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.komi"><span class="optfmt">komi</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.KW"><span class="optfmt">KW</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.kw"><span class="optfmt">kw</span> (<a id="wrglossary.1866"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.cornish"><span class="optfmt">cornish</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.kwanyama"><span class="optfmt">kwanyama</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.KY"><span class="optfmt">KY</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.ky"><span class="optfmt">ky</span> (<a id="wrglossary.1867"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.kyrgyz"><span class="optfmt">kyrgyz</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.kyrgyz"><span class="optfmt">kyrgyz</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.KZ"><span class="optfmt">KZ</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+
+</section><!-- end of section index7208960 -->
+
+<section id="index7274496"><!-- start of section index7274496 --><div class="tomain"><a href="#main">[top]</a></div>
+<h2><!-- start of section header -->L<div class="labellink"><a href="#index7274496">[link]</a></div></h2><!-- end of section header -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.LA"><span class="optfmt">LA</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.la"><span class="optfmt">la</span> (<a id="wrglossary.1868"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.latin"><span class="optfmt">latin</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Lana"><span class="optfmt">Lana</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:languagename"><code class="csfmt">\languagename</code></dfn><span class="qquad"></span><a href="#wrglossary.112">10</a>, <a href="#wrglossary.1267">74</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.lao"><span class="optfmt">lao</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Laoo"><span class="optfmt">Laoo</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.latein"><span class="optfmt">latein</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Latf"><span class="optfmt">Latf</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Latg"><span class="optfmt">Latg</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.latin"><span class="optfmt">latin</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Latn"><span class="optfmt">Latn</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a>; <a href="#wrglossary.104">10</a>, <a href="#wrglossary.136">11</a>, <a href="#wrglossary.223">16</a>, <a href="#wrglossary.545">32</a>, <a href="#wrglossary.637">36</a>, <a href="#wrglossary.741">42</a>, <a href="#wrglossary.911">51</a>, <a href="#wrglossary.1270">74</a>, <a href="#wrglossary.1345">78</a>, <a href="#wrglossary.1415">81</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.latvian"><span class="optfmt">latvian</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.LB"><span class="optfmt">LB</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.lb"><span class="optfmt">lb</span> (<a id="wrglossary.1869"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.luxembourgish"><span class="optfmt">luxembourgish</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.LC"><span class="optfmt">LC</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Leke"><span class="optfmt">Leke</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Lepc"><span class="optfmt">Lepc</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.lg"><span class="optfmt">lg</span> (<a id="wrglossary.1870"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.ganda"><span class="optfmt">ganda</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.LI"><span class="optfmt">LI</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.li"><span class="optfmt">li</span> (<a id="wrglossary.1871"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.limburgish"><span class="optfmt">limburgish</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Limb"><span class="optfmt">Limb</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.limburgish"><span class="optfmt">limburgish</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Lina"><span class="optfmt">Lina</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Linb"><span class="optfmt">Linb</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.lingala"><span class="optfmt">lingala</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Lisu"><span class="optfmt">Lisu</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.lithuanian"><span class="optfmt">lithuanian</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.LK"><span class="optfmt">LK</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.ln"><span class="optfmt">ln</span> (<a id="wrglossary.1872"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.lingala"><span class="optfmt">lingala</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.lo"><span class="optfmt">lo</span> (<a id="wrglossary.1873"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.lao"><span class="optfmt">lao</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Loma"><span class="optfmt">Loma</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.lowersorbian"><span class="optfmt">lowersorbian</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.LR"><span class="optfmt">LR</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.LS"><span class="optfmt">LS</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.lsorbian"><span class="optfmt">lsorbian</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.LT"><span class="optfmt">LT</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.lt"><span class="optfmt">lt</span> (<a id="wrglossary.1874"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.lithuanian"><span class="optfmt">lithuanian</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.LU"><span class="optfmt">LU</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.lu"><span class="optfmt">lu</span> (<a id="wrglossary.1875"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.lubakatanga"><span class="optfmt">lubakatanga</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.lubakatanga"><span class="optfmt">lubakatanga</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.luxembourgish"><span class="optfmt">luxembourgish</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.LV"><span class="optfmt">LV</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.lv"><span class="optfmt">lv</span> (<a id="wrglossary.1876"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.latvian"><span class="optfmt">latvian</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.LY"><span class="optfmt">LY</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Lyci"><span class="optfmt">Lyci</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Lydi"><span class="optfmt">Lydi</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+
+</section><!-- end of section index7274496 -->
+
+<section id="index7340032"><!-- start of section index7340032 --><div class="tomain"><a href="#main">[top]</a></div>
+<h2><!-- start of section header -->M<div class="labellink"><a href="#index7340032">[link]</a></div></h2><!-- end of section header -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.MA"><span class="optfmt">MA</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.macedonian"><span class="optfmt">macedonian</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.magyar"><span class="optfmt">magyar</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Mahj"><span class="optfmt">Mahj</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.malagasy"><span class="optfmt">malagasy</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.malay"><span class="optfmt">malay</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.malayalam"><span class="optfmt">malayalam</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.maltaenglish"><span class="optfmt">maltaenglish</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a>; <a href="#wrglossary.166">13</a>, <a href="#wrglossary.258">17</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.maltamaltese"><span class="optfmt">maltamaltese</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.maltese"><span class="optfmt">maltese</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Mand"><span class="optfmt">Mand</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Mani"><span class="optfmt">Mani</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.manx"><span class="optfmt">manx</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a>; <a href="#wrglossary.1131">67</a>, <a href="#wrglossary.1143">68</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.maori"><span class="optfmt">maori</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.marathi"><span class="optfmt">marathi</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Marc"><span class="optfmt">Marc</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.marshallese"><span class="optfmt">marshallese</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Maya"><span class="optfmt">Maya</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.MC"><span class="optfmt">MC</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.MD"><span class="optfmt">MD</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.ME"><span class="optfmt">ME</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Mend"><span class="optfmt">Mend</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Merc"><span class="optfmt">Merc</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Mero"><span class="optfmt">Mero</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.mexicanspanish"><span class="optfmt">mexicanspanish</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a>; <a href="#wrglossary.66">3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.meyalu"><span class="optfmt">meyalu</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.MF"><span class="optfmt">MF</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.MG"><span class="optfmt">MG</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.mg"><span class="optfmt">mg</span> (<a id="wrglossary.1877"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.malagasy"><span class="optfmt">malagasy</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.MH"><span class="optfmt">MH</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.mh"><span class="optfmt">mh</span> (<a id="wrglossary.1878"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.marshallese"><span class="optfmt">marshallese</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.mi"><span class="optfmt">mi</span> (<a id="wrglossary.1879"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.maori"><span class="optfmt">maori</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.MK"><span class="optfmt">MK</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.mk"><span class="optfmt">mk</span> (<a id="wrglossary.1880"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.macedonian"><span class="optfmt">macedonian</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.ML"><span class="optfmt">ML</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.ml"><span class="optfmt">ml</span> (<a id="wrglossary.1881"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.malayalam"><span class="optfmt">malayalam</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Mlym"><span class="optfmt">Mlym</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.MM"><span class="optfmt">MM</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.MN"><span class="optfmt">MN</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.mn"><span class="optfmt">mn</span> (<a id="wrglossary.1882"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.mongolian"><span class="optfmt">mongolian</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.MO"><span class="optfmt">MO</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Modi"><span class="optfmt">Modi</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:idx.modifier">modifier</dfn><span class="qquad"></span><a href="#wrglossary.320">20</a>, <a href="#wrglossary.445">26</a>, <a href="#wrglossary.577">34</a>, <a href="#wrglossary.627">36</a>, <a href="#wrglossary.706">41</a>, <a href="#wrglossary.1297">76</a>, <a href="#wrglossary.1339">78</a>, <a href="#wrglossary.1609">104</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Mong"><span class="optfmt">Mong</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.mongolian"><span class="optfmt">mongolian</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Moon"><span class="optfmt">Moon</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.MP"><span class="optfmt">MP</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.MQ"><span class="optfmt">MQ</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.MR"><span class="optfmt">MR</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.mr"><span class="optfmt">mr</span> (<a id="wrglossary.1883"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.marathi"><span class="optfmt">marathi</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Mroo"><span class="optfmt">Mroo</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.ms-MY"><span class="optfmt">ms-MY</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:isoopts">Table 1.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.MS"><span class="optfmt">MS</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.ms"><span class="optfmt">ms</span> (<a id="wrglossary.1884"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.bahasam"><span class="optfmt">bahasam</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.mt-MT"><span class="optfmt">mt-MT</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:isoopts">Table 1.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.MT"><span class="optfmt">MT</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.mt"><span class="optfmt">mt</span> (<a id="wrglossary.1885"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.maltese"><span class="optfmt">maltese</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Mtei"><span class="optfmt">Mtei</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.MU"><span class="optfmt">MU</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Mult"><span class="optfmt">Mult</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.MV"><span class="optfmt">MV</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.MW"><span class="optfmt">MW</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.MX"><span class="optfmt">MX</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.MY"><span class="optfmt">MY</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.my"><span class="optfmt">my</span> (<a id="wrglossary.1886"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.burmese"><span class="optfmt">burmese</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Mymr"><span class="optfmt">Mymr</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.MZ"><span class="optfmt">MZ</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+
+</section><!-- end of section index7340032 -->
+
+<section id="index7405568"><!-- start of section index7405568 --><div class="tomain"><a href="#main">[top]</a></div>
+<h2><!-- start of section header -->N<div class="labellink"><a href="#index7405568">[link]</a></div></h2><!-- end of section header -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.NA"><span class="optfmt">NA</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.na"><span class="optfmt">na</span> (<a id="wrglossary.1887"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.nauruan"><span class="optfmt">nauruan</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Narb"><span class="optfmt">Narb</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.nauruan"><span class="optfmt">nauruan</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.naustrian"><span class="optfmt">naustrian</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a>; <a href="#wrglossary.845">50</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.navajo"><span class="optfmt">navajo</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.nb"><span class="optfmt">nb</span> (<a id="wrglossary.1888"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.bokmal"><span class="optfmt">bokmal</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Nbat"><span class="optfmt">Nbat</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.nbelgiangerman"><span class="optfmt">nbelgiangerman</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.NC"><span class="optfmt">NC</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.nd"><span class="optfmt">nd</span> (<a id="wrglossary.1889"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.northernndebele"><span class="optfmt">northernndebele</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.ndonga"><span class="optfmt">ndonga</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.NE"><span class="optfmt">NE</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.ne"><span class="optfmt">ne</span> (<a id="wrglossary.1890"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.nepali"><span class="optfmt">nepali</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.nepali"><span class="optfmt">nepali</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.netherlands"><span class="optfmt">netherlands</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Newa"><span class="optfmt">Newa</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.newzealand"><span class="optfmt">newzealand</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.NF"><span class="optfmt">NF</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.NG"><span class="optfmt">NG</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.ng"><span class="optfmt">ng</span> (<a id="wrglossary.1891"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.ndonga"><span class="optfmt">ndonga</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.ngerman"><span class="optfmt">ngerman</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a>; <a href="#wrglossary.606">35</a>, <a href="#wrglossary.1184">70</a>, <a href="#wrglossary.1312">77</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:pkg.ngerman"><span class="styfmt">ngerman</span> package</dfn><span class="qquad"></span><a href="#wrglossary.25">2</a>, <a href="#wrglossary.53">3</a>, <a href="#wrglossary.605">35</a>, <a href="#wrglossary.957">54</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.ngermanb"><span class="optfmt">ngermanb</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.ngermanDE"><span class="optfmt">ngermanDE</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a>; <a href="#wrglossary.1183">70</a>, <a href="#wrglossary.1310">77</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.NI"><span class="optfmt">NI</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.nicaraguanspanish"><span class="optfmt">nicaraguanspanish</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.nil"><span class="optfmt">nil</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Nkgb"><span class="optfmt">Nkgb</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.nko"><span class="optfmt">nko</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Nkoo"><span class="optfmt">Nkoo</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.nl-BE"><span class="optfmt">nl-BE</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:isoopts">Table 1.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.nl-NL"><span class="optfmt">nl-NL</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:isoopts">Table 1.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.NL"><span class="optfmt">NL</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.nl"><span class="optfmt">nl</span> (<a id="wrglossary.1892"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.dutch"><span class="optfmt">dutch</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.nn"><span class="optfmt">nn</span> (<a id="wrglossary.1893"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.nynorsk"><span class="optfmt">nynorsk</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.NO"><span class="optfmt">NO</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.no"><span class="optfmt">no</span> (<a id="wrglossary.1894"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.norsk"><span class="optfmt">norsk</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.norsk"><span class="optfmt">norsk</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.northernndebele"><span class="optfmt">northernndebele</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.northernsotho"><span class="optfmt">northernsotho</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.norwegian"><span class="optfmt">norwegian</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.NP"><span class="optfmt">NP</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.nqo"><span class="optfmt">nqo</span> (<a id="wrglossary.1895"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.nko"><span class="optfmt">nko</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.NR"><span class="optfmt">NR</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.nr"><span class="optfmt">nr</span> (<a id="wrglossary.1896"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.southernndebele"><span class="optfmt">southernndebele</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Nshu"><span class="optfmt">Nshu</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.nso"><span class="optfmt">nso</span> (<a id="wrglossary.1897"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.northernsotho"><span class="optfmt">northernsotho</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.nswissgerman"><span class="optfmt">nswissgerman</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.NU"><span class="optfmt">NU</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.nuosu"><span class="optfmt">nuosu</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.nv"><span class="optfmt">nv</span> (<a id="wrglossary.1898"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.navajo"><span class="optfmt">navajo</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.ny"><span class="optfmt">ny</span> (<a id="wrglossary.1899"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.chichewa"><span class="optfmt">chichewa</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.nynorsk"><span class="optfmt">nynorsk</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.NZ"><span class="optfmt">NZ</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+
+</section><!-- end of section index7405568 -->
+
+<section id="index7471104"><!-- start of section index7471104 --><div class="tomain"><a href="#main">[top]</a></div>
+<h2><!-- start of section header -->O<div class="labellink"><a href="#index7471104">[link]</a></div></h2><!-- end of section header -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.oc"><span class="optfmt">oc</span> (<a id="wrglossary.1900"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.occitan"><span class="optfmt">occitan</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.occitan"><span class="optfmt">occitan</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Ogam"><span class="optfmt">Ogam</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.oj"><span class="optfmt">oj</span> (<a id="wrglossary.1901"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.ojibwe"><span class="optfmt">ojibwe</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.ojibwe"><span class="optfmt">ojibwe</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Olck"><span class="optfmt">Olck</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.OM"><span class="optfmt">OM</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.om"><span class="optfmt">om</span> (<a id="wrglossary.1902"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.oromo"><span class="optfmt">oromo</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.or"><span class="optfmt">or</span> (<a id="wrglossary.1903"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.oriya"><span class="optfmt">oriya</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.oriya"><span class="optfmt">oriya</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Orkh"><span class="optfmt">Orkh</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.oromo"><span class="optfmt">oromo</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Orya"><span class="optfmt">Orya</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.os"><span class="optfmt">os</span> (<a id="wrglossary.1904"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.ossetian"><span class="optfmt">ossetian</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Osge"><span class="optfmt">Osge</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Osma"><span class="optfmt">Osma</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.ossetian"><span class="optfmt">ossetian</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+
+</section><!-- end of section index7471104 -->
+
+<section id="index7536640"><!-- start of section index7536640 --><div class="tomain"><a href="#main">[top]</a></div>
+<h2><!-- start of section header -->P<div class="labellink"><a href="#index7536640">[link]</a></div></h2><!-- end of section header -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.PA"><span class="optfmt">PA</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.pa"><span class="optfmt">pa</span> (<a id="wrglossary.1905"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.easternpunjabi"><span class="optfmt">easternpunjabi</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.pali"><span class="optfmt">pali</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Palm"><span class="optfmt">Palm</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.panamaspanish"><span class="optfmt">panamaspanish</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.paraguayspanish"><span class="optfmt">paraguayspanish</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.pashto"><span class="optfmt">pashto</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Pauc"><span class="optfmt">Pauc</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:app.pdflatex"><span class="appfmt">pdflatex</span> (application)</dfn><span class="qquad"></span><a href="#wrglossary.395">24</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.PE"><span class="optfmt">PE</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Perm"><span class="optfmt">Perm</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.persian"><span class="optfmt">persian</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.peruvianspanish"><span class="optfmt">peruvianspanish</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.PF"><span class="optfmt">PF</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.PG"><span class="optfmt">PG</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.PH"><span class="optfmt">PH</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Phag"><span class="optfmt">Phag</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Phli"><span class="optfmt">Phli</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Phlp"><span class="optfmt">Phlp</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Phlv"><span class="optfmt">Phlv</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Phnx"><span class="optfmt">Phnx</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.pi"><span class="optfmt">pi</span> (<a id="wrglossary.1906"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.pali"><span class="optfmt">pali</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.piedmontese"><span class="optfmt">piedmontese</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.piemonteis"><span class="optfmt">piemonteis</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Piqd"><span class="optfmt">Piqd</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.PK"><span class="optfmt">PK</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.PL"><span class="optfmt">PL</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.pl"><span class="optfmt">pl</span> (<a id="wrglossary.1907"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.polish"><span class="optfmt">polish</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Plrd"><span class="optfmt">Plrd</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.PM"><span class="optfmt">PM</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.pms"><span class="optfmt">pms</span> (<a id="wrglossary.1908"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.piedmontese"><span class="optfmt">piedmontese</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.PN"><span class="optfmt">PN</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.polish"><span class="optfmt">polish</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.polutoniko"><span class="optfmt">polutoniko</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.polutonikogreek"><span class="optfmt">polutonikogreek</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:pkg.polyglossia"><span class="styfmt">polyglossia</span> package</dfn><span class="qquad"></span><a href="#wrglossary.3">a</a>, <a href="#wrglossary.23">2</a>, <a href="#wrglossary.55">3</a>, <a href="#wrglossary.73">9</a>, <a href="#wrglossary.139">11</a>–<a href="#wrglossary.162">13</a>, <a href="#wrglossary.609">35</a>, <a href="#wrglossary.759">44</a>, <a href="#wrglossary.944">53</a>, <a href="#wrglossary.993">58</a>, <a href="#wrglossary.1023">61</a>, <a href="#wrglossary.1432">94</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.portugal"><span class="optfmt">portugal</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.portuges"><span class="optfmt">portuges</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.portuguese"><span class="optfmt">portuguese</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:POSIX">POSIX (Portable Operating System Interface)</dfn><span class="qquad"></span><a href="#wrglossary.381">23</a>, <a href="#wrglossary.703">40</a>, <a href="#wrglossary.1340">78</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.PR"><span class="optfmt">PR</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:file.prefix-localeid.ldf"><span class="filefmt"></span><span class="meta">〈<em class="metainner">prefix</em>〉</span><span class="filefmt">-</span><span class="meta">〈<em class="metainner">localeid</em>〉</span><span class="filefmt">.ldf</span></dfn><span class="qquad"></span><a href="#wrglossary.194">15</a>, <a href="#wrglossary.221">16</a>, <a href="#wrglossary.816">49</a>–<a href="#wrglossary.926">53</a>, <a href="#wrglossary.965">55</a>, <a href="#wrglossary.978">57</a>–<a href="#wrglossary.1110">66</a>, <a href="#wrglossary.1144">68</a>, <a href="#wrglossary.1391">80</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:ProvidesFile"><code class="csfmt">\ProvidesFile</code></dfn><span class="qquad"></span><a href="#wrglossary.923">52</a>, <a href="#wrglossary.1696">109</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Prti"><span class="optfmt">Prti</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.PS"><span class="optfmt">PS</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.ps"><span class="optfmt">ps</span> (<a id="wrglossary.1909"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.pashto"><span class="optfmt">pashto</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.pt-BR"><span class="optfmt">pt-BR</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:isoopts">Table 1.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.pt-PT"><span class="optfmt">pt-PT</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:isoopts">Table 1.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.PT"><span class="optfmt">PT</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.pt"><span class="optfmt">pt</span> (<a id="wrglossary.1910"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.portuges"><span class="optfmt">portuges</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.puertoricospanish"><span class="optfmt">puertoricospanish</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.PW"><span class="optfmt">PW</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.PY"><span class="optfmt">PY</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+
+</section><!-- end of section index7536640 -->
+
+<section id="index7602176"><!-- start of section index7602176 --><div class="tomain"><a href="#main">[top]</a></div>
+<h2><!-- start of section header -->Q<div class="labellink"><a href="#index7602176">[link]</a></div></h2><!-- end of section header -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.QA"><span class="optfmt">QA</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Qaaa"><span class="optfmt">Qaaa</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Qaai"><span class="optfmt">Qaai</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Qabx"><span class="optfmt">Qabx</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.qu"><span class="optfmt">qu</span> (<a id="wrglossary.1911"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.quechua"><span class="optfmt">quechua</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.quechua"><span class="optfmt">quechua</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+
+</section><!-- end of section index7602176 -->
+
+<section id="index7667712"><!-- start of section index7667712 --><div class="tomain"><a href="#main">[top]</a></div>
+<h2><!-- start of section header -->R<div class="labellink"><a href="#index7667712">[link]</a></div></h2><!-- end of section header -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.RE"><span class="optfmt">RE</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:idx.region">region</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:idx.territory">territory</a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:file.regions.sty"><span class="filefmt">regions.sty</span></dfn><span class="qquad"></span><a href="#wrglossary.1028">61</a>, <a href="#wrglossary.1075">62</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:RequirePackage"><code class="csfmt">\RequirePackage</code></dfn><span class="qquad"></span><a href="#wrglossary.178">13</a>, <a href="#wrglossary.237">17</a>, <a href="#wrglossary.1199">71</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Rjng"><span class="optfmt">Rjng</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.rm-CH"><span class="optfmt">rm-CH</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:isoopts">Table 1.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.rm"><span class="optfmt">rm</span> (<a id="wrglossary.1912"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.romansh"><span class="optfmt">romansh</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.rn"><span class="optfmt">rn</span> (<a id="wrglossary.1913"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.kirundi"><span class="optfmt">kirundi</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.RO"><span class="optfmt">RO</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.ro"><span class="optfmt">ro</span> (<a id="wrglossary.1914"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.romanian"><span class="optfmt">romanian</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.romanche"><span class="optfmt">romanche</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.romanian"><span class="optfmt">romanian</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.romansch"><span class="optfmt">romansch</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.romansh"><span class="optfmt">romansh</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Roro"><span class="optfmt">Roro</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.RS"><span class="optfmt">RS</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.RU"><span class="optfmt">RU</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.ru"><span class="optfmt">ru</span> (<a id="wrglossary.1915"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.russian"><span class="optfmt">russian</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.rumantsch"><span class="optfmt">rumantsch</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Runr"><span class="optfmt">Runr</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.russian"><span class="optfmt">russian</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.russianb"><span class="optfmt">russianb</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.RW"><span class="optfmt">RW</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.rw"><span class="optfmt">rw</span> (<a id="wrglossary.1916"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.kinyarwanda"><span class="optfmt">kinyarwanda</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+
+</section><!-- end of section index7667712 -->
+
+<section id="index7733248"><!-- start of section index7733248 --><div class="tomain"><a href="#main">[top]</a></div>
+<h2><!-- start of section header -->S<div class="labellink"><a href="#index7733248">[link]</a></div></h2><!-- end of section header -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.SA"><span class="optfmt">SA</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.sa"><span class="optfmt">sa</span> (<a id="wrglossary.1917"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.sanskrit"><span class="optfmt">sanskrit</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.samin"><span class="optfmt">samin</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.samoan"><span class="optfmt">samoan</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Samr"><span class="optfmt">Samr</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.sango"><span class="optfmt">sango</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.sanmarino"><span class="optfmt">sanmarino</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.sanskrit"><span class="optfmt">sanskrit</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Sara"><span class="optfmt">Sara</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Sarb"><span class="optfmt">Sarb</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.sardinian"><span class="optfmt">sardinian</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Saur"><span class="optfmt">Saur</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.SB"><span class="optfmt">SB</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.SC"><span class="optfmt">SC</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.sc"><span class="optfmt">sc</span> (<a id="wrglossary.1918"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.sardinian"><span class="optfmt">sardinian</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.scottish"><span class="optfmt">scottish</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:idx.script">script</dfn><span class="qquad"></span><a href="#wrglossary.103">10</a>, <a href="#wrglossary.125">11</a>, <a href="#wrglossary.175">13</a>, <a href="#wrglossary.201">15</a>, <a href="#wrglossary.222">16</a>, <a href="#wrglossary.348">21</a>, <a href="#wrglossary.620">36</a>, <a href="#wrglossary.753">43</a>, <a href="#wrglossary.798">47</a>, <a href="#wrglossary.820">50</a>, <a href="#wrglossary.886">51</a>, <a href="#wrglossary.1035">61</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.SD"><span class="optfmt">SD</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.sd"><span class="optfmt">sd</span> (<a id="wrglossary.1919"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.sindhi"><span class="optfmt">sindhi</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.SE"><span class="optfmt">SE</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.se"><span class="optfmt">se</span> (<a id="wrglossary.1920"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.samin"><span class="optfmt">samin</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:selectlanguage"><code class="csfmt">\selectlanguage</code></dfn><span class="qquad"></span><a href="#wrglossary.268">17</a>, <a href="#wrglossary.1230">72</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.serbian"><span class="optfmt">serbian</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a>; <a href="#wrglossary.1347">78</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.serbianc"><span class="optfmt">serbianc</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.serbianl"><span class="optfmt">serbianl</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:SetCurrentTrackedDialect"><code class="csfmt">\SetCurrentTrackedDialect</code></a><span class="qquad"></span><a href="#sec:selectlanguage">§6.2</a>; <a href="#wrglossary.113">10</a>, <a href="#wrglossary.269">18</a>, <a href="#wrglossary.777">45</a>, <a href="#wrglossary.1231">72</a>–<a href="#wrglossary.1265">74</a>, <a href="#wrglossary.1455">95</a>–<a href="#wrglossary.1486">97</a>, <span class="summarylocfmt"><a href="#wrglossary.1540">100</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:SetTrackedDialectAdditional"><code class="csfmt">\SetTrackedDialectAdditional</code></a><span class="qquad"></span><a href="#sec:definelabels">§6.6</a>; <a href="#wrglossary.1372">79</a>, <span class="summarylocfmt"><a href="#wrglossary.1542">101</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:SetTrackedDialectLabelMap"><code class="csfmt">\SetTrackedDialectLabelMap</code></a><span class="qquad"></span><a href="#sec:definelabels">§6.6</a>; <a href="#wrglossary.158">12</a>, <a href="#wrglossary.271">18</a>, <a href="#wrglossary.1241">73</a>, <a href="#wrglossary.1316">77</a>, <a href="#wrglossary.1404">81</a>, <span class="summarylocfmt"><a href="#wrglossary.1544">101</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:SetTrackedDialectModifier"><code class="csfmt">\SetTrackedDialectModifier</code></a><span class="qquad"></span><a href="#sec:definelabels">§6.6</a>; <a href="#wrglossary.588">34</a>, <a href="#wrglossary.1332">77</a>, <a href="#wrglossary.1336">78</a>, <span class="summarylocfmt"><a href="#wrglossary.1548">101</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:SetTrackedDialectScript"><code class="csfmt">\SetTrackedDialectScript</code></a><span class="qquad"></span><a href="#sec:definelabels">§6.6</a>; <a href="#wrglossary.1355">78</a>, <span class="summarylocfmt"><a href="#wrglossary.1550">101</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:SetTrackedDialectSubLang"><code class="csfmt">\SetTrackedDialectSubLang</code></a><span class="qquad"></span><a href="#sec:definelabels">§6.6</a>; <a href="#wrglossary.1365">79</a>, <span class="summarylocfmt"><a href="#wrglossary.1552">101</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:SetTrackedDialectVariant"><code class="csfmt">\SetTrackedDialectVariant</code></a><span class="qquad"></span><a href="#sec:definelabels">§6.6</a>; <a href="#wrglossary.1362">78</a>, <a href="#wrglossary.1364">79</a>, <span class="summarylocfmt"><a href="#wrglossary.1554">101</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.SG"><span class="optfmt">SG</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.sg"><span class="optfmt">sg</span> (<a id="wrglossary.1921"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.sango"><span class="optfmt">sango</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Sgnw"><span class="optfmt">Sgnw</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.SH"><span class="optfmt">SH</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Shaw"><span class="optfmt">Shaw</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:shellescape">shell escape</dfn><span class="qquad"></span><a href="#wrglossary.5">a</a>, <a href="#wrglossary.94">10</a>, <a href="#wrglossary.366">22</a>–<a href="#wrglossary.416">25</a>, <a href="#wrglossary.468">27</a>, <span class="termslocfmt"><a href="#wrglossary.1418">93</a></span>, <a href="#wrglossary.1700">109</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:pkg.shellesc"><span class="styfmt">shellesc</span> package</dfn><span class="qquad"></span><a href="#wrglossary.1421">93</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.shona"><span class="optfmt">shona</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Shrd"><span class="optfmt">Shrd</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.SI"><span class="optfmt">SI</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.si"><span class="optfmt">si</span> (<a id="wrglossary.1922"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.sinhalese"><span class="optfmt">sinhalese</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Sidd"><span class="optfmt">Sidd</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Sind"><span class="optfmt">Sind</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.sindhi"><span class="optfmt">sindhi</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Sinh"><span class="optfmt">Sinh</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.sinhalese"><span class="optfmt">sinhalese</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.SJ"><span class="optfmt">SJ</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.SK"><span class="optfmt">SK</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.sk"><span class="optfmt">sk</span> (<a id="wrglossary.1923"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.slovak"><span class="optfmt">slovak</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.sl-SI"><span class="optfmt">sl-SI</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:isoopts">Table 1.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.SL"><span class="optfmt">SL</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.sl"><span class="optfmt">sl</span> (<a id="wrglossary.1924"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.slovene"><span class="optfmt">slovene</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.slovak"><span class="optfmt">slovak</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.slovene"><span class="optfmt">slovene</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.sloveneistriaitalian"><span class="optfmt">sloveneistriaitalian</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.sloveneistriaslovenian"><span class="optfmt">sloveneistriaslovenian</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.slovenia"><span class="optfmt">slovenia</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.slovenian"><span class="optfmt">slovenian</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.SM"><span class="optfmt">SM</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.sm"><span class="optfmt">sm</span> (<a id="wrglossary.1925"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.samoan"><span class="optfmt">samoan</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.SN"><span class="optfmt">SN</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.sn"><span class="optfmt">sn</span> (<a id="wrglossary.1926"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.shona"><span class="optfmt">shona</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.SO"><span class="optfmt">SO</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.so"><span class="optfmt">so</span> (<a id="wrglossary.1927"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.somali"><span class="optfmt">somali</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.somali"><span class="optfmt">somali</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Sora"><span class="optfmt">Sora</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.southernndebele"><span class="optfmt">southernndebele</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.southernsotho"><span class="optfmt">southernsotho</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.spainspanish"><span class="optfmt">spainspanish</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.spanish"><span class="optfmt">spanish</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a>; <a href="#wrglossary.67">3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.sq"><span class="optfmt">sq</span> (<a id="wrglossary.1928"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.albanian"><span class="optfmt">albanian</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.SR"><span class="optfmt">SR</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.sr"><span class="optfmt">sr</span> (<a id="wrglossary.1929"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.serbian"><span class="optfmt">serbian</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.SS"><span class="optfmt">SS</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.ss"><span class="optfmt">ss</span> (<a id="wrglossary.1930"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.swati"><span class="optfmt">swati</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.ST"><span class="optfmt">ST</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.st"><span class="optfmt">st</span> (<a id="wrglossary.1931"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.southernsotho"><span class="optfmt">southernsotho</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.su"><span class="optfmt">su</span> (<a id="wrglossary.1932"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.sudanese"><span class="optfmt">sudanese</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.sudanese"><span class="optfmt">sudanese</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Sund"><span class="optfmt">Sund</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.SV"><span class="optfmt">SV</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.sv"><span class="optfmt">sv</span> (<a id="wrglossary.1933"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.swedish"><span class="optfmt">swedish</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.sw"><span class="optfmt">sw</span> (<a id="wrglossary.1934"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.swahili"><span class="optfmt">swahili</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.swahili"><span class="optfmt">swahili</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.swati"><span class="optfmt">swati</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.swedish"><span class="optfmt">swedish</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.swissfrench"><span class="optfmt">swissfrench</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.swissgerman"><span class="optfmt">swissgerman</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.swissitalian"><span class="optfmt">swissitalian</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.swissromansh"><span class="optfmt">swissromansh</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.SX"><span class="optfmt">SX</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.SY"><span class="optfmt">SY</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Sylo"><span class="optfmt">Sylo</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.syr"><span class="optfmt">syr</span> (<a id="wrglossary.1935"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.syriac"><span class="optfmt">syriac</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Syrc"><span class="optfmt">Syrc</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Syre"><span class="optfmt">Syre</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.syriac"><span class="optfmt">syriac</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Syrj"><span class="optfmt">Syrj</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Syrn"><span class="optfmt">Syrn</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.SZ"><span class="optfmt">SZ</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+
+</section><!-- end of section index7733248 -->
+
+<section id="index7798784"><!-- start of section index7798784 --><div class="tomain"><a href="#main">[top]</a></div>
+<h2><!-- start of section header -->T<div class="labellink"><a href="#index7798784">[link]</a></div></h2><!-- end of section header -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.ta"><span class="optfmt">ta</span> (<a id="wrglossary.1936"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.tamil"><span class="optfmt">tamil</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.tagalog"><span class="optfmt">tagalog</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Tagb"><span class="optfmt">Tagb</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.tahitian"><span class="optfmt">tahitian</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.tai"><span class="optfmt">tai</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.tajik"><span class="optfmt">tajik</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Takr"><span class="optfmt">Takr</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Tale"><span class="optfmt">Tale</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Talu"><span class="optfmt">Talu</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.tamil"><span class="optfmt">tamil</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Taml"><span class="optfmt">Taml</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Tang"><span class="optfmt">Tang</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.tatar"><span class="optfmt">tatar</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Tavt"><span class="optfmt">Tavt</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.TC"><span class="optfmt">TC</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.TD"><span class="optfmt">TD</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.te"><span class="optfmt">te</span> (<a id="wrglossary.1937"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.telugu"><span class="optfmt">telugu</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Telu"><span class="optfmt">Telu</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.telugu"><span class="optfmt">telugu</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Teng"><span class="optfmt">Teng</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:idx.territory">territory</dfn><span class="qquad"></span><a href="#wrglossary.319">20</a>, <a href="#wrglossary.441">26</a>, <a href="#wrglossary.520">30</a>, <a href="#wrglossary.533">31</a>, <a href="#wrglossary.593">35</a>, <a href="#wrglossary.632">36</a>, <a href="#wrglossary.821">50</a>, <a href="#wrglossary.1036">61</a>, <a href="#wrglossary.1613">104</a>, <a href="#wrglossary.1649">106</a>, <a href="#wrglossary.1668">107</a>, <a href="#wrglossary.1712">109</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:app.tex"><span class="appfmt">tex</span> (application)</dfn><span class="qquad"></span><a href="#wrglossary.430">25</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:file.texosquery.cfg"><span class="filefmt">texosquery.cfg</span></dfn><span class="qquad"></span><a href="#wrglossary.15">a</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:file.texosquery.tex"><span class="filefmt">texosquery.tex</span></dfn><span class="qquad"></span><a href="#wrglossary.82">9</a>, <a href="#wrglossary.88">10</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:app.texosquery"><span class="appfmt">texosquery</span> (application)</dfn><span class="qquad"></span><a href="#wrglossary.9">a</a>, <a href="#wrglossary.93">10</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:pkg.texosquery"><span class="styfmt">texosquery</span> package</dfn><span class="qquad"></span><a href="#wrglossary.86">10</a>, <a href="#wrglossary.360">22</a>, <a href="#wrglossary.382">23</a>, <a href="#wrglossary.448">26</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:TeXOSQueryLangTag"><code class="csfmt">\TeXOSQueryLangTag</code></dfn><span class="qquad"></span><a href="#wrglossary.91">10</a>, <a href="#wrglossary.187">14</a>, <a href="#wrglossary.361">22</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:TeXOSQueryLocale"><code class="csfmt">\TeXOSQueryLocale</code></dfn><span class="qquad"></span><a href="#wrglossary.384">23</a>, <a href="#wrglossary.453">26</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.TF"><span class="optfmt">TF</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Tfng"><span class="optfmt">Tfng</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.TG"><span class="optfmt">TG</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.tg"><span class="optfmt">tg</span> (<a id="wrglossary.1938"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.tajik"><span class="optfmt">tajik</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Tglg"><span class="optfmt">Tglg</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.TH"><span class="optfmt">TH</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.th"><span class="optfmt">th</span> (<a id="wrglossary.1939"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.thai"><span class="optfmt">thai</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Thaa"><span class="optfmt">Thaa</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Thai"><span class="optfmt">Thai</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.thai"><span class="optfmt">thai</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:ThreeLetterExtIsoLanguageCode"><code class="csfmt">\ThreeLetterExtIsoLanguageCode</code></a><span class="qquad"></span><a href="#sec:user">§5</a>; <a href="#wrglossary.695">40</a>, <span class="summarylocfmt"><a href="#wrglossary.1556">101</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:ThreeLetterIsoLanguageCode"><code class="csfmt">\ThreeLetterIsoLanguageCode</code></a><span class="qquad"></span><a href="#sec:user">§5</a>; <a href="#wrglossary.693">40</a>, <span class="summarylocfmt"><a href="#wrglossary.1559">102</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.ti"><span class="optfmt">ti</span> (<a id="wrglossary.1940"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.tigrinya"><span class="optfmt">tigrinya</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.tibetan"><span class="optfmt">tibetan</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Tibt"><span class="optfmt">Tibt</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.tigrinya"><span class="optfmt">tigrinya</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Tirh"><span class="optfmt">Tirh</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.TJ"><span class="optfmt">TJ</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.TK"><span class="optfmt">TK</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.tk"><span class="optfmt">tk</span> (<a id="wrglossary.1941"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.turkmen"><span class="optfmt">turkmen</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.TL"><span class="optfmt">TL</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.tl"><span class="optfmt">tl</span> (<a id="wrglossary.1942"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.tagalog"><span class="optfmt">tagalog</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.TM"><span class="optfmt">TM</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.TN"><span class="optfmt">TN</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.tn"><span class="optfmt">tn</span> (<a id="wrglossary.1943"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.tswana"><span class="optfmt">tswana</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.TO"><span class="optfmt">TO</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.to"><span class="optfmt">to</span> (<a id="wrglossary.1944"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.tonga"><span class="optfmt">tonga</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.tonga"><span class="optfmt">tonga</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.TR"><span class="optfmt">TR</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.tr"><span class="optfmt">tr</span> (<a id="wrglossary.1945"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.turkish"><span class="optfmt">turkish</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackedDialectClosestSubMatch"><code class="csfmt">\TrackedDialectClosestSubMatch</code></a><span class="qquad"></span><a href="#sec:user">§5</a>; <a href="#wrglossary.623">36</a>, <span class="summarylocfmt"><a href="#wrglossary.1562">102</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackedDialectsFromLanguage"><code class="csfmt">\TrackedDialectsFromLanguage</code></a><span class="qquad"></span><a href="#sec:user">§5</a>; <a href="#wrglossary.663">39</a>, <span class="summarylocfmt"><a href="#wrglossary.1565">102</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackedIsoCodeFromLanguage"><code class="csfmt">\TrackedIsoCodeFromLanguage</code></a><span class="qquad"></span><a href="#sec:user">§5</a>; <a href="#wrglossary.684">39</a>, <span class="summarylocfmt"><a href="#wrglossary.1567">102</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackedLanguageFromDialect"><code class="csfmt">\TrackedLanguageFromDialect</code></a><span class="qquad"></span><a href="#sec:user">§5</a>; <a href="#wrglossary.662">39</a>, <span class="summarylocfmt"><a href="#wrglossary.1569">102</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackedLanguageFromIsoCode"><code class="csfmt">\TrackedLanguageFromIsoCode</code></a><span class="qquad"></span><a href="#sec:user">§5</a>; <a href="#wrglossary.681">39</a>, <span class="summarylocfmt"><a href="#wrglossary.1571">102</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackIfKnownLanguage"><code class="csfmt">\TrackIfKnownLanguage</code></a><span class="qquad"></span><a href="#sec:generic">§3</a>; <a href="#wrglossary.183">14</a>, <a href="#wrglossary.341">21</a>, <span class="summarylocfmt"><a href="#wrglossary.1573">102</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:file.tracklang.sty"><span class="filefmt">tracklang.sty</span></dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:pkg.tracklang"><span class="styfmt">tracklang</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:file.tracklang.tex"><span class="filefmt">tracklang.tex</span></dfn><span class="qquad"></span><a href="#wrglossary.4">a</a>, <a href="#wrglossary.78">9</a>, <a href="#wrglossary.90">10</a>, <a href="#wrglossary.173">13</a>, <a href="#wrglossary.275">19</a>, <a href="#wrglossary.516">30</a>, <a href="#wrglossary.1205">72</a>, <a href="#wrglossary.1425">94</a>–<a href="#wrglossary.1714">110</a>, <a href="#wrglossary.1751">112</a>, <a href="#wrglossary.1764">113</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:file.tracklang-region-codes.tex"><span class="filefmt">tracklang-region-codes.tex</span></a><span class="qquad"></span><a href="#sec:supplpkgs">§4</a>; <a href="#wrglossary.519">30</a>, <a href="#wrglossary.535">31</a>, <a href="#wrglossary.1221">72</a>, <a href="#wrglossary.1272">74</a>, <a href="#wrglossary.1578">103</a>, <a href="#wrglossary.1646">106</a>–<a href="#wrglossary.1711">109</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:file.tracklang-scripts.sty"><span class="filefmt">tracklang-scripts.sty</span></dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:pkg.tracklang-scripts"><span class="styfmt">tracklang-scripts</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:file.tracklang-scripts.tex"><span class="filefmt">tracklang-scripts.tex</span></a><span class="qquad"></span><a href="#sec:supplpkgs">§4</a>; <a href="#wrglossary.128">11</a>, <a href="#wrglossary.539">31</a>–<a href="#wrglossary.562">33</a>, <a href="#wrglossary.750">43</a>, <a href="#wrglossary.1209">72</a>, <a href="#wrglossary.1268">74</a>, <a href="#wrglossary.1581">103</a>, <a href="#wrglossary.1728">110</a>–<a href="#wrglossary.1747">112</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:pkg.tracklang-scripts"><span class="styfmt">tracklang-scripts</span> package</dfn><span class="qquad"></span><a href="#wrglossary.126">11</a>, <a href="#wrglossary.540">31</a>, <a href="#wrglossary.747">43</a>, <a href="#wrglossary.1252">73</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:pkg.tracklang"><span class="styfmt">tracklang</span> package</dfn><span class="qquad"></span><a href="#wrglossary.1">a</a>, <a href="#wrglossary.74">9</a>, <a href="#wrglossary.281">19</a>, <a href="#wrglossary.517">30</a>, <a href="#wrglossary.596">35</a>, <a href="#wrglossary.1197">71</a>, <a href="#wrglossary.1424">94</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackLangAddExtraRegionFile"><code class="csfmt">\TrackLangAddExtraRegionFile</code></a><span class="qquad"></span><a href="#sec:supplpkgs">§4</a>; <a href="#wrglossary.536">31</a>, <a href="#wrglossary.1223">72</a>, <a href="#wrglossary.1274">75</a>, <span class="summarylocfmt"><a href="#wrglossary.1576">102</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackLangAddExtraScriptFile"><code class="csfmt">\TrackLangAddExtraScriptFile</code></a><span class="qquad"></span><a href="#sec:supplpkgs">§4</a>; <a href="#wrglossary.561">33</a>, <a href="#wrglossary.1211">72</a>, <a href="#wrglossary.1271">74</a>, <span class="summarylocfmt"><a href="#wrglossary.1579">103</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackLangAddToCaptions"><code class="csfmt">\TrackLangAddToCaptions</code></a><span class="qquad"></span><a href="#sec:user">§5</a>; <a href="#wrglossary.207">15</a>, <a href="#wrglossary.225">16</a>, <a href="#wrglossary.960">54</a>, <a href="#wrglossary.1180">70</a>, <a href="#wrglossary.1325">77</a>, <span class="summarylocfmt"><a href="#wrglossary.1582">103</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackLangAddToHook"><code class="csfmt">\TrackLangAddToHook</code></a><span class="qquad"></span><a href="#sec:user">§5</a>; <a href="#wrglossary.210">15</a>, <a href="#wrglossary.262">17</a>, <a href="#wrglossary.956">54</a>, <a href="#wrglossary.1179">70</a>, <span class="summarylocfmt"><a href="#wrglossary.1585">103</a></span>, <a href="#wrglossary.1709">109</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackLangAlphaIIIToNumericRegion"><code class="csfmt">\TrackLangAlphaIIIToNumericRegion</code></a><span class="qquad"></span><a href="#sec:supplpkgs">§4</a>; <a href="#wrglossary.530">30</a>, <span class="summarylocfmt"><a href="#wrglossary.1587">103</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackLangAlphaIIToNumericRegion"><code class="csfmt">\TrackLangAlphaIIToNumericRegion</code></a><span class="qquad"></span><a href="#sec:supplpkgs">§4</a>; <a href="#wrglossary.524">30</a>, <span class="summarylocfmt"><a href="#wrglossary.1589">103</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackLangDeclareDialectOption"><code class="csfmt">\TrackLangDeclareDialectOption</code></a><span class="qquad"></span><span class="summarylocfmt"><a href="#wrglossary.1591">103</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackLangDeclareLanguageOption"><code class="csfmt">\TrackLangDeclareLanguageOption</code></a><span class="qquad"></span><span class="summarylocfmt"><a href="#wrglossary.1594">104</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackLangEnv"><code class="csfmt">\TrackLangEnv</code></a><span class="qquad"></span><a href="#sec:generic">§3</a>; <a href="#wrglossary.417">25</a>–<a href="#wrglossary.463">27</a>, <span class="summarylocfmt"><a href="#wrglossary.1596">104</a></span>, <a href="#wrglossary.1687">108</a>, <a href="#wrglossary.1760">112</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackLangEnvCodeSet"><code class="csfmt">\TrackLangEnvCodeSet</code></a><span class="qquad"></span><a href="#sec:generic">§3</a>; <a href="#wrglossary.444">26</a>, <span class="summarylocfmt"><a href="#wrglossary.1599">104</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackLangEnvLang"><code class="csfmt">\TrackLangEnvLang</code></a><span class="qquad"></span><a href="#sec:generic">§3</a>; <a href="#wrglossary.440">26</a>, <span class="summarylocfmt"><a href="#wrglossary.1603">104</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackLangEnvModifier"><code class="csfmt">\TrackLangEnvModifier</code></a><span class="qquad"></span><a href="#sec:generic">§3</a>; <a href="#wrglossary.446">26</a>, <span class="summarylocfmt"><a href="#wrglossary.1606">104</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackLangEnvTerritory"><code class="csfmt">\TrackLangEnvTerritory</code></a><span class="qquad"></span><a href="#sec:generic">§3</a>; <a href="#wrglossary.442">26</a>, <span class="summarylocfmt"><a href="#wrglossary.1610">104</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackLangFromEnv"><code class="csfmt">\TrackLangFromEnv</code></a><span class="qquad"></span><a href="#sec:generic">§3</a>; <a href="#wrglossary.79">9</a>, <a href="#wrglossary.100">10</a>, <a href="#wrglossary.188">14</a>, <a href="#wrglossary.375">23</a>, <a href="#wrglossary.414">25</a>–<a href="#wrglossary.502">28</a>, <a href="#wrglossary.575">34</a>, <a href="#wrglossary.705">40</a>, <a href="#wrglossary.1394">80</a>, <a href="#wrglossary.1407">81</a>, <span class="summarylocfmt"><a href="#wrglossary.1614">104</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackLangGetDefaultScript"><code class="csfmt">\TrackLangGetDefaultScript</code></a><span class="qquad"></span><a href="#sec:user">§5</a>; <a href="#wrglossary.745">43</a>, <span class="summarylocfmt"><a href="#wrglossary.1618">105</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackLangGetKnownCountry"><code class="csfmt">\TrackLangGetKnownCountry</code></a><span class="qquad"></span><span class="summarylocfmt"><a href="#wrglossary.1620">105</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackLangGetKnownIsoThreeLetterLang"><code class="csfmt">\TrackLangGetKnownIsoThreeLetterLang</code></a><span class="qquad"></span><span class="summarylocfmt"><a href="#wrglossary.1623">105</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackLangGetKnownIsoThreeLetterLangB"><code class="csfmt">\TrackLangGetKnownIsoThreeLetterLangB</code></a><span class="qquad"></span><span class="summarylocfmt"><a href="#wrglossary.1626">105</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackLangGetKnownIsoTwoLetterLang"><code class="csfmt">\TrackLangGetKnownIsoTwoLetterLang</code></a><span class="qquad"></span><span class="summarylocfmt"><a href="#wrglossary.1629">105</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackLangGetKnownLangFromIso"><code class="csfmt">\TrackLangGetKnownLangFromIso</code></a><span class="qquad"></span><span class="summarylocfmt"><a href="#wrglossary.1632">105</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackLangIfAlphaNumericChar"><code class="csfmt">\TrackLangIfAlphaNumericChar</code></a><span class="qquad"></span><span class="summarylocfmt"><a href="#wrglossary.1638">105</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackLangIfHasDefaultScript"><code class="csfmt">\TrackLangIfHasDefaultScript</code></a><span class="qquad"></span><span class="summarylocfmt"><a href="#wrglossary.1640">105</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackLangIfHasKnownCountry"><code class="csfmt">\TrackLangIfHasKnownCountry</code></a><span class="qquad"></span><span class="summarylocfmt"><a href="#wrglossary.1642">106</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackLangIfKnownAlphaIIIRegion"><code class="csfmt">\TrackLangIfKnownAlphaIIIRegion</code></a><span class="qquad"></span><a href="#sec:supplpkgs">§4</a>; <a href="#wrglossary.532">31</a>, <span class="summarylocfmt"><a href="#wrglossary.1645">106</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackLangIfKnownAlphaIIRegion"><code class="csfmt">\TrackLangIfKnownAlphaIIRegion</code></a><span class="qquad"></span><a href="#sec:supplpkgs">§4</a>; <a href="#wrglossary.526">30</a>, <span class="summarylocfmt"><a href="#wrglossary.1647">106</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackLangIfKnownIsoThreeLetterLang"><code class="csfmt">\TrackLangIfKnownIsoThreeLetterLang</code></a><span class="qquad"></span><span class="summarylocfmt"><a href="#wrglossary.1650">106</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackLangIfKnownIsoThreeLetterLangB"><code class="csfmt">\TrackLangIfKnownIsoThreeLetterLangB</code></a><span class="qquad"></span><span class="summarylocfmt"><a href="#wrglossary.1653">106</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackLangIfKnownIsoTwoLetterLang"><code class="csfmt">\TrackLangIfKnownIsoTwoLetterLang</code></a><span class="qquad"></span><span class="summarylocfmt"><a href="#wrglossary.1656">107</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackLangIfKnownLang"><code class="csfmt">\TrackLangIfKnownLang</code></a><span class="qquad"></span><a href="#wrglossary.1411">81</a>, <span class="summarylocfmt"><a href="#wrglossary.1659">107</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackLangIfKnownLangFromIso"><code class="csfmt">\TrackLangIfKnownLangFromIso</code></a><span class="qquad"></span><span class="summarylocfmt"><a href="#wrglossary.1661">107</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackLangIfKnownNumericRegion"><code class="csfmt">\TrackLangIfKnownNumericRegion</code></a><span class="qquad"></span><a href="#sec:supplpkgs">§4</a>; <a href="#wrglossary.528">30</a>, <span class="summarylocfmt"><a href="#wrglossary.1666">107</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackLangIfLanguageTag"><code class="csfmt">\TrackLangIfLanguageTag</code></a><span class="qquad"></span><span class="summarylocfmt"><a href="#wrglossary.1669">107</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackLangIfRegionTag"><code class="csfmt">\TrackLangIfRegionTag</code></a><span class="qquad"></span><span class="summarylocfmt"><a href="#wrglossary.1671">107</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackLangIfScriptTag"><code class="csfmt">\TrackLangIfScriptTag</code></a><span class="qquad"></span><span class="summarylocfmt"><a href="#wrglossary.1673">107</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackLangIfVariantTag"><code class="csfmt">\TrackLangIfVariantTag</code></a><span class="qquad"></span><span class="summarylocfmt"><a href="#wrglossary.1675">108</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackLangLastTrackedDialect"><code class="csfmt">\TrackLangLastTrackedDialect</code></a><span class="qquad"></span><a href="#sec:newlanguages">§6.5</a>; <a href="#wrglossary.159">12</a>, <a href="#wrglossary.1287">76</a>, <a href="#wrglossary.1303">77</a>, <a href="#wrglossary.1438">94</a>, <span class="summarylocfmt"><a href="#wrglossary.1677">108</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackLangNewLanguage"><code class="csfmt">\TrackLangNewLanguage</code></a><span class="qquad"></span><a href="#sec:newlanguages">§6.5</a>; <a href="#wrglossary.1214">72</a>, <a href="#wrglossary.1276">75</a>, <a href="#wrglossary.1289">76</a>, <a href="#wrglossary.1414">81</a>, <a href="#wrglossary.1450">95</a>, <span class="summarylocfmt"><a href="#wrglossary.1679">108</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackLangNumericToAlphaIIIRegion"><code class="csfmt">\TrackLangNumericToAlphaIIIRegion</code></a><span class="qquad"></span><a href="#sec:supplpkgs">§4</a>; <a href="#wrglossary.531">31</a>, <span class="summarylocfmt"><a href="#wrglossary.1681">108</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackLangNumericToAlphaIIRegion"><code class="csfmt">\TrackLangNumericToAlphaIIRegion</code></a><span class="qquad"></span><a href="#sec:supplpkgs">§4</a>; <a href="#wrglossary.525">30</a>, <span class="summarylocfmt"><a href="#wrglossary.1683">108</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackLangParseFromEnv"><code class="csfmt">\TrackLangParseFromEnv</code></a><span class="qquad"></span><a href="#sec:generic">§3</a>; <a href="#wrglossary.475">27</a>, <a href="#wrglossary.1598">104</a>, <span class="summarylocfmt"><a href="#wrglossary.1685">108</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackLangProvidePredefinedDialect"><code class="csfmt">\TrackLangProvidePredefinedDialect</code></a><span class="qquad"></span><a href="#sec:definelabels">§6.6</a>; <a href="#wrglossary.1218">72</a>, <a href="#wrglossary.1293">76</a>, <span class="summarylocfmt"><a href="#wrglossary.1688">109</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackLangProvidePredefinedLanguage"><code class="csfmt">\TrackLangProvidePredefinedLanguage</code></a><span class="qquad"></span><a href="#sec:definelabels">§6.6</a>; <a href="#wrglossary.1226">72</a>, <a href="#wrglossary.1290">76</a>, <span class="summarylocfmt"><a href="#wrglossary.1691">109</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackLangProvidesResource"><code class="csfmt">\TrackLangProvidesResource</code></a><span class="qquad"></span><a href="#sec:user">§5</a>; <a href="#wrglossary.206">15</a>, <a href="#wrglossary.224">16</a>, <a href="#wrglossary.772">45</a>, <a href="#wrglossary.922">52</a>, <a href="#wrglossary.933">53</a>, <a href="#wrglossary.1400">80</a>, <span class="summarylocfmt"><a href="#wrglossary.1694">109</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackLangQueryEnv"><code class="csfmt">\TrackLangQueryEnv</code></a><span class="qquad"></span><a href="#sec:generic">§3</a>; <a href="#wrglossary.447">26</a>, <span class="summarylocfmt"><a href="#wrglossary.1697">109</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackLangQueryOtherEnv"><code class="csfmt">\TrackLangQueryOtherEnv</code></a><span class="qquad"></span><a href="#sec:generic">§3</a>; <a href="#wrglossary.459">26</a>, <span class="summarylocfmt"><a href="#wrglossary.1702">109</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackLangRedefHook"><code class="csfmt">\TrackLangRedefHook</code></a><span class="qquad"></span><a href="#sec:user">§5</a>; <a href="#wrglossary.211">15</a>, <a href="#wrglossary.263">17</a>, <a href="#wrglossary.963">55</a>, <span class="summarylocfmt"><a href="#wrglossary.1707">109</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackLangRegionMap"><code class="csfmt">\TrackLangRegionMap</code></a><span class="qquad"></span><a href="#sec:supplpkgs">§4</a>; <a href="#wrglossary.534">31</a>, <a href="#wrglossary.1222">72</a>, <a href="#wrglossary.1273">75</a>, <span class="summarylocfmt"><a href="#wrglossary.1710">109</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackLangRequestResource"><code class="csfmt">\TrackLangRequestResource</code></a><span class="qquad"></span><a href="#sec:user">§5</a>; <a href="#wrglossary.219">15</a>, <a href="#wrglossary.935">53</a>, <span class="summarylocfmt"><a href="#wrglossary.1713">110</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackLangRequireDialect"><code class="csfmt">\TrackLangRequireDialect</code></a><span class="qquad"></span><a href="#sec:user">§5</a>; <a href="#wrglossary.193">15</a>, <a href="#wrglossary.768">45</a>, <a href="#wrglossary.920">52</a>–<a href="#wrglossary.959">54</a>, <a href="#wrglossary.1062">62</a>, <span class="summarylocfmt"><a href="#wrglossary.1716">110</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackLangRequireDialectPrefix"><code class="csfmt">\TrackLangRequireDialectPrefix</code></a><span class="qquad"></span><a href="#sec:user">§5</a>; <a href="#wrglossary.771">45</a>, <span class="summarylocfmt"><a href="#wrglossary.1718">110</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackLangRequireResource"><code class="csfmt">\TrackLangRequireResource</code></a><span class="qquad"></span><a href="#sec:user">§5</a>; <a href="#wrglossary.773">45</a>, <a href="#wrglossary.814">49</a>, <a href="#wrglossary.925">53</a>, <a href="#wrglossary.1401">80</a>, <span class="summarylocfmt"><a href="#wrglossary.1721">110</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackLangRequireResourceOrDo"><code class="csfmt">\TrackLangRequireResourceOrDo</code></a><span class="qquad"></span><a href="#sec:user">§5</a>; <a href="#wrglossary.934">53</a>, <span class="summarylocfmt"><a href="#wrglossary.1724">110</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackLangScriptAlphaToDir"><code class="csfmt">\TrackLangScriptAlphaToDir</code></a><span class="qquad"></span><a href="#sec:supplpkgs">§4</a>; <a href="#wrglossary.133">11</a>, <a href="#wrglossary.555">33</a>, <span class="summarylocfmt"><a href="#wrglossary.1727">110</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackLangScriptAlphaToName"><code class="csfmt">\TrackLangScriptAlphaToName</code></a><span class="qquad"></span><a href="#sec:supplpkgs">§4</a>; <a href="#wrglossary.129">11</a>, <a href="#wrglossary.554">32</a>, <span class="summarylocfmt"><a href="#wrglossary.1729">110</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackLangScriptAlphaToNumeric"><code class="csfmt">\TrackLangScriptAlphaToNumeric</code></a><span class="qquad"></span><a href="#sec:supplpkgs">§4</a>; <a href="#wrglossary.131">11</a>, <a href="#wrglossary.550">32</a>, <span class="summarylocfmt"><a href="#wrglossary.1731">110</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackLangScriptCode"><code class="csfmt">\TrackLangScript<span class="meta">〈<em class="metainner">Code</em>〉</span></code></a><span class="qquad"></span><a href="#sec:supplpkgs">§4</a>; <a href="#wrglossary.138">11</a>, <a href="#wrglossary.547">32</a>, <a href="#wrglossary.748">43</a>, <span class="summarylocfmt"><a href="#wrglossary.1733">111</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackLangScriptGetParent"><code class="csfmt">\TrackLangScriptGetParent</code></a><span class="qquad"></span><a href="#sec:supplpkgs">§4</a>; <a href="#wrglossary.557">33</a>, <span class="summarylocfmt"><a href="#wrglossary.1736">111</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackLangScriptIfHasParent"><code class="csfmt">\TrackLangScriptIfHasParent</code></a><span class="qquad"></span><a href="#sec:supplpkgs">§4</a>; <a href="#wrglossary.558">33</a>, <span class="summarylocfmt"><a href="#wrglossary.1738">111</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackLangScriptIfKnownAlpha"><code class="csfmt">\TrackLangScriptIfKnownAlpha</code></a><span class="qquad"></span><a href="#sec:supplpkgs">§4</a>; <a href="#wrglossary.551">32</a>, <span class="summarylocfmt"><a href="#wrglossary.1740">111</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackLangScriptIfKnownNumeric"><code class="csfmt">\TrackLangScriptIfKnownNumeric</code></a><span class="qquad"></span><a href="#sec:supplpkgs">§4</a>; <a href="#wrglossary.553">32</a>, <span class="summarylocfmt"><a href="#wrglossary.1742">111</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackLangScriptMap"><code class="csfmt">\TrackLangScriptMap</code></a><span class="qquad"></span><a href="#sec:supplpkgs">§4</a>; <a href="#wrglossary.544">32</a>, <a href="#wrglossary.560">33</a>, <a href="#wrglossary.1210">72</a>, <a href="#wrglossary.1269">74</a>, <span class="summarylocfmt"><a href="#wrglossary.1744">111</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackLangScriptNumericToAlpha"><code class="csfmt">\TrackLangScriptNumericToAlpha</code></a><span class="qquad"></span><a href="#sec:supplpkgs">§4</a>; <a href="#wrglossary.552">32</a>, <span class="summarylocfmt"><a href="#wrglossary.1746">112</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackLangScriptSetParent"><code class="csfmt">\TrackLangScriptSetParent</code></a><span class="qquad"></span><a href="#sec:supplpkgs">§4</a>; <a href="#wrglossary.556">33</a>, <span class="summarylocfmt"><a href="#wrglossary.1748">112</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackLangShowWarningsfalse"><code class="csfmt">\TrackLangShowWarningsfalse</code></a><span class="qquad"></span><a href="#sec:generic">§3</a>; <a href="#wrglossary.397">24</a>, <span class="summarylocfmt"><a href="#wrglossary.1750">112</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackLangShowWarningstrue"><code class="csfmt">\TrackLangShowWarningstrue</code></a><span class="qquad"></span><a href="#sec:generic">§3</a>; <a href="#wrglossary.398">24</a>, <span class="summarylocfmt"><a href="#wrglossary.1753">112</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackLanguageTag"><code class="csfmt">\TrackLanguageTag</code></a><span class="qquad"></span><a href="#sec:generic">§3</a>; <a href="#tab:isoopts">Table 1.1</a>; <a href="#wrglossary.92">10</a>, <a href="#wrglossary.154">12</a>–<a href="#wrglossary.190">14</a>, <a href="#wrglossary.243">17</a>, <a href="#wrglossary.340">21</a>, <a href="#wrglossary.373">23</a>, <a href="#wrglossary.521">30</a>, <a href="#wrglossary.578">34</a>, <a href="#wrglossary.639">36</a>, <a href="#wrglossary.670">39</a>, <a href="#wrglossary.699">40</a>, <a href="#wrglossary.736">42</a>, <a href="#wrglossary.1237">73</a>, <a href="#wrglossary.1307">77</a>, <a href="#wrglossary.1575">102</a>, <span class="summarylocfmt"><a href="#wrglossary.1756">112</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackLocale"><code class="csfmt">\TrackLocale</code></a><span class="qquad"></span><a href="#sec:generic">§3</a>; <a href="#tab:isoopts">Table 1.1</a>; <a href="#wrglossary.301">20</a>, <a href="#wrglossary.367">22</a>, <a href="#wrglossary.374">23</a>, <a href="#wrglossary.439">25</a>, <a href="#wrglossary.574">34</a>, <a href="#wrglossary.640">36</a>, <a href="#wrglossary.704">40</a>, <a href="#wrglossary.1236">73</a>, <a href="#wrglossary.1306">77</a>, <a href="#wrglossary.1338">78</a>, <span class="summarylocfmt"><a href="#wrglossary.1758">112</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TrackPredefinedDialect"><code class="csfmt">\TrackPredefinedDialect</code></a><span class="qquad"></span><a href="#sec:generic">§3</a>; <a href="#tab:isoopts">Table 1.1</a>; <a href="#wrglossary.68">3</a>, <a href="#wrglossary.111">10</a>, <a href="#wrglossary.242">17</a>, <a href="#wrglossary.293">19</a>, <a href="#wrglossary.302">20</a>, <a href="#wrglossary.1225">72</a>, <a href="#wrglossary.1233">73</a>, <a href="#wrglossary.1288">76</a>, <a href="#wrglossary.1305">77</a>, <a href="#wrglossary.1593">103</a>, <a href="#wrglossary.1690">109</a>, <span class="summarylocfmt"><a href="#wrglossary.1761">112</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:trans@languages"><code class="csfmt">\trans@languages</code></dfn><span class="qquad"></span><a href="#wrglossary.602">35</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:pkg.translator"><span class="styfmt">translator</span> package</dfn><span class="qquad"></span><a href="#wrglossary.22">2</a>, <a href="#wrglossary.52">3</a>, <a href="#wrglossary.603">35</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.ts"><span class="optfmt">ts</span> (<a id="wrglossary.1946"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.tsonga"><span class="optfmt">tsonga</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.tsonga"><span class="optfmt">tsonga</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.tswana"><span class="optfmt">tswana</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.TT"><span class="optfmt">TT</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.tt"><span class="optfmt">tt</span> (<a id="wrglossary.1947"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.tatar"><span class="optfmt">tatar</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.turkish"><span class="optfmt">turkish</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.turkmen"><span class="optfmt">turkmen</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.TV"><span class="optfmt">TV</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.TW"><span class="optfmt">TW</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.tw"><span class="optfmt">tw</span> (<a id="wrglossary.1948"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.twi"><span class="optfmt">twi</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.twi"><span class="optfmt">twi</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TwoLetterIsoCountryCode"><code class="csfmt">\TwoLetterIsoCountryCode</code></a><span class="qquad"></span><a href="#sec:user">§5</a>; <a href="#wrglossary.689">40</a>, <span class="summarylocfmt"><a href="#wrglossary.1763">113</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:TwoLetterIsoLanguageCode"><code class="csfmt">\TwoLetterIsoLanguageCode</code></a><span class="qquad"></span><a href="#sec:user">§5</a>; <a href="#wrglossary.691">40</a>, <span class="summarylocfmt"><a href="#wrglossary.1766">113</a></span></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.ty"><span class="optfmt">ty</span> (<a id="wrglossary.1949"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.tahitian"><span class="optfmt">tahitian</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.TZ"><span class="optfmt">TZ</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+
+</section><!-- end of section index7798784 -->
+
+<section id="index7864320"><!-- start of section index7864320 --><div class="tomain"><a href="#main">[top]</a></div>
+<h2><!-- start of section header -->U<div class="labellink"><a href="#index7864320">[link]</a></div></h2><!-- end of section header -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.UA"><span class="optfmt">UA</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.UG"><span class="optfmt">UG</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.ug"><span class="optfmt">ug</span> (<a id="wrglossary.1950"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.uyghur"><span class="optfmt">uyghur</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Ugar"><span class="optfmt">Ugar</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.uk"><span class="optfmt">uk</span> (<a id="wrglossary.1951"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.ukrainian"><span class="optfmt">ukrainian</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.UKenglish"><span class="optfmt">UKenglish</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a>; <a href="#wrglossary.160">12</a>, <a href="#wrglossary.164">13</a>, <a href="#wrglossary.251">17</a>, <a href="#wrglossary.568">34</a>, <a href="#wrglossary.943">53</a>, <a href="#wrglossary.1188">70</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.ukraine"><span class="optfmt">ukraine</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.ukraineb"><span class="optfmt">ukraineb</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.ukrainian"><span class="optfmt">ukrainian</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.UM"><span class="optfmt">UM</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.und"><span class="optfmt">und</span> (<a id="wrglossary.1952"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.undetermined"><span class="optfmt">undetermined</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.undetermined"><span class="optfmt">undetermined</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a>; <a href="#wrglossary.701">40</a>, <a href="#wrglossary.1483">96</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.uppersorbian"><span class="optfmt">uppersorbian</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.ur"><span class="optfmt">ur</span> (<a id="wrglossary.1953"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.urdu"><span class="optfmt">urdu</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.urdu"><span class="optfmt">urdu</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.uruguayspanish"><span class="optfmt">uruguayspanish</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.US"><span class="optfmt">US</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.USenglish"><span class="optfmt">USenglish</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a>; <a href="#wrglossary.1190">70</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.usorbian"><span class="optfmt">usorbian</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.UY"><span class="optfmt">UY</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.uyghur"><span class="optfmt">uyghur</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.UZ"><span class="optfmt">UZ</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.uz"><span class="optfmt">uz</span> (<a id="wrglossary.1954"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.uzbek"><span class="optfmt">uzbek</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.uzbek"><span class="optfmt">uzbek</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+
+</section><!-- end of section index7864320 -->
+
+<section id="index7929856"><!-- start of section index7929856 --><div class="tomain"><a href="#main">[top]</a></div>
+<h2><!-- start of section header -->V<div class="labellink"><a href="#index7929856">[link]</a></div></h2><!-- end of section header -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.VA"><span class="optfmt">VA</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Vaii"><span class="optfmt">Vaii</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.valencian"><span class="optfmt">valencian</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.valencien"><span class="optfmt">valencien</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:idx.variant">variant</dfn><span class="qquad"></span><a href="#wrglossary.105">10</a>, <a href="#wrglossary.202">15</a>, <a href="#wrglossary.321">20</a>, <a href="#wrglossary.621">36</a>, <a href="#wrglossary.799">47</a>, <a href="#wrglossary.876">50</a>, <a href="#wrglossary.1298">76</a>, <a href="#wrglossary.1344">78</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.vatican"><span class="optfmt">vatican</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.VC"><span class="optfmt">VC</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.VE"><span class="optfmt">VE</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.ve"><span class="optfmt">ve</span> (<a id="wrglossary.1955"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.venda"><span class="optfmt">venda</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.venda"><span class="optfmt">venda</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.venezuelanspanish"><span class="optfmt">venezuelanspanish</span> (option)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:nonisoopts">Table 1.3</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.VG"><span class="optfmt">VG</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.VI"><span class="optfmt">VI</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.vi"><span class="optfmt">vi</span> (<a id="wrglossary.1956"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.vietnamese"><span class="optfmt">vietnamese</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.vietnamese"><span class="optfmt">vietnamese</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Visp"><span class="optfmt">Visp</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.VN"><span class="optfmt">VN</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.vo"><span class="optfmt">vo</span> (<a id="wrglossary.1957"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.volapuk"><span class="optfmt">volapuk</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.volapuk"><span class="optfmt">volapuk</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.VU"><span class="optfmt">VU</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+
+</section><!-- end of section index7929856 -->
+
+<section id="index7995392"><!-- start of section index7995392 --><div class="tomain"><a href="#main">[top]</a></div>
+<h2><!-- start of section header -->W<div class="labellink"><a href="#index7995392">[link]</a></div></h2><!-- end of section header -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.wa"><span class="optfmt">wa</span> (<a id="wrglossary.1958"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.walloon"><span class="optfmt">walloon</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.walloon"><span class="optfmt">walloon</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Wara"><span class="optfmt">Wara</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.welsh"><span class="optfmt">welsh</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.westernfrisian"><span class="optfmt">westernfrisian</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.WF"><span class="optfmt">WF</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.wo"><span class="optfmt">wo</span> (<a id="wrglossary.1959"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.wolof"><span class="optfmt">wolof</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Wole"><span class="optfmt">Wole</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.wolof"><span class="optfmt">wolof</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.WS"><span class="optfmt">WS</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+
+</section><!-- end of section index7995392 -->
+
+<section id="index8060928"><!-- start of section index8060928 --><div class="tomain"><a href="#main">[top]</a></div>
+<h2><!-- start of section header -->X<div class="labellink"><a href="#index8060928">[link]</a></div></h2><!-- end of section header -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.xh"><span class="optfmt">xh</span> (<a id="wrglossary.1960"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.xhosa"><span class="optfmt">xhosa</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.xhosa"><span class="optfmt">xhosa</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Xpeo"><span class="optfmt">Xpeo</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:xpg@bcp@loaded"><code class="csfmt">\xpg@bcp@loaded</code></dfn><span class="qquad"></span><a href="#wrglossary.28">2</a>, <a href="#wrglossary.140">11</a>, <a href="#wrglossary.610">35</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:xpg@loaded"><code class="csfmt">\xpg@loaded</code></dfn><span class="qquad"></span><a href="#wrglossary.613">35</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Xsux"><span class="optfmt">Xsux</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+
+</section><!-- end of section index8060928 -->
+
+<section id="index8126464"><!-- start of section index8126464 --><div class="tomain"><a href="#main">[top]</a></div>
+<h2><!-- start of section header -->Y<div class="labellink"><a href="#index8126464">[link]</a></div></h2><!-- end of section header -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.YE"><span class="optfmt">YE</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.yi"><span class="optfmt">yi</span> (<a id="wrglossary.1961"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.yiddish"><span class="optfmt">yiddish</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.yiddish"><span class="optfmt">yiddish</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Yiii"><span class="optfmt">Yiii</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.yo"><span class="optfmt">yo</span> (<a id="wrglossary.1962"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.yoruba"><span class="optfmt">yoruba</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.yoruba"><span class="optfmt">yoruba</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.YT"><span class="optfmt">YT</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+
+</section><!-- end of section index8126464 -->
+
+<section id="index8192000"><!-- start of section index8192000 --><div class="tomain"><a href="#main">[top]</a></div>
+<h2><!-- start of section header -->Z<div class="labellink"><a href="#index8192000">[link]</a></div></h2><!-- end of section header -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.ZA"><span class="optfmt">ZA</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.za"><span class="optfmt">za</span> (<a id="wrglossary.1963"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.zhuang"><span class="optfmt">zhuang</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.zh"><span class="optfmt">zh</span> (<a id="wrglossary.1964"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.chinese"><span class="optfmt">chinese</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.zhuang"><span class="optfmt">zhuang</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Zinh"><span class="optfmt">Zinh</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.ZM"><span class="optfmt">ZM</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Zmth"><span class="optfmt">Zmth</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Zsye"><span class="optfmt">Zsye</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Zsym"><span class="optfmt">Zsym</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><dfn id="glo:opt.zu"><span class="optfmt">zu</span> (<a id="wrglossary.1965"></a><a href="#glo:ISO">ISO</a> code)</dfn><span class="qquad"></span><div class="crossref"><span class="crossreftag">see</span> <a href="#glo:opt.zulu"><span class="optfmt">zulu</span></a></div><!-- end of crossref -->
+</div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.zulu"><span class="optfmt">zulu</span> (root language)</a><span class="qquad"></span><a href="#sec:intro">§1</a>; <a href="#tab:rootlangopts">Table 1.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.ZW"><span class="optfmt">ZW</span> (region)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:regionmappings">Table A.1</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Zxxx"><span class="optfmt">Zxxx</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Zyyy"><span class="optfmt">Zyyy</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<div class="nlctuserguideidx0"><a href="#glo:opt.Zzzz"><span class="optfmt">Zzzz</span> (script)</a><span class="qquad"></span><a href="#sec:regscriptmappings">§A</a>; <a href="#tab:scriptmappings">Table A.2</a></div><!-- end of nlctuserguideidx0 -->
+<p>
+
+</section><!-- end of section index8192000 -->
+<p><hr><p>
+<sup><a id="footnote.1"></a><a href="#fnback-footnote.1">1</a></sup>Thass Broad Norfolk, my bewties <code class="code">:-P</code></div><!-- end of main -->
+</body>
+</html>
diff --git a/macros/generic/tracklang/tracklang-manual.pdf b/macros/generic/tracklang/tracklang-manual.pdf
new file mode 100644
index 0000000000..0677e13b85
--- /dev/null
+++ b/macros/generic/tracklang/tracklang-manual.pdf
Binary files differ
diff --git a/macros/generic/tracklang/tracklang-manual.tex b/macros/generic/tracklang/tracklang-manual.tex
new file mode 100644
index 0000000000..a141ea906b
--- /dev/null
+++ b/macros/generic/tracklang/tracklang-manual.tex
@@ -0,0 +1,5641 @@
+% arara: lualatex
+% arara: bib2gls: { group: on, options: [ "--replace-quotes" ] }
+% arara: lualatex
+% arara: bib2gls: { group: on, options: [ "--replace-quotes" ] } if found ("log", "Glossary entry `sym.")
+% arara: lualatex
+% arara: lualatex if found ("log", "Rerun to")
+
+% This document requires glossaries v4.51, glossaries-extra v1.50
+% and nlctuserguide.sty v1.09. If they haven't already
+% been uploaded to CTAN, they will be in a few days.
+
+\documentclass[titlepage=false,oneside,
+ fontsize=12pt,captions=tableheading]{scrbook}
+
+\usepackage
+ [
+ floats,
+ %debug=showwrgloss
+ ]
+ {nlctuserguide}
+
+\usepackage{glossary-table}
+
+\glsxtrnewgls{opt.envvar.}{\envvar}
+\defsemanticcmd[style2]{\envvarfmt}{\texttt}{}
+\defsemanticcmd[style1]{\langtagfmt}{\texttt}{}
+
+\glsaddstoragekey{dialect}{}{\dialect}
+\glsaddstoragekey{isotag}{}{\isotag}
+\glsaddstoragekey{langtag}{}{\langtag}
+\glsxtrprovidestoragekey{tags}{}{}
+\glsxtrprovidestoragekey{region}{}{}
+\glsaddstoragekey{numeric}{}{\numerictag}
+\glsxtrprovidestoragekey{alpha3}{}{}
+
+\newcommand{\optisotag}[1]{\isotag{opt.#1}}
+\newcommand{\iso}[1]{\glslink{opt.#1}{\optfmt{\optisotag{#1}}}}
+\newcommand{\numericcode}[1]{\glslink{opt.#1}{\glsxtrusefield{opt.#1}{numeric}}}
+
+\newcommand{\tklscript}[1]{\glslink{TrackLangScriptCode}{\csfmt{TrackLangScript#1}}}
+\newcommand{\tklcaptions}[1]{\glslink{captionsdialect}{\csfmt{captions#1}}}
+\newcommand{\tkldate}[1]{\glslink{datedialect}{\csfmt{date#1}}}
+
+\newcommand{\ldf}[2]{%
+ \glslink{file.prefix-localeid.ldf}{\filefmt{#1\dhyphen #2.ldf}}}
+\newcommand{\localefile}[1]{%
+ \glslink{file.prefix-localeid.ldf}{\metafilefmt{#1\dhyphen}{localeid}{.ldf}}}
+\newcommand{\localemetafile}[1]{%
+ \glslink{file.prefix-localeid.ldf}{\metametafilefmt{}{#1}{\dhyphen}{localeid}{.ldf}}}
+\newcommand{\localemetametafile}[2]{%
+ \glslink{file.prefix-localeid.ldf}{\metametafilefmt{}{#1}{\dhyphen}{#2}{.ldf}}}
+
+\newcommand{\fnregion}{\fnsym*{2}}
+
+\renewcommand{\filetag}[1]{}
+
+\renewcommand{\nlctuserguidecustomentryaliases}{%
+ isolangregion=index,
+ rootlang=index,
+ noniso=index,
+ isocode=index,
+ region=index,
+ script=index
+}
+
+\nlctuserguidegls[selection=all]
+{
+ \def\genvvar#1#2{%
+ \glsbibwriteentry{option}{opt.envvar.#1}{%
+ \field{name}{\envvarfmt{#1}}\parent{idx.envvar}#2}}%
+ \gidxpl{envvar}{\field{text}{environment variable}}
+ % predefined ISO language-region tags
+ % \gisolangtag{xx}{XX}{dialect}{options}
+ \def\gisolangtag#1#2#3#4{%
+ \glsbibwriteentry{isolangregion}{opt.#1-#2}{%
+ \name{\optfmt{#1-#2}}%
+ \field{langtag}{#1}\field{region}{#2}%
+ \field{isotag}{#1-#2}%
+ \field{dialect}{#3}#4}%
+ }%
+ % \gisolangtagwithvar{xx}{XX}{variant}{dialect}{options}
+ \def\gisolangtagwithvar#1#2#3#4#5{%
+ \glsbibwriteentry{isolangregion}{opt.#1-#2-#3}{%
+ \name{\optfmt{#1-#2-#3}}%
+ \field{langtag}{#1}\field{region}{#2}%
+ \field{isotag}{#1-#2-#3}%
+ \field{dialect}{#4}#5}%
+ }%
+ % predefined root language labels
+ % \grootlangtag{language}{iso tag}{options}
+ \def\grootlangtag#1#2#3{%
+ \glsbibwriteentry{rootlang}{opt.#1}{%
+ \name{\optfmt{#1}}%
+ \field{dialect}{#1}%
+ \field{langtag}{#2}%
+ \field{isotag}{#2}#3}%
+ \glsbibwriteentry{isocode}{opt.#2}{\name{\optfmt{#2}}\field{alias}{opt.#1}}%
+ }%
+ % \grootlangsametag{language}{options}
+ \def\grootlangsametag#1#2{%
+ \glsbibwriteentry{rootlang}{opt.#1}{%
+ \name{\optfmt{#1}}%
+ \field{dialect}{#1}%
+ \field{langtag}{#1}%
+ \field{isotag}{#1}#2}%
+ }%
+ % \grootlangtagwithreg{language}{lang}{region}{options}
+ \def\grootlangtagwithreg#1#2#3#4{%
+ \glsbibwriteentry{rootlang}{opt.#1}{%
+ \field{name}{\optfmt{#1}\fnregion}
+ \field{text}{\optfmt{#1}}
+ \field{region}{#3}
+ \field{dialect}{#1}%
+ \field{langtag}{#2}
+ \field{isotag}{#2-#3}#4}%
+ \glsbibwriteentry{isocode}{opt.#2}{\name{\optfmt{#2}}\field{alias}{opt.#1}}%
+ }
+ % predefined non-iso dialects
+ % \gdialecttag{dialect}{tag}{options}
+ \def\gdialecttag#1#2#3{%
+ \glsbibwriteentry{noniso}{opt.#1}{%
+ \name{\optfmt{#1}}%
+ \field{dialect}{#1}%
+ \field{isotag}{\optisotag{#2}}%
+ \field{tags}{\optfmt{\optisotag{#2}}}#3}%
+ }%
+ % \gdialecttagsuppl{dialect}{tag}{suppl}{options}
+ \def\gdialecttagsuppl#1#2#3#4{%
+ \glsbibwriteentry{noniso}{opt.#1}{%
+ \name{\optfmt{#1}}%
+ \field{dialect}{#1}%
+ \field{isotag}{\optisotag{#2}-#3}%
+ \field{tags}{\optfmt{\optisotag{#2}-#3}}#4}%
+ }%
+ % \gdialecttagwithmap{dialect}{tag}{mapped}{options}
+ \def\gdialecttagwithmap#1#2#3#4{%
+ \glsbibwriteentry{noniso}{opt.#1}{%
+ \field{dialect}{#1}%
+ \field{isotag}{\optisotag{#2}}%
+ \field{tags}{\optfmt{\optisotag{#2}} / \optfmt{#3}}#4}%
+ }%
+ % \gdialecttagsupplwithmap{dialect}{tag}{suppl}{mapped}{options}
+ \def\gdialecttagsupplwithmap#1#2#3#4#5{%
+ \glsbibwriteentry{noniso}{opt.#1}{%
+ \name{\optfmt{#1}}%
+ \field{dialect}{#1}%
+ \field{isotag}{\optisotag{#2}-#3}%
+ \field{tags}{\optfmt{\optisotag{#2}-#3} / \opt{#4}}#5}%
+ }%
+ % \gdialecttagwithreg{dialect}{lang}{region}{options}
+ \def\gdialecttagwithreg#1#2#3#4{%
+ \glsbibwriteentry{noniso}{opt.#1}{%
+ \field{name}{\optfmt{#1}\fnregion }
+ \field{text}{\optfmt{#1}}
+ \field{region}{#3}
+ \field{dialect}{#1}%
+ \field{isotag}{\langtag{opt.#2}-#3}%
+ \field{tags}{\optfmt{\langtag{opt.#2}-#3}}#4
+ }%
+ }%
+ % \gdialecttagwithmapandreg{dialect}{tag}{region}{mapped}{options}
+ \def\gdialecttagwithmapandreg#1#2#3#4#5{%
+ \glsbibwriteentry{noniso}{opt.#1}{%
+ \field{name}{\optfmt{#1}\fnregion }
+ \field{text}{\optfmt{#1}}
+ \field{region}{#3}
+ \field{dialect}{#1}%
+ \field{isotag}{\optisotag{#2}-#3}%
+ \field{tags}{\optfmt{\langtag{opt.#2}-#3} / \opt{#4}}#5}%
+ }%
+ % \gregion{numeric}{2-alpha}{3-alpha}{options}
+ \def\gregion#1#2#3#4{%
+ \glsbibwriteentry{region}{opt.#2}{%
+ \field{name}{\optfmt{#2}}
+ \field{numeric}{#1}\field{alpha3}{#3}
+ #4}%
+ }%
+ % \gscript{alpha}{numeric}{name}{direction}{parent}{options}
+ \def\gscript#1#2#3#4#5#6{%
+ \glsbibwriteentry{script}{opt.#1}{%
+ \field{name}{\optfmt{#1}}
+ \field{numeric}{#2}\field{user2}{#4}\field{description}{#3}
+ #6}%
+ }%
+ % COMMANDS
+ % \AnyTrackedLanguages
+ \gcmd{Any\-Track\-ed\-Lan\-guages}
+ {
+ \providedby{\file{tracklang.tex} v1.0+}
+ \syntax{\margm{true}\margm{false}}
+ \desc{expands to \meta{true} if there are any tracked languages,
+ otherwise expands to \meta{false}}
+ }
+ % \IfTrackedLanguage
+ \gcmd{If\-Track\-ed\-Lan\-guage}
+ {
+ \providedby{\file{tracklang.tex} v1.0+}
+ \syntax{\margm{language-label}\margm{true}\margm{false}}
+ \desc{does \meta{true} if the language identified by
+ \meta{language-label} has been tracked,
+ otherwise does \meta{false}}
+ }
+ % \IfTrackedDialect
+ \gcmd{If\-Track\-ed\-Di\-alect}
+ {
+ \providedby{\file{tracklang.tex} v1.0+}
+ \syntax{\margm{dialect-label}\margm{true}\margm{false}}
+ \desc{does \meta{true} if the dialect identified by
+ \meta{dialect-label} has been tracked,
+ otherwise does \meta{false}}
+ }
+ % \IfTrackedLanguageFileExists
+ \gcmd{If\-Track\-ed\-Lan\-guage\-File\-Exists}
+ {
+ \providedby{\file{tracklang.tex} v1.0+}
+ \syntax{\margm{dialect}\margm{prefix}\margm{suffix}\margm{true
+code}\margm{false code}}
+ \desc{does \code{\gls{SetCurrentTrackedDialect}\margm{dialect}}
+ and if the dialect is recognised, then determines if the file
+ \filefmt{\meta{prefix}\meta{tag}\meta{suffix}} exists. If it does,
+ \gls{CurrentTrackedTag} is set to \meta{tag} and \meta{true} is
+ done, otherwise \meta{false} is done}
+ }
+ % \CurrentTrackedTag
+ \gcmd{Current\-Track\-ed\-Tag}
+ {
+ \providedby{\file{tracklang.tex} v1.0+}
+ \desc{expands to the current tracked tag}
+ }
+ % \ifTrackLangShowWarnings
+ \gcond{if\-Track\-Lang\-Show\-Warnings}
+ {
+ \initval{\cmd{iftrue}}
+ \providedby{\file{tracklang.tex} v1.3+}
+ \desc{conditional that indicates whether or not to show warnings}
+ }
+ % \TrackLangShowWarningsfalse
+ \gcmd{Track\-Lang\-Show\-Warnings\-false}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \desc{sets \gls{ifTrackLangShowWarnings} to false}
+ }
+ % \TrackLangShowWarningstrue
+ \gcmd{Track\-Lang\-Show\-Warnings\-true}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \desc{sets \gls{ifTrackLangShowWarnings} to true}
+ }
+ % \ifTrackLangShowInfo
+ \gcond{if\-Track\-Lang\-Show\-Info}
+ {
+ \initval{\cmd{iftrue}}
+ \providedby{\file{tracklang.tex} v1.3+}
+ \desc{conditional that indicates whether or not to show
+information messages}
+ }
+ % \ifTrackLangShowVerbose
+ \gcond{if\-Track\-Lang\-Show\-Verbose}
+ {
+ \initval{\cmd{iffalse}}
+ \providedby{\file{tracklang.tex} v1.4+}
+ \desc{conditional that indicates whether or not to show
+verbose messages}
+ }
+ % \TrackLangQueryEnv
+ \gcmd{Track\-Lang\-Query\-Env}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \desc{attempts to obtain locale information from the
+ \envvar{LCALL} environment variable via the \idx{shellescape}
+ or, with \LuaTeX, \gls{directlua}}
+ }
+ % \TrackLangQueryOtherEnv
+ \gcmd{Track\-Lang\-Query\-Other\-Env}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \syntax{\margm{env-name}}
+ \desc{attempts to obtain locale information from the
+ \envvar{LCALL} environment variable and then by the
+ \meta{env-name} environment variable via the \idx{shellescape}
+ or, with \LuaTeX, \gls{directlua}}
+ }
+ % \TrackLangParseFromEnv
+ \gcmd{Track\-Lang\-Parse\-From\-Env}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \desc{attempts to obtain locale information from the
+ expansion of \gls{TrackLangEnv}}
+ }
+ % \TrackLangEnv
+ \gcmd{Track\-Lang\-Env}
+ {
+ \note{user defined}
+ \desc{may be defined using the same format as \envvar{LCALL}
+ before using \gls{TrackLangParseFromEnv} to skip the environment
+ variable query}
+ }
+ % \TrackLangEnvLang
+ \gcmd{Track\-Lang\-Env\-Lang}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \desc{set by \gls{TrackLangParseFromEnv} to the language code}
+ }
+ % \TrackLangEnvTerritory
+ \gcmd{Track\-Lang\-Env\-Territory}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \desc{set by \gls{TrackLangParseFromEnv} to the \idx{territory}}
+ }
+ % \TrackLangEnvCodeSet
+ \gcmd{Track\-Lang\-Env\-Code\-Set}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \desc{set by \gls{TrackLangParseFromEnv} to the \idx{code-set}}
+ }
+ % \TrackLangEnvModifier
+ \gcmd{Track\-Lang\-Env\-Modifier}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \desc{set by \gls{TrackLangParseFromEnv} to the \idx{modifier}}
+ }
+ % \ForEachTrackedLanguage
+ \gcmd{For\-Each\-Track\-ed\-Lan\-guage}
+ {
+ \providedby{\file{tracklang.tex} v1.0+}
+ \syntax{\margm{cs}\margm{body}}
+ \desc{iterates through the list of tracked languages. On each
+ iteration \meta{cs} is set to the language tag and \meta{body} is
+ performed}
+ }
+ % \ForEachTrackedDialect
+ \gcmd{For\-Each\-Track\-ed\-Di\-alect}
+ {
+ \providedby{\file{tracklang.tex} v1.0+}
+ \syntax{\margm{cs}\margm{body}}
+ \desc{iterates through the list of tracked dialects. On each
+ iteration \meta{cs} is set to the dialect tag and \meta{body} is
+ performed}
+ }
+ % \TrackLangNewLanguage
+ \gcmd{Track\-Lang\-New\-Lan\-guage}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \syntax{\margm{language label}\margm{639-1 code}\margm{639-2 (T)}%
+ \margm{639-2 (B)}\margm{639-3}\margm{3166-1}\margm{default script}}
+ \desc{identifies a new language that may be tracked. Apart from
+ \meta{language label}, the other arguments may be empty if
+ the information is unavailable}
+ }
+ % \TrackLangIfKnownLang
+ \gcmd{Track\-Lang\-If\-Known\-Lang}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \syntax{\margm{language}\margm{true}\margm{false}}
+ \desc{does \meta{true} if \meta{language} is known
+ (but not necessarily tracked), otherwise does \meta{false}}
+ }
+ % \TrackLangIfKnownIsoTwoLetterLang
+ \gcmd{Track\-Lang\-If\-Known\-Iso\-Two\-Letter\-Lang}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \syntax{\margm{language}\margm{true}\margm{false}}
+ \desc{does \meta{true} if \meta{language} has an \idxn{639-1} code
+ (but is not necessarily tracked), otherwise does \meta{false}}
+ }
+ % \TrackLangGetKnownIsoTwoLetterLang
+ \gcmd{Track\-Lang\-Get\-Known\-Iso\-Two\-Letter\-Lang}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \syntax{\margm{language}}
+ \desc{expands to the \idxn{639-1} language code associated with
+ \meta{language}}
+ }
+ % \TrackLangIfKnownIsoThreeLetterLang
+ \gcmd{Track\-Lang\-If\-Known\-Iso\-Three\-Letter\-Lang}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \syntax{\margm{language}\margm{true}\margm{false}}
+ \desc{does \meta{true} if \meta{language} has an \idxn{639-2} code
+ (but is not necessarily tracked), otherwise does \meta{false}}
+ }
+ % \TrackLangGetKnownIsoThreeLetterLang
+ \gcmd{Track\-Lang\-Get\-Known\-Iso\-Three\-Letter\-Lang}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \syntax{\margm{language}}
+ \desc{expands to the \idxn{639-2} language code associated with
+ \meta{language}}
+ }
+ % \TrackLangIfKnownIsoThreeLetterLangB
+ \gcmd{Track\-Lang\-If\-Known\-Iso\-Three\-Letter\-LangB}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \syntax{\margm{language}\margm{true}\margm{false}}
+ \desc{does \meta{true} if \meta{language} has an \idxn{639-2B} code
+ (but is not necessarily tracked), otherwise does \meta{false}}
+ }
+ % \TrackLangGetKnownIsoThreeLetterLangB
+ \gcmd{Track\-Lang\-Get\-Known\-Iso\-Three\-Letter\-LangB}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \syntax{\margm{language}}
+ \desc{expands to the \idxn{639-2B} language code associated with
+ \meta{language}}
+ }
+ % \IfTrackedLanguageHasIsoCode
+ \gcmd{If\-Track\-ed\-Lan\-guage\-Has\-Iso\-Code}
+ {
+ \providedby{\file{tracklang.tex} v1.0+}
+ \syntax{\margm{code type}\margm{label}\margm{true}\margm{false}}
+ \desc{does \meta{true} if the given language or dialect has a
+ corresponding \idx{ISO} code of the given type, otherwise does
+ \meta{false}}
+ }
+ % \IfTrackedIsoCode
+ \gcmd{If\-Track\-ed\-Iso\-Code}
+ {
+ \providedby{\file{tracklang.tex} v1.0+}
+ \syntax{\margm{code type}\margm{code}\margm{true}\margm{false}}
+ \desc{does \meta{true} if the given \idx{ISO} code has been defined
+ otherwise does \meta{false}}
+ }
+ % \TrackLangIfKnownLangFromIso
+ \gcmd{Track\-Lang\-If\-Known\-Lang\-From\-Iso}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \syntax{\margm{ISO code}\margm{true}\margm{false}}
+ \desc{does \meta{true} if the given language code (\idx{639-1} or
+ \idx{639-2} or \idx{639-3}) is
+ recognised (but not necessarily tracked), otherwise does \meta{false}}
+ }
+ % \TrackLangGetKnownLangFromIso
+ \gcmd{Track\-Lang\-Get\-Known\-Lang\-From\-Iso}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \syntax{\margm{ISO code}}
+ \desc{expands to the root language label from the
+ given \idx{ISO} code (\idx{639-1} or \idx{639-2} or \idx{639-3})}
+ }
+ % \TrackLangIfHasKnownCountry
+ \gcmd{Track\-Lang\-If\-Has\-Known\-Coun\-try}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \syntax{\margm{language}\margm{true}\margm{false}}
+ \desc{does \meta{true} if the given language has an \idxn{3166-1}
+ country code (but is not necessarily tracked), otherwise does \meta{false}}
+ }
+ % \TrackLangGetKnownCountry
+ \gcmd{Track\-Lang\-Get\-Known\-Coun\-try}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \syntax{\margm{language}}
+ \desc{expands to the \idxn{3166-1} country code for the given language}
+ }
+ % \TrackLangGetDefaultScript
+ \gcmd{Track\-Lang\-Get\-Default\-Script}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \syntax{\margm{language}}
+ \desc{expands to the default script for the given language}
+ }
+ % \TrackLangIfHasDefaultScript
+ \gcmd{Track\-Lang\-If\-Has\-Default\-Script}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \syntax{\margm{language}\margm{true}\margm{false}}
+ \desc{does \meta{true} if the given language has a default
+ script (but is not necessarily tracked), otherwise does \meta{false}}
+ }
+ % \AddTrackedDialect
+ \gcmd{Add\-Track\-ed\-Di\-alect}
+ {
+ \providedby{\file{tracklang.tex} v1.0+}
+ \syntax{\margm{dialect label}\margm{root language label}}
+ \desc{tracks a dialect. This command defines
+\gls{TrackLangLastTrackedDialect} to provide a convenient way to
+reference the last dialect to be tracked}
+ }
+ % \AddTrackedLanguage
+ \gcmd{Add\-Track\-ed\-Lan\-guage}
+ {
+ \providedby{\file{tracklang.tex} v1.0+}
+ \syntax{\margm{root language label}}
+ \desc{shortcut for \code{\gls{AddTrackedDialect}\margm{root language
+label}\margm{root language label}}}
+ }
+ % \AddTrackedIsoLanguage
+ \gcmd{Add\-Track\-ed\-Iso\-Lan\-guage}
+ {
+ \providedby{\file{tracklang.tex} v1.0+}
+ \syntax{\margm{code type}\margm{code}\margm{language}}
+ \desc{adds a mapping between the given \idx{ISO} code and language name}
+ }
+ % \TrackedLanguageFromIsoCode
+ \gcmd{Tracked\-Lan\-guage\-From\-Iso\-Code}
+ {
+ \providedby{\file{tracklang.tex} v1.0+}
+ \syntax{\margm{code type}\margm{code}}
+ \desc{expands to a comma-separated list of language or
+ dialect labels associated with the given code}
+ }
+ % \TrackedIsoCodeFromLanguage
+ \gcmd{Track\-ed\-Iso\-Code\-From\-Lan\-guage}
+ {
+ \providedby{\file{tracklang.tex} v1.0+}
+ \syntax{\margm{code type}\margm{label}}
+ \desc{expands to the code associated with the given language or
+dialect identified by \meta{label}}
+ }
+ % \TrackedLanguageFromDialect
+ \gcmd{Track\-ed\-Lan\-guage\-From\-Di\-alect}
+ {
+ \providedby{\file{tracklang.tex} v1.0+}
+ \syntax{\margm{dialect}}
+ \desc{expands to the language from the given dialect}
+ }
+ % \TrackedDialectsFromLanguage
+ \gcmd{Tracked\-Di\-alects\-From\-Lan\-guage}
+ {
+ \providedby{\file{tracklang.tex} v1.0+}
+ \syntax{\margm{root language label}}
+ \desc{expands to a comma-separated list of the tracked dialects with the given language}
+ }
+ % \TwoLetterIsoCountryCode
+ \gcmd{Two\-Letter\-Iso\-Coun\-try\-Code}
+ {
+ \providedby{\file{tracklang.tex} v1.0+}
+ \desc{expands to \idx{3166-1} (should not be redefined)}
+ }
+ % \TwoLetterIsoLanguageCode
+ \gcmd{Two\-Letter\-Iso\-Lan\-guage\-Code}
+ {
+ \providedby{\file{tracklang.tex} v1.0+}
+ \desc{expands to \idx{639-1} (should not be redefined)}
+ }
+ % \ThreeLetterIsoLanguageCode
+ \gcmd{Three\-Letter\-Iso\-Lan\-guage\-Code}
+ {
+ \providedby{\file{tracklang.tex} v1.0+}
+ \desc{expands to \idx{639-2} (should not be redefined)}
+ }
+ % \ThreeLetterExtIsoLanguageCode
+ \gcmd{Three\-Letter\-Ext\-Iso\-Lan\-guage\-Code}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \desc{expands to \idx{639-3} (should not be redefined)}
+ }
+ % \SetTrackedDialectModifier
+ \gcmd{Set\-Track\-ed\-Di\-alect\-Mod\-i\-fier}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \syntax{\margm{dialect}\margm{value}}
+ \desc{sets the modifier for the given \meta{dialect} to
+\meta{value}}
+ }
+ % \GetTrackedDialectModifier
+ \gcmd{Get\-Track\-ed\-Di\-alect\-Mod\-i\-fier}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \syntax{\margm{dialect}}
+ \desc{expands to the modifier for the given dialect}
+ }
+ % \IfHasTrackedDialectModifier
+ \gcmd{If\-Has\-Track\-ed\-Di\-alect\-Mod\-i\-fier}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \syntax{\margm{dialect}\margm{true}\margm{false}}
+ \desc{expands to \meta{true} if there's a modifier for the given
+dialect, otherwise expands to \meta{false}}
+ }
+ % \SetTrackedDialectScript
+ \gcmd{Set\-Track\-ed\-Di\-alect\-Script}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \syntax{\margm{dialect}\margm{value}}
+ \desc{sets the script for \meta{dialect} to \meta{value}}
+ }
+ % \GetTrackedDialectScript
+ \gcmd{Get\-Track\-ed\-Di\-alect\-Script}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \syntax{\margm{dialect}}
+ \desc{expands to the script for \meta{dialect}}
+ }
+ % \IfHasTrackedDialectScript
+ \gcmd{If\-Has\-Track\-ed\-Di\-alect\-Script}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \syntax{\margm{dialect}\margm{true}\margm{false}}
+ \desc{expands to \meta{true} if there's a script for
+ \meta{dialect}, otherwise expands to \meta{false}}
+ }
+ % \IfTrackedDialectIsScriptCs
+ \gcmd{If\-Track\-ed\-Di\-alect\-Is\-Script\-Cs}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \syntax{\margm{dialect}\margm{cs}\margm{true}\margm{false}}
+ \desc{if the given tracked dialect has an associated script and that
+ script code matches the replacement text for the control sequence
+ \meta{cs} then do \meta{true} otherwise to \meta{false}. If the
+ tracked dialect doesn't have an associated script then the default
+ script for the root language is tested}
+ }
+ % \SetTrackedDialectVariant
+ \gcmd{Set\-Track\-ed\-Di\-alect\-Vari\-ant}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \syntax{\margm{dialect}\margm{value}}
+ \desc{sets the modifier for \meta{dialect} to \meta{value}}
+ }
+ % \GetTrackedDialectVariant
+ \gcmd{Get\-Track\-ed\-Di\-alect\-Vari\-ant}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \syntax{\margm{dialect}}
+ \desc{expands to the modifier for \meta{dialect}}
+ }
+ % \IfHasTrackedDialectVariant
+ \gcmd{If\-Has\-Track\-ed\-Di\-alect\-Vari\-ant}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \syntax{\margm{dialect}\margm{true}\margm{false}}
+ \desc{expands to \meta{true} if there's a modifier for
+ \meta{dialect}, otherwise expands to \meta{false}}
+ }
+ % \SetTrackedDialectSubLang
+ \gcmd{Set\-Track\-ed\-Di\-alect\-Sub\-Lang}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \syntax{\margm{dialect}\margm{value}}
+ \desc{sets the sub-language for \meta{dialect} to \meta{value}}
+ }
+ % \GetTrackedDialectSubLang
+ \gcmd{Get\-Track\-ed\-Di\-alect\-Sub\-Lang}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \syntax{\margm{dialect}}
+ \desc{expands to the sub-language for \meta{dialect}}
+ }
+ % \IfHasTrackedDialectSubLang
+ \gcmd{If\-Has\-Track\-ed\-Di\-alect\-Sub\-Lang}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \syntax{\margm{dialect}\margm{true}\margm{false}}
+ \desc{expands to \meta{true} if there's a sub-language for
+ \meta{dialect}, otherwise expands to \meta{false}}
+ }
+ % \SetTrackedDialectAdditional
+ \gcmd{Set\-Track\-ed\-Di\-alect\-Ad\-di\-tional}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \syntax{\margm{dialect}\margm{value}}
+ \desc{sets the extra information for \meta{dialect} to \meta{value}}
+ }
+ % \GetTrackedDialectAdditional
+ \gcmd{Get\-Track\-ed\-Di\-alect\-Ad\-di\-tional}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \syntax{\margm{dialect}}
+ \desc{expands to the extra information for \meta{dialect}}
+ }
+ % \IfHasTrackedDialectAdditional
+ \gcmd{If\-Has\-Track\-ed\-Di\-alect\-Ad\-di\-tional}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \syntax{\margm{dialect}\margm{true}\margm{false}}
+ \desc{expands to \meta{true} if there's extra information for
+ \meta{dialect}, otherwise expands to \meta{false}}
+ }
+ % \GetTrackedLanguageTag
+ \gcmd{Get\-Track\-ed\-Lan\-guage\-Tag}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \syntax{\margm{dialect}}
+ \desc{gets the language tag for \meta{dialect}}
+ }
+ % \SetCurrentTrackedDialect
+ \gcmd{Set\-Current\-Track\-ed\-Di\-alect}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \syntax{\margm{dialect}}
+ \desc{sets the current tracked dialect}
+ }
+ % \CurrentTrackedDialect
+ \gcmd{Current\-Track\-ed\-Dialect}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \desc{defined by \gls{SetCurrentTrackedDialect} to the
+ dialect label, which may be the supplied \meta{dialect} label
+ or the mapped label or, if \meta{dialect} is a root language label,
+ the last tracked dialect for the given root language}
+ }
+ % \CurrentTrackedLanguage
+ \gcmd{Current\-Track\-ed\-Language}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \desc{defined by \gls{SetCurrentTrackedDialect} to the
+ associated root language label}
+ }
+ % \CurrentTrackedDialectModifier
+ \gcmd{Current\-Track\-ed\-Di\-alect\-Modifier}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \desc{defined by \gls{SetCurrentTrackedDialect} to the
+ associated modifier (may be empty)}
+ }
+ % \CurrentTrackedDialectVariant
+ \gcmd{Current\-Track\-ed\-Di\-alect\-Variant}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \desc{defined by \gls{SetCurrentTrackedDialect} to the
+ associated variant (may be empty)}
+ }
+ % \CurrentTrackedDialectScript
+ \gcmd{Current\-Track\-ed\-Di\-alect\-Script}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \desc{defined by \gls{SetCurrentTrackedDialect} to the
+ script associated with the dialect, or to the default script for the language}
+ }
+ % \CurrentTrackedDialectSubLang
+ \gcmd{Current\-Track\-ed\-Di\-alect\-Sub\-Lang}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \desc{defined by \gls{SetCurrentTrackedDialect} to the sub
+ language associated with the dialect (may be empty)}
+ }
+ % \CurrentTrackedDialectAdditional
+ \gcmd{Current\-Track\-ed\-Di\-alect\-Ad\-di\-tional}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \desc{defined by \gls{SetCurrentTrackedDialect} to the
+ additional part associated with the dialect (may be empty)}
+ }
+ % \CurrentTrackedLanguageTag
+ \gcmd{Current\-Track\-ed\-Lan\-guage\-Tag}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \desc{defined by \gls{SetCurrentTrackedDialect} to the language
+ tag that identifies the dialect or \iso{undetermined} if no match}
+ }
+ % \CurrentTrackedRegion
+ \gcmd{Current\-Track\-ed\-Region}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \desc{defined by \gls{SetCurrentTrackedDialect} to the
+ \idxn{3166-1} region code associated with the dialect (may be empty)}
+ }
+ % \CurrentTrackedIsoCode
+ \gcmd{Current\-Track\-ed\-Iso\-Code}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \desc{defined by \gls{SetCurrentTrackedDialect} to the
+ \idxn{639-1} or \idx{639-2} or \idx{639-3} language code (may be empty)}
+ }
+ % \AddTrackedLanguageIsoCodes
+ \gcmd{Add\-Track\-ed\-Lan\-guage\-Iso\-Codes}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \syntax{\margm{root language label}}
+ \desc{adds the \idxn{639-1}, \idx{639-2} and \idx{639-3} codes, which must have
+ previously been declared using \gls{TrackLangNewLanguage}}
+ }
+ % \AddTrackedCountryIsoCode
+ \gcmd{Add\-Track\-ed\-Coun\-try\-Iso\-Code}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \syntax{\margm{language}}
+ \desc{adds the \idxn{3166-1} code}
+ }
+ % \GetTrackedDialectFromLanguageTag
+ \gcmd{Get\-Track\-ed\-Di\-alect\-From\-Lan\-guage\-Tag}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \syntax{\margm{tag}\margm{cs}}
+ \desc{finds the tracked dialect that matches the given language
+ tag and stores the dialect label in \meta{cs}. If no match found,
+ \meta{cs} will be empty}
+ }
+ % \TrackedDialectClosestSubMatch
+ \gcmd{Track\-ed\-Dialect\-Closest\-Sub\-Match}
+ {
+ \providedby{\file{tracklang.tex} v1.3.6+}
+ \desc{defined by \gls{GetTrackedDialectFromLanguageTag} to the
+ closest match}
+ }
+ % \TrackPredefinedDialect
+ \gcmd{Track\-Pre\-de\-fined\-Di\-alect}
+ {
+ \providedby{\file{tracklang.tex} v1.0+}
+ \syntax{\margm{dialect label}}
+ \desc{tracks a predefined language or dialect}
+ }
+ % \TrackLangIfAlphaNumericChar
+ \gcmd{Track\-Lang\-If\-Alpha\-Numeric\-Char}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \syntax{\margm{tag}\margm{true}\margm{false}}
+ \desc{does \meta{true} if the argument is a single alphanumeric character
+ otherwise does \meta{false}}
+ }
+ % \TrackLangIfLanguageTag
+ \gcmd{Track\-Lang\-If\-Lan\-guage\-Tag}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \syntax{\margm{tag}\margm{true}\margm{false}}
+ \desc{does \meta{true} if the argument is a language tag
+ otherwise does \meta{false}}
+ }
+ % \TrackLangIfRegionTag
+ \gcmd{Track\-Lang\-If\-Region\-Tag}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \syntax{\margm{tag}\margm{true}\margm{false}}
+ \desc{does \meta{true} if the argument is a region tag
+ otherwise does \meta{false}}
+ }
+ % \TrackLangIfScriptTag
+ \gcmd{Track\-Lang\-If\-Script\-Tag}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \syntax{\margm{tag}\margm{true}\margm{false}}
+ \desc{does \meta{true} if the argument is a script tag
+ otherwise does \meta{false}}
+ }
+ % \TrackLangIfVariantTag
+ \gcmd{Track\-Lang\-If\-Vari\-ant\-Tag}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \syntax{\margm{tag}\margm{true}\margm{false}}
+ \desc{does \meta{true} if the argument is a variant tag
+ otherwise does \meta{false}}
+ }
+ % \TrackLanguageTag
+ \gcmd{Track\-Lan\-guage\-Tag}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \syntax{\margm{tag}}
+ \desc{parse \meta{tag}, which should be a regular, well-formed
+ RFC 5646 language tag (not an irregular grandfather tag) and track the dialect}
+ }
+ % \TrackIfKnownLanguage
+ \gcmd{Track\-If\-Known\-Lan\-guage}
+ {
+ \providedby{\file{tracklang.tex} v1.3.9+}
+ \syntax{\margm{tag}\margm{success code}\margm{fail code}}
+ \desc{as \gls{TrackLanguageTag} but does \meta{fail code}
+ if the tag doesn't contain a valid language code. If successful, does
+ \meta{success code} after tracking the language}
+ }
+ % \TrackLangAddExtraRegionFile
+ \gcmd{Track\-Lang\-Add\-Extra\-Region\-File}
+ {
+ \providedby{\file{tracklang.tex} v1.4+}
+ \syntax{\margm{file}}
+ \desc{adds \meta{file} to the list of extra region code files that should
+ be input by \file{tracklang-region-codes.tex}}
+ }
+ % \TrackLangAddExtraScriptFile
+ \gcmd{Track\-Lang\-Add\-Extra\-Script\-File}
+ {
+ \providedby{\file{tracklang.tex} v1.4+}
+ \syntax{\margm{file}}
+ \desc{adds \meta{file} to the list of files that should
+ be input by \file{tracklang-scripts.tex}}
+ }
+ % \TrackLangFromEnv
+ \gcmd{Track\-Lang\-From\-Env}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \desc{queries environment variable if \gls{TrackLangEnv} not
+ already set, parses \gls{TrackLangEnv} if it has been set, and
+ adds the dialect if it's recognised}
+ }
+ % \TrackLocale
+ \gcmd{Track\-Locale}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \syntax{\margm{locale}}
+ \desc{tracks the dialect identified by the given \meta{locale}, which
+ may either be a predefined language\slash dialect or in the same format as
+ \gls{TrackLangEnv}}
+ }
+ % \TrackLangProvidePredefinedLanguage
+ \gcmd{Track\-Lang\-Provide\-Pre\-de\-fined\-Lan\-guage}
+ {
+ \providedby{\file{tracklang.tex} v1.4+}
+ \syntax{\margm{language label}}
+ \desc{sets up a language label for use with \gls{TrackPredefinedDialect}}
+ }
+ % \TrackLangDeclareLanguageOption
+ \gcmd{Track\-Lang\-Declare\-Lan\-guage\-Op\-tion}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \syntax{\margm{language name}\margm{639-1 code}\margm{639-2 (T)}\margm{639-2
+(B)}\margm{639-3}\margm{3166-1}\margm{default script}}
+ \desc{defines a new root language that's declared as an option}
+ }
+ % \TrackLangProvidePredefinedDialect
+ \gcmd{Track\-Lang\-Provide\-Pre\-de\-fined\-Di\-alect}
+ {
+ \providedby{\file{tracklang.tex} v1.4+}
+ \syntax{\margm{dialect label}\margm{root
+language label}\margm{3166-1 code}\margm{modifier}\margm{variant}\margm{map}\margm{script}}
+ \desc{defines a predefined dialect label that can be used
+by \gls{TrackPredefinedDialect}}
+ }
+ % \TrackLangDeclareDialectOption
+ \gcmd{Track\-Lang\-Declare\-Di\-alect\-Op\-tion}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \syntax{\margm{dialect}\margm{root
+language}\margm{3166-1
+code}\margm{modifier}\margm{variant}\margm{map}\margm{script}}
+ \desc{defines a predefined dialect label that can be used
+by \gls{TrackPredefinedDialect}}
+ }
+ % \TrackLangProvidesResource
+ \gcmd{Track\-Lang\-Provides\-Resource}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \syntax{\margm{tag}\margm{version info}}
+ \desc{analogous to \gls{ProvidesFile}}
+ }
+ % \TrackLangAddToHook
+ \gcmd{Track\-Lang\-Add\-To\-Hook}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \syntax{\margm{code}\margm{type}}
+ \desc{for use within resource files, this can be used to add
+\meta{code} to the appropriate hook}
+ }
+ % \TrackLangAddToCaptions
+ \gcmd{Track\-Lang\-Add\-To\-Captions}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \syntax{\margm{code}}
+ \desc{a shortcut that just does
+ \code{\gls{TrackLangAddToHook}\margm{code}\marg{captions}}}
+ }
+ % \TrackLangRedefHook
+ \gcmd{Track\-Lang\-Re\-def\-Hook}
+ {
+ \providedby{\file{tracklang.tex} v1.4+}
+ \syntax{\margm{code}\margm{type}}
+ \desc{similar to \gls{TrackLangAddToHook} but redefines the hook
+ rather than appending to it}
+ }
+ % \TrackLangRequireResource
+ \gcmd{Track\-Lang\-Require\-Resource}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \syntax{\margm{tag}}
+ \desc{loads the appropriate \ext{ldf} file if it hasn't already
+been loaded}
+ }
+ % \TrackLangRequireResourceOrDo
+ \gcmd{Track\-Lang\-Require\-Resource\-Or\-Do}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \syntax{\margm{tag}\margm{code1}\margm{code2}}
+ \desc{as \gls{TrackLangRequireResource} but does \meta{code1}
+ if the file is now loaded or \meta{code2}
+ if the file has already been loaded}
+ }
+ % \TrackLangRequestResource
+ \gcmd{Track\-Lang\-Request\-Resource}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \syntax{\margm{tag}\margm{not found code}}
+ \desc{as \gls{TrackLangRequireResource} but does \meta{not found code}
+if the file doesn't exist}
+ }
+ % \TrackLangRequireDialect
+ \gcmd{Track\-Lang\-Require\-Di\-alect}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \syntax{\oargm{load code}\margm{pkgname}\margm{dialect}}
+ \desc{loads the dialect for the given package}
+ }
+ % \TrackLangRequireDialectPrefix
+ \gcmd{Track\-Lang\-Require\-Di\-alect\-Prefix}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \desc{defined by \gls{TrackLangRequireDialect}}
+ }
+ % \SetTrackedDialectLabelMap
+ \gcmd{Set\-Track\-ed\-Di\-alect\-Label\-Map}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \syntax{\margm{tracklang-label}\margm{hook-label}}
+ \desc{defines a mapping between a \sty{tracklang} dialect label
+ and the corresponding dialect label used by a language hook, such as
+ \gls{captionsdialect}}
+ }
+ % \TrackLangLastTrackedDialect
+ \gcmd{Track\-Lang\-Last\-Track\-ed\-Dialect}
+ {
+ \providedby{\file{tracklang.tex} v1.3+}
+ \desc{expands to the label of the last tracked dialect}
+ }
+ % COMMANDS: INTERNAL
+ % \@tracklang@declareoption
+ \gcmd{@track\-lang\-@\-declare\-option}
+ {
+ \providedby{\sty{tracklang} v1.1+}
+ \syntax{\margm{dialect}}
+ \desc{provided by \file{tracklang.sty} to declare \meta{dialect}
+ as a package option that tracks \meta{dialect}. Provided by
+ \file{tracklang.tex}, if not already defined, to ignore its argument}
+ }
+ % \@tracklang@for
+ \gcmd{@track\-lang\-@\-for}
+ {
+ \providedby{\file{tracklang.tex} v1.0+}
+ \syntax{\meta{cs}:=\meta{list}\cmd{do}\margm{body}}
+ \desc{as \LaTeX's \gls{@for}}
+ }
+ % \@tracklang@prelangpkgcheck@hook
+ \gcmd{@track\-lang\-@\-pre\-lang\-pkg\-check\-@\-hook}
+ {
+ \desc{if defined before \file{tracklang.sty} v1.3.8+ is loaded, this
+ command will be done after package options have been processed but
+ before the check for language packages, such as \sty{babel} and
+ \sty{polyglossia}}
+ }
+ % COMMANDS: tracklang-region-codes.tex
+ % \TrackLangAlphaIIToNumericRegion
+ \gcmd{Track\-Lang\-Alpha\-II\-To\-Numeric\-Region}
+ {
+ \providedby{\file{tracklang-region-codes.tex} v1.3+}
+ \syntax{\margm{alpha-2 code}}
+ \desc{expands to the numeric code corresponding to the given
+alpha-2 code}
+ }
+ % \TrackLangNumericToAlphaIIRegion
+ \gcmd{Track\-Lang\-Numeric\-To\-Alpha\-II\-Region}
+ {
+ \providedby{\file{tracklang-region-codes.tex} v1.3+}
+ \syntax{\margm{numeric code}}
+ \desc{expands to the alpha-2 code corresponding to the given
+numeric code}
+ }
+ % \TrackLangIfKnownAlphaIIRegion
+ \gcmd{Track\-Lang\-If\-Known\-Alpha\-II\-Region}
+ {
+ \providedby{\file{tracklang-region-codes.tex} v1.3+}
+ \syntax{\margm{alpha-2 code}\margm{true}\margm{false}}
+ \desc{expands to \meta{true} if there's a known mapping for the
+given alpha-2 \idx{region} code, otherwise expands to \meta{false}}
+ }
+ % \TrackLangIfKnownNumericRegion
+ \gcmd{Track\-Lang\-If\-Known\-Numeric\-Region}
+ {
+ \providedby{\file{tracklang-region-codes.tex} v1.3+}
+ \syntax{\margm{numeric code}\margm{true}\margm{false}}
+ \desc{expands to \meta{true} if there's a known mapping for the
+given numeric \idx{region} code, otherwise expands to \meta{false}}
+ }
+ % \TrackLangAlphaIIIToNumericRegion
+ \gcmd{Track\-Lang\-Alpha\-III\-To\-Numeric\-Region}
+ {
+ \providedby{\file{tracklang-region-codes.tex} v1.3+}
+ \syntax{\margm{alpha-3 code}}
+ \desc{expands to the numeric code corresponding to the given
+alpha-3 code}
+ }
+ % \TrackLangNumericToAlphaIIIRegion
+ \gcmd{Track\-Lang\-Numeric\-To\-Alpha\-III\-Region}
+ {
+ \providedby{\file{tracklang-region-codes.tex} v1.3+}
+ \syntax{\margm{numeric code}}
+ \desc{expands to the alpha-3 code corresponding to the given
+numeric code}
+ }
+ % \TrackLangIfKnownAlphaIIIRegion
+ \gcmd{Track\-Lang\-If\-Known\-Alpha\-III\-Region}
+ {
+ \providedby{\file{tracklang-region-codes.tex} v1.3+}
+ \syntax{\margm{alpha-3 code}\margm{true}\margm{false}}
+ \desc{expands to \meta{true} if there's a known mapping for the
+given \meta{alpha-3 code}, otherwise expands to \meta{false}}
+ }
+ % \TrackLangRegionMap
+ \gcmd{Track\-Lang\-Region\-Map}
+ {
+ \providedby{\file{tracklang-region-codes.tex} v1.3+}
+ \syntax{\margm{numeric}\margm{alpha-2}\margm{alpha-3}}
+ \desc{establishes a mapping between a numeric \idx{region} code
+ and alpha-2 and alpha-3 codes}
+ }
+ % COMMANDS: tracklang-scripts.tex
+ % \TrackLangScriptMap
+ \gcmd{Track\-Lang\-Script\-Map}
+ {
+ \providedby{\file{tracklang-scripts.tex} v1.3+}
+ \syntax{\margm{letter code}\margm{numeric code}\margm{script name}\margm{direction}\margm{parent script}}
+ \desc{defines a mapping between an alpha code and a numeric code}
+ }
+ % \TrackLangScriptAlphaToNumeric
+ \gcmd{Track\-Lang\-Script\-Alpha\-To\-Numeric}
+ {
+ \providedby{\file{tracklang-scripts.tex} v1.3+}
+ \syntax{\margm{alpha code}}
+ \desc{expands to the numeric script code corresponding to the given alpha code}
+ }
+ % \TrackLangScriptIfKnownAlpha
+ \gcmd{Track\-Lang\-Script\-If\-Known\-Alpha}
+ {
+ \providedby{\file{tracklang-scripts.tex} v1.3+}
+ \syntax{\margm{alpha code}\margm{true}\margm{false}}
+ \desc{expands to \meta{true} if there's a known mapping for the
+ given alpha script code otherwise expands to \meta{false}}
+ }
+ % \TrackLangScriptNumericToAlpha
+ \gcmd{Track\-Lang\-Script\-Numeric\-To\-Alpha}
+ {
+ \providedby{\file{tracklang-scripts.tex} v1.3+}
+ \syntax{\margm{numeric code}}
+ \desc{expands to the alpha script code corresponding to the
+ given numeric code}
+ }
+ % \TrackLangScriptIfKnownNumeric
+ \gcmd{Track\-Lang\-Script\-If\-Known\-Numeric}
+ {
+ \providedby{\file{tracklang-scripts.tex} v1.3+}
+ \syntax{\margm{numeric code}\margm{true}\margm{false}}
+ \desc{expands to \meta{true} if there's a known mapping for the
+ given numeric script code otherwise expands to \meta{false}}
+ }
+ % \TrackLangScriptAlphaToName
+ \gcmd{Track\-Lang\-Script\-Alpha\-To\-Name}
+ {
+ \providedby{\file{tracklang-scripts.tex} v1.3+}
+ \syntax{\margm{alpha code}}
+ \desc{expands to the name associated with the given alpha script
+ code}
+ }
+ % \TrackLangScriptAlphaToDir
+ \gcmd{Track\-Lang\-Script\-Alpha\-To\-Dir}
+ {
+ \providedby{\file{tracklang-scripts.tex} v1.3+}
+ \syntax{\margm{alpha code}}
+ \desc{expands to the direction associated with the given alpha script
+ code}
+ }
+ % \TrackLangScriptSetParent
+ \gcmd{Track\-Lang\-Script\-Set\-Parent}
+ {
+ \providedby{\file{tracklang-scripts.tex} v1.3+}
+ \syntax{\margm{alpha code}\margm{parent alpha code}}
+ \desc{sets the parent for the given alpha script code}
+ }
+ % \TrackLangScriptGetParent
+ \gcmd{Track\-Lang\-Script\-Get\-Parent}
+ {
+ \providedby{\file{tracklang-scripts.tex} v1.3+}
+ \syntax{\margm{alpha code}}
+ \desc{expands to the parent of the given alpha script code}
+ }
+ % \TrackLangScriptIfHasParent
+ \gcmd{Track\-Lang\-Script\-If\-Has\-Parent}
+ {
+ \providedby{\file{tracklang-scripts.tex} v1.3+}
+ \syntax{\margm{alpha code}\margm{true}\margm{false}}
+ \desc{expands to \meta{true} if the given alpha script code has
+ a parent otherwise expands to \meta{false}}
+ }
+ % \TrackLangScript<Code>
+ \gcmdmeta{Track\-Lang\-Script}{Code}{}
+ {
+ \providedby{\file{tracklang-scripts.tex} v1.3+}
+ \desc{set by \gls{TrackLangScriptMap} to the associated alpha code \meta{Code}}
+ }
+ % FILES
+ \gfile{track\-lang.tex}{}% tracklang.tex
+ \gfile{track\-lang.sty}% tracklang.sty
+ {\field{alias}{pkg.tracklang}}%
+ \gfile{track\-lang\dhyphen scripts.sty}% tracklang-scripts.sty
+ {\field{alias}{pkg.tracklang-scripts}}%
+ \gfile{tracklang\dhyphen region\dhyphen codes.tex}{}% tracklang-region-codes.tex
+ \gfile{tracklang\dhyphen scripts.tex}{}% tracklang-scripts.tex
+ \gfile{tex\-os\-query.tex}{}% texosquery.tex
+ \gfile{tex\-os\-query.cfg}{}% texosquery.cfg
+ \gfilemetameta{}{prefix}{\dhyphen}{localeid}{.ldf}{} % <prefix>-<localeid>.ldf
+ % FILE EXTENSIONS
+ \gext{tex}{}% .tex
+ \gext{ldf}{}% .ldf
+ \gext{log}{}% .log
+ % PACKAGES
+ \gpkg{track\-lang}{\common}% tracklang
+ \gpkg{track\-lang\dhyphen scripts}{}% tracklang-scripts
+ \gpkg{tex\-os\-query}{}% texosquery
+ \gpkg{poly\-glossia}{}% polyglossia.sty
+ \gpkg{babel}{}% babel.sty
+ \gpkg{translator}{}% translator.sty
+ \gpkg{shell\-esc}{}% shellesc.sty
+ \gpkg{ngerman}{}% ngerman.sty
+ \gpkg{german}{}% german.sty
+ \gpkg{glossaries}{}% glossaries.sty
+ \gpkg{etool\-box}{}% etoolbox.sty
+ \gpkg{date\-time2}{}% datetime2.sty
+ % Example packages
+ \gfile{animals.sty}{}% animals.sty
+ \gfile{regions.sty}{}% regions.sty
+ \gfile{alien.sty}{}% alien.sty
+ \gpkg{alien}{\field{alias}{file.alien.sty}}
+ % environment variables
+ \genvvar{LC\dsb ALL}{}% LC_ALL
+ \genvvar{LANG}{}% LANG
+ \genvvar{LC\dsb MONETARY}{}% LC_MONETARY
+ % TERMS
+ \gterm{shellescape}
+ {
+ \name{shell escape}
+ \desc{\TeX\ has the ability to run \idx{cli} applications while
+ it's typesetting a document. Whilst this is a convenient way
+ of using tools to help build the document, it's a security
+ risk. To help protect users from arbitrary\dash and
+ potentially dangerous\dash code from begin executed, \TeX\ has
+ a restricted mode, where only trusted applications are allowed to
+ run. This is usually the default mode, but your \TeX\
+ installation may be set up so that the shell escape is disabled by
+ default. The unrestricted mode allows you to run any
+ application from the shell escape. Take care about
+ enabling this option. If you receive a document or package
+ from an untrusted source, first run \TeX\ with the shell escape
+ disabled or in restricted mode and search the \ext+{log} file for
+ \qt{runsystem} before using the unrestricted mode. Note that
+ \LuaLaTeX\ additionally requires the \sty{shellesc} package}
+ }
+ \gtermacr{cli}{CLI}{command-line interface}%
+ {%
+ \desc{an application that doesn't have a graphical user
+ interface. That is, an application that doesn't have any windows,
+ buttons or menus and can be run in
+ \dickimawhref{latex/novices/html/terminal.html}{a command
+ prompt or terminal}}%
+ }%
+ % INDEX ONLY
+ % COMMANDS - GENERAL
+ \gcmd{direct\-lua}{}% \directlua
+ \gcmd{babel\-provide}{}% \babelprovide
+ \gcmd{bbl\-@\-loaded}{}% \bbl@loaded
+ \gcmd{select\-language}{}% \selectlanguage
+ \gcmd{input}{}% \input
+ \gcmd{Require\-Package}{}% \RequirePackage
+ \gcmd{Declare\-Option}{}% \DeclareOption
+ \gcmdmeta{captions}{dialect}{}{}% \captions<dialect>
+ \gcmdmeta{date}{dialect}{}{}% \date<dialect>
+ \gcmd{Provides\-File}{}% \ProvidesFile
+ \gcmd{xpg\-@\-bcp\-@\-loaded}{}% \xpg@bcp@loaded
+ \gcmd{xpg\-@\-loaded}{}% \xpg@loaded
+ \gcmd{trans\-@\-languages}{}% \trans@languages
+ \gcmd{lan\-guage\-name}{}% \languagename
+ \gcmd{TeX\-OS\-Query\-Lang\-Tag}{}% \TeXOSQueryLangTag
+ \gcmd{TeX\-OS\-Query\-Locale}{}% \TeXOSQueryLocale
+ \gcmd{@for}{}
+ \gcmd{@nil}{}
+ \gcmd{At\-Begin\-Doc\-u\-ment}{}% \AtBeginDocument
+ % APPLICATIONS
+ \gapp{tex\-os\-query}{}% texosquery
+ \gapp{kpse\-which}{}% kpsewhich
+ \gapp{etex}{}% etex
+ \gapp{tex}{}% tex
+ \gapp{pdflatex}{}% pdflatex
+ % PUNCTUATION
+ \gpunc{atletter}% @ as a letter
+ {\name{\code{@} (catcode 11)}\field{text}{\code{@}}}%
+ \gpunc{atmod}% @ separates modifier
+ {\name{\code{@} (modifier)}\field{text}{\code{@}}}%
+ \gpunc{hyphensep}% - in tag
+ {\name{\code{-} (separator)}\field{text}{\code{-}}}%
+ \gpunc{underscoresep}% _ in tag
+ {\name{\code{\_} (separator)}\field{text}{\code{\_}}}%
+ \gpunc{dotsep}% . separates code-set
+ {\name{\code{.}\ (code-set)}\field{text}{\code{.}}}%
+ \gpunc{dollarenv}% ${ENV VAR}
+ {\name{\code{\$} (environment variable)}\field{text}{\code{\$}}}
+ \gpunc{escbsl}% \\
+ {\name{\code{\glsbackslash\glsbackslash} (escaped backslash)}
+ \field{text}{\code{\glsbackslash\glsbackslash}}
+ }
+ % INDEX ONLY TERMS
+ \gidx{code-set}{}
+ \gidx{modifier}{}
+ \gidx{variant}{}
+ \gidx{territory}{}
+ \gidx{region}{\field{alias}{idx.territory}}
+ \gidx{script}{}
+ \gidx{BCP47}{\name{BCP~47}}
+ % ISO CODES
+ \gidx{639-1}{\name{ISO \mbox{639-1}}\field{text}{\mbox{639-1}}}
+ \gidx{639-2}{\name{ISO \mbox{639-2}}\field{text}{\mbox{639-2}}}
+ \gidx{639-2B}{\parent{idx.639-2}%
+ \name{ISO \mbox{639-2} (B)}%
+ \field{text}{\mbox{639-2} (B)}}
+ \gidx{639-2T}{\parent{idx.639-2}%
+ \name{ISO \mbox{639-2} (T)}%
+ \field{text}{\mbox{639-2} (T)}}
+ \gidx{639-3}{\name{ISO \mbox{639-3}}\field{text}{\mbox{639-3}}}
+ \gidx{3166-1}{\name{ISO \mbox{3166-1}}\field{text}{\mbox{3166-1}}}
+ \gidx{15924}{\name{ISO 15924}\field{text}{15924}}
+ % ABBREVIATIONS
+ \gacr{ISO}{ISO}{International Organization for Standardization}{\common}
+ \gacr{POSIX}{POSIX}{Portable Operating System Interface}{}
+ % SWITCHES
+ \glongswitchpunc{shell\dhyphen escape}{}
+ % PREDEFINED ISO LANGUAGE-REGION TAGS
+ \gisolangtag{en}{US}{american}{}
+ \gisolangtag{en}{GB}{british}{}
+ \gisolangtag{en}{AU}{australian}{}
+ \gisolangtag{en}{NZ}{newzealand}{}
+ \gisolangtag{en}{CA}{canadian}{}
+ \gisolangtag{fr}{CA}{canadien}{}
+ \gisolangtag{fr}{BE}{belgique}{}
+ \gisolangtag{pt}{BR}{brazilian}{}
+ \gisolangtag{it}{HR}{istriacountyitalian}{}
+ \gisolangtag{nl}{BE}{flemish}{}
+ \gisolangtag{fr}{FR}{france}{}
+ \gisolangtag{de}{DE}{germanDE}{}
+ \gisolangtag{de}{BE}{belgiangerman}{}
+ \gisolangtag{en}{GG}{guernseyenglish}{}
+ \gisolangtag{fr}{GG}{guernseyfrench}{}
+ \gisolangtag{it}{IT}{italy}{}
+ \gisolangtag{mt}{MT}{maltamaltese}{}
+ \gisolangtag{en}{MT}{maltaenglish}{}
+ \gisolangtag{en}{IM}{isleofmanenglish}{}
+ \gisolangtag{en}{JE}{jerseyenglish}{}
+ \gisolangtag{fr}{JE}{jerseyfrench}{}
+ \gisolangtag{nl}{NL}{netherlands}{}
+ \gisolangtag{pt}{PT}{portugal}{}
+ \gisolangtag{it}{SM}{sanmarino}{}
+ \gisolangtag{sl}{SI}{slovenia}{}
+ \gisolangtag{it}{SI}{sloveneistriaitalian}{}
+ \gisolangtag{es}{ES}{spainspanish}{}
+ \gisolangtag{es}{AR}{argentinespanish}{}
+ \gisolangtag{es}{BO}{bolivianspanish}{}
+ \gisolangtag{es}{CL}{chilianspanish}{}
+ \gisolangtag{es}{CO}{columbianspanish}{}
+ \gisolangtag{es}{CR}{costaricanspanish}{}
+ \gisolangtag{es}{CU}{cubanspanish}{}
+ \gisolangtag{es}{DO}{dominicanspanish}{}
+ \gisolangtag{es}{EC}{ecudorianspanish}{}
+ \gisolangtag{es}{SV}{elsalvadorspanish}{}
+ \gisolangtag{es}{GT}{guatemalanspanish}{}
+ \gisolangtag{es}{HN}{honduranspanish}{}
+ \gisolangtag{es}{MX}{mexicanspanish}{}
+ \gisolangtag{es}{NI}{nicaraguanspanish}{}
+ \gisolangtag{es}{PA}{panamaspanish}{}
+ \gisolangtag{es}{PY}{paraguayspanish}{}
+ \gisolangtag{es}{PE}{peruvianspanish}{}
+ \gisolangtag{es}{PR}{puertoricospanish}{}
+ \gisolangtag{es}{UY}{uruguayspanish}{}
+ \gisolangtag{es}{VE}{venezuelanspanish}{}
+ \gisolangtag{de}{CH}{swissgerman}{}
+ \gisolangtag{fr}{CH}{swissfrench}{}
+ \gisolangtag{it}{CH}{swissitalian}{}
+ \gisolangtag{rm}{CH}{swissromansh}{}
+ \gisolangtag{it}{VA}{vatican}{}
+ \gisolangtag{ga}{IE}{IEirish}{}
+ \gisolangtag{ga}{GB}{GBirish}{}
+ \gisolangtag{en}{IE}{IEenglish}{}
+ \gisolangtagwithvar{de}{AT}{1996}{naustrian}{}
+ \gisolangtag{de}{AT}{austrian}{}
+ \gisolangtag{id}{IN}{bahasa}{}
+ \gisolangtag{ms}{MY}{malay}{}
+ \gisolangtag{hr}{HR}{croatia}{}
+ \gisolangtagwithvar{de}{DE}{1996}{ngermanDE}{}
+ \gisolangtagwithvar{de}{CH}{1996}{nswissgerman}{}
+ \gisolangtag{hu}{HU}{hungarian}{}
+ \gisolangtag{gd}{GB}{GBscottish}{}
+ \gisolangtag{cy}{GB}{GBwelsh}{}
+ % PREDEFINED ROOT LANGUAGE TAGS
+ \grootlangtag{abkhaz}{ab}{}
+ \grootlangtag{afar}{aa}{}
+ \grootlangtag{afrikaans}{af}{}
+ \grootlangtag{akan}{ak}{}
+ \grootlangtag{albanian}{sq}{}
+ \grootlangtagwithreg{amharic}{am}{ET}{}
+ \grootlangtag{anglosaxon}{ang}{}
+ \grootlangtag{apache}{apa}{}
+ \grootlangtag{arabic}{ar}{}
+ \grootlangtagwithreg{aragonese}{an}{ES}{}
+ \grootlangtag{armenian}{hy}{}
+ \grootlangtag{assamese}{as}{}
+ \grootlangtag{asturian}{ast}{}
+ \grootlangtag{avaric}{av}{}
+ \grootlangtag{avestan}{ae}{}
+ \grootlangtag{aymara}{ay}{}
+ \grootlangtag{azerbaijani}{az}{}
+ \grootlangtagwithreg{bahasai}{id}{IN}{}
+ \grootlangtagwithreg{bahasam}{ms}{MY}{}
+ \grootlangtagwithreg{bambara}{bm}{ML}{}
+ \grootlangtag{bashkir}{ba}{}
+ \grootlangtag{basque}{eu}{}
+ \grootlangtag{belarusian}{be}{}
+ \grootlangtag{bengali}{bn}{}
+ \grootlangtag{berber}{ber}{}
+ \grootlangtag{bihari}{bh}{}
+ \grootlangtagwithreg{bislama}{bi}{VU}{}
+ \grootlangtagwithreg{bokmal}{nb}{NO}{}
+ \grootlangtag{bosnian}{bs}{}
+ \grootlangtagwithreg{breton}{br}{FR}{}
+ \grootlangtag{bulgarian}{bg}{}
+ \grootlangtag{burmese}{my}{}
+ \grootlangtag{catalan}{ca}{}
+ \grootlangtag{chamorro}{ch}{}
+ \grootlangtag{chechen}{ce}{}
+ \grootlangtag{chichewa}{ny}{}
+ \grootlangtag{chinese}{zh}{}
+ \grootlangtag{churchslavonic}{cu}{}
+ \grootlangtagwithreg{chuvash}{cv}{RU}{}
+ \grootlangtag{coptic}{cop}{}
+ \grootlangtagwithreg{cornish}{kw}{GB}{}
+ \grootlangtag{corsican}{co}{}
+ \grootlangtag{cree}{cr}{}
+ \grootlangtag{croatian}{hr}{}
+ \grootlangtag{czech}{cs}{}
+ \grootlangtag{danish}{da}{}
+ \grootlangtagwithreg{divehi}{dv}{MV}{}
+ \grootlangtag{dutch}{nl}{}
+ \grootlangtagwithreg{dzongkha}{dz}{BT}{}
+ \grootlangtagwithreg{easternpunjabi}{pa}{IN}{}
+ \grootlangtag{english}{en}{}
+ \grootlangtag{esperanto}{eo}{}
+ \grootlangtag{estonian}{et}{}
+ \grootlangtag{ewe}{ee}{}
+ \grootlangtag{faroese}{fo}{}
+ \grootlangtag{farsi}{fa}{}
+ \grootlangtagwithreg{fijian}{fj}{FJ}{}
+ \grootlangtag{finnish}{fi}{}
+ \grootlangtag{french}{fr}{}
+ \grootlangtagwithreg{friulan}{fur}{IT}{}
+ \grootlangtag{fula}{ff}{}
+ \grootlangtag{galician}{gl}{}
+ \grootlangtagwithreg{ganda}{lg}{UG}{}
+ \grootlangtag{georgian}{ka}{}
+ \grootlangtag{german}{de}{}
+ \grootlangtag{greek}{el}{}
+ \grootlangtag{guarani}{gn}{}
+ \grootlangtag{gujarati}{gu}{}
+ \grootlangtagwithreg{haitian}{ht}{HT}{}
+ \grootlangtag{hausa}{ha}{}
+ \grootlangtag{hebrew}{he}{}
+ \grootlangtag{herero}{hz}{}
+ \grootlangtag{hindi}{hi}{}
+ \grootlangtagwithreg{hirimotu}{ho}{PG}{}
+ \grootlangtagwithreg{icelandic}{is}{IS}{}
+ \grootlangtag{ido}{io}{}
+ \grootlangtag{igbo}{ig}{}
+ \grootlangtag{interlingua}{ia}{}
+ \grootlangtag{interlingue}{ie}{}
+ \grootlangtag{inuktitut}{iu}{}
+ \grootlangtag{inupiaq}{ik}{}
+ \grootlangtag{irish}{ga}{}
+ \grootlangtag{italian}{it}{}
+ \grootlangtag{japanese}{ja}{}
+ \grootlangtag{javanese}{jv}{}
+ \grootlangtag{kalaallisut}{kl}{}
+ \grootlangtagwithreg{kannada}{kn}{IN}{}
+ \grootlangtag{kanuri}{kr}{}
+ \grootlangtagwithreg{kashmiri}{ks}{IN}{}
+ \grootlangtag{kazakh}{kk}{}
+ \grootlangtag{khmer}{km}{}
+ \grootlangtag{kikuyu}{ki}{}
+ \grootlangtag{kinyarwanda}{rw}{}
+ \grootlangtag{kirundi}{rn}{}
+ \grootlangtagwithreg{komi}{kv}{RU}{}
+ \grootlangtag{kongo}{kg}{}
+ \grootlangtag{korean}{ko}{}
+ \grootlangtag{kurdish}{ku}{}
+ \grootlangtag{kwanyama}{kj}{}
+ \grootlangtag{kyrgyz}{ky}{}
+ \grootlangtag{lao}{lo}{}
+ \grootlangtag{latin}{la}{}
+ \grootlangtag{latvian}{lv}{}
+ \grootlangtag{limburgish}{li}{}
+ \grootlangtag{lingala}{ln}{}
+ \grootlangtag{lithuanian}{lt}{}
+ \grootlangtagwithreg{lsorbian}{dsb}{DE}{}
+ \grootlangtagwithreg{lubakatanga}{lu}{CD}{}
+ \grootlangtag{luxembourgish}{lb}{}
+ \grootlangtag{macedonian}{mk}{}
+ \grootlangtag{magyar}{hu}{}
+ \grootlangtag{malagasy}{mg}{}
+ \grootlangtagwithreg{malayalam}{ml}{IN}{}
+ \grootlangtag{maltese}{mt}{}
+ \grootlangtagwithreg{manx}{gv}{IM}{}
+ \grootlangtagwithreg{maori}{mi}{NZ}{}
+ \grootlangtagwithreg{marathi}{mr}{IN}{}
+ \grootlangtagwithreg{marshallese}{mh}{MH}{}
+ \grootlangtag{mongolian}{mn}{}
+ \grootlangtagwithreg{nauruan}{na}{NR}{}
+ \grootlangtagwithreg{navajo}{nv}{US}{}
+ \grootlangtag{ndonga}{ng}{}
+ \grootlangtag{nepali}{ne}{}
+ \grootlangtag{nko}{nqo}{}
+ \grootlangtag{northernndebele}{nd}{}
+ \grootlangtagwithreg{nynorsk}{nn}{NO}{}
+ \grootlangtag{norsk}{no}{}
+ \grootlangtag{northernsotho}{nso}{}
+ \grootlangtagwithreg{nuosu}{ii}{CN}{}
+ \grootlangtag{occitan}{oc}{}
+ \grootlangtag{ojibwe}{oj}{}
+ \grootlangtag{oromo}{om}{}
+ \grootlangtag{oriya}{or}{}
+ \grootlangtag{ossetian}{os}{}
+ \grootlangtag{pali}{pi}{}
+ \grootlangtag{pashto}{ps}{}
+ \grootlangtagwithreg{piedmontese}{pms}{IT}{}
+ \grootlangtag{polish}{pl}{}
+ \grootlangtag{portuges}{pt}{}
+ \grootlangtag{quechua}{qu}{}
+ \grootlangtag{romanian}{ro}{}
+ \grootlangtagwithreg{romansh}{rm}{CH}{}
+ \grootlangtag{russian}{ru}{}
+ \grootlangtag{samin}{se}{}
+ \grootlangtag{sanskrit}{sa}{}
+ \grootlangtag{samoan}{sm}{}
+ \grootlangtag{sango}{sg}{}
+ \grootlangtagwithreg{sardinian}{sc}{IT}{}
+ \grootlangtag{scottish}{gd}{}
+ \grootlangtag{serbian}{sr}{}
+ \grootlangtag{shona}{sn}{}
+ \grootlangtag{sindhi}{sd}{}
+ \grootlangtagwithreg{sinhalese}{si}{LK}{}
+ \grootlangtag{slovak}{sk}{}
+ \grootlangtag{slovene}{sl}{}
+ \grootlangtag{somali}{so}{}
+ \grootlangtagwithreg{southernndebele}{nr}{ZA}{}
+ \grootlangtag{southernsotho}{st}{}
+ \grootlangtag{spanish}{es}{}
+ \grootlangtag{sudanese}{su}{}
+ \grootlangtag{swahili}{sw}{}
+ \grootlangtag{swati}{ss}{}
+ \grootlangtag{swedish}{sv}{}
+ \grootlangtag{syriac}{syr}{}
+ \grootlangtagwithreg{tagalog}{tl}{PH}{}
+ \grootlangtagwithreg{tahitian}{ty}{PF}{}
+ \grootlangsametag{tai}{}
+ \grootlangtag{tajik}{tg}{}
+ \grootlangtag{tamil}{ta}{}
+ \grootlangtag{tatar}{tt}{}
+ \grootlangtagwithreg{telugu}{te}{IN}{}
+ \grootlangtagwithreg{thai}{th}{TH}{}
+ \grootlangtag{tibetan}{bo}{}
+ \grootlangtag{tigrinya}{ti}{}
+ \grootlangtagwithreg{tonga}{to}{TO}{}
+ \grootlangtag{tsonga}{ts}{}
+ \grootlangtag{tswana}{tn}{}
+ \grootlangtag{turkish}{tr}{}
+ \grootlangtag{turkmen}{tk}{}
+ \grootlangtagwithreg{twi}{tw}{GH}{}
+ \grootlangtagwithreg{ukrainian}{uk}{UA}{}
+ \grootlangtag{undetermined}{und}{}
+ \grootlangtag{urdu}{ur}{}
+ \grootlangtagwithreg{usorbian}{hsb}{DE}{}
+ \grootlangtagwithreg{uyghur}{ug}{CN}{}
+ \grootlangtag{uzbek}{uz}{}
+ \grootlangtagwithreg{venda}{ve}{ZA}{}
+ \grootlangtag{vietnamese}{vi}{}
+ \grootlangtag{volapuk}{vo}{}
+ \grootlangtag{walloon}{wa}{}
+ \grootlangtag{welsh}{cy}{}
+ \grootlangtagwithreg{westernfrisian}{fy}{NL}{}
+ \grootlangtag{wolof}{wo}{}
+ \grootlangtag{xhosa}{xh}{}
+ \grootlangtag{yiddish}{yi}{}
+ \grootlangtag{yoruba}{yo}{}
+ \grootlangtagwithreg{zhuang}{za}{CN}{}
+ \grootlangtag{zulu}{zu}{}
+ % PREDEFINED NON-ISO DIALECTS
+ \gdialecttag{acadian}{french}{}
+ \gdialecttagwithreg{american}{english}{US}{}
+ \gdialecttagwithreg{australian}{english}{AU}{}
+ \gdialecttagwithreg{austrian}{german}{AT}{}
+ \gdialecttagwithreg{naustrian}{german}{AT-1996}{}
+ \gdialecttagwithreg{bahasa}{bahasai}{IN}{}
+ \gdialecttagwithreg{brazil}{portuges}{BR}{}
+ \gdialecttagwithreg{brazilian}{portuges}{BR}{}
+ \gdialecttagwithreg{british}{english}{GB}{}
+ \gdialecttagwithreg{canadian}{english}{CA}{}
+ \gdialecttagwithreg{canadien}{french}{CA}{}
+ \gdialecttagwithreg{croatia}{croatian}{HR}{}
+ \gdialecttagwithreg{istriacountycroatian}{croatian}{HR}{}
+ \gdialecttagwithreg{istriacountyitalian}{italian}{HR}{}
+ \gdialecttagwithreg{netherlands}{dutch}{NL}{}
+ \gdialecttag{persian}{farsi}{}
+ \gdialecttagwithreg{flemish}{dutch}{BE}{}
+ \gdialecttag{francais}{french}{}
+ \gdialecttag{frenchb}{french}{}
+ \gdialecttagwithreg{france}{french}{FR}{}
+ \gdialecttagwithreg{belgique}{french}{BE}{}
+ \gdialecttagwithreg{belgiangerman}{german}{BE}{}
+ \gdialecttagwithmapandreg{nbelgiangerman}{german}{BE-1996}{ngerman}{}
+ \gdialecttagwithreg{friulian}{friulan}{IT}{}
+ \gdialecttagwithreg{friulano}{friulan}{IT}{}
+ \gdialecttagwithreg{furlan}{friulan}{IT}{}
+ \gdialecttag{kurmanji}{kurdish}{}
+ \gdialecttag{galicien}{galician}{}
+ \gdialecttag{deutsch}{german}{}
+ \gdialecttagsuppl{ngerman}{german}{1996}{}
+ \gdialecttagsupplwithmap{ngermanb}{german}{1996}{ngerman}{}
+ \gdialecttag{germanb}{german}{}
+ \gdialecttagwithmapandreg{ngermanDE}{german}{DE-1996}{ngerman}{}
+ \gdialecttagwithreg{germanDE}{german}{DE}{}
+ \gdialecttagwithreg{hungarian}{magyar}{HU}{}
+ \gdialecttagwithreg{indon}{bahasai}{IN}{}
+ \gdialecttagwithreg{indonesian}{bahasai}{IN}{}
+ \gdialecttag{gaeilge}{irish}{}
+ \gdialecttagwithreg{IEirish}{irish}{IE}{}
+ \gdialecttagwithreg{GBirish}{irish}{GB}{}
+ \gdialecttagwithmapandreg{IEenglish}{english}{IE}{british}{}
+ \gdialecttagwithreg{italy}{italian}{IT}{}
+ \gdialecttagwithreg{vatican}{italian}{VA}{}
+ \gdialecttagwithreg{sanmarino}{italian}{SM}{}
+ \gdialecttagwithreg{sloveneistriaitalian}{italian}{SI}{}
+ \gdialecttagwithmapandreg{jerseyenglish}{english}{JE}{british}{}
+ \gdialecttagwithreg{jerseyfrench}{french}{JE}{}
+ \gdialecttagwithmapandreg{guernseyenglish}{english}{GG}{british}{}
+ \gdialecttagwithreg{guernseyfrench}{french}{GG}{}
+ \gdialecttag{latein}{latin}{}
+ \gdialecttagwithreg{lowersorbian}{lsorbian}{DE}{}
+ \gdialecttagwithreg{malay}{bahasam}{MY}{}
+ \gdialecttagwithreg{meyalu}{bahasam}{MY}{}
+ \gdialecttagwithreg{maltamaltese}{maltese}{MT}{}
+ \gdialecttagwithmapandreg{maltaenglish}{english}{MT}{british}{}
+ \gdialecttagwithreg{newzealand}{english}{NZ}{}
+ \gdialecttagwithmapandreg{isleofmanenglish}{english}{IM}{british}{}
+ \gdialecttagwithreg{norwegian}{norsk}{NO}{}
+ \gdialecttagwithreg{piemonteis}{piedmontese}{IT}{}
+ \gdialecttag{polutonikogreek}{greek}{}
+ \gdialecttag{polutoniko}{greek}{}
+ \gdialecttag{portuguese}{portuges}{}
+ \gdialecttagwithreg{portugal}{portuges}{PT}{}
+ \gdialecttag{romansch}{romansh}{}
+ \gdialecttag{rumantsch}{romansh}{}
+ \gdialecttag{romanche}{romansh}{}
+ \gdialecttag{russianb}{russian}{}
+ \gdialecttag{gaelic}{scottish}{}
+ \gdialecttagwithreg{GBscottish}{scottish}{GB}{}
+ \gdialecttagsuppl{serbianc}{serbian}{Cyrl}{}
+ \gdialecttagsuppl{serbianl}{serbian}{Latn}{}
+ \gdialecttag{slovenian}{slovene}{}
+ \gdialecttagwithmapandreg{slovenia}{slovene}{SI}{slovenian}{}
+ \gdialecttagwithmapandreg{sloveneistriaslovenian}{slovene}{SI}{slovenian}{}
+ \gdialecttagwithreg{spainspanish}{spanish}{ES}{}
+ \gdialecttagwithreg{argentinespanish}{spanish}{AR}{}
+ \gdialecttagwithreg{bolivianspanish}{spanish}{BO}{}
+ \gdialecttagwithreg{chilianspanish}{spanish}{CL}{}
+ \gdialecttagwithreg{columbianspanish}{spanish}{CO}{}
+ \gdialecttagwithreg{costaricanspanish}{spanish}{CR}{}
+ \gdialecttagwithreg{cubanspanish}{spanish}{CU}{}
+ \gdialecttagwithreg{dominicanspanish}{spanish}{DO}{}
+ \gdialecttagwithreg{ecudorianspanish}{spanish}{EC}{}
+ \gdialecttagwithreg{elsalvadorspanish}{spanish}{SV}{}
+ \gdialecttagwithreg{guatemalanspanish}{spanish}{GT}{}
+ \gdialecttagwithreg{honduranspanish}{spanish}{HN}{}
+ \gdialecttagwithreg{mexicanspanish}{spanish}{MX}{}
+ \gdialecttagwithreg{nicaraguanspanish}{spanish}{NI}{}
+ \gdialecttagwithreg{panamaspanish}{spanish}{PA}{}
+ \gdialecttagwithreg{paraguayspanish}{spanish}{PY}{}
+ \gdialecttagwithreg{peruvianspanish}{spanish}{PE}{}
+ \gdialecttagwithreg{puertoricospanish}{spanish}{PR}{}
+ \gdialecttagwithreg{uruguayspanish}{spanish}{UY}{}
+ \gdialecttagwithreg{venezuelanspanish}{spanish}{VE}{}
+ \gdialecttagwithreg{swissgerman}{german}{CH}{}
+ \gdialecttagwithmapandreg{nswissgerman}{german}{CH-1996}{ngerman}{}
+ \gdialecttagwithreg{swissfrench}{french}{CH}{}
+ \gdialecttagwithreg{swissitalian}{italian}{CH}{}
+ \gdialecttagwithreg{swissromansh}{romansh}{CH}{}
+ \gdialecttagwithreg{UKenglish}{english}{GB}{}
+ \gdialecttagwithreg{ukraineb}{ukrainian}{UA}{}
+ \gdialecttagwithreg{ukraine}{ukrainian}{UA}{}
+ \gdialecttagwithreg{uppersorbian}{usorbian}{DE}{}
+ \gdialecttagwithreg{USenglish}{english}{US}{}
+ \gdialecttag{valencian}{catalan}{}
+ \gdialecttag{valencien}{catalan}{}
+ \gdialecttag{cymraeg}{welsh}{}
+ \gdialecttagwithreg{GBwelsh}{welsh}{GB}{}
+ \gdialecttag{nil}{undetermined}{}
+ % PREDEFINED REGIONS
+ \gregion{004}{AF}{AFG}{}%
+ \gregion{248}{AX}{ALA}{}%
+ \gregion{008}{AL}{ALB}{}%
+ \gregion{012}{DZ}{DZA}{}%
+ \gregion{016}{AS}{ASM}{}%
+ \gregion{020}{AD}{AND}{}%
+ \gregion{024}{AO}{AGO}{}%
+ \gregion{660}{AI}{AIA}{}%
+ \gregion{010}{AQ}{ATA}{}%
+ \gregion{028}{AG}{ATG}{}%
+ \gregion{032}{AR}{ARG}{}%
+ \gregion{051}{AM}{ARM}{}%
+ \gregion{533}{AW}{ABW}{}%
+ \gregion{036}{AU}{AUS}{}%
+ \gregion{040}{AT}{AUT}{}%
+ \gregion{031}{AZ}{AZE}{}%
+ \gregion{044}{BS}{BHS}{}%
+ \gregion{048}{BH}{BHR}{}%
+ \gregion{050}{BD}{BGD}{}%
+ \gregion{052}{BB}{BRB}{}%
+ \gregion{112}{BY}{BLR}{}%
+ \gregion{056}{BE}{BEL}{}%
+ \gregion{084}{BZ}{BLZ}{}%
+ \gregion{204}{BJ}{BEN}{}%
+ \gregion{060}{BM}{BMU}{}%
+ \gregion{064}{BT}{BTN}{}%
+ \gregion{068}{BO}{BOL}{}%
+ \gregion{535}{BQ}{BES}{}%
+ \gregion{070}{BA}{BIH}{}%
+ \gregion{072}{BW}{BWA}{}%
+ \gregion{074}{BV}{BVT}{}%
+ \gregion{076}{BR}{BRA}{}%
+ \gregion{086}{IO}{IOT}{}%
+ \gregion{096}{BN}{BRN}{}%
+ \gregion{100}{BG}{BGR}{}%
+ \gregion{854}{BF}{BFA}{}%
+ \gregion{108}{BI}{BDI}{}%
+ \gregion{132}{CV}{CPV}{}%
+ \gregion{116}{KH}{KHM}{}%
+ \gregion{120}{CM}{CMR}{}%
+ \gregion{124}{CA}{CAN}{}%
+ \gregion{136}{KY}{CYM}{}%
+ \gregion{140}{CF}{CAF}{}%
+ \gregion{148}{TD}{TCD}{}%
+ \gregion{152}{CL}{CHL}{}%
+ \gregion{156}{CN}{CHN}{}%
+ \gregion{162}{CX}{CXR}{}%
+ \gregion{166}{CC}{CCK}{}%
+ \gregion{170}{CO}{COL}{}%
+ \gregion{174}{KM}{COM}{}%
+ \gregion{180}{CD}{COD}{}%
+ \gregion{178}{CG}{COG}{}%
+ \gregion{184}{CK}{COK}{}%
+ \gregion{188}{CR}{CRI}{}%
+ \gregion{384}{CI}{CIV}{}%
+ \gregion{191}{HR}{HRV}{}%
+ \gregion{192}{CU}{CUB}{}%
+ \gregion{531}{CW}{CUW}{}%
+ \gregion{196}{CY}{CYP}{}%
+ \gregion{203}{CZ}{CZE}{}%
+ \gregion{208}{DK}{DNK}{}%
+ \gregion{262}{DJ}{DJI}{}%
+ \gregion{212}{DM}{DMA}{}%
+ \gregion{214}{DO}{DOM}{}%
+ \gregion{218}{EC}{ECU}{}%
+ \gregion{818}{EG}{EGY}{}%
+ \gregion{222}{SV}{SLV}{}%
+ \gregion{226}{GQ}{GNQ}{}%
+ \gregion{232}{ER}{ERI}{}%
+ \gregion{233}{EE}{EST}{}%
+ \gregion{231}{ET}{ETH}{}%
+ \gregion{238}{FK}{FLK}{}%
+ \gregion{234}{FO}{FRO}{}%
+ \gregion{242}{FJ}{FJI}{}%
+ \gregion{246}{FI}{FIN}{}%
+ \gregion{250}{FR}{FRA}{}%
+ \gregion{254}{GF}{GUF}{}%
+ \gregion{258}{PF}{PYF}{}%
+ \gregion{260}{TF}{ATF}{}%
+ \gregion{266}{GA}{GAB}{}%
+ \gregion{270}{GM}{GMB}{}%
+ \gregion{268}{GE}{GEO}{}%
+ \gregion{276}{DE}{DEU}{}%
+ \gregion{288}{GH}{GHA}{}%
+ \gregion{292}{GI}{GIB}{}%
+ \gregion{300}{GR}{GRC}{}%
+ \gregion{304}{GL}{GRL}{}%
+ \gregion{308}{GD}{GRD}{}%
+ \gregion{312}{GP}{GLP}{}%
+ \gregion{316}{GU}{GUM}{}%
+ \gregion{320}{GT}{GTM}{}%
+ \gregion{831}{GG}{GGY}{}%
+ \gregion{324}{GN}{GIN}{}%
+ \gregion{624}{GW}{GNB}{}%
+ \gregion{328}{GY}{GUY}{}%
+ \gregion{332}{HT}{HTI}{}%
+ \gregion{334}{HM}{HMD}{}%
+ \gregion{336}{VA}{VAT}{}%
+ \gregion{340}{HN}{HND}{}%
+ \gregion{344}{HK}{HKG}{}%
+ \gregion{348}{HU}{HUN}{}%
+ \gregion{352}{IS}{ISL}{}%
+ \gregion{356}{IN}{IND}{}%
+ \gregion{360}{ID}{IDN}{}%
+ \gregion{364}{IR}{IRN}{}%
+ \gregion{368}{IQ}{IRQ}{}%
+ \gregion{372}{IE}{IRL}{}%
+ \gregion{833}{IM}{IMN}{}%
+ \gregion{376}{IL}{ISR}{}%
+ \gregion{380}{IT}{ITA}{}%
+ \gregion{388}{JM}{JAM}{}%
+ \gregion{392}{JP}{JPN}{}%
+ \gregion{832}{JE}{JEY}{}%
+ \gregion{400}{JO}{JOR}{}%
+ \gregion{398}{KZ}{KAZ}{}%
+ \gregion{404}{KE}{KEN}{}%
+ \gregion{296}{KI}{KIR}{}%
+ \gregion{408}{KP}{PRK}{}%
+ \gregion{410}{KR}{KOR}{}%
+ \gregion{414}{KW}{KWT}{}%
+ \gregion{417}{KG}{KGZ}{}%
+ \gregion{418}{LA}{LAO}{}%
+ \gregion{428}{LV}{LVA}{}%
+ \gregion{422}{LB}{LBN}{}%
+ \gregion{426}{LS}{LSO}{}%
+ \gregion{430}{LR}{LBR}{}%
+ \gregion{434}{LY}{LBY}{}%
+ \gregion{438}{LI}{LIE}{}%
+ \gregion{440}{LT}{LTU}{}%
+ \gregion{442}{LU}{LUX}{}%
+ \gregion{446}{MO}{MAC}{}%
+ \gregion{807}{MK}{MKD}{}%
+ \gregion{450}{MG}{MDG}{}%
+ \gregion{454}{MW}{MWI}{}%
+ \gregion{458}{MY}{MYS}{}%
+ \gregion{462}{MV}{MDV}{}%
+ \gregion{466}{ML}{MLI}{}%
+ \gregion{470}{MT}{MLT}{}%
+ \gregion{584}{MH}{MHL}{}%
+ \gregion{474}{MQ}{MTQ}{}%
+ \gregion{478}{MR}{MRT}{}%
+ \gregion{480}{MU}{MUS}{}%
+ \gregion{175}{YT}{MYT}{}%
+ \gregion{484}{MX}{MEX}{}%
+ \gregion{583}{FM}{FSM}{}%
+ \gregion{498}{MD}{MDA}{}%
+ \gregion{492}{MC}{MCO}{}%
+ \gregion{496}{MN}{MNG}{}%
+ \gregion{499}{ME}{MNE}{}%
+ \gregion{500}{MS}{MSR}{}%
+ \gregion{504}{MA}{MAR}{}%
+ \gregion{508}{MZ}{MOZ}{}%
+ \gregion{104}{MM}{MMR}{}%
+ \gregion{516}{NA}{NAM}{}%
+ \gregion{520}{NR}{NRU}{}%
+ \gregion{524}{NP}{NPL}{}%
+ \gregion{528}{NL}{NLD}{}%
+ \gregion{540}{NC}{NCL}{}%
+ \gregion{554}{NZ}{NZL}{}%
+ \gregion{558}{NI}{NIC}{}%
+ \gregion{562}{NE}{NER}{}%
+ \gregion{566}{NG}{NGA}{}%
+ \gregion{570}{NU}{NIU}{}%
+ \gregion{574}{NF}{NFK}{}%
+ \gregion{580}{MP}{MNP}{}%
+ \gregion{578}{NO}{NOR}{}%
+ \gregion{512}{OM}{OMN}{}%
+ \gregion{586}{PK}{PAK}{}%
+ \gregion{585}{PW}{PLW}{}%
+ \gregion{275}{PS}{PSE}{}%
+ \gregion{591}{PA}{PAN}{}%
+ \gregion{598}{PG}{PNG}{}%
+ \gregion{600}{PY}{PRY}{}%
+ \gregion{604}{PE}{PER}{}%
+ \gregion{608}{PH}{PHL}{}%
+ \gregion{612}{PN}{PCN}{}%
+ \gregion{616}{PL}{POL}{}%
+ \gregion{620}{PT}{PRT}{}%
+ \gregion{630}{PR}{PRI}{}%
+ \gregion{634}{QA}{QAT}{}%
+ \gregion{638}{RE}{REU}{}%
+ \gregion{642}{RO}{ROU}{}%
+ \gregion{643}{RU}{RUS}{}%
+ \gregion{646}{RW}{RWA}{}%
+ \gregion{652}{BL}{BLM}{}%
+ \gregion{654}{SH}{SHN}{}%
+ \gregion{659}{KN}{KNA}{}%
+ \gregion{662}{LC}{LCA}{}%
+ \gregion{663}{MF}{MAF}{}%
+ \gregion{666}{PM}{SPM}{}%
+ \gregion{670}{VC}{VCT}{}%
+ \gregion{882}{WS}{WSM}{}%
+ \gregion{674}{SM}{SMR}{}%
+ \gregion{678}{ST}{STP}{}%
+ \gregion{682}{SA}{SAU}{}%
+ \gregion{686}{SN}{SEN}{}%
+ \gregion{688}{RS}{SRB}{}%
+ \gregion{690}{SC}{SYC}{}%
+ \gregion{694}{SL}{SLE}{}%
+ \gregion{702}{SG}{SGP}{}%
+ \gregion{534}{SX}{SXM}{}%
+ \gregion{703}{SK}{SVK}{}%
+ \gregion{705}{SI}{SVN}{}%
+ \gregion{090}{SB}{SLB}{}%
+ \gregion{706}{SO}{SOM}{}%
+ \gregion{710}{ZA}{ZAF}{}%
+ \gregion{239}{GS}{SGS}{}%
+ \gregion{728}{SS}{SSD}{}%
+ \gregion{724}{ES}{ESP}{}%
+ \gregion{144}{LK}{LKA}{}%
+ \gregion{729}{SD}{SDN}{}%
+ \gregion{740}{SR}{SUR}{}%
+ \gregion{744}{SJ}{SJM}{}%
+ \gregion{748}{SZ}{SWZ}{}%
+ \gregion{752}{SE}{SWE}{}%
+ \gregion{756}{CH}{CHE}{}%
+ \gregion{760}{SY}{SYR}{}%
+ \gregion{158}{TW}{TWN}{}%
+ \gregion{762}{TJ}{TJK}{}%
+ \gregion{834}{TZ}{TZA}{}%
+ \gregion{764}{TH}{THA}{}%
+ \gregion{626}{TL}{TLS}{}%
+ \gregion{768}{TG}{TGO}{}%
+ \gregion{772}{TK}{TKL}{}%
+ \gregion{776}{TO}{TON}{}%
+ \gregion{780}{TT}{TTO}{}%
+ \gregion{788}{TN}{TUN}{}%
+ \gregion{792}{TR}{TUR}{}%
+ \gregion{795}{TM}{TKM}{}%
+ \gregion{796}{TC}{TCA}{}%
+ \gregion{798}{TV}{TUV}{}%
+ \gregion{800}{UG}{UGA}{}%
+ \gregion{804}{UA}{UKR}{}%
+ \gregion{784}{AE}{ARE}{}%
+ \gregion{826}{GB}{GBR}{}%
+ \gregion{581}{UM}{UMI}{}%
+ \gregion{840}{US}{USA}{}%
+ \gregion{858}{UY}{URY}{}%
+ \gregion{860}{UZ}{UZB}{}%
+ \gregion{548}{VU}{VUT}{}%
+ \gregion{862}{VE}{VEN}{}%
+ \gregion{704}{VN}{VNM}{}%
+ \gregion{092}{VG}{VGB}{}%
+ \gregion{850}{VI}{VIR}{}%
+ \gregion{876}{WF}{WLF}{}%
+ \gregion{732}{EH}{ESH}{}%
+ \gregion{887}{YE}{YEM}{}%
+ \gregion{894}{ZM}{ZMB}{}%
+ \gregion{716}{ZW}{ZWE}{}%
+ % PREDEFINED SCRIPTS
+ \gscript{Adlm}{166}{Adlam}{RL}{}{}
+ \gscript{Afak}{439}{Afaka}{varies}{}{}
+ \gscript{Aghb}{239}{Caucasian Albanian}{LR}{}{}
+ \gscript{Ahom}{338}{Ahom, Tai Ahom}{LR}{}{}
+ \gscript{Arab}{160}{Arabic}{RL}{}{}
+ \gscript{Aran}{161}{Arabic (Nastaliq variant)}{RL}{}{}
+ \gscript{Armi}{124}{Imperial Aramaic}{RL}{}{}
+ \gscript{Armn}{230}{Armenian}{LR}{}{}
+ \gscript{Avst}{134}{Avestan}{RL}{}{}
+ \gscript{Bali}{360}{Balinese}{LR}{}{}
+ \gscript{Bamu}{435}{Bamum}{LR}{}{}
+ \gscript{Bass}{259}{Bassa Vah}{LR}{}{}
+ \gscript{Batk}{365}{Batak}{LR}{}{}
+ \gscript{Beng}{334}{Bhaiksuki}{LR}{}{}
+ \gscript{Blis}{550}{Blissymbols}{varies}{}{}
+ \gscript{Bopo}{285}{Bopomofo}{LR}{}{}
+ \gscript{Brah}{300}{Brahmi}{LR}{}{}
+ \gscript{Brai}{570}{Braille}{LR}{}{}
+ \gscript{Bugi}{367}{Buginese}{LR}{}{}
+ \gscript{Buhd}{372}{Buhid}{LR}{}{}
+ \gscript{Cakm}{349}{Chakma}{LR}{}{}
+ \gscript{Cans}{440}{Unified Canadian Aboriginal Syllabics}{LR}{}{}
+ \gscript{Cari}{201}{Carian}{LR}{}{}
+ \gscript{Cham}{358}{Cham}{LR}{}{}
+ \gscript{Cher}{445}{Cherokee}{LR}{}{}
+ \gscript{Cirt}{291}{Cirth}{varies}{}{}
+ \gscript{Copt}{204}{Coptic}{LR}{}{}
+ \gscript{Cprt}{403}{Cypriot}{RL}{}{}
+ \gscript{Cyrl}{220}{Cyrillic}{LR}{}{}
+ \gscript{Cyrs}{221}{Cyrillic (Old Church Slavonic variant)}{varies}{}{}
+ \gscript{Deva}{315}{Devanagari (Nagari)}{LR}{}{}
+ \gscript{Dsrt}{250}{Deseret (Mormon)}{LR}{}{}
+ \gscript{Dupl}{755}{Duployan shorthand, Duployan stenography}{LR}{}{}
+ \gscript{Egyd}{070}{Egyptian demotic}{RL}{}{}
+ \gscript{Egyh}{060}{Egyptian hieratic}{RL}{}{}
+ \gscript{Egyp}{050}{Egyptian hieroglyphs}{LR}{}{}
+ \gscript{Elba}{226}{Elbasan}{LR}{}{}
+ \gscript{Ethi}{430}{Ethiopic (Ge'ez)}{LR}{}{}
+ \gscript{Geok}{241}{Khutsuri (Asomtavruli and Nuskhuri)}{LR}{}{}
+ \gscript{Geor}{240}{Georgian (Mkhedruli)}{LR}{}{}
+ \gscript{Glag}{225}{Glagolitic}{LR}{}{}
+ \gscript{Goth}{206}{Gothic}{LR}{}{}
+ \gscript{Gran}{343}{Grantha}{LR}{}{}
+ \gscript{Grek}{200}{Greek}{LR}{}{}
+ \gscript{Gujr}{320}{Gujarati}{LR}{}{}
+ \gscript{Guru}{310}{Gurmukhi}{LR}{}{}
+ \gscript{Hanb}{503}{Han with Bopomofo (alias for Han + Bopomofo)}{LR}{}{}
+ \gscript{Hang}{286}{Hangul}{LR}{}{}
+ \gscript{Hani}{500}{Han (Hanzi, Kanji, Hanja)}{LR}{}{}
+ \gscript{Hano}{371}{Hanunoo}{LR}{}{}
+ \gscript{Hans}{501}{Han (Simplified variant)}{varies}{}{}
+ \gscript{Hant}{502}{Han (Traditional variant)}{varies}{}{}
+ \gscript{Hatr}{127}{Hatran}{RL}{}{}
+ \gscript{Hebr}{125}{Hebrew}{RL}{}{}
+ \gscript{Hira}{410}{Hiragana}{LR}{}{}
+ \gscript{Hluw}{080}{Anatolian Hieroglyphs (Luwian Hieroglyphs, Hittite Hieroglyphs)}{LR}{}{}
+ \gscript{Hmng}{450}{Pahawh Hmong}{LR}{}{}
+ \gscript{Hrkt}{412}{Japanese syllabaries (alias for Hiragana + Katakana)}{varies}{}{}
+ \gscript{Hung}{176}{Old Hungarian (Hungarian Runic)}{RL}{}{}
+ \gscript{Inds}{610}{Indus (Harappan)}{RL}{}{}
+ \gscript{Ital}{210}{Old Italic (Etruscan, Oscan, etc.)}{LR}{}{}
+ \gscript{Jamo}{284}{Jamo (alias for Jamo subset of Hangul)}{LR}{}{}
+ \gscript{Java}{361}{Javanese}{LR}{}{}
+ \gscript{Jpan}{413}{Japanese (alias for Han + Hiragana + Katakana)}{varies}{}{}
+ \gscript{Jurc}{510}{Jurchen}{LR}{}{}
+ \gscript{Kali}{357}{Kayah Li}{LR}{}{}
+ \gscript{Kana}{411}{Katakana}{LR}{}{}
+ \gscript{Khar}{305}{Kharoshthi}{RL}{}{}
+ \gscript{Khmr}{355}{Khmer}{LR}{}{}
+ \gscript{Khoj}{322}{Khojki}{LR}{}{}
+ \gscript{Kitl}{505}{Khitan large script}{LR}{}{}
+ \gscript{Kits}{288}{Khitan small script}{TB}{}{}
+ \gscript{Knda}{345}{Kannada}{LR}{}{}
+ \gscript{Kore}{287}{Korean (alias for Hangul + Han)}{LR}{}{}
+ \gscript{Kpel}{436}{Kpelle}{LR}{}{}
+ \gscript{Kthi}{317}{Kaithi}{LR}{}{}
+ \gscript{Lana}{351}{Tai Tham (Lanna)}{LR}{}{}
+ \gscript{Laoo}{356}{Lao}{LR}{}{}
+ \gscript{Latf}{217}{Latin (Fraktur variant)}{varies}{}{}
+ \gscript{Latg}{216}{Latin (Gaelic variant)}{LR}{}{}
+ \gscript{Latn}{215}{Latin}{LR}{}{}
+ \gscript{Leke}{364}{Leke}{LR}{}{}
+ \gscript{Lepc}{335}{Lepcha}{LR}{}{}
+ \gscript{Limb}{336}{Limbu}{LR}{}{}
+ \gscript{Lina}{400}{Linear A}{LR}{}{}
+ \gscript{Linb}{401}{Linear B}{LR}{}{}
+ \gscript{Lisu}{399}{Lisu (Fraser)}{LR}{}{}
+ \gscript{Loma}{437}{Loma}{LR}{}{}
+ \gscript{Lyci}{202}{Lycian}{LR}{}{}
+ \gscript{Lydi}{116}{Lydian}{RL}{}{}
+ \gscript{Mahj}{314}{Mahajani}{LR}{}{}
+ \gscript{Mand}{140}{Mandaic, Mandaean}{RL}{}{}
+ \gscript{Mani}{139}{Manichaean}{RL}{}{}
+ \gscript{Marc}{332}{Marchen}{LR}{}{}
+ \gscript{Maya}{090}{Mayan hieroglyphs}{varies}{}{}
+ \gscript{Mend}{438}{Mende Kikakui}{RL}{}{}
+ \gscript{Merc}{101}{Meroitic Cursive}{RL}{}{}
+ \gscript{Mero}{100}{Meroitic Hieroglyphs}{RL}{}{}
+ \gscript{Mlym}{347}{Malayalam}{LR}{}{}
+ \gscript{Modi}{324}{Modi}{LR}{}{}
+ \gscript{Mong}{145}{Mongolian}{TB}{}{}
+ \gscript{Moon}{218}{Moon (Moon code, Moon script, Moon type)}{varies}{}{}
+ \gscript{Mroo}{199}{Mro, Mru}{LR}{}{}
+ \gscript{Mtei}{337}{Meitei Mayek (Meithei, Meetei)}{LR}{}{}
+ \gscript{Mult}{323}{Multani}{LR}{}{}
+ \gscript{Mymr}{350}{Myanmar (Burmese)}{LR}{}{}
+ \gscript{Narb}{106}{Old North Arabian (Ancient North Arabian)}{RL}{}{}
+ \gscript{Nbat}{159}{Nabataean}{RL}{}{}
+ \gscript{Newa}{333}{Newa, Newar, Newari}{LR}{}{}
+ \gscript{Nkgb}{420}{Nakhi Geba}{LR}{}{}
+ \gscript{Nkoo}{165}{N'Ko}{RL}{}{}
+ \gscript{Nshu}{499}{Nushu}{LR}{}{}
+ \gscript{Ogam}{212}{Ogham}{varies}{}{}
+ \gscript{Olck}{261}{Ol Chiki}{LR}{}{}
+ \gscript{Orkh}{175}{Old Turkic, Orkhon Runic}{RL}{}{}
+ \gscript{Orya}{327}{Oriya}{LR}{}{}
+ \gscript{Osge}{219}{Osage}{LR}{}{}
+ \gscript{Osma}{260}{Osmanya}{LR}{}{}
+ \gscript{Palm}{126}{Palmyrene}{RL}{}{}
+ \gscript{Pauc}{263}{Pau Cin Hau}{LR}{}{}
+ \gscript{Perm}{227}{Old Permic}{LR}{}{}
+ \gscript{Phag}{331}{Phags-pa}{TB}{}{}
+ \gscript{Phli}{131}{Inscriptional Pahlavi}{RL}{}{}
+ \gscript{Phlp}{132}{Psalter Pahlavi}{RL}{}{}
+ \gscript{Phlv}{133}{Book Pahlavi}{RL}{}{}
+ \gscript{Phnx}{115}{Phoenician}{RL}{}{}
+ \gscript{Piqd}{293}{Klingon (KLI plqaD)}{LR}{}{}
+ \gscript{Plrd}{282}{Miao (Pollard)}{LR}{}{}
+ \gscript{Prti}{130}{Inscriptional Parthian}{RL}{}{}
+ \gscript{Qaaa}{900}{Reserved for private use (start)}{varies}{}{}
+ \gscript{Qaai}{908}{Private use}{varies}{}{}
+ \gscript{Qabx}{949}{Reserved for private use (end)}{varies}{}{}
+ \gscript{Rjng}{363}{Rejang (Redjang, Kaganga)}{LR}{}{}
+ \gscript{Roro}{620}{Rongorongo}{varies}{}{}
+ \gscript{Runr}{211}{Runic}{LR}{}{}
+ \gscript{Samr}{123}{Samaritan}{RL}{}{}
+ \gscript{Sara}{292}{Sarati}{varies}{}{}
+ \gscript{Sarb}{105}{Old South Arabian}{RL}{}{}
+ \gscript{Saur}{344}{Saurashtra}{LR}{}{}
+ \gscript{Sgnw}{095}{SignWriting}{TB}{}{}
+ \gscript{Shaw}{281}{Shavian (Shaw)}{LR}{}{}
+ \gscript{Shrd}{319}{Sharada}{LR}{}{}
+ \gscript{Sidd}{302}{Siddham}{LR}{}{}
+ \gscript{Sind}{318}{Khudawadi, Sindhi}{LR}{}{}
+ \gscript{Sinh}{348}{Sinhala}{LR}{}{}
+ \gscript{Sora}{398}{Sora Sompeng}{LR}{}{}
+ \gscript{Sund}{362}{Sundanese}{LR}{}{}
+ \gscript{Sylo}{316}{Syloti Nagri}{LR}{}{}
+ \gscript{Syrc}{135}{Syriac}{RL}{}{}
+ \gscript{Syre}{138}{Syriac (Estrangelo variant)}{RL}{}{}
+ \gscript{Syrj}{137}{Syriac (Western variant)}{RL}{}{}
+ \gscript{Syrn}{136}{Syriac (Eastern variant)}{RL}{}{}
+ \gscript{Tagb}{373}{Tagbanwa}{LR}{}{}
+ \gscript{Takr}{321}{Takri}{LR}{}{}
+ \gscript{Tale}{353}{Tai Le}{LR}{}{}
+ \gscript{Talu}{354}{New Tai Lue}{LR}{}{}
+ \gscript{Taml}{346}{Tamil}{LR}{}{}
+ \gscript{Tang}{520}{Tangut}{LR}{}{}
+ \gscript{Tavt}{359}{Tai Viet}{LR}{}{}
+ \gscript{Telu}{340}{Telugu}{LR}{}{}
+ \gscript{Teng}{290}{Tengwar}{LR}{}{}
+ \gscript{Tfng}{120}{Tifinagh (Berber)}{LR}{}{}
+ \gscript{Tglg}{370}{Tagalog (Baybayin, Alibata)}{LR}{}{}
+ \gscript{Thaa}{170}{Thaana}{RL}{}{}
+ \gscript{Thai}{352}{Thai}{LR}{}{}
+ \gscript{Tibt}{330}{Tibetan}{LR}{}{}
+ \gscript{Tirh}{326}{Tirhuta}{LR}{}{}
+ \gscript{Ugar}{040}{Ugaritic}{LR}{}{}
+ \gscript{Vaii}{470}{Vai}{LR}{}{}
+ \gscript{Visp}{280}{Visible Speech}{LR}{}{}
+ \gscript{Wara}{262}{Warang Citi (Varang Kshiti)}{LR}{}{}
+ \gscript{Wole}{480}{Woleai}{RL}{}{}
+ \gscript{Xpeo}{030}{Old Persian}{LR}{}{}
+ \gscript{Xsux}{020}{Cuneiform, Sumero-Akkadian}{LR}{}{}
+ \gscript{Yiii}{460}{Yi}{LR}{}{}
+ \gscript{Zinh}{994}{Inherited script}{inherited}{}{}
+ \gscript{Zmth}{995}{Mathematical notation}{LR}{}{}
+ \gscript{Zsym}{996}{Symbols}{varies}{}{}
+ \gscript{Zsye}{993}{Symbols (emoji variant)}{varies}{}{}
+ \gscript{Zxxx}{997}{Unwritten documents}{varies}{}{}
+ \gscript{Zyyy}{998}{Undetermined script}{varies}{}{}
+ \gscript{Zzzz}{999}{Uncoded script}{varies}{}{}
+}
+
+\title{tracklang.sty v1.6:
+tracking language options}
+\author{Nicola L.C. Talbot\\[10pt]
+Dickimaw Books\\
+\href{https://www.dickimaw-books.com/}{\nolinkurl{dickimaw-books.com}}}
+\date{2022-10-29
+}
+
+\newcommand{\refoptstables}{\tablesref{tab:isoopts,tab:rootlangopts,tab:nonisoopts}}
+
+\begin{document}
+\maketitle
+
+\htmlavailable
+
+\begin{abstract}
+The \sty+{tracklang} package is provided for package developers
+who want a simple interface to find out which languages the user has
+requested through packages such as \sty{babel} and
+\sty{polyglossia}. \emph{This package doesn't provide any
+translations.}
+Its purpose is simply to track which languages have been requested by the
+user. Generic \TeX\ code is in \file{tracklang.tex} for
+non-\LaTeX\ users.
+
+If the \idx{shellescape} is enabled or \gls{directlua} is available,
+this package may also be used to query the \envvar{LCALL}
+or \envvar{LANG} environment variable (see
+\sectionref{sec:langsty}). Windows users, who don't have the locale
+stored in environment variables, can use \app{texosquery}
+in combination with \sty{tracklang}. (Similarly if \envvar{LCALL}
+or \envvar{LANG} don't contain sufficient information.) In order to
+use \app{texosquery} through the restricted \idx{shellescape}, you must
+have at least Java~8 and set up \file{texosquery.cfg}
+appropriately. (See the \app{texosquery} manual for further details.)
+\end{abstract}
+
+The fundamental aim of this generic package is to be able to
+effectively say:
+\begin{quote}
+The user (that is, the \emph{document} author) wants to use
+dialects \langtagfmt{xx-XX}, \langtagfmt{yy-YY-Scrp}, etc in their
+document. Any packages used by their document that provide
+multilingual or region-dependent support should do whatever is
+required to activate the settings for those languages and regions
+(or warn the user that there's no support).
+\end{quote}
+Naturally, this is only of use if the locale-sensitive packages use
+\sty{tracklang} to pick up this information, which is entirely up
+to the package authors, but at the moment there's no standard method
+for packages to detect the required language and region. The aim of
+\sty{tracklang} is to provide that method. In particular, the
+emphasis is on using \idx+{ISO} language and region codes rather than
+hard-coding the various language labels used by different language
+packages.
+
+Related articles:
+\tugboat{Localisation of \TeX\ documents: \styfmt{tracklang}.}
+{2016}{37}{3}{http://www.tug.org/TUGboat/tb37-3/tb117talbot.pdf},
+\dickimawhref{latex/tracklang}{Localisation with \filefmt{tracklang.tex}},
+and \faqspkg{tracklang}.
+
+\frontmatter
+\tableofcontents
+\listoftables
+
+\mainmatter
+\part{User Guide}
+
+\chapter{Introduction}
+\label{sec:intro}
+
+When I'm developing a package that provides multilingual support
+(for example, \sty{glossaries}) it's cumbersome trying to work out
+if the user has requested translations for fixed text. This usually
+involves checking if \sty{babel} or \sty{translator} or
+\sty{polyglossia} has been loaded and, if so, what language settings
+have been used. The result can be a tangled mass of conditional
+code. The alternative is to tell users to add the language as
+a~document class option, which they may or may not want to do, or to
+tell them to supply the language settings to every package they load
+that provides multilingual support, which users are even less likely
+to want to do.
+
+The \sty{tracklang} package tries to neaten this up by working out
+as much of this information as possible for you and providing a
+command that iterates through the loaded languages. This way, you
+can just iterate through the list of tracked languages and, for each
+language, either define the translations or warn the user that
+there's no translation for that language.
+
+This package works best with \sty{ngerman} and \sty{german} (since
+it's a simple test to determine if they have been loaded) and recent versions
+of \sty{polyglossia} (which conveniently provides \gls{xpg@bcp@loaded}) or
+when the language options are specified
+in the document class option list. It works fairly well with
+\sty{translator} but will additionally assume the root language was
+also requested when a dialect is specified. So, for example,
+\begin{codebox}
+\cmd{usepackage}[\opt{british}]\marg{translator}
+\cmd{usepackage}\marg{tracklang}
+\end{codebox}
+is equivalent to
+\begin{compactcodebox}
+\cmd{usepackage}[\opt{british}]\marg{translator}
+\cmd{usepackage}[\opt{english},\opt{british}]\marg{tracklang}
+\end{compactcodebox}
+This means that \gls{ForEachTrackedDialect} will iterate
+through the list \qt{\opt{english},\opt{british}} instead of just
+\qt{\opt{british}}, which can result in some redundancy.
+
+Unfortunately I can't find any way of detecting a list of languages loaded
+through \sty{babel}['s] new \gls{babelprovide} command. As far as I
+can tell, the only stored list is in \gls{bbl@loaded} which only
+contains the languages loaded through package options.
+
+If the \sty{ngerman} package has been loaded, \sty{tracklang}
+effectively does:
+\begin{compactcodebox}
+\gls{TrackPredefinedDialect}\marg{\opt{ngerman}}
+\end{compactcodebox}
+Similarly, if the \sty{german} package has been loaded,
+\sty{tracklang} effectively does
+\begin{compactcodebox}
+\gls{TrackPredefinedDialect}\marg{\opt{german}}
+\end{compactcodebox}
+
+If any document class or package options are passed to
+\sty{tracklang}, then \sty{tracklang} won't bother checking
+for \sty{babel}, \sty{translator}, \sty{ngerman}, \sty{german} or
+\sty{polyglossia}. So, if the above example is changed to:
+\begin{codebox}
+\cmd{documentclass}[\opt{british}]\marg{article}
+\cmd{usepackage}\marg{translator}
+\cmd{usepackage}\marg{tracklang}
+\end{codebox}
+then the dialect list will just consist of \qt{\opt{british}} rather than
+\qt{\opt{english},\opt{british}}. This does, however, mean that if the user mixes
+class and package options, only the class options will be detected.
+For example:
+\begin{codebox}
+\cmd{documentclass}[\opt{british}]\marg{article}
+\cmd{usepackage}[\opt{french}]\marg{babel}
+\cmd{usepackage}\marg{tracklang}
+\end{codebox}
+In this case, only the \opt{british} option will be detected. The user
+can therefore use the document class option (or \sty{tracklang}
+package option) to override the dialect and set the country code
+(where provided). For example:
+\begin{codebox}
+\cmd{documentclass}[\opt{es-MX}]\marg{article}
+\cmd{usepackage}[\opt{spanish}]\marg{babel}
+\cmd{usepackage}\marg{tracklang}
+\end{codebox}
+This sets the dialect to \opt{mexicanspanish} and the root language to
+\opt{spanish}.
+
+Predefined dialects are listed in \refoptstables. These may be
+passed in the document class options or
+used in \gls{TrackPredefinedDialect}, as illustrated above.
+
+\Sectionref{sec:summary} provides brief examples of use for those
+who want a general overview before reading the more detailed
+sections.
+\Sectionref{sec:generic} describes generic commands for
+identifying the document languages.
+\Sectionref{sec:user} is for package writers who want to
+add multilingual support to their package and need to know which
+settings the user has requested through language packages like
+\sty{babel}. \Sectionref{sec:langsty} is for
+developers of language definition packages who want to help other
+package writers to detect what languages have been requested.
+
+\printunsrttable
+[
+ type=index,
+ block-style=name-other,
+ other=dialect,
+ toctitle={Predefined ISO Language-Region Dialects},
+ title={Predefined \idx+{ISO} Language-Region Dialects. (\idx{ISO} tag or
+ dialect label may be used as a
+ package option or with \gls{TrackPredefinedDialect})},
+ label={tab:isoopts},
+ postamble={Other combinations need to be set with \gls{TrackLocale}
+ or \gls{TrackLanguageTag}},
+ init={%
+ \renewcommand{\glstableNameTarget}[1]{\inlineglsdef[optdef]{##1}}%
+ \let\glstableOtherFmt\optfmt
+ \renewcommand{\glstablenameheader}{ISO Tag}%
+ \renewcommand{\glstableotherheader}{Dialect Label}%
+ \renewcommand{\glstableiffilter}[3]{\glsifcategory{##1}{isolangregion}{##3}{##2}}%
+ }
+]
+
+\printunsrttable
+[
+ type=index,
+ header=false,rules=false,blocksep={},clearpage,
+ block-style=name,blocks=3,
+ other=isotag,
+ toctitle={Predefined Root Languages},
+ title={Predefined Root Languages. (\fnregion Has an associated
+ territory.) The corresponding tag obtained with
+ \code{\gls{GetTrackedLanguageTag}\margm{dialect}} is shown in
+ parentheses},
+ label={tab:rootlangopts},
+ init={\let\glstableOtherFmt\optfmt
+ \renewcommand{\glstableNameTarget}[1]{\inlineglsdef[optdef]{##1}}%
+ \renewcommand{\glstableiffilter}[3]{\glsifcategory{##1}{rootlang}{##3}{##2}}%
+ }
+]
+
+\printunsrttable
+[
+ type=index,
+ block-style=name,rules=false,header=false,blocksep={},clearpage,
+ other=tags,par=ragged,
+ toctitle={Predefined Non-ISO Dialects},
+ title={Predefined Non-ISO Dialects. (\fnregion Has an
+ associated territory.) The corresponding
+language tag obtained with
+\code{\gls{GetTrackedLanguageTag}\margm{dialect}}
+is shown in parentheses. If the dialect has a corresponding mapping
+for the closest matching non-root language \gls{captionsdialect} or
+\gls{datedialect}, this is also included after the tag following a
+slash.},
+ label={tab:nonisoopts},
+ init={%
+ \renewcommand{\glstableiffilter}[3]{\glsifcategory{##1}{noniso}{##3}{##2}}%
+ \renewcommand{\glstableNameTarget}[1]{\inlineglsdef[optdef]{##1}}%
+ }
+]
+
+\chapter{Summary of Use}
+\label{sec:summary}
+
+There are three levels of use:
+\begin{enumerate}
+\item document level (code used by document authors);
+
+\item locale-sensitive package level
+(code for package authors who need to
+know what languages or locale the document is
+using, such as \sty{glossaries} to translate commands like
+\cmd{descriptionname} or \sty{datetime2} to provide localised
+formats or time zone information);
+
+\item language set-up level (code for packages that set up
+the document languages, such as \sty{babel} or \sty{polyglossia}).
+\end{enumerate}
+
+\section{Document Level}
+\label{sec:summary-doc}
+
+Document level use can be divided into generic \TeX\ use
+(\sectionref{sec:tex}) and \LaTeX-specific use (\sectionref{sec:latex}).
+
+\subsection{Generic \texorpdfstring{\TeX}{TeX}}
+\label{sec:tex}
+
+This section is for generic \TeX\ use. The \sty+{tracklang} files are
+loaded with \gls{input}. See \sectionref{sec:latex} for \LaTeX\ use.
+
+A Unix-like user wants the locale information picked up from the
+locale environment variable (the \ext+{tex} extension may be omitted):
+\begin{codebox*}
+\gls{input} \file{tracklang.tex} \comment{v1.3}
+\gls{TrackLangFromEnv}
+\comment{load packages that use tracklang for localisation}
+\end{codebox*}
+
+A Windows user wants the locale information picked up from the
+operating system (again the \ext{tex} extension may be omitted):
+\begin{codebox*}
+\gls{input} \file{texosquery.tex}
+\gls{input} \file{tracklang.tex} \comment{v1.3}
+\gls{TrackLangFromEnv}
+\comment{load packages that use tracklang for localisation}
+\end{codebox*}
+Or (\sty{texosquery} v1.2)
+\begin{codebox*}
+\gls{input} \file{texosquery.tex} \comment{v1.2}
+\gls{input} \file{tracklang.tex} \comment{v1.3}
+\codepar
+\gls{TeXOSQueryLangTag}\marg{\cmd{langtag}}
+\gls{TrackLanguageTag}\marg{\cmd{langtag}}
+\comment{load packages that use tracklang for localisation}
+\end{codebox*}
+A Unix-like user who may or may not have \app{texosquery} setup to run in the
+\idx{shellescape}:
+\begin{codebox*}
+\gls{input} \file{texosquery.tex}
+\gls{input} \file{tracklang.tex} \comment{v1.3}
+\codepar
+\cmd{ifx}\gls{TeXOSQueryLangTag}\cmd{undefined}
+ \gls{TrackLangFromEnv}
+\cmd{else}
+ \gls{TeXOSQueryLangTag}\marg{\cmd{langtag}}
+ \gls{TrackLanguageTag}\marg{\cmd{langtag}}
+\cmd{fi}
+\comment{load packages that use tracklang for localisation}
+\end{codebox*}
+
+A user is writing in Italy in Armenian with a Latin
+\idx{script} (\opt{Latn}) and the arevela \idx{variant}:
+\begin{codebox*}
+\gls{input} \file{tracklang.tex} \comment{v1.3}
+\gls{TrackLanguageTag}\marg{hy-Latn-IT-arevela}
+\comment{load packages that use tracklang for localisation}
+\end{codebox*}
+
+A user is writing in English in the UK:
+\begin{codebox*}
+\gls{input} \file{tracklang.tex}
+\gls{TrackPredefinedDialect}\marg{british}
+\comment{load packages that use tracklang for localisation}
+\end{codebox*}
+
+Find out information about the current language (supplied
+in \gls{languagename}):
+\begin{codebox*}
+\gls{SetCurrentTrackedDialect}\marg{\gls{languagename}}
+Dialect: \gls{CurrentTrackedDialect}.
+Language: \gls{CurrentTrackedLanguage}.
+ISO Code: \gls{CurrentTrackedIsoCode}.
+Region: \gls{CurrentTrackedRegion}.
+Modifier: \gls{CurrentTrackedDialectModifier}.
+Variant: \gls{CurrentTrackedDialectVariant}.
+Script: \gls{CurrentTrackedDialectScript}.
+Sub-Lang: \gls{CurrentTrackedDialectSubLang}.
+Additional: \gls{CurrentTrackedDialectAdditional}.
+Language Tag: \gls{CurrentTrackedLanguageTag}.
+\end{codebox*}
+Additional information about the \idx{script} can be obtained by
+also loading \sty{tracklang-scripts}:
+\begin{codebox*}
+\gls{input} \file{tracklang-scripts.tex}
+\end{codebox*}
+The name, numeric code and direction can now be obtained:
+\begin{codebox*}
+Name: \gls{TrackLangScriptAlphaToName}\marg{\gls{CurrentTrackedDialectScript}}.
+Numeric:
+\gls{TrackLangScriptAlphaToNumeric}\marg{\gls{CurrentTrackedDialectScript}}.
+Direction:
+\gls{TrackLangScriptAlphaToDir}\marg{\gls{CurrentTrackedDialectScript}}.
+\end{codebox*}
+Test for a specific \idx{script} (in this case \opt{Latn}):
+\begin{codebox*}
+Latin?
+\cmd{ifx}\gls{CurrentTrackedDialectScript}\tklscript{Latn}
+ Yes
+\cmd{else}
+ No
+\cmd{fi}
+\end{codebox*}
+
+\subsection{\texorpdfstring{\LaTeX}{LaTeX}}
+\label{sec:latex}
+
+This section is for \LaTeX\ use. See \sectionref{sec:tex} for generic \TeX\ use.
+
+With newer versions of \sty{polyglossia}, where \gls{xpg@bcp@loaded}
+is defined, you just need to make sure the languages are set before
+\sty{tracklang} is loaded:
+\begin{codebox*}
+\cmd{documentclass}\marg{article}
+\cmd{usepackage}\marg{polyglossia}
+\cmd{setmainlanguage}[variant=uk]\marg{english}
+\comment{load packages that use tracklang for localisation}
+\end{codebox*}
+For older versions of \sty{polyglossia} where the regional
+information is required, use recognised class options:
+\begin{codebox*}
+\cmd{documentclass}[\opt{en-GB}]\marg{article}
+\cmd{usepackage}\marg{polyglossia}
+\cmd{setmainlanguage}[variant=uk]\marg{english}
+\comment{load packages that use tracklang for localisation}
+\end{codebox*}
+
+For \sty{babel} users where the supplied \sty{babel} dialect
+label is sufficient, and is passed either through the document class
+or package options, there's no need to do anything special:
+\begin{codebox*}
+\cmd{documentclass}[\opt{british},\opt{canadien}]\marg{article}
+\cmd{usepackage}[T1]\marg{fontenc}
+\cmd{usepackage}\marg{babel}
+\comment{load packages that use tracklang for localisation}
+\end{codebox*}
+If the region is important but there's no \sty{babel} dialect that
+represents it, there are several options.
+The first method is to use the class options recognised by \sty{tracklang}
+and the root language labels when loading \sty{babel}:
+\begin{codebox*}
+\cmd{documentclass}[\opt{en-IE},\opt{ga-IE}]\marg{article}
+\cmd{usepackage}[english,irish]\marg{babel}
+\comment{load packages that use tracklang for localisation}
+\end{codebox*}
+
+Another method with \sty{babel} is to use \gls{TrackLanguageTag} and map the new
+dialect label to the nearest matching \gls{captionsdialect}:
+\begin{codebox*}
+\cmd{documentclass}\marg{article}
+\codepar
+\cmd{usepackage}\marg{tracklang}\comment{v1.3}
+\gls{TrackLanguageTag}\marg{\opt{en-MT}}
+\gls{SetTrackedDialectLabelMap}\marg{\gls{TrackLangLastTrackedDialect}}\marg{\opt{UKenglish}}
+\codepar
+\cmd{usepackage}[UKenglish]\marg{babel}
+\comment{load packages that use tracklang for localisation}
+\end{codebox*}
+This ensures that the \tklcaptions{UKenglish} hook is detected
+by the localisation packages. This mapping isn't needed
+for \sty{polyglossia} as the caption hooks use the root language
+label. This mapping also isn't needed if \opt{british} is used
+instead of \opt{UKenglish} since the \opt{en-MT}
+(\opt{maltaenglish})
+predefined dialect automatically sets up a mapping to
+\opt{british}. (The default mappings are shown in
+\tableref{tab:nonisoopts}.)
+
+There's no support for \gls{babelprovide}. If you are using
+\gls{babelprovide}, you will need to use the class option or
+\gls{TrackLanguageTag} as above.
+
+\section{Locale-Sensitive Packages}
+\label{sec:summary-localepkg}
+
+Let's suppose you are developing a package called
+\filefmt{mypackage.sty} or \filefmt{mypackage.tex} and you want
+to find out what languages the document author has requested. (See also:
+\dickimawhref{latex/tracklang/otherpkg.shtml}{Using
+\filefmt{tracklang.tex} in Packages with Localisation Features}.)
+
+Generic \TeX\ use (the \ext{tex} extension may be omitted):
+\begin{codebox*}
+\gls{input} \file{tracklang.tex}
+\end{codebox*}
+(Most of the commands used in this section require at least
+\sty{tracklang} version 1.3 but 1.4 is better if you want to
+include the \idx{script} tag in the \ext+{ldf} files.)
+Note that \file{tracklang.tex} has a check to determine if
+it's already been loaded, so you don't need to worry about that.
+
+\LaTeX\ use:
+\begin{codebox*}
+\gls{RequirePackage}\marg{tracklang}[2019/11/30]\comment{at least v1.4}
+\end{codebox*}
+This will picked up any language options supplied in the document
+class options and will also detect if \sty{babel} or
+\sty{polyglossia} have been loaded.
+
+(\LaTeX) If you want to allow the user to set the locale in the
+package options:
+\begin{codebox*}
+\gls{DeclareOption}*\marg{\gls{TrackLanguageTag}\marg{\cmd{CurrentOption}}}
+\end{codebox*}
+This means the user can do, say,
+\begin{codebox}
+\cmd{usepackage}[hy-Latn-IT-arevela]\marg{mypackage}
+\end{codebox}
+With at least version 1.4, it's better to use \gls{TrackIfKnownLanguage}:
+\begin{codebox}
+\gls{DeclareOption}*\marg{\comment{}
+ \gls{TrackIfKnownLanguage}\marg{\cmd{CurrentOption}}\comment{}
+ \marg{\comment{successful}
+ \cmd{PackageInfo}\marg{mypackage}\marg{Tracking language `\cmd{CurrentOption}'}\comment{}
+ }\comment{}
+ \marg{\comment{failed}
+ \cmd{PackageError}\marg{mypackage}\comment{}
+ \marg{Unknown language specification `\cmd{CurrentOption}'}\comment{}
+ \marg{You need to supply either a known dialect label
+ or a valid language tag}\comment{}
+ }\comment{}
+}
+\end{codebox}
+
+\begin{information}
+The rest of the example package in this section uses generic code.
+If you are using \LaTeX, it's better to replace \cmd{def} and
+\cmd{ifx} with more appropriate \LaTeX\ commands.
+\end{information}
+
+If you want to fetch the locale information from the operating
+system when the user hasn't requested a language:
+\begin{codebox*}
+\gls{AnyTrackedLanguages}
+\marg{}
+\marg{\comment{fetch locale information from the operating system}
+ \cmd{ifx}\gls{TeXOSQueryLangTag}\cmd{undefined}
+ \comment{texosquery v1.2 not available}
+ \gls{TrackLangFromEnv}
+ \cmd{else}
+ \comment{texosquery v1.2 available}
+ \gls{TeXOSQueryLangTag}\marg{\cmd{langtag}}
+ \gls{TrackLanguageTag}\marg{\cmd{langtag}}
+ \cmd{fi}
+}
+\end{codebox*}
+
+Set up the defaults if necessary:
+\begin{codebox}
+\cmd{def}\cmd{fooname}\marg{Foo}
+\cmd{def}\cmd{barname}\marg{Bar}
+\end{codebox}
+
+Now load the resource files:
+\begin{codebox*}
+\gls{AnyTrackedLanguages}
+\marg{\comment{}
+ \gls{ForEachTrackedDialect}\marg{\cmd{thisdialect}}\marg{\comment{}
+ \gls{TrackLangRequireDialect}\marg{mypackage}\marg{\cmd{thisdialect}}\comment{}
+ }\comment{}
+}
+\marg{}\comment{no tracked languages, default already set up}
+\end{codebox*}
+
+Each resource file has the naming scheme \file{prefix-localeid.ldf}\glsadd{ext.ldf}.
+In this example, the \meta{prefix} is \filefmt{mypackage}. The
+\meta{localeid} part may be the language or dialect label (for
+example, \opt{english} or \opt{british}) or a combination of the
+\idx{ISO} language and region codes (for example, \opt{en-GB} or
+\iso{english} or \optfmt{GB}). As from version 1.4, \meta{localeid}
+may also include the \idx{script} or \idx{variant}. (See the definition of
+\gls{IfTrackedLanguageFileExists} \pref{pg:filesearch} for further
+details.)
+
+The simplest scheme is to use the root language label (not the
+dialect label) for the base language settings and use the \idx+{ISO}
+codes for regional support.
+
+For example, the file \ldf{mypackage}{english}:
+\begin{codebox*}
+\comment{identify this file:}
+\gls{TrackLangProvidesResource}\marg{english}[2016/10/06 v1.0]
+\codepar
+\gls{TrackLangAddToCaptions}\marg{\comment{}
+ \cmd{def}\cmd{fooname}\marg{Foo}\comment{}
+ \cmd{def}\cmd{barname}\marg{Bar}\comment{}
+}
+\end{codebox*}
+This sets up appropriate the \gls{captionsdialect} hook (if it's
+found). For other hooks, such as \gls{datedialect}, use
+\gls{TrackLangAddToHook} or \gls{TrackLangRedefHook} instead.
+
+With pre-v1.4 versions of \sty{tracklang}, the \idx{script} isn't included
+in the file search. If it's needed then either require at least v1.4
+or have a base \ext{ldf} file that tries to load a version for the
+particular \idx{script} (which can be accessed with
+\gls{CurrentTrackedDialectScript}).
+Here's an example for a language with different writing systems.
+The resource file for Serbian \ldf{mypackage}{serbian}:
+\begin{codebox*}
+\comment{identify file:}
+\gls{TrackLangProvidesResource}\marg{serbian}[2016/10/06 v1.0]
+\codepar
+\gls{TrackLangRequestResource}\marg{serbian-\gls{CurrentTrackedDialectScript}}
+\marg{}\comment{file not found, do something sensible here}
+\end{codebox*}
+The file \ldf{mypackage}{serbian-Latn} sets up
+the Latin \idx{script} (\opt{Latn}):
+\begin{codebox*}
+\gls{TrackLangProvidesResource}\marg{serbian-Latn}[2016/10/06 v1.0]
+\codepar
+\gls{TrackLangAddToCaptions}\marg{\comment{}
+ \cmd{def}\cmd{fooname}\marg{...}\comment{provide appropriate Latin translations}
+ \cmd{def}\cmd{barname}\marg{...}\comment{}
+}
+\end{codebox*}
+The file \ldf{mypackage}{serbian-Cyrl} sets up
+the Cyrillic \idx{script} (\opt{Cyrl}):
+\begin{codebox*}
+\gls{TrackLangProvidesResource}\marg{serbian-Cyrl}[2016/10/06 v1.0]
+\codepar
+\gls{TrackLangAddToCaptions}\marg{\comment{}
+ \cmd{def}\cmd{fooname}\marg{...}\comment{provide appropriate Cyrillic translations}
+ \cmd{def}\cmd{barname}\marg{...}\comment{}
+}
+\end{codebox*}
+With v1.4+ you just need \ldf{mypackage}{sr-Latn} and
+\ldf{mypackage}{sr-Cyrl} for the regionless versions.
+
+\section{Language Packages}
+\label{sec:summary-langpkg}
+
+Let's suppose now you're the developer of a package that
+sets up the language, hyphenation patterns and so on.
+It would be really helpful to the locale-sensitive packages
+in \sectionref{sec:summary-localepkg} to know what languages
+the document author has requested. You can use the
+\sty{tracklang} package to identify this information
+by tracking the requested localisation, so that other packages
+can have a consistent way of querying it. (See also:
+\dickimawhref{latex/tracklang/langpkg.shtml}{Integrating
+\filefmt{tracklang.tex} into Language Packages}.)
+
+Generic use:
+\begin{codebox}
+\gls{input} tracklang
+\end{codebox}
+Alternative \LaTeX\ use:
+\begin{codebox}
+\gls{RequirePackage}\marg{tracklang}[2019/11/30]\comment{v1.4}
+\end{codebox}
+Unlike \gls{input}, \gls{RequirePackage} will allow \sty{tracklang}
+to pick up the document class options, but using \gls{RequirePackage}
+will also trigger the tests for known language packages.
+(If you want to find out if \sty{tracklang} has already been
+loaded and locales have already been tracked, you can use the
+same code as in the previous section.)
+
+When a user requests a particular language through your package,
+the simplest way of letting \sty{tracklang} know about it
+is to use \gls{TrackPredefinedDialect} or \gls{TrackLanguageTag}.
+For example, if the user requests \opt{british}, that's a
+predefined dialect so you can just do:
+\begin{codebox}
+\gls{TrackPredefinedDialect}\marg{\opt{british}}
+\end{codebox}
+Alternatively
+\begin{codebox}
+\gls{TrackLanguageTag}\marg{\opt{en-GB}}
+\end{codebox}
+If your package uses caption hooks, then you can set up
+a mapping between \sty{tracklang}'s internal dialect label
+and your caption label. For example, let's suppose the
+closest match to English used in Malta (\opt{en-MT}) is the
+dialect \opt{UKenglish} (for example, the date format is
+similar between GB and MT):
+\begin{codebox}
+\gls{TrackLanguageTag}\marg{\opt{en-MT}}
+\gls{SetTrackedDialectLabelMap}\marg{\gls{TrackLangLastTrackedDialect}}\marg{\opt{UKenglish}}
+\cmd{def}\tklcaptions{UKenglish}\marg{\comment{}
+ \cmd{def}\cmd{contentsname}\marg{Contents}\comment{}
+ \comment{...}
+}
+\end{codebox}
+(The predefined \opt{maltaenglish} option provided by
+\sty{tracklang} automatically sets the mapping to
+\opt{british}, but the above method will change that mapping
+to \opt{UKenglish}.)
+
+This now means that \gls{TrackLangAddToHook} and \gls{TrackLangRedefHook} commands can
+find your language hooks. You don't need the map if your dialect
+label is the same as \sty{tracklang}'s root language label
+for that locale. For example:
+\begin{codebox}
+\gls{TrackLanguageTag}\marg{\opt{en-MT}}
+\cmd{def}\tklcaptions{english}\marg{\comment{}
+ \cmd{def}\cmd{contentsname}\marg{Contents}\comment{}
+ \comment{...}
+}
+\end{codebox}
+
+When the user switches language through commands like
+\gls{selectlanguage} it would be useful to also use
+\code{\gls{SetCurrentTrackedDialect}\margm{dialect}} to make it easier
+for the document author or locale-sensitive packages to pick
+up the current locale. The \meta{dialect} argument may be
+\sty{tracklang}'s internal dialect label or the dialect
+label you assigned with \gls{SetTrackedDialectLabelMap}. It
+may also be the root language label, in which case
+\sty{tracklang} will search for the last dialect to be
+tracked with that language. For example:
+\begin{codebox}
+\cmd{def}\gls{selectlanguage}\#1\marg{\comment{}
+ \gls{SetCurrentTrackedDialect}\marg{\#1}\comment{}
+ \comment{set up hyphenation patterns etc}
+}
+\end{codebox}
+See the example in \sectionref{sec:summary-doc} or the example in
+\dickimawhref{latex/tracklang/langpkg.shtml}{Integrating
+\filefmt{tracklang.tex} into Language Packages}.
+
+\chapter{Generic Use}
+\label{sec:generic}
+
+For plain \TeX\ you can input \file{tracklang.tex}:
+\begin{codebox}
+\gls{input} tracklang
+\end{codebox}
+or for \TeX\ formats that have an argument form for \gls{input}:
+\begin{codebox}
+\gls{input}\marg{tracklang}
+\end{codebox}
+As from version 1.3, you don't need to change the category
+code of \idx{atletter} before loading \file{tracklang.tex}
+as it will automatically be changed to 11 and switched
+back at the end (if required).
+
+The \LaTeX\ package \file{tracklang.sty}
+inputs the generic \TeX\ code in \file{tracklang.tex}, but before
+it does so it defines
+\cmddef{@tracklang@declareoption}
+to
+\begin{compactcodebox*}
+\gls{DeclareOption}\margm{dialect}\marg{\gls{TrackPredefinedDialect}\margm{dialect}}
+\end{compactcodebox*}
+If \gls{@tracklang@declareoption} isn't defined when
+\file{tracklang.tex} is input, it will be defined to ignore its
+argument.
+
+This means that all the predefined languages and dialects
+(\refoptstables) automatically become package options, so
+the \file{tracklang.sty} package can pick up document class
+options and add them to \sty{tracklang}'s internal list of tracked
+document languages.
+
+If you're not using \LaTeX, this option isn't available
+although you can redefine
+\gls{@tracklang@declareoption}
+to use something analogous to \gls{DeclareOption}, if appropriate.
+Otherwise, the document languages need
+to be explicitly identified (using any of the following commands)
+so that \sty{tracklang} knows about them.
+
+\cmddef{TrackPredefinedDialect}
+This will add the predefined dialect and its associated \idx{ISO} codes to the list
+of tracked document languages. The \meta{dialect label} may be any
+of those listed in \refoptstables.
+
+For example:
+\begin{codebox}
+\gls{input} tracklang
+\gls{TrackPredefinedDialect}\marg{\opt{british}}
+\end{codebox}
+is the Plain \TeX\ alternative to:
+\begin{codebox}
+\cmd{documentclass}[\opt{british}]\marg{article}
+\cmd{usepackage}\marg{tracklang}
+\end{codebox}
+
+Note that it's impractical to define every possible language
+and region combination as it would significantly slow the
+time taken to load \sty{tracklang} so, after version~1.3,
+I don't intend adding any new predefined dialects. As from version
+1.3, if you want to track a dialect that's not predefined by
+\sty{tracklang}, then you can use:
+\cmddef{TrackLocale}
+If \meta{locale} is a recognised dialect, this is equivalent to
+using \gls{TrackPredefinedDialect}, otherwise \meta{locale}
+needs to be in one the following formats:
+\begin{itemize}
+\item \meta{\idx{ISO} lang}
+\item \meta{\idx{ISO} lang}\idx{atmod}\meta{modifier}
+\item \meta{\idx{ISO} lang}\idx{hyphensep}\meta{\idx{ISO} country}
+\item \meta{\idx{ISO} lang}\idx{hyphensep}\meta{\idx{ISO} country}\idx{atmod}\meta{modifier}
+\end{itemize}
+where \meta{\idx{ISO} lang} is the \idxn{639-1} or \idx{639-2} code identifying
+the language (lower case), \meta{\idx{ISO} country} is the \idx{3166-1}
+\idx{ISO} code identifying the \idx{territory} (upper case) and
+\meta{modifier} is the \idx{modifier} or \idx{variant}. The hyphen
+(\idx{hyphensep}) may be replaced by an underscore character
+(\idx{underscoresep}). \Idx{code-set} information in the
+form \code{\idx{dotsep}\meta{codeset}} may optionally appear before the
+\idx{modifier}. For example,
+\code{de\idx{hyphensep}DE\idx{dotsep}utf8\idx{atmod}new} (\idx{modifier} is
+\optfmt{new}) or \code{en\idx{hyphensep}GB\idx{dotsep}utf8} (\idx{modifier} is missing).
+The \idx{code-set} will be ignored if present, but it won't interfere
+with the parsing.
+
+For example:
+\begin{codebox}
+\gls{TrackLocale}\marg{de\idx{hyphensep}NA\idx{atmod}new}
+\end{codebox}
+indicates German in Namibia using the new spelling.
+
+\begin{important}
+If a language has different \idxn{639-2T} and \idx{639-2B} codes, then
+the \qt{T} form should be used. (So for the above example,
+\code{deu} may be used instead of \code{de}, but \code{ger}
+won't be recognised.)
+\end{important}
+
+Alternatively, you can use
+\cmddef{TrackLanguageTag}
+where \meta{tag} is a regular, well-formed language tag or a recognised dialect
+label. (Irregular grandfather tags aren't recognised.)
+This command will fully expand \meta{tag}.
+A warning is issued if the tag is empty.
+
+If you want to first check that \meta{tag} includes a valid language
+code, then you can instead use:
+\cmddef{TrackIfKnownLanguage}
+This will only track \meta{tag} (and then do \meta{success code}) if
+\meta{tag} starts with a valid language code (or is a predefined
+dialect) otherwise it will do \meta{fail code}. Both
+\gls{TrackLanguageTag} and \gls{TrackIfKnownLanguage} will check if
+\meta{tag} is a predefined option. (This saves parsing the tag if
+it's recognised.)
+
+For example:
+\begin{codebox}
+\gls{TrackLanguageTag}\marg{hy-Latn-IT-arevela}
+Latn-ME: \gls{TrackIfKnownLanguage}\marg{Latn-ME}\marg{success}\marg{fail}.
+brazilian: \gls{TrackIfKnownLanguage}\marg{brazilian}\marg{success}\marg{fail}.
+\end{codebox}
+This will track \optfmt{hy-Latn-IT-arevela} and \opt{brazilian}
+(\optfmt{pt-BR}) but not \optfmt{Latn-ME} (because it doesn't contain a
+valid language code) even though it's a valid \idx{script} and country
+code. The above is just for illustrative purposes. Typically the
+language tracking isn't performed within the document text.
+
+The \sty{datetime2} package assumes that any unknown package option is a
+language identifier. It could simply do:
+\begin{compactcodebox}
+\gls{TrackLanguageTag}\marg{\cmd{CurrentOption}}
+\end{compactcodebox}
+but users can make mistakes sometimes and this won't provide any
+helpful information if they, for example, misspelt a package option
+or forgot the \qt{\meta{key}=} part of a \keyval\
+setting. Instead (as from v1.5.5) \sty{datetime2} now does:
+\begin{compactcodebox}
+\gls{TrackIfKnownLanguage}\marg{\cmd{CurrentOption}}
+\marg{...}\comment{known language}
+\marg{\cmd{PackageError}\marg{...}\marg{...}\marg{...}}
+\end{compactcodebox}
+This will now give the user some guidance.
+
+If \meta{tag} contains a sub-language tag, this will be set
+as the \idx{639-3} code for the \emph{dialect} label. Note that this is
+different to the root language codes which are set using the
+language label. For example:
+\begin{codebox}
+\gls{TrackLanguageTag}\marg{zh-cmn-Hans-CN}
+\end{codebox}
+creates a new dialect with the label \code{zh\-cmn\-Hans\-CN}.
+The root language \opt{chinese} has the \idx{639-1} code
+\optfmt{zh} and the dialect \code{zh\-cmn\-Hans\-CN} has the
+\idxn{639-3} code \optfmt{cmn}.
+\begin{codebox}
+ISO 639-1: \gls{TrackedIsoCodeFromLanguage}\marg{639-1}\marg{chinese}.
+ISO 639-3: \gls{TrackedIsoCodeFromLanguage}\marg{639-3}\marg{zhcmnHansCN}.
+\end{codebox}
+
+Version 1.2 of \sty{texosquery} provides the command \gls{TeXOSQueryLangTag},
+which may be used to fetch the operating system's regional
+information as a language tag. These commands can be used as
+follows:
+\begin{codebox}
+\gls{input} tracklang \comment{v1.3}
+\gls{input} texosquery \comment{v1.2}
+\codepar
+\gls{TeXOSQueryLangTag}\marg{\cmd{langtag}}
+\gls{TrackLanguageTag}\marg{\cmd{langtag}}
+\end{codebox}
+(If the \idx{shellescape} is disabled, \cmd{langtag} will be empty, which
+will trigger a~warning but no errors.)
+
+Some of the predefined root language options listed
+in \tableref{tab:rootlangopts} have an associated region
+(denoted by \fnregion).
+If \gls{TrackLocale} is used with just the language \idx{ISO} code,
+no region is tracked for that language. For example
+\begin{codebox}
+\gls{TrackLocale}\marg{\opt{manx}}
+\end{codebox}
+will track the \optfmt{IM} (Isle of Man) \idxn{3166-1} code but
+\begin{codebox}
+\gls{TrackLocale}\marg{gv}
+\end{codebox}
+won't track the region.
+Similarly for \gls{TrackLanguageTag}.
+
+(New to version 1.3.)
+There's a similar command to \gls{TrackLocale} that doesn't take an argument:
+\cmddef{TrackLangFromEnv}
+If the \idx{shellescape} has been enabled or \gls{directlua} is
+available, this will try to get the language information from the
+system environment variables \envvar{LCALL} or \envvar{LANG} and, if
+successful, track that.
+
+Since \sty{tracklang} is neither able to look up the \idx{POSIX} locale
+tables nor interpret file locales, if the result is \code{C} or
+\code{POSIX} or starts with a forward slash \code{/} then
+the locale value is treated as empty.
+
+\begin{important}
+Not all operating systems use environment variables for
+the system locale information. For example, Windows stores the
+locale information in the registry. In which case, consider
+using \sty{texosquery}.
+\end{important}
+
+If the operating system locale can't be obtained from environment variables, then
+\sty{tracklang} will use \gls{TeXOSQueryLocale} as a fallback if
+\sty{texosquery} has been loaded. Since \sty{texosquery} requires
+both the \idx{shellescape} and the Java runtime environment,
+\sty{tracklang} doesn't automatically load it.
+
+Plain \TeX\ example:
+\begin{codebox}
+\gls{input} texosquery
+\gls{input} tracklang
+\gls{TrackLangFromEnv}
+\end{codebox}
+Document build:
+\begin{terminal}
+\app{etex} \switch{shell-escape} \meta{filename}
+\end{terminal}
+
+\LaTeX\ example:
+\begin{codebox}
+\cmd{usepackage}\marg{texosquery}
+\cmd{usepackage}\marg{tracklang}
+\gls{TrackLangFromEnv}
+\end{codebox}
+Document build:
+\begin{terminal}
+\app{pdflatex} \switch{shell-escape} \meta{filename}
+\end{terminal}
+
+If the locale can't be determined, there will be warning messages.
+These can be suppressed using
+\cmddef{TrackLangShowWarningsfalse}
+or switched back on again using
+\cmddef{TrackLangShowWarningstrue}
+
+For example, I have the environment variable \envvar{LANG} set to
+\code{en\idx{underscoresep}GB\idx{dotsep}utf8} on my Linux system so instead of
+\begin{codebox}
+\gls{TrackPredefinedDialect}\marg{\opt{british}}
+\end{codebox}
+I can use
+\begin{codebox}
+\gls{TrackLangFromEnv}
+\end{codebox}
+
+With \LaTeX\ documents I can do
+\begin{codebox}
+\cmd{documentclass}\marg{article}
+\cmd{usepackage}\marg{tracklang}
+\gls{TrackLangFromEnv}
+\end{codebox}
+However, this only helps subsequently loaded packages that
+use \sty{tracklang} to determine the required regional
+settings. For example:
+\begin{codebox}
+\cmd{documentclass}\marg{article}
+\cmd{usepackage}\marg{tracklang}
+\gls{TrackLangFromEnv}
+\cmd{usepackage}[useregional]\marg{datetime2}
+\end{codebox}
+In my case, with the \envvar{LANG} environment variable set to
+\code{en\idx{underscoresep}GB\idx{dotsep}utf8} and the
+\idx{shellescape} enabled, this automatically switches on the
+\opt{en-GB} date style.
+Naturally this doesn't help locale-sensitive packages that don't use
+\sty{tracklang}.
+
+The \gls{TrackLangFromEnv} command also incidentally sets
+\gls{TrackLangEnv}
+to the value of the environment variable or empty if the
+query was unsuccessful (for example, the \idx{shellescape} is
+unavailable).
+
+If the command:
+\cmddef{TrackLangEnv}
+is already defined before \gls{TrackLangFromEnv} is used, then the
+environment variable won't be queried and the value of
+\gls{TrackLangEnv} will be parsed instead.
+
+\begin{important}
+The parser which splits the locale string into
+its component parts first tries splitting on the underscore
+\idx{underscoresep} with its usual category code~8, then tries splitting
+on a hyphen \idx{hyphensep} with category code~12, and then tries
+splitting on the underscore \idx{underscoresep} with category code~12.
+\end{important}
+
+For example:
+\begin{codebox}
+\cmd{def}\gls{TrackLangEnv}\marg{en-GB}
+\gls{TrackLangFromEnv}
+\end{codebox}
+This doesn't perform a \idx{shellescape} since \gls{TrackLangEnv}
+is already defined. In this case, you may just as well use:
+\begin{codebox}
+\gls{TrackLocale}\marg{en-GB}
+\end{codebox}
+(unless you happen to additionally require the component
+commands that are set by \gls{TrackLangFromEnv}, see below.)
+
+If the \idx{shellescape} is unavailable
+(for example, your \TeX\ installation prohibits it), you
+can set this value when you invoke \TeX. For example,
+if the document file is called \filefmt{myDoc.tex} (and it's
+in Plain \TeX):
+\begin{terminal}
+\app{tex} "\idx{escbsl}def\idx{escbsl}\glscsname{TrackLangEnv}\marg{\idx{dollarenv}\envvar{LANG}}\idx{escbsl}\glscsname{input} myDoc"
+\end{terminal}
+
+The \gls{TrackLangFromEnv} command also happens to store the
+component parts of the environment variable value in the
+following commands. (These aren't provided by \gls{TrackLocale}.)
+If the information is unavailable, the relevant commands will be set
+to empty.
+
+The language code is stored in:
+\cmddef{TrackLangEnvLang}
+
+The \idx{territory} (if present) is stored in:
+\cmddef{TrackLangEnvTerritory}
+
+The \idx{code-set} (if present) is stored in:
+\cmddef{TrackLangEnvCodeSet}
+
+The \idx{modifier} (if present) is stored in:
+\cmddef{TrackLangEnvModifier}
+
+If you want to query the language environment, but don't
+want to track the result, you can just use:
+\cmddef{TrackLangQueryEnv}
+This only tries to fetch the value of the
+language environment variable (and use \sty{texosquery} as
+a fallback, if it has been loaded). It doesn't try to parse the
+result. The result is stored in \gls{TrackLangEnv} (empty if
+unsuccessful). Unlike \gls{TrackLangFromEnv}, this doesn't check if
+\gls{TrackLangEnv} already exists. A warning will occur if the shell
+escape is unavailable. For systems that store the locale information in
+environment variables, this is more efficient than using
+\sty{texosquery}'s \gls{TeXOSQueryLocale} command (which is what's
+used as the fallback).
+
+The above queries \envvar{LCALL} and, if that is unsuccessful,
+then queries \envvar{LANG} (before optionally falling back on
+\sty{texosquery}). If you want another environment
+variable tried after \envvar{LCALL} and before \envvar{LANG},
+you can instead use:
+\cmddef{TrackLangQueryOtherEnv}
+For example, to also query \envvar{LCMONETARY}:
+\begin{codebox}
+\gls{TrackLangQueryOtherEnv}\marg{\envvar{LCMONETARY}}
+\end{codebox}
+
+Since this sets \gls{TrackLangEnv}, you can use it before
+\gls{TrackLangFromEnv}. For example:
+\begin{codebox}
+\gls{TrackLangQueryOtherEnv}\marg{\envvar{LCMONETARY}}
+\gls{TrackLangFromEnv}
+\end{codebox}
+Remember that if you only want to do the \idx{shellescape} if
+\gls{TrackLangEnv} hasn't already been defined, you can test for this
+first:
+\begin{codebox}
+\cmd{ifx}\gls{TrackLangEnv}\cmd{undefined}
+ \gls{TrackLangQueryOtherEnv}\marg{\envvar{LCMONETARY}}
+\cmd{fi}
+\gls{TrackLangFromEnv}
+\end{codebox}
+
+It's also possible to just parse the value of \gls{TrackLangEnv}
+without tracking the result using:
+\cmddef{TrackLangParseFromEnv}
+This is like \gls{TrackLangFromEnv} but assumes that
+\gls{TrackLangEnv} has already been set and doesn't track the
+result. The component parts are stored as for \gls{TrackLangFromEnv}.
+
+Example (Plain \TeX):
+\begin{codebox}
+\gls{input} tracklang
+\codepar
+\cmd{def}\gls{TrackLangEnv}\marg{fr\idx{hyphensep}BE\idx{dotsep}utf8\idx{atmod}euro}
+\codepar
+\gls{TrackLangParseFromEnv}
+\codepar
+Language: \gls{TrackLangEnvLang}.
+Territory: \gls{TrackLangEnvTerritory}.
+Codeset: \gls{TrackLangEnvCodeSet}.
+Modifier: \gls{TrackLangEnvModifier}.
+Any tracked languages? \gls{AnyTrackedLanguages}\marg{Yes}\marg{No}.
+\end{codebox}
+This produces:
+\begin{resultbox}
+Language: fr. Territory: BE. Codeset: utf8. Modifier: euro.
+Any tracked languages? No.
+\end{resultbox}
+
+Compare this with:
+\begin{codebox}
+\gls{input} tracklang
+\codepar
+\cmd{def}\gls{TrackLangEnv}\marg{fr\idx{hyphensep}BE\idx{dotsep}utf8\idx{atmod}euro}
+\codepar
+\gls{TrackLangFromEnv}
+\codepar
+Language: \gls{TrackLangEnvLang}.
+Territory: \gls{TrackLangEnvTerritory}.
+Codeset: \gls{TrackLangEnvCodeSet}.
+Modifier: \gls{TrackLangEnvModifier}.
+Any tracked languages? \gls{AnyTrackedLanguages}\marg{Yes}\marg{No}.
+Tracked dialect(s):\comment{}
+\gls{ForEachTrackedDialect}\marg{\cmd{thisdialect}}\marg{\cmd{space}\cmd{thisdialect}}.
+\end{codebox}
+This produces:
+
+\begin{resultbox}
+Language: fr. Territory: BE. Codeset: utf8. Modifier: euro.
+Any tracked languages? Yes.
+Tracked dialect(s): belgique.
+\end{resultbox}
+
+If \gls{TrackLangFromEnv} doesn't recognise the given language and
+territory combination, it will define a new dialect and add that.
+
+For example, \sty{tracklang} doesn't recognise \code{en-BE}, so
+the sample document below defines a new dialect labelled
+\code{enBEeuro}:
+\begin{codebox}
+\gls{input} tracklang
+\codepar
+\cmd{def}\gls{TrackLangEnv}\marg{en\idx{hyphensep}BE\idx{dotsep}utf8\idx{atmod}euro}
+\codepar
+\gls{TrackLangFromEnv}
+\codepar
+Language: \gls{TrackLangEnvLang}.
+Territory: \gls{TrackLangEnvTerritory}.
+Codeset: \gls{TrackLangEnvCodeSet}.
+Modifier: \gls{TrackLangEnvModifier}.
+Any tracked languages? \gls{AnyTrackedLanguages}\marg{Yes}\marg{No}.
+Tracked dialect(s):\comment{}
+\gls{ForEachTrackedDialect}\marg{\cmd{thisdialect}}\marg{\cmd{space}\cmd{thisdialect}}.
+\end{codebox}
+This now produces:
+\begin{resultbox}
+Language: en. Territory: BE. Codeset: utf8. Modifier: euro.
+Any tracked languages? Yes.
+Tracked dialect(s): enBEeuro.
+\end{resultbox}
+
+\chapter{Supplementary Packages}
+\label{sec:supplpkgs}
+
+In addition to the main \file{tracklang.tex} file and
+\file{tracklang.sty} \LaTeX\ wrapper, the \sty{tracklang} package
+also provides supplementary files for region and script mappings.
+
+\filedef{tracklang-region-codes.tex}
+This file is only loaded if a mapping is required between numeric
+and alphabetic \idx{region} codes. If \gls{TrackLanguageTag}
+encounters a numeric \idx{region} code, it will automatically input
+\file{tracklang-region-codes.tex}, if it hasn't already been input.
+This file provides the following commands.
+
+\cmddef{TrackLangAlphaIIToNumericRegion}
+Expands to the numeric code corresponding to the given alpha-2 code or
+empty if no mapping has been supplied.
+
+\cmddef{TrackLangNumericToAlphaIIRegion}
+Expands to the alpha-2 code corresponding to the given numeric code or
+empty if no mapping has been supplied.
+
+\cmddef{TrackLangIfKnownAlphaIIRegion}
+Expands to \meta{true} if there's an alpha-2 to numeric \idx{region}
+code mapping, otherwise expands to \meta{false}.
+
+\cmddef{TrackLangIfKnownNumericRegion}
+Expands to \meta{true} if there's a numeric to alpha-2 \idx{region}
+code mapping, otherwise expands to \meta{false}.
+
+\cmddef{TrackLangAlphaIIIToNumericRegion}
+Expands to the numeric code corresponding to the given alpha-3 code or
+empty if no mapping has been supplied.
+
+\cmddef{TrackLangNumericToAlphaIIIRegion}
+Expands to the alpha-3 code corresponding to the given numeric code or
+empty if no mapping has been supplied.
+
+\cmddef{TrackLangIfKnownAlphaIIIRegion}
+Expands to \meta{true} if there's an alpha-3 to numeric \idx{region}
+code mapping, otherwise expands to \meta{false}.
+
+Mappings are established with:
+\cmddef{TrackLangRegionMap}
+Predefined mappings are listed in \tableref{tab:regionmappings}.
+
+When \file{tracklang-region-codes.tex} is input, it can load
+additional files that provide supplementary mappings.
+
+\cmddef{TrackLangAddExtraRegionFile}
+This command adds the supplied \meta{file} to the list of extra
+region code files that should be input by
+\file{tracklang-region-codes.tex}, unless
+\file{tracklang-region-codes.tex} has already been input, in which
+case \meta{file} will be input straight away.
+
+\filedef{tracklang-scripts.tex}
+The \sty{tracklang-scripts} package provides information about
+\idxn{15924} scripts. The file isn't automatically loaded. If
+you want to use any of the commands provided in it you need to input
+it.
+
+Plain \TeX:
+\begin{codebox}
+\gls{input} tracklang-scripts
+\end{codebox}
+There's a simple wrapper package \file{tracklang-scripts.sty} for
+\LaTeX\ users:
+\begin{codebox}
+\cmd{usepackage}\marg{tracklang-scripts}
+\end{codebox}
+
+\cmddef{TrackLangScriptMap}
+Defines a mapping. The first argument is the four letter alpha code,
+such as \opt{Latn} or \opt{Cyrl}. The second argument is the numeric
+code. The third argument is the script's name, for example
+\qt{Imperial Aramaic}. The fourth argument is the direction, which
+may be one of: \optfmt{LR} (left-to-right), \optfmt{RL} (right-to-left),
+\optfmt{TB} (top-to-bottom), \optfmt{varies} or \optfmt{inherited}.
+The \meta{parent} argument is for the parent writing system, which
+may be left blank (currently unsupported).
+
+This command defines:
+\cmddef{TrackLangScriptCode}
+which expands to \meta{Code} for use with \gls{IfTrackedDialectIsScriptCs}.
+
+See \tableref{tab:scriptmappings} for a summary of all the mappings
+that are provided by the file \file{tracklang-scripts.tex}.
+
+\cmddef{TrackLangScriptAlphaToNumeric}
+Expands to the numeric code corresponding to the given alpha code or
+empty if no mapping.
+
+\cmddef{TrackLangScriptIfKnownAlpha}
+Expands to \meta{true} if there is a known alpha to numeric mapping
+or \meta{false} otherwise.
+
+\cmddef{TrackLangScriptNumericToAlpha}
+Expands to the alpha code corresponding to the given numeric code or
+empty if no mapping.
+
+\cmddef{TrackLangScriptIfKnownNumeric}
+Expands to \meta{true} if there is a known numeric to alpha mapping
+or \meta{false} otherwise.
+
+\cmddef{TrackLangScriptAlphaToName}
+Expands to the name corresponding to the given alpha code or
+empty if no mapping.
+
+\cmddef{TrackLangScriptAlphaToDir}
+Expands to the direction corresponding to the given alpha code or
+empty if no mapping.
+
+\cmddef{TrackLangScriptSetParent}
+Sets the parent for the given alpha code.
+
+\cmddef{TrackLangScriptGetParent}
+Expands to the parent for the given alpha code or empty if no
+mapping.
+
+\cmddef{TrackLangScriptIfHasParent}
+Expands to \meta{true} if the given alpha code has a parent
+or to \meta{false} otherwise. Note that if a parent is explicitly
+set to empty with \gls{TrackLangScriptSetParent} then it will be
+considered defined, but if the \meta{parent} argument was empty in
+\gls{TrackLangScriptMap}, then it will be undefined.
+
+\cmddef{TrackLangAddExtraScriptFile}
+This command adds \meta{file} to the list of extra script files that should
+be input by \file{tracklang-scripts.tex}, unless
+\file{tracklang-scripts.tex} has already been input, in which
+case \meta{file} will be input straight away.
+
+
+\chapter{Detecting the User's Requested Languages}
+\label{sec:user}
+
+The \sty{tracklang} package tries to track the loaded languages and
+the option names used to identify those languages. For want of a better
+term, the language option names are referred to as dialects even if
+they're only a synonym for the language rather than an actual
+dialect. For example, if the user
+has requested \opt{british}, the \emph{root language} label is
+\opt{english} and the dialect is \opt{british}, whereas if the
+user requested \opt{UKenglish}, the root language label is
+\opt{english} and the dialect is \opt{UKenglish}. The
+exceptions to this are the \sty{tracklang} package options that have been
+specified in the form \meta{iso lang}-\meta{iso country} (listed
+in \tableref{tab:rootlangopts}). For
+example, the package option \iso{british} behaves as though the
+user requested the package option \opt{british}.
+
+If \gls{TrackLocale} or \gls{TrackLangFromEnv} are used and the locale
+isn't recognised a new dialect is created with the label formed from
+the \idx{ISO} codes (and \idx{modifier}, if present).
+Similarly for \gls{TrackLanguageTag} a new
+dialect is created with a label that's essentially the language tag
+without the hyphen separators. For example,
+\begin{codebox}
+\gls{TrackLocale}\marg{xx\idx{hyphensep}YY}
+\end{codebox}
+will add a new dialect with the label \code{xxYY},
+\begin{codebox}
+\gls{TrackLocale}\marg{xx\idx{hyphensep}YY\idx{atmod}mod}
+\end{codebox}
+will add a new dialect with the label \code{xxYYmod} and
+\begin{codebox}
+\gls{TrackLanguageTag}\marg{xx-Latn-YY}
+\end{codebox}
+will add a new dialect with the label \code{xxLatnYY}.
+
+\begin{important}
+If \gls{TrackLocale} or \gls{TrackLangFromEnv} find a \idx{modifier}, the
+value will be sanitized to allow it to be used as a label. If the
+modifier is set explicitly using \gls{SetTrackedDialectModifier},
+no sanitization is performed.
+\end{important}
+
+In addition to the root language label and the dialect identifier,
+many of the language options also have corresponding \idx{ISO} codes. In
+most cases there is an \idxn{639-1} or an \idxn{639-2} code (or both), and in some
+cases there is an \idxn{3166-1} code identifying the dialect \idx{region}.
+Where a language has different \idxn{639-2T} and \idx{639-2B} codes,
+the \qt{T} version is assumed.
+
+When the \file{tracklang.sty} \LaTeX\ package is loaded, it first attempts to find the
+language options through the package options supplied to
+\sty{tracklang}. This means that any languages that have been
+supplied in the document class options should get identified
+(provided that the document class has used the standard option
+declaration mechanism). If no languages have been supplied in this
+way, \file{tracklang.sty} then attempts to identify language settings in
+the following order:
+\begin{enumerate}
+\item if \gls{bbl@loaded} is defined (\sty{babel}), \sty{tracklang}
+will iterate over each label in that command definition;
+
+\item if \gls{trans@languages} is defined (\sty{translator}),
+\sty{tracklang} will iterate over each label in that command
+definition;
+
+\item if \sty{ngerman} has been loaded, the \opt{ngerman} dialect
+will be tracked;
+
+\item if \sty{german} has been loaded, the \opt{german} root
+language will be tracked;
+
+\item if \sty{polyglossia} has been loaded:
+
+ \begin{enumerate}
+ \item if \gls{xpg@bcp@loaded} has been defined, \sty{tracklang}
+will iterate over the \idx{BCP47} tags in that command definition;
+
+ \item if \gls{xpg@loaded} has been defined, \sty{tracklang} will
+iterate over each language label in that command definition;
+
+ \item \sty{tracklang} will iterate over all \sty{tracklang} options
+and test if the root language has been loaded.
+ \end{enumerate}
+
+\end{enumerate}
+Note that this references internal commands provided by other
+packages. Of these, only the \sty{polyglossia} commands are
+documented in the package manual, and so are the only ones that can
+be relied on.
+
+Each identified language and dialect is added to the \emph{tracked
+language} and \emph{tracked dialect} lists. Note that the tracked
+language and tracked dialect are labels rather than proper nouns.
+If a~dialect label is identical to its root language label, the
+label will appear in both lists.
+
+You can check whether or not any languages have been detected using:
+\cmddef{AnyTrackedLanguages}
+This will do \meta{true} if one or more languages have been
+tracked otherwise it will do \meta{false}. (Each detected
+dialect will automatically have the root language label added
+to the tracked language list, if it's not already present.)
+
+If you want to find out if any of the tracked dialects
+matches a particular language tag, you can use:
+\cmddef{GetTrackedDialectFromLanguageTag}
+If successful, the supplied control sequence \meta{cs} is set to the
+dialect label, otherwise \meta{cs} is set to empty. The test is for an exact
+match on the root language, \idx{script}, sub-language, \idx{variant} and
+\idx{region}. The control sequence \meta{cs} will be empty if none of the
+tracked dialects matches all five of those elements. (If the script
+isn't given explicitly, the default for that language is assumed.)
+In the event that \meta{cs} is empty, you can now (as from v1.3.6)
+get the closest match with:
+\cmddef{TrackedDialectClosestSubMatch}
+(which is set by \gls{GetTrackedDialectFromLanguageTag}).
+This will be empty if no tracked dialects match on the root
+language or if there's a tracked dialect label that exactly matches
+the label formed by concatenating the language code, sub-language,
+\idx{script}, \idx{region}, \idx{modifier} and \idx{variant}.
+
+For example (Plain \TeX):
+\begin{codebox}
+\gls{input} tracklang
+\gls{TrackLanguageTag}\marg{en-826}
+Has en-Latn-GB been tracked?
+\gls{GetTrackedDialectFromLanguageTag}\marg{en-Latn-GB}\marg{\cmd{thisdialect}}\comment{}
+\cmd{ifx}\cmd{thisdialect}\cmd{empty}
+ No!
+\cmd{else}
+ Yes! Dialect label: \cmd{thisdialect}.
+\cmd{fi}
+\cmd{bye}
+\end{codebox}
+This matches because the \idx{territory} code \numericcode{GB} is recognised as
+equivalent to the code \opt{GB}, and the default \idx{script} for
+\opt{english} is \opt{Latn}. In this case, the dialect
+label is \opt{british}. Note that this doesn't require
+the use of \gls{TrackLanguageTag} to track the dialect.
+It also works if the dialect has been tracked using other commands,
+such as \gls{TrackLocale}.
+
+Here's an example that doesn't have an exact match, but does have a
+partial match:
+\begin{codebox}
+\gls{input} tracklang
+\gls{TrackLanguageTag}\marg{de-CH-1996}
+Has de-DE-1996 been tracked?
+\gls{GetTrackedDialectFromLanguageTag}\marg{de-DE-1996}\marg{\cmd{thisdialect}}\comment{}
+\cmd{ifx}\cmd{thisdialect}\cmd{empty}
+ No!
+ \cmd{ifx}\gls{TrackedDialectClosestSubMatch}\cmd{empty}
+ No match on root language.
+ \cmd{else}
+ Closest match: \gls{TrackedDialectClosestSubMatch}.
+ \cmd{fi}
+\cmd{else}
+ Yes! Dialect label: \cmd{thisdialect}.
+\cmd{fi}
+\cmd{bye}
+\end{codebox}
+In this case the result is:
+\begin{resultbox}
+Has de-DE-1996 been tracked? No! Closest match: nswissgerman.
+\end{resultbox}
+
+You can iterate through each tracked dialect using:
+\cmddef{ForEachTrackedDialect}
+At the start of each iteration, this sets the control sequence
+\meta{cs} to the tracked dialect and does \meta{body}.
+
+You can iterate through each tracked language using:
+\cmddef{ForEachTrackedLanguage}
+At the start of each iteration, this sets the control sequence \meta{cs} to the
+tracked language and does \meta{body}.
+
+The above for-loops use the same internal mechanism as \LaTeX's
+\gls{@for} loop. Since this isn't defined by \TeX, a similar command
+(\inlineglsdef{@tracklang@for}) will be defined that works in the same way.
+
+The provided control sequence \meta{cs} is updated at the
+start of each iteration to the current element. The loop is
+terminated when this control sequence is set to \gls{@nil}. This
+special control sequence should never been used as it's just a
+marker and isn't actually defined. If you get an error message
+stating that \gls{@nil} is undefined, then it's most likely due to a
+loop control sequence being used outside the loop. This can occur if
+the loop contains code that isn't expanded until later. For example,
+if the loop code includes \gls{AtBeginDocument}, you need to ensure
+that the loop control sequence is expanded before being added to the
+hook.
+
+You can test if a root language has been detected using:
+\cmddef{IfTrackedLanguage}
+where \meta{language-label} is the language label. If
+true, this does \meta{true} otherwise it does \meta{false}.
+
+You can test if a particular dialect has been detected using:
+\cmddef{IfTrackedDialect}
+where \meta{dialect-label} is the dialect label. If the root
+language was explicitly specified, then it will also be detected as
+a dialect.
+
+For example:
+\begin{codebox}
+\cmd{documentclass}[\opt{british},\opt{dutch}]\marg{article}
+\codepar
+\cmd{usepackage}\marg{tracklang}
+\codepar
+\cbeg{document}
+``english'' \gls{IfTrackedDialect}\marg{english}\marg{has}\marg{hasn't} been specified.
+\codepar
+``british'' \gls{IfTrackedDialect}\marg{british}\marg{has}\marg{hasn't} been specified.
+\codepar
+``flemish'' \gls{IfTrackedDialect}\marg{flemish}\marg{has}\marg{hasn't} been specified.
+\codepar
+``dutch'' \gls{IfTrackedDialect}\marg{dutch}\marg{has}\marg{hasn't} been specified.
+\codepar
+``english'' or an English variant
+\gls{IfTrackedLanguage}\marg{english}\marg{has}\marg{hasn't} been specified.
+\cend{document}
+\end{codebox}
+This produces:
+\begin{resultbox}
+``english'' hasn't been specified.
+
+``british'' has been specified.
+
+``flemish'' hasn't been specified.
+
+``dutch'' has been specified.
+
+``english'' or an English variant has been specified.
+\end{resultbox}
+
+You can find the root language label for a given tracked dialect
+using:
+\cmddef{TrackedLanguageFromDialect}
+If \meta{dialect} hasn't been defined this does nothing otherwise it
+expands to the root language label.
+
+You can find the tracked dialects from a given root language
+using:
+\cmddef{TrackedDialectsFromLanguage}
+This will expand to a~comma-separated list of dialect labels
+if the root language label has been defined, otherwise it
+does nothing.
+
+You can test if a language or dialect has a corresponding \idx+{ISO} code using:
+\cmddef{IfTrackedLanguageHasIsoCode}
+where \meta{code type} is the type of \idx{ISO} code (for example,
+\idx{639-1} for root languages or \idx{3166-1} for regional
+dialects), and \meta{label} is the language or dialect label.
+Note that the \idx{639-3} may be set for the dialect
+rather than root language for sub-languages parsed using
+\gls{TrackLanguageTag}.
+
+Alternatively, you can test if a particular \idx{ISO} code has been
+defined using:
+\cmddef{IfTrackedIsoCode}
+where \meta{code type} is again the type of \idx{ISO} code (for example,
+\idx{639-1} or \idx{3166-1}), and \meta{code} is the
+particular code (for example, \opt{en} for \idxn{639-1} or
+\opt{GB} for \idxn{3166-1}).
+
+You can fetch the language (or dialect) label associated with a
+given \idx{ISO} code using:
+\cmddef{TrackedLanguageFromIsoCode}
+This does nothing if the given \meta{code} for the given \idx{ISO}
+\meta{code type} has not been defined, otherwise it expands
+a~comma-separated list of language or dialect labels.
+
+You can fetch the \idx{ISO} code for a given code type using:
+\cmddef{TrackedIsoCodeFromLanguage}
+where \meta{label} is the language or dialect label and \meta{code
+type} is the \idx{ISO} code type (for example, \idx{639-1} or
+\idx{3166-1}). Unlike \gls{TrackedLanguageFromIsoCode}, this
+command only expands to a single label rather than a~comma-separated
+list.
+
+The above commands do nothing in the event of an unknown code or
+code type,
+so if you accidentally get the wrong code type, you won't get an error.
+If you're unsure of the code type, you can use the following commands:
+\cmddef{TwoLetterIsoCountryCode}
+This expands to \idx{3166-1} and is used for the two-letter country codes.
+
+\cmddef{TwoLetterIsoLanguageCode}
+This expands to \idx{639-1} and is used for the two-letter root language codes.
+
+\cmddef{ThreeLetterIsoLanguageCode}
+This expands to \idx{639-2} and is used for the three-letter root language
+codes.
+
+\cmddef{ThreeLetterExtIsoLanguageCode}
+This expands to \idx{639-3}. This code is only used for a root language if
+there's no \idx{639-1} or \idx{639-2} code. It may also be used for a
+dialect if a sub-language part has been set in the language
+tag parsed by \gls{TrackLanguageTag}.
+
+The \cmd{Get\ldots} commands below are designed to be expandable.
+If the supplied \meta{dialect} is unrecognised they expand to empty.
+Remember that the dialect must first be identified as a tracked
+language for it to be recognised.
+
+As from v1.3, the language tag for a given dialect can be obtained
+using:
+\cmddef{GetTrackedLanguageTag}
+where \meta{dialect} is the label identifying the dialect.
+Uses the \opt{und} (undetermined) code for unknown languages.
+
+As from v1.3, each tracked dialect may also have an associated
+modifier, which can be fetched using:
+\cmddef{GetTrackedDialectModifier}
+where \meta{dialect} is the label identifying the dialect.
+This value is typically obtained by parsing a \idx{POSIX} locale identifier
+with \gls{TrackLocale} or \gls{TrackLangFromEnv} but may be set explicitly.
+(See \sectionref{sec:langsty} for setting this value. Likewise for
+the following commands.)
+
+You can test if a dialect has an associated \idx{modifier} using:
+\cmddef{IfHasTrackedDialectModifier}
+If the dialect has an associated \idx{modifier} this does \meta{true}
+otherwise it does \meta{false}.
+
+For example:
+\begin{codebox}
+\cmd{documentclass}[\opt{british},\opt{francais},\opt{american},\opt{canadian},\opt{canadien},\opt{dutch}]\marg{article}
+\codepar
+\cmd{usepackage}\marg{tracklang}
+\codepar
+\cbeg{document}
+Languages:
+\gls{ForEachTrackedLanguage}\marg{\cmd{ThisLanguage}}\marg{\cmd{ThisLanguage}\cmd{space}
+(ISO \gls{TwoLetterIsoLanguageCode}:
+``\gls{TrackedIsoCodeFromLanguage}\marg{\gls{TwoLetterIsoLanguageCode}}\marg{\cmd{ThisLanguage}}''). }
+\codepar
+Dialects:
+\gls{ForEachTrackedDialect}\marg{\cmd{ThisDialect}}\marg{\cmd{ThisDialect}\cmd{space}
+(\gls{IfTrackedLanguageHasIsoCode}\marg{\gls{TwoLetterIsoCountryCode}}\marg{\cmd{ThisDialect}}\comment{}
+ \marg{ISO \gls{TwoLetterIsoCountryCode}:
+ ``\gls{TrackedIsoCodeFromLanguage}\marg{\gls{TwoLetterIsoCountryCode}}\marg{\cmd{ThisDialect}}''}%
+ \marg{no specific region};
+root: \gls{TrackedLanguageFromDialect}\marg{\cmd{ThisDialect}}). }
+\codepar
+Language for ISO \gls{TwoLetterIsoCountryCode}\cmd{ }``GB'':
+\gls{TrackedLanguageFromIsoCode}\marg{\gls{TwoLetterIsoCountryCode}}\marg{GB}.
+\codepar
+Language for ISO \gls{TwoLetterIsoCountryCode}\cmd{ }``CA'':
+\gls{TrackedLanguageFromIsoCode}\marg{\gls{TwoLetterIsoCountryCode}}\marg{CA}.
+\codepar
+Country ISO \gls{TwoLetterIsoCountryCode}\cmd{ }code for ``canadian'':
+\gls{TrackedIsoCodeFromLanguage}\marg{\gls{TwoLetterIsoCountryCode}}\marg{canadian}.
+\cend{document}
+\end{codebox}
+This produces:
+\begin{resultbox}
+Languages: english (ISO 639-1: ``en''). french (ISO 639-1: ``fr'').
+dutch (ISO 639-1: ``nl'').
+
+Dialects: american (ISO 3166-1: ``US''; root: english).
+british (ISO 3166-1: ``GB''; root: english).
+canadian (ISO 3166-1: ``CA''; root: english).
+canadien (ISO 3166-1: ``CA''; root: french).
+dutch (no specific region; root: dutch).
+francais (no specific region; root: french).
+
+Language for ISO 3166-1 ``GB'': british.
+
+Language for ISO 3166-1 ``CA'': canadian,canadien.
+
+Country ISO 3166-1 code for ``canadian'': CA.
+\end{resultbox}
+
+As from v1.3, each tracked dialect may also have an associated
+variant, which can be fetched using:
+\cmddef{GetTrackedDialectVariant}
+where \meta{dialect} is the label identifying the dialect.
+This value is typically obtained by parsing a language tag
+with \gls{TrackLanguageTag} but may be set explicitly.
+
+You can test if a dialect has an associated variant using:
+\cmddef{IfHasTrackedDialectVariant}
+
+As from v1.3, each tracked dialect may also have an associated
+script, which can be fetched using:
+\cmddef{GetTrackedDialectScript}
+where \meta{dialect} is the label identifying the dialect.
+
+You can test if a dialect has an associated script using:
+\cmddef{IfHasTrackedDialectScript}
+If the dialect has an associated script this does \meta{true}
+otherwise it does \meta{false}. This information is provided
+for language packages that need to know what script is required,
+but there's no guarantee that the script will actually be set
+in the document. Similarly for all the other attributes described
+here.
+
+Note that the script should be a recognised four-letter \idxn{15924}
+code, such as \opt{Latn} or \opt{Cyrl}. If a~dialect
+doesn't have an associated script then the default for the root
+language should be assumed. For example, \opt{Latn} for English dialects or
+\opt{Cyrl} for Russian dialects. The default script for
+known languages can be obtained using:
+\cmddef{TrackLangGetDefaultScript}
+Most root languages have a default script, but there
+are a few without one as it may depend on region, politics
+or ideology.
+
+There's a convenient expandable command for testing the script:
+\cmddef{IfTrackedDialectIsScriptCs}
+This tests if the given tracked dialect has an associated script and
+compares the value with the replacement text of \meta{cs}.
+If the dialect hasn't been explicitly assigned a script,
+then test is performed against the default script for the root
+language.
+
+The supplementary package \sty{tracklang-scripts} provides some
+additional commands relating to writing systems, including commands
+in the form \gls{TrackLangScriptCode} where
+\meta{Code} is the \idxn{15924} four-letter code. If the dialect
+doesn't have an associated script, \meta{false} is done.
+This package isn't
+loaded automatically, so you'll need to explicitly load it. The
+generic code is in \file{tracklang-scripts.tex}:
+\begin{codebox}
+\gls{input} tracklang-scripts
+\end{codebox}
+There's a convenient \LaTeX\ wrapper \file{tracklang-scripts.sty}:
+\begin{codebox}
+\cmd{usepackage}\marg{tracklang-scripts}
+\end{codebox}
+See \sectionref{sec:supplpkgs} for further details of
+that package.
+
+For example, the following defines a command to check if
+the given dialect should use a Latin \idx{script}:
+\begin{codebox}
+\gls{input} tracklang-scripts
+\cmd{def}\cmd{islatin}\#1\#2\#3\marg{\comment{}
+ \gls{IfTrackedDialectIsScriptCs}\marg{\#1}\marg{\tklscript{Latn}}\marg{\#2}\marg{\#3}\comment{}
+}
+\end{codebox}
+
+\begin{important}
+Note that the \idx{script} value doesn't mean that the document is
+actually using that script. It means that this is the user's
+\emph{desired} script, but whether that \idx{script} is actually set relies
+on the appropriate settings in the relevant language package (such
+as \sty{polyglossia}['s] \optfmt{script} key).
+\end{important}
+
+As from v1.3, each tracked dialect may also have a sub-language
+identifier (for example, \optfmt{arevela}), which can be fetched
+using:
+\cmddef{GetTrackedDialectSubLang}
+where \meta{dialect} is the label identifying the dialect.
+
+You can test if a dialect has an associated sub-tag using:
+\cmddef{IfHasTrackedDialectSubLang}
+If the dialect has an associated sub-tag this does \meta{true}
+otherwise it does \meta{false}.
+
+As from v1.3, each tracked dialect may also have additional
+information, which can be fetched using:
+\cmddef{GetTrackedDialectAdditional}
+where \meta{dialect} is the label identifying the dialect.
+
+You can test if a dialect has additional information using:
+\cmddef{IfHasTrackedDialectAdditional}
+If the dialect has additional information this does \meta{true}
+otherwise it does \meta{false}.
+
+Most packages that implement multilingual support have a~set of
+language definition files for each supported language or dialect.
+It may be that only the root language is needed, if there are no
+variations between that language's dialect (for the purposes of that
+package), or it may be that separate definition files are required
+for each dialect. However it can be awkward trying to map the
+requested dialect or language label to the file name. Should, say,
+the file containing the French code be called
+\metametafilefmt{}{prefix}{\dhyphen french\dhyphen }{suffix}{} or
+\metametafilefmt{}{prefix}{\dhyphen frenchb\dhyphen }{suffix}{} or
+\metametafilefmt{}{prefix}{\dhyphen francais\dhyphen}{suffix}{}?
+Should, say, the file containing the British English code be called
+\metametafilefmt{}{prefix}{\dhyphen british\dhyphen }{suffix}{} or
+\metametafilefmt{}{prefix}{\dhyphen UKenglish\dhyphen }{suffix}{}?
+If you want to modularise the language support for your package so
+that each language module has a different maintainer will the
+maintainers know what tag to use for their language?
+
+\label{pg:filesearch}To help with this, \sty{tracklang} provides:
+\cmddef{IfTrackedLanguageFileExists}
+This attempts to find the file called
+\meta{prefix}\meta{localeid}\meta{suffix} where \meta{localeid} is determined
+from \meta{dialect} (see below). If the file is found then
+\cmddef{CurrentTrackedTag}
+is set to \meta{localeid} and \meta{true code} is done, otherwise
+\meta{false code} is done. If this command
+is empty, then the dialect hasn't been detected. If the dialect
+has been detected, but no file can be found, then
+\gls{CurrentTrackedTag} is set to the final attempt at determining
+\meta{localeid}.
+
+There's a convenient shortcut command new to version 1.3:
+\cmddef{TrackLangRequireDialect}
+which uses \gls{IfTrackedLanguageFileExists} to input the resource
+file if found. The prefix is given by \meta{pkgname}\code{-} and
+the suffix is \code{.\ext+{ldf}}. A warning is issued if no resource file
+is found. Note that while it makes sense for \meta{pkgname}
+to be the same as the base name of the package that uses these
+resource files, they don't have to be the same. This command
+additionally defines:
+\cmddef{TrackLangRequireDialectPrefix}
+to \meta{pkgname}, which allows the prefix to be picked up by
+resource file commands, such as \gls{TrackLangProvidesResource}
+and \gls{TrackLangRequireResource}. (See below.)
+
+The optional argument \meta{load code} is the code that actually
+inputs the required file. This defaults to
+\begin{codebox}
+\gls{TrackLangRequireResource}\marg{\gls{CurrentTrackedTag}}
+\end{codebox}
+
+The \gls{IfTrackedLanguageFileExists} command sets up the current
+tracked dialect with:
+\begin{compactcodebox*}
+\gls{SetCurrentTrackedDialect}\marg{dialect}
+\end{compactcodebox*}
+which enables the following commands that may be used within
+\meta{true code} or \meta{false code}:
+\cmddef{CurrentTrackedDialect}
+Expands to the dialect label.
+
+\cmddef{CurrentTrackedLanguage}
+If the dialect hasn't been detected, this command will be empty,
+otherwise it will expand to the root language label (which may
+be the same as the dialect label).
+
+\cmddef{CurrentTrackedRegion}
+If the dialect hasn't been detected, this command will be empty.
+If the dialect has been assigned an \idxn{3166-1} code,
+\gls{CurrentTrackedRegion} will expand to that code, otherwise it
+will be empty.
+
+\cmddef{CurrentTrackedIsoCode}
+If the dialect hasn't been detected, this command will be empty.
+Otherwise it may be empty or it may expand to the
+\idxn{639-1} or \idxn{639-2} or \idxn{639-3} code.
+
+\cmddef{CurrentTrackedDialectModifier}
+The dialect's modifier or empty if not set. (This is set but not
+used in the set of possible \meta{localeid} values.)
+
+\cmddef{CurrentTrackedDialectVariant}
+The dialect's variant or empty if not set.
+
+\cmddef{CurrentTrackedDialectSubLang}
+The dialect's sub-language code or empty if not set.
+
+\cmddef{CurrentTrackedDialectAdditional}
+The dialect's additional information or empty if not set.
+
+\cmddef{CurrentTrackedLanguageTag}
+The dialect's language tag. Take care not to confuse this
+with \gls{CurrentTrackedTag}.
+
+\cmddef{CurrentTrackedDialectScript}
+The dialect's script. If the dialect doesn't have the script set,
+the default script for the language is used instead.
+
+\gls{IfTrackedLanguageFileExists} behaves as follows:
+\begin{itemize}
+ \item If no dialect with the given label has been
+ detected, the condition evaluates to \emph{false} and
+ \gls{CurrentTrackedTag} is empty.
+
+ \item If a dialect with the given label has been detected, then:
+ \begin{itemize}
+ \item For each possible \meta{localeid} in an ordered set of tags determined by
+ the dialect label (see below), the first file matching
+ \meta{prefix}\meta{localeid}\meta{suffix} that's found on
+ \TeX's path results in the condition evaluating to \emph{true} and
+ \gls{CurrentTrackedTag} is set to the current \meta{localeid} in the
+ set. The rest of the set of possible values of \meta{localeid} is skipped.
+
+ \item If no file matching \meta{prefix}\meta{localeid}\meta{suffix} is
+ found on \TeX's path, then the condition evaluates to \emph{false}
+ and \gls{CurrentTrackedTag} is set to the final \meta{localeid} in the
+ set (the language label).
+ \end{itemize}
+\end{itemize}
+
+The ordered set of possible values of \meta{localeid} is determined from
+the given dialect.
+\begin{important}
+The ordering has changed in version 1.4, which now also includes the
+\idx{script} and \idx{variant}. This new ordering should typically make the more
+common combinations closer to the start of the search.
+\end{important}
+The possible values of \meta{localeid} are listed below in the order of priority used
+by \gls{IfTrackedLanguageFileExists}. Note that the set may contain
+repetitions (for example, if the dialect label is the same as the
+root language label). If an item contains an element that hasn't
+been set (such as the \idxn{639-3} code or a sub-language
+\meta{sublang} or \idx{variant}) then
+that item is skipped.
+\begin{enumerate}
+\item \meta{localeid} is just the value of \gls{CurrentTrackedLanguageTag}.
+
+\item \meta{localeid} is just the dialect label.
+
+\item \meta{localeid} is
+\meta{ISO~639-1}\code{-}\meta{sublang}\code{-}\meta{script}\code{-}\meta{region}.
+
+\item \meta{localeid} is
+\meta{ISO~639-1}\code{-}\meta{script}\code{-}\meta{region}.
+
+\item \meta{localeid} is
+\meta{ISO~639-1}\code{-}\meta{sublang}\code{-}\meta{region} (if there's no script or if
+the script is the default for the given language).
+\meta{ISO~639-1}\code{-}\meta{region} (if there's no script or if
+the script is the default for the given language).
+
+\item \meta{localeid} is
+\meta{ISO~639-1}\code{-}\meta{sublang}\code{-}\meta{script}.
+
+\item \meta{localeid} is
+\meta{ISO~639-1}\code{-}\meta{script}.
+
+\item \meta{localeid} is \meta{ISO~639-1}\code{-}\meta{sublang}.
+
+\item \meta{localeid} is just \meta{ISO~639-1}.
+
+\item \meta{localeid} is
+\meta{ISO~639-2}\code{-}\meta{sublang}\code{-}\meta{script}\code{-}\meta{region}.
+
+\item \meta{localeid} is
+\meta{ISO~639-2}\code{-}\meta{script}\code{-}\meta{region}.
+
+\item \meta{localeid} is
+\meta{ISO~639-2}\code{-}\meta{sublang}\code{-}\code{region} (if there's no script or if
+the script is the default for the given language).
+\meta{ISO~639-2}\code{-}\meta{region} (if there's no script or if
+the script is the default for the given language).
+
+\item \meta{localeid} is
+\meta{ISO~639-2}\code{-}\meta{sublang}\code{-}\meta{script}.
+
+\item \meta{localeid} is
+\meta{ISO~639-2}\code{-}\meta{script}.
+
+\item \meta{localeid} is \meta{ISO~639-2}\code{-}\meta{sublang}.
+\item \meta{localeid} is just \meta{ISO~639-2}.
+
+\item \meta{localeid} is
+\meta{ISO~639-3}\code{-}\meta{sublang}\code{-}\meta{script}\code{-}\meta{region}.
+
+\item \meta{localeid} is
+\meta{ISO~639-3}\code{-}\meta{script}\code{-}\meta{region}.
+
+\item \meta{localeid} is
+\meta{ISO~639-3}\code{-}\meta{sublang}\code{-}\meta{region} (if there's no script or if
+the script is the default for the given language).
+\meta{ISO~639-3}\code{-}\meta{region} (if there's no script or if
+the script is the default for the given language).
+
+\item \meta{localeid} is
+\meta{ISO~639-3}\code{-}\meta{sublang}\code{-}\meta{script}.
+
+\item \meta{localeid} is
+\meta{ISO~639-3}\code{-}\meta{script}.
+
+\item \meta{localeid} is \meta{ISO~639-3}\code{-}\meta{sublang}.
+
+\item \meta{localeid} is just \meta{ISO~639-3}.
+
+\item \meta{localeid} is just \meta{region}.
+
+\item \meta{localeid} is
+\meta{ISO~639-1}\code{-}\meta{sublang}\code{-}\meta{variant}
+or \meta{ISO~639-1}\code{-}\meta{variant} if \meta{sublang} is missing.
+
+\item \meta{localeid} is
+\meta{ISO~639-2}\code{-}\meta{sublang}\code{-}\meta{variant}
+or \meta{ISO~639-2}\code{-}\meta{variant} if \meta{sublang} is missing.
+
+\item \meta{localeid} is
+\meta{ISO~639-3}\code{-}\meta{sublang}\code{-}\meta{variant}
+or \meta{ISO~639-3}\code{-}\meta{variant} if \meta{sublang} is missing.
+
+\item \meta{localeid} is just the value of \gls{CurrentTrackedLanguage}
+(the root language label).
+\end{enumerate}
+
+For example (pre v1.3):
+\begin{codebox}
+\gls{AnyTrackedLanguages}
+\marg{\comment{}
+ \gls{ForEachTrackedDialect}\marg{\cmd{ThisDialect}}\comment{}
+ \marg{\comment{try to load the language file for this dialect}
+ \gls{IfTrackedLanguageFileExists}\marg{\cmd{ThisDialect}}\comment{}
+ \marg{mypackage-}\comment{file prefix}
+ \marg{.ldf}\comment{file suffix}
+ \marg{\gls{input} mypackage-\gls{CurrentTrackedTag}.ldf}\comment{file found}
+ \marg{\comment{file not found}
+ \cmd{PackageWarning}\marg{mypackage}\marg{No support for language
+ `\cmd{ThisDialect}'}\comment{}
+ }\comment{}
+ }\comment{}
+}
+\marg{\comment{no languages detected so use defaults}
+}
+\end{codebox}
+With version 1.3 onwards, this can be written more concisely as:
+\begin{codebox}
+\gls{AnyTrackedLanguages}
+\marg{\comment{}
+ \gls{ForEachTrackedDialect}\marg{\cmd{ThisDialect}}\comment{}
+ \marg{\comment{try to load the language file for this dialect}
+ \gls{TrackLangRequireDialect}\marg{mypackage}\marg{\cmd{ThisDialect}}\comment{}
+ }\comment{}
+}
+\marg{\comment{no languages detected so use defaults}
+}
+\end{codebox}
+which additionally enables the \sty{tracklang} version 1.3 commands described below,
+such as \gls{TrackLangRequireResource}.
+
+\plabel{pg.britishfilesearch}%
+If, for example, \cmd{ThisDialect} is \opt{british}, then the file search will
+be in the order:
+\begin{enumerate}
+\item \ldf{mypackage}{en-GB} (language tag)
+\item \ldf{mypackage}{british} (dialect label)
+
+\item \ldf{mypackage}{en-Latn-GB} (\idx{639-1} language code,
+\idx{script}, \idx{region})
+\item \ldf{mypackage}{en-GB} (\idx{639-1} language code,
+\idx{region})
+\item \ldf{mypackage}{en-Latn} (\idx{639-1} language code,
+\idx{script})
+\item \ldf{mypackage}{en} (\idx{639-1} language code)
+
+\item \ldf{mypackage}{eng-Latn-GB} (\idx{639-2} language
+code, \idx{script}, \idx{region})
+\item \ldf{mypackage}{eng-GB} (\idx{639-2} language code,
+\idx{region})
+\item \ldf{mypackage}{eng-Latn} (\idx{639-2} language code,
+\idx{script})
+\item \ldf{mypackage}{eng} (\idx{639-2} language code)
+
+\item \ldf{mypackage}{GB} (\idx{region})
+\item \ldf{mypackage}{english} (language label)
+\end{enumerate}
+
+If, for example, \cmd{ThisDialect} is \opt{naustrian}, then the file search will
+be in the order:
+\begin{enumerate}
+\item \ldf{mypackage}{de-AT-1996} (language tag)
+\item \ldf{mypackage}{naustrian} (dialect label)
+
+\item \ldf{mypackage}{de-Latn-AT} (\idx{639-1} language code,
+\idx{script}, \idx{region})
+\item \ldf{mypackage}{de-AT} (\idx{639-1} language code,
+\idx{region})
+\item \ldf{mypackage}{de-Latn} (\idx{639-1} language code,
+\idx{script})
+\item \ldf{mypackage}{de} (\idx{639-1} language code)
+
+\item \ldf{mypackage}{deu-Latn-AT} (\idx{639-2} language
+code, \idx{script}, \idx{region})
+\item \ldf{mypackage}{deu-AT} (\idx{639-2} language code,
+\idx{region})
+\item \ldf{mypackage}{deu-Latn} (\idx{639-2} language code,
+\idx{script})
+\item \ldf{mypackage}{deu} (\idx{639-2} language code)
+
+\item \ldf{mypackage}{AT} (\idx{region})
+
+\item \ldf{mypackage}{de-1996} (\idx{639-1} language code,
+\idx{variant})
+\item \ldf{mypackage}{deu-1996} (\idx{639-2} language code,
+\idx{variant})
+
+\item \ldf{mypackage}{german} (language label)
+\end{enumerate}
+
+If, for example, \cmd{ThisDialect} is \opt{francais}, then the file search will
+be in the order:
+\begin{enumerate}
+\item \ldf{mypackage}{fr} (language tag)
+\item \ldf{mypackage}{francais} (dialect label)
+\item \ldf{mypackage}{fr-Latn} (\idx{639-1} language code,
+\idx{script})
+\item \ldf{mypackage}{fr} (\idx{639-1} language code)
+\item \ldf{mypackage}{fra-Latn} (\idx{639-2} language code,
+\idx{script})
+\item \ldf{mypackage}{fra} (\idx{639-2} language code)
+\item \ldf{mypackage}{french} (language)
+\end{enumerate}
+This is because the predefined \opt{francais} option has no
+region assigned to it. Be careful if the dialect label is the actual
+root language. For example, if \cmd{ThisDialect} is \opt{french},
+then the file search will be in the order:
+\begin{enumerate}
+\item \ldf{mypackage}{fr} (language tag)
+\item \ldf{mypackage}{french} (dialect label)
+\item \ldf{mypackage}{fr-Latn} (\idx{639-1} language code,
+\idx{script})
+\item \ldf{mypackage}{fr} (\idx{639-1} language code)
+\item \ldf{mypackage}{fra-Latn} (\idx{639-2} language code,
+\idx{script})
+\item \ldf{mypackage}{fra} (\idx{639-2} language code)
+\item \ldf{mypackage}{french} (language)
+\end{enumerate}
+Note that the last try will always fail in this case since if the
+file exists, it will be found on the second try.
+
+If the dialect label is identical to the root language label then it
+means that all associated information is the default
+for that language. For example, in the above case of \opt{french},
+the script is \opt{Latn} and the region is unspecified. The root
+language label can therefore be used as the fallback in the event of
+no other match but for the specific case where the dialect is
+identical to the root language then all unnecessary file name checks
+can be skipped.
+
+If you're only providing support for the root languages (pre v1.3):
+\begin{codebox}
+\gls{AnyTrackedLanguages}
+\marg{\comment{}
+ \gls{ForEachTrackedLanguage}\marg{\cmd{ThisLanguage}}\comment{}
+ \marg{\comment{try to load the language file for this root language}
+ \gls{IfTrackedLanguageFileExists}\marg{\cmd{ThisLanguage}}\comment{}
+ \marg{mypackage-}\comment{file prefix}
+ \marg{.ldf}\comment{file suffix}
+ \marg{\gls{input} mypackage-\gls{CurrentTrackedTag}.ldf}\comment{file found}
+ \marg{\comment{file not found}
+ \cmd{PackageWarning}\marg{mypackage}\marg{No support for language
+ `\cmd{ThisLanguage}'}\comment{}
+ }\comment{}
+ }\comment{}
+}
+\marg{\comment{no languages detected so use defaults}
+}
+\end{codebox}
+With version 1.3 onwards, this can be written more concisely as:
+\begin{codebox}
+\gls{AnyTrackedLanguages}
+\marg{\comment{}
+ \gls{ForEachTrackedLanguage}\marg{\cmd{ThisLanguage}}\comment{}
+ \marg{\comment{try to load the language file for this root language}
+ \gls{TrackLangRequireDialect}\marg{mypackage}\marg{\cmd{ThisLanguage}}\comment{}
+ }\comment{}
+}
+\marg{\comment{no languages detected so use defaults}
+}
+\end{codebox}
+which additionally enables the commands described below.
+Note that in this case, if more than one dialect for the same
+language has been tracked, only the hooks for the last dialect for
+that language will be adjusted, so it's usually best to iterate over
+the dialects.
+
+The following \cmd{TrackLang\ldots Resource\ldots} commands may
+only be used in resource files that are loaded using
+\gls{TrackLangRequireDialect}. An error will occur if the file is
+input through some other method.
+
+Within the resource file \localemetafile{pkgname},
+you can identify the file using (new to version 1.3):
+\cmddef{TrackLangProvidesResource}
+where \meta{tag} is the locale identifier.
+
+If \gls{ProvidesFile} is defined (through the \LaTeX\ kernel) this is
+used, otherwise a simplified generic alternative is used that's
+suitable for other \TeX\ formats.
+
+The resource file can load another resource file
+\localemetametafile{pkgname}{tag},
+using (new to version 1.3):
+\cmddef{TrackLangRequireResource}
+For example, the dialect file \ldf{foo}{en-GB} might need to
+load the root language resource file \ldf{foo}{english}:
+\begin{codebox}
+\comment{(In file \ldf{foo}{en-GB})}
+\comment{Declare this regional file:}
+\gls{TrackLangProvidesResource}\marg{en-GB}
+\comment{load root language file \ldf{foo}{english}:}
+\gls{TrackLangRequireResource}\marg{english}
+\end{codebox}
+If \ldf{foo}{english} is also identified with
+\gls{TrackLangProvidesResource}, this will ensure that it's only
+loaded once.
+
+If you require the resource file and want to perform
+\meta{code1} if it's loaded at this point or \meta{code2} if it's
+already been loaded then you can use:
+\cmddef{TrackLangRequireResourceOrDo}
+
+If you want to load a resource file if it exists (without an
+error if it doesn't exist), then you can use
+\cmddef{TrackLangRequestResource}
+If the file doesn't exist, \meta{not found code} is done.
+
+\begin{important}
+Note that these \cmd{\ldots Resource\ldots} commands are only
+permitted within the resource files. They are internally enabled
+through \gls{TrackLangRequireDialect}.
+\end{important}
+
+The above restriction on the resource files loaded through
+\gls{TrackLangRequireDialect}, and the fact that it internally uses
+\gls{IfTrackedLanguageFileExists}, means that commands like
+\gls{CurrentTrackedLanguage} or \gls{CurrentTrackedDialect} may be
+used in those files. This means that the name of the captions hook
+can be obtained through them. (Remember that the file
+\ldf{foo}{en-GB} might have been loaded with, say, the
+\opt{british} dialect or with the synonymous \opt{UKenglish}
+dialect or with a dialect label that doesn't have a corresponding
+caption hook, such as \optfmt{enGBLatn}.)
+
+The \sty{polyglossia} package has language caption hooks in the form
+\tklcaptions{\meta{language}} (where \meta{language} is the root language
+label) whereas \sty{babel} has dialect captions hooks
+in the form \gls{captionsdialect} (where \meta{dialect} is the
+dialect label). This leads to a rather
+cumbersome set of conditionals:
+\begin{compactcodebox}
+\cmd{ifcsundef}\marg{captions\gls{CurrentTrackedLanguage}}
+\marg{\comment{}
+ \cmd{ifcsundef}\marg{captions\gls{CurrentTrackedDialect}}\comment{}
+ \marg{}\comment{}
+ \marg{\comment{}
+ \cmd{csgappto}\marg{captions\gls{CurrentTrackedDialect}}\marg{\comment{}
+ \comment{code to append to hook}
+ }\comment{}
+ }\comment{}
+}\comment{}
+\marg{\comment{}
+ \cmd{csgappto}\marg{captions\gls{CurrentTrackedLanguage}}\marg{\comment{}
+ \comment{code to append to hook}
+ }\comment{}
+}
+\comment{do code now to initialise}
+\end{compactcodebox}
+Note that the above has been simplified through the use of
+\sty{etoolbox} commands, which isn't suitable for generic use.
+It also doesn't query the mapping from \sty{tracklang}['s] dialect
+label to the closest matching \sty{babel} dialect label.
+
+Instead, \sty{tracklang} provides a command
+to perform this set of conditionals using generic code:
+\cmddef{TrackLangAddToHook}
+where \meta{code} is the code to append to the \meta{type} hook.
+This always performs \meta{code} after testing for the hook in case
+the hook is undefined or has already been called (for example, \sty{ngerman} uses
+\tklcaptions{ngerman} when the package is loaded, not at the start of
+the document).
+
+Note that this command is enabled through
+\gls{TrackLangRequireDialect} so should only be used inside resource
+files.
+
+Since \optfmt{captions} is a commonly used hook type, there's
+a~shortcut command provided:
+\cmddef{TrackLangAddToCaptions}
+This is equivalent to
+\begin{compactcodebox}
+\gls{TrackLangAddToHook}\margm{code}\marg{captions}
+\end{compactcodebox}
+
+There may be some hooks, such as \gls{datedialect}, that need
+redefining rather than appending to, so there's an
+analogous command:
+\cmddef{TrackLangRedefHook}
+which will redefined the hook to do \meta{code}.
+
+Note that no expansion is performed on \meta{code} when appending or
+redefining a hook.
+
+\section{Examples}
+\label{sec:examples}
+
+The examples in this section illustrate the above commands.
+
+\subsection{\filefmt{animals.sty}}
+\label{sec:animals}
+
+This example is for a trivial package called \file{animals.sty}
+that defines three textual commands: \cmd{catname}, \cmd{dogname}
+and \cmd{ladybirdname}. The default values are: \qt{cat}, \qt{dog} and
+\qt{bishy-barney-bee}.\footnote{Thass Broad Norfolk, my bewties
+\code{:-P}}
+The supported languages are defined in files
+\localefile{animals}.
+
+Here's the code for \file{animals.sty}:
+\begin{codebox}
+\comment{Example package animals.sty}
+\cmd{NeedsTeXFormat}\marg{LaTeX2e}
+\cmd{ProvidesPackage}\marg{animals}
+\codepar
+\cmd{RequirePackage}\marg{tracklang}[2019/11/30]\comment{v1.4}
+\codepar
+\comment{Any undeclared options are language settings:}
+\codepar
+\cmd{DeclareOption}*\marg{\comment{}
+ \gls{TrackIfKnownLanguage}\marg{\cmd{CurrentOption}}\comment{}
+ \marg{\comment{successful}
+ \cmd{PackageInfo}\marg{animals}\marg{Tracking language `\cmd{CurrentOption}'}\comment{}
+ }\comment{}
+ \marg{\comment{failed}
+ \cmd{PackageError}\marg{animals}\comment{}
+ \marg{Unknown language specification `\cmd{CurrentOption}'}\comment{}
+ \marg{You need to supply either a known dialect label
+ or a valid language tag}\comment{}
+ }\comment{}
+}
+\codepar
+\cmd{ProcessOptions}
+\codepar
+\comment{Default definitions}
+\cmd{newcommand}\cmd{catname}\marg{cat}
+\cmd{newcommand}\cmd{dogname}\marg{dog}
+\cmd{newcommand}\cmd{ladybirdname}\marg{bishy-barney-bee}
+\codepar
+\gls{AnyTrackedLanguages}
+\marg{\comment{}
+ \gls{ForEachTrackedDialect}\marg{\cmd{this@dialect}}\marg{\comment{}
+ \gls{TrackLangRequireDialect}\marg{animals}\marg{\cmd{this@dialect}}\comment{}
+ }\comment{}
+}
+\marg{\comment{no tracked languages, default already set up}
+}
+\codepar
+\cmd{endinput}
+\end{codebox}
+Here's a Plain \TeX\ version that picks up the language from the
+locale environment variable:
+\begin{codebox}
+\gls{input} tracklang
+\codepar
+\gls{TrackLangFromEnv}
+\codepar
+\comment{Default definitions}
+\cmd{def}\cmd{catname}\marg{cat}
+\cmd{def}\cmd{dogname}\marg{dog}
+\cmd{def}\cmd{ladybirdname}\marg{bishy-barney-bee}
+\codepar
+\gls{AnyTrackedLanguages}
+\marg{\comment{}
+ \gls{ForEachTrackedDialect}\marg{\cmd{thisdialect}}\marg{\comment{}
+ \gls{TrackLangRequireDialect}\marg{animals}\marg{\cmd{thisdialect}}\comment{}
+ }\comment{}
+}
+\marg{\comment{no tracked languages, default already set up}
+}
+\end{codebox}
+In the event that a user or supplementary package for some
+reason wants to load a resource
+file for a language that hasn't been tracked, it might be worth
+providing a command for this purpose:
+\begin{codebox}
+\cmd{newcommand}*\marg{\cmd{RequireAnimalsDialect}}[1]\marg{\comment{}
+ \gls{TrackLangRequireDialect}\marg{animals}\marg{\#1}\comment{}
+}
+\end{codebox}
+The loop can then be changed to:
+\begin{codebox}
+\gls{ForEachTrackedDialect}\marg{\cmd{this@dialect}}\marg{\comment{}
+ \cmd{RequireAnimalsDialect}\cmd{this@dialect}
+}\comment{}
+\end{codebox}
+
+The \ldf{animals}{english} file valid for both the Plain \TeX\
+and \LaTeX\ formats contains:
+\begin{codebox}
+\gls{TrackLangProvidesResource}\marg{english}
+\codepar
+\cmd{def}\cmd{englishanimals}\marg{\comment{}
+ \cmd{def}\cmd{catname}\marg{cat}\comment{}
+ \cmd{def}\cmd{dogname}\marg{dog}\comment{}
+ \cmd{def}\cmd{ladybirdname}\marg{bishy-barney-bee}\comment{}
+}
+\codepar
+\gls{TrackLangAddToCaptions}\marg{\cmd{englishanimals}}
+\end{codebox}
+The \ldf{animals}{en-GB} file contains:
+\begin{codebox}
+\gls{TrackLangProvidesResource}\marg{en-GB}
+\gls{TrackLangRequireResource}\marg{english}
+\codepar
+\cmd{def}\cmd{enGBanimals}\marg{\comment{}
+ \cmd{englishanimals}
+ \cmd{def}\cmd{ladybirdname}\marg{ladybird}\comment{}
+}
+\gls{TrackLangAddToCaptions}\marg{\cmd{enGBanimals}}
+\end{codebox}
+The \ldf{animals}{en-US} file contains:
+\begin{codebox}
+\gls{TrackLangProvidesResource}\marg{en-US}
+\gls{TrackLangRequireResource}\marg{english}
+\codepar
+\cmd{def}\cmd{enUSanimals}\marg{\comment{}
+ \cmd{englishanimals}
+ \cmd{def}\cmd{ladybirdname}\marg{ladybug}\comment{}
+}
+\gls{TrackLangAddToCaptions}\marg{\cmd{enUSanimals}}
+\end{codebox}
+Here's a German version in the file \ldf{animals}{german}:
+\begin{codebox}
+\gls{TrackLangProvidesResource}\marg{german}
+\codepar
+\cmd{def}\cmd{germananimals}\marg{\comment{}
+ \cmd{def}\cmd{catname}\marg{Katze}\comment{}
+ \cmd{def}\cmd{dogname}\marg{Hund}\comment{}
+ \cmd{def}\cmd{ladybirdname}\marg{Marienk\cmd{"}afer}\comment{}
+}
+\codepar
+\gls{TrackLangAddToCaptions}\marg{\cmd{germananimals}}
+\end{codebox}
+
+This means that if \sty{babel} or \sty{polyglossia} are loaded, the
+redefinitions are automatically performed whenever the language is
+changed, but if there's no caption mechanism the user can switch
+the fixed names using the \cmd{\ldots animals} commands.
+
+Here's an example \LaTeX\ document that doesn't have any caption
+hooks:
+\begin{codebox}
+\cmd{documentclass}[\opt{english},\opt{german}]\marg{article}
+\codepar
+\cmd{usepackage}\marg{animals}
+\codepar
+\cbeg{document}
+\cmd{englishanimals}
+\codepar
+\cmd{catname}.
+\cmd{dogname}.
+\cmd{ladybirdname}.
+\codepar
+\cmd{germananimals}
+\codepar
+\cmd{catname}.
+\cmd{dogname}.
+\cmd{ladybirdname}.
+\cend{document}
+\end{codebox}
+Here's a \sty{babel} example document:
+\begin{codebox}
+\cmd{documentclass}[\opt{american},\opt{german},\opt{british}]\marg{article}
+\codepar
+\cmd{usepackage}\marg{babel}
+\cmd{usepackage}\marg{animals}
+\codepar
+\cbeg{document}
+\cmd{selectlanguage}\marg{american}
+\codepar
+\cmd{catname}.
+\cmd{dogname}.
+\cmd{ladybirdname}.
+\codepar
+\cmd{selectlanguage}\marg{german}
+\codepar
+\cmd{catname}.
+\cmd{dogname}.
+\cmd{ladybirdname}.
+\codepar
+\cmd{selectlanguage}\marg{british}
+\codepar
+\cmd{catname}.
+\cmd{dogname}.
+\cmd{ladybirdname}.
+\cend{document}
+\end{codebox}
+
+There is some redundancy with the above resource files. Consider the
+\sty{babel} example above. The \opt{american} dialect is the
+first option, so in that case \ldf{animals}{en-US} is loaded
+followed by \ldf{animals}{english}. This means that the
+\tklcaptions{american} hook now includes
+\begin{codebox}
+\cmd{englishanimals}
+\cmd{enUSanimals}
+\end{codebox}
+Since \cmd{enUSanimals} includes \cmd{englishanimals}, there is
+redundant code. However, when the \opt{british} dialect is
+processed, this loads the file \ldf{animals}{en-GB} but not
+the file \ldf{animals}{english} (since it's already been loaded). This
+means that \tklcaptions{british} contains \cmd{enGBanimals} but not
+\cmd{englishanimals}.
+
+If this redundancy is an issue (for example, there are so many
+redefinitions needed that it significantly slows the document build
+process), then it can be addressed with the following modifications.
+The \ldf{animals}{en-GB} file is now:
+\begin{codebox}
+\gls{TrackLangProvidesResource}\marg{en-GB}
+\codepar
+\cmd{def}\cmd{enGBanimals}\marg{\comment{}
+ \cmd{englishanimals}
+ \cmd{def}\cmd{ladybirdname}\marg{ladybird}\comment{}
+}
+\codepar
+\gls{TrackLangRequireResourceOrDo}\marg{english}\comment{}
+\marg{
+ \gls{TrackLangAddToCaptions}\marg{\comment{}
+ \cmd{def}\cmd{ladybirdname}\marg{ladybird}\comment{}
+ }\comment{}
+}
+\marg{
+ \gls{TrackLangAddToCaptions}\marg{\cmd{enGBanimals}}
+}
+\end{codebox}
+The \ldf{animals}{en-US} file is now:
+\begin{codebox}
+\gls{TrackLangProvidesResource}\marg{en-US}
+\codepar
+\cmd{providecommand}*\marg{\cmd{enUSanimals}}\marg{\comment{}
+ \cmd{englishanimals}
+ \cmd{renewcommand}*\marg{\cmd{ladybirdname}}\marg{ladybug}\comment{}
+}
+\codepar
+\gls{TrackLangRequireResourceOrDo}\marg{english}
+\marg{
+ \gls{TrackLangAddToCaptions}\marg{\comment{}
+ \cmd{renewcommand}*\marg{\cmd{ladybirdname}}\marg{ladybird}\comment{}
+ }\comment{}
+}
+\marg{
+ \gls{TrackLangAddToCaptions}\marg{\cmd{enUSanimals}}
+}
+\end{codebox}
+This means that the document that has the dialects listed in the
+order \opt{american}, \opt{british} now has
+\begin{codebox}
+\cmd{englishanimals}
+\cmd{def}\cmd{ladybirdname}\marg{ladybird}
+\end{codebox}
+in the \tklcaptions{british} hook and just \cmd{enUSanimals} in the
+\tklcaptions{american} hook, which has removed most of the redundancy.
+
+Note that \sty{polyglossia} has a \tklcaptions{english} hook but not
+\tklcaptions{american} or \tklcaptions{british}, so this code doesn't
+allow for switching between variants of the same language with
+\sty{polyglossia}.
+
+\subsection{\filefmt{regions.sty}}
+\label{sec:regions}
+
+\glsadd{file.regions.sty}%
+\phyperref{Earlier}{pg.britishfilesearch}, I~mentioned the search order for
+\gls{IfTrackedLanguageFileExists} where if, for example, the dialect
+is \opt{british}, the file search (v1.4+) will be:
+\begin{enumerate}
+\item \ldf{mypackage}{en-GB} (language tag)
+\item \ldf{mypackage}{british} (dialect label)
+
+\item \ldf{mypackage}{en-Latn-GB} (\idx{639-1} language code,
+\idx{script}, \idx{region})
+\item \ldf{mypackage}{en-GB} (\idx{639-1} language code,
+\idx{region})
+\item \ldf{mypackage}{en-Latn} (\idx{639-1} language code,
+\idx{script})
+\item \ldf{mypackage}{en} (\idx{639-1} language code)
+
+\item \ldf{mypackage}{eng-Latn-GB} (\idx{639-2} language
+code, \idx{script}, \idx{region})
+\item \ldf{mypackage}{eng-GB} (\idx{639-2} language code,
+\idx{region})
+\item \ldf{mypackage}{eng-Latn} (\idx{639-2} language code,
+\idx{script})
+\item \ldf{mypackage}{eng} (\idx{639-2} language code)
+
+\item \ldf{mypackage}{GB} (\idx{region})
+\item \ldf{mypackage}{english} (language label)
+\end{enumerate}
+You may have wondered why
+\ldf{mypackage}{GB} is included in the search given that some
+countries have multiple official languages, which means that the country code on its
+own may not indicate the language.
+
+The reason for including just the country code as the \meta{localeid} in the
+file search is to allow for region rather than language dependent
+settings. For example, suppose I~want to write a package that needs
+to know whether to use imperial or metric measurements in the
+document, but I also want to provide multilingual support. The
+language alone won't tell me whether to use imperial or metric (for
+example, the US uses imperial and the UK uses metric for most
+product attributes). I could provide \ext+{ldf} files for every
+language and region combination, but this would result in a lot
+redundancy.
+
+\gls{TrackLangRequireDialect} has an optional argument for adjusting
+the way the resource files are loaded. Suppose I have
+\localefile{regions} resource files, then
+\begin{codebox}
+\gls{TrackLangRequireDialect}\marg{regions}\marg{\cmd{this@dialect}}
+\end{codebox}
+loads the resource file for the dialect given by \cmd{this@dialect}
+using:
+\begin{compactcodebox}
+\gls{TrackLangRequireResource}\marg{\gls{CurrentTrackedTag}}
+\end{compactcodebox}
+I can use the optional argument to also load the resource file for the
+root language as well:
+\begin{codebox}%
+\comment{custom file loader for regions.sty}
+\cmd{newcommand}*\marg{\cmd{RequireRegionsDialect}}[1]\marg{\comment{}
+ \gls{TrackLangRequireDialect}
+ \oarg{\gls{TrackLangRequireResource}\marg{\gls{CurrentTrackedTag}}\comment{}
+ \gls{TrackLangRequireResource}\marg{\gls{CurrentTrackedLanguage}}\comment{}
+ }\comment{}
+ \marg{regions}\marg{\#1}\comment{}
+}
+\end{codebox}
+Now the dialect \opt{british} can load both
+\ldf{regions}{GB} and \ldf{regions}{english}.
+
+The example package (\file{regions.sty}) below illustrates this.
+\begin{codebox}
+\comment{Example package regions.sty}
+\cmd{NeedsTeXFormat}\marg{LaTeX2e}
+\cmd{ProvidesPackage}\marg{regions}
+\codepar
+\gls{RequirePackage}\marg{tracklang}[2016/10/07]\comment{v1.3+}
+\codepar
+\cmd{DeclareOption}*\marg{\gls{TrackLanguageTag}\marg{\cmd{CurrentOption}}}
+\cmd{ProcessOptions}
+\codepar
+\cmd{newcommand}*\marg{\cmd{weightunit}}\marg{kg}
+\cmd{newcommand}*\marg{\cmd{lengthunit}}\marg{mm}
+\cmd{newcommand}*\marg{\cmd{currencyunit}}\marg{EUR}
+\codepar
+\cmd{newcommand}*\marg{\cmd{unitname}}\marg{units}
+\codepar
+\cmd{newcommand}*\marg{\cmd{RequireRegionsDialect}}[1]\marg{\comment{}
+ \gls{TrackLangRequireDialect}
+ \oarg{\gls{TrackLangRequireResource}\marg{\gls{CurrentTrackedTag}}\comment{}
+ \gls{TrackLangRequireResource}\marg{\gls{CurrentTrackedLanguage}}\comment{}
+ }\comment{}
+ \marg{regions}\marg{\#1}\comment{}
+}
+\codepar
+\gls{AnyTrackedLanguages}
+\marg{\comment{}
+ \gls{ForEachTrackedDialect}\marg{\cmd{this@dialect}}\marg{\comment{}
+ \cmd{RequireRegionsDialect}\cmd{this@dialect}
+ }\comment{}
+}
+\marg{\comment{no tracked languages, default already set up}
+}
+\codepar
+\cmd{endinput}
+\end{codebox}
+There are separate \ext{ldf} files for region and language.
+First are the regions.
+
+\begin{itemize}
+\item \ldf{regions}{BE} (Belgium):
+\begin{codebox}
+\gls{TrackLangProvidesResource}\marg{BE}
+\codepar
+\cmd{providecommand}*\marg{\cmd{BEunits}}\marg{\comment{}
+ \cmd{renewcommand}*\marg{\cmd{weightunit}}\marg{kg}\comment{}
+ \cmd{renewcommand}*\marg{\cmd{lengthunit}}\marg{mm}\comment{}
+ \cmd{renewcommand}*\marg{\cmd{currencyunit}}\marg{EUR}\comment{}
+}
+\codepar
+\gls{TrackLangAddToCaptions}\marg{\cmd{BEunits}}
+\end{codebox}
+
+\item \ldf{regions}{CA} (Canada):
+\begin{codebox}
+\gls{TrackLangProvidesResource}\marg{CA}
+\codepar
+\cmd{providecommand}*\marg{\cmd{CAunits}}\marg{\comment{}
+ \cmd{renewcommand}*\marg{\cmd{weightunit}}\marg{kg}\comment{}
+ \cmd{renewcommand}*\marg{\cmd{lengthunit}}\marg{mm}\comment{}
+ \cmd{renewcommand}*\marg{\cmd{currencyunit}}\marg{CAD}\comment{}
+}
+\codepar
+\gls{TrackLangAddToCaptions}\marg{\cmd{CAunits}}
+\end{codebox}
+
+\item \ldf{regions}{GB} (Great Britain):
+\begin{codebox}
+\gls{TrackLangProvidesResource}\marg{GB}
+\codepar
+\cmd{providecommand}*\marg{\cmd{GBunits}}\marg{\comment{}
+ \cmd{renewcommand}*\marg{\cmd{weightunit}}\marg{kg}\comment{}
+ \cmd{renewcommand}*\marg{\cmd{lengthunit}}\marg{mm}\comment{}
+ \cmd{renewcommand}*\marg{\cmd{currencyunit}}\marg{GBP}\comment{}
+}
+\codepar
+\gls{TrackLangAddToCaptions}\marg{\cmd{GBunits}}
+\end{codebox}
+
+\item \ldf{regions}{US} (USA):
+\begin{codebox}
+\gls{TrackLangProvidesResource}\marg{US}
+\codepar
+\cmd{providecommand}*\marg{\cmd{USunits}}\marg{\comment{}
+ \cmd{renewcommand}*\marg{\cmd{weightunit}}\marg{lb}\comment{}
+ \cmd{renewcommand}*\marg{\cmd{lengthunit}}\marg{in}\comment{}
+ \cmd{renewcommand}*\marg{\cmd{currencyunit}}\marg{USD}\comment{}
+}
+\codepar
+\gls{TrackLangAddToCaptions}\marg{\cmd{USunits}}
+\end{codebox}
+\end{itemize}
+Now the language files:
+
+\begin{itemize}
+\item \ldf{regions}{dutch}:
+\begin{codebox}
+\gls{TrackLangProvidesResource}\marg{dutch}
+\codepar
+\cmd{providecommand}*\marg{\cmd{dutchnames}}\marg{\comment{}
+ \cmd{renewcommand}*\marg{\cmd{unitname}}\marg{meeteenheden}\comment{}
+}
+\codepar
+\gls{TrackLangAddToCaptions}\marg{\cmd{dutchnames}}
+\end{codebox}
+
+\item \ldf{regions}{english}:
+\begin{codebox}
+\gls{TrackLangProvidesResource}\marg{english}
+\codepar
+\cmd{providecommand}*\marg{\cmd{englishnames}}\marg{\comment{}
+ \cmd{renewcommand}*\marg{\cmd{unitname}}\marg{units}\comment{}
+}
+\codepar
+\gls{TrackLangAddToCaptions}\marg{\cmd{englishnames}}
+\end{codebox}
+
+\item \ldf{regions}{french}:
+\begin{codebox}
+\cmd{TrackLangProvidesResource}\marg{french}
+\codepar
+\cmd{providecommand}*\marg{\cmd{frenchnames}}\marg{\comment{}
+ \cmd{renewcommand}*\marg{\cmd{unitname}}\marg{unit\cmd{'}es}\comment{}
+}
+\codepar
+\gls{TrackLangAddToCaptions}\marg{\cmd{frenchnames}}
+\end{codebox}
+
+\item \ldf{regions}{german}:
+\begin{codebox}
+\gls{TrackLangProvidesResource}\marg{french}
+\codepar
+\cmd{providecommand}*\marg{\cmd{germannames}}\marg{\comment{}
+ \cmd{renewcommand}*\marg{\cmd{unitname}}\marg{Ma\cmd{ss} einheiten}\comment{}
+}
+\codepar
+\gls{TrackLangAddToCaptions}\marg{\cmd{germannames}}
+\end{codebox}
+\end{itemize}
+
+Here's an example document that uses this package:
+\begin{codebox}
+\cmd{documentclass}[\opt{canadien}]\marg{article}
+\codepar
+\cmd{usepackage}\marg{regions}
+\codepar
+\cbeg{document}
+\codepar
+\cmd{unitname}: \cmd{weightunit}, \cmd{lengthunit}, \cmd{currencyunit}.
+\codepar
+\cend{document}
+\end{codebox}
+
+This works because the \meta{localeid} search looks for the
+country code before the root language label. However, this will fail if
+the dialect label is the same as a root language label that has an
+associated territory, marked with \fnregion\ in
+\tableref{tab:rootlangopts}, as then it will be picked up before the
+country code.
+
+In the above example,
+\ldf{regions}{CA} is matched rather than
+\ldf{regions}{french}, so \ldf{regions}{CA} is loaded by
+\begin{compactcodebox}
+\gls{TrackLangRequireResource}\marg{\gls{CurrentTrackedTag}}
+\end{compactcodebox}
+After this, the language file \ldf{regions}{french} is then loaded:
+\begin{compactcodebox}
+\gls{TrackLangRequireResource}\marg{\gls{CurrentTrackedLanguage}}
+\end{compactcodebox}
+
+This assumes that there's a country code \ext{ldf} file
+available. This example needs a little modification to use default
+units in case the region is missing:
+\begin{codebox}
+\comment{Modified example package regions.sty}
+\cmd{NeedsTeXFormat}\marg{LaTeX2e}
+\cmd{ProvidesPackage}\marg{regions}
+\codepar
+\comment{Pass all options to \file{tracklang.sty}:}
+\cmd{DeclareOption}*\marg{\cmd{PassOptionsToPackage}\marg{\cmd{CurrentOption}}\marg{tracklang}}
+\cmd{ProcessOptions}
+\codepar
+\gls{RequirePackage}\marg{tracklang}
+\codepar
+\cmd{newcommand}*\marg{\cmd{weightunit}}\marg{kg}
+\cmd{newcommand}*\marg{\cmd{lengthunit}}\marg{mm}
+\cmd{newcommand}*\marg{\cmd{currencyunit}}\marg{EUR}
+\codepar
+\cmd{newcommand}*\marg{\cmd{unitname}}\marg{units}
+\codepar
+\cmd{newcommand}*\marg{\cmd{defaultunits}}\marg{\comment{}
+ \cmd{renewcommand}*\marg{\cmd{weightunit}}\marg{kg}\comment{}
+ \cmd{renewcommand}*\marg{\cmd{lengthunit}}\marg{mm}\comment{}
+ \cmd{renewcommand}*\marg{\cmd{currencyunit}}\marg{EUR}\comment{}
+}
+\codepar
+\cmd{newcommand}*\marg{\cmd{RequireRegionsDialect}}[1]\marg{\comment{}
+ \gls{TrackLangRequireDialect}
+ \oarg{\gls{TrackLangRequireResource}\marg{\gls{CurrentTrackedTag}}\comment{}
+ \cmd{ifx}\gls{CurrentTrackedTag}\gls{CurrentTrackedLanguage}
+ \gls{TrackLangAddToCaptions}\marg{\cmd{defaultunits}}\comment{}
+ \cmd{else}
+ \gls{TrackLangRequireResource}\marg{\gls{CurrentTrackedLanguage}}\comment{}
+ \cmd{fi}
+ }\comment{}
+ \marg{regions}\marg{\#1}\comment{}
+}
+\codepar
+\gls{AnyTrackedLanguages}
+\marg{\comment{}
+ \gls{ForEachTrackedDialect}\marg{\cmd{this@dialect}}{\comment{}
+ \cmd{RequireRegionsDialect}\cmd{this@dialect}
+ }\comment{}
+}
+\marg{\comment{no tracked languages, default already set up}
+}
+\codepar
+\cmd{endinput}
+\end{codebox}
+Note that we still have a problem for dialect labels that are
+identical to root language labels with an associated territory (such
+as \opt{manx}). This case can be checked with the following
+adjustment:
+\begin{codebox}
+\cmd{newcommand}*\marg{\cmd{RequireRegionsDialect}}[1]\marg{\comment{}
+ \gls{TrackLangRequireDialect}
+ \oarg{\gls{TrackLangRequireResource}\marg{\gls{CurrentTrackedTag}}\comment{}
+ \cmd{ifx}\gls{CurrentTrackedTag}\gls{CurrentTrackedLanguage}
+ \cmd{ifx}\gls{CurrentTrackedRegion}\cmd{empty}
+ \gls{TrackLangAddToCaptions}\marg{\cmd{defaultunits}}\comment{}
+ \cmd{else}
+ \gls{TrackLangRequireResource}\marg{\gls{CurrentTrackedRegion}}\comment{}
+ \cmd{fi}
+ \cmd{else}
+ \gls{TrackLangRequireResource}\marg{\gls{CurrentTrackedLanguage}}\comment{}
+ \cmd{fi}
+ }\comment{}
+ \marg{regions}\marg{\#1}\comment{}
+}
+\end{codebox}
+In the case where both the dialect and root language label are
+\opt{manx} with the resource files \ldf{regions}{manx}
+and \ldf{regions}{IM}, then \gls{CurrentTrackedTag} will be
+\opt{manx} (the dialect label) so \ldf{regions}{manx} will
+be loaded with:
+\begin{compactcodebox}
+\gls{TrackLangRequireResource}\marg{\gls{CurrentTrackedTag}}
+\end{compactcodebox}
+In this case \gls{CurrentTrackedRegion} is \code{IM} (that is, it's
+not empty) so then \ldf{regions}{IM} will be loaded with:
+\begin{compactcodebox}
+\gls{TrackLangRequireResource}\marg{\gls{CurrentTrackedRegion}}
+\end{compactcodebox}
+
+Here's another document that sets up dialects with
+\sty{tracklang} labels that aren't recognised by \sty{babel}.
+This means that there's no corresponding \gls{captionsdialect} hook
+for either the dialect label or the root language label,
+so mappings need to be defined from the \sty{tracklang} dialect
+label to the matching \sty{babel} dialect label.
+
+\begin{codebox}
+\cmd{documentclass}\marg{article}
+\codepar
+\cmd{usepackage}\marg{tracklang}
+\codepar
+\gls{TrackLanguageTag}\marg{de-US-1996}
+\gls{SetTrackedDialectLabelMap}\marg{\gls{TrackLangLastTrackedDialect}}\marg{ngerman}
+\codepar
+\gls{TrackLanguageTag}\marg{en-MT}
+\gls{SetTrackedDialectLabelMap}\marg{\gls{TrackLangLastTrackedDialect}}\marg{UKenglish}
+\codepar
+\cmd{usepackage}[main=ngerman,UKenglish]\marg{babel}
+\cmd{usepackage}\marg{regions}
+\codepar
+\cbeg{document}
+\gls{selectlanguage}\marg{ngerman}
+\codepar
+\cmd{unitname}: \cmd{weightunit}, \cmd{lengthunit}, \cmd{currencyunit}.
+\codepar
+\gls{selectlanguage}\marg{UKenglish}
+\codepar
+\cmd{unitname}: \cmd{weightunit}, \cmd{lengthunit}, \cmd{currencyunit}.
+\codepar
+\cend{document}
+\end{codebox}
+This produces:
+\begin{resultbox}
+Ma\ss einheiten: lb, in, USD.
+
+units: kg, mm, EUR.
+\end{resultbox}
+Compare this with:
+\begin{codebox}
+\cmd{documentclass}\marg{article}
+\codepar
+\cmd{usepackage}[main=ngerman,UKenglish]\marg{babel}
+\cmd{usepackage}\marg{regions}
+\codepar
+\cbeg{document}
+\gls{selectlanguage}\marg{ngerman}
+\codepar
+\cmd{unitname}: \cmd{weightunit}, \cmd{lengthunit}, \cmd{currencyunit}.
+\codepar
+\gls{selectlanguage}\marg{UKenglish}
+\codepar
+\cmd{unitname}: \cmd{weightunit}, \cmd{lengthunit}, \cmd{currencyunit}.
+\codepar
+\cend{document}
+\end{codebox}
+which produces:
+\begin{resultbox}
+Ma\ss einheiten: kg, mm, EUR.
+
+units: kg, mm, GBP.
+\end{resultbox}
+
+Note that these mappings aren't needed if \sty{babel}
+is loaded with the root language labels instead. For example:
+\begin{codebox}
+\cmd{documentclass}\marg{article}
+\codepar
+\cmd{usepackage}\marg{tracklang}
+\codepar
+\gls{TrackLanguageTag}\marg{de-US-1996}
+\gls{SetTrackedDialectLabelMap}\marg{\gls{TrackLangLastTrackedDialect}}\marg{ngerman}
+\codepar
+\gls{TrackLanguageTag}\marg{en-MT}
+\codepar
+\cmd{usepackage}[main=ngerman,english]\marg{babel}
+\cmd{usepackage}\marg{regions}
+\codepar
+\cbeg{document}
+\gls{selectlanguage}\marg{ngerman}
+\codepar
+\cmd{unitname}: \cmd{weightunit}, \cmd{lengthunit}, \cmd{currencyunit}.
+\codepar
+\gls{selectlanguage}\marg{english}
+\codepar
+\cmd{unitname}: \cmd{weightunit}, \cmd{lengthunit}, \cmd{currencyunit}.
+\codepar
+\cend{document}
+\end{codebox}
+No mapping is required for the \opt{en-MT} locale as
+it can pick up \tklcaptions{english} when \gls{TrackLangAddToHook}
+(used by \gls{TrackLangAddToCaptions})
+queries the root language label after failing to find the
+language hook from the dialect label.
+
+Some of the predefined \sty{tracklang} dialects come with
+a mapping to the closest matching \sty{babel} dialect label.
+For example, the option \opt{ngermanDE} listed in
+\tableref{tab:nonisoopts} automatically provides a mapping
+to \opt{ngerman}. Since a \sty{tracklang} dialect label
+can only map to one \sty{babel} label, this can be problematic
+for synonymous labels such as
+\opt{british}\slash\opt{UKenglish} or
+\opt{american}\slash\opt{USenglish}. The default mappings used
+by \sty{tracklang} are shown in \tableref{tab:nonisoopts}.
+
+\chapter{Adding Support for Language Tracking}
+\label{sec:langsty}
+
+If you are writing a package that \emph{sets up} the document languages (rather
+than a package that provides multilingual support if the user has
+already loaded a language package) then you can load \sty{tracklang}
+and use the commands below to help other packages track your
+provided languages. (See also:
+\dickimawhref{latex/tracklang/langpkg.shtml}{Integrating
+\filefmt{tracklang.tex} into Language Packages}.)
+
+The \sty{tracklang} package can be loaded using
+\begin{codebox}
+\gls{input} tracklang
+\end{codebox}
+or (\LaTeX\ only)
+\begin{codebox}
+\gls{RequirePackage}\marg{tracklang}
+\end{codebox}
+
+When using \LaTeX, there's a difference between the two.
+The first case prevents \sty{tracklang} from picking up
+the document class options but skips the check for known
+language packages. This check is redundant since your package is
+the language package, so you need to decide whether or
+not to allow the user to set up the localisation information
+through the document class options.
+
+There's a hook that, if defined, is performed by
+\file{tracklang.sty} after the package options have been loaded but
+before known language packages are checked:
+\cmddef{@tracklang@prelangpkgcheck@hook}
+
+If you prefer \gls{RequirePackage} over \gls{input} but you want to make
+\file{tracklang.sty} skip the check for known
+language packages then (as from v1.3.8) define the pre-language
+package check hook as follows:
+\begin{codebox}
+\cmd{providecommand}\gls{@tracklang@prelangpkgcheck@hook}\marg{\cmd{endinput}}
+\gls{RequirePackage}\marg{tracklang}[2019/10/06]\comment{v1.3.8+}
+\end{codebox}
+This will still pick up languages supplied through the
+document class options.
+
+If you just use \gls{input}, there's a test at the start of
+\file{tracklang.tex} to determine if it's already been loaded, so
+you don't need to worry if the document has already input it.
+
+To integrate \sty{tracklang} into your language package, you need
+to consider the following steps:
+\begin{enumerate}
+\item Does \sty{tracklang} define your supported \idxn{15924} language
+scripts in the \file{tracklang-scripts.tex} file?
+
+If yes, then skip this step. Otherwise create a file with the
+relevant \gls{TrackLangScriptMap} command for each unknown script and identify
+this new file with \gls{TrackLangAddExtraScriptFile} (see
+\sectionref{sec:newscripts}). This usually
+won't be necessary unless you have a custom script or a child script
+(a script that's a sub-category of another script).
+
+\item Does \sty{tracklang} recognise the root language?
+
+If yes, then skip this step.
+
+If your package is setting up a language that \sty{tracklang}
+doesn't recognise then you will need to define the root language
+using \gls{TrackLangNewLanguage} (see \sectionref{sec:newlanguages}).
+
+This usually won't be the case as \sty{tracklang} should support all
+languages that have an official \idxn{639-1} alpha-2 code.
+
+If you simply have a different label from \sty{tracklang}
+identifying the root language, then you can just set up your label
+as a dialect using \gls{TrackLangProvidePredefinedDialect}.
+
+\item Does \sty{tracklang} define the relevant \idxn{3166-1} region codes
+in the \file{tracklang-region-codes.tex} file?
+
+If yes, then skip this step. Otherwise create a file with the
+relevant \gls{TrackLangRegionMap} command for each new region and
+identify this new file with \gls{TrackLangAddExtraRegionFile} (see
+\sectionref{sec:newregions}). This usually won't be necessary as
+\sty{tracklang} should recognise all countries that have an alpha-2
+region code, but you may require it if you need a broader region,
+such as EU.
+
+\item Do you want to define some convenient dialect labels that can
+be used with \gls{TrackPredefinedDialect}?
+
+If no, then skip this step. Otherwise you can use
+\gls{TrackLangProvidePredefinedLanguage} for root languages
+and \gls{TrackLangProvidePredefinedDialect} for dialects with
+additional information, such as a region, sub-language or script
+(see \sectionref{sec:definelabels}).
+
+\item In your language initialisation code, add the \sty{tracklang}
+code to track the particular dialect (for example, use
+\gls{TrackPredefinedDialect} for recognised dialect labels or
+use the \csmetafmt{AddTracked}{Xxx}{} set of commands). See
+\sectionref{sec:initnewlang}.
+
+\item In your language selection code (such as \gls{selectlanguage}), add
+\gls{SetCurrentTrackedDialect}\margm{label} to allow the document
+author to easily query the current localisation settings (such as
+the region). See \sectionref{sec:selectlanguage}.
+\end{enumerate}
+
+\section{Initialising a New Language or Dialect}
+\label{sec:initnewlang}
+
+When the user requests a particular dialect through your language
+package, you can notify \sty{tracklang} of this choice using
+\begin{compactcodebox*}
+\gls{TrackPredefinedDialect}\margm{dialect label}
+\end{compactcodebox*}
+provided the dialect label is recognised by \sty{tracklang} (all those
+listed in \refoptstables).
+
+If there's no matching dialect predefined by \sty{tracklang}, you
+can just use \gls{TrackLocale} or \gls{TrackLanguageTag}
+(described in \sectionref{sec:generic})
+with the appropriate \idx{ISO} codes \emph{if you're not providing caption
+hooks}.
+
+If you are providing a captions hook mechanism
+in the form \gls{captionsdialect}, then if \meta{dialect}
+doesn't match the corresponding \sty{tracklang} dialect label,
+you can provide a mapping using
+\gls{SetTrackedDialectLabelMap}, described below.
+
+\section{Switching Language or Dialect}
+\label{sec:selectlanguage}
+
+When the document author switches to a different language or
+dialect, the current localisation information can be set with:
+\cmddef{SetCurrentTrackedDialect}
+where \meta{dialect} may the \sty{tracklang} dialect label,
+or the mapped label previously set through \gls{SetTrackedDialectLabelMap},
+described below, or the language label (in which case the
+last dialect to be tracked with that root language will
+be assumed).
+
+This will make the following commands available which may be
+of use to other packages:
+\begin{itemize}
+\item\gls{CurrentTrackedDialect} The dialect label recognised
+by \sty{tracklang} (which may not be the same as \meta{dialect}).
+
+\item\gls{CurrentTrackedLanguage}
+The root language label used by \sty{tracklang}.
+
+\item\gls{CurrentTrackedDialectModifier} The dialect modifier.
+
+\item\gls{CurrentTrackedDialectVariant} The dialect variant.
+
+\item\gls{CurrentTrackedDialectScript} The dialect script.
+Note that if \sty{tracklang-scripts} is also loaded, this allows the
+script direction to be accessed using
+\begin{codebox}
+\gls{TrackLangScriptAlphaToDir}\marg{\gls{CurrentTrackedDialectScript}}
+\end{codebox}
+See \sectionref{sec:supplpkgs} for further details.
+
+\item\gls{CurrentTrackedDialectSubLang} The dialect sub-language
+code.
+
+\item\gls{GetTrackedDialectAdditional} The dialect's additional
+information.
+
+\item\gls{CurrentTrackedIsoCode} The dialect's root language
+\idx{ISO} code. (The first found in the sequence \idx{639-1},
+\idx{639-2}, \idx{639-3}.)
+
+\item\gls{CurrentTrackedRegion} The dialect's \idxn{3166-1} region
+code.
+
+\item\gls{CurrentTrackedLanguageTag} The dialect's language tag.
+
+\end{itemize}
+(Without this automated use of \gls{SetCurrentTrackedDialect},
+the same information can be picked up using commands
+like \gls{GetTrackedDialectScript}, but that's less convenient,
+especially if \gls{languagename} needs to be converted
+to \meta{dialect}. See the accompanying sample file
+\filefmt{sample-setlang.tex} for an example.)
+
+\section{Defining New Scripts}
+\label{sec:newscripts}
+
+The \file{tracklang-scripts.tex} file isn't automatically loaded,
+but if it is then, as from v1.4, it contains a hook at the end of
+the file that can be used to load additional files that define
+supplementary scripts. This entails creating a file called, say,
+\filefmt{mypackage-scripts.tex} that contains:
+\begin{compactcodebox*}
+\gls{TrackLangScriptMap}\margm{alpha code}\margm{numeric code}\margm{name}\margm{direction}\margm{parent script}
+\end{compactcodebox*}
+The first argument \meta{alpha code} is the four-letter ISO~15924 code (such as
+\opt{Latn}), the second argument is the numeric code (such as
+215), the third argument \meta{name} is the name of the script (such
+as \optfmt{Latin}), the fourth argument is the direction (such as
+\optfmt{LR} for left-to-right) and the final argument is the parent
+script (leave blank if there's no parent). Note that this command will override any previous
+mapping for those codes. No check is performed to determine if they
+have already been defined.
+
+The supplementary file should be identified with:
+\begin{compactcodebox*}
+\gls{TrackLangAddExtraScriptFile}\margm{filename}
+\end{compactcodebox*}
+
+Additional information can be found in \sectionref{sec:supplpkgs}.
+
+\section{Defining New Regions}
+\label{sec:newregions}
+
+The \file{tracklang-region-codes.tex} file isn't automatically loaded,
+but if it is then, as from v1.4, it contains a hook at the end of
+the file that can be used to load additional files that define
+supplementary regions. This entails creating a file called, say,
+\filefmt{mypackage-regions.tex} that contains:
+\begin{compactcodebox*}
+\gls{TrackLangRegionMap}\margm{numeric code}\margm{alpha-2
+code}\margm{alpha-3 code}
+\end{compactcodebox*}
+where the first argument is the numeric region code (such as 826),
+the second argument is the alpha-2 region code (such as \code{GB})
+and the third argument is the alpha-3 region code (such as
+\code{GBR}). Note that this command will override any previous
+mapping for those codes. No check is performed to determine if they
+have already been defined.
+
+The supplementary file should be identified with:
+\begin{compactcodebox*}
+\gls{TrackLangAddExtraRegionFile}\margm{filename}
+\end{compactcodebox*}
+
+Additional information can be found in \sectionref{sec:supplpkgs}.
+
+\section{Defining a New Language}
+\label{sec:newlanguages}
+
+(New to version 1.3.)
+If the root language isn't recognised by \sty{tracklang}
+(not listed in \tableref{tab:rootlangopts}), then
+it can be defined (but not tracked at this point) using:
+\cmddef{TrackLangNewLanguage}
+where \meta{language label} is the root language label,
+\meta{639-1 code} is the \idxn{639-1} code for that language (may be
+empty if there isn't one), \meta{639-2 (T)} is the \idxn{639-2T}
+code for that language (may be empty if there isn't one),
+\meta{639-2 (B)} is the \idxn{639-2B} code for that language (may be
+empty if it's the same as \meta{639-2 (T)}), \meta{639-3} is the
+\idxn{639-3} code for that language (empty if the same as the
+\idx{639-2} code), \meta{3166-1} is the territory \idxn{3166-1} code for
+languages that are only spoken in one territory (should be empty if
+the language is spoken in multiple territories), and \meta{default
+script} is the default script (empty if disputed or varies according
+to region).
+
+You can then track this language using:
+\cmddef{AddTrackedDialect}
+for dialects (where \meta{dialect label} is the dialect label and
+\meta{root language label} is the root language label) or, if
+no regional variant is needed, you can instead use:
+\cmddef{AddTrackedLanguage}
+This is equivalent to
+\begin{compactcodebox}
+\gls{AddTrackedDialect}\margm{root language label}\margm{root language label}
+\end{compactcodebox}
+Note that \gls{AddTrackedDialect} defines:
+\cmddef{TrackLangLastTrackedDialect}
+to the dialect label, which makes it easier to reference the last
+dialect to be tracked.
+
+\section{Defining New \styfmt{tracklang} Labels}
+\label{sec:definelabels}
+
+A dialect label may be predefined with associated information that
+allows that particular combination to be easily tracked with
+\gls{TrackPredefinedDialect}. In the case of a dialect label that
+only requires the information provided in \gls{TrackLangNewLanguage}
+you can use:
+\cmddef{TrackLangProvidePredefinedLanguage}
+where \meta{language label} corresponds to the language label used in
+\gls{TrackLangNewLanguage}. This allows
+\begin{compactcodebox*}
+\gls{TrackPredefinedDialect}\margm{label}
+\end{compactcodebox*}
+to not only track the root language but also the associated ISO codes.
+
+If the dialect label doesn't match the root language label then use:
+\cmddef{TrackLangProvidePredefinedDialect}
+where \meta{dialect label} is the new \sty{tracklang} dialect label,
+\marg{root language label} is the \sty{tracklang} root language label,
+\meta{region} is the \idxn{3166-1} region code (may be empty),
+\meta{modifier} is the \idx{modifier} (may be empty), \meta{variant}
+is the \idx{variant} information (may be empty), \meta{map} is your
+package's language label that corresponds to the \sty{tracklang}
+dialect label supplied in the first argument (may be empty if
+identical), and \meta{script} is the \idxn{15924} alpha-4 script code
+(may be empty if it's the same as the default script for the root
+language).
+
+For compatibility with pre version 1.3,
+if the dialect isn't predefined by
+\sty{tracklang}, then you can use:
+\begin{compactcodebox*}
+\gls{AddTrackedDialect}\marg{dialect}\marg{root language label}
+\end{compactcodebox*}
+where \meta{root language label} is the label for the dialect's root
+language (\tableref{tab:rootlangopts}) and \meta{dialect} matches
+the captions hook. If the dialect is already in the tracked dialect
+list, it won't be added again. If the root language is already in
+the tracked language list, it won't be added again. As from version
+1.3 this additionally defines
+\gls{TrackLangLastTrackedDialect}
+to \meta{dialect} for convenient reference if required.
+Note that \gls{AddTrackedDialect} is internally used by commands like
+\gls{TrackPredefinedDialect}, \gls{TrackLocale} and
+\gls{TrackLanguageTag}.
+
+(New to version 1.3.) Many of the \sty{tracklang} dialect
+labels don't have a corresponding match in various language packages. For
+example, \sty{tracklang} provides \opt{ngermanDE} but the
+closest match in \sty{babel} is \opt{ngerman}. This means that
+the caption hook \tklcaptions{ngerman} can't be accessed
+through:
+\begin{compactcodebox}
+\cmd{csname} captions\gls{CurrentTrackedDialect}\cmd{endcsname}
+\end{compactcodebox}
+in the resource files. In this case, a mapping may be defined
+between the \sty{tracklang} dialect label and the closest
+matching label used by the language hooks. This is done through
+\cmddef{SetTrackedDialectLabelMap}
+where \meta{tracklang-label} is the \sty{tracklang} label and
+\meta{hook-label} is the language hook label. For example:
+\begin{compactcodebox*}
+\gls{TrackLanguageTag}\marg{de-AR-1996}
+\gls{SetTrackedDialectLabelMap}\marg{\gls{TrackLangLastTrackedDialect}}\marg{ngerman}
+\end{compactcodebox*}
+Since \gls{TrackLanguageTag} internally uses \gls{AddTrackedDialect}
+the dialect label created by \sty{tracklang} can be accessed
+using \gls{TrackLangLastTrackedDialect}. This means that
+\gls{TrackLangAddToCaptions} can now find the \tklcaptions{ngerman}
+hook even though the \sty{tracklang} dialect label isn't \opt{ngerman}.
+
+(New to version 1.3.)
+If the root language label is recognised by \sty{tracklang}, you
+can add the \idx{ISO} codes using:
+\cmddef{AddTrackedLanguageIsoCodes}
+
+As from v1.3, you can also provide a modifier for a given
+dialect using:
+\cmddef{SetTrackedDialectModifier}
+where \meta{dialect} is the dialect label and \meta{value}
+is the modifier value. For example:
+\begin{compactcodebox*}
+\gls{AddTrackedDialect}\marg{oldgerman}\marg{\opt{german}}
+\gls{AddTrackedLanguageIsoCodes}\marg{german}
+\gls{SetTrackedDialectModifier}\marg{oldgerman}\marg{old}
+\end{compactcodebox*}
+
+Note that no sanitization is performed on \meta{value} when the
+modifier is set explicitly through \gls{SetTrackedDialectModifier},
+since it's assumed that any package that specifically sets the
+modifier in this way is using a sensible labelling system. If the
+modifier is obtained through commands like \gls{TrackLocale}, then
+the modifier is sanitized as the value may have been obtained from
+the operating system and there's no guarantee that it won't contain
+problematic characters.
+
+The \idx{modifier} is typically obtained by parsing locale information in
+\idx{POSIX} format.
+\begin{compactcodebox*}
+\meta{language}[\idx{underscoresep}\meta{territory}][\idx{dotsep}\meta{codeset}][\idx{atmod}\meta{modifier}]
+\end{compactcodebox*}
+whereas the \idx{variant} is typically obtained by parsing the language
+tag.
+
+The information provided in the commands below (such as the script)
+are typically obtained by parsing the language tag. For example,
+with Serbian in the Latin alphabet the modifier would be \optfmt{latin}
+whereas the script would be \opt{Latn}:
+\begin{codebox*}
+\gls{AddTrackedDialect}\marg{serbianlatin}\marg{\opt{serbian}}
+\gls{AddTrackedLanguageIsoCodes}\marg{\opt{serbian}}
+\gls{SetTrackedDialectModifier}\marg{serbianlatin}\marg{latin}
+\gls{SetTrackedDialectScript}\marg{serbianlatin}\marg{\opt{Latn}}
+\end{codebox*}
+
+As from v1.3, you can provide a script (for example,
+\opt{Latn} or \opt{Cyrl}) using:
+\cmddef{SetTrackedDialectScript}
+where \meta{dialect} is the dialect label and \meta{value} is the
+\idxn{15924} alpha-4 script identifier. For example:
+\begin{codebox*}
+\gls{AddTrackedDialect}\marg{serbiancyrl}\marg{\opt{serbian}}
+\gls{AddTrackedLanguageIsoCodes}\marg{serbian}
+\gls{SetTrackedDialectScript}\marg{serbiancyrl}\marg{\opt{Cyrl}}
+\end{codebox*}
+
+As from v1.3, you can provide a variant for a given
+dialect using:
+\cmddef{SetTrackedDialectVariant}
+For example:
+\begin{codebox*}
+\gls{AddTrackedDialect}\marg{german1901}\marg{german}
+\gls{SetTrackedDialectVariant}\marg{german1901}\marg{1901}
+\end{codebox*}
+
+As from v1.3, you can also provide a sub-language using:
+\cmddef{SetTrackedDialectSubLang}
+where \meta{dialect} is the dialect label and \meta{value} is the
+code. For example:
+\begin{codebox*}
+\gls{AddTrackedDialect}\marg{mandarin}\marg{\opt{chinese}}
+\gls{AddTrackedLanguageIsoCodes}\marg{\opt{chinese}}
+\gls{SetTrackedDialectSubLang}\marg{mandarin}\marg{cmn}
+\gls{AddTrackedIsoLanguage}\marg{639-3}\marg{cmn}\marg{mandarin}
+\end{codebox*}
+
+As from v1.3, you can also provide additional information using:
+\cmddef{SetTrackedDialectAdditional}
+where \meta{dialect} is the dialect label and \meta{value} is the
+additional information.
+
+\section{Example (\filefmt{alien.sty})}
+\label{sec:examplenewlang}
+
+Suppose I want to create a language package \file{alien.sty} that defines the
+\optfmt{martian} language with regional dialects
+\optfmt{lowermartian} and \optfmt{uppermartian}. First, let's
+suppose that \sty{tracklang} recognises the root language
+\optfmt{martian}:
+\begin{codebox}
+\cmd{ProvidesPackage}\marg{alien}
+\codepar
+\gls{input}{tracklang}\comment{v1.3}
+\codepar
+\cmd{DeclareOption}\marg{martian}\marg{\comment{}
+ \gls{TrackPredefinedDialect}\marg{martian}
+}
+\cmd{DeclareOption}\marg{lowermartian}\marg{\comment{}
+ \gls{AddTrackedDialect}\marg{lowermartian}\marg{martian}
+ \gls{AddTrackedLanguageIsoCodes}\marg{martian}
+ \gls{AddTrackedIsoLanguage}\marg{3166-1}\marg{YY}\marg{lowermartian}
+ \comment{other attributes such as}
+ \comment{\gls{SetTrackedDialectVariant}\marg{lowermartian}\marg{...}}
+}
+\cmd{DeclareOption}\marg{uppermartian}\marg{\comment{}
+ \gls{AddTrackedDialect}\marg{uppermartian}\marg{martian}
+ \gls{AddTrackedLanguageIsoCodes}\marg{martian}
+ \gls{AddTrackedIsoLanguage}\marg{3166-1}\marg{XX}\marg{uppermartian}
+ \comment{other attributes such as}
+ \comment{\gls{SetTrackedDialectVariant}\marg{uppermartian}\marg{...}}
+}
+\codepar
+\cmd{ProcessOptions}
+\codepar
+\cmd{newcommand}*\marg{\gls{selectlanguage}}[1]\marg{\comment{}
+ \cmd{def}\gls{languagename}\marg{\#1}\comment{}
+ \comment{other stuff}
+ \gls{SetCurrentTrackedDialect}\marg{\#1}\comment{}
+}
+\codepar
+\gls{AnyTrackedLanguages}
+\marg{
+ \gls{ForEachTrackedDialect}\marg{\cmd{thisdialect}}
+ \marg{\comment{}
+ \gls{TrackLangRequireDialect}\marg{alien}\marg{\cmd{thisdialect}}
+ }
+}
+\end{codebox}
+The caption commands and language set up are in the files
+\localefile{alien} as in the examples from
+\sectionref{sec:examples}. This allows for the user having already
+loaded \sty{tracklang} before \sty{alien} and used \gls{TrackLangFromEnv} to pick up
+the locale from the operating system's environment variables.
+(For example, they may have \envvar{LANG} set to
+\code{xx\idx{underscoresep}YY}.)
+
+The resource files may need to set the mapping between the
+\sty{tracklang} dialect label and the \sty{alien} dialect
+label. For example, in \ldf{alien}{xx-YY}:
+\begin{codebox*}
+\gls{TrackLangProvidesResource}\marg{xx-YY}
+\codepar
+\gls{TrackLangRequireResource}\marg{martian}\comment{load common elements}
+\codepar
+\cmd{newcommand}\marg{\tklcaptions{lowermartian}}\marg{\comment{}
+ \tklcaptions{martian}
+ \cmd{def}\cmd{contentsname}\marg{X'flurp}\comment{regional variation}
+}
+\codepar
+\gls{SetTrackedDialectLabelMap}\marg{\gls{CurrentTrackedDialect}}\marg{lowermartian}
+\end{codebox*}
+
+Now let's consider the case where \sty{tracklang} doesn't know
+about the \optfmt{martian} language. In this case the user can't
+track the dialect until the root language has been defined, so the
+user can't use \gls{TrackLangFromEnv} before using the \sty{alien}
+package.
+
+With \sty{tracklang} v1.3. The new root language can be defined
+with a minor adjustment to the above code:
+\begin{codebox*}
+\cmd{ProvidesPackage}\marg{alien}
+\codepar
+\gls{input}\marg{tracklang}\comment{needs v1.3}
+\codepar
+\gls{TrackLangIfKnownLang}\marg{martian}
+\marg{}\comment{tracklang already knows about the martian language}
+\marg{
+ \comment{tracklang doesn't known about the martian language, so define it}
+ \comment{with \idxn{639-1} (xx) and \idxn{639-2} (xxx) codes:}
+ \gls{TrackLangNewLanguage}\marg{martian}\marg{xx}\marg{xxx}\marg{}\marg{}\marg{}\marg{\opt{Latn}}
+}
+\end{codebox*}
+The rest is as before.
+
+Now other package writers who want to provide support
+for the Martian dialects can easily detect which language options
+the user requested through my package, \emph{without needing to know
+anything about my \sty{alien} package}.
+
+\part{Summaries}
+\appendix
+
+\chapter{Region and Script Mappings}
+\label{sec:regscriptmappings}
+
+Region mappings are listed in \tableref{tab:regionmappings}, and
+script mappings are listed in \tableref{tab:scriptmappings}.
+
+\printunsrttable[type=index,
+ title={Region Mappings},other={alpha3},blocks=2,
+ block-style={name-other-desc},label={tab:regionmappings},
+ init={%
+ \renewcommand{\glstableNameTarget}[1]{\inlineglsdef[optdef]{##1}}%
+ \renewcommand{\glstableiffilter}[3]{\glsifcategory{##1}{region}{##3}{##2}}%
+ \renewcommand{\glstablenameheader}{Alpha-2}%
+ \renewcommand{\glstableotherheader}{Alpha-3}%
+ \renewcommand{\glstabledescheader}{Numeric}%
+ \renewcommand{\glstableDesc}{\numerictag}%
+}
+]
+
+\printunsrttable[type=index,clearpage,par=ragged,
+ title={Script Mappings},other=userii,blocks=1,
+ block-style={name-symbol-other-desc},label={tab:scriptmappings},
+ init={%
+ \renewcommand{\glstableNameTarget}[1]{\inlineglsdef[optdef]{##1}}%
+ \renewcommand{\glstableiffilter}[3]{\glsifcategory{##1}{script}{##3}{##2}}%
+ \renewcommand{\glstablenameheader}{Alpha-2}%
+ \renewcommand{\glstablesymbolheader}{Numeric}%
+ \renewcommand{\glstableSymbol}{\numerictag}%
+ \renewcommand{\glstableotherheader}{Direction}%
+}
+]
+
+\backmatter
+\printterms
+\printsummary
+
+\renewcommand{\fnregion}{}%
+\glsdefpostname{isolangregion}{ (option)}%
+\glsdefpostname{rootlang}{ (root language)}%
+\glsdefpostname{isocode}{ (\idx{ISO} code)}%
+\glsdefpostname{noniso}{ (option)}%
+\glsdefpostname{region}{ (region)}%
+\glsdefpostname{script}{ (script)}%
+\glsdefpostname{application}{ (application)}%
+\printuserguideindex
+
+\end{document}
diff --git a/macros/generic/tracklang/tracklang.dtx b/macros/generic/tracklang/tracklang.dtx
index 22dd36860e..a36ec15205 100644
--- a/macros/generic/tracklang/tracklang.dtx
+++ b/macros/generic/tracklang/tracklang.dtx
@@ -1,16 +1,16 @@
%\iffalse
% tracklang.dtx generated using makedtx version 1.2 (c) Nicola Talbot
% Command line args:
+% -doc "tracklang-codedoc.tex"
+% -author "Nicola Talbot"
+% -codetitle "Main Package Code"
% -src "tracklang.sty\Z=>tracklang.sty"
% -src "tracklang.tex\Z=>tracklang.tex"
% -src "tracklang-region-codes.tex\Z=>tracklang-region-codes.tex"
% -src "tracklang-scripts.sty\Z=>tracklang-scripts.sty"
% -src "tracklang-scripts.tex\Z=>tracklang-scripts.tex"
-% -author "Nicola Talbot"
-% -doc "tracklang-manual.tex"
-% -section "chapter"
% tracklang
-% Created on 2020/6/30 11:55
+% Created on 2022/10/29 18:01
%\fi
%\iffalse
%<*package>
@@ -33,242 +33,53 @@
%\fi
% \iffalse
% Doc-Source file to use with LaTeX2e
-% Copyright (C) 2020 Nicola Talbot, all rights reserved.
+% Copyright (C) 2022 Nicola Talbot, all rights reserved.
% \fi
% \iffalse
%<*driver>
-\documentclass[report,inlinetitle]{nlctdoc}
-
-\DeleteShortVerb{|}
+\iffalse
+tracklang-codedoc.tex is a stub file used by makedtx to create
+tracklang.dtx
+\fi
-\usepackage[a4paper,marginpar=2in,marginparsep=10pt,
- left=2in,right=.5in]{geometry}
-\usepackage{graphicx}
-\usepackage[utf8]{inputenc}
-\usepackage[T1]{fontenc}
-\usepackage{tracklang}
-\usepackage{etoolbox}
-\usepackage{longtable}
-\usepackage{datatool-base}[2016/07/20]
-\let\orgtheindex\theindex
-\let\orgendtheindex\endtheindex
-\usepackage{imakeidx}
-\usepackage[colorlinks,
- bookmarks,
- hyperindex=false,
- pdfauthor={Nicola L.C. Talbot},
- pdftitle={tracklang: tracking language options}]{hyperref}
+\documentclass{article}
+\usepackage{doc}
-\CheckSum{6210}
+\CheckSum{6236}
-\appto\MacroFont{\scriptsize}
-\renewcommand*{\usage}[1]{\textit{\hyperpage{#1}}}
-\renewcommand*{\main}[1]{\underline{\hyperpage{#1}}}
+\RecordChanges
\PageIndex
+\SetupDoc{reportchangedates}
\setcounter{IndexColumns}{2}
-\newcommand*{\PrintCodeIndex}{%
- \bgroup
- \let\theindex\orgtheindex
- \let\endtheindex\orgendtheindex
- \PrintIndex
- \egroup
-}
-\IndexPrologue{%
-\clearpage\phantomsection
-\addcontentsline{toc}{chapter}{Code Index}%
-\chapter*{Code Index}\markboth{Code Index}{Code Index}%
-}
-
-\makeindex[name=user,title=Main Index,intoc]
-\renewcommand{\iapp}[1]{\index[user]{#1@\appfmt{#1}|hyperpage}}
-\renewcommand{\iterm}[1]{\index[user]{#1|hyperpage}}
-\renewcommand{\ics}[1]{\cs{#1}\index[user]{#1@\protect\cs{#1}|hyperpage}}
-\renewcommand*{\ipkgopt}[2][]{%
- \ifstrempty{#1}%
- {\index[user]{package options:!#2@\pkgoptfmt{#2}|hyperpage}}%
- {\index[user]{package options:!#2@\pkgoptfmt{#2}!#1@\pkgoptfmt{#1}|hyperpage}}%
-}
-\renewcommand*{\pkgopt}[2][]{%
- \pkgoptfmt{#2}\ifstrempty{#1}%
- {\index[user]{package options:!#2@\pkgoptfmt{#2}|hyperpage}}%
- {\index[user]{package options:!#2@\pkgoptfmt{#2}!#1@\pkgoptfmt{#1}|hyperpage}}%
-}
-\renewcommand*{\isty}[1]{%
- \index[user]{#1 package@\styfmt{#1} package|hyperpage}}
-
-\newcommand*{\envvar}[1]{%
- \texttt{#1}%
- \index[user]{#1@\texttt{#1}}}
-
-\newcommand*{\isopkgopts}{}
-\newcommand*{\nonisopkgopts}{}
-\newcommand*{\rootlangopts}{}
-
-\makeatletter
-\renewcommand*{\changes@}[3]{%
- \protected@edef\@tempa{\noexpand\glossary{#1 (#2)\levelchar
- \ifx\saved@macroname\@empty
- \space
- \actualchar
- \generalname
- \else
- \expandafter\@gobble
- \saved@macroname
- \actualchar
- \string\verb\quotechar*%
- \verbatimchar\saved@macroname
- \verbatimchar
- \fi
- :\levelchar #3\encapchar hyperpage}}%
- \@tempa\endgroup\@esphack}
-
-
-\ifdim\overfullrule=0pt\relax % final mode
- \typeout{Sorting available options. This may take a while.}%
- \newcommand{\addopt}[3]{%
- \expandafter\dtlinsertinto\expandafter{#1}{#2}{#3}%
- }%
-\else
- \newcommand{\addopt}[3]{%
- \ifdefempty{#2}{\edef#2{#1}}{\eappto{#2}{,#1}}
- }
-\fi
-
-\@for\thisdialect:=\@tracklang@declaredoptions\do{%
- \ifdefempty\thisdialect
- {}%
- {%
- \typeout{\thisdialect}%
- \ifnum\pdfmatch {[a-z]{2,3}-[A-Z]{2}}{\thisdialect}=1\relax
- \addopt{\thisdialect}{\isopkgopts}{\dtlcompare}%
- \else
- \TrackLangIfKnownLang{\thisdialect}
- {%
- \addopt{\thisdialect}{\rootlangopts}{\dtlcompare}%
- }%
- {%
- \addopt{\thisdialect}{\nonisopkgopts}{\dtlicompare}%
- }%
- \fi
- }%
-}
-
-\newcommand*{\isopkgoptstab}{\begin{table}[p]
-\caption[Predefined ISO Language-Region Dialects]%
-{Predefined ISO Language-Region Dialects. (May be used as a package
-option or with \cs{TrackPredefinedDialect}.)}\label{tab:isoopts}
-\medskip
-\centering
-\begin{tabular}{llll}%
-}
-
-\newcommand*{\fnregion}{\textsuperscript{\textdagger}}
-
-\newcommand*{\rootlangoptstab}{\begin{longtable}{lll}
-\caption[Predefined Root Languages]{Predefined Root Languages.
-(\fnregion Has an associated territory.)
-The corresponding
-language tag obtained with \cs{GetTrackedLanguageTag}\marg{dialect}
-is shown in parentheses.}\label{tab:rootlangopts}\\\endfirsthead
-\caption[]{Predefined Root Languages Continued.}\\\endhead
-}
-
-\newcommand*{\nonisopkgoptstab}{\begin{longtable}{ll}
-\caption[Predefined Non-ISO Dialects]{Predefined Non-ISO Dialects.
-(\fnregion Has an associated territory.)
-The corresponding
-language tag obtained with \cs{GetTrackedLanguageTag}\marg{dialect}
-is shown in parentheses. If the dialect has a corresponding mapping
-for the closest matching non-root language \cs{caption\ldots} or
-\cs{date\ldots}, this is also include after the tag following a
-slash.}%
-\label{tab:nonisoopts}\\\endfirsthead
-\caption[]{Predefined Non-ISO Dialects Continued}\\\endhead
-}
-
-\newcount\tmpctr
-
-\@for\thisdialect:=\isopkgopts\do{%
- \advance\tmpctr by 1\relax
- \eappto\isopkgoptstab{\noexpand\pkgoptfmt{\thisdialect}&}%
- {%locally track this dialect to pick up information
- \TrackPredefinedDialect\thisdialect
- \xappto\isopkgoptstab{\space
- {\noexpand\small(\noexpand\texttt{%
- \csname @tracklang@dialect\endcsname})}}%
- }%
- \ifnum\tmpctr>1
- \tmpctr = 0\relax
- \appto\isopkgoptstab{\\}%
- \else
- \appto\isopkgoptstab{&}%
- \fi
-}
-
-\appto\isopkgoptstab{\end{tabular}\par
-\medskip
-Other combinations need to be set with \cs{TrackLocale} or
-\cs{TrackLanguageTag}.
-\end{table}}
-
-\tmpctr=0\relax
-
-\@for\thisdialect:=\nonisopkgopts\do{%
- \advance\tmpctr by 1\relax
- \eappto\nonisopkgoptstab{\noexpand\pkgoptfmt{\thisdialect}}%
- {%locally track this dialect to pick up information
- \TrackPredefinedDialect\thisdialect
- \IfTrackedLanguageHasIsoCode{3166-1}{\thisdialect}%
- {\gappto\nonisopkgoptstab{\fnregion}}%
- {}%
- \IfTrackedDialectHasMapping\thisdialect
- {\def\nonisopkgmap{ /
- \noexpand\texttt{\GetTrackedDialectToMapping\thisdialect}}}%
- {\def\nonisopkgmap{}}%
- \xappto\nonisopkgoptstab{\space
- {\noexpand\small(\noexpand\texttt{\GetTrackedLanguageTag\thisdialect}%
- \nonisopkgmap)}}%
- }%
- \ifnum\tmpctr>1
- \tmpctr = 0\relax
- \appto\nonisopkgoptstab{\\}%
- \else
- \appto\nonisopkgoptstab{&}%
- \fi
-}
-
-\appto\nonisopkgoptstab{\end{longtable}}
+\usepackage[T1]{fontenc}
+\usepackage{tcolorbox}
-\tmpctr=0\relax
+\definecolor{defbackground}{rgb}{1,1,0.75}
-\@for\thisdialect:=\rootlangopts\do{%
- \advance\tmpctr by 1\relax
- \eappto\rootlangoptstab{\noexpand\pkgoptfmt{\thisdialect}}%
- \TrackLangIfHasKnownCountry{\thisdialect}%
- {%
- \appto\rootlangoptstab{\fnregion}%
- }%
- {}%
- {%locally track this language to pick up information
- \TrackPredefinedDialect\thisdialect
- \xappto\rootlangoptstab{\space
- {\noexpand\small(\noexpand\texttt{\GetTrackedLanguageTag\thisdialect})}}%
- }%
- \ifnum\tmpctr>2
- \tmpctr = 0\relax
- \appto\rootlangoptstab{\\}%
- \else
- \appto\rootlangoptstab{&}%
- \fi
+\newtcolorbox{definition}{halign=flush left,
+ colframe=black,colback=defbackground,
+ fontupper=\ttfamily,
+ before upper={\frenchspacing\obeylines},
+ after={\par\noindent\ignorespacesafterend}
}
-\appto\rootlangoptstab{\end{longtable}}
+\NewDocElement{Option}{option}
-\makeatother
+\providecommand{\sty}[1]{\styfmt{#1}}
+\providecommand{\styfmt}[1]{\textsf{#1}}
+\providecommand{\pkgoptfmt}[1]{\textsf{#1}}
+\providecommand{\envvar}[1]{\texttt{#1}}
+\providecommand{\app}[1]{\texttt{#1}}
+\providecommand{\qt}[1]{``#1''}
+\providecommand{\sectionref}[1]{\S\ref{#1}}
-\newcommand*{\refoptstables}{tables~\ref{tab:isoopts}, \ref{tab:rootlangopts}
-and~\ref{tab:nonisoopts}}
+\providecommand\marg[1]{%
+ \texorpdfstring{\allowbreak{\ttfamily\char`\{}\meta{#1}{\ttfamily\char`\}}}
+ {\{#1\}}}
+\providecommand\oarg[1]{%
+ \texorpdfstring{\allowbreak{\ttfamily[}\meta{#1}{\ttfamily]}}
+ {[#1]}}
\begin{document}
\DocInput{tracklang.dtx}
@@ -276,3301 +87,26 @@ and~\ref{tab:nonisoopts}}
%</driver>
%\fi
%
-%\MakeShortVerb{"}
-%
-%\title{tracklang v1.5:
-%tracking language options}
-%\author{Nicola L. C. Talbot\\\url{http://www.dickimaw-books.com/}}
-%
-%\date{2020-06-30}
-%\maketitle
-%
-%\begin{abstract}
-%The \styfmt{tracklang} package is provided for package developers
-%who want a simple interface to find out which languages the user has
-%requested through packages such as \sty{babel} and
-%\sty{polyglossia}. \emph{This package doesn't provide any
-%translations.}
-%Its purpose is simply to track which languages have been requested by the
-%user. Generic \TeX\ code is in \texttt{tracklang.tex} for
-%non-\LaTeX\ users.
-%
-%If the shell escape is enabled or \ics{directlua} is available,
-%this package may also be used to query the \envvar{LC\_ALL}
-%or \envvar{LANG} environment variable (see
-%\sectionref{sec:langsty}). Windows users, who don't have the locale
-%stored in environment variables, can use \app{texosquery}
-%in combination with \styfmt{tracklang}. (Similarly if \envvar{LC\_ALL}
-%or \envvar{LANG} don't contain sufficient information.) In order to
-%use \app{texosquery} through the restricted shell escape, you must
-%have at least Java~8 and set up \texttt{texosquery.cfg}
-%appropriately. (See the \app{texosquery} manual for further details.)
-%\end{abstract}
-%
-%The fundamental aim of this generic package is to be able to
-%effectively say:
-%\begin{quote}
-%The user (that is, the \emph{document} author) wants to use
-%dialects \texttt{xx-XX}, \texttt{yy-YY-Scrp}, etc in their
-%document. Any packages used by their document that provide
-%multilingual or region-dependent support should do whatever is
-%required to activate the settings for those languages and regions
-%(or warn the user that there's no support).
-%\end{quote}
-%Naturally, this is only of use if the locale-sensitive packages use
-%\styfmt{tracklang} to pick up this information, which is entirely up
-%to the package authors, but at the moment there's no standard method
-%for packages to detect the required language and region. The aim of
-%\styfmt{tracklang} is to provide that method. In particular, the
-%emphasis is on using ISO language and region codes rather than
-%hard-coding the various language labels used by different language
-%packages.
-%
-%Related articles: \qt{Localisation of \TeX\ documents:
-%\styfmt{tracklang}.} TUGBoat, Volume~37 (2016), No.~3
-%(\url{http://www.tug.org/TUGboat/tb37-3/tb117talbot.pdf}),
-%\href{https://www.dickimaw-books.com/latex/tracklang}{Localisation
-%with \texttt{tracklang.tex}},
-%and
-%\href{https://www.dickimaw-books.com/faq.php?action=view&category=tracklang}{\texttt{tracklang}
-%FAQ}.
-%
-%\clearpage
-%\tableofcontents
-%\clearpage\phantomsection
-%\pdfbookmark{Tables}{lot}%
-%\listoftables
-%
-%\chapter{Introduction}
-%\label{sec:intro}
-%
-%When I'm developing a package that provides multilingual support
-%(for example, \styfmt{glossaries}) it's cumbersome trying to work out
-%if the user has requested translations for fixed text. This usually
-%involves checking if \sty{babel} or \sty{ngerman} or
-%\sty{translator} or \sty{polyglossia} has been loaded and, if so,
-%what language settings have been used. The result can be a tangled
-%mass of conditional code. The alternative is to tell users to add
-%the language as a~document class option, which they may or may not
-%want to do, or to tell them to supply the language settings to every
-%package they load that provides multilingual support, which users
-%are even less likely to want to do.
-%
-%The \styfmt{tracklang} package tries to neaten this up by working out
-%as much of this information as possible for you and providing a
-%command that iterates through the loaded languages. This way, you
-%can just iterate through the list of tracked languages and, for each
-%language, either define the translations or warn the user that
-%there's no translation for that language.
-%
-%This package works best with \sty{ngerman} or with recent versions
-%of \sty{babel} or when the language options are specified
-%in the document class option list. It works fairly well with
-%\sty{translator} but will additionally assume the root language was
-%also requested when a dialect is specified. So, for example,
-%\begin{verbatim}
-%\usepackage[british]{translator}
-%\usepackage{tracklang}
-%\end{verbatim}
-%is equivalent to
-%\begin{verbatim}
-%\usepackage[british]{translator}
-%\usepackage[english,british]{tracklang}
-%\end{verbatim}
-%This means that \ics{ForEachTrackedDialect} will iterate
-%through the list \qt{english,british} instead of just
-%\qt{british}, which can result in some redundancy.
-%
-%Unfortunately I can't work out how to pick up the language variant
-%or script from \sty{polyglossia}, so only the root languages are detected,
-%which is suboptimal but at least provides some information.
-%(\sty{polyglossia} now provides \cs{xpg@loaded}, which
-%\sty{tracklang} uses to track the root languages, but the language variant
-%command \cs{xpg@loaded} only seems to be set when the language
-%changes, which doesn't occur until the start of the \env{document}
-%environment.)
-%
-%I also can't find any way of detecting a list of languages loaded
-%through \sty{babel}'s new \ics{babelprovide} command. As far as I
-%can tell, the only stored list is in \cs{bbl@loaded} which only
-%contains the languages loaded through package options.
-%
-%If the \sty{ngerman} package has been loaded, \styfmt{tracklang}
-%effectively does
-%\begin{verbatim}
-%\TrackPredefinedDialect{ngerman}
-%\end{verbatim}
-%Similarly, if the \sty{german} package has been loaded,
-%\styfmt{tracklang} effectively does
-%\begin{verbatim}
-%\TrackPredefinedDialect{german}
-%\end{verbatim}
-%
-%If any document class or package options are passed to
-%\styfmt{tracklang}, then \styfmt{tracklang} won't bother checking
-%for \sty{babel}, \sty{translator}, \sty{ngerman}, \sty{german} or
-%\sty{polyglossia}. So, if the above example is changed to:
-%\begin{verbatim}
-%\documentclass[british]{article}
-%\usepackage{translator}
-%\usepackage{tracklang}
-%\end{verbatim}
-%then the dialect list will just consist of \qt{british} rather than
-%\qt{english,british}. This does, however, mean that if the user mixes
-%class and package options, only the class options will be detected.
-%For example:
-%\begin{verbatim}
-%\documentclass[british]{article}
-%\usepackage[french]{babel}
-%\usepackage{tracklang}
-%\end{verbatim}
-%In this case, only the \qt{british} option will be detected. The user
-%can therefore use the document class option (or \styfmt{tracklang}
-%package option) to override the dialect and set the country code
-%(where provided). For example:
-%\begin{verbatim}
-%\documentclass[es-MX]{article}
-%\usepackage[spanish]{babel}
-%\usepackage{tracklang}
-%\end{verbatim}
-%This sets the dialect to \qt{mexicanspanish} and the root language to
-%\qt{spanish}.
-%
-%Predefined dialects are listed in \refoptstables. These may be
-%passed in the document class options or
-%used in \ics{TrackPredefinedDialect}, as illustrated above.
-%
-%\sectionref{sec:summary} provides brief examples of use for those
-%who want a general overview before reading the more detailed
-%sections.
-%\sectionref{sec:generic} describes generic commands for
-%identifying the document languages.
-%\sectionref{sec:user} is for package writers who want to
-%add multilingual support to their package and need to know which
-%settings the user has requested through language packages like
-%\sty{babel}. \sectionref{sec:langsty} is for
-%developers of language definition packages who want to help other
-%package writers to detect what languages have been requested.
-%
-%\isopkgoptstab
-%
-%\clearpage
-%
-%\rootlangoptstab
-%
-%\clearpage
-%
-%\nonisopkgoptstab
-%
-%\chapter{Summary of Use}
-%\label{sec:summary}
-%
-%There are three levels of use:
-%\begin{enumerate}
-%\item document level (code used by document authors);
-%\item locale-sensitive package level
-%(code for package authors who need to
-%know what languages or locale the document is
-%using, such as \styfmt{glossaries} to translate commands like
-%\cs{descriptionname} or \styfmt{datetime2} to provide localised
-%formats or time zone information);
-%\item language set-up level (code for packages that set up
-%the document languages, such as \sty{babel} or \sty{polyglossia}).
-%\end{enumerate}
-%
-%\section{Document Level}
-%\label{sec:summary-doc}
-%
-%\subsection{Generic \texorpdfstring{\TeX}{TeX}}
-%Unix user wants the locale information picked up from the
-%locale environment variable:
-%\begin{verbatim}
-%\input tracklang % v1.3
-%\TrackLangFromEnv
-%% load packages that use tracklang for localisation
-%\end{verbatim}
-%
-%Windows user wants the locale information picked up from the
-%operating system:
-%\begin{verbatim}
-%\input texosquery
-%\input tracklang % v1.3
-%\TrackLangFromEnv
-%% load packages that use tracklang for localisation
-%\end{verbatim}
-%Or (\sty{texosquery} v1.2)
-%\begin{verbatim}
-%\input texosquery % v1.2
-%\input tracklang % v1.3
-%
-%\TeXOSQueryLangTag{\langtag}
-%\TrackLanguageTag{\langtag}
-%% load packages that use tracklang for localisation
-%\end{verbatim}
-%Linux user who may or may not have \app{texosquery} setup to run in the
-%shell escape:
-%\begin{verbatim}
-%\input texosquery
-%\input tracklang % v1.3
-%
-%\ifx\TeXOSQueryLangTag\undefined
-% \TrackLangFromEnv
-%\else
-% \TeXOSQueryLangTag{\langtag}
-% \TrackLanguageTag{\langtag}
-%\fi
-%% load packages that use tracklang for localisation
-%\end{verbatim}
-%
-%User is writing in Italy in Armenian with a Latin
-%script and the arevela variant:
-%\begin{verbatim}
-%\input tracklang % v1.3
-%\TrackLanguageTag{hy-Latn-IT-arevela}
-%% load packages that use tracklang for localisation
-%\end{verbatim}
-%
-%User is writing in English in the UK:
-%\begin{verbatim}
-%\input tracklang
-%\TrackPredefinedDialect{british}
-%% load packages that use tracklang for localisation
-%\end{verbatim}
-%
-%Find out information about the current language (supplied
-%in \cs{languagename}):
-%\begin{verbatim}
-%\SetCurrentTrackedDialect{\languagename}
-%Dialect: \CurrentTrackedDialect.
-%Language: \CurrentTrackedLanguage.
-%ISO Code: \CurrentTrackedIsoCode.
-%Region: \CurrentTrackedRegion.
-%Modifier: \CurrentTrackedDialectModifier.
-%Variant: \CurrentTrackedDialectVariant.
-%Script: \CurrentTrackedDialectScript.
-%Sub-Lang: \CurrentTrackedDialectSubLang.
-%Additional: \CurrentTrackedDialectAdditional.
-%Language Tag: \CurrentTrackedLanguageTag.
-%\end{verbatim}
-%Additional information about the script can be obtained by
-%also loading \sty{tracklang-scripts}:
-%\begin{verbatim}
-%\input tracklang-scripts
-%\end{verbatim}
-%The name, numeric code and direction can now be obtained:
-%\begin{verbatim}
-%Name: \TrackLangScriptAlphaToName{\CurrentTrackedDialectScript}.
-%Numeric: \TrackLangScriptAlphaToNumeric{\CurrentTrackedDialectScript}.
-%Dir: \TrackLangScriptAlphaToDir{\CurrentTrackedDialectScript}.
-%\end{verbatim}
-%Test for a specific script:
-%\begin{verbatim}
-%Latin?
-%\ifx\CurrentTrackedDialectScript\TrackLangScriptLatn
-% Yes
-%\else
-% No
-%\fi
-%\end{verbatim}
-%
-%\subsection{\texorpdfstring{\LaTeX}{LaTeX}}
-%
-%For \sty{babel} users where the supplied \sty{babel} dialect
-%label is sufficient, there's no need to do anything special:
-%\begin{verbatim}
-%\documentclass[british,canadien]{article}
-%\usepackage[T1]{fontenc}
-%\usepackage{babel}
-%% load packages that use tracklang for localisation
-%\end{verbatim}
-%If the region is important but there's no \sty{babel} dialect
-%that represents it, there are several options.
-%
-%Use the class options recognised by \styfmt{tracklang}
-%and the root language labels when loading \sty{babel}:
-%\begin{verbatim}
-%\documentclass[en-IE,ga-IE]{article}
-%\usepackage[english,irish]{babel}
-%% load packages that use tracklang for localisation
-%\end{verbatim}
-%
-%This method is needed for \sty{polyglossia} where the regional
-%information is required. For example
-%\begin{verbatim}
-%\documentclass[en-GB]{article}
-%\usepackage{polyglossia}
-%\setmainlanguage[variant=uk]{english}
-%% load packages that use tracklang for localisation
-%\end{verbatim}
-%
-%Another method with \sty{babel} is to
-%use \cs{TrackLanguageTag} and map the new dialect label to
-%\sty{babel}'s nearest matching label:
-%\begin{verbatim}
-%\documentclass{article}
-%
-%\usepackage{tracklang}% v1.3
-%\TrackLanguageTag{en-MT}
-%\SetTrackedDialectLabelMap{\TrackLangLastTrackedDialect}{UKenglish}
-%
-%\usepackage[UKenglish]{babel}
-%% load packages that use tracklang for localisation
-%\end{verbatim}
-%This ensures that the \cs{captionsUKenglish} hook is detected
-%by the localisation packages. This mapping isn't needed
-%for \sty{polyglossia} as the caption hooks use the root language
-%label. This mapping also isn't needed if \texttt{british} is used
-%instead of \texttt{UKenglish} since the \pkgopt{en-MT}
-%(\pkgopt{maltaenglish})
-%predefined dialect automatically sets up a mapping to
-%\texttt{british}. (The default mappings are shown in
-%\tableref{tab:nonisoopts}.)
-%
-%\section{Locale-Sensitive Packages}
-%\label{sec:summary-localepkg}
-%
-%Let's suppose you are developing a package called
-%\texttt{mypackage.sty} or \texttt{mypackage.tex} and you want
-%to find out what languages the document author has requested. (See also:
-%\href{https://www.dickimaw-books.com/latex/tracklang/otherpkg.shtml}{Using
-%\texttt{tracklang.tex} in Packages with Localisation Features}.)
-%
-%Generic use:
-%\begin{verbatim}
-%\input tracklang
-%\end{verbatim}
-%(Most of the commands used in this section require at least
-%\styfmt{tracklang} version 1.3 but 1.4 is better if you want to
-%include the script tag in the ldf files.)
-%Note that \texttt{tracklang.tex} has a check to determine if
-%it's already been loaded, so you don't need to worry about that.
-%
-%\LaTeX\ use:
-%\begin{verbatim}
-%\RequirePackage{tracklang}[2019/11/30]% at least v1.4
-%\end{verbatim}
-%This will picked up any language options supplied in the document
-%class options and will also detect if \sty{babel} or
-%\sty{polyglossia} have been loaded.
-%
-%(\LaTeX) If you want to allow the user to set the locale in the
-%package options:
-%\begin{verbatim}
-%\DeclareOption*{\TrackLanguageTag{\CurrentOption}}
-%\end{verbatim}
-%This means the user can do, say,
-%\begin{verbatim}
-%\usepackage[hy-Latn-IT-arevela]{mypackage}
-%\end{verbatim}
-%With at least version 1.4, it's better to use \ics{TrackIfKnownLanguage}:
-%\begin{verbatim}
-%\DeclareOption*{%
-% \TrackIfKnownLanguage{\CurrentOption}%
-% {\PackageInfo{mypackage}{Tracking language `\CurrentOption'}}% successful
-% {% failed
-% \PackageError{mypackage}%
-% {Unknown language specification `\CurrentOption'}%
-% {You need to supply either a known dialect label or a valid language tag}%
-% }%
-%}
-%\end{verbatim}
-%
-%The rest of the example package in this section uses generic code.
-%
-%If you want to fetch the locale information from the operating
-%system when the user hasn't requested a language:
-%\begin{verbatim}
-%\AnyTrackedLanguages
-%{}
-%{% fetch locale information from the operating system
-% \ifx\TeXOSQueryLangTag\undefined
-% % texosquery v1.2 not available
-% \TrackLangFromEnv
-% \else
-% % texosquery v1.2 available
-% \TeXOSQueryLangTag{\langtag}
-% \TrackLanguageTag{\langtag}
-% \fi
-%}
-%\end{verbatim}
-%
-%Set up the defaults if necessary:
-%\begin{verbatim}
-%\def\fooname{Foo}
-%\def\barname{Bar}
-%\end{verbatim}
-%
-%Now load the resource files:
-%\begin{verbatim}
-%\AnyTrackedLanguages
-%{%
-% \ForEachTrackedDialect{\thisdialect}{%
-% \TrackLangRequireDialect{mypackage}{\thisdialect}%
-% }%
-%}
-%{}% no tracked languages, default already set up
-%\end{verbatim}
-%
-%Each resource file has the naming scheme \meta{prefix}\texttt{-}
-%\meta{localeid}\texttt{.ldf}. In this example, the \meta{prefix} is
-%\texttt{mypackage}. The \meta{localeid} part may be the language or dialect label
-%(for example, \texttt{english} or \texttt{british}) or a combination of the ISO
-%language and region codes (for example, \texttt{en-GB} or
-%\texttt{en} or \texttt{GB}). As from version 1.4, \meta{localeid} may
-%also include the script or variant. (See the definition of
-%\ics{IfTrackedLanguageFileExists} on page~\pageref{pg:filesearch}
-%for further details.)
-%
-%The simplest scheme is to use the root language label (not the
-%dialect label) for the base language settings and use the ISO
-%codes for regional support.
-%
-%For example, the file \texttt{mypackage-english.ldf}:
-%\begin{verbatim}
-%\TrackLangProvidesResource{english}[2016/10/06 v1.0]% identify this file
-%
-%\TrackLangAddToCaptions{%
-% \def\fooname{Foo}%
-% \def\barname{Bar}%
-%}
-%\end{verbatim}
-%This sets up appropriate the \cs{captions\ldots} hook (if it's
-%found). For other hooks, such as \cs{date\ldots}, use
-%\ics{TrackLangAddToHook}\marg{code}\marg{hook type} instead.
-%
-%With pre-v1.4 versions of \sty{tracklang}, the script isn't included
-%in the file search. If it's needed then either require at least v1.4
-%or have a base ldf file that tries to load a version for the
-%particular script (which can be accessed with
-%\cs{CurrentTrackedScript}).
-%Here's an example for a language with different writing systems.
-%The resource file for Serbian \texttt{mypackage-serbian.ldf}:
-%\begin{verbatim}
-%\TrackLangProvidesResource{serbian}[2016/10/06 v1.0]% identify file
-%
-%\TrackLangRequestResource{serbian-\CurrentTrackedScript}
-%{}% file not found, do something sensible here
-%\end{verbatim}
-%The file \texttt{mypackage-serbian-Latn.ldf} sets up
-%the Latin script:
-%\begin{verbatim}
-%\TrackLangProvidesResource{serbian-Latn}[2016/10/06 v1.0]
-%
-%\TrackLangAddToCaptions{%
-% \def\fooname{...}% provide appropriate Latin translations
-% \def\barname{...}%
-%}
-%\end{verbatim}
-%The file \texttt{mypackage-serbian-Cyrl.ldf} sets up
-%the Cyrllic script:
-%\begin{verbatim}
-%\TrackLangProvidesResource{serbian-Cyrl}[2016/10/06 v1.0]
-%
-%\TrackLangAddToCaptions{%
-% \def\fooname{...}% provide appropriate Cyrllic translations
-% \def\barname{...}%
-%}
-%\end{verbatim}
-%
-%With v1.4+ you would just need \texttt{mypackage-sr-Latn.ldf},
-%\texttt{mypackage-sr-Cyrl.ldf} for the regionless versions.
-%
-%\section{Language Packages}
-%\label{sec:summary-langpkg}
-%
-%Let's suppose now you're the developer of a package that
-%sets up the language, hyphenation patterns and so on.
-%It would be really helpful to the locale-sensitive packages
-%in \sectionref{sec:summary-localepkg} to know what languages
-%the document author has requested. You can use the
-%\styfmt{tracklang} package to identify this information
-%by tracking the requested localisation, so that other packages
-%can have a consistent way of querying it. (See also:
-%\href{https://www.dickimaw-books.com/latex/tracklang/langpkg.shtml}{Integrating
-%\texttt{tracklang.tex} into Language Packages}.)
-%
-%Generic use:
-%\begin{verbatim}
-%\input tracklang
-%\end{verbatim}
-%Alternative \LaTeX\ use:
-%\begin{verbatim}
-%\RequirePackage{tracklang}[2019/11/30] % v1.4
-%\end{verbatim}
-%Unlike \cs{input}, \cs{RequirePackage} will allow \styfmt{tracklang}
-%to pick up the document class options, but using \cs{RequirePackage}
-%will also trigger the tests for known language packages.
-%(If you want to find out if \styfmt{tracklang} has already been
-%loaded and locales have already been tracked, you can use the
-%same code as in the previous section.)
-%
-%When a user requests a particular language through your package,
-%the simplest way of letting \styfmt{tracklang} know about it
-%is to use \cs{TrackPredefinedDialect} or \cs{TrackLanguageTag}.
-%For example, if the user requests \texttt{british}, that's a
-%predefined dialect so you can just do:
-%\begin{verbatim}
-%\TrackPredefinedDialect{british}
-%\end{verbatim}
-%Alternatively
-%\begin{verbatim}
-%\TrackLanguageTag{en-GB}
-%\end{verbatim}
-%If your package uses caption hooks, then you can set up
-%a mapping between \styfmt{tracklang}'s internal dialect label
-%and your caption label. For example, let's suppose the
-%closest match to English used in Malta (\texttt{en-MT}) is the
-%dialect \texttt{UKenglish} (for example, the date format is
-%similar between GB and MT):
-%\begin{verbatim}
-%\TrackLanguageTag{en-MT}
-%\SetTrackedDialectLabelMap{\TrackLangLastTrackedDialect}{UKenglish}
-%\def\captionsUKenglish{%
-% \def\contentsname{Contents}%
-% %...
-%}
-%\end{verbatim}
-%(The predefined \pkgopt{maltaenglish} option provided by
-%\styfmt{tracklang} automatically sets the mapping to
-%\texttt{british}, but the above method will change that mapping
-%to \texttt{UKenglish}.)
-%
-%This now means that \cs{TrackLangAddToHook} and \cs{TrackLangRedefHook} commands can
-%find your language hooks. You don't need the map if your dialect
-%label is the same as \styfmt{tracklang}'s root language label
-%for that locale. For example:
-%\begin{verbatim}
-%\TrackLanguageTag{en-MT}
-%\def\captionsenglish{%
-% \def\contentsname{Contents}%
-% %...
-%}
-%\end{verbatim}
-%
-%When the user switches language through commands like
-%\ics{selectlanguage} it would be useful to also use
-%\ics{SetCurrentTrackedDialect}\marg{dialect} to make it easier
-%for the document author or locale-sensitive packages to pick
-%up the current locale. The \meta{dialect} argument may be
-%\styfmt{tracklang}'s internal dialect label or the dialect
-%label you assigned with \cs{SetTrackedDialectLabelMap}. It
-%may also be the root language label, in which case
-%\styfmt{tracklang} will search for the last dialect to be
-%tracked with that language. For example:
-%\begin{verbatim}
-%\def\selectlanguage#1{%
-% \SetCurrentTrackedDialect{#1}%
-% % set up hyphenation patterns etc
-%}
-%\end{verbatim}
-%See the example in \sectionref{sec:summary-doc} or the example in
-%\href{https://www.dickimaw-books.com/latex/tracklang/langpkg.shtml}{Integrating
-%\texttt{tracklang.tex} into Language Packages}.
-%
-%\chapter{Generic Use}
-%\label{sec:generic}
-%
-%For plain \TeX\ you can input \texttt{tracklang.tex}:
-%\begin{verbatim}
-%\input tracklang
-%\end{verbatim}
-%or for \TeX\ formats that have an argument form for \ics{input}:
-%\begin{verbatim}
-%\input{tracklang}
-%\end{verbatim}
-%As from version 1.3, you don't need to change the category
-%code of \texttt{@} before loading \texttt{tracklang.tex}
-%as it will automatically be changed to 11 and switched
-%back at the end (if required).
-%
-%The \LaTeX\ package \texttt{tracklang.sty}
-%inputs the generic \TeX\ code in \texttt{tracklang.tex}, but before
-%it does so it defines
-%\begin{definition}
-%\cs{@tracklang@declareoption}\marg{name}
-%\end{definition}
-%to
-%\begin{definition}
-%\cs{DeclareOption}\marg{name}\{\cs{TrackPredefinedDialect}\marg{name}\}
-%\end{definition}
-%
-%This means that all the predefined languages and dialects
-%(\refoptstables) automatically become package options, so
-%the \styfmt{tracklang} package can pick up document class
-%options and add them to \styfmt{tracklang}'s internal list of tracked
-%document languages.
-%
-%If you're not using \LaTeX, this option isn't available
-%(although you could redefine the internal command
-%\cs{@tracklang@declareoption}
-%to use something analogous to \cs{DeclareOption}).
-%Instead, the document languages need
-%to be explicitly identified (using any of the following commands)
-%so that \styfmt{tracklang} knows about them.
-%
-%\begin{definition}[\DescribeMacro\TrackPredefinedDialect]
-%\ics{TrackPredefinedDialect}\marg{dialect label}
-%\end{definition}
-%This will add the predefined dialect and its associated ISO codes to the list
-%of tracked document languages. The \meta{dialect label} may be any
-%of those listed in \refoptstables.
-%(See also \sectionref{sec:predefinedlang} and \sectionref{sec:predefined}.)
-%
-%For example:
-%\begin{verbatim}
-%\input tracklang
-%\TrackPredefinedDialect{british}
-%\end{verbatim}
-%is the Plain \TeX\ alternative to
-%\begin{verbatim}
-%\documentclass[british]{article}
-%\usepackage{tracklang}
-%\end{verbatim}
-%
-%Note that it's impractical to define every possible language
-%and region combination as it would significantly slow the
-%time taken to load \styfmt{tracklang} so, after version~1.3,
-%I don't intend adding any new predefined dialects. As from version
-%1.3, if you want to track a dialect that's not predefined by
-%\styfmt{tracklang}, then you can use:
-%\begin{definition}[\DescribeMacro\TrackLocale]
-%\cs{TrackLocale}\marg{locale}
-%\end{definition}
-%If \meta{locale} is a recognised dialect, this is equivalent to
-%using \cs{TrackPredefinedDialect}, otherwise \meta{locale}
-%needs to be in one the following formats:
-%\begin{itemize}
-%\item \meta{ISO lang}
-%\item \meta{ISO lang}\texttt{@}\meta{modifier}
-%\item \meta{ISO lang}\texttt{-}\meta{ISO country}
-%\item \meta{ISO lang}\texttt{-}\meta{ISO country}\texttt{@}\meta{modifier}
-%\end{itemize}
-%where \meta{ISO lang} is the ISO~639-1 or 639-2 code identifying
-%the language (lower case), \meta{ISO country} is the 3166-1
-%ISO code identifying the territory (upper case) and
-%\meta{modifier} is the modifier or variant. The hyphen may be
-%replaced by an underscore character. Code set information in the
-%form \texttt{.}\meta{codeset} may optionally appear before the
-%modifier. For example, \texttt{de-DE.utf8@new} (modifier is
-%\texttt{new}) or \texttt{en-GB.utf8} (modifier is missing).
-%The codeset will be ignored if present, but it won't interfere
-%with the parsing.
-%
-%For example:
-%\begin{verbatim}
-%\TrackLocale{de-NA@new}
-%\end{verbatim}
-%indicates German in Namibia using the new spelling.
-%
-%\begin{important}
-%If a language has different \qt{T} and \qt{B} ISO~639-2 codes, then
-%the \qt{T} form should be used. (So for the above example,
-%\texttt{deu} may be used instead of \texttt{de}, but \texttt{ger}
-%won't be recognised.)
-%\end{important}
-%
-%Alternatively, you can use
-%\begin{definition}[\DescribeMacro\TrackLanguageTag]
-%\cs{TrackLanguageTag}\marg{tag}
-%\end{definition}
-%where \meta{tag} is a regular, well-formed language tag or a recognised dialect
-%label. (Irregular grandfather tags aren't recognised.)
-%This command will fully expand \meta{tag}.
-%A warning is issued if the tag is empty.
-%
-%If you want to first check that \meta{tag} includes a valid language
-%code, then you can instead use:
-%\begin{definition}[\DescribeMacro\TrackIfKnownLanguage]
-%\cs{TrackIfKnownLanguage}\marg{tag}\marg{success code}\marg{fail code}
-%\end{definition}
-%This will only track \meta{tag} (and then do \meta{success code}) if
-%\meta{tag} starts with a valid language code (or is a predefined
-%dialect) otherwise it will do \meta{fail code}. Both
-%\cs{TrackLanguageTag} and \cs{TrackIfKnownLanguage} will check if
-%\meta{tag} is a predefined option. (This saves parsing the tag if
-%it's recognised.)
-%
-%For example:
-%\begin{verbatim}
-%\TrackLanguageTag{hy-Latn-IT-arevela}
-%Latn-ME: \TrackIfKnownLanguage{Latn-ME}{success}{fail}.
-%brazilian: \TrackIfKnownLanguage{brazilian}{success}{fail}.
-%\end{verbatim}
-%This will track hy-Latn-IT-arevela and brazilian (pt-BR) but not
-%Latn-ME (because it doesn't contain a valid language code) even
-%though it's a valid script and country code. The above is just for
-%illustrative purposes. Typically the language tracking isn't
-%performed within the document text.
-%
-%The \sty{datetime2} package assumes that any unknown package option is a
-%language identifier. It could simply do:
-%\begin{verbatim}
-%\TrackLanguageTag{\CurrentOption}
-%\end{verbatim}
-%but users can make mistakes sometimes and this won't provide any
-%helpful information if they, for example, misspelt a package option
-%or forgot the ``\meta{key}='' part of a \meta{key}=\meta{value}
-%setting. Instead (as from v1.5.5) it does:
-%\begin{verbatim}
-%\TrackIfKnownLanguage{\CurrentOption}{...}{\PackageError{...}{...}{...}}
-%\end{verbatim}
-%This will now give the user some guidance.
-%
-%If \meta{tag} contains a sub-language tag, this will be set
-%as the 639-3 code for the \emph{dialect} label. Note that this is
-%different to the root language codes which are set using the
-%language label. For example
-%\begin{verbatim}
-%\TrackLanguageTag{zh-cmn-Hans-CN}
-%\end{verbatim}
-%creates a new dialect with the label \texttt{zhcmnHansCN}.
-%The root language \texttt{chinese} has the ISO 639-1 code
-%\texttt{zh} and the dialect \texttt{zhcmnHansCN} has the
-%ISO 639-3 code \texttt{cmn}.
-%\begin{verbatim}
-%ISO 639-1: \TrackedIsoCodeFromLanguage{639-1}{chinese}.
-%ISO 639-3: \TrackedIsoCodeFromLanguage{639-3}{zhcmnHansCN}.
-%\end{verbatim}
-%
-%Version 1.2 of \sty{texosquery} provides the command \ics{TeXOSQueryLangTag},
-%which may be used to fetch the operating system's regional
-%information as a language tag. These commands can be used as
-%follows:
-%\begin{verbatim}
-%\input tracklang % v1.3
-%\input texosquery % v1.2
-%
-%\TeXOSQueryLangTag{\langtag}
-%\TrackLanguageTag{\langtag}
-%\end{verbatim}
-%(If the shell escape is disabled, \cs{langtag} will be empty, which
-%will trigger a~warning but no errors.)
-%
-%Some of the predefined root language options listed
-%in \tableref{tab:rootlangopts} have an associated region
-%(denoted by \fnregion).
-%If \cs{TrackLocale} is used with just the language ISO code,
-%no region is tracked for that language. For example
-%\begin{verbatim}
-%\TrackLocale{manx}
-%\end{verbatim}
-%will track the \qt{IM} ISO~3166-1 code but
-%\begin{verbatim}
-%\TrackLocale{gv}
-%\end{verbatim}
-%won't track the region.
-%Similarly for \cs{TrackLanguageTag}.
-%
-%(New to version 1.3.)
-%There's a similar command to \cs{TrackLocale} that doesn't take an argument:
-%\begin{definition}[\DescribeMacro\TrackLangFromEnv]
-%\cs{TrackLangFromEnv}
-%\end{definition}
-%If the shell escape has been enabled or
-%\ics{directlua} is available, this will try to get the language
-%information from the system environment variables
-%\envvar{LC\_ALL} or \envvar{LANG}
-%and, if successful, track that.
-%
-%Since \styfmt{tracklang} is neither able to look up the POSIX locale
-%tables nor interpret file locales, if the result is \texttt{C} or
-%\texttt{POSIX} or starts with a forward slash \texttt{/} then
-%the locale value is treated as empty.
-%
-%\begin{important}
-%Not all operating systems use environment variables for
-%the system locale information. For example, Windows stores the
-%locale information in the registry. In which case, consider
-%using \styfmt{texosquery}.
-%\end{important}
-%
-%If the operating system locale can't be obtained from environment variables, then
-%\styfmt{tracklang} will use \ics{TeXOSQueryLocale} as a fallback if
-%\styfmt{texosquery} has been loaded. Since \sty{texosquery} requires
-%both the shell escape and the Java runtime environment,
-%\styfmt{tracklang} doesn't automatically load it.
-%
-%Plain \TeX\ example:
-%\begin{verbatim}
-%\input texosquery
-%\input tracklang
-%\TrackLangFromEnv
-%\end{verbatim}
-%with \texttt{etex -{}-shell-escape }\meta{filename}
-%
-%\LaTeX\ example:
-%\begin{verbatim}
-%\usepackage{texosquery}
-%\usepackage{tracklang}
-%\TrackLangFromEnv
-%\end{verbatim}
-%with \texttt{latex -{}-shell-escape }\meta{filename}
-%
-%If the locale can't be determined, there will be warning messages.
-%These can be suppressed using
-%\begin{definition}[\DescribeMacro\TrackLangShowWarningsfalse]
-%\cs{TrackLangShowWarningsfalse}
-%\end{definition}
-%or switched back on again using
-%\begin{definition}[\DescribeMacro\TrackLangShowWarningstrue]
-%\cs{TrackLangShowWarningstrue}
-%\end{definition}
-%
-%For example, I have the environment variable \envvar{LANG} set to
-%\texttt{en\_GB.utf8} on my Linux system so instead of
-%\begin{verbatim}
-%\TrackPredefinedDialect{british}
-%\end{verbatim}
-%I can use
-%\begin{verbatim}
-%\TrackLangFromEnv
-%\end{verbatim}
-%
-%With \LaTeX\ documents I can do
-%\begin{verbatim}
-%\documentclass{article}
-%\usepackage{tracklang}
-%\TrackLangFromEnv
-%\end{verbatim}
-%However, this only helps subsequently loaded packages that
-%use \styfmt{tracklang} to determine the required regional
-%settings. For example:
-%\begin{verbatim}
-%\documentclass{article}
-%\usepackage{tracklang}
-%\TrackLangFromEnv
-%\usepackage[useregional]{datetime2}
-%\end{verbatim}
-%In my case, with \envvar{LANG} set to \texttt{en\_GB.utf8} and
-%shell escape enabled, this automatically switches on the
-%\texttt{en-GB} date style.
-%Naturally this doesn't help locale-sensitive packages that don't use
-%\styfmt{tracklang}.
-%
-%The \cs{TrackLangFromEnv} command also incidentally sets
-%\begin{definition}[\DescribeMacro\TrackLangEnv]
-%\cs{TrackLangEnv}
-%\end{definition}
-%to the value of the environment variable or empty if the
-%query was unsuccessful (for example, the shell escape is
-%unavailable).
-%
-%If \cs{TrackLangEnv} is already defined before
-%\cs{TrackLangFromEnv} is used, then the environment variable
-%won't be queried and the value of \cs{TrackLangEnv} will be
-%parsed instead.
-%
-%\begin{important}
-%The parser which splits the locale string into
-%its component parts first tries splitting on the underscore
-%\texttt{\_} with its usual category code~8, then tries splitting
-%on a hyphen \texttt{-} with category code~12, and then tries
-%splitting on the underscore \texttt{\_} with category code~12.
-%\end{important}
-%
-%For example:
-%\begin{verbatim}
-%\def\TrackLangEnv{en-GB}
-%\TrackLangFromEnv
-%\end{verbatim}
-%This doesn't perform a shell escape since \cs{TrackLangEnv}
-%is already defined. In this case, you may just as well use
-%\begin{verbatim}
-%\TrackLocale{en-GB}
-%\end{verbatim}
-%(unless you happen to additionally require the component
-%commands that are set by \cs{TrackLangFromEnv}, see below.)
-%
-%If the shell escape is unavailable
-%(for example, your \TeX\ installation prohibits it), you
-%can set this value when you invoke \TeX. For example,
-%if the document file is called \texttt{myDoc.tex} (and it's
-%in Plain \TeX):
-%\begin{verbatim}
-%tex "\\def\TrackLangEnv{$LANG}\\input myDoc"
-%\end{verbatim}
-%
-%The \cs{TrackLangFromEnv} command also happens to store the
-%component parts of the environment variable value in the
-%following commands. (These aren't provided by
-%\cs{TrackLocale}.)
-%
-%The language code is stored in:
-%\begin{definition}[\DescribeMacro\TrackLangEnvLang]
-%\cs{TrackLangEnvLang}
-%\end{definition}
-%
-%The territory (if present) is stored in:
-%\begin{definition}[\DescribeMacro\TrackLangEnvTerritory]
-%\cs{TrackLangEnvTerritory}
-%\end{definition}
-%(Defined to empty if not present.)
-%
-%The codeset (if present) is stored in:
-%\begin{definition}[\DescribeMacro\TrackLangEnvCodeSet]
-%\cs{TrackLangEnvCodeSet}
-%\end{definition}
-%(Defined to empty if not present.)
-%
-%The modifier (if present) is stored in:
-%\begin{definition}[\DescribeMacro\TrackLangEnvModifier]
-%\cs{TrackLangEnvModifier}
-%\end{definition}
-%(Defined to empty if not present.)
-%
-%If you want to query the language environment, but don't
-%want to track the result, you can just use:
-%\begin{definition}[\DescribeMacro\TrackLangQueryEnv]
-%\cs{TrackLangQueryEnv}
-%\end{definition}
-%This only tries to fetch the value of the
-%language environment variable (and use \sty{texosquery} as
-%a fallback, if it has been loaded). It doesn't try to parse the
-%result. The result is stored in \cs{TrackLangEnv} (empty if
-%unsuccessful). Unlike \cs{TrackLangFromEnv}, this doesn't check if
-%\cs{TrackLangEnv} already exists. A warning will occur if the shell
-%escape is unavailable. For systems that store the locale information in
-%environment variables, this is more efficient than using
-%\sty{texosquery}'s \cs{TeXOSQueryLocale} command (which is what's
-%used as the fallback).
-%
-%The above queries \envvar{LC\_ALL} and, if that is unsuccessful,
-%then queries \envvar{LANG} (before optionally falling back on
-%\sty{texosquery}). If you want another environment
-%variable tried after \envvar{LC\_ALL} and before \envvar{LANG},
-%you can instead use:
-%\begin{definition}[\DescribeMacro\TrackLangQueryOtherEnv]
-%\cs{TrackLangQueryOtherEnv}\marg{name}
-%\end{definition}
-%For example, to also query \envvar{LC\_MONETARY}:
-%\begin{verbatim}
-%\TrackLangQueryOtherEnv{LC_MONETARY}
-%\end{verbatim}
-%
-%Since this sets \cs{TrackLangEnv}, you can use it before
-%\cs{TrackLangFromEnv}. For example:
-%\begin{verbatim}
-%\TrackLangQueryOtherEnv{LC_MONETARY}
-%\TrackLangFromEnv
-%\end{verbatim}
-%Remember that if you only want to do the shell escape if
-%\cs{TrackLangEnv} hasn't already been defined, you can test for this
-%first:
-%\begin{verbatim}
-%\ifx\TrackLangEnv\undefined
-% \TrackLangQueryOtherEnv{LC_MONETARY}
-%\fi
-%\TrackLangFromEnv
-%\end{verbatim}
-%
-%It's also possible to just parse the value of \cs{TrackLangEnv}
-%without tracking the result using:
-%\begin{definition}[\DescribeMacro\TrackLangParseFromEnv]
-%\cs{TrackLangParseFromEnv}
-%\end{definition}
-%This is like \cs{TrackLangFromEnv} but assumes that
-%\cs{TrackLangEnv} has already been set and doesn't track the
-%result. The component parts are stored as for \cs{TrackLangFromEnv}.
-%
-%Example (Plain \TeX):
-%\begin{verbatim}
-%\input tracklang
-%
-%\def\TrackLangEnv{fr-BE.utf8@euro}
-%
-%\TrackLangParseFromEnv
-%
-%Language: \TrackLangEnvLang.
-%Territory: \TrackLangEnvTerritory.
-%Codeset: \TrackLangEnvCodeSet.
-%Modifier: \TrackLangEnvModifier.
-%Any tracked languages? \AnyTrackedLanguages{Yes}{No}.
-%
-%\end{verbatim}
-%This produces:
-%
-%\medskip
-%
-%Language: fr. Territory: BE. Codeset: utf8. Modifier: euro.
-%Any tracked languages? No.
-%
-%\medskip
-%
-%Compare this with:
-%\begin{verbatim}
-%\input tracklang
-%
-%\def\TrackLangEnv{fr-BE.utf8@euro}
-%
-%\TrackLangFromEnv
-%
-%Language: \TrackLangEnvLang.
-%Territory: \TrackLangEnvTerritory.
-%Codeset: \TrackLangEnvCodeSet.
-%Modifier: \TrackLangEnvModifier.
-%Any tracked languages? \AnyTrackedLanguages{Yes}{No}.
-%Tracked dialect(s):%
-%\ForEachTrackedDialect{\thisdialect}{\space\thisdialect}.
-%\end{verbatim}
-%This produces:
-%
-%\medskip
-%
-%Language: fr. Territory: BE. Codeset: utf8. Modifier: euro.
-%Any tracked languages? Yes.
-%Tracked dialect(s): belgique.
-%
-%\medskip
-%
-%If \cs{TrackLangFromEnv} doesn't recognise the given language and
-%territory combination, it will define a new dialect and add that.
-%
-%For example, \styfmt{tracklang} doesn't recognise \texttt{en-BE}, so
-%the sample document below defines a new dialect labelled
-%\texttt{enBEeuro}:
-%\begin{verbatim}
-%\input tracklang
-%
-%\def\TrackLangEnv{en-BE.utf8@euro}
-%
-%\TrackLangFromEnv
-%
-%Language: \TrackLangEnvLang.
-%Territory: \TrackLangEnvTerritory.
-%Codeset: \TrackLangEnvCodeSet.
-%Modifier: \TrackLangEnvModifier.
-%Any tracked languages? \AnyTrackedLanguages{Yes}{No}.
-%Tracked dialect(s):%
-%\ForEachTrackedDialect{\thisdialect}{\space\thisdialect}.
-%\end{verbatim}
-%This now produces:
-%\medskip
-%
-%Language: en. Territory: BE. Codeset: utf8. Modifier: euro.
-%Any tracked languages? Yes.
-%Tracked dialect(s): enBEeuro.
-%
-%\chapter{Detecting the User's Requested Languages}
-%\label{sec:user}
-%
-%The \styfmt{tracklang} package tries to track the loaded languages and
-%the option names used to identify those languages. For want of a better
-%term, the language option names are referred to as dialects even if
-%they're only a synonym for the language rather than an actual
-%dialect. For example, if the user
-%has requested \texttt{british}, the \emph{root language} label is
-%\texttt{english} and the dialect is \texttt{british}, whereas if the
-%user requested \texttt{UKenglish}, the root language label is
-%\texttt{english} and the dialect is \texttt{UKenglish}. The
-%exceptions to this are the \styfmt{tracklang} package options that have been
-%specified in the form \meta{iso lang}-\meta{iso country} (listed
-%in \tableref{tab:rootlangopts}). For
-%example, the package option \texttt{en-GB} behaves as though the
-%user requested the package option \texttt{british}.
-%
-%If \cs{TrackLocale} or \cs{TrackLangFromEnv} are used and the locale
-%isn't recognised a new dialect is created with the label formed from
-%the ISO codes (and modifier, if present).
-%Similarly for \cs{TrackLanguageTag} a new
-%dialect is created with a label that's essentially the language tag
-%without the hyphen separators. For example,
-%\begin{verbatim}
-%\TrackLocale{xx-YY}
-%\end{verbatim}
-%will add a new dialect with the label \texttt{xxYY},
-%\begin{verbatim}
-%\TrackLocale{xx-YY@mod}
-%\end{verbatim}
-%will add a new dialect with the label \texttt{xxYYmod} and
-%\begin{verbatim}
-%\TrackLanguageTag{xx-Latn-YY}
-%\end{verbatim}
-%will add a new dialect with the label \texttt{xxLatnYY}.
-%
-%\begin{important}
-%If \cs{TrackLocale} or \cs{TrackLangFromEnv} find a modifier, the
-%value will be sanitized to allow it to be used as a label. If the
-%modifier is set explicitly using \cs{SetTrackedDialectModifier},
-%no sanitization is performed.
-%\end{important}
-%
-%In addition to the root language label and the dialect identifier,
-%many of the language options also have corresponding ISO codes. In
-%most cases there is an ISO~639-1 or an ISO~639-2 code (or both), and in some
-%cases there is an ISO~3166-1 code identifying the dialect region.
-%Where a language has both a \qt{T} and a \qt{B} ISO~639-2
-%code, the \qt{T} version is assumed.
-%
-%When the \styfmt{tracklang} \LaTeX\ package is loaded, it first attempts to find the
-%language options through the package options supplied to
-%\styfmt{tracklang}. This means that any languages that have been
-%supplied in the document class options should get identified
-%(provided that the document class has used the standard option
-%declaration mechanism). If no languages have been supplied in this
-%way, \styfmt{tracklang} then attempts to identify any \sty{babel}
-%language options and failing that it will try the \sty{translator}
-%language options. It will then check if \sty{ngerman} or
-%\sty{polyglossia} have been loaded.
-%
-%Each identified language and dialect is added to the \emph{tracked
-%language} and \emph{tracked dialect} lists. Note that the tracked
-%language and tracked dialect are labels rather than proper nouns.
-%If a~dialect label is identical to its root language label, the
-%label will appear in both lists.
-%
-%You can check whether or not any languages have been detected using:
-%\begin{definition}[\DescribeMacro\AnyTrackedLanguages]
-%\cs{AnyTrackedLanguages}\marg{true part}\marg{false part}
-%\end{definition}
-%This will do \meta{true part} if one or more languages have been
-%detected otherwise it will do \meta{false part}. (Each detected
-%dialect will automatically have the root language label added
-%to the tracked language list, if it's not already present.)
-%
-%If you want to find out if any of the tracked dialects
-%matches a particular language tag, you can use:
-%\begin{definition}[\DescribeMacro\GetTrackedDialectFromLanguageTag]
-%\ics{GetTrackedDialectFromLanguageTag}\marg{tag}\marg{cs}
-%\end{definition}
-%If successful, the supplied control sequence \meta{cs} is set to the
-%dialect label, otherwise \meta{cs} is set to empty. The test is for an exact
-%match on the root language, script, sub-language, variant and
-%region. The control sequence \meta{cs} will be empty if none of the
-%tracked dialects matches all five of those elements. (If the script
-%isn't given explicitly, the default for that language is assumed.)
-%In the event that \meta{cs} is empty, you can now (as from v1.3.6)
-%get the closest match with
-%\begin{definition}[\DescribeMacro\TrackedDialectClosestSubMatch]
-%\ics{TrackedDialectClosestSubMatch}
-%\end{definition}
-%(which is set by \cs{GetTrackedDialectFromLanguageTag}).
-%This will be empty if no tracked dialects match on the root
-%language or if there's a tracked dialect label that exactly matches
-%the label formed by concatenating the language code, sub-language,
-%script, region, modifier and variant.
-%
-%For example (Plain \TeX):
-%\begin{verbatim}
-%\input tracklang
-%\TrackLanguageTag{en-826}
-%Has en-Latn-GB been tracked?
-%\GetTrackedDialectFromLanguageTag{en-Latn-GB}{\thisdialect}%
-%\ifx\thisdialect\empty
-% No!
-%\else
-% Yes! Dialect label: \thisdialect.
-%\fi
-%\bye
-%\end{verbatim}
-%This matches because the territory code 826 is recognised as
-%equivalent to the code GB, and the default script for
-%\texttt{english} is \texttt{Latn}. In this case, the dialect
-%label is \texttt{british}. Note that this doesn't require
-%the use of \cs{TrackLanguageTag} to track the dialect.
-%It also works if the dialect has been tracked using other commands,
-%such as \cs{TrackLocale}.
-%
-%Here's an example that doesn't have an exact match, but does have a
-%partial match:
-%\begin{verbatim}
-%\input tracklang
-%\TrackLanguageTag{de-CH-1996}
-%Has de-DE-1996 been tracked?
-%\GetTrackedDialectFromLanguageTag{de-DE-1996}{\thisdialect}%
-%\ifx\thisdialect\empty
-% No!
-% \ifx\TrackedDialectClosestSubMatch\empty
-% No match on root language.
-% \else
-% Closest match: \TrackedDialectClosestSubMatch.
-% \fi
-%\else
-% Yes! Dialect label: \thisdialect.
-%\fi
-%\bye
-%\end{verbatim}
-%In this case the result is:
-%\begin{quote}
-%Has de-DE-1996 been tracked? No! Closest match: nswissgerman.
-%\end{quote}
-%
-%You can iterate through each tracked dialect using:
-%\begin{definition}[\DescribeMacro\ForEachTrackedDialect]
-%\cs{ForEachTrackedDialect}\marg{cs}\marg{code}
-%\end{definition}
-%At the start of each iteration, this sets the control sequence
-%\meta{cs} to the tracked dialect and does \meta{code}.
-%
-%You can iterate through each tracked language using:
-%\begin{definition}[\DescribeMacro\ForEachTrackedLanguage]
-%\cs{ForEachTrackedLanguage}\marg{cs}\marg{code}
-%\end{definition}
-%At the start of each iteration, this sets the control sequence \meta{cs} to the
-%tracked language and does \meta{code}.
-%
-%The above for-loops use the same internal mechanism as \LaTeX's
-%\cs{@for} loop. The provided control sequence \meta{cs} is updated at the
-%start of each iteration to the current element. The loop is
-%terminated when this control sequence is set to \cs{@nil}. This
-%special control sequence should never been used as it's just a
-%marker and isn't actually defined. If you get an error message
-%stating that \cs{@nil} is undefined, then it's most likely due to a
-%loop control sequence being used outside the loop. This can occur if
-%the loop contains code that isn't expanded until later. For example,
-%if the loop code includes \cs{AtBeginDocument}, you need to ensure
-%that the loop control sequence is expanded before being added to the
-%hook.
-%
-%You can test if a root language has been detected using:
-%\begin{definition}[\DescribeMacro\IfTrackedLanguage]
-%\cs{IfTrackedLanguage}\marg{label}\marg{true part}\marg{false part}
-%\end{definition}
-%where \meta{label} is the language label. If
-%true, this does \meta{true part} otherwise it does \meta{false
-%part}.
-%
-%You can test if a particular dialect has been detected using:
-%\begin{definition}[\DescribeMacro\IfTrackedDialect]
-%\cs{IfTrackedDialect}\marg{label}\marg{true part}\marg{false part}
-%\end{definition}
-%where \meta{label} is the dialect label. If the root language was explicitly specified, then it will
-%also be detected as a dialect.
-%
-%For example:
-%\begin{verbatim}
-%\documentclass[british,dutch]{article}
-%
-%\usepackage{tracklang}
-%
-%\begin{document}
-%``english'' \IfTrackedDialect{english}{has}{hasn't} been specified.
-%
-%``british'' \IfTrackedDialect{british}{has}{hasn't} been specified.
-%
-%``flemish'' \IfTrackedDialect{flemish}{has}{hasn't} been specified.
-%
-%``dutch'' \IfTrackedDialect{dutch}{has}{hasn't} been specified.
-%
-%``english'' or an English variant
-%\IfTrackedLanguage{english}{has}{hasn't} been specified.
-%
-%\end{document}
-%\end{verbatim}
-%This produces:
-%\begin{quote}
-%``english'' hasn't been specified.
-%
-%``british'' has been specified.
-%
-%``flemish'' hasn't been specified.
-%
-%``dutch'' has been specified.
-%
-%``english'' or an English variant has been specified.
-%\end{quote}
-%
-%You can find the root language label for a given tracked dialect
-%using:
-%\begin{definition}[\DescribeMacro\TrackedLanguageFromDialect]
-%\cs{TrackedLanguageFromDialect}\marg{dialect}
-%\end{definition}
-%If \meta{dialect} hasn't been defined this does nothing otherwise it
-%expands to the root language label.
-%
-%You can find the tracked dialects from a given root language
-%using:
-%\begin{definition}[\DescribeMacro\TrackedDialectsFromLanguage]
-%\cs{TrackedDialectsFromLanguage}\marg{root language label}
-%\end{definition}
-%This will expand to a~comma-separated list of dialect labels
-%if the root language label has been defined, otherwise it
-%does nothing.
-%
-%
-%You can test if a language or dialect has a corresponding ISO code using:
-%\begin{definition}[\DescribeMacro\IfTrackedLanguageHasIsoCode]
-%\cs{IfTrackedLanguageHasIsoCode}\marg{code
-%type}\marg{label}\marg{true part}\marg{false part}
-%\end{definition}
-%where \meta{code type} is the type of ISO code (for example,
-%\texttt{639-1} for root languages or \texttt{3166-1} for regional
-%dialects), and \meta{label} is the language or dialect label.
-%Note that the \texttt{639-3} may be set for the dialect
-%rather than root language for sub-languages parsed using
-%\ics{TrackLanguageTag}.
-%
-%Alternatively, you can test if a particular ISO code has been
-%defined using:
-%\begin{definition}[\DescribeMacro\IfTrackedIsoCode]
-%\cs{IfTrackedIsoCode}\marg{code type}\marg{code}\marg{true
-%part}\marg{false part}
-%\end{definition}
-%where \meta{code type} is again the type of ISO code (for example,
-%\texttt{639-1} or \texttt{3166-1}), and \meta{code} is the
-%particular code (for example, \texttt{en} for ISO 639-1 or
-%\texttt{GB} for ISO 3166-1).
-%
-%You can fetch the language (or dialect) label associated with a
-%given ISO code using:
-%\begin{definition}[\DescribeMacro\TrackedLanguageFromIsoCode]
-%\cs{TrackedLanguageFromIsoCode}\marg{code type}\marg{code}
-%\end{definition}
-%This does nothing if the given \meta{code} for the given ISO
-%\meta{code type} has not been defined, otherwise it expands
-%a~comma-separated list of language or dialect labels.
-%
-%You can fetch the ISO code for a given code type using:
-%\begin{definition}[\DescribeMacro\TrackedIsoCodeFromLanguage]
-%\cs{TrackedIsoCodeFromLanguage}\marg{code type}\marg{label}
-%\end{definition}
-%where \meta{label} is the language or dialect label and \meta{code
-%type} is the ISO code type (for example, \texttt{639-1} or
-%\texttt{3166-1}). Unlike \ics{TrackedLanguageFromIsoCode}, this
-%command only expands to a single label rather than a~comma-separated
-%list.
-%
-%The above commands do nothing in the event of an unknown code or
-%code type,
-%so if you accidentally get the wrong code type, you won't get an error.
-%If you're unsure of the code type, you can use the following commands:
-%\begin{definition}[\DescribeMacro\TwoLetterIsoCountryCode]
-%\cs{TwoLetterIsoCountryCode}
-%\end{definition}
-%This expands to 3166-1 and is used for the two-letter country codes.
-%
-%\begin{definition}[\DescribeMacro\TwoLetterIsoLanguageCode]
-%\cs{TwoLetterIsoLanguageCode}
-%\end{definition}
-%This expands to 639-1 and is used for the two-letter root language codes.
-%
-%\begin{definition}[\DescribeMacro\ThreeLetterIsoLanguageCode]
-%\cs{ThreeLetterIsoLanguageCode}
-%\end{definition}
-%This expands to 639-2 and is used for the three-letter root language
-%codes.
-%
-%\begin{definition}[\DescribeMacro\ThreeLetterExtIsoLanguageCode]
-%\cs{ThreeLetterExtIsoLanguageCode}
-%\end{definition}
-%(New to v1.3.) This expands to 639-3. This code is only used for a root language if
-%there's no 639-1 or 639-2 code. It may also be used for a
-%dialect if a sub-language part has been set in the language
-%tag parsed by \cs{TrackLanguageTag}.
-%
-%The \cs{Get\ldots} commands below are designed to be expandable.
-%If the supplied \meta{dialect} is unrecognised they expand to empty.
-%Remember that the dialect must first be identified as a tracked
-%language for it to be recognised.
-%
-%As from v1.3, the language tag for a given dialect can be obtained
-%using:
-%\begin{definition}[\DescribeMacro\GetTrackedLanguageTag]
-%\cs{GetTrackedLanguageTag}\marg{dialect}
-%\end{definition}
-%where \meta{dialect} is the label identifying the dialect.
-%Uses the \texttt{und} (undetermined) code for unknown languages.
-%
-%As from v1.3, each tracked dialect may also have an associated
-%modifier, which can be fetched using:
-%\begin{definition}[\DescribeMacro\GetTrackedDialectModifier]
-%\cs{GetTrackedDialectModifier}\marg{dialect}
-%\end{definition}
-%where \meta{dialect} is the label identifying the dialect.
-%This value is typically obtained by parsing a POSIX locale identifier
-%with \cs{TrackLocale} or \cs{TrackLangFromEnv} but may be set explicitly.
-%(See \sectionref{sec:langsty} for setting this value. Likewise for
-%the following commands.)
-%
-%You can test if a dialect has an associated modifier using:
-%\begin{definition}[\DescribeMacro\IfHasTrackedDialectModifier]
-%\cs{IfHasTrackedDialectModifier}\marg{dialect}\marg{true}\marg{false}
-%\end{definition}
-%If the dialect has an associated modifier this does \meta{true}
-%otherwise it does \meta{false}.
-%
-%For example:
-%\begin{verbatim}
-%\documentclass[british,francais,american,canadian,canadien,dutch]{article}
-%
-%\usepackage{tracklang}
-%
-%\begin{document}
-%
-%Languages: \ForEachTrackedLanguage{\ThisLanguage}{\ThisLanguage\space
-%(ISO \TwoLetterIsoLanguageCode:
-%``\TrackedIsoCodeFromLanguage{\TwoLetterIsoLanguageCode}{\ThisLanguage}''). }
-%
-%Dialects: \ForEachTrackedDialect{\ThisDialect}{\ThisDialect\space
-%(\IfTrackedLanguageHasIsoCode{\TwoLetterIsoCountryCode}{\ThisDialect}%
-% {ISO \TwoLetterIsoCountryCode:
-% ``\TrackedIsoCodeFromLanguage{\TwoLetterIsoCountryCode}{\ThisDialect}''}%
-% {no specific region};
-%root: \TrackedLanguageFromDialect{\ThisDialect}). }
-%
-%Language for ISO \TwoLetterIsoCountryCode\ ``GB'':
-%\TrackedLanguageFromIsoCode{\TwoLetterIsoCountryCode}{GB}.
-%
-%Language for ISO \TwoLetterIsoCountryCode\ ``CA'':
-%\TrackedLanguageFromIsoCode{\TwoLetterIsoCountryCode}{CA}.
-%
-%Country ISO \TwoLetterIsoCountryCode\ code for ``canadian'':
-%\TrackedIsoCodeFromLanguage{\TwoLetterIsoCountryCode}{canadian}.
-%
-%\end{document}
-%\end{verbatim}
-%This produces:
-%\begin{quote}
-%Languages: english (ISO 639-1: ``en''). french (ISO 639-1: ``fr'').
-%dutch (ISO 639-1: ``nl'').
-%
-%Dialects: american (ISO 3166-1: ``US''; root: english).
-%british (ISO 3166-1: ``GB''; root: english).
-%canadian (ISO 3166-1: ``CA''; root: english).
-%canadien (ISO 3166-1: ``CA''; root: french).
-%dutch (no specific region; root: dutch).
-%francais (no specific region; root: french).
-%
-%Language for ISO 3166-1 ``GB'': british.
-%
-%Language for ISO 3166-1 ``CA'': canadian,canadien.
-%
-%Country ISO 3166-1 code for ``canadian'': CA.
-%
-%\end{quote}
-%
-%As from v1.3, each tracked dialect may also have an associated
-%variant, which can be fetched using:
-%\begin{definition}[\DescribeMacro\GetTrackedDialectVariant]
-%\cs{GetTrackedDialectVariant}\marg{dialect}
-%\end{definition}
-%where \meta{dialect} is the label identifying the dialect.
-%This value is typically obtained by parsing a language tag
-%with \cs{TrackLanguageTag} but may be set explicitly.
-%
-%You can test if a dialect has an associated variant using:
-%\begin{definition}[\DescribeMacro\IfHasTrackedDialectVariant]
-%\cs{IfHasTrackedDialectVariant}\marg{dialect}\marg{true}\marg{false}
-%\end{definition}
-%
-%As from v1.3, each tracked dialect may also have an associated
-%script, which can be fetched using:
-%\begin{definition}[\DescribeMacro\GetTrackedDialectScript]
-%\cs{GetTrackedDialectScript}\marg{dialect}
-%\end{definition}
-%where \meta{dialect} is the label identifying the dialect.
-%
-%You can test if a dialect has an associated script using:
-%\begin{definition}[\DescribeMacro\IfHasTrackedDialectScript]
-%\cs{IfHasTrackedDialectScript}\marg{dialect}\marg{true}\marg{false}
-%\end{definition}
-%If the dialect has an associated script this does \meta{true}
-%otherwise it does \meta{false}. This information is provided
-%for language packages that need to know what script is required,
-%but there's no guarantee that the script will actually be set
-%in the document. Similarly for all the other attributes described
-%here.
-%
-%Note that the script should be a recognised four-letter ISO 15924
-%code, such as \texttt{Latn} or \texttt{Cyrl}. If a~dialect
-%doesn't have an associated script then the default for the root
-%language should be assumed. For example, \qt{Latn} for English dialects or
-%\qt{Cyrl} for Russian dialects. (The default script for
-%known languages can be obtained using
-%\cs{TrackLangGetDefaultScript}, see
-%\sectionref{sec:code:knownlangs} for further details.
-%Most root languages have a default script, but there
-%are a few without one as it may depend on region, politics
-%or ideology.)
-%
-%There's a convenient expandable command for testing the script:
-%\begin{definition}
-%\cs{IfTrackedDialectIsScriptCs}\marg{dialect}\marg{cs}\marg{true}\marg{false}
-%\end{definition}
-%This tests if the given tracked dialect has an associated script and
-%compares the value with the replacement text of \meta{cs}.
-%If the dialect hasn't been explicitly assigned a script,
-%then test is performed against the default script for the root
-%language.
-%
-%The supplementary package \sty{tracklang-scripts} provides some
-%additional commands relating to writing systems, including commands
-%in the form \ics{TrackLangScript\meta{code}} where
-%\meta{code} is the ISO 15924 four-letter code. If the dialect
-%doesn't have an associated script, \meta{false} is done.
-%This package isn't
-%loaded automatically, so you'll need to explicitly load it. The
-%generic code is in \texttt{tracklang-scripts.tex}:
-%\begin{verbatim}
-%\input tracklang-scripts
-%\end{verbatim}
-%There's a convenient \LaTeX\ wrapper \texttt{tracklang-scripts.sty}:
-%\begin{verbatim}
-%\usepackage{tracklang-scripts}
-%\end{verbatim}
-%See \sectionref{sec:tracklang-scripts.tex} for further details of
-%that package.
-%
-%For example, the following defines a command to check if
-%the given dialect should use a Latin script:
-%\begin{verbatim}
-%\input tracklang-scripts
-%\def\islatin#1#2#3{%
-% \IfTrackedDialectIsScriptCs{#1}{\TrackLangScriptLatn}{#2}{#3}%
-%}
-%\end{verbatim}
-%
-%\begin{important}
-%Note that the script value doesn't mean that the document is
-%actually using that script. It means that this is the user's
-%\emph{desired} script, but whether that script is actually set relies
-%on the appropriate settings in the relevant language package (such
-%as \sty{polyglossia}'s \texttt{script} key).
-%\end{important}
-%
-%As from v1.3, each tracked dialect may also have a sub-language
-%identifier (for example, \texttt{arevela}), which can be fetched
-%using:
-%\begin{definition}[\DescribeMacro\GetTrackedDialectSubLang]
-%\cs{GetTrackedDialectSubLang}\marg{dialect}
-%\end{definition}
-%where \meta{dialect} is the label identifying the dialect.
-%
-%You can test if a dialect has an associated sub-tag using:
-%\begin{definition}[\DescribeMacro\IfHasTrackedDialectSubLang]
-%\cs{IfHasTrackedDialectSubLang}\marg{dialect}\marg{true}\marg{false}
-%\end{definition}
-%If the dialect has an associated sub-tag this does \meta{true}
-%otherwise it does \meta{false}.
-%
-%As from v1.3, each tracked dialect may also have additional
-%information, which can be fetched using:
-%\begin{definition}[\DescribeMacro\GetTrackedDialectAdditional]
-%\cs{GetTrackedDialectAdditional}\marg{dialect}
-%\end{definition}
-%where \meta{dialect} is the label identifying the dialect.
-%
-%You can test if a dialect has additional information using:
-%\begin{definition}[\DescribeMacro\IfHasTrackedDialectAdditional]
-%\cs{IfHasTrackedDialectAdditional}\marg{dialect}\marg{true}\marg{false}
-%\end{definition}
-%If the dialect has additional information this does \meta{true}
-%otherwise it does \meta{false}.
-%
-%
-%Most packages that implement multilingual support have a~set of
-%language definition files for each supported language or dialect.
-%It may be that only the root language is needed, if there are no
-%variations between that language's dialect (for the purposes of that
-%package), or it may be that separate definition files are required
-%for each dialect. However it can be awkward trying to map the
-%requested dialect or language label to the file name. Should, say,
-%the file containing the French code be called
-%\meta{prefix}\texttt{-french-}\meta{suffix} or
-%\meta{prefix}\texttt{-frenchb-}\meta{suffix} or
-%\meta{prefix}\texttt{-francais-}\meta{suffix}?
-%Should, say, the file containing the British English code be called
-%\meta{prefix}\texttt{-british-}\meta{suffix} or
-%\meta{prefix}\texttt{-UKenglish-}\meta{suffix}?
-%If you want to modularise the language support for your package so
-%that each language module has a different maintainer will the
-%maintainers know what tag to use for their language?
-%
-%\label{pg:filesearch}To help with this, \styfmt{tracklang} provides:
-%\begin{definition}
-%\ics{IfTrackedLanguageFileExists}\marg{dialect}\marg{prefix}\marg{suffix}\marg{true part}\marg{false part}
-%\end{definition}
-%This attempts to find the file called
-%\meta{prefix}\meta{localeid}\meta{suffix} where \meta{localeid} is determined
-%from \meta{dialect} (see below). If the file is found
-%\begin{definition}
-%\ics{CurrentTrackedTag}
-%\end{definition}
-%is set to \meta{localeid} and \meta{true part} is done, otherwise
-%\meta{false part} is done. If this command
-%is empty, then the dialect hasn't been detected. If the dialect
-%has been detected, but no file can be found, then
-%\ics{CurrentTrackedTag} is set to the final attempt at determining
-%\meta{localeid}.
-%
-%There's a convenient shortcut command new to version 1.3:
-%\begin{definition}[\DescribeMacro\TrackLangRequireDialect]
-%\cs{TrackLangRequireDialect}\oarg{load code}\marg{pkgname}\marg{dialect}
-%\end{definition}
-%which uses \cs{IfTrackedLanguageFileExists} to input the resource
-%file if found. The prefix is given by \meta{pkgname}\texttt{-} and
-%the suffix is \texttt{.ldf}. A warning is issued if no resource file
-%is found. Note that while it makes sense for \meta{pkgname}
-%to be the same as the base name of the package that uses these
-%resource files, they don't have to be the same. This command
-%additionally defines
-%\begin{definition}[\DescribeMacro\TrackLangRequireDialectPrefix]
-%\cs{TrackLangRequireDialectPrefix}
-%\end{definition}
-%to \meta{pkgname}, which allows the prefix to be picked up by
-%resource file commands, such as \cs{TrackLangProvidesResource}
-%and \cs{TrackLangRequireResource}. (See below.)
-%
-%The optional argument \meta{load code} is the code that actually
-%inputs the required file. This defaults to
-%\begin{verbatim}
-%\TrackLangRequireResource{\CurrentTrackedTag}
-%\end{verbatim}
-%
-%
-%The \ics{IfTrackedLanguageFileExists} command sets up the current
-%tracked dialect with
-%\ics{SetCurrentTrackedDialect}\marg{dialect}, which enables the following
-%commands that may be used within \meta{true part} or \meta{false
-%part}:
-%\begin{definition}
-%\ics{CurrentTrackedDialect}
-%\end{definition}
-%The dialect label.
-%
-%\begin{definition}
-%\ics{CurrentTrackedLanguage}
-%\end{definition}
-%If the dialect hasn't been detected, this command will be empty,
-%otherwise it will expand to the root language label (which may
-%be the same as the dialect label).
-%
-%\begin{definition}
-%\ics{CurrentTrackedRegion}
-%\end{definition}
-%If the dialect hasn't been detected, this command will be empty.
-%If the dialect has been assigned an ISO~3166-1 code,
-%\ics{CurrentTrackedRegion} will expand to that code, otherwise it
-%will be empty.
-%
-%\begin{definition}
-%\ics{CurrentTrackedIsoCode}
-%\end{definition}
-%If the dialect hasn't been detected, this command will be empty.
-%Otherwise it may be empty or it may expand to the
-%ISO~639-1 or ISO~639-2 or ISO~639-3 code.
-%
-%\begin{definition}
-%\ics{CurrentTrackedDialectModifier}
-%\end{definition}
-%The dialect's modifier or empty if not set. (This is set but not
-%used in the set of possible \meta{localeid} values.)
-%
-%\begin{definition}
-%\ics{CurrentTrackedDialectVariant}
-%\end{definition}
-%The dialect's variant or empty if not set.
-%
-%\begin{definition}
-%\ics{CurrentTrackedDialectSubTag}
-%\end{definition}
-%The dialect's sub-language code or empty if not set.
-%
-%\begin{definition}
-%\ics{CurrentTrackedDialectAdditional}
-%\end{definition}
-%The dialect's additional information or empty if not set.
-%
-%\begin{definition}
-%\ics{CurrentTrackedLanguageTag}
-%\end{definition}
-%The dialect's language tag. Take care not to confuse this
-%with \cs{CurrentTrackedTag}.
-%
-%\begin{definition}
-%\ics{CurrentTrackedDialectScript}
-%\end{definition}
-%The dialect's script. If the dialect doesn't have the script set,
-%the default script for the language is used instead.
-%
-%\cs{IfTrackedLanguageFileExists} behaves as follows:
-%\begin{itemize}
-% \item If no dialect with the given label has been
-% detected, the condition evaluates to \emph{false} and
-% \ics{CurrentTrackedTag} is empty.
-% \item If a dialect with the given label has been detected, then:
-% \begin{itemize}
-% \item For each possible \meta{localeid} in an ordered set of tags determined by
-% the dialect label (see below), the first file matching
-% \meta{prefix}\meta{localeid}\meta{suffix} that's found on
-% \TeX's path results in the condition evaluating to \emph{true} and
-% \ics{CurrentTrackedTag} is set to the current \meta{localeid} in the
-% set. The rest of the set of possible values of \meta{localeid} is skipped.
-% \item If no file matching \meta{prefix}\meta{localeid}\meta{suffix} is
-% found on \TeX's path, then the condition evaluates to \emph{false}
-% and \ics{CurrentTrackedTag} is set to the final \meta{localeid} in the
-% set (the language label).
-% \end{itemize}
-%\end{itemize}
-%
-%The ordered set of possible values of \meta{localeid} is determined from
-%the given dialect.
-%\begin{important}
-%The ordering has changed in version 1.4, which now also includes the
-%script and variant. This new ordering should typically make the more
-%common combinations closer to the start of the search.
-%\end{important}
-%The possible values of \meta{localeid} are listed below in the order of priority used
-%by \cs{IfTrackedLanguageFileExists}. Note that the set may contain
-%repetitions (for example, if the dialect label is the same as the
-%root language label). If an item contains an element that hasn't
-%been set (such as the ISO~639-3 code or a sub-language \meta{sublang} or variant) then
-%that item is skipped.
-%\begin{enumerate}
-%\item \meta{localeid} is just the value of \ics{CurrentTrackedLanguageTag}.
-%\item \meta{localeid} is just the dialect label.
-%
-%\item \meta{localeid} is
-%\meta{ISO~639-1}\texttt{-}\meta{sublang}\texttt{-}\meta{script}\texttt{-}\meta{region}.
-%\item \meta{localeid} is
-%\meta{ISO~639-1}\texttt{-}\meta{script}\texttt{-}\meta{region}.
-%\item \meta{localeid} is
-%\meta{ISO~639-1}\texttt{-}\meta{sublang}\texttt{-}\meta{region} (if there's no script or if
-%the script is the default for the given language).
-%\meta{ISO~639-1}\texttt{-}\meta{region} (if there's no script or if
-%the script is the default for the given language).
-%\item \meta{localeid} is
-%\meta{ISO~639-1}\texttt{-}\meta{sublang}\texttt{-}\meta{script}.
-%\item \meta{localeid} is
-%\meta{ISO~639-1}\texttt{-}\meta{script}.
-%\item \meta{localeid} is \meta{ISO~639-1}\texttt{-}\meta{sublang}.
-%\item \meta{localeid} is just \meta{ISO~639-1}.
-%
-%\item \meta{localeid} is
-%\meta{ISO~639-2}\texttt{-}\meta{sublang}\texttt{-}\meta{script}\texttt{-}\meta{region}.
-%\item \meta{localeid} is
-%\meta{ISO~639-2}\texttt{-}\meta{script}\texttt{-}\meta{region}.
-%\item \meta{localeid} is
-%\meta{ISO~639-2}\texttt{-}\meta{sublang}\texttt{-}\meta{region} (if there's no script or if
-%the script is the default for the given language).
-%\meta{ISO~639-2}\texttt{-}\meta{region} (if there's no script or if
-%the script is the default for the given language).
-%\item \meta{localeid} is
-%\meta{ISO~639-2}\texttt{-}\meta{sublang}\texttt{-}\meta{script}.
-%\item \meta{localeid} is
-%\meta{ISO~639-2}\texttt{-}\meta{script}.
-%\item \meta{localeid} is \meta{ISO~639-2}\texttt{-}\meta{sublang}.
-%\item \meta{localeid} is just \meta{ISO~639-2}.
-%
-%\item \meta{localeid} is
-%\meta{ISO~639-3}\texttt{-}\meta{sublang}\texttt{-}\meta{script}\texttt{-}\meta{region}.
-%\item \meta{localeid} is
-%\meta{ISO~639-3}\texttt{-}\meta{script}\texttt{-}\meta{region}.
-%\item \meta{localeid} is
-%\meta{ISO~639-3}\texttt{-}\meta{sublang}\texttt{-}\meta{region} (if there's no script or if
-%the script is the default for the given language).
-%\meta{ISO~639-3}\texttt{-}\meta{region} (if there's no script or if
-%the script is the default for the given language).
-%\item \meta{localeid} is
-%\meta{ISO~639-3}\texttt{-}\meta{sublang}\texttt{-}\meta{script}.
-%\item \meta{localeid} is
-%\meta{ISO~639-3}\texttt{-}\meta{script}.
-%\item \meta{localeid} is \meta{ISO~639-3}\texttt{-}\meta{sublang}.
-%\item \meta{localeid} is just \meta{ISO~639-3}.
-%
-%\item \meta{localeid} is just \meta{region}.
-%
-%\item \meta{localeid} is
-%\meta{ISO~639-1}\texttt{-}\meta{sublang}\texttt{-}\meta{variant}
-%or \meta{ISO~639-1}\texttt{-}\meta{variant} if \meta{sublang} is missing.
-%
-%\item \meta{localeid} is
-%\meta{ISO~639-2}\texttt{-}\meta{sublang}\texttt{-}\meta{variant}
-%or \meta{ISO~639-2}\texttt{-}\meta{variant} if \meta{sublang} is missing.
-%
-%\item \meta{localeid} is
-%\meta{ISO~639-3}\texttt{-}\meta{sublang}\texttt{-}\meta{variant}
-%or \meta{ISO~639-3}\texttt{-}\meta{variant} if \meta{sublang} is missing.
-%
-%\item \meta{localeid} is just the value of \ics{CurrentTrackedLanguage}
-%(the root language label).
-%\end{enumerate}
-%
-%For example (pre v1.3):
-%\begin{verbatim}
-%\AnyTrackedLanguages
-%{%
-% \ForEachTrackedDialect{\ThisDialect}%
-% {% try to load the language file for this dialect
-% \IfTrackedLanguageFileExists{\ThisDialect}%
-% {mypackage-}% file prefix
-% {.ldf}% file suffix
-% {\input mypackage-\CurrentTrackedTag.ldf}% file found
-% {% file not found
-% \PackageWarning{mypackage}{No support for language
-% `\ThisDialect'}%
-% }%
-% }%
-%}
-%{% no languages detected so use defaults
-%}
-%\end{verbatim}
-%With version 1.3 onwards, this can be written more concisely as:
-%\begin{verbatim}
-%\AnyTrackedLanguages
-%{%
-% \ForEachTrackedDialect{\ThisDialect}%
-% {% try to load the language file for this dialect
-% \TrackLangRequireDialect{mypackage}{\ThisDialect}%
-% }%
-%}
-%{% no languages detected so use defaults
-%}
-%\end{verbatim}
-%which additionally enables the \styfmt{tracklang} version 1.3 commands described below,
-%such as \cs{TrackLangRequireResource}.
-%
-%If, for example, \ics{ThisDialect} is \texttt{british}, then the file search will
-%be in the order:
-%\begin{enumerate}
-%\item \texttt{mypackage-en-GB.ldf} (language tag)
-%\item \texttt{mypackage-british.ldf} (dialect label)
-%
-%\item \texttt{mypackage-en-Latn-GB.ldf} (639-1 language code, script, region)
-%\item \texttt{mypackage-en-GB.ldf} (639-1 language code, region)
-%\item \texttt{mypackage-en-Latn.ldf} (639-1 language code, script)
-%\item \texttt{mypackage-en.ldf} (639-1 language code)
-%
-%\item \texttt{mypackage-eng-Latn-GB.ldf} (639-2 language code, script, region)
-%\item \texttt{mypackage-eng-GB.ldf} (639-2 language code, region)
-%\item \texttt{mypackage-eng-Latn.ldf} (639-2 language code, script)
-%\item \texttt{mypackage-eng.ldf} (639-2 language code)
-%
-%\item \texttt{mypackage-GB.ldf} (region)
-%\item \texttt{mypackage-english.ldf} (language label)
-%\end{enumerate}
-%
-%If, for example, \ics{ThisDialect} is \texttt{naustrian}, then the file search will
-%be in the order:
-%\begin{enumerate}
-%\item \texttt{mypackage-de-AT-1996.ldf} (language tag)
-%\item \texttt{mypackage-naustrian.ldf} (dialect label)
-%
-%\item \texttt{mypackage-de-Latn-AT.ldf} (639-1 language code, script, region)
-%\item \texttt{mypackage-de-AT.ldf} (639-1 language code, region)
-%\item \texttt{mypackage-de-Latn.ldf} (639-1 language code, script)
-%\item \texttt{mypackage-de.ldf} (639-1 language code)
-%
-%\item \texttt{mypackage-deu-Latn-AT.ldf} (639-2 language code, script, region)
-%\item \texttt{mypackage-deu-AT.ldf} (639-2 language code, region)
-%\item \texttt{mypackage-deu-Latn.ldf} (639-2 language code, script)
-%\item \texttt{mypackage-deu.ldf} (639-2 language code)
-%
-%\item \texttt{mypackage-AT.ldf} (region)
-%
-%\item \texttt{mypackage-de-1996.ldf} (639-1 language code, variant)
-%\item \texttt{mypackage-deu-1996.ldf} (639-2 language code, variant)
-%
-%\item \texttt{mypackage-german.ldf} (language label)
-%\end{enumerate}
-%
-%If, for example, \ics{ThisDialect} is \texttt{francais}, then the file search will
-%be in the order:
-%\begin{enumerate}
-%\item \texttt{mypackage-fr.ldf} (language tag)
-%\item \texttt{mypackage-francais.ldf} (dialect label)
-%\item \texttt{mypackage-fr-Latn.ldf} (639-1 language code, script)
-%\item \texttt{mypackage-fr.ldf} (639-1 language code)
-%\item \texttt{mypackage-fra-Latn.ldf} (639-2 language code, script)
-%\item \texttt{mypackage-fra.ldf} (639-2 language code)
-%\item \texttt{mypackage-french.ldf} (language)
-%\end{enumerate}
-%This is because the predefined \texttt{francais} option has no
-%region assigned to it. Be careful if the dialect label is the actual
-%root language. For example, if \cs{ThisDialect} is \texttt{french},
-%then the file search will be in the order:
-%\begin{enumerate}
-%\item \texttt{mypackage-fr.ldf} (language tag)
-%\item \texttt{mypackage-french.ldf} (dialect label)
-%\item \texttt{mypackage-fr-Latn.ldf} (639-1 language code, script)
-%\item \texttt{mypackage-fr.ldf} (639-1 language code)
-%\item \texttt{mypackage-fra-Latn.ldf} (639-2 language code, script)
-%\item \texttt{mypackage-fra.ldf} (639-2 language code)
-%\item \texttt{mypackage-french.ldf} (language)
-%\end{enumerate}
-%Note that the last try will always fail in this case since if the
-%file exists, it will be found on the second try.
-%
-%If the dialect label is identical to the root language label then it
-%means that all associated information is the default
-%for that language. For example, in the above case of \texttt{french},
-%the script is \texttt{Latn} and the region is unspecified. The root
-%language label can therefore be used as the fallback in the event of
-%no other match but for the specific case where the dialect is
-%identical to the root language then all unnecessary file name checks
-%can be skipped.
-%
-%If you're only providing support for the root languages (pre v1.3):
-%\begin{verbatim}
-%\AnyTrackedLanguages
-%{%
-% \ForEachTrackedLanguage{\ThisLanguage}%
-% {% try to load the language file for this root language
-% \IfTrackedLanguageFileExists{\ThisLanguage}%
-% {mypackage-}% file prefix
-% {.ldf}% file suffix
-% {\input mypackage-\CurrentTrackedTag.ldf}% file found
-% {% file not found
-% \PackageWarning{mypackage}{No support for language
-% `\ThisLanguage'}%
-% }%
-% }%
-%}
-%{% no languages detected so use defaults
-%}
-%\end{verbatim}
-%With version 1.3 onwards, this can be written more concisely as:
-%\begin{verbatim}
-%\AnyTrackedLanguages
-%{%
-% \ForEachTrackedLanguage{\ThisLanguage}%
-% {% try to load the language file for this root language
-% \TrackLangRequireDialect{mypackage}{\ThisLanguage}%
-% }%
-%}
-%{% no languages detected so use defaults
-%}
-%\end{verbatim}
-%which additionally enables the commands described below.
-%Note that in this case, if more than one dialect for the same
-%language has been tracked, only the hooks for the last dialect for
-%that language will be adjusted, so it's usually best to iterate over
-%the dialects.
-%
-%The following \cs{TrackLang\ldots Resource\ldots} commands may
-%only be used in resource files that are loaded using
-%\ics{TrackLangRequireDialect}. An error will occur if the file is
-%input through some other method.
-%
-%Within the resource file
-%\meta{pkgname}\texttt{-}\meta{localeid}\texttt{.ldf},
-%you can identify the file using (new to version 1.3):
-%\begin{definition}[\DescribeMacro\TrackLangProvidesResource]
-%\cs{TrackLangProvidesResource}\marg{tag}\oarg{version info}
-%\end{definition}
-%
-%If \cs{ProvidesFile} is defined (through the \LaTeX\ kernel) this is
-%used, otherwise a simplified generic alternative is used that's
-%suitable for other \TeX\ formats.
-%
-%The resource file can load another resource file
-%\meta{pkgname}\texttt{-}\meta{localeid2}\texttt{.ldf},
-%using (new to version 1.3):
-%\begin{definition}[\DescribeMacro\TrackLangRequireResource]
-%\cs{TrackLangRequireResource}\marg{localeid2}
-%\end{definition}
-%For example, the dialect file \texttt{foo-en-GB.ldf} might need to
-%load the root language resource file \texttt{foo-english.ldf}:
-%\begin{verbatim}
-%\TrackLangProvidesResource{en-GB}
-%\TrackLangRequireResource{english}
-%\end{verbatim}
-%If \texttt{foo-english.ldf} is also identified with
-%\cs{TrackLangProvidesResource}, this will ensure that it's only
-%loaded once.
-%
-%If you require the resource file and want to perform
-%\meta{code1} if it's loaded at this point or \meta{code2} if it's
-%already been loaded then you can use (new to version 1.3):
-%\begin{definition}[\DescribeMacro\TrackLangRequireResourceOrDo]
-%\cs{TrackLangRequireResourceOrDo}\marg{localeid2}\marg{code1}\marg{code2}
-%\end{definition}
-%
-%If you want to load a resource file if it exists (without an
-%error if it doesn't exist), then you can use
-%\begin{definition}[\DescribeMacro\TrackLangRequestResource]
-%\cs{TrackLangRequestResource}\marg{localeid2}\marg{not found code}
-%\end{definition}
-%If the file doesn't exist, \meta{not found code} is done.
-%
-%\begin{important}
-%Note that these \cs{\ldots}\texttt{Resource} commands are only
-%permitted within the resource files. They are internally enabled
-%through \cs{TrackLangRequireDialect}.
-%\end{important}
-%
-%The above restriction on the resource files loaded through
-%\cs{TrackLangRequireDialect}, and the fact that it internally uses
-%\cs{IfTrackedLanguageFileExists}, means that commands like
-%\cs{CurrentTrackedLanguage} or \cs{CurrentTrackedDialect} may be
-%used in those files. This means that the name of the captions hook
-%can be obtained through them. (Remember that the file
-%\texttt{foo-en-GB.ldf} might have been loaded with, say, the
-%\texttt{british} dialect or with the synonymous \texttt{UKenglish}
-%dialect or with a dialect label that doesn't have a corresponding
-%caption hook, such as \texttt{enGBLatn}.)
-%
-%The \sty{polyglossia} package has caption hooks in the form
-%\cs{captions\meta{language}} whereas \sty{babel} has captions hooks
-%in the form \cs{captions\meta{dialect}}. This leads to a rather
-%cumbersome set of conditionals:
-%\begin{verbatim}
-%\ifcsundef{captions\CurrentTrackedLanguage}
-%{%
-% \ifcsundef{captions\CurrentTrackedDialect}%
-% {}%
-% {%
-% \csgappto{captions\CurrentTrackedDialect}{%
-% % code to append to hook
-% }%
-% }%
-%}%
-%{%
-% \csgappto{captions\CurrentTrackedLanguage}{%
-% % code to append to hook
-% }%
-%}
-%% do code now to initialise
-%\end{verbatim}
-%Note that the above has been simplified through the use of
-%\sty{etoolbox} commands, which isn't suitable for generic use.
-%It also doesn't query the mapping from \styfmt{tracklang}'s dialect
-%label to the closest matching \sty{babel} dialect label.
-%
-%Instead (new to version 1.3), \styfmt{tracklang} provides a command
-%to perform this set of conditionals using generic code:
-%\begin{definition}[\DescribeMacro\TrackLangAddToHook]
-%\cs{TrackLangAddToHook}\marg{code}\marg{type}
-%\end{definition}
-%where \meta{code} is the code to append to the \meta{type} hook.
-%This always performs \meta{code} after testing for the hook in case
-%the hook is undefined or has already been called (for example, \sty{ngerman} uses
-%\cs{captionsngerman} when the package is loaded, not at the start of
-%the document).
-%
-%Note that this command is enabled through
-%\cs{TrackLangRequireDialect} so should only be used inside resource
-%files.
-%
-%Since \texttt{captions} is a commonly used hook type, there's
-%a~shortcut command provided:
-%\begin{definition}[\DescribeMacro\TrackLangAddToCaptions]
-%\cs{TrackLangAddToCaptions}\marg{code}
-%\end{definition}
-%This is equivalent to
-%\cs{TrackLangAddToHook}\marg{code}\verb|{captions}|.
-%
-%There may be some hooks, such as \cs{date}\meta{label}, that need
-%redefining rather than appending to. As from v1.4, there's an
-%analogous command:
-%\begin{definition}[\DescribeMacro\TrackLangRedefHook]
-%\cs{TrackLangRedefHook}\marg{code}\marg{type}
-%\end{definition}
-%which will redefined the hook to do \meta{code}.
-%
-%Note that no expansion is performed on \meta{code} when appending or
-%redefining a hook.
-%
-%\section{Examples}
-%\label{sec:examples}
-%
-%The examples in this section illustrate the above commands.
-%
-%\subsection{animals.sty}
-%\label{sec:animals}
-%
-%This example is for a trivial package called \sty{animals.sty}
-%that defines three textual commands: \cs{catname}, \cs{dogname}
-%and \cs{ladybirdname}. The default values are: \qt{cat}, \qt{dog} and
-%\qt{bishy-barney-bee}.\footnote{Thass Broad Norfolk, my bewties
-%\texttt{:-P}}
-%
-%The supported languages are defined in files
-%with the prefix \texttt{animals-} and the suffix \texttt{.ldf}.
-%
-%Here's the code for \texttt{animals.sty}:
-%\begin{verbatim}
-% \NeedsTeXFormat{LaTeX2e}
-% \ProvidesPackage{animals}
-%
-% \RequirePackage{tracklang}[2019/11/30] %v1.4
-%
-% % Any undeclared options are language settings:
-%
-% \DeclareOption*{%
-% \TrackIfKnownLanguage{\CurrentOption}%
-% {\PackageInfo{animals}{Tracking language `\CurrentOption'}}% successful
-% {% failed
-% \PackageError{animals}%
-% {Unknown language specification `\CurrentOption'}%
-% {You need to supply either a known dialect label or a valid language tag}%
-% }%
-% }
-%
-% \ProcessOptions
-%
-% % Default definitions
-% \newcommand\catname{cat}
-% \newcommand\dogname{dog}
-% \newcommand\ladybirdname{bishy-barney-bee}
-%
-% \AnyTrackedLanguages
-% {%
-% \ForEachTrackedDialect{\this@dialect}{%
-% \TrackLangRequireDialect{animals}{\this@dialect}%
-% }%
-% }
-% {% no tracked languages, default already set up
-% }
-%
-% \endinput
-%\end{verbatim}
-%Here's a Plain \TeX\ version that picks up the language from the
-%locale environment variable:
-%\begin{verbatim}
-% \input tracklang
-%
-% \TrackLangFromEnv
-%
-% % Default definitions
-% \def\catname{cat}
-% \def\dogname{dog}
-% \def\ladybirdname{bishy-barney-bee}
-%
-% \AnyTrackedLanguages
-% {%
-% \ForEachTrackedDialect{\thisdialect}{%
-% \TrackLangRequireDialect{animals}{\thisdialect}%
-% }%
-% }
-% {% no tracked languages, default already set up
-% }
-%\end{verbatim}
-%In the event that a user or supplementary package for some
-%reason wants to load a resource
-%file for a language that hasn't been tracked, it might be worth
-%providing a command for this purpose:
-%\begin{verbatim}
-%\newcommand*{\RequireAnimalsDialect}[1]{%
-% \TrackLangRequireDialect{animals}{#1}%
-%}
-%\end{verbatim}
-%The loop can then be changed to:
-%\begin{verbatim}
-% \ForEachTrackedDialect{\this@dialect}{%
-% \RequireAnimalsDialect\this@dialect
-% }%
-%\end{verbatim}
-%
-%The \texttt{animals-english.ldf} file valid for both the Plain \TeX\
-%and \LaTeX\ formats contains:
-%\begin{verbatim}
-%\TrackLangProvidesResource{english}
-%
-%\def\englishanimals{%
-% \def\catname{cat}%
-% \def\dogname{dog}%
-% \def\ladybirdname{bishy-barney-bee}%
-%}
-%
-%\TrackLangAddToCaptions{\englishanimals}
-%\end{verbatim}
-%The \texttt{animals-en-GB.ldf} file contains:
-%\begin{verbatim}
-%\TrackLangProvidesResource{en-GB}
-%\TrackLangRequireResource{english}
-%
-%\def\enGBanimals{%
-% \englishanimals
-% \def\ladybirdname{ladybird}%
-%}
-%\TrackLangAddToCaptions{\enGBanimals}
-%\end{verbatim}
-%The \texttt{animals-en-US.ldf} file contains:
-%\begin{verbatim}
-%\TrackLangProvidesResource{en-US}
-%\TrackLangRequireResource{english}
-%
-%\def\enUSanimals{%
-% \englishanimals
-% \def\ladybirdname{ladybug}%
-%}
-%\TrackLangAddToCaptions{\enUSanimals}
-%\end{verbatim}
-%Here's a German version in the file \texttt{animals-german.ldf}:
-%\begin{verbatim}
-%\TrackLangProvidesResource{german}
-%
-%\def\germananimals{%
-% \def\catname{Katze}%
-% \def\dogname{Hund}%
-% \def\ladybirdname{Marienk\"afer}%
-%}
-%
-%\TrackLangAddToCaptions{\germananimals}
-%\end{verbatim}
-%
-%This means that if \sty{babel} or \sty{polyglossia} are loaded, the
-%redefinitions are automatically performed whenever the language is
-%changed, but if there's no caption mechanism the user can switch
-%the fixed names using the \cs{\ldots animals} commands.
-%
-%Here's an example \LaTeX\ document that doesn't have any caption
-%hooks:
-%\begin{verbatim}
-%\documentclass[english,german,a4paper]{article}
-%
-%\usepackage{animals}
-%
-%\begin{document}
-%\englishanimals
-%
-%\catname.
-%\dogname.
-%\ladybirdname.
-%
-%\germananimals
-%
-%\catname.
-%\dogname.
-%\ladybirdname.
-%\end{document}
-%\end{verbatim}
-%Here's a \sty{babel} example document:
-%\begin{verbatim}
-%\documentclass[american,german,british,a4paper]{article}
+% \title{Documented Code For tracklang v1.6}
+% \author{Nicola L.C. Talbot\\[10pt]
+%Dickimaw Books\\
+%\url{http://www.dickimaw-books.com/}}
%
-%\usepackage{babel}
-%\usepackage{animals}
-%
-%\begin{document}
-%\selectlanguage{american}
-%
-%\catname.
-%\dogname.
-%\ladybirdname.
-%
-%\selectlanguage{german}
-%
-%\catname.
-%\dogname.
-%\ladybirdname.
-%
-%\selectlanguage{british}
-%
-%\catname.
-%\dogname.
-%\ladybirdname.
-%
-%\end{document}
-%\end{verbatim}
-%
-%There is some redundancy with the above resource files. Consider the
-%\sty{babel} example above. The \texttt{american} dialect is the
-%first option, so in that case \texttt{animals-en-US.ldf} is loaded
-%followed by \texttt{animals-english.ldf}. This means that the
-%\cs{captionsamerican} hook now includes
-%\begin{verbatim}
-%\englishanimals
-%\enUSanimals
-%\end{verbatim}
-%Since \cs{enUSanimals} includes \cs{englishanimals}, there is
-%redundant code. However, when the \texttt{british} dialect is
-%processed, this loads the file \texttt{animals-en-GB.ldf} but not
-%the file \texttt{animals-english.ldf} (since it's already been loaded). This
-%means that \cs{captionsbritish} contains \cs{enGBanimals} but not
-%\cs{englishanimals}.
-%
-%If this redundancy is an issue (for example, there are so many
-%redefinitions needed that it significantly slows the document build
-%process), then it can be addressed with the following modifications.
-%The \texttt{animals-en-GB.ldf} file is now:
-%\begin{verbatim}
-%\TrackLangProvidesResource{en-GB}
-%
-%\def\enGBanimals{%
-% \englishanimals
-% \def\ladybirdname{ladybird}%
-%}
-%
-%\TrackLangRequireResourceOrDo{english}%
-%{
-% \TrackLangAddToCaptions{%
-% \def\ladybirdname{ladybird}%
-% }%
-%}
-%{
-% \TrackLangAddToCaptions{\enGBanimals}
-%}
-%\end{verbatim}
-%The \texttt{animals-en-US.ldf} file is now:
-%\begin{verbatim}
-%\TrackLangProvidesResource{en-US}
-%
-%\providecommand*{\enUSanimals}{%
-% \englishanimals
-% \renewcommand*{\ladybirdname}{ladybug}%
-%}
-%
-%\TrackLangRequireResourceOrDo{english}
-%{
-% \TrackLangAddToCaptions{%
-% \renewcommand*{\ladybirdname}{ladybird}%
-% }%
-%}
-%{
-% \TrackLangAddToCaptions{\enUSanimals}{captions}
-%}
-%\end{verbatim}
-%This means that the document that has the dialects listed in the
-%order \texttt{american}, \texttt{british} now has
-%\begin{verbatim}
-%\englishanimals
-%\def\ladybirdname{ladybird}
-%\end{verbatim}
-%in the \cs{captionsbritish} hook and just \cs{enUSanimals} in the
-%\cs{captionsamerican} hook, which has removed most of the redundancy.
-%
-%Note that \sty{polyglossia} has a \cs{captionsenglish} hook but not
-%\cs{captionsamerican} or \cs{captionsbritish}, so this code doesn't
-%allow for switching between variants of the same language with
-%\sty{polyglossia}.
-%
-%\subsection{regions.sty}
-%\label{sec:regions}
-%
-%Earlier, I~mentioned the search order for
-%\ics{IfTrackedLanguageFileExists} where if, for example, the dialect
-%is \texttt{british}, the file search (v1.4+) will be:
-%\begin{enumerate}
-%\item \texttt{mypackage-british.ldf}
-%\item \texttt{mypackage-en-GB.ldf}
-%\item \texttt{mypackage-en.ldf}
-%\item \texttt{mypackage-eng-GB.ldf}
-%\item \texttt{mypackage-eng.ldf}
-%\item \texttt{mypackage-GB.ldf}
-%\item \texttt{mypackage-english.ldf}
-%\end{enumerate}
-%You may have wondered why
-%\texttt{mypackage-GB.ldf} is included in the search given that some
-%countries have multiple official languages, which means that the country code on its
-%own may not indicate the language.
-%
-%The reason for including just the country code as the \meta{localeid} in the
-%file search is to allow for region rather than language dependent
-%settings. For example, suppose I~want to write a package that needs
-%to know whether to use imperial or metric measurements in the
-%document, but I also want to provide multilingual support. The
-%language alone won't tell me whether to use imperial or metric (for
-%example, the US uses imperial and the UK uses metric for most
-%product attributes). I could provide \texttt{.ldf} files for every
-%language and region combination, but this would result in a lot
-%redundancy.
-%
-%\cs{TrackLangRequireDialect} has an optional argument for adjusting
-%the way the resource files are loaded. Suppose I have
-%\texttt{regions-}\meta{localeid}\texttt{.ldf} resource files, then
-%\begin{verbatim}
-%\TrackLangRequireDialect{regions}{\this@dialect}
-%\end{verbatim}
-%loads the resource file for the dialect given by \cs{this@dialect}
-%using
-%\begin{verbatim}
-%\TrackLangRequireResource{\CurrentTrackedTag}
-%\end{verbatim}
-%I can use the optional argument to also load the resource file for the
-%root language as well:
-%\begin{verbatim}
-%\newcommand*{\RequireRegionsDialect}[1]{%
-% \TrackLangRequireDialect
-% [\TrackLangRequireResource{\CurrentTrackedTag}%
-% \TrackLangRequireResource{\CurrentTrackedLanguage}%
-% ]%
-% {regions}{#1}%
-%}
-%\end{verbatim}
-%Now the dialect \texttt{british} can load both
-%\texttt{regions-GB.ldf} and \texttt{regions-english.ldf}.
-%
-%The example package (\texttt{regions.sty}) below illustrates this.
-%\begin{verbatim}
-%\NeedsTeXFormat{LaTeX2e}
-%\ProvidesPackage{regions}
-%
-%\RequirePackage{tracklang}[2016/10/07]
-%
-%\DeclareOption*{\TrackLanguageTag{\CurrentOption}}
-%\ProcessOptions
-%
-%\newcommand*{\weightunit}{kg}
-%\newcommand*{\lengthunit}{mm}
-%\newcommand*{\currencyunit}{EUR}
-%
-%\newcommand*{\unitname}{units}
-%
-%\newcommand*{\RequireRegionsDialect}[1]{%
-% \TrackLangRequireDialect
-% [\TrackLangRequireResource{\CurrentTrackedTag}%
-% \TrackLangRequireResource{\CurrentTrackedLanguage}%
-% ]%
-% {regions}{#1}%
-%}
-%
-%\AnyTrackedLanguages
-%{%
-% \ForEachTrackedDialect{\this@dialect}{%
-% \RequireRegionsDialect\this@dialect
-% }%
-%}
-%{% no tracked languages, default already set up
-%}
-%
-%\endinput
-%\end{verbatim}
-%There are separate \texttt{.ldf} files for region and language.
-%First are the regions.
-%
-%\begin{itemize}
-%\item \texttt{regions-BE.ldf} (Belgium):
-%\begin{verbatim}
-%\TrackLangProvidesResource{BE}
-%
-%\providecommand*{\BEunits}{%
-% \renewcommand*{\weightunit}{kg}%
-% \renewcommand*{\lengthunit}{mm}%
-% \renewcommand*{\currencyunit}{EUR}%
-%}
-%
-%\TrackLangAddToCaptions{\BEunits}
-%\end{verbatim}
-%
-%\item \texttt{regions-CA.ldf} (Canada):
-%\begin{verbatim}
-%\TrackLangProvidesResource{CA}
-%
-%\providecommand*{\CAunits}{%
-% \renewcommand*{\weightunit}{kg}%
-% \renewcommand*{\lengthunit}{mm}%
-% \renewcommand*{\currencyunit}{CAD}%
-%}
-%
-%\TrackLangAddToCaptions{\CAunits}
-%\end{verbatim}
-%
-%\item \texttt{regions-GB.ldf} (Great Britain):
-%\begin{verbatim}
-%\TrackLangProvidesResource{GB}
-%
-%\providecommand*{\GBunits}{%
-% \renewcommand*{\weightunit}{kg}%
-% \renewcommand*{\lengthunit}{mm}%
-% \renewcommand*{\currencyunit}{GBP}%
-%}
-%
-%\TrackLangAddToCaptions{\GBunits}
-%\end{verbatim}
-%
-%\item \texttt{regions-US.ldf} (USA):
-%\begin{verbatim}
-%\TrackLangProvidesResource{US}
-%
-%\providecommand*{\USunits}{%
-% \renewcommand*{\weightunit}{lb}%
-% \renewcommand*{\lengthunit}{in}%
-% \renewcommand*{\currencyunit}{USD}%
-%}
-%
-%\TrackLangAddToCaptions{\USunits}
-%\end{verbatim}
-%\end{itemize}
-%Now the language files:
+% \date{2022-10-29}
+% \maketitle
%
-%\begin{itemize}
-%\item \texttt{regions-dutch.ldf}:
-%\begin{verbatim}
-%\TrackLangProvidesResource{dutch}
-%
-%\providecommand*{\dutchnames}{%
-% \renewcommand*{\unitname}{meeteenheden}%
-%}
-%
-%\TrackLangAddToCaptions{\dutchnames}
-%\end{verbatim}
-%
-%\item \texttt{regions-english.ldf}:
-%\begin{verbatim}
-%\TrackLangProvidesResource{english}
-%
-%\providecommand*{\englishnames}{%
-% \renewcommand*{\unitname}{units}%
-%}
-%
-%\TrackLangAddToCaptions{\englishnames}
-%\end{verbatim}
-%
-%\item \texttt{regions-french.ldf}:
-%\begin{verbatim}
-%\TrackLangProvidesResource{french}
-%
-%\providecommand*{\frenchnames}{%
-% \renewcommand*{\unitname}{unit\'es}%
-%}
-%
-%\TrackLangAddToCaptions{\frenchnames}
-%\end{verbatim}
-%
-%\item \texttt{regions-german.ldf}:
-%\begin{verbatim}
-%\TrackLangProvidesResource{french}
-%
-%\providecommand*{\germannames}{%
-% \renewcommand*{\unitname}{Ma\ss einheiten}%
-%}
-%
-%\TrackLangAddToCaptions{\germannames}
-%\end{verbatim}
-%\end{itemize}
-%
-%Here's an example document that uses this package:
-%\begin{verbatim}
-%\documentclass[canadien]{article}
-%
-%\usepackage{regions}
-%
-%\begin{document}
-%
-%\unitname: \weightunit, \lengthunit, \currencyunit.
-%
-%\end{document}
-%\end{verbatim}
-%
-%This works because the \meta{localeid} search looks for the
-%country code before the root language label. However, this will fail if
-%the dialect label is the same as a root language label that has an
-%associated territory, marked with \fnregion\ in
-%\tableref{tab:rootlangopts}, as then it will be picked up before the
-%country code.
-%
-%In the above example,
-%\texttt{regions-CA.ldf} is matched rather than
-%\texttt{regions-french.ldf}, so \texttt{regions-CA.ldf} is loaded by
-%\begin{verbatim}
-%\TrackLangRequireResource{\CurrentTrackedTag}
-%\end{verbatim}
-%After this, the language file \texttt{regions-french.ldf} is then loaded:
-%\begin{verbatim}
-%\TrackLangRequireResource{\CurrentTrackedLanguage}
-%\end{verbatim}
-%
-%This assumes that there's a country code \texttt{.ldf} file
-%available. This example needs a little modification to use default
-%units in case the region is missing:
-%\begin{verbatim}
-%\NeedsTeXFormat{LaTeX2e}
-%\ProvidesPackage{regions}
-%
-%% Pass all options to tracklang:
-%\DeclareOption*{\PassOptionsToPackage{\CurrentOption}{tracklang}}
-%\ProcessOptions
-%
-%\RequirePackage{tracklang}
-%
-%\newcommand*{\weightunit}{kg}
-%\newcommand*{\lengthunit}{mm}
-%\newcommand*{\currencyunit}{EUR}
-%
-%\newcommand*{\unitname}{units}
-%
-%\newcommand*{\defaultunits}{%
-% \renewcommand*{\weightunit}{kg}%
-% \renewcommand*{\lengthunit}{mm}%
-% \renewcommand*{\currencyunit}{EUR}%
-%}
-%
-%\newcommand*{\RequireRegionsDialect}[1]{%
-% \TrackLangRequireDialect
-% [\TrackLangRequireResource{\CurrentTrackedTag}%
-% \ifx\CurrentTrackedTag\CurrentTrackedLanguage
-% \TrackLangAddToCaptions{\defaultunits}%
-% \else
-% \TrackLangRequireResource{\CurrentTrackedLanguage}%
-% \fi
-% ]%
-% {regions}{#1}%
-%}
-%
-%\AnyTrackedLanguages
-%{%
-% \ForEachTrackedDialect{\this@dialect}{%
-% \RequireRegionsDialect\this@dialect
-% }%
-%}
-%{% no tracked languages, default already set up
-%}
-%
-%\endinput
-%\end{verbatim}
-%Note that we still have a problem for dialect labels that are
-%identical to root language labels with an associated territory (such
-%as \pkgopt{manx}). This case can be checked with the following
-%adjustment:
-%\begin{verbatim}
-%\newcommand*{\RequireRegionsDialect}[1]{%
-% \TrackLangRequireDialect
-% [\TrackLangRequireResource{\CurrentTrackedTag}%
-% \ifx\CurrentTrackedTag\CurrentTrackedLanguage
-% \ifx\CurrentTrackedRegion\empty
-% \TrackLangAddToCaptions{\defaultunits}%
-% \else
-% \TrackLangRequireResource{\CurrentTrackedRegion}%
-% \fi
-% \else
-% \TrackLangRequireResource{\CurrentTrackedLanguage}%
-% \fi
-% ]%
-% {regions}{#1}%
-%}
-%\end{verbatim}
-%In the case where both the dialect and root language label are
-%\texttt{manx} with the resource files \texttt{regions-manx.ldf}
-%and \texttt{regions-IM.ldf}, then \cs{CurrentTrackedTag} will be
-%\texttt{manx} (the dialect label) so \texttt{regions-manx.ldf} will
-%be loaded with:
-%\begin{verbatim}
-%\TrackLangRequireResource{\CurrentTrackedTag}
-%\end{verbatim}
-%In this case \cs{CurrentTrackedRegion} is \texttt{IM} (that is, it's
-%not empty) so then \texttt{regions-IM.ldf} will be loaded with:
-%\begin{verbatim}
-%\TrackLangRequireResource{\CurrentTrackedRegion}
-%\end{verbatim}
-%
-%Here's another document that sets up dialects with
-%\styfmt{tracklang} labels that aren't recognised by \sty{babel}.
-%This means that there's no corresponding \cs{captions\ldots} hook
-%for either the dialect label or the root language label,
-%so mappings need to be defined from the \styfmt{tracklang} dialect
-%label to the matching \sty{babel} dialect label.
-%
-%\begin{verbatim}
-%\documentclass{article}
-%
-%\usepackage{tracklang}
-%
-%\TrackLanguageTag{de-US-1996}
-%\SetTrackedDialectLabelMap{\TrackLangLastTrackedDialect}{ngerman}
-%
-%\TrackLanguageTag{en-MT}
-%\SetTrackedDialectLabelMap{\TrackLangLastTrackedDialect}{UKenglish}
-%
-%\usepackage[main=ngerman,UKenglish]{babel}
-%\usepackage{regions}
-%
-%\begin{document}
-%\selectlanguage{ngerman}
-%
-%\unitname: \weightunit, \lengthunit, \currencyunit.
-%
-%\selectlanguage{UKenglish}
-%
-%\unitname: \weightunit, \lengthunit, \currencyunit.
-%
-%\end{document}
-%\end{verbatim}
-%This produces:
-%\begin{quote}
-%Ma\ss einheiten: lb, in, USD.
-%
-%units: kg, mm, EUR.
-%\end{quote}
-%Compare this with:
-%\begin{verbatim}
-%\documentclass{article}
-%
-%\usepackage[main=ngerman,UKenglish]{babel}
-%\usepackage{regions}
-%
-%\begin{document}
-%\selectlanguage{ngerman}
-%
-%\unitname: \weightunit, \lengthunit, \currencyunit.
-%
-%\selectlanguage{UKenglish}
-%
-%\unitname: \weightunit, \lengthunit, \currencyunit.
-%
-%\end{document}
-%\end{verbatim}
-%which produces:
-%\begin{quote}
-%Ma\ss einheiten: kg, mm, EUR.
-%
-%units: kg, mm, GBP.
-%\end{quote}
-%
-%Note that these mappings aren't needed if \sty{babel}
-%is loaded with the root language labels instead. For example:
-%\begin{verbatim}
-%\documentclass{article}
-%
-%\usepackage{tracklang}
-%
-%\TrackLanguageTag{de-US-1996}
-%\SetTrackedDialectLabelMap{\TrackLangLastTrackedDialect}{ngerman}
-%
-%\TrackLanguageTag{en-MT}
-%
-%\usepackage[main=ngerman,english]{babel}
-%\usepackage{regions2}
-%
-%\begin{document}
-%\selectlanguage{ngerman}
-%
-%\unitname: \weightunit, \lengthunit, \currencyunit.
-%
-%\selectlanguage{english}
-%
-%\unitname: \weightunit, \lengthunit, \currencyunit.
-%
-%\end{document}
-%\end{verbatim}
-%No mapping is required for the \texttt{en-MT} locale as
-%it can pick up \cs{captionsenglish} when \cs{TrackLangAddToHook}
-%(used by \cs{TrackLangAddToCaptions})
-%queries the root language label after failing to find the
-%language hook from the dialect label.
-%
-%Some of the predefined \styfmt{tracklang} dialects come with
-%a mapping to the closest matching \sty{babel} dialect label.
-%For example, the option \pkgopt{ngermanDE} listed in
-%\tableref{tab:nonisoopts} automatically provides a mapping
-%to \texttt{ngerman}. Since a \styfmt{tracklang} dialect label
-%can only map to one \styfmt{babel} label, this can be problematic
-%for synonymous labels such as
-%\texttt{british}\slash\texttt{UKenglish} or
-%\texttt{american}\slash\texttt{USenglish}. The default mappings used
-%by \styfmt{tracklang} are shown in \tableref{tab:nonisoopts}.
-%
-%\chapter{Adding Support for Language Tracking}
-%\label{sec:langsty}
-%
-%If you are writing a package that \emph{sets up} the document languages (rather
-%than a package that provides multilingual support if the user has
-%already loaded a language package) then you can load \styfmt{tracklang}
-%and use the commands below to help other packages track your
-%provided languages. (See also:
-%\href{https://www.dickimaw-books.com/latex/tracklang/langpkg.shtml}{Integrating
-%\texttt{tracklang.tex} into Language Packages}.)
-%
-%The \styfmt{tracklang} package can be loaded using
-%\begin{verbatim}
-%\input tracklang
-%\end{verbatim}
-%or (\LaTeX\ only)
-%\begin{verbatim}
-%\RequirePackage{tracklang}
-%\end{verbatim}
-%
-%When using \LaTeX, there's a difference between the two.
-%The first case prevents \styfmt{tracklang} from picking up
-%the document class options but skips the check for known
-%language packages. This check is redundant since your package is
-%the language package, so you need to decide is whether or
-%not to allow the user to set up the localisation information
-%through the document class options.
-%
-%If you prefer \cs{RequirePackage} over \cs{input} but you want to make
-%\texttt{tracklang.sty} skip the check for known
-%language packages then (as from v1.3.8) define the pre-language
-%package check hook as follows:
-%\begin{verbatim}
-%\providecommand\@tracklang@prelangpkgcheck@hook{\endinput}
-%\RequirePackage{tracklang}[2019/10/06]
-%\end{verbatim}
-%This will still pick up languages supplied through the
-%document class options.
-%
-%If you just use \cs{input}, there's a test at the start of
-%\texttt{tracklang.tex} to determine if it's already been loaded, so
-%you don't need to worry if the document has already loaded it.
-%
-%To integrate \sty{tracklang} into your language package, you need to consider the following
-%steps:
-%\begin{enumerate}
-%\item Does \sty{tracklang} define your supported ISO~15924 language
-%scripts in the \texttt{tracklang-scripts.tex} file?
-%
-%If yes, then skip this step. Otherwise create a file with the
-%relevant \ics{TrackLangScriptMap} command for each unknown script and identify
-%this new file with \ics{TrackLangAddExtraScriptFile} (see
-%\sectionref{sec:newscripts}). This usually
-%won't be necessary unless you have a custom script or a child script
-%(a script that's a sub-category of another script).
-%
-%\item Does \sty{tracklang} recognise the root language?
-%
-%If yes, then skip this step.
-%
-%If your package is setting up a language that \sty{tracklang}
-%doesn't recognise then you will need to define the root language
-%using \cs{TrackLangNewLanguage} (see \sectionref{sec:newlanguages}).
-%
-%This usually won't be the case as \sty{tracklang} should support all
-%languages that have an official ISO~639-1 alpha-2 code.
-%
-%If you simply have a different label from \sty{tracklang} identifying the root language,
-%then you can just set up your label as a dialect using
-%\cs{TrackLangProvidePredefinedDialect} (see \sectionref{sec:predefinedlabels}).
-%
-%\item Does \sty{tracklang} define the relevant ISO~3166 region codes
-%in the \texttt{tracklang-region-codes.tex} file?
-%
-%If yes, then skip this step. Otherwise create a file with the
-%relevant \ics{TrackLangRegionMap} command for each new region and
-%identify this new file with \ics{TrackLangAddExtraRegionFile} (see
-%\sectionref{sec:newregions}). This usually won't be necessary as
-%\sty{tracklang} should recognise all countries that have an alpha-2
-%region code, but you may require it if you need a broader region,
-%such as EU.
-%
-%\item Do you want to define some convenient dialect labels that can
-%be used with \ics{TrackPredefinedDialect}?
-%
-%If no, then skip this step. Otherwise you can use
-%\ics{TrackLangProvidePredefinedLanguage} for root languages
-%and \ics{TrackLangProvidePredefinedDialect} for dialects with
-%additional information, such as a region, sub-language or script
-%(see \sectionref{sec:predefinedlabels}).
-%
-%\item In your language initialisation code, add the \sty{tracklang}
-%code to track the particular dialect (for example, use
-%\cs{TrackPredefinedDialect} for recognised dialect labels or
-%use the \cs{AddTracked}\ldots\ set of commands). See
-%\sectionref{sec:initnewlang}.
-%
-%\item In your language selection code (such as \cs{selectlanguage}), add
-%\cs{SetCurrentTrackedDialect}\marg{label} to allow the document
-%author to easily query the current localisation settings (such as
-%the region). See \sectionref{sec:selectlanguage}.
-%\end{enumerate}
-%
-%\section{Initialising a New Language or Dialect}
-%\label{sec:initnewlang}
-%
-%When the user requests a particular dialect through your language
-%package, you can notify \styfmt{tracklang} of this choice using
-%\begin{definition}
-%\cs{TrackPredefinedDialect}\marg{dialect}
-%\end{definition}
-%provided the dialect label is recognised by \styfmt{tracklang} (all those
-%listed in \refoptstables).
-%
-%If there's no matching dialect predefined by \styfmt{tracklang}, you
-%can just use \cs{TrackLocale} or \cs{TrackLanguageTag}
-%(described in \sectionref{sec:generic})
-%with the appropriate ISO codes \emph{if you're not providing caption
-%hooks}.
-%
-%If you are providing a captions hook mechanism
-%in the form \ics{captions\meta{dialect}}, then if \meta{dialect}
-%doesn't match the corresponding \styfmt{tracklang} dialect label,
-%you can provide a mapping using
-%\cs{SetTrackedDialectLabelMap}, described below.
-%
-%\section{Switching Language or Dialect}
-%\label{sec:selectlanguage}
-%
-%When the document author switches to a different language or
-%dialect, the current localisation information can be set with:
-%\begin{definition}[\DescribeMacro\SetCurrentTrackedDialect]
-%\cs{SetCurrentTrackedDialect}\marg{dialect}
-%\end{definition}
-%where \meta{dialect} may the \styfmt{tracklang} dialect label,
-%or the mapped label previously set through \cs{SetTrackedDialectLabelMap},
-%described below, or the language label (in which case the
-%last dialect to be tracked with that root language will
-%be assumed).
-%
-%This will make the following commands available which may be
-%of use to other packages:
-%\begin{itemize}
-%\item\ics{CurrentTrackedDialect} The dialect label recognised
-%by \styfmt{tracklang} (which may not be the same as \meta{dialect}).
-%
-%\item\ics{CurrentTrackedLanguage}
-%The root language label used by \styfmt{tracklang}.
-%\item\ics{CurrentTrackedDialectModifier} The dialect modifier.
-%\item\ics{CurrentTrackedDialectVariant} The dialect variant.
-%\item\ics{CurrentTrackedDialectScript} The dialect script.
-%Note that if \sty{tracklang-scripts} is also loaded, this allows the
-%script direction to be accessed using
-%\begin{verbatim}
-%\TrackLangScriptAlphaToDir{\CurrentTrackedDialectScript}
-%\end{verbatim}
-%See \sectionref{sec:tracklang-scripts.tex} for further details.
-%\item\ics{CurrentTrackedDialectSubLang} The dialect sub-language
-%code.
-%\item\ics{GetTrackedDialectAdditional} The dialect's additional
-%information.
-%\item\ics{CurrentTrackedIsoCode} The dialect's root language
-%ISO code. (The first found in the sequence 639-1, 639-2, 639-3.)
-%\item\ics{CurrentTrackedRegion} The dialect's ISO 3166-1 region
-%code.
-%\item\ics{CurrentTrackedLanguageTag} The dialect's language tag.
-%\end{itemize}
-%(Without this automated use of \cs{SetCurrentTrackedDialect},
-%the same information can be picked up using commands
-%like \cs{GetTrackedDialectScript}, but that's less convenient,
-%especially if \cs{languagename} needs to be converted
-%to \meta{dialect}. See the accompanying sample file
-%\texttt{sample-setlang.tex} for an example.)
-%
-%\section{Defining New Scripts}
-%\label{sec:newscripts}
-%
-%The \texttt{tracklang-scripts.tex} file isn't automatically loaded,
-%but if it is then, as from v1.4, it contains a hook at the end of
-%the file that can be used to load additional files that define
-%supplementary scripts. This entails creating a file called, say,
-%\texttt{mypackage-scripts.tex} that contains:
-%\begin{definition}[\DescribeMacro\TrackLangScriptMap]
-%\cs{TrackLangScriptMap}\marg{alpha code}\marg{numeric
-%code}\marg{name}\marg{direction}\marg{parent}
-%\end{definition}
-%The first argument \meta{alpha code} is the four-letter ISO~15924 code (such as
-%\texttt{Latn}), the second argument is the numeric code (such as
-%215), the third argument \meta{name} is the name of the script (such
-%as \texttt{Latin}), the fourth argument is the direction (such as
-%\texttt{LR} for left-to-right) and the final argument is the parent
-%script (leave blank if there's no parent). Note that this command will override any previous
-%mapping for those codes. No check is performed to determine if they
-%have already been defined.
-%
-%The supplementary file should be identified with:
-%\begin{definition}[\DescribeMacro\TrackLangAddExtraScriptFile]
-%\cs{TrackLangAddExtraScriptFile}\marg{filename}
-%\end{definition}
-%
-%\section{Defining New Regions}
-%\label{sec:newregions}
-%
-%The \texttt{tracklang-region-codes.tex} file isn't automatically loaded,
-%but if it is then, as from v1.4, it contains a hook at the end of
-%the file that can be used to load additional files that define
-%supplementary regions. This entails creating a file called, say,
-%\texttt{mypackage-regions.tex} that contains:
-%\begin{definition}[\DescribeMacro\TrackLangRegionMap]
-%\cs{TrackLangRegionMap}\marg{numeric code}\marg{alpha-2 code}\marg{alpha-3 code}
-%\end{definition}
-%where the first argument is the numeric region code (such as 826),
-%the second argument is the alpha-2 region code (such as \texttt{GB})
-%and the third argument is the alpha-3 region code (such as
-%\texttt{GBR}). Note that this command will override any previous
-%mapping for those codes. No check is performed to determine if they
-%have already been defined.
-%
-%The supplementary file should be identified with:
-%\begin{definition}[\DescribeMacro\TrackLangAddExtraRegionFile]
-%\cs{TrackLangAddExtraRegionFile}\marg{filename}
-%\end{definition}
-%
-%\section{Defining a New Language}
-%\label{sec:newlanguages}
-%
-%(New to version 1.3.)
-%If the root language isn't recognised by \styfmt{tracklang}
-%(not listed in \tableref{tab:rootlangopts}), then
-%it can be defined (but not tracked at this point) using:
-%\begin{definition}[\DescribeMacro\TrackLangNewLanguage]
-%\cs{TrackLangNewLanguage}\marg{language name}\marg{639-1
-%code}\marg{639-2 (T)}\marg{639-2 (B)}\marg{639-3}\marg{3166-1}\marg{default
-%script}
-%\end{definition}
-%where \meta{language name} is the root language name,
-%\meta{639-1 code} is the ISO 639-1 code for that language (may be
-%empty if there isn't one), \meta{639-2 (T)} is the ISO 639-2 (T)
-%code for that language (may be empty if there isn't one),
-%\meta{639-2 (B)} is the ISO 639-2 (B) code for that language (may be
-%empty if it's the same as \meta{639-2 (T)}), \meta{639-3} is the ISO
-%639-3 code for that language (empty if the same as the 639-2
-%code), \meta{3166-1} is the territory ISO code for languages that are only spoken in one
-%territory (should be empty if the language is spoken in multiple
-%territories), and \meta{default script} is the default script (empty
-%if disputed or varies according to region).
-%
-%You can then track this language using \cs{AddTrackedDialect} for
-%dialects or, if no regional variant is needed, you can instead use:
-%\begin{definition}[\DescribeMacro\AddTrackedLanguage]
-%\cs{AddTrackedLanguage}\marg{root language label}
-%\end{definition}
-%This is equivalent to \ics{AddTrackedDialect}\marg{root language
-%label}\marg{root language label}.
-%
-%
-%\section{Defining New \styfmt{tracklang} Labels}
-%\label{sec:predefinedlabels}
-%
-%A dialect label may be predefined with associated information that
-%allows that particular combination to be easily tracked with
-%\cs{TrackPredefinedDialect}. In the case of a dialect label that
-%only requires the information provided in \cs{TrackLangNewLanguage}
-%you can use:
-%\begin{definition}[\DescribeMacro\TrackLangProvidePredefinedLanguage]
-%\cs{TrackLangProvidePredefinedLanguage}\marg{label}
-%\end{definition}
-%where \meta{label} corresponds to the language label used in
-%\cs{TrackLangNewLanguage}. This allows
-%\cs{TrackPredefinedDialect}\marg{label} to not only track the root
-%language but also the associated ISO codes.
-%
-%If the dialect label doesn't match the root language label then use:
-%\begin{definition}[\DescribeMacro\TrackLangProvidePredefinedDialect]
-%\cs{TrackLangProvidePredefinedDialect}\marg{dialect}\marg{language}\marg{region}\marg{modifier}\marg{variant}\marg{map}\marg{script}
-%\end{definition}
-%where \meta{dialect} is the new \sty{tracklang} dialect label,
-%\marg{language} is the \sty{tracklang} root language label,
-%\meta{region} is the ISO~3166-1 region code (may be empty),
-%\meta{modifier} is the modifier (may be empty), \meta{variant}
-%is the variant information (may be empty), \meta{map} is your
-%package's language label that corresponds to the \sty{tracklang}
-%dialect label supplied in the first argument (may be empty if
-%identical), and \meta{script} is the ISO~15914 alpha-4 script code
-%(may be empty if it's the same as the default script for the root
-%language).
-%
-%For compatibility with pre version 1.3,
-%if the dialect isn't predefined by
-%\styfmt{tracklang}, then you can use:
-%\begin{definition}[\DescribeMacro\AddTrackedDialect]
-%\cs{AddTrackedDialect}\marg{dialect}\marg{root language label}
-%\end{definition}
-%where \meta{root language label} is the label for the dialect's root
-%language (\tableref{tab:rootlangopts}) and \meta{dialect} matches
-%the captions hook. If the dialect is already in the tracked dialect
-%list, it won't be added again. If the root language is already in
-%the tracked language list, it won't be added again. As from version
-%1.3 this additionally defines:
-%\begin{definition}[\DescribeMacro\TrackLangLastTrackedDialect]
-%\cs{TrackLangLastTrackedDialect}
-%\end{definition}
-%to \meta{dialect} for convenient reference if required.
-%Note that \cs{AddTrackedDialect} is internally used by commands like
-%\cs{TrackPredefinedDialect}, \cs{TrackLocale} and
-%\cs{TrackLanguageTag}.
-%
-%(New to version 1.3.) Many of the \styfmt{tracklang} dialect
-%labels don't have a corresponding match in various language packages. For
-%example, \styfmt{tracklang} provides \texttt{ngermanDE} but the
-%closest match in \sty{babel} is \texttt{ngerman}. This means that
-%the caption hook \cs{captionsngerman} can't be accessed
-%through
-%\begin{verbatim}
-%\csname captions\CurrentTrackedDialect\endcsname
-%\end{verbatim}
-%in the resource files. In this case, a mapping may be defined
-%between the \styfmt{tracklang} dialect label and the closest
-%matching label used by the language hooks. This is done through
-%\begin{definition}[\DescribeMacro\SetTrackedDialectLabelMap]
-%\cs{SetTrackedDialectLabelMap}\marg{from}\marg{to}
-%\end{definition}
-%where \meta{from} is the \styfmt{tracklang} label and \meta{to}
-%is the language hook label. For example:
-%\begin{verbatim}
-%\TrackLanguageTag{de-AR-1996}
-%\SetTrackedDialectLabelMap{\TrackLangLastTrackedDialect}{ngerman}
-%\end{verbatim}
-%Since \cs{TrackLanguageTag} internally uses \cs{AddTrackedDialect}
-%the dialect label created by \styfmt{tracklang} can be accessed
-%using \cs{TrackLangLastTrackedDialect}. This means that
-%\ics{TrackLangAddToCaptions} can now find the \cs{captionsngerman}
-%hook even though the \styfmt{tracklang} dialect label isn't \texttt{ngerman}.
-%
-%(New to version 1.3.)
-%If the root language label is recognised by \styfmt{tracklang}, you
-%can add the ISO codes using:
-%\begin{definition}[\DescribeMacro\AddTrackedLanguageIsoCodes]
-%\cs{AddTrackedLanguageIsoCodes}\marg{root language}
-%\end{definition}
-%
-%As from v1.3, you can also provide a modifier for a given
-%dialect using:
-%\begin{definition}[\DescribeMacro\SetTrackedDialectModifier]
-%\cs{SetTrackedDialectModifier}\marg{dialect}\marg{value}
-%\end{definition}
-%where \meta{dialect} is the dialect label and \meta{value}
-%is the modifier value. For example:
-%\begin{verbatim}
-%\AddTrackedDialect{oldgerman}{german}
-%\AddTrackedLanguageIsoCodes{german}
-%\SetTrackedDialectModifier{oldgerman}{old}
-%\end{verbatim}
-%
-%Note that no sanitization is performed on \meta{value} when the
-%modifier is set explicitly through \cs{SetTrackedDialectModifier},
-%since it's assumed that any package that specifically sets the
-%modifier in this way is using a sensible labelling system. If the
-%modifier is obtained through commands like \cs{TrackLocale}, then
-%the modifier is sanitized as the value may have been obtained from
-%the operating system and there's no guarantee that it won't contain
-%problematic characters.
-%
-%The modifier is typically obtained by parsing locale information in
-%POSIX format.
-%\begin{display}
-%\meta{language}[\_\meta{territory}][.\meta{codeset}][@\meta{modifier}]
-%\end{display}
-%whereas the variant is typically obtained by parsing the language
-%tag.
-%
-%The information provided in the commands below (such as the script)
-%are typically obtained by parsing the language tag. For example,
-%with Serbian in the Latin alphabet the modifier would be \texttt{latin}
-%whereas the script would be \texttt{Latn}:
-%\begin{verbatim}
-%\AddTrackedDialect{serbianlatin}{serbian}
-%\AddTrackedLanguageIsoCodes{serbian}
-%\SetTrackedDialectModifier{serbianlatin}{latin}
-%\SetTrackedDialectScript{serbianlatin}{Latn}
-%\end{verbatim}
-%
-%As from v1.3, you can provide a script (for example,
-%\qt{Latn} or \qt{Cyrl}) using:
-%\begin{definition}[\DescribeMacro\SetTrackedDialectScript]
-%\cs{SetTrackedDialectScript}\marg{dialect}\marg{value}
-%\end{definition}
-%where \meta{dialect} is the dialect label and \meta{value} is the
-%four letter script identifier. For example:
-%\begin{verbatim}
-%\AddTrackedDialect{serbiancyrl}{serbian}
-%\AddTrackedLanguageIsoCodes{serbian}
-%\SetTrackedDialectScript{serbiancyrl}{Cyrl}
-%\end{verbatim}
-%
-%As from v1.3, you can provide a variant for a given
-%dialect using:
-%\begin{definition}[\DescribeMacro\SetTrackedDialectVariant]
-%\cs{SetTrackedDialectVariant}\marg{dialect}\marg{value}
-%\end{definition}
-%For example:
-%\begin{verbatim}
-%\AddTrackedDialect{german1901}{german}
-%\SetTrackedDialectVariant{german1901}{1901}
-%\end{verbatim}
-%
-%As from v1.3, you can also provide a sub-language using:
-%\begin{definition}[\DescribeMacro\SetTrackedDialectSubLang]
-%\cs{SetTrackedDialectSubLang}\marg{dialect}\marg{value}
-%\end{definition}
-%where \meta{dialect} is the dialect label and \meta{value} is the
-%code. For example:
-%\begin{verbatim}
-%\AddTrackedDialect{mandarin}{chinese}
-%\AddTrackedLanguageIsoCodes{chinese}
-%\SetTrackedDialectSubLang{mandarin}{cmn}
-%\AddTrackedIsoLanguage{639-3}{cmn}{mandarin}
-%\end{verbatim}
-%
-%As from v1.3, you can also provide additional information using:
-%\begin{definition}[\DescribeMacro\SetTrackedDialectAdditional]
-%\cs{SetTrackedDialectAdditional}\marg{dialect}\marg{value}
-%\end{definition}
-%where \meta{dialect} is the dialect label and \meta{value} is the
-%additional information.
-%
-%\section{Example}
-%
-%Suppose I want to create a language package \texttt{alien.sty} that defines the
-%\texttt{martian} language with regional dialects
-%\texttt{lowermartian} and \texttt{uppermartian}. First, let's
-%suppose that \styfmt{tracklang} recognises the root language
-%\texttt{martian}:
-%\begin{verbatim}
-% \ProvidesPackage{alien}
-%
-% \input{tracklang}% v1.3
-%
-% \DeclareOption{martian}{%
-% \TrackPredefinedDialect{martian}
-% }
-% \DeclareOption{lowermartian}{%
-% \AddTrackedDialect{lowermartian}{martian}
-% \AddTrackedIsoCodes{martian}
-% \AddTrackedIsoLanguage{3166-1}{YY}{lowermartian}
-% % other attributes such as
-% % \SetTrackedDialectVariant{lowermartian}{...}
-% }
-% \DeclareOption{uppermartian}{%
-% \AddTrackedDialect{uppermartian}{martian}
-% \AddTrackedIsoCodes{martian}
-% \AddTrackedIsoLanguage{3166-1}{XX}{uppermartian}
-% % other attributes such as
-% % \SetTrackedDialectVariant{uppermartian}{...}
-% }
-%
-% \ProcessOptions
-%
-% \newcommand*{\selectlanguage}[1]{%
-% \def\languagename{#1}%
-% % other stuff
-% \SetCurrentTrackedDialect{#1}%
-% }
-%
-% \AnyTrackedLanguages
-% {
-% \ForEachTrackedDialect{\thisdialect}
-% {%
-% \TrackLangRequireDialect{alien}{\thisdialect}
-% }
-% }
-%\end{verbatim}
-%The caption commands and language set up are in the files
-%\texttt{alien-}\meta{localeid}\texttt{.ldf} as in the examples from
-%\sectionref{sec:examples}. This allows for the user having already
-%loaded \styfmt{tracklang} before \styfmt{alien} and used \cs{TrackLangFromEnv} to pick up
-%the locale from the operating system's environment variables.
-%(For example, they may have \envvar{LANG} set to \texttt{xx\_YY}.)
-%
-%The resource files may need to set the mapping between the
-%\styfmt{tracklang} dialect label and the \styfmt{alien} dialect
-%label. For example, in \texttt{alien-xx-YY.ldf}:
-%\begin{verbatim}
-%\TrackLangProvidesResource{xx-YY}
-%
-%\TrackLangRequireResource{martian}% load common elements
-%
-%\newcommand{\captionslowermartian}{%
-% \captionsmartian
-% \def\contentsname{X'flurp}% regional variation
-%}
-%
-%\SetTrackedDialectLabelMap{\CurrentTrackedDialect}{lowermartian}
-%\end{verbatim}
-%
-%Now let's consider the case where \styfmt{tracklang} doesn't know
-%about the \texttt{martian} language. In this case the user can't
-%track the dialect until the root language has been defined, so the
-%user can't use \cs{TrackLangFromEnv} before using the \styfmt{alien}
-%package.
-%
-%With \styfmt{tracklang} v1.3. The new root language can be defined
-%with a minor adjustment to the above code:
-%\begin{verbatim}
-% \ProvidesPackage{alien}
+%\tableofcontents
%
-% \input{tracklang}% needs v1.3
+%\section{Introduction}
%
-% \TrackLangIfKnownLang{martian}
-% {}% tracklang already knows about the martian language
-% {
-% % tracklang doesn't known about the martian language, so define it
-% % with ISO 639-1 (xx) and ISO 639-2 (xxx) codes:
-% \TrackLangNewLanguage{martian}{xx}{xxx}{}{}{}{Latn}
-% }
-%\end{verbatim}
-%The rest is as before.
+%This is the documented code for the \sty{tracklang} package.
+%See \texttt{tracklang-manual.pdf} for the main user guide.
%
-%Now other package writers who want to provide support
-%for the Martian dialects can easily detect which language options
-%the user requested through my package, \emph{without needing to know
-%anything about my \styfmt{alien} package}.
+%\StopEventually{\clearpage\PrintChanges \clearpage\PrintIndex}
%
-%\StopEventually{%
-% \printindex[user]
-% \PrintCodeIndex
-% \PrintChanges
-%}
%
%
-%\chapter{The Code}
+%\section{Main Package Code}
%\iffalse
% \begin{macrocode}
%<*tracklang.sty>
@@ -3583,7 +119,7 @@ and~\ref{tab:nonisoopts}}
% packages such as \styfmt{etoolbox}.
% \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{tracklang}[2020/06/30 v1.5 (NLCT) Track Languages]
+\ProvidesPackage{tracklang}[2022/10/29 v1.6 (NLCT) Track Languages]
% \end{macrocode}
%\begin{macro}{\@tracklang@declareoption}
% Set up package options.
@@ -3673,6 +209,15 @@ and~\ref{tab:nonisoopts}}
\@ifpackageloaded{polyglossia}
{%
% \end{macrocode}
+%\sty{polyglossia} now provides \cs{xpg@bcp@loaded}, which contains
+%a comma-separated list of language tags, so use that if
+%it exists.
+%\changes{1.6}{2022-10-29}{added check for \cs{xpg@bcp@loaded}}
+% \begin{macrocode}
+ \@ifundefined{xpg@bcp@loaded}%
+ {%
+% \end{macrocode}
+% Older versions:
% \sty{polyglossia} sets \cs{\meta{lang}@loaded} for each loaded
% language, so check this for all known languages. I don't know how
% to consistently check for variants. (Conditionals such as
@@ -3687,34 +232,70 @@ and~\ref{tab:nonisoopts}}
%\changes{1.3}{2016-10-07}{removed hard-coded polyglossia language list}
%\changes{1.3.5}{2018-02-21}{check for \cs{xpg@loaded}}
% \begin{macrocode}
- \@ifundefined{xpg@loaded}%
- {%
+ \@ifundefined{xpg@loaded}%
+ {%
% \end{macrocode}
%\cs{xpg@loaded} isn't defined, so iterate over known options and
%check if the language has been loaded.
% \begin{macrocode}
- \PackageInfo{tracklang}{polyglossia loaded but
- \string\xpg@loaded\space not defined. Will attempt
- to track known languages.}%
- \@for\this@language:=\@tracklang@declaredoptions\do{%
- \@ifundefined{\this@language @loaded}%
- {}%
- {\@nameuse{@tracklang@add@\this@language}}%
- }%
- }%
- {%
- \@for\this@language:=\xpg@loaded\do{%
- \@ifundefined{@tracklang@add@\this@language}%
- {%
- \PackageWarning{tracklang}%
- {Adding unknown polyglossia language `\this@language'}%
+ \PackageInfo{tracklang}{polyglossia loaded but
+ \string\xpg@loaded\space not defined. Will attempt
+ to track known languages.}%
+ \@for\this@language:=\@tracklang@declaredoptions\do{%
+ \@ifundefined{\this@language @loaded}%
+ {}%
+ {\@nameuse{@tracklang@add@\this@language}}%
+ }%
+ }%
+ {%
+ \@for\this@language:=\xpg@loaded\do{%
+ \@ifundefined{@tracklang@add@\this@language}%
+ {%
+ \PackageWarning{tracklang}%
+ {Adding unknown polyglossia language `\this@language'}%
% \end{macrocode}
%\changes{1.3.7}{2019-08-31}{corrected misspelt command}
% \begin{macrocode}
- \AddTrackedLanguage{\this@language}%
+ \AddTrackedLanguage{\this@language}%
+ }%
+ {\@nameuse{@tracklang@add@\this@language}}%
}%
- {\@nameuse{@tracklang@add@\this@language}}%
- }%
+ }%
+ }%
+ {%
+ \@for\this@language:=\xpg@bcp@loaded\do{%
+% \end{macrocode}
+%These are language tags, which is more convenient.
+% \begin{macrocode}
+ \expandafter\TrackLanguageTag{\this@language}%
+ }%
+ }%
+% \end{macrocode}
+%The \cs{xpg@bcp@loaded} list doesn't seem to include the main
+%language until the start of the document environment but
+%\cs{mainbabelname} is defined after \cs{setmainlanguage}. I'm not
+%sure if \cs{mainbabelname} was provided in the same version of
+%\sty{polyglossia} as \cs{xpg@bcp@loaded} or a different one, so
+%have a separate conditional.
+% \begin{macrocode}
+ \@ifundefined{mainbabelname}{}%
+ {%
+ \let\@org@tracklang@add@latex\@tracklang@add@latex
+ \def\@tracklang@add@latex{%
+ \PackageWarning{tracklang}%
+ {Can't detect polyglossia main language. It may
+ not have been set yet}%
+ }%
+ \@ifundefined{@tracklang@add@\mainbabelname}%
+ {%
+ \PackageWarning{tracklang}%
+ {Adding unknown polyglossia main babel name `\mainbabelname'}%
+ \expandafter\AddTrackedLanguage{\mainbabelname}%
+ }%
+ {%
+ \@nameuse{@tracklang@add@\mainbabelname}%
+ }%
+ \let\@tracklang@add@latex\@org@tracklang@add@latex
}%
}%
{%
@@ -3879,7 +460,7 @@ and~\ref{tab:nonisoopts}}
% Version info.
% \begin{macrocode}
\expandafter\def\csname ver@tracklang.tex\endcsname{%
- 2020/06/30 v1.5 (NLCT) Track Languages Generic Code}
+ 2022/10/29 v1.6 (NLCT) Track Languages Generic Code}
% \end{macrocode}
% Define a long command for determining the existence of a control
% sequence by its name. (\cs{relax} is considered undefined.)
@@ -4348,18 +929,19 @@ and~\ref{tab:nonisoopts}}
% \end{macrocode}
%\begin{macro}{\TrackLangQueryEnv}
%\changes{1.3}{2016-10-07}{new}
+%\changes{1.6}{2022-10-29}{changed \cs{x} to \cs{@tracklang@x}}
% \begin{macrocode}
\def\TrackLangQueryEnv{%
\begingroup\endlinechar=-1\relax
\everyeof{\noexpand}%
- \edef\x{\endgroup\def\noexpand\TrackLangEnv{%
- \@tracklang@input|"kpsewhich --var-value LC_ALL" }}\x
+ \edef\@tracklang@x{\endgroup\def\noexpand\TrackLangEnv{%
+ \@tracklang@input|"kpsewhich --var-value LC_ALL" }}\@tracklang@x
\@tracklang@checklocale
\ifx\TrackLangEnv\empty
\begingroup\endlinechar=-1\relax
\everyeof{\noexpand}%
- \edef\x{\endgroup\def\noexpand\TrackLangEnv{%
- \@tracklang@input|"kpsewhich --var-value LANG" }}\x
+ \edef\@tracklang@x{\endgroup\def\noexpand\TrackLangEnv{%
+ \@tracklang@input|"kpsewhich --var-value LANG" }}\@tracklang@x
% \end{macrocode}
%Not sure if a path is likely to occur with \app{kpsewhich}
%but check for it just in case.
@@ -4392,20 +974,20 @@ and~\ref{tab:nonisoopts}}
\def\TrackLangQueryOtherEnv#1{%
\begingroup\endlinechar=-1\relax
\everyeof{\noexpand}%
- \edef\x{\endgroup\def\noexpand\TrackLangEnv{%
- \@tracklang@input|"kpsewhich --var-value LC_ALL" }}\x
+ \edef\@tracklang@x{\endgroup\def\noexpand\TrackLangEnv{%
+ \@tracklang@input|"kpsewhich --var-value LC_ALL" }}\@tracklang@x
\@tracklang@checklocale
\ifx\TrackLangEnv\empty
\begingroup\endlinechar=-1\relax
\everyeof{\noexpand}%
- \edef\x{\endgroup\def\noexpand\TrackLangEnv{%
- \@tracklang@input|"kpsewhich --var-value #1" }}\x
+ \edef\@tracklang@x{\endgroup\def\noexpand\TrackLangEnv{%
+ \@tracklang@input|"kpsewhich --var-value #1" }}\@tracklang@x
\@tracklang@checklocale
\ifx\TrackLangEnv\empty
\begingroup\endlinechar=-1\relax
\everyeof{\noexpand}%
- \edef\x{\endgroup\def\noexpand\TrackLangEnv{%
- \@tracklang@input|"kpsewhich --var-value LANG"}}\x
+ \edef\@tracklang@x{\endgroup\def\noexpand\TrackLangEnv{%
+ \@tracklang@input|"kpsewhich --var-value LANG"}}\@tracklang@x
\@tracklang@checklocale
\ifx\TrackLangEnv\empty
% \end{macrocode}
@@ -5231,6 +1813,7 @@ and~\ref{tab:nonisoopts}}
%\end{macro}
%
%\begin{macro}{\ThreeLetterExtIsoLanguageCode}
+%\changes{1.3}{2016-10-07}{new}
% \begin{macrocode}
\def\ThreeLetterExtIsoLanguageCode{639-3}
% \end{macrocode}
@@ -5688,7 +2271,7 @@ and~\ref{tab:nonisoopts}}
%\begin{definition}
%\cs{AddTrackedLanguageIsoCodes}\marg{language}
%\end{definition}
-%Adds the ISO 639-1, 639-2 and 639-3 ISO codes for the given language,
+%Adds the 639-1, 639-2 and 639-3 ISO codes for the given language,
%which must have previously been declared using
%\cs{TrackLangNewLanguage}.
% \begin{macrocode}
@@ -12437,7 +9020,7 @@ and~\ref{tab:nonisoopts}}
% Version info.
% \begin{macrocode}
\expandafter\def\csname ver@tracklang-region-codes.tex\endcsname{%
- 2020/06/30 v1.5 (NLCT) Track Languages Regions}%
+ 2022/10/29 v1.6 (NLCT) Track Languages Regions}%
% \end{macrocode}
%
%\begin{macro}{\TrackLangRegionMap}
@@ -12830,7 +9413,7 @@ and~\ref{tab:nonisoopts}}
%\changes{1.3}{2016-10-07}{added tracklang-scripts.sty}
% \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{tracklang-scripts}[2020/06/30 v1.5 (NLCT) Track
+\ProvidesPackage{tracklang-scripts}[2022/10/29 v1.6 (NLCT) Track
Language Scripts (LaTeX)]
\RequirePackage{tracklang}
\input{tracklang-scripts}
@@ -12872,10 +9455,10 @@ Language Scripts (LaTeX)]
% Version info.
% \begin{macrocode}
\expandafter\def\csname ver@tracklang-scripts.tex\endcsname{%
- 2020/06/30 v1.5 (NLCT) Track Languages Scripts (Generic)}%
+ 2022/10/29 v1.6 (NLCT) Track Languages Scripts (Generic)}%
% \end{macrocode}
%
-%\begin{macro}{\TrackLangScriptsMap}
+%\begin{macro}{\TrackLangScriptMap}
%\changes{1.3}{2016-10-07}{new}
%\begin{definition}
%\cs{TrackLangScriptMap}\marg{letter
@@ -13193,7 +9776,6 @@ Language Scripts (LaTeX)]
\TrackLangScriptMap{Tale}{353}{Tai Le}{LR}{}%
\TrackLangScriptMap{Talu}{354}{New Tai Lue}{LR}{}%
\TrackLangScriptMap{Taml}{346}{Tamil}{LR}{}%
-\TrackLangScriptMap{Taml}{346}{Tamil}{LR}{}%
\TrackLangScriptMap{Tang}{520}{Tangut}{LR}{}%
\TrackLangScriptMap{Tavt}{359}{Tai Viet}{LR}{}%
\TrackLangScriptMap{Telu}{340}{Telugu}{LR}{}%
diff --git a/macros/generic/tracklang/tracklang.ins b/macros/generic/tracklang/tracklang.ins
index 4b7bca1dde..42a18dc526 100644
--- a/macros/generic/tracklang/tracklang.ins
+++ b/macros/generic/tracklang/tracklang.ins
@@ -1,10 +1,10 @@
-% tracklang.ins generated using makedtx version 1.2 2020/6/30 11:55
+% tracklang.ins generated using makedtx version 1.2 2022/10/29 18:01
\input docstrip
\preamble
tracklang.dtx
- Copyright 2020 Nicola Talbot
+ Copyright 2022 Nicola Talbot
This work may be distributed and/or modified under the
conditions of the LaTeX Project Public License, either version 1.3
diff --git a/macros/generic/tracklang/tracklang.pdf b/macros/generic/tracklang/tracklang.pdf
deleted file mode 100644
index a498800ab0..0000000000
--- a/macros/generic/tracklang/tracklang.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-caspervector/doc/ChangeLog.txt b/macros/latex/contrib/biblatex-contrib/biblatex-caspervector/doc/ChangeLog.txt
index 2de15cc139..3d308fe078 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-caspervector/doc/ChangeLog.txt
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-caspervector/doc/ChangeLog.txt
@@ -1,3 +1,8 @@
+2022-10-30, v0.3.6
+
+ * API changes:
+ - Add support for backrefs.
+
2020-11-02, v0.3.5
* Changes to documentation:
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-caspervector/doc/caspervector-ay.pdf b/macros/latex/contrib/biblatex-contrib/biblatex-caspervector/doc/caspervector-ay.pdf
index ddf54b7c8f..262076de2e 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-caspervector/doc/caspervector-ay.pdf
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-caspervector/doc/caspervector-ay.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-caspervector/doc/caspervector.pdf b/macros/latex/contrib/biblatex-contrib/biblatex-caspervector/doc/caspervector.pdf
index 62da3d0589..4fe8a1d3bf 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-caspervector/doc/caspervector.pdf
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-caspervector/doc/caspervector.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-caspervector/doc/caspervector.tex b/macros/latex/contrib/biblatex-contrib/biblatex-caspervector/doc/caspervector.tex
index d67aee127a..601cef3f8b 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-caspervector/doc/caspervector.tex
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-caspervector/doc/caspervector.tex
@@ -1,6 +1,6 @@
% Documentation for biblatex-caspervector
%
-% Copyright (c) 2012-2016,2018-2019 Casper Ti. Vector
+% Copyright (c) 2012-2016,2018-2019,2022 Casper Ti. Vector
%
% This work may be distributed and/or modified under the conditions of the
% LaTeX Project Public License, either version 1.3 of this license or (at
@@ -22,7 +22,7 @@
\usepackage[margin = 2cm, centering, includefoot]{geometry}
\usepackage[
backend = biber, style = caspervector, utf8,
- giveninits = true, sortgiveninits = true
+ giveninits = true, sortgiveninits = true, backref = true
]{biblatex}
\usepackage{iftex, fancyhdr, hyperref, enumitem, fancyvrb, hologo}
@@ -48,13 +48,13 @@
\addbibresource{caspervector.bib}
\begin{document}
-\title{\textbf{biblatex å‚考文献和引用样å¼ï¼š\texttt{caspervector} v0.3.5}}
+\title{\textbf{biblatex å‚考文献和引用样å¼ï¼š\texttt{caspervector} v0.3.6}}
\author{%
Casper Ti.\ Vector\thanks{\ %
\href{mailto:CasperVector@gmail.com}{\texttt{CasperVector@gmail.com}}.%
}%
}
-\date{2020/11/02}
+\date{2022/10/30}
\maketitle
\section{引言}
@@ -518,7 +518,9 @@ biblatex 3.0--3.3 的功能调整导致分类排åºå¤±æ•ˆã€‚%
这两ç§æ–¹æ³•ä¸­æ›´åŠ æŽ¨è使用å‰è€…,因为å‰è€…åªé¡»æ‰‹åŠ¨å®žçŽ°å‡ºç‰ˆå¹´å’ŒæœŸå·çš„排版。
\begin{refcontext}[sorting = none]
-\printbibliography[category = cited, heading = bibnumbered, title = {本文å‚考文献}]
+\printbibliography[category = cited, heading = bibnumbered, title = {%
+ 本文å‚考文献(åå‘引用页ç æ˜¯è®¾å®š \texttt{backref = true} 产生的)%
+}]
\end{refcontext}
\begin{refcontext}[sorting = ecnyt]
\printbibliography[notcategory = cited, heading = bibnumbered, title = {%
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-caspervector/tex/blx-caspervector-base.def b/macros/latex/contrib/biblatex-contrib/biblatex-caspervector/tex/blx-caspervector-base.def
index c23b4b1dad..4d326af7ce 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-caspervector/tex/blx-caspervector-base.def
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-caspervector/tex/blx-caspervector-base.def
@@ -1,6 +1,6 @@
% Casper Ti. Vector's biblatex style
%
-% Copyright (c) 2012-2019 Casper Ti. Vector
+% Copyright (c) 2012-2019,2022 Casper Ti. Vector
%
% This work may be distributed and/or modified under the conditions of the
% LaTeX Project Public License, either version 1.3 of this license or (at
@@ -23,7 +23,7 @@
% blx-caspervector-utf8.def
\ProvidesFile{blx-caspervector-base.def}%
- [2020/11/02 v0.3.5 Casper Ti. Vector's biblatex library]
+ [2022/10/30 v0.3.6 Casper Ti. Vector's biblatex library]
\RequireBiber[3]
\newtoggle{bbx:gbk}
@@ -113,8 +113,9 @@
\renewcommand*{\finalnamedelim}{\ifcitation{\bbx@citebcomma}{\finallistdelim}}
\renewcommand*{\multinamedelim}{\ifcitation{\bbx@citebcomma}{\multilistdelim}}
\renewcommand*{\postnotedelim}{\bbx@citecomma}
-\renewcommand*{\finentrypunct}%
- {\iffieldundef{addendum}{\bbx@cepunct{\bbx@cnperiod}{.}}{}}
+\renewcommand*{\finentrypunct}{\ifboolexpr{
+ test {\iffieldundef{addendum}} and test {\iflistundef{pageref}}
+}{\bbx@cepunct{\bbx@cnperiod}{.}}{}}
\DefineBibliographyExtras{english}{%
\renewcommand*{\finalandcomma}{}%
}
@@ -135,6 +136,7 @@
{\ifinteger{#1}{{\bbx@cnnr} {#1} {\bbx@cnedition}}{#1}}%
{\ifinteger{#1}{\mkbibordedition{#1}~\bibstring{edition}}{#1\isdot}}%
}
+\DeclareFieldFormat*{mypageref}{\mkbibbrackets{\^{}\,#1}}
\newcommand*{\bbx@print}[1]{\iffieldundef{#1}{}{\printfield{#1}}}
\newbibmacro*{cntypedelim}[1]{\ifandothers{#1}{}{\printtext{\andothersdelim}}}
\newbibmacro*{cein:}%
@@ -243,6 +245,13 @@
\printurldate%
}%
}
+\newbibmacro*{addendum+pageref}{%
+ \printfield{addendum}%
+ \iflistundef{pageref}{}{%
+ \bbx@cepunct{}{\setunit{\addspace}}%
+ \printtext[mypageref]{\printlist[pageref][-\value{listtotal}]{pageref}}%
+ }%
+}
\DeclareBibliographyDriver{book}{%
\usebibmacro{bibindex}\usebibmacro{begentry}%
@@ -256,7 +265,7 @@
\usebibmacro{location+publisher+date+note+pages}%
\printunit{\bbx@ceperiod}\newblock
\usebibmacro{eid+url+urldate}\printunit{\bbx@ceperiod}\newblock
- \printfield{addendum}\usebibmacro{finentry}%
+ \usebibmacro{addendum+pageref}\usebibmacro{finentry}%
}
\DeclareBibliographyDriver{incollection}{%
@@ -274,7 +283,7 @@
\usebibmacro{location+publisher+date+note+pages}%
\printunit{\bbx@ceperiod}\newblock
\usebibmacro{eid+url+urldate}\printunit{\bbx@ceperiod}\newblock
- \printfield{addendum}\usebibmacro{finentry}%
+ \usebibmacro{addendum+pageref}\usebibmacro{finentry}%
}
\DeclareBibliographyDriver{periodical}{%
@@ -290,7 +299,7 @@
\printlist{location}\setunit*{\bbx@cecolon}%
\printlist{publisher}\printunit{\bbx@ceperiod}\newblock
\usebibmacro{eid+url+urldate}\printunit{\bbx@ceperiod}\newblock
- \printfield{addendum}\usebibmacro{finentry}%
+ \usebibmacro{addendum+pageref}\usebibmacro{finentry}%
}
\DeclareBibliographyDriver{article}{%
@@ -304,7 +313,7 @@
\usebibmacro{date+volume+number+note+pages}%
\printunit{\bbx@ceperiod}\newblock
\usebibmacro{eid+url+urldate}\printunit{\bbx@ceperiod}\newblock
- \printfield{addendum}\usebibmacro{finentry}%
+ \usebibmacro{addendum+pageref}\usebibmacro{finentry}%
}
\DeclareBibliographyDriver{patent}{%
@@ -320,12 +329,12 @@
\usebibmacro{date}\setunit*{\bbx@cecomma}%
\printfield{note}\printunit{\bbx@ceperiod}\newblock
\usebibmacro{eid+url+urldate}\printunit{\bbx@ceperiod}\newblock
- \printfield{addendum}\usebibmacro{finentry}%
+ \usebibmacro{addendum+pageref}\usebibmacro{finentry}%
}
\DeclareBibliographyDriver{customf}{%
\usebibmacro{bibindex}\usebibmacro{begentry}%
- \printfield{addendum}\usebibmacro{finentry}%
+ \usebibmacro{addendum+pageref}\usebibmacro{finentry}%
}
\DeclareBibliographyAlias{booklet}{book}
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-caspervector/tex/blx-caspervector-gbk.def b/macros/latex/contrib/biblatex-contrib/biblatex-caspervector/tex/blx-caspervector-gbk.def
index 429ee5db47..83650ccb5d 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-caspervector/tex/blx-caspervector-gbk.def
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-caspervector/tex/blx-caspervector-gbk.def
@@ -23,7 +23,7 @@
% blx-caspervector-utf8.def
\ProvidesFile{blx-caspervector-gbk.def}%
- [2020/11/02 v0.3.5 Chinese punctuations and captions in GBK]
+ [2022/10/30 v0.3.6 Chinese punctuations and captions in GBK]
\newcommand*\bbx@cnldquot{¡°}
\newcommand*\bbx@cnrdquot{¡±}
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-caspervector/tex/blx-caspervector-utf8.def b/macros/latex/contrib/biblatex-contrib/biblatex-caspervector/tex/blx-caspervector-utf8.def
index 872d40567f..571291605d 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-caspervector/tex/blx-caspervector-utf8.def
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-caspervector/tex/blx-caspervector-utf8.def
@@ -23,7 +23,7 @@
% blx-caspervector-utf8.def
\ProvidesFile{blx-caspervector-utf8.def}%
- [2020/11/02 v0.3.5 Chinese punctuations and captions in UTF-8]
+ [2022/10/30 v0.3.6 Chinese punctuations and captions in UTF-8]
\newcommand*\bbx@cnldquot{“}
\newcommand*\bbx@cnrdquot{â€}
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-caspervector/tex/caspervector-ay.bbx b/macros/latex/contrib/biblatex-contrib/biblatex-caspervector/tex/caspervector-ay.bbx
index 139b83551f..690d19fe9d 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-caspervector/tex/caspervector-ay.bbx
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-caspervector/tex/caspervector-ay.bbx
@@ -23,7 +23,7 @@
% blx-caspervector-utf8.def
\ProvidesFile{caspervector-ay.bbx}%
- [2020/11/02 v0.3.5 Casper Ti. Vector's author-year biblatex bibstyle]
+ [2022/10/30 v0.3.6 Casper Ti. Vector's author-year biblatex bibstyle]
\RequireBibliographyStyle{authoryear-comp}
\input{blx-caspervector-base.def}
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-caspervector/tex/caspervector-ay.cbx b/macros/latex/contrib/biblatex-contrib/biblatex-caspervector/tex/caspervector-ay.cbx
index 12133338a9..a58fecebe3 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-caspervector/tex/caspervector-ay.cbx
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-caspervector/tex/caspervector-ay.cbx
@@ -23,7 +23,7 @@
% blx-caspervector-utf8.def
\ProvidesFile{caspervector-ay.cbx}%
- [2020/11/02 v0.3.5 Casper Ti. Vector's author-year biblatex citestyle]
+ [2022/10/30 v0.3.6 Casper Ti. Vector's author-year biblatex citestyle]
\RequireCitationStyle{authoryear-comp}
\renewcommand*{\compcitedelim}{\bbx@citebcomma}
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-caspervector/tex/caspervector.bbx b/macros/latex/contrib/biblatex-contrib/biblatex-caspervector/tex/caspervector.bbx
index 80682d4e05..9647c575da 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-caspervector/tex/caspervector.bbx
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-caspervector/tex/caspervector.bbx
@@ -23,7 +23,7 @@
% blx-caspervector-utf8.def
\ProvidesFile{caspervector.bbx}%
- [2020/11/02 v0.3.5 Casper Ti. Vector's numeric biblatex bibstyle]
+ [2022/10/30 v0.3.6 Casper Ti. Vector's numeric biblatex bibstyle]
\RequireBibliographyStyle{numeric-comp}
\input{blx-caspervector-base.def}
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-caspervector/tex/caspervector.cbx b/macros/latex/contrib/biblatex-contrib/biblatex-caspervector/tex/caspervector.cbx
index 5a3ac392cf..da4f7b5a70 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-caspervector/tex/caspervector.cbx
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-caspervector/tex/caspervector.cbx
@@ -23,7 +23,7 @@
% blx-caspervector-utf8.def
\ProvidesFile{caspervector.cbx}%
- [2020/11/02 v0.3.5 Casper Ti. Vector's numeric biblatex citestyle]
+ [2022/10/30 v0.3.6 Casper Ti. Vector's numeric biblatex citestyle]
\RequireCitationStyle{numeric-comp}
\ExecuteBibliographyOptions{autocite = superscript}
diff --git a/macros/latex/contrib/eolang/DEPENDS.txt b/macros/latex/contrib/eolang/DEPENDS.txt
index 11d8637225..d3abb692d7 100644
--- a/macros/latex/contrib/eolang/DEPENDS.txt
+++ b/macros/latex/contrib/eolang/DEPENDS.txt
@@ -9,3 +9,4 @@ hard pdftexcmds
hard ifluatex
hard ifxetex
hard adjustbox
+hard hyperref \ No newline at end of file
diff --git a/macros/latex/contrib/eolang/eolang.dtx b/macros/latex/contrib/eolang/eolang.dtx
index 65e87c220a..c7bad93739 100644
--- a/macros/latex/contrib/eolang/eolang.dtx
+++ b/macros/latex/contrib/eolang/eolang.dtx
@@ -50,7 +50,7 @@
%<package>\NeedsTeXFormat{LaTeX2e}
%<package>\ProvidesPackage{eolang}
%<*package>
-[2022-10-29 0.2.0 Formulas and Graphs for EO Programming Language]
+[2022-10-30 0.3.0 Formulas and Graphs for EO Programming Language]
%</package>
%<*driver>
\documentclass{ltxdoc}
@@ -126,6 +126,8 @@
% (|\varnothing|),
% \item ``|->|'' maps to ``$\mapsto$''
% (|\mapsto|),
+% \item ``|~>|'' maps to ``$\phiWave$''
+% (|\phiWave|),
% \item ``|!->|'' maps to ``$\phiConst$''
% (|\phiConst|),
% \item ``|..>|'' maps to ``$\phiDotted$''
@@ -153,9 +155,9 @@
% \pagestyle{empty}
% \usepackage{eolang}
% \begin{document}
-% A simple object \\
+% A simple object
% \phiq{x -> [[@ -> y]]} \\
-% is a decorator of \\
+% is a decorator of
% the data object \\
% \phiq{y -> [[\Delta ..> 42]]}.
% \end{document}
@@ -267,6 +269,27 @@
% \end{document}
% \end{docshot}
+% This is how you can use |\dfrac| from |amsmath| for large inference rules,
+% with the help of |\begin{split}| and |\end{split}|:
+% \begin{docshot}
+% \documentclass{article}
+% \usepackage{amsmath}
+% \usepackage{eolang}
+% \pagestyle{empty}
+% \begin{document}
+% \begin{phiquation*}
+% \dfrac{\begin{split}
+% x->[[@->y, z->42,
+% \alpha_0->?, \alpha_1->42]]
+% \end{split}}{\begin{split}
+% x->[[@->y, z->?, f ~> |pi|(
+% \alpha_0->[[ \psi !-> |hello|(12) ]],
+% \alpha_1->42)]]
+% \end{split}}\text{R2}.
+% \end{phiquation*}
+% \end{document}
+% \end{docshot}
+
% The |phiquation| environment may be used together with \href{https://ctan.org/pkg/acmart}{acmart}:
% \begin{docshot}
% \documentclass{acmart}
@@ -346,12 +369,22 @@
\iexec[null]{mkdir -p "\eolang@tmpdir/\jobname"}%
% \end{macrocode}
+% \begin{macro}{\eolang@lineno}
+% \changes{0.3.0}{2022/10/30}{New counter for protecting lineno.}
+% Then, we define an internal counter to protect line number from changing:
+% \begin{macrocode}
+\makeatletter\newcounter{eolang@lineno}\makeatother
+% \end{macrocode}
+% \end{macro}
+
% \begin{macro}{\eolang@mdfive}
% \changes{0.1.0}{2022/10/26}{New supplementary command added to calculate MD5 sum of a file.}
% Then, we define a command for MD5 hash calculating of a file:
% \begin{macrocode}
\RequirePackage{pdftexcmds}
-\makeatletter\newcommand\eolang@mdfive[1]{\pdf@filemdfivesum{#1}}\makeatother
+\makeatletter
+\newcommand\eolang@mdfive[1]{\pdf@filemdfivesum{#1}}
+\makeatother
% \end{macrocode}
% \end{macro}
@@ -361,7 +394,9 @@
% \changes{0.0.2}{2022/10/21}{Parsing of symbols ``@,'' ``\^{},'' and ``\&'' enabled (varphi, rho, and sigma)}
% \changes{0.1.0}{2022/10/26}{A new Perl script "eolang-phi.pl" added for parsing of phi expressions.}
% \changes{0.2.0}{2022/10/29}{Numbers automatically render as "texttt". No need to use vertical bars around them anymore.}
-% Then, we create a Perl script for |phiquation| processing:
+% \changes{0.3.0}{2022/10/30}{New arrow added, that looks like "leadsto".}
+% Then, we create a Perl script for |phiquation| processing using |VerbatimOut| from
+% \href{https://ctan.org/pkg/fancyvrb}{fancyvrb}:
% \begin{macrocode}
\makeatletter
\begin{VerbatimOut}{\eolang@tmpdir/eolang-phi.pl}
@@ -400,12 +435,15 @@ $tex =~ s/\$/\\xi{}/g;
$tex =~ s/-([a-z]+)>/\\mathrel{\\xrightarrow{\\text{\\sffamily\\scshape \1}}}/g;
$tex =~ s/!->/\\mathrel{\\phiConst}/g;
$tex =~ s/->/\\mathrel{\\mapsto}/g;
+$tex =~ s/~>/\\mathrel{\\phiWave}/g;
$tex =~ s/:=/\\mathrel{\\vDash}/g;
$tex =~ s/..>/\\mathrel{\\phiDotted}/g;
-$tex =~ s/\|([^\|]+)\|/\\texttt{\1}{}/g;
+$tex =~ s/\|([^\|]+)\|/\\textnormal{\\texttt{\1}}{}/g;
$tex =~ s/\[\[/\\llbracket\\mathrel{}/g;
$tex =~ s/\]\]/\\mathrel{}\\rrbracket{}/g;
if ($env ne 'phiq') {
+ $tex =~ s/\\begin\{split\}\n/\\begin{split}&/g;
+ $tex =~ s/\n\s*\\end\{split\}/\\end{split}/g;
$tex =~ s/\n\n/\\\\&/g;
$tex =~ s/\n/\\\\[-4pt]&/g;
$tex =~ s/([^&\s])\s{2}([^\s])/\1 \2/g;
@@ -446,13 +484,18 @@ print '\endinput', "\n";
perl "\eolang@tmpdir/eolang-phi.pl"
'#1'
"\eolang@tmpdir/\jobname/\hash.tex"}%
+ \setcounter{FancyVerbLine}{\value{eolang@lineno}}%
}
\newenvironment{phiquation*}%
-{\VerbatimEnvironment\begin{VerbatimOut}
+{\VerbatimEnvironment%
+\setcounter{eolang@lineno}{\value{FancyVerbLine}}%
+\begin{VerbatimOut}
{\eolang@tmpdir/\jobname/phiquation.tex}}
{\end{VerbatimOut}\eolang@process{equation*}}
\newenvironment{phiquation}%
-{\VerbatimEnvironment\begin{VerbatimOut}
+{\VerbatimEnvironment%
+\setcounter{eolang@lineno}{\value{FancyVerbLine}}%
+\begin{VerbatimOut}
{\eolang@tmpdir/\jobname/phiquation.tex}}
{\end{VerbatimOut}\eolang@process{equation}}
\makeatother
@@ -460,12 +503,12 @@ print '\endinput', "\n";
% \end{macro}
% \begin{macro}{\phiq}
-% \changes{0.0.2}{2022/10/21}{Parsing of additional symbols enabled}
+% \changes{0.0.2}{2022/10/21}{Parsing of additional symbols enabled.}
% Then, we define |\phiq| command:
% \begin{macrocode}
-\makeatletter\newcommand\phiq[1]{
+\makeatletter\newcommand\phiq[1]{%
\iexec[trace,quiet,stdout=\eolang@tmpdir/\jobname/phiq.tex]{
- /bin/echo '\detokenize{#1}'}
+ /bin/echo '\detokenize{#1}'}%
\def\hash{\eolang@mdfive
{\eolang@tmpdir/\jobname/phiq.tex}}%
\iexec[null]{cp "\eolang@tmpdir/\jobname/phiq.tex"
@@ -481,7 +524,8 @@ print '\endinput', "\n";
% \changes{0.0.2}{2022/10/24}{The Perl file now has a fixed name, which doesn't depend on the name of the TeX job. This file may be shared among jobs, no need to make it uniquely named.}
% \changes{0.1.0}{2022/10/26}{There are two Perl scripts now: one for phiquation, another one for sodg.}
% \changes{0.2.0}{2022/10/28}{The content of "atom" and "data" boxes is parsed automatically as formulas and numbers, respectively.}
-% Then, we create a Perl script for |sodg| graphs processing:
+% Then, we create a Perl script for |sodg| graphs processing using |VerbatimOut| from
+% \href{https://ctan.org/pkg/fancyvrb}{fancyvrb}:
% \begin{macrocode}
\makeatletter
\begin{VerbatimOut}{\eolang@tmpdir/eolang-sodg.pl}
@@ -498,7 +542,7 @@ if (index($tex, "\t") > 0) {
$tex =~ s/^\s+|\s+$//g;
$tex =~ s/(\\[a-zA-Z]+)\s+/\1/g;
$tex =~ s/\n\s+/\n/g;
-$tex =~ s/\|([^\|]+)\|/\\texttt{\1}/g;
+$tex =~ s/\|([^\|]+)\|/\\textnormal{\\texttt{\1}}/g;
my @cmds = split (/\n/g, $tex);
foreach my $t (@cmds) {
print '% ', $t, "\n";
@@ -528,7 +572,7 @@ foreach my $c (@cmds) {
if (not $opts{'data'} eq '') {
my $d = $opts{'data'};
if (index($d, '|') == -1) {
- $d = '\texttt{' . $d . '}';
+ $d = '\textnormal{\texttt{' . $d . '}}';
}
$opts{'box'} = $d;
}
@@ -596,6 +640,14 @@ print '\end{phicture}', "\n", '\endinput';
% \end{macrocode}
% \end{macro}
+% \begin{macro}{FancyVerbLine}
+% Then, we reset the counter for \href{https://ctan.org/pkg/fancyvrb}{fancyvrb}, so that
+% it starts counting lines from zero when the document starts rendering:
+% \begin{macrocode}
+\setcounter{FancyVerbLine}{0}
+% \end{macrocode}
+% \end{macro}
+
% \begin{macro}{tikz}
% Then, we include |tikz| package and its libraries:
% \begin{macrocode}
@@ -648,7 +700,9 @@ print '\end{phicture}', "\n", '\endinput';
% \href{https://tex.stackexchange.com/questions/661056}{here}:
% \begin{macrocode}
\makeatletter\newenvironment{sodg}%
-{\VerbatimEnvironment\begin{VerbatimOut}
+{\VerbatimEnvironment%
+\setcounter{eolang@lineno}{\value{FancyVerbLine}}%
+\begin{VerbatimOut}
{\eolang@tmpdir/\jobname/sodg.tex}}
{\end{VerbatimOut}%
\def\hash{\eolang@mdfive
@@ -658,6 +712,7 @@ print '\end{phicture}', "\n", '\endinput';
\iexec[trace,stdout=\eolang@tmpdir/\jobname/\hash-post.tex]{
perl "\eolang@tmpdir/eolang-sodg.pl"
"\eolang@tmpdir/\jobname/\hash.tex"}%
+ \setcounter{FancyVerbLine}{\value{eolang@lineno}}%
}\makeatother
% \end{macrocode}
% \end{macro}
@@ -682,11 +737,12 @@ print '\end{phicture}', "\n", '\endinput';
% \changes{0.1.0}{2022/10/25}{New command "phic" prints the name of $\varphi$-calculus in both
% normal and anonymous mode of "acmart"}
% \begin{macrocode}
+\RequirePackage{hyperref}
\newcommand\phic{%
\ifdefined\anon%
- \anon[$\alpha$-calculus]{$\varphi$-calculus}%
+ \anon[\texorpdfstring{$\alpha$}{a}-calculus]{\texorpdfstring{$\varphi$}{phi}-calculus}%
\else%
- $\varphi$-calculus%
+ \texorpdfstring{$\varphi$}{phi}-calculus%
\fi%
}
% \end{macrocode}
@@ -716,6 +772,16 @@ print '\end{phicture}', "\n", '\endinput';
% \end{macrocode}
% \end{macro}
+% \begin{macro}{\phiWave}
+% \changes{0.3.0}{2022/10/30}{New command "phiWave" added to denote a link to a multi-layer attribute.}
+% Then, we define a command to render an arrow for a multi-layer attribute,
+% as suggested \href{https://tex.stackexchange.com/questions/198755}{here}:
+% \begin{macrocode}
+\newcommand\phiWave{%
+ \mapstochar\mathrel{\mspace{0.45mu}}\leadsto}
+% \end{macrocode}
+% \end{macro}
+
% \begin{macro}{\phiDotted}
% \changes{0.1.0}{2022/10/27}{New command "phiDotted" added to denote a link to a special attribute.}
% Then, we define a command to render an arrow for a special attribute,
diff --git a/macros/latex/contrib/eolang/eolang.pdf b/macros/latex/contrib/eolang/eolang.pdf
index e2b1d20e83..28befcb7bf 100644
--- a/macros/latex/contrib/eolang/eolang.pdf
+++ b/macros/latex/contrib/eolang/eolang.pdf
Binary files differ
diff --git a/macros/latex/contrib/ffcode/DEPENDS.txt b/macros/latex/contrib/ffcode/DEPENDS.txt
index 52a46fbc48..935840f850 100644
--- a/macros/latex/contrib/ffcode/DEPENDS.txt
+++ b/macros/latex/contrib/ffcode/DEPENDS.txt
@@ -1,5 +1,3 @@
hard xkeyval
hard minted
hard tcolorbox
-hard pgf
-hard environ
diff --git a/macros/latex/contrib/ffcode/README.md b/macros/latex/contrib/ffcode/README.md
index fe0332ddfe..f62fa0aa99 100644
--- a/macros/latex/contrib/ffcode/README.md
+++ b/macros/latex/contrib/ffcode/README.md
@@ -23,11 +23,10 @@ void r() {
\end{document}
```
-The full example and all commands are available in the
-[`ffcode.tex`](https://github.com/yegor256/ffcode/blob/master/ffcode.tex) file.
+Otherwise, you can download [`ffcode.sty`](https://raw.githubusercontent.com/yegor256/ffcode/gh-pages/ffcode/ffcode.sty) and add to your project.
-If you want to contribute yourself, make a fork, then create a branch,
-then run `make` in the root directory.
+If you want to contribute yourself, make a fork, then create a branch,
+then run `l3build ctan` in the root directory.
It should compile everything without errors. If not, submit an issue and wait.
-Otherwise, make your changes and then run `make` again. If the build is
+Otherwise, make your changes and then run `l3build ctan` again. If the build is
still clean, submit a pull request.
diff --git a/macros/latex/contrib/ffcode/ffcode.dtx b/macros/latex/contrib/ffcode/ffcode.dtx
index c6d717c7b5..e3c430c8de 100644
--- a/macros/latex/contrib/ffcode/ffcode.dtx
+++ b/macros/latex/contrib/ffcode/ffcode.dtx
@@ -50,18 +50,20 @@
%<package>\NeedsTeXFormat{LaTeX2e}
%<package>\ProvidesPackage{ffcode}
%<*package>
-[03.10.2022 0.5.0 Fixed Font Code]
+[2022-10-30 0.5.1 Fixed Font Code]
%</package>
%<*driver>
\documentclass{ltxdoc}
\usepackage[T1]{fontenc}
\usepackage[tt=false,type1=true]{libertine}
\usepackage{microtype}
+\AddToHook{env/verbatim/begin}{\microtypesetup{protrusion=false}}
\usepackage{href-ul}
\usepackage{ffcode}
\usepackage{amsmath}
\usepackage{multicol}
\usepackage{xcolor}
+\usepackage[dtx,runs=2]{docshots}
\PageIndex
\EnableCrossrefs
\CodelineIndex
@@ -86,86 +88,51 @@
% and make sure it looks nice. Install it from CTAN and then
% use like this (pay attention to |\ff| command
% and |ffcode| environment):
-% \begin{multicols}{2}
-% \setlength{\parskip}{0pt}
-% \raggedcolumns
-%\iffalse
-%<*verb>
-%\fi
-\begin{verbatim}
-\documentclass{article}
-\usepackage{ffcode}
-\begin{document}
-The function \ff{fibo()}
-is recursive:
-\begin{ffcode}
-int fibo(int n) {
- if (n < 2) {
- return n; |$\label{ln:ret}$|
- }
- return fibo(n-1)+fibo(n-2);
-}
-\end{ffcode}
-The line no.~\ref{ln:ret}
-terminates it.
-\end{document}
-\end{verbatim}
-%\iffalse
-%</verb>
-%\fi
-%
-% \columnbreak
-%
-% The function \ff{fibo()} is recursive:
-%
-%\iffalse
-%<*verb>
-%\fi
-\begin{ffcode}
-int fibo(int n) {
- if (n < 2) {
- return n; |$\label{ln:ret}$|
- }
- return fibo(n-1)+fibo(n-2);
-}
-\end{ffcode}
-%\iffalse
-%</verb>
-%\fi
-%
-% The line no.~\ref{ln:ret} terminates it.
-% \end{multicols}
+% \begin{docshot}
+% \documentclass{article}
+% \usepackage{ffcode}
+% \pagestyle{empty}
+% \begin{document}
+% The function \ff{fibo()}
+% is recursive:
+% \begin{ffcode}
+% int fibo(int n) {
+% if (n < 2) {
+% return n; |$\label{ln:ret}$|
+% }
+% return fibo(n-1)+fibo(n-2);
+% }
+% \end{ffcode}
+% The line no.~\ref{ln:ret}
+% terminates it.
+% \end{document}
+% \end{docshot}
% \section{Package Options}
-% \begin{macro}{nopygments}
+% \DescribeMacro{nopygments}
% You have to run |pdflatex| with |--shell-escape| flag
% in order to let |minted| (the package we use) to run Pygments
% and format the code. If you don't want this to happen,
% just use |nopygments| option.
-% \end{macro}
-% \begin{macro}{noframes}
+% \DescribeMacro{noframes}
% If you want to omit the light gray frames around |\ff|
% texts, use the package option |noframes|.
-% \end{macro}
-% \begin{macro}{nobars}
+% \DescribeMacro{nobars}
% To omit the vertical gray bar at the left side of each snippet,
% use |nobars| option of the package.
-% \end{macro}
-% \begin{macro}{nonumbers}
+% \DescribeMacro{nonumbers}
% To omit the line numbers, use |nonumbers| option of the package.
-% \end{macro}
-% \begin{macro}{nocn}
+% \DescribeMacro{nocn}
% By default, the numbering is continuous: line numbers start at the
% first snippet and increment until the end of the document. If you
% want them to start from one at each snippet, use |nocn|
% (stands for ``no continuous numbering'')
% option of the package.
-% \end{macro}
% \section{Typesetting}
@@ -178,86 +145,40 @@ int fibo(int n) {
% The command |\ff| behaves differently in math mode --- it doesn't
% add gray frames:
-% \begin{multicols}{2}
-% \setlength{\parskip}{0pt}
-% \raggedcolumns
-%\iffalse
-%<*verb>
-%\fi
-\begin{verbatim}
-\documentclass{article}
-\usepackage{ffcode}
-\begin{document}
-\begin{equation}
-x = \int_\ff{home}^N f(x).
-\end{equation}
-\end{document}
-\end{verbatim}
-%\iffalse
-%</verb>
-%\fi
-%
-% \columnbreak
-%
-%\iffalse
-%<*verb>
-%\fi
-% \begin{equation}
+% \begin{docshot}
+% \documentclass{article}
+% \usepackage{ffcode}
+% \usepackage{mathtools}
+% \pagestyle{empty}
+% \begin{document}
+% \begin{equation*}
% x = \int_\ff{home}^N f(x).
-% \end{equation}
-%\iffalse
-%</verb>
-%\fi
-% \end{multicols}
+% \end{equation*}
+% \end{document}
+% \end{docshot}
% \section{Line Highlighting}
% You can highlight some lines in your |ffcode| environment,
% or can use any other additional configuration parameters from
% |minted| package:
-
-% \begin{multicols}{2}
-% \setlength{\parskip}{0pt}
-% \raggedcolumns
-%\iffalse
-%<*verb>
-%\fi
-\begin{verbatim}
-\documentclass{article}
-\usepackage{ffcode}
-\begin{document}
-\begin{ffcode*}
- {highlightlines={1,4-5}}
-while (true) {
- print("Hello!")
- print("Enter your name:")
- scan(x)
- print("You name is " + x)
-}
-\end{ffcode*}
-\end{document}
-\end{verbatim}
-%\iffalse
-%</verb>
-%\fi
-%
-% \columnbreak
-%
-%\iffalse
-%<*verb>
-%\fi
-\begin{ffcode*}{highlightlines={7,10-11}}
-while (true) {
- print("Hello!")
- print("Enter your name:")
- scan(x)
- print("You name is " + x)
-}
-\end{ffcode*}
-%\iffalse
-%</verb>
-%\fi
-% \end{multicols}
+% \begin{docshot}
+% \documentclass{article}
+% \usepackage[paperwidth=3in]{geometry}
+% \usepackage{ffcode}
+% \pagestyle{empty}
+% \begin{document}
+% \begin{ffcode*}
+% {highlightlines={1,4-5}}
+% while (true) {
+% print("Hello!")
+% print("Enter your name:")
+% scan(x)
+% print("You name is " + x)
+% }
+% \end{ffcode*}
+% \end{document}
+% \end{docshot}
% Using this second argument of |ffcode*| (with the trailing asterisk),
% you can provide any other options from |minted| package to the
@@ -266,8 +187,7 @@ while (true) {
% \StopEventually{}
% \section{Implementation}
-
-% \changes{v0.2.0}{2021/07/10}{Initial version}
+% \changes{v0.1.0}{2021/06/10}{Initial version}
% First, we parse package options:
% \begin{macrocode}
@@ -276,10 +196,14 @@ while (true) {
\DeclareOptionX{nopygments}{\PassOptionsToPackage{draft=true}{minted}}
\newif\ifff@noframes
\DeclareOptionX{noframes}{\ff@noframestrue}
+% \changes{v0.4.0}{2022/01/09}{Package option "nobars" added.}
\newif\ifff@nobars
\DeclareOptionX{nobars}{\ff@nobarstrue}
+% \changes{v0.2.0}{2021/06/13}{Package options "nonumbers"
+% and "noframes" added.}
\newif\ifff@nonumbers
\DeclareOptionX{nonumbers}{\ff@nonumberstrue}
+% \changes{v0.3.0}{2021/09/07}{Package option "nocn" added.}
\newif\ifff@nocn
\DeclareOptionX{nocn}{\ff@nocntrue}
\ProcessOptionsX\relax
@@ -306,7 +230,7 @@ while (true) {
framerule=1pt,rulecolor=gray,frame=leftline}
\fi
\else
- \renewcommand{\theFancyVerbLine}{\textcolor{gray}
+ \renewcommand{\theFancyVerbLine}{\textcolor{gray}%
{\tiny\oldstylenums{\ttfamily\arabic{FancyVerbLine}}}}
\ifff@nocn
\ifff@nobars
@@ -337,10 +261,11 @@ while (true) {
% \begin{macro}{\ff@print}
% Then, we define supplementary commands |\ff@print| and |\ff@printx|:
+% \changes{v0.5.1}{2022/10/30}{Now, the command "ff" ignores italic and bold and always prints "texttt" as it should be.}
% \begin{macrocode}
\makeatletter
\newcommand\ff@print{\begingroup\obeyspaces\ff@printx}
-\newcommand\ff@printx[1]{\texttt{#1}\endgroup}
+\newcommand\ff@printx[1]{\textnormal{\texttt{#1}}\endgroup}
\makeatother
% \end{macrocode}
% \end{macro}
@@ -368,7 +293,7 @@ while (true) {
\newcommand\ff[1]{\relax\ifmmode%
{\ff@rule\ff@print{#1}}%
\else%
- {\ff@box{\ff@rule\ff@print{#1}}}
+ {\ff@box{\ff@rule\ff@print{#1}}}%
\fi}
\fi\makeatother
% \end{macrocode}
diff --git a/macros/latex/contrib/ffcode/ffcode.ins b/macros/latex/contrib/ffcode/ffcode.ins
index 758b0a2a81..9e7c56593e 100644
--- a/macros/latex/contrib/ffcode/ffcode.ins
+++ b/macros/latex/contrib/ffcode/ffcode.ins
@@ -48,8 +48,8 @@ SOFTWARE.
\endpreamble
\generate{\file{ffcode.sty}{\from{ffcode.dtx}{package}}}
\obeyspaces
-\Msg{*** To finish the installation you have to move the ".sty"}
-\Msg{*** file into a directory searched by TeX. To produce the}
-\Msg{*** documentation run the file ".dtx" through LaTeX. If any}
-\Msg{*** questions, submit a new GitHub issue.}
+\Msg{To finish the installation you have to move the ".sty"}
+\Msg{file into a directory searched by TeX. To produce the}
+\Msg{documentation run the file ".dtx" through LaTeX. If any}
+\Msg{questions, submit a new GitHub issue.}
\endbatchfile
diff --git a/macros/latex/contrib/ffcode/ffcode.pdf b/macros/latex/contrib/ffcode/ffcode.pdf
index 1533df9d95..a24f23e4b0 100644
--- a/macros/latex/contrib/ffcode/ffcode.pdf
+++ b/macros/latex/contrib/ffcode/ffcode.pdf
Binary files differ
diff --git a/macros/latex/contrib/pkuthss/doc/example.pdf b/macros/latex/contrib/pkuthss/doc/example.pdf
index a435dc0541..18b82d1f72 100644
--- a/macros/latex/contrib/pkuthss/doc/example.pdf
+++ b/macros/latex/contrib/pkuthss/doc/example.pdf
Binary files differ
diff --git a/macros/latex/contrib/pkuthss/doc/example/spine.tex b/macros/latex/contrib/pkuthss/doc/example/spine.tex
index 005e4c3950..8bcb77dd58 100644
--- a/macros/latex/contrib/pkuthss/doc/example/spine.tex
+++ b/macros/latex/contrib/pkuthss/doc/example/spine.tex
@@ -1,10 +1,11 @@
-% Copyright (c) 2018-2019 Casper Ti. Vector
+% Copyright (c) 2018-2019,2022 Casper Ti. Vector
% Public domain.
\documentclass[UTF8, zihao = -4]{ctexart}
\usepackage{calc, geometry, graphicx}
-\usepackage[defaultsups]{newtxtext}
-\usepackage[cmintegrals, varg]{newtxmath}
+% 如须用 xelatex 编译,请å‚考 pkuthss.cls 修改字体设置。
+\usepackage{textcomp, mathptmx}
+\usepackage[scaled = 0.95]{helvet}
\pagestyle{empty}
\newlength{\colpad}
\newcommand{\colwidth}{0.99\ccwd}
@@ -37,7 +38,7 @@
\hspace{\colpad}
\begin{minipage}[b][\textheight][b]{\miniwidth}
% thesis.pdf 应事先编译好,此处会自动æå–其首页。
- % 因为è¦æ’å…¥ pdf 图片,本文档应用 pdflatex 或 xelatex 编译。
+ % 因为è¦æ’å…¥ pdf 图片,本文档应用 pdflatex 编译。
\includegraphics[height = \textheight, page = 1]{thesis}
\end{minipage}
\end{document}
diff --git a/macros/latex/contrib/pkuthss/doc/example/thesis.tex b/macros/latex/contrib/pkuthss/doc/example/thesis.tex
index dbfd37994d..f12e379aff 100644
--- a/macros/latex/contrib/pkuthss/doc/example/thesis.tex
+++ b/macros/latex/contrib/pkuthss/doc/example/thesis.tex
@@ -1,5 +1,5 @@
% Copyright (c) 2008-2009 solvethis
-% Copyright (c) 2010-2016,2018-2019,2021 Casper Ti. Vector
+% Copyright (c) 2010-2016,2018-2019,2021-2022 Casper Ti. Vector
% Copyright (c) 2021 Kurapica
% Public domain.
%
@@ -71,7 +71,7 @@
生æˆçš„ PDF 文件中标记链接的彩色框ä¸ä¼šå‡ºçŽ°åœ¨æ‰“å°ç‰ˆè®ºæ–‡ä¸­ã€‚
如ä»é¡»åŽ»æŽ‰ï¼Œå¯åœ¨ \texttt{thesis.tex} 导言区加入
- \texttt{\string\hypersetup\{hidelinks\}}。
+ \texttt{\string\hypersetup\string{hidelinks\string}}。
è‹¥è¦é¿å…章末空白页,请在调用 pkuthss 文档类时加入 \texttt{openany} 选项。
diff --git a/macros/latex/contrib/pkuthss/doc/pkuthss.pdf b/macros/latex/contrib/pkuthss/doc/pkuthss.pdf
index 7e96dbb735..d81143c642 100644
--- a/macros/latex/contrib/pkuthss/doc/pkuthss.pdf
+++ b/macros/latex/contrib/pkuthss/doc/pkuthss.pdf
Binary files differ
diff --git a/macros/latex/contrib/pkuthss/doc/readme/ChangeLog.txt b/macros/latex/contrib/pkuthss/doc/readme/ChangeLog.txt
index 665120151a..89e7fcb899 100644
--- a/macros/latex/contrib/pkuthss/doc/readme/ChangeLog.txt
+++ b/macros/latex/contrib/pkuthss/doc/readme/ChangeLog.txt
@@ -1,3 +1,12 @@
+2022-10-30, v1.9.3
+
+ * Changes to package code:
+ - Get rid of newtx completely (thank @CastleStar14654).
+ - pkuthss.cls: fix scrextend, better footnotes (thank @CastleStar14654).
+
+ * Misc:
+ - Minor fixes and cosmetics.
+
2022-05-04, v1.9.2
* Changes to package code:
diff --git a/macros/latex/contrib/pkuthss/doc/readme/chap/pkuthss-chap2.tex b/macros/latex/contrib/pkuthss/doc/readme/chap/pkuthss-chap2.tex
index 4b5073b08a..de7aa296ee 100644
--- a/macros/latex/contrib/pkuthss/doc/readme/chap/pkuthss-chap2.tex
+++ b/macros/latex/contrib/pkuthss/doc/readme/chap/pkuthss-chap2.tex
@@ -308,8 +308,9 @@ pkuthss 文档模版使用作者编写的 biblatex\cupercite{biblatex} æ ·å¼%
\begin{itemize}
\item å¯ç”¨ \verb|pkufont| 选项时会调用 unicode-math
\cupercite{unicode-math} å®åŒ…(\hologo{XeLaTeX} 编译)或
- newtxtext/newtxmath\cupercite{newtx} å®åŒ…ï¼ˆéž \hologo{XeLaTeX}
- 编译),å¦åˆ™ä¼šè°ƒç”¨ latexsym\cupercite{latexsym} å®åŒ…。
+ mathptmx/helvet\cupercite{psnfss} å’Œ textcomp å®åŒ…(éž
+ \hologo{XeLaTeX} ç¼–è¯‘ï¼‰ï¼Œæ­¤å¤–åœ¨éž \hologo{XeLaTeX} 编译或ä¸å¯ç”¨
+ \verb|pkufont| 选项时å‡ä¼šè°ƒç”¨ latexsym\cupercite{latexsym} å®åŒ…。
\item å¯ç”¨ \verb|pkufoot| 选项时会调用
tikz\cupercite{tikz} å’Œ scrextend\cupercite{scrextend} å®åŒ…。
\item å¯ç”¨ \verb|pkuspace| 选项时会调用
diff --git a/macros/latex/contrib/pkuthss/doc/readme/chap/pkuthss-chap3.tex b/macros/latex/contrib/pkuthss/doc/readme/chap/pkuthss-chap3.tex
index 7dcf4ff855..c39ea13268 100644
--- a/macros/latex/contrib/pkuthss/doc/readme/chap/pkuthss-chap3.tex
+++ b/macros/latex/contrib/pkuthss/doc/readme/chap/pkuthss-chap3.tex
@@ -1,7 +1,7 @@
% Documentation for pkuthss.
%
% Copyright (c) 2008-2009 solvethis
-% Copyright (c) 2010-2019,2021 Casper Ti. Vector
+% Copyright (c) 2010-2019,2021-2022 Casper Ti. Vector
%
% This work may be distributed and/or modified under the conditions of the
% LaTeX Project Public License, either version 1.3 of this license or (at
@@ -89,21 +89,6 @@ data source .../par-xxxxxxxx/cache-xxxxxxxx/
é‡åˆ°è¿™ç§æƒ…况时,删除掉上述临时目录åŠå…¶æ‰€æœ‰å†…容,
å†é‡æ–°è¿è¡Œ biber 通常便å¯è§£å†³é—®é¢˜ã€‚
-就目å‰è€Œè¨€ï¼Œamsthm\cupercite{amsthm} å®åŒ…在åŽäºŽ newtxmath\cupercite{newtx}
-å®åŒ…被调用时会导致以下的错误:
-\begin{Verbatim}
-! LaTeX Error: Command \openbox already defined.
- Or name \end... illegal, see p.192 of the manual.
-\end{Verbatim}
-解决此问题的最简å•æ–¹æ³•æ˜¯åœ¨é€šè¿‡
-\begin{Verbatim}
-\usepackage{amsthm}
-\end{Verbatim}
-调用 amsthm å®åŒ…之å‰åŠ å…¥ä»¥ä¸‹å‘½ä»¤ï¼š
-\begin{Verbatim}
-\let\openbox\relax
-\end{Verbatim}
-
\section{文档格å¼å¯èƒ½å­˜åœ¨çš„问题}
ç›®å‰åœ¨ \hologo{LaTeX} 中似乎没有一个å¯ä»¥å¾ˆå¥½åœ°æ›¿ä»£å…¶å®ƒå„类似å®åŒ…çš„
diff --git a/macros/latex/contrib/pkuthss/doc/readme/chap/pkuthss-intro.tex b/macros/latex/contrib/pkuthss/doc/readme/chap/pkuthss-intro.tex
index 396f9fe6c3..70f4bf5360 100644
--- a/macros/latex/contrib/pkuthss/doc/readme/chap/pkuthss-intro.tex
+++ b/macros/latex/contrib/pkuthss/doc/readme/chap/pkuthss-intro.tex
@@ -1,7 +1,7 @@
% Documentation for pkuthss.
%
% Copyright (c) 2008-2009 solvethis
-% Copyright (c) 2010-2012,2014-2015,2018-2019 Casper Ti. Vector
+% Copyright (c) 2010-2012,2014-2015,2018-2019,2022 Casper Ti. Vector
%
% This work may be distributed and/or modified under the conditions of the
% LaTeX Project Public License, either version 1.3 of this license or (at
@@ -63,6 +63,6 @@ pkuthss 文档模版现在的维护者是 Casper Ti. Vector\footnote%
{\href{mailto:CasperVector@gmail.com}{\texttt{CasperVector@gmail.com}}.}。%
pkuthss 文档模版目å‰æ‰˜ç®¡åœ¨ Gitea 上,
其项目主页是:\\
-\hspace*{\parindent}\url{https://gitea.com/CasperVector/pkuthss}
+\hspace*{\parindent}\url{https://gitea.com/CasperVector/pkuthss}。
% vim:ts=4:sw=4
diff --git a/macros/latex/contrib/pkuthss/doc/readme/ctex-fontset-pkuthss.def b/macros/latex/contrib/pkuthss/doc/readme/ctex-fontset-pkuthss.def
new file mode 120000
index 0000000000..bd7e3e362f
--- /dev/null
+++ b/macros/latex/contrib/pkuthss/doc/readme/ctex-fontset-pkuthss.def
@@ -0,0 +1 @@
+../example/ctex-fontset-pkuthss.def \ No newline at end of file
diff --git a/macros/latex/contrib/pkuthss/doc/readme/ctexopts.cfg b/macros/latex/contrib/pkuthss/doc/readme/ctexopts.cfg
new file mode 120000
index 0000000000..7fabe3504d
--- /dev/null
+++ b/macros/latex/contrib/pkuthss/doc/readme/ctexopts.cfg
@@ -0,0 +1 @@
+../example/ctexopts.cfg \ No newline at end of file
diff --git a/macros/latex/contrib/pkuthss/doc/readme/pkuthss.bib b/macros/latex/contrib/pkuthss/doc/readme/pkuthss.bib
index 9e1770056e..6f7e3d323c 100644
--- a/macros/latex/contrib/pkuthss/doc/readme/pkuthss.bib
+++ b/macros/latex/contrib/pkuthss/doc/readme/pkuthss.bib
@@ -138,13 +138,13 @@
}
@online{graphicx,
- author = {Carlisle, D. P.},
- title = {Packages in the `graphics' bundle},
+ author = {Carlisle, D. P. and Rahtz, S. P. Q.},
+ title = {The graphicx package},
edition = {Ver.~1.2d},
type = {M/OL},
date = {2021-09-16},
url = {https://ctan.org/pkg/graphicx},
- urldate = {2022-05-04},
+ urldate = {2022-05-06},
language = {english},
}
@@ -170,14 +170,14 @@
language = {english},
}
-@online{newtx,
- author = {Sharpe, Michael},
- title = {New TX font package},
- edition = {Ver.~1.71},
+@online{psnfss,
+ author = {Schmidt, Walter},
+ title = {Using common PostScript fonts with \hologo{LaTeX}},
+ edition = {Ver.~9.3},
type = {M/OL},
- date = {2022-03-02},
- url = {https://ctan.org/pkg/newtx},
- urldate = {2022-05-04},
+ date = {2020-03-25},
+ url = {https://ctan.org/pkg/psnfss},
+ urldate = {2022-05-06},
language = {english},
}
diff --git a/macros/latex/contrib/pkuthss/doc/readme/pkuthss.tex b/macros/latex/contrib/pkuthss/doc/readme/pkuthss.tex
index 0bccb1a29b..2def8ad843 100644
--- a/macros/latex/contrib/pkuthss/doc/readme/pkuthss.tex
+++ b/macros/latex/contrib/pkuthss/doc/readme/pkuthss.tex
@@ -51,7 +51,7 @@
}
\newif\ifblind\blindfalse
-\newcommand*{\docversion}{v1.9.2}
+\newcommand*{\docversion}{v1.9.3}
\pkuthssinfo{
cthesisname = {本科生毕业论文}, ethesisname = {Undergraduate Thesis},
ctitle = {北京大学学ä½è®ºæ–‡æ¨¡ç‰ˆ{\thssnl}pkuthss \docversion},
@@ -60,7 +60,7 @@
\texorpdfstring{\thssnl}{: }pkuthss \docversion%
},
cauthor = {盖茨波·钛·维克托}, eauthor = {Casper Ti.\ Vector},
- date = {\zhdigits{2022}年\zhnumber{5}月},
+ date = {\zhdigits{2022}年\zhnumber{10}月},
studentid = {00910???}, school = {化学与分å­å·¥ç¨‹å­¦é™¢},
cmajor = {应用化学}, emajor = {Applied Chemistry},
direction = {æ®è¯´ Casper 自己也ä¸çŸ¥é“}, mentorlines = {2},
diff --git a/macros/latex/contrib/pkuthss/tex/pkulogo.pdf b/macros/latex/contrib/pkuthss/tex/pkulogo.pdf
index 7789b318aa..8160a06564 100644
--- a/macros/latex/contrib/pkuthss/tex/pkulogo.pdf
+++ b/macros/latex/contrib/pkuthss/tex/pkulogo.pdf
Binary files differ
diff --git a/macros/latex/contrib/pkuthss/tex/pkuthss-gbk.def b/macros/latex/contrib/pkuthss/tex/pkuthss-gbk.def
index 0633806021..46b20d974d 100644
--- a/macros/latex/contrib/pkuthss/tex/pkuthss-gbk.def
+++ b/macros/latex/contrib/pkuthss/tex/pkuthss-gbk.def
@@ -24,7 +24,7 @@
% pkuword.eps
\ProvidesFile{pkuthss-gbk.def}
- [2022/05/05 v1.9.2 Labels and captions in GBK encoding
+ [2022/10/30 v1.9.3 Labels and captions in GBK encoding
for the pkuthss document class]
\def\label@ctitle{ÌâÄ¿£º}
diff --git a/macros/latex/contrib/pkuthss/tex/pkuthss-utf8.def b/macros/latex/contrib/pkuthss/tex/pkuthss-utf8.def
index 5d0e25905e..e0358eb18e 100644
--- a/macros/latex/contrib/pkuthss/tex/pkuthss-utf8.def
+++ b/macros/latex/contrib/pkuthss/tex/pkuthss-utf8.def
@@ -24,7 +24,7 @@
% pkuword.eps
\ProvidesFile{pkuthss-utf8.def}
- [2022/05/05 v1.9.2 Labels and captions in UTF-8 encoding
+ [2022/10/30 v1.9.3 Labels and captions in UTF-8 encoding
for the pkuthss document class]
\def\label@ctitle{题目:}
diff --git a/macros/latex/contrib/pkuthss/tex/pkuthss.cls b/macros/latex/contrib/pkuthss/tex/pkuthss.cls
index 22bdde1209..ad3945afba 100644
--- a/macros/latex/contrib/pkuthss/tex/pkuthss.cls
+++ b/macros/latex/contrib/pkuthss/tex/pkuthss.cls
@@ -25,7 +25,7 @@
\NeedsTeXFormat{LaTeX2e}[1995/12/01]
\ProvidesClass{pkuthss}
- [2022/05/05 v1.9.2 Peking University dissertation document class]
+ [2022/10/30 v1.9.3 Peking University dissertation document class]
% eg. `\thss@int@boolopt{spacing}{true}' will expand to:
% \newif\ifthss@opt@spacing \thss@opt@spacingtrue
@@ -112,16 +112,15 @@
UprightFont = *-regular,
BoldFont = *-bold,
ItalicFont = *-italic,
- BoldItalicFont = *-bolditalic
+ BoldItalicFont = *-bolditalic,
+ Scale = 0.95
]{texgyreheros}
\else
- % `nofontspec' avoids errors like `The font "FangSong" cannot be found'.
- % `defaultsups' prevents newtxtext from manipulating footnote marks.
- \usepackage[nofontspec, defaultsups]{newtxtext}
- \usepackage[varg]{newtxmath}
+ \RequirePackage{textcomp, mathptmx, latexsym}
+ \RequirePackage[scaled = 0.95]{helvet}
\fi
\else
- % Provides `\Box' for originauth.tex if XITSMath/newtx is absent.
+ % Provides `\Box' for originauth.tex if unicode-math is absent.
\RequirePackage{latexsym}
\fi
@@ -133,9 +132,9 @@
% Circled text, cf. <https://tex.stackexchange.com/questions/7032/>.
\RequirePackage{tikz}
\newcommand*{\thss@int@circled}[1]{%
- \scalebox{0.8}{\tikz[baseline = (char.base)]{
+ \scalebox{0.8}{\tikz[baseline = {([yshift = -0.1\ccwd] char.base)}]{
\node[
- shape = circle, draw = black, minimum size = 1.25em, inner sep = 0pt
+ shape = circle, draw = black, minimum size = 1.25\ccwd, inner sep = 0pt
] (char) {#1};
}}%
}
@@ -144,10 +143,9 @@
\renewcommand*{\thefootnote}%
{\protect\thss@int@circled{\arabic{footnote}}}
% Provides utility to modify footnote spacing.
- % Option used to make sure it does not render interleaf pages totally blank.
- \RequirePackage[cleardoublepage = current]{scrextend}
- % Set up footnote spacing: whole paragraph indent 2 ccwd, 0.5 ccwd after mark.
- \deffootnote{2\ccwd}{0pt}{\thefootnotemark\hspace{0.5\ccwd}}
+ \RequirePackage{scrextend}
+ % Set up footnote spacing: whole paragraph indent 1.5 ccwd, 0.5 ccwd after mark.
+ \deffootnote{1.5\ccwd}{0pt}{\thefootnotemark\hspace{0.5\ccwd}}
\fi
\ifthss@opt@pkuspace
diff --git a/macros/latex/contrib/pkuthss/tex/pkuthss.def b/macros/latex/contrib/pkuthss/tex/pkuthss.def
index 80239cf01c..c4b2681745 100644
--- a/macros/latex/contrib/pkuthss/tex/pkuthss.def
+++ b/macros/latex/contrib/pkuthss/tex/pkuthss.def
@@ -23,7 +23,7 @@
% pkuword.eps
\ProvidesFile{pkuthss.def}
- [2022/05/05 v1.9.2 Labels and captions for the pkuthss document class]
+ [2022/10/30 v1.9.3 Labels and captions for the pkuthss document class]
\def\label@ementor{Directed by\ }
\def\euniversity{Peking University}
diff --git a/macros/latex/contrib/pkuthss/tex/pkuword.pdf b/macros/latex/contrib/pkuthss/tex/pkuword.pdf
index 8021172ab7..e608ef5def 100644
--- a/macros/latex/contrib/pkuthss/tex/pkuword.pdf
+++ b/macros/latex/contrib/pkuthss/tex/pkuword.pdf
Binary files differ
diff --git a/macros/luatex/latex/luaoptions/Contributors.md b/macros/luatex/latex/luaoptions/Contributors.md
new file mode 100644
index 0000000000..ab09dc720d
--- /dev/null
+++ b/macros/luatex/latex/luaoptions/Contributors.md
@@ -0,0 +1,6 @@
+## Authors
+
+Luaoptions is developped by:
+
+- [Fr. Jacques Peron](mailto:cataclop@hotmail.com); [@jperon](https://github.com/jperon)
+- [Urs Liska](mailto:git@ursliska.de); [@uliska](https://github.com/uliska), [@openlilylib](https://github.com/openlilylib)
diff --git a/macros/luatex/latex/luaoptions/LICENSE b/macros/luatex/latex/luaoptions/LICENSE
new file mode 100644
index 0000000000..479e0ec593
--- /dev/null
+++ b/macros/luatex/latex/luaoptions/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015--2022 the lualatex-tools Project
+
+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/luatex/latex/luaoptions/README.md b/macros/luatex/latex/luaoptions/README.md
new file mode 100644
index 0000000000..19ad0c6770
--- /dev/null
+++ b/macros/luatex/latex/luaoptions/README.md
@@ -0,0 +1,15 @@
+Main author: [Fr. Jacques Peron](mailto:cataclop@hotmail.com)\nThis material is subject to the MIT license.\n
+# `luaoptions`
+Option handling for LuaLaTeX packages
+
+This package has been extracted from
+[`lyluatex`](https://github.com/jperon/lyluatex) where it was originally
+developed as supporting functionality. However, as it turned out it is useful
+as a building block for LuaLaTeX packages in general, and the development of
+[`luaformatters`](https://github.com/lualatex-tools/luaformatters) made it
+clear that the option handling code had to be moved to a standalone package.
+
+Initially there is no extensive documentation available since the package wasn't
+originally intended to be exposed to third-party packages or even end-users;
+the best sources of documentation are `lyluatex` and `luaformatters` codes,
+and the docstrings of `luaoptions.lua` and `luaoptions-lib.lua`.
diff --git a/macros/luatex/latex/luaoptions/latexmkrc b/macros/luatex/latex/luaoptions/latexmkrc
new file mode 100644
index 0000000000..d654412169
--- /dev/null
+++ b/macros/luatex/latex/luaoptions/latexmkrc
@@ -0,0 +1,2 @@
+$pdf_mode="1";
+$pdflatex="lualatex --shell-escape %O %S";
diff --git a/support/lyluatex/lyluatex-lib.lua b/macros/luatex/latex/luaoptions/luaoptions-lib.lua
index ebe6745eb5..4f797da12e 100644
--- a/support/lyluatex/lyluatex-lib.lua
+++ b/macros/luatex/latex/luaoptions/luaoptions-lib.lua
@@ -1,11 +1,11 @@
-- luacheck: ignore ly log self luatexbase internalversion font fonts tex token kpse status
local err, warn, info, log = luatexbase.provides_module({
- name = "lyluatex-lib",
- version = '1.0f', --LYLUATEX_VERSION
- date = "2019/05/27", --LYLUATEX_DATE
- description = "Module lyluatex-lib.",
- author = "The Gregorio Project − (see Contributors.md)",
- copyright = "2015-2019 - jperon and others",
+ name = "luaoptions-lib",
+ version = '0.8', --LUAOPTIONS_VERSION
+ date = "2022/10/30", --LUAOPTIONS_DATE
+ description = "Module luaoptions-lib.",
+ author = "The lualatex-tools Project",
+ copyright = "2015-2022 - the lualatex-tools Project",
license = "MIT",
})
@@ -62,6 +62,14 @@ function lib.convert_unit(value)
end
+function lib.current_font_size()
+--[[
+ Convenience function to return the font size of the current font
+--]]
+ return lib.fontinfo(font.current()).size
+end
+
+
function lib.dirname(str)
--[[
Given the full path to a file, return only the path (without file name),
@@ -76,7 +84,7 @@ function lib.fontinfo(id)
--[[
Return a LuaTeX font object based on the given ID
--]]
- return fontdata[id] or font.fonts[id]
+ return fontdata[id] or font.getfont(id)
end
@@ -102,12 +110,18 @@ function lib.mkdirs(str)
end
-function lib.orderedpairs(t)
- local key
- local i = 0
+function lib.orderedkeys(t)
local orderedIndex = {}
for k in pairs(t) do table.insert(orderedIndex, k) end
table.sort(orderedIndex)
+ return orderedIndex
+end
+
+
+function lib.orderedpairs(t)
+ local key
+ local i = 0
+ local orderedIndex = lib.orderedkeys(t)
return function ()
i = i + 1
key = orderedIndex[i]
@@ -116,6 +130,53 @@ function lib.orderedpairs(t)
end
+function lib.print_table(t, indent)
+-- Recursively print a table, avoiding recursion loops
+ indent = indent or ' '
+ local visited = {}
+ local skips = 0
+
+ local function _print_table(_t, _ind)
+ local keys = lib.orderedkeys(_t)
+ local display_keys = {}
+ local length = 0
+ for key, _ in pairs(_t) do
+ length = lib.max(length, #tostring(key))
+ end
+ for key, _ in pairs(_t) do
+ display_key = tostring(key)
+ display_keys[key] = display_key .. string.rep(
+ ' ', length - #display_key)
+ end
+ for k, v in lib.orderedpairs(_t) do
+ if type(v) == 'table' then
+ if visited[v] then
+ skips = skips + 1
+ else
+ visited[v] = true
+ print(_ind..display_keys[k], v)
+ if #_ind > 40 then err("k") end
+ _print_table(v, _ind..indent)
+ end
+ else
+ if v == '' then v = '(empty string)' end
+ print(_ind..display_keys[k], v)
+ end
+ end
+ end
+
+ print()
+ visited[t] = true
+ print("Print table:", t)
+ _print_table(t, indent)
+ print()
+ if skips > 0 then
+ print(string.format('%s recursive tables skipped', skips))
+ end
+ print("============")
+ print()
+end
+
function lib.readlinematching(s, f)
if f then
local result = ''
@@ -139,6 +200,22 @@ end
------------------------------------
-- Engine, version, TeX distribution
+local function _loaded(ext)
+--[[
+ Returns a function that checks whether a class or a package is loaded
+ https://tex.stackexchange.com/questions/501635/
+--]]
+ local fmt = "ver@%s." .. ext
+ return function(name)
+ local macro = token.get_macro(fmt:format(name))
+ return macro ~= nil
+ end
+end
+
+-- Lua implementations of \@ifpackageloaded and \@ifclassloaded
+lib.class_loaded = _loaded('cls')
+lib.package_loaded = _loaded('sty')
+
local tex_engine = {}
setmetatable(tex_engine, tex_engine)
diff --git a/support/lyluatex/lyluatex-options.lua b/macros/luatex/latex/luaoptions/luaoptions.lua
index 62ec72a3c3..16f25150bf 100644
--- a/support/lyluatex/lyluatex-options.lua
+++ b/macros/luatex/latex/luaoptions/luaoptions.lua
@@ -1,11 +1,11 @@
-- luacheck: ignore ly warn info log self luatexbase internalversion font fonts tex token kpse status
local err, warn, info, log = luatexbase.provides_module({
- name = "lyluatex-options",
- version = '1.0f', --LYLUATEX_VERSION
- date = "2019/05/27", --LYLUATEX_DATE
- description = "Module lyluatex-options.",
- author = "The Gregorio Project − (see Contributors.md)",
- copyright = "2015-2019 - jperon and others",
+ name = "luaoptions",
+ version = '0.8', --LUAOPTIONS_VERSION
+ date = "2022/10/30", --LUAOPTIONS_DATE
+ description = "Module luaoptions.",
+ author = "The lualatex-tools Project",
+ copyright = "2015-2022 - the lualatex-tools Project",
license = "MIT",
})
@@ -18,21 +18,17 @@ local err, warn, info, log = luatexbase.provides_module({
-- ]]
-local lib = require(kpse.find_file("lyluatex-lib.lua") or "lyluatex-lib.lua")
+local lib = require(kpse.find_file("luaoptions-lib.lua") or "luaoptions-lib.lua")
local optlib = {} -- namespace for the returned table
local Opts = {options = {}} -- Options class
Opts.__index = function (self, k) return self.options[k] or rawget(Opts, k) end
setmetatable(Opts, Opts)
+local clients = {}
-
-function Opts:new(opt_prefix, declarations)
+function Opts:new(declarations)
--[[
- Declare package options along with their default and
- accepted values. To *some* extent also provide type checking.
- - opt_prefix: the prefix/name by which the lyluatex-options module is
- referenced in the parent LaTeX document (preamble or package).
- This is required to write the code calling optlib.set_option into
- the option declaration.
+ Declare an options object along with default and accepted values.
+ To *some* extent also provide type checking.
- declarations: a definition table stored in the calling module (see below)
Each entry in the 'declarations' table represents one package option, with each
value being an array (table with integer indexes instead of keys). For
@@ -45,19 +41,9 @@ function Opts:new(opt_prefix, declarations)
},
self
)
- local exopt = ''
for k, v in pairs(declarations) do
o.options[k] = v[1] or ''
- tex.sprint(string.format([[
-\DeclareOptionX{%s}{\directlua{
- %s:set_option('%s', '\luatexluaescapestring{#1}')
-}}%%
-]],
- k, opt_prefix, k
- ))
- exopt = exopt..k..'='..(v[1] or '')..','
end
- tex.sprint([[\ExecuteOptionsX{]]..exopt..[[}%%]], [[\ProcessOptionsX]])
return o
end
@@ -92,6 +78,13 @@ function Opts:check_local_options(opts, ignore_declarations)
return options
end
+function Opts:has_option(name)
+--[[
+ Returns true if the given option is declared
+--]]
+ return self.declarations[name] ~= nil
+end
+
function Opts:is_neg(k)
--[[
Type check for a 'negative' option. This is an existing option
@@ -144,6 +137,20 @@ function Opts:set_option(k, v)
end
end
+function Opts:use_option(key)
+--[[
+ Call an option and write its value to the TeX space.
+ This is a shorthand for accessing options from the TeX side
+ (rather than having to write tex.print(XX_opts.some_options))
+--]]
+ local option = self.options[key]
+ if option then
+ tex.print(option:explode('\n'))
+ else
+ err(string.format("Trying to access non-existent option %s", key))
+ end
+end
+
function Opts:validate_option(key, options_obj)
--[[
Validate an (already sanitized) option against its expected values.
@@ -261,6 +268,62 @@ function optlib.merge_options(base_opt, super_opt)
return result
end
+function optlib.register(client_name, declarations)
+--[[
+ Register a client as package options.
+ - Create a new Opts object,
+ - initialize it,
+ - store it in a global variable <client_name>_opts,
+ - write the code to handle the package options.
+--]]
+ local o = Opts:new(declarations)
+ local exopt = ''
+ for k, v in pairs(declarations) do
+ tex.sprint(string.format([[
+\DeclareOptionX{%s}{\setluaoption{%s}{%s}{#1}}%%
+]],
+ k, client_name, k
+ ))
+ exopt = exopt..k..'='..(v[1] or '')..','
+ end
+ clients[client_name] = o
+ tex.sprint([[\ExecuteOptionsX{]]..exopt..[[}%%]], [[\ProcessOptionsX]])
+end
+
+function optlib.client(name)
+--[[
+ Return the FormattersTable instance registered with the given client name.
+ Return 'nil' if no client is found.
+--]]
+ return clients[name]
+end
+
+function optlib.get_option(client_name, k)
+--[[
+ Get an option's value from a registered client.
+ Raises an error if the client hasn't been registered.
+--]]
+ local client = optlib.client(client_name)
+ return client.options[k]
+end
+
+function optlib.set_option(client_name, k, v)
+--[[
+ Set an option.
+ Look up a registered client and set an option.
+ Produces an error if the client hasn't been registered.
+--]]
+ local client = optlib.client(client_name)
+ client:set_option(k, v)
+end
+
+function optlib.use_option(client_name, k)
+--[[
+ Look up an option and write it to LaTex.
+--]]
+ local client = optlib.client(client_name)
+ client:use_option(k)
+end
optlib.Opts = Opts
return optlib
diff --git a/macros/luatex/latex/luaoptions/luaoptions.pdf b/macros/luatex/latex/luaoptions/luaoptions.pdf
new file mode 100644
index 0000000000..3339fbeb63
--- /dev/null
+++ b/macros/luatex/latex/luaoptions/luaoptions.pdf
Binary files differ
diff --git a/macros/luatex/latex/luaoptions/luaoptions.sty b/macros/luatex/latex/luaoptions/luaoptions.sty
new file mode 100644
index 0000000000..559c615ab6
--- /dev/null
+++ b/macros/luatex/latex/luaoptions/luaoptions.sty
@@ -0,0 +1,36 @@
+% luaoptions support package.
+%
+% Copyright (C) 2015-2022 the lualatex-tools Project
+% License: MIT
+% This file is part of luaoptions.
+
+\NeedsTeXFormat{LaTeX2e}%
+\ProvidesPackage{luaoptions}[2022/10/30 v0.8]
+
+% Dependencies
+\RequirePackage{luatexbase}
+\RequirePackage{luaotfload}
+\RequirePackage{xkeyval}
+
+\directlua{
+ lua_options = require(kpse.find_file("luaoptions.lua") or "luaoptions.lua")
+}
+
+% Set an option in a registered client
+\newcommand{\setluaoption}[3]{%
+ \directlua{
+ lua_options.set_option(
+ '\luatexluaescapestring{#1}',
+ '\luatexluaescapestring{#2}',
+ '\luatexluaescapestring{#3}')
+ }
+}
+
+% Use an option and directly write it to LaTeX
+\newcommand{\useluaoption}[2]{%
+ \directlua{
+ lua_options.use_option(
+ '\luatexluaescapestring{#1}',
+ '\luatexluaescapestring{#2}')
+ }%
+}
diff --git a/macros/luatex/latex/luaoptions/luaoptions.tex b/macros/luatex/latex/luaoptions/luaoptions.tex
new file mode 100644
index 0000000000..627583f678
--- /dev/null
+++ b/macros/luatex/latex/luaoptions/luaoptions.tex
@@ -0,0 +1,188 @@
+% Options for packages loaded elsewhere
+\PassOptionsToPackage{unicode}{hyperref}
+\PassOptionsToPackage{hyphens}{url}
+%
+\documentclass[
+]{luaoptionsmanual}
+\usepackage{amsmath,amssymb}
+\usepackage[]{libertine}
+\usepackage{iftex}
+\ifPDFTeX
+ \usepackage[T1]{fontenc}
+ \usepackage[utf8]{inputenc}
+ \usepackage{textcomp} % provide euro and other symbols
+\else % if luatex or xetex
+ \usepackage{unicode-math}
+ \defaultfontfeatures{Scale=MatchLowercase}
+ \defaultfontfeatures[\rmfamily]{Ligatures=TeX,Scale=1}
+\fi
+% Use upquote if available, for straight quotes in verbatim environments
+\IfFileExists{upquote.sty}{\usepackage{upquote}}{}
+\IfFileExists{microtype.sty}{% use microtype if available
+ \usepackage[]{microtype}
+ \UseMicrotypeSet[protrusion]{basicmath} % disable protrusion for tt fonts
+}{}
+\makeatletter
+\@ifundefined{KOMAClassName}{% if non-KOMA class
+ \IfFileExists{parskip.sty}{%
+ \usepackage{parskip}
+ }{% else
+ \setlength{\parindent}{0pt}
+ \setlength{\parskip}{6pt plus 2pt minus 1pt}}
+}{% if KOMA class
+ \KOMAoptions{parskip=half}}
+\makeatother
+\usepackage{xcolor}
+\IfFileExists{xurl.sty}{\usepackage{xurl}}{} % add URL line breaks if available
+\IfFileExists{bookmark.sty}{\usepackage{bookmark}}{\usepackage{hyperref}}
+\hypersetup{
+ pdfauthor={Fr.~Jacques Peron; Urs Liska},
+ hidelinks,
+ pdfcreator={LaTeX via pandoc}}
+\urlstyle{same} % disable monospaced font for URLs
+\usepackage{color}
+\usepackage{fancyvrb}
+\newcommand{\VerbBar}{|}
+\newcommand{\VERB}{\Verb[commandchars=\\\{\}]}
+\DefineVerbatimEnvironment{Highlighting}{Verbatim}{commandchars=\\\{\}}
+% Add ',fontsize=\small' for more characters per line
+\newenvironment{Shaded}{}{}
+\newcommand{\AlertTok}[1]{\textcolor[rgb]{1.00,0.00,0.00}{\textbf{#1}}}
+\newcommand{\AnnotationTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{#1}}}}
+\newcommand{\AttributeTok}[1]{\textcolor[rgb]{0.49,0.56,0.16}{#1}}
+\newcommand{\BaseNTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{#1}}
+\newcommand{\BuiltInTok}[1]{\textcolor[rgb]{0.00,0.50,0.00}{#1}}
+\newcommand{\CharTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{#1}}
+\newcommand{\CommentTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textit{#1}}}
+\newcommand{\CommentVarTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{#1}}}}
+\newcommand{\ConstantTok}[1]{\textcolor[rgb]{0.53,0.00,0.00}{#1}}
+\newcommand{\ControlFlowTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{\textbf{#1}}}
+\newcommand{\DataTypeTok}[1]{\textcolor[rgb]{0.56,0.13,0.00}{#1}}
+\newcommand{\DecValTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{#1}}
+\newcommand{\DocumentationTok}[1]{\textcolor[rgb]{0.73,0.13,0.13}{\textit{#1}}}
+\newcommand{\ErrorTok}[1]{\textcolor[rgb]{1.00,0.00,0.00}{\textbf{#1}}}
+\newcommand{\ExtensionTok}[1]{#1}
+\newcommand{\FloatTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{#1}}
+\newcommand{\FunctionTok}[1]{\textcolor[rgb]{0.02,0.16,0.49}{#1}}
+\newcommand{\ImportTok}[1]{\textcolor[rgb]{0.00,0.50,0.00}{\textbf{#1}}}
+\newcommand{\InformationTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{#1}}}}
+\newcommand{\KeywordTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{\textbf{#1}}}
+\newcommand{\NormalTok}[1]{#1}
+\newcommand{\OperatorTok}[1]{\textcolor[rgb]{0.40,0.40,0.40}{#1}}
+\newcommand{\OtherTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{#1}}
+\newcommand{\PreprocessorTok}[1]{\textcolor[rgb]{0.74,0.48,0.00}{#1}}
+\newcommand{\RegionMarkerTok}[1]{#1}
+\newcommand{\SpecialCharTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{#1}}
+\newcommand{\SpecialStringTok}[1]{\textcolor[rgb]{0.73,0.40,0.53}{#1}}
+\newcommand{\StringTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{#1}}
+\newcommand{\VariableTok}[1]{\textcolor[rgb]{0.10,0.09,0.49}{#1}}
+\newcommand{\VerbatimStringTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{#1}}
+\newcommand{\WarningTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{#1}}}}
+\setlength{\emergencystretch}{3em} % prevent overfull lines
+\providecommand{\tightlist}{%
+ \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}}
+\setcounter{secnumdepth}{-\maxdimen} % remove section numbering
+\ifLuaTeX
+ \usepackage{selnolig} % disable illegal ligatures
+\fi
+
+\title{\texttt{luaoptions}}
+\usepackage{etoolbox}
+\makeatletter
+\providecommand{\subtitle}[1]{% add subtitle to \maketitle
+ \apptocmd{\@title}{\par {\large #1 \par}}{}{}
+}
+\makeatother
+\subtitle{0.8}
+\author{Fr.~Jacques Peron \and Urs Liska}
+\date{\luaoptionsmanualdate}
+
+\begin{document}
+\maketitle
+
+\thispagestyle{empty}
+\enlargethispage*{3\baselineskip}
+
+\hypertarget{introduction}{%
+\section{Introduction}\label{introduction}}
+
+\texttt{luaoptions} is a LuaLaTeX package providing extensive support
+for handling \emph{options}, on package level and locally. It is hosted
+at \url{https://github.com/lualatex-tools/luaoptions} and maintained by
+Jacques Peron
+(\href{mailto:cataclop@hotmail.com}{\nolinkurl{cataclop@hotmail.com}})
+and Urs Liska
+(\href{mailto:git@ursliska.de}{\nolinkurl{git@ursliska.de}}). The
+package was originally developed as part of the \texttt{lyluatex}
+package\footnote{\url{https://github.com/jperon/lyluatex}} but has now
+been extracted as a standalone package because we realized it can be a
+useful tool for arbitrary LuaLaTeX packages having to deal with
+\emph{options} -- both \emph{package options} and \emph{optional macro
+arguments}. A \texttt{lyluatex} installation should not be a dependency
+for packages that want to make use of option handling but are not
+interested in music engraving \dots
+
+\texttt{luaoptions} allows the declaration of sets of options, along
+with defaults, expected/allowed values and limited type checking. These
+options can be enforced as package options, changed at any point during
+a document, or overwritten locally by optional macro arguments. It is
+also possible to instantiate an \texttt{Options} object as an
+independent Lua object, without linking it to a package.
+\texttt{luaoptions} can be used to enforce and prepopulate options, or
+it can be used to simply handle the parsing of optional
+\texttt{key=value} arguments into proper Lua tables.
+
+The main use of \texttt{luaoptions} is to define package options as
+follows:
+
+\begin{Shaded}
+\begin{Highlighting}[]
+\FunctionTok{\textbackslash{}RequirePackage}\NormalTok{\{luaoptions\}}
+\FunctionTok{\textbackslash{}directlua}\NormalTok{\{}
+\NormalTok{ local \_opt = lua\_options}
+\NormalTok{ lua\_options.register(\textquotesingle{}myoptions\textquotesingle{}, \{}
+\NormalTok{ [\textquotesingle{}option\textquotesingle{}] = \{\textquotesingle{}default value\textquotesingle{}, \textquotesingle{}other value\textquotesingle{}, \textquotesingle{}\textquotesingle{}\},}
+\NormalTok{ [\textquotesingle{}otheroption\textquotesingle{}] = \{\textquotesingle{}default\textquotesingle{}, validator\},}
+\NormalTok{ [\textquotesingle{}yetanotheroptions\textquotesingle{}] = \{\},}
+\NormalTok{ \})}
+\NormalTok{\}}
+\end{Highlighting}
+\end{Shaded}
+
+\texttt{validator} is a function that returns \texttt{true} when the
+defined option is valid, \texttt{false} otherwise. \texttt{luaoptions}
+itself contains predefined such functions.
+
+After that, defined options are available in a lua table, which can be
+used by the mean of the \texttt{client} command:
+
+\begin{Shaded}
+\begin{Highlighting}[]
+\KeywordTok{local}\NormalTok{ myopts }\OperatorTok{=}\NormalTok{ lua\_options}\OperatorTok{.}\NormalTok{client}\OperatorTok{(}\StringTok{\textquotesingle{}myoptions\textquotesingle{}}\OperatorTok{)}
+\NormalTok{tex}\OperatorTok{.}\NormalTok{sprint}\OperatorTok{(}\NormalTok{myopts}\OperatorTok{.}\NormalTok{option}\OperatorTok{)}
+\end{Highlighting}
+\end{Shaded}
+
+This initial release does \emph{not} include documentation beyond this
+short introduction; please refer to the docstrings in
+\texttt{luaoptions.lua} and \texttt{luaoptions-lib.lua} for more
+information.
+
+For the time being it is possible to look into how some of our own
+packages make use of \texttt{luaoptions}:
+
+\begin{itemize}
+\tightlist
+\item
+ \url{https://github.com/jperon/lyluatex/blob/master/lyluatextools.sty}
+\item
+ \url{https://github.com/jperon/lyluatex/blob/master/lyluatex.lua}
+\item
+ \url{https://github.com/lualatex-tools/luaformatters/blob/master/luaformatters.sty}
+\item
+ \url{https://github.com/lualatex-tools/luaformatters/blob/master/luaformatters.lua}
+\item
+ \url{https://github.com/lualatex-tools/luaformatters/blob/master/submodules/luaformatters-formatter.lua}
+\end{itemize}
+
+\end{document}
diff --git a/macros/luatex/latex/luaoptions/luaoptionsbase.cls b/macros/luatex/latex/luaoptions/luaoptionsbase.cls
new file mode 100644
index 0000000000..3f2ac5726e
--- /dev/null
+++ b/macros/luatex/latex/luaoptions/luaoptionsbase.cls
@@ -0,0 +1,37 @@
+%Luaoptions LaTeX class.
+%
+% Copyright (C) 2015-2022 the lualatex-tools Project
+% License: MIT
+% This file is part of lualatex-tools.
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesClass{luaoptionsbase}[2022/10/30 v0.8] %%LUAOPTIONS_DATE LUAOPTIONS_VERSION
+
+\LoadClass[DIV=11]{scrartcl}
+\RequirePackage{blindtext}
+\RequirePackage{libertine}
+\RequirePackage{listings}
+\RequirePackage{minted}
+\RequirePackage{pgffor}
+\RequirePackage{fancyvrb}
+\RequirePackage[colorlinks=true]{hyperref}
+
+
+% Common formatting elements for manual and examples
+\usepackage{xcolor}
+\newcommand{\highlight}[1]{\textcolor{blue}{#1}}
+\newcommand{\cmd}[1]{\highlight{\texttt{\textbackslash #1}}}
+\newcommand{\option}[1]{\highlight{\texttt{#1}}}
+\newcommand{\lyMargin}[1]{%
+
+\medskip
+\hspace*{-1em}%
+\noindent%
+\highlight{#1}
+\nopagebreak
+}
+
+\newcommand{\lyOption}[2]{\lyMargin{\texttt{#1} {\small \emph{(#2)}}\index{#1}}}
+\newcommand{\lyCmd}[1]{%
+\lyMargin{\texttt{\textbackslash #1}\index{\textbackslash #1}}}
+\newcommand{\lyIssue}[1]{\lyMargin{\textbf{\textcolor{red}{#1}}}}
diff --git a/macros/luatex/latex/luaoptions/luaoptionsmanual.cls b/macros/luatex/latex/luaoptions/luaoptionsmanual.cls
new file mode 100644
index 0000000000..5de9da32b6
--- /dev/null
+++ b/macros/luatex/latex/luaoptions/luaoptionsmanual.cls
@@ -0,0 +1,41 @@
+%Luaoptions LaTeX class for the manual.
+%
+% Copyright (C) 2015-2022 the lualatex-tools Project
+% License: MIT
+% This file is part of luaoptions.
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesClass{luaoptionsmanual}[2022/10/30 v0.8] %%LUAOPTIONS_DATE LUAOPTIONS_VERSION
+
+\LoadClass{luaoptionsbase}
+
+\RequirePackage{fontspec}
+\RequirePackage{microtype}
+\RequirePackage{libertine}
+\setmonofont[Scale=MatchLowercase,StylisticSet=1]{InconsolataN}
+\defaultfontfeatures{
+ Ligatures=TeX,
+ Scale=MatchLowercase,
+ Numbers=Proportional,
+ Numbers=OldStyle
+}
+\frenchspacing
+
+\RequirePackage{makeidx}
+\makeindex
+
+\newcommand{\linkexample}[2]{
+ \addcontentsline{toc}{subsection}{#2}
+ \hypertarget{#1}{}
+}
+
+
+\newcommand{\luaoptionsmanualdate}{
+ \directlua{
+ local PC = string.char(37)
+ local date_fmt = PC..'Y-'..PC..'m-'..PC..'d'
+ local p = io.popen('git log -n1 --date=short --format='..PC..'"ad"', 'r')
+ tex.sprint(p and p:read('*a'):sub(1,-2) or os.date(date_fmt))
+ if p then p:close() end
+ }
+}
diff --git a/macros/unicodetex/latex/bithesis/bithesis.dtx b/macros/unicodetex/latex/bithesis/bithesis.dtx
index 1038cef364..1a99ce1238 100644
--- a/macros/unicodetex/latex/bithesis/bithesis.dtx
+++ b/macros/unicodetex/latex/bithesis/bithesis.dtx
@@ -21,7 +21,7 @@
%<thesis>\ProvidesExplClass{bithesis}
%<report>\ProvidesExplClass{bitreport}
%<beamer>\ProvidesExplClass{bitbeamer}
-%<cls>{2022-10-23}{3.1.0}{BIT Thesis Templates}
+%<cls>{2022-10-29}{3.1.1}{BIT Thesis Templates}
%
%<oldcls>\NeedsTeXFormat{LaTeX2e}[2020/10/01]
%<book>\ProvidesClass{bitbook}
@@ -30,7 +30,7 @@
%<oldcls> [2022/05/09 v2.1.1 BIT Thesis Templates]
%
%<*driver>
-\ProvidesFile{bithesis.dtx}[2022/10/23 3.1.0 BIT Thesis Templates]
+\ProvidesFile{bithesis.dtx}[2022/10/29 3.1.1 BIT Thesis Templates]
\documentclass[letterpaper]{l3doc}
\usepackage{dtx-style}
@@ -1254,7 +1254,7 @@
% 攻读学ä½æœŸé—´å‘表论文与研究æˆæžœæ¸…å•ã€‚
% \end{function}
%
-% \begin{function}{\addpubs,\addpub}
+% \begin{function}[added=2022-10-23]{\addpubs,\addpub}
% \begin{bitsyntax}[emph={[1]publications,addpubs,addpub}]
% \begin{publications}
% \addpub{\meta{å•æ¡å¼•ç”¨å†…容的key}}
@@ -1266,7 +1266,7 @@
% 用于添加个人æˆæžœï¼Œæ·»åŠ è¿‡çš„æˆæžœå¯ä»¥é€šè¿‡ |printbibliography| 打å°ã€‚
% \end{function}
%
-% \begin{function}{\pubsection}
+% \begin{function}[added=2022-10-23]{\pubsection}
% \begin{bitsyntax}[emph={[1]publications,pubsection,printbibliography}]
% \begin{publications}
% \addpubs{\meta{引用内容的key},\meta{引用内容的key2}}
@@ -1283,7 +1283,7 @@
% 用于添加分类的目录。
% \end{function}
%
-% \begin{function}{\Author,\AuthorEn}
+% \begin{function}[added=2022-10-23]{\Author,\AuthorEn}
% \begin{bitsyntax}[emph={[1]Author}]
% \Author[<n(表示第几作者,默认为 1)>][<覆盖普通模å¼ä¸‹å†…容>][<覆盖盲审模å¼ä¸‹å†…容>]
% \end{bitsyntax}
@@ -1317,6 +1317,22 @@
% 个人简介。
% \end{function}
%
+% \section{常è§é—®é¢˜å’Œç–‘难解答}
+%
+% \subsection{如何修改数学公å¼çš„字体?}
+%
+% 本项目已ç»ä½¿ç”¨ \pkg{unicode-math} å®åŒ…,
+% å¯ä»¥åœ¨å¯¼è¨€åŒºä½¿ç”¨ |\setmathfont{XITS Math}| 修改数学环境下字体:
+%
+% \begin{latex}
+% \unimathsetup{bold-style=ISO}
+% \setmathfont{XITS Math}
+% \end{latex}
+%
+% \textit{请事先安装 XITS 字体。}
+%
+% \textit{更多字体与使用方法请å‚考 \url{https://ctan.org/pkg/unicode-math?lang=zh}。}
+%
% \section{\cls{bitreport.cls} 使用与é…ç½®}
% \label{sec:bitreport}
%
@@ -2198,12 +2214,14 @@
\RequirePackage{multirow}
\RequirePackage{tikz}
\RequirePackage{etoolbox}
-\RequirePackage{hyperref}
+% Hide color and border in hyperref.
+\RequirePackage[hidelinks]{hyperref}
\RequirePackage{xcolor}
\RequirePackage{caption}
\RequirePackage{array}
\RequirePackage{amsmath}
\RequirePackage{amssymb}
+\RequirePackage{pifont}
\RequirePackage{amsthm}
\RequirePackage{unicode-math}
\RequirePackage{pdfpages}
@@ -2257,13 +2275,17 @@
}
% \end{macrocode}
%
-% æ ¹æ®å­¦æ ¡çš„è¦æ±‚,在图片å‰åŽåŠ ä¸Šä¸€è¡Œç©ºç™½ã€‚
+% æ ¹æ®å­¦æ ¡çš„è¦æ±‚,在本科生模æ¿å›¾ç‰‡å‰åŽåŠ ä¸Šä¸€è¡Œç©ºç™½ã€‚
% \begin{macrocode}
-\setlength{\intextsep}{2\baselineskip plus 0.2\baselineskip minus 0.2\baselineskip}
+\@@_if_bachelor_thesis:T {
+ \setlength{\intextsep}{2\baselineskip plus 0.2\baselineskip minus 0.2\baselineskip}
+}
% \end{macrocode}
%
% 设置 Times New Roman 字体。
+% æ ¹æ®å­¦æ ¡è§„范è¦æ±‚,默认情况下也使用 Times New Roman 字体。
% \begin{macrocode}
+\setmainfont{Times~New~Roman}
\setromanfont{Times~New~Roman}
% \end{macrocode}
%
@@ -3060,6 +3082,14 @@
% \end{macrocode}
% \end{macro}
%
+% \begin{macro}{\BigStar}
+% æ供密级选项中需è¦çš„五角星,在普通环境中使用。
+% \begin{macrocode}
+\DeclareDocumentCommand \BigStar { }
+ { \ding{72} }
+% \end{macrocode}
+% \end{macro}
+%
% \begin{environment}{blindPeerReview}
% 用于包裹涉åŠä¸ªäººä¿¡æ¯çš„内容。
%
@@ -3830,6 +3860,40 @@
% \end{macrocode}
% \end{macro}
%
+% \begin{macro}{\addpub,\addpubs}
+% 添加一个或多个å‚考文献。
+% \begin{macrocode}
+\NewDocumentCommand \addpub {m} {
+ \nocite{#1}
+ \addtocategory{mypub}{#1}
+}
+
+\NewDocumentCommand \addpubs {m} {
+ % apply a clist
+ \clist_map_function:nN {#1} \addpub
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\pubsection}
+% 设置å°æ ‡é¢˜ã€‚
+% \begin{macrocode}
+\NewDocumentCommand \pubsection {m} {
+ {
+ % 自增计数器
+ \par\stepcounter{pub}
+ % 设置å°æ ‡é¢˜ï¼Œæš‚时没有考虑英文模å¼
+ \noindent
+ \textbf{
+ \heiti{
+ \zhnumber{\thepub}ã€#1
+ }
+ }\par
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
% \begin{environment}{publications}
% 生æˆæ”»è¯»å­¦ä½æœŸé—´å‘表论文与研究æˆæžœæ¸…å•ã€‚
% \begin{macrocode}
@@ -3914,34 +3978,13 @@
}
}
- % 添加一个å‚考文献
- \cs_new:Npn \addpub ##1 {
- \nocite{##1}
- \addtocategory{mypub}{##1}
- }
-
- % 添加多个å‚考文献
- \cs_new:Npn \addpubs ##1 {
- % apply a clist
- \clist_map_function:nN {##1} \addpub
- }
-
- % 设置计数器
- \newcounter{pub}
- % 设置å°æ ‡é¢˜
- \cs_new:Npn \pubsection ##1 {
- {
- % 自增计数器
- \stepcounter{pub}
- % 设置å°æ ‡é¢˜ï¼Œæš‚时没有考虑英文模å¼
- \noindent
- \textbf{
- \heiti{
- \zhnumber{\thepub}ã€##1
- }
- }\par
- }
- }
+ \if_cs_exist:N \c@pub {
+ % é‡ç½®è®¡æ•°å™¨
+ \setcounter{pub}{0}
+ } \else: {
+ % 设置计数器
+ \newcounter{pub}
+ } \fi:
% 设置å‚考文献的排åº
\bool_if:NTF \l_@@_publications_sorting_bool {
diff --git a/macros/unicodetex/latex/bithesis/bithesis.pdf b/macros/unicodetex/latex/bithesis/bithesis.pdf
index 3e80f53288..2ce8119710 100644
--- a/macros/unicodetex/latex/bithesis/bithesis.pdf
+++ b/macros/unicodetex/latex/bithesis/bithesis.pdf
Binary files differ
diff --git a/macros/xetex/latex/xepersian/README b/macros/xetex/latex/xepersian/README
index b1c63bf40b..e37f06cdd3 100644
--- a/macros/xetex/latex/xepersian/README
+++ b/macros/xetex/latex/xepersian/README
@@ -1,6 +1,6 @@
____________________
The XePersian package
-v24.7
+v24.8
The xepersian package provides a convenient interface for
typesetting Persian and English texts in LaTeX, using XeTeX
@@ -25,7 +25,7 @@ The announcements for the new releases of the package will
also appear in the Discussions space under the Announcements
category.
-Current version release date: 2022/07/02
+Current version release date: 2022/10/30
___________________________________________
Vafa Khalighi
diff --git a/macros/xetex/latex/xepersian/xepersian-doc-intro.ltx b/macros/xetex/latex/xepersian/xepersian-doc-intro.ltx
index 1e40958b5d..333d7efb4b 100644
--- a/macros/xetex/latex/xepersian/xepersian-doc-intro.ltx
+++ b/macros/xetex/latex/xepersian/xepersian-doc-intro.ltx
@@ -25,7 +25,7 @@ If you use \textsf{\XePersian} package to write any input \TeX\ document, and th
* Copyright (c) 2008--2022 Vafa Khalighi
* Copyright (c) 2018--2020 bidi-tex GitHub Organization
*
-* v24.7, 2022/07/02
+* v24.8 (Release Women, Life, and Freedom), 2022/10/30
*
* License: LaTeX Project Public License, version
* 1.3c or higher (your choice)
diff --git a/macros/xetex/latex/xepersian/xepersian-doc-title.ltx b/macros/xetex/latex/xepersian/xepersian-doc-title.ltx
index 0d9d2397c5..27ad90198d 100644
--- a/macros/xetex/latex/xepersian/xepersian-doc-title.ltx
+++ b/macros/xetex/latex/xepersian/xepersian-doc-title.ltx
@@ -3,7 +3,7 @@
\begin{document}
\title{\textcolor{blue!65!black}{\Huge The \textsf{\XePersian} \textit{Package}}\\
\LARGE Persian for \LaTeXe, using {\XeTeX} engine\\[5pt]
-\large User documentation for \textcolor{blue!65!black}{version 24.7}}
+\large User documentation for \textcolor{blue!65!black}{version 24.8}}
\author{Vafa Khalighi\thanks{Thanks to the bidi-tex GitHub organization consisted of David Carlisle and other members of the {\LaTeX} team to maintain the package in the period 2018--2020.}}
\setcounter{page}{0}
\thispagestyle{empty}
@@ -13,7 +13,7 @@
\textcolor{blue!65!black}{\Huge The \textsf{\XePersian} \textit{Package}}
\Large
-User documentation for \textcolor{blue!65!black}{version 24.7}}
+User documentation for \textcolor{blue!65!black}{version 24.8}}
\vskip 0pt plus 3fill
\textit{\large to my Master, \textbf{Ferdowsi The Great}}
diff --git a/macros/xetex/latex/xepersian/xepersian-doc.ltx b/macros/xetex/latex/xepersian/xepersian-doc.ltx
index fe47fba51c..6a74c7edc8 100644
--- a/macros/xetex/latex/xepersian/xepersian-doc.ltx
+++ b/macros/xetex/latex/xepersian/xepersian-doc.ltx
@@ -1,7 +1,7 @@
\documentclass{ltxdoc}
\input{xepersian-doc-preamble.ltx}
\hypersetup{%
- pdftitle={User documentation for version 24.7 of the XePersian
+ pdftitle={User documentation for version 24.8 of the XePersian
package}%
}
\begin{document}
diff --git a/macros/xetex/latex/xepersian/xepersian-doc.pdf b/macros/xetex/latex/xepersian/xepersian-doc.pdf
index 0ea9d4988c..49b3ee1d15 100644
--- a/macros/xetex/latex/xepersian/xepersian-doc.pdf
+++ b/macros/xetex/latex/xepersian/xepersian-doc.pdf
Binary files differ
diff --git a/macros/xetex/latex/xepersian/xepersian.dtx b/macros/xetex/latex/xepersian/xepersian.dtx
index bb454e519c..b9a707a4f9 100644
--- a/macros/xetex/latex/xepersian/xepersian.dtx
+++ b/macros/xetex/latex/xepersian/xepersian.dtx
@@ -5,7 +5,7 @@
%<*readme>
____________________
The XePersian package
-v24.7
+v24.8
The xepersian package provides a convenient interface for
typesetting Persian and English texts in LaTeX, using XeTeX
@@ -31,7 +31,7 @@ also appear in the Discussions space under the Announcements
category.
-Current version release date: 2022/07/02
+Current version release date: 2022/10/30
___________________________________________
Vafa Khalighi
@@ -168,7 +168,7 @@ by Vafa Khalighi.
\documentclass{ltxdoc}
\input{xepersian-doc-preamble.ltx}
\hypersetup{%
- pdftitle={Source documentation for version 24.7 of the XePersian
+ pdftitle={Source documentation for version 24.8 of the XePersian
package}%
}
\EnableCrossrefs
@@ -187,7 +187,7 @@ by Vafa Khalighi.
% \GetFileInfo{\jobname.dtx}
% \title{\textcolor{blue!65!black}{\Huge The \textsf{\XePersian} \textit{Package}}\\
%\LARGE Persian for \LaTeXe, using {\XeTeX} engine\\[5pt]
-%\large Source documentation for \textcolor{blue!65!black}{version 24.7}}
+%\large Source documentation for \textcolor{blue!65!black}{version 24.8}}
% \author{Vafa Khalighi\thanks{Thanks to the bidi-tex GitHub organization consisted of David Carlisle and other members of the {\LaTeX} team to maintain the package in the period 2018--2020.}}
%\setcounter{page}{0}
%\thispagestyle{empty}
@@ -197,7 +197,7 @@ by Vafa Khalighi.
%\textcolor{blue!65!black}{\Huge The \textsf{\XePersian} \textit{Package}}
%
%\Large
-%Source documentation for \textcolor{blue!65!black}{version 24.7}}
+%Source documentation for \textcolor{blue!65!black}{version 24.8}}
%
%\vskip 0pt plus 3fill
%\textit{\large to my Master, \textbf{Ferdowsi The Great}}
@@ -245,7 +245,7 @@ by Vafa Khalighi.
%\iffalse
%<*table>
%\fi
-%% \CheckSum{11173}
+%% \CheckSum{11192}
%% \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
%% Lower-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
@@ -2021,7 +2021,7 @@ by Vafa Khalighi.
%\fi
% \section{File \texttt{hyperref-xepersian.def}}
% \begin{macrocode}
-\ProvidesFile{hyperref-xepersian.def}[2022/06/10 v0.7 xepersian adaptations for hyperref package]
+\ProvidesFile{hyperref-xepersian.def}[2022/10/30 v0.8 xepersian adaptations for hyperref package]
\def\equationautorefname{\if@RTL معادله\else Equation\fi}%
\def\footnoteautorefname{\if@RTL زیرنویس\else footnote\fi}%
\def\itemautorefname{\if@RTL Ùقره\else item\fi}%
@@ -2051,9 +2051,9 @@ by Vafa Khalighi.
}%
\fi
\pdfstringdefDisableCommands{%
-\let\lr\@firstofone
-\let\rl\@firstofone
-\def\XePersian{XePersian}
+ \let\lr\@firstofone
+ \let\rl\@firstofone
+ \def\XePersian{XePersian}%
}
\ltx@IfUndefined{@resets@pp}{%
}{%
@@ -3592,9 +3592,12 @@ U+003E U+003E <> U+00BB ; >> -> RIGHT POINTING GUILLEMET
% \section{File \texttt{xepersian.sty}}
% \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}
-\def\xepersian@version{24.7}
-\def\xepersiandate{2022/07/02}
-\ProvidesPackage{xepersian}[\xepersiandate\space v\xepersian@version\space
+\def\xepersian@version{24.8}
+\def\xepersiandate{2022/10/30}
+\def\xepersian@releasename{Women, Life, and Freedom}
+\def\xepersian@persian@@releasename{زن، زندگی، و آزادی}
+\newcommand*{\xepersianreleasename}{\if@RTL\xepersian@persian@@releasename\else\xepersian@releasename\fi}
+\ProvidesPackage{xepersian}[\xepersiandate\space v\xepersian@version\space (Release \xepersian@releasename)\space
Persian typesetting in XeLaTeX]
\RequirePackage{fontspec}
\RequirePackage{xepersian-persiancal}
@@ -3611,7 +3614,7 @@ Persian typesetting in XeLaTeX]
* Copyright (c) 2008--2022 Vafa Khalighi^^J%
* Copyright (c) 2018--2020 bidi-tex GitHub Organization^^J%
* ^^J%
-* v\xepersian@version, \xepersiandate^^J%
+* v\xepersian@version\space (Release \xepersian@releasename), \xepersiandate^^J%
* ^^J%
* License: LaTeX Project Public License, version^^J%
* 1.3c or higher (your choice)^^J%
@@ -4437,12 +4440,12 @@ Persian typesetting in XeLaTeX]
\textsf{\XePersian}\quad\@bidi@logo{xepersian-logo.pdf}}}
\renewcommand*{\@bidi@pdfcreator}{%
- The xepersian package, v\xepersian@version, \xepersiandate
+ The xepersian package, v\xepersian@version\space (Release \xepersian@releasename), \xepersiandate
}
\newcommand*{\@xepersian@pdfcustomproperties}{%
- This is the xepersian package, Version \xepersian@version,
- Released July 2, 2022.
+ This is the xepersian package, Version \xepersian@version\space (Release \xepersian@releasename),
+ Released October 30, 2022.
}
\newcommand\twocolumnstableofcontents{%
diff --git a/macros/xetex/latex/xepersian/xepersian.pdf b/macros/xetex/latex/xepersian/xepersian.pdf
index a4a8cef342..c61333a7b1 100644
--- a/macros/xetex/latex/xepersian/xepersian.pdf
+++ b/macros/xetex/latex/xepersian/xepersian.pdf
Binary files differ
diff --git a/support/latexindent/LatexIndent/GetYamlSettings.pm b/support/latexindent/LatexIndent/GetYamlSettings.pm
index 96577d28d0..23f5a70d85 100644
--- a/support/latexindent/LatexIndent/GetYamlSettings.pm
+++ b/support/latexindent/LatexIndent/GetYamlSettings.pm
@@ -67,6 +67,9 @@ sub yaml_read_settings {
$logger->info("Reading defaultSettings.yaml from $FindBin::RealBin/defaultSettings.yaml");
my $myLibDir = dirname(__FILE__);
+ my ( $name, $dir, $ext ) = fileparse( $INC{"LatexIndent/GetYamlSettings.pm"}, "pm" );
+ $dir =~ s/\/$//;
+
# if latexindent.exe is invoked from TeXLive, then defaultSettings.yaml won't be in
# the same directory as it; we need to navigate to it
if ( !$defaultSettings ) {
@@ -81,6 +84,9 @@ sub yaml_read_settings {
elsif ( -e "$FindBin::RealBin/LatexIndent/defaultSettings.yaml" ) {
$defaultSettings = YAML::Tiny->read("$FindBin::RealBin/LatexIndent/defaultSettings.yaml");
}
+ elsif ( -e "$dir/defaultSettings.yaml" ) {
+ $defaultSettings = YAML::Tiny->read("$dir/defaultSettings.yaml");
+ }
elsif ( -e "$myLibDir/defaultSettings.yaml" ) {
+$defaultSettings = YAML::Tiny->read("$myLibDir/defaultSettings.yaml");
}
diff --git a/support/latexindent/LatexIndent/Version.pm b/support/latexindent/LatexIndent/Version.pm
index 5c9cd5c2ae..04aaf11759 100644
--- a/support/latexindent/LatexIndent/Version.pm
+++ b/support/latexindent/LatexIndent/Version.pm
@@ -20,6 +20,6 @@ use warnings;
use Exporter qw/import/;
our @EXPORT_OK = qw/$versionNumber $versionDate/;
-our $versionNumber = '3.18';
-our $versionDate = '2022-06-12';
+our $versionNumber = '3.19';
+our $versionDate = '2022-10-30';
1
diff --git a/support/latexindent/README b/support/latexindent/README
index 7a48e5607f..44ef79a17e 100644
--- a/support/latexindent/README
+++ b/support/latexindent/README
@@ -1,5 +1,5 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- latexindent.pl, version 3.18, 2022-06-12
+ latexindent.pl, version 3.19, 2022-10-30
PERL script to indent code within environments, and align delimited
environments in .tex files.
@@ -24,9 +24,14 @@
FOR COMPLETE DETAILS, PLEASE SEE documentation/latexindent.pdf
-Note: latexindent.exe was created using
+Note: The standalone executable files (in the bin directory) are created using commands
+ such as the following:
- perl ppp.pl -u -o latexindent.exe latexindent.pl
+ pp
+ --addfile="defaultSettings.yaml;lib/LatexIndent/defaultSettings.yaml"
+ --cachedeps=scancache
+ --output latexindent-linux
+ latexindent.pl
using the Par::Packer perl module.
@@ -43,15 +48,14 @@ USAGE
* IMPORTANT *
-This script may not work for your style of formatting; I highly
-recommend comparing the outputfile.tex to make sure that
+This script may not work for your style of formatting; I highly
+recommend that when you first use the script you use the `-o` switch
+to output to a separate file; something like
+
+ latexindent.pl myfile.tex -o myfile-output.tex
+
+and then check `myfile-output.tex` carefully to make sure that
nothing has been changed (or removed) in a way that will damage
your file.
-I recommend both using the following:
- - a visual check, at the very least, make sure that
- each file has the same number of lines
- - a check using latexdiff inputfile.tex outputfile.tex
- - git status myfile.tex
-
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/support/latexindent/bin/linux/latexindent b/support/latexindent/bin/linux/latexindent
new file mode 100644
index 0000000000..1533c2587d
--- /dev/null
+++ b/support/latexindent/bin/linux/latexindent
Binary files differ
diff --git a/support/latexindent/bin/macos/latexindent b/support/latexindent/bin/macos/latexindent
new file mode 100644
index 0000000000..3207ce9a2b
--- /dev/null
+++ b/support/latexindent/bin/macos/latexindent
Binary files differ
diff --git a/support/latexindent/defaultSettings.yaml b/support/latexindent/defaultSettings.yaml
index 5f10f499bf..91f6fb9a70 100644
--- a/support/latexindent/defaultSettings.yaml
+++ b/support/latexindent/defaultSettings.yaml
@@ -1,4 +1,4 @@
-# defaultSettings.yaml for latexindent.pl, version 3.18, 2022-06-12
+# defaultSettings.yaml for latexindent.pl, version 3.19, 2022-10-30
# a script that aims to
# beautify .tex, .sty, .cls files
#
diff --git a/support/latexindent/documentation/cmhlistings.tex b/support/latexindent/documentation/cmhlistings.tex
deleted file mode 100644
index 6b8506c344..0000000000
--- a/support/latexindent/documentation/cmhlistings.tex
+++ /dev/null
@@ -1,35 +0,0 @@
-\newcommand{\cmhlistingsfromfile}[4]{
-.. literalinclude:: #1^^J
-^^I:class: .#4^^J
-^^I:caption: #2^^J
-^^I:name: #3^^J
-}
-\newcommand{\cmhlistingsfromfilelines}[4]{
-.. literalinclude:: #1^^J
-^^I:class: .#4^^J
-^^I:caption: #2^^J
-^^I:name: #3^^J
-^^I:linenos:^^J
-}
-\newcommand{\cmhlistingsfromfilefour}[6]{
-.. literalinclude:: #3^^J
-^^I:class: .#6^^J
-^^I:caption: #4^^J
-^^I:name: #5^^J
-^^I:lines: #1-#2^^J
-^^I:linenos:^^J
-^^I:lineno-start: #1^^J
-}
-\newcommand{\cmhlabel}[1]{
-.. \_#1:^^J
-}
-\newcommand{\warning}[1]{
-.. warning::^^J
-#1^^J
-.. endwarning::^^J
-}
-\newcommand{\example}[1]{
-.. proof:example::^^J
-#1^^J
-.. endproof:example::^^J
-}
diff --git a/support/latexindent/documentation/contributors.bib b/support/latexindent/documentation/contributors.bib
new file mode 100644
index 0000000000..4b7af4f8da
--- /dev/null
+++ b/support/latexindent/documentation/contributors.bib
@@ -0,0 +1,176 @@
+% 2013
+% 2013
+% 2013
+@online{paulo,
+ title = "arara rule, indent.yaml",
+ url = "https://github.com/islandoftex/arara/blob/master/rules/arara-rule-indent.yaml",
+ author = "Paulo Cereda",
+ date = {2013-05-23},
+ urldate = {2021-03-19},
+ keywords = {contributor},}
+@online{vosskuhle,
+ title = "Remove trailing white space",
+ url = "https://github.com/cmhughes/latexindent.pl/pull/12",
+ author = "Michel Vo{\ss}kuhle",
+ date = {2013-11-10},
+ urldate = {2017-01-23},
+ keywords = {contributor},}
+@online{harish,
+ title = "Early version testing",
+ url = "https://github.com/harishkumarholla",
+ author = "Harish Kumar",
+ date = {2013-11-10},
+ urldate = {2017-06-30},
+ keywords = {contributor},}
+% 2014
+% 2014
+% 2014
+@online{jacobo-diaz-hidden-config,
+ title = "Hiddenconfig",
+ url = "https://github.com/cmhughes/latexindent.pl/pull/18",
+ author = "Jacobo Diaz",
+ date = {2014-07-21},
+ urldate = {2017-01-23},
+ keywords = {contributor},}
+@online{jacobo-diaz-she-bang,
+ title = "Changed shebang to make the script more portable",
+ url = "https://github.com/cmhughes/latexindent.pl/pull/17",
+ author = "Jacobo Diaz",
+ date = {2014-07-23},
+ urldate = {2017-01-23},
+ keywords = {contributor},}
+% 2015
+% 2015
+% 2015
+@online{jasjuang,
+ title = "add in PATH installation",
+ url = "https://github.com/cmhughes/latexindent.pl/pull/38",
+ author = "Jason Juang",
+ date = {2015-11-24},
+ urldate = {2017-01-23},
+ keywords = {contributor},}
+% 2017
+% 2017
+% 2017
+@online{jowens,
+ title = "Paragraph line break routine removal",
+ url = "https://github.com/cmhughes/latexindent.pl/issues/33",
+ author = "John Owens",
+ date = {2017-05-27},
+ urldate = {2017-05-27},
+ keywords = {contributor},}
+@online{mlep,
+ title = "One sentence per line",
+ url = "https://github.com/cmhughes/latexindent.pl/issues/81",
+ date = {2017-08-16},
+ author = "mlep",
+ urldate = {2018-01-08},
+ keywords = {contributor},}
+% 2018
+% 2018
+% 2018
+@online{zoehneto,
+ title = "Improving text wrap",
+ url = "https://github.com/cmhughes/latexindent.pl/issues/103",
+ author = "Tom Z{\"o}hner (zoehneto)",
+ date = {2018-02-04},
+ urldate = {2018-08-04},
+ keywords = {contributor},}
+@online{xu-cheng,
+ title = "always output log/help text to STDERR",
+ url = "https://github.com/cmhughes/latexindent.pl/pull/121",
+ author = "Cheng Xu (xu-cheng)",
+ date = {2018-07-13},
+ urldate = {2018-08-05},
+ keywords = {contributor},}
+% 2019
+% 2019
+% 2019
+@online{sransara,
+ title = "Print usage tip to STDERR only if STDIN is TTY" ,
+ url = "https://github.com/cmhughes/latexindent.pl/pull/174",
+ date = {2019-09-17},
+ author = "Sam Abey",
+ urldate = {2021-03-19},
+ keywords = {contributor},}
+% 2020
+% 2020
+% 2020
+@online{jun-sheaf,
+ title = "Alpine-linux instructions",
+ url = "https://github.com/cmhughes/latexindent.pl/pull/214",
+ date = {2020-08-10},
+ author = "Randolf J.",
+ urldate = {2020-08-10},
+ keywords = {contributor},}
+@online{jeanlego,
+ title = "Search localSettings in CWD as well",
+ url = "https://github.com/cmhughes/latexindent.pl/pull/221",
+ date = {2020-09-15},
+ author = "jeanlego",
+ urldate = {2021-03-19},
+ keywords = {contributor},}
+% 2021
+% 2021
+% 2021
+@online{newptcai,
+ title = "Update appendices.tex",
+ url = "https://github.com/cmhughes/latexindent.pl/pull/221",
+ date = {2021-02-16},
+ author = "newptcai",
+ urldate = {2021-03-19},
+ keywords = {contributor},}
+@online{alexreg,
+ title = "Update help screen",
+ url = "https://github.com/cmhughes/latexindent.pl/pull/261",
+ date = {2021-03-18},
+ author = "Alexander Regueiro",
+ urldate = {2021-03-19},
+ keywords = {contributor},}
+@online{qiancy98,
+ title = "Locale encoding of file system",
+ url = "https://github.com/cmhughes/latexindent.pl/pull/273",
+ date = {2021-05-06},
+ author = "qiancy98",
+ urldate = {2021-05-06},
+ keywords = {contributor},}
+@online{XuehaiPan,
+ title = "Verbatim block upgrade",
+ url = "https://github.com/cmhughes/latexindent.pl/pull/290",
+ date = {2021-10-03},
+ author = "XuehaiPan",
+ urldate = {2021-10-03},
+ keywords = {contributor},}
+@online{XuehaiPan1,
+ title = "-y switch upgrade",
+ url = "https://github.com/cmhughes/latexindent.pl/pull/297",
+ date = {2021-11-12},
+ author = "XuehaiPan",
+ urldate = {2021-11-12},
+ keywords = {contributor},}
+% 2022
+% 2022
+% 2022
+@online{tdegeusprecommit,
+ title = "Adding Perl installation + pre-commit hook",
+ url = "https://github.com/cmhughes/latexindent.pl/pull/322",
+ date = {2022-01-21},
+ author = "Tom de Geus",
+ urldate = {2022-01-21},
+ keywords = {contributor},}
+
+@online{holzhausprecommit,
+ title = "Fix pre-commit usage",
+ url = "https://github.com/cmhughes/latexindent.pl/pull/354",
+ date = {2022-03-31},
+ author = "Jan Holthuis",
+ urldate = {2022-04-02},
+ keywords = {contributor},}
+
+@online{eggplants,
+ title = "Add Dockerfile and its updater/releaser",
+ url = "https://github.com/cmhughes/latexindent.pl/pull/370",
+ date = {2022-06-12},
+ author = "eggplants",
+ urldate = {2022-06-12},
+ keywords = {contributor},}
diff --git a/support/latexindent/documentation/figure-schematic.tex b/support/latexindent/documentation/figure-schematic.tex
deleted file mode 100644
index 08fea69139..0000000000
--- a/support/latexindent/documentation/figure-schematic.tex
+++ /dev/null
@@ -1,31 +0,0 @@
-\documentclass{standalone}
-\usepackage{tikz}
-\usetikzlibrary{positioning}
-\begin{document}
-\begin{tikzpicture}[
- needed/.style={very thick, draw=blue,fill=blue!20, text centered, minimum height=2.5em,rounded corners=1ex},
- optional/.style={draw=black, very thick,scale=0.8, text centered, minimum height=2.5em,rounded corners=1ex},
- optionalfill/.style={fill=black!10},
- connections/.style={draw=black!30,dotted,line width=3pt,text=red},
- ]
- % Draw diagram elements
- \node (latexindent) [needed,circle] {\texttt{latexindent.pl}};
- \node (default) [needed,above right=.5cm of latexindent] {\texttt{defaultSettings.yaml}};
- \node (indentconfig) [optional,right=of latexindent] {\texttt{indentconfig.yaml}};
- \node (any) [optional,optionalfill,above right=of indentconfig] {\texttt{any.yaml}};
- \node (name) [optional,optionalfill,right=of indentconfig] {\texttt{name.yaml}};
- \node (you) [optional,optionalfill,below right=of indentconfig] {\texttt{you.yaml}};
- \node (want) [optional,optionalfill,below=of indentconfig] {\texttt{want.yaml}};
- \node (local) [optional,below=of latexindent] {\texttt{localSettings.yaml}};
- \node (yamlswitch) [optional,left=of latexindent] {\texttt{-y switch}};
- % Draw arrows between elements
- \draw[connections,solid] (latexindent) to[in=-90]node[pos=0.5,anchor=north]{1} (default.south) ;
- \draw[connections,optional] (latexindent) -- node[pos=0.5,anchor=north]{2} (indentconfig) ;
- \draw[connections,optional] (indentconfig) to[in=-90] (any.south) ;
- \draw[connections,optional] (indentconfig) -- (name) ;
- \draw[connections,optional] (indentconfig) to[out=-45,in=90] (you) ;
- \draw[connections,optional] (indentconfig) -- (want) ;
- \draw[connections,optional] (latexindent) -- node[pos=0.5,anchor=west]{3} (local) ;
- \draw[connections,optional] (latexindent) -- node[pos=0.5,anchor=north]{4} (yamlswitch) ;
-\end{tikzpicture}
-\end{document}
diff --git a/support/latexindent/documentation/latex-indent.bib b/support/latexindent/documentation/latex-indent.bib
new file mode 100644
index 0000000000..34d0dc3120
--- /dev/null
+++ b/support/latexindent/documentation/latex-indent.bib
@@ -0,0 +1,138 @@
+@online{cmh:videodemo,
+ title = "Video demonstration of latexindent.pl on youtube",
+ url = "https://www.youtube.com/watch?v=wo38aaH2F4E&spfreload=10",
+ urldate = {2017-02-21},
+ keywords = {other},
+}
+@online{cpan,
+ title = "CPAN: Comprehensive Perl Archive Network",
+ urldate = {2017-01-23},
+ url = "http://www.cpan.org/",
+ keywords = {perl},
+}
+@online{strawberryperl,
+ title = "Strawberry Perl",
+ urldate = {2017-01-23},
+ url = "http://strawberryperl.com/",
+ keywords = {perl},
+}
+@online{cmhblog,
+ title = "A Perl script for indenting tex files",
+ urldate = {2017-01-23},
+ url = "http://tex.blogoverflow.com/2012/08/a-perl-script-for-indenting-tex-files/",
+ keywords = {other},
+}
+@online{latexindent-home,
+ title = "Home of latexindent.pl",
+ urldate = {2017-01-23},
+ url = "https://github.com/cmhughes/latexindent.pl",
+ keywords = {other},
+}
+@online{perlbrew,
+ title = "Perlbrew",
+ urldate = {2017-01-23},
+ url = "http://perlbrew.pl/",
+ keywords = {perl},
+}
+@online{textwrap,
+ title = "Text::Wrap Perl module",
+ url = "http://perldoc.perl.org/Text/Wrap.html",
+ urldate = {2017-05-01},
+ keywords = {perl},
+}
+@online{texttabs,
+ title = "Text::Tabs Perl module",
+ url = "http://search.cpan.org/~muir/Text-Tabs+Wrap-2013.0523/lib.old/Text/Tabs.pm",
+ urldate = {2017-07-06},
+ keywords = {perl},
+}
+@online{log4perl,
+ title = "Log4perl Perl module",
+ url = "http://search.cpan.org/~mschilli/Log-Log4perl-1.49/lib/Log/Log4perl.pm",
+ urldate = {2017-09-24},
+ keywords = {perl},
+}
+@book{masteringregexp,
+ title = "Mastering Regular Expressions",
+ author = {Jeffrey E. F. Friedl},
+ ISBN = {0596002890},
+ keywords = {perl},
+}
+@online{encoding,
+ title = "perldoc Encode::Supported",
+ url = "https://perldoc.perl.org/Encode::Supported",
+ urldate = {2021-05-06},
+ keywords = {perl},
+}
+@online{bersbersbers,
+ title = "Windows line breaks on Linux prevent removal of white space from end of line",
+ url = "https://github.com/cmhughes/latexindent.pl/issues/256",
+ urldate = {2021-06-18},
+ keywords = {other},
+}
+@online{dumper,
+ title = "Data::Dumper module",
+ url = "https://perldoc.perl.org/Data::Dumper",
+ urldate = {2021-06-18},
+ keywords = {perl},
+}
+@online{dumperdemo,
+ title = "Data Dumper demonstration",
+ url = "https://stackoverflow.com/questions/7466825/how-do-you-sort-the-output-of-datadumper",
+ urldate = {2021-06-18},
+ keywords = {perl},
+}
+@online{conda,
+ title = "conda forge",
+ url = "https://github.com/conda-forge/miniforge",
+ urldate = {2021-12-22},
+ keywords = {conda},
+}
+@online{anacoda,
+ title = "anacoda",
+ url = "https://www.anaconda.com/products/individual",
+ urldate = {2021-12-22},
+ keywords = {conda},
+}
+@online{condainstallubuntu,
+ title = "How to install Anaconda on Ubuntu?",
+ url = "https://askubuntu.com/questions/505919/how-to-install-anaconda-on-ubuntu",
+ urldate = {2022-01-21},
+ keywords = {conda},
+}
+@online{condainstallhelp,
+ title = "Solving environment: failed with initial frozen solve. Retrying with flexible solve.",
+ url = "https://github.com/conda/conda/issues/9367#issuecomment-558863143",
+ urldate = {2022-01-21},
+ keywords = {conda},
+}
+@online{vscode-yaml-demo,
+ title = "How to create your own auto-completion for JSON and YAML files on VS Code with the help of JSON Schema",
+ url = "https://dev.to/brpaz/how-to-create-your-own-auto-completion-for-json-and-yaml-files-on-vs-code-with-the-help-of-json-schema-k1i",
+ urldate = {2022-01-01},
+ keywords = {vscode},
+}
+@online{vscode-yaml-extentions,
+ title = "VSCode YAML extension",
+ url = "https://marketplace.visualstudio.com/items?itemName = redhat.vscode-yaml",
+ urldate = {2022-01-01},
+ keywords = {vscode},
+}
+@online{miktex-guide,
+ title = "How to use latexindent on Windows?",
+ url = "https://tex.stackexchange.com/questions/577250/how-to-use-latexindent-on-windows",
+ urldate = {2022-01-08},
+ keywords = {other},
+}
+@online{pre-commithome,
+ title = "pre-commit: A framework for managing and maintaining multi-language pre-commit hooks.",
+ url = "https://pre-commit.com/",
+ urldate = {2022-01-08},
+ keywords = {other},
+}
+@online{cmhughesio,
+ title = "latexindent.pl ghcr (GitHub Container Repository) location",
+ url = "https://github.com/cmhughes?tab=packages",
+ urldate = {2022-06-12},
+ keywords = {other},
+}
diff --git a/support/latexindent/documentation/latexindent-yaml-schema.json b/support/latexindent/documentation/latexindent-yaml-schema.json
index 8fe129d18a..26a9a63798 100644
--- a/support/latexindent/documentation/latexindent-yaml-schema.json
+++ b/support/latexindent/documentation/latexindent-yaml-schema.json
@@ -2,7 +2,7 @@
"$schema": "http://json-schema.org/schema",
"$id": "latexindent-yaml-schema.json",
"title": "latexindent.pl YAML schema",
- "description": "latexindent.pl YAML schema helper, V3.18 2022-06-12",
+ "description": "latexindent.pl YAML schema helper, V3.19 2022-10-30",
"type": "object",
"properties": {
"fileExtensionPreference": {
diff --git a/support/latexindent/documentation/latexindent.pdf b/support/latexindent/documentation/latexindent.pdf
index 04b5d2ef38..f42e874c8c 100644
--- a/support/latexindent/documentation/latexindent.pdf
+++ b/support/latexindent/documentation/latexindent.pdf
Binary files differ
diff --git a/support/latexindent/documentation/latexindent.tex b/support/latexindent/documentation/latexindent.tex
index 2bfe0248d1..4d7a6dd87b 100644
--- a/support/latexindent/documentation/latexindent.tex
+++ b/support/latexindent/documentation/latexindent.tex
@@ -604,8 +604,6 @@
{\endlist\endstars}
{\item}
-\newtcbox{yamltitlebox}[1][]{colframe=black!50!white,boxrule=.5pt,sharp corners,#1}
-
\newcommand{\flagbox}[1]{%
\par
\makebox[30pt][l]{%
@@ -618,7 +616,7 @@
\par
\makebox[30pt][l]{%
\hspace{-2cm}%
- \yamltitlebox[#1]{%
+ \tcbox[colframe=black!50!white,boxrule=.5pt,sharp corners,#1]{%
{\ttfamily\fontseries{b}\selectfont{\color{blue!80!white}#2}}: %
\IfBooleanTF{#3}
{$\langle$\itshape #4$\rangle$}
@@ -792,41 +790,7198 @@
%\testdefaultsettingstrue
\begin{document}
-\renewcommand*{\thefootnote}{\arabic{footnote}}
-\input{title.tex}
-\tableofcontents
-% start sections on new page
-\newcommand{\sectionbreak}{\clearpage\thispagestyle{plain}}
- \iftestdefaultsettings
- \input{test-default-settings}
- \else
- \input{sec-introduction}
- \input{sec-demonstration}
- \input{sec-how-to-use}
- \input{sec-indent-config-and-settings.tex}
- \input{sec-default-user-local}
- \input{subsec-noAdditionalIndent-indentRules}
- \input{subsubsec-environments-and-their-arguments}
- \input{subsubsec-environments-with-items}
- \input{subsubsec-commands-with-arguments}
- \input{subsubsec-ifelsefi}
- \input{subsubsec-special}
- \input{subsubsec-headings}
- \input{subsubsec-no-add-remaining-code-blocks}
- \stopcontents[noAdditionalIndent]
- \input{subsec-commands-and-their-options}
- \input{sec-the-m-switch}
- \input{subsec-text-wrap}
- \input{subsec-one-sentence-per-line}
- \input{subsec-poly-switches}
- \stopcontents[the-m-switch]
- \input{sec-replacements}
- \input{sec-the-line-switch}
- \input{sec-fine-tuning}
- \input{sec-conclusions-know-limitations}
- \input{sec-references}
- \input{sec-appendices}
- {\clearpage\addcontentsline{toc}{section}{List of listings}\small\lstlistoflistings}
- \printindex
- \fi
+% arara: pdflatex: { files: [latexindent]}
+\section{Introduction}
+\subsection{Thanks}
+ I first created \texttt{latexindent.pl} to help me format chapter files in a big project.
+ After I blogged about it on the \TeX{} stack exchange \cite{cmhblog} I received some
+ positive feedback and follow-up feature requests. A big thank you to Harish Kumar
+ \cite{harish} who helped to develop and test the initial versions of the script.
+
+ The \texttt{YAML}-based interface of \texttt{latexindent.pl} was inspired by the
+ wonderful \texttt{arara} tool; any similarities are deliberate, and I hope that it is
+ perceived as the compliment that it is. Thank you to Paulo Cereda and the team for
+ releasing this awesome tool; I initially worried that I was going to have to make a GUI
+ for \texttt{latexindent.pl}, but the release of \texttt{arara} has meant there is no
+ need.
+
+ There have been several contributors to the project so far (and hopefully more in the
+ future!); thank you very much to the people detailed in \vref{sec:contributors} for their
+ valued contributions, and thank you to those who report bugs and request features at
+ \cite{latexindent-home}.
+
+\subsection{License}
+ \texttt{latexindent.pl} is free and open source, and it always will be; it
+ is released under the GNU General Public License v3.0.
+
+ Before you start using it on any important files, bear in mind that
+ \texttt{latexindent.pl} has the option to overwrite your \texttt{.tex} files. It will
+ always make at least one backup (you can choose how many it makes, see
+ \cpageref{page:onlyonebackup}) but you should still be careful when using it. The script
+ has been tested on many files, but there are some known limitations (see
+ \cref{sec:knownlimitations}). You, the user, are responsible for ensuring that you
+ maintain backups of your files before running \texttt{latexindent.pl} on them. I think it
+ is important at this stage to restate an important part of the license here:
+ \begin{quote}\itshape
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+ \end{quote}
+ There is certainly no malicious intent in releasing this script, and I do hope that it
+ works as you expect it to; if it does not, please first of all make sure that you have
+ the correct settings, and then feel free to let me know at \cite{latexindent-home} with a
+ complete minimum working example as I would like to improve the code as much as possible.
+
+ \begin{warning}
+ Before you try the script on anything important (like your thesis), test it out on the
+ sample files in the \texttt{test-case} directory \cite{latexindent-home}.
+ \index{warning!be sure to test before use}
+ \end{warning}
+
+ \emph{If you have used any version 2.* of \texttt{latexindent.pl}, there
+ are a few changes to the interface; see \vref{app:differences} and the comments
+ throughout this document for details}.
+
+\subsection{Quick start}\label{sec:quickstart}
+ If you'd like to get started with \texttt{latexindent.pl} then simply type
+ \begin{commandshell}
+latexindent.pl myfile.tex
+\end{commandshell}
+ from the command line.
+
+ We give an introduction to \texttt{latexindent.pl} using \cref{lst:quick-start}; there is
+ no explanation in this section, which is deliberate for a quick start. The rest of the
+ manual is more verbose.
+
+ \cmhlistingsfromfile{demonstrations/quick-start.tex}{\texttt{quick-start.tex}}{lst:quick-start}
+
+ Running
+ \begin{commandshell}
+latexindent.pl quick-start.tex
+\end{commandshell}
+ gives \cref{lst:quick-start-default}.
+
+ \cmhlistingsfromfile{demonstrations/quick-start-default.tex}{\texttt{quick-start-default.tex}}{lst:quick-start-default}
+
+ \begin{example}
+ Running
+ \begin{commandshell}
+latexindent.pl -l quick-start1.yaml quick-start.tex
+\end{commandshell}
+ gives \cref{lst:quick-start-mod1}.
+
+ \begin{cmhtcbraster}
+ \cmhlistingsfromfile{demonstrations/quick-start1.yaml}[yaml-TCB]{\texttt{quick-start1.yaml}}{lst:quick-start1yaml}
+ \cmhlistingsfromfile[showspaces=true]{demonstrations/quick-start-mod1.tex}{\texttt{quick-start-mod1.tex}}{lst:quick-start-mod1}
+ \end{cmhtcbraster}
+ \end{example}
+
+ \begin{example}
+ Running
+ \begin{commandshell}
+latexindent.pl -l quick-start2.yaml quick-start.tex
+\end{commandshell}
+ gives \cref{lst:quick-start-mod2}.
+
+ \begin{cmhtcbraster}
+ \cmhlistingsfromfile{demonstrations/quick-start2.yaml}[yaml-TCB]{\texttt{quick-start2.yaml}}{lst:quick-start2yaml}
+ \cmhlistingsfromfile[showspaces=true]{demonstrations/quick-start-mod2.tex}{\texttt{quick-start-mod2.tex}}{lst:quick-start-mod2}
+ \end{cmhtcbraster}
+ \end{example}
+
+ \begin{example}
+ Running
+ \begin{commandshell}
+latexindent.pl -l quick-start3.yaml quick-start.tex
+\end{commandshell}
+ gives \cref{lst:quick-start-mod3}.
+
+ \begin{cmhtcbraster}
+ \cmhlistingsfromfile{demonstrations/quick-start3.yaml}[yaml-TCB]{\texttt{quick-start3.yaml}}{lst:quick-start3yaml}
+ \cmhlistingsfromfile{demonstrations/quick-start-mod3.tex}{\texttt{quick-start-mod3.tex}}{lst:quick-start-mod3}
+ \end{cmhtcbraster}
+ \end{example}
+
+ \begin{example}
+ Running
+ \begin{commandshell}
+latexindent.pl -m -l quick-start4.yaml quick-start.tex
+\end{commandshell}
+ gives \cref{lst:quick-start-mod4}.
+
+ \begin{cmhtcbraster}
+ \cmhlistingsfromfile{demonstrations/quick-start4.yaml}[MLB-TCB]{\texttt{quick-start4.yaml}}{lst:quick-start4yaml}
+ \cmhlistingsfromfile{demonstrations/quick-start-mod4.tex}{\texttt{quick-start-mod4.tex}}{lst:quick-start-mod4}
+ \end{cmhtcbraster}
+ Full details of text wrapping in \cref{subsec:textwrapping}.
+ \end{example}
+
+ \begin{example}
+ Running
+ \begin{commandshell}
+latexindent.pl -m -l quick-start5.yaml quick-start.tex
+\end{commandshell}
+ gives \cref{lst:quick-start-mod5}.
+
+ \begin{cmhtcbraster}
+ \cmhlistingsfromfile{demonstrations/quick-start5.yaml}[MLB-TCB]{\texttt{quick-start5.yaml}}{lst:quick-start5yaml}
+ \cmhlistingsfromfile{demonstrations/quick-start-mod5.tex}{\texttt{quick-start-mod5.tex}}{lst:quick-start-mod5}
+ \end{cmhtcbraster}
+ Full details of text wrapping in \cref{subsec:textwrapping}.
+ \end{example}
+
+ \begin{example}
+ Running
+ \begin{commandshell}
+latexindent.pl -m -l quick-start6.yaml quick-start.tex
+\end{commandshell}
+ gives \cref{lst:quick-start-mod6}.
+
+ \begin{cmhtcbraster}
+ \cmhlistingsfromfile{demonstrations/quick-start6.yaml}[MLB-TCB]{\texttt{quick-start6.yaml}}{lst:quick-start6yaml}
+ \cmhlistingsfromfile{demonstrations/quick-start-mod6.tex}{\texttt{quick-start-mod6.tex}}{lst:quick-start-mod6}
+ \end{cmhtcbraster}
+ This is an example of a \emph{poly-switch}; full details of \emph{poly-switches} are
+ covered in \cref{sec:poly-switches}.
+ \end{example}
+
+ \begin{example}
+ Running
+ \begin{commandshell}
+latexindent.pl -m -l quick-start7.yaml quick-start.tex
+\end{commandshell}
+ gives \cref{lst:quick-start-mod7}.
+
+ \begin{cmhtcbraster}
+ \cmhlistingsfromfile{demonstrations/quick-start7.yaml}[MLB-TCB]{\texttt{quick-start7.yaml}}{lst:quick-start7yaml}
+ \cmhlistingsfromfile{demonstrations/quick-start-mod7.tex}{\texttt{quick-start-mod7.tex}}{lst:quick-start-mod7}
+ \end{cmhtcbraster}
+ Full details of \emph{poly-switches} are covered in \cref{sec:poly-switches}.
+ \end{example}
+
+\subsection{Required perl modules}
+ If you receive an error message such as that given in
+ \cref{lst:poss-errors}, then you need to install the missing perl modules.
+ \begin{cmhlistings}[style=tcblatex,language=Perl]{Possible error messages}{lst:poss-errors}
+Can't locate File/HomeDir.pm in @INC (@INC contains: /Library/Perl/5.12/darwin-thread-multi-2level /Library/Perl/5.12 /Network/Library/Perl/5.12/darwin-thread-multi-2level /Network/Library/Perl/5.12 /Library/Perl/Updates/5.12.4/darwin-thread-multi-2level /Library/Perl/Updates/5.12.4 /System/Library/Perl/5.12/darwin-thread-multi-2level /System/Library/Perl/5.12 /System/Library/Perl/Extras/5.12/darwin-thread-multi-2level /System/Library/Perl/Extras/5.12 .) at helloworld.pl line 10.
+BEGIN failed--compilation aborted at helloworld.pl line 10.
+\end{cmhlistings}
+ \texttt{latexindent.pl} ships with a script to help with this process; if you run the
+ following script, you should be prompted to install the appropriate modules.
+ \begin{commandshell}
+perl latexindent-module-installer.pl
+\end{commandshell}
+ You might also like to see
+ \href{https://stackoverflow.com/questions/19590042/error-cant-locate-file-homedir-pm-in-inc}{https://stackoverflow.com/questions/19590042/error-cant-locate-file-homedir-pm-in-inc},
+ for example, as well as \vref{sec:requiredmodules}.
+
+\subsection{About this documentation}
+ As you read through this documentation, you will see many listings; in this version of
+ the documentation, there are a total of \totallstlistings. This may seem a lot, but I
+ deem it necessary in presenting the various different options of \texttt{latexindent.pl}
+ and the associated output that they are capable of producing.
+
+ The different listings are presented using different styles:
+
+ \begin{minipage}{.4\textwidth}
+ \cmhlistingsfromfile{demonstrations/demo-tex.tex}{\texttt{demo-tex.tex}}{lst:demo-tex}
+ \end{minipage}%
+ \hfill
+ \begin{minipage}{.4\textwidth}
+ This type of listing is a \texttt{.tex} file.
+ \end{minipage}%
+
+ \begin{minipage}{.4\textwidth}
+ \cmhlistingsfromfile[style=fileExtensionPreference]{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{fileExtensionPreference}}{lst:fileExtensionPreference-demo}
+ \end{minipage}%
+ \hfill
+ \begin{minipage}{.4\textwidth}
+ This type of listing is a \texttt{.yaml} file; when you see line numbers given (as here)
+ it means that the snippet is taken directly from \texttt{defaultSettings.yaml}, discussed in
+ detail in \vref{sec:defuseloc}.
+ \end{minipage}%
+
+ \begin{minipage}{.55\textwidth}
+ \cmhlistingsfromfile[style=modifylinebreaks]{../defaultSettings.yaml}[MLB-TCB,width=.85\linewidth,before=\centering]{\texttt{modifyLineBreaks}}{lst:modifylinebreaks-demo}
+ \end{minipage}%
+ \hfill
+ \begin{minipage}{.4\textwidth}
+ This type of listing is a \texttt{.yaml} file, but it will only
+ be relevant when the \texttt{-m} switch is active; see \vref{sec:modifylinebreaks}
+ for more details.
+ \end{minipage}%
+
+ \begin{minipage}{.55\textwidth}
+ \cmhlistingsfromfile[style=replacements]{../defaultSettings.yaml}[replace-TCB,width=.85\linewidth,before=\centering]{\texttt{replacements}}{lst:replacements-demo}
+ \end{minipage}%
+ \hfill
+ \begin{minipage}{.4\textwidth}
+ This type of listing is a \texttt{.yaml} file, but it will only
+ be relevant when the \texttt{-r} switch is active; see \vref{sec:replacements}
+ for more details.
+ \end{minipage}%
+
+ % \begin{latexonly}
+ You will occasionally see dates shown in the margin (for example, next to this
+ paragraph!) \announce{2017-06-25}{announce} which detail the date of the version in which
+ the feature was implemented; the `N' stands for `new as of the date shown' and `U' stands
+ for `updated as of the date shown'. If you see \stardemo, it means that the feature is
+ either new (N) or updated (U) as of the release of the current version; if you see
+ \stardemo\, attached to a listing, then it means that listing is new (N) or updated (U)
+ as of the current version. If you have not read this document before (and even if you
+ have!), then you can ignore every occurrence of the \stardemo; they are simply there to
+ highlight new and updated features. The new and updated features in this documentation
+ (\gitRel) are on the following pages: \listOfNewFeatures% % \end{latexonly}
+
+\subsection{A word about regular expressions}
+ \index{regular expressions!a word about}
+ As you read this documentation, you may encounter the term \emph{regular expressions}.
+ I've tried to write this documentation in such a way so as to allow you to engage with
+ them or not, as you prefer. This documentation is not designed to be a guide to regular
+ expressions, and if you'd like to read about them, I recommend \cite{masteringregexp}.
+% arara: pdflatex: { files: [latexindent]}
+\section{Demonstration: before and after}
+ Let's give a demonstration of some before and after code -- after all, you probably won't
+ want to try the script if you don't much like the results. You might also like to watch
+ the video demonstration I made on youtube \cite{cmh:videodemo}
+
+ As you look at \crefrange{lst:filecontentsbefore}{lst:pstricksafter}, remember that
+ \texttt{latexindent.pl} is just following its rules, and there is nothing particular
+ about these code snippets. All of the rules can be modified so that you can personalise
+ your indentation scheme.
+
+ In each of the samples given in \crefrange{lst:filecontentsbefore}{lst:pstricksafter} the
+ `before' case is a `worst case scenario' with no effort to make indentation. The `after'
+ result would be the same, regardless of the leading white space at the beginning of each
+ line which is stripped by \texttt{latexindent.pl} (unless a \texttt{verbatim}-like
+ environment or \texttt{noIndentBlock} is specified -- more on this in
+ \cref{sec:defuseloc}).
+
+ \begin{widepage}
+ \centering
+ \begin{minipage}{.45\linewidth}
+ \cmhlistingsfromfile{demonstrations/filecontents1.tex}{\texttt{filecontents1.tex}}{lst:filecontentsbefore}
+ \end{minipage}\hfill
+ \begin{minipage}{.45\linewidth}
+ \cmhlistingsfromfile{demonstrations/filecontents1-default.tex}{\texttt{filecontents1.tex} default output}{lst:filecontentsafter}
+ \end{minipage}%
+
+ \begin{minipage}{.45\linewidth}
+ \cmhlistingsfromfile{demonstrations/tikzset.tex}{\texttt{tikzset.tex}}{lst:tikzsetbefore}
+ \end{minipage}\hfill
+ \begin{minipage}{.45\linewidth}
+ \cmhlistingsfromfile{demonstrations/tikzset-default.tex}{\texttt{tikzset.tex} default output}{lst:tikzsetafter}
+ \end{minipage}%
+
+ \begin{minipage}{.45\linewidth}
+ \cmhlistingsfromfile{demonstrations/pstricks.tex}{\texttt{pstricks.tex}}{lst:pstricksbefore}
+ \end{minipage}\hfill
+ \begin{minipage}{.45\linewidth}
+ \cmhlistingsfromfile{demonstrations/pstricks-default.tex}{\texttt{pstricks.tex} default output}{lst:pstricksafter}
+ \end{minipage}%
+ \end{widepage}
+
+% arara: pdflatex: { files: [latexindent]}
+\section{How to use the script}\label{sec:how:to:use}
+ \texttt{latexindent.pl} ships as part of the \TeX Live distribution for
+ Linux and Mac users; \texttt{latexindent.exe} ships as part of the \TeX Live for Windows
+ users. These files are also available from github \cite{latexindent-home} should you wish
+ to use them without a \TeX{} distribution; in this case, you may like to read
+ \vref{sec:updating-path} which details how the \texttt{path} variable can be updated.
+ \index{TeXLive}
+
+ In what follows, we will always refer to \texttt{latexindent.pl}, but depending on your
+ operating system and preference, you might substitute \texttt{latexindent.exe} or simply
+ \texttt{latexindent}.
+
+ There are two ways to use \texttt{latexindent.pl}: from the command line, and using
+ \texttt{arara}; we discuss these in \cref{sec:commandline} and \cref{sec:arara}
+ respectively. We will discuss how to change the settings and behaviour of the script in
+ \vref{sec:defuseloc}.
+
+\subsection{Requirements}
+\subsubsection{Perl users}
+ Perl users will need a few standard Perl modules -- see \vref{sec:requiredmodules} for
+ details; \announce{2018-01-13}{perl module installer helper script} in particular, note
+ that a module installer helper script is shipped with \texttt{latexindent.pl}.%
+
+\subsubsection{Windows users without perl}\label{subsubsec:latexindent:exe}
+ \texttt{latexindent.pl} ships with \texttt{latexindent.exe} for Windows
+ users, so that you can use the script with or without a Perl distribution.
+
+ \texttt{latexindent.exe} is available from \cite{latexindent-home}.
+
+ MiKTeX users on Windows may like to see \cite{miktex-guide} for details of how to use
+ \texttt{latexindent.exe} without a Perl installation. \index{MiKTeX}
+ \index{latexindent.exe} \index{Windows}
+
+\subsubsection{Ubuntu Linux users without perl}
+ \texttt{latexindent.pl} ships with \texttt{latexindent-linux} for Ubuntu
+ Linux users, so that you can use the script with or without a Perl distribution.
+ \index{latexindent-linux} \index{linux} \index{TeXLive}
+
+ \texttt{latexindent-linux} is available from \cite{latexindent-home}.
+ \announce*{2022-10-30}{Linux Ubuntu standalone executable}
+
+\subsubsection{macOS users without perl}
+ \texttt{latexindent.pl} ships with \texttt{latexindent-macos} for macOS
+ users, so that you can use the script with or without a Perl distribution.
+ \index{latexindent-macos} \index{macOS} \index{TeXLive}
+
+ \texttt{latexindent-macOS} is available from \cite{latexindent-home}.
+ \announce*{2022-10-30}{macOS standalone executable}
+
+\subsubsection{conda users}
+ Users of \texttt{conda} should see the details given in \cref{sec:app:conda}.
+ \index{conda}
+
+\subsubsection{docker users}
+ Users of \texttt{docker} should see the details given in \cref{sec:app:docker}.
+ \index{docker}
+
+\subsection{From the command line}\label{sec:commandline}
+ \texttt{latexindent.pl} has a number of different switches/flags/options, which
+ can be combined in any way that you like, either in short or long form as detailed below.
+ \texttt{latexindent.pl} produces a \texttt{.log} file, \texttt{indent.log}, every time it
+ is run; the name of the log file can be customised, but we will refer to the log file as
+ \texttt{indent.log} throughout this document. There is a base of information that is
+ written to \texttt{indent.log}, but other additional information will be written
+ depending on which of the following options are used.
+
+\flagbox{-v, --version}
+ \index{switches!-v, --version definition and details}
+ \announce{2017-06-25}{version}
+ \begin{commandshell}
+latexindent.pl -v
+latexindent.pl --version
+\end{commandshell}
+ This will output only the version number to the terminal.
+
+\flagbox{-vv, --vversion}
+ \index{switches!-vv, --vversion definition and details}
+ \announce{2022-01-08}{vversion switch}
+ \begin{commandshell}
+latexindent.pl -vv
+latexindent.pl --vversion
+\end{commandshell}
+ This will output \emph{verbose} version details to the terminal, including the location
+ of \texttt{latexindent.pl} and \texttt{defaultSettings.yaml}.
+
+\flagbox{-h, --help}
+ \index{switches!-h, --help definition and details}
+
+ \begin{commandshell}
+latexindent.pl -h
+latexindent.pl --help
+\end{commandshell}
+
+ As above this will output a welcome message to the terminal, including the version number
+ and available options.
+ \begin{commandshell}
+latexindent.pl myfile.tex
+\end{commandshell}
+
+ This will operate on \texttt{myfile.tex}, but will simply output to your terminal;
+ \texttt{myfile.tex} will not be changed by \texttt{latexindent.pl} in any way using this
+ command.
+
+ You can \announce{2022-03-25}{batches of files demonstration} instruct
+ \texttt{latexindent.pl} to operate on multiple (batches) of files, for example
+ \begin{commandshell}
+latexindent.pl myfile1.tex myfile2.tex
+\end{commandshell}
+ Full details are given in \vref{sec:batches}.
+
+\flagbox{-w, --overwrite}
+ \index{switches!-w, --overwrite definition and details}
+ \index{backup files!overwrite switch, -w}
+ \begin{commandshell}
+latexindent.pl -w myfile.tex
+latexindent.pl --overwrite myfile.tex
+latexindent.pl myfile.tex --overwrite
+\end{commandshell}
+
+ This \emph{will} overwrite \texttt{myfile.tex}, but it will make a copy of
+ \texttt{myfile.tex} first. You can control the name of the extension (default is
+ \texttt{.bak}), and how many different backups are made -- more on this in
+ \cref{sec:defuseloc}, and in particular see \texttt{backupExtension} and
+ \texttt{onlyOneBackUp}.
+
+ Note that if \texttt{latexindent.pl} can not create the backup, then it will exit without
+ touching your original file; an error message will be given asking you to check the
+ permissions of the backup file.
+
+\flagbox{-wd, --overwriteIfDifferent}
+ \index{switches!-wd, --overwriteIfDifferent definition and details}
+ \index{backup files!overwriteIfDifferent switch, -wd}
+ \announce{2022-03-25}{overwriteIfDifferent switch}
+ \begin{commandshell}
+latexindent.pl -wd myfile.tex
+latexindent.pl --overwriteIfDifferent myfile.tex
+latexindent.pl myfile.tex --overwriteIfDifferent
+\end{commandshell}
+
+ This \emph{will} overwrite \texttt{myfile.tex} but only \emph{if the indented text is
+ different from the original}. If the indented text is \emph{not} different from the
+ original, then \texttt{myfile.tex} will \emph{not} be overwritten.
+
+ All other details from the \texttt{-w} switch are relevant here. If you call
+ \texttt{latexindent.pl} with both the \texttt{-wd} and the \texttt{-w} switch, then the
+ \texttt{-w} switch will be deactivated and the \texttt{-wd} switch takes priority.
+
+\flagbox{-o=output.tex,--outputfile=output.tex}
+ \index{switches!-o, --output definition and details}
+ \begin{commandshell}
+latexindent.pl -o=output.tex myfile.tex
+latexindent.pl myfile.tex -o=output.tex
+latexindent.pl --outputfile=output.tex myfile.tex
+latexindent.pl --outputfile output.tex myfile.tex
+\end{commandshell}
+
+ This will indent \texttt{myfile.tex} and output it to \texttt{output.tex}, overwriting it
+ (\texttt{output.tex}) if it already exists\footnote{Users of version 2.* should note the
+ subtle change in syntax}.
+
+ Note that if \texttt{latexindent.pl} is called with both the \texttt{-w} and \texttt{-o}
+ switches, then \texttt{-w} will be ignored and \texttt{-o} will take priority (this seems
+ safer than the other way round). The same is true for the \texttt{-wd} switch, and the
+ \texttt{-o} switch takes priority over it.
+
+ Note that using \texttt{-o} as above is equivalent to using
+ \begin{commandshell}
+latexindent.pl myfile.tex > output.tex
+\end{commandshell}
+
+ You can call the \texttt{-o} switch with the name of the output file \emph{without} an
+ extension; in \announce{2017-06-25}{upgrade to -o switch} this case,
+ \texttt{latexindent.pl} will use the extension from the original file. For example, the
+ following two calls to \texttt{latexindent.pl} are equivalent:%
+ \begin{commandshell}
+latexindent.pl myfile.tex -o=output
+latexindent.pl myfile.tex -o=output.tex
+\end{commandshell}
+
+ You can call the \texttt{-o} switch using a \texttt{+} symbol at the beginning; this will
+ \announce{2017-06-25}{+ sign in o switch} concatenate the name of the input file and the
+ text given to the \texttt{-o} switch. For example, the following two calls to
+ \texttt{latexindent.pl} are equivalent:%
+ \begin{commandshell}
+latexindent.pl myfile.tex -o=+new
+latexindent.pl myfile.tex -o=myfilenew.tex
+\end{commandshell}
+
+ You can call the \texttt{-o} switch using a \texttt{++} symbol at the end of the name
+ \announce{2017-06-25}{++ in o switch} of your output file; this tells
+ \texttt{latexindent.pl} to search successively for the name of your output file
+ concatenated with $0, 1, \ldots$ while the name of the output file exists. For example,%
+ \begin{commandshell}
+latexindent.pl myfile.tex -o=output++
+\end{commandshell}
+ tells \texttt{latexindent.pl} to output to \texttt{output0.tex}, but if it exists then
+ output to \texttt{output1.tex}, and so on.
+
+ Calling \texttt{latexindent.pl} with simply
+ \begin{commandshell}
+latexindent.pl myfile.tex -o=++
+\end{commandshell}
+ tells it to output to \texttt{myfile0.tex}, but if it exists then output to
+ \texttt{myfile1.tex} and so on.
+
+ The \texttt{+} and \texttt{++} feature of the \texttt{-o} switch can be combined; for
+ example, calling
+ \begin{commandshell}
+latexindent.pl myfile.tex -o=+out++
+\end{commandshell}
+ tells \texttt{latexindent.pl} to output to \texttt{myfileout0.tex}, but if it exists,
+ then try \texttt{myfileout1.tex}, and so on.
+
+ There is no need to specify a file extension when using the \texttt{++} feature, but if
+ you wish to, then you should include it \emph{after} the \texttt{++} symbols, for example
+ \begin{commandshell}
+latexindent.pl myfile.tex -o=+out++.tex
+\end{commandshell}
+
+ See \vref{app:differences} for details of how the interface has changed from Version 2.2
+ to Version 3.0 for this flag. \flagbox{-s, --silent} \index{switches!-s, --silent
+ definition and details}
+ \begin{commandshell}
+latexindent.pl -s myfile.tex
+latexindent.pl myfile.tex -s
+\end{commandshell}
+
+ Silent mode: no output will be given to the terminal.
+
+\flagbox{-t, --trace}
+ \index{switches!-t, --trace definition and details}
+ \begin{commandshell}
+latexindent.pl -t myfile.tex
+latexindent.pl myfile.tex -t
+\end{commandshell}
+
+ \label{page:traceswitch}
+ Tracing mode: verbose output will be given to \texttt{indent.log}. This is useful if
+ \texttt{latexindent.pl} has made a mistake and you're trying to find out where and why.
+ You might also be interested in learning about \texttt{latexindent.pl}'s thought process
+ -- if so, this switch is for you, although it should be noted that, especially for large
+ files, this does affect performance of the script.
+
+\flagbox{-tt, --ttrace}
+ \index{switches!-tt, --ttrace definition and details}
+ \begin{commandshell}
+latexindent.pl -tt myfile.tex
+latexindent.pl myfile.tex -tt
+\end{commandshell}
+
+ \emph{More detailed} tracing mode: this option gives more details to
+ \texttt{indent.log}
+ than the standard \texttt{trace} option (note that, even more so than with \texttt{-t},
+ especially for large files, performance of the script will be affected).
+
+\flagbox{-l, --local[=myyaml.yaml,other.yaml,...]}
+ \index{switches!-l, --local definition and details}
+ \begin{commandshell}
+latexindent.pl -l myfile.tex
+latexindent.pl -l=myyaml.yaml myfile.tex
+latexindent.pl -l myyaml.yaml myfile.tex
+latexindent.pl -l first.yaml,second.yaml,third.yaml myfile.tex
+latexindent.pl -l=first.yaml,second.yaml,third.yaml myfile.tex
+latexindent.pl myfile.tex -l=first.yaml,second.yaml,third.yaml
+\end{commandshell}
+
+ \label{page:localswitch}
+ \texttt{latexindent.pl} will always load \texttt{defaultSettings.yaml} (rhymes with
+ camel) and if it is called with the \texttt{-l} switch and it finds
+ \texttt{localSettings.yaml} in the same directory as \texttt{myfile.tex}, then, if not
+ found, it looks for \texttt{localSettings.yaml} (and friends, see
+ \vref{sec:localsettings}) in the current working directory, then
+ these%
+ \announce{2021-03-14}*{-l switch: localSettings and
+ friends} settings will be added to the indentation scheme. Information will be given in
+ \texttt{indent.log} on the success or failure of loading \texttt{localSettings.yaml}.
+
+ The \texttt{-l} flag can take an \emph{optional} parameter which details the name (or
+ names separated by commas) of a YAML file(s) that resides in the same directory as
+ \texttt{myfile.tex}; you can use this option if you would like to load a settings file in
+ the current working directory that is \emph{not} called \texttt{localSettings.yaml}.
+ \announce{2017-08-21}*{-l switch absolute paths} In fact, you can specify both
+ \emph{relative} and \emph{absolute paths} for your YAML files; for example%
+ \begin{commandshell}
+latexindent.pl -l=../../myyaml.yaml myfile.tex
+latexindent.pl -l=/home/cmhughes/Desktop/myyaml.yaml myfile.tex
+latexindent.pl -l=C:\Users\cmhughes\Desktop\myyaml.yaml myfile.tex
+\end{commandshell}
+ You will find a lot of other explicit demonstrations of how to use the \texttt{-l} switch
+ throughout this documentation,
+
+ You can call the \texttt{-l} switch with a `+' symbol either before or after
+ \announce{2017-06-25}{+ sign with -l switch} another YAML file; for example:
+ \begin{commandshell}
+latexindent.pl -l=+myyaml.yaml myfile.tex
+latexindent.pl -l "+ myyaml.yaml" myfile.tex
+latexindent.pl -l=myyaml.yaml+ myfile.tex
+\end{commandshell}
+ which translate, respectively, to
+ \begin{commandshell}
+latexindent.pl -l=localSettings.yaml,myyaml.yaml myfile.tex
+latexindent.pl -l=localSettings.yaml,myyaml.yaml myfile.tex
+latexindent.pl -l=myyaml.yaml,localSettings.yaml myfile.tex
+\end{commandshell}
+ Note that the following is \emph{not} allowed:
+ \begin{commandshell}
+latexindent.pl -l+myyaml.yaml myfile.tex
+\end{commandshell}
+ and
+ \begin{commandshell}
+latexindent.pl -l + myyaml.yaml myfile.tex
+\end{commandshell}
+ will \emph{only} load \texttt{localSettings.yaml}, and \texttt{myyaml.yaml} will be
+ ignored. If you wish to use spaces between any of the YAML settings, then you must wrap
+ the entire list of YAML files in quotes, as demonstrated above.
+
+ You may also choose to omit the \texttt{yaml} extension, such as \announce{2017-06-25}{no
+ extension for -l switch}%
+ \begin{commandshell}
+latexindent.pl -l=localSettings,myyaml myfile.tex
+\end{commandshell}
+\flagbox{-y, --yaml=yaml settings}
+ \index{switches!-y, --yaml definition and details}
+ \index{indentation!default}
+ \index{indentation!defaultIndent using -y switch}
+ \begin{commandshell}
+latexindent.pl myfile.tex -y="defaultIndent: ' '"
+latexindent.pl myfile.tex -y="defaultIndent: ' ',maximumIndentation:' '"
+latexindent.pl myfile.tex -y="indentRules: one: '\t\t\t\t'"
+latexindent.pl myfile.tex -y='modifyLineBreaks:environments:EndStartsOnOwnLine:3' -m
+latexindent.pl myfile.tex -y='modifyLineBreaks:environments:one:EndStartsOnOwnLine:3' -m
+\end{commandshell}
+ \label{page:yamlswitch}You%
+ \announce{2017-08-21}{the -y switch} can specify YAML settings from the command line
+ using the \texttt{-y} or \texttt{--yaml} switch; sample demonstrations are given above.
+ Note, in particular, that multiple settings can be specified by separating them via
+ commas. There is a further option to use a \texttt{;} to separate fields, which is
+ demonstrated in \vref{sec:yamlswitch}.
+
+ Any settings specified via this switch will be loaded \emph{after} any specified using
+ the \texttt{-l} switch. This is discussed further in \vref{sec:loadorder}. \flagbox{-d,
+ --onlydefault} \index{switches!-d, --onlydefault definition and details}
+ \begin{commandshell}
+latexindent.pl -d myfile.tex
+\end{commandshell}
+
+ Only \texttt{defaultSettings.yaml}: you might like to read \cref{sec:defuseloc} before
+ using this switch. By default, \texttt{latexindent.pl} will always search for
+ \texttt{indentconfig.yaml} or \texttt{.indentconfig.yaml} in your home directory. If you
+ would prefer it not to do so then (instead of deleting or renaming
+ \texttt{indentconfig.yaml} or \texttt{.indentconfig.yaml}) you can simply call the script
+ with the \texttt{-d} switch; note that this will also tell the script to ignore
+ \texttt{localSettings.yaml} even if it has been called with the \texttt{-l} switch;
+ \texttt{latexindent.pl} \announce{2017-08-21}*{updated -d switch} will also ignore any
+ settings specified from the \texttt{-y} switch.%
+
+\flagbox{-c, --cruft=<directory>}
+ \index{switches!-c, --cruft definition and details}
+ \begin{commandshell}
+latexindent.pl -c=/path/to/directory/ myfile.tex
+\end{commandshell}
+
+ If you wish to have backup files and \texttt{indent.log} written to a directory other
+ than the current working directory, then you can send these `cruft' files to another
+ directory. Note the use of a trailing forward slash. % this switch was made as a result of http://tex.stackexchange.com/questions/142652/output-latexindent-auxiliary-files-to-a-different-directory
+
+\flagbox{-g, --logfile=<name of log file>}
+ \index{switches!-g, --logfile definition and details}
+ \begin{commandshell}
+latexindent.pl -g=other.log myfile.tex
+latexindent.pl -g other.log myfile.tex
+latexindent.pl --logfile other.log myfile.tex
+latexindent.pl myfile.tex -g other.log
+\end{commandshell}
+
+ By default, \texttt{latexindent.pl} reports information to \texttt{indent.log}, but if
+ you wish to change the name of this file, simply call the script with your chosen name
+ after the \texttt{-g} switch as demonstrated above.
+
+ \announce{2021-05-07}{log file creation updated} If \texttt{latexindent.pl} can not open
+ the log file that you specify, then the script will operate, and no log file will be
+ produced; this might be helpful to users who wish to specify the following, for example
+ \begin{commandshell}
+latexindent.pl -g /dev/null myfile.tex
+\end{commandshell}
+
+\flagbox{-sl, --screenlog}
+ \index{switches!-sl, --screenlog definition and details}
+ \begin{commandshell}
+latexindent.pl -sl myfile.tex
+latexindent.pl -screenlog myfile.tex
+\end{commandshell}
+ Using this \announce{2018-01-13}{screenlog switch created} option tells
+ \texttt{latexindent.pl} to output the log file to the screen, as well as to your chosen
+ log file.%
+
+\flagbox{-m, --modifylinebreaks}
+ \index{switches!-m, --modifylinebreaks definition and details}
+ \begin{commandshell}
+latexindent.pl -m myfile.tex
+latexindent.pl -modifylinebreaks myfile.tex
+\end{commandshell}
+
+ One of the most exciting developments in Version~3.0 is the ability to modify line
+ breaks; for full details see \vref{sec:modifylinebreaks}
+
+ \texttt{latexindent.pl} can also be called on a file without the file extension, for
+ example
+ \begin{commandshell}
+latexindent.pl myfile
+\end{commandshell}
+ and in which case, you can specify the order in which extensions are searched for; see
+ \vref{lst:fileExtensionPreference} for full details. \flagbox{STDIN}
+ \begin{commandshell}
+cat myfile.tex | latexindent.pl
+cat myfile.tex | latexindent.pl -
+\end{commandshell}
+ \texttt{latexindent.pl} will%
+ \announce{2018-01-13}{STDIN allowed} allow input from STDIN, which means that you can
+ pipe output from other commands directly into the script. For example assuming that you
+ have content in \texttt{myfile.tex}, then the above command will output the results of
+ operating upon \texttt{myfile.tex}.
+
+ If you wish to use this feature with your own local settings, via the \texttt{-l} switch,
+ then you should finish your call to \texttt{latexindent.pl} with a \texttt{-} sign:
+ \begin{commandshell}
+cat myfile.tex | latexindent.pl -l=mysettings.yaml -
+\end{commandshell}
+
+ Similarly, if you \announce{2018-01-13}*{no options/filename updated} simply type
+ \texttt{latexindent.pl} at the command line, then it will expect (STDIN) input from the
+ command line.%
+ \begin{commandshell}
+latexindent.pl
+\end{commandshell}
+
+ Once you have finished typing your input, you can press
+ \begin{itemize}
+ \item \texttt{CTRL+D} on Linux
+ \item \texttt{CTRL+Z} followed by \texttt{ENTER} on Windows
+ \end{itemize}
+ to signify that your input has finished. Thanks to \cite{xu-cheng} for an update to this
+ feature. \flagbox{-r, --replacement} \index{switches!-r, --replacement definition and
+ details}
+ \begin{commandshell}
+latexindent.pl -r myfile.tex
+latexindent.pl -replacement myfile.tex
+\end{commandshell}
+ You can \announce{2019-07-13}{replacement mode switch} call \texttt{latexindent.pl} with
+ the \texttt{-r} switch to instruct it to perform replacements/substitutions on your file;
+ full details and examples are given in \vref{sec:replacements}. \index{verbatim!rv,
+ replacementrespectverb switch}%
+
+\flagbox{-rv, --replacementrespectverb}
+ \index{switches!-rv, --replacementrespectverb definition and details}
+ \begin{commandshell}
+latexindent.pl -rv myfile.tex
+latexindent.pl -replacementrespectverb myfile.tex
+\end{commandshell}
+ You can \announce{2019-07-13}{replacement mode switch, respecting verbatim} instruct
+ \texttt{latexindent.pl} to perform replacements/substitutions by using the \texttt{-rv}
+ switch, but will \emph{respect verbatim code blocks}; full details and examples are given
+ in \vref{sec:replacements}.%
+
+\flagbox{-rr, --onlyreplacement}
+ \index{switches!-rr, --onlyreplacement definition and details}
+ \begin{commandshell}
+latexindent.pl -rr myfile.tex
+latexindent.pl -onlyreplacement myfile.tex
+\end{commandshell}
+ You can \announce{2019-07-13}{replacement (only) mode switch} instruct
+ \texttt{latexindent.pl} to skip all of its other indentation operations and \emph{only}
+ perform replacements/substitutions by using the \texttt{-rr} switch; full details and
+ examples are given in \vref{sec:replacements}.%
+
+\flagbox{-k, --check}
+ \index{switches!-k, --check definition and details}
+ \begin{commandshell}
+latexindent.pl -k myfile.tex
+latexindent.pl -check myfile.tex
+\end{commandshell}
+ You can \announce{2021-09-16}{-k,-check switch} instruct \texttt{latexindent.pl} to check
+ if the text after indentation matches that given in the original file.%
+
+ The \texttt{exit} code \index{exit code} of \texttt{latexindent.pl} is 0 by default. If
+ you use the \texttt{-k} switch then
+ \begin{itemize}
+ \item if the text after indentation matches that given in the original file, then the exit code
+ is 0;
+ \item if the text after indentation does \emph{not} match that given in the original file, then
+ the exit code is 1.
+ \end{itemize}
+
+ The value of the exit code may be important to those wishing to, for example, check the
+ status of the indentation in continuous integration tools such as GitHub Actions. Full
+ details of the exit codes of \texttt{latexindent.pl} are given in \cref{tab:exit-codes}.
+
+ A simple \texttt{diff} will be given in \texttt{indent.log}.
+
+\flagbox{-kv, --checkv}
+ \index{switches!-kv, --checkv definition and details}
+ \begin{commandshell}
+latexindent.pl -kv myfile.tex
+latexindent.pl -checkv myfile.tex
+\end{commandshell}
+ \announce{2021-09-16}{-kv, -checkv: check verbose switch} The \texttt{check verbose}
+ switch is exactly the same as the \texttt{-k} switch, except that it is \emph{verbose},
+ and it will output the (simple) diff to the terminal, as well as to \texttt{indent.log}.
+
+\flagbox{-n, --lines=MIN-MAX}
+ \index{switches!-n, --lines definition and details}
+ \begin{commandshell}
+latexindent.pl -n 5-8 myfile.tex
+latexindent.pl -lines 5-8 myfile.tex
+\end{commandshell}
+ \announce{2021-09-16}{-n, -lines switch} The \texttt{lines} switch instructs
+ \texttt{latexindent.pl} to operate only on specific line ranges within
+ \texttt{myfile.tex}.
+
+ Complete demonstrations are given in \cref{sec:line-switch}.
+
+\flagbox{--GCString}
+ \index{switches!--GCString}
+ \begin{commandshell}
+latexindent.pl --GCString myfile.tex
+\end{commandshell}
+ \announce{2022-03-25}{GCString switch} instructs \texttt{latexindent.pl} to load the
+ \texttt{Unicode::GCString} module. This should only be necessary if you find that the
+ alignment at ampersand routine (described in \cref{subsec:align-at-delimiters}) does not
+ work for your language. Further details are given in \cref{subsec:the-GCString}.
+
+\subsection{From arara}\label{sec:arara}
+ Using \texttt{latexindent.pl} from the command line is fine for some folks, but others
+ may find it easier to use from \texttt{arara}; you can find the arara rule for
+ \texttt{latexindent.pl} and its associated documentation at \cite{paulo}.
+
+\subsection{Summary of exit codes}
+ \index{exit code!summary}
+ Assuming that you call \texttt{latexindent.pl} on \texttt{myfile.tex}
+ \begin{commandshell}
+latexindent.pl myfile.tex
+\end{commandshell}
+ then \texttt{latexindent.pl} can exit with the exit codes given in \cref{tab:exit-codes}.
+
+ \begin{table}[!htb]
+ \caption{Exit codes for \texttt{latexindent.pl}}
+ \label{tab:exit-codes}
+ \begin{tabular}{ccl}
+ \toprule
+ exit code & indentation & status \\
+ \midrule
+ 0 & \faCheck & success; if \texttt{-k} or \texttt{-kv} active, indented text matches original \\
+ 0 & \faClose & success; if \texttt{-version}, \texttt{-vversion} or \texttt{-help}, no indentation performed \\
+ 1 & \faCheck & success, and \texttt{-k} or \texttt{-kv} active; indented text \emph{different} from original \\
+ \midrule
+ 2 & \faClose & failure, \texttt{defaultSettings.yaml} could not be read \\
+ 3 & \faClose & failure, myfile.tex not found \\
+ 4 & \faClose & failure, myfile.tex exists but cannot be read \\
+ 5 & \faClose & failure, \texttt{-w} active, and back-up file cannot be written \\
+ 6 & \faClose & failure, \texttt{-c} active, and cruft directory does not exist \\
+ \bottomrule
+ \end{tabular}
+ \end{table}
+% arara: pdflatex: { files: [latexindent]}
+\section{indentconfig.yaml, local settings and the -y switch }\label{sec:indentconfig}
+ The behaviour of \texttt{latexindent.pl} is controlled from the settings specified in any
+ of the YAML files that you tell it to load. By default, \texttt{latexindent.pl} will only
+ load \texttt{defaultSettings.yaml}, but there are a few ways that you can tell it to load
+ your own settings files.
+
+\subsection{indentconfig.yaml and .indentconfig.yaml}
+ \texttt{latexindent.pl} will always check your home directory for
+ \texttt{indentconfig.yaml}
+ and \texttt{.indentconfig.yaml} (unless it is called with the \texttt{-d} switch), which
+ is a plain text file you can create that contains the \emph{absolute} paths for any
+ settings files that you wish \texttt{latexindent.pl} to load. There is no difference
+ between \texttt{indentconfig.yaml} and \texttt{.indentconfig.yaml}, other than the fact
+ that \texttt{.indentconfig.yaml} is a `hidden' file; thank you to
+ \cite{jacobo-diaz-hidden-config} for providing this feature. In what follows, we will use
+ \texttt{indentconfig.yaml}, but it is understood that this could equally represent
+ \texttt{.indentconfig.yaml}. If you have both files in existence then
+ \texttt{indentconfig.yaml} takes priority.
+
+ For Mac and Linux users, their home directory is \texttt{~/username} while Windows (Vista
+ onwards) is \lstinline!C:\Users\username!\footnote{If you're not sure where to put
+ \texttt{indentconfig.yaml}, don't worry \texttt{latexindent.pl} will tell you in the log
+ file exactly where to put it assuming it doesn't exist already.} \Cref{lst:indentconfig}
+ shows a sample \texttt{indentconfig.yaml} file.
+
+ \begin{yaml}{\texttt{indentconfig.yaml} (sample)}{lst:indentconfig}
+# Paths to user settings for latexindent.pl
+#
+# Note that the settings will be read in the order you
+# specify here- each successive settings file will overwrite
+# the variables that you specify
+
+paths:
+- /home/cmhughes/Documents/yamlfiles/mysettings.yaml
+- /home/cmhughes/folder/othersettings.yaml
+- /some/other/folder/anynameyouwant.yaml
+- C:\Users\chughes\Documents\mysettings.yaml
+- C:\Users\chughes\Desktop\test spaces\more spaces.yaml
+\end{yaml}
+
+ Note that the \texttt{.yaml} files you specify in \texttt{indentconfig.yaml} will be
+ loaded in the order in which you write them. Each file doesn't have to have every switch
+ from \texttt{defaultSettings.yaml}; in fact, I recommend that you only keep the switches
+ that you want to \emph{change} in these settings files.
+
+ To get started with your own settings file, you might like to save a copy of
+ \texttt{defaultSettings.yaml} in another directory and call it, for example,
+ \texttt{mysettings.yaml}. Once you have added the path to \texttt{indentconfig.yaml} you
+ can change the switches and add more code-block names to it as you see fit -- have a look
+ at \cref{lst:mysettings} for an example that uses four tabs for the default indent, adds
+ the \texttt{tabbing} environment/command to the list of environments that contains
+ alignment delimiters; you might also like to refer to the many YAML files detailed
+ throughout the rest of this documentation. \index{indentation!defaultIndent using YAML
+ file}
+
+ \begin{yaml}{\texttt{mysettings.yaml} (example)}{lst:mysettings}
+# Default value of indentation
+defaultIndent: "\t\t\t\t"
+
+# environments that have tab delimiters, add more
+# as needed
+lookForAlignDelims:
+ tabbing: 1
+\end{yaml}
+
+ You can make sure that your settings are loaded by checking \texttt{indent.log} for
+ details -- if you have specified a path that \texttt{latexindent.pl} doesn't recognise
+ then you'll get a warning, otherwise you'll get confirmation that \texttt{latexindent.pl}
+ has read your settings file \footnote{Windows users may find that they have to end
+ \texttt{.yaml} files with a blank line}. \index{warning!editing YAML files}
+
+ \begin{warning}
+ When editing \texttt{.yaml} files it is \emph{extremely} important to remember how
+ sensitive they are to spaces. I highly recommend copying and pasting from
+ \texttt{defaultSettings.yaml} when you create your first
+ \texttt{whatevernameyoulike.yaml} file.
+
+ If \texttt{latexindent.pl} can not read your \texttt{.yaml} file it will tell you so in
+ \texttt{indent.log}.
+ \end{warning}
+
+ If you find that \announce{2021-06-19}{encoding option for indentconfig.yaml}
+ \texttt{latexindent.pl} does not read your YAML file, then it might be as a result of the
+ default commandline encoding not being UTF-8; normally this will only occcur for Windows
+ users. In this case, you might like to explore the \texttt{encoding} option for
+ \texttt{indentconfig.yaml} as demonstrated in \cref{lst:indentconfig-encoding}.%
+
+ \cmhlistingsfromfile{demonstrations/encoding.yaml}[yaml-TCB]{The \texttt{encoding} option for \texttt{indentconfig.yaml}}{lst:indentconfig-encoding}
+
+ Thank you to \cite{qiancy98} for this contribution; please see \vref{app:encoding} and
+ details within \cite{encoding} for further information.
+
+\subsection{localSettings.yaml and friends}\label{sec:localsettings}
+ The \texttt{-l} switch tells \texttt{latexindent.pl} to look for
+ \texttt{localSettings.yaml} and/or friends in the \emph{same directory} as
+ \texttt{myfile.tex}. For%
+ \announce{2021-03-14}*{-l
+ switch: localSettings and friends} example, if you use the following command
+ \index{switches!-l demonstration}
+ \begin{commandshell}
+latexindent.pl -l myfile.tex
+\end{commandshell}
+ then \texttt{latexindent.pl} will search for and then, assuming they exist, load each of
+ the following files in the following order:
+ \begin{enumerate}
+ \item localSettings.yaml
+ \item latexindent.yaml
+ \item .localSettings.yaml
+ \item .latexindent.yaml
+ \end{enumerate}
+ These files will be assumed to be in the same directory as \texttt{myfile.tex}, or
+ otherwise in the current working directory. You do not need to have all of the above
+ files, usually just one will be sufficient. In what follows, whenever we refer to
+ \texttt{localSettings.yaml} it is assumed that it can mean any of the four named options
+ listed above.
+
+ If you'd prefer to name your \texttt{localSettings.yaml} file something different, (say,
+ \texttt{mysettings.yaml} as in \cref{lst:mysettings}) then you can call
+ \texttt{latexindent.pl} using, for example,
+ \begin{commandshell}
+latexindent.pl -l=mysettings.yaml myfile.tex
+\end{commandshell}
+
+ Any settings file(s) specified using the \texttt{-l} switch will be read \emph{after}
+ \texttt{defaultSettings.yaml} and, assuming they exist, any user setting files specified
+ in \texttt{indentconfig.yaml}.
+
+ Your settings file can contain any switches that you'd like to change; a sample is shown
+ in \cref{lst:localSettings}, and you'll find plenty of further examples throughout this
+ manual. \index{verbatim!verbatimEnvironments demonstration (-l switch)}
+
+ \begin{yaml}{\texttt{localSettings.yaml} (example)}{lst:localSettings}
+# verbatim environments - environments specified
+# here will not be changed at all!
+verbatimEnvironments:
+ cmhenvironment: 0
+ myenv: 1
+\end{yaml}
+
+ You can make sure that your settings file has been loaded by checking \texttt{indent.log}
+ for details; if it can not be read then you receive a warning, otherwise you'll get
+ confirmation that \texttt{latexindent.pl} has read your settings file.
+
+\subsection{The -y|yaml switch}\label{sec:yamlswitch}
+ You%
+ \announce{2017-08-21}{demonstration of the -y switch}
+ may use the \texttt{-y} switch to load your settings; for example, if you wished to
+ specify the settings from \cref{lst:localSettings} using the \texttt{-y} switch, then you
+ could use the following command:
+ \index{verbatim!verbatimEnvironments demonstration (-y switch)}
+ \begin{commandshell}
+latexindent.pl -y="verbatimEnvironments:cmhenvironment:0;myenv:1" myfile.tex
+\end{commandshell}
+ Note the use of \texttt{;} to specify another field within \texttt{verbatimEnvironments}.
+ This is shorthand, and equivalent, to using the following command: \index{switches!-y
+ demonstration}
+ \begin{commandshell}
+latexindent.pl -y="verbatimEnvironments:cmhenvironment:0,verbatimEnvironments:myenv:1" myfile.tex
+\end{commandshell}
+ You may, of course, specify settings using the \texttt{-y} switch as well as, for
+ example, settings loaded using the \texttt{-l} switch; for example, \index{switches!-l
+ demonstration} \index{switches!-y demonstration}
+ \begin{commandshell}
+latexindent.pl -l=mysettings.yaml -y="verbatimEnvironments:cmhenvironment:0;myenv:1" myfile.tex
+\end{commandshell}
+ Any settings specified using the \texttt{-y} switch will be loaded \emph{after} any
+ specified using \texttt{indentconfig.yaml} and the \texttt{-l} switch.
+
+ If you wish to specify any regex-based settings using the \texttt{-y} switch,
+ \index{regular expressions!using -y switch} it is important not to use quotes surrounding
+ the regex; for example, with reference to the `one sentence per line' feature
+ (\vref{sec:onesentenceperline}) and the listings within \vref{lst:sentencesEndWith}, the
+ following settings give the option to have sentences end with a semicolon
+ \index{switches!-y demonstration}
+ \begin{commandshell}
+latexindent.pl -m --yaml='modifyLineBreaks:oneSentencePerLine:sentencesEndWith:other:\;'
+\end{commandshell}
+
+\subsection{Settings load order}\label{sec:loadorder}
+ \texttt{latexindent.pl} loads the settings files in the following order:
+ \index{switches!-l in relation to other settings}
+ \begin{enumerate}
+ \item \texttt{defaultSettings.yaml} is always loaded, and can not be renamed;
+ \item \texttt{anyUserSettings.yaml} and any other arbitrarily-named files specified in
+ \texttt{indentconfig.yaml};
+ \item \texttt{localSettings.yaml} but only if found in the same directory as
+ \texttt{myfile.tex}
+ and called with \texttt{-l} switch; this file can be renamed, provided that the call to
+ \texttt{latexindent.pl} is adjusted accordingly (see \cref{sec:localsettings}). You may
+ specify both relative and absolute%
+ \announce{2017-08-21}*{-l absolute paths} paths to other YAML files using the \texttt{-l}
+ switch, separating multiple files using commas;
+ \item any settings \announce{2017-08-21}{-y switch load order} specified in the \texttt{-y}
+ switch.%
+ \end{enumerate}
+ A visual representation of this is given in \cref{fig:loadorder}.
+
+ \begin{figure}[!htb]
+ \centering
+ \input{figure-schematic}
+ \caption{Schematic of the load order described in \cref{sec:loadorder}; solid lines represent
+ mandatory files, dotted lines represent optional files. \texttt{indentconfig.yaml} can
+ contain as many files as you like. The files will be loaded in order; if you specify
+ settings for the same field in more than one file, the most recent takes priority. }
+ \label{fig:loadorder}
+ \end{figure}
+% arara: pdflatex: { files: [latexindent]}
+\section{defaultSettings.yaml}\label{sec:defuseloc}
+ \texttt{latexindent.pl} loads its settings from \texttt{defaultSettings.yaml}. The idea
+ is to separate the behaviour of the script from the internal working -- this is very
+ similar to the way that we separate content from form when writing our documents in
+ \LaTeX.
+
+ If you look in \texttt{defaultSettings.yaml} you'll find the switches that govern the
+ behaviour of \texttt{latexindent.pl}. If you're not sure where
+ \texttt{defaultSettings.yaml} resides on your computer, don't worry as
+ \texttt{indent.log} will tell you where to find it. \texttt{defaultSettings.yaml} is
+ commented, but here is a description of what each switch is designed to do. The default
+ value is given in each case; whenever you see \emph{integer} in \emph{this} section,
+ assume that it must be greater than or equal to \texttt{0} unless otherwise stated.
+
+ For most of the settings in \texttt{defaultSettings.yaml} that are specified as integers,
+ then we understand \texttt{0} to represent `off' and \texttt{1} to represent `on'. For
+ fields that allow values other than \texttt{0} or \texttt{1}, it is hoped that the
+ specific context and associated commentary should make it clear which values are allowed.
+
+\yamltitle{fileExtensionPreference}*{fields}
+ \texttt{latexindent.pl} can be called to
+ act on a file without specifying the file extension. For example we can call
+ \begin{commandshell}
+latexindent.pl myfile
+\end{commandshell}
+ in which case the script will look for \texttt{myfile} with the extensions specified in
+ \texttt{fileExtensionPreference} in their numeric order. If no match is found, the script
+ will exit. As with all of the fields, you should change and/or add to this as necessary.
+
+ \cmhlistingsfromfile[style=fileExtensionPreference]{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{fileExtensionPreference}}{lst:fileExtensionPreference}
+
+ Calling \texttt{latexindent.pl myfile} with the (default) settings specified in
+ \cref{lst:fileExtensionPreference} means that the script will first look for
+ \texttt{myfile.tex}, then \texttt{myfile.sty}, \texttt{myfile.cls}, and finally
+ \texttt{myfile.bib} in order\footnote{Throughout this manual, listings shown with line
+ numbers represent code taken directly from \texttt{defaultSettings.yaml}.}.
+
+ \index{backup files!extension settings}
+
+\subsection{Backup and log file preferences}
+\yamltitle{backupExtension}*{extension name}
+
+ If you call \texttt{latexindent.pl} with the \texttt{-w} switch (to overwrite
+ \texttt{myfile.tex}) then it will create a backup file before doing any indentation; the
+ default extension is \texttt{.bak}, so, for example, \texttt{myfile.bak0} would be
+ created when calling \texttt{latexindent.pl myfile.tex} for the first time.
+
+ By default, every time you subsequently call \texttt{latexindent.pl} with the \texttt{-w}
+ to act upon \texttt{myfile.tex}, it will create successive back up files:
+ \texttt{myfile.bak1}, \texttt{myfile.bak2}, etc.
+
+\yamltitle{onlyOneBackUp}*{integer}
+ \label{page:onlyonebackup}
+ \index{backup files!number of backup files}
+ If you don't want a backup for every time that you call \texttt{latexindent.pl} (so you
+ don't want \texttt{myfile.bak1}, \texttt{myfile.bak2}, etc) and you simply want
+ \texttt{myfile.bak} (or whatever you chose \texttt{backupExtension} to be) then change
+ \texttt{onlyOneBackUp} to \texttt{1}; the default value of \texttt{onlyOneBackUp} is
+ \texttt{0}.
+ \index{backup files!maximum number of backup files}
+ \index{backup files!number of backup files}
+
+\yamltitle{maxNumberOfBackUps}*{integer}
+ Some users may only want a finite number of backup files, say at most $3$, in which case,
+ they can change this switch. The smallest value of \texttt{maxNumberOfBackUps} is $0$
+ which will \emph{not} prevent backup files being made; in this case, the behaviour will
+ be dictated entirely by \texttt{onlyOneBackUp}. The default value of
+ \texttt{maxNumberOfBackUps} is \texttt{0}.
+
+\yamltitle{cycleThroughBackUps}*{integer}
+ \index{backup files!cycle through}
+ Some users may wish to cycle through backup files, by deleting the oldest backup file and
+ keeping only the most recent; for example, with \texttt{maxNumberOfBackUps: 4}, and
+ \texttt{cycleThroughBackUps} set to \texttt{1} then the \texttt{copy} procedure given
+ below would be obeyed.
+
+ \begin{commandshell}
+copy myfile.bak1 to myfile.bak0
+copy myfile.bak2 to myfile.bak1
+copy myfile.bak3 to myfile.bak2
+copy myfile.bak4 to myfile.bak3
+\end{commandshell}
+ The default value of \texttt{cycleThroughBackUps} is \texttt{0}.
+
+\yamltitle{logFilePreferences}*{fields}
+ \texttt{latexindent.pl} writes information to \texttt{indent.log}, some
+ of which can be customized by changing \texttt{logFilePreferences}; see
+ \cref{lst:logFilePreferences}. If you load your own user settings (see
+ \vref{sec:indentconfig}) then \texttt{latexindent.pl} will detail them in
+ \texttt{indent.log}; you can choose not to have the details logged by switching
+ \texttt{showEveryYamlRead} to \texttt{0}. Once all of your settings have been loaded, you
+ can see the amalgamated settings in the log file by switching
+ \texttt{showAmalgamatedSettings} to \texttt{1}, if you wish.
+
+ \cmhlistingsfromfile[style=logFilePreferences,]{../defaultSettings.yaml}[width=.9\linewidth,before=\centering,yaml-TCB]{\texttt{logFilePreferences}}{lst:logFilePreferences}
+
+ When \announce{2018-01-13}{showDecorationStartCodeBlockTrace feature for log file} either
+ of the \texttt{trace} modes (see \cpageref{page:traceswitch}) are active, you will
+ receive detailed information in \texttt{indent.log}. You can specify character strings to
+ appear before and after the notification of a found code block using, respectively,
+ \texttt{showDecorationStartCodeBlockTrace} and
+ \texttt{showDecorationFinishCodeBlockTrace}. A demonstration is given in
+ \vref{app:logfile-demo}.%
+
+ The log file will end with the characters given in \texttt{endLogFileWith}, and will
+ report the \texttt{GitHub} address of \texttt{latexindent.pl} to the log file if
+ \texttt{showGitHubInfoFooter} is set to \texttt{1}.
+
+ Note: \texttt{latexindent.pl} no longer uses the \texttt{log4perl} module to handle the
+ creation of the logfile. \announce{2021-03-14}*{no longer using log4perl}%
+
+ Some of the options \announce{2021-06-19}*{logFilePreferences updated to include Dumper
+ options} for Perl's \texttt{Dumper} module can be specified in
+ \cref{lst:logFilePreferences}; see \cite{dumper} and \cite{dumperdemo} for more
+ information. These options will mostly be helpful for those calling
+ \texttt{latexindent.pl} with the \texttt{-tt} option described in \cref{sec:commandline}.%
+
+\subsection{Verbatim code blocks}
+\yamltitle{verbatimEnvironments}*{fields}
+
+ A field that contains a list of environments that you would like left completely alone --
+ no indentation will be performed on environments that you have specified in this field,
+ see \cref{lst:verbatimEnvironments}. \index{verbatim!environments}
+ \index{verbatim!commands}
+
+ \begin{cmhtcbraster}[raster column skip=.1\linewidth]
+ \cmhlistingsfromfile[style=verbatimEnvironments]{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{verbatimEnvironments}}{lst:verbatimEnvironments}
+ \cmhlistingsfromfile[style=verbatimCommands]{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{verbatimCommands}}{lst:verbatimCommands}
+ \end{cmhtcbraster}
+
+ Note that if you put an environment in \texttt{verbatimEnvironments} and in other fields
+ such as \texttt{lookForAlignDelims} or \texttt{noAdditionalIndent} then
+ \texttt{latexindent.pl} will \emph{always} prioritize \texttt{verbatimEnvironments}.
+
+ You can, optionally, specify \announce{2021-10-30}{verbatim name feature} the
+ \texttt{verbatim} field using the \texttt{name} field which takes a regular expression as
+ its argument; thank you to \cite{XuehaiPan} for contributing this feature.
+
+ For demonstration, then assuming that your file contains the environments
+ \texttt{latexcode}, \texttt{latexcode*}, \texttt{pythoncode} and \texttt{pythoncode*},
+ then the listings given in \cref{lst:nameAsRegex1,lst:nameAsRegex2} are equivalent.
+
+ \begin{cmhtcbraster}[raster column skip=.1\linewidth]
+ \cmhlistingsfromfile{demonstrations/nameAsRegex1.yaml}[yaml-TCB]{\texttt{nameAsRegex1.yaml}}{lst:nameAsRegex1}
+ \cmhlistingsfromfile{demonstrations/nameAsRegex2.yaml}[yaml-TCB]{\texttt{nameAsRegex2.yaml}}{lst:nameAsRegex2}
+ \end{cmhtcbraster}
+
+ With reference to \cref{lst:nameAsRegex2}:
+ \begin{itemize}
+ \item the \texttt{name} field as specified here means \emph{any word followed by the word code,
+ optionally followed by *};
+ \item we have used \texttt{nameAsRegex} to identify this field, but you can use any description
+ you like;
+ \item the \texttt{lookForThis} field is optional, and can take the values 0 (off) or 1 (on); by
+ default, it is assumed to be 1 (on).
+ \end{itemize}
+
+\yamltitle{verbatimCommands}*{fields}
+ A field that contains a list of commands that are verbatim commands, for example
+ \lstinline|\lstinline|; any commands populated in this field are protected from line
+ breaking routines (only relevant if the \texttt{-m} is active, see
+ \vref{sec:modifylinebreaks}).
+
+ With reference to \cref{lst:verbatimCommands}, by default \texttt{latexindent.pl} looks
+ for \lstinline|\verb| immediately followed by another character, and then it takes the
+ body as anything up to the next occurrence of the character; this means that, for
+ example, \lstinline|\verb!x+3!| is treated as a \texttt{verbatimCommands}.
+
+ You can, optionally, specify \announce{2021-10-30}{verbatimCommands name feature} the
+ \texttt{verbatimCommands} field using the \texttt{name} field which takes a regular
+ expression as its argument; thank you to \cite{XuehaiPan} for contributing this feature.
+
+ For demonstration, then assuming that your file contains the commands
+ \texttt{verbinline}, \texttt{myinline} then the listings given in
+ \cref{lst:nameAsRegex3,lst:nameAsRegex4} are equivalent.
+
+ \begin{cmhtcbraster}[raster column skip=.1\linewidth]
+ \cmhlistingsfromfile{demonstrations/nameAsRegex3.yaml}[yaml-TCB]{\texttt{nameAsRegex3.yaml}}{lst:nameAsRegex3}
+ \cmhlistingsfromfile{demonstrations/nameAsRegex4.yaml}[yaml-TCB]{\texttt{nameAsRegex4.yaml}}{lst:nameAsRegex4}
+ \end{cmhtcbraster}
+
+ With reference to \cref{lst:nameAsRegex4}:
+ \begin{itemize}
+ \item the \texttt{name} field as specified here means \emph{any word followed by the word
+ inline};
+ \item we have used \texttt{nameAsRegex} to identify this field, but you can use any description
+ you like;
+ \item the \texttt{lookForThis} field is optional, and can take the values 0 (off) or 1 (on); by
+ default, it is assumed to be 1 (on).
+ \end{itemize}
+
+\yamltitle{noIndentBlock}*{fields}
+ If you have a block of code that you don't want \texttt{latexindent.pl} to touch (even if
+ \index{verbatim!noIndentBlock} it is \emph{not} a verbatim-like environment) then you can
+ wrap it in an environment from \texttt{noIndentBlock}; you can use any name you like for
+ this, provided you populate it as demonstrate in \cref{lst:noIndentBlock}.
+
+ \cmhlistingsfromfile[style=noIndentBlock]{../defaultSettings.yaml}[width=.4\linewidth,before=\centering,yaml-TCB]{\texttt{noIndentBlock}}{lst:noIndentBlock}
+
+ Of course, you don't want to have to specify these as null environments in your code, so
+ you use them with a comment symbol, \lstinline!%!, followed by as many spaces (possibly
+ none) as you like; see \cref{lst:noIndentBlockdemo} for example.
+
+ \cmhlistingsfromfile{demonstrations/noindentblock.tex}{\texttt{noIndentBlock.tex}}{lst:noIndentBlockdemo}
+
+ Important note: it is assumed that the \texttt{noindent} block statements specified in
+ this way appear on their own line.
+
+ The \announce{2021-06-19}{noIndentBlock specified as regex} \texttt{noIndentBlock} fields
+ can also be specified in terms of \texttt{begin} and \texttt{end} fields. We use the code
+ in \cref{lst:noIndentBlock1} to demonstrate this feature.%
+
+ \cmhlistingsfromfile{demonstrations/noindentblock1.tex}{\texttt{noIndentBlock1.tex}}{lst:noIndentBlock1}
+
+ The settings given in \cref{lst:noindent1,lst:noindent2} are equivalent:
+
+ \begin{cmhtcbraster}[raster columns=3,
+ raster left skip=-3.5cm,
+ raster right skip=-2cm,
+ raster column skip=.03\linewidth]
+ \cmhlistingsfromfile{demonstrations/noindent1.yaml}[yaml-TCB]{\texttt{noindent1.yaml}}{lst:noindent1}
+ \cmhlistingsfromfile{demonstrations/noindent2.yaml}[yaml-TCB]{\texttt{noindent2.yaml}}{lst:noindent2}
+ \cmhlistingsfromfile{demonstrations/noindent3.yaml}[yaml-TCB]{\texttt{noindent3.yaml}}{lst:noindent3}
+ \end{cmhtcbraster}
+
+ Upon running the commands
+ \begin{commandshell}
+latexindent.pl -l noindent1.yaml noindent1
+latexindent.pl -l noindent2.yaml noindent1
+\end{commandshell}
+ then we receive the output given in \cref{lst:noIndentBlock1-mod1}.
+
+ \cmhlistingsfromfile{demonstrations/noindentblock1-mod1.tex}{\texttt{noIndentBlock1.tex} using \cref{lst:noindent1} or \cref{lst:noindent2}}{lst:noIndentBlock1-mod1}
+
+ The \texttt{begin}, \texttt{body} and \texttt{end} fields for \texttt{noIndentBlock} are
+ all \emph{regular expressions}. If the \texttt{body} field is not specified, then it
+ takes a default value of \lstinline!.*?! which is written explicitly in
+ \cref{lst:noindent1}. In this context, we interpret \lstinline!.*?! in words as \emph{the
+ fewest number of characters (possibly none) until the `end' field is reached}.
+
+ The \texttt{lookForThis} field is optional, and can take the values 0 (off) or 1 (on); by
+ default, it is assumed to be 1 (on).
+
+ Using \cref{lst:noindent3} demonstrates setting \texttt{lookForThis} to 0 (off); running
+ the command
+ \begin{commandshell}
+latexindent.pl -l noindent3.yaml noindent1
+\end{commandshell}
+ gives the output in \cref{lst:noIndentBlock1-mod3}.
+
+ \cmhlistingsfromfile{demonstrations/noindentblock1-mod3.tex}{\texttt{noIndentBlock1.tex} using \cref{lst:noindent3}}{lst:noIndentBlock1-mod3}
+
+ We will demonstrate this feature later in the documentation in \cref{lst:href3}.
+
+ You can, optionally, specify \announce{2021-10-30}{noIndentBlock name feature} the
+ \texttt{noIndentBlock} field using the \texttt{name} field which takes a regular
+ expression as its argument; thank you to \cite{XuehaiPan} for contributing this feature.
+
+ For demonstration, then assuming that your file contains the environments
+ \texttt{testnoindent}, \texttt{testnoindent*} then the listings given in
+ \cref{lst:nameAsRegex5,lst:nameAsRegex6} are equivalent.
+
+ \begin{widepage}
+ \begin{cmhtcbraster}[raster column skip=.1\linewidth]
+ \cmhlistingsfromfile{demonstrations/nameAsRegex5.yaml}[yaml-TCB]{\texttt{nameAsRegex5.yaml}}{lst:nameAsRegex5}
+ \cmhlistingsfromfile{demonstrations/nameAsRegex6.yaml}[yaml-TCB]{\texttt{nameAsRegex6.yaml}}{lst:nameAsRegex6}
+ \end{cmhtcbraster}
+ \end{widepage}
+
+ With reference to \cref{lst:nameAsRegex6}:
+ \begin{itemize}
+ \item the \texttt{name} field as specified here means \emph{any word followed by the word
+ noindent, optionally followed by *};
+ \item we have used \texttt{nameAsRegex} to identify this field, but you can use any description
+ you like;
+ \item the \texttt{lookForThis} field is optional, and can take the values 0 (off) or 1 (on); by
+ default, it is assumed to be 1 (on).
+ \end{itemize}
+\subsection{filecontents and preamble}
+\yamltitle{fileContentsEnvironments}*{field}
+
+ Before \texttt{latexindent.pl} determines the difference between preamble (if any) and
+ the main document, it first searches for any of the environments specified in
+ \texttt{fileContentsEnvironments}, see \cref{lst:fileContentsEnvironments}. The behaviour
+ of \texttt{latexindent.pl} on these environments is determined by their location
+ (preamble or not), and the value \texttt{indentPreamble}, discussed next.
+
+ \cmhlistingsfromfile[style=fileContentsEnvironments]{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{fileContentsEnvironments}}{lst:fileContentsEnvironments}
+
+\yamltitle{indentPreamble}{0|1}
+
+ The preamble of a document can sometimes contain some trickier code for
+ \texttt{latexindent.pl} to operate upon. By default, \texttt{latexindent.pl} won't try to
+ operate on the preamble (as \texttt{indentPreamble} is set to \texttt{0}, by default),
+ but if you'd like \texttt{latexindent.pl} to try then change \texttt{indentPreamble} to
+ \texttt{1}.
+
+\yamltitle{lookForPreamble}*{fields}
+
+ Not all files contain preamble; for example, \texttt{sty}, \texttt{cls} and \texttt{bib}
+ files typically do \emph{not}. Referencing \cref{lst:lookForPreamble}, if you set, for
+ example, \texttt{.tex} to \texttt{0}, then regardless of the setting of the value of
+ \texttt{indentPreamble}, preamble will not be assumed when operating upon \texttt{.tex}
+ files.
+
+ \cmhlistingsfromfile[style=lookForPreamble]{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{lookForPreamble}{lst:lookForPreamble}
+\yamltitle{preambleCommandsBeforeEnvironments}{0|1}
+ Assuming that \texttt{latexindent.pl} is asked to operate upon the preamble of a
+ document, when this switch is set to \texttt{0} then environment code blocks will be
+ sought first, and then command code blocks. When this switch is set to \texttt{1},
+ commands will be sought first. The example that first motivated this switch contained the
+ code given in \cref{lst:motivatepreambleCommandsBeforeEnvironments}.
+
+ \begin{cmhlistings}{Motivating \texttt{preambleCommandsBeforeEnvironments}}{lst:motivatepreambleCommandsBeforeEnvironments}
+...
+preheadhook={\begin{mdframed}[style=myframedstyle]},
+postfoothook=\end{mdframed},
+...
+\end{cmhlistings}
+
+ \index{indentation!defaultIndent description}
+
+\subsection{Indentation and horizontal space}
+\yamltitle{defaultIndent}*{horizontal space}
+ This is the default indentation used in the absence of other details for the code block
+ with which we are working. The default value is \lstinline!\t! which means a tab; we will
+ explore customisation beyond \texttt{defaultIndent} in \vref{sec:noadd-indent-rules}.
+
+ If you're interested in experimenting with \texttt{latexindent.pl} then you can
+ \emph{remove} all indentation by setting \texttt{defaultIndent: ""}.
+
+\yamltitle{removeTrailingWhitespace}*{fields}\label{yaml:removeTrailingWhitespace}
+
+ Trailing white space can be removed both \emph{before} and \emph{after} processing the
+ document, as detailed in \cref{lst:removeTrailingWhitespace}; each of the fields can take
+ the values \texttt{0} or \texttt{1}. See
+ \vref{lst:removeTWS-before,lst:env-mlb5-modAll,lst:env-mlb5-modAll-remove-WS} for before
+ and after results. Thanks to \cite{vosskuhle} for providing this feature.
+
+ \begin{minipage}{.4\textwidth}
+ \cmhlistingsfromfile[style=removeTrailingWhitespace]{../defaultSettings.yaml}[before=\centering,yaml-TCB]{removeTrailingWhitespace}{lst:removeTrailingWhitespace}
+ \end{minipage}%
+ \hfill
+ \begin{minipage}{.5\textwidth}
+ \begin{yaml}[numbers=none]{removeTrailingWhitespace (alt)}[before=\centering]{lst:removeTrailingWhitespace-alt}
+removeTrailingWhitespace: 1
+\end{yaml}
+ \end{minipage}%
+
+ You can specify \texttt{removeTrailingWhitespace} simply as \texttt{0} or \texttt{1}, if
+ you wish; in this case, \announce{2017-06-28}{removeTrailingWhitespace}
+ \texttt{latexindent.pl} will set both \texttt{beforeProcessing} and
+ \texttt{afterProcessing} to the value you specify; see
+ \cref{lst:removeTrailingWhitespace-alt}.%
+
+\subsection{Aligning at delimiters}\label{subsec:align-at-delimiters}
+\yamltitle{lookForAlignDelims}*{fields}
+ This contains a list of code blocks that are operated upon in a special way by
+ \texttt{latexindent.pl} (see \cref{lst:aligndelims:basic}). In fact, the fields in
+ \texttt{lookForAlignDelims} can actually take two different forms: the \emph{basic}
+ version is shown in \cref{lst:aligndelims:basic} and the \emph{advanced} version in
+ \cref{lst:aligndelims:advanced}; we will discuss each in turn. \index{delimiters!advanced
+ settings of lookForAlignDelims}
+
+ \begin{yaml}[numbers=none]{\texttt{lookForAlignDelims} (basic)}[width=.8\linewidth,before=\centering]{lst:aligndelims:basic}
+lookForAlignDelims:
+ tabular: 1
+ tabularx: 1
+ longtable: 1
+ array: 1
+ matrix: 1
+ ...
+ \end{yaml}
+
+ Specifying code blocks in this field instructs \texttt{latexindent.pl} to try and align
+ each column by its alignment delimiters. It does have some limitations (discussed further
+ in \cref{sec:knownlimitations}), but in many cases it will produce results such as those
+ in \cref{lst:tabularbefore:basic,lst:tabularafter:basic}.
+
+ If you find that \texttt{latexindent.pl} does not perform satisfactorily on such
+ environments then you can set the relevant key to \texttt{0}, for example
+ \texttt{tabular: 0}; alternatively, if you just want to ignore \emph{specific} instances
+ of the environment, you could wrap them in something from \texttt{noIndentBlock} (see
+ \vref{lst:noIndentBlock}).
+
+ \begin{cmhtcbraster}
+ \cmhlistingsfromfile{demonstrations/tabular1.tex}{\texttt{tabular1.tex}}{lst:tabularbefore:basic}
+ \cmhlistingsfromfile{demonstrations/tabular1-default.tex}{\texttt{tabular1.tex} default output}{lst:tabularafter:basic}
+ \end{cmhtcbraster}
+
+ If, for example, you wish to remove the alignment of the \lstinline!\\! within a
+ delimiter-aligned block, then the advanced form of \texttt{lookForAlignDelims} shown in
+ \cref{lst:aligndelims:advanced} is for you. \index{regular expressions!delimiterRegEx}
+ \index{regular expressions!ampersand alignment} \index{delimiters!default settings of
+ lookForAlignDelims} \index{delimiters!ampersand \&} \index{delimiters!advanced settings}
+ \index{delimiters!lookForAlignDelims}
+
+ \cmhlistingsfromfile[style=lookForAlignDelims]{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{lookForAlignDelims} (advanced)}{lst:aligndelims:advanced}
+
+ Note that you can use a mixture of the basic and advanced form: in
+ \cref{lst:aligndelims:advanced} \texttt{tabular} and \texttt{tabularx} are advanced and
+ \texttt{longtable} is basic. When using the advanced form, each field should receive at
+ least 1 sub-field, and \emph{can} (but does not have to) receive any of the following
+ fields:
+ \begin{itemize}
+ \item \texttt{delims}: binary switch (0 or 1) equivalent to simply specifying, for
+ example, \texttt{tabular: 1} in the basic version shown in \cref{lst:aligndelims:basic}.
+ If \texttt{delims} is set to \texttt{0} then the align at ampersand routine will not be
+ called for this code block (default: 1);
+ \item \texttt{alignDoubleBackSlash}: binary switch (0 or 1) to determine if
+ \lstinline!\\!
+ should be aligned (default: 1);
+ \item \texttt{spacesBeforeDoubleBackSlash}: optionally,%
+ \announce{2018-01-13}*{update to spacesBeforeDoubleBackSlash in ampersand alignment}
+ specifies the number (integer $\geq$ 0) of spaces to be inserted before
+ \lstinline!\\! (default: 1); %\footnote{Previously this only activated if \texttt{alignDoubleBackSlash} was set to \texttt{0}.}
+ \item \announce{2017-06-19}{multiColumnGrouping} \texttt{multiColumnGrouping}: binary switch (0
+ or 1) that details if \texttt{latexindent.pl} should group columns above and below a
+ \lstinline!\multicolumn! command (default: 0);
+ \item \announce{2017-06-19}{alignRowsWithoutMaxDelims} \texttt{alignRowsWithoutMaxDelims}:
+ binary switch (0 or 1) that details if rows that do not contain the maximum number of
+ delimeters should be formatted so as to have the ampersands aligned (default: 1);
+ \item \announce{2018-01-13}{spacesBeforeAmpersand in ampersand
+ alignment}\texttt{spacesBeforeAmpersand}: optionally specifies the number (integer $\geq$
+ 0) of spaces to be placed \emph{before} ampersands (default: 1);
+ \item \announce{2018-01-13}{spacesAfterAmpersand in ampersand
+ alignment}\texttt{spacesAfterAmpersand}: optionally specifies the number (integer $\geq$
+ 0) of spaces to be placed \emph{After} ampersands (default: 1);
+ \item \announce{2018-01-13}{justification of cells in ampersand
+ alignment}\texttt{justification}: optionally specifies the justification of each cell as
+ either \emph{left} or \emph{right} (default: left);
+ \item \announce{2020-03-21}{align final double back slash}{alignFinalDoubleBackSlash}
+ optionally specifies if the \emph{final} double back slash should be used for alignment
+ (default: 0);
+ \item \announce{2020-03-21}{don't measure feature}{dontMeasure} optionally specifies if
+ user-specified cells, rows or the largest entries should \emph{not} be measured (default:
+ 0);
+ \item \announce{2020-03-21}{delimiter RegEx feature}{delimiterRegEx} optionally specifies the
+ pattern matching to be used for the alignment delimeter (default:
+ \lstinline* '(?<!\\)(&)'*);
+ \item \announce{2020-03-21}{delimiter justification}{delimiterJustification} optionally
+ specifies the justification for the alignment delimeters (default: left); note that this
+ feature is only useful if you have delimiters of different lengths in the same column,
+ discussed in \cref{sec:delimiter-reg-ex};
+ \item \announce{2021-12-13}{lookForChildCodeBlocks feature}{lookForChildCodeBlocks} optionally
+ instructs \texttt{latexindent.pl} to search for child code blocks or not (default: 1),
+ discussed in \cref{sec:lookForChildCodeBlocks}.
+ \end{itemize}
+
+ We will explore most of these features using the file \texttt{tabular2.tex} in
+ \cref{lst:tabular2} (which contains a \lstinline!\multicolumn! command), and the YAML
+ files in \crefrange{lst:tabular2YAML}{lst:tabular8YAML}; we will explore
+ \texttt{alignFinalDoubleBackSlash} in \cref{lst:tabular4}; the \texttt{dontMeasure}
+ feature will be described in \cref{sec:dontMeasure}, and \texttt{delimiterRegEx} in
+ \cref{sec:delimiter-reg-ex}.
+
+ \cmhlistingsfromfile{demonstrations/tabular2.tex}{\texttt{tabular2.tex}}{lst:tabular2}
+ \begin{minipage}{.45\textwidth}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/tabular2.yaml}[yaml-TCB]{\texttt{tabular2.yaml}}{lst:tabular2YAML}
+ \end{minipage}%
+ \hfill
+ \begin{minipage}{.48\textwidth}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/tabular3.yaml}[yaml-TCB]{\texttt{tabular3.yaml}}{lst:tabular3YAML}
+ \end{minipage}%
+
+ \begin{minipage}{.45\textwidth}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/tabular4.yaml}[yaml-TCB]{\texttt{tabular4.yaml}}{lst:tabular4YAML}
+ \end{minipage}%
+ \hfill
+ \begin{minipage}{.48\textwidth}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/tabular5.yaml}[yaml-TCB]{\texttt{tabular5.yaml}}{lst:tabular5YAML}
+ \end{minipage}%
+
+ \begin{minipage}{.45\textwidth}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/tabular6.yaml}[yaml-TCB]{\texttt{tabular6.yaml}}{lst:tabular6YAML}
+ \end{minipage}%
+ \hfill
+ \begin{minipage}{.48\textwidth}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/tabular7.yaml}[yaml-TCB]{\texttt{tabular7.yaml}}{lst:tabular7YAML}
+ \end{minipage}%
+
+ \begin{minipage}{.48\textwidth}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/tabular8.yaml}[yaml-TCB]{\texttt{tabular8.yaml}}{lst:tabular8YAML}
+ \end{minipage}%
+
+ On running the commands \index{delimiters!spacing demonstration} \index{switches!-l
+ demonstration}
+ \begin{commandshell}
+latexindent.pl tabular2.tex
+latexindent.pl tabular2.tex -l tabular2.yaml
+latexindent.pl tabular2.tex -l tabular3.yaml
+latexindent.pl tabular2.tex -l tabular2.yaml,tabular4.yaml
+latexindent.pl tabular2.tex -l tabular2.yaml,tabular5.yaml
+latexindent.pl tabular2.tex -l tabular2.yaml,tabular6.yaml
+latexindent.pl tabular2.tex -l tabular2.yaml,tabular7.yaml
+latexindent.pl tabular2.tex -l tabular2.yaml,tabular8.yaml
+\end{commandshell}
+ we obtain the respective outputs given in
+ \crefrange{lst:tabular2-default}{lst:tabular2-mod8}.
+
+ \begin{widepage}
+ \cmhlistingsfromfile{demonstrations/tabular2-default.tex}{\texttt{tabular2.tex} default output}{lst:tabular2-default}
+ \cmhlistingsfromfile{demonstrations/tabular2-mod2.tex}{\texttt{tabular2.tex} using \cref{lst:tabular2YAML}}{lst:tabular2-mod2}
+ \cmhlistingsfromfile{demonstrations/tabular2-mod3.tex}{\texttt{tabular2.tex} using \cref{lst:tabular3YAML}}{lst:tabular2-mod3}
+ \cmhlistingsfromfile{demonstrations/tabular2-mod4.tex}{\texttt{tabular2.tex} using \cref{lst:tabular2YAML,lst:tabular4YAML}}{lst:tabular2-mod4}
+ \cmhlistingsfromfile{demonstrations/tabular2-mod5.tex}{\texttt{tabular2.tex} using \cref{lst:tabular2YAML,lst:tabular5YAML}}{lst:tabular2-mod5}
+ \cmhlistingsfromfile{demonstrations/tabular2-mod6.tex}{\texttt{tabular2.tex} using \cref{lst:tabular2YAML,lst:tabular6YAML}}{lst:tabular2-mod6}
+ \cmhlistingsfromfile{demonstrations/tabular2-mod7.tex}{\texttt{tabular2.tex} using \cref{lst:tabular2YAML,lst:tabular7YAML}}{lst:tabular2-mod7}
+ \cmhlistingsfromfile{demonstrations/tabular2-mod8.tex}{\texttt{tabular2.tex} using \cref{lst:tabular2YAML,lst:tabular8YAML}}{lst:tabular2-mod8}
+ \end{widepage}
+
+ Notice in particular:
+ \begin{itemize}
+ \item in both \cref{lst:tabular2-default,lst:tabular2-mod2} all rows have been aligned at the
+ ampersand, even those that do not contain the maximum number of ampersands (3 ampersands,
+ in this case);
+ \item in \cref{lst:tabular2-default} the columns have been aligned at the ampersand;
+ \item in \cref{lst:tabular2-mod2} the \lstinline!\multicolumn! command has grouped the $2$
+ columns beneath \emph{and} above it, because \texttt{multiColumnGrouping} is set to $1$
+ in \cref{lst:tabular2YAML};
+ \item in \cref{lst:tabular2-mod3} rows~3 and~6 have \emph{not} been aligned at the ampersand,
+ because \texttt{alignRowsWithoutMaxDelims} has been to set to $0$ in
+ \cref{lst:tabular3YAML}; however, the \lstinline!\\! \emph{have} still been aligned;
+ \item in \cref{lst:tabular2-mod4} the columns beneath and above the \lstinline!\multicolumn!
+ commands have been grouped (because \texttt{multiColumnGrouping} is set to $1$), and
+ there are at least $4$ spaces \emph{before} each aligned ampersand because
+ \texttt{spacesBeforeAmpersand} is set to $4$;
+ \item in \cref{lst:tabular2-mod5} the columns beneath and above the \lstinline!\multicolumn!
+ commands have been grouped (because \texttt{multiColumnGrouping} is set to $1$), and
+ there are at least $4$ spaces \emph{after} each aligned ampersand because
+ \texttt{spacesAfterAmpersand} is set to $4$;
+ \item in \cref{lst:tabular2-mod6} the \lstinline!\\! have \emph{not} been aligned, because
+ \texttt{alignDoubleBackSlash} is set to \texttt{0}, otherwise the output is the same as
+ \cref{lst:tabular2-mod2};
+ \item in \cref{lst:tabular2-mod7} the \lstinline!\\! \emph{have} been aligned, and because
+ \texttt{spacesBeforeDoubleBackSlash} is set to \texttt{0}, there are no spaces ahead of
+ them; the output is otherwise the same as \cref{lst:tabular2-mod2};
+ \item in \cref{lst:tabular2-mod8} the cells have been \emph{right}-justified; note that cells
+ above and below the \lstinline!\multicol! statements have still been group correctly,
+ because of the settings in \cref{lst:tabular2YAML}.
+ \end{itemize}
+
+\subsubsection{lookForAlignDelims: spacesBeforeAmpersand}
+ The \texttt{spacesBeforeAmpersand} \announce{2021-06-19}*{spacesBeforeAmpersand leading
+ blank column upgrade} can be specified in a few different ways. The \emph{basic} form is
+ demonstrated in \cref{lst:tabular4YAML}, but we can customise the behaviour further by
+ specifying if we would like this value to change if it encounters a \emph{leading blank
+ column}; that is, when the first column contains only zero-width entries. We refer to
+ this as the \emph{advanced} form.%
+
+ We demonstrate this feature in relation to \cref{lst:aligned1}; upon running the
+ following command
+ \begin{commandshell}
+latexindent.pl aligned1.tex -o=+-default
+\end{commandshell}
+ then we receive the default output given in \cref{lst:aligned1-default}.
+
+ \begin{cmhtcbraster}
+ \cmhlistingsfromfile{demonstrations/aligned1.tex}{\texttt{aligned1.tex}}{lst:aligned1}
+ \cmhlistingsfromfile{demonstrations/aligned1-default.tex}{\texttt{aligned1-default.tex}}{lst:aligned1-default}
+ \end{cmhtcbraster}
+
+ The settings in \crefrange{lst:sba1}{lst:sba4} are all equivlanent; we have used the
+ not-yet discussed \texttt{noAdditionalIndent} field (see \vref{sec:noadd-indent-rules})
+ which will assist in the demonstration in what follows.
+ \begin{cmhtcbraster}[raster columns=2, ]
+ \cmhlistingsfromfile{demonstrations/sba1.yaml}[yaml-TCB]{\texttt{sba1.yaml}}{lst:sba1}
+ \cmhlistingsfromfile{demonstrations/sba2.yaml}[yaml-TCB]{\texttt{sba2.yaml}}{lst:sba2}
+ \cmhlistingsfromfile{demonstrations/sba3.yaml}[yaml-TCB]{\texttt{sba3.yaml}}{lst:sba3}
+ \cmhlistingsfromfile{demonstrations/sba4.yaml}[yaml-TCB]{\texttt{sba4.yaml}}{lst:sba4}
+ \end{cmhtcbraster}
+ Upon running the following commands
+ \begin{commandshell}
+latexindent.pl aligned1.tex -l sba1.yaml
+latexindent.pl aligned1.tex -l sba2.yaml
+latexindent.pl aligned1.tex -l sba3.yaml
+latexindent.pl aligned1.tex -l sba4.yaml
+\end{commandshell}
+ then we receive the (same) output given in \cref{lst:aligned1-mod1}; we note that there
+ is \emph{one space} before each ampersand.
+
+ \begin{cmhtcbraster}
+ \cmhlistingsfromfile{demonstrations/aligned1-mod1.tex}{\texttt{aligned1-mod1.tex}}{lst:aligned1-mod1}
+ \end{cmhtcbraster}
+
+ We note in particular:
+ \begin{itemize}
+ \item \cref{lst:sba1} demonstrates the \emph{basic} form for
+ \texttt{lookForAlignDelims}; in this case,
+ the default values are specified as in \vref{lst:aligndelims:advanced};
+ \item \cref{lst:sba2} demonstrates the \emph{advanced} form for
+ \texttt{lookForAlignDelims}
+ and specified \texttt{spacesBeforeAmpersand}. The default value is \texttt{1};
+ \item \cref{lst:sba3} demonstrates the new \emph{advanced} way to specify
+ \texttt{spacesBeforeAmpersand}, and
+ for us to set the \texttt{default} value that sets the number of spaces before ampersands
+ which are \emph{not} in leading blank columns. The default value is \texttt{1}.
+
+ We note that \texttt{leadingBlankColumn} has not been specified in \cref{lst:sba3}, and
+ it will inherit the value from \texttt{default};
+ \item \cref{lst:sba4} demonstrates spaces to be used before amperands for
+ \emph{leading blank columns}.
+ We note that \emph{default} has not been specified, and it will be set to \texttt{1} by
+ default.
+ \end{itemize}
+ We can customise the space before the ampersand in the \emph{leading blank column} of
+ \cref{lst:aligned1-mod1} by using either of \cref{lst:sba5,lst:sba6}, which are
+ equivalent.
+
+ \begin{cmhtcbraster}
+ \cmhlistingsfromfile{demonstrations/sba5.yaml}[yaml-TCB]{\texttt{sba5.yaml}}{lst:sba5}
+ \cmhlistingsfromfile{demonstrations/sba6.yaml}[yaml-TCB]{\texttt{sba6.yaml}}{lst:sba6}
+ \end{cmhtcbraster}
+
+ Upon running
+ \begin{commandshell}
+latexindent.pl aligned1.tex -l sba5.yaml
+latexindent.pl aligned1.tex -l sba6.yaml
+\end{commandshell}
+ then we receive the (same) output given in \cref{lst:aligned1-mod5}. We note that the
+ space before the ampersand in the \emph{leading blank column} has been set to \texttt{0}
+ by \cref{lst:sba6}.
+
+ We can demonstrated this feature further using the settings in \cref{lst:sba7} which give
+ the output in \cref{lst:aligned1-mod7}.
+
+ \begin{cmhtcbraster}[raster columns=3,
+ raster left skip=-3.75cm,
+ raster right skip=-2cm,]
+ \cmhlistingsfromfile{demonstrations/aligned1-mod5.tex}{\texttt{aligned1-mod5.tex}}{lst:aligned1-mod5}
+ \cmhlistingsfromfile{demonstrations/aligned1-mod7.tex}{\texttt{aligned1.tex} using \cref{lst:sba7}}{lst:aligned1-mod7}
+ \cmhlistingsfromfile{demonstrations/sba7.yaml}[yaml-TCB]{\texttt{sba7.yaml}}{lst:sba7}
+ \end{cmhtcbraster}
+\subsubsection{lookForAlignDelims: alignFinalDoubleBackSlash}
+ We explore \announce{2020-03-21}{alignFinalDoubleBackSlash demonstration} the
+ \texttt{alignFinalDoubleBackSlash} feature by using the file in \cref{lst:tabular4}. Upon
+ running the following commands \index{delimiters!double backslash demonstration}
+ \index{switches!-y demonstration} \index{switches!-o demonstration}%
+ \begin{commandshell}
+latexindent.pl tabular4.tex -o=+-default
+latexindent.pl tabular4.tex -o=+-FDBS -y="lookForAlignDelims:tabular:alignFinalDoubleBackSlash:1"
+\end{commandshell}
+ then we receive the respective outputs given in \cref{lst:tabular4-default} and
+ \cref{lst:tabular4-FDBS}.
+
+ \begin{cmhtcbraster}[raster columns=3,
+ raster left skip=-3.75cm,
+ raster right skip=-2cm,]
+ \cmhlistingsfromfile{demonstrations/tabular4.tex}{\texttt{tabular4.tex}}{lst:tabular4}
+ \cmhlistingsfromfile{demonstrations/tabular4-default.tex}{\texttt{tabular4-default.tex}}{lst:tabular4-default}
+ \cmhlistingsfromfile{demonstrations/tabular4-FDBS.tex}{\texttt{tabular4-FDBS.tex}}{lst:tabular4-FDBS}
+ \end{cmhtcbraster}
+
+ We note that in:
+ \begin{itemize}
+ \item \cref{lst:tabular4-default}, by default, the \emph{first} set of double back
+ slashes in the first row of the \texttt{tabular} environment have been used for
+ alignment;
+ \item \cref{lst:tabular4-FDBS}, the \emph{final} set of double back slashes in the
+ first row have been used, because we specified \texttt{alignFinalDoubleBackSlash} as 1.
+ \end{itemize}
+
+ As of Version 3.0, the alignment routine works on mandatory and optional arguments within
+ commands, and also within `special' code blocks (see \texttt{specialBeginEnd} on
+ \cpageref{yaml:specialBeginEnd}); for example, assuming that you have a command called
+ \lstinline!\matrix! and that it is populated within \texttt{lookForAlignDelims} (which it
+ is, by default), and that you run the command
+ \begin{commandshell}
+latexindent.pl matrix1.tex
+\end{commandshell}
+ then the before-and-after results shown in \cref{lst:matrixbefore,lst:matrixafter} are
+ achievable by default.
+
+ \begin{cmhtcbraster}
+ \cmhlistingsfromfile{demonstrations/matrix1.tex}{\texttt{matrix1.tex}}{lst:matrixbefore}
+ \cmhlistingsfromfile{demonstrations/matrix1-default.tex}{\texttt{matrix1.tex} default output}{lst:matrixafter}
+ \end{cmhtcbraster}
+
+ If you have blocks of code that you wish to align at the \& character that are \emph{not}
+ wrapped in, for example, \lstinline!\begin{tabular}! \ldots \lstinline!\end{tabular}!,
+ then you can use the mark up illustrated in \cref{lst:alignmentmarkup}; the default
+ output is shown in \cref{lst:alignmentmarkup-default}. Note that the \lstinline!%*! must
+ be next to each other, but that there can be any number of spaces (possibly none) between
+ the \lstinline!*! and \lstinline!\begin{tabular}!; note also that you may use any
+ environment name that you have specified in \texttt{lookForAlignDelims}.
+
+ \begin{cmhtcbraster}[raster left skip=-1.5cm,]
+ \cmhlistingsfromfile{demonstrations/align-block.tex}{\texttt{align-block.tex}}{lst:alignmentmarkup}
+ \cmhlistingsfromfile{demonstrations/align-block-default.tex}{\texttt{align-block.tex} default output}{lst:alignmentmarkup-default}
+ \end{cmhtcbraster}
+
+ With reference to \vref{tab:code-blocks} and the, yet undiscussed, fields of
+ \texttt{noAdditionalIndent} and \texttt{indentRules} (see \vref{sec:noadd-indent-rules}),
+ these comment-marked blocks are considered \texttt{environments}.
+
+\subsubsection{lookForAlignDelims: the dontMeasure feature}\label{sec:dontMeasure}
+ The \announce{2020-03-21}{don't measure feature} \texttt{lookForAlignDelims} field can,
+ optionally, receive the \texttt{dontMeasure} option which can be specified in a few
+ different ways. We will explore this feature in relation to the code given in
+ \cref{lst:tabular-DM}; the default output is shown in \cref{lst:tabular-DM-default}.
+ \index{delimiters!dontMeasure feature}%
+
+ \begin{cmhtcbraster}[raster left skip=-1.5cm,]
+ \cmhlistingsfromfile{demonstrations/tabular-DM.tex}{\texttt{tabular-DM.tex}}{lst:tabular-DM}
+ \cmhlistingsfromfile{demonstrations/tabular-DM-default.tex}{\texttt{tabular-DM.tex} default output}{lst:tabular-DM-default}
+ \end{cmhtcbraster}
+
+ The \texttt{dontMeasure} field can be specified as \texttt{largest}, and in which case,
+ the largest element will not be measured; with reference to the YAML file given in
+ \cref{lst:dontMeasure1}, we can run the command \index{switches!-l demonstration}
+ \begin{commandshell}
+latexindent.pl tabular-DM.tex -l=dontMeasure1.yaml
+\end{commandshell}
+ and receive the output given in \cref{lst:tabular-DM-mod1}.
+
+ \begin{cmhtcbraster}
+ \cmhlistingsfromfile{demonstrations/tabular-DM-mod1.tex}{\texttt{tabular-DM.tex} using \cref{lst:dontMeasure1}}{lst:tabular-DM-mod1}
+ \cmhlistingsfromfile{demonstrations/dontMeasure1.yaml}[yaml-TCB]{\texttt{dontMeasure1.yaml}}{lst:dontMeasure1}
+ \end{cmhtcbraster}
+
+ We note that the \emph{largest} column entries have not contributed to the measuring
+ routine.
+
+ The \texttt{dontMeasure} field can also be specified in the form demonstrated in
+ \cref{lst:dontMeasure2}. On running the following commands, \index{switches!-l
+ demonstration}
+ \begin{commandshell}
+latexindent.pl tabular-DM.tex -l=dontMeasure2.yaml
+\end{commandshell}
+ we receive the output in \cref{lst:tabular-DM-mod2}. \index{regular
+ expressions!dontMeasure feature, cell}
+
+ \begin{cmhtcbraster}
+ \cmhlistingsfromfile{demonstrations/tabular-DM-mod2.tex}{\texttt{tabular-DM.tex} using \cref{lst:dontMeasure2} or \cref{lst:dontMeasure3}}{lst:tabular-DM-mod2}
+ \cmhlistingsfromfile{demonstrations/dontMeasure2.yaml}[yaml-TCB]{\texttt{dontMeasure2.yaml}}{lst:dontMeasure2}
+ \end{cmhtcbraster}
+
+ We note that in \cref{lst:dontMeasure2} we have specified entries not to be measured, one
+ entry per line.
+
+ The \texttt{dontMeasure} field can also be specified in the forms demonstrated in
+ \cref{lst:dontMeasure3} and \cref{lst:dontMeasure4}. Upon running the commands
+ \index{switches!-l demonstration}
+ \begin{commandshell}
+latexindent.pl tabular-DM.tex -l=dontMeasure3.yaml
+latexindent.pl tabular-DM.tex -l=dontMeasure4.yaml
+\end{commandshell}
+ we receive the output given in \cref{lst:tabular-DM-mod3} \index{regular
+ expressions!lowercase alph a-z}
+ \begin{cmhtcbraster}[raster columns=3,
+ raster left skip=-3.5cm,
+ raster right skip=-2cm,
+ raster column skip=.03\linewidth]
+ \cmhlistingsfromfile{demonstrations/tabular-DM-mod3.tex}{\texttt{tabular-DM.tex} using \cref{lst:dontMeasure3} or \cref{lst:dontMeasure3}}{lst:tabular-DM-mod3}
+ \cmhlistingsfromfile{demonstrations/dontMeasure3.yaml}[yaml-TCB]{\texttt{dontMeasure3.yaml}}{lst:dontMeasure3}
+ \cmhlistingsfromfile{demonstrations/dontMeasure4.yaml}[yaml-TCB]{\texttt{dontMeasure4.yaml}}{lst:dontMeasure4}
+ \end{cmhtcbraster}
+ We note that in:
+ \begin{itemize}
+ \item \cref{lst:dontMeasure3} we have specified entries not to be measured, each one has a
+ \emph{string} in the \texttt{this}
+ field, together with an optional specification of \texttt{applyTo} as \texttt{cell};
+ \item \cref{lst:dontMeasure4} we have specified entries not to be measured as a
+ \emph{regular expression} using
+ the \texttt{regex} field, together with an optional specification of \texttt{applyTo} as
+ \texttt{cell} field, together with an optional specification of \texttt{applyTo} as
+ \texttt{cell}.
+ \end{itemize}
+ In both cases, the default value of \texttt{applyTo} is \texttt{cell}, and does not need
+ to be specified.
+
+ We may also specify the \texttt{applyTo} field as \texttt{row}, a demonstration of which
+ is given in \cref{lst:dontMeasure5}; upon running \index{switches!-l demonstration}
+ \begin{commandshell}
+latexindent.pl tabular-DM.tex -l=dontMeasure5.yaml
+\end{commandshell}
+ we receive the output in \cref{lst:tabular-DM-mod5}.
+ \begin{cmhtcbraster}
+ \cmhlistingsfromfile{demonstrations/tabular-DM-mod5.tex}{\texttt{tabular-DM.tex} using \cref{lst:dontMeasure5}}{lst:tabular-DM-mod5}
+ \cmhlistingsfromfile{demonstrations/dontMeasure5.yaml}[yaml-TCB]{\texttt{dontMeasure5.yaml}}{lst:dontMeasure5}
+ \end{cmhtcbraster}
+
+ Finally, the \texttt{applyTo} field can be specified as \texttt{row}, together with a
+ \texttt{regex} expression. For example, for the settings given in
+ \cref{lst:dontMeasure6}, upon running \index{switches!-l demonstration}
+ \begin{commandshell}
+latexindent.pl tabular-DM.tex -l=dontMeasure6.yaml
+\end{commandshell}
+ we receive the output in \cref{lst:tabular-DM-mod6}. \index{regular
+ expressions!dontMeasure feature, row} \index{regular expressions!lowercase alph a-z}
+
+ \begin{cmhtcbraster}
+ \cmhlistingsfromfile{demonstrations/tabular-DM-mod6.tex}{\texttt{tabular-DM.tex} using \cref{lst:dontMeasure6}}{lst:tabular-DM-mod6}
+ \cmhlistingsfromfile{demonstrations/dontMeasure6.yaml}[yaml-TCB]{\texttt{dontMeasure6.yaml}}{lst:dontMeasure6}
+ \end{cmhtcbraster}
+
+\subsubsection{lookForAlignDelims: the delimiterRegEx and delimiterJustification feature}\label{sec:delimiter-reg-ex}
+
+ The delimiter alignment \announce{2020-03-21}{delimiterRegEx feature} will, by default,
+ align code blocks at the ampersand character. The behaviour is controlled by the
+ \texttt{delimiterRegEx} field within \texttt{lookForAlignDelims}; the default value is
+ \lstinline*'(?<!\\)(&)'*, which can be read as: \emph{an ampersand, as long as it is not
+ immediately preceeded by a backslash}. \index{warning!capturing parenthesis for
+ lookForAlignDelims} \index{capturing parenthesis (regex)} \index{regular
+ expressions!capturing parenthesis} \index{delimiters!delimiterRegEx}
+ \index{delimiters!delimiter justification (left or right)}%
+
+ \begin{warning}
+ Important: note the `capturing' parenthesis in the \lstinline!(&)! which are necessary;
+ if you intend to customise this field, then be sure to include them appropriately.
+ \end{warning}
+
+ We demonstrate how to customise this with respect to the code given in
+ \cref{lst:tabbing}; the default output from \lstinline!latexindent.pl! is given in
+ \cref{lst:tabbing-default}.
+
+ \begin{cmhtcbraster}
+ \cmhlistingsfromfile{demonstrations/tabbing.tex}{\texttt{tabbing.tex}}{lst:tabbing}
+ \cmhlistingsfromfile{demonstrations/tabbing-default.tex}{\texttt{tabbing.tex} default output}{lst:tabbing-default}
+ \end{cmhtcbraster}
+
+ Let's say that we wish to align the code at either the \lstinline!\=! or \lstinline!\>!.
+ We employ the settings given in \cref{lst:delimiterRegEx1} and run the command
+ \index{switches!-l demonstration}
+ \begin{commandshell}
+latexindent.pl tabbing.tex -l=delimiterRegEx1.yaml
+\end{commandshell}
+ to receive the output given in \cref{lst:tabbing-mod1}. \index{regular
+ expressions!delimiter regex at \textbackslash= or \textbackslash>}
+
+ \begin{cmhtcbraster}
+ \cmhlistingsfromfile{demonstrations/tabbing-mod1.tex}{\texttt{tabbing.tex} using \cref{lst:delimiterRegEx1}}{lst:tabbing-mod1}
+ \cmhlistingsfromfile{demonstrations/delimiterRegEx1.yaml}[yaml-TCB]{\texttt{delimiterRegEx1.yaml}}{lst:delimiterRegEx1}
+ \end{cmhtcbraster}
+ We note that:
+ \begin{itemize}
+ \item in \cref{lst:tabbing-mod1} the code has been aligned, as intended, at both the
+ \lstinline!\=! and \lstinline!\>!;
+ \item in \cref{lst:delimiterRegEx1} we have heeded the warning and captured the expression
+ using grouping parenthesis, specified a backslash using \lstinline!\\! and said that it
+ must be followed by either \lstinline!=! or \lstinline!>!.
+ \end{itemize}
+ We can explore \texttt{delimiterRegEx} a little further using the settings in
+ \cref{lst:delimiterRegEx2} and run the command \index{switches!-l demonstration}
+ \begin{commandshell}
+latexindent.pl tabbing.tex -l=delimiterRegEx2.yaml
+\end{commandshell}
+ to receive the output given in \cref{lst:tabbing-mod2}. \index{regular
+ expressions!delimiter regex at only \textbackslash>}
+
+ \begin{cmhtcbraster}
+ \cmhlistingsfromfile{demonstrations/tabbing-mod2.tex}{\texttt{tabbing.tex} using \cref{lst:delimiterRegEx2}}{lst:tabbing-mod2}
+ \cmhlistingsfromfile{demonstrations/delimiterRegEx2.yaml}[yaml-TCB]{\texttt{delimiterRegEx2.yaml}}{lst:delimiterRegEx2}
+ \end{cmhtcbraster}
+ We note that only the \lstinline!\>! have been aligned.
+
+ Of course, the other lookForAlignDelims options can be used alongside the
+ \texttt{delimiterRegEx}; regardless of the type of delimiter being used (ampersand or
+ anything else), the fields from \vref{lst:aligndelims:advanced} remain the same; for
+ example, using the settings in \cref{lst:delimiterRegEx3}, and running \index{switches!-l
+ demonstration}
+ \begin{commandshell}
+latexindent.pl tabbing.tex -l=delimiterRegEx3.yaml
+\end{commandshell}
+ to receive the output given in \cref{lst:tabbing-mod3}.
+
+ \begin{cmhtcbraster}
+ \cmhlistingsfromfile{demonstrations/tabbing-mod3.tex}{\texttt{tabbing.tex} using \cref{lst:delimiterRegEx3}}{lst:tabbing-mod3}
+ \cmhlistingsfromfile{demonstrations/delimiterRegEx3.yaml}[yaml-TCB]{\texttt{delimiterRegEx3.yaml}}{lst:delimiterRegEx3}
+ \end{cmhtcbraster}
+
+ It is possible that delimiters specified within \texttt{delimiterRegEx} can be of
+ different lengths. Consider the file in \cref{lst:tabbing1}, and associated YAML in
+ \cref{lst:delimiterRegEx4}. Note that the \cref{lst:delimiterRegEx4} specifies the option
+ for the delimiter to be either \lstinline!#! or \lstinline!\>!, \emph{which are different
+ lengths}. Upon running the command \index{switches!-l demonstration} \index{switches!-o
+ demonstration}
+ \begin{commandshell}
+latexindent.pl tabbing1.tex -l=delimiterRegEx4.yaml -o=+-mod4
+\end{commandshell}
+ we receive the output in \cref{lst:tabbing1-mod4}. \index{regular expressions!delimiter
+ regex at \#}
+
+ \begin{cmhtcbraster}[raster columns=3,
+ raster left skip=-3.5cm,
+ raster right skip=-2cm,
+ raster column skip=.03\linewidth]
+ \cmhlistingsfromfile{demonstrations/tabbing1.tex}{\texttt{tabbing1.tex}}{lst:tabbing1}
+ \cmhlistingsfromfile{demonstrations/tabbing1-mod4.tex}{\texttt{tabbing1-mod4.tex}}{lst:tabbing1-mod4}
+ \cmhlistingsfromfile{demonstrations/delimiterRegEx4.yaml}[yaml-TCB]{\texttt{delimiterRegEx4.yaml}}{lst:delimiterRegEx4}
+ \end{cmhtcbraster}
+
+ You can set the \emph{delimiter} justification as either \texttt{left} (default) or
+ \texttt{right}, which will only have effect when delimiters in the same column have
+ different lengths. Using the settings in \cref{lst:delimiterRegEx5} and running the
+ command \index{switches!-l demonstration} \index{switches!-o demonstration}
+ \begin{commandshell}
+latexindent.pl tabbing1.tex -l=delimiterRegEx5.yaml -o=+-mod5
+\end{commandshell}
+ gives the output in \cref{lst:tabbing1-mod5}. \index{regular expressions!delimiter regex
+ at \# or \textbackslash>}
+
+ \begin{cmhtcbraster}
+ \cmhlistingsfromfile{demonstrations/tabbing1-mod5.tex}{\texttt{tabbing1-mod5.tex}}{lst:tabbing1-mod5}
+ \cmhlistingsfromfile{demonstrations/delimiterRegEx5.yaml}[yaml-TCB]{\texttt{delimiterRegEx5.yaml}}{lst:delimiterRegEx5}
+ \end{cmhtcbraster}
+
+ Note that in \cref{lst:tabbing1-mod5} the second set of delimiters have been \emph{right
+ aligned} -- it is quite subtle!
+
+\subsubsection{lookForAlignDelims: lookForChildCodeBlocks}\label{sec:lookForChildCodeBlocks}
+ There \announce{2021-12-13}{lookForChildCodeBlocks demonstration} may be scenarios in
+ which you would prefer to instruct \texttt{latexindent.pl} \emph{not} to search for child
+ blocks; in which case setting \texttt{lookForChildCodeBlocks} to 0 may be a good way to
+ proceed.
+
+ Using the settings from \vref{lst:dontMeasure1} on the file in \cref{lst:tabular-DM-1}
+ and running the command
+ \begin{commandshell}
+latexindent.pl tabular-DM-1.tex -l=dontMeasure1.yaml -o=+-mod1
+\end{commandshell}
+ gives the output in \cref{lst:tabular-DM-1-mod1}.
+ \begin{cmhtcbraster}
+ \cmhlistingsfromfile{demonstrations/tabular-DM-1.tex}{\texttt{tabular-DM-1.tex}}{lst:tabular-DM-1}
+ \cmhlistingsfromfile{demonstrations/tabular-DM-1-mod1.tex}{\texttt{tabular-DM-1-mod1.tex}}{lst:tabular-DM-1-mod1}
+ \end{cmhtcbraster}
+
+ We can improve the output from \cref{lst:tabular-DM-1-mod1} by employing the settings in
+ \cref{lst:dontMeasure1a}
+ \begin{commandshell}
+latexindent.pl tabular-DM-1.tex -l=dontMeasure1a.yaml -o=+-mod1a
+\end{commandshell}
+ which gives the output in \cref{lst:dontMeasure1a}.
+
+ \begin{cmhtcbraster}
+ \cmhlistingsfromfile{demonstrations/tabular-DM-1-mod1a.tex}{\texttt{tabular-DM-1-mod1a.tex}}{lst:tabular-DM-1-mod1a}
+ \cmhlistingsfromfile{demonstrations/dontMeasure1a.yaml}[yaml-TCB]{\texttt{dontMeasure1a.yaml}}{lst:dontMeasure1a}
+ \end{cmhtcbraster}
+
+\subsection{Indent after items, specials and headings}
+\yamltitle{indentAfterItems}*{fields}
+ The environment names specified in \texttt{indentAfterItems} tell \texttt{latexindent.pl}
+ to look for \lstinline!\item! commands; if these switches are set to \texttt{1} then
+ indentation will be performed so as indent the code after each \texttt{item}. A
+ demonstration is given in \cref{lst:itemsbefore,lst:itemsafter}
+
+ \begin{cmhtcbraster}[raster columns=3,
+ raster left skip=-3.5cm,
+ raster right skip=-2cm,
+ raster column skip=.03\linewidth]
+ \cmhlistingsfromfile[style=indentAfterItems]{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{indentAfterItems}}{lst:indentafteritems}
+ \cmhlistingsfromfile{demonstrations/items1.tex}{\texttt{items1.tex}}{lst:itemsbefore}
+ \cmhlistingsfromfile{demonstrations/items1-default.tex}{\texttt{items1.tex} default output}{lst:itemsafter}
+ \end{cmhtcbraster}
+
+\yamltitle{itemNames}*{fields}
+ If you have your own \texttt{item} commands (perhaps you prefer to use \texttt{myitem},
+ for example) then you can put populate them in \texttt{itemNames}. For example, users of
+ the \texttt{exam} document class might like to add \texttt{parts} to
+ \texttt{indentAfterItems} and \texttt{part} to \texttt{itemNames} to their user settings
+ (see \vref{sec:indentconfig} for details of how to configure user settings, and
+ \vref{lst:mysettings} \\ in particular \label{page:examsettings}.)
+
+ \cmhlistingsfromfile[style=itemNames]{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{itemNames}}{lst:itemNames}
+
+\yamltitle{specialBeginEnd}*{fields}\label{yaml:specialBeginEnd}
+ The fields specified \index{specialBeginEnd!introduction}
+ \announce{2017-08-21}*{specialBeginEnd} in \texttt{specialBeginEnd} are, in their default
+ state, focused on math mode begin and end statements, but there is no requirement for
+ this to be the case; \cref{lst:specialBeginEnd} shows the default settings of
+ \texttt{specialBeginEnd}. \index{specialBeginEnd!default settings}%
+
+ \cmhlistingsfromfile[style=specialBeginEnd]{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{specialBeginEnd}}{lst:specialBeginEnd}
+
+ The field \texttt{displayMath} represents \lstinline!\[...\]!, \texttt{inlineMath}
+ represents \lstinline!$...$! and \texttt{displayMathTex} represents \lstinline!$$...$$!.
+ You can, of course, rename these in your own YAML files (see \vref{sec:localsettings});
+ indeed, you might like to set up your own special begin and end statements.
+
+ A demonstration of the before-and-after results are shown in
+ \cref{lst:specialbefore,lst:specialafter}.
+
+ \begin{cmhtcbraster}
+ \cmhlistingsfromfile{demonstrations/special1.tex}{\texttt{special1.tex} before}{lst:specialbefore}
+ \cmhlistingsfromfile{demonstrations/special1-default.tex}{\texttt{special1.tex} default output}{lst:specialafter}
+ \end{cmhtcbraster}
+
+ For each field, \texttt{lookForThis} is set to \texttt{1} by default, which means that
+ \texttt{latexindent.pl} will look for this pattern; you can tell \texttt{latexindent.pl}
+ not to look for the pattern, by setting \texttt{lookForThis} to \texttt{0}.
+
+ There are \announce{2017-08-21}{specialBeforeCommand} examples in which it is
+ advantageous to search for \texttt{specialBeginEnd} fields \emph{before} searching for
+ commands, and the \texttt{specialBeforeCommand} switch controls this behaviour. For
+ example, consider the file shown in \cref{lst:specialLRbefore}.%
+
+ \cmhlistingsfromfile{demonstrations/specialLR.tex}{\texttt{specialLR.tex}}{lst:specialLRbefore}
+
+ Now consider the YAML files shown in
+ \cref{lst:specialsLeftRight-yaml,lst:specialBeforeCommand-yaml}
+ \index{specialBeginEnd!searching for special before commands}
+
+ \begin{cmhtcbraster}
+ \cmhlistingsfromfile[]{demonstrations/specialsLeftRight.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{specialsLeftRight.yaml}}{lst:specialsLeftRight-yaml}
+ \cmhlistingsfromfile[]{demonstrations/specialBeforeCommand.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{specialBeforeCommand.yaml}}{lst:specialBeforeCommand-yaml}
+ \end{cmhtcbraster}
+
+ Upon running the following commands \index{switches!-l demonstration}
+ \begin{widepage}
+ \begin{commandshell}
+latexindent.pl specialLR.tex -l=specialsLeftRight.yaml
+latexindent.pl specialLR.tex -l=specialsLeftRight.yaml,specialBeforeCommand.yaml
+\end{commandshell}
+ \end{widepage}
+ we receive the respective outputs in
+ \cref{lst:specialLR-comm-first-tex,lst:specialLR-special-first-tex}.
+
+ \begin{minipage}{.49\linewidth}
+ \cmhlistingsfromfile{demonstrations/specialLR-comm-first.tex}{\texttt{specialLR.tex} using \cref{lst:specialsLeftRight-yaml}}{lst:specialLR-comm-first-tex}
+ \end{minipage}
+ \hfill
+ \begin{minipage}{.49\linewidth}
+ \cmhlistingsfromfile{demonstrations/specialLR-special-first.tex}{\texttt{specialLR.tex} using \cref{lst:specialsLeftRight-yaml,lst:specialBeforeCommand-yaml}}{lst:specialLR-special-first-tex}
+ \end{minipage}
+
+ Notice that in:
+ \begin{itemize}
+ \item \cref{lst:specialLR-comm-first-tex} the \lstinline!\left! has been treated as a
+ \emph{command}, with one optional argument;
+ \item \cref{lst:specialLR-special-first-tex} the \texttt{specialBeginEnd} pattern in
+ \cref{lst:specialsLeftRight-yaml}
+ has been obeyed because \cref{lst:specialBeforeCommand-yaml} specifies that the
+ \texttt{specialBeginEnd} should be sought \emph{before} commands.
+ \end{itemize}
+
+ You can,optionally, specify \announce{2018-04-27}{update to specialBeginEnd} the
+ \texttt{middle} field for anything that you specify in \texttt{specialBeginEnd}. For
+ example, let's consider the \texttt{.tex} file in \cref{lst:special2}.
+ \index{specialBeginEnd!middle} \index{specialBeginEnd!IfElsFi example}%
+
+ \cmhlistingsfromfile{demonstrations/special2.tex}{\texttt{special2.tex}}{lst:special2}
+
+ Upon saving the YAML settings in \cref{lst:middle-yaml,lst:middle1-yaml} and running the
+ commands \index{switches!-l demonstration}
+ \begin{commandshell}
+latexindent.pl special2.tex -l=middle
+latexindent.pl special2.tex -l=middle1
+\end{commandshell}
+ then we obtain the output given in \cref{lst:special2-mod1,lst:special2-mod2}.
+
+ \begin{cmhtcbraster}
+ \cmhlistingsfromfile{demonstrations/middle.yaml}[yaml-TCB]{\texttt{middle.yaml}}{lst:middle-yaml}
+ \cmhlistingsfromfile{demonstrations/special2-mod1.tex}{\texttt{special2.tex} using \cref{lst:middle-yaml}}{lst:special2-mod1}
+ \end{cmhtcbraster}
+
+ \begin{cmhtcbraster}
+ \cmhlistingsfromfile{demonstrations/middle1.yaml}[yaml-TCB]{\texttt{middle1.yaml}}{lst:middle1-yaml}
+ \cmhlistingsfromfile{demonstrations/special2-mod2.tex}{\texttt{special2.tex} using \cref{lst:middle1-yaml}}{lst:special2-mod2}
+ \end{cmhtcbraster}
+
+ We note that:
+ \begin{itemize}
+ \item in \cref{lst:special2-mod1} the bodies of each of the \texttt{Elsif} statements have been
+ indented appropriately;
+ \item the \texttt{Else} statement has \emph{not} been indented appropriately in
+ \cref{lst:special2-mod1} -- read on!
+ \item we have specified multiple settings for the \texttt{middle} field using the syntax
+ demonstrated in \cref{lst:middle1-yaml} so that the body of the \texttt{Else} statement
+ has been indented appropriately in \cref{lst:special2-mod2}.
+ \end{itemize}
+
+ You may \announce{2018-08-13}{specialBeginEnd verbatim} specify fields in
+ \texttt{specialBeginEnd} to be treated as verbatim code blocks by changing
+ \texttt{lookForThis} to be \texttt{verbatim}. \index{verbatim!specialBeginEnd}%
+
+ For example, beginning with the code in \cref{lst:special3-mod1} and the YAML in
+ \cref{lst:special-verb1-yaml}, and running \index{switches!-l demonstration}
+ \begin{commandshell}
+latexindent.pl special3.tex -l=special-verb1
+\end{commandshell}
+ then the output in \cref{lst:special3-mod1} is unchanged.
+ \index{specialBeginEnd!specifying as verbatim}
+
+ \begin{cmhtcbraster}
+ \cmhlistingsfromfile{demonstrations/special-verb1.yaml}[yaml-TCB]{\texttt{special-verb1.yaml}}{lst:special-verb1-yaml}
+ \cmhlistingsfromfile{demonstrations/special3-mod1.tex}{\texttt{special3.tex} and output using \cref{lst:special-verb1-yaml}}{lst:special3-mod1}
+ \end{cmhtcbraster}
+
+ We can combine the \texttt{specialBeginEnd} with the \texttt{lookForAlignDelims} feature.
+ We begin with the code in \cref{lst:special-align}.
+
+ \cmhlistingsfromfile{demonstrations/special-align.tex}{\texttt{special-align.tex}}{lst:special-align}
+
+ Let's assume that our goal is to align the code at the \texttt{edge} and \texttt{node}
+ text; we employ the code given in \cref{lst:edge-node1} and run the command
+ \index{switches!-l demonstration} \index{switches!-o demonstration}
+ \begin{commandshell}
+latexindent.pl special-align.tex -l edge-node1.yaml -o=+-mod1
+\end{commandshell}
+ to receive the output in \cref{lst:special-align-mod1}. \index{specialBeginEnd!combined
+ with lookForAlignDelims} \index{specialBeginEnd!delimiterRegEx}
+ \index{specialBeginEnd!alignment at delimiter} \index{specialBeginEnd!tikz example}
+ \index{regular expressions!delimiter alignment for edge or node} \index{delimiters!within
+ specialBeginEnd blocks} \index{regular expressions!numeric 0-9}
+
+ \begin{cmhtcbraster}[ raster left skip=-3.5cm,]
+ \cmhlistingsfromfile{demonstrations/edge-node1.yaml}[yaml-TCB]{\texttt{edge-node1.yaml}}{lst:edge-node1}
+ \cmhlistingsfromfile{demonstrations/special-align-mod1.tex}{\texttt{special-align.tex} using \cref{lst:edge-node1}}{lst:special-align-mod1}
+ \end{cmhtcbraster}
+
+ The output in \cref{lst:special-align-mod1} is not quite ideal. We can tweak the settings
+ within \cref{lst:edge-node1} in order to improve the output; in particular, we employ the
+ code in \cref{lst:edge-node2} and run the command \index{switches!-l demonstration}
+ \index{switches!-o demonstration} \index{regular expressions!uppercase alph A-Z}
+ \begin{commandshell}
+latexindent.pl special-align.tex -l edge-node2.yaml -o=+-mod2
+\end{commandshell}
+ to receive the output in \cref{lst:special-align-mod2}.
+ \index{specialBeginEnd!delimiterRegEx tweaked} \index{regular expressions!at least one +}
+ \index{regular expressions!horizontal space \textbackslash{h}}
+
+ \begin{cmhtcbraster}[ raster left skip=-3.5cm,]
+ \cmhlistingsfromfile{demonstrations/edge-node2.yaml}[yaml-TCB]{\texttt{edge-node2.yaml}}{lst:edge-node2}
+ \cmhlistingsfromfile{demonstrations/special-align-mod2.tex}{\texttt{special-align.tex} using \cref{lst:edge-node2}}{lst:special-align-mod2}
+ \end{cmhtcbraster}
+
+ The \texttt{lookForThis} field can be considered optional;
+ \announce{2021-06-19}*{lookForThis optional for specialBeginEnd} by default, it is
+ assumed to be 1, which is demonstrated in \cref{lst:edge-node2}.%
+
+\yamltitle{indentAfterHeadings}*{fields}
+ This field enables the user to specify indentation rules that take effect after heading
+ commands such as \lstinline!\part!, \lstinline!\chapter!, \lstinline!\section!,
+ \lstinline!\subsection*!, or indeed any user-specified command written in this
+ field.\footnote{There is a slight difference in interface for this field when comparing
+ Version 2.2 to Version 3.0; see \vref{app:differences} for details.}
+
+ \cmhlistingsfromfile[style=indentAfterHeadings]{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{indentAfterHeadings}}{lst:indentAfterHeadings}
+
+ The default settings do \emph{not} place indentation after a heading, but you can easily
+ switch them on by changing \texttt{indentAfterThisHeading} from 0 to 1. The
+ \texttt{level} field tells \texttt{latexindent.pl} the hierarchy of the heading structure
+ in your document. You might, for example, like to have both \texttt{section} and
+ \texttt{subsection} set with \texttt{level: 3} because you do not want the indentation to
+ go too deep.
+
+ You can add any of your own custom heading commands to this field, specifying the
+ \texttt{level} as appropriate. You can also specify your own indentation in
+ \texttt{indentRules} (see \vref{sec:noadd-indent-rules}); you will find the default
+ \texttt{indentRules} contains \lstinline!chapter: " "! which tells
+ \texttt{latexindent.pl} simply to use a space character after \texttt{chapter} headings
+ (once \texttt{indent} is set to \texttt{1} for \texttt{chapter}).
+
+ For example, assuming that you have the code in \cref{lst:headings1yaml} saved into
+ \texttt{headings1.yaml}, and that you have the text from \cref{lst:headings1} saved into
+ \texttt{headings1.tex}.
+
+ \begin{cmhtcbraster}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/headings1.yaml}[yaml-TCB]{\texttt{headings1.yaml}}{lst:headings1yaml}
+ \cmhlistingsfromfile{demonstrations/headings1.tex}{\texttt{headings1.tex}}{lst:headings1}
+ \end{cmhtcbraster}
+
+ If you run the command \index{switches!-l demonstration}
+ \begin{commandshell}
+latexindent.pl headings1.tex -l=headings1.yaml
+\end{commandshell}
+ then you should receive the output given in \cref{lst:headings1-mod1}.
+
+ \begin{minipage}{.45\textwidth}
+ \cmhlistingsfromfile[showtabs=true]{demonstrations/headings1-mod1.tex}{\texttt{headings1.tex} using \cref{lst:headings1yaml}}{lst:headings1-mod1}
+ \end{minipage}%
+ \hfill
+ \begin{minipage}{.45\textwidth}
+ \cmhlistingsfromfile[showtabs=true]{demonstrations/headings1-mod2.tex}{\texttt{headings1.tex} second modification}{lst:headings1-mod2}
+ \end{minipage}
+
+ Now say that you modify the \texttt{YAML} from \cref{lst:headings1yaml} so that the
+ \texttt{paragraph} \texttt{level} is \texttt{1}; after running \index{switches!-l
+ demonstration}
+ \begin{commandshell}
+latexindent.pl headings1.tex -l=headings1.yaml
+\end{commandshell}
+ you should receive the code given in \cref{lst:headings1-mod2}; notice that the
+ \texttt{paragraph} and \texttt{subsection} are at the same indentation level.
+
+ \index{indentation!maximum indetation}
+
+\yamltitle{maximumIndentation}*{horizontal space}
+ You can control the maximum indentation given to your file by
+ \announce{2017-08-21}{maximumIndentation} specifying the \texttt{maximumIndentation}
+ field as horizontal space (but \emph{not} including tabs). This feature uses the
+ \texttt{Text::Tabs} module \cite{texttabs}, and is \emph{off} by default.%
+
+ For example, consider the example shown in \cref{lst:mult-nested} together with the
+ default output shown in \cref{lst:mult-nested-default}.
+
+ \begin{cmhtcbraster}[raster column skip=.1\linewidth]
+ \cmhlistingsfromfile{demonstrations/mult-nested.tex}{\texttt{mult-nested.tex}}{lst:mult-nested}
+ \cmhlistingsfromfile[showtabs=true]{demonstrations/mult-nested-default.tex}{\texttt{mult-nested.tex} default output}{lst:mult-nested-default}
+ \end{cmhtcbraster}
+
+ Now say that, for example, you have the \texttt{max-indentation1.yaml} from
+ \cref{lst:max-indentation1yaml} and that you run the following command:
+ \index{switches!-l demonstration}
+ \begin{commandshell}
+latexindent.pl mult-nested.tex -l=max-indentation1
+\end{commandshell}
+ You should receive the output shown in \cref{lst:mult-nested-max-ind1}.
+
+ \begin{cmhtcbraster}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/max-indentation1.yaml}[yaml-TCB]{\texttt{max-indentation1.yaml}}{lst:max-indentation1yaml}
+ \cmhlistingsfromfile[showspaces=true]{demonstrations/mult-nested-max-ind1.tex}{\texttt{mult-nested.tex} using \cref{lst:max-indentation1yaml}}{lst:mult-nested-max-ind1}
+ \end{cmhtcbraster}
+
+ Comparing the output in \cref{lst:mult-nested-default,lst:mult-nested-max-ind1} we notice
+ that the (default) tabs of indentation have been replaced by a single space.
+
+ In general, when using the \texttt{maximumIndentation} feature, any leading tabs will be
+ replaced by equivalent spaces except, of course, those found in
+ \texttt{verbatimEnvironments} (see \vref{lst:verbatimEnvironments}) or
+ \texttt{noIndentBlock} (see \vref{lst:noIndentBlock}).
+
+\subsection{The code blocks known latexindent.pl}\label{subsubsec:code-blocks}
+
+ As of Version 3.0, \texttt{latexindent.pl} processes documents using code blocks; each of
+ these are shown in \cref{tab:code-blocks}. \index{regular expressions!uppercase alph A-Z}
+ \index{regular expressions!lowercase alph a-z} \index{regular expressions!numeric 0-9}
+ \index{regular expressions!horizontal space \textbackslash{h}}
+
+ \begin{table}[!htp]
+ \begin{widepage}
+ \centering
+ \caption{Code blocks known to \texttt{latexindent.pl}}
+ \label{tab:code-blocks}
+ \begin{tabular}{m{.3\linewidth}@{\hspace{.25cm}}m{.4\linewidth}@{\hspace{.25cm}}m{.2\linewidth}}
+ \toprule
+ Code block & characters allowed in name & example \\
+ \midrule
+ environments & \lstinline!a-zA-Z@\*0-9_\\! &
+ \begin{lstlisting}[,nolol=true,]
+\begin{myenv}
+body of myenv
+\end{myenv}
+ \end{lstlisting}
+ \\\cmidrule{2-3}
+ optionalArguments & \emph{inherits} name from parent (e.g environment name) &
+ \begin{lstlisting}[,nolol=true,]
+[
+opt arg text
+]
+ \end{lstlisting}
+ \\\cmidrule{2-3}
+ mandatoryArguments & \emph{inherits} name from parent (e.g environment name) &
+ \begin{lstlisting}[,nolol=true,]
+{
+mand arg text
+}
+ \end{lstlisting}
+ \\\cmidrule{2-3}
+ commands & \lstinline!+a-zA-Z@\*0-9_\:! & \lstinline!\mycommand!$\langle$\itshape{arguments}$\rangle$ \\\cmidrule{2-3}
+ keyEqualsValuesBracesBrackets & \lstinline!a-zA-Z@\*0-9_\/.\h\{\}:\#-! & \lstinline!my key/.style=!$\langle$\itshape{arguments}$\rangle$ \\\cmidrule{2-3}
+ namedGroupingBracesBrackets & \lstinline!0-9\.a-zA-Z@\*><! & \lstinline!in!$\langle$\itshape{arguments}$\rangle$ \\\cmidrule{2-3}
+ UnNamedGroupingBracesBrackets & \centering\emph{No name!} & \lstinline!{! or \lstinline![! or \lstinline!,! or \lstinline!\&! or \lstinline!)! or \lstinline!(! or \lstinline!$! followed by $\langle$\itshape{arguments}$\rangle$ \\\cmidrule{2-3}
+ ifElseFi & \lstinline!@a-zA-Z! but must begin with either \newline \lstinline!\if! of \lstinline!\@if! &
+ \begin{lstlisting}[,nolol=true,]
+\ifnum...
+...
+\else
+...
+\fi
+ \end{lstlisting} \\\cmidrule{2-3}
+ items & User specified, see \vref{lst:indentafteritems,lst:itemNames} &
+ \begin{lstlisting}[,nolol=true,]
+\begin{enumerate}
+ \item ...
+\end{enumerate}
+ \end{lstlisting} \\\cmidrule{2-3}
+ specialBeginEnd & User specified, see \vref{lst:specialBeginEnd} &
+ \begin{lstlisting}[,nolol=true,]
+\[
+ ...
+\]
+ \end{lstlisting} \\\cmidrule{2-3}
+ afterHeading & User specified, see \vref{lst:indentAfterHeadings} &
+ \begin{lstlisting}[,morekeywords={chapter},nolol=true,]
+\chapter{title}
+ ...
+\section{title}
+ \end{lstlisting} \\\cmidrule{2-3}
+ filecontents & User specified, see \vref{lst:fileContentsEnvironments} &
+ \begin{lstlisting}[,nolol=true,]
+\begin{filecontents}
+...
+\end{filecontents}
+ \end{lstlisting} \\
+ \bottomrule
+ \end{tabular}
+ \end{widepage}
+ \end{table}
+
+ We will refer to these code blocks in what follows. \announce{2019-07-13}{fine tuning of
+ code blocks} Note that the fine tuning of the definition of the code blocks detailed in
+ \cref{tab:code-blocks} is discussed in \vref{sec:finetuning}.%
+% arara: pdflatex: { files: [latexindent]}
+% arara: pdflatex: { files: [latexindent]}
+\index{indentation!no additional indent}
+\index{indentation!removing indentation per-code block}
+\index{indentation!customising indentation per-code block}
+\index{indentation!customising per-name}
+\index{indentation!no additional indent global}
+\subsection{noAdditionalIndent and indentRules}\label{sec:noadd-indent-rules}
+ \texttt{latexindent.pl} operates on files by looking for code blocks, as detailed in
+ \vref{subsubsec:code-blocks};
+ for each type of code block in \vref{tab:code-blocks} (which we will call a
+ \emph{$\langle$thing$\rangle$} in what follows) it searches YAML fields for information
+ in the following order:
+ \begin{enumerate}
+ \item \texttt{noAdditionalIndent} for the \emph{name} of the current
+ \emph{$\langle$thing$\rangle$};
+ \item \texttt{indentRules} for the \emph{name} of the current \emph{$\langle$thing$\rangle$};
+ \item \texttt{noAdditionalIndentGlobal} for the \emph{type} of the current
+ \emph{$\langle$thing$\rangle$};
+ \item \texttt{indentRulesGlobal} for the \emph{type} of the current
+ \emph{$\langle$thing$\rangle$}.
+ \end{enumerate}
+
+ Using the above list, the first piece of information to be found will be used; failing
+ that, the value of \texttt{defaultIndent} is used. If information is found in multiple
+ fields, the first one according to the list above will be used; for example, if
+ information is present in both \texttt{indentRules} and in
+ \texttt{noAdditionalIndentGlobal}, then the information from \texttt{indentRules} takes
+ priority.
+
+ We now present details for the different type of code blocks known to
+ \texttt{latexindent.pl}, as detailed in \vref{tab:code-blocks}; for reference, there
+ follows a list of the code blocks covered.
+
+ \startcontents[noAdditionalIndent]
+ \printcontents[noAdditionalIndent]{}{0}{}
+% arara: pdflatex: { files: [latexindent]}
+\subsubsection{Environments and their arguments}\label{subsubsec:env-and-their-args}
+ There are a few different YAML switches governing the indentation of environments; let's
+ start with the code shown in \cref{lst:myenvtex}.
+
+ \cmhlistingsfromfile{demonstrations/myenvironment-simple.tex}{\texttt{myenv.tex}}{lst:myenvtex}
+
+\yamltitle{noAdditionalIndent}*{fields}
+ If we do not wish \texttt{myenv} to receive any additional indentation, we have a few
+ choices available to us, as demonstrated in \cref{lst:myenv-noAdd1,lst:myenv-noAdd2}.
+
+ \begin{minipage}{.45\textwidth}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/myenv-noAdd1.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{myenv-noAdd1.yaml}}{lst:myenv-noAdd1}
+ \end{minipage}
+ \hfill
+ \begin{minipage}{.45\textwidth}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/myenv-noAdd2.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{myenv-noAdd2.yaml}}{lst:myenv-noAdd2}
+ \end{minipage}
+
+ On applying either of the following commands, \index{switches!-l demonstration}
+ \begin{commandshell}
+latexindent.pl myenv.tex -l myenv-noAdd1.yaml
+latexindent.pl myenv.tex -l myenv-noAdd2.yaml
+\end{commandshell}
+ we obtain the output given in \cref{lst:myenv-output}; note in particular that the
+ environment \texttt{myenv} has not received any \emph{additional} indentation, but that
+ the \texttt{outer} environment \emph{has} still received indentation.
+
+ \cmhlistingsfromfile{demonstrations/myenvironment-simple-noAdd-body1.tex}{\texttt{myenv.tex} output (using either \cref{lst:myenv-noAdd1} or \cref{lst:myenv-noAdd2})}{lst:myenv-output}
+
+ Upon changing the YAML files to those shown in \cref{lst:myenv-noAdd3,lst:myenv-noAdd4},
+ and running either \index{switches!-l demonstration}
+ \begin{commandshell}
+latexindent.pl myenv.tex -l myenv-noAdd3.yaml
+latexindent.pl myenv.tex -l myenv-noAdd4.yaml
+\end{commandshell}
+ we obtain the output given in \cref{lst:myenv-output-4}.
+
+ \begin{minipage}{.45\textwidth}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/myenv-noAdd3.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{myenv-noAdd3.yaml}}{lst:myenv-noAdd3}
+ \end{minipage}
+ \hfill
+ \begin{minipage}{.45\textwidth}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/myenv-noAdd4.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{myenv-noAdd4.yaml}}{lst:myenv-noAdd4}
+ \end{minipage}
+
+ \cmhlistingsfromfile{demonstrations/myenvironment-simple-noAdd-body4.tex}{\texttt{myenv.tex output} (using either \cref{lst:myenv-noAdd3} or \cref{lst:myenv-noAdd4})}{lst:myenv-output-4}
+
+ Let's now allow \texttt{myenv} to have some optional and mandatory arguments, as in
+ \cref{lst:myenv-args}.
+
+ \cmhlistingsfromfile{demonstrations/myenvironment-args.tex}{\texttt{myenv-args.tex}}{lst:myenv-args}
+
+ Upon running \index{switches!-l demonstration}
+ \begin{commandshell}
+latexindent.pl -l=myenv-noAdd1.yaml myenv-args.tex
+\end{commandshell}
+ we obtain the output shown in \cref{lst:myenv-args-noAdd1}; note that the optional
+ argument, mandatory argument and body \emph{all} have received no additional indent. This
+ is because, when \texttt{noAdditionalIndent} is specified in `scalar' form (as in
+ \cref{lst:myenv-noAdd1}), then \emph{all} parts of the environment (body, optional and
+ mandatory arguments) are assumed to want no additional indent.
+ \cmhlistingsfromfile{demonstrations/myenvironment-args-noAdd-body1.tex}{\texttt{myenv-args.tex} using \cref{lst:myenv-noAdd1}}{lst:myenv-args-noAdd1}
+
+ We may customise \texttt{noAdditionalIndent} for optional and mandatory arguments of the
+ \texttt{myenv} environment, as shown in, for example,
+ \cref{lst:myenv-noAdd5,lst:myenv-noAdd6}.
+
+ \begin{minipage}{.49\textwidth}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/myenv-noAdd5.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{myenv-noAdd5.yaml}}{lst:myenv-noAdd5}
+ \end{minipage}
+ \hfill
+ \begin{minipage}{.49\textwidth}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/myenv-noAdd6.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{myenv-noAdd6.yaml}}{lst:myenv-noAdd6}
+ \end{minipage}
+
+ Upon running \index{switches!-l demonstration}
+ \begin{commandshell}
+latexindent.pl myenv.tex -l myenv-noAdd5.yaml
+latexindent.pl myenv.tex -l myenv-noAdd6.yaml
+\end{commandshell}
+ we obtain the respective outputs given in
+ \cref{lst:myenv-args-noAdd5,lst:myenv-args-noAdd6}. Note that in
+ \cref{lst:myenv-args-noAdd5} the text for the \emph{optional} argument has not received
+ any additional indentation, and that in \cref{lst:myenv-args-noAdd6} the \emph{mandatory}
+ argument has not received any additional indentation; in both cases, the \emph{body} has
+ not received any additional indentation.
+
+ \begin{minipage}{.45\textwidth}
+ \cmhlistingsfromfile{demonstrations/myenvironment-args-noAdd5.tex}{\texttt{myenv-args.tex} using \cref{lst:myenv-noAdd5}}{lst:myenv-args-noAdd5}
+ \end{minipage}
+ \hfill
+ \begin{minipage}{.45\textwidth}
+ \cmhlistingsfromfile{demonstrations/myenvironment-args-noAdd6.tex}{\texttt{myenv-args.tex} using \cref{lst:myenv-noAdd6}}{lst:myenv-args-noAdd6}
+ \end{minipage}
+
+\yamltitle{indentRules}*{fields}
+ We may also specify indentation rules for environment code blocks using the
+ \texttt{indentRules} field; see, for example, \cref{lst:myenv-rules1,lst:myenv-rules2}.
+
+ \begin{cmhtcbraster}[raster column skip=.1\linewidth]
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/myenv-rules1.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{myenv-rules1.yaml}}{lst:myenv-rules1}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/myenv-rules2.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{myenv-rules2.yaml}}{lst:myenv-rules2}
+ \end{cmhtcbraster}
+
+ On applying either of the following commands, \index{switches!-l demonstration}
+ \begin{commandshell}
+latexindent.pl myenv.tex -l myenv-rules1.yaml
+latexindent.pl myenv.tex -l myenv-rules2.yaml
+\end{commandshell}
+ we obtain the output given in \cref{lst:myenv-rules-output}; note in particular that the
+ environment \texttt{myenv} has received one tab (from the \texttt{outer} environment)
+ plus three spaces from \cref{lst:myenv-rules1} or \ref{lst:myenv-rules2}.
+
+ \cmhlistingsfromfile[showtabs=true,showspaces=true]{demonstrations/myenv-rules1.tex}{\texttt{myenv.tex} output (using either \cref{lst:myenv-rules1} or \cref{lst:myenv-rules2})}{lst:myenv-rules-output}
+
+ If you specify a field in \texttt{indentRules} using anything other than horizontal
+ space, it will be ignored.
+
+ Returning to the example in \cref{lst:myenv-args} that contains optional and mandatory
+ arguments. Upon using \cref{lst:myenv-rules1} as in \index{switches!-l demonstration}
+ \begin{commandshell}
+latexindent.pl myenv-args.tex -l=myenv-rules1.yaml
+\end{commandshell}
+ we obtain the output in \cref{lst:myenv-args-rules1}; note that the body, optional
+ argument and mandatory argument of \texttt{myenv} have \emph{all} received the same
+ customised indentation.
+ \cmhlistingsfromfile[showtabs=true,showspaces=true]{demonstrations/myenvironment-args-rules1.tex}{\texttt{myenv-args.tex} using \cref{lst:myenv-rules1}}{lst:myenv-args-rules1}
+
+ You can specify different indentation rules for the different features using, for
+ example, \cref{lst:myenv-rules3,lst:myenv-rules4}
+
+ \begin{minipage}{.49\textwidth}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/myenv-rules3.yaml}[width=.9\linewidth,before=\centering,yaml-TCB]{\texttt{myenv-rules3.yaml}}{lst:myenv-rules3}
+ \end{minipage}
+ \hfill
+ \begin{minipage}{.49\textwidth}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/myenv-rules4.yaml}[width=.9\linewidth,before=\centering,yaml-TCB]{\texttt{myenv-rules4.yaml}}{lst:myenv-rules4}
+ \end{minipage}
+
+ After running \index{switches!-l demonstration}
+ \begin{commandshell}
+latexindent.pl myenv-args.tex -l myenv-rules3.yaml
+latexindent.pl myenv-args.tex -l myenv-rules4.yaml
+\end{commandshell}
+ then we obtain the respective outputs given in
+ \cref{lst:myenv-args-rules3,lst:myenv-args-rules4}.
+
+ \begin{widepage}
+ \begin{minipage}{.5\textwidth}
+ \cmhlistingsfromfile[showtabs=true,showspaces=true]{demonstrations/myenvironment-args-rules3.tex}{\texttt{myenv-args.tex} using \cref{lst:myenv-rules3}}{lst:myenv-args-rules3}
+ \end{minipage}%
+ \hfill
+ \begin{minipage}{.5\textwidth}
+ \cmhlistingsfromfile[showtabs=true,showspaces=true]{demonstrations/myenvironment-args-rules4.tex}{\texttt{myenv-args.tex} using \cref{lst:myenv-rules4}}{lst:myenv-args-rules4}
+ \end{minipage}
+ \end{widepage}
+
+ Note that in \cref{lst:myenv-args-rules3}, the optional argument has only received a
+ single space of indentation, while the mandatory argument has received the default (tab)
+ indentation; the environment body has received three spaces of indentation.
+
+ In \cref{lst:myenv-args-rules4}, the optional argument has received the default (tab)
+ indentation, the mandatory argument has received two tabs of indentation, and the body
+ has received three spaces of indentation.
+
+\yamltitle{noAdditionalIndentGlobal}*{fields}
+ Assuming that your environment name is not found within neither
+ \texttt{noAdditionalIndent} nor \texttt{indentRules}, the next place that
+ \texttt{latexindent.pl} will look is \texttt{noAdditionalIndentGlobal}, and in particular
+ \emph{for the environments} key (see \cref{lst:noAdditionalIndentGlobal:environments}).
+
+ \cmhlistingsfromfile[style=noAdditionalIndentGlobalEnv]{../defaultSettings.yaml}[width=.5\linewidth,before=\centering,yaml-TCB]{\texttt{noAdditionalIndentGlobal}}{lst:noAdditionalIndentGlobal:environments}
+
+ Let's say that you change the value of \texttt{environments} to \texttt{1} in
+ \cref{lst:noAdditionalIndentGlobal:environments}, and that you run \index{switches!-l
+ demonstration}
+
+ \begin{widepage}
+ \begin{commandshell}
+latexindent.pl myenv-args.tex -l env-noAdditionalGlobal.yaml
+latexindent.pl myenv-args.tex -l myenv-rules1.yaml,env-noAdditionalGlobal.yaml
+\end{commandshell}
+ \end{widepage}
+
+ The respective output from these two commands are in
+ \cref{lst:myenv-args-no-add-global1,lst:myenv-args-no-add-global2}; in
+ \cref{lst:myenv-args-no-add-global1} notice that \emph{both} environments receive no
+ additional indentation but that the arguments of \texttt{myenv} still \emph{do} receive
+ indentation. In \cref{lst:myenv-args-no-add-global2} notice that the \emph{outer}
+ environment does not receive additional indentation, but because of the settings from
+ \texttt{myenv-rules1.yaml} (in \vref{lst:myenv-rules1}), the \texttt{myenv} environment
+ still \emph{does} receive indentation.
+
+ \begin{minipage}{.45\textwidth}
+ \cmhlistingsfromfile{demonstrations/myenvironment-args-rules1-noAddGlobal1.tex}{\texttt{myenv-args.tex} using \cref{lst:noAdditionalIndentGlobal:environments}}{lst:myenv-args-no-add-global1}
+ \end{minipage}
+ \hfill
+ \begin{minipage}{.45\textwidth}
+ \cmhlistingsfromfile{demonstrations/myenvironment-args-rules1-noAddGlobal2.tex}{\texttt{myenv-args.tex} using \cref{lst:noAdditionalIndentGlobal:environments,lst:myenv-rules1}}{lst:myenv-args-no-add-global2}
+ \end{minipage}
+
+ In fact, \texttt{noAdditionalIndentGlobal} also contains keys that control the
+ indentation of optional and mandatory arguments; on referencing
+ \cref{lst:opt-args-no-add-glob,lst:mand-args-no-add-glob}
+
+ \begin{minipage}{.49\textwidth}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/opt-args-no-add-glob.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{opt-args-no-add-glob.yaml}}{lst:opt-args-no-add-glob}
+ \end{minipage}
+ \hfill
+ \begin{minipage}{.49\textwidth}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/mand-args-no-add-glob.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{mand-args-no-add-glob.yaml}}{lst:mand-args-no-add-glob}
+ \end{minipage}
+
+ we may run the commands \index{switches!-l demonstration}
+ \begin{commandshell}
+latexindent.pl myenv-args.tex -local opt-args-no-add-glob.yaml
+latexindent.pl myenv-args.tex -local mand-args-no-add-glob.yaml
+\end{commandshell}
+ which produces the respective outputs given in
+ \cref{lst:myenv-args-no-add-opt,lst:myenv-args-no-add-mand}. Notice that in
+ \cref{lst:myenv-args-no-add-opt} the \emph{optional} argument has not received any
+ additional indentation, and in \cref{lst:myenv-args-no-add-mand} the \emph{mandatory}
+ argument has not received any additional indentation.
+
+ \begin{minipage}{.45\textwidth}
+ \cmhlistingsfromfile{demonstrations/myenvironment-args-rules1-noAddGlobal3.tex}{\texttt{myenv-args.tex} using \cref{lst:opt-args-no-add-glob}}{lst:myenv-args-no-add-opt}
+ \end{minipage}
+ \hfill
+ \begin{minipage}{.45\textwidth}
+ \cmhlistingsfromfile{demonstrations/myenvironment-args-rules1-noAddGlobal4.tex}{\texttt{myenv-args.tex} using \cref{lst:mand-args-no-add-glob}}{lst:myenv-args-no-add-mand}
+ \end{minipage}
+
+\yamltitle{indentRulesGlobal}*{fields}
+ The final check that \texttt{latexindent.pl} will make is to look for
+ \texttt{indentRulesGlobal} as detailed in \cref{lst:indentRulesGlobal:environments}.
+
+ \cmhlistingsfromfile[style=indentRulesGlobalEnv]{../defaultSettings.yaml}[width=.5\linewidth,before=\centering,yaml-TCB]{\texttt{indentRulesGlobal}}{lst:indentRulesGlobal:environments}
+
+ If you change the \texttt{environments} field to anything involving horizontal space, say
+ \lstinline!" "!, and then run the following commands \index{switches!-l demonstration}
+
+ \begin{commandshell}
+latexindent.pl myenv-args.tex -l env-indentRules.yaml
+latexindent.pl myenv-args.tex -l myenv-rules1.yaml,env-indentRules.yaml
+\end{commandshell}
+ then the respective output is shown in
+ \cref{lst:myenv-args-indent-rules-global1,lst:myenv-args-indent-rules-global2}. Note that
+ in \cref{lst:myenv-args-indent-rules-global1}, both the environment blocks have received
+ a single-space indentation, whereas in \cref{lst:myenv-args-indent-rules-global2} the
+ \texttt{outer} environment has received single-space indentation (specified by
+ \texttt{indentRulesGlobal}), but \texttt{myenv} has received \lstinline!" "!, as
+ specified by the particular \texttt{indentRules} for \texttt{myenv}
+ \vref{lst:myenv-rules1}.
+
+ \begin{minipage}{.45\textwidth}
+ \cmhlistingsfromfile[showspaces=true]{demonstrations/myenvironment-args-global-rules1.tex}{\texttt{myenv-args.tex} using \cref{lst:indentRulesGlobal:environments}}{lst:myenv-args-indent-rules-global1}
+ \end{minipage}
+ \hfill
+ \begin{minipage}{.45\textwidth}
+ \cmhlistingsfromfile[showspaces=true]{demonstrations/myenvironment-args-global-rules2.tex}{\texttt{myenv-args.tex} using \cref{lst:myenv-rules1,lst:indentRulesGlobal:environments}}{lst:myenv-args-indent-rules-global2}
+ \end{minipage}
+
+ You can specify \texttt{indentRulesGlobal} for both optional and mandatory arguments, as
+ detailed in \cref{lst:opt-args-indent-rules-glob,lst:mand-args-indent-rules-glob}
+
+ \begin{minipage}{.49\textwidth}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/opt-args-indent-rules-glob.yaml}[width=.9\linewidth,before=\centering,yaml-TCB]{\texttt{opt-args-indent-rules-glob.yaml}}{lst:opt-args-indent-rules-glob}
+ \end{minipage}
+ \hfill
+ \begin{minipage}{.49\textwidth}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/mand-args-indent-rules-glob.yaml}[width=.9\linewidth,before=\centering,yaml-TCB]{\texttt{mand-args-indent-rules-glob.yaml}}{lst:mand-args-indent-rules-glob}
+ \end{minipage}
+
+ Upon running the following commands \index{switches!-l demonstration}
+ \begin{commandshell}
+latexindent.pl myenv-args.tex -local opt-args-indent-rules-glob.yaml
+latexindent.pl myenv-args.tex -local mand-args-indent-rules-glob.yaml
+\end{commandshell}
+ we obtain the respective outputs in
+ \cref{lst:myenv-args-indent-rules-global3,lst:myenv-args-indent-rules-global4}. Note that
+ the \emph{optional} argument in \cref{lst:myenv-args-indent-rules-global3} has received
+ two tabs worth of indentation, while the \emph{mandatory} argument has done so in
+ \cref{lst:myenv-args-indent-rules-global4}.
+
+ \begin{widepage}
+ \begin{minipage}{.55\textwidth}
+ \cmhlistingsfromfile[showtabs=true]{demonstrations/myenvironment-args-global-rules3.tex}{\texttt{myenv-args.tex} using \cref{lst:opt-args-indent-rules-glob}}{lst:myenv-args-indent-rules-global3}
+ \end{minipage}
+ \hfill
+ \begin{minipage}{.55\textwidth}
+ \cmhlistingsfromfile[showtabs=true]{demonstrations/myenvironment-args-global-rules4.tex}{\texttt{myenv-args.tex} using \cref{lst:mand-args-indent-rules-glob}}{lst:myenv-args-indent-rules-global4}
+ \end{minipage}
+ \end{widepage}
+% arara: pdflatex: { files: [latexindent]}
+\subsubsection{Environments with items}
+ With reference to \vref{lst:indentafteritems,lst:itemNames}, some commands may contain
+ \texttt{item} commands; for the purposes of this discussion, we will use the code from
+ \vref{lst:itemsbefore}.
+
+ Assuming that you've populated \texttt{itemNames} with the name of your \texttt{item},
+ you can put the item name into \texttt{noAdditionalIndent} as in \cref{lst:item-noAdd1},
+ although a more efficient approach may be to change the relevant field in
+ \texttt{itemNames} to \texttt{0}. Similarly, you can customise the indentation that your
+ \texttt{item} receives using \texttt{indentRules}, as in \cref{lst:item-rules1}
+
+ \begin{cmhtcbraster}[raster column skip=.1\linewidth]
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/item-noAdd1.yaml}[yaml-TCB]{\texttt{item-noAdd1.yaml}}{lst:item-noAdd1}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/item-rules1.yaml}[yaml-TCB]{\texttt{item-rules1.yaml}}{lst:item-rules1}
+ \end{cmhtcbraster}
+
+ Upon running the following commands \index{switches!-l demonstration}
+ \begin{commandshell}
+latexindent.pl items1.tex -local item-noAdd1.yaml
+latexindent.pl items1.tex -local item-rules1.yaml
+\end{commandshell}
+ the respective outputs are given in \cref{lst:items1-noAdd1,lst:items1-rules1}; note that
+ in \cref{lst:items1-noAdd1} that the text after each \texttt{item} has not received any
+ additional indentation, and in \cref{lst:items1-rules1}, the text after each
+ \texttt{item} has received a single space of indentation, specified by
+ \cref{lst:item-rules1}.
+
+ \begin{minipage}{.45\textwidth}
+ \cmhlistingsfromfile{demonstrations/items1-noAdd1.tex}{\texttt{items1.tex} using \cref{lst:item-noAdd1}}{lst:items1-noAdd1}
+ \end{minipage}
+ \hfill
+ \begin{minipage}{.45\textwidth}
+ \cmhlistingsfromfile[showtabs=true,showspaces=true]{demonstrations/items1-rules1.tex}{\texttt{items1.tex} using \cref{lst:item-rules1}}{lst:items1-rules1}
+ \end{minipage}
+
+ Alternatively, you might like to populate \texttt{noAdditionalIndentGlobal} or
+ \texttt{indentRulesGlobal} using the \texttt{items} key, as demonstrated in
+ \cref{lst:items-noAdditionalGlobal,lst:items-indentRulesGlobal}. Note that there is a
+ need to `reset/remove' the \texttt{item} field from \texttt{indentRules} in both cases
+ (see the hierarchy description given on \cpageref{sec:noadd-indent-rules}) as the
+ \texttt{item} command is a member of \texttt{indentRules} by default.
+
+ \begin{minipage}{.45\textwidth}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/items-noAdditionalGlobal.yaml}[yaml-TCB]{\texttt{items-noAdditionalGlobal.yaml}}{lst:items-noAdditionalGlobal}
+ \end{minipage}%
+ \hfill
+ \begin{minipage}{.45\textwidth}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/items-indentRulesGlobal.yaml}[yaml-TCB]{\texttt{items-indentRulesGlobal.yaml}}{lst:items-indentRulesGlobal}
+ \end{minipage}
+
+ Upon running the following commands, \index{switches!-l demonstration}
+ \begin{commandshell}
+latexindent.pl items1.tex -local items-noAdditionalGlobal.yaml
+latexindent.pl items1.tex -local items-indentRulesGlobal.yaml
+\end{commandshell}
+ the respective outputs from \cref{lst:items1-noAdd1,lst:items1-rules1} are obtained;
+ note, however, that \emph{all} such \texttt{item} commands without their own individual
+ \texttt{noAdditionalIndent} or \texttt{indentRules} settings would behave as in these
+ listings.
+% arara: pdflatex: { files: [latexindent]}
+\subsubsection{Commands with arguments}\label{subsubsec:commands-arguments}
+ Let's begin with the simple example in \cref{lst:mycommand}; when \texttt{latexindent.pl}
+ operates on this file, the default output is shown in \cref{lst:mycommand-default}.
+ \footnote{The command code blocks have quite a few subtleties, described in
+ \vref{subsec:commands-string-between}.}
+
+ \begin{cmhtcbraster}[raster column skip=.1\linewidth]
+ \cmhlistingsfromfile{demonstrations/mycommand.tex}{\texttt{mycommand.tex}}{lst:mycommand}
+ \cmhlistingsfromfile{demonstrations/mycommand-default.tex}{\texttt{mycommand.tex} default output}{lst:mycommand-default}
+ \end{cmhtcbraster}
+
+ As in the environment-based case (see \vref{lst:myenv-noAdd1,lst:myenv-noAdd2}) we may
+ specify \texttt{noAdditionalIndent} either in `scalar' form, or in `field' form, as shown
+ in \cref{lst:mycommand-noAdd1,lst:mycommand-noAdd2}
+
+ \begin{minipage}{.45\textwidth}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/mycommand-noAdd1.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{mycommand-noAdd1.yaml}}{lst:mycommand-noAdd1}
+ \end{minipage}
+ \hfill
+ \begin{minipage}{.45\textwidth}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/mycommand-noAdd2.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{mycommand-noAdd2.yaml}}{lst:mycommand-noAdd2}
+ \end{minipage}
+
+ After running the following commands, \index{switches!-l demonstration}
+ \begin{commandshell}
+latexindent.pl mycommand.tex -l mycommand-noAdd1.yaml
+latexindent.pl mycommand.tex -l mycommand-noAdd2.yaml
+\end{commandshell}
+ we receive the respective output given in
+ \cref{lst:mycommand-output-noAdd1,lst:mycommand-output-noAdd2}
+
+ \begin{minipage}{.45\textwidth}
+ \cmhlistingsfromfile{demonstrations/mycommand-noAdd1.tex}{\texttt{mycommand.tex} using \cref{lst:mycommand-noAdd1}}{lst:mycommand-output-noAdd1}
+ \end{minipage}
+ \hfill
+ \begin{minipage}{.45\textwidth}
+ \cmhlistingsfromfile{demonstrations/mycommand-noAdd2.tex}{\texttt{mycommand.tex} using \cref{lst:mycommand-noAdd2}}{lst:mycommand-output-noAdd2}
+ \end{minipage}
+
+ Note that in \cref{lst:mycommand-output-noAdd1} that the `body', optional argument
+ \emph{and} mandatory argument have \emph{all} received no additional indentation, while
+ in \cref{lst:mycommand-output-noAdd2}, only the `body' has not received any additional
+ indentation. We define the `body' of a command as any lines following the command name
+ that include its optional or mandatory arguments.
+
+ We may further customise \texttt{noAdditionalIndent} for \texttt{mycommand} as we did in
+ \vref{lst:myenv-noAdd5,lst:myenv-noAdd6}; explicit examples are given in
+ \cref{lst:mycommand-noAdd3,lst:mycommand-noAdd4}.
+
+ \begin{minipage}{.45\textwidth}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/mycommand-noAdd3.yaml}[width=.9\linewidth,before=\centering,yaml-TCB]{\texttt{mycommand-noAdd3.yaml}}{lst:mycommand-noAdd3}
+ \end{minipage}
+ \hfill
+ \begin{minipage}{.45\textwidth}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/mycommand-noAdd4.yaml}[width=.9\linewidth,before=\centering,yaml-TCB]{\texttt{mycommand-noAdd4.yaml}}{lst:mycommand-noAdd4}
+ \end{minipage}
+
+ After running the following commands, \index{switches!-l demonstration}
+ \begin{commandshell}
+latexindent.pl mycommand.tex -l mycommand-noAdd3.yaml
+latexindent.pl mycommand.tex -l mycommand-noAdd4.yaml
+\end{commandshell}
+ we receive the respective output given in
+ \cref{lst:mycommand-output-noAdd3,lst:mycommand-output-noAdd4}.
+
+ \begin{minipage}{.45\textwidth}
+ \cmhlistingsfromfile{demonstrations/mycommand-noAdd3.tex}{\texttt{mycommand.tex} using \cref{lst:mycommand-noAdd3}}{lst:mycommand-output-noAdd3}
+ \end{minipage}
+ \hfill
+ \begin{minipage}{.45\textwidth}
+ \cmhlistingsfromfile{demonstrations/mycommand-noAdd4.tex}{\texttt{mycommand.tex} using \cref{lst:mycommand-noAdd4}}{lst:mycommand-output-noAdd4}
+ \end{minipage}
+
+ Attentive readers will note that the body of \texttt{mycommand} in both
+ \cref{lst:mycommand-output-noAdd3,lst:mycommand-output-noAdd4} has received no additional
+ indent, even though \texttt{body} is explicitly set to \texttt{0} in both
+ \cref{lst:mycommand-noAdd3,lst:mycommand-noAdd4}. This is because, by default,
+ \texttt{noAdditionalIndentGlobal} for \texttt{commands} is set to \texttt{1} by default;
+ this can be easily fixed as in
+ \cref{lst:mycommand-noAdd5,lst:mycommand-noAdd6}.\label{page:command:noAddGlobal}
+
+ \begin{minipage}{.45\textwidth}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/mycommand-noAdd5.yaml}[width=.9\linewidth,before=\centering,yaml-TCB]{\texttt{mycommand-noAdd5.yaml}}{lst:mycommand-noAdd5}
+ \end{minipage}
+ \hfill
+ \begin{minipage}{.45\textwidth}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/mycommand-noAdd6.yaml}[width=.9\linewidth,before=\centering,yaml-TCB]{\texttt{mycommand-noAdd6.yaml}}{lst:mycommand-noAdd6}
+ \end{minipage}
+
+ After running the following commands, \index{switches!-l demonstration}
+ \begin{commandshell}
+latexindent.pl mycommand.tex -l mycommand-noAdd5.yaml
+latexindent.pl mycommand.tex -l mycommand-noAdd6.yaml
+\end{commandshell}
+ we receive the respective output given in
+ \cref{lst:mycommand-output-noAdd5,lst:mycommand-output-noAdd6}.
+
+ \begin{minipage}{.45\textwidth}
+ \cmhlistingsfromfile{demonstrations/mycommand-noAdd5.tex}{\texttt{mycommand.tex} using \cref{lst:mycommand-noAdd5}}{lst:mycommand-output-noAdd5}
+ \end{minipage}
+ \hfill
+ \begin{minipage}{.45\textwidth}
+ \cmhlistingsfromfile{demonstrations/mycommand-noAdd6.tex}{\texttt{mycommand.tex} using \cref{lst:mycommand-noAdd6}}{lst:mycommand-output-noAdd6}
+ \end{minipage}
+
+ Both \texttt{indentRules} and \texttt{indentRulesGlobal} can be adjusted as they were for
+ \emph{environment} code blocks, as in \vref{lst:myenv-rules3,lst:myenv-rules4} and
+ \vref{lst:indentRulesGlobal:environments,lst:opt-args-indent-rules-glob,lst:mand-args-indent-rules-glob}.
+% arara: pdflatex: { files: [latexindent]}
+\subsubsection{ifelsefi code blocks}
+ Let's use the simple example shown in \cref{lst:ifelsefi1}; when \texttt{latexindent.pl}
+ operates on this file, the output as in \cref{lst:ifelsefi1-default}; note that the body
+ of each of the \lstinline!\if! statements have been indented, and that the
+ \lstinline!\else! statement has been accounted for correctly.
+
+ \begin{minipage}{.45\textwidth}
+ \cmhlistingsfromfile{demonstrations/ifelsefi1.tex}{\texttt{ifelsefi1.tex}}{lst:ifelsefi1}
+ \end{minipage}%
+ \hfill
+ \begin{minipage}{.54\textwidth}
+ \cmhlistingsfromfile{demonstrations/ifelsefi1-default.tex}{\texttt{ifelsefi1.tex} default output}{lst:ifelsefi1-default}
+ \end{minipage}
+
+ It is recommended to specify \texttt{noAdditionalIndent} and \texttt{indentRules} in the
+ `scalar' form only for these type of code blocks, although the `field' form would work,
+ assuming that \texttt{body} was specified. Examples are shown in
+ \cref{lst:ifnum-noAdd,lst:ifnum-indent-rules}.
+
+ \begin{minipage}{.45\textwidth}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/ifnum-noAdd.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{ifnum-noAdd.yaml}}{lst:ifnum-noAdd}
+ \end{minipage}
+ \hfill
+ \begin{minipage}{.45\textwidth}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/ifnum-indent-rules.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{ifnum-indent-rules.yaml}}{lst:ifnum-indent-rules}
+ \end{minipage}
+
+ After running the following commands, \index{switches!-l demonstration}
+ \begin{commandshell}
+latexindent.pl ifelsefi1.tex -local ifnum-noAdd.yaml
+latexindent.pl ifelsefi1.tex -l ifnum-indent-rules.yaml
+\end{commandshell}
+ we receive the respective output given in
+ \cref{lst:ifelsefi1-output-noAdd,lst:ifelsefi1-output-indent-rules}; note that in
+ \cref{lst:ifelsefi1-output-noAdd}, the \texttt{ifnum} code block has \emph{not} received
+ any additional indentation, while in \cref{lst:ifelsefi1-output-indent-rules}, the
+ \texttt{ifnum} code block has received one tab and two spaces of indentation.
+
+ \begin{minipage}{.45\textwidth}
+ \cmhlistingsfromfile{demonstrations/ifelsefi1-noAdd.tex}{\texttt{ifelsefi1.tex} using \cref{lst:ifnum-noAdd}}{lst:ifelsefi1-output-noAdd}
+ \end{minipage}
+ \hfill
+ \begin{minipage}{.5\textwidth}
+ \cmhlistingsfromfile[showspaces=true,showtabs=true]{demonstrations/ifelsefi1-indent-rules.tex}{\texttt{ifelsefi1.tex} using \cref{lst:ifnum-indent-rules}}{lst:ifelsefi1-output-indent-rules}
+ \end{minipage}
+
+ We may specify \texttt{noAdditionalIndentGlobal} and \texttt{indentRulesGlobal} as in
+ \cref{lst:ifelsefi-noAdd-glob,lst:ifelsefi-indent-rules-global}.
+
+ \begin{minipage}{.49\textwidth}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/ifelsefi-noAdd-glob.yaml}[width=.9\linewidth,before=\centering,yaml-TCB]{\texttt{ifelsefi-noAdd-glob.yaml}}{lst:ifelsefi-noAdd-glob}
+ \end{minipage}
+ \hfill
+ \begin{minipage}{.49\textwidth}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/ifelsefi-indent-rules-global.yaml}[width=.9\linewidth,before=\centering,yaml-TCB]{\texttt{ifelsefi-indent-rules-global.yaml}}{lst:ifelsefi-indent-rules-global}
+ \end{minipage}
+
+ Upon running the following commands \index{switches!-l demonstration}
+ \begin{commandshell}
+latexindent.pl ifelsefi1.tex -local ifelsefi-noAdd-glob.yaml
+latexindent.pl ifelsefi1.tex -l ifelsefi-indent-rules-global.yaml
+\end{commandshell}
+ we receive the outputs in
+ \cref{lst:ifelsefi1-output-noAdd-glob,lst:ifelsefi1-output-indent-rules-global}; notice
+ that in \cref{lst:ifelsefi1-output-noAdd-glob} neither of the \texttt{ifelsefi} code
+ blocks have received indentation, while in
+ \cref{lst:ifelsefi1-output-indent-rules-global} both code blocks have received a single
+ space of indentation.
+
+ \begin{minipage}{.45\textwidth}
+ \cmhlistingsfromfile{demonstrations/ifelsefi1-noAdd-glob.tex}{\texttt{ifelsefi1.tex} using \cref{lst:ifelsefi-noAdd-glob}}{lst:ifelsefi1-output-noAdd-glob}
+ \end{minipage}
+ \hfill
+ \begin{minipage}{.45\textwidth}
+ \cmhlistingsfromfile[showspaces=true]{demonstrations/ifelsefi1-indent-rules-global.tex}{\texttt{ifelsefi1.tex} using \cref{lst:ifelsefi-indent-rules-global}}{lst:ifelsefi1-output-indent-rules-global}
+ \end{minipage}
+
+ We can further explore the treatment of \texttt{ifElseFi} code blocks
+ \announce{2018-04-27}*{updates to ifElseFi code blocks} in \cref{lst:ifelsefi2}, and the
+ associated default output given in \cref{lst:ifelsefi2-default}; note, in particular,
+ that the bodies of each of the `or statements' have been indented.%
+
+ \begin{cmhtcbraster}[raster column skip=.1\linewidth]
+ \cmhlistingsfromfile{demonstrations/ifelsefi2.tex}{\texttt{ifelsefi2.tex}}{lst:ifelsefi2}
+ \cmhlistingsfromfile{demonstrations/ifelsefi2-default.tex}{\texttt{ifelsefi2.tex} default output}{lst:ifelsefi2-default}
+ \end{cmhtcbraster}
+% arara: pdflatex: {files: [latexindent]}
+\subsubsection{specialBeginEnd code blocks}
+ Let's use the example from \vref{lst:specialbefore} which has default output shown in
+ \vref{lst:specialafter}.
+
+ It is recommended to specify \texttt{noAdditionalIndent} and \texttt{indentRules} in the
+ `scalar' form for these type of code blocks, although the `field' form would work,
+ assuming that \texttt{body} was specified. Examples are shown in
+ \cref{lst:displayMath-noAdd,lst:displayMath-indent-rules}.
+ \index{specialBeginEnd!noAdditionalIndent} \index{specialBeginEnd!indentRules example}
+
+ \begin{minipage}{.49\textwidth}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/displayMath-noAdd.yaml}[width=.9\linewidth,before=\centering,yaml-TCB]{\texttt{displayMath-noAdd.yaml}}{lst:displayMath-noAdd}
+ \end{minipage}
+ \hfill
+ \begin{minipage}{.49\textwidth}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/displayMath-indent-rules.yaml}[width=.9\linewidth,before=\centering,yaml-TCB]{\texttt{displayMath-indent-rules.yaml}}{lst:displayMath-indent-rules}
+ \end{minipage}
+
+ After running the following commands, \index{switches!-l demonstration}
+ \begin{commandshell}
+latexindent.pl special1.tex -local displayMath-noAdd.yaml
+latexindent.pl special1.tex -l displayMath-indent-rules.yaml
+\end{commandshell}
+ we receive the respective output given in
+ \cref{lst:special1-output-noAdd,lst:special1-output-indent-rules}; note that in
+ \cref{lst:special1-output-noAdd}, the \texttt{displayMath} code block has \emph{not}
+ received any additional indentation, while in \cref{lst:special1-output-indent-rules},
+ the \texttt{displayMath} code block has received three tabs worth of indentation.
+
+ \begin{minipage}{.45\textwidth}
+ \cmhlistingsfromfile{demonstrations/special1-noAdd.tex}{\texttt{special1.tex} using \cref{lst:displayMath-noAdd}}{lst:special1-output-noAdd}
+ \end{minipage}
+ \hfill
+ \begin{minipage}{.45\textwidth}
+ \cmhlistingsfromfile[showtabs=true]{demonstrations/special1-indent-rules.tex}{\texttt{special1.tex} using \cref{lst:displayMath-indent-rules}}{lst:special1-output-indent-rules}
+ \end{minipage}
+
+ We may specify \texttt{noAdditionalIndentGlobal} and \texttt{indentRulesGlobal} as in
+ \cref{lst:special-noAdd-glob,lst:special-indent-rules-global}.
+
+ \begin{minipage}{.49\textwidth}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/special-noAdd-glob.yaml}[width=.9\linewidth,before=\centering,yaml-TCB]{\texttt{special-noAdd-glob.yaml}}{lst:special-noAdd-glob}
+ \end{minipage}
+ \hfill
+ \begin{minipage}{.49\textwidth}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/special-indent-rules-global.yaml}[width=.9\linewidth,before=\centering,yaml-TCB]{\texttt{special-indent-rules-global.yaml}}{lst:special-indent-rules-global}
+ \end{minipage}
+
+ Upon running the following commands \index{switches!-l demonstration}
+ \begin{commandshell}
+latexindent.pl special1.tex -local special-noAdd-glob.yaml
+latexindent.pl special1.tex -l special-indent-rules-global.yaml
+\end{commandshell}
+ we receive the outputs in
+ \cref{lst:special1-output-noAdd-glob,lst:special1-output-indent-rules-global}; notice
+ that in \cref{lst:special1-output-noAdd-glob} neither of the \texttt{special} code blocks
+ have received indentation, while in \cref{lst:special1-output-indent-rules-global} both
+ code blocks have received a single space of indentation.
+
+ \begin{minipage}{.45\textwidth}
+ \cmhlistingsfromfile{demonstrations/special1-noAdd-glob.tex}{\texttt{special1.tex} using \cref{lst:special-noAdd-glob}}{lst:special1-output-noAdd-glob}
+ \end{minipage}
+ \hfill
+ \begin{minipage}{.45\textwidth}
+ \cmhlistingsfromfile[showspaces=true]{demonstrations/special1-indent-rules-global.tex}{\texttt{special1.tex} using \cref{lst:special-indent-rules-global}}{lst:special1-output-indent-rules-global}
+ \end{minipage}
+% arara: pdflatex: { files: [latexindent]}
+\subsubsection{afterHeading code blocks}\label{subsubsec-headings-no-add-indent-rules}
+ Let's use the example \cref{lst:headings2} for demonstration throughout this
+ \namecref{subsubsec-headings-no-add-indent-rules}. As discussed on
+ \cpageref{lst:headings1}, by default \texttt{latexindent.pl} will not add indentation
+ after headings.
+
+ \cmhlistingsfromfile{demonstrations/headings2.tex}{\texttt{headings2.tex}}{lst:headings2}
+
+ On using the YAML file in \cref{lst:headings3yaml} by running the command
+ \index{switches!-l demonstration}
+ \begin{commandshell}
+latexindent.pl headings2.tex -l headings3.yaml
+\end{commandshell}
+ we obtain the output in \cref{lst:headings2-mod3}. Note that the argument of
+ \texttt{paragraph} has received (default) indentation, and that the body after the
+ heading statement has received (default) indentation.
+
+ \begin{cmhtcbraster}[raster column skip=.1\linewidth]
+ \cmhlistingsfromfile{demonstrations/headings2-mod3.tex}{\texttt{headings2.tex} using \cref{lst:headings3yaml}}{lst:headings2-mod3}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/headings3.yaml}[yaml-TCB]{\texttt{headings3.yaml}}{lst:headings3yaml}
+ \end{cmhtcbraster}
+
+ If we specify \texttt{noAdditionalIndent} as in \cref{lst:headings4yaml} and run the
+ command \index{switches!-l demonstration}
+ \begin{commandshell}
+latexindent.pl headings2.tex -l headings4.yaml
+\end{commandshell}
+ then we receive the output in \cref{lst:headings2-mod4}. Note that the arguments
+ \emph{and} the body after the heading of \texttt{paragraph} has received no additional
+ indentation, because we have specified \texttt{noAdditionalIndent} in scalar form.
+
+ \begin{cmhtcbraster}[raster column skip=.1\linewidth]
+ \cmhlistingsfromfile{demonstrations/headings2-mod4.tex}{\texttt{headings2.tex} using \cref{lst:headings4yaml}}{lst:headings2-mod4}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/headings4.yaml}[yaml-TCB]{\texttt{headings4.yaml}}{lst:headings4yaml}
+ \end{cmhtcbraster}
+
+ Similarly, if we specify \texttt{indentRules} as in \cref{lst:headings5yaml} and run
+ analogous commands to those above, we receive the output in \cref{lst:headings2-mod5};
+ note that the \emph{body}, \emph{mandatory argument} and content \emph{after the heading}
+ of \texttt{paragraph} have \emph{all} received three tabs worth of indentation.
+
+ \begin{cmhtcbraster}[raster force size=false,
+ raster column 1/.style={add to width=1cm},
+ raster column 2/.style={add to width=-1cm},
+ ]
+ \cmhlistingsfromfile[showtabs=true]{demonstrations/headings2-mod5.tex}{\texttt{headings2.tex} using \cref{lst:headings5yaml}}{lst:headings2-mod5}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/headings5.yaml}[yaml-TCB]{\texttt{headings5.yaml}}{lst:headings5yaml}
+ \end{cmhtcbraster}
+
+ We may, instead, specify \texttt{noAdditionalIndent} in `field' form, as in
+ \cref{lst:headings6yaml} which gives the output in \cref{lst:headings2-mod6}.
+
+ \begin{cmhtcbraster}
+ \cmhlistingsfromfile{demonstrations/headings2-mod6.tex}{\texttt{headings2.tex} using \cref{lst:headings6yaml}}{lst:headings2-mod6}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/headings6.yaml}[yaml-TCB]{\texttt{headings6.yaml}}{lst:headings6yaml}
+ \end{cmhtcbraster}
+
+ Analogously, we may specify \texttt{indentRules} as in \cref{lst:headings7yaml} which
+ gives the output in \cref{lst:headings2-mod7}; note that mandatory argument text has only
+ received a single space of indentation, while the body after the heading has received
+ three tabs worth of indentation.
+
+ \begin{cmhtcbraster}
+ \cmhlistingsfromfile[showtabs=true]{demonstrations/headings2-mod7.tex}{\texttt{headings2.tex} using \cref{lst:headings7yaml}}{lst:headings2-mod7}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/headings7.yaml}[yaml-TCB]{\texttt{headings7.yaml}}{lst:headings7yaml}
+ \end{cmhtcbraster}
+
+ Finally, let's consider \texttt{noAdditionalIndentGlobal} and \texttt{indentRulesGlobal}
+ shown in \cref{lst:headings8yaml,lst:headings9yaml} respectively, with respective output
+ in \cref{lst:headings2-mod8,lst:headings2-mod9}. Note that in \cref{lst:headings8yaml}
+ the \emph{mandatory argument} of \texttt{paragraph} has received a (default) tab's worth
+ of indentation, while the body after the heading has received \emph{no additional
+ indentation}. Similarly, in \cref{lst:headings2-mod9}, the \emph{argument} has received
+ both a (default) tab plus two spaces of indentation (from the global rule specified in
+ \cref{lst:headings9yaml}), and the remaining body after \texttt{paragraph} has received
+ just two spaces of indentation.
+
+ \begin{cmhtcbraster}
+ \cmhlistingsfromfile{demonstrations/headings2-mod8.tex}{\texttt{headings2.tex} using \cref{lst:headings8yaml}}{lst:headings2-mod8}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/headings8.yaml}[yaml-TCB]{\texttt{headings8.yaml}}{lst:headings8yaml}
+ \end{cmhtcbraster}
+
+ \begin{cmhtcbraster}
+ \cmhlistingsfromfile[showspaces=true,showtabs=true]{demonstrations/headings2-mod9.tex}{\texttt{headings2.tex} using \cref{lst:headings9yaml}}{lst:headings2-mod9}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/headings9.yaml}[yaml-TCB]{\texttt{headings9.yaml}}{lst:headings9yaml}
+ \end{cmhtcbraster}
+% arara: pdflatex: { files: [latexindent]}
+\subsubsection{The remaining code blocks}
+ Referencing the different types of code blocks in \vref{tab:code-blocks}, we have a few
+ code blocks yet to cover; these are very similar to the \texttt{commands} code block type
+ covered comprehensively in \vref{subsubsec:commands-arguments}, but a small discussion
+ defining these remaining code blocks is necessary.
+
+ \paragraph{keyEqualsValuesBracesBrackets}
+ \texttt{latexindent.pl} defines this type of code block by the following criteria:
+ \begin{itemize}
+ \item it must immediately follow either \lstinline!{! OR \lstinline![! OR \lstinline!,! with
+ comments and blank lines allowed.
+ \item then it has a name made up of the characters detailed in \vref{tab:code-blocks};
+ \item then an $=$ symbol;
+ \item then at least one set of curly braces or square brackets (comments and line breaks
+ allowed throughout).
+ \end{itemize}
+ See the \texttt{keyEqualsValuesBracesBrackets: follow} and
+ \texttt{keyEqualsValuesBracesBrackets: name} fields of the fine tuning section in
+ \vref{lst:fineTuning} \announce{2019-07-13}{fine tuning: keyEqualsValuesBracesBrackets}%
+
+ An example is shown in \cref{lst:pgfkeysbefore}, with the default output given in
+ \cref{lst:pgfkeys1:default}.
+
+ \begin{minipage}{.45\textwidth}
+ \cmhlistingsfromfile{demonstrations/pgfkeys1.tex}{\texttt{pgfkeys1.tex}}{lst:pgfkeysbefore}
+ \end{minipage}%
+ \hfill
+ \begin{minipage}{.5\textwidth}
+ \cmhlistingsfromfile[showtabs=true]{demonstrations/pgfkeys1-default.tex}{\texttt{pgfkeys1.tex} default output}{lst:pgfkeys1:default}
+ \end{minipage}%
+
+ In \cref{lst:pgfkeys1:default}, note that the maximum indentation is three tabs, and
+ these come from:
+ \begin{itemize}
+ \item the \lstinline!\pgfkeys! command's mandatory argument;
+ \item the \lstinline!start coordinate/.initial! key's mandatory argument;
+ \item the \lstinline!start coordinate/.initial! key's body, which is defined as any lines
+ following the name of the key that include its arguments. This is the part controlled by
+ the \emph{body} field for \texttt{noAdditionalIndent} and friends from
+ \cpageref{sec:noadd-indent-rules}.
+ \end{itemize}
+ \paragraph{namedGroupingBracesBrackets} This type of code block is mostly motivated by
+ tikz-based code; we define this code block as follows:
+ \begin{itemize}
+ \item it must immediately follow either \emph{horizontal space} OR \emph{one or more line
+ breaks} OR \lstinline!{! OR \lstinline![! OR \lstinline!$! OR \lstinline!)! OR
+ \lstinline!(!
+ \item the name may contain the characters detailed in \vref{tab:code-blocks};
+ \item then at least one set of curly braces or square brackets (comments and line breaks
+ allowed throughout).
+ \end{itemize}
+ See the \texttt{NamedGroupingBracesBrackets: follow} and
+ \texttt{NamedGroupingBracesBrackets: name} fields of the fine tuning section in
+ \vref{lst:fineTuning} \announce{2019-07-13}{fine tuning: namedGroupingBracesBrackets}%
+
+ A simple example is given in \cref{lst:child1}, with default output in
+ \cref{lst:child1:default}.
+
+ \begin{minipage}{.45\textwidth}
+ \cmhlistingsfromfile{demonstrations/child1.tex}{\texttt{child1.tex}}{lst:child1}
+ \end{minipage}%
+ \hfill
+ \begin{minipage}{.5\textwidth}
+ \cmhlistingsfromfile[showtabs=true]{demonstrations/child1-default.tex}{\texttt{child1.tex} default output}{lst:child1:default}
+ \end{minipage}%
+
+ In particular, \texttt{latexindent.pl} considers \texttt{child}, \texttt{parent} and
+ \texttt{node} all to be \texttt{namedGroupingBracesBrackets}\footnote{ You may like to
+ verify this by using the \texttt{-tt} option and checking \texttt{indent.log}! }.
+ Referencing \cref{lst:child1:default}, note that the maximum indentation is two tabs, and
+ these come from:
+ \begin{itemize}
+ \item the \lstinline!child!'s mandatory argument;
+ \item the \lstinline!child!'s body, which is defined as any lines following the name of the
+ \texttt{namedGroupingBracesBrackets} that include its arguments. This is the part
+ controlled by the \emph{body} field for \texttt{noAdditionalIndent} and friends from
+ \cpageref{sec:noadd-indent-rules}.
+ \end{itemize}
+
+ \paragraph{UnNamedGroupingBracesBrackets} occur in a variety of situations; specifically, we
+ define this type of code block as satisfying the following criteria:
+ \begin{itemize}
+ \item it must immediately follow either \lstinline!{! OR \lstinline![! OR \lstinline!,! OR
+ \lstinline!&! OR \lstinline!)! OR \lstinline!(! OR \lstinline!$!;
+ \item then at least one set of curly braces or square brackets (comments and line breaks
+ allowed throughout).
+ \end{itemize}
+ See the \texttt{UnNamedGroupingBracesBrackets: follow} field of the fine tuning section
+ in \vref{lst:fineTuning} \announce{2019-07-13}{fine tuning: namedGroupingBracesBrackets}%
+
+ An example is shown in \cref{lst:psforeach1} with default output give in
+ \cref{lst:psforeach:default}.
+
+ \begin{minipage}{.45\textwidth}
+ \cmhlistingsfromfile{demonstrations/psforeach1.tex}{\texttt{psforeach1.tex}}{lst:psforeach1}
+ \end{minipage}%
+ \hfill
+ \begin{minipage}{.5\textwidth}
+ \cmhlistingsfromfile[showtabs=true]{demonstrations/psforeach1-default.tex}{\texttt{psforeach1.tex} default output}{lst:psforeach:default}
+ \end{minipage}%
+
+ Referencing \cref{lst:psforeach:default}, there are \emph{three} sets of unnamed braces.
+ Note also that the maximum value of indentation is three tabs, and these come from:
+ \begin{itemize}
+ \item the \lstinline!\psforeach! command's mandatory argument;
+ \item the \emph{first} un-named braces mandatory argument;
+ \item the \emph{first} un-named braces \emph{body}, which we define as any lines following the
+ first opening \lstinline!{! or \lstinline![! that defined the code block. This is the
+ part controlled by the \emph{body} field for \texttt{noAdditionalIndent} and friends from
+ \cpageref{sec:noadd-indent-rules}.
+ \end{itemize}
+ Users wishing to customise the mandatory and/or optional arguments on a \emph{per-name}
+ basis for the \texttt{UnNamedGroupingBracesBrackets} should use \texttt{always-un-named}.
+
+ \paragraph{filecontents} code blocks behave just as \texttt{environments}, except that
+ neither arguments nor items are sought.
+
+\subsubsection{Summary}
+ \index{indentation!summary}
+ Having considered all of the different types of code blocks, the functions of the fields
+ given in \cref{lst:noAdditionalIndentGlobal,lst:indentRulesGlobal} should now make sense.
+ \index{specialBeginEnd!noAdditionalIndentGlobal}
+ \index{specialBeginEnd!indentRulesGlobal}
+
+ \begin{widepage}
+ \begin{minipage}{.47\linewidth}
+ \cmhlistingsfromfile[style=noAdditionalIndentGlobal]{../defaultSettings.yaml}[before=\centering,yaml-TCB]{\texttt{noAdditionalIndentGlobal}}{lst:noAdditionalIndentGlobal}
+ \end{minipage}%
+ \hfill
+ \begin{minipage}{.47\linewidth}
+ \cmhlistingsfromfile[style=indentRulesGlobal]{../defaultSettings.yaml}[before=\centering,yaml-TCB]{\texttt{indentRulesGlobal}}{lst:indentRulesGlobal}
+ \end{minipage}%
+ \end{widepage}
+% arara: pdflatex: { files: [latexindent]}
+\subsection{Commands and the strings between their arguments}\label{subsec:commands-string-between} The \texttt{command} code blocks will
+ always look for optional (square bracketed) and mandatory (curly braced) arguments which
+ can contain comments, line breaks and `beamer' commands \lstinline!<.*?>! between them.
+ There are switches that can allow them to contain other strings, which we discuss next.
+
+\yamltitle{commandCodeBlocks}*{fields}
+
+ The \texttt{commandCodeBlocks} field \announce{2018-04-27}*{commandCodeBlocks} contains a
+ few switches detailed in \cref{lst:commandCodeBlocks}.%
+
+ \cmhlistingsfromfile[style=commandCodeBlocks]{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{commandCodeBlocks}}{lst:commandCodeBlocks}
+
+\yamltitle{roundParenthesesAllowed}{0|1}
+
+ The need for this field was mostly motivated by commands found in code used to generate
+ images in \texttt{PSTricks} and \texttt{tikz}; for example, let's consider the code given
+ in \cref{lst:pstricks1}.
+
+ \begin{minipage}{.45\textwidth}
+ \cmhlistingsfromfile{demonstrations/pstricks1.tex}{\texttt{pstricks1.tex}}{lst:pstricks1}
+ \end{minipage}
+ \hfill
+ \begin{minipage}{.45\textwidth}
+ \cmhlistingsfromfile{demonstrations/pstricks1-default.tex}{\texttt{pstricks1} default output}{lst:pstricks1-default}
+ \end{minipage}
+
+ Notice that the \lstinline!\defFunction! command has an optional argument, followed by a
+ mandatory argument, followed by a round-parenthesis argument, $(u,v)$.
+
+ By default, because \texttt{roundParenthesesAllowed} is set to $1$ in
+ \cref{lst:commandCodeBlocks}, then \texttt{latexindent.pl} will allow round parenthesis
+ between optional and mandatory arguments. In the case of the code in
+ \cref{lst:pstricks1}, \texttt{latexindent.pl} finds \emph{all} the arguments of
+ \lstinline!defFunction!, both before and after \lstinline!(u,v)!.
+
+ The default output from running \texttt{latexindent.pl} on \cref{lst:pstricks1} actually
+ leaves it unchanged (see \cref{lst:pstricks1-default}); note in particular, this is
+ because of \texttt{noAdditionalIndentGlobal} as discussed on
+ \cpageref{page:command:noAddGlobal}.
+
+ Upon using the YAML settings in \cref{lst:noRoundParentheses}, and running the command
+ \index{switches!-l demonstration}
+ \begin{commandshell}
+latexindent.pl pstricks1.tex -l noRoundParentheses.yaml
+\end{commandshell}
+ we obtain the output given in \cref{lst:pstricks1-nrp}.
+
+ \begin{cmhtcbraster}[raster column skip=.1\linewidth]
+ \cmhlistingsfromfile{demonstrations/pstricks1-nrp.tex}{\texttt{pstricks1.tex} using \cref{lst:noRoundParentheses}}{lst:pstricks1-nrp}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/noRoundParentheses.yaml}[yaml-TCB]{\texttt{noRoundParentheses.yaml}}{lst:noRoundParentheses}
+ \end{cmhtcbraster}
+
+ Notice the difference between \cref{lst:pstricks1-default} and \cref{lst:pstricks1-nrp};
+ in particular, in \cref{lst:pstricks1-nrp}, because round parentheses are \emph{not}
+ allowed, \texttt{latexindent.pl} finds that the \lstinline!\defFunction! command finishes
+ at the first opening round parenthesis. As such, the remaining braced, mandatory,
+ arguments are found to be \texttt{UnNamedGroupingBracesBrackets} (see
+ \vref{tab:code-blocks}) which, by default, assume indentation for their body, and hence
+ the tabbed indentation in \cref{lst:pstricks1-nrp}.
+
+ Let's explore this using the YAML given in \cref{lst:defFunction} and run the command
+ \index{switches!-l demonstration}
+ \begin{commandshell}
+latexindent.pl pstricks1.tex -l defFunction.yaml
+\end{commandshell}
+ then the output is as in \cref{lst:pstricks1-indent-rules}.
+
+ \begin{cmhtcbraster}[raster column skip=.1\linewidth]
+ \cmhlistingsfromfile[showspaces=true]{demonstrations/pstricks1-indent-rules.tex}{\texttt{pstricks1.tex} using \cref{lst:defFunction}}{lst:pstricks1-indent-rules}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/defFunction.yaml}[yaml-TCB]{\texttt{defFunction.yaml}}{lst:defFunction}
+ \end{cmhtcbraster}
+
+ Notice in \cref{lst:pstricks1-indent-rules} that the \emph{body} of the
+ \lstinline!defFunction! command i.e, the subsequent lines containing arguments after the
+ command name, have received the single space of indentation specified by
+ \cref{lst:defFunction}.
+
+\yamltitle{stringsAllowedBetweenArguments}*{fields}
+ \texttt{tikz} users may well specify code such as that given in
+ \cref{lst:tikz-node1}; processing this code using
+ \texttt{latexindent.pl} gives the default output in \cref{lst:tikz-node1-default}.
+
+ \begin{minipage}{.45\textwidth}
+ \cmhlistingsfromfile[columns=fixed]{demonstrations/tikz-node1.tex}{\texttt{tikz-node1.tex}}{lst:tikz-node1}
+ \end{minipage}
+ \hfill
+ \begin{minipage}{.45\textwidth}
+ \cmhlistingsfromfile[columns=fixed]{demonstrations/tikz-node1-default.tex}{\texttt{tikz-node1} default output}{lst:tikz-node1-default}
+ \end{minipage}
+
+ With reference to \vref{lst:commandCodeBlocks}, we see that the strings
+ \begin{quote}
+ to, node, ++
+ \end{quote}
+ are all allowed to appear between arguments; importantly, you are encouraged to add
+ further names to this field as necessary. This means that when \texttt{latexindent.pl}
+ processes \cref{lst:tikz-node1}, it consumes:
+ \begin{itemize}
+ \item the optional argument \lstinline![thin]!
+ \item the round-bracketed argument \lstinline!(c)! because \texttt{roundParenthesesAllowed} is
+ $1$ by default
+ \item the string \lstinline!to! (specified in \texttt{stringsAllowedBetweenArguments})
+ \item the optional argument \lstinline![in=110,out=-90]!
+ \item the string \lstinline!++! (specified in \texttt{stringsAllowedBetweenArguments})
+ \item the round-bracketed argument \lstinline!(0,-0.5cm)! because
+ \texttt{roundParenthesesAllowed} is $1$ by default
+ \item the string \lstinline!node! (specified in \texttt{stringsAllowedBetweenArguments})
+ \item the optional argument \lstinline![below,align=left,scale=0.5]!
+ \end{itemize}
+
+ We can explore this further, for example using \cref{lst:draw} and running the command
+ \index{switches!-l demonstration}
+ \begin{commandshell}
+latexindent.pl tikz-node1.tex -l draw.yaml
+\end{commandshell}
+ we receive the output given in \cref{lst:tikz-node1-draw}.
+
+ \begin{cmhtcbraster}[raster column skip=.1\linewidth]
+ \cmhlistingsfromfile[showspaces=true]{demonstrations/tikz-node1-draw.tex}{\texttt{tikz-node1.tex} using \cref{lst:draw}}{lst:tikz-node1-draw}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/draw.yaml}[yaml-TCB]{\texttt{draw.yaml}}{lst:draw}
+ \end{cmhtcbraster}
+
+ Notice that each line after the \lstinline!\draw! command (its `body') in
+ \cref{lst:tikz-node1-draw} has been given the appropriate two-spaces worth of indentation
+ specified in \cref{lst:draw}.
+
+ Let's compare this with the output from using the YAML settings in \cref{lst:no-strings},
+ and running the command \index{switches!-l demonstration}
+ \begin{commandshell}
+latexindent.pl tikz-node1.tex -l no-strings.yaml
+\end{commandshell}
+ given in \cref{lst:tikz-node1-no-strings}.
+
+ \begin{cmhtcbraster}[raster column skip=.1\linewidth]
+ \cmhlistingsfromfile{demonstrations/tikz-node1-no-strings.tex}{\texttt{tikz-node1.tex} using \cref{lst:no-strings}}{lst:tikz-node1-no-strings}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/no-strings.yaml}[yaml-TCB]{\texttt{no-strings.yaml}}{lst:no-strings}
+ \end{cmhtcbraster}
+
+ In this case, \texttt{latexindent.pl} sees that:
+ \begin{itemize}
+ \item the \lstinline!\draw! command finishes after the \lstinline!(c)!, as
+ \texttt{stringsAllowedBetweenArguments} has been set to $0$ so there are no strings
+ allowed between arguments;
+ \item it finds a \texttt{namedGroupingBracesBrackets} called \texttt{to} (see
+ \vref{tab:code-blocks}) \emph{with} argument \lstinline![in=110,out=-90]!
+ \item it finds another \texttt{namedGroupingBracesBrackets} but this time called \texttt{node}
+ with argument \lstinline![below,align=left,scale=0.5]!
+ \end{itemize}
+
+ Referencing \vref{lst:commandCodeBlocks}, \announce{2018-04-27}*{amalgamate feature in
+ commandCodeBlocks}, we see that the first field in the
+ \texttt{stringsAllowedBetweenArguments} is \texttt{amalgamate} and is set to \texttt{1}
+ by default. This is for users who wish to specify their settings in multiple YAML files.
+ For example, by using the settings in either \cref{lst:amalgamate-demo}
+ or\cref{lst:amalgamate-demo1} is equivalent to using the settings in
+ \cref{lst:amalgamate-demo2}.%
+
+ \begin{cmhtcbraster}[raster columns=3,
+ raster left skip=-3.5cm,
+ raster right skip=-2cm,
+ raster column skip=.03\linewidth]
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/amalgamate-demo.yaml}[yaml-TCB]{\texttt{amalgamate-demo.yaml}}{lst:amalgamate-demo}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/amalgamate-demo1.yaml}[yaml-TCB]{\texttt{amalgamate-demo1.yaml}}{lst:amalgamate-demo1}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/amalgamate-demo2.yaml}[yaml-TCB]{\texttt{amalgamate-demo2.yaml}}{lst:amalgamate-demo2}
+ \end{cmhtcbraster}
+
+ We specify \texttt{amalgamate} to be set to \texttt{0} and in which case any settings
+ loaded prior to those specified, including the default, will be overwritten. For example,
+ using the settings in \cref{lst:amalgamate-demo3} means that only the strings specified
+ in that field will be used.
+
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/amalgamate-demo3.yaml}[yaml-TCB]{\texttt{amalgamate-demo3.yaml}}{lst:amalgamate-demo3}
+
+ It is important to note that the \texttt{amalgamate} field, if used, must be in the first
+ field, and specified using the syntax given in
+ \cref{lst:amalgamate-demo1,lst:amalgamate-demo2,lst:amalgamate-demo3}.
+
+ We may explore this feature further with the code in \cref{lst:for-each}, whose default
+ output is given in \cref{lst:for-each-default}.
+
+ \begin{cmhtcbraster}[raster column skip=.1\linewidth]
+ \cmhlistingsfromfile{demonstrations/for-each.tex}{\texttt{for-each.tex}}{lst:for-each}
+ \cmhlistingsfromfile{demonstrations/for-each-default.tex}{\texttt{for-each} default output}{lst:for-each-default}
+ \end{cmhtcbraster}
+
+ Let's compare this with the output from using the YAML settings in \cref{lst:foreach},
+ and running the command \index{switches!-l demonstration}
+ \begin{commandshell}
+latexindent.pl for-each.tex -l foreach.yaml
+\end{commandshell}
+ given in \cref{lst:for-each-mod1}.
+
+ \begin{cmhtcbraster}[raster column skip=.1\linewidth]
+ \cmhlistingsfromfile{demonstrations/for-each-mod1.tex}{\texttt{for-each.tex} using \cref{lst:foreach}}{lst:for-each-mod1}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/foreach.yaml}[yaml-TCB]{\texttt{foreach.yaml}}{lst:foreach}
+ \end{cmhtcbraster}
+
+ You might like to compare the output given in \cref{lst:for-each-default} and
+ \cref{lst:for-each-mod1}. Note,in particular, in \cref{lst:for-each-default} that the
+ \texttt{foreach} command has not included any of the subsequent strings, and that the
+ braces have been treated as a \texttt{namedGroupingBracesBrackets}. In
+ \cref{lst:for-each-mod1} the \texttt{foreach} command has been allowed to have
+ \lstinline!\x/\y! and \texttt{in} between arguments because of the settings given in
+ \cref{lst:foreach}.
+
+\yamltitle{commandNameSpecial}*{fields}
+ There are some special command names \announce{2018-04-27}*{commandNameSpecial} that do
+ not fit within the names recognised by \texttt{latexindent.pl}, the first one of which is
+ \lstinline!\@ifnextchar[!. From the perspective of \texttt{latexindent.pl}, the whole of
+ the text \lstinline!\@ifnextchar[! is a command, because it is immediately followed by
+ sets of mandatory arguments. However, without the \texttt{commandNameSpecial} field,
+ \texttt{latexindent.pl} would not be able to label it as such, because the \lstinline![!
+ is, necessarily, not matched by a closing \lstinline!]!.%
+
+ For example, consider the sample file in \cref{lst:ifnextchar}, which has default output
+ in \cref{lst:ifnextchar-default}.
+
+ \begin{cmhtcbraster}[raster column skip=.1\linewidth]
+ \cmhlistingsfromfile{demonstrations/ifnextchar.tex}{\texttt{ifnextchar.tex}}{lst:ifnextchar}
+ \cmhlistingsfromfile{demonstrations/ifnextchar-default.tex}{\texttt{ifnextchar.tex} default output}{lst:ifnextchar-default}
+ \end{cmhtcbraster}
+
+ Notice that in \cref{lst:ifnextchar-default} the \texttt{parbox} command has been able to
+ indent its body, because \texttt{latexindent.pl} has successfully found the command
+ \lstinline!\@ifnextchar! first; the pattern-matching of \texttt{latexindent.pl} starts
+ from \emph{the inner most <thing> and works outwards}, discussed in more detail on
+ \cpageref{page:phases}.
+
+ For demonstration, we can compare this output with that given in
+ \cref{lst:ifnextchar-off} in which the settings from \cref{lst:no-ifnextchar} have
+ dictated that no special command names, including the \lstinline!\@ifnextchar[! command,
+ should not be searched for specially; as such, the \texttt{parbox} command has been
+ \emph{unable} to indent its body successfully, because the \lstinline!\@ifnextchar[!
+ command has not been found.
+
+ \begin{cmhtcbraster}[raster column skip=.1\linewidth]
+ \cmhlistingsfromfile{demonstrations/ifnextchar-off.tex}{\texttt{ifnextchar.tex} using \cref{lst:no-ifnextchar}}{lst:ifnextchar-off}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/no-ifnextchar.yaml}[yaml-TCB]{\texttt{no-ifnextchar.yaml}}{lst:no-ifnextchar}
+ \end{cmhtcbraster}
+
+ The \texttt{amalgamate} field can be used for \texttt{commandNameSpecial}, just as for
+ \texttt{stringsAllowedBetweenArguments}. The same condition holds as stated previously,
+ which we state again here: \index{warning!amalgamate field}
+
+ \begin{warning}
+ It is important to note that the \texttt{amalgamate} field, if used, in either
+ \texttt{commandNameSpecial} or \texttt{stringsAllowedBetweenArguments} must be in the
+ first field, and specified using the syntax given in
+ \cref{lst:amalgamate-demo1,lst:amalgamate-demo2,lst:amalgamate-demo3}.
+ \end{warning}
+% arara: pdflatex: { files: [latexindent]}
+\renewcommand{\imagetouse}{logo}
+\section{The -m (modifylinebreaks) switch}\label{sec:modifylinebreaks}
+ \fancyhead[R]{\bfseries\thepage%
+ \tikz[remember picture,overlay] {
+ \node at (1,0){\includegraphics{logo}};
+ }}
+ All features described in this section will only be relevant if the \texttt{-m} switch is
+ used.
+
+ \startcontents[the-m-switch]
+ \printcontents[the-m-switch]{}{0}{}
+
+\yamltitle{modifylinebreaks}*{fields}
+ \makebox[0pt][r]{%
+ \raisebox{-\totalheight}[0pt][0pt]{%
+ \tikz\node[opacity=1] at (0,0)
+ {\includegraphics[width=4cm]{logo}};}}%
+ As of Version 3.0, \texttt{latexindent.pl} has the \texttt{-m} switch, which permits
+ \texttt{latexindent.pl} to modify line breaks, according to the specifications in the
+ \texttt{modifyLineBreaks} field. \emph{The settings in this field will only be considered
+ if the \texttt{-m} switch has been used}. A snippet of the default settings of this field
+ is shown in \cref{lst:modifylinebreaks}.
+
+ \cmhlistingsfromfile[style=modifylinebreaks]{../defaultSettings.yaml}[MLB-TCB,width=.85\linewidth,before=\centering]{\texttt{modifyLineBreaks}}{lst:modifylinebreaks}
+
+ Having read the previous paragraph, it should sound reasonable that, if you call
+ \texttt{latexindent.pl} using the \texttt{-m} switch, then you give it permission to
+ modify line breaks in your file, but let's be clear: \index{warning!the m switch}
+
+ \begin{warning}
+ If you call \texttt{latexindent.pl} with the \texttt{-m} switch, then you are giving it
+ permission to modify line breaks. By default, the only thing that will happen is that
+ multiple blank lines will be condensed into one blank line; many other settings are
+ possible, discussed next.
+ \end{warning}
+
+\yamltitle{preserveBlankLines}{0|1}
+ This field is directly related to \emph{poly-switches}, discussed in
+ \cref{sec:poly-switches}. By default, it is set to \texttt{1}, which means that blank
+ lines will be \emph{protected} from removal; however, regardless of this setting,
+ multiple blank lines can be condensed if \texttt{condenseMultipleBlankLinesInto} is
+ greater than \texttt{0}, discussed next.
+
+\yamltitle{condenseMultipleBlankLinesInto}*{positive integer}
+ Assuming that this switch takes an integer value greater than \texttt{0},
+ \texttt{latexindent.pl} will condense multiple blank lines into the number of blank lines
+ illustrated by this switch. As an example, \cref{lst:mlb-bl} shows a sample file with
+ blank lines; upon running \index{switches!-m demonstration}
+ \begin{commandshell}
+latexindent.pl myfile.tex -m -o=+-mod1
+\end{commandshell}
+ the output is shown in \cref{lst:mlb-bl-out}; note that the multiple blank lines have
+ been condensed into one blank line, and note also that we have used the \texttt{-m}
+ switch!
+
+ \begin{cmhtcbraster}
+ \cmhlistingsfromfile{demonstrations/mlb1.tex}{\texttt{mlb1.tex}}{lst:mlb-bl}
+ \cmhlistingsfromfile{demonstrations/mlb1-out.tex}{\texttt{mlb1-mod1.tex}}{lst:mlb-bl-out}
+ \end{cmhtcbraster}
+% arara: pdflatex: { files: [latexindent]}
+\subsection{Text Wrapping}\label{subsec:textwrapping}
+ \announce{2022-03-13}{text wrap overhaul}\emph{The text wrapping routine has been over-hauled as
+ of V3.16; I hope that the interface is simpler, and most importantly, the results are
+ better}.
+
+ The complete settings for this feature are given in \cref{lst:textWrapOptionsAll}.
+
+ \cmhlistingsfromfile[style=textWrapOptionsAll]{../defaultSettings.yaml}[MLB-TCB,width=.95\linewidth,before=\centering]{\texttt{textWrapOptions}}{lst:textWrapOptionsAll}
+
+\subsubsection{Text wrap: overview}
+ An overview of how the text wrapping feature works:
+ \begin{enumerate}
+ \item the default value of \texttt{columns} is 0, which means that text wrapping will
+ \emph{not} happen by default;
+ \item it happens \emph{after} verbatim blocks have been found;
+ \item it happens \emph{after} the oneSentencePerLine routine (see
+ \cref{sec:onesentenceperline});
+ \item it happens \emph{before} all of the other code blocks are found and does \emph{not}
+ operate on a per-code-block basis; this means that, including indentation, you may
+ receive a column width wider than that which you specify in \texttt{columns}
+ \item code blocks to be text wrapped will:
+ \begin{enumerate}
+ \item \emph{follow} the fields specified in \texttt{blocksFollow}
+ \item \emph{begin} with the fields specified in \texttt{blocksBeginWith}
+ \item \emph{end} before the fields specified in \texttt{blocksEndBefore}
+ \end{enumerate}
+ \item setting \texttt{columns} to a value $>0$ will text wrap blocks by first removing line
+ breaks, and then wrapping according to the specified value of \texttt{columns};
+ \item setting \texttt{columns} to $-1$ will \emph{only} remove line breaks within the text wrap
+ block;
+ \item by default, the text wrapping routine will remove line breaks within text blocks because
+ \texttt{removeBlockLineBreaks} is set to 1; switch it to 0 if you wish to change this;
+ \item about trailing comments within text wrap blocks:
+ \begin{enumerate}
+ \item trailing comments that do \emph{not} have leading space instruct the text wrap routine to
+ connect the lines \emph{without} space (see \cref{lst:tw-tc2});
+ \item multiple trailing comments will be connected at the end of the text wrap block (see
+ \cref{lst:tw-tc4});
+ \item the number of spaces between the end of the text wrap block and the (possibly combined)
+ trailing comments is determined by the spaces (if any) at the end of the text wrap block
+ (see \cref{lst:tw-tc5}).
+ \end{enumerate}
+ \end{enumerate}
+
+ We demonstrate this feature using a series of examples.
+
+\subsubsection{Text wrap: simple examples}\label{subsec:textwrapping-quick-start}
+
+ \begin{example}
+ Let's use the sample text given in \cref{lst:textwrap1}. \index{text wrap!quick start}
+
+ \cmhlistingsfromfile{demonstrations/textwrap1.tex}{\texttt{textwrap1.tex}}{lst:textwrap1}
+
+ We will change the value of \texttt{columns} in \cref{lst:textwrap1-yaml} and then run
+ the command
+ \begin{commandshell}
+latexindent.pl -m -l textwrap1.yaml textwrap1.tex
+\end{commandshell}
+ then we receive the output given in \cref{lst:textwrap1-mod1}.
+
+ \begin{cmhtcbraster}[raster column skip=.1\linewidth]
+ \cmhlistingsfromfile{demonstrations/textwrap1-mod1.tex}{\texttt{textwrap1-mod1.tex}}{lst:textwrap1-mod1}
+ \cmhlistingsfromfile{demonstrations/textwrap1.yaml}[MLB-TCB]{\texttt{textwrap1.yaml}}{lst:textwrap1-yaml}
+ \end{cmhtcbraster}
+ \end{example}
+
+ \begin{example}
+ If we set \texttt{columns} to $-1$ then \texttt{latexindent.pl} remove line breaks within
+ the text wrap block, and will \emph{not} perform text wrapping. We can use this to undo
+ text wrapping. \index{text wrap!setting columns to -1}
+
+ Starting from the file in \cref{lst:textwrap1-mod1} and using the settings in
+ \cref{lst:textwrap1A-yaml}
+
+ \cmhlistingsfromfile{demonstrations/textwrap1A.yaml}[MLB-TCB]{\texttt{textwrap1A.yaml}}{lst:textwrap1A-yaml}
+
+ and running
+ \begin{commandshell}
+latexindent.pl -m -l textwrap1A.yaml textwrap1-mod1.tex
+\end{commandshell}
+ gives the output in \cref{lst:textwrap1-mod1A}.
+
+ \cmhlistingsfromfile{demonstrations/textwrap1-mod1A.tex}{\texttt{textwrap1-mod1A.tex}}{lst:textwrap1-mod1A}
+ \end{example}
+
+ \begin{example}
+ By default, the text wrapping routine will convert multiple spaces into single spaces.
+ You can change this behaviour by flicking the switch \texttt{multipleSpacesToSingle}
+ which we have done in \cref{lst:textwrap1B-yaml}
+
+ Using the settings in \cref{lst:textwrap1B-yaml} and running
+ \begin{commandshell}
+latexindent.pl -m -l textwrap1B.yaml textwrap1-mod1.tex
+\end{commandshell}
+ gives the output in \cref{lst:textwrap1-mod1B}.
+ \begin{cmhtcbraster}[raster column skip=.1\linewidth]
+ \cmhlistingsfromfile{demonstrations/textwrap1B.yaml}[MLB-TCB]{\texttt{textwrap1B.yaml}}{lst:textwrap1B-yaml}
+ \cmhlistingsfromfile[showspaces=true]{demonstrations/textwrap1-mod1B.tex}{\texttt{textwrap1-mod1B.tex}}{lst:textwrap1-mod1B}
+ \end{cmhtcbraster}
+ We note that in \cref{lst:textwrap1-mod1B} the multiple spaces have \emph{not} been
+ condensed into single spaces.
+ \end{example}
+
+\subsubsection{Text wrap: \texttt{blocksFollow} examples}
+ We examine the \texttt{blocksFollow} field of \cref{lst:textWrapOptionsAll}. \index{text
+ wrap!blocksFollow}
+
+ \begin{example}
+ Let's use the sample text given in \cref{lst:tw-headings1}. \index{text
+ wrap!blocksFollow!headings}
+
+ \cmhlistingsfromfile{demonstrations/tw-headings1.tex}{\texttt{tw-headings1.tex}}{lst:tw-headings1}
+
+ We note that \cref{lst:tw-headings1} contains the heading commands \texttt{section} and
+ \texttt{subsection}. Upon running the command
+ \begin{commandshell}
+latexindent.pl -m -l textwrap1.yaml tw-headings1.tex
+\end{commandshell}
+ then we receive the output given in \cref{lst:tw-headings1-mod1}.
+
+ \cmhlistingsfromfile{demonstrations/tw-headings1-mod1.tex}{\texttt{tw-headings1-mod1.tex}}{lst:tw-headings1-mod1}
+
+ We reference \vref{lst:textWrapOptionsAll} and also \vref{lst:indentAfterHeadings}:
+ \begin{itemize}
+ \item in \cref{lst:textWrapOptionsAll} the \texttt{headings} field is set to \texttt{1}, which
+ instructs \texttt{latexindent.pl} to read the fields from \vref{lst:indentAfterHeadings},
+ \emph{regardless of the value of indentAfterThisHeading or level};
+ \item the default is to assume that the heading command can, optionally, be followed by a
+ \texttt{label} command.
+ \end{itemize}
+ If you find scenarios in which the default value of \texttt{headings} does not work, then
+ you can explore the \texttt{other} field.
+
+ We can turn off \texttt{headings} as in \cref{lst:bf-no-headings-yaml} and then run
+ \begin{commandshell}
+latexindent.pl -m -l textwrap1.yaml,bf-no-headings.yaml tw-headings1.tex
+\end{commandshell}
+ gives the output in \cref{lst:tw-headings1-mod2}, in which text wrapping has been
+ instructed \emph{not to happen} following headings.
+ \begin{cmhtcbraster}[raster column skip=.1\linewidth,
+ raster left skip=-3.5cm,
+ raster right skip=-2cm,
+ ]
+ \cmhlistingsfromfile{demonstrations/bf-no-headings.yaml}[MLB-TCB]{\texttt{bf-no-headings.yaml}}{lst:bf-no-headings-yaml}
+ \cmhlistingsfromfile{demonstrations/tw-headings1-mod2.tex}{\texttt{tw-headings1-mod2.tex}}{lst:tw-headings1-mod2}
+ \end{cmhtcbraster}
+ \end{example}
+
+ \begin{example}
+ Let's use the sample text given in \cref{lst:tw-comments1}. \index{text
+ wrap!blocksFollow!comments}
+
+ \cmhlistingsfromfile{demonstrations/tw-comments1.tex}{\texttt{tw-comments1.tex}}{lst:tw-comments1}
+
+ We note that \cref{lst:tw-comments1} contains trailing comments. Upon running the command
+ \begin{commandshell}
+latexindent.pl -m -l textwrap1.yaml tw-comments1.tex
+\end{commandshell}
+ then we receive the output given in \cref{lst:tw-comments1-mod1}.
+
+ \cmhlistingsfromfile{demonstrations/tw-comments1-mod1.tex}{\texttt{tw-comments1-mod1.tex}}{lst:tw-comments1-mod1}
+
+ With reference to \vref{lst:textWrapOptionsAll} the \texttt{commentOnPreviousLine} field
+ is set to \texttt{1}, which instructs \texttt{latexindent.pl} to find text wrap blocks
+ after a comment on its own line.
+
+ We can turn off \texttt{comments} as in \cref{lst:bf-no-comments-yaml} and then run
+ \begin{commandshell}
+latexindent.pl -m -l textwrap1.yaml,bf-no-comments.yaml tw-comments1.tex
+\end{commandshell}
+ gives the output in \cref{lst:tw-comments1-mod2}, in which text wrapping has been
+ instructed \emph{not to happen} following comments on their own line.
+ \begin{cmhtcbraster}[raster column skip=.1\linewidth,
+ raster left skip=-3.5cm,
+ raster right skip=-2cm,
+ ]
+ \cmhlistingsfromfile{demonstrations/bf-no-comments.yaml}[MLB-TCB]{\texttt{bf-no-comments.yaml}}{lst:bf-no-comments-yaml}
+ \cmhlistingsfromfile{demonstrations/tw-comments1-mod2.tex}{\texttt{tw-comments1-mod2.tex}}{lst:tw-comments1-mod2}
+ \end{cmhtcbraster}
+ \end{example}
+
+ Referencing \vref{lst:textWrapOptionsAll} the \texttt{blocksFollow} fields \texttt{par},
+ \texttt{blankline}, \texttt{verbatim} and \texttt{filecontents} fields operate in
+ analogous ways to those demonstrated in the above.
+
+ The \texttt{other} field of the \texttt{blocksFollow} can either be \texttt{0} (turned
+ off) or set as a regular expression. The default value is set to
+ \lstinline!\\\]|\\item(?:\h|\[)! which can be translated to \emph{backslash followed by a
+ square bracket} or \emph{backslash item followed by horizontal space or a square
+ bracket}, or in other words, \emph{end of display math} or an item command.
+
+ \begin{example}
+ Let's use the sample text given in \cref{lst:tw-disp-math1}. \index{text
+ wrap!blocksFollow!other} \index{regular expressions!text wrap!blocksFollow}
+
+ \cmhlistingsfromfile{demonstrations/tw-disp-math1.tex}{\texttt{tw-disp-math1.tex}}{lst:tw-disp-math1}
+
+ We note that \cref{lst:tw-disp-math1} contains display math. Upon running the command
+ \begin{commandshell}
+latexindent.pl -m -l textwrap1.yaml tw-disp-math1.tex
+\end{commandshell}
+ then we receive the output given in \cref{lst:tw-disp-math1-mod1}.
+
+ \cmhlistingsfromfile{demonstrations/tw-disp-math1-mod1.tex}{\texttt{tw-disp-math1-mod1.tex}}{lst:tw-disp-math1-mod1}
+
+ With reference to \vref{lst:textWrapOptionsAll} the \texttt{other} field is set to
+ \lstinline!\\\]!, which instructs \texttt{latexindent.pl} to find text wrap blocks after
+ the end of display math.
+
+ We can turn off this switch as in \cref{lst:bf-no-disp-math-yaml} and then run
+ \begin{widepage}
+ \begin{commandshell}
+latexindent.pl -m -l textwrap1.yaml,bf-no-disp-math.yaml tw-disp-math1.tex
+\end{commandshell}
+ \end{widepage}
+ gives the output in \cref{lst:tw-disp-math1-mod2}, in which text wrapping has been
+ instructed \emph{not to happen} following display math.
+ \begin{cmhtcbraster}[raster column skip=.1\linewidth]
+ \cmhlistingsfromfile{demonstrations/bf-no-disp-math.yaml}[MLB-TCB]{\texttt{bf-no-disp-math.yaml}}{lst:bf-no-disp-math-yaml}
+ \cmhlistingsfromfile{demonstrations/tw-disp-math1-mod2.tex}{\texttt{tw-disp-math1-mod2.tex}}{lst:tw-disp-math1-mod2}
+ \end{cmhtcbraster}
+
+ Naturally, you should feel encouraged to customise this as you see fit.
+ \end{example}
+
+ The \texttt{blocksFollow} field \emph{deliberately} does not default to allowing text
+ wrapping to occur after \texttt{begin environment} statements. You are encouraged to
+ customize the \texttt{other} field to accomodate the environments that you would like to
+ text wrap individually, as in the next example.
+
+ \begin{example}
+ Let's use the sample text given in \cref{lst:tw-bf-myenv1}. \index{text
+ wrap!blocksFollow!other} \index{regular expressions!text wrap!blocksFollow}
+
+ \cmhlistingsfromfile{demonstrations/tw-bf-myenv1.tex}{\texttt{tw-bf-myenv1.tex}}{lst:tw-bf-myenv1}
+
+ We note that \cref{lst:tw-bf-myenv1} contains \texttt{myenv} environment. Upon running
+ the command
+ \begin{commandshell}
+latexindent.pl -m -l textwrap1.yaml tw-bf-myenv1.tex
+\end{commandshell}
+ then we receive the output given in \cref{lst:tw-bf-myenv1-mod1}.
+
+ \cmhlistingsfromfile{demonstrations/tw-bf-myenv1-mod1.tex}{\texttt{tw-bf-myenv1-mod1.tex}}{lst:tw-bf-myenv1-mod1}
+
+ We note that we have \emph{not} received much text wrapping. We can turn do better by
+ employing \cref{lst:tw-bf-myenv-yaml} and then run
+ \begin{commandshell}
+latexindent.pl -m -l textwrap1.yaml,tw-bf-myenv.yaml tw-bf-myenv1.tex
+\end{commandshell}
+ which gives the output in \cref{lst:tw-bf-myenv1-mod2}, in which text wrapping has been
+ implemented across the file.
+ \begin{cmhtcbraster}[raster column skip=.1\linewidth,
+ raster left skip=-3.5cm,
+ raster right skip=-2cm,
+ ]
+ \cmhlistingsfromfile{demonstrations/tw-bf-myenv.yaml}[MLB-TCB]{\texttt{tw-bf-myenv.yaml}}{lst:tw-bf-myenv-yaml}
+ \cmhlistingsfromfile{demonstrations/tw-bf-myenv1-mod2.tex}{\texttt{tw-bf-myenv1-mod2.tex}}{lst:tw-bf-myenv1-mod2}
+ \end{cmhtcbraster}
+
+ \end{example}
+
+\subsubsection{Text wrap: \texttt{blocksBeginWith} examples}
+ We examine the \texttt{blocksBeginWith} field of \cref{lst:textWrapOptionsAll} with a
+ series of examples. \index{text wrap!blocksBeginWith}
+
+ \begin{example}
+ By default, text wrap blocks can begin with the characters \texttt{a-z} and \texttt{A-Z}.
+
+ If we start with the file given in \cref{lst:tw-0-9}
+ \cmhlistingsfromfile{demonstrations/tw-0-9.tex}{\texttt{tw-0-9.tex}}{lst:tw-0-9}
+ and run the command
+ \begin{commandshell}
+latexindent.pl -m -l textwrap1.yaml tw-0-9.tex
+\end{commandshell}
+ then we receive the output given in \cref{lst:tw-0-9-mod1} in which text wrapping has
+ \emph{not} occured.
+ \cmhlistingsfromfile{demonstrations/tw-0-9-mod1.tex}{\texttt{tw-0-9-mod1.tex}}{lst:tw-0-9-mod1}
+
+ We can allow paragraphs to begin with \texttt{0-9} characters by using the settings in
+ \cref{lst:bb-0-9-yaml} and running
+ \begin{commandshell}
+latexindent.pl -m -l textwrap1.yaml,bb-0-9-yaml tw-0-9.tex
+\end{commandshell}
+ gives the output in \cref{lst:tw-0-9-mod2}, in which text wrapping \emph{has} happened.
+ \begin{cmhtcbraster}[raster column skip=.1\linewidth,]
+ \cmhlistingsfromfile{demonstrations/bb-0-9.yaml}[MLB-TCB]{\texttt{bb-0-9.yaml.yaml}}{lst:bb-0-9-yaml}
+ \cmhlistingsfromfile{demonstrations/tw-0-9-mod2.tex}{\texttt{tw-0-9-mod2.tex}}{lst:tw-0-9-mod2}
+ \end{cmhtcbraster}
+ \end{example}
+
+ \begin{example}
+ Let's now use the file given in \cref{lst:tw-bb-announce1}
+ \cmhlistingsfromfile{demonstrations/tw-bb-announce1.tex}{\texttt{tw-bb-announce1.tex}}{lst:tw-bb-announce1}
+ and run the command
+ \begin{commandshell}
+latexindent.pl -m -l textwrap1.yaml tw-bb-announce1.tex
+\end{commandshell}
+ then we receive the output given in \cref{lst:tw-bb-announce1-mod1} in which text
+ wrapping has \emph{not} occured.
+
+ \cmhlistingsfromfile{demonstrations/tw-bb-announce1-mod1.tex}{\texttt{tw-bb-announce1-mod1.tex}}{lst:tw-bb-announce1-mod1}
+
+ We can allow \lstinline!\announce! to be at the beginning of paragraphs by using the
+ settings in \cref{lst:tw-bb-announce-yaml} and running
+ \begin{widepage}
+ \begin{commandshell}
+latexindent.pl -m -l textwrap1.yaml,tw-bb-announce.yaml tw-bb-announce1.tex
+\end{commandshell}
+ \end{widepage}
+ gives the output in \cref{lst:tw-bb-announce1-mod2}, in which text wrapping \emph{has}
+ happened.
+ \begin{cmhtcbraster}[raster column skip=.1\linewidth,]
+ \cmhlistingsfromfile{demonstrations/tw-bb-announce.yaml}[MLB-TCB]{\texttt{tw-bb-announce.yaml}}{lst:tw-bb-announce-yaml}
+ \cmhlistingsfromfile{demonstrations/tw-bb-announce1-mod2.tex}{\texttt{tw-bb-announce1-mod2.tex}}{lst:tw-bb-announce1-mod2}
+ \end{cmhtcbraster}
+
+ \end{example}
+
+\subsubsection{Text wrap: \texttt{blocksEndBefore} examples}
+ We examine the \texttt{blocksEndBefore} field of \cref{lst:textWrapOptionsAll} with a
+ series of examples. \index{text wrap!blocksEndBefore}
+
+ \begin{example}
+ Let's use the sample text given in \cref{lst:tw-be-equation}. \index{text
+ wrap!blocksFollow!other} \index{regular expressions!text wrap!blocksFollow}
+
+ \cmhlistingsfromfile{demonstrations/tw-be-equation.tex}{\texttt{tw-be-equation.tex}}{lst:tw-be-equation}
+
+ We note that \cref{lst:tw-be-equation} contains an environment. Upon running the command
+ \begin{commandshell}
+latexindent.pl -m -l textwrap1A.yaml tw-be-equation.tex
+\end{commandshell}
+ then we receive the output given in \cref{lst:tw-be-equation-mod1}.
+
+ \cmhlistingsfromfile{demonstrations/tw-be-equation-mod1.tex}{\texttt{tw-be-equation-mod1.tex}}{lst:tw-be-equation-mod1}
+
+ With reference to \vref{lst:textWrapOptionsAll} the \texttt{other} field is set to
+ \lstinline!\\begin\{|\\\[|\\end\{!, which instructs \texttt{latexindent.pl} to
+ \emph{stop} text wrap blocks before \texttt{begin} statements, display math, and
+ \texttt{end} statements.
+
+ We can turn off this switch as in \cref{lst:tw-be-equation-yaml} and then run
+ \begin{widepage}
+ \begin{commandshell}
+latexindent.pl -m -l textwrap1A.yaml,tw-be-equation.yaml tw-be-equation.tex
+\end{commandshell}
+ \end{widepage}
+ gives the output in \cref{lst:tw-be-equation-mod2}, in which text wrapping has been
+ instructed \emph{not} to stop at these statements.
+
+ \cmhlistingsfromfile{demonstrations/tw-be-equation.yaml}[MLB-TCB]{\texttt{tw-be-equation.yaml}}{lst:tw-be-equation-yaml}
+
+ \begin{widepage}
+ \cmhlistingsfromfile{demonstrations/tw-be-equation-mod2.tex}{\texttt{tw-be-equation-mod2.tex}}{lst:tw-be-equation-mod2}
+ \end{widepage}
+
+ Naturally, you should feel encouraged to customise this as you see fit.
+ \end{example}
+
+\subsubsection{Text wrap: trailing comments and spaces}
+ We explore the behaviour of the text wrap routine in relation to trailing comments using
+ the following examples.
+
+ \begin{example}
+ The file in \cref{lst:tw-tc1} contains a trailing comment which \emph{does} have a space
+ infront of it.
+
+ Running the command
+ \begin{commandshell}
+latexindent.pl -m tw-tc1.tex -l textwrap1A.yaml -o=+-mod1
+\end{commandshell}
+ gives the output given in \cref{lst:tw-tc1-mod1}.
+
+ \begin{cmhtcbraster}[raster column skip=.1\linewidth]
+ \cmhlistingsfromfile[showspaces=true]{demonstrations/tw-tc1.tex}{\texttt{tw-tc1.tex}}{lst:tw-tc1}
+ \cmhlistingsfromfile{demonstrations/tw-tc1-mod1.tex}{\texttt{tw-tc1-mod1.tex}}{lst:tw-tc1-mod1}
+ \end{cmhtcbraster}
+ \end{example}
+
+ \begin{example}
+ The file in \cref{lst:tw-tc2} contains a trailing comment which does \emph{not} have a
+ space infront of it.
+
+ Running the command
+ \begin{commandshell}
+latexindent.pl -m tw-tc2.tex -l textwrap1A.yaml -o=+-mod1
+\end{commandshell}
+ gives the output in \cref{lst:tw-tc2-mod1}.
+ \begin{cmhtcbraster}[raster column skip=.1\linewidth]
+ \cmhlistingsfromfile{demonstrations/tw-tc2.tex}{\texttt{tw-tc2.tex}}{lst:tw-tc2}
+ \cmhlistingsfromfile{demonstrations/tw-tc2-mod1.tex}{\texttt{tw-tc2-mod1.tex}}{lst:tw-tc2-mod1}
+ \end{cmhtcbraster}
+ We note that, because there is \emph{not} a space before the trailing comment, that the
+ lines have been joined \emph{without} a space.
+ \end{example}
+
+ \begin{example}
+ The file in \cref{lst:tw-tc3} contains multiple trailing comments.
+
+ Running the command
+ \begin{commandshell}
+latexindent.pl -m tw-tc3.tex -l textwrap1A.yaml -o=+-mod1
+\end{commandshell}
+ gives the output in \cref{lst:tw-tc3-mod1}.
+ \begin{cmhtcbraster}[raster column skip=.1\linewidth]
+ \cmhlistingsfromfile{demonstrations/tw-tc3.tex}{\texttt{tw-tc3.tex}}{lst:tw-tc3}
+ \cmhlistingsfromfile{demonstrations/tw-tc3-mod1.tex}{\texttt{tw-tc3-mod1.tex}}{lst:tw-tc3-mod1}
+ \end{cmhtcbraster}
+ \end{example}
+
+ \begin{example}
+ The file in \cref{lst:tw-tc4} contains multiple trailing comments.
+
+ Running the command
+ \begin{commandshell}
+latexindent.pl -m tw-tc4.tex -l textwrap1A.yaml -o=+-mod1
+\end{commandshell}
+ gives the output in \cref{lst:tw-tc4-mod1}.
+ \begin{cmhtcbraster}[raster column skip=.1\linewidth]
+ \cmhlistingsfromfile{demonstrations/tw-tc4.tex}{\texttt{tw-tc4.tex}}{lst:tw-tc4}
+ \cmhlistingsfromfile{demonstrations/tw-tc4-mod1.tex}{\texttt{tw-tc4-mod1.tex}}{lst:tw-tc4-mod1}
+ \end{cmhtcbraster}
+ \end{example}
+
+ \begin{example}
+ The file in \cref{lst:tw-tc5} contains multiple trailing comments.
+
+ Running the command
+ \begin{commandshell}
+latexindent.pl -m tw-tc5.tex -l textwrap1A.yaml -o=+-mod1
+\end{commandshell}
+ gives the output in \cref{lst:tw-tc5-mod1}.
+ \begin{cmhtcbraster}[raster column skip=.1\linewidth]
+ \cmhlistingsfromfile[showspaces=true]{demonstrations/tw-tc5.tex}{\texttt{tw-tc5.tex}}{lst:tw-tc5}
+ \cmhlistingsfromfile[showspaces=true]{demonstrations/tw-tc5-mod1.tex}{\texttt{tw-tc5-mod1.tex}}{lst:tw-tc5-mod1}
+ \end{cmhtcbraster}
+ The space at the end of the text block has been preserved.
+ \end{example}
+
+ \begin{example}
+ The file in \cref{lst:tw-tc6} contains multiple trailing comments.
+
+ Running the command
+ \begin{commandshell}
+latexindent.pl -m tw-tc6.tex -l textwrap1A.yaml -o=+-mod1
+\end{commandshell}
+ gives the output in \cref{lst:tw-tc6-mod1}.
+ \begin{cmhtcbraster}[raster column skip=.1\linewidth]
+ \cmhlistingsfromfile[showspaces=true]{demonstrations/tw-tc6.tex}{\texttt{tw-tc6.tex}}{lst:tw-tc6}
+ \cmhlistingsfromfile[showspaces=true]{demonstrations/tw-tc6-mod1.tex}{\texttt{tw-tc6-mod1.tex}}{lst:tw-tc6-mod1}
+ \end{cmhtcbraster}
+ The space at the end of the text block has been preserved.
+ \end{example}
+
+\subsubsection{Text wrap: huge, tabstop and separator}
+ The \announce{2021-07-23}*{huge:overflow is now default} default value of \texttt{huge}
+ is \texttt{overflow}, which means that words will \emph{not} be broken by the text
+ wrapping routine, implemented by the \texttt{Text::Wrap} \cite{textwrap}. There are
+ options to change the \texttt{huge} option for the \texttt{Text::Wrap} module to either
+ \texttt{wrap} or \texttt{die}. Before modifying the value of \texttt{huge}, please bear
+ in mind the following warning: \index{warning!changing huge (textwrap)}%
+ \begin{warning}
+ \raggedright
+ Changing the value of \texttt{huge} to anything other than \texttt{overflow} will slow
+ down \texttt{latexindent.pl} significantly when the \texttt{-m} switch is active.
+
+ Furthermore, changing \texttt{huge} means that you may have some words \emph{or
+ commands}(!) split across lines in your .tex file, which may affect your output. I do not
+ recommend changing this field.
+ \end{warning}
+
+ For example, using the settings in \cref{lst:textwrap2A-yaml,lst:textwrap2B-yaml} and
+ running the commands \index{switches!-l demonstration} \index{switches!-m demonstration}
+ \index{switches!-o demonstration}
+ \begin{commandshell}
+ latexindent.pl -m textwrap4.tex -o=+-mod2A -l textwrap2A.yaml
+ latexindent.pl -m textwrap4.tex -o=+-mod2B -l textwrap2B.yaml
+\end{commandshell}
+ gives the respective output in \cref{lst:textwrap4-mod2A,lst:textwrap4-mod2B}.
+
+ \begin{cmhtcbraster}[raster column skip=.1\linewidth]
+ \cmhlistingsfromfile{demonstrations/textwrap4-mod2A.tex}{\texttt{textwrap4-mod2A.tex}}{lst:textwrap4-mod2A}
+ \cmhlistingsfromfile{demonstrations/textwrap2A.yaml}[MLB-TCB]{\texttt{textwrap2A.yaml}}{lst:textwrap2A-yaml}
+
+ \cmhlistingsfromfile{demonstrations/textwrap4-mod2B.tex}{\texttt{textwrap4-mod2B.tex}}{lst:textwrap4-mod2B}
+ \cmhlistingsfromfile{demonstrations/textwrap2B.yaml}[MLB-TCB]{\texttt{textwrap2B.yaml}}{lst:textwrap2B-yaml}
+ \end{cmhtcbraster}
+
+ You can also specify the \texttt{tabstop} field \announce{2020-11-06}{tabstop option for
+ text wrap module} as an integer value, which is passed to the text wrap module; see
+ \cite{textwrap} for details. Starting with the code in \cref{lst:textwrap-ts} with
+ settings in \cref{lst:tabstop}, and running the command \index{switches!-l demonstration}
+ \index{switches!-m demonstration} \index{switches!-o demonstration}%
+ \begin{commandshell}
+ latexindent.pl -m textwrap-ts.tex -o=+-mod1 -l tabstop.yaml
+ \end{commandshell}
+ gives the code given in \cref{lst:textwrap-ts-mod1}.
+ \begin{cmhtcbraster}[raster columns=3,
+ raster left skip=-3.5cm,
+ raster right skip=-2cm,
+ raster column skip=.03\linewidth]
+ \cmhlistingsfromfile[showtabs=true]{demonstrations/textwrap-ts.tex}{\texttt{textwrap-ts.tex}}{lst:textwrap-ts}
+ \cmhlistingsfromfile{demonstrations/tabstop.yaml}[MLB-TCB]{\texttt{tabstop.yaml}}{lst:tabstop}
+ \cmhlistingsfromfile[showtabs=true]{demonstrations/textwrap-ts-mod1.tex}{\texttt{textwrap-ts-mod1.tex}}{lst:textwrap-ts-mod1}
+ \end{cmhtcbraster}
+
+ You can specify \texttt{separator}, \texttt{break} and \texttt{unexpand} options in your
+ settings in analogous ways to those demonstrated in
+ \cref{lst:textwrap2B-yaml,lst:tabstop}, and they will be passed to the
+ \texttt{Text::Wrap} module. I have not found a useful reason to do this; see
+ \cite{textwrap} for more details.
+% arara: pdflatex: { files: [latexindent]}
+\subsection{oneSentencePerLine: modifying line breaks for sentences}\label{sec:onesentenceperline}
+
+ You can instruct \texttt{latexindent.pl} to format \announce{2018-01-13}{one sentence per
+ line} your file so that it puts one sentence per line. Thank you to \cite{mlep} for
+ helping to shape and test this feature. The behaviour of this part of the script is
+ controlled by the switches detailed in \cref{lst:oneSentencePerLine}, all of which we
+ discuss next. \index{modifying linebreaks! by using one sentence per line}
+ \index{sentences!oneSentencePerLine} \index{sentences!one sentence per line}
+ \index{regular expressions!lowercase alph a-z} \index{regular expressions!uppercase alph
+ A-Z}%
+
+ \cmhlistingsfromfile[style=oneSentencePerLine]{../defaultSettings.yaml}[MLB-TCB,width=.85\linewidth,before=\centering]{\texttt{oneSentencePerLine}}{lst:oneSentencePerLine}
+
+\yamltitle{manipulateSentences}{0|1}
+ This is a binary switch that details if \texttt{latexindent.pl} should perform the
+ sentence manipulation routine; it is \emph{off} (set to \texttt{0}) by default, and you
+ will need to turn it on (by setting it to \texttt{1}) if you want the script to modify
+ line breaks surrounding and within sentences.
+
+\yamltitle{removeSentenceLineBreaks}{0|1}
+ When operating upon sentences \texttt{latexindent.pl} will, by default, remove internal
+ line breaks as \texttt{removeSentenceLineBreaks} is set to \texttt{1}. Setting this
+ switch to \texttt{0} instructs \texttt{latexindent.pl} not to do so.
+ \index{sentences!removing sentence line breaks}
+
+ For example, consider \texttt{multiple-sentences.tex} shown in
+ \cref{lst:multiple-sentences}.
+
+ \cmhlistingsfromfile{demonstrations/multiple-sentences.tex}{\texttt{multiple-sentences.tex}}{lst:multiple-sentences}
+
+ If we use the YAML files in
+ \cref{lst:manipulate-sentences-yaml,lst:keep-sen-line-breaks-yaml}, and run the commands
+ \index{switches!-l demonstration} \index{switches!-m demonstration}
+ \begin{widepage}
+ \begin{commandshell}
+latexindent.pl multiple-sentences -m -l=manipulate-sentences.yaml
+latexindent.pl multiple-sentences -m -l=keep-sen-line-breaks.yaml
+\end{commandshell}
+ \end{widepage}
+ then we obtain the respective output given in
+ \cref{lst:multiple-sentences-mod1,lst:multiple-sentences-mod2}.
+
+ \begin{cmhtcbraster}
+ \cmhlistingsfromfile{demonstrations/multiple-sentences-mod1.tex}{\texttt{multiple-sentences.tex} using \cref{lst:manipulate-sentences-yaml}}{lst:multiple-sentences-mod1}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/manipulate-sentences.yaml}[MLB-TCB]{\texttt{manipulate-sentences.yaml}}{lst:manipulate-sentences-yaml}
+ \end{cmhtcbraster}
+
+ \begin{cmhtcbraster}
+ \cmhlistingsfromfile{demonstrations/multiple-sentences-mod2.tex}{\texttt{multiple-sentences.tex} using \cref{lst:keep-sen-line-breaks-yaml}}{lst:multiple-sentences-mod2}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/keep-sen-line-breaks.yaml}[MLB-TCB]{\texttt{keep-sen-line-breaks.yaml}}{lst:keep-sen-line-breaks-yaml}
+ \end{cmhtcbraster}
+
+ Notice, in particular, that the `internal' sentence line breaks in
+ \cref{lst:multiple-sentences} have been removed in \cref{lst:multiple-sentences-mod1},
+ but have not been removed in \cref{lst:multiple-sentences-mod2}.
+
+\yamltitle{multipleSpacesToSingle}{0|1}
+ \announce{2022-03-25}*{multipleSpacesToSingle for oneSentencePerLine} By default, the
+ one-sentence-per-line routine will convert multiple spaces into single spaces. You can
+ change this behaviour by changing the switch \texttt{multipleSpacesToSingle} to a value
+ of \texttt{0}.
+
+ The remainder of the settings displayed in \vref{lst:oneSentencePerLine} instruct
+ \texttt{latexindent.pl} on how to define a sentence. From the perspective of
+ \texttt{latexindent.pl} a sentence must: \index{sentences!follow} \index{sentences!begin
+ with} \index{sentences!end with}
+ \begin{itemize}
+ \item \emph{follow} a certain character or set of characters (see
+ \cref{lst:sentencesFollow}); by default, this is either \lstinline!\par!, a
+ blank line, a full stop/period (.), exclamation mark (!), question mark (?) right brace
+ (\}) or a comment on the previous line;
+ \item \emph{begin} with a character type (see \cref{lst:sentencesBeginWith}); by
+ default, this is only capital letters;
+ \item \emph{end} with a character (see \cref{lst:sentencesEndWith}); by
+ default, these are full stop/period (.), exclamation mark (!) and question mark (?).
+ \end{itemize}
+ In each case, you can specify the \texttt{other} field to include any pattern that you
+ would like; you can specify anything in this field using the language of regular
+ expressions. \index{regular expressions!lowercase alph a-z} \index{regular
+ expressions!uppercase alph A-Z}
+
+ \begin{cmhtcbraster}[raster columns=3,
+ raster left skip=-3.5cm,
+ raster right skip=-2cm,
+ raster column skip=.06\linewidth]
+ \cmhlistingsfromfile[style=sentencesFollow]{../defaultSettings.yaml}[MLB-TCB,width=.9\linewidth,before=\centering]{\texttt{sentencesFollow}}{lst:sentencesFollow}
+ \cmhlistingsfromfile[style=sentencesBeginWith]{../defaultSettings.yaml}[MLB-TCB,width=.9\linewidth,before=\centering]{\texttt{sentencesBeginWith}}{lst:sentencesBeginWith}
+ \cmhlistingsfromfile[style=sentencesEndWith]{../defaultSettings.yaml}[MLB-TCB,width=.9\linewidth,before=\centering]{\texttt{sentencesEndWith}}{lst:sentencesEndWith}
+ \end{cmhtcbraster}
+
+\subsubsection{sentencesFollow}
+ Let's explore a few of the switches in \texttt{sentencesFollow}; let's start with
+ \vref{lst:multiple-sentences}, and use the YAML settings given in
+ \cref{lst:sentences-follow1-yaml}. Using the command \index{sentences!follow}
+ \index{switches!-l demonstration} \index{switches!-m demonstration}
+ \begin{commandshell}
+latexindent.pl multiple-sentences -m -l=sentences-follow1.yaml
+\end{commandshell}
+ we obtain the output given in \cref{lst:multiple-sentences-mod3}.
+
+ \begin{cmhtcbraster}
+ \cmhlistingsfromfile{demonstrations/multiple-sentences-mod3.tex}{\texttt{multiple-sentences.tex} using \cref{lst:sentences-follow1-yaml}}{lst:multiple-sentences-mod3}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/sentences-follow1.yaml}[MLB-TCB]{\texttt{sentences-follow1.yaml}}{lst:sentences-follow1-yaml}
+ \end{cmhtcbraster}
+
+ Notice that, because \texttt{blankLine} is set to \texttt{0}, \texttt{latexindent.pl}
+ will not seek sentences following a blank line, and so the fourth sentence has not been
+ accounted for.
+
+ We can explore the \texttt{other} field in \cref{lst:sentencesFollow} with the
+ \texttt{.tex} file detailed in \cref{lst:multiple-sentences1}.
+
+ \cmhlistingsfromfile{demonstrations/multiple-sentences1.tex}{\texttt{multiple-sentences1.tex}}{lst:multiple-sentences1}
+
+ Upon running the following commands \index{switches!-l demonstration} \index{switches!-m
+ demonstration}
+ \begin{widepage}
+ \begin{commandshell}
+latexindent.pl multiple-sentences1 -m -l=manipulate-sentences.yaml
+latexindent.pl multiple-sentences1 -m -l=manipulate-sentences.yaml,sentences-follow2.yaml
+\end{commandshell}
+ \end{widepage}
+ then we obtain the respective output given in
+ \cref{lst:multiple-sentences1-mod1,lst:multiple-sentences1-mod2}.
+ \cmhlistingsfromfile{demonstrations/multiple-sentences1-mod1.tex}{\texttt{multiple-sentences1.tex} using \vref{lst:manipulate-sentences-yaml}}{lst:multiple-sentences1-mod1}
+
+ \begin{cmhtcbraster}[
+ raster force size=false,
+ raster column 1/.style={add to width=1cm},
+ ]
+ \cmhlistingsfromfile{demonstrations/multiple-sentences1-mod2.tex}{\texttt{multiple-sentences1.tex} using \cref{lst:sentences-follow2-yaml}}{lst:multiple-sentences1-mod2}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/sentences-follow2.yaml}[MLB-TCB,width=.45\textwidth]{\texttt{sentences-follow2.yaml}}{lst:sentences-follow2-yaml}
+ \end{cmhtcbraster}
+
+ Notice that in \cref{lst:multiple-sentences1-mod1} the first sentence after the
+ \texttt{)} has not been accounted for, but that following the inclusion of
+ \cref{lst:sentences-follow2-yaml}, the output given in
+ \cref{lst:multiple-sentences1-mod2} demonstrates that the sentence \emph{has} been
+ accounted for correctly.
+
+\subsubsection{sentencesBeginWith}
+ By default, \texttt{latexindent.pl} will only assume that sentences begin with the upper
+ case letters \texttt{A-Z}; you can instruct the script to define sentences to begin with
+ lower case letters (see \cref{lst:sentencesBeginWith}), and we can use the \texttt{other}
+ field to define sentences to begin with other characters. \index{sentences!begin with}
+
+ \cmhlistingsfromfile{demonstrations/multiple-sentences2.tex}{\texttt{multiple-sentences2.tex}}{lst:multiple-sentences2}
+
+ Upon running the following commands \index{switches!-l demonstration} \index{switches!-m
+ demonstration}
+ \begin{widepage}
+ \begin{commandshell}
+latexindent.pl multiple-sentences2 -m -l=manipulate-sentences.yaml
+latexindent.pl multiple-sentences2 -m -l=manipulate-sentences.yaml,sentences-begin1.yaml
+\end{commandshell}
+ \end{widepage}
+ then we obtain the respective output given in
+ \cref{lst:multiple-sentences2-mod1,lst:multiple-sentences2-mod2}.
+ \cmhlistingsfromfile{demonstrations/multiple-sentences2-mod1.tex}{\texttt{multiple-sentences2.tex} using \vref{lst:manipulate-sentences-yaml}}{lst:multiple-sentences2-mod1}
+ \index{regular expressions!numeric 0-9}
+
+ \begin{cmhtcbraster}[
+ raster force size=false,
+ raster column 1/.style={add to width=1cm},
+ ]
+ \cmhlistingsfromfile{demonstrations/multiple-sentences2-mod2.tex}{\texttt{multiple-sentences2.tex} using \cref{lst:sentences-begin1-yaml}}{lst:multiple-sentences2-mod2}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/sentences-begin1.yaml}[MLB-TCB,width=.45\textwidth]{\texttt{sentences-begin1.yaml}}{lst:sentences-begin1-yaml}
+ \end{cmhtcbraster}
+ Notice that in \cref{lst:multiple-sentences2-mod1}, the first sentence has been accounted
+ for but that the subsequent sentences have not. In \cref{lst:multiple-sentences2-mod2},
+ all of the sentences have been accounted for, because the \texttt{other} field in
+ \cref{lst:sentences-begin1-yaml} has defined sentences to begin with either \lstinline!$!
+ or any numeric digit, \texttt{0} to \texttt{9}.
+
+\subsubsection{sentencesEndWith}
+ Let's return to \vref{lst:multiple-sentences}; we have already seen the default way in
+ which \texttt{latexindent.pl} will operate on the sentences in this file in
+ \vref{lst:multiple-sentences-mod1}. We can populate the \texttt{other} field with any
+ character that we wish; for example, using the YAML specified in
+ \cref{lst:sentences-end1-yaml} and the command \index{sentences!end with}
+ \index{switches!-l demonstration} \index{switches!-m demonstration}
+ \begin{commandshell}
+latexindent.pl multiple-sentences -m -l=sentences-end1.yaml
+latexindent.pl multiple-sentences -m -l=sentences-end2.yaml
+\end{commandshell}
+ then we obtain the output in \cref{lst:multiple-sentences-mod4}. \index{regular
+ expressions!lowercase alph a-z}
+
+ \begin{cmhtcbraster}
+ \cmhlistingsfromfile{demonstrations/multiple-sentences-mod4.tex}{\texttt{multiple-sentences.tex} using \cref{lst:sentences-end1-yaml}}{lst:multiple-sentences-mod4}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/sentences-end1.yaml}[MLB-TCB]{\texttt{sentences-end1.yaml}}{lst:sentences-end1-yaml}
+ \end{cmhtcbraster}
+
+ \begin{cmhtcbraster}
+ \cmhlistingsfromfile{demonstrations/multiple-sentences-mod5.tex}{\texttt{multiple-sentences.tex} using \cref{lst:sentences-end2-yaml}}{lst:multiple-sentences-mod5}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/sentences-end2.yaml}[MLB-TCB]{\texttt{sentences-end2.yaml}}{lst:sentences-end2-yaml}
+ \end{cmhtcbraster}
+
+ There is a subtle difference between the output in
+ \cref{lst:multiple-sentences-mod4,lst:multiple-sentences-mod5}; in particular, in
+ \cref{lst:multiple-sentences-mod4} the word \texttt{sentence} has not been defined as a
+ sentence, because we have not instructed \texttt{latexindent.pl} to begin sentences with
+ lower case letters. We have changed this by using the settings in
+ \cref{lst:sentences-end2-yaml}, and the associated output in
+ \cref{lst:multiple-sentences-mod5} reflects this.
+
+ Referencing \vref{lst:sentencesEndWith}, you'll notice that there is a field called
+ \texttt{basicFullStop}, which is set to \texttt{0}, and that the \texttt{betterFullStop}
+ is set to \texttt{1} by default.
+
+ Let's consider the file shown in \cref{lst:url}.
+
+ \cmhlistingsfromfile{demonstrations/url.tex}{\texttt{url.tex}}{lst:url}
+
+ Upon running the following commands \index{switches!-l demonstration} \index{switches!-m
+ demonstration}
+ \begin{commandshell}
+latexindent.pl url -m -l=manipulate-sentences.yaml
+\end{commandshell}
+ we obtain the output given in \cref{lst:url-mod1}.
+
+ \cmhlistingsfromfile{demonstrations/url-mod1.tex}{\texttt{url.tex} using \vref{lst:manipulate-sentences-yaml}}{lst:url-mod1}
+
+ Notice that the full stop within the url has been interpreted correctly. This is because,
+ within the \texttt{betterFullStop}, full stops at the end of sentences have the following
+ properties:
+ \begin{itemize}
+ \item they are ignored within \texttt{e.g.} and \texttt{i.e.};
+ \item they can not be immediately followed by a lower case or upper case letter;
+ \item they can not be immediately followed by a hyphen, comma, or number.
+ \end{itemize}
+ If you find that the \texttt{betterFullStop} does not work for your purposes, then you
+ can switch it off by setting it to \texttt{0}, and you can experiment with the
+ \texttt{other} field. \announce{2019-07-13}{fine tuning the betterFullStop} You can also
+ seek to customise the \texttt{betterFullStop} routine by using the \emph{fine tuning},
+ detailed in \vref{lst:fineTuning}.%
+
+ The \texttt{basicFullStop} routine should probably be avoided in most situations, as it
+ does not accommodate the specifications above. For example, using the following command
+ \index{switches!-l demonstration} \index{switches!-m demonstration}
+ \begin{commandshell}
+latexindent.pl url -m -l=alt-full-stop1.yaml
+\end{commandshell}
+ and the YAML in \cref{lst:alt-full-stop1-yaml} gives the output in \cref{lst:url-mod2}.
+
+ \begin{cmhtcbraster}[ raster left skip=-3.5cm,
+ raster right skip=-2cm,
+ raster force size=false,
+ raster column 1/.style={add to width=.1\textwidth},
+ raster column skip=.06\linewidth]
+ \cmhlistingsfromfile{demonstrations/url-mod2.tex}{\texttt{url.tex} using \cref{lst:alt-full-stop1-yaml}}{lst:url-mod2}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/alt-full-stop1.yaml}[MLB-TCB,width=.5\textwidth]{\texttt{alt-full-stop1.yaml}}{lst:alt-full-stop1-yaml}
+ \end{cmhtcbraster}
+
+ Notice that the full stop within the URL has not been accommodated correctly because of
+ the non-default settings in \cref{lst:alt-full-stop1-yaml}.
+
+\subsubsection{Features of the oneSentencePerLine routine}
+ The sentence manipulation routine takes place \emph{after} verbatim \index{verbatim!in
+ relation to oneSentencePerLine} environments, preamble and trailing comments have been
+ accounted for; this means that any characters within these types of code blocks will not
+ be part of the sentence manipulation routine.
+
+ For example, if we begin with the \texttt{.tex} file in \cref{lst:multiple-sentences3},
+ and run the command \index{switches!-l demonstration} \index{switches!-m demonstration}
+ \begin{commandshell}
+latexindent.pl multiple-sentences3 -m -l=manipulate-sentences.yaml
+\end{commandshell}
+ then we obtain the output in \cref{lst:multiple-sentences3-mod1}.
+ \cmhlistingsfromfile{demonstrations/multiple-sentences3.tex}{\texttt{multiple-sentences3.tex}}{lst:multiple-sentences3}
+ \cmhlistingsfromfile{demonstrations/multiple-sentences3-mod1.tex}{\texttt{multiple-sentences3.tex} using \vref{lst:manipulate-sentences-yaml}}{lst:multiple-sentences3-mod1}
+
+ Furthermore, if sentences run across environments then, by default, the line breaks
+ internal to the sentence will be removed. For example, if we use the \texttt{.tex} file
+ in \cref{lst:multiple-sentences4} and run the commands \index{switches!-l demonstration}
+ \index{switches!-m demonstration}
+ \begin{commandshell}
+latexindent.pl multiple-sentences4 -m -l=manipulate-sentences.yaml
+latexindent.pl multiple-sentences4 -m -l=keep-sen-line-breaks.yaml
+\end{commandshell}
+ then we obtain the output in
+ \cref{lst:multiple-sentences4-mod1,lst:multiple-sentences4-mod2}.
+ \cmhlistingsfromfile{demonstrations/multiple-sentences4.tex}{\texttt{multiple-sentences4.tex}}{lst:multiple-sentences4}
+ \begin{widepage}
+ \cmhlistingsfromfile{demonstrations/multiple-sentences4-mod1.tex}{\texttt{multiple-sentences4.tex} using \vref{lst:manipulate-sentences-yaml}}{lst:multiple-sentences4-mod1}
+ \end{widepage}
+ \cmhlistingsfromfile{demonstrations/multiple-sentences4-mod2.tex}{\texttt{multiple-sentences4.tex} using \vref{lst:keep-sen-line-breaks-yaml}}{lst:multiple-sentences4-mod2}
+
+ Once you've read \cref{sec:poly-switches}, you will know that you can accommodate the
+ removal of internal sentence line breaks by using the YAML in \cref{lst:item-rules2-yaml}
+ and the command \index{switches!-l demonstration} \index{switches!-m demonstration}
+ \begin{commandshell}
+latexindent.pl multiple-sentences4 -m -l=item-rules2.yaml
+\end{commandshell}
+ the output of which is shown in \cref{lst:multiple-sentences4-mod3}.
+
+ \begin{cmhtcbraster}
+ \cmhlistingsfromfile{demonstrations/multiple-sentences4-mod3.tex}{\texttt{multiple-sentences4.tex} using \cref{lst:item-rules2-yaml}}{lst:multiple-sentences4-mod3}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/item-rules2.yaml}[MLB-TCB]{\texttt{item-rules2.yaml}}{lst:item-rules2-yaml}
+ \end{cmhtcbraster}
+
+\subsubsection{Text wrapping and indenting sentences}
+ The \texttt{oneSentencePerLine} \announce{2018-08-13}{oneSentencePerline text wrap and
+ indent} can be instructed to perform text wrapping and indentation upon sentences.
+ \index{sentences!text wrapping} \index{sentences!indenting}%
+
+ Let's use the code in \cref{lst:multiple-sentences5}.
+
+ \cmhlistingsfromfile{demonstrations/multiple-sentences5.tex}{\texttt{multiple-sentences5.tex}}{lst:multiple-sentences5}
+
+ Referencing \cref{lst:sentence-wrap1-yaml}, and running the following command
+ \index{switches!-l demonstration} \index{switches!-m demonstration}
+ \begin{commandshell}
+latexindent.pl multiple-sentences5 -m -l=sentence-wrap1.yaml
+\end{commandshell}
+ we receive the output given in \cref{lst:multiple-sentences5-mod1}.
+
+ \begin{cmhtcbraster}[ raster left skip=-3.5cm,
+ raster right skip=-2cm,
+ raster force size=false,
+ raster column 1/.style={add to width=.1\textwidth},
+ raster column skip=.06\linewidth]
+ \cmhlistingsfromfile{demonstrations/multiple-sentences5-mod1.tex}{\texttt{multiple-sentences5.tex} using \cref{lst:sentence-wrap1-yaml}}{lst:multiple-sentences5-mod1}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/sentence-wrap1.yaml}[MLB-TCB,width=0.5\textwidth]{\texttt{sentence-wrap1.yaml}}{lst:sentence-wrap1-yaml}
+ \end{cmhtcbraster}
+
+ If you specify \texttt{textWrapSentences} as 1, but do \emph{not} specify a value for
+ \texttt{columns} then the text wrapping will \emph{not} operate on sentences, and you
+ will see a warning in \texttt{indent.log}.
+
+ The indentation of sentences requires that sentences are stored as code blocks. This
+ means that you may need to tweak \vref{lst:sentencesEndWith}. Let's explore this in
+ relation to \cref{lst:multiple-sentences6}.
+
+ \cmhlistingsfromfile{demonstrations/multiple-sentences6.tex}{\texttt{multiple-sentences6.tex}}{lst:multiple-sentences6}
+
+ By default, \texttt{latexindent.pl} will find the full-stop within the first
+ \texttt{item}, which means that, upon running the following commands \index{switches!-l
+ demonstration} \index{switches!-m demonstration} \index{switches!-y demonstration}
+ \begin{commandshell}
+latexindent.pl multiple-sentences6 -m -l=sentence-wrap1.yaml
+latexindent.pl multiple-sentences6 -m -l=sentence-wrap1.yaml -y="modifyLineBreaks:oneSentencePerLine:sentenceIndent:''"
+\end{commandshell}
+ we receive the respective output in \cref{lst:multiple-sentences6-mod1} and
+ \cref{lst:multiple-sentences6-mod2}.
+
+ \cmhlistingsfromfile{demonstrations/multiple-sentences6-mod1.tex}{\texttt{multiple-sentences6-mod1.tex} using \cref{lst:sentence-wrap1-yaml}}{lst:multiple-sentences6-mod1}
+
+ \cmhlistingsfromfile{demonstrations/multiple-sentences6-mod2.tex}{\texttt{multiple-sentences6-mod2.tex} using \cref{lst:sentence-wrap1-yaml} and no sentence indentation}{lst:multiple-sentences6-mod2}
+
+ We note that \cref{lst:multiple-sentences6-mod1} the \texttt{itemize} code block has
+ \emph{not} been indented appropriately. This is because the oneSentencePerLine has been
+ instructed to store sentences (because \cref{lst:sentence-wrap1-yaml}); each sentence is
+ then searched for code blocks.
+
+ We can tweak the settings in \vref{lst:sentencesEndWith} to ensure that full stops are
+ not followed by \texttt{item} commands, and that the end of sentences contains
+ \lstinline!\end{itemize}! as in \cref{lst:itemize-yaml} (if you intend to use this,
+ ensure that you remove the line breaks from the \texttt{other} field). \index{regular
+ expressions!lowercase alph a-z} \index{regular expressions!uppercase alph A-Z}
+ \index{regular expressions!numeric 0-9} \index{regular expressions!horizontal space
+ \textbackslash{h}}
+
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/itemized.yaml}[MLB-TCB]{\texttt{itemize.yaml}}{lst:itemize-yaml}
+
+ Upon running \index{switches!-l demonstration} \index{switches!-m demonstration}
+ \begin{commandshell}
+latexindent.pl multiple-sentences6 -m -l=sentence-wrap1.yaml,itemize.yaml
+\end{commandshell}
+ we receive the output in \cref{lst:multiple-sentences6-mod3}.
+
+ \cmhlistingsfromfile{demonstrations/multiple-sentences6-mod3.tex}{\texttt{multiple-sentences6-mod3.tex} using \cref{lst:sentence-wrap1-yaml} and \cref{lst:itemize-yaml}}{lst:multiple-sentences6-mod3}
+
+ Notice that the sentence has received indentation, and that the \texttt{itemize} code
+ block has been found and indented correctly.
+
+ Text \announce{2022-04-04}*{oneSentencePerLine text wrapping update} wrapping when using
+ the \texttt{oneSentencePerLine} routine determines if it will remove line breaks while
+ text wrapping, from the value of \texttt{removeSentenceLineBreaks}.
+% arara: pdflatex: { files: [latexindent]}
+\subsection{Poly-switches}\label{sec:poly-switches}
+ Every other field in the \texttt{modifyLineBreaks} field uses poly-switches, and can take
+ one of the following%
+ \announce{2017-08-21}*{blank line poly-switch} integer values:
+ \index{modifying linebreaks! using poly-switches}
+ \index{poly-switches!definition}
+ \index{poly-switches!values}
+ \index{poly-switches!off by default: set to 0}
+ \begin{description}
+ \item[$-1$] \emph{remove mode}: line breaks before or after the
+ \emph{<part of thing>} can be removed (assuming that \texttt{preserveBlankLines} is
+ set to \texttt{0});
+ \item[0] \emph{off mode}: line breaks will not be modified for the
+ \emph{<part of thing>} under consideration;
+ \item[1] \emph{add mode}: a line break will be added before or after the
+ \emph{<part of thing>} under consideration, assuming that
+ there is not already a line break before or after the \emph{<part of thing>};
+ \item[2] \emph{comment then add mode}: a comment symbol will be added, followed by a line break
+ before or after the \emph{<part of thing>} under consideration, assuming that there is
+ not already a comment and line break before or after the \emph{<part of thing>};
+ \item[3] \emph{add then blank line mode}%
+ \announce{2017-08-21}{blank line poly-switch}: a line break will be added before or after
+ the \emph{<part of thing>} under consideration, assuming that there is not already a line
+ break before or after the \emph{<part of thing>}, followed by a blank line;
+ \item[4] \emph{add blank line mode}%
+ \announce{2019-07-13}{blank line poly-switch}; a blank line will
+ be added before or after the \emph{<part of thing>} under consideration, even if the
+ \emph{<part of thing>} is already on its own line.
+ \end{description}
+ In the above, \emph{<part of thing>} refers to either the \emph{begin statement},
+ \emph{body} or \emph{end statement} of the code blocks detailed in
+ \vref{tab:code-blocks}. All poly-switches are \emph{off} by default;
+ \texttt{latexindent.pl} searches first of all for per-name settings, and then followed by
+ global per-thing settings.
+
+\subsubsection{Poly-switches for environments}\label{sec:modifylinebreaks-environments}
+ We start by viewing a snippet of \texttt{defaultSettings.yaml} in
+ \cref{lst:environments-mlb}; note that it contains \emph{global} settings (immediately
+ after the \texttt{environments} field) and that \emph{per-name} settings are also allowed
+ -- in the case of \cref{lst:environments-mlb}, settings for \texttt{equation*} have been
+ specified for demonstration. Note that all poly-switches are \emph{off} (set to 0) by
+ default. \index{poly-switches!default values} \index{poly-switches!environment global
+ example} \index{poly-switches!environment per-code block example}
+
+ \cmhlistingsfromfile[style=modifylinebreaksEnv]{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,MLB-TCB]{\texttt{environments}}{lst:environments-mlb}
+
+ Let's begin with the simple example given in \cref{lst:env-mlb1-tex}; note that we have
+ annotated key parts of the file using $\BeginStartsOnOwnLine$, $\BodyStartsOnOwnLine$,
+ $\EndStartsOnOwnLine$ and $\EndFinishesWithLineBreak$, these will be related to fields
+ specified in \cref{lst:environments-mlb}. \index{poly-switches!visualisation:
+ $\BeginStartsOnOwnLine$, $\BodyStartsOnOwnLine$, $\EndStartsOnOwnLine$,
+ $\EndFinishesWithLineBreak$}
+
+ \begin{cmhlistings}[style=tcblatex,escapeinside={(*@}{@*)}]{\texttt{env-mlb1.tex}}{lst:env-mlb1-tex}
+before words(*@$\BeginStartsOnOwnLine$@*) \begin{myenv}(*@$\BodyStartsOnOwnLine$@*)body of myenv(*@$\EndStartsOnOwnLine$@*)\end{myenv}(*@$\EndFinishesWithLineBreak$@*) after words
+\end{cmhlistings}
+
+ \paragraph{Adding line breaks: BeginStartsOnOwnLine and BodyStartsOnOwnLine}
+ Let's explore \texttt{BeginStartsOnOwnLine} and \texttt{BodyStartsOnOwnLine} in
+ \cref{lst:env-mlb1,lst:env-mlb2}, and in particular, let's allow each of them in turn to
+ take a value of $1$. \index{modifying linebreaks! at the \emph{beginning} of a code
+ block} \index{poly-switches!adding line breaks: set to 1}
+
+ \begin{minipage}{.45\textwidth}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/env-mlb1.yaml}[MLB-TCB]{\texttt{env-mlb1.yaml}}{lst:env-mlb1}
+ \end{minipage}
+ \hfill
+ \begin{minipage}{.45\textwidth}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/env-mlb2.yaml}[MLB-TCB]{\texttt{env-mlb2.yaml}}{lst:env-mlb2}
+ \end{minipage}
+
+ After running the following commands, \index{switches!-l demonstration}
+ \index{switches!-m demonstration}
+ \begin{commandshell}
+latexindent.pl -m env-mlb.tex -l env-mlb1.yaml
+latexindent.pl -m env-mlb.tex -l env-mlb2.yaml
+\end{commandshell}
+ the output is as in \cref{lst:env-mlb-mod1,lst:env-mlb-mod2} respectively.
+
+ \begin{widepage}
+ \begin{minipage}{.56\linewidth}
+ \cmhlistingsfromfile{demonstrations/env-mlb-mod1.tex}{\texttt{env-mlb.tex} using \cref{lst:env-mlb1}}{lst:env-mlb-mod1}
+ \end{minipage}
+ \hfill
+ \begin{minipage}{.43\linewidth}
+ \cmhlistingsfromfile{demonstrations/env-mlb-mod2.tex}{\texttt{env-mlb.tex} using \cref{lst:env-mlb2}}{lst:env-mlb-mod2}
+ \end{minipage}
+ \end{widepage}
+
+ There are a couple of points to note:
+ \begin{itemize}
+ \item in \cref{lst:env-mlb-mod1} a line break has been added at the point denoted by
+ $\BeginStartsOnOwnLine$ in \cref{lst:env-mlb1-tex}; no other line breaks have been
+ changed;
+ \item in \cref{lst:env-mlb-mod2} a line break has been added at the point denoted by
+ $\BodyStartsOnOwnLine$ in \cref{lst:env-mlb1-tex}; furthermore, note that the \emph{body}
+ of \texttt{myenv} has received the appropriate (default) indentation.
+ \end{itemize}
+
+ Let's now change each of the \texttt{1} values in \cref{lst:env-mlb1,lst:env-mlb2} so
+ that they are $2$ and save them into \texttt{env-mlb3.yaml} and \texttt{env-mlb4.yaml}
+ respectively (see \cref{lst:env-mlb3,lst:env-mlb4}). \index{poly-switches!adding comments
+ and then line breaks: set to 2}
+
+ \begin{minipage}{.45\textwidth}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/env-mlb3.yaml}[MLB-TCB]{\texttt{env-mlb3.yaml}}{lst:env-mlb3}
+ \end{minipage}
+ \hfill
+ \begin{minipage}{.45\textwidth}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/env-mlb4.yaml}[MLB-TCB]{\texttt{env-mlb4.yaml}}{lst:env-mlb4}
+ \end{minipage}
+
+ Upon running commands analogous to the above, we obtain
+ \cref{lst:env-mlb-mod3,lst:env-mlb-mod4}.
+
+ \begin{widepage}
+ \begin{minipage}{.56\linewidth}
+ \cmhlistingsfromfile{demonstrations/env-mlb-mod3.tex}{\texttt{env-mlb.tex} using \cref{lst:env-mlb3}}{lst:env-mlb-mod3}
+ \end{minipage}
+ \hfill
+ \begin{minipage}{.43\linewidth}
+ \cmhlistingsfromfile{demonstrations/env-mlb-mod4.tex}{\texttt{env-mlb.tex} using \cref{lst:env-mlb4}}{lst:env-mlb-mod4}
+ \end{minipage}
+ \end{widepage}
+
+ Note that line breaks have been added as in \cref{lst:env-mlb-mod1,lst:env-mlb-mod2}, but
+ this time a comment symbol has been added before adding the line break; in both cases,
+ trailing horizontal space has been stripped before doing so.
+
+ Let's \announce{2017-08-21}{demonstration of blank line poly-switch (3)} now change each
+ of the \texttt{1} values in \cref{lst:env-mlb1,lst:env-mlb2} so that they are $3$ and
+ save them into \texttt{env-mlb5.yaml} and \texttt{env-mlb6.yaml} respectively (see
+ \cref{lst:env-mlb5,lst:env-mlb6}). \index{poly-switches!adding blank lines: set to 3}%
+
+ \begin{minipage}{.45\textwidth}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/env-mlb5.yaml}[MLB-TCB]{\texttt{env-mlb5.yaml}}{lst:env-mlb5}
+ \end{minipage}
+ \hfill
+ \begin{minipage}{.45\textwidth}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/env-mlb6.yaml}[MLB-TCB]{\texttt{env-mlb6.yaml}}{lst:env-mlb6}
+ \end{minipage}
+
+ Upon running commands analogous to the above, we obtain
+ \cref{lst:env-mlb-mod5,lst:env-mlb-mod6}.
+
+ \begin{widepage}
+ \begin{minipage}{.56\linewidth}
+ \cmhlistingsfromfile{demonstrations/env-mlb-mod5.tex}{\texttt{env-mlb.tex} using \cref{lst:env-mlb5}}{lst:env-mlb-mod5}
+ \end{minipage}
+ \hfill
+ \begin{minipage}{.43\linewidth}
+ \cmhlistingsfromfile{demonstrations/env-mlb-mod6.tex}{\texttt{env-mlb.tex} using \cref{lst:env-mlb6}}{lst:env-mlb-mod6}
+ \end{minipage}
+ \end{widepage}
+
+ Note that line breaks have been added as in \cref{lst:env-mlb-mod1,lst:env-mlb-mod2}, but
+ this time a \emph{blank line} has been added after adding the line break.
+
+ Let's now change \announce{2019-07-13}{demonstration of new blank line poly-switch} each
+ of the \texttt{1} values in \cref{lst:env-mlb5,lst:env-mlb6} so that they are $4$ and
+ save them into \texttt{env-beg4.yaml} and \texttt{env-body4.yaml} respectively (see
+ \cref{lst:env-beg4,lst:env-body4}). \index{poly-switches!adding blank lines (again"!):
+ set to 4}%
+
+ \begin{minipage}{.45\textwidth}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/env-beg4.yaml}[MLB-TCB]{\texttt{env-beg4.yaml}}{lst:env-beg4}
+ \end{minipage}
+ \hfill
+ \begin{minipage}{.45\textwidth}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/env-body4.yaml}[MLB-TCB]{\texttt{env-body4.yaml}}{lst:env-body4}
+ \end{minipage}
+
+ We will demonstrate this poly-switch value using the code in \cref{lst:env-mlb1-text}.
+
+ \cmhlistingsfromfile{demonstrations/env-mlb1.tex}{\texttt{env-mlb1.tex}}{lst:env-mlb1-text}
+
+ Upon running the commands \index{switches!-l demonstration} \index{switches!-m
+ demonstration}
+ \begin{commandshell}
+latexindent.pl -m env-mlb1.tex -l env-beg4.yaml
+latexindent.pl -m env-mlb.1tex -l env-body4.yaml
+\end{commandshell}
+
+ then we receive the respective outputs in \cref{lst:env-mlb1-beg4,lst:env-mlb1-body4}.
+
+ \begin{cmhtcbraster}[raster column skip=.1\linewidth]
+ \cmhlistingsfromfile{demonstrations/env-mlb1-beg4.tex}{\texttt{env-mlb1.tex} using \cref{lst:env-beg4}}{lst:env-mlb1-beg4}
+ \cmhlistingsfromfile{demonstrations/env-mlb1-body4.tex}{\texttt{env-mlb1.tex} using \cref{lst:env-body4}}{lst:env-mlb1-body4}
+ \end{cmhtcbraster}
+
+ We note in particular that, by design, for this value of the poly-switches:
+ \begin{enumerate}
+ \item in \cref{lst:env-mlb1-beg4} a blank line has been inserted before the \lstinline!\begin!
+ statement, even though the \lstinline!\begin! statement was already on its own line;
+ \item in \cref{lst:env-mlb1-body4} a blank line has been inserted before the beginning of the
+ \emph{body}, even though it already began on its own line.
+ \end{enumerate}
+
+ \paragraph{Adding line breaks using EndStartsOnOwnLine and EndFinishesWithLineBreak}
+ Let's explore \texttt{EndStartsOnOwnLine} and \texttt{EndFinishesWithLineBreak} in
+ \cref{lst:env-mlb7,lst:env-mlb8}, and in particular, let's allow each of them in turn to
+ take a value of $1$. \index{modifying linebreaks! at the \emph{end} of a code block}
+ \index{poly-switches!adding line breaks: set to 1}
+
+ \begin{minipage}{.49\textwidth}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/env-mlb7.yaml}[MLB-TCB]{\texttt{env-mlb7.yaml}}{lst:env-mlb7}
+ \end{minipage}
+ \hfill
+ \begin{minipage}{.49\textwidth}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/env-mlb8.yaml}[MLB-TCB]{\texttt{env-mlb8.yaml}}{lst:env-mlb8}
+ \end{minipage}
+
+ After running the following commands, \index{switches!-l demonstration}
+ \index{switches!-m demonstration}
+ \begin{commandshell}
+latexindent.pl -m env-mlb.tex -l env-mlb7.yaml
+latexindent.pl -m env-mlb.tex -l env-mlb8.yaml
+\end{commandshell}
+ the output is as in \cref{lst:env-mlb-mod7,lst:env-mlb-mod8}.
+
+ \begin{widepage}
+ \begin{minipage}{.42\linewidth}
+ \cmhlistingsfromfile{demonstrations/env-mlb-mod7.tex}{\texttt{env-mlb.tex} using \cref{lst:env-mlb7}}{lst:env-mlb-mod7}
+ \end{minipage}
+ \hfill
+ \begin{minipage}{.57\linewidth}
+ \cmhlistingsfromfile{demonstrations/env-mlb-mod8.tex}{\texttt{env-mlb.tex} using \cref{lst:env-mlb8}}{lst:env-mlb-mod8}
+ \end{minipage}
+ \end{widepage}
+
+ There are a couple of points to note:
+ \begin{itemize}
+ \item in \cref{lst:env-mlb-mod7} a line break has been added at the point denoted by
+ $\EndStartsOnOwnLine$ in \vref{lst:env-mlb1-tex}; no other line breaks have been changed
+ and the \lstinline!\end{myenv}! statement has \emph{not} received indentation (as
+ intended);
+ \item in \cref{lst:env-mlb-mod8} a line break has been added at the point denoted by
+ $\EndFinishesWithLineBreak$ in \vref{lst:env-mlb1-tex}.
+ \end{itemize}
+
+ Let's now change each of the \texttt{1} values in \cref{lst:env-mlb7,lst:env-mlb8} so
+ that they are $2$ and save them into \texttt{env-mlb9.yaml} and \texttt{env-mlb10.yaml}
+ respectively (see \cref{lst:env-mlb9,lst:env-mlb10}). \index{poly-switches!adding
+ comments and then line breaks: set to 2}
+
+ \begin{minipage}{.49\textwidth}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/env-mlb9.yaml}[MLB-TCB]{\texttt{env-mlb9.yaml}}{lst:env-mlb9}
+ \end{minipage}
+ \hfill
+ \begin{minipage}{.49\textwidth}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/env-mlb10.yaml}[MLB-TCB]{\texttt{env-mlb10.yaml}}{lst:env-mlb10}
+ \end{minipage}
+
+ Upon running commands analogous to the above, we obtain
+ \cref{lst:env-mlb-mod9,lst:env-mlb-mod10}.
+
+ \begin{widepage}
+ \begin{minipage}{.43\linewidth}
+ \cmhlistingsfromfile{demonstrations/env-mlb-mod9.tex}{\texttt{env-mlb.tex} using \cref{lst:env-mlb9}}{lst:env-mlb-mod9}
+ \end{minipage}
+ \hfill
+ \begin{minipage}{.56\linewidth}
+ \cmhlistingsfromfile{demonstrations/env-mlb-mod10.tex}{\texttt{env-mlb.tex} using \cref{lst:env-mlb10}}{lst:env-mlb-mod10}
+ \end{minipage}
+ \end{widepage}
+
+ Note that line breaks have been added as in \cref{lst:env-mlb-mod7,lst:env-mlb-mod8}, but
+ this time a comment symbol has been added before adding the line break; in both cases,
+ trailing horizontal space has been stripped before doing so.
+
+ Let's \announce{2017-08-21}{demonstration of blank line poly-switch (3)} now change each
+ of the \texttt{1} values in \cref{lst:env-mlb7,lst:env-mlb8} so that they are $3$ and
+ save them into \texttt{env-mlb11.yaml} and \texttt{env-mlb12.yaml} respectively (see
+ \cref{lst:env-mlb11,lst:env-mlb12}). \index{poly-switches!adding blank lines: set to 3}%
+
+ \begin{minipage}{.49\textwidth}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/env-mlb11.yaml}[MLB-TCB]{\texttt{env-mlb11.yaml}}{lst:env-mlb11}
+ \end{minipage}
+ \hfill
+ \begin{minipage}{.49\textwidth}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/env-mlb12.yaml}[MLB-TCB]{\texttt{env-mlb12.yaml}}{lst:env-mlb12}
+ \end{minipage}
+
+ Upon running commands analogous to the above, we obtain
+ \cref{lst:env-mlb-mod11,lst:env-mlb-mod12}.
+
+ \begin{widepage}
+ \begin{minipage}{.42\linewidth}
+ \cmhlistingsfromfile{demonstrations/env-mlb-mod11.tex}{\texttt{env-mlb.tex} using \cref{lst:env-mlb11}}{lst:env-mlb-mod11}
+ \end{minipage}
+ \hfill
+ \begin{minipage}{.57\linewidth}
+ \cmhlistingsfromfile{demonstrations/env-mlb-mod12.tex}{\texttt{env-mlb.tex} using \cref{lst:env-mlb12}}{lst:env-mlb-mod12}
+ \end{minipage}
+ \end{widepage}
+
+ Note that line breaks have been added as in \cref{lst:env-mlb-mod7,lst:env-mlb-mod8}, and
+ that a \emph{blank line} has been added after the line break.
+
+ Let's now change \announce{2019-07-13}{demonstration of new blank line poly-switch} each
+ of the \texttt{1} values in \cref{lst:env-mlb11,lst:env-mlb12} so that they are $4$ and
+ save them into \texttt{env-end4.yaml} and \texttt{env-end-f4.yaml} respectively (see
+ \cref{lst:env-end4,lst:env-end-f4}). \index{poly-switches!adding blank lines (again"!):
+ set to 4}%
+
+ \begin{minipage}{.45\textwidth}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/env-end4.yaml}[MLB-TCB]{\texttt{env-end4.yaml}}{lst:env-end4}
+ \end{minipage}
+ \hfill
+ \begin{minipage}{.5\textwidth}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/env-end-f4.yaml}[MLB-TCB]{\texttt{env-end-f4.yaml}}{lst:env-end-f4}
+ \end{minipage}
+
+ We will demonstrate this poly-switch value using the code from \vref{lst:env-mlb1-text}.
+
+ Upon running the commands \index{switches!-l demonstration} \index{switches!-m
+ demonstration}
+ \begin{commandshell}
+latexindent.pl -m env-mlb1.tex -l env-end4.yaml
+latexindent.pl -m env-mlb.1tex -l env-end-f4.yaml
+\end{commandshell}
+
+ then we receive the respective outputs in \cref{lst:env-mlb1-end4,lst:env-mlb1-end-f4}.
+
+ \begin{cmhtcbraster}[raster column skip=.1\linewidth]
+ \cmhlistingsfromfile{demonstrations/env-mlb1-end4.tex}{\texttt{env-mlb1.tex} using \cref{lst:env-end4}}{lst:env-mlb1-end4}
+ \cmhlistingsfromfile{demonstrations/env-mlb1-end-f4.tex}{\texttt{env-mlb1.tex} using \cref{lst:env-end-f4}}{lst:env-mlb1-end-f4}
+ \end{cmhtcbraster}
+
+ We note in particular that, by design, for this value of the poly-switches:
+ \begin{enumerate}
+ \item in \cref{lst:env-mlb1-end4} a blank line has been inserted before the \lstinline!\end!
+ statement, even though the \lstinline!\end! statement was already on its own line;
+ \item in \cref{lst:env-mlb1-end-f4} a blank line has been inserted after the \lstinline!\end!
+ statement, even though it already began on its own line.
+ \end{enumerate}
+
+ \paragraph{poly-switches 1, 2, and 3 only add line breaks when necessary}
+ If you ask \texttt{latexindent.pl} to add a line break (possibly with a comment) using a
+ poly-switch value of $1$ (or $2$ or $3$), it will only do so if necessary. For example,
+ if you process the file in \vref{lst:mlb2} using poly-switch values of 1, 2, or 3, it
+ will be left unchanged.
+
+ \begin{minipage}{.45\linewidth}
+ \cmhlistingsfromfile{demonstrations/env-mlb2.tex}{\texttt{env-mlb2.tex}}{lst:mlb2}
+ \end{minipage}
+ \hfill
+ \begin{minipage}{.45\linewidth}
+ \cmhlistingsfromfile{demonstrations/env-mlb3.tex}{\texttt{env-mlb3.tex}}{lst:mlb3}
+ \end{minipage}
+
+ Setting the poly-switches to a value of $4$ instructs \texttt{latexindent.pl} to add a
+ line break even if the \emph{<part of thing>} is already on its own line; see
+ \cref{lst:env-mlb1-beg4,lst:env-mlb1-body4} and
+ \cref{lst:env-mlb1-end4,lst:env-mlb1-end-f4}.
+
+ In contrast, the output from processing the file in \cref{lst:mlb3} will vary depending
+ on the poly-switches used; in \cref{lst:env-mlb3-mod2} you'll see that the comment symbol
+ after the \lstinline!\begin{myenv}! has been moved to the next line, as
+ \texttt{BodyStartsOnOwnLine} is set to \texttt{1}. In \cref{lst:env-mlb3-mod4} you'll see
+ that the comment has been accounted for correctly because \texttt{BodyStartsOnOwnLine}
+ has been set to \texttt{2}, and the comment symbol has \emph{not} been moved to its own
+ line. You're encouraged to experiment with \cref{lst:mlb3} and by setting the other
+ poly-switches considered so far to \texttt{2} in turn.
+
+ \begin{cmhtcbraster}[raster column skip=.1\linewidth]
+ \cmhlistingsfromfile{demonstrations/env-mlb3-mod2.tex}{\texttt{env-mlb3.tex} using \vref{lst:env-mlb2}}{lst:env-mlb3-mod2}
+ \cmhlistingsfromfile{demonstrations/env-mlb3-mod4.tex}{\texttt{env-mlb3.tex} using \vref{lst:env-mlb4}}{lst:env-mlb3-mod4}
+ \end{cmhtcbraster}
+
+ The details of the discussion in this section have concerned \emph{global} poly-switches
+ in the \texttt{environments} field; each switch can also be specified on a
+ \emph{per-name} basis, which would take priority over the global values; with reference
+ to \vref{lst:environments-mlb}, an example is shown for the \texttt{equation*}
+ environment.
+
+ \paragraph{Removing line breaks (poly-switches set to $-1$)}
+ Setting poly-switches to $-1$ tells \texttt{latexindent.pl} to remove line breaks of the
+ \emph{<part of the thing>}, if necessary. We will consider the example code given in
+ \cref{lst:mlb4}, noting in particular the positions of the line break highlighters,
+ $\BeginStartsOnOwnLine$, $\BodyStartsOnOwnLine$, $\EndStartsOnOwnLine$ and
+ $\EndFinishesWithLineBreak$, together with the associated YAML files in
+ \crefrange{lst:env-mlb13}{lst:env-mlb16}. \index{poly-switches!removing line breaks: set
+ to -1}
+
+ \begin{minipage}{.45\linewidth}
+ \begin{cmhlistings}[style=tcblatex,escapeinside={(*@}{@*)}]{\texttt{env-mlb4.tex}}{lst:mlb4}
+before words(*@$\BeginStartsOnOwnLine$@*)
+\begin{myenv}(*@$\BodyStartsOnOwnLine$@*)
+body of myenv(*@$\EndStartsOnOwnLine$@*)
+\end{myenv}(*@$\EndFinishesWithLineBreak$@*)
+after words
+\end{cmhlistings}
+ \end{minipage}%
+ \hfill
+ \begin{minipage}{.51\textwidth}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/env-mlb13.yaml}[MLB-TCB]{\texttt{env-mlb13.yaml}}{lst:env-mlb13}
+
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/env-mlb14.yaml}[MLB-TCB]{\texttt{env-mlb14.yaml}}{lst:env-mlb14}
+
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/env-mlb15.yaml}[MLB-TCB]{\texttt{env-mlb15.yaml}}{lst:env-mlb15}
+
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/env-mlb16.yaml}[MLB-TCB]{\texttt{env-mlb16.yaml}}{lst:env-mlb16}
+ \end{minipage}
+
+ After running the commands \index{switches!-l demonstration} \index{switches!-m
+ demonstration}
+ \begin{commandshell}
+latexindent.pl -m env-mlb4.tex -l env-mlb13.yaml
+latexindent.pl -m env-mlb4.tex -l env-mlb14.yaml
+latexindent.pl -m env-mlb4.tex -l env-mlb15.yaml
+latexindent.pl -m env-mlb4.tex -l env-mlb16.yaml
+\end{commandshell}
+
+ we obtain the respective output in \crefrange{lst:env-mlb4-mod13}{lst:env-mlb4-mod16}.
+
+ \begin{minipage}{.45\linewidth}
+ \cmhlistingsfromfile{demonstrations/env-mlb4-mod13.tex}{\texttt{env-mlb4.tex} using \cref{lst:env-mlb13}}{lst:env-mlb4-mod13}
+ \end{minipage}
+ \hfill
+ \begin{minipage}{.45\linewidth}
+ \cmhlistingsfromfile{demonstrations/env-mlb4-mod14.tex}{\texttt{env-mlb4.tex} using \cref{lst:env-mlb14}}{lst:env-mlb4-mod14}
+ \end{minipage}
+
+ \begin{minipage}{.45\linewidth}
+ \cmhlistingsfromfile{demonstrations/env-mlb4-mod15.tex}{\texttt{env-mlb4.tex} using \cref{lst:env-mlb15}}{lst:env-mlb4-mod15}
+ \end{minipage}
+ \hfill
+ \begin{minipage}{.45\linewidth}
+ \cmhlistingsfromfile{demonstrations/env-mlb4-mod16.tex}{\texttt{env-mlb4.tex} using \cref{lst:env-mlb16}}{lst:env-mlb4-mod16}
+ \end{minipage}
+
+ Notice that in:
+ \begin{itemize}
+ \item \cref{lst:env-mlb4-mod13} the line break denoted by $\BeginStartsOnOwnLine$ in
+ \cref{lst:mlb4} has been removed;
+ \item \cref{lst:env-mlb4-mod14} the line break denoted by $\BodyStartsOnOwnLine$ in
+ \cref{lst:mlb4} has been removed;
+ \item \cref{lst:env-mlb4-mod15} the line break denoted by $\EndStartsOnOwnLine$ in
+ \cref{lst:mlb4} has been removed;
+ \item \cref{lst:env-mlb4-mod16} the line break denoted by $\EndFinishesWithLineBreak$ in
+ \cref{lst:mlb4} has been removed.
+ \end{itemize}
+ We examined each of these cases separately for clarity of explanation, but you can
+ combine all of the YAML settings in \crefrange{lst:env-mlb13}{lst:env-mlb16} into one
+ file; alternatively, you could tell \texttt{latexindent.pl} to load them all by using the
+ following command, for example \index{switches!-l demonstration} \index{switches!-m
+ demonstration}
+ \begin{widepage}
+ \begin{commandshell}
+latexindent.pl -m env-mlb4.tex -l env-mlb13.yaml,env-mlb14.yaml,env-mlb15.yaml,env-mlb16.yaml
+\end{commandshell}
+ \end{widepage}
+ which gives the output in \vref{lst:env-mlb1-tex}.
+
+ \paragraph{About trailing horizontal space}
+ Recall that on \cpageref{yaml:removeTrailingWhitespace} we discussed the YAML field
+ \texttt{removeTrailingWhitespace}, and that it has two (binary) switches to determine if
+ horizontal space should be removed \texttt{beforeProcessing} and
+ \texttt{afterProcessing}. The \texttt{beforeProcessing} is particularly relevant when
+ considering the \texttt{-m} switch; let's consider the file shown in \cref{lst:mlb5},
+ which highlights trailing spaces.
+
+ \begin{cmhtcbraster}
+ \begin{cmhlistings}[style=tcblatex,showspaces=true,escapeinside={(*@}{@*)}]{\texttt{env-mlb5.tex}}{lst:mlb5}
+before words (*@$\BeginStartsOnOwnLine$@*)
+\begin{myenv} (*@$\BodyStartsOnOwnLine$@*)
+body of myenv (*@$\EndStartsOnOwnLine$@*)
+\end{myenv} (*@$\EndFinishesWithLineBreak$@*)
+after words
+\end{cmhlistings}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/removeTWS-before.yaml}[yaml-TCB]{\texttt{removeTWS-before.yaml}}{lst:removeTWS-before}
+ \end{cmhtcbraster}
+
+ The output from the following commands \index{switches!-l demonstration}
+ \index{switches!-m demonstration}
+ \begin{widepage}
+ \begin{commandshell}
+latexindent.pl -m env-mlb5.tex -l env-mlb13.yaml,env-mlb14.yaml,env-mlb15.yaml,env-mlb16.yaml
+latexindent.pl -m env-mlb5.tex -l env-mlb13.yaml,env-mlb14.yaml,env-mlb15.yaml,env-mlb16.yaml,removeTWS-before.yaml
+\end{commandshell}
+ \end{widepage}
+ is shown, respectively, in \cref{lst:env-mlb5-modAll,lst:env-mlb5-modAll-remove-WS}; note
+ that the trailing horizontal white space has been preserved (by default) in
+ \cref{lst:env-mlb5-modAll}, while in \cref{lst:env-mlb5-modAll-remove-WS}, it has been
+ removed using the switch specified in \cref{lst:removeTWS-before}.
+
+ \begin{widepage}
+ \cmhlistingsfromfile[showspaces=true]{demonstrations/env-mlb5-modAll.tex}{\texttt{env-mlb5.tex} using \crefrange{lst:env-mlb4-mod13}{lst:env-mlb4-mod16}}{lst:env-mlb5-modAll}
+
+ \cmhlistingsfromfile[showspaces=true]{demonstrations/env-mlb5-modAll-remove-WS.tex}{\texttt{env-mlb5.tex} using \crefrange{lst:env-mlb4-mod13}{lst:env-mlb4-mod16} \emph{and} \cref{lst:removeTWS-before}}{lst:env-mlb5-modAll-remove-WS}
+ \end{widepage}
+
+ \paragraph{poly-switch line break removal and blank lines}
+ Now let's consider the file in \cref{lst:mlb6}, which contains blank lines.
+ \index{poly-switches!blank lines}
+
+ \begin{cmhtcbraster}
+ \begin{cmhlistings}[style=tcblatex,escapeinside={(*@}{@*)}]{\texttt{env-mlb6.tex}}{lst:mlb6}
+before words(*@$\BeginStartsOnOwnLine$@*)
+
+
+\begin{myenv}(*@$\BodyStartsOnOwnLine$@*)
+
+
+body of myenv(*@$\EndStartsOnOwnLine$@*)
+
+
+\end{myenv}(*@$\EndFinishesWithLineBreak$@*)
+
+after words
+\end{cmhlistings}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/UnpreserveBlankLines.yaml}[MLB-TCB]{\texttt{UnpreserveBlankLines.yaml}}{lst:UnpreserveBlankLines}
+ \end{cmhtcbraster}
+
+ Upon running the following commands \index{switches!-l demonstration} \index{switches!-m
+ demonstration}
+ \begin{widepage}
+ \begin{commandshell}
+latexindent.pl -m env-mlb6.tex -l env-mlb13.yaml,env-mlb14.yaml,env-mlb15.yaml,env-mlb16.yaml
+latexindent.pl -m env-mlb6.tex -l env-mlb13.yaml,env-mlb14.yaml,env-mlb15.yaml,env-mlb16.yaml,UnpreserveBlankLines.yaml
+\end{commandshell}
+ \end{widepage}
+ we receive the respective outputs in
+ \cref{lst:env-mlb6-modAll,lst:env-mlb6-modAll-un-Preserve-Blank-Lines}. In
+ \cref{lst:env-mlb6-modAll} we see that the multiple blank lines have each been condensed
+ into one blank line, but that blank lines have \emph{not} been removed by the
+ poly-switches -- this is because, by default, \texttt{preserveBlankLines} is set to
+ \texttt{1}. By contrast, in \cref{lst:env-mlb6-modAll-un-Preserve-Blank-Lines}, we have
+ allowed the poly-switches to remove blank lines because, in
+ \cref{lst:UnpreserveBlankLines}, we have set \texttt{preserveBlankLines} to \texttt{0}.
+
+ \begin{cmhtcbraster}[ raster left skip=-3.5cm,
+ raster right skip=-2cm,
+ raster force size=false,
+ raster column 1/.style={add to width=-.2\textwidth},
+ raster column 2/.style={add to width=.2\textwidth},
+ raster column skip=.06\linewidth]
+ \cmhlistingsfromfile{demonstrations/env-mlb6-modAll.tex}{\texttt{env-mlb6.tex} using \crefrange{lst:env-mlb4-mod13}{lst:env-mlb4-mod16}}{lst:env-mlb6-modAll}
+ \cmhlistingsfromfile{demonstrations/env-mlb6-modAll-un-Preserve-Blank-Lines.tex}{\texttt{env-mlb6.tex} using \crefrange{lst:env-mlb4-mod13}{lst:env-mlb4-mod16} \emph{and} \cref{lst:UnpreserveBlankLines}}{lst:env-mlb6-modAll-un-Preserve-Blank-Lines}
+ \end{cmhtcbraster}
+
+ We can explore this further using the blank-line poly-switch value of $3$; let's use the
+ file given in \cref{lst:env-mlb7-tex}.
+
+ \cmhlistingsfromfile{demonstrations/env-mlb7.tex}{\texttt{env-mlb7.tex}}{lst:env-mlb7-tex}
+
+ Upon running the following commands \index{switches!-l demonstration} \index{switches!-m
+ demonstration}
+ \begin{commandshell}
+latexindent.pl -m env-mlb7.tex -l env-mlb12.yaml,env-mlb13.yaml
+latexindent.pl -m env-mlb7.tex -l env-mlb13.yaml,env-mlb14.yaml,UnpreserveBlankLines.yaml
+\end{commandshell}
+ we receive the outputs given in \cref{lst:env-mlb7-preserve,lst:env-mlb7-no-preserve}.
+
+ \cmhlistingsfromfile{demonstrations/env-mlb7-preserve.tex}{\texttt{env-mlb7-preserve.tex}}{lst:env-mlb7-preserve}
+ \cmhlistingsfromfile{demonstrations/env-mlb7-no-preserve.tex}{\texttt{env-mlb7-no-preserve.tex}}{lst:env-mlb7-no-preserve}
+
+ Notice that in:
+ \begin{itemize}
+ \item \cref{lst:env-mlb7-preserve} that \lstinline!\end{one}! has added a blank line,
+ because of the value of \texttt{EndFinishesWithLineBreak} in \vref{lst:env-mlb12}, and
+ even though the line break ahead of \lstinline!\begin{two}! should have been removed
+ (because of \texttt{BeginStartsOnOwnLine} in \vref{lst:env-mlb13}), the blank line has
+ been preserved by default;
+ \item \cref{lst:env-mlb7-no-preserve}, by contrast, has had the additional line-break removed,
+ because of the settings in \cref{lst:UnpreserveBlankLines}.
+ \end{itemize}
+
+\subsubsection{Poly-switches for double back slash}\label{subsec:dbs}
+ With reference to \texttt{lookForAlignDelims} (see \vref{lst:aligndelims:basic})
+ \announce{2019-07-13}{poly-switch for double back slash} you can specify poly-switches to
+ dictate the line-break behaviour of double back slashes in environments
+ (\vref{lst:tabularafter:basic}), commands (\vref{lst:matrixafter}), or special code
+ blocks (\vref{lst:specialafter}). Note that for these poly-switches to take effect, the
+ name of the code block must necessarily be specified within \texttt{lookForAlignDelims}
+ (\vref{lst:aligndelims:basic}); we will demonstrate this in what follows.
+ \index{delimiters!poly-switches for double back slash} \index{modifying linebreaks!
+ surrounding double back slash} \index{poly-switches!for double back slash (delimiters)}%
+
+ Consider the code given in \cref{lst:dbs-demo}.
+ \begin{cmhlistings}[style=tcblatex,escapeinside={(*@}{@*)}]{\texttt{tabular3.tex}}{lst:dbs-demo}
+\begin{tabular}{cc}
+ 1 & 2 (*@$\ElseStartsOnOwnLine$@*)\\(*@$\ElseFinishesWithLineBreak$@*) 3 & 4 (*@$\ElseStartsOnOwnLine$@*)\\(*@$\ElseFinishesWithLineBreak$@*)
+\end{tabular}
+\end{cmhlistings}
+ Referencing \cref{lst:dbs-demo}:
+ \begin{itemize}
+ \item \texttt{DBS} stands for \emph{double back slash};
+ \item line breaks ahead of the double back slash are annotated by $\ElseStartsOnOwnLine$, and
+ are controlled by \texttt{DBSStartsOnOwnLine};
+ \item line breaks after the double back slash are annotated by $\ElseFinishesWithLineBreak$,
+ and are controlled by \texttt{DBSFinishesWithLineBreak}.
+ \end{itemize}
+
+ Let's explore each of these in turn.
+
+ \paragraph{Double back slash starts on own line}
+ We explore \texttt{DBSStartsOnOwnLine} ($\ElseStartsOnOwnLine$ in \cref{lst:dbs-demo});
+ starting with the code in \cref{lst:dbs-demo}, together with the YAML files given in
+ \cref{lst:DBS1} and \cref{lst:DBS2} and running the following commands \index{switches!-l
+ demonstration} \index{switches!-m demonstration}
+ \begin{commandshell}
+latexindent.pl -m tabular3.tex -l DBS1.yaml
+latexindent.pl -m tabular3.tex -l DBS2.yaml
+\end{commandshell}
+ then we receive the respective output given in \cref{lst:tabular3-DBS1} and
+ \cref{lst:tabular3-DBS2}.
+
+ \begin{cmhtcbraster}[raster column skip=.01\linewidth]
+ \cmhlistingsfromfile{demonstrations/tabular3-mod1.tex}{\texttt{tabular3.tex} using \cref{lst:DBS1}}{lst:tabular3-DBS1}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/DBS1.yaml}[MLB-TCB]{\texttt{DBS1.yaml}}{lst:DBS1}
+ \end{cmhtcbraster}
+
+ \begin{cmhtcbraster}[raster column skip=.01\linewidth]
+ \cmhlistingsfromfile{demonstrations/tabular3-mod2.tex}{\texttt{tabular3.tex} using \cref{lst:DBS2}}{lst:tabular3-DBS2}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/DBS2.yaml}[MLB-TCB]{\texttt{DBS2.yaml}}{lst:DBS2}
+ \end{cmhtcbraster}
+
+ We note that
+ \begin{itemize}
+ \item \cref{lst:DBS1} specifies \texttt{DBSStartsOnOwnLine} for
+ \emph{every} environment (that is within \texttt{lookForAlignDelims},
+ \vref{lst:aligndelims:advanced});
+ the double back slashes from \cref{lst:dbs-demo} have been moved to their own line in
+ \cref{lst:tabular3-DBS1};
+ \item \cref{lst:DBS2} specifies \texttt{DBSStartsOnOwnLine} on a
+ \emph{per-name} basis for \texttt{tabular} (that is within \texttt{lookForAlignDelims},
+ \vref{lst:aligndelims:advanced});
+ the double back slashes from \cref{lst:dbs-demo} have been moved to their own line in
+ \cref{lst:tabular3-DBS2}, having added comment symbols before moving them.
+ \end{itemize}
+
+ \paragraph{Double back slash finishes with line break}
+ Let's now explore \texttt{DBSFinishesWithLineBreak} ($\ElseFinishesWithLineBreak$ in
+ \cref{lst:dbs-demo}); starting with the code in \cref{lst:dbs-demo}, together with the
+ YAML files given in \cref{lst:DBS3} and \cref{lst:DBS4} and running the following
+ commands \index{poly-switches!for double back slash (delimiters)} \index{switches!-l
+ demonstration} \index{switches!-m demonstration}
+ \begin{commandshell}
+latexindent.pl -m tabular3.tex -l DBS3.yaml
+latexindent.pl -m tabular3.tex -l DBS4.yaml
+\end{commandshell}
+ then we receive the respective output given in \cref{lst:tabular3-DBS3} and
+ \cref{lst:tabular3-DBS4}.
+
+ \begin{cmhtcbraster}[raster column skip=.01\linewidth]
+ \cmhlistingsfromfile{demonstrations/tabular3-mod3.tex}{\texttt{tabular3.tex} using \cref{lst:DBS3}}{lst:tabular3-DBS3}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/DBS3.yaml}[MLB-TCB]{\texttt{DBS3.yaml}}{lst:DBS3}
+ \end{cmhtcbraster}
+
+ \begin{cmhtcbraster}[raster column skip=.01\linewidth]
+ \cmhlistingsfromfile{demonstrations/tabular3-mod4.tex}{\texttt{tabular3.tex} using \cref{lst:DBS4}}{lst:tabular3-DBS4}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/DBS4.yaml}[MLB-TCB]{\texttt{DBS4.yaml}}{lst:DBS4}
+ \end{cmhtcbraster}
+
+ We note that
+ \begin{itemize}
+ \item \cref{lst:DBS3} specifies \texttt{DBSFinishesWithLineBreak} for
+ \emph{every} environment (that is within \texttt{lookForAlignDelims},
+ \vref{lst:aligndelims:advanced});
+ the code following the double back slashes from \cref{lst:dbs-demo} has been moved to
+ their own line in \cref{lst:tabular3-DBS3};
+ \item \cref{lst:DBS4} specifies \texttt{DBSFinishesWithLineBreak} on a
+ \emph{per-name} basis for \texttt{tabular} (that is within \texttt{lookForAlignDelims},
+ \vref{lst:aligndelims:advanced});
+ the first double back slashes from \cref{lst:dbs-demo} have moved code following them to
+ their own line in \cref{lst:tabular3-DBS4}, having added comment symbols before moving
+ them; the final double back slashes have \emph{not} added a line break as they are at the
+ end of the body within the code block.
+ \end{itemize}
+
+ \paragraph{Double back slash poly-switches for specialBeginEnd}
+ Let's explore the double back slash poly-switches for code blocks within
+ \texttt{specialBeginEnd} code blocks (\vref{lst:specialBeginEnd}); we begin with the code
+ within \cref{lst:special4}. \index{specialBeginEnd!double backslash poly-switch
+ demonstration} \index{poly-switches!double backslash} \index{poly-switches!for double
+ back slash (delimiters)} \index{specialBeginEnd!lookForAlignDelims} \index{delimiters}
+ \index{linebreaks!summary of poly-switches}
+
+ \cmhlistingsfromfile{demonstrations/special4.tex}{\texttt{special4.tex}}{lst:special4}
+
+ Upon using the YAML settings in \cref{lst:DBS5}, and running the command
+ \index{switches!-l demonstration} \index{switches!-m demonstration}
+ \begin{commandshell}
+latexindent.pl -m special4.tex -l DBS5.yaml
+\end{commandshell}
+ then we receive the output given in \cref{lst:special4-DBS5}. \index{delimiters!with
+ specialBeginEnd and the -m switch}
+
+ \begin{cmhtcbraster}[
+ raster force size=false,
+ raster column 1/.style={add to width=-.1\textwidth},
+ raster column skip=.06\linewidth]
+ \cmhlistingsfromfile{demonstrations/special4-mod5.tex}{\texttt{special4.tex} using \cref{lst:DBS5}}{lst:special4-DBS5}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/DBS5.yaml}[MLB-TCB,width=0.6\textwidth]{\texttt{DBS5.yaml}}{lst:DBS5}
+ \end{cmhtcbraster}
+
+ There are a few things to note:
+ \begin{itemize}
+ \item in \cref{lst:DBS5} we have specified \texttt{cmhMath} within \texttt{lookForAlignDelims};
+ without this, the double back slash poly-switches would be ignored for this code block;
+ \item the \texttt{DBSFinishesWithLineBreak} poly-switch has controlled the line breaks
+ following the double back slashes;
+ \item the \texttt{SpecialEndStartsOnOwnLine} poly-switch has controlled the addition of a
+ comment symbol, followed by a line break, as it is set to a value of 2.
+ \end{itemize}
+
+ \paragraph{Double back slash poly-switches for optional and mandatory arguments}
+ For clarity, we provide a demonstration of controlling the double back slash
+ poly-switches for optional and mandatory arguments. We begin with the code in
+ \cref{lst:mycommand2}. \index{poly-switches!for double back slash (delimiters)}
+
+ \cmhlistingsfromfile{demonstrations/mycommand2.tex}{\texttt{mycommand2.tex}}{lst:mycommand2}
+
+ Upon using the YAML settings in \cref{lst:DBS6,lst:DBS7}, and running the command
+ \index{switches!-l demonstration} \index{switches!-m demonstration}
+ \begin{commandshell}
+latexindent.pl -m mycommand2.tex -l DBS6.yaml
+latexindent.pl -m mycommand2.tex -l DBS7.yaml
+\end{commandshell}
+ then we receive the output given in \cref{lst:mycommand2-DBS6,lst:mycommand2-DBS7}.
+
+ \begin{cmhtcbraster}[
+ raster force size=false,
+ raster column 1/.style={add to width=-.1\textwidth},
+ raster column skip=.03\linewidth]
+ \cmhlistingsfromfile{demonstrations/mycommand2-mod6.tex}{\texttt{mycommand2.tex} using \cref{lst:DBS6}}{lst:mycommand2-DBS6}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/DBS6.yaml}[MLB-TCB,width=0.6\textwidth]{\texttt{DBS6.yaml}}{lst:DBS6}
+ \end{cmhtcbraster}
+
+ \begin{cmhtcbraster}[
+ raster force size=false,
+ raster column 1/.style={add to width=-.1\textwidth},
+ raster column skip=.03\linewidth]
+ \cmhlistingsfromfile{demonstrations/mycommand2-mod7.tex}{\texttt{mycommand2.tex} using \cref{lst:DBS7}}{lst:mycommand2-DBS7}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/DBS7.yaml}[MLB-TCB,width=0.6\textwidth]{\texttt{DBS7.yaml}}{lst:DBS7}
+ \end{cmhtcbraster}
+
+ \paragraph{Double back slash optional square brackets}
+ The pattern matching for the double back slash will also, optionally, allow trailing
+ square brackets that contain a measurement of vertical spacing, for example
+ \lstinline!\\[3pt]!. \index{poly-switches!for double back slash (delimiters)}
+
+ For example, beginning with the code in \cref{lst:pmatrix3}
+
+ \cmhlistingsfromfile{demonstrations/pmatrix3.tex}{\texttt{pmatrix3.tex}}{lst:pmatrix3}
+
+ and running the following command, using \cref{lst:DBS3}, \index{switches!-l
+ demonstration} \index{switches!-m demonstration}
+ \begin{commandshell}
+latexindent.pl -m pmatrix3.tex -l DBS3.yaml
+\end{commandshell}
+ then we receive the output given in \cref{lst:pmatrix3-DBS3}.
+
+ \cmhlistingsfromfile{demonstrations/pmatrix3-mod3.tex}{\texttt{pmatrix3.tex} using \cref{lst:DBS3}}{lst:pmatrix3-DBS3}
+
+ You can customise the pattern for the double back slash by exploring the \emph{fine
+ tuning} field detailed in \vref{lst:fineTuning}.
+
+\subsubsection{Poly-switches for other code blocks}
+ Rather than repeat the examples shown for the environment code blocks (in
+ \vref{sec:modifylinebreaks-environments}), we choose to detail the poly-switches for all
+ other code blocks in \cref{tab:poly-switch-mapping}; note that each and every one of
+ these poly-switches is \emph{off by default}, i.e, set to \texttt{0}.
+
+ Note also that, by design, line breaks involving, \texttt{filecontents} and
+ `comment-marked' code blocks (\vref{lst:alignmentmarkup}) can \emph{not} be modified
+ using \texttt{latexindent.pl}. \announce{2019-05-05}*{verbatim poly-switch} However,
+ there are two poly-switches available for \texttt{verbatim} code blocks: environments
+ (\vref{lst:verbatimEnvironments}), commands (\vref{lst:verbatimCommands}) and
+ \texttt{specialBeginEnd} (\vref{lst:special-verb1-yaml}).
+ \index{specialBeginEnd!poly-switch summary} \index{verbatim!poly-switch summary}
+ \index{poly-switches!summary of all poly-switches}%
+
+ \clearpage
+ \begin{longtable}{llll}
+ \caption{Poly-switch mappings for all code-block types}\label{tab:poly-switch-mapping} \\
+ \toprule
+ Code block & Sample & \multicolumn{2}{c}{Poly-switch mapping} \\
+ \midrule
+ environment & \verb!before words!$\BeginStartsOnOwnLine$ & $\BeginStartsOnOwnLine$ & BeginStartsOnOwnLine \\
+ & \verb!\begin{myenv}!$\BodyStartsOnOwnLine$ & $\BodyStartsOnOwnLine$ & BodyStartsOnOwnLine \\
+ & \verb!body of myenv!$\EndStartsOnOwnLine$ & $\EndStartsOnOwnLine$ & EndStartsOnOwnLine \\
+ & \verb!\end{myenv}!$\EndFinishesWithLineBreak$ & $\EndFinishesWithLineBreak$ & EndFinishesWithLineBreak \\
+ & \verb!after words! & & \\
+ \cmidrule{2-4}
+ ifelsefi & \verb!before words!$\BeginStartsOnOwnLine$ & $\BeginStartsOnOwnLine$ & IfStartsOnOwnLine \\
+ & \verb!\if...!$\BodyStartsOnOwnLine$ & $\BodyStartsOnOwnLine$ & BodyStartsOnOwnLine \\
+ & \verb!body of if/or statement!$\OrStartsOnOwnLine$ & $\OrStartsOnOwnLine$ & OrStartsOnOwnLine %
+ \announce{2018-04-27}{new ifElseFi code block poly-switches} \\
+ & \verb!\or!$\OrFinishesWithLineBreak$ & $\OrFinishesWithLineBreak$ & OrFinishesWithLineBreak \\
+ & \verb!body of if/or statement!$\ElseStartsOnOwnLine$ & $\ElseStartsOnOwnLine$ & ElseStartsOnOwnLine \\
+ & \verb!\else!$\ElseFinishesWithLineBreak$ & $\ElseFinishesWithLineBreak$ & ElseFinishesWithLineBreak \\
+ & \verb!body of else statement!$\EndStartsOnOwnLine$ & $\EndStartsOnOwnLine$ & FiStartsOnOwnLine \\
+ & \verb!\fi!$\EndFinishesWithLineBreak$ & $\EndFinishesWithLineBreak$ & FiFinishesWithLineBreak \\
+ & \verb!after words! & & \\
+ \cmidrule{2-4}
+ optionalArguments & \verb!...!$\BeginStartsOnOwnLine$ & $\BeginStartsOnOwnLine$ & LSqBStartsOnOwnLine\footnote{LSqB stands for Left Square Bracket} \\
+ & \verb![!$\BodyStartsOnOwnLine$ & $\BodyStartsOnOwnLine$ & OptArgBodyStartsOnOwnLine \\
+ \announce{2019-07-13}{new comma-related poly-switches} & \verb!value before comma!$\ElseStartsOnOwnLine$, & $\ElseStartsOnOwnLine$ & CommaStartsOnOwnLine \\
+ & $\ElseFinishesWithLineBreak$ & $\ElseFinishesWithLineBreak$ & CommaFinishesWithLineBreak \\
+ & \verb!end of body of opt arg!$\EndStartsOnOwnLine$ & $\EndStartsOnOwnLine$ & RSqBStartsOnOwnLine \\
+ & \verb!]!$\EndFinishesWithLineBreak$ & $\EndFinishesWithLineBreak$ & RSqBFinishesWithLineBreak \\
+ & \verb!...! & & \\
+ \cmidrule{2-4}
+ mandatoryArguments & \verb!...!$\BeginStartsOnOwnLine$ & $\BeginStartsOnOwnLine$ & LCuBStartsOnOwnLine\footnote{LCuB stands for Left Curly Brace} \\
+ & \verb!{!$\BodyStartsOnOwnLine$ & $\BodyStartsOnOwnLine$ & MandArgBodyStartsOnOwnLine \\
+ \announce{2019-07-13}{new comma-related poly-switches} & \verb!value before comma!$\ElseStartsOnOwnLine$, & $\ElseStartsOnOwnLine$ & CommaStartsOnOwnLine \\
+ & $\ElseFinishesWithLineBreak$ & $\ElseFinishesWithLineBreak$ & CommaFinishesWithLineBreak \\
+ & \verb!end of body of mand arg!$\EndStartsOnOwnLine$ & $\EndStartsOnOwnLine$ & RCuBStartsOnOwnLine \\
+ & \verb!}!$\EndFinishesWithLineBreak$ & $\EndFinishesWithLineBreak$ & RCuBFinishesWithLineBreak \\
+ & \verb!...! & & \\
+ \cmidrule{2-4}
+ commands & \verb!before words!$\BeginStartsOnOwnLine$ & $\BeginStartsOnOwnLine$ & CommandStartsOnOwnLine \\
+ & \verb!\mycommand!$\BodyStartsOnOwnLine$ & $\BodyStartsOnOwnLine$ & CommandNameFinishesWithLineBreak \\
+ & $\langle$\itshape{arguments}$\rangle$ & & \\
+ \cmidrule{2-4}
+ namedGroupingBracesBrackets & before words$\BeginStartsOnOwnLine$ & $\BeginStartsOnOwnLine$ & NameStartsOnOwnLine \\
+ & myname$\BodyStartsOnOwnLine$ & $\BodyStartsOnOwnLine$ & NameFinishesWithLineBreak \\
+ & $\langle$\itshape{braces/brackets}$\rangle$ & & \\
+ \cmidrule{2-4}
+ keyEqualsValuesBraces\newline Brackets & before words$\BeginStartsOnOwnLine$ & $\BeginStartsOnOwnLine$ & KeyStartsOnOwnLine \\
+ & key$\EqualsStartsOnOwnLine$=$\BodyStartsOnOwnLine$ & $\EqualsStartsOnOwnLine$ & EqualsStartsOnOwnLine \\
+ & $\langle$\itshape{braces/brackets}$\rangle$ & $\BodyStartsOnOwnLine$ & EqualsFinishesWithLineBreak \\
+ \cmidrule{2-4}
+ items & before words$\BeginStartsOnOwnLine$ & $\BeginStartsOnOwnLine$ & ItemStartsOnOwnLine \\
+ & \verb!\item!$\BodyStartsOnOwnLine$ & $\BodyStartsOnOwnLine$ & ItemFinishesWithLineBreak \\
+ & \verb!...! & & \\
+ \cmidrule{2-4}
+ specialBeginEnd & before words$\BeginStartsOnOwnLine$ & $\BeginStartsOnOwnLine$ & SpecialBeginStartsOnOwnLine \\
+ & \verb!\[!$\BodyStartsOnOwnLine$ & $\BodyStartsOnOwnLine$ & SpecialBodyStartsOnOwnLine \\
+ & \verb!body of special/middle!$\ElseStartsOnOwnLine$ & $\ElseStartsOnOwnLine$ & SpecialMiddleStartsOnOwnLine %
+ \announce{2018-04-27}{new special code block poly-switches} \\
+ & \verb!\middle!$\ElseFinishesWithLineBreak$ & $\ElseFinishesWithLineBreak$ & SpecialMiddleFinishesWithLineBreak \\
+ & body of special/middle $\EndStartsOnOwnLine$ & $\EndStartsOnOwnLine$ & SpecialEndStartsOnOwnLine \\
+ & \verb!\]!$\EndFinishesWithLineBreak$ & $\EndFinishesWithLineBreak$ & SpecialEndFinishesWithLineBreak \\
+ & after words & & \\
+ \cmidrule{2-4}
+ verbatim & before words$\BeginStartsOnOwnLine$\verb!\begin{verbatim}! & $\BeginStartsOnOwnLine$ & VerbatimBeginStartsOnOwnLine \\
+ \announce{2019-05-05}{verbatim poly-switches} & body of verbatim \verb!\end{verbatim}!$\EndFinishesWithLineBreak$ & $\EndFinishesWithLineBreak$ & VerbatimEndFinishesWithLineBreak \\
+ & after words & & \\
+ \bottomrule
+ \end{longtable}
+\subsubsection{Partnering BodyStartsOnOwnLine with argument-based poly-switches}
+ Some poly-switches need to be partnered together; in particular, when line breaks
+ involving the \emph{first} argument of a code block need to be accounted for using both
+ \texttt{BodyStartsOnOwnLine} (or its equivalent, see \vref{tab:poly-switch-mapping}) and
+ \texttt{LCuBStartsOnOwnLine} for mandatory arguments, and \texttt{LSqBStartsOnOwnLine}
+ for optional arguments. \index{poly-switches!conflicting partnering}
+
+ Let's begin with the code in \cref{lst:mycommand1} and the YAML settings in
+ \cref{lst:mycom-mlb1}; with reference to \vref{tab:poly-switch-mapping}, the key
+ \texttt{CommandNameFinishesWithLineBreak} is an alias for \texttt{BodyStartsOnOwnLine}.
+
+ \cmhlistingsfromfile{demonstrations/mycommand1.tex}{\texttt{mycommand1.tex}}{lst:mycommand1}
+
+ Upon running the command \index{switches!-l demonstration} \index{switches!-m
+ demonstration}
+ \begin{commandshell}
+latexindent.pl -m -l=mycom-mlb1.yaml mycommand1.tex
+\end{commandshell}
+ we obtain \cref{lst:mycommand1-mlb1}; note that the \emph{second} mandatory argument
+ beginning brace \lstinline!{! has had its leading line break removed, but that the
+ \emph{first} brace has not.
+
+ \begin{cmhtcbraster}[
+ raster force size=false,
+ raster column 1/.style={add to width=-1cm},
+ ]
+ \cmhlistingsfromfile{demonstrations/mycommand1-mlb1.tex}{\texttt{mycommand1.tex} using \cref{lst:mycom-mlb1}}{lst:mycommand1-mlb1}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/mycom-mlb1.yaml}[MLB-TCB,width=.6\textwidth]{\texttt{mycom-mlb1.yaml}}{lst:mycom-mlb1}
+ \end{cmhtcbraster}
+
+ Now let's change the YAML file so that it is as in \cref{lst:mycom-mlb2}; upon running
+ the analogous command to that given above, we obtain \cref{lst:mycommand1-mlb2}; both
+ beginning braces \lstinline!{! have had their leading line breaks removed.
+
+ \begin{cmhtcbraster}[
+ raster force size=false,
+ raster column 1/.style={add to width=-1cm},
+ ]
+ \cmhlistingsfromfile{demonstrations/mycommand1-mlb2.tex}{\texttt{mycommand1.tex} using \cref{lst:mycom-mlb2}}{lst:mycommand1-mlb2}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/mycom-mlb2.yaml}[MLB-TCB,width=.6\textwidth]{\texttt{mycom-mlb2.yaml}}{lst:mycom-mlb2}
+ \end{cmhtcbraster}
+
+ Now let's change the YAML file so that it is as in \cref{lst:mycom-mlb3}; upon running
+ the analogous command to that given above, we obtain \cref{lst:mycommand1-mlb3}.
+
+ \begin{cmhtcbraster}[
+ raster force size=false,
+ raster column 1/.style={add to width=-1cm},
+ ]
+ \cmhlistingsfromfile{demonstrations/mycommand1-mlb3.tex}{\texttt{mycommand1.tex} using \cref{lst:mycom-mlb3}}{lst:mycommand1-mlb3}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/mycom-mlb3.yaml}[MLB-TCB,width=.6\textwidth]{\texttt{mycom-mlb3.yaml}}{lst:mycom-mlb3}
+ \end{cmhtcbraster}
+
+\subsubsection{Conflicting poly-switches: sequential code blocks}
+ It is very easy to have conflicting poly-switches; if we use the example from
+ \vref{lst:mycommand1}, and consider the YAML settings given in \cref{lst:mycom-mlb4}. The
+ output from running \index{poly-switches!conflicting switches} \index{switches!-l
+ demonstration} \index{switches!-m demonstration}
+ \begin{commandshell}
+latexindent.pl -m -l=mycom-mlb4.yaml mycommand1.tex
+\end{commandshell}
+ is given in \cref{lst:mycom-mlb4}.
+
+ \begin{cmhtcbraster}
+ \cmhlistingsfromfile{demonstrations/mycommand1-mlb4.tex}{\texttt{mycommand1.tex} using \cref{lst:mycom-mlb4}}{lst:mycommand1-mlb4}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/mycom-mlb4.yaml}[MLB-TCB,width=\linewidth]{\texttt{mycom-mlb4.yaml}}{lst:mycom-mlb4}
+ \end{cmhtcbraster}
+
+ Studying \cref{lst:mycom-mlb4}, we see that the two poly-switches are at opposition with
+ one another:
+ \begin{itemize}
+ \item on the one hand, \texttt{LCuBStartsOnOwnLine} should \emph{not} start on its own line (as
+ poly-switch is set to $-1$);
+ \item on the other hand, \texttt{RCuBFinishesWithLineBreak} \emph{should} finish with a line
+ break.
+ \end{itemize}
+ So, which should win the conflict? As demonstrated in \cref{lst:mycommand1-mlb4}, it is
+ clear that \texttt{LCuBStartsOnOwnLine} won this conflict, and the reason is that
+ \emph{the second argument was processed after the first} -- in general, the most
+ recently-processed code block and associated poly-switch takes priority.
+
+ We can explore this further by considering the YAML settings in \cref{lst:mycom-mlb5};
+ upon running the command \index{switches!-l demonstration} \index{switches!-m
+ demonstration}
+ \begin{commandshell}
+latexindent.pl -m -l=mycom-mlb5.yaml mycommand1.tex
+\end{commandshell}
+ we obtain the output given in \cref{lst:mycommand1-mlb5}.
+
+ \begin{cmhtcbraster}[raster column skip=.1\linewidth]
+ \cmhlistingsfromfile{demonstrations/mycommand1-mlb5.tex}{\texttt{mycommand1.tex} using \cref{lst:mycom-mlb5}}{lst:mycommand1-mlb5}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/mycom-mlb5.yaml}[MLB-TCB,width=\linewidth]{\texttt{mycom-mlb5.yaml}}{lst:mycom-mlb5}
+ \end{cmhtcbraster}
+
+ As previously, the most-recently-processed code block takes priority -- as before, the
+ second (i.e, \emph{last}) argument. Exploring this further, we consider the YAML settings
+ in \cref{lst:mycom-mlb6}, which give associated output in \cref{lst:mycommand1-mlb6}.
+
+ \begin{cmhtcbraster}[raster column skip=.1\linewidth]
+ \cmhlistingsfromfile{demonstrations/mycommand1-mlb6.tex}{\texttt{mycommand1.tex} using \cref{lst:mycom-mlb6}}{lst:mycommand1-mlb6}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/mycom-mlb6.yaml}[MLB-TCB,width=\linewidth]{\texttt{mycom-mlb6.yaml}}{lst:mycom-mlb6}
+ \end{cmhtcbraster}
+
+ Note that a \lstinline!%! \emph{has} been added to the trailing first \lstinline!}!; this
+ is because:
+ \begin{itemize}
+ \item while processing the \emph{first} argument, the trailing line break has been removed
+ (\texttt{RCuBFinishesWithLineBreak} set to $-1$);
+ \item while processing the \emph{second} argument, \texttt{latexindent.pl} finds that it does
+ \emph{not} begin on its own line, and so because \texttt{LCuBStartsOnOwnLine} is set to
+ $2$, it adds a comment, followed by a line break.
+ \end{itemize}
+
+\subsubsection{Conflicting poly-switches: nested code blocks}
+ Now let's consider an example when nested code blocks have conflicting poly-switches;
+ we'll use the code in \cref{lst:nested-env}, noting that it contains nested environments.
+ \index{poly-switches!conflicting switches}
+
+ \cmhlistingsfromfile{demonstrations/nested-env.tex}{\texttt{nested-env.tex}}{lst:nested-env}
+
+ Let's use the YAML settings given in \cref{lst:nested-env-mlb1-yaml}, which upon running
+ the command \index{switches!-l demonstration} \index{switches!-m demonstration}
+ \begin{commandshell}
+latexindent.pl -m -l=nested-env-mlb1.yaml nested-env.tex
+\end{commandshell}
+ gives the output in \cref{lst:nested-env-mlb1}.
+
+ \begin{cmhtcbraster}[raster column skip=.05\linewidth]
+ \cmhlistingsfromfile{demonstrations/nested-env-mlb1.tex}{\texttt{nested-env.tex} using \cref{lst:nested-env-mlb1-yaml}}{lst:nested-env-mlb1}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/nested-env-mlb1.yaml}[MLB-TCB,width=\linewidth]{\texttt{nested-env-mlb1.yaml}}{lst:nested-env-mlb1-yaml}
+ \end{cmhtcbraster}
+
+ In \cref{lst:nested-env-mlb1}, let's first of all note that both environments have
+ received the appropriate (default) indentation; secondly, note that the poly-switch
+ \texttt{EndStartsOnOwnLine} appears to have won the conflict, as \lstinline!\end{one}!
+ has had its leading line break removed.
+
+ To understand it, let's talk about the three basic phases \label{page:phases}of
+ \texttt{latexindent.pl}:
+ \begin{enumerate}
+ \item Phase 1: packing, in which code blocks are replaced with unique ids, working from
+ \emph{the inside to the outside}, and then sequentially -- for example, in
+ \cref{lst:nested-env}, the \texttt{two} environment is found \emph{before} the
+ \texttt{one} environment; if the -m switch is active, then during this phase:
+ \begin{itemize}
+ \item line breaks at the beginning of the \texttt{body} can be added (if
+ \texttt{BodyStartsOnOwnLine} is $1$ or $2$) or removed (if \texttt{BodyStartsOnOwnLine}
+ is $-1$);
+ \item line breaks at the end of the body can be added (if \texttt{EndStartsOnOwnLine} is $1$ or
+ $2$) or removed (if \texttt{EndStartsOnOwnLine} is $-1$);
+ \item line breaks after the end statement can be added (if \texttt{EndFinishesWithLineBreak} is
+ $1$ or $2$).
+ \end{itemize}
+ \item Phase 2: indentation, in which white space is added to the begin, body, and end
+ statements;
+ \item Phase 3: unpacking, in which unique ids are replaced by their \emph{indented} code
+ blocks; if the -m switch is active, then during this phase,
+ \begin{itemize}
+ \item line breaks before \texttt{begin} statements can be added or removed (depending upon
+ \texttt{BeginStartsOnOwnLine});
+ \item line breaks after \emph{end} statements can be removed but \emph{NOT} added (see
+ \texttt{EndFinishesWithLineBreak}).
+ \end{itemize}
+ \end{enumerate}
+
+ With reference to \cref{lst:nested-env-mlb1}, this means that during Phase 1:
+ \begin{itemize}
+ \item the \texttt{two} environment is found first, and the line break ahead of the
+ \lstinline!\end{two}! statement is removed because \texttt{EndStartsOnOwnLine} is set to
+ $-1$. Importantly, because, \emph{at this stage}, \lstinline!\end{two}! \emph{does}
+ finish with a line break, \texttt{EndFinishesWithLineBreak} causes no action.
+ \item next, the \texttt{one} environment is found; the line break ahead of
+ \lstinline!\end{one}! is removed because \texttt{EndStartsOnOwnLine} is set to $-1$.
+ \end{itemize}
+ The indentation is done in Phase 2; in Phase 3 \emph{there is no option to add a line
+ break after the \lstinline!end! statements}. We can justify this by remembering that
+ during Phase 3, the \texttt{one} environment will be found and processed first, followed
+ by the \texttt{two} environment. If the \texttt{two} environment were to add a line break
+ after the \lstinline!\end{two}! statement, then \texttt{latexindent.pl} would have no way
+ of knowing how much indentation to add to the subsequent text (in this case,
+ \lstinline!\end{one}!).
+
+ We can explore this further using the poly-switches in \cref{lst:nested-env-mlb2}; upon
+ running the command \index{switches!-l demonstration} \index{switches!-m demonstration}
+ \begin{commandshell}
+latexindent.pl -m -l=nested-env-mlb2.yaml nested-env.tex
+\end{commandshell}
+ we obtain the output given in \cref{lst:nested-env-mlb2-output}.
+
+ \begin{cmhtcbraster}
+ \cmhlistingsfromfile{demonstrations/nested-env-mlb2.tex}{\texttt{nested-env.tex} using \cref{lst:nested-env-mlb2}}{lst:nested-env-mlb2-output}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/nested-env-mlb2.yaml}[MLB-TCB,width=\linewidth]{\texttt{nested-env-mlb2.yaml}}{lst:nested-env-mlb2}
+ \end{cmhtcbraster}
+
+ During Phase 1:
+ \begin{itemize}
+ \item the \texttt{two} environment is found first, and the line break ahead of the
+ \lstinline!\end{two}! statement is not changed because \texttt{EndStartsOnOwnLine} is set
+ to $1$. Importantly, because, \emph{at this stage}, \lstinline!\end{two}! \emph{does}
+ finish with a line break, \texttt{EndFinishesWithLineBreak} causes no action.
+ \item next, the \texttt{one} environment is found; the line break ahead of
+ \lstinline!\end{one}! is already present, and no action is needed.
+ \end{itemize}
+ The indentation is done in Phase 2, and then in Phase 3, the \texttt{one} environment is
+ found and processed first, followed by the \texttt{two} environment. \emph{At this
+ stage}, the \texttt{two} environment finds \texttt{EndFinishesWithLineBreak} is $-1$, so
+ it removes the trailing line break; remember, at this point, \texttt{latexindent.pl} has
+ completely finished with the \texttt{one} environment.
+% arara: pdflatex: { files: [latexindent]}
+\section{The -r, -rv and -rr switches}\label{sec:replacements}
+ \fancyhead[R]{\bfseries\thepage%
+ \tikz[remember picture,overlay] {
+ \node at (1,0){\includegraphics{logo-bw}}; }
+ }
+
+ You can instruct \texttt{latexindent.pl} to perform replacements/substitutions on your
+ \announce{2019-07-13}{replacement mode switches} file by using any of the \texttt{-r},
+ \texttt{-rv} or \texttt{-rr} switches: \index{verbatim!rv, replacementrespectverb switch}
+ \begin{itemize}
+ \item the \texttt{-r} switch will perform indentation and replacements, not respecting verbatim
+ code blocks;
+ \item the \texttt{-rv} switch will perform indentation and replacements, and \emph{will}
+ respect verbatim code blocks;
+ \item the \texttt{-rr} switch will \emph{not} perform indentation, and will perform
+ replacements not respecting verbatim code blocks.
+ \end{itemize}
+
+ We will demonstrate each of the \texttt{-r}, \texttt{-rv} and \texttt{-rr} switches, but
+ a summary is given in \cref{tab:replacementswitches}.
+
+ \begin{table}[!htb]
+ \centering
+ \caption{The replacement mode switches}\label{tab:replacementswitches}
+ \begin{tabular}{rcc}
+ \toprule
+ switch & indentation? & respect verbatim? \\
+ \midrule
+ \texttt{-r} & \faCheck & \faClose \\
+ \texttt{-rv} & \faCheck & \faCheck \\
+ \texttt{-rr} & \faClose & \faClose \\
+ \bottomrule
+ \end{tabular}
+ \end{table}
+
+ The default value of the \texttt{replacements} field is shown in \cref{lst:replacements};
+ as with all of the other fields, you are encouraged to customise and change this as you
+ see fit. The options in this field will \emph{only} be considered if the \texttt{-r},
+ \texttt{-rv} or \texttt{-rr} switches are active; when discussing YAML settings related
+ to the replacement-mode switches, we will use the style given in \cref{lst:replacements}.
+
+ \cmhlistingsfromfile[style=replacements]{../defaultSettings.yaml}[width=0.95\linewidth,before=\centering,replace-TCB]{\texttt{replacements}}{lst:replacements}
+
+ The first entry within the \texttt{replacements} field is \texttt{amalgamate}, and is
+ \emph{optional}; by default it is set to 1, so that replacements will be amalgamated from
+ each settings file that you specify. As you'll see in the demonstrations that follow,
+ there is no need to specify this field.
+
+ You'll notice that, by default, there is only \emph{one} entry in the
+ \texttt{replacements} field, but it can take as many entries as you would like; each one
+ needs to begin with a \texttt{-} on its own line.
+
+\subsection{Introduction to replacements}
+ Let's explore the action of the default settings, and then we'll demonstrate the feature
+ with further examples. With reference to \cref{lst:replacements}, the default action will
+ replace every instance of the text \texttt{latexindent.pl} with \texttt{pl.latexindent}.
+
+ Beginning with the code in \cref{lst:replace1} and running the command \index{switches!-r
+ demonstration}
+ \begin{commandshell}
+latexindent.pl -r replace1.tex
+\end{commandshell}
+ gives the output given in \cref{lst:replace1-r1}.
+
+ \begin{cmhtcbraster}[raster column skip=.01\linewidth]
+ \cmhlistingsfromfile{demonstrations/replace1.tex}{\texttt{replace1.tex}}{lst:replace1}
+ \cmhlistingsfromfile{demonstrations/replace1-r1.tex}{\texttt{replace1.tex} default}{lst:replace1-r1}
+ \end{cmhtcbraster}
+
+ If we don't wish to perform this replacement, then we can tweak the default settings of
+ \vref{lst:replacements} by changing \texttt{lookForThis} to 0; we perform this action in
+ \cref{lst:replace1-yaml}, and run the command \index{switches!-l demonstration}
+ \index{switches!-r demonstration}
+ \begin{commandshell}
+latexindent.pl -r replace1.tex -l=replace1.yaml
+\end{commandshell}
+ which gives the output in \cref{lst:replace1-mod1}.
+
+ \begin{cmhtcbraster}[raster column skip=.01\linewidth]
+ \cmhlistingsfromfile{demonstrations/replace1-mod1.tex}{\texttt{replace1.tex} using \cref{lst:replace1-yaml}}{lst:replace1-mod1}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/replace1.yaml}[replace-TCB]{\texttt{replace1.yaml}}{lst:replace1-yaml}
+ \end{cmhtcbraster}
+
+ Note that in \cref{lst:replace1-yaml} we have specified \texttt{amalgamate} as 0 so that
+ the default replacements are overwritten.
+
+ We haven't yet discussed the \texttt{when} field; don't worry, we'll get to it as part of
+ the discussion in what follows.
+
+\subsection{The two types of replacements}
+ There are two types of replacements:
+ \begin{enumerate}
+ \item \emph{string}-based replacements, which replace the string in
+ \emph{this} with the string in \emph{that}.
+ If you specify \texttt{this} and you do not specify \texttt{that}, then the \texttt{that}
+ field will be assumed to be empty.
+ \index{regular expressions!replacement switch, -r}
+ \item \emph{regex}-based replacements, which use the \texttt{substitution} field.
+ \end{enumerate}
+ We will demonstrate both in the examples that follow.
+
+ \texttt{latexindent.pl} chooses which type of replacement to make based on which fields
+ have been specified; if the \texttt{this} field is specified, then it will make
+ \emph{string}-based replacements, regardless of if \texttt{substitution} is present or
+ not.
+
+\subsection{Examples of replacements}
+ \begin{example}
+ We begin with code given in \cref{lst:colsep}
+
+ \cmhlistingsfromfile{demonstrations/colsep.tex}{\texttt{colsep.tex}}{lst:colsep}
+
+ Let's assume that our goal is to remove both of the \texttt{arraycolsep} statements; we
+ can achieve this in a few different ways.
+
+ Using the YAML in \cref{lst:colsep-yaml}, and running the command \index{switches!-l
+ demonstration} \index{switches!-r demonstration}
+ \begin{commandshell}
+latexindent.pl -r colsep.tex -l=colsep.yaml
+\end{commandshell}
+ then we achieve the output in \cref{lst:colsep-mod0}.
+ \begin{cmhtcbraster}[raster column skip=.01\linewidth]
+ \cmhlistingsfromfile{demonstrations/colsep-mod0.tex}{\texttt{colsep.tex} using \cref{lst:colsep}}{lst:colsep-mod0}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/colsep.yaml}[replace-TCB]{\texttt{colsep.yaml}}{lst:colsep-yaml}
+ \end{cmhtcbraster}
+ Note that in \cref{lst:colsep-yaml}, we have specified \emph{two} separate fields, each
+ with their own `\emph{this}' field; furthermore, for both of the separate fields, we have
+ not specified `\texttt{that}', so the \texttt{that} field is assumed to be blank by
+ \texttt{latexindent.pl};
+
+ We can make the YAML in \cref{lst:colsep-yaml} more concise by exploring the
+ \texttt{substitution} field. Using the settings in \cref{lst:colsep1} and running the
+ command \index{switches!-l demonstration} \index{switches!-r demonstration}
+ \begin{commandshell}
+latexindent.pl -r colsep.tex -l=colsep1.yaml
+\end{commandshell}
+ then we achieve the output in \cref{lst:colsep-mod1}. \index{regular
+ expressions!substitution field, arraycolsep} \index{regular expressions!at least one +}
+ \begin{cmhtcbraster}[raster column skip=.01\linewidth,
+ raster force size=false,
+ raster column 1/.style={add to width=-.1\textwidth}]
+ \cmhlistingsfromfile{demonstrations/colsep-mod1.tex}{\texttt{colsep.tex} using \cref{lst:colsep1}}{lst:colsep-mod1}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/colsep1.yaml}[replace-TCB,width=0.6\textwidth]{\texttt{colsep1.yaml}}{lst:colsep1}
+ \end{cmhtcbraster}
+
+ The code given in \cref{lst:colsep1} is an example of a \emph{regular expression}, which
+ we may abbreviate to \emph{regex} in what follows. This manual is not intended to be a
+ tutorial on regular expressions; you might like to read, for example,
+ \cite{masteringregexp} for a detailed covering of the topic. With reference to
+ \cref{lst:colsep1}, we do note the following:
+ \begin{itemize}
+ \item the general form of the \texttt{substitution} field is
+ \lstinline!s/regex/replacement/modifiers!. You can place any regular expression you like
+ within this;
+ \item we have `escaped' the backslash by using \lstinline!\\!
+ \item we have used \lstinline!\d+! to represent \emph{at least} one digit
+ \item the \texttt{s} \emph{modifier} (in the \texttt{sg} at the end of the line) instructs
+ \texttt{latexindent.pl} to treat your file as one single line;
+ \item the \texttt{g} \emph{modifier} (in the \texttt{sg} at the end of the line) instructs
+ \texttt{latexindent.pl} to make the substitution \emph{globally} throughout your file;
+ you might try removing the \texttt{g} modifier from \cref{lst:colsep1} and observing the
+ difference in output.
+ \end{itemize}
+ You might like to see
+ \href{https://perldoc.perl.org/perlre.html#Modifiers}{https://perldoc.perl.org/perlre.html\#Modifiers}
+ for details of modifiers; in general, I recommend starting with the \texttt{sg} modifiers
+ for this feature.
+ \end{example}
+
+ \begin{example}
+ We'll keep working with the file in \vref{lst:colsep} for this example.
+
+ Using the YAML in \cref{lst:multi-line}, and running the command \index{switches!-l
+ demonstration} \index{switches!-r demonstration}
+ \begin{commandshell}
+latexindent.pl -r colsep.tex -l=multi-line.yaml
+\end{commandshell}
+ then we achieve the output in \cref{lst:colsep-mod2}.
+ \begin{cmhtcbraster}[raster column skip=.01\linewidth]
+ \cmhlistingsfromfile{demonstrations/colsep-mod2.tex}{\texttt{colsep.tex} using \cref{lst:multi-line}}{lst:colsep-mod2}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/multi-line.yaml}[replace-TCB]{\texttt{multi-line.yaml}}{lst:multi-line}
+ \end{cmhtcbraster}
+ With reference to \cref{lst:multi-line}, we have specified a \emph{multi-line} version of
+ \texttt{this} by employing the \emph{literal} YAML style \lstinline!|-!. See, for
+ example,
+ \href{https://stackoverflow.com/questions/3790454/in-yaml-how-do-i-break-a-string-over-multiple-lines}{https://stackoverflow.com/questions/3790454/in-yaml-how-do-i-break-a-string-over-multiple-lines}
+ for further options, all of which can be used in your YAML file.
+
+ This is a natural point to explore the \texttt{when} field, specified in
+ \vref{lst:replacements}. This field can take two values: \emph{before} and \emph{after},
+ which respectively instruct \texttt{latexindent.pl} to perform the replacements
+ \emph{before} indentation or \emph{after} it. The default value is \texttt{before}.
+
+ Using the YAML in \cref{lst:multi-line1}, and running the command \index{switches!-l
+ demonstration} \index{switches!-r demonstration}
+ \begin{commandshell}
+latexindent.pl -r colsep.tex -l=multi-line1.yaml
+\end{commandshell}
+ then we achieve the output in \cref{lst:colsep-mod3}.
+ \begin{cmhtcbraster}[raster column skip=.01\linewidth]
+ \cmhlistingsfromfile{demonstrations/colsep-mod3.tex}{\texttt{colsep.tex} using \cref{lst:multi-line1}}{lst:colsep-mod3}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/multi-line1.yaml}[replace-TCB]{\texttt{multi-line1.yaml}}{lst:multi-line1}
+ \end{cmhtcbraster}
+ We note that, because we have specified \texttt{when: after}, that
+ \texttt{latexindent.pl} has not found the string specified in \cref{lst:multi-line1}
+ within the file in \vref{lst:colsep}. As it has looked for the string within
+ \cref{lst:multi-line1} \emph{after} the indentation has been performed. After
+ indentation, the string as written in \cref{lst:multi-line1} is no longer part of the
+ file, and has therefore not been replaced.
+
+ As a final note on this example, if you use the \texttt{-rr} switch, as follows,
+ \index{switches!-l demonstration} \index{switches!-rr demonstration}
+ \begin{commandshell}
+latexindent.pl -rr colsep.tex -l=multi-line1.yaml
+\end{commandshell}
+ then the \texttt{when} field is ignored, no indentation is done, and the output is as in
+ \cref{lst:colsep-mod2}.
+ \end{example}
+
+ \begin{example}
+ An important part of the substitution routine is in \emph{capture groups}.
+
+ Assuming that we start with the code in \cref{lst:displaymath}, let's assume that our
+ goal is to replace each occurrence of \lstinline!$$...$$! with
+ \lstinline!\begin{equation*}...\end{equation*}!. This example is partly motivated by
+ \href{https://tex.stackexchange.com/questions/242150/good-looking-latex-code}{tex
+ stackexchange question 242150}.
+
+ \cmhlistingsfromfile{demonstrations/displaymath.tex}{\texttt{displaymath.tex}}{lst:displaymath}
+
+ We use the settings in \cref{lst:displaymath1} and run the command \index{switches!-l
+ demonstration} \index{switches!-r demonstration}
+ \begin{commandshell}
+latexindent.pl -r displaymath.tex -l=displaymath1.yaml
+\end{commandshell}
+ to receive the output given in \cref{lst:displaymath-mod1}. \index{regular
+ expressions!substitution field, equation}
+
+ \begin{cmhtcbraster}[raster left skip=-3.75cm,
+ raster right skip=-2cm,]
+ \cmhlistingsfromfile{demonstrations/displaymath-mod1.tex}{\texttt{displaymath.tex} using \cref{lst:displaymath1}}{lst:displaymath-mod1}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/displaymath1.yaml}[replace-TCB]{\texttt{displaymath1.yaml}}{lst:displaymath1}
+ \end{cmhtcbraster}
+
+ A few notes about \cref{lst:displaymath1}:
+ \begin{enumerate}
+ \item we have used the \texttt{x} modifier, which allows us to have white space within the
+ regex;
+ \item we have used a capture group, \lstinline!(.*?)! which captures the content between the
+ \lstinline!$$...$$! into the special variable, \lstinline!$1!;
+ \item we have used the content of the capture group, \lstinline!$1!, in the replacement text.
+ \end{enumerate}
+ See
+ \href{https://perldoc.perl.org/perlre.html#Capture-groups}{https://perldoc.perl.org/perlre.html\#Capture-groups}
+ for a discussion of capture groups.
+
+ The features of the replacement switches can, of course, be combined with others from the
+ toolkit of \texttt{latexindent.pl}. For example, we can combine the poly-switches of
+ \vref{sec:poly-switches}, which we do in \cref{lst:equation}; upon running the command
+ \index{switches!-l demonstration} \index{switches!-m demonstration} \index{switches!-r
+ demonstration}
+ \begin{commandshell}
+latexindent.pl -r -m displaymath.tex -l=displaymath1.yaml,equation.yaml
+\end{commandshell}
+ then we receive the output in \cref{lst:displaymath-mod2}.
+
+ \begin{cmhtcbraster}[
+ raster force size=false,
+ raster column 1/.style={add to width=-.1\textwidth},
+ raster column skip=.06\linewidth]
+ \cmhlistingsfromfile{demonstrations/displaymath-mod2.tex}{\texttt{displaymath.tex} using \cref{lst:displaymath1,lst:equation}}{lst:displaymath-mod2}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/equation.yaml}[MLB-TCB,width=0.55\textwidth]{\texttt{equation.yaml}}{lst:equation}
+ \end{cmhtcbraster}
+ \end{example}
+
+ \begin{example}
+ This example is motivated by
+ \href{https://tex.stackexchange.com/questions/490086/bring-several-lines-together-to-fill-blank-spaces-in-texmaker}{tex
+ stackexchange question 490086}. We begin with the code in \cref{lst:phrase}.
+
+ \cmhlistingsfromfile{demonstrations/phrase.tex}{\texttt{phrase.tex}}{lst:phrase}
+
+ Our goal is to make the spacing uniform between the phrases. To achieve this, we employ
+ the settings in \cref{lst:hspace}, and run the command \index{switches!-l demonstration}
+ \index{switches!-r demonstration}
+ \begin{commandshell}
+latexindent.pl -r phrase.tex -l=hspace.yaml
+\end{commandshell}
+ which gives the output in \cref{lst:phrase-mod1}. \index{regular expressions!at least one
+ +} \index{regular expressions!horizontal space \textbackslash{h}}
+
+ \begin{cmhtcbraster}
+ \cmhlistingsfromfile{demonstrations/phrase-mod1.tex}{\texttt{phrase.tex} using \cref{lst:hspace}}{lst:phrase-mod1}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/hspace.yaml}[replace-TCB]{\texttt{hspace.yaml}}{lst:hspace}
+ \end{cmhtcbraster}
+
+ The \lstinline!\h+! setting in \cref{lst:hspace} say to replace \emph{at least one
+ horizontal space} with a single space.
+ \end{example}
+
+ \begin{example}
+ We begin with the code in \cref{lst:references}.
+
+ \cmhlistingsfromfile{demonstrations/references.tex}{\texttt{references.tex}}{lst:references}
+
+ Our goal is to change each reference so that both the text and the reference are
+ contained within one hyperlink. We achieve this by employing \cref{lst:reference} and
+ running the command \index{switches!-l demonstration} \index{switches!-r demonstration}
+ \begin{commandshell}
+latexindent.pl -r references.tex -l=reference.yaml
+\end{commandshell}
+ which gives the output in \cref{lst:references-mod1}. \index{regular
+ expressions!horizontal space \textbackslash{h}}
+
+ \cmhlistingsfromfile{demonstrations/references-mod1.tex}{\texttt{references.tex} using \cref{lst:reference}}{lst:references-mod1}
+
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/reference.yaml}[replace-TCB]{\texttt{reference.yaml}}{lst:reference}
+
+ Referencing \cref{lst:reference}, the \lstinline!|! means \emph{or}, we have used
+ \emph{capture groups}, together with an example of an \emph{optional} pattern,
+ \lstinline!(?:eq)?!.
+ \end{example}
+
+ \begin{example}
+ Let's explore the three replacement mode switches (see \vref{tab:replacementswitches}) in
+ the context of an example that contains a verbatim code block, \cref{lst:verb1}; we will
+ use the settings in \cref{lst:verbatim1-yaml}.
+
+ \begin{cmhtcbraster}
+ \cmhlistingsfromfile{demonstrations/verb1.tex}{\texttt{verb1.tex}}{lst:verb1}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/verbatim1.yaml}[replace-TCB]{\texttt{verbatim1.yaml}}{lst:verbatim1-yaml}
+ \end{cmhtcbraster}
+
+ Upon running the following commands, \index{verbatim!comparison with -r and -rr switches}
+ \index{switches!-l demonstration} \index{switches!-o demonstration} \index{switches!-r
+ demonstration} \index{switches!-rv demonstration} \index{switches!-rr demonstration}
+ \begin{commandshell}
+latexindent.pl -r verb1.tex -l=verbatim1.yaml -o=+mod1
+latexindent.pl -rv verb1.tex -l=verbatim1.yaml -o=+-rv-mod1
+latexindent.pl -rr verb1.tex -l=verbatim1.yaml -o=+-rr-mod1
+\end{commandshell}
+ we receive the respective output in \crefrange{lst:verb1-mod1}{lst:verb1-rr-mod1}
+
+ \begin{cmhtcbraster}[raster columns=3,
+ raster left skip=-3.75cm,
+ raster right skip=-2cm,]
+ \cmhlistingsfromfile{demonstrations/verb1-mod1.tex}{\texttt{verb1-mod1.tex}}{lst:verb1-mod1}
+ \cmhlistingsfromfile{demonstrations/verb1-rv-mod1.tex}{\texttt{verb1-rv-mod1.tex}}{lst:verb1-rv-mod1}
+ \cmhlistingsfromfile{demonstrations/verb1-rr-mod1.tex}{\texttt{verb1-rr-mod1.tex}}{lst:verb1-rr-mod1}
+ \end{cmhtcbraster}
+ \end{example}
+
+ We note that:
+ \begin{enumerate}
+ \item in \cref{lst:verb1-mod1} indentation has been performed, and that the replacements
+ specified in \cref{lst:verbatim1-yaml} have been performed, even within the verbatim code
+ block;
+ \item in \cref{lst:verb1-rv-mod1} indentation has been performed, but that the replacements
+ have \emph{not} been performed within the verbatim environment, because the \texttt{rv}
+ switch is active;
+ \item in \cref{lst:verb1-rr-mod1} indentation has \emph{not} been performed, but that
+ replacements have been performed, not respecting the verbatim code block.
+ \end{enumerate}
+ See the summary within \vref{tab:replacementswitches}.
+
+ \begin{example}
+ Let's explore the \texttt{amalgamate} field from \vref{lst:replacements} in the context
+ of the file specified in \cref{lst:amalg1}.
+
+ \cmhlistingsfromfile{demonstrations/amalg1.tex}{\texttt{amalg1.tex}}{lst:amalg1}
+
+ Let's consider the YAML files given in \crefrange{lst:amalg1-yaml}{lst:amalg3-yaml}.
+
+ \begin{cmhtcbraster}[raster columns=3,
+ raster left skip=-3.75cm,
+ raster right skip=-2cm,]
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/amalg1-yaml.yaml}[replace-TCB]{\texttt{amalg1-yaml.yaml}}{lst:amalg1-yaml}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/amalg2-yaml.yaml}[replace-TCB]{\texttt{amalg2-yaml.yaml}}{lst:amalg2-yaml}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/amalg3-yaml.yaml}[replace-TCB]{\texttt{amalg3-yaml.yaml}}{lst:amalg3-yaml}
+ \end{cmhtcbraster}
+
+ Upon running the following commands, \index{switches!-l demonstration} \index{switches!-r
+ demonstration}
+ \begin{commandshell}
+latexindent.pl -r amalg1.tex -l=amalg1-yaml
+latexindent.pl -r amalg1.tex -l=amalg1-yaml,amalg2-yaml
+latexindent.pl -r amalg1.tex -l=amalg1-yaml,amalg2-yaml,amalg3-yaml
+\end{commandshell}
+ we receive the respective output in \crefrange{lst:amalg1-mod1}{lst:amalg1-mod123}.
+
+ \begin{cmhtcbraster}[raster columns=3,
+ raster left skip=-3.75cm,
+ raster right skip=-2cm,]
+ \cmhlistingsfromfile{demonstrations/amalg1-mod1.tex}{\texttt{amalg1.tex} using \cref{lst:amalg1-yaml}}{lst:amalg1-mod1}
+ \cmhlistingsfromfile{demonstrations/amalg1-mod12.tex}{\texttt{amalg1.tex} using \cref{lst:amalg1-yaml,lst:amalg2-yaml}}{lst:amalg1-mod12}
+ \cmhlistingsfromfile{demonstrations/amalg1-mod123.tex}{\texttt{amalg1.tex} using \cref{lst:amalg1-yaml,lst:amalg2-yaml,lst:amalg3-yaml}}{lst:amalg1-mod123}
+ \end{cmhtcbraster}
+ We note that:
+ \begin{enumerate}
+ \item in \cref{lst:amalg1-mod1} the replacements from \cref{lst:amalg1-yaml} have been used;
+ \item in \cref{lst:amalg1-mod12} the replacements from \cref{lst:amalg1-yaml,lst:amalg2-yaml}
+ have \emph{both} been used, because the default value of \texttt{amalgamate} is 1;
+ \item in \cref{lst:amalg1-mod123} \emph{only} the replacements from \cref{lst:amalg3-yaml} have
+ been used, because the value of \texttt{amalgamate} has been set to 0.
+ \end{enumerate}
+ \end{example}
+% arara: pdflatex: { files: [latexindent]}
+\section{The --lines switch}\label{sec:line-switch}
+ \texttt{latexindent.pl}
+ \announce{2021-09-16}{line switch demonstration} can
+ operate on a \emph{selection} of lines of the file using the \texttt{--lines} or
+ \texttt{-n} switch.
+
+ \index{switches!-lines demonstration}
+
+ The basic syntax is \texttt{--lines MIN-MAX}, so for example
+ \begin{commandshell}
+latexindent.pl --lines 3-7 myfile.tex
+latexindent.pl -n 3-7 myfile.tex
+\end{commandshell}
+ will only operate upon lines 3 to 7 in \texttt{myfile.tex}. All of the other lines will
+ \emph{not} be operated upon by \texttt{latexindent.pl}.
+
+ The options for the \texttt{lines} switch are:
+ \begin{itemize}
+ \item line range, as in \texttt{--lines 3-7}
+ \item single line, as in \texttt{--lines 5}
+ \item multiple line ranges separated by commas, as in \texttt{--lines 3-5,8-10}
+ \item negated line ranges, as in \texttt{--lines !3-5} which translates to \texttt{--lines
+ 1-2,6-N}, where N is the number of lines in your file.
+ \end{itemize}
+
+ We demonstrate this feature, and the available variations in what follows. We will use
+ the file in \cref{lst:myfile}.
+
+ \cmhlistingsfromfile[style=lineNumbersTeX]{demonstrations/myfile.tex}[tex-TCB]{\texttt{myfile.tex}}{lst:myfile}
+
+ \begin{example}
+ We demonstrate the basic usage using the command
+ \begin{commandshell}
+latexindent.pl --lines 3-7 myfile.tex -o=+-mod1
+\end{commandshell}
+ which instructs \texttt{latexindent.pl} to only operate on lines 3 to 7; the output is
+ given in \cref{lst:myfile-mod1}.
+
+ \cmhlistingsfromfile[style=lineNumbersTeX]{demonstrations/myfile-mod1.tex}[tex-TCB]{\texttt{myfile-mod1.tex}}{lst:myfile-mod1}
+
+ The following two calls to \texttt{latexindent.pl} are equivalent
+ \begin{commandshell}
+latexindent.pl --lines 3-7 myfile.tex -o=+-mod1
+latexindent.pl --lines 7-3 myfile.tex -o=+-mod1
+\end{commandshell}
+ as \texttt{latexindent.pl} performs a check to put the lowest number first.
+ \end{example}
+
+ \begin{example}
+ You can call the \texttt{lines} switch with only \emph{one number} and in which case only
+ that line will be operated upon. For example
+ \begin{commandshell}
+latexindent.pl --lines 5 myfile.tex -o=+-mod2
+\end{commandshell}
+ instructs \texttt{latexindent.pl} to only operate on line 5; the output is given in
+ \cref{lst:myfile-mod2}.
+
+ \cmhlistingsfromfile[style=lineNumbersTeX]{demonstrations/myfile-mod2.tex}[tex-TCB]{\texttt{myfile-mod2.tex}}{lst:myfile-mod2}
+
+ The following two calls are equivalent:
+ \begin{commandshell}
+latexindent.pl --lines 5 myfile.tex
+latexindent.pl --lines 5-5 myfile.tex
+\end{commandshell}
+ \end{example}
+
+ \begin{example}
+ If you specify a value outside of the line range of the file then \texttt{latexindent.pl}
+ will ignore the \texttt{lines} argument, detail as such in the log file, and proceed to
+ operate on the entire file.
+
+ For example, in the following call
+ \begin{commandshell}
+latexindent.pl --lines 11-13 myfile.tex
+ \end{commandshell}
+ \texttt{latexindent.pl} will ignore the \texttt{lines} argument, and \emph{operate on the entire file} because \cref{lst:myfile} only has 12 lines.
+
+ Similarly, in the call
+ \begin{commandshell}
+latexindent.pl --lines -1-3 myfile.tex
+ \end{commandshell}
+ \texttt{latexindent.pl} will ignore the \texttt{lines} argument, and \emph{operate on the entire file} because we assume that negatively numbered
+ lines in a file do not exist.
+ \end{example}
+
+ \begin{example}
+ You can specify \emph{multiple line ranges} as in the following
+ \begin{commandshell}
+latexindent.pl --lines 3-5,8-10 myfile.tex -o=+-mod3
+\end{commandshell}
+ which instructs \texttt{latexindent.pl} to operate upon lines 3 to 5 and lines 8 to 10;
+ the output is given in \cref{lst:myfile-mod3}.
+
+ \cmhlistingsfromfile[style=lineNumbersTeX]{demonstrations/myfile-mod3.tex}[tex-TCB]{\texttt{myfile-mod3.tex}}{lst:myfile-mod3}
+
+ The following calls to \texttt{latexindent.pl} are all equivalent
+ \begin{commandshell}
+latexindent.pl --lines 3-5,8-10 myfile.tex
+latexindent.pl --lines 8-10,3-5 myfile.tex
+latexindent.pl --lines 10-8,3-5 myfile.tex
+latexindent.pl --lines 10-8,5-3 myfile.tex
+\end{commandshell}
+ as \texttt{latexindent.pl} performs a check to put the lowest line ranges first, and
+ within each line range, it puts the lowest number first.
+ \end{example}
+
+ \begin{example}
+ There's no limit to the number of line ranges that you can specify, they just need to be
+ separated by commas. For example
+ \begin{commandshell}
+latexindent.pl --lines 1-2,4-5,9-10,12 myfile.tex -o=+-mod4
+\end{commandshell}
+ has four line ranges: lines 1 to 2, lines 4 to 5, lines 9 to 10 and line 12. The output
+ is given in \cref{lst:myfile-mod4}.
+
+ \cmhlistingsfromfile[style=lineNumbersTeX]{demonstrations/myfile-mod4.tex}[tex-TCB]{\texttt{myfile-mod4.tex}}{lst:myfile-mod4}
+
+ As previously, the ordering does not matter, and the following calls to
+ \texttt{latexindent.pl} are all equivalent
+ \begin{commandshell}
+latexindent.pl --lines 1-2,4-5,9-10,12 myfile.tex
+latexindent.pl --lines 2-1,4-5,9-10,12 myfile.tex
+latexindent.pl --lines 4-5,1-2,9-10,12 myfile.tex
+latexindent.pl --lines 12,4-5,1-2,9-10 myfile.tex
+\end{commandshell}
+ as \texttt{latexindent.pl} performs a check to put the lowest line ranges first, and
+ within each line range, it puts the lowest number first.
+ \end{example}
+
+ \begin{example}
+ \index{switches!-lines demonstration, negation}
+ You can specify \emph{negated line ranges} by using \texttt{!} as in
+ \begin{commandshell}
+latexindent.pl --lines !5-7 myfile.tex -o=+-mod5
+\end{commandshell}
+ which instructs \texttt{latexindent.pl} to operate upon all of the lines \emph{except}
+ lines 5 to 7.
+
+ In other words, \texttt{latexindent.pl} \emph{will} operate on lines 1 to 4, and 8 to 12,
+ so the following two calls are equivalent:
+ \begin{commandshell}
+latexindent.pl --lines !5-7 myfile.tex
+latexindent.pl --lines 1-4,8-12 myfile.tex
+\end{commandshell}
+ The output is given in \cref{lst:myfile-mod5}.
+
+ \cmhlistingsfromfile[style=lineNumbersTeX]{demonstrations/myfile-mod5.tex}[tex-TCB]{\texttt{myfile-mod5.tex}}{lst:myfile-mod5}
+
+ \end{example}
+
+ \begin{example}
+ \index{switches!-lines demonstration, negation}
+ You can specify \emph{multiple negated line ranges} such as
+ \begin{commandshell}
+latexindent.pl --lines !5-7,!9-10 myfile.tex -o=+-mod6
+ \end{commandshell}
+ which is equivalent to:
+ \begin{commandshell}
+latexindent.pl --lines 1-4,8,11-12 myfile.tex -o=+-mod6
+ \end{commandshell}
+ The output is given in \cref{lst:myfile-mod6}.
+
+ \cmhlistingsfromfile[style=lineNumbersTeX]{demonstrations/myfile-mod6.tex}[tex-TCB]{\texttt{myfile-mod6.tex}}{lst:myfile-mod6}
+ \end{example}
+
+ \begin{example}
+ If you specify a line range with anything other than an integer, then
+ \texttt{latexindent.pl} will ignore the \texttt{lines} argument, and \emph{operate on the
+ entire file}.
+
+ Sample calls that result in the \texttt{lines} argument being ignored include the
+ following:
+ \begin{commandshell}
+latexindent.pl --lines 1-x myfile.tex
+latexindent.pl --lines !y-3 myfile.tex
+ \end{commandshell}
+ \end{example}
+
+ \begin{example}
+ We can, of course, use the \texttt{lines} switch in combination with other switches.
+
+ For example, let's use with the file in \cref{lst:myfile1}.
+
+ \cmhlistingsfromfile[style=lineNumbersTeX]{demonstrations/myfile1.tex}[tex-TCB]{\texttt{myfile1.tex}}{lst:myfile1}
+
+ We can demonstrate interaction with the \texttt{-m} switch (see
+ \vref{sec:modifylinebreaks}); in particular, if we use \vref{lst:mlb2},
+ \vref{lst:env-mlb7} and \vref{lst:env-mlb8} and run
+ \begin{widepage}
+ \begin{commandshell}
+latexindent.pl --lines 6 myfile1.tex -o=+-mod1 -m -l env-mlb2,env-mlb7,env-mlb8 -o=+-mod1
+ \end{commandshell}
+ \end{widepage}
+ then we receive the output in \cref{lst:myfile1-mod1}.
+
+ \cmhlistingsfromfile[style=lineNumbersTeX]{demonstrations/myfile1-mod1.tex}[tex-TCB]{\texttt{myfile1-mod1.tex}}{lst:myfile1-mod1}
+ \end{example}
+% arara: pdflatex: { files: [latexindent]}
+\section{Fine tuning}\label{sec:finetuning}
+ \texttt{latexindent.pl} operates by looking for the code blocks detailed in
+ \vref{tab:code-blocks}.
+ \announce{2019-07-13}{details of fine tuning of code blocks} The fine tuning of the
+ details of such code blocks is controlled by the \texttt{fineTuning} field, detailed in
+ \cref{lst:fineTuning}.
+
+ This field is for those that would like to peek under the bonnet/hood and make some fine
+ tuning to \texttt{latexindent.pl}'s operating. \index{warning!fine tuning} \index{regular
+ expressions!fine tuning} \index{regular expressions!environments} \index{regular
+ expressions!ifElseFi} \index{regular expressions!commands} \index{regular
+ expressions!keyEqualsValuesBracesBrackets} \index{regular
+ expressions!NamedGroupingBracesBrackets} \index{regular
+ expressions!UnNamedGroupingBracesBrackets} \index{regular expressions!arguments}
+ \index{regular expressions!modifyLineBreaks} \index{regular expressions!lowercase alph
+ a-z} \index{regular expressions!uppercase alph A-Z} \index{regular expressions!numeric
+ 0-9} \index{regular expressions!at least one +} \index{regular expressions!horizontal
+ space \textbackslash{h}}
+
+ \begin{warning}
+ Making changes to the fine tuning may have significant consequences for your indentation
+ scheme, proceed with caution!
+ \end{warning}
+
+ \begin{widepage}
+ \cmhlistingsfromfile[style=fineTuning]{../defaultSettings.yaml}[width=.95\linewidth,before=\centering,enhanced jigsaw,breakable,yaml-TCB]{\texttt{fineTuning}}{lst:fineTuning}
+ \end{widepage}
+
+ The fields given in \cref{lst:fineTuning} are all \emph{regular expressions}. This manual
+ is not intended to be a tutorial on regular expressions; you might like to read, for
+ example, \cite{masteringregexp} for a detailed covering of the topic.
+
+ We make the following comments with reference to \cref{lst:fineTuning}:
+ \begin{enumerate}
+ \item the \texttt{environments:name} field details that the \emph{name} of an environment can
+ contain:
+ \begin{enumerate}
+ \item \texttt{a-z} lower case letters
+ \item \texttt{A-Z} upper case letters
+ \item \texttt{@} the \texttt{@} 'letter'
+ \item \lstinline!\*! stars
+ \item \texttt{0-9} numbers
+ \item \lstinline!_! underscores
+ \item \lstinline!\! backslashes
+ \end{enumerate}
+ \index{regular expressions!at least one +}
+ The \texttt{+} at the end means \emph{at least one} of the above characters.
+ \item the \texttt{ifElseFi:name} field:
+ \begin{enumerate}
+ \item \lstinline^@?^ means that it \emph{can possibly} begin with
+ \lstinline^@^
+ \item followed by \texttt{if}
+ \item followed by 0 or more characters from \texttt{a-z}, \texttt{A-Z} and \texttt{@}
+ \item the \texttt{?} the end means \emph{non-greedy}, which means `stop the match as soon as
+ possible'
+ \end{enumerate}
+ \item the \texttt{keyEqualsValuesBracesBrackets} contains some interesting syntax:
+ \begin{enumerate}
+ \item \lstinline!|! means `or'
+ \item \lstinline^(?:(?<!\\)\{)^ the \lstinline^(?:...)^ uses a \emph{non-capturing} group -- you don't necessarily need to worry about what this
+ means, but just know that for the \texttt{fineTuning} feature you should only ever use
+ \emph{non}-capturing groups, and \emph{not} capturing groups, which are simply
+ \lstinline!(...)!
+ \item \lstinline^(?<!\\)\{)^ means a \lstinline^{^ but it can \emph{not} be immediately preceded by a \lstinline!\!
+ \end{enumerate}
+ \item in the \texttt{arguments:before} field
+ \begin{enumerate}
+ \item \lstinline^\d\h*^ means a digit (i.e. a number), followed by 0 or more horizontal spaces
+ \item \lstinline^;?,?^ means \emph{possibly} a semi-colon, and possibly a comma
+ \item \lstinline^\<.*?\>^ is designed for 'beamer'-type commands; the
+ \lstinline^.*?^ means anything in between \lstinline^<...>^
+ \end{enumerate}
+ \item the \texttt{modifyLineBreaks} field refers to fine tuning settings detailed in
+ \vref{sec:modifylinebreaks}. In particular:
+ \begin{enumerate}
+ \item \texttt{betterFullStop} is in relation to the one sentence per line routine, detailed in
+ \vref{sec:onesentenceperline}
+ \item \texttt{doubleBackSlash} is in relation to the \texttt{DBSStartsOnOwnLine} and
+ \texttt{DBSFinishesWithLineBreak} polyswitches surrounding double back slashes, see
+ \vref{subsec:dbs}
+ \item \texttt{comma} is in relation to the \texttt{CommaStartsOnOwnLine} and
+ \texttt{CommaFinishesWithLineBreak} polyswitches surrounding commas in optional and
+ mandatory arguments; see \vref{tab:poly-switch-mapping}
+ \end{enumerate}
+ \end{enumerate}
+
+ It is not obvious from \cref{lst:fineTuning}, but each of the \texttt{follow},
+ \texttt{before} and \texttt{between} fields allow trailing comments, line breaks, and
+ horizontal spaces between each character.
+
+ \index{warning!capture groups}
+ \begin{warning}
+ For the \texttt{fineTuning} feature you should only ever use \emph{non}-capturing groups,
+ such as \lstinline!(?:...)! and \emph{not} capturing groups, which are \lstinline!(...)!
+ \end{warning}
+
+ \begin{example}
+ As a demonstration, consider the file given in \cref{lst:finetuning1}, together with its
+ default output using the command
+ \begin{commandshell}
+latexindent.pl finetuning1.tex
+\end{commandshell}
+ is given in \cref{lst:finetuning1-default}.
+
+ \begin{cmhtcbraster}[raster column skip=.01\linewidth]
+ \cmhlistingsfromfile{demonstrations/finetuning1.tex}{\texttt{finetuning1.tex}}{lst:finetuning1}
+ \cmhlistingsfromfile{demonstrations/finetuning1-default.tex}{\texttt{finetuning1.tex} default}{lst:finetuning1-default}
+ \end{cmhtcbraster}
+
+ It's clear from \cref{lst:finetuning1-default} that the indentation scheme has not worked
+ as expected. We can \emph{fine tune} the indentation scheme by employing the settings
+ given in \cref{lst:fine-tuning1} and running the command \index{switches!-l
+ demonstration}
+ \begin{commandshell}
+latexindent.pl finetuning1.tex -l=fine-tuning1.yaml
+\end{commandshell}
+ and the associated (desired) output is given in \cref{lst:finetuning1-mod1}.
+ \index{regular expressions!at least one +}
+
+ \begin{cmhtcbraster}[raster column skip=.01\linewidth]
+ \cmhlistingsfromfile{demonstrations/finetuning1-mod1.tex}{\texttt{finetuning1.tex} using \cref{lst:fine-tuning1}}{lst:finetuning1-mod1}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/fine-tuning1.yaml}[yaml-TCB]{\texttt{finetuning1.yaml}}{lst:fine-tuning1}
+ \end{cmhtcbraster}
+ \end{example}
+
+ \begin{example}
+ Let's have another demonstration; consider the file given in \cref{lst:finetuning2},
+ together with its default output using the command
+ \begin{commandshell}
+latexindent.pl finetuning2.tex
+\end{commandshell}
+ is given in \cref{lst:finetuning2-default}.
+
+ \begin{cmhtcbraster}[raster column skip=.01\linewidth,
+ raster left skip=-3.75cm,
+ raster right skip=0cm,]
+ \cmhlistingsfromfile{demonstrations/finetuning2.tex}{\texttt{finetuning2.tex}}{lst:finetuning2}
+ \cmhlistingsfromfile{demonstrations/finetuning2-default.tex}{\texttt{finetuning2.tex} default}{lst:finetuning2-default}
+ \end{cmhtcbraster}
+
+ It's clear from \cref{lst:finetuning2-default} that the indentation scheme has not worked
+ as expected. We can \emph{fine tune} the indentation scheme by employing the settings
+ given in \cref{lst:fine-tuning2} and running the command \index{switches!-l
+ demonstration}
+ \begin{commandshell}
+latexindent.pl finetuning2.tex -l=fine-tuning2.yaml
+\end{commandshell}
+ and the associated (desired) output is given in \cref{lst:finetuning2-mod1}.
+
+ \begin{cmhtcbraster}[raster column skip=.01\linewidth,
+ raster left skip=-3.75cm,
+ raster right skip=0cm,]
+ \cmhlistingsfromfile{demonstrations/finetuning2-mod1.tex}{\texttt{finetuning2.tex} using \cref{lst:fine-tuning2}}{lst:finetuning2-mod1}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/fine-tuning2.yaml}[yaml-TCB]{\texttt{finetuning2.yaml}}{lst:fine-tuning2}
+ \end{cmhtcbraster}
+
+ In particular, note that the settings in \cref{lst:fine-tuning2} specify that
+ \texttt{NamedGroupingBracesBrackets} and \texttt{UnNamedGroupingBracesBrackets} can
+ follow \texttt{"} and that we allow \lstinline!---! between arguments.
+ \end{example}
+
+ \begin{example}
+ You can tweak the \texttt{fineTuning} using the \texttt{-y} switch, but to be sure to use
+ quotes appropriately. For example, starting with the code in \cref{lst:finetuning3} and
+ running the following command
+ \begin{commandshell}
+latexindent.pl -m -y='modifyLineBreaks:oneSentencePerLine:manipulateSentences: 1, modifyLineBreaks:oneSentencePerLine:sentencesBeginWith:a-z: 1, fineTuning:modifyLineBreaks:betterFullStop: "(?:\.|;|:(?![a-z]))|(?:(?<!(?:(?:e\.g)|(?:i\.e)|(?:etc))))\.(?!(?:[a-z]|[A-Z]|\-|~|\,|[0-9]))"' issue-243.tex -o=+-mod1
+\end{commandshell}
+ gives the output shown in \cref{lst:finetuning3-mod1}.
+
+ \cmhlistingsfromfile{demonstrations/finetuning3.tex}{\texttt{finetuning3.tex}}{lst:finetuning3}
+ \cmhlistingsfromfile{demonstrations/finetuning3-mod1.tex}{\texttt{finetuning3.tex} using -y switch}{lst:finetuning3-mod1}
+ \end{example}
+
+ \begin{example}
+ We can tweak the \texttt{fineTuning} for how trailing comments are classified. For
+ motivation, let's consider the code given in \cref{lst:finetuning4}
+
+ \cmhlistingsfromfile{demonstrations/finetuning4.tex}{\texttt{finetuning4.tex}}{lst:finetuning4}
+
+ We will compare the settings given in \cref{lst:href1,lst:href2}.
+
+ \begin{cmhtcbraster}[raster column skip=.01\linewidth,
+ raster left skip=0cm,
+ raster right skip=-0.5cm,]
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/href1.yaml}[MLB-TCB]{\texttt{href1.yaml}}{lst:href1}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/href2.yaml}[MLB-TCB]{\texttt{href2.yaml}}{lst:href2}
+ \end{cmhtcbraster}
+
+ Upon running the following commands
+ \begin{commandshell}
+latexindent.pl -m finetuning4.tex -o=+-mod1 -l=href1
+latexindent.pl -m finetuning4.tex -o=+-mod2 -l=href2
+\end{commandshell}
+ we receive the respective output in \cref{lst:finetuning4-mod1,lst:finetuning4-mod2}.
+
+ \begin{widepage}
+ \cmhlistingsfromfile{demonstrations/finetuning4-mod1.tex}{\texttt{finetuning4.tex} using \cref{lst:href1}}{lst:finetuning4-mod1}
+
+ \cmhlistingsfromfile{demonstrations/finetuning4-mod2.tex}{\texttt{finetuning4.tex} using \cref{lst:href2}}{lst:finetuning4-mod2}
+ \end{widepage}
+
+ We note that in:
+ \begin{itemize}
+ \item \cref{lst:finetuning4-mod1} the trailing comments are assumed to be everything following
+ the first comment symbol, which has meant that everything following it has been moved to
+ the end of the line; this is undesirable, clearly!
+ \item \cref{lst:finetuning4-mod2} has fine-tuned the trailing comment matching, and says that
+ \% cannot
+ be immediately preceeded by the words `Handbook', `for' or `Spoken', which means that
+ none of the \% symbols have been treated as trailing comments, and the output is
+ desirable.
+ \end{itemize}
+
+ Another approach to this situation, which does not use \texttt{fineTuning}, is to use
+ \texttt{noIndentBlock} which we discussed in \vref{lst:noIndentBlock}; using the settings
+ in \cref{lst:href3} and running the command
+ \begin{commandshell}
+latexindent.pl -m finetuning4.tex -o=+-mod3 -l=href3
+\end{commandshell}
+ then we receive the same output given in \cref{lst:finetuning4-mod2}.
+
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/href3.yaml}[MLB-TCB]{\texttt{href3.yaml}}{lst:href3}
+
+ With reference to the \texttt{body} field in \cref{lst:href3}, we note that the
+ \texttt{body} field can be interpreted as: the fewest number of zero or more characters
+ that are not right braces. This is an example of character class. \index{regular
+ expressions!character class demonstration}
+ \end{example}
+
+ \begin{example}
+ We can use the \texttt{fineTuning} field to assist in the formatting of bibliography
+ files. \index{bibliography files} \index{regular expressions!delimiterRegEx}
+ \index{regular expressions!capturing parenthesis} \index{regular expressions!ampersand
+ alignment} \index{delimiters!delimiterRegEx}
+
+ Starting with the file in \cref{lst:bib1} and running the command
+ \begin{commandshell}
+latexindent.pl bib1.tex -o=+-mod1
+ \end{commandshell}
+ gives the output in \cref{lst:bib1-mod1}.
+
+ \begin{widepage}
+ \begin{cmhtcbraster}[raster column skip=.01\linewidth]
+ \cmhlistingsfromfile{demonstrations/bib1.bib}{\texttt{bib1.bib}}{lst:bib1}
+ \cmhlistingsfromfile{demonstrations/bib1-mod1.bib}{\texttt{bib1-mod1.bib}}{lst:bib1-mod1}
+ \end{cmhtcbraster}
+ \end{widepage}
+
+ Let's assume that we would like to format the output so as to align the \texttt{=}
+ symbols. Using the settings in \cref{lst:bibsettings1} and running the command
+ \begin{commandshell}
+latexindent.pl bib1.bib -l bibsettings1.yaml -o=+-mod2
+ \end{commandshell}
+ gives the output in \cref{lst:bib1-mod2}.
+
+ \begin{widepage}
+ \begin{cmhtcbraster}[raster column skip=.1\linewidth]
+ \cmhlistingsfromfile{demonstrations/bib1-mod2.bib}{\texttt{bib1.bib} using \cref{lst:bibsettings1}}{lst:bib1-mod2}
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/bibsettings1.yaml}[yaml-TCB]{\texttt{bibsettings1.yaml}}{lst:bibsettings1}
+ \end{cmhtcbraster}
+ \end{widepage}
+ Some notes about \cref{lst:bibsettings1}:
+ \begin{itemize}
+ \item we have populated the \texttt{lookForAlignDelims} field with the \texttt{online} command,
+ and have used the \texttt{delimiterRegEx}, discussed in \vref{sec:delimiter-reg-ex};
+ \item we have tweaked the \texttt{keyEqualsValuesBracesBrackets} code block so that it will
+ \emph{not} be found following a comma; this means that, in contrast to the default
+ behaviour, the lines such as \lstinline!date={2013-05-23},! will \emph{not} be treated as
+ key-equals-value braces;
+ \item the adjustment to \texttt{keyEqualsValuesBracesBrackets} necessitates the associated
+ change to the \texttt{UnNamedGroupingBracesBrackets} field so that they will be searched
+ for following \texttt{=} symbols.
+ \end{itemize}
+ \end{example}
+
+ \begin{example}
+ We can build upon \cref{lst:bibsettings1} for slightly more complicated bibliography
+ files.
+
+ Starting with the file in \cref{lst:bib2} and running the command
+ \begin{commandshell}
+latexindent.pl bib2.bib -l bibsettings1.yaml -o=+-mod1
+ \end{commandshell}
+ gives the output in \cref{lst:bib2-mod1}.
+
+ \begin{widepage}
+ \cmhlistingsfromfile{demonstrations/bib2.bib}{\texttt{bib2.bib}}{lst:bib2}
+ \cmhlistingsfromfile{demonstrations/bib2-mod1.bib}{\texttt{bib2-mod1.bib}}{lst:bib2-mod1}
+ \end{widepage}
+
+ The output in \cref{lst:bib2-mod1} is not ideal, as the \texttt{=} symbol within the url
+ field has been incorrectly used as an alignment delimiter.
+
+ We address this by tweaking the \texttt{delimiterRegEx} field in \cref{lst:bibsettings2}.
+
+ \cmhlistingsfromfile[style=yaml-LST]{demonstrations/bibsettings2.yaml}[yaml-TCB]{\texttt{bibsettings2.yaml}}{lst:bibsettings2}
+
+ Upon running the command
+ \begin{commandshell}
+latexindent.pl bib2.bib -l bibsettings1.yaml,bibsettings2.yaml -o=+-mod2
+ \end{commandshell}
+ we receive the \emph{desired} output in \cref{lst:bib2-mod2}.
+
+ \cmhlistingsfromfile{demonstrations/bib2-mod2.bib}{\texttt{bib2-mod2.bib}}{lst:bib2-mod2}
+
+ With reference to \cref{lst:bibsettings2} we note that the \texttt{delimiterRegEx} has
+ been adjusted so that \texttt{=} symbols are used as the delimiter, but only when they
+ are \emph{not preceeded} by either \texttt{v} or \texttt{spfreload}.
+ \end{example}
+% arara: pdflatex: { files: [latexindent]}
+\section{Conclusions and known limitations}\label{sec:knownlimitations}
+ There are a number of known limitations of the script, and almost certainly quite a few
+ that are \emph{unknown}! The known issues include:
+ \begin{description}
+ \item[multicolumn alignment] when working with code blocks in which multicolumn commands
+ overlap, the algorithm can fail; see \vref{lst:tabular2-mod2}.
+ \item[text wrap] routine operates \emph{before} indentation occurs; this means that it is
+ likely that your final, indented, text wrapped text may exceed the value of
+ \texttt{columns} that you specify; see \vref{subsec:textwrapping}.
+ \item[efficiency] particularly when the \texttt{-m} switch is active, as this adds many checks
+ and processes. The current implementation relies upon finding and storing \emph{every}
+ code block (see the discussion on \cpageref{page:phases}); I hope that, in a future
+ version, only \emph{nested} code blocks will need to be stored in the `packing' phase,
+ and that this will improve the efficiency of the script.
+ \end{description}
+
+ You can run \texttt{latexindent} on any file; \announce{2019-07-13}*{ability to call
+ latexindent on any file} if you don't specify an extension, then the extensions that you
+ specify in \lstinline[breaklines=true]!fileExtensionPreference! (see
+ \vref{lst:fileExtensionPreference}) will be consulted. If you find a case in which the
+ script struggles, please feel free to report it at \cite{latexindent-home}, and in the
+ meantime, consider using a \texttt{noIndentBlock} (see \cpageref{lst:noIndentBlock}).%
+
+ I hope that this script is useful to some; if you find an example where the script does
+ not behave as you think it should, the best way to contact me is to report an issue on
+ \cite{latexindent-home}; otherwise, feel free to find me on the
+ \url{http://tex.stackexchange.com/users/6621/cmhughes}.
+\nocite{*}
+\section{References}
+ \printbibliography[heading=subbibnumbered,title={perl-related links},keyword=perl]
+
+ \printbibliography[heading=subbibnumbered,title={conda-related links},keyword=conda]
+ \index{conda}
+
+ \printbibliography[heading=subbibnumbered,title={VScode-related links},keyword=vscode]
+ \index{VSCode}
+
+ \printbibliography[heading=subbibnumbered,title={Other links},keyword=other]
+ \index{pre-commit}
+ \index{MiKTeX}
+
+ \index{contributors}
+ \printbibliography[env=specialbib,heading=subbibnumbered,title={Contributors (in chronological order)\label{sec:contributors}},keyword=contributor]
+% arara: pdflatex: { files: [latexindent]}
+\appendix
+ \section{Required Perl modules}\label{sec:requiredmodules}
+ If you intend to use \texttt{latexindent.pl} and \emph{not} one of the supplied
+ standalone executable files (\texttt{latexindent.exe} is available for Windows users
+ without Perl, see \cref{subsubsec:latexindent:exe}), then you will need a few standard
+ Perl modules.
+
+ If you can run the minimum code in \cref{lst:helloworld} as in
+ \begin{commandshell}
+perl helloworld.pl
+ \end{commandshell}
+ then you will be able to run \texttt{latexindent.pl}, otherwise you may need to install
+ the missing modules; see \cref{sec:module-installer,sec:manual-module-instal}.
+
+ \begin{cmhlistings}[style=tcblatex,language=Perl]{\texttt{helloworld.pl}}{lst:helloworld}
+#!/usr/bin/perl
+
+use strict; # |
+use warnings; # |
+use Encode; # |
+use Getopt::Long; # |
+use Data::Dumper; # these modules are
+use List::Util qw(max); # generally part
+use PerlIO::encoding; # of a default perl distribution
+use open ':std', ':encoding(UTF-8)';# |
+use Text::Wrap; # |
+use Text::Tabs; # |
+use FindBin; # |
+use File::Copy; # |
+use File::Basename; # |
+use File::HomeDir; # <--- typically requires install via cpanm
+use YAML::Tiny; # <--- typically requires install via cpanm
+
+print "hello world";
+exit;
+\end{cmhlistings}
+
+ \subsection{Module installer script}\label{sec:module-installer}
+ \announce{2018-01-13}{perl module helper script} \texttt{latexindent.pl} ships with a
+ helper script that will install any missing \texttt{perl} modules on your system; if you
+ run
+ \begin{commandshell}
+perl latexindent-module-installer.pl
+\end{commandshell}
+ or
+ \begin{dosprompt}
+perl latexindent-module-installer.pl
+ \end{dosprompt}
+ then, once you have answered \texttt{Y}, the appropriate modules will be installed onto
+ your distribution.
+
+ \subsection{Manually installing modules}\label{sec:manual-module-instal}
+ Manually installing the modules given in \cref{lst:helloworld} will vary depending on
+ your operating system and \texttt{Perl} distribution.
+
+ \subsubsection{Linux}
+ \paragraph{perlbrew}
+ Linux users may be interested in exploring Perlbrew \cite{perlbrew}; an example
+ installation would be:
+ \begin{commandshell}
+sudo apt-get install perlbrew
+perlbrew init
+perlbrew install perl-5.28.1
+perlbrew switch perl-5.28.1
+sudo apt-get install curl
+curl -L http://cpanmin.us | perl - App::cpanminus
+cpanm YAML::Tiny
+cpanm File::HomeDir
+\end{commandshell}
+ \index{cpan}
+
+ \paragraph{Ubuntu/Debian}
+ For other distributions, the Ubuntu/Debian approach may work as follows
+ \begin{commandshell}
+sudo apt install perl
+sudo cpan -i App::cpanminus
+sudo cpanm YAML::Tiny
+sudo cpanm File::HomeDir
+\end{commandshell}
+ or else by running, for example,
+ \begin{commandshell}
+sudo perl -MCPAN -e'install "File::HomeDir"'
+\end{commandshell}
+
+ \paragraph{Ubuntu: using the texlive from apt-get}
+ Ubuntu users that install texlive using \texttt{apt-get} as in the following
+ \begin{commandshell}
+sudo apt install texlive
+sudo apt install texlive-latex-recommended
+\end{commandshell}
+ may need the following additional command to work with \texttt{latexindent.pl}
+ \begin{commandshell}
+sudo apt install texlive-extra-utils
+\end{commandshell}
+
+ \paragraph{Ubuntu: users without perl}
+
+ \texttt{latexindent-linux} is a standalone executable \announce*{2022-10-30}{Linux Ubuntu standalone executable} for Ubuntu Linux (and therefore does not require a Perl distribution)
+ and caches copies of the Perl modules onto your system. It is available from \cite{latexindent-home}.
+ \index{latexindent-linux} \index{linux} \index{TeXLive}
+
+ \paragraph{Arch-based distributions}
+ First install the dependencies
+ \begin{commandshell}
+sudo pacman -S perl cpanminus
+\end{commandshell}
+ In addition, install \texttt{perl-file-homedir} from AUR, using your AUR helper of
+ choice,
+ \begin{commandshell}
+sudo paru -S perl-file-homedir
+\end{commandshell}
+ then run the latexindent-module-installer.pl file located at helper-scripts/
+
+ \paragraph{Alpine}
+ If you are using Alpine, some \texttt{Perl} modules are not build-compatible with Alpine,
+ but replacements are available through \texttt{apk}. For example, you might use the
+ commands given in \cref{lst:alpine-install}; thanks to \cite{jun-sheaf} for providing
+ these details.
+
+ \begin{cmhlistings}[style=tcblatex,language=Bash]{\texttt{alpine-install.sh}}{lst:alpine-install}
+# Installing perl
+apk --no-cache add miniperl perl-utils
+
+# Installing incompatible latexindent perl dependencies via apk
+apk --no-cache add \
+ perl-log-dispatch \
+ perl-namespace-autoclean \
+ perl-specio \
+ perl-unicode-linebreak
+
+# Installing remaining latexindent perl dependencies via cpan
+apk --no-cache add curl wget make
+ls /usr/share/texmf-dist/scripts/latexindent
+cd /usr/local/bin && \
+ curl -L https://cpanmin.us/ -o cpanm && \
+ chmod +x cpanm
+cpanm -n App::cpanminus
+cpanm -n File::HomeDir
+cpanm -n Params::ValidationCompiler
+cpanm -n YAML::Tiny
+\end{cmhlistings}
+
+ Users of NixOS might like to see
+ \href{https://github.com/cmhughes/latexindent.pl/issues/222}{https://github.com/cmhughes/latexindent.pl/issues/222}
+ for tips.
+ \subsubsection{Mac}
+ Users of the Macintosh operating system might like to explore the following commands, for
+ example:
+ \begin{commandshell}
+brew install perl
+brew install cpanm
+
+cpanm YAML::Tiny
+cpanm File::HomeDir
+\end{commandshell}
+ Alternatively,
+ \begin{commandshell}
+brew install latexindent
+\end{commandshell}
+
+ \texttt{latexindent-macos} is a standalone executable \announce*{2022-10-30}{macOS standalone executable} for macOS (and therefore does not require a Perl distribution)
+ and caches copies of the Perl modules onto your system. It is available from \cite{latexindent-home}.
+ \index{latexindent-macos} \index{macOS} \index{TeXLive}
+
+ \subsubsection{Windows}
+ Strawberry Perl users on Windows might use \texttt{CPAN client}. All of the modules are
+ readily available on CPAN \cite{cpan}. \texttt{indent.log} will contain details of the
+ location of the Perl modules on your system.
+
+ \texttt{latexindent.exe} is a standalone executable
+ for Windows (and therefore does not require a Perl distribution) and caches copies of the
+ Perl modules onto your system; if you wish to see where they are cached, use the
+ \texttt{trace} option, e.g
+ \begin{dosprompt}
+latexindent.exe -t myfile.tex
+ \end{dosprompt}
+
+ \subsection{The GCString switch}\label{subsec:the-GCString}
+ If you find that the \texttt{lookForAlignDelims} (as in \cref{subsec:align-at-delimiters}) does not work correctly
+ for your language, then you may wish to use the \texttt{Unicode::GCString} module \announce{2022-03-25}{Unicode::GCString}.
+ \index{perl!Unicode GCString module}
+ \index{switches!--GCString demonstration}
+
+ This can be loaded by calling \texttt{latexindent.pl} with the \texttt{GCString} switch
+ as in
+ \begin{commandshell}
+latexindent.pl --GCString myfile.tex
+\end{commandshell}
+ In this case, you will need to have the \texttt{Unicode::GCString} installed in your
+ \texttt{perl} distribution by using, for example,
+ \begin{commandshell}
+cpanm Unicode::GCString
+\end{commandshell}
+
+ Note: this switch does \emph{nothing} for \texttt{latexindent.exe} which loads the module
+ by default. Users of \texttt{latexindent.exe} should not see any difference in behaviour
+ whether they use this switch or not, as \texttt{latexindent.exe} loads the
+ \texttt{Unicode::GCString} module.
+
+ \section{Updating the path variable}\label{sec:updating-path}
+ \texttt{latexindent.pl} has a few scripts (available at \cite{latexindent-home}) that can
+ update the \texttt{path} variables. Thank you to \cite{jasjuang} for this feature. If
+ you're on a Linux or Mac machine, then you'll want \texttt{CMakeLists.txt} from
+ \cite{latexindent-home}.
+ \subsection{Add to path for Linux}
+ To add \texttt{latexindent.pl} to the path for Linux, follow these steps:
+ \begin{enumerate}
+ \item download \texttt{latexindent.pl} and its associated modules,
+ \texttt{defaultSettings.yaml}, to your chosen directory from \cite{latexindent-home} ;
+ \item within your directory, create a directory called \texttt{path-helper-files} and download
+ \texttt{CMakeLists.txt} and \lstinline!cmake_uninstall.cmake.in! from
+ \cite{latexindent-home}/path-helper-files to this directory;
+ \item run
+ \begin{commandshell}
+ls /usr/local/bin
+\end{commandshell}
+ to see what is \emph{currently} in there;
+ \item run the following commands
+ \begin{commandshell}
+sudo apt-get update
+sudo apt-get install --no-install-recommends cmake make # or any other generator
+mkdir build && cd build
+cmake ../path-helper-files
+sudo make install
+\end{commandshell}
+ \item run
+ \begin{commandshell}
+ls /usr/local/bin
+\end{commandshell}
+ again to check that \texttt{latexindent.pl}, its modules and
+ \texttt{defaultSettings.yaml} have been added.
+ \end{enumerate}
+ To \emph{remove} the files, run
+ \begin{commandshell}
+sudo make uninstall
+\end{commandshell}
+ \subsection{Add to path for Windows}
+ To add \texttt{latexindent.exe} to the path for Windows, follow these steps:
+ \begin{enumerate}
+ \item download \texttt{latexindent.exe}, \texttt{defaultSettings.yaml},
+ \texttt{add-to-path.bat} from \cite{latexindent-home} to your chosen directory;
+ \item open a command prompt and run the following command to see what is \emph{currently} in
+ your \lstinline!%path%! variable;
+ \begin{dosprompt}
+echo %path%
+ \end{dosprompt}
+ \item right click on \texttt{add-to-path.bat} and \emph{Run as administrator};
+ \item log out, and log back in;
+ \item open a command prompt and run
+ \begin{dosprompt}
+echo %path%
+ \end{dosprompt}
+ to check that the appropriate directory has been added to your \lstinline!%path%!.
+ \end{enumerate}
+ To \emph{remove} the directory from your \lstinline!%path%!, run
+ \texttt{remove-from-path.bat} as administrator.
+
+ \section{Batches of files}\label{sec:batches}
+
+ You can \announce{2022-03-25}{batches of files details} instruct \texttt{latexindent.pl}
+ to operate on multiple files. For example, the following calls are all valid
+ \begin{commandshell}
+latexindent.pl myfile1.tex
+latexindent.pl myfile1.tex myfile2.tex
+latexindent.pl myfile*.tex
+ \end{commandshell}
+
+ We note the following features of the script in relation to the switches detailed in
+ \cref{sec:how:to:use}.
+
+ \subsection{location of indent.log}
+ If the \texttt{-c} switch is \emph{not} active, then \texttt{indent.log} goes to the directory of the final file called.
+
+ If the \texttt{-c} switch \emph{is} active, then \texttt{indent.log} goes to the
+ specified directory.
+
+ \subsection{interaction with -w switch}
+ If the \texttt{-w} switch is active, as in
+ \begin{commandshell}
+latexindent.pl -w myfile*.tex
+\end{commandshell}
+ then files will be overwritten individually. Back-up files can be re-directed via the
+ \texttt{-c} switch.
+
+ \subsection{interaction with -o switch}
+ If \texttt{latexindent.pl} is called using the \texttt{-o} switch as in
+ \begin{commandshell}
+latexindent.pl myfile*.tex -o=my-output-file.tex
+ \end{commandshell}
+ and there are multiple files to operate upon, then the \texttt{-o} switch is ignored
+ because there is only \emph{one} output file specified.
+
+ More generally, if the \texttt{-o} switch does \emph{not} have a \texttt{+} symbol at the
+ beginning, then the \texttt{-o} switch will be ignored, and is turned it off.
+
+ For example
+ \begin{commandshell}
+latexindent.pl myfile*.tex -o=+myfile
+\end{commandshell}
+ \emph{will} work fine because \emph{each} \texttt{.tex} file will output to
+ \texttt{<basename>myfile.tex}
+
+ Similarly,
+ \begin{commandshell}
+latexindent.pl myfile*.tex -o=++
+\end{commandshell}
+ \emph{will} work because the `existence check/incrementation' routine will be applied.
+
+ \subsection{interaction with lines switch}
+ This behaves as expected by attempting to operate on the line numbers specified for each file. See
+ the examples in \cref{sec:line-switch}.
+
+ \subsection{interaction with check switches}
+ The exit codes for \texttt{latexindent.pl} are given in \vref{tab:exit-codes}.
+
+ When operating on multiple files with the check switch active, as in
+ \begin{commandshell}
+latexindent.pl myfile*.tex --check
+ \end{commandshell}
+ then
+ \begin{itemize}
+ \item exit code 0 means that the text from \emph{none} of the files has been changed;
+ \item exit code 1 means that the text from \emph{at least one} of the files been file changed.
+ \end{itemize}
+
+ The interaction with \texttt{checkv} switch is as in the check switch, but with verbose
+ output.
+
+ \subsection{when a file does not exist}
+ What happens if one of the files can not be operated upon?
+ \begin{itemize}
+ \item if at least one of the files does not exist and \texttt{latexindent.pl} has been called
+ to act upon multiple files, then the exit code is 3; note that \texttt{latexindent.pl}
+ will try to operate on each file that it is called upon, and will not exit with a fatal
+ message in this case;
+ \item if at least one of the files can not be read and \texttt{latexindent.pl} has been called
+ to act upon multiple files, then the exit code is 4; note that \texttt{latexindent.pl}
+ will try to operate on each file that it is called upon, and will not exit with a fatal
+ message in this case;
+ \item if \texttt{latexindent.pl} has been told to operate on multiple files, and some do not
+ exist and some cannot be read, then the exit code will be either 3 or 4, depending upon
+ which it scenario it encountered most recently.
+ \end{itemize}
+
+ \section{latexindent-yaml-schema.json}
+
+ \texttt{latexindent.pl}
+ \announce{2022-01-02}{latexindent-yaml-schema.json} ships with
+ \texttt{latexindent-yaml-schema.json}
+ which might help you when constructing your YAML files.
+ \index{json!schema for YAML files}
+
+ \subsection{VSCode demonstration}
+ To use \texttt{latexindent-yaml-schema.json} with \texttt{VSCode}, you can use the
+ following steps: \index{VSCode} \index{json!VSCode}
+ \begin{enumerate}
+ \item download \texttt{latexindent-yaml-schema.json} from the \texttt{documentation} folder of
+ \cite{latexindent-home}, save it in whichever directory you would like, noting it for
+ reference;
+ \item following the instructions from \cite{vscode-yaml-demo}, for example, you should install
+ the VSCode YAML extension \cite{vscode-yaml-extentions};
+ \item set up your \texttt{settings.json} file using the directory you saved the file by
+ adapting \cref{lst:settings.json}; on my Ubuntu laptop this file lives at
+ \texttt{/home/cmhughes/.config/Code/User/settings.json}.
+ \end{enumerate}
+
+ \begin{widepage}
+ \cmhlistingsfromfile{demonstrations/settings.json}[yaml-TCB]{\texttt{settings.json}}{lst:settings.json}
+ \end{widepage}
+
+ Alternatively, if you would prefer not to download the json file, you might be able to
+ use an adapted version of \cref{lst:settings-alt.json}.
+
+ \begin{widepage}
+ \cmhlistingsfromfile{demonstrations/settings-alt.json}[yaml-TCB]{\texttt{settings-alt.json}}{lst:settings-alt.json}
+ \end{widepage}
+
+ Finally, if your TeX distribution is up to date, then
+ \texttt{latexindent-yaml-schema.json} \emph{should} be in the documentation folder of
+ your installation, so an adapted version of \cref{lst:settings-alt1.json} may work.
+
+ \begin{widepage}
+ \cmhlistingsfromfile{demonstrations/settings-alt1.json}[yaml-TCB]{\texttt{settings-alt1.json}}{lst:settings-alt1.json}
+ \end{widepage}
+
+ If you have details of how to implement this schema in other editors, please feel
+ encouraged to contribute to this documentation.
+
+ \section{Using conda}\label{sec:app:conda}
+ If you use conda you'll only need
+ \begin{commandshell}
+conda install latexindent.pl -c conda-forge
+\end{commandshell}
+ This will install the executable and all its dependencies (including perl) in the
+ activate environment. You don't even have to worry about \texttt{defaultSettings.yaml} as
+ it included too, you can thus skip \cref{sec:requiredmodules,sec:updating-path}.
+ \index{conda}
+
+ You can get a conda installation for example from \cite{conda} or from \cite{anacoda}.
+
+ \subsection{Sample conda installation on Ubuntu}
+ On Ubuntu I followed the 64-bit installation instructions at \cite{condainstallubuntu}
+ and then I ran the following commands:
+ \begin{commandshell}
+conda create -n latexindent.pl
+conda activate latexindent.pl
+conda install latexindent.pl -c conda-forge
+conda info --envs
+conda list
+conda run latexindent.pl -vv
+\end{commandshell}
+ I found the details given at \cite{condainstallhelp} to be helpful.
+
+ \section{Using docker}\label{sec:app:docker}
+ If you use docker you'll only need \announce{2022-06-12}{docker support}
+ \begin{commandshell}
+docker pull ghcr.io/cmhughes/latexindent.pl
+\end{commandshell}
+ This will download the image packed \texttt{latexindent}'s executable and its all
+ dependencies. \index{docker} Thank you to \cite{eggplants} for contributing this feature;
+ see also \cite{cmhughesio}. For reference, \emph{ghcr} stands for \emph{GitHub Container
+ Repository}.
+
+ \subsection{Sample docker installation on Ubuntu}
+ To pull the image and show \texttt{latexindent}'s help on Ubuntu:
+
+ \begin{cmhlistings}*[style=tcblatex,language=Bash]{\texttt{docker-install.sh}}{lst:docker-install}
+# setup docker if not already installed
+if ! command -v docker &> /dev/null; then
+ sudo apt install docker.io -y
+ sudo groupadd docker
+ sudo gpasswd -a "$USER" docker
+ sudo systemctl restart docker
+fi
+
+# download image and execute
+docker pull ghcr.io/cmhughes/latexindent.pl
+docker run ghcr.io/cmhughes/latexindent.pl -h
+\end{cmhlistings}
+
+ \subsection{How to format on Docker}
+ When you use \texttt{latexindent} with the docker image, you have to mount target \texttt{tex} file like this:
+ \begin{commandshell}
+docker run -v /path/to/local/myfile.tex:/myfile.tex ghcr.io/cmhughes/latexindent.pl -s -w myfile.tex
+\end{commandshell}
+
+ \section{pre-commit}
+
+ Users of \texttt{.git} may be interested \announce{2022-01-21}{pre-commit for
+ latexindent.pl} in exploring the \texttt{pre-commit} tool \cite{pre-commithome}, which is
+ supported by \texttt{latexindent.pl}. Thank you to \cite{tdegeusprecommit} for
+ contributing this feature, and to \cite{holzhausprecommit} for their contribution to it.
+
+ To use the \texttt{pre-commit} tool, you will need to install \texttt{pre-commit}; sample
+ instructions for Ubuntu are given in \cref{sec:pre-commit-ubuntu}. Once installed, there
+ are two ways to use \texttt{pre-commit}: using \texttt{CPAN} or using \texttt{conda},
+ detailed in \cref{sec:pre-commit-cpan} and \cref{sec:pre-commit-conda} respectively.
+
+ \subsection{Sample pre-commit installation on Ubuntu}\label{sec:pre-commit-ubuntu}
+ On Ubuntu I ran the following command:
+ \begin{commandshell}
+python3 -m pip install pre-commit
+\end{commandshell}
+ I then updated my path via .bashrc so that it includes the line in
+ \cref{lst:bashrc-update}.
+ \begin{cmhlistings}[style=tcblatex,language=Bash]{\texttt{.bashrc} update}{lst:bashrc-update}
+...
+export PATH=$PATH:/home/cmhughes/.local/bin
+\end{cmhlistings}
+
+ \subsection{pre-commit defaults}
+ The default values that are employed by \texttt{pre-commit} are shown in \cref{lst:.pre-commit-yaml-default}.
+ \index{pre-commit!default}
+
+ \cmhlistingsfromfile{../.pre-commit-hooks.yaml}[yaml-TCB]{\texttt{.pre-commit-hooks.yaml} (default)}{lst:.pre-commit-yaml-default}
+
+ In particular, the decision has deliberately been made (in collaboration with
+ \cite{holzhausprecommit}) to have the default to employ the following switches:
+ \texttt{overwriteIfDifferent}, \texttt{silent}, \texttt{local}; this is detailed in the
+ lines that specify \texttt{args} in \cref{lst:.pre-commit-yaml-default}.
+
+ \index{pre-commit!warning}
+ \index{warning!pre-commit}
+ \begin{warning}
+ Users of \texttt{pre-commit} will, by default, have the \texttt{overwriteIfDifferent}
+ switch employed. It is assumed that such users have version control in place, and are
+ intending to overwrite their files.
+ \end{warning}
+
+ \subsection{pre-commit using CPAN}\label{sec:pre-commit-cpan}
+
+ To use \texttt{latexindent.pl} with \texttt{pre-commit}, create the file
+ \texttt{.pre-commit-config.yaml} given in \cref{lst:.pre-commit-config.yaml-cpan} in your
+ git-repository. \index{cpan} \index{git} \index{pre-commit!cpan}
+
+ \cmhlistingsfromfile{demonstrations/pre-commit-config-cpan.yaml}[yaml-TCB]{\texttt{.pre-commit-config.yaml} (cpan)}{lst:.pre-commit-config.yaml-cpan}
+ Once created, you should then be able to run the following command:
+ \begin{commandshell}
+pre-commit run --all-files
+\end{commandshell}
+ A few notes about \cref{lst:.pre-commit-config.yaml-cpan}:
+ \begin{itemize}
+ \item the settings given in \cref{lst:.pre-commit-config.yaml-cpan} instruct
+ \texttt{pre-commit} to use \texttt{CPAN} to get dependencies;
+ \item this requires \texttt{pre-commit} and \texttt{perl} to be installed on your system;
+ \item the \texttt{args} lists selected command-line options; the settings in
+ \cref{lst:.pre-commit-config.yaml-cpan} are equivalent to calling
+ \begin{commandshell}
+latexindent.pl -s myfile.tex
+\end{commandshell}
+ for each \texttt{.tex} file in your repository;
+ \item to instruct \texttt{latexindent.pl} to overwrite the files in your repository, then you
+ can update \cref{lst:.pre-commit-config.yaml-cpan} so that \texttt{args: [-s, -w]}.
+ \end{itemize}
+
+ Naturally you can add options, or omit \texttt{-s} and \texttt{-w}, according to your
+ preference.
+
+ \subsection{pre-commit using conda}\label{sec:pre-commit-conda}
+
+ You can also rely on \texttt{conda} (detailed in \cref{sec:app:conda}) instead of
+ \texttt{CPAN} for all dependencies, including \texttt{latexindent.pl} itself.
+ \index{conda} \index{git} \index{pre-commit!conda}
+
+ \cmhlistingsfromfile{demonstrations/pre-commit-config-conda.yaml}[yaml-TCB]{\texttt{.pre-commit-config.yaml} (conda)}{lst:.pre-commit-config.yaml-conda}
+ Once created, you should then be able to run the following command:
+ \begin{commandshell}
+pre-commit run --all-files
+\end{commandshell}
+ A few notes about \cref{lst:.pre-commit-config.yaml-cpan}:
+ \begin{itemize}
+ \item the settings given in \cref{lst:.pre-commit-config.yaml-conda} instruct
+ \texttt{pre-commit} to use \texttt{conda} to get dependencies;
+ \item this requires \texttt{pre-commit} and \texttt{conda} to be installed on your system;
+ \item the \texttt{args} lists selected command-line options; the settings in
+ \cref{lst:.pre-commit-config.yaml-cpan} are equivalent to calling
+ \begin{commandshell}
+conda run latexindent.pl -s myfile.tex
+\end{commandshell}
+ for each \texttt{.tex} file in your repository;
+ \item to instruct \texttt{latexindent.pl} to overwrite the files in your repository, then you
+ can update \cref{lst:.pre-commit-config.yaml-cpan} so that \texttt{args: [-s, -w]}.
+ \end{itemize}
+
+ \subsection{pre-commit using docker}\label{sec:pre-commit-docker}
+
+ You can also rely on \texttt{docker} (detailed in \cref{sec:app:docker}) instead of
+ \texttt{CPAN} for all dependencies, including \texttt{latexindent.pl} itself.
+ \index{docker} \index{git} \index{pre-commit!docker}
+
+ \cmhlistingsfromfile{demonstrations/pre-commit-config-docker.yaml}[yaml-TCB]{\texttt{.pre-commit-config.yaml} (docker)}{lst:.pre-commit-config.yaml-docker}
+ Once created, you should then be able to run the following command:
+ \begin{commandshell}
+pre-commit run --all-files
+\end{commandshell}
+ A few notes about \cref{lst:.pre-commit-config.yaml-cpan}:
+ \begin{itemize}
+ \item the settings given in \cref{lst:.pre-commit-config.yaml-docker} instruct
+ \texttt{pre-commit} to use \texttt{docker} to get dependencies;
+ \item this requires \texttt{pre-commit} and \texttt{docker} to be installed on your system;
+ \item the \texttt{args} lists selected command-line options; the settings in
+ \cref{lst:.pre-commit-config.yaml-cpan} are equivalent to calling
+ \begin{commandshell}
+docker run -v /path/to/myfile.tex:/myfile.tex ghcr.io/cmhughes/latexindent.pl -s myfile.tex
+\end{commandshell}
+ for each \texttt{.tex} file in your repository;
+ \item to instruct \texttt{latexindent.pl} to overwrite the files in your repository, then you
+ can update \cref{lst:.pre-commit-config.yaml-cpan} so that \texttt{args: [-s, -w]}.
+ \end{itemize}
+
+ \subsection{pre-commit example using -l, -m switches}
+ Let's consider a small example, with local \texttt{latexindent.pl} settings in
+ \texttt{.latexindent.yaml}.
+
+ \begin{example}
+ We use the local settings given in \cref{lst:.latexindent.yaml}.
+ \begin{cmhlistings}[style=tcblatex]{\texttt{.latexindent.yaml}}{lst:.latexindent.yaml}
+onlyOneBackUp: 1
+
+modifyLineBreaks:
+ oneSentencePerLine:
+ manipulateSentences: 1
+\end{cmhlistings}
+
+ and \texttt{.pre-commit-config.yaml} as in \cref{lst:.latexindent.yaml-switches}:
+
+ \cmhlistingsfromfile{demonstrations/pre-commit-config-demo.yaml}[yaml-TCB]{\texttt{.pre-commit-config.yaml} (demo)}{lst:.latexindent.yaml-switches}
+ Now running
+ \begin{commandshell}
+pre-commit run --all-files
+\end{commandshell}
+ is equivalent to running
+ \begin{commandshell}
+latexindent.pl -l -m -s -w myfile.tex
+\end{commandshell}
+ for each \texttt{.tex} file in your repository.
+
+ A few notes about \cref{lst:.latexindent.yaml-switches}:
+ \begin{itemize}
+ \item the \texttt{-l} option was added to use the local \texttt{.latexindent.yaml} (where it
+ was specified to only create one back-up file, as \texttt{git} typically takes care of
+ this when you use \texttt{pre-commit});
+ \item \texttt{-m} to modify line breaks; in addition to \texttt{-s} to suppress command-line
+ output, and \texttt{-w} to format files in place.
+ \end{itemize}
+ \end{example}
+
+ \section{logFilePreferences}\label{app:logfile-demo}
+ \Vref{lst:logFilePreferences} describes the options for customising the information given
+ to the log file, and we provide a few demonstrations here. Let's say that we start with
+ the code given in \cref{lst:simple}, and the settings specified in
+ \cref{lst:logfile-prefs1-yaml}.
+
+ \begin{minipage}{.35\linewidth}
+ \cmhlistingsfromfile{demonstrations/simple.tex}{\texttt{simple.tex}}{lst:simple}
+ \end{minipage}
+ \hfill
+ \begin{minipage}{.6\linewidth}
+ \cmhlistingsfromfile{demonstrations/logfile-prefs1.yaml}[yaml-TCB]{\texttt{logfile-prefs1.yaml}}{lst:logfile-prefs1-yaml}
+ \end{minipage}
+
+ If we run the following command (noting that \texttt{-t} is active)
+ \begin{commandshell}
+latexindent.pl -t -l=logfile-prefs1.yaml simple.tex
+\end{commandshell}
+ then on inspection of \texttt{indent.log} we will find the snippet given in
+ \cref{lst:indentlog}.
+ \begin{cmhlistings}[style=tcblatex,morekeywords={TRACE}]{\texttt{indent.log}}{lst:indentlog}
+ +++++
+TRACE: environment found: myenv
+ No ancestors found for myenv
+ Storing settings for myenvenvironments
+ indentRulesGlobal specified (0) for environments, ...
+ Using defaultIndent for myenv
+ Putting linebreak after replacementText for myenv
+ looking for COMMANDS and key = {value}
+TRACE: Searching for commands with optional and/or mandatory arguments AND key = {value}
+ looking for SPECIAL begin/end
+TRACE: Searching myenv for special begin/end (see specialBeginEnd)
+TRACE: Searching myenv for optional and mandatory arguments
+ ... no arguments found
+ -----
+ \end{cmhlistings}
+ Notice that the information given about \texttt{myenv} is `framed' using \texttt{+++++}
+ and \lstinline!-----! respectively.
+
+ \section{Encoding indentconfig.yaml}\label{app:encoding}
+ In relation to \vref{sec:indentconfig}, Windows users that encounter encoding issues with
+ \texttt{indentconfig.yaml}, may wish to run the following command in either
+ \texttt{cmd.exe} or \texttt{powershell.exe}:
+ \begin{dosprompt}
+chcp
+ \end{dosprompt}
+ They may receive the following result
+ \begin{dosprompt}
+Active code page: 936
+ \end{dosprompt}
+ and can then use the settings given in \cref{lst:indentconfig-encoding1} within their
+ \texttt{indentconfig.yaml}, where 936 is the result of the \texttt{chcp} command.
+
+ \cmhlistingsfromfile{demonstrations/encoding1.yaml}[yaml-TCB]{\texttt{encoding} demonstration for \texttt{indentconfig.yaml}}{lst:indentconfig-encoding1}
+
+ \section{dos2unix linebreak adjustment}
+
+ \yamltitle{dos2unixlinebreaks}*{integer}
+ If you use \texttt{latexindent.pl} on a dos-based Windows file on Linux
+ \announce{2021-06-19}{dos2unix linebreaks} then you may find that trailing horizontal
+ space is not removed as you hope.
+
+ In such a case, you may wish to try setting \texttt{dos2unixlinebreaks} to 1 and
+ employing, for example, the following command.
+
+ \begin{commandshell}
+latexindent.pl -y="dos2unixlinebreaks:1" myfile.tex
+\end{commandshell}
+
+ See \cite{bersbersbers} for further dertails.
+
+ \section{Differences from Version 2.2 to 3.0}\label{app:differences}
+ There are a few (small) changes to the interface when comparing Version 2.2 to Version
+ 3.0. Explicitly, in previous versions you might have run, for example, \index{switches!-o
+ demonstration}
+ \begin{commandshell}
+latexindent.pl -o myfile.tex outputfile.tex
+\end{commandshell}
+ whereas in Version 3.0 you would run any of the following, for example,
+ \index{switches!-o demonstration}
+ \begin{commandshell}
+latexindent.pl -o=outputfile.tex myfile.tex
+latexindent.pl -o outputfile.tex myfile.tex
+latexindent.pl myfile.tex -o outputfile.tex
+latexindent.pl myfile.tex -o=outputfile.tex
+latexindent.pl myfile.tex -outputfile=outputfile.tex
+latexindent.pl myfile.tex -outputfile outputfile.tex
+\end{commandshell}
+ noting that the \emph{output} file is given \emph{next to} the \texttt{-o} switch.
+
+ The fields given in \cref{lst:obsoleteYaml} are \emph{obsolete} from Version 3.0 onwards.
+ \cmhlistingsfromfile{demonstrations/obsolete.yaml}[yaml-obsolete]{Obsolete YAML fields from Version 3.0}{lst:obsoleteYaml}
+
+ There is a slight difference when specifying indentation after headings; specifically, we
+ now write \texttt{indentAfterThisHeading} instead of \texttt{indent}. See
+ \cref{lst:indentAfterThisHeadingOld,lst:indentAfterThisHeadingNew}
+
+ \begin{minipage}{.45\textwidth}
+ \cmhlistingsfromfile{demonstrations/indentAfterThisHeadingOld.yaml}[yaml-TCB]{\texttt{indentAfterThisHeading} in Version 2.2}{lst:indentAfterThisHeadingOld}
+ \end{minipage}%
+ \hfill
+ \begin{minipage}{.45\textwidth}
+ \cmhlistingsfromfile{demonstrations/indentAfterThisHeadingNew.yaml}[yaml-TCB]{\texttt{indentAfterThisHeading} in Version 3.0}{lst:indentAfterThisHeadingNew}
+ \end{minipage}%
+
+ To specify \texttt{noAdditionalIndent} for display-math environments in Version 2.2, you
+ would write YAML as in \cref{lst:noAdditionalIndentOld}; as of Version 3.0, you would
+ write YAML as in \cref{lst:indentAfterThisHeadingNew1} or, if you're using \texttt{-m}
+ switch, \cref{lst:indentAfterThisHeadingNew2}. \index{specialBeginEnd!update to
+ displaymath V3.0}
+
+ \begin{minipage}{.45\textwidth}
+ \cmhlistingsfromfile{demonstrations/noAddtionalIndentOld.yaml}[yaml-TCB]{\texttt{noAdditionalIndent} in Version 2.2}{lst:noAdditionalIndentOld}
+ \end{minipage}%
+ \hfill
+ \begin{minipage}{.45\textwidth}
+ \cmhlistingsfromfile{demonstrations/noAddtionalIndentNew.yaml}[yaml-TCB]{\texttt{noAdditionalIndent} for \texttt{displayMath} in Version 3.0}{lst:indentAfterThisHeadingNew1}
+
+ \cmhlistingsfromfile{demonstrations/noAddtionalIndentNew1.yaml}[yaml-TCB]{\texttt{noAdditionalIndent} for \texttt{displayMath} in Version 3.0}{lst:indentAfterThisHeadingNew2}
+ \end{minipage}%
+
+ \mbox{}\hfill
+ \begin{minipage}{.25\textwidth}
+ \hrule
+
+ \hfill\itshape End\\\mbox{}\hfill\mbox{}\rlap{\hfill\includegraphics{logo}}
+
+ \end{minipage}
\end{document}
diff --git a/support/latexindent/documentation/logo.tex b/support/latexindent/documentation/logo.tex
deleted file mode 100644
index d80dfec721..0000000000
--- a/support/latexindent/documentation/logo.tex
+++ /dev/null
@@ -1,33 +0,0 @@
-% arara: pdflatex
-%
-% to create the black and white logo:
-% convert -density 1000 -colorspace GRAY logo.pdf logo-bw.pdf
-\documentclass[border=1mm]{standalone}
-
-\usepackage{tikz}
-\usetikzlibrary{matrix}
-\definecolor{harvestgold}{cmyk}{0.00, 0.05, 0.51, 0.07} %EDE275
-\definecolor{cmhgold}{cmyk}{0,0.178,0.909,0.008} %FDD017
-\definecolor{bakeoffblue}{cmyk}{0.24, 0.00, 0.02, 0.18} %9fd2cd
-\definecolor{bakeoffgreen}{cmyk}{0.30, 0.00, 0.20, 0.29} %80b692
-\definecolor{burntorange}{cmyk}{0.00, 0.41, 1.00, 0.04}
-\begin{document}
-\begin{tikzpicture}[logo/.style={draw=blue,circle,fill=white}]
- \matrix{
- \node[logo,dash pattern=on .5pt off 1.0pt,thick,draw=purple!75!white]{}; & \node[logo,draw=burntorange]{}; \\
- \node[logo,fill,draw=bakeoffgreen,fill=bakeoffblue]{}; & \node[logo,double,draw=cmhgold,fill=harvestgold]{};\\};
-\end{tikzpicture}
-\end{document}
-
-% for reference, the following puts the GitHub logo in the background; also needs
-% \usetikzlibrary{backgrounds}
-\pagecolor{white}
-\begin{tikzpicture}[logo/.style={draw=blue,circle,fill=none,fill opacity=0.75}]
- \matrix{%
- \node[logo,dash pattern=on .5pt off 1.0pt,thick,draw=purple!75!white]{}; & \node[logo,draw=burntorange]{}; \\
- \node[logo,fill,draw=bakeoffgreen,fill=bakeoffblue]{}; & \node[logo,double,draw=cmhgold,fill=harvestgold]{};\\};
- \begin{scope}[on background layer]
- %\node [yshift=0.01em,xshift=0.07em] {\resizebox{1cm}{!}{\color{gray!50!white}\faGithub}};
- \node {\resizebox{1cm}{!}{\color{gray!25!white}\faGithub}};
- \end{scope}
-\end{tikzpicture}
diff --git a/support/latexindent/documentation/sec-appendices.tex b/support/latexindent/documentation/sec-appendices.tex
deleted file mode 100644
index 84dd9d56f7..0000000000
--- a/support/latexindent/documentation/sec-appendices.tex
+++ /dev/null
@@ -1,720 +0,0 @@
-% arara: pdflatex: { files: [latexindent]}
-\appendix
- \section{Required Perl modules}\label{sec:requiredmodules}
- If you intend to use \texttt{latexindent.pl} and \emph{not} one of the supplied
- standalone executable files (\texttt{latexindent.exe} is available for Windows users
- without Perl, see \cref{subsubsec:latexindent:exe}), then you will need a few standard
- Perl modules.
-
- If you can run the minimum code in \cref{lst:helloworld} as in
- \begin{commandshell}
-perl helloworld.pl
- \end{commandshell}
- then you will be able to run \texttt{latexindent.pl}, otherwise you may need to install
- the missing modules; see \cref{sec:module-installer,sec:manual-module-instal}.
-
- \begin{cmhlistings}[style=tcblatex,language=Perl]{\texttt{helloworld.pl}}{lst:helloworld}
-#!/usr/bin/perl
-
-use strict; # |
-use warnings; # |
-use Encode; # |
-use Getopt::Long; # |
-use Data::Dumper; # these modules are
-use List::Util qw(max); # generally part
-use PerlIO::encoding; # of a default perl distribution
-use open ':std', ':encoding(UTF-8)';# |
-use Text::Wrap; # |
-use Text::Tabs; # |
-use FindBin; # |
-use File::Copy; # |
-use File::Basename; # |
-use File::HomeDir; # <--- typically requires install via cpanm
-use YAML::Tiny; # <--- typically requires install via cpanm
-
-print "hello world";
-exit;
-\end{cmhlistings}
-
- \subsection{Module installer script}\label{sec:module-installer}
- \announce{2018-01-13}{perl module helper script} \texttt{latexindent.pl} ships with a
- helper script that will install any missing \texttt{perl} modules on your system; if you
- run
- \begin{commandshell}
-perl latexindent-module-installer.pl
-\end{commandshell}
- or
- \begin{dosprompt}
-perl latexindent-module-installer.pl
- \end{dosprompt}
- then, once you have answered \texttt{Y}, the appropriate modules will be installed onto
- your distribution.
-
- \subsection{Manually installing modules}\label{sec:manual-module-instal}
- Manually installing the modules given in \cref{lst:helloworld} will vary depending on
- your operating system and \texttt{Perl} distribution.
-
- \subsubsection{Linux}
- \paragraph{perlbrew}
- Linux users may be interested in exploring Perlbrew \cite{perlbrew}; an example
- installation would be:
- \begin{commandshell}
-sudo apt-get install perlbrew
-perlbrew init
-perlbrew install perl-5.28.1
-perlbrew switch perl-5.28.1
-sudo apt-get install curl
-curl -L http://cpanmin.us | perl - App::cpanminus
-cpanm YAML::Tiny
-cpanm File::HomeDir
-\end{commandshell}
- \index{cpan}
-
- \paragraph{Ubuntu/Debian}
- For other distributions, the Ubuntu/Debian approach may work as follows
- \begin{commandshell}
-sudo apt install perl
-sudo cpan -i App::cpanminus
-sudo cpanm YAML::Tiny
-sudo cpanm File::HomeDir
-\end{commandshell}
- or else by running, for example,
- \begin{commandshell}
-sudo perl -MCPAN -e'install "File::HomeDir"'
-\end{commandshell}
-
- \paragraph{Ubuntu: using the texlive from apt-get}
- Ubuntu users that install texlive using \texttt{apt-get} as in the following
- \begin{commandshell}
-sudo apt install texlive
-sudo apt install texlive-latex-recommended
-\end{commandshell}
- may need the following additional command to work with \texttt{latexindent.pl}
- \begin{commandshell}
-sudo apt install texlive-extra-utils
-\end{commandshell}
- \paragraph{Arch-based distributions}
- First install the dependencies
- \begin{commandshell}
-sudo pacman -S perl cpanminus
-\end{commandshell}
- then run the latexindent-module-installer.pl file located at helper-scripts/
-
- \paragraph{Alpine}
- If you are using Alpine, some \texttt{Perl} modules are not build-compatible with Alpine,
- but replacements are available through \texttt{apk}. For example, you might use the
- commands given in \cref{lst:alpine-install}; thanks to \cite{jun-sheaf} for providing
- these details.
-
- \begin{cmhlistings}[style=tcblatex,language=Bash]{\texttt{alpine-install.sh}}{lst:alpine-install}
-# Installing perl
-apk --no-cache add miniperl perl-utils
-
-# Installing incompatible latexindent perl dependencies via apk
-apk --no-cache add \
- perl-log-dispatch \
- perl-namespace-autoclean \
- perl-specio \
- perl-unicode-linebreak
-
-# Installing remaining latexindent perl dependencies via cpan
-apk --no-cache add curl wget make
-ls /usr/share/texmf-dist/scripts/latexindent
-cd /usr/local/bin && \
- curl -L https://cpanmin.us/ -o cpanm && \
- chmod +x cpanm
-cpanm -n App::cpanminus
-cpanm -n File::HomeDir
-cpanm -n Params::ValidationCompiler
-cpanm -n YAML::Tiny
-\end{cmhlistings}
-
- Users of NixOS might like to see
- \href{https://github.com/cmhughes/latexindent.pl/issues/222}{https://github.com/cmhughes/latexindent.pl/issues/222}
- for tips.
- \subsubsection{Mac}
- Users of the Macintosh operating system might like to explore the following commands, for
- example:
- \begin{commandshell}
-brew install perl
-brew install cpanm
-
-cpanm YAML::Tiny
-cpanm File::HomeDir
-\end{commandshell}
- Alternatively,
- \begin{commandshell}
-brew install latexindent
-\end{commandshell}
-
- \subsubsection{Windows}
- Strawberry Perl users on Windows might use \texttt{CPAN client}. All of the modules are
- readily available on CPAN \cite{cpan}.
-
- \texttt{indent.log} will contain details of the location
- of the Perl modules on your system. \texttt{latexindent.exe} is a standalone executable
- for Windows (and therefore does not require a Perl distribution) and caches copies of the
- Perl modules onto your system; if you wish to see where they are cached, use the
- \texttt{trace} option, e.g
- \begin{dosprompt}
-latexindent.exe -t myfile.tex
- \end{dosprompt}
-
- \subsection{The GCString switch}\label{subsec:the-GCString}
- If you find that the \texttt{lookForAlignDelims} (as in \cref{subsec:align-at-delimiters}) does not work correctly
- for your language, then you may with to use the \texttt{Unicode::GCString} module \announce*{2022-03-25}{Unicode::GCString}.
- \index{perl!Unicode GCString module}
- \index{switches!--GCString demonstration}
-
- This can be loaded by calling \texttt{latexindent.pl} with the \texttt{GCString} switch
- as in
- \begin{commandshell}
-latexindent.pl --GCString myfile.tex
-\end{commandshell}
- In this case, you will need to have the \texttt{Unicode::GCString} installed in your
- \texttt{perl} distribution by using, for example,
- \begin{commandshell}
-cpanm YAML::Tiny
-\end{commandshell}
-
- Note: this switch does \emph{nothing} for \texttt{latexindent.exe} which loads the module
- by default. Users of \texttt{latexindent.exe} should not see any difference in behaviour
- whether they use this switch or not, as \texttt{latexindent.exe} loads the
- \texttt{Unicode::GCString} module.
-
- \section{Updating the path variable}\label{sec:updating-path}
- \texttt{latexindent.pl} has a few scripts (available at \cite{latexindent-home}) that can
- update the \texttt{path} variables. Thank you to \cite{jasjuang} for this feature. If
- you're on a Linux or Mac machine, then you'll want \texttt{CMakeLists.txt} from
- \cite{latexindent-home}.
- \subsection{Add to path for Linux}
- To add \texttt{latexindent.pl} to the path for Linux, follow these steps:
- \begin{enumerate}
- \item download \texttt{latexindent.pl} and its associated modules,
- \texttt{defaultSettings.yaml}, to your chosen directory from \cite{latexindent-home} ;
- \item within your directory, create a directory called \texttt{path-helper-files} and download
- \texttt{CMakeLists.txt} and \lstinline!cmake_uninstall.cmake.in! from
- \cite{latexindent-home}/path-helper-files to this directory;
- \item run
- \begin{commandshell}
-ls /usr/local/bin
-\end{commandshell}
- to see what is \emph{currently} in there;
- \item run the following commands
- \begin{commandshell}
-sudo apt-get update
-sudo apt-get install --no-install-recommends cmake make # or any other generator
-mkdir build && cd build
-cmake ../path-helper-files
-sudo make install
-\end{commandshell}
- \item run
- \begin{commandshell}
-ls /usr/local/bin
-\end{commandshell}
- again to check that \texttt{latexindent.pl}, its modules and
- \texttt{defaultSettings.yaml} have been added.
- \end{enumerate}
- To \emph{remove} the files, run
- \begin{commandshell}
-sudo make uninstall
-\end{commandshell}
- \subsection{Add to path for Windows}
- To add \texttt{latexindent.exe} to the path for Windows, follow these steps:
- \begin{enumerate}
- \item download \texttt{latexindent.exe}, \texttt{defaultSettings.yaml},
- \texttt{add-to-path.bat} from \cite{latexindent-home} to your chosen directory;
- \item open a command prompt and run the following command to see what is \emph{currently} in
- your \lstinline!%path%! variable;
- \begin{dosprompt}
-echo %path%
- \end{dosprompt}
- \item right click on \texttt{add-to-path.bat} and \emph{Run as administrator};
- \item log out, and log back in;
- \item open a command prompt and run
- \begin{dosprompt}
-echo %path%
- \end{dosprompt}
- to check that the appropriate directory has been added to your \lstinline!%path%!.
- \end{enumerate}
- To \emph{remove} the directory from your \lstinline!%path%!, run
- \texttt{remove-from-path.bat} as administrator.
-
- \section{Batches of files}\label{sec:batches}
-
- You can \announce*{2022-03-25}{batches of files details} instruct \texttt{latexindent.pl}
- to operate on multiple files. For example, the following calls are all valid
- \begin{commandshell}
-latexindent.pl myfile1.tex
-latexindent.pl myfile1.tex myfile2.tex
-latexindent.pl myfile*.tex
- \end{commandshell}
-
- We note the following features of the script in relation to the switches detailed in
- \cref{sec:how:to:use}.
-
- \subsection{location of indent.log}
- If the \texttt{-c} switch is \emph{not} active, then \texttt{indent.log} goes to the directory of the final file called.
-
- If the \texttt{-c} switch \emph{is} active, then \texttt{indent.log} goes to the
- specified directory.
-
- \subsection{interaction with -w switch}
- If the \texttt{-w} switch is active, as in
- \begin{commandshell}
-latexindent.pl -w myfile*.tex
-\end{commandshell}
- then files will be overwritten individually. Back-up files can be re-directed via the
- \texttt{-c} switch.
-
- \subsection{interaction with -o switch}
- If \texttt{latexindent.pl} is called using the \texttt{-o} switch as in
- \begin{commandshell}
-latexindent.pl myfile*.tex -o=my-output-file.tex
- \end{commandshell}
- and there are multiple files to operate upon, then the \texttt{-o} switch is ignored
- because there is only \emph{one} output file specified.
-
- More generally, if the \texttt{-o} switch does \emph{not} have a \texttt{+} symbol at the
- beginning, then the \texttt{-o} switch will be ignored, and is turned it off.
-
- For example
- \begin{commandshell}
-latexindent.pl myfile*.tex -o=+myfile
-\end{commandshell}
- \emph{will} work fine because \emph{each} \texttt{.tex} file will output to
- \texttt{<basename>myfile.tex}
-
- Similarly,
- \begin{commandshell}
-latexindent.pl myfile*.tex -o=++
-\end{commandshell}
- \emph{will} work because the `existence check/incrementation' routine will be applied.
-
- \subsection{interaction with lines switch}
- This behaves as expected by attempting to operate on the line numbers specified for each file. See
- the examples in \cref{sec:line-switch}.
-
- \subsection{interaction with check switches}
- The exit codes for \texttt{latexindent.pl} are given in \vref{tab:exit-codes}.
-
- When operating on multiple files with the check switch active, as in
- \begin{commandshell}
-latexindent.pl myfile*.tex --check
- \end{commandshell}
- then
- \begin{itemize}
- \item exit code 0 means that the text from \emph{none} of the files has been changed;
- \item exit code 1 means that the text from \emph{at least one} of the files been file changed.
- \end{itemize}
-
- The interaction with \texttt{checkv} switch is as in the check switch, but with verbose
- output.
-
- \subsection{when a file does not exist}
- What happens if one of the files can not be operated upon?
- \begin{itemize}
- \item if at least one of the files does not exist and \texttt{latexindent.pl} has been called
- to act upon multiple files, then the exit code is 3; note that \texttt{latexindent.pl}
- will try to operate on each file that it is called upon, and will not exit with a fatal
- message in this case;
- \item if at least one of the files can not be read and \texttt{latexindent.pl} has been called
- to act upon multiple files, then the exit code is 4; note that \texttt{latexindent.pl}
- will try to operate on each file that it is called upon, and will not exit with a fatal
- message in this case;
- \item if \texttt{latexindent.pl} has been told to operate on multiple files, and some do not
- exist and some cannot be read, then the exit code will be either 3 or 4, depending upon
- which it scenario it encountered most recently.
- \end{itemize}
-
- \section{latexindent-yaml-schema.json}
-
- \texttt{latexindent.pl}
- \announce{2022-01-02}{latexindent-yaml-schema.json} ships with
- \texttt{latexindent-yaml-schema.json}
- which might help you when constructing your YAML files.
- \index{json!schema for YAML files}
-
- \subsection{VSCode demonstration}
- To use \texttt{latexindent-yaml-schema.json} with \texttt{VSCode}, you can use the
- following steps: \index{VSCode} \index{json!VSCode}
- \begin{enumerate}
- \item download \texttt{latexindent-yaml-schema.json} from the \texttt{documentation} folder of
- \cite{latexindent-home}, save it in whichever directory you would like, noting it for
- reference;
- \item following the instructions from \cite{vscode-yaml-demo}, for example, you should install
- the VSCode YAML extension \cite{vscode-yaml-extentions};
- \item set up your \texttt{settings.json} file using the directory you saved the file by
- adapting \cref{lst:settings.json}; on my Ubuntu laptop this file lives at
- \texttt{/home/cmhughes/.config/Code/User/settings.json}.
- \end{enumerate}
-
- \begin{widepage}
- \cmhlistingsfromfile{demonstrations/settings.json}[yaml-TCB]{\texttt{settings.json}}{lst:settings.json}
- \end{widepage}
-
- Alternatively, if you would prefer not to download the json file, you might be able to
- use an adapted version of \cref{lst:settings-alt.json}.
-
- \begin{widepage}
- \cmhlistingsfromfile{demonstrations/settings-alt.json}[yaml-TCB]{\texttt{settings-alt.json}}{lst:settings-alt.json}
- \end{widepage}
-
- Finally, if your TeX distribution is up to date, then
- \texttt{latexindent-yaml-schema.json} \emph{should} be in the documentation folder of
- your installation, so an adapted version of \cref{lst:settings-alt1.json} may work.
-
- \begin{widepage}
- \cmhlistingsfromfile{demonstrations/settings-alt1.json}[yaml-TCB]{\texttt{settings-alt1.json}}{lst:settings-alt1.json}
- \end{widepage}
-
- If you have details of how to implement this schema in other editors, please feel
- encouraged to contribute to this documentation.
-
- \section{Using conda}\label{sec:app:conda}
- If you use conda you'll only need
- \begin{commandshell}
-conda install latexindent.pl -c conda-forge
-\end{commandshell}
- This will install the executable and all its dependencies (including perl) in the
- activate environment. You don't even have to worry about \texttt{defaultSettings.yaml} as
- it included too, you can thus skip \cref{sec:requiredmodules,sec:updating-path}.
- \index{conda}
-
- You can get a conda installation for example from \cite{conda} or from \cite{anacoda}.
-
- \subsection{Sample conda installation on Ubuntu}
- On Ubuntu I followed the 64-bit installation instructions at \cite{condainstallubuntu}
- and then I ran the following commands:
- \begin{commandshell}
-conda create -n latexindent.pl
-conda activate latexindent.pl
-conda install latexindent.pl -c conda-forge
-conda info --envs
-conda list
-conda run latexindent.pl -vv
-\end{commandshell}
- I found the details given at \cite{condainstallhelp} to be helpful.
-
- \section{Using docker}\label{sec:app:docker}
- If you use docker you'll only need \announce*{2022-06-12}{docker support}
- \begin{commandshell}
-docker pull ghcr.io/cmhughes/latexindent.pl
-\end{commandshell}
- This will download the image packed \texttt{latexindent}'s executable and its all
- dependencies. \index{docker} Thank you to \cite{eggplants} for contributing this feature;
- see also \cite{cmhughesio}. For reference, \emph{ghcr} stands for \emph{GitHub Container
- Repository}.
-
- \subsection{Sample docker installation on Ubuntu}
- To pull the image and show \texttt{latexindent}'s help on Ubuntu:
-
- \begin{cmhlistings}*[style=tcblatex,language=Bash]{\texttt{docker-install.sh}}{lst:docker-install}
-# setup docker if not already installed
-if ! command -v docker &> /dev/null; then
- sudo apt install docker.io -y
- sudo groupadd docker
- sudo gpasswd -a "$USER" docker
- sudo systemctl restart docker
-fi
-
-# download image and execute
-docker pull ghcr.io/cmhughes/latexindent.pl
-docker run ghcr.io/cmhughes/latexindent.pl -h
-\end{cmhlistings}
-
- \subsection{How to format on Docker}
- When you use \texttt{latexindent} with the docker image, you have to mount target \texttt{tex} file like this:
- \begin{commandshell}
-docker run -v /path/to/local/myfile.tex:/myfile.tex ghcr.io/cmhughes/latexindent.pl -s -w myfile.tex
-\end{commandshell}
-
- \section{pre-commit}
-
- Users of \texttt{.git} may be interested \announce{2022-01-21}{pre-commit for
- latexindent.pl} in exploring the \texttt{pre-commit} tool \cite{pre-commithome}, which is
- supported by \texttt{latexindent.pl}. Thank you to \cite{tdegeusprecommit} for
- contributing this feature, and to \cite{holzhausprecommit} for their contribution to it.
-
- To use the \texttt{pre-commit} tool, you will need to install \texttt{pre-commit}; sample
- instructions for Ubuntu are given in \cref{sec:pre-commit-ubuntu}. Once installed, there
- are two ways to use \texttt{pre-commit}: using \texttt{CPAN} or using \texttt{conda},
- detailed in \cref{sec:pre-commit-cpan} and \cref{sec:pre-commit-conda} respectively.
-
- \subsection{Sample pre-commit installation on Ubuntu}\label{sec:pre-commit-ubuntu}
- On Ubuntu I ran the following command:
- \begin{commandshell}
-python3 -m pip install pre-commit
-\end{commandshell}
- I then updated my path via .bashrc so that it includes the line in
- \cref{lst:bashrc-update}.
- \begin{cmhlistings}[style=tcblatex,language=Bash]{\texttt{.bashrc} update}{lst:bashrc-update}
-...
-export PATH=$PATH:/home/cmhughes/.local/bin
-\end{cmhlistings}
-
- \subsection{pre-commit defaults}
- The default values that are employed by \texttt{pre-commit} are shown in \cref{lst:.pre-commit-yaml-default}.
- \index{pre-commit!default}
-
- \cmhlistingsfromfile*{../.pre-commit-hooks.yaml}[yaml-TCB]{\texttt{.pre-commit-hooks.yaml} (default)}{lst:.pre-commit-yaml-default}
-
- In particular, the decision has deliberately been made (in collaboration with
- \cite{holzhausprecommit}) to have the default to employ the following switches:
- \texttt{overwriteIfDifferent}, \texttt{silent}, \texttt{local}; this is detailed in the
- lines that specify \texttt{args} in \cref{lst:.pre-commit-yaml-default}.
-
- \index{pre-commit!warning}
- \index{warning!pre-commit}
- \begin{warning}
- Users of \texttt{pre-commit} will, by default, have the \texttt{overwriteIfDifferent}
- switch employed. It is assumed that such users have version control in place, and are
- intending to overwrite their files.
- \end{warning}
-
- \subsection{pre-commit using CPAN}\label{sec:pre-commit-cpan}
-
- To use \texttt{latexindent.pl} with \texttt{pre-commit}, create the file
- \texttt{.pre-commit-config.yaml} given in \cref{lst:.pre-commit-config.yaml-cpan} in your
- git-repository. \index{cpan} \index{git} \index{pre-commit!cpan}
-
- \cmhlistingsfromfile{demonstrations/pre-commit-config-cpan.yaml}[yaml-TCB]{\texttt{.pre-commit-config.yaml} (cpan)}{lst:.pre-commit-config.yaml-cpan}
- Once created, you should then be able to run the following command:
- \begin{commandshell}
-pre-commit run --all-files
-\end{commandshell}
- A few notes about \cref{lst:.pre-commit-config.yaml-cpan}:
- \begin{itemize}
- \item the settings given in \cref{lst:.pre-commit-config.yaml-cpan} instruct
- \texttt{pre-commit} to use \texttt{CPAN} to get dependencies;
- \item this requires \texttt{pre-commit} and \texttt{perl} to be installed on your system;
- \item the \texttt{args} lists selected command-line options; the settings in
- \cref{lst:.pre-commit-config.yaml-cpan} are equivalent to calling
- \begin{commandshell}
-latexindent.pl -s myfile.tex
-\end{commandshell}
- for each \texttt{.tex} file in your repository;
- \item to instruct \texttt{latexindent.pl} to overwrite the files in your repository, then you
- can update \cref{lst:.pre-commit-config.yaml-cpan} so that \texttt{args: [-s, -w]}.
- \end{itemize}
-
- Naturally you can add options, or omit \texttt{-s} and \texttt{-w}, according to your
- preference.
-
- \subsection{pre-commit using conda}\label{sec:pre-commit-conda}
-
- You can also rely on \texttt{conda} (detailed in \cref{sec:app:conda}) instead of
- \texttt{CPAN} for all dependencies, including \texttt{latexindent.pl} itself.
- \index{conda} \index{git} \index{pre-commit!conda}
-
- \cmhlistingsfromfile{demonstrations/pre-commit-config-conda.yaml}[yaml-TCB]{\texttt{.pre-commit-config.yaml} (conda)}{lst:.pre-commit-config.yaml-conda}
- Once created, you should then be able to run the following command:
- \begin{commandshell}
-pre-commit run --all-files
-\end{commandshell}
- A few notes about \cref{lst:.pre-commit-config.yaml-cpan}:
- \begin{itemize}
- \item the settings given in \cref{lst:.pre-commit-config.yaml-conda} instruct
- \texttt{pre-commit} to use \texttt{conda} to get dependencies;
- \item this requires \texttt{pre-commit} and \texttt{conda} to be installed on your system;
- \item the \texttt{args} lists selected command-line options; the settings in
- \cref{lst:.pre-commit-config.yaml-cpan} are equivalent to calling
- \begin{commandshell}
-conda run latexindent.pl -s myfile.tex
-\end{commandshell}
- for each \texttt{.tex} file in your repository;
- \item to instruct \texttt{latexindent.pl} to overwrite the files in your repository, then you
- can update \cref{lst:.pre-commit-config.yaml-cpan} so that \texttt{args: [-s, -w]}.
- \end{itemize}
-
- \subsection{pre-commit using docker}\label{sec:pre-commit-docker}
-
- You can also rely on \texttt{docker} (detailed in \cref{sec:app:docker}) instead of
- \texttt{CPAN} for all dependencies, including \texttt{latexindent.pl} itself.
- \index{docker} \index{git} \index{pre-commit!docker}
-
- \cmhlistingsfromfile*{demonstrations/pre-commit-config-docker.yaml}[yaml-TCB]{\texttt{.pre-commit-config.yaml} (docker)}{lst:.pre-commit-config.yaml-docker}
- Once created, you should then be able to run the following command:
- \begin{commandshell}
-pre-commit run --all-files
-\end{commandshell}
- A few notes about \cref{lst:.pre-commit-config.yaml-cpan}:
- \begin{itemize}
- \item the settings given in \cref{lst:.pre-commit-config.yaml-docker} instruct
- \texttt{pre-commit} to use \texttt{docker} to get dependencies;
- \item this requires \texttt{pre-commit} and \texttt{docker} to be installed on your system;
- \item the \texttt{args} lists selected command-line options; the settings in
- \cref{lst:.pre-commit-config.yaml-cpan} are equivalent to calling
- \begin{commandshell}
-docker run -v /path/to/myfile.tex:/myfile.tex ghcr.io/cmhughes/latexindent.pl -s myfile.tex
-\end{commandshell}
- for each \texttt{.tex} file in your repository;
- \item to instruct \texttt{latexindent.pl} to overwrite the files in your repository, then you
- can update \cref{lst:.pre-commit-config.yaml-cpan} so that \texttt{args: [-s, -w]}.
- \end{itemize}
-
- \subsection{pre-commit example using -l, -m switches}
- Let's consider a small example, with local \texttt{latexindent.pl} settings in
- \texttt{.latexindent.yaml}.
-
- \begin{example}
- We use the local settings given in \cref{lst:.latexindent.yaml}.
- \begin{cmhlistings}[style=tcblatex]{\texttt{.latexindent.yaml}}{lst:.latexindent.yaml}
-onlyOneBackUp: 1
-
-modifyLineBreaks:
- oneSentencePerLine:
- manipulateSentences: 1
-\end{cmhlistings}
-
- and \texttt{.pre-commit-config.yaml} as in \cref{lst:.latexindent.yaml-switches}:
-
- \cmhlistingsfromfile{demonstrations/pre-commit-config-demo.yaml}[yaml-TCB]{\texttt{.pre-commit-config.yaml} (demo)}{lst:.latexindent.yaml-switches}
- Now running
- \begin{commandshell}
-pre-commit run --all-files
-\end{commandshell}
- is equivalent to running
- \begin{commandshell}
-latexindent.pl -l -m -s -w myfile.tex
-\end{commandshell}
- for each \texttt{.tex} file in your repository.
-
- A few notes about \cref{lst:.latexindent.yaml-switches}:
- \begin{itemize}
- \item the \texttt{-l} option was added to use the local \texttt{.latexindent.yaml} (where it
- was specified to only create one back-up file, as \texttt{git} typically takes care of
- this when you use \texttt{pre-commit});
- \item \texttt{-m} to modify line breaks; in addition to \texttt{-s} to suppress command-line
- output, and \texttt{-w} to format files in place.
- \end{itemize}
- \end{example}
-
- \section{logFilePreferences}\label{app:logfile-demo}
- \Vref{lst:logFilePreferences} describes the options for customising the information given
- to the log file, and we provide a few demonstrations here. Let's say that we start with
- the code given in \cref{lst:simple}, and the settings specified in
- \cref{lst:logfile-prefs1-yaml}.
-
- \begin{minipage}{.35\linewidth}
- \cmhlistingsfromfile{demonstrations/simple.tex}{\texttt{simple.tex}}{lst:simple}
- \end{minipage}
- \hfill
- \begin{minipage}{.6\linewidth}
- \cmhlistingsfromfile{demonstrations/logfile-prefs1.yaml}[yaml-TCB]{\texttt{logfile-prefs1.yaml}}{lst:logfile-prefs1-yaml}
- \end{minipage}
-
- If we run the following command (noting that \texttt{-t} is active)
- \begin{commandshell}
-latexindent.pl -t -l=logfile-prefs1.yaml simple.tex
-\end{commandshell}
- then on inspection of \texttt{indent.log} we will find the snippet given in
- \cref{lst:indentlog}.
- \begin{cmhlistings}[style=tcblatex,morekeywords={TRACE}]{\texttt{indent.log}}{lst:indentlog}
- +++++
-TRACE: environment found: myenv
- No ancestors found for myenv
- Storing settings for myenvenvironments
- indentRulesGlobal specified (0) for environments, ...
- Using defaultIndent for myenv
- Putting linebreak after replacementText for myenv
- looking for COMMANDS and key = {value}
-TRACE: Searching for commands with optional and/or mandatory arguments AND key = {value}
- looking for SPECIAL begin/end
-TRACE: Searching myenv for special begin/end (see specialBeginEnd)
-TRACE: Searching myenv for optional and mandatory arguments
- ... no arguments found
- -----
- \end{cmhlistings}
- Notice that the information given about \texttt{myenv} is `framed' using \texttt{+++++}
- and \lstinline!-----! respectively.
-
- \section{Encoding indentconfig.yaml}\label{app:encoding}
- In relation to \vref{sec:indentconfig}, Windows users that encounter encoding issues with
- \texttt{indentconfig.yaml}, may wish to run the following command in either
- \texttt{cmd.exe} or \texttt{powershell.exe}:
- \begin{dosprompt}
-chcp
- \end{dosprompt}
- They may receive the following result
- \begin{dosprompt}
-Active code page: 936
- \end{dosprompt}
- and can then use the settings given in \cref{lst:indentconfig-encoding1} within their
- \texttt{indentconfig.yaml}, where 936 is the result of the \texttt{chcp} command.
-
- \cmhlistingsfromfile{demonstrations/encoding1.yaml}[yaml-TCB]{\texttt{encoding} demonstration for \texttt{indentconfig.yaml}}{lst:indentconfig-encoding1}
-
- \section{dos2unix linebreak adjustment}
-
- \yamltitle{dos2unixlinebreaks}*{integer}
- If you use \texttt{latexindent.pl} on a dos-based Windows file on Linux
- \announce{2021-06-19}{dos2unix linebreaks} then you may find that trailing horizontal
- space is not removed as you hope.
-
- In such a case, you may wish to try setting \texttt{dos2unixlinebreaks} to 1 and
- employing, for example, the following command.
-
- \begin{commandshell}
-latexindent.pl -y="dos2unixlinebreaks:1" myfile.tex
-\end{commandshell}
-
- See \cite{bersbersbers} for further dertails.
-
- \section{Differences from Version 2.2 to 3.0}\label{app:differences}
- There are a few (small) changes to the interface when comparing Version 2.2 to Version
- 3.0. Explicitly, in previous versions you might have run, for example, \index{switches!-o
- demonstration}
- \begin{commandshell}
-latexindent.pl -o myfile.tex outputfile.tex
-\end{commandshell}
- whereas in Version 3.0 you would run any of the following, for example,
- \index{switches!-o demonstration}
- \begin{commandshell}
-latexindent.pl -o=outputfile.tex myfile.tex
-latexindent.pl -o outputfile.tex myfile.tex
-latexindent.pl myfile.tex -o outputfile.tex
-latexindent.pl myfile.tex -o=outputfile.tex
-latexindent.pl myfile.tex -outputfile=outputfile.tex
-latexindent.pl myfile.tex -outputfile outputfile.tex
-\end{commandshell}
- noting that the \emph{output} file is given \emph{next to} the \texttt{-o} switch.
-
- The fields given in \cref{lst:obsoleteYaml} are \emph{obsolete} from Version 3.0 onwards.
- \cmhlistingsfromfile{demonstrations/obsolete.yaml}[yaml-obsolete]{Obsolete YAML fields from Version 3.0}{lst:obsoleteYaml}
-
- There is a slight difference when specifying indentation after headings; specifically, we
- now write \texttt{indentAfterThisHeading} instead of \texttt{indent}. See
- \cref{lst:indentAfterThisHeadingOld,lst:indentAfterThisHeadingNew}
-
- \begin{minipage}{.45\textwidth}
- \cmhlistingsfromfile{demonstrations/indentAfterThisHeadingOld.yaml}[yaml-TCB]{\texttt{indentAfterThisHeading} in Version 2.2}{lst:indentAfterThisHeadingOld}
- \end{minipage}%
- \hfill
- \begin{minipage}{.45\textwidth}
- \cmhlistingsfromfile{demonstrations/indentAfterThisHeadingNew.yaml}[yaml-TCB]{\texttt{indentAfterThisHeading} in Version 3.0}{lst:indentAfterThisHeadingNew}
- \end{minipage}%
-
- To specify \texttt{noAdditionalIndent} for display-math environments in Version 2.2, you
- would write YAML as in \cref{lst:noAdditionalIndentOld}; as of Version 3.0, you would
- write YAML as in \cref{lst:indentAfterThisHeadingNew1} or, if you're using \texttt{-m}
- switch, \cref{lst:indentAfterThisHeadingNew2}. \index{specialBeginEnd!update to
- displaymath V3.0}
-
- \begin{minipage}{.45\textwidth}
- \cmhlistingsfromfile{demonstrations/noAddtionalIndentOld.yaml}[yaml-TCB]{\texttt{noAdditionalIndent} in Version 2.2}{lst:noAdditionalIndentOld}
- \end{minipage}%
- \hfill
- \begin{minipage}{.45\textwidth}
- \cmhlistingsfromfile{demonstrations/noAddtionalIndentNew.yaml}[yaml-TCB]{\texttt{noAdditionalIndent} for \texttt{displayMath} in Version 3.0}{lst:indentAfterThisHeadingNew1}
-
- \cmhlistingsfromfile{demonstrations/noAddtionalIndentNew1.yaml}[yaml-TCB]{\texttt{noAdditionalIndent} for \texttt{displayMath} in Version 3.0}{lst:indentAfterThisHeadingNew2}
- \end{minipage}%
-
- \mbox{}\hfill
- \begin{minipage}{.25\textwidth}
- \hrule
-
- \hfill\itshape End\\\mbox{}\hfill\mbox{}\rlap{\hfill\includegraphics{logo}}
-
- \end{minipage}
diff --git a/support/latexindent/documentation/sec-conclusions-know-limitations.tex b/support/latexindent/documentation/sec-conclusions-know-limitations.tex
deleted file mode 100644
index 7a45e46382..0000000000
--- a/support/latexindent/documentation/sec-conclusions-know-limitations.tex
+++ /dev/null
@@ -1,28 +0,0 @@
-% arara: pdflatex: { files: [latexindent]}
-\section{Conclusions and known limitations}\label{sec:knownlimitations}
- There are a number of known limitations of the script, and almost certainly quite a few
- that are \emph{unknown}! The known issues include:
- \begin{description}
- \item[multicolumn alignment] when working with code blocks in which multicolumn commands
- overlap, the algorithm can fail; see \vref{lst:tabular2-mod2}.
- \item[text wrap] routine operates \emph{before} indentation occurs; this means that it is
- likely that your final, indented, text wrapped text may exceed the value of
- \texttt{columns} that you specify; see \vref{subsec:textwrapping}.
- \item[efficiency] particularly when the \texttt{-m} switch is active, as this adds many checks
- and processes. The current implementation relies upon finding and storing \emph{every}
- code block (see the discussion on \cpageref{page:phases}); I hope that, in a future
- version, only \emph{nested} code blocks will need to be stored in the `packing' phase,
- and that this will improve the efficiency of the script.
- \end{description}
-
- You can run \texttt{latexindent} on any file; \announce{2019-07-13}*{ability to call
- latexindent on any file} if you don't specify an extension, then the extensions that you
- specify in \lstinline[breaklines=true]!fileExtensionPreference! (see
- \vref{lst:fileExtensionPreference}) will be consulted. If you find a case in which the
- script struggles, please feel free to report it at \cite{latexindent-home}, and in the
- meantime, consider using a \texttt{noIndentBlock} (see \cpageref{lst:noIndentBlock}).%
-
- I hope that this script is useful to some; if you find an example where the script does
- not behave as you think it should, the best way to contact me is to report an issue on
- \cite{latexindent-home}; otherwise, feel free to find me on the
- \url{http://tex.stackexchange.com/users/6621/cmhughes}.
diff --git a/support/latexindent/documentation/sec-default-user-local.tex b/support/latexindent/documentation/sec-default-user-local.tex
deleted file mode 100644
index af47092333..0000000000
--- a/support/latexindent/documentation/sec-default-user-local.tex
+++ /dev/null
@@ -1,1304 +0,0 @@
-% arara: pdflatex: { files: [latexindent]}
-\section{defaultSettings.yaml}\label{sec:defuseloc}
- \texttt{latexindent.pl} loads its settings from \texttt{defaultSettings.yaml}. The idea
- is to separate the behaviour of the script from the internal working -- this is very
- similar to the way that we separate content from form when writing our documents in
- \LaTeX.
-
- If you look in \texttt{defaultSettings.yaml} you'll find the switches that govern the
- behaviour of \texttt{latexindent.pl}. If you're not sure where
- \texttt{defaultSettings.yaml} resides on your computer, don't worry as
- \texttt{indent.log} will tell you where to find it. \texttt{defaultSettings.yaml} is
- commented, but here is a description of what each switch is designed to do. The default
- value is given in each case; whenever you see \emph{integer} in \emph{this} section,
- assume that it must be greater than or equal to \texttt{0} unless otherwise stated.
-
- For most of the settings in \texttt{defaultSettings.yaml} that are specified as integers,
- then we understand \texttt{0} to represent `off' and \texttt{1} to represent `on'. For
- fields that allow values other than \texttt{0} or \texttt{1}, it is hoped that the
- specific context and associated commentary should make it clear which values are allowed.
-
-\yamltitle{fileExtensionPreference}*{fields}
- \texttt{latexindent.pl} can be called to
- act on a file without specifying the file extension. For example we can call
- \begin{commandshell}
-latexindent.pl myfile
-\end{commandshell}
- in which case the script will look for \texttt{myfile} with the extensions specified in
- \texttt{fileExtensionPreference} in their numeric order. If no match is found, the script
- will exit. As with all of the fields, you should change and/or add to this as necessary.
-
- \cmhlistingsfromfile[style=fileExtensionPreference]{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{fileExtensionPreference}}{lst:fileExtensionPreference}
-
- Calling \texttt{latexindent.pl myfile} with the (default) settings specified in
- \cref{lst:fileExtensionPreference} means that the script will first look for
- \texttt{myfile.tex}, then \texttt{myfile.sty}, \texttt{myfile.cls}, and finally
- \texttt{myfile.bib} in order\footnote{Throughout this manual, listings shown with line
- numbers represent code taken directly from \texttt{defaultSettings.yaml}.}.
-
- \index{backup files!extension settings}
-
-\subsection{Backup and log file preferences}
-\yamltitle{backupExtension}*{extension name}
-
- If you call \texttt{latexindent.pl} with the \texttt{-w} switch (to overwrite
- \texttt{myfile.tex}) then it will create a backup file before doing any indentation; the
- default extension is \texttt{.bak}, so, for example, \texttt{myfile.bak0} would be
- created when calling \texttt{latexindent.pl myfile.tex} for the first time.
-
- By default, every time you subsequently call \texttt{latexindent.pl} with the \texttt{-w}
- to act upon \texttt{myfile.tex}, it will create successive back up files:
- \texttt{myfile.bak1}, \texttt{myfile.bak2}, etc.
-
-\yamltitle{onlyOneBackUp}*{integer}
- \label{page:onlyonebackup}
- \index{backup files!number of backup files}
- If you don't want a backup for every time that you call \texttt{latexindent.pl} (so you
- don't want \texttt{myfile.bak1}, \texttt{myfile.bak2}, etc) and you simply want
- \texttt{myfile.bak} (or whatever you chose \texttt{backupExtension} to be) then change
- \texttt{onlyOneBackUp} to \texttt{1}; the default value of \texttt{onlyOneBackUp} is
- \texttt{0}.
- \index{backup files!maximum number of backup files}
- \index{backup files!number of backup files}
-
-\yamltitle{maxNumberOfBackUps}*{integer}
- Some users may only want a finite number of backup files, say at most $3$, in which case,
- they can change this switch. The smallest value of \texttt{maxNumberOfBackUps} is $0$
- which will \emph{not} prevent backup files being made; in this case, the behaviour will
- be dictated entirely by \texttt{onlyOneBackUp}. The default value of
- \texttt{maxNumberOfBackUps} is \texttt{0}.
-
-\yamltitle{cycleThroughBackUps}*{integer}
- \index{backup files!cycle through}
- Some users may wish to cycle through backup files, by deleting the oldest backup file and
- keeping only the most recent; for example, with \texttt{maxNumberOfBackUps: 4}, and
- \texttt{cycleThroughBackUps} set to \texttt{1} then the \texttt{copy} procedure given
- below would be obeyed.
-
- \begin{commandshell}
-copy myfile.bak1 to myfile.bak0
-copy myfile.bak2 to myfile.bak1
-copy myfile.bak3 to myfile.bak2
-copy myfile.bak4 to myfile.bak3
-\end{commandshell}
- The default value of \texttt{cycleThroughBackUps} is \texttt{0}.
-
-\yamltitle{logFilePreferences}*{fields}
- \texttt{latexindent.pl} writes information to \texttt{indent.log}, some
- of which can be customized by changing \texttt{logFilePreferences}; see
- \cref{lst:logFilePreferences}. If you load your own user settings (see
- \vref{sec:indentconfig}) then \texttt{latexindent.pl} will detail them in
- \texttt{indent.log}; you can choose not to have the details logged by switching
- \texttt{showEveryYamlRead} to \texttt{0}. Once all of your settings have been loaded, you
- can see the amalgamated settings in the log file by switching
- \texttt{showAmalgamatedSettings} to \texttt{1}, if you wish.
-
- \cmhlistingsfromfile[style=logFilePreferences,]{../defaultSettings.yaml}[width=.9\linewidth,before=\centering,yaml-TCB]{\texttt{logFilePreferences}}{lst:logFilePreferences}
-
- When \announce{2018-01-13}{showDecorationStartCodeBlockTrace feature for log file} either
- of the \texttt{trace} modes (see \cpageref{page:traceswitch}) are active, you will
- receive detailed information in \texttt{indent.log}. You can specify character strings to
- appear before and after the notification of a found code block using, respectively,
- \texttt{showDecorationStartCodeBlockTrace} and
- \texttt{showDecorationFinishCodeBlockTrace}. A demonstration is given in
- \vref{app:logfile-demo}.%
-
- The log file will end with the characters given in \texttt{endLogFileWith}, and will
- report the \texttt{GitHub} address of \texttt{latexindent.pl} to the log file if
- \texttt{showGitHubInfoFooter} is set to \texttt{1}.
-
- Note: \texttt{latexindent.pl} no longer uses the \texttt{log4perl} module to handle the
- creation of the logfile. \announce{2021-03-14}*{no longer using log4perl}%
-
- Some of the options \announce{2021-06-19}*{logFilePreferences updated to include Dumper
- options} for Perl's \texttt{Dumper} module can be specified in
- \cref{lst:logFilePreferences}; see \cite{dumper} and \cite{dumperdemo} for more
- information. These options will mostly be helpful for those calling
- \texttt{latexindent.pl} with the \texttt{-tt} option described in \cref{sec:commandline}.%
-
-\subsection{Verbatim code blocks}
-\yamltitle{verbatimEnvironments}*{fields}
-
- A field that contains a list of environments that you would like left completely alone --
- no indentation will be performed on environments that you have specified in this field,
- see \cref{lst:verbatimEnvironments}. \index{verbatim!environments}
- \index{verbatim!commands}
-
- \begin{cmhtcbraster}[raster column skip=.1\linewidth]
- \cmhlistingsfromfile[style=verbatimEnvironments]{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{verbatimEnvironments}}{lst:verbatimEnvironments}
- \cmhlistingsfromfile[style=verbatimCommands]{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{verbatimCommands}}{lst:verbatimCommands}
- \end{cmhtcbraster}
-
- Note that if you put an environment in \texttt{verbatimEnvironments} and in other fields
- such as \texttt{lookForAlignDelims} or \texttt{noAdditionalIndent} then
- \texttt{latexindent.pl} will \emph{always} prioritize \texttt{verbatimEnvironments}.
-
- You can, optionally, specify \announce{2021-10-30}{verbatim name feature} the
- \texttt{verbatim} field using the \texttt{name} field which takes a regular expression as
- its argument; thank you to \cite{XuehaiPan} for contributing this feature.
-
- For demonstration, then assuming that your file contains the environments
- \texttt{latexcode}, \texttt{latexcode*}, \texttt{pythoncode} and \texttt{pythoncode*},
- then the listings given in \cref{lst:nameAsRegex1,lst:nameAsRegex2} are equivalent.
-
- \begin{cmhtcbraster}[raster column skip=.1\linewidth]
- \cmhlistingsfromfile{demonstrations/nameAsRegex1.yaml}[yaml-TCB]{\texttt{nameAsRegex1.yaml}}{lst:nameAsRegex1}
- \cmhlistingsfromfile{demonstrations/nameAsRegex2.yaml}[yaml-TCB]{\texttt{nameAsRegex2.yaml}}{lst:nameAsRegex2}
- \end{cmhtcbraster}
-
- With reference to \cref{lst:nameAsRegex2}:
- \begin{itemize}
- \item the \texttt{name} field as specified here means \emph{any word followed by the word code,
- optionally followed by *};
- \item we have used \texttt{nameAsRegex} to identify this field, but you can use any description
- you like;
- \item the \texttt{lookForThis} field is optional, and can take the values 0 (off) or 1 (on); by
- default, it is assumed to be 1 (on).
- \end{itemize}
-
-\yamltitle{verbatimCommands}*{fields}
- A field that contains a list of commands that are verbatim commands, for example
- \lstinline|\lstinline|; any commands populated in this field are protected from line
- breaking routines (only relevant if the \texttt{-m} is active, see
- \vref{sec:modifylinebreaks}).
-
- With reference to \cref{lst:verbatimCommands}, by default \texttt{latexindent.pl} looks
- for \lstinline|\verb| immediately followed by another character, and then it takes the
- body as anything up to the next occurrence of the character; this means that, for
- example, \lstinline|\verb!x+3!| is treated as a \texttt{verbatimCommands}.
-
- You can, optionally, specify \announce{2021-10-30}{verbatimCommands name feature} the
- \texttt{verbatimCommands} field using the \texttt{name} field which takes a regular
- expression as its argument; thank you to \cite{XuehaiPan} for contributing this feature.
-
- For demonstration, then assuming that your file contains the commands
- \texttt{verbinline}, \texttt{myinline} then the listings given in
- \cref{lst:nameAsRegex3,lst:nameAsRegex4} are equivalent.
-
- \begin{cmhtcbraster}[raster column skip=.1\linewidth]
- \cmhlistingsfromfile{demonstrations/nameAsRegex3.yaml}[yaml-TCB]{\texttt{nameAsRegex3.yaml}}{lst:nameAsRegex3}
- \cmhlistingsfromfile{demonstrations/nameAsRegex4.yaml}[yaml-TCB]{\texttt{nameAsRegex4.yaml}}{lst:nameAsRegex4}
- \end{cmhtcbraster}
-
- With reference to \cref{lst:nameAsRegex4}:
- \begin{itemize}
- \item the \texttt{name} field as specified here means \emph{any word followed by the word
- inline};
- \item we have used \texttt{nameAsRegex} to identify this field, but you can use any description
- you like;
- \item the \texttt{lookForThis} field is optional, and can take the values 0 (off) or 1 (on); by
- default, it is assumed to be 1 (on).
- \end{itemize}
-
-\yamltitle{noIndentBlock}*{fields}
- If you have a block of code that you don't want \texttt{latexindent.pl} to touch (even if
- \index{verbatim!noIndentBlock} it is \emph{not} a verbatim-like environment) then you can
- wrap it in an environment from \texttt{noIndentBlock}; you can use any name you like for
- this, provided you populate it as demonstrate in \cref{lst:noIndentBlock}.
-
- \cmhlistingsfromfile[style=noIndentBlock]{../defaultSettings.yaml}[width=.4\linewidth,before=\centering,yaml-TCB]{\texttt{noIndentBlock}}{lst:noIndentBlock}
-
- Of course, you don't want to have to specify these as null environments in your code, so
- you use them with a comment symbol, \lstinline!%!, followed by as many spaces (possibly
- none) as you like; see \cref{lst:noIndentBlockdemo} for example.
-
- \cmhlistingsfromfile{demonstrations/noindentblock.tex}{\texttt{noIndentBlock.tex}}{lst:noIndentBlockdemo}
-
- Important note: it is assumed that the \texttt{noindent} block statements specified in
- this way appear on their own line.
-
- The \announce{2021-06-19}{noIndentBlock specified as regex} \texttt{noIndentBlock} fields
- can also be specified in terms of \texttt{begin} and \texttt{end} fields. We use the code
- in \cref{lst:noIndentBlock1} to demonstrate this feature.%
-
- \cmhlistingsfromfile{demonstrations/noindentblock1.tex}{\texttt{noIndentBlock1.tex}}{lst:noIndentBlock1}
-
- The settings given in \cref{lst:noindent1,lst:noindent2} are equivalent:
-
- \begin{cmhtcbraster}[raster columns=3,
- raster left skip=-3.5cm,
- raster right skip=-2cm,
- raster column skip=.03\linewidth]
- \cmhlistingsfromfile{demonstrations/noindent1.yaml}[yaml-TCB]{\texttt{noindent1.yaml}}{lst:noindent1}
- \cmhlistingsfromfile{demonstrations/noindent2.yaml}[yaml-TCB]{\texttt{noindent2.yaml}}{lst:noindent2}
- \cmhlistingsfromfile{demonstrations/noindent3.yaml}[yaml-TCB]{\texttt{noindent3.yaml}}{lst:noindent3}
- \end{cmhtcbraster}
-
- Upon running the commands
- \begin{commandshell}
-latexindent.pl -l noindent1.yaml noindent1
-latexindent.pl -l noindent2.yaml noindent1
-\end{commandshell}
- then we receive the output given in \cref{lst:noIndentBlock1-mod1}.
-
- \cmhlistingsfromfile{demonstrations/noindentblock1-mod1.tex}{\texttt{noIndentBlock1.tex} using \cref{lst:noindent1} or \cref{lst:noindent2}}{lst:noIndentBlock1-mod1}
-
- The \texttt{begin}, \texttt{body} and \texttt{end} fields for \texttt{noIndentBlock} are
- all \emph{regular expressions}. If the \texttt{body} field is not specified, then it
- takes a default value of \lstinline!.*?! which is written explicitly in
- \cref{lst:noindent1}. In this context, we interpret \lstinline!.*?! in words as \emph{the
- fewest number of characters (possibly none) until the `end' field is reached}.
-
- The \texttt{lookForThis} field is optional, and can take the values 0 (off) or 1 (on); by
- default, it is assumed to be 1 (on).
-
- Using \cref{lst:noindent3} demonstrates setting \texttt{lookForThis} to 0 (off); running
- the command
- \begin{commandshell}
-latexindent.pl -l noindent3.yaml noindent1
-\end{commandshell}
- gives the output in \cref{lst:noIndentBlock1-mod3}.
-
- \cmhlistingsfromfile{demonstrations/noindentblock1-mod3.tex}{\texttt{noIndentBlock1.tex} using \cref{lst:noindent3}}{lst:noIndentBlock1-mod3}
-
- We will demonstrate this feature later in the documentation in \cref{lst:href3}.
-
- You can, optionally, specify \announce{2021-10-30}{noIndentBlock name feature} the
- \texttt{noIndentBlock} field using the \texttt{name} field which takes a regular
- expression as its argument; thank you to \cite{XuehaiPan} for contributing this feature.
-
- For demonstration, then assuming that your file contains the environments
- \texttt{testnoindent}, \texttt{testnoindent*} then the listings given in
- \cref{lst:nameAsRegex5,lst:nameAsRegex6} are equivalent.
-
- \begin{widepage}
- \begin{cmhtcbraster}[raster column skip=.1\linewidth]
- \cmhlistingsfromfile{demonstrations/nameAsRegex5.yaml}[yaml-TCB]{\texttt{nameAsRegex5.yaml}}{lst:nameAsRegex5}
- \cmhlistingsfromfile{demonstrations/nameAsRegex6.yaml}[yaml-TCB]{\texttt{nameAsRegex6.yaml}}{lst:nameAsRegex6}
- \end{cmhtcbraster}
- \end{widepage}
-
- With reference to \cref{lst:nameAsRegex6}:
- \begin{itemize}
- \item the \texttt{name} field as specified here means \emph{any word followed by the word
- noindent, optionally followed by *};
- \item we have used \texttt{nameAsRegex} to identify this field, but you can use any description
- you like;
- \item the \texttt{lookForThis} field is optional, and can take the values 0 (off) or 1 (on); by
- default, it is assumed to be 1 (on).
- \end{itemize}
-\subsection{filecontents and preamble}
-\yamltitle{fileContentsEnvironments}*{field}
-
- Before \texttt{latexindent.pl} determines the difference between preamble (if any) and
- the main document, it first searches for any of the environments specified in
- \texttt{fileContentsEnvironments}, see \cref{lst:fileContentsEnvironments}. The behaviour
- of \texttt{latexindent.pl} on these environments is determined by their location
- (preamble or not), and the value \texttt{indentPreamble}, discussed next.
-
- \cmhlistingsfromfile[style=fileContentsEnvironments]{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{fileContentsEnvironments}}{lst:fileContentsEnvironments}
-
-\yamltitle{indentPreamble}{0|1}
-
- The preamble of a document can sometimes contain some trickier code for
- \texttt{latexindent.pl} to operate upon. By default, \texttt{latexindent.pl} won't try to
- operate on the preamble (as \texttt{indentPreamble} is set to \texttt{0}, by default),
- but if you'd like \texttt{latexindent.pl} to try then change \texttt{indentPreamble} to
- \texttt{1}.
-
-\yamltitle{lookForPreamble}*{fields}
-
- Not all files contain preamble; for example, \texttt{sty}, \texttt{cls} and \texttt{bib}
- files typically do \emph{not}. Referencing \cref{lst:lookForPreamble}, if you set, for
- example, \texttt{.tex} to \texttt{0}, then regardless of the setting of the value of
- \texttt{indentPreamble}, preamble will not be assumed when operating upon \texttt{.tex}
- files.
-
- \cmhlistingsfromfile[style=lookForPreamble]{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{lookForPreamble}{lst:lookForPreamble}
-\yamltitle{preambleCommandsBeforeEnvironments}{0|1}
- Assuming that \texttt{latexindent.pl} is asked to operate upon the preamble of a
- document, when this switch is set to \texttt{0} then environment code blocks will be
- sought first, and then command code blocks. When this switch is set to \texttt{1},
- commands will be sought first. The example that first motivated this switch contained the
- code given in \cref{lst:motivatepreambleCommandsBeforeEnvironments}.
-
- \begin{cmhlistings}{Motivating \texttt{preambleCommandsBeforeEnvironments}}{lst:motivatepreambleCommandsBeforeEnvironments}
-...
-preheadhook={\begin{mdframed}[style=myframedstyle]},
-postfoothook=\end{mdframed},
-...
-\end{cmhlistings}
-
- \index{indentation!defaultIndent description}
-
-\subsection{Indentation and horizontal space}
-\yamltitle{defaultIndent}*{horizontal space}
- This is the default indentation used in the absence of other details for the code block
- with which we are working. The default value is \lstinline!\t! which means a tab; we will
- explore customisation beyond \texttt{defaultIndent} in \vref{sec:noadd-indent-rules}.
-
- If you're interested in experimenting with \texttt{latexindent.pl} then you can
- \emph{remove} all indentation by setting \texttt{defaultIndent: ""}.
-
-\yamltitle{removeTrailingWhitespace}*{fields}\label{yaml:removeTrailingWhitespace}
-
- Trailing white space can be removed both \emph{before} and \emph{after} processing the
- document, as detailed in \cref{lst:removeTrailingWhitespace}; each of the fields can take
- the values \texttt{0} or \texttt{1}. See
- \vref{lst:removeTWS-before,lst:env-mlb5-modAll,lst:env-mlb5-modAll-remove-WS} for before
- and after results. Thanks to \cite{vosskuhle} for providing this feature.
-
- \begin{minipage}{.4\textwidth}
- \cmhlistingsfromfile[style=removeTrailingWhitespace]{../defaultSettings.yaml}[before=\centering,yaml-TCB]{removeTrailingWhitespace}{lst:removeTrailingWhitespace}
- \end{minipage}%
- \hfill
- \begin{minipage}{.5\textwidth}
- \begin{yaml}[numbers=none]{removeTrailingWhitespace (alt)}[before=\centering]{lst:removeTrailingWhitespace-alt}
-removeTrailingWhitespace: 1
-\end{yaml}
- \end{minipage}%
-
- You can specify \texttt{removeTrailingWhitespace} simply as \texttt{0} or \texttt{1}, if
- you wish; in this case, \announce{2017-06-28}{removeTrailingWhitespace}
- \texttt{latexindent.pl} will set both \texttt{beforeProcessing} and
- \texttt{afterProcessing} to the value you specify; see
- \cref{lst:removeTrailingWhitespace-alt}.%
-
-\subsection{Aligning at delimiters}\label{subsec:align-at-delimiters}
-\yamltitle{lookForAlignDelims}*{fields}
- This contains a list of code blocks that are operated upon in a special way by
- \texttt{latexindent.pl} (see \cref{lst:aligndelims:basic}). In fact, the fields in
- \texttt{lookForAlignDelims} can actually take two different forms: the \emph{basic}
- version is shown in \cref{lst:aligndelims:basic} and the \emph{advanced} version in
- \cref{lst:aligndelims:advanced}; we will discuss each in turn. \index{delimiters!advanced
- settings of lookForAlignDelims}
-
- \begin{yaml}[numbers=none]{\texttt{lookForAlignDelims} (basic)}[width=.8\linewidth,before=\centering]{lst:aligndelims:basic}
-lookForAlignDelims:
- tabular: 1
- tabularx: 1
- longtable: 1
- array: 1
- matrix: 1
- ...
- \end{yaml}
-
- Specifying code blocks in this field instructs \texttt{latexindent.pl} to try and align
- each column by its alignment delimiters. It does have some limitations (discussed further
- in \cref{sec:knownlimitations}), but in many cases it will produce results such as those
- in \cref{lst:tabularbefore:basic,lst:tabularafter:basic}.
-
- If you find that \texttt{latexindent.pl} does not perform satisfactorily on such
- environments then you can set the relevant key to \texttt{0}, for example
- \texttt{tabular: 0}; alternatively, if you just want to ignore \emph{specific} instances
- of the environment, you could wrap them in something from \texttt{noIndentBlock} (see
- \vref{lst:noIndentBlock}).
-
- \begin{cmhtcbraster}
- \cmhlistingsfromfile{demonstrations/tabular1.tex}{\texttt{tabular1.tex}}{lst:tabularbefore:basic}
- \cmhlistingsfromfile{demonstrations/tabular1-default.tex}{\texttt{tabular1.tex} default output}{lst:tabularafter:basic}
- \end{cmhtcbraster}
-
- If, for example, you wish to remove the alignment of the \lstinline!\\! within a
- delimiter-aligned block, then the advanced form of \texttt{lookForAlignDelims} shown in
- \cref{lst:aligndelims:advanced} is for you. \index{regular expressions!delimiterRegEx}
- \index{regular expressions!ampersand alignment} \index{delimiters!default settings of
- lookForAlignDelims} \index{delimiters!ampersand \&} \index{delimiters!advanced settings}
- \index{delimiters!lookForAlignDelims}
-
- \cmhlistingsfromfile[style=lookForAlignDelims]{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{lookForAlignDelims} (advanced)}{lst:aligndelims:advanced}
-
- Note that you can use a mixture of the basic and advanced form: in
- \cref{lst:aligndelims:advanced} \texttt{tabular} and \texttt{tabularx} are advanced and
- \texttt{longtable} is basic. When using the advanced form, each field should receive at
- least 1 sub-field, and \emph{can} (but does not have to) receive any of the following
- fields:
- \begin{itemize}
- \item \texttt{delims}: binary switch (0 or 1) equivalent to simply specifying, for
- example, \texttt{tabular: 1} in the basic version shown in \cref{lst:aligndelims:basic}.
- If \texttt{delims} is set to \texttt{0} then the align at ampersand routine will not be
- called for this code block (default: 1);
- \item \texttt{alignDoubleBackSlash}: binary switch (0 or 1) to determine if
- \lstinline!\\!
- should be aligned (default: 1);
- \item \texttt{spacesBeforeDoubleBackSlash}: optionally,%
- \announce{2018-01-13}*{update to spacesBeforeDoubleBackSlash in ampersand alignment}
- specifies the number (integer $\geq$ 0) of spaces to be inserted before
- \lstinline!\\! (default: 1); %\footnote{Previously this only activated if \texttt{alignDoubleBackSlash} was set to \texttt{0}.}
- \item \announce{2017-06-19}{multiColumnGrouping} \texttt{multiColumnGrouping}: binary switch (0
- or 1) that details if \texttt{latexindent.pl} should group columns above and below a
- \lstinline!\multicolumn! command (default: 0);
- \item \announce{2017-06-19}{alignRowsWithoutMaxDelims} \texttt{alignRowsWithoutMaxDelims}:
- binary switch (0 or 1) that details if rows that do not contain the maximum number of
- delimeters should be formatted so as to have the ampersands aligned (default: 1);
- \item \announce{2018-01-13}{spacesBeforeAmpersand in ampersand
- alignment}\texttt{spacesBeforeAmpersand}: optionally specifies the number (integer $\geq$
- 0) of spaces to be placed \emph{before} ampersands (default: 1);
- \item \announce{2018-01-13}{spacesAfterAmpersand in ampersand
- alignment}\texttt{spacesAfterAmpersand}: optionally specifies the number (integer $\geq$
- 0) of spaces to be placed \emph{After} ampersands (default: 1);
- \item \announce{2018-01-13}{justification of cells in ampersand
- alignment}\texttt{justification}: optionally specifies the justification of each cell as
- either \emph{left} or \emph{right} (default: left);
- \item \announce{2020-03-21}{align final double back slash}{alignFinalDoubleBackSlash}
- optionally specifies if the \emph{final} double back slash should be used for alignment
- (default: 0);
- \item \announce{2020-03-21}{don't measure feature}{dontMeasure} optionally specifies if
- user-specified cells, rows or the largest entries should \emph{not} be measured (default:
- 0);
- \item \announce{2020-03-21}{delimiter RegEx feature}{delimiterRegEx} optionally specifies the
- pattern matching to be used for the alignment delimeter (default:
- \lstinline* '(?<!\\)(&)'*);
- \item \announce{2020-03-21}{delimiter justification}{delimiterJustification} optionally
- specifies the justification for the alignment delimeters (default: left); note that this
- feature is only useful if you have delimiters of different lengths in the same column,
- discussed in \cref{sec:delimiter-reg-ex};
- \item \announce{2021-12-13}{lookForChildCodeBlocks feature}{lookForChildCodeBlocks} optionally
- instructs \texttt{latexindent.pl} to search for child code blocks or not (default: 1),
- discussed in \cref{sec:lookForChildCodeBlocks}.
- \end{itemize}
-
- We will explore most of these features using the file \texttt{tabular2.tex} in
- \cref{lst:tabular2} (which contains a \lstinline!\multicolumn! command), and the YAML
- files in \crefrange{lst:tabular2YAML}{lst:tabular8YAML}; we will explore
- \texttt{alignFinalDoubleBackSlash} in \cref{lst:tabular4}; the \texttt{dontMeasure}
- feature will be described in \cref{sec:dontMeasure}, and \texttt{delimiterRegEx} in
- \cref{sec:delimiter-reg-ex}.
-
- \cmhlistingsfromfile{demonstrations/tabular2.tex}{\texttt{tabular2.tex}}{lst:tabular2}
- \begin{minipage}{.45\textwidth}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/tabular2.yaml}[yaml-TCB]{\texttt{tabular2.yaml}}{lst:tabular2YAML}
- \end{minipage}%
- \hfill
- \begin{minipage}{.48\textwidth}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/tabular3.yaml}[yaml-TCB]{\texttt{tabular3.yaml}}{lst:tabular3YAML}
- \end{minipage}%
-
- \begin{minipage}{.45\textwidth}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/tabular4.yaml}[yaml-TCB]{\texttt{tabular4.yaml}}{lst:tabular4YAML}
- \end{minipage}%
- \hfill
- \begin{minipage}{.48\textwidth}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/tabular5.yaml}[yaml-TCB]{\texttt{tabular5.yaml}}{lst:tabular5YAML}
- \end{minipage}%
-
- \begin{minipage}{.45\textwidth}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/tabular6.yaml}[yaml-TCB]{\texttt{tabular6.yaml}}{lst:tabular6YAML}
- \end{minipage}%
- \hfill
- \begin{minipage}{.48\textwidth}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/tabular7.yaml}[yaml-TCB]{\texttt{tabular7.yaml}}{lst:tabular7YAML}
- \end{minipage}%
-
- \begin{minipage}{.48\textwidth}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/tabular8.yaml}[yaml-TCB]{\texttt{tabular8.yaml}}{lst:tabular8YAML}
- \end{minipage}%
-
- On running the commands \index{delimiters!spacing demonstration} \index{switches!-l
- demonstration}
- \begin{commandshell}
-latexindent.pl tabular2.tex
-latexindent.pl tabular2.tex -l tabular2.yaml
-latexindent.pl tabular2.tex -l tabular3.yaml
-latexindent.pl tabular2.tex -l tabular2.yaml,tabular4.yaml
-latexindent.pl tabular2.tex -l tabular2.yaml,tabular5.yaml
-latexindent.pl tabular2.tex -l tabular2.yaml,tabular6.yaml
-latexindent.pl tabular2.tex -l tabular2.yaml,tabular7.yaml
-latexindent.pl tabular2.tex -l tabular2.yaml,tabular8.yaml
-\end{commandshell}
- we obtain the respective outputs given in
- \crefrange{lst:tabular2-default}{lst:tabular2-mod8}.
-
- \begin{widepage}
- \cmhlistingsfromfile{demonstrations/tabular2-default.tex}{\texttt{tabular2.tex} default output}{lst:tabular2-default}
- \cmhlistingsfromfile{demonstrations/tabular2-mod2.tex}{\texttt{tabular2.tex} using \cref{lst:tabular2YAML}}{lst:tabular2-mod2}
- \cmhlistingsfromfile{demonstrations/tabular2-mod3.tex}{\texttt{tabular2.tex} using \cref{lst:tabular3YAML}}{lst:tabular2-mod3}
- \cmhlistingsfromfile{demonstrations/tabular2-mod4.tex}{\texttt{tabular2.tex} using \cref{lst:tabular2YAML,lst:tabular4YAML}}{lst:tabular2-mod4}
- \cmhlistingsfromfile{demonstrations/tabular2-mod5.tex}{\texttt{tabular2.tex} using \cref{lst:tabular2YAML,lst:tabular5YAML}}{lst:tabular2-mod5}
- \cmhlistingsfromfile{demonstrations/tabular2-mod6.tex}{\texttt{tabular2.tex} using \cref{lst:tabular2YAML,lst:tabular6YAML}}{lst:tabular2-mod6}
- \cmhlistingsfromfile{demonstrations/tabular2-mod7.tex}{\texttt{tabular2.tex} using \cref{lst:tabular2YAML,lst:tabular7YAML}}{lst:tabular2-mod7}
- \cmhlistingsfromfile{demonstrations/tabular2-mod8.tex}{\texttt{tabular2.tex} using \cref{lst:tabular2YAML,lst:tabular8YAML}}{lst:tabular2-mod8}
- \end{widepage}
-
- Notice in particular:
- \begin{itemize}
- \item in both \cref{lst:tabular2-default,lst:tabular2-mod2} all rows have been aligned at the
- ampersand, even those that do not contain the maximum number of ampersands (3 ampersands,
- in this case);
- \item in \cref{lst:tabular2-default} the columns have been aligned at the ampersand;
- \item in \cref{lst:tabular2-mod2} the \lstinline!\multicolumn! command has grouped the $2$
- columns beneath \emph{and} above it, because \texttt{multiColumnGrouping} is set to $1$
- in \cref{lst:tabular2YAML};
- \item in \cref{lst:tabular2-mod3} rows~3 and~6 have \emph{not} been aligned at the ampersand,
- because \texttt{alignRowsWithoutMaxDelims} has been to set to $0$ in
- \cref{lst:tabular3YAML}; however, the \lstinline!\\! \emph{have} still been aligned;
- \item in \cref{lst:tabular2-mod4} the columns beneath and above the \lstinline!\multicolumn!
- commands have been grouped (because \texttt{multiColumnGrouping} is set to $1$), and
- there are at least $4$ spaces \emph{before} each aligned ampersand because
- \texttt{spacesBeforeAmpersand} is set to $4$;
- \item in \cref{lst:tabular2-mod5} the columns beneath and above the \lstinline!\multicolumn!
- commands have been grouped (because \texttt{multiColumnGrouping} is set to $1$), and
- there are at least $4$ spaces \emph{after} each aligned ampersand because
- \texttt{spacesAfterAmpersand} is set to $4$;
- \item in \cref{lst:tabular2-mod6} the \lstinline!\\! have \emph{not} been aligned, because
- \texttt{alignDoubleBackSlash} is set to \texttt{0}, otherwise the output is the same as
- \cref{lst:tabular2-mod2};
- \item in \cref{lst:tabular2-mod7} the \lstinline!\\! \emph{have} been aligned, and because
- \texttt{spacesBeforeDoubleBackSlash} is set to \texttt{0}, there are no spaces ahead of
- them; the output is otherwise the same as \cref{lst:tabular2-mod2};
- \item in \cref{lst:tabular2-mod8} the cells have been \emph{right}-justified; note that cells
- above and below the \lstinline!\multicol! statements have still been group correctly,
- because of the settings in \cref{lst:tabular2YAML}.
- \end{itemize}
-
-\subsubsection{lookForAlignDelims: spacesBeforeAmpersand}
- The \texttt{spacesBeforeAmpersand} \announce{2021-06-19}*{spacesBeforeAmpersand leading
- blank column upgrade} can be specified in a few different ways. The \emph{basic} form is
- demonstrated in \cref{lst:tabular4YAML}, but we can customise the behaviour further by
- specifying if we would like this value to change if it encounters a \emph{leading blank
- column}; that is, when the first column contains only zero-width entries. We refer to
- this as the \emph{advanced} form.%
-
- We demonstrate this feature in relation to \cref{lst:aligned1}; upon running the
- following command
- \begin{commandshell}
-latexindent.pl aligned1.tex -o=+-default
-\end{commandshell}
- then we receive the default output given in \cref{lst:aligned1-default}.
-
- \begin{cmhtcbraster}
- \cmhlistingsfromfile{demonstrations/aligned1.tex}{\texttt{aligned1.tex}}{lst:aligned1}
- \cmhlistingsfromfile{demonstrations/aligned1-default.tex}{\texttt{aligned1-default.tex}}{lst:aligned1-default}
- \end{cmhtcbraster}
-
- The settings in \crefrange{lst:sba1}{lst:sba4} are all equivlanent; we have used the
- not-yet discussed \texttt{noAdditionalIndent} field (see \vref{sec:noadd-indent-rules})
- which will assist in the demonstration in what follows.
- \begin{cmhtcbraster}[raster columns=2, ]
- \cmhlistingsfromfile{demonstrations/sba1.yaml}[yaml-TCB]{\texttt{sba1.yaml}}{lst:sba1}
- \cmhlistingsfromfile{demonstrations/sba2.yaml}[yaml-TCB]{\texttt{sba2.yaml}}{lst:sba2}
- \cmhlistingsfromfile{demonstrations/sba3.yaml}[yaml-TCB]{\texttt{sba3.yaml}}{lst:sba3}
- \cmhlistingsfromfile{demonstrations/sba4.yaml}[yaml-TCB]{\texttt{sba4.yaml}}{lst:sba4}
- \end{cmhtcbraster}
- Upon running the following commands
- \begin{commandshell}
-latexindent.pl aligned1.tex -l sba1.yaml
-latexindent.pl aligned1.tex -l sba2.yaml
-latexindent.pl aligned1.tex -l sba3.yaml
-latexindent.pl aligned1.tex -l sba4.yaml
-\end{commandshell}
- then we receive the (same) output given in \cref{lst:aligned1-mod1}; we note that there
- is \emph{one space} before each ampersand.
-
- \begin{cmhtcbraster}
- \cmhlistingsfromfile{demonstrations/aligned1-mod1.tex}{\texttt{aligned1-mod1.tex}}{lst:aligned1-mod1}
- \end{cmhtcbraster}
-
- We note in particular:
- \begin{itemize}
- \item \cref{lst:sba1} demonstrates the \emph{basic} form for
- \texttt{lookForAlignDelims}; in this case,
- the default values are specified as in \vref{lst:aligndelims:advanced};
- \item \cref{lst:sba2} demonstrates the \emph{advanced} form for
- \texttt{lookForAlignDelims}
- and specified \texttt{spacesBeforeAmpersand}. The default value is \texttt{1};
- \item \cref{lst:sba3} demonstrates the new \emph{advanced} way to specify
- \texttt{spacesBeforeAmpersand}, and
- for us to set the \texttt{default} value that sets the number of spaces before ampersands
- which are \emph{not} in leading blank columns. The default value is \texttt{1}.
-
- We note that \texttt{leadingBlankColumn} has not been specified in \cref{lst:sba3}, and
- it will inherit the value from \texttt{default};
- \item \cref{lst:sba4} demonstrates spaces to be used before amperands for
- \emph{leading blank columns}.
- We note that \emph{default} has not been specified, and it will be set to \texttt{1} by
- default.
- \end{itemize}
- We can customise the space before the ampersand in the \emph{leading blank column} of
- \cref{lst:aligned1-mod1} by using either of \cref{lst:sba5,lst:sba6}, which are
- equivalent.
-
- \begin{cmhtcbraster}
- \cmhlistingsfromfile{demonstrations/sba5.yaml}[yaml-TCB]{\texttt{sba5.yaml}}{lst:sba5}
- \cmhlistingsfromfile{demonstrations/sba6.yaml}[yaml-TCB]{\texttt{sba6.yaml}}{lst:sba6}
- \end{cmhtcbraster}
-
- Upon running
- \begin{commandshell}
-latexindent.pl aligned1.tex -l sba5.yaml
-latexindent.pl aligned1.tex -l sba6.yaml
-\end{commandshell}
- then we receive the (same) output given in \cref{lst:aligned1-mod5}. We note that the
- space before the ampersand in the \emph{leading blank column} has been set to \texttt{0}
- by \cref{lst:sba6}.
-
- We can demonstrated this feature further using the settings in \cref{lst:sba7} which give
- the output in \cref{lst:aligned1-mod7}.
-
- \begin{cmhtcbraster}[raster columns=3,
- raster left skip=-3.75cm,
- raster right skip=-2cm,]
- \cmhlistingsfromfile{demonstrations/aligned1-mod5.tex}{\texttt{aligned1-mod5.tex}}{lst:aligned1-mod5}
- \cmhlistingsfromfile{demonstrations/aligned1-mod7.tex}{\texttt{aligned1.tex} using \cref{lst:sba7}}{lst:aligned1-mod7}
- \cmhlistingsfromfile{demonstrations/sba7.yaml}[yaml-TCB]{\texttt{sba7.yaml}}{lst:sba7}
- \end{cmhtcbraster}
-\subsubsection{lookForAlignDelims: alignFinalDoubleBackSlash}
- We explore \announce{2020-03-21}{alignFinalDoubleBackSlash demonstration} the
- \texttt{alignFinalDoubleBackSlash} feature by using the file in \cref{lst:tabular4}. Upon
- running the following commands \index{delimiters!double backslash demonstration}
- \index{switches!-y demonstration} \index{switches!-o demonstration}%
- \begin{commandshell}
-latexindent.pl tabular4.tex -o=+-default
-latexindent.pl tabular4.tex -o=+-FDBS -y="lookForAlignDelims:tabular:alignFinalDoubleBackSlash:1"
-\end{commandshell}
- then we receive the respective outputs given in \cref{lst:tabular4-default} and
- \cref{lst:tabular4-FDBS}.
-
- \begin{cmhtcbraster}[raster columns=3,
- raster left skip=-3.75cm,
- raster right skip=-2cm,]
- \cmhlistingsfromfile{demonstrations/tabular4.tex}{\texttt{tabular4.tex}}{lst:tabular4}
- \cmhlistingsfromfile{demonstrations/tabular4-default.tex}{\texttt{tabular4-default.tex}}{lst:tabular4-default}
- \cmhlistingsfromfile{demonstrations/tabular4-FDBS.tex}{\texttt{tabular4-FDBS.tex}}{lst:tabular4-FDBS}
- \end{cmhtcbraster}
-
- We note that in:
- \begin{itemize}
- \item \cref{lst:tabular4-default}, by default, the \emph{first} set of double back
- slashes in the first row of the \texttt{tabular} environment have been used for
- alignment;
- \item \cref{lst:tabular4-FDBS}, the \emph{final} set of double back slashes in the
- first row have been used, because we specified \texttt{alignFinalDoubleBackSlash} as 1.
- \end{itemize}
-
- As of Version 3.0, the alignment routine works on mandatory and optional arguments within
- commands, and also within `special' code blocks (see \texttt{specialBeginEnd} on
- \cpageref{yaml:specialBeginEnd}); for example, assuming that you have a command called
- \lstinline!\matrix! and that it is populated within \texttt{lookForAlignDelims} (which it
- is, by default), and that you run the command
- \begin{commandshell}
-latexindent.pl matrix1.tex
-\end{commandshell}
- then the before-and-after results shown in \cref{lst:matrixbefore,lst:matrixafter} are
- achievable by default.
-
- \begin{cmhtcbraster}
- \cmhlistingsfromfile{demonstrations/matrix1.tex}{\texttt{matrix1.tex}}{lst:matrixbefore}
- \cmhlistingsfromfile{demonstrations/matrix1-default.tex}{\texttt{matrix1.tex} default output}{lst:matrixafter}
- \end{cmhtcbraster}
-
- If you have blocks of code that you wish to align at the \& character that are \emph{not}
- wrapped in, for example, \lstinline!\begin{tabular}! \ldots \lstinline!\end{tabular}!,
- then you can use the mark up illustrated in \cref{lst:alignmentmarkup}; the default
- output is shown in \cref{lst:alignmentmarkup-default}. Note that the \lstinline!%*! must
- be next to each other, but that there can be any number of spaces (possibly none) between
- the \lstinline!*! and \lstinline!\begin{tabular}!; note also that you may use any
- environment name that you have specified in \texttt{lookForAlignDelims}.
-
- \begin{cmhtcbraster}[raster left skip=-1.5cm,]
- \cmhlistingsfromfile{demonstrations/align-block.tex}{\texttt{align-block.tex}}{lst:alignmentmarkup}
- \cmhlistingsfromfile{demonstrations/align-block-default.tex}{\texttt{align-block.tex} default output}{lst:alignmentmarkup-default}
- \end{cmhtcbraster}
-
- With reference to \vref{tab:code-blocks} and the, yet undiscussed, fields of
- \texttt{noAdditionalIndent} and \texttt{indentRules} (see \vref{sec:noadd-indent-rules}),
- these comment-marked blocks are considered \texttt{environments}.
-
-\subsubsection{lookForAlignDelims: the dontMeasure feature}\label{sec:dontMeasure}
- The \announce{2020-03-21}{don't measure feature} \texttt{lookForAlignDelims} field can,
- optionally, receive the \texttt{dontMeasure} option which can be specified in a few
- different ways. We will explore this feature in relation to the code given in
- \cref{lst:tabular-DM}; the default output is shown in \cref{lst:tabular-DM-default}.
- \index{delimiters!dontMeasure feature}%
-
- \begin{cmhtcbraster}[raster left skip=-1.5cm,]
- \cmhlistingsfromfile{demonstrations/tabular-DM.tex}{\texttt{tabular-DM.tex}}{lst:tabular-DM}
- \cmhlistingsfromfile{demonstrations/tabular-DM-default.tex}{\texttt{tabular-DM.tex} default output}{lst:tabular-DM-default}
- \end{cmhtcbraster}
-
- The \texttt{dontMeasure} field can be specified as \texttt{largest}, and in which case,
- the largest element will not be measured; with reference to the YAML file given in
- \cref{lst:dontMeasure1}, we can run the command \index{switches!-l demonstration}
- \begin{commandshell}
-latexindent.pl tabular-DM.tex -l=dontMeasure1.yaml
-\end{commandshell}
- and receive the output given in \cref{lst:tabular-DM-mod1}.
-
- \begin{cmhtcbraster}
- \cmhlistingsfromfile{demonstrations/tabular-DM-mod1.tex}{\texttt{tabular-DM.tex} using \cref{lst:dontMeasure1}}{lst:tabular-DM-mod1}
- \cmhlistingsfromfile{demonstrations/dontMeasure1.yaml}[yaml-TCB]{\texttt{dontMeasure1.yaml}}{lst:dontMeasure1}
- \end{cmhtcbraster}
-
- We note that the \emph{largest} column entries have not contributed to the measuring
- routine.
-
- The \texttt{dontMeasure} field can also be specified in the form demonstrated in
- \cref{lst:dontMeasure2}. On running the following commands, \index{switches!-l
- demonstration}
- \begin{commandshell}
-latexindent.pl tabular-DM.tex -l=dontMeasure2.yaml
-\end{commandshell}
- we receive the output in \cref{lst:tabular-DM-mod2}. \index{regular
- expressions!dontMeasure feature, cell}
-
- \begin{cmhtcbraster}
- \cmhlistingsfromfile{demonstrations/tabular-DM-mod2.tex}{\texttt{tabular-DM.tex} using \cref{lst:dontMeasure2} or \cref{lst:dontMeasure3}}{lst:tabular-DM-mod2}
- \cmhlistingsfromfile{demonstrations/dontMeasure2.yaml}[yaml-TCB]{\texttt{dontMeasure2.yaml}}{lst:dontMeasure2}
- \end{cmhtcbraster}
-
- We note that in \cref{lst:dontMeasure2} we have specified entries not to be measured, one
- entry per line.
-
- The \texttt{dontMeasure} field can also be specified in the forms demonstrated in
- \cref{lst:dontMeasure3} and \cref{lst:dontMeasure4}. Upon running the commands
- \index{switches!-l demonstration}
- \begin{commandshell}
-latexindent.pl tabular-DM.tex -l=dontMeasure3.yaml
-latexindent.pl tabular-DM.tex -l=dontMeasure4.yaml
-\end{commandshell}
- we receive the output given in \cref{lst:tabular-DM-mod3} \index{regular
- expressions!lowercase alph a-z}
- \begin{cmhtcbraster}[raster columns=3,
- raster left skip=-3.5cm,
- raster right skip=-2cm,
- raster column skip=.03\linewidth]
- \cmhlistingsfromfile{demonstrations/tabular-DM-mod3.tex}{\texttt{tabular-DM.tex} using \cref{lst:dontMeasure3} or \cref{lst:dontMeasure3}}{lst:tabular-DM-mod3}
- \cmhlistingsfromfile{demonstrations/dontMeasure3.yaml}[yaml-TCB]{\texttt{dontMeasure3.yaml}}{lst:dontMeasure3}
- \cmhlistingsfromfile{demonstrations/dontMeasure4.yaml}[yaml-TCB]{\texttt{dontMeasure4.yaml}}{lst:dontMeasure4}
- \end{cmhtcbraster}
- We note that in:
- \begin{itemize}
- \item \cref{lst:dontMeasure3} we have specified entries not to be measured, each one has a
- \emph{string} in the \texttt{this}
- field, together with an optional specification of \texttt{applyTo} as \texttt{cell};
- \item \cref{lst:dontMeasure4} we have specified entries not to be measured as a
- \emph{regular expression} using
- the \texttt{regex} field, together with an optional specification of \texttt{applyTo} as
- \texttt{cell} field, together with an optional specification of \texttt{applyTo} as
- \texttt{cell}.
- \end{itemize}
- In both cases, the default value of \texttt{applyTo} is \texttt{cell}, and does not need
- to be specified.
-
- We may also specify the \texttt{applyTo} field as \texttt{row}, a demonstration of which
- is given in \cref{lst:dontMeasure5}; upon running \index{switches!-l demonstration}
- \begin{commandshell}
-latexindent.pl tabular-DM.tex -l=dontMeasure5.yaml
-\end{commandshell}
- we receive the output in \cref{lst:tabular-DM-mod5}.
- \begin{cmhtcbraster}
- \cmhlistingsfromfile{demonstrations/tabular-DM-mod5.tex}{\texttt{tabular-DM.tex} using \cref{lst:dontMeasure5}}{lst:tabular-DM-mod5}
- \cmhlistingsfromfile{demonstrations/dontMeasure5.yaml}[yaml-TCB]{\texttt{dontMeasure5.yaml}}{lst:dontMeasure5}
- \end{cmhtcbraster}
-
- Finally, the \texttt{applyTo} field can be specified as \texttt{row}, together with a
- \texttt{regex} expression. For example, for the settings given in
- \cref{lst:dontMeasure6}, upon running \index{switches!-l demonstration}
- \begin{commandshell}
-latexindent.pl tabular-DM.tex -l=dontMeasure6.yaml
-\end{commandshell}
- we receive the output in \cref{lst:tabular-DM-mod6}. \index{regular
- expressions!dontMeasure feature, row} \index{regular expressions!lowercase alph a-z}
-
- \begin{cmhtcbraster}
- \cmhlistingsfromfile{demonstrations/tabular-DM-mod6.tex}{\texttt{tabular-DM.tex} using \cref{lst:dontMeasure6}}{lst:tabular-DM-mod6}
- \cmhlistingsfromfile{demonstrations/dontMeasure6.yaml}[yaml-TCB]{\texttt{dontMeasure6.yaml}}{lst:dontMeasure6}
- \end{cmhtcbraster}
-
-\subsubsection{lookForAlignDelims: the delimiterRegEx and delimiterJustification feature}\label{sec:delimiter-reg-ex}
-
- The delimiter alignment \announce{2020-03-21}{delimiterRegEx feature} will, by default,
- align code blocks at the ampersand character. The behaviour is controlled by the
- \texttt{delimiterRegEx} field within \texttt{lookForAlignDelims}; the default value is
- \lstinline*'(?<!\\)(&)'*, which can be read as: \emph{an ampersand, as long as it is not
- immediately preceeded by a backslash}. \index{warning!capturing parenthesis for
- lookForAlignDelims} \index{capturing parenthesis (regex)} \index{regular
- expressions!capturing parenthesis} \index{delimiters!delimiterRegEx}
- \index{delimiters!delimiter justification (left or right)}%
-
- \begin{warning}
- Important: note the `capturing' parenthesis in the \lstinline!(&)! which are necessary;
- if you intend to customise this field, then be sure to include them appropriately.
- \end{warning}
-
- We demonstrate how to customise this with respect to the code given in
- \cref{lst:tabbing}; the default output from \lstinline!latexindent.pl! is given in
- \cref{lst:tabbing-default}.
-
- \begin{cmhtcbraster}
- \cmhlistingsfromfile{demonstrations/tabbing.tex}{\texttt{tabbing.tex}}{lst:tabbing}
- \cmhlistingsfromfile{demonstrations/tabbing-default.tex}{\texttt{tabbing.tex} default output}{lst:tabbing-default}
- \end{cmhtcbraster}
-
- Let's say that we wish to align the code at either the \lstinline!\=! or \lstinline!\>!.
- We employ the settings given in \cref{lst:delimiterRegEx1} and run the command
- \index{switches!-l demonstration}
- \begin{commandshell}
-latexindent.pl tabbing.tex -l=delimiterRegEx1.yaml
-\end{commandshell}
- to receive the output given in \cref{lst:tabbing-mod1}. \index{regular
- expressions!delimiter regex at \textbackslash= or \textbackslash>}
-
- \begin{cmhtcbraster}
- \cmhlistingsfromfile{demonstrations/tabbing-mod1.tex}{\texttt{tabbing.tex} using \cref{lst:delimiterRegEx1}}{lst:tabbing-mod1}
- \cmhlistingsfromfile{demonstrations/delimiterRegEx1.yaml}[yaml-TCB]{\texttt{delimiterRegEx1.yaml}}{lst:delimiterRegEx1}
- \end{cmhtcbraster}
- We note that:
- \begin{itemize}
- \item in \cref{lst:tabbing-mod1} the code has been aligned, as intended, at both the
- \lstinline!\=! and \lstinline!\>!;
- \item in \cref{lst:delimiterRegEx1} we have heeded the warning and captured the expression
- using grouping parenthesis, specified a backslash using \lstinline!\\! and said that it
- must be followed by either \lstinline!=! or \lstinline!>!.
- \end{itemize}
- We can explore \texttt{delimiterRegEx} a little further using the settings in
- \cref{lst:delimiterRegEx2} and run the command \index{switches!-l demonstration}
- \begin{commandshell}
-latexindent.pl tabbing.tex -l=delimiterRegEx2.yaml
-\end{commandshell}
- to receive the output given in \cref{lst:tabbing-mod2}. \index{regular
- expressions!delimiter regex at only \textbackslash>}
-
- \begin{cmhtcbraster}
- \cmhlistingsfromfile{demonstrations/tabbing-mod2.tex}{\texttt{tabbing.tex} using \cref{lst:delimiterRegEx2}}{lst:tabbing-mod2}
- \cmhlistingsfromfile{demonstrations/delimiterRegEx2.yaml}[yaml-TCB]{\texttt{delimiterRegEx2.yaml}}{lst:delimiterRegEx2}
- \end{cmhtcbraster}
- We note that only the \lstinline!\>! have been aligned.
-
- Of course, the other lookForAlignDelims options can be used alongside the
- \texttt{delimiterRegEx}; regardless of the type of delimiter being used (ampersand or
- anything else), the fields from \vref{lst:aligndelims:advanced} remain the same; for
- example, using the settings in \cref{lst:delimiterRegEx3}, and running \index{switches!-l
- demonstration}
- \begin{commandshell}
-latexindent.pl tabbing.tex -l=delimiterRegEx3.yaml
-\end{commandshell}
- to receive the output given in \cref{lst:tabbing-mod3}.
-
- \begin{cmhtcbraster}
- \cmhlistingsfromfile{demonstrations/tabbing-mod3.tex}{\texttt{tabbing.tex} using \cref{lst:delimiterRegEx3}}{lst:tabbing-mod3}
- \cmhlistingsfromfile{demonstrations/delimiterRegEx3.yaml}[yaml-TCB]{\texttt{delimiterRegEx3.yaml}}{lst:delimiterRegEx3}
- \end{cmhtcbraster}
-
- It is possible that delimiters specified within \texttt{delimiterRegEx} can be of
- different lengths. Consider the file in \cref{lst:tabbing1}, and associated YAML in
- \cref{lst:delimiterRegEx4}. Note that the \cref{lst:delimiterRegEx4} specifies the option
- for the delimiter to be either \lstinline!#! or \lstinline!\>!, \emph{which are different
- lengths}. Upon running the command \index{switches!-l demonstration} \index{switches!-o
- demonstration}
- \begin{commandshell}
-latexindent.pl tabbing1.tex -l=delimiterRegEx4.yaml -o=+-mod4
-\end{commandshell}
- we receive the output in \cref{lst:tabbing1-mod4}. \index{regular expressions!delimiter
- regex at \#}
-
- \begin{cmhtcbraster}[raster columns=3,
- raster left skip=-3.5cm,
- raster right skip=-2cm,
- raster column skip=.03\linewidth]
- \cmhlistingsfromfile{demonstrations/tabbing1.tex}{\texttt{tabbing1.tex}}{lst:tabbing1}
- \cmhlistingsfromfile{demonstrations/tabbing1-mod4.tex}{\texttt{tabbing1-mod4.tex}}{lst:tabbing1-mod4}
- \cmhlistingsfromfile{demonstrations/delimiterRegEx4.yaml}[yaml-TCB]{\texttt{delimiterRegEx4.yaml}}{lst:delimiterRegEx4}
- \end{cmhtcbraster}
-
- You can set the \emph{delimiter} justification as either \texttt{left} (default) or
- \texttt{right}, which will only have effect when delimiters in the same column have
- different lengths. Using the settings in \cref{lst:delimiterRegEx5} and running the
- command \index{switches!-l demonstration} \index{switches!-o demonstration}
- \begin{commandshell}
-latexindent.pl tabbing1.tex -l=delimiterRegEx5.yaml -o=+-mod5
-\end{commandshell}
- gives the output in \cref{lst:tabbing1-mod5}. \index{regular expressions!delimiter regex
- at \# or \textbackslash>}
-
- \begin{cmhtcbraster}
- \cmhlistingsfromfile{demonstrations/tabbing1-mod5.tex}{\texttt{tabbing1-mod5.tex}}{lst:tabbing1-mod5}
- \cmhlistingsfromfile{demonstrations/delimiterRegEx5.yaml}[yaml-TCB]{\texttt{delimiterRegEx5.yaml}}{lst:delimiterRegEx5}
- \end{cmhtcbraster}
-
- Note that in \cref{lst:tabbing1-mod5} the second set of delimiters have been \emph{right
- aligned} -- it is quite subtle!
-
-\subsubsection{lookForAlignDelims: lookForChildCodeBlocks}\label{sec:lookForChildCodeBlocks}
- There \announce{2021-12-13}{lookForChildCodeBlocks demonstration} may be scenarios in
- which you would prefer to instruct \texttt{latexindent.pl} \emph{not} to search for child
- blocks; in which case setting \texttt{lookForChildCodeBlocks} to 0 may be a good way to
- proceed.
-
- Using the settings from \vref{lst:dontMeasure1} on the file in \cref{lst:tabular-DM-1}
- and running the command
- \begin{commandshell}
-latexindent.pl tabular-DM-1.tex -l=dontMeasure1.yaml -o=+-mod1
-\end{commandshell}
- gives the output in \cref{lst:tabular-DM-1-mod1}.
- \begin{cmhtcbraster}
- \cmhlistingsfromfile{demonstrations/tabular-DM-1.tex}{\texttt{tabular-DM-1.tex}}{lst:tabular-DM-1}
- \cmhlistingsfromfile{demonstrations/tabular-DM-1-mod1.tex}{\texttt{tabular-DM-1-mod1.tex}}{lst:tabular-DM-1-mod1}
- \end{cmhtcbraster}
-
- We can improve the output from \cref{lst:tabular-DM-1-mod1} by employing the settings in
- \cref{lst:dontMeasure1a}
- \begin{commandshell}
-latexindent.pl tabular-DM-1.tex -l=dontMeasure1a.yaml -o=+-mod1a
-\end{commandshell}
- which gives the output in \cref{lst:dontMeasure1a}.
-
- \begin{cmhtcbraster}
- \cmhlistingsfromfile{demonstrations/tabular-DM-1-mod1a.tex}{\texttt{tabular-DM-1-mod1a.tex}}{lst:tabular-DM-1-mod1a}
- \cmhlistingsfromfile{demonstrations/dontMeasure1a.yaml}[yaml-TCB]{\texttt{dontMeasure1a.yaml}}{lst:dontMeasure1a}
- \end{cmhtcbraster}
-
-\subsection{Indent after items, specials and headings}
-\yamltitle{indentAfterItems}*{fields}
- The environment names specified in \texttt{indentAfterItems} tell \texttt{latexindent.pl}
- to look for \lstinline!\item! commands; if these switches are set to \texttt{1} then
- indentation will be performed so as indent the code after each \texttt{item}. A
- demonstration is given in \cref{lst:itemsbefore,lst:itemsafter}
-
- \begin{cmhtcbraster}[raster columns=3,
- raster left skip=-3.5cm,
- raster right skip=-2cm,
- raster column skip=.03\linewidth]
- \cmhlistingsfromfile[style=indentAfterItems]{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{indentAfterItems}}{lst:indentafteritems}
- \cmhlistingsfromfile{demonstrations/items1.tex}{\texttt{items1.tex}}{lst:itemsbefore}
- \cmhlistingsfromfile{demonstrations/items1-default.tex}{\texttt{items1.tex} default output}{lst:itemsafter}
- \end{cmhtcbraster}
-
-\yamltitle{itemNames}*{fields}
- If you have your own \texttt{item} commands (perhaps you prefer to use \texttt{myitem},
- for example) then you can put populate them in \texttt{itemNames}. For example, users of
- the \texttt{exam} document class might like to add \texttt{parts} to
- \texttt{indentAfterItems} and \texttt{part} to \texttt{itemNames} to their user settings
- (see \vref{sec:indentconfig} for details of how to configure user settings, and
- \vref{lst:mysettings} \\ in particular \label{page:examsettings}.)
-
- \cmhlistingsfromfile[style=itemNames]{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{itemNames}}{lst:itemNames}
-
-\yamltitle{specialBeginEnd}*{fields}\label{yaml:specialBeginEnd}
- The fields specified \index{specialBeginEnd!introduction}
- \announce{2017-08-21}*{specialBeginEnd} in \texttt{specialBeginEnd} are, in their default
- state, focused on math mode begin and end statements, but there is no requirement for
- this to be the case; \cref{lst:specialBeginEnd} shows the default settings of
- \texttt{specialBeginEnd}. \index{specialBeginEnd!default settings}%
-
- \cmhlistingsfromfile[style=specialBeginEnd]{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{specialBeginEnd}}{lst:specialBeginEnd}
-
- The field \texttt{displayMath} represents \lstinline!\[...\]!, \texttt{inlineMath}
- represents \lstinline!$...$! and \texttt{displayMathTex} represents \lstinline!$$...$$!.
- You can, of course, rename these in your own YAML files (see \vref{sec:localsettings});
- indeed, you might like to set up your own special begin and end statements.
-
- A demonstration of the before-and-after results are shown in
- \cref{lst:specialbefore,lst:specialafter}.
-
- \begin{cmhtcbraster}
- \cmhlistingsfromfile{demonstrations/special1.tex}{\texttt{special1.tex} before}{lst:specialbefore}
- \cmhlistingsfromfile{demonstrations/special1-default.tex}{\texttt{special1.tex} default output}{lst:specialafter}
- \end{cmhtcbraster}
-
- For each field, \texttt{lookForThis} is set to \texttt{1} by default, which means that
- \texttt{latexindent.pl} will look for this pattern; you can tell \texttt{latexindent.pl}
- not to look for the pattern, by setting \texttt{lookForThis} to \texttt{0}.
-
- There are \announce{2017-08-21}{specialBeforeCommand} examples in which it is
- advantageous to search for \texttt{specialBeginEnd} fields \emph{before} searching for
- commands, and the \texttt{specialBeforeCommand} switch controls this behaviour. For
- example, consider the file shown in \cref{lst:specialLRbefore}.%
-
- \cmhlistingsfromfile{demonstrations/specialLR.tex}{\texttt{specialLR.tex}}{lst:specialLRbefore}
-
- Now consider the YAML files shown in
- \cref{lst:specialsLeftRight-yaml,lst:specialBeforeCommand-yaml}
- \index{specialBeginEnd!searching for special before commands}
-
- \begin{cmhtcbraster}
- \cmhlistingsfromfile[]{demonstrations/specialsLeftRight.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{specialsLeftRight.yaml}}{lst:specialsLeftRight-yaml}
- \cmhlistingsfromfile[]{demonstrations/specialBeforeCommand.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{specialBeforeCommand.yaml}}{lst:specialBeforeCommand-yaml}
- \end{cmhtcbraster}
-
- Upon running the following commands \index{switches!-l demonstration}
- \begin{widepage}
- \begin{commandshell}
-latexindent.pl specialLR.tex -l=specialsLeftRight.yaml
-latexindent.pl specialLR.tex -l=specialsLeftRight.yaml,specialBeforeCommand.yaml
-\end{commandshell}
- \end{widepage}
- we receive the respective outputs in
- \cref{lst:specialLR-comm-first-tex,lst:specialLR-special-first-tex}.
-
- \begin{minipage}{.49\linewidth}
- \cmhlistingsfromfile{demonstrations/specialLR-comm-first.tex}{\texttt{specialLR.tex} using \cref{lst:specialsLeftRight-yaml}}{lst:specialLR-comm-first-tex}
- \end{minipage}
- \hfill
- \begin{minipage}{.49\linewidth}
- \cmhlistingsfromfile{demonstrations/specialLR-special-first.tex}{\texttt{specialLR.tex} using \cref{lst:specialsLeftRight-yaml,lst:specialBeforeCommand-yaml}}{lst:specialLR-special-first-tex}
- \end{minipage}
-
- Notice that in:
- \begin{itemize}
- \item \cref{lst:specialLR-comm-first-tex} the \lstinline!\left! has been treated as a
- \emph{command}, with one optional argument;
- \item \cref{lst:specialLR-special-first-tex} the \texttt{specialBeginEnd} pattern in
- \cref{lst:specialsLeftRight-yaml}
- has been obeyed because \cref{lst:specialBeforeCommand-yaml} specifies that the
- \texttt{specialBeginEnd} should be sought \emph{before} commands.
- \end{itemize}
-
- You can,optionally, specify \announce{2018-04-27}{update to specialBeginEnd} the
- \texttt{middle} field for anything that you specify in \texttt{specialBeginEnd}. For
- example, let's consider the \texttt{.tex} file in \cref{lst:special2}.
- \index{specialBeginEnd!middle} \index{specialBeginEnd!IfElsFi example}%
-
- \cmhlistingsfromfile{demonstrations/special2.tex}{\texttt{special2.tex}}{lst:special2}
-
- Upon saving the YAML settings in \cref{lst:middle-yaml,lst:middle1-yaml} and running the
- commands \index{switches!-l demonstration}
- \begin{commandshell}
-latexindent.pl special2.tex -l=middle
-latexindent.pl special2.tex -l=middle1
-\end{commandshell}
- then we obtain the output given in \cref{lst:special2-mod1,lst:special2-mod2}.
-
- \begin{cmhtcbraster}
- \cmhlistingsfromfile{demonstrations/middle.yaml}[yaml-TCB]{\texttt{middle.yaml}}{lst:middle-yaml}
- \cmhlistingsfromfile{demonstrations/special2-mod1.tex}{\texttt{special2.tex} using \cref{lst:middle-yaml}}{lst:special2-mod1}
- \end{cmhtcbraster}
-
- \begin{cmhtcbraster}
- \cmhlistingsfromfile{demonstrations/middle1.yaml}[yaml-TCB]{\texttt{middle1.yaml}}{lst:middle1-yaml}
- \cmhlistingsfromfile{demonstrations/special2-mod2.tex}{\texttt{special2.tex} using \cref{lst:middle1-yaml}}{lst:special2-mod2}
- \end{cmhtcbraster}
-
- We note that:
- \begin{itemize}
- \item in \cref{lst:special2-mod1} the bodies of each of the \texttt{Elsif} statements have been
- indented appropriately;
- \item the \texttt{Else} statement has \emph{not} been indented appropriately in
- \cref{lst:special2-mod1} -- read on!
- \item we have specified multiple settings for the \texttt{middle} field using the syntax
- demonstrated in \cref{lst:middle1-yaml} so that the body of the \texttt{Else} statement
- has been indented appropriately in \cref{lst:special2-mod2}.
- \end{itemize}
-
- You may \announce{2018-08-13}{specialBeginEnd verbatim} specify fields in
- \texttt{specialBeginEnd} to be treated as verbatim code blocks by changing
- \texttt{lookForThis} to be \texttt{verbatim}. \index{verbatim!specialBeginEnd}%
-
- For example, beginning with the code in \cref{lst:special3-mod1} and the YAML in
- \cref{lst:special-verb1-yaml}, and running \index{switches!-l demonstration}
- \begin{commandshell}
-latexindent.pl special3.tex -l=special-verb1
-\end{commandshell}
- then the output in \cref{lst:special3-mod1} is unchanged.
- \index{specialBeginEnd!specifying as verbatim}
-
- \begin{cmhtcbraster}
- \cmhlistingsfromfile{demonstrations/special-verb1.yaml}[yaml-TCB]{\texttt{special-verb1.yaml}}{lst:special-verb1-yaml}
- \cmhlistingsfromfile{demonstrations/special3-mod1.tex}{\texttt{special3.tex} and output using \cref{lst:special-verb1-yaml}}{lst:special3-mod1}
- \end{cmhtcbraster}
-
- We can combine the \texttt{specialBeginEnd} with the \texttt{lookForAlignDelims} feature.
- We begin with the code in \cref{lst:special-align}.
-
- \cmhlistingsfromfile{demonstrations/special-align.tex}{\texttt{special-align.tex}}{lst:special-align}
-
- Let's assume that our goal is to align the code at the \texttt{edge} and \texttt{node}
- text; we employ the code given in \cref{lst:edge-node1} and run the command
- \index{switches!-l demonstration} \index{switches!-o demonstration}
- \begin{commandshell}
-latexindent.pl special-align.tex -l edge-node1.yaml -o=+-mod1
-\end{commandshell}
- to receive the output in \cref{lst:special-align-mod1}. \index{specialBeginEnd!combined
- with lookForAlignDelims} \index{specialBeginEnd!delimiterRegEx}
- \index{specialBeginEnd!alignment at delimiter} \index{specialBeginEnd!tikz example}
- \index{regular expressions!delimiter alignment for edge or node} \index{delimiters!within
- specialBeginEnd blocks} \index{regular expressions!numeric 0-9}
-
- \begin{cmhtcbraster}[ raster left skip=-3.5cm,]
- \cmhlistingsfromfile{demonstrations/edge-node1.yaml}[yaml-TCB]{\texttt{edge-node1.yaml}}{lst:edge-node1}
- \cmhlistingsfromfile{demonstrations/special-align-mod1.tex}{\texttt{special-align.tex} using \cref{lst:edge-node1}}{lst:special-align-mod1}
- \end{cmhtcbraster}
-
- The output in \cref{lst:special-align-mod1} is not quite ideal. We can tweak the settings
- within \cref{lst:edge-node1} in order to improve the output; in particular, we employ the
- code in \cref{lst:edge-node2} and run the command \index{switches!-l demonstration}
- \index{switches!-o demonstration} \index{regular expressions!uppercase alph A-Z}
- \begin{commandshell}
-latexindent.pl special-align.tex -l edge-node2.yaml -o=+-mod2
-\end{commandshell}
- to receive the output in \cref{lst:special-align-mod2}.
- \index{specialBeginEnd!delimiterRegEx tweaked} \index{regular expressions!at least one +}
- \index{regular expressions!horizontal space \textbackslash{h}}
-
- \begin{cmhtcbraster}[ raster left skip=-3.5cm,]
- \cmhlistingsfromfile{demonstrations/edge-node2.yaml}[yaml-TCB]{\texttt{edge-node2.yaml}}{lst:edge-node2}
- \cmhlistingsfromfile{demonstrations/special-align-mod2.tex}{\texttt{special-align.tex} using \cref{lst:edge-node2}}{lst:special-align-mod2}
- \end{cmhtcbraster}
-
- The \texttt{lookForThis} field can be considered optional;
- \announce{2021-06-19}*{lookForThis optional for specialBeginEnd} by default, it is
- assumed to be 1, which is demonstrated in \cref{lst:edge-node2}.%
-
-\yamltitle{indentAfterHeadings}*{fields}
- This field enables the user to specify indentation rules that take effect after heading
- commands such as \lstinline!\part!, \lstinline!\chapter!, \lstinline!\section!,
- \lstinline!\subsection*!, or indeed any user-specified command written in this
- field.\footnote{There is a slight difference in interface for this field when comparing
- Version 2.2 to Version 3.0; see \vref{app:differences} for details.}
-
- \cmhlistingsfromfile[style=indentAfterHeadings]{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{indentAfterHeadings}}{lst:indentAfterHeadings}
-
- The default settings do \emph{not} place indentation after a heading, but you can easily
- switch them on by changing \texttt{indentAfterThisHeading} from 0 to 1. The
- \texttt{level} field tells \texttt{latexindent.pl} the hierarchy of the heading structure
- in your document. You might, for example, like to have both \texttt{section} and
- \texttt{subsection} set with \texttt{level: 3} because you do not want the indentation to
- go too deep.
-
- You can add any of your own custom heading commands to this field, specifying the
- \texttt{level} as appropriate. You can also specify your own indentation in
- \texttt{indentRules} (see \vref{sec:noadd-indent-rules}); you will find the default
- \texttt{indentRules} contains \lstinline!chapter: " "! which tells
- \texttt{latexindent.pl} simply to use a space character after \texttt{chapter} headings
- (once \texttt{indent} is set to \texttt{1} for \texttt{chapter}).
-
- For example, assuming that you have the code in \cref{lst:headings1yaml} saved into
- \texttt{headings1.yaml}, and that you have the text from \cref{lst:headings1} saved into
- \texttt{headings1.tex}.
-
- \begin{cmhtcbraster}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/headings1.yaml}[yaml-TCB]{\texttt{headings1.yaml}}{lst:headings1yaml}
- \cmhlistingsfromfile{demonstrations/headings1.tex}{\texttt{headings1.tex}}{lst:headings1}
- \end{cmhtcbraster}
-
- If you run the command \index{switches!-l demonstration}
- \begin{commandshell}
-latexindent.pl headings1.tex -l=headings1.yaml
-\end{commandshell}
- then you should receive the output given in \cref{lst:headings1-mod1}.
-
- \begin{minipage}{.45\textwidth}
- \cmhlistingsfromfile[showtabs=true]{demonstrations/headings1-mod1.tex}{\texttt{headings1.tex} using \cref{lst:headings1yaml}}{lst:headings1-mod1}
- \end{minipage}%
- \hfill
- \begin{minipage}{.45\textwidth}
- \cmhlistingsfromfile[showtabs=true]{demonstrations/headings1-mod2.tex}{\texttt{headings1.tex} second modification}{lst:headings1-mod2}
- \end{minipage}
-
- Now say that you modify the \texttt{YAML} from \cref{lst:headings1yaml} so that the
- \texttt{paragraph} \texttt{level} is \texttt{1}; after running \index{switches!-l
- demonstration}
- \begin{commandshell}
-latexindent.pl headings1.tex -l=headings1.yaml
-\end{commandshell}
- you should receive the code given in \cref{lst:headings1-mod2}; notice that the
- \texttt{paragraph} and \texttt{subsection} are at the same indentation level.
-
- \index{indentation!maximum indetation}
-
-\yamltitle{maximumIndentation}*{horizontal space}
- You can control the maximum indentation given to your file by
- \announce{2017-08-21}{maximumIndentation} specifying the \texttt{maximumIndentation}
- field as horizontal space (but \emph{not} including tabs). This feature uses the
- \texttt{Text::Tabs} module \cite{texttabs}, and is \emph{off} by default.%
-
- For example, consider the example shown in \cref{lst:mult-nested} together with the
- default output shown in \cref{lst:mult-nested-default}.
-
- \begin{cmhtcbraster}[raster column skip=.1\linewidth]
- \cmhlistingsfromfile{demonstrations/mult-nested.tex}{\texttt{mult-nested.tex}}{lst:mult-nested}
- \cmhlistingsfromfile[showtabs=true]{demonstrations/mult-nested-default.tex}{\texttt{mult-nested.tex} default output}{lst:mult-nested-default}
- \end{cmhtcbraster}
-
- Now say that, for example, you have the \texttt{max-indentation1.yaml} from
- \cref{lst:max-indentation1yaml} and that you run the following command:
- \index{switches!-l demonstration}
- \begin{commandshell}
-latexindent.pl mult-nested.tex -l=max-indentation1
-\end{commandshell}
- You should receive the output shown in \cref{lst:mult-nested-max-ind1}.
-
- \begin{cmhtcbraster}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/max-indentation1.yaml}[yaml-TCB]{\texttt{max-indentation1.yaml}}{lst:max-indentation1yaml}
- \cmhlistingsfromfile[showspaces=true]{demonstrations/mult-nested-max-ind1.tex}{\texttt{mult-nested.tex} using \cref{lst:max-indentation1yaml}}{lst:mult-nested-max-ind1}
- \end{cmhtcbraster}
-
- Comparing the output in \cref{lst:mult-nested-default,lst:mult-nested-max-ind1} we notice
- that the (default) tabs of indentation have been replaced by a single space.
-
- In general, when using the \texttt{maximumIndentation} feature, any leading tabs will be
- replaced by equivalent spaces except, of course, those found in
- \texttt{verbatimEnvironments} (see \vref{lst:verbatimEnvironments}) or
- \texttt{noIndentBlock} (see \vref{lst:noIndentBlock}).
-
-\subsection{The code blocks known latexindent.pl}\label{subsubsec:code-blocks}
-
- As of Version 3.0, \texttt{latexindent.pl} processes documents using code blocks; each of
- these are shown in \cref{tab:code-blocks}. \index{regular expressions!uppercase alph A-Z}
- \index{regular expressions!lowercase alph a-z} \index{regular expressions!numeric 0-9}
- \index{regular expressions!horizontal space \textbackslash{h}}
-
- \begin{table}[!htp]
- \begin{widepage}
- \centering
- \caption{Code blocks known to \texttt{latexindent.pl}}
- \label{tab:code-blocks}
- \begin{tabular}{m{.3\linewidth}@{\hspace{.25cm}}m{.4\linewidth}@{\hspace{.25cm}}m{.2\linewidth}}
- \toprule
- Code block & characters allowed in name & example \\
- \midrule
- environments & \lstinline!a-zA-Z@\*0-9_\\! &
- \begin{lstlisting}[,nolol=true,]
-\begin{myenv}
-body of myenv
-\end{myenv}
- \end{lstlisting}
- \\\cmidrule{2-3}
- optionalArguments & \emph{inherits} name from parent (e.g environment name) &
- \begin{lstlisting}[,nolol=true,]
-[
-opt arg text
-]
- \end{lstlisting}
- \\\cmidrule{2-3}
- mandatoryArguments & \emph{inherits} name from parent (e.g environment name) &
- \begin{lstlisting}[,nolol=true,]
-{
-mand arg text
-}
- \end{lstlisting}
- \\\cmidrule{2-3}
- commands & \lstinline!+a-zA-Z@\*0-9_\:! & \lstinline!\mycommand!$\langle$\itshape{arguments}$\rangle$ \\\cmidrule{2-3}
- keyEqualsValuesBracesBrackets & \lstinline!a-zA-Z@\*0-9_\/.\h\{\}:\#-! & \lstinline!my key/.style=!$\langle$\itshape{arguments}$\rangle$ \\\cmidrule{2-3}
- namedGroupingBracesBrackets & \lstinline!0-9\.a-zA-Z@\*><! & \lstinline!in!$\langle$\itshape{arguments}$\rangle$ \\\cmidrule{2-3}
- UnNamedGroupingBracesBrackets & \centering\emph{No name!} & \lstinline!{! or \lstinline![! or \lstinline!,! or \lstinline!\&! or \lstinline!)! or \lstinline!(! or \lstinline!$! followed by $\langle$\itshape{arguments}$\rangle$ \\\cmidrule{2-3}
- ifElseFi & \lstinline!@a-zA-Z! but must begin with either \newline \lstinline!\if! of \lstinline!\@if! &
- \begin{lstlisting}[,nolol=true,]
-\ifnum...
-...
-\else
-...
-\fi
- \end{lstlisting} \\\cmidrule{2-3}
- items & User specified, see \vref{lst:indentafteritems,lst:itemNames} &
- \begin{lstlisting}[,nolol=true,]
-\begin{enumerate}
- \item ...
-\end{enumerate}
- \end{lstlisting} \\\cmidrule{2-3}
- specialBeginEnd & User specified, see \vref{lst:specialBeginEnd} &
- \begin{lstlisting}[,nolol=true,]
-\[
- ...
-\]
- \end{lstlisting} \\\cmidrule{2-3}
- afterHeading & User specified, see \vref{lst:indentAfterHeadings} &
- \begin{lstlisting}[,morekeywords={chapter},nolol=true,]
-\chapter{title}
- ...
-\section{title}
- \end{lstlisting} \\\cmidrule{2-3}
- filecontents & User specified, see \vref{lst:fileContentsEnvironments} &
- \begin{lstlisting}[,nolol=true,]
-\begin{filecontents}
-...
-\end{filecontents}
- \end{lstlisting} \\
- \bottomrule
- \end{tabular}
- \end{widepage}
- \end{table}
-
- We will refer to these code blocks in what follows. \announce{2019-07-13}{fine tuning of
- code blocks} Note that the fine tuning of the definition of the code blocks detailed in
- \cref{tab:code-blocks} is discussed in \vref{sec:finetuning}.%
diff --git a/support/latexindent/documentation/sec-demonstration.tex b/support/latexindent/documentation/sec-demonstration.tex
deleted file mode 100644
index 6deb4421fa..0000000000
--- a/support/latexindent/documentation/sec-demonstration.tex
+++ /dev/null
@@ -1,42 +0,0 @@
-% arara: pdflatex: { files: [latexindent]}
-\section{Demonstration: before and after}
- Let's give a demonstration of some before and after code -- after all, you probably won't
- want to try the script if you don't much like the results. You might also like to watch
- the video demonstration I made on youtube \cite{cmh:videodemo}
-
- As you look at \crefrange{lst:filecontentsbefore}{lst:pstricksafter}, remember that
- \texttt{latexindent.pl} is just following its rules, and there is nothing particular
- about these code snippets. All of the rules can be modified so that you can personalise
- your indentation scheme.
-
- In each of the samples given in \crefrange{lst:filecontentsbefore}{lst:pstricksafter} the
- `before' case is a `worst case scenario' with no effort to make indentation. The `after'
- result would be the same, regardless of the leading white space at the beginning of each
- line which is stripped by \texttt{latexindent.pl} (unless a \texttt{verbatim}-like
- environment or \texttt{noIndentBlock} is specified -- more on this in
- \cref{sec:defuseloc}).
-
- \begin{widepage}
- \centering
- \begin{minipage}{.45\linewidth}
- \cmhlistingsfromfile{demonstrations/filecontents1.tex}{\texttt{filecontents1.tex}}{lst:filecontentsbefore}
- \end{minipage}\hfill
- \begin{minipage}{.45\linewidth}
- \cmhlistingsfromfile{demonstrations/filecontents1-default.tex}{\texttt{filecontents1.tex} default output}{lst:filecontentsafter}
- \end{minipage}%
-
- \begin{minipage}{.45\linewidth}
- \cmhlistingsfromfile{demonstrations/tikzset.tex}{\texttt{tikzset.tex}}{lst:tikzsetbefore}
- \end{minipage}\hfill
- \begin{minipage}{.45\linewidth}
- \cmhlistingsfromfile{demonstrations/tikzset-default.tex}{\texttt{tikzset.tex} default output}{lst:tikzsetafter}
- \end{minipage}%
-
- \begin{minipage}{.45\linewidth}
- \cmhlistingsfromfile{demonstrations/pstricks.tex}{\texttt{pstricks.tex}}{lst:pstricksbefore}
- \end{minipage}\hfill
- \begin{minipage}{.45\linewidth}
- \cmhlistingsfromfile{demonstrations/pstricks-default.tex}{\texttt{pstricks.tex} default output}{lst:pstricksafter}
- \end{minipage}%
- \end{widepage}
-
diff --git a/support/latexindent/documentation/sec-fine-tuning.tex b/support/latexindent/documentation/sec-fine-tuning.tex
deleted file mode 100644
index 8798b276ab..0000000000
--- a/support/latexindent/documentation/sec-fine-tuning.tex
+++ /dev/null
@@ -1,311 +0,0 @@
-% arara: pdflatex: { files: [latexindent]}
-\section{Fine tuning}\label{sec:finetuning}
- \texttt{latexindent.pl} operates by looking for the code blocks detailed in
- \vref{tab:code-blocks}.
- \announce{2019-07-13}{details of fine tuning of code blocks} The fine tuning of the
- details of such code blocks is controlled by the \texttt{fineTuning} field, detailed in
- \cref{lst:fineTuning}.
-
- This field is for those that would like to peek under the bonnet/hood and make some fine
- tuning to \texttt{latexindent.pl}'s operating. \index{warning!fine tuning} \index{regular
- expressions!fine tuning} \index{regular expressions!environments} \index{regular
- expressions!ifElseFi} \index{regular expressions!commands} \index{regular
- expressions!keyEqualsValuesBracesBrackets} \index{regular
- expressions!NamedGroupingBracesBrackets} \index{regular
- expressions!UnNamedGroupingBracesBrackets} \index{regular expressions!arguments}
- \index{regular expressions!modifyLineBreaks} \index{regular expressions!lowercase alph
- a-z} \index{regular expressions!uppercase alph A-Z} \index{regular expressions!numeric
- 0-9} \index{regular expressions!at least one +} \index{regular expressions!horizontal
- space \textbackslash{h}}
-
- \begin{warning}
- Making changes to the fine tuning may have significant consequences for your indentation
- scheme, proceed with caution!
- \end{warning}
-
- \begin{widepage}
- \cmhlistingsfromfile[style=fineTuning]{../defaultSettings.yaml}[width=.95\linewidth,before=\centering,enhanced jigsaw,breakable,yaml-TCB]{\texttt{fineTuning}}{lst:fineTuning}
- \end{widepage}
-
- The fields given in \cref{lst:fineTuning} are all \emph{regular expressions}. This manual
- is not intended to be a tutorial on regular expressions; you might like to read, for
- example, \cite{masteringregexp} for a detailed covering of the topic.
-
- We make the following comments with reference to \cref{lst:fineTuning}:
- \begin{enumerate}
- \item the \texttt{environments:name} field details that the \emph{name} of an environment can
- contain:
- \begin{enumerate}
- \item \texttt{a-z} lower case letters
- \item \texttt{A-Z} upper case letters
- \item \texttt{@} the \texttt{@} 'letter'
- \item \lstinline!\*! stars
- \item \texttt{0-9} numbers
- \item \lstinline!_! underscores
- \item \lstinline!\! backslashes
- \end{enumerate}
- \index{regular expressions!at least one +}
- The \texttt{+} at the end means \emph{at least one} of the above characters.
- \item the \texttt{ifElseFi:name} field:
- \begin{enumerate}
- \item \lstinline^@?^ means that it \emph{can possibly} begin with
- \lstinline^@^
- \item followed by \texttt{if}
- \item followed by 0 or more characters from \texttt{a-z}, \texttt{A-Z} and \texttt{@}
- \item the \texttt{?} the end means \emph{non-greedy}, which means `stop the match as soon as
- possible'
- \end{enumerate}
- \item the \texttt{keyEqualsValuesBracesBrackets} contains some interesting syntax:
- \begin{enumerate}
- \item \lstinline!|! means `or'
- \item \lstinline^(?:(?<!\\)\{)^ the \lstinline^(?:...)^ uses a \emph{non-capturing} group -- you don't necessarily need to worry about what this
- means, but just know that for the \texttt{fineTuning} feature you should only ever use
- \emph{non}-capturing groups, and \emph{not} capturing groups, which are simply
- \lstinline!(...)!
- \item \lstinline^(?<!\\)\{)^ means a \lstinline^{^ but it can \emph{not} be immediately preceded by a \lstinline!\!
- \end{enumerate}
- \item in the \texttt{arguments:before} field
- \begin{enumerate}
- \item \lstinline^\d\h*^ means a digit (i.e. a number), followed by 0 or more horizontal spaces
- \item \lstinline^;?,?^ means \emph{possibly} a semi-colon, and possibly a comma
- \item \lstinline^\<.*?\>^ is designed for 'beamer'-type commands; the
- \lstinline^.*?^ means anything in between \lstinline^<...>^
- \end{enumerate}
- \item the \texttt{modifyLineBreaks} field refers to fine tuning settings detailed in
- \vref{sec:modifylinebreaks}. In particular:
- \begin{enumerate}
- \item \texttt{betterFullStop} is in relation to the one sentence per line routine, detailed in
- \vref{sec:onesentenceperline}
- \item \texttt{doubleBackSlash} is in relation to the \texttt{DBSStartsOnOwnLine} and
- \texttt{DBSFinishesWithLineBreak} polyswitches surrounding double back slashes, see
- \vref{subsec:dbs}
- \item \texttt{comma} is in relation to the \texttt{CommaStartsOnOwnLine} and
- \texttt{CommaFinishesWithLineBreak} polyswitches surrounding commas in optional and
- mandatory arguments; see \vref{tab:poly-switch-mapping}
- \end{enumerate}
- \end{enumerate}
-
- It is not obvious from \cref{lst:fineTuning}, but each of the \texttt{follow},
- \texttt{before} and \texttt{between} fields allow trailing comments, line breaks, and
- horizontal spaces between each character.
-
- \index{warning!capture groups}
- \begin{warning}
- For the \texttt{fineTuning} feature you should only ever use \emph{non}-capturing groups,
- such as \lstinline!(?:...)! and \emph{not} capturing groups, which are \lstinline!(...)!
- \end{warning}
-
- \begin{example}
- As a demonstration, consider the file given in \cref{lst:finetuning1}, together with its
- default output using the command
- \begin{commandshell}
-latexindent.pl finetuning1.tex
-\end{commandshell}
- is given in \cref{lst:finetuning1-default}.
-
- \begin{cmhtcbraster}[raster column skip=.01\linewidth]
- \cmhlistingsfromfile{demonstrations/finetuning1.tex}{\texttt{finetuning1.tex}}{lst:finetuning1}
- \cmhlistingsfromfile{demonstrations/finetuning1-default.tex}{\texttt{finetuning1.tex} default}{lst:finetuning1-default}
- \end{cmhtcbraster}
-
- It's clear from \cref{lst:finetuning1-default} that the indentation scheme has not worked
- as expected. We can \emph{fine tune} the indentation scheme by employing the settings
- given in \cref{lst:fine-tuning1} and running the command \index{switches!-l
- demonstration}
- \begin{commandshell}
-latexindent.pl finetuning1.tex -l=fine-tuning1.yaml
-\end{commandshell}
- and the associated (desired) output is given in \cref{lst:finetuning1-mod1}.
- \index{regular expressions!at least one +}
-
- \begin{cmhtcbraster}[raster column skip=.01\linewidth]
- \cmhlistingsfromfile{demonstrations/finetuning1-mod1.tex}{\texttt{finetuning1.tex} using \cref{lst:fine-tuning1}}{lst:finetuning1-mod1}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/fine-tuning1.yaml}[yaml-TCB]{\texttt{finetuning1.yaml}}{lst:fine-tuning1}
- \end{cmhtcbraster}
- \end{example}
-
- \begin{example}
- Let's have another demonstration; consider the file given in \cref{lst:finetuning2},
- together with its default output using the command
- \begin{commandshell}
-latexindent.pl finetuning2.tex
-\end{commandshell}
- is given in \cref{lst:finetuning2-default}.
-
- \begin{cmhtcbraster}[raster column skip=.01\linewidth,
- raster left skip=-3.75cm,
- raster right skip=0cm,]
- \cmhlistingsfromfile{demonstrations/finetuning2.tex}{\texttt{finetuning2.tex}}{lst:finetuning2}
- \cmhlistingsfromfile{demonstrations/finetuning2-default.tex}{\texttt{finetuning2.tex} default}{lst:finetuning2-default}
- \end{cmhtcbraster}
-
- It's clear from \cref{lst:finetuning2-default} that the indentation scheme has not worked
- as expected. We can \emph{fine tune} the indentation scheme by employing the settings
- given in \cref{lst:fine-tuning2} and running the command \index{switches!-l
- demonstration}
- \begin{commandshell}
-latexindent.pl finetuning2.tex -l=fine-tuning2.yaml
-\end{commandshell}
- and the associated (desired) output is given in \cref{lst:finetuning2-mod1}.
-
- \begin{cmhtcbraster}[raster column skip=.01\linewidth,
- raster left skip=-3.75cm,
- raster right skip=0cm,]
- \cmhlistingsfromfile{demonstrations/finetuning2-mod1.tex}{\texttt{finetuning2.tex} using \cref{lst:fine-tuning2}}{lst:finetuning2-mod1}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/fine-tuning2.yaml}[yaml-TCB]{\texttt{finetuning2.yaml}}{lst:fine-tuning2}
- \end{cmhtcbraster}
-
- In particular, note that the settings in \cref{lst:fine-tuning2} specify that
- \texttt{NamedGroupingBracesBrackets} and \texttt{UnNamedGroupingBracesBrackets} can
- follow \texttt{"} and that we allow \lstinline!---! between arguments.
- \end{example}
-
- \begin{example}
- You can tweak the \texttt{fineTuning} using the \texttt{-y} switch, but to be sure to use
- quotes appropriately. For example, starting with the code in \cref{lst:finetuning3} and
- running the following command
- \begin{commandshell}
-latexindent.pl -m -y='modifyLineBreaks:oneSentencePerLine:manipulateSentences: 1, modifyLineBreaks:oneSentencePerLine:sentencesBeginWith:a-z: 1, fineTuning:modifyLineBreaks:betterFullStop: "(?:\.|;|:(?![a-z]))|(?:(?<!(?:(?:e\.g)|(?:i\.e)|(?:etc))))\.(?!(?:[a-z]|[A-Z]|\-|~|\,|[0-9]))"' issue-243.tex -o=+-mod1
-\end{commandshell}
- gives the output shown in \cref{lst:finetuning3-mod1}.
-
- \cmhlistingsfromfile{demonstrations/finetuning3.tex}{\texttt{finetuning3.tex}}{lst:finetuning3}
- \cmhlistingsfromfile{demonstrations/finetuning3-mod1.tex}{\texttt{finetuning3.tex} using -y switch}{lst:finetuning3-mod1}
- \end{example}
-
- \begin{example}
- We can tweak the \texttt{fineTuning} for how trailing comments are classified. For
- motivation, let's consider the code given in \cref{lst:finetuning4}
-
- \cmhlistingsfromfile{demonstrations/finetuning4.tex}{\texttt{finetuning4.tex}}{lst:finetuning4}
-
- We will compare the settings given in \cref{lst:href1,lst:href2}.
-
- \begin{cmhtcbraster}[raster column skip=.01\linewidth,
- raster left skip=0cm,
- raster right skip=-0.5cm,]
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/href1.yaml}[MLB-TCB]{\texttt{href1.yaml}}{lst:href1}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/href2.yaml}[MLB-TCB]{\texttt{href2.yaml}}{lst:href2}
- \end{cmhtcbraster}
-
- Upon running the following commands
- \begin{commandshell}
-latexindent.pl -m finetuning4.tex -o=+-mod1 -l=href1
-latexindent.pl -m finetuning4.tex -o=+-mod2 -l=href2
-\end{commandshell}
- we receive the respective output in \cref{lst:finetuning4-mod1,lst:finetuning4-mod2}.
-
- \begin{widepage}
- \cmhlistingsfromfile{demonstrations/finetuning4-mod1.tex}{\texttt{finetuning4.tex} using \cref{lst:href1}}{lst:finetuning4-mod1}
-
- \cmhlistingsfromfile{demonstrations/finetuning4-mod2.tex}{\texttt{finetuning4.tex} using \cref{lst:href2}}{lst:finetuning4-mod2}
- \end{widepage}
-
- We note that in:
- \begin{itemize}
- \item \cref{lst:finetuning4-mod1} the trailing comments are assumed to be everything following
- the first comment symbol, which has meant that everything following it has been moved to
- the end of the line; this is undesirable, clearly!
- \item \cref{lst:finetuning4-mod2} has fine-tuned the trailing comment matching, and says that
- \% cannot
- be immediately preceeded by the words `Handbook', `for' or `Spoken', which means that
- none of the \% symbols have been treated as trailing comments, and the output is
- desirable.
- \end{itemize}
-
- Another approach to this situation, which does not use \texttt{fineTuning}, is to use
- \texttt{noIndentBlock} which we discussed in \vref{lst:noIndentBlock}; using the settings
- in \cref{lst:href3} and running the command
- \begin{commandshell}
-latexindent.pl -m finetuning4.tex -o=+-mod3 -l=href3
-\end{commandshell}
- then we receive the same output given in \cref{lst:finetuning4-mod2}.
-
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/href3.yaml}[MLB-TCB]{\texttt{href3.yaml}}{lst:href3}
-
- With reference to the \texttt{body} field in \cref{lst:href3}, we note that the
- \texttt{body} field can be interpreted as: the fewest number of zero or more characters
- that are not right braces. This is an example of character class. \index{regular
- expressions!character class demonstration}
- \end{example}
-
- \begin{example}
- We can use the \texttt{fineTuning} field to assist in the formatting of bibliography
- files. \index{bibliography files} \index{regular expressions!delimiterRegEx}
- \index{regular expressions!capturing parenthesis} \index{regular expressions!ampersand
- alignment} \index{delimiters!delimiterRegEx}
-
- Starting with the file in \cref{lst:bib1} and running the command
- \begin{commandshell}
-latexindent.pl bib1.tex -o=+-mod1
- \end{commandshell}
- gives the output in \cref{lst:bib1-mod1}.
-
- \begin{widepage}
- \begin{cmhtcbraster}[raster column skip=.01\linewidth]
- \cmhlistingsfromfile{demonstrations/bib1.bib}{\texttt{bib1.bib}}{lst:bib1}
- \cmhlistingsfromfile{demonstrations/bib1-mod1.bib}{\texttt{bib1-mod1.bib}}{lst:bib1-mod1}
- \end{cmhtcbraster}
- \end{widepage}
-
- Let's assume that we would like to format the output so as to align the \texttt{=}
- symbols. Using the settings in \cref{lst:bibsettings1} and running the command
- \begin{commandshell}
-latexindent.pl bib1.bib -l bibsettings1.yaml -o=+-mod2
- \end{commandshell}
- gives the output in \cref{lst:bib1-mod2}.
-
- \begin{widepage}
- \begin{cmhtcbraster}[raster column skip=.1\linewidth]
- \cmhlistingsfromfile{demonstrations/bib1-mod2.bib}{\texttt{bib1.bib} using \cref{lst:bibsettings1}}{lst:bib1-mod2}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/bibsettings1.yaml}[yaml-TCB]{\texttt{bibsettings1.yaml}}{lst:bibsettings1}
- \end{cmhtcbraster}
- \end{widepage}
- Some notes about \cref{lst:bibsettings1}:
- \begin{itemize}
- \item we have populated the \texttt{lookForAlignDelims} field with the \texttt{online} command,
- and have used the \texttt{delimiterRegEx}, discussed in \vref{sec:delimiter-reg-ex};
- \item we have tweaked the \texttt{keyEqualsValuesBracesBrackets} code block so that it will
- \emph{not} be found following a comma; this means that, in contrast to the default
- behaviour, the lines such as \lstinline!date={2013-05-23},! will \emph{not} be treated as
- key-equals-value braces;
- \item the adjustment to \texttt{keyEqualsValuesBracesBrackets} necessitates the associated
- change to the \texttt{UnNamedGroupingBracesBrackets} field so that they will be searched
- for following \texttt{=} symbols.
- \end{itemize}
- \end{example}
-
- \begin{example}
- We can build upon \cref{lst:bibsettings1} for slightly more complicated bibliography
- files.
-
- Starting with the file in \cref{lst:bib2} and running the command
- \begin{commandshell}
-latexindent.pl bib2.bib -l bibsettings1.yaml -o=+-mod1
- \end{commandshell}
- gives the output in \cref{lst:bib2-mod1}.
-
- \begin{widepage}
- \cmhlistingsfromfile{demonstrations/bib2.bib}{\texttt{bib2.bib}}{lst:bib2}
- \cmhlistingsfromfile{demonstrations/bib2-mod1.bib}{\texttt{bib2-mod1.bib}}{lst:bib2-mod1}
- \end{widepage}
-
- The output in \cref{lst:bib2-mod1} is not ideal, as the \texttt{=} symbol within the url
- field has been incorrectly used as an alignment delimiter.
-
- We address this by tweaking the \texttt{delimiterRegEx} field in \cref{lst:bibsettings2}.
-
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/bibsettings2.yaml}[yaml-TCB]{\texttt{bibsettings2.yaml}}{lst:bibsettings2}
-
- Upon running the command
- \begin{commandshell}
-latexindent.pl bib2.bib -l bibsettings1.yaml,bibsettings2.yaml -o=+-mod2
- \end{commandshell}
- we receive the \emph{desired} output in \cref{lst:bib2-mod2}.
-
- \cmhlistingsfromfile{demonstrations/bib2-mod2.bib}{\texttt{bib2-mod2.bib}}{lst:bib2-mod2}
-
- With reference to \cref{lst:bibsettings2} we note that the \texttt{delimiterRegEx} has
- been adjusted so that \texttt{=} symbols are used as the delimiter, but only when they
- are \emph{not preceeded} by either \texttt{v} or \texttt{spfreload}.
- \end{example}
diff --git a/support/latexindent/documentation/sec-how-to-use.tex b/support/latexindent/documentation/sec-how-to-use.tex
deleted file mode 100644
index d721aa9dd6..0000000000
--- a/support/latexindent/documentation/sec-how-to-use.tex
+++ /dev/null
@@ -1,549 +0,0 @@
-% arara: pdflatex: { files: [latexindent]}
-\section{How to use the script}\label{sec:how:to:use}
- \texttt{latexindent.pl} ships as part of the \TeX Live distribution for
- Linux and Mac users; \texttt{latexindent.exe} ships as part of the \TeX Live for Windows
- users. These files are also available from github \cite{latexindent-home} should you wish
- to use them without a \TeX{} distribution; in this case, you may like to read
- \vref{sec:updating-path} which details how the \texttt{path} variable can be updated.
- \index{TeXLive}
-
- In what follows, we will always refer to \texttt{latexindent.pl}, but depending on your
- operating system and preference, you might substitute \texttt{latexindent.exe} or simply
- \texttt{latexindent}.
-
- There are two ways to use \texttt{latexindent.pl}: from the command line, and using
- \texttt{arara}; we discuss these in \cref{sec:commandline} and \cref{sec:arara}
- respectively. We will discuss how to change the settings and behaviour of the script in
- \vref{sec:defuseloc}.
-
-\subsection{Requirements}
-\subsubsection{Perl users}
- Perl users will need a few standard Perl modules -- see \vref{sec:requiredmodules} for
- details; \announce{2018-01-13}{perl module installer helper script} in particular, note
- that a module installer helper script is shipped with \texttt{latexindent.pl}.%
-
-\subsubsection{Windows users without perl}\label{subsubsec:latexindent:exe}
- \texttt{latexindent.pl} ships with \texttt{latexindent.exe} for Windows
- users, so that you can use the script with or without a Perl distribution.
-
- Users of \texttt{latexindent.exe} need only two files: \texttt{latexindent.exe} and
- \texttt{defaultSettings.yaml}, both of which are available from \cite{latexindent-home}.
-
- MiKTeX users on Windows may like to see \cite{miktex-guide} for details of how to use
- \texttt{latexindent.exe} without a Perl installation. \index{MiKTeX}
- \index{latexindent.exe} \index{Windows}
-
-\subsubsection{conda users}
- Users of \texttt{conda} should see the details given in \cref{sec:app:conda}.
- \index{conda}
-
-\subsubsection{docker users}
- Users of \texttt{docker} should see the details given in \cref{sec:app:docker}.
- \index{docker}
-
-\subsection{From the command line}\label{sec:commandline}
- \texttt{latexindent.pl} has a number of different switches/flags/options, which
- can be combined in any way that you like, either in short or long form as detailed below.
- \texttt{latexindent.pl} produces a \texttt{.log} file, \texttt{indent.log}, every time it
- is run; the name of the log file can be customised, but we will refer to the log file as
- \texttt{indent.log} throughout this document. There is a base of information that is
- written to \texttt{indent.log}, but other additional information will be written
- depending on which of the following options are used.
-
-\flagbox{-v, --version}
- \index{switches!-v, --version definition and details}
- \announce{2017-06-25}{version}
- \begin{commandshell}
-latexindent.pl -v
-latexindent.pl --version
-\end{commandshell}
- This will output only the version number to the terminal.
-
-\flagbox{-vv, --vversion}
- \index{switches!-vv, --vversion definition and details}
- \announce{2022-01-08}{vversion switch}
- \begin{commandshell}
-latexindent.pl -vv
-latexindent.pl --vversion
-\end{commandshell}
- This will output \emph{verbose} version details to the terminal, including the location
- of \texttt{latexindent.pl} and \texttt{defaultSettings.yaml}.
-
-\flagbox{-h, --help}
- \index{switches!-h, --help definition and details}
-
- \begin{commandshell}
-latexindent.pl -h
-latexindent.pl --help
-\end{commandshell}
-
- As above this will output a welcome message to the terminal, including the version number
- and available options.
- \begin{commandshell}
-latexindent.pl myfile.tex
-\end{commandshell}
-
- This will operate on \texttt{myfile.tex}, but will simply output to your terminal;
- \texttt{myfile.tex} will not be changed by \texttt{latexindent.pl} in any way using this
- command.
-
- You can \announce*{2022-03-25}{batches of files demonstration} instruct
- \texttt{latexindent.pl} to operate on multiple (batches) of files, for example
- \begin{commandshell}
-latexindent.pl myfile1.tex myfile2.tex
-\end{commandshell}
- Full details are given in \vref{sec:batches}.
-
-\flagbox{-w, --overwrite}
- \index{switches!-w, --overwrite definition and details}
- \index{backup files!overwrite switch, -w}
- \begin{commandshell}
-latexindent.pl -w myfile.tex
-latexindent.pl --overwrite myfile.tex
-latexindent.pl myfile.tex --overwrite
-\end{commandshell}
-
- This \emph{will} overwrite \texttt{myfile.tex}, but it will make a copy of
- \texttt{myfile.tex} first. You can control the name of the extension (default is
- \texttt{.bak}), and how many different backups are made -- more on this in
- \cref{sec:defuseloc}, and in particular see \texttt{backupExtension} and
- \texttt{onlyOneBackUp}.
-
- Note that if \texttt{latexindent.pl} can not create the backup, then it will exit without
- touching your original file; an error message will be given asking you to check the
- permissions of the backup file.
-
-\flagbox{-wd, --overwriteIfDifferent}
- \index{switches!-wd, --overwriteIfDifferent definition and details}
- \index{backup files!overwriteIfDifferent switch, -wd}
- \announce*{2022-03-25}{overwriteIfDifferent switch}
- \begin{commandshell}
-latexindent.pl -wd myfile.tex
-latexindent.pl --overwriteIfDifferent myfile.tex
-latexindent.pl myfile.tex --overwriteIfDifferent
-\end{commandshell}
-
- This \emph{will} overwrite \texttt{myfile.tex} but only \emph{if the indented text is
- different from the original}. If the indented text is \emph{not} different from the
- original, then \texttt{myfile.tex} will \emph{not} be overwritten.
-
- All other details from the \texttt{-w} switch are relevant here. If you call
- \texttt{latexindent.pl} with both the \texttt{-wd} and the \texttt{-w} switch, then the
- \texttt{-w} switch will be deactivated and the \texttt{-wd} switch takes priority.
-
-\flagbox{-o=output.tex,--outputfile=output.tex}
- \index{switches!-o, --output definition and details}
- \begin{commandshell}
-latexindent.pl -o=output.tex myfile.tex
-latexindent.pl myfile.tex -o=output.tex
-latexindent.pl --outputfile=output.tex myfile.tex
-latexindent.pl --outputfile output.tex myfile.tex
-\end{commandshell}
-
- This will indent \texttt{myfile.tex} and output it to \texttt{output.tex}, overwriting it
- (\texttt{output.tex}) if it already exists\footnote{Users of version 2.* should note the
- subtle change in syntax}.
-
- Note that if \texttt{latexindent.pl} is called with both the \texttt{-w} and \texttt{-o}
- switches, then \texttt{-w} will be ignored and \texttt{-o} will take priority (this seems
- safer than the other way round). The same is true for the \texttt{-wd} switch, and the
- \texttt{-o} switch takes priority over it.
-
- Note that using \texttt{-o} as above is equivalent to using
- \begin{commandshell}
-latexindent.pl myfile.tex > output.tex
-\end{commandshell}
-
- You can call the \texttt{-o} switch with the name of the output file \emph{without} an
- extension; in \announce{2017-06-25}{upgrade to -o switch} this case,
- \texttt{latexindent.pl} will use the extension from the original file. For example, the
- following two calls to \texttt{latexindent.pl} are equivalent:%
- \begin{commandshell}
-latexindent.pl myfile.tex -o=output
-latexindent.pl myfile.tex -o=output.tex
-\end{commandshell}
-
- You can call the \texttt{-o} switch using a \texttt{+} symbol at the beginning; this will
- \announce{2017-06-25}{+ sign in o switch} concatenate the name of the input file and the
- text given to the \texttt{-o} switch. For example, the following two calls to
- \texttt{latexindent.pl} are equivalent:%
- \begin{commandshell}
-latexindent.pl myfile.tex -o=+new
-latexindent.pl myfile.tex -o=myfilenew.tex
-\end{commandshell}
-
- You can call the \texttt{-o} switch using a \texttt{++} symbol at the end of the name
- \announce{2017-06-25}{++ in o switch} of your output file; this tells
- \texttt{latexindent.pl} to search successively for the name of your output file
- concatenated with $0, 1, \ldots$ while the name of the output file exists. For example,%
- \begin{commandshell}
-latexindent.pl myfile.tex -o=output++
-\end{commandshell}
- tells \texttt{latexindent.pl} to output to \texttt{output0.tex}, but if it exists then
- output to \texttt{output1.tex}, and so on.
-
- Calling \texttt{latexindent.pl} with simply
- \begin{commandshell}
-latexindent.pl myfile.tex -o=++
-\end{commandshell}
- tells it to output to \texttt{myfile0.tex}, but if it exists then output to
- \texttt{myfile1.tex} and so on.
-
- The \texttt{+} and \texttt{++} feature of the \texttt{-o} switch can be combined; for
- example, calling
- \begin{commandshell}
-latexindent.pl myfile.tex -o=+out++
-\end{commandshell}
- tells \texttt{latexindent.pl} to output to \texttt{myfileout0.tex}, but if it exists,
- then try \texttt{myfileout1.tex}, and so on.
-
- There is no need to specify a file extension when using the \texttt{++} feature, but if
- you wish to, then you should include it \emph{after} the \texttt{++} symbols, for example
- \begin{commandshell}
-latexindent.pl myfile.tex -o=+out++.tex
-\end{commandshell}
-
- See \vref{app:differences} for details of how the interface has changed from Version 2.2
- to Version 3.0 for this flag. \flagbox{-s, --silent} \index{switches!-s, --silent
- definition and details}
- \begin{commandshell}
-latexindent.pl -s myfile.tex
-latexindent.pl myfile.tex -s
-\end{commandshell}
-
- Silent mode: no output will be given to the terminal.
-
-\flagbox{-t, --trace}
- \index{switches!-t, --trace definition and details}
- \begin{commandshell}
-latexindent.pl -t myfile.tex
-latexindent.pl myfile.tex -t
-\end{commandshell}
-
- \label{page:traceswitch}
- Tracing mode: verbose output will be given to \texttt{indent.log}. This is useful if
- \texttt{latexindent.pl} has made a mistake and you're trying to find out where and why.
- You might also be interested in learning about \texttt{latexindent.pl}'s thought process
- -- if so, this switch is for you, although it should be noted that, especially for large
- files, this does affect performance of the script.
-
-\flagbox{-tt, --ttrace}
- \index{switches!-tt, --ttrace definition and details}
- \begin{commandshell}
-latexindent.pl -tt myfile.tex
-latexindent.pl myfile.tex -tt
-\end{commandshell}
-
- \emph{More detailed} tracing mode: this option gives more details to
- \texttt{indent.log}
- than the standard \texttt{trace} option (note that, even more so than with \texttt{-t},
- especially for large files, performance of the script will be affected).
-
-\flagbox{-l, --local[=myyaml.yaml,other.yaml,...]}
- \index{switches!-l, --local definition and details}
- \begin{commandshell}
-latexindent.pl -l myfile.tex
-latexindent.pl -l=myyaml.yaml myfile.tex
-latexindent.pl -l myyaml.yaml myfile.tex
-latexindent.pl -l first.yaml,second.yaml,third.yaml myfile.tex
-latexindent.pl -l=first.yaml,second.yaml,third.yaml myfile.tex
-latexindent.pl myfile.tex -l=first.yaml,second.yaml,third.yaml
-\end{commandshell}
-
- \label{page:localswitch}
- \texttt{latexindent.pl} will always load \texttt{defaultSettings.yaml} (rhymes with
- camel) and if it is called with the \texttt{-l} switch and it finds
- \texttt{localSettings.yaml} in the same directory as \texttt{myfile.tex}, then, if not
- found, it looks for \texttt{localSettings.yaml} (and friends, see
- \vref{sec:localsettings}) in the current working directory, then
- these%
- \announce{2021-03-14}*{-l switch: localSettings and
- friends} settings will be added to the indentation scheme. Information will be given in
- \texttt{indent.log} on the success or failure of loading \texttt{localSettings.yaml}.
-
- The \texttt{-l} flag can take an \emph{optional} parameter which details the name (or
- names separated by commas) of a YAML file(s) that resides in the same directory as
- \texttt{myfile.tex}; you can use this option if you would like to load a settings file in
- the current working directory that is \emph{not} called \texttt{localSettings.yaml}.
- \announce{2017-08-21}*{-l switch absolute paths} In fact, you can specify both
- \emph{relative} and \emph{absolute paths} for your YAML files; for example%
- \begin{commandshell}
-latexindent.pl -l=../../myyaml.yaml myfile.tex
-latexindent.pl -l=/home/cmhughes/Desktop/myyaml.yaml myfile.tex
-latexindent.pl -l=C:\Users\cmhughes\Desktop\myyaml.yaml myfile.tex
-\end{commandshell}
- You will find a lot of other explicit demonstrations of how to use the \texttt{-l} switch
- throughout this documentation,
-
- You can call the \texttt{-l} switch with a `+' symbol either before or after
- \announce{2017-06-25}{+ sign with -l switch} another YAML file; for example:
- \begin{commandshell}
-latexindent.pl -l=+myyaml.yaml myfile.tex
-latexindent.pl -l "+ myyaml.yaml" myfile.tex
-latexindent.pl -l=myyaml.yaml+ myfile.tex
-\end{commandshell}
- which translate, respectively, to
- \begin{commandshell}
-latexindent.pl -l=localSettings.yaml,myyaml.yaml myfile.tex
-latexindent.pl -l=localSettings.yaml,myyaml.yaml myfile.tex
-latexindent.pl -l=myyaml.yaml,localSettings.yaml myfile.tex
-\end{commandshell}
- Note that the following is \emph{not} allowed:
- \begin{commandshell}
-latexindent.pl -l+myyaml.yaml myfile.tex
-\end{commandshell}
- and
- \begin{commandshell}
-latexindent.pl -l + myyaml.yaml myfile.tex
-\end{commandshell}
- will \emph{only} load \texttt{localSettings.yaml}, and \texttt{myyaml.yaml} will be
- ignored. If you wish to use spaces between any of the YAML settings, then you must wrap
- the entire list of YAML files in quotes, as demonstrated above.
-
- You may also choose to omit the \texttt{yaml} extension, such as \announce{2017-06-25}{no
- extension for -l switch}%
- \begin{commandshell}
-latexindent.pl -l=localSettings,myyaml myfile.tex
-\end{commandshell}
-\flagbox{-y, --yaml=yaml settings}
- \index{switches!-y, --yaml definition and details}
- \index{indentation!default}
- \index{indentation!defaultIndent using -y switch}
- \begin{commandshell}
-latexindent.pl myfile.tex -y="defaultIndent: ' '"
-latexindent.pl myfile.tex -y="defaultIndent: ' ',maximumIndentation:' '"
-latexindent.pl myfile.tex -y="indentRules: one: '\t\t\t\t'"
-latexindent.pl myfile.tex -y='modifyLineBreaks:environments:EndStartsOnOwnLine:3' -m
-latexindent.pl myfile.tex -y='modifyLineBreaks:environments:one:EndStartsOnOwnLine:3' -m
-\end{commandshell}
- \label{page:yamlswitch}You%
- \announce{2017-08-21}{the -y switch} can specify YAML settings from the command line
- using the \texttt{-y} or \texttt{--yaml} switch; sample demonstrations are given above.
- Note, in particular, that multiple settings can be specified by separating them via
- commas. There is a further option to use a \texttt{;} to separate fields, which is
- demonstrated in \vref{sec:yamlswitch}.
-
- Any settings specified via this switch will be loaded \emph{after} any specified using
- the \texttt{-l} switch. This is discussed further in \vref{sec:loadorder}. \flagbox{-d,
- --onlydefault} \index{switches!-d, --onlydefault definition and details}
- \begin{commandshell}
-latexindent.pl -d myfile.tex
-\end{commandshell}
-
- Only \texttt{defaultSettings.yaml}: you might like to read \cref{sec:defuseloc} before
- using this switch. By default, \texttt{latexindent.pl} will always search for
- \texttt{indentconfig.yaml} or \texttt{.indentconfig.yaml} in your home directory. If you
- would prefer it not to do so then (instead of deleting or renaming
- \texttt{indentconfig.yaml} or \texttt{.indentconfig.yaml}) you can simply call the script
- with the \texttt{-d} switch; note that this will also tell the script to ignore
- \texttt{localSettings.yaml} even if it has been called with the \texttt{-l} switch;
- \texttt{latexindent.pl} \announce{2017-08-21}*{updated -d switch} will also ignore any
- settings specified from the \texttt{-y} switch.%
-
-\flagbox{-c, --cruft=<directory>}
- \index{switches!-c, --cruft definition and details}
- \begin{commandshell}
-latexindent.pl -c=/path/to/directory/ myfile.tex
-\end{commandshell}
-
- If you wish to have backup files and \texttt{indent.log} written to a directory other
- than the current working directory, then you can send these `cruft' files to another
- directory. Note the use of a trailing forward slash. % this switch was made as a result of http://tex.stackexchange.com/questions/142652/output-latexindent-auxiliary-files-to-a-different-directory
-
-\flagbox{-g, --logfile=<name of log file>}
- \index{switches!-g, --logfile definition and details}
- \begin{commandshell}
-latexindent.pl -g=other.log myfile.tex
-latexindent.pl -g other.log myfile.tex
-latexindent.pl --logfile other.log myfile.tex
-latexindent.pl myfile.tex -g other.log
-\end{commandshell}
-
- By default, \texttt{latexindent.pl} reports information to \texttt{indent.log}, but if
- you wish to change the name of this file, simply call the script with your chosen name
- after the \texttt{-g} switch as demonstrated above.
-
- \announce{2021-05-07}{log file creation updated} If \texttt{latexindent.pl} can not open
- the log file that you specify, then the script will operate, and no log file will be
- produced; this might be helpful to users who wish to specify the following, for example
- \begin{commandshell}
-latexindent.pl -g /dev/null myfile.tex
-\end{commandshell}
-
-\flagbox{-sl, --screenlog}
- \index{switches!-sl, --screenlog definition and details}
- \begin{commandshell}
-latexindent.pl -sl myfile.tex
-latexindent.pl -screenlog myfile.tex
-\end{commandshell}
- Using this \announce{2018-01-13}{screenlog switch created} option tells
- \texttt{latexindent.pl} to output the log file to the screen, as well as to your chosen
- log file.%
-
-\flagbox{-m, --modifylinebreaks}
- \index{switches!-m, --modifylinebreaks definition and details}
- \begin{commandshell}
-latexindent.pl -m myfile.tex
-latexindent.pl -modifylinebreaks myfile.tex
-\end{commandshell}
-
- One of the most exciting developments in Version~3.0 is the ability to modify line
- breaks; for full details see \vref{sec:modifylinebreaks}
-
- \texttt{latexindent.pl} can also be called on a file without the file extension, for
- example
- \begin{commandshell}
-latexindent.pl myfile
-\end{commandshell}
- and in which case, you can specify the order in which extensions are searched for; see
- \vref{lst:fileExtensionPreference} for full details. \flagbox{STDIN}
- \begin{commandshell}
-cat myfile.tex | latexindent.pl
-cat myfile.tex | latexindent.pl -
-\end{commandshell}
- \texttt{latexindent.pl} will%
- \announce{2018-01-13}{STDIN allowed} allow input from STDIN, which means that you can
- pipe output from other commands directly into the script. For example assuming that you
- have content in \texttt{myfile.tex}, then the above command will output the results of
- operating upon \texttt{myfile.tex}.
-
- If you wish to use this feature with your own local settings, via the \texttt{-l} switch,
- then you should finish your call to \texttt{latexindent.pl} with a \texttt{-} sign:
- \begin{commandshell}
-cat myfile.tex | latexindent.pl -l=mysettings.yaml -
-\end{commandshell}
-
- Similarly, if you \announce{2018-01-13}*{no options/filename updated} simply type
- \texttt{latexindent.pl} at the command line, then it will expect (STDIN) input from the
- command line.%
- \begin{commandshell}
-latexindent.pl
-\end{commandshell}
-
- Once you have finished typing your input, you can press
- \begin{itemize}
- \item \texttt{CTRL+D} on Linux
- \item \texttt{CTRL+Z} followed by \texttt{ENTER} on Windows
- \end{itemize}
- to signify that your input has finished. Thanks to \cite{xu-cheng} for an update to this
- feature. \flagbox{-r, --replacement} \index{switches!-r, --replacement definition and
- details}
- \begin{commandshell}
-latexindent.pl -r myfile.tex
-latexindent.pl -replacement myfile.tex
-\end{commandshell}
- You can \announce{2019-07-13}{replacement mode switch} call \texttt{latexindent.pl} with
- the \texttt{-r} switch to instruct it to perform replacements/substitutions on your file;
- full details and examples are given in \vref{sec:replacements}. \index{verbatim!rv,
- replacementrespectverb switch}%
-
-\flagbox{-rv, --replacementrespectverb}
- \index{switches!-rv, --replacementrespectverb definition and details}
- \begin{commandshell}
-latexindent.pl -rv myfile.tex
-latexindent.pl -replacementrespectverb myfile.tex
-\end{commandshell}
- You can \announce{2019-07-13}{replacement mode switch, respecting verbatim} instruct
- \texttt{latexindent.pl} to perform replacements/substitutions by using the \texttt{-rv}
- switch, but will \emph{respect verbatim code blocks}; full details and examples are given
- in \vref{sec:replacements}.%
-
-\flagbox{-rr, --onlyreplacement}
- \index{switches!-rr, --onlyreplacement definition and details}
- \begin{commandshell}
-latexindent.pl -rr myfile.tex
-latexindent.pl -onlyreplacement myfile.tex
-\end{commandshell}
- You can \announce{2019-07-13}{replacement (only) mode switch} instruct
- \texttt{latexindent.pl} to skip all of its other indentation operations and \emph{only}
- perform replacements/substitutions by using the \texttt{-rr} switch; full details and
- examples are given in \vref{sec:replacements}.%
-
-\flagbox{-k, --check}
- \index{switches!-k, --check definition and details}
- \begin{commandshell}
-latexindent.pl -k myfile.tex
-latexindent.pl -check myfile.tex
-\end{commandshell}
- You can \announce{2021-09-16}{-k,-check switch} instruct \texttt{latexindent.pl} to check
- if the text after indentation matches that given in the original file.%
-
- The \texttt{exit} code \index{exit code} of \texttt{latexindent.pl} is 0 by default. If
- you use the \texttt{-k} switch then
- \begin{itemize}
- \item if the text after indentation matches that given in the original file, then the exit code
- is 0;
- \item if the text after indentation does \emph{not} match that given in the original file, then
- the exit code is 1.
- \end{itemize}
-
- The value of the exit code may be important to those wishing to, for example, check the
- status of the indentation in continuous integration tools such as GitHub Actions. Full
- details of the exit codes of \texttt{latexindent.pl} are given in \cref{tab:exit-codes}.
-
- A simple \texttt{diff} will be given in \texttt{indent.log}.
-
-\flagbox{-kv, --checkv}
- \index{switches!-kv, --checkv definition and details}
- \begin{commandshell}
-latexindent.pl -kv myfile.tex
-latexindent.pl -checkv myfile.tex
-\end{commandshell}
- \announce{2021-09-16}{-kv, -checkv: check verbose switch} The \texttt{check verbose}
- switch is exactly the same as the \texttt{-k} switch, except that it is \emph{verbose},
- and it will output the (simple) diff to the terminal, as well as to \texttt{indent.log}.
-
-\flagbox{-n, --lines=MIN-MAX}
- \index{switches!-n, --lines definition and details}
- \begin{commandshell}
-latexindent.pl -n 5-8 myfile.tex
-latexindent.pl -lines 5-8 myfile.tex
-\end{commandshell}
- \announce{2021-09-16}{-n, -lines switch} The \texttt{lines} switch instructs
- \texttt{latexindent.pl} to operate only on specific line ranges within
- \texttt{myfile.tex}.
-
- Complete demonstrations are given in \cref{sec:line-switch}.
-
-\flagbox{--GCString}
- \index{switches!--GCString}
- \begin{commandshell}
-latexindent.pl --GCString myfile.tex
-\end{commandshell}
- \announce*{2022-03-25}{GCString switch} instructs \texttt{latexindent.pl} to load the
- \texttt{Unicode::GCString} module. This should only be necessary if you find that the
- alignment at ampersand routine (described in \cref{subsec:align-at-delimiters}) does not
- work for your language. Further details are given in \cref{subsec:the-GCString}.
-
-\subsection{From arara}\label{sec:arara}
- Using \texttt{latexindent.pl} from the command line is fine for some folks, but others
- may find it easier to use from \texttt{arara}; you can find the arara rule for
- \texttt{latexindent.pl} and its associated documentation at \cite{paulo}.
-
-\subsection{Summary of exit codes}
- \index{exit code!summary}
- Assuming that you call \texttt{latexindent.pl} on \texttt{myfile.tex}
- \begin{commandshell}
-latexindent.pl myfile.tex
-\end{commandshell}
- then \texttt{latexindent.pl} can exit with the exit codes given in \cref{tab:exit-codes}.
-
- \begin{table}[!htb]
- \caption{Exit codes for \texttt{latexindent.pl}}
- \label{tab:exit-codes}
- \begin{tabular}{ccl}
- \toprule
- exit code & indentation & status \\
- \midrule
- 0 & \faCheck & success; if \texttt{-k} or \texttt{-kv} active, indented text matches original \\
- 0 & \faClose & success; if \texttt{-version}, \texttt{-vversion} or \texttt{-help}, no indentation performed \\
- 1 & \faCheck & success, and \texttt{-k} or \texttt{-kv} active; indented text \emph{different} from original \\
- \midrule
- 2 & \faClose & failure, \texttt{defaultSettings.yaml} could not be read \\
- 3 & \faClose & failure, myfile.tex not found \\
- 4 & \faClose & failure, myfile.tex exists but cannot be read \\
- 5 & \faClose & failure, \texttt{-w} active, and back-up file cannot be written \\
- 6 & \faClose & failure, \texttt{-c} active, and cruft directory does not exist \\
- \bottomrule
- \end{tabular}
- \end{table}
diff --git a/support/latexindent/documentation/sec-indent-config-and-settings.tex b/support/latexindent/documentation/sec-indent-config-and-settings.tex
deleted file mode 100644
index 600d24bb4f..0000000000
--- a/support/latexindent/documentation/sec-indent-config-and-settings.tex
+++ /dev/null
@@ -1,207 +0,0 @@
-% arara: pdflatex: { files: [latexindent]}
-\section{indentconfig.yaml, local settings and the -y switch }\label{sec:indentconfig}
- The behaviour of \texttt{latexindent.pl} is controlled from the settings specified in any
- of the YAML files that you tell it to load. By default, \texttt{latexindent.pl} will only
- load \texttt{defaultSettings.yaml}, but there are a few ways that you can tell it to load
- your own settings files.
-
-\subsection{indentconfig.yaml and .indentconfig.yaml}
- \texttt{latexindent.pl} will always check your home directory for
- \texttt{indentconfig.yaml}
- and \texttt{.indentconfig.yaml} (unless it is called with the \texttt{-d} switch), which
- is a plain text file you can create that contains the \emph{absolute} paths for any
- settings files that you wish \texttt{latexindent.pl} to load. There is no difference
- between \texttt{indentconfig.yaml} and \texttt{.indentconfig.yaml}, other than the fact
- that \texttt{.indentconfig.yaml} is a `hidden' file; thank you to
- \cite{jacobo-diaz-hidden-config} for providing this feature. In what follows, we will use
- \texttt{indentconfig.yaml}, but it is understood that this could equally represent
- \texttt{.indentconfig.yaml}. If you have both files in existence then
- \texttt{indentconfig.yaml} takes priority.
-
- For Mac and Linux users, their home directory is \texttt{~/username} while Windows (Vista
- onwards) is \lstinline!C:\Users\username!\footnote{If you're not sure where to put
- \texttt{indentconfig.yaml}, don't worry \texttt{latexindent.pl} will tell you in the log
- file exactly where to put it assuming it doesn't exist already.} \Cref{lst:indentconfig}
- shows a sample \texttt{indentconfig.yaml} file.
-
- \begin{yaml}{\texttt{indentconfig.yaml} (sample)}{lst:indentconfig}
-# Paths to user settings for latexindent.pl
-#
-# Note that the settings will be read in the order you
-# specify here- each successive settings file will overwrite
-# the variables that you specify
-
-paths:
-- /home/cmhughes/Documents/yamlfiles/mysettings.yaml
-- /home/cmhughes/folder/othersettings.yaml
-- /some/other/folder/anynameyouwant.yaml
-- C:\Users\chughes\Documents\mysettings.yaml
-- C:\Users\chughes\Desktop\test spaces\more spaces.yaml
-\end{yaml}
-
- Note that the \texttt{.yaml} files you specify in \texttt{indentconfig.yaml} will be
- loaded in the order in which you write them. Each file doesn't have to have every switch
- from \texttt{defaultSettings.yaml}; in fact, I recommend that you only keep the switches
- that you want to \emph{change} in these settings files.
-
- To get started with your own settings file, you might like to save a copy of
- \texttt{defaultSettings.yaml} in another directory and call it, for example,
- \texttt{mysettings.yaml}. Once you have added the path to \texttt{indentconfig.yaml} you
- can change the switches and add more code-block names to it as you see fit -- have a look
- at \cref{lst:mysettings} for an example that uses four tabs for the default indent, adds
- the \texttt{tabbing} environment/command to the list of environments that contains
- alignment delimiters; you might also like to refer to the many YAML files detailed
- throughout the rest of this documentation. \index{indentation!defaultIndent using YAML
- file}
-
- \begin{yaml}{\texttt{mysettings.yaml} (example)}{lst:mysettings}
-# Default value of indentation
-defaultIndent: "\t\t\t\t"
-
-# environments that have tab delimiters, add more
-# as needed
-lookForAlignDelims:
- tabbing: 1
-\end{yaml}
-
- You can make sure that your settings are loaded by checking \texttt{indent.log} for
- details -- if you have specified a path that \texttt{latexindent.pl} doesn't recognise
- then you'll get a warning, otherwise you'll get confirmation that \texttt{latexindent.pl}
- has read your settings file \footnote{Windows users may find that they have to end
- \texttt{.yaml} files with a blank line}. \index{warning!editing YAML files}
-
- \begin{warning}
- When editing \texttt{.yaml} files it is \emph{extremely} important to remember how
- sensitive they are to spaces. I highly recommend copying and pasting from
- \texttt{defaultSettings.yaml} when you create your first
- \texttt{whatevernameyoulike.yaml} file.
-
- If \texttt{latexindent.pl} can not read your \texttt{.yaml} file it will tell you so in
- \texttt{indent.log}.
- \end{warning}
-
- If you find that \announce{2021-06-19}{encoding option for indentconfig.yaml}
- \texttt{latexindent.pl} does not read your YAML file, then it might be as a result of the
- default commandline encoding not being UTF-8; normally this will only occcur for Windows
- users. In this case, you might like to explore the \texttt{encoding} option for
- \texttt{indentconfig.yaml} as demonstrated in \cref{lst:indentconfig-encoding}.%
-
- \cmhlistingsfromfile{demonstrations/encoding.yaml}[yaml-TCB]{The \texttt{encoding} option for \texttt{indentconfig.yaml}}{lst:indentconfig-encoding}
-
- Thank you to \cite{qiancy98} for this contribution; please see \vref{app:encoding} and
- details within \cite{encoding} for further information.
-
-\subsection{localSettings.yaml and friends}\label{sec:localsettings}
- The \texttt{-l} switch tells \texttt{latexindent.pl} to look for
- \texttt{localSettings.yaml} and/or friends in the \emph{same directory} as
- \texttt{myfile.tex}. For%
- \announce{2021-03-14}*{-l
- switch: localSettings and friends} example, if you use the following command
- \index{switches!-l demonstration}
- \begin{commandshell}
-latexindent.pl -l myfile.tex
-\end{commandshell}
- then \texttt{latexindent.pl} will search for and then, assuming they exist, load each of
- the following files in the following order:
- \begin{enumerate}
- \item localSettings.yaml
- \item latexindent.yaml
- \item .localSettings.yaml
- \item .latexindent.yaml
- \end{enumerate}
- These files will be assumed to be in the same directory as \texttt{myfile.tex}, or
- otherwise in the current working directory. You do not need to have all of the above
- files, usually just one will be sufficient. In what follows, whenever we refer to
- \texttt{localSettings.yaml} it is assumed that it can mean any of the four named options
- listed above.
-
- If you'd prefer to name your \texttt{localSettings.yaml} file something different, (say,
- \texttt{mysettings.yaml} as in \cref{lst:mysettings}) then you can call
- \texttt{latexindent.pl} using, for example,
- \begin{commandshell}
-latexindent.pl -l=mysettings.yaml myfile.tex
-\end{commandshell}
-
- Any settings file(s) specified using the \texttt{-l} switch will be read \emph{after}
- \texttt{defaultSettings.yaml} and, assuming they exist, any user setting files specified
- in \texttt{indentconfig.yaml}.
-
- Your settings file can contain any switches that you'd like to change; a sample is shown
- in \cref{lst:localSettings}, and you'll find plenty of further examples throughout this
- manual. \index{verbatim!verbatimEnvironments demonstration (-l switch)}
-
- \begin{yaml}{\texttt{localSettings.yaml} (example)}{lst:localSettings}
-# verbatim environments - environments specified
-# here will not be changed at all!
-verbatimEnvironments:
- cmhenvironment: 0
- myenv: 1
-\end{yaml}
-
- You can make sure that your settings file has been loaded by checking \texttt{indent.log}
- for details; if it can not be read then you receive a warning, otherwise you'll get
- confirmation that \texttt{latexindent.pl} has read your settings file.
-
-\subsection{The -y|yaml switch}\label{sec:yamlswitch}
- You%
- \announce{2017-08-21}{demonstration of the -y switch}
- may use the \texttt{-y} switch to load your settings; for example, if you wished to
- specify the settings from \cref{lst:localSettings} using the \texttt{-y} switch, then you
- could use the following command:
- \index{verbatim!verbatimEnvironments demonstration (-y switch)}
- \begin{commandshell}
-latexindent.pl -y="verbatimEnvironments:cmhenvironment:0;myenv:1" myfile.tex
-\end{commandshell}
- Note the use of \texttt{;} to specify another field within \texttt{verbatimEnvironments}.
- This is shorthand, and equivalent, to using the following command: \index{switches!-y
- demonstration}
- \begin{commandshell}
-latexindent.pl -y="verbatimEnvironments:cmhenvironment:0,verbatimEnvironments:myenv:1" myfile.tex
-\end{commandshell}
- You may, of course, specify settings using the \texttt{-y} switch as well as, for
- example, settings loaded using the \texttt{-l} switch; for example, \index{switches!-l
- demonstration} \index{switches!-y demonstration}
- \begin{commandshell}
-latexindent.pl -l=mysettings.yaml -y="verbatimEnvironments:cmhenvironment:0;myenv:1" myfile.tex
-\end{commandshell}
- Any settings specified using the \texttt{-y} switch will be loaded \emph{after} any
- specified using \texttt{indentconfig.yaml} and the \texttt{-l} switch.
-
- If you wish to specify any regex-based settings using the \texttt{-y} switch,
- \index{regular expressions!using -y switch} it is important not to use quotes surrounding
- the regex; for example, with reference to the `one sentence per line' feature
- (\vref{sec:onesentenceperline}) and the listings within \vref{lst:sentencesEndWith}, the
- following settings give the option to have sentences end with a semicolon
- \index{switches!-y demonstration}
- \begin{commandshell}
-latexindent.pl -m --yaml='modifyLineBreaks:oneSentencePerLine:sentencesEndWith:other:\;'
-\end{commandshell}
-
-\subsection{Settings load order}\label{sec:loadorder}
- \texttt{latexindent.pl} loads the settings files in the following order:
- \index{switches!-l in relation to other settings}
- \begin{enumerate}
- \item \texttt{defaultSettings.yaml} is always loaded, and can not be renamed;
- \item \texttt{anyUserSettings.yaml} and any other arbitrarily-named files specified in
- \texttt{indentconfig.yaml};
- \item \texttt{localSettings.yaml} but only if found in the same directory as
- \texttt{myfile.tex}
- and called with \texttt{-l} switch; this file can be renamed, provided that the call to
- \texttt{latexindent.pl} is adjusted accordingly (see \cref{sec:localsettings}). You may
- specify both relative and absolute%
- \announce{2017-08-21}*{-l absolute paths} paths to other YAML files using the \texttt{-l}
- switch, separating multiple files using commas;
- \item any settings \announce{2017-08-21}{-y switch load order} specified in the \texttt{-y}
- switch.%
- \end{enumerate}
- A visual representation of this is given in \cref{fig:loadorder}.
-
- \begin{figure}[!htb]
- \centering
- \input{figure-schematic}
- \caption{Schematic of the load order described in \cref{sec:loadorder}; solid lines represent
- mandatory files, dotted lines represent optional files. \texttt{indentconfig.yaml} can
- contain as many files as you like. The files will be loaded in order; if you specify
- settings for the same field in more than one file, the most recent takes priority. }
- \label{fig:loadorder}
- \end{figure}
diff --git a/support/latexindent/documentation/sec-introduction.tex b/support/latexindent/documentation/sec-introduction.tex
deleted file mode 100644
index 83db4317c2..0000000000
--- a/support/latexindent/documentation/sec-introduction.tex
+++ /dev/null
@@ -1,250 +0,0 @@
-% arara: pdflatex: { files: [latexindent]}
-\section{Introduction}
-\subsection{Thanks}
- I first created \texttt{latexindent.pl} to help me format chapter files in a big project.
- After I blogged about it on the \TeX{} stack exchange \cite{cmhblog} I received some
- positive feedback and follow-up feature requests. A big thank you to Harish Kumar
- \cite{harish} who helped to develop and test the initial versions of the script.
-
- The \texttt{YAML}-based interface of \texttt{latexindent.pl} was inspired by the
- wonderful \texttt{arara} tool; any similarities are deliberate, and I hope that it is
- perceived as the compliment that it is. Thank you to Paulo Cereda and the team for
- releasing this awesome tool; I initially worried that I was going to have to make a GUI
- for \texttt{latexindent.pl}, but the release of \texttt{arara} has meant there is no
- need.
-
- There have been several contributors to the project so far (and hopefully more in the
- future!); thank you very much to the people detailed in \vref{sec:contributors} for their
- valued contributions, and thank you to those who report bugs and request features at
- \cite{latexindent-home}.
-
-\subsection{License}
- \texttt{latexindent.pl} is free and open source, and it always will be; it
- is released under the GNU General Public License v3.0.
-
- Before you start using it on any important files, bear in mind that
- \texttt{latexindent.pl} has the option to overwrite your \texttt{.tex} files. It will
- always make at least one backup (you can choose how many it makes, see
- \cpageref{page:onlyonebackup}) but you should still be careful when using it. The script
- has been tested on many files, but there are some known limitations (see
- \cref{sec:knownlimitations}). You, the user, are responsible for ensuring that you
- maintain backups of your files before running \texttt{latexindent.pl} on them. I think it
- is important at this stage to restate an important part of the license here:
- \begin{quote}\itshape
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
- \end{quote}
- There is certainly no malicious intent in releasing this script, and I do hope that it
- works as you expect it to; if it does not, please first of all make sure that you have
- the correct settings, and then feel free to let me know at \cite{latexindent-home} with a
- complete minimum working example as I would like to improve the code as much as possible.
-
- \begin{warning}
- Before you try the script on anything important (like your thesis), test it out on the
- sample files in the \texttt{test-case} directory \cite{latexindent-home}.
- \index{warning!be sure to test before use}
- \end{warning}
-
- \emph{If you have used any version 2.* of \texttt{latexindent.pl}, there
- are a few changes to the interface; see \vref{app:differences} and the comments
- throughout this document for details}.
-
-\subsection{Quick start}\label{sec:quickstart}
- If you'd like to get started with \texttt{latexindent.pl} then simply type
- \begin{commandshell}
-latexindent.pl myfile.tex
-\end{commandshell}
- from the command line.
-
- We give an introduction to \texttt{latexindent.pl} using \cref{lst:quick-start}; there is
- no explanation in this section, which is deliberate for a quick start. The rest of the
- manual is more verbose.
-
- \cmhlistingsfromfile{demonstrations/quick-start.tex}{\texttt{quick-start.tex}}{lst:quick-start}
-
- Running
- \begin{commandshell}
-latexindent.pl quick-start.tex
-\end{commandshell}
- gives \cref{lst:quick-start-default}.
-
- \cmhlistingsfromfile{demonstrations/quick-start-default.tex}{\texttt{quick-start-default.tex}}{lst:quick-start-default}
-
- \begin{example}
- Running
- \begin{commandshell}
-latexindent.pl -l quick-start1.yaml quick-start.tex
-\end{commandshell}
- gives \cref{lst:quick-start-mod1}.
-
- \begin{cmhtcbraster}
- \cmhlistingsfromfile{demonstrations/quick-start1.yaml}[yaml-TCB]{\texttt{quick-start1.yaml}}{lst:quick-start1yaml}
- \cmhlistingsfromfile[showspaces=true]{demonstrations/quick-start-mod1.tex}{\texttt{quick-start-mod1.tex}}{lst:quick-start-mod1}
- \end{cmhtcbraster}
- \end{example}
-
- \begin{example}
- Running
- \begin{commandshell}
-latexindent.pl -l quick-start2.yaml quick-start.tex
-\end{commandshell}
- gives \cref{lst:quick-start-mod2}.
-
- \begin{cmhtcbraster}
- \cmhlistingsfromfile{demonstrations/quick-start2.yaml}[yaml-TCB]{\texttt{quick-start2.yaml}}{lst:quick-start2yaml}
- \cmhlistingsfromfile[showspaces=true]{demonstrations/quick-start-mod2.tex}{\texttt{quick-start-mod2.tex}}{lst:quick-start-mod2}
- \end{cmhtcbraster}
- \end{example}
-
- \begin{example}
- Running
- \begin{commandshell}
-latexindent.pl -l quick-start3.yaml quick-start.tex
-\end{commandshell}
- gives \cref{lst:quick-start-mod3}.
-
- \begin{cmhtcbraster}
- \cmhlistingsfromfile{demonstrations/quick-start3.yaml}[yaml-TCB]{\texttt{quick-start3.yaml}}{lst:quick-start3yaml}
- \cmhlistingsfromfile{demonstrations/quick-start-mod3.tex}{\texttt{quick-start-mod3.tex}}{lst:quick-start-mod3}
- \end{cmhtcbraster}
- \end{example}
-
- \begin{example}
- Running
- \begin{commandshell}
-latexindent.pl -m -l quick-start4.yaml quick-start.tex
-\end{commandshell}
- gives \cref{lst:quick-start-mod4}.
-
- \begin{cmhtcbraster}
- \cmhlistingsfromfile{demonstrations/quick-start4.yaml}[MLB-TCB]{\texttt{quick-start4.yaml}}{lst:quick-start4yaml}
- \cmhlistingsfromfile{demonstrations/quick-start-mod4.tex}{\texttt{quick-start-mod4.tex}}{lst:quick-start-mod4}
- \end{cmhtcbraster}
- Full details of text wrapping in \cref{subsec:textwrapping}.
- \end{example}
-
- \begin{example}
- Running
- \begin{commandshell}
-latexindent.pl -m -l quick-start5.yaml quick-start.tex
-\end{commandshell}
- gives \cref{lst:quick-start-mod5}.
-
- \begin{cmhtcbraster}
- \cmhlistingsfromfile{demonstrations/quick-start5.yaml}[MLB-TCB]{\texttt{quick-start5.yaml}}{lst:quick-start5yaml}
- \cmhlistingsfromfile{demonstrations/quick-start-mod5.tex}{\texttt{quick-start-mod5.tex}}{lst:quick-start-mod5}
- \end{cmhtcbraster}
- Full details of text wrapping in \cref{subsec:textwrapping}.
- \end{example}
-
- \begin{example}
- Running
- \begin{commandshell}
-latexindent.pl -m -l quick-start6.yaml quick-start.tex
-\end{commandshell}
- gives \cref{lst:quick-start-mod6}.
-
- \begin{cmhtcbraster}
- \cmhlistingsfromfile{demonstrations/quick-start6.yaml}[MLB-TCB]{\texttt{quick-start6.yaml}}{lst:quick-start6yaml}
- \cmhlistingsfromfile{demonstrations/quick-start-mod6.tex}{\texttt{quick-start-mod6.tex}}{lst:quick-start-mod6}
- \end{cmhtcbraster}
- This is an example of a \emph{poly-switch}; full details of \emph{poly-switches} are
- covered in \cref{sec:poly-switches}.
- \end{example}
-
- \begin{example}
- Running
- \begin{commandshell}
-latexindent.pl -m -l quick-start7.yaml quick-start.tex
-\end{commandshell}
- gives \cref{lst:quick-start-mod7}.
-
- \begin{cmhtcbraster}
- \cmhlistingsfromfile{demonstrations/quick-start7.yaml}[MLB-TCB]{\texttt{quick-start7.yaml}}{lst:quick-start7yaml}
- \cmhlistingsfromfile{demonstrations/quick-start-mod7.tex}{\texttt{quick-start-mod7.tex}}{lst:quick-start-mod7}
- \end{cmhtcbraster}
- Full details of \emph{poly-switches} are covered in \cref{sec:poly-switches}.
- \end{example}
-
-\subsection{Required perl modules}
- If you receive an error message such as that given in
- \cref{lst:poss-errors}, then you need to install the missing perl modules.
- \begin{cmhlistings}[style=tcblatex,language=Perl]{Possible error messages}{lst:poss-errors}
-Can't locate File/HomeDir.pm in @INC (@INC contains: /Library/Perl/5.12/darwin-thread-multi-2level /Library/Perl/5.12 /Network/Library/Perl/5.12/darwin-thread-multi-2level /Network/Library/Perl/5.12 /Library/Perl/Updates/5.12.4/darwin-thread-multi-2level /Library/Perl/Updates/5.12.4 /System/Library/Perl/5.12/darwin-thread-multi-2level /System/Library/Perl/5.12 /System/Library/Perl/Extras/5.12/darwin-thread-multi-2level /System/Library/Perl/Extras/5.12 .) at helloworld.pl line 10.
-BEGIN failed--compilation aborted at helloworld.pl line 10.
-\end{cmhlistings}
- \texttt{latexindent.pl} ships with a script to help with this process; if you run the
- following script, you should be prompted to install the appropriate modules.
- \begin{commandshell}
-perl latexindent-module-installer.pl
-\end{commandshell}
- You might also like to see
- \href{https://stackoverflow.com/questions/19590042/error-cant-locate-file-homedir-pm-in-inc}{https://stackoverflow.com/questions/19590042/error-cant-locate-file-homedir-pm-in-inc},
- for example, as well as \vref{sec:requiredmodules}.
-
-\subsection{About this documentation}
- As you read through this documentation, you will see many listings; in this version of
- the documentation, there are a total of \totallstlistings. This may seem a lot, but I
- deem it necessary in presenting the various different options of \texttt{latexindent.pl}
- and the associated output that they are capable of producing.
-
- The different listings are presented using different styles:
-
- \begin{minipage}{.4\textwidth}
- \cmhlistingsfromfile{demonstrations/demo-tex.tex}{\texttt{demo-tex.tex}}{lst:demo-tex}
- \end{minipage}%
- \hfill
- \begin{minipage}{.4\textwidth}
- This type of listing is a \texttt{.tex} file.
- \end{minipage}%
-
- \begin{minipage}{.4\textwidth}
- \cmhlistingsfromfile[style=fileExtensionPreference]{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{fileExtensionPreference}}{lst:fileExtensionPreference-demo}
- \end{minipage}%
- \hfill
- \begin{minipage}{.4\textwidth}
- This type of listing is a \texttt{.yaml} file; when you see line numbers given (as here)
- it means that the snippet is taken directly from \texttt{defaultSettings.yaml}, discussed in
- detail in \vref{sec:defuseloc}.
- \end{minipage}%
-
- \begin{minipage}{.55\textwidth}
- \cmhlistingsfromfile[style=modifylinebreaks]{../defaultSettings.yaml}[MLB-TCB,width=.85\linewidth,before=\centering]{\texttt{modifyLineBreaks}}{lst:modifylinebreaks-demo}
- \end{minipage}%
- \hfill
- \begin{minipage}{.4\textwidth}
- This type of listing is a \texttt{.yaml} file, but it will only
- be relevant when the \texttt{-m} switch is active; see \vref{sec:modifylinebreaks}
- for more details.
- \end{minipage}%
-
- \begin{minipage}{.55\textwidth}
- \cmhlistingsfromfile[style=replacements]{../defaultSettings.yaml}[replace-TCB,width=.85\linewidth,before=\centering]{\texttt{replacements}}{lst:replacements-demo}
- \end{minipage}%
- \hfill
- \begin{minipage}{.4\textwidth}
- This type of listing is a \texttt{.yaml} file, but it will only
- be relevant when the \texttt{-r} switch is active; see \vref{sec:replacements}
- for more details.
- \end{minipage}%
-
- % \begin{latexonly}
- You will occasionally see dates shown in the margin (for example, next to this
- paragraph!) \announce{2017-06-25}{announce} which detail the date of the version in which
- the feature was implemented; the `N' stands for `new as of the date shown' and `U' stands
- for `updated as of the date shown'. If you see \stardemo, it means that the feature is
- either new (N) or updated (U) as of the release of the current version; if you see
- \stardemo\, attached to a listing, then it means that listing is new (N) or updated (U)
- as of the current version. If you have not read this document before (and even if you
- have!), then you can ignore every occurrence of the \stardemo; they are simply there to
- highlight new and updated features. The new and updated features in this documentation
- (\gitRel) are on the following pages: \listOfNewFeatures% % \end{latexonly}
-
-\subsection{A word about regular expressions}
- \index{regular expressions!a word about}
- As you read this documentation, you may encounter the term \emph{regular expressions}.
- I've tried to write this documentation in such a way so as to allow you to engage with
- them or not, as you prefer. This documentation is not designed to be a guide to regular
- expressions, and if you'd like to read about them, I recommend \cite{masteringregexp}.
diff --git a/support/latexindent/documentation/sec-references.tex b/support/latexindent/documentation/sec-references.tex
deleted file mode 100644
index 97641d40e1..0000000000
--- a/support/latexindent/documentation/sec-references.tex
+++ /dev/null
@@ -1,16 +0,0 @@
-\nocite{*}
-\section{References}
- \printbibliography[heading=subbibnumbered,title={perl-related links},keyword=perl]
-
- \printbibliography[heading=subbibnumbered,title={conda-related links},keyword=conda]
- \index{conda}
-
- \printbibliography[heading=subbibnumbered,title={VScode-related links},keyword=vscode]
- \index{VSCode}
-
- \printbibliography[heading=subbibnumbered,title={Other links},keyword=other]
- \index{pre-commit}
- \index{MiKTeX}
-
- \index{contributors}
- \printbibliography[env=specialbib,heading=subbibnumbered,title={Contributors (in chronological order)\label{sec:contributors}},keyword=contributor]
diff --git a/support/latexindent/documentation/sec-replacements.tex b/support/latexindent/documentation/sec-replacements.tex
deleted file mode 100644
index 08468ba295..0000000000
--- a/support/latexindent/documentation/sec-replacements.tex
+++ /dev/null
@@ -1,407 +0,0 @@
-% arara: pdflatex: { files: [latexindent]}
-\section{The -r, -rv and -rr switches}\label{sec:replacements}
- \fancyhead[R]{\bfseries\thepage%
- \tikz[remember picture,overlay] {
- \node at (1,0){\includegraphics{logo-bw}}; }
- }
-
- You can instruct \texttt{latexindent.pl} to perform replacements/substitutions on your
- \announce{2019-07-13}{replacement mode switches} file by using any of the \texttt{-r},
- \texttt{-rv} or \texttt{-rr} switches: \index{verbatim!rv, replacementrespectverb switch}
- \begin{itemize}
- \item the \texttt{-r} switch will perform indentation and replacements, not respecting verbatim
- code blocks;
- \item the \texttt{-rv} switch will perform indentation and replacements, and \emph{will}
- respect verbatim code blocks;
- \item the \texttt{-rr} switch will \emph{not} perform indentation, and will perform
- replacements not respecting verbatim code blocks.
- \end{itemize}
-
- We will demonstrate each of the \texttt{-r}, \texttt{-rv} and \texttt{-rr} switches, but
- a summary is given in \cref{tab:replacementswitches}.
-
- \begin{table}[!htb]
- \centering
- \caption{The replacement mode switches}\label{tab:replacementswitches}
- \begin{tabular}{rcc}
- \toprule
- switch & indentation? & respect verbatim? \\
- \midrule
- \texttt{-r} & \faCheck & \faClose \\
- \texttt{-rv} & \faCheck & \faCheck \\
- \texttt{-rr} & \faClose & \faClose \\
- \bottomrule
- \end{tabular}
- \end{table}
-
- The default value of the \texttt{replacements} field is shown in \cref{lst:replacements};
- as with all of the other fields, you are encouraged to customise and change this as you
- see fit. The options in this field will \emph{only} be considered if the \texttt{-r},
- \texttt{-rv} or \texttt{-rr} switches are active; when discussing YAML settings related
- to the replacement-mode switches, we will use the style given in \cref{lst:replacements}.
-
- \cmhlistingsfromfile[style=replacements]{../defaultSettings.yaml}[width=0.95\linewidth,before=\centering,replace-TCB]{\texttt{replacements}}{lst:replacements}
-
- The first entry within the \texttt{replacements} field is \texttt{amalgamate}, and is
- \emph{optional}; by default it is set to 1, so that replacements will be amalgamated from
- each settings file that you specify. As you'll see in the demonstrations that follow,
- there is no need to specify this field.
-
- You'll notice that, by default, there is only \emph{one} entry in the
- \texttt{replacements} field, but it can take as many entries as you would like; each one
- needs to begin with a \texttt{-} on its own line.
-
-\subsection{Introduction to replacements}
- Let's explore the action of the default settings, and then we'll demonstrate the feature
- with further examples. With reference to \cref{lst:replacements}, the default action will
- replace every instance of the text \texttt{latexindent.pl} with \texttt{pl.latexindent}.
-
- Beginning with the code in \cref{lst:replace1} and running the command \index{switches!-r
- demonstration}
- \begin{commandshell}
-latexindent.pl -r replace1.tex
-\end{commandshell}
- gives the output given in \cref{lst:replace1-r1}.
-
- \begin{cmhtcbraster}[raster column skip=.01\linewidth]
- \cmhlistingsfromfile{demonstrations/replace1.tex}{\texttt{replace1.tex}}{lst:replace1}
- \cmhlistingsfromfile{demonstrations/replace1-r1.tex}{\texttt{replace1.tex} default}{lst:replace1-r1}
- \end{cmhtcbraster}
-
- If we don't wish to perform this replacement, then we can tweak the default settings of
- \vref{lst:replacements} by changing \texttt{lookForThis} to 0; we perform this action in
- \cref{lst:replace1-yaml}, and run the command \index{switches!-l demonstration}
- \index{switches!-r demonstration}
- \begin{commandshell}
-latexindent.pl -r replace1.tex -l=replace1.yaml
-\end{commandshell}
- which gives the output in \cref{lst:replace1-mod1}.
-
- \begin{cmhtcbraster}[raster column skip=.01\linewidth]
- \cmhlistingsfromfile{demonstrations/replace1-mod1.tex}{\texttt{replace1.tex} using \cref{lst:replace1-yaml}}{lst:replace1-mod1}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/replace1.yaml}[replace-TCB]{\texttt{replace1.yaml}}{lst:replace1-yaml}
- \end{cmhtcbraster}
-
- Note that in \cref{lst:replace1-yaml} we have specified \texttt{amalgamate} as 0 so that
- the default replacements are overwritten.
-
- We haven't yet discussed the \texttt{when} field; don't worry, we'll get to it as part of
- the discussion in what follows.
-
-\subsection{The two types of replacements}
- There are two types of replacements:
- \begin{enumerate}
- \item \emph{string}-based replacements, which replace the string in
- \emph{this} with the string in \emph{that}.
- If you specify \texttt{this} and you do not specify \texttt{that}, then the \texttt{that}
- field will be assumed to be empty.
- \index{regular expressions!replacement switch, -r}
- \item \emph{regex}-based replacements, which use the \texttt{substitution} field.
- \end{enumerate}
- We will demonstrate both in the examples that follow.
-
- \texttt{latexindent.pl} chooses which type of replacement to make based on which fields
- have been specified; if the \texttt{this} field is specified, then it will make
- \emph{string}-based replacements, regardless of if \texttt{substitution} is present or
- not.
-
-\subsection{Examples of replacements}
- \begin{example}
- We begin with code given in \cref{lst:colsep}
-
- \cmhlistingsfromfile{demonstrations/colsep.tex}{\texttt{colsep.tex}}{lst:colsep}
-
- Let's assume that our goal is to remove both of the \texttt{arraycolsep} statements; we
- can achieve this in a few different ways.
-
- Using the YAML in \cref{lst:colsep-yaml}, and running the command \index{switches!-l
- demonstration} \index{switches!-r demonstration}
- \begin{commandshell}
-latexindent.pl -r colsep.tex -l=colsep.yaml
-\end{commandshell}
- then we achieve the output in \cref{lst:colsep-mod0}.
- \begin{cmhtcbraster}[raster column skip=.01\linewidth]
- \cmhlistingsfromfile{demonstrations/colsep-mod0.tex}{\texttt{colsep.tex} using \cref{lst:colsep}}{lst:colsep-mod0}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/colsep.yaml}[replace-TCB]{\texttt{colsep.yaml}}{lst:colsep-yaml}
- \end{cmhtcbraster}
- Note that in \cref{lst:colsep-yaml}, we have specified \emph{two} separate fields, each
- with their own `\emph{this}' field; furthermore, for both of the separate fields, we have
- not specified `\texttt{that}', so the \texttt{that} field is assumed to be blank by
- \texttt{latexindent.pl};
-
- We can make the YAML in \cref{lst:colsep-yaml} more concise by exploring the
- \texttt{substitution} field. Using the settings in \cref{lst:colsep1} and running the
- command \index{switches!-l demonstration} \index{switches!-r demonstration}
- \begin{commandshell}
-latexindent.pl -r colsep.tex -l=colsep1.yaml
-\end{commandshell}
- then we achieve the output in \cref{lst:colsep-mod1}. \index{regular
- expressions!substitution field, arraycolsep} \index{regular expressions!at least one +}
- \begin{cmhtcbraster}[raster column skip=.01\linewidth,
- raster force size=false,
- raster column 1/.style={add to width=-.1\textwidth}]
- \cmhlistingsfromfile{demonstrations/colsep-mod1.tex}{\texttt{colsep.tex} using \cref{lst:colsep1}}{lst:colsep-mod1}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/colsep1.yaml}[replace-TCB,width=0.6\textwidth]{\texttt{colsep1.yaml}}{lst:colsep1}
- \end{cmhtcbraster}
-
- The code given in \cref{lst:colsep1} is an example of a \emph{regular expression}, which
- we may abbreviate to \emph{regex} in what follows. This manual is not intended to be a
- tutorial on regular expressions; you might like to read, for example,
- \cite{masteringregexp} for a detailed covering of the topic. With reference to
- \cref{lst:colsep1}, we do note the following:
- \begin{itemize}
- \item the general form of the \texttt{substitution} field is
- \lstinline!s/regex/replacement/modifiers!. You can place any regular expression you like
- within this;
- \item we have `escaped' the backslash by using \lstinline!\\!
- \item we have used \lstinline!\d+! to represent \emph{at least} one digit
- \item the \texttt{s} \emph{modifier} (in the \texttt{sg} at the end of the line) instructs
- \texttt{latexindent.pl} to treat your file as one single line;
- \item the \texttt{g} \emph{modifier} (in the \texttt{sg} at the end of the line) instructs
- \texttt{latexindent.pl} to make the substitution \emph{globally} throughout your file;
- you might try removing the \texttt{g} modifier from \cref{lst:colsep1} and observing the
- difference in output.
- \end{itemize}
- You might like to see
- \href{https://perldoc.perl.org/perlre.html#Modifiers}{https://perldoc.perl.org/perlre.html\#Modifiers}
- for details of modifiers; in general, I recommend starting with the \texttt{sg} modifiers
- for this feature.
- \end{example}
-
- \begin{example}
- We'll keep working with the file in \vref{lst:colsep} for this example.
-
- Using the YAML in \cref{lst:multi-line}, and running the command \index{switches!-l
- demonstration} \index{switches!-r demonstration}
- \begin{commandshell}
-latexindent.pl -r colsep.tex -l=multi-line.yaml
-\end{commandshell}
- then we achieve the output in \cref{lst:colsep-mod2}.
- \begin{cmhtcbraster}[raster column skip=.01\linewidth]
- \cmhlistingsfromfile{demonstrations/colsep-mod2.tex}{\texttt{colsep.tex} using \cref{lst:multi-line}}{lst:colsep-mod2}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/multi-line.yaml}[replace-TCB]{\texttt{multi-line.yaml}}{lst:multi-line}
- \end{cmhtcbraster}
- With reference to \cref{lst:multi-line}, we have specified a \emph{multi-line} version of
- \texttt{this} by employing the \emph{literal} YAML style \lstinline!|-!. See, for
- example,
- \href{https://stackoverflow.com/questions/3790454/in-yaml-how-do-i-break-a-string-over-multiple-lines}{https://stackoverflow.com/questions/3790454/in-yaml-how-do-i-break-a-string-over-multiple-lines}
- for further options, all of which can be used in your YAML file.
-
- This is a natural point to explore the \texttt{when} field, specified in
- \vref{lst:replacements}. This field can take two values: \emph{before} and \emph{after},
- which respectively instruct \texttt{latexindent.pl} to perform the replacements
- \emph{before} indentation or \emph{after} it. The default value is \texttt{before}.
-
- Using the YAML in \cref{lst:multi-line1}, and running the command \index{switches!-l
- demonstration} \index{switches!-r demonstration}
- \begin{commandshell}
-latexindent.pl -r colsep.tex -l=multi-line1.yaml
-\end{commandshell}
- then we achieve the output in \cref{lst:colsep-mod3}.
- \begin{cmhtcbraster}[raster column skip=.01\linewidth]
- \cmhlistingsfromfile{demonstrations/colsep-mod3.tex}{\texttt{colsep.tex} using \cref{lst:multi-line1}}{lst:colsep-mod3}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/multi-line1.yaml}[replace-TCB]{\texttt{multi-line1.yaml}}{lst:multi-line1}
- \end{cmhtcbraster}
- We note that, because we have specified \texttt{when: after}, that
- \texttt{latexindent.pl} has not found the string specified in \cref{lst:multi-line1}
- within the file in \vref{lst:colsep}. As it has looked for the string within
- \cref{lst:multi-line1} \emph{after} the indentation has been performed. After
- indentation, the string as written in \cref{lst:multi-line1} is no longer part of the
- file, and has therefore not been replaced.
-
- As a final note on this example, if you use the \texttt{-rr} switch, as follows,
- \index{switches!-l demonstration} \index{switches!-rr demonstration}
- \begin{commandshell}
-latexindent.pl -rr colsep.tex -l=multi-line1.yaml
-\end{commandshell}
- then the \texttt{when} field is ignored, no indentation is done, and the output is as in
- \cref{lst:colsep-mod2}.
- \end{example}
-
- \begin{example}
- An important part of the substitution routine is in \emph{capture groups}.
-
- Assuming that we start with the code in \cref{lst:displaymath}, let's assume that our
- goal is to replace each occurrence of \lstinline!$$...$$! with
- \lstinline!\begin{equation*}...\end{equation*}!. This example is partly motivated by
- \href{https://tex.stackexchange.com/questions/242150/good-looking-latex-code}{tex
- stackexchange question 242150}.
-
- \cmhlistingsfromfile{demonstrations/displaymath.tex}{\texttt{displaymath.tex}}{lst:displaymath}
-
- We use the settings in \cref{lst:displaymath1} and run the command \index{switches!-l
- demonstration} \index{switches!-r demonstration}
- \begin{commandshell}
-latexindent.pl -r displaymath.tex -l=displaymath1.yaml
-\end{commandshell}
- to receive the output given in \cref{lst:displaymath-mod1}. \index{regular
- expressions!substitution field, equation}
-
- \begin{cmhtcbraster}[raster left skip=-3.75cm,
- raster right skip=-2cm,]
- \cmhlistingsfromfile{demonstrations/displaymath-mod1.tex}{\texttt{displaymath.tex} using \cref{lst:displaymath1}}{lst:displaymath-mod1}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/displaymath1.yaml}[replace-TCB]{\texttt{displaymath1.yaml}}{lst:displaymath1}
- \end{cmhtcbraster}
-
- A few notes about \cref{lst:displaymath1}:
- \begin{enumerate}
- \item we have used the \texttt{x} modifier, which allows us to have white space within the
- regex;
- \item we have used a capture group, \lstinline!(.*?)! which captures the content between the
- \lstinline!$$...$$! into the special variable, \lstinline!$1!;
- \item we have used the content of the capture group, \lstinline!$1!, in the replacement text.
- \end{enumerate}
- See
- \href{https://perldoc.perl.org/perlre.html#Capture-groups}{https://perldoc.perl.org/perlre.html\#Capture-groups}
- for a discussion of capture groups.
-
- The features of the replacement switches can, of course, be combined with others from the
- toolkit of \texttt{latexindent.pl}. For example, we can combine the poly-switches of
- \vref{sec:poly-switches}, which we do in \cref{lst:equation}; upon running the command
- \index{switches!-l demonstration} \index{switches!-m demonstration} \index{switches!-r
- demonstration}
- \begin{commandshell}
-latexindent.pl -r -m displaymath.tex -l=displaymath1.yaml,equation.yaml
-\end{commandshell}
- then we receive the output in \cref{lst:displaymath-mod2}.
-
- \begin{cmhtcbraster}[
- raster force size=false,
- raster column 1/.style={add to width=-.1\textwidth},
- raster column skip=.06\linewidth]
- \cmhlistingsfromfile{demonstrations/displaymath-mod2.tex}{\texttt{displaymath.tex} using \cref{lst:displaymath1,lst:equation}}{lst:displaymath-mod2}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/equation.yaml}[MLB-TCB,width=0.55\textwidth]{\texttt{equation.yaml}}{lst:equation}
- \end{cmhtcbraster}
- \end{example}
-
- \begin{example}
- This example is motivated by
- \href{https://tex.stackexchange.com/questions/490086/bring-several-lines-together-to-fill-blank-spaces-in-texmaker}{tex
- stackexchange question 490086}. We begin with the code in \cref{lst:phrase}.
-
- \cmhlistingsfromfile{demonstrations/phrase.tex}{\texttt{phrase.tex}}{lst:phrase}
-
- Our goal is to make the spacing uniform between the phrases. To achieve this, we employ
- the settings in \cref{lst:hspace}, and run the command \index{switches!-l demonstration}
- \index{switches!-r demonstration}
- \begin{commandshell}
-latexindent.pl -r phrase.tex -l=hspace.yaml
-\end{commandshell}
- which gives the output in \cref{lst:phrase-mod1}. \index{regular expressions!at least one
- +} \index{regular expressions!horizontal space \textbackslash{h}}
-
- \begin{cmhtcbraster}
- \cmhlistingsfromfile{demonstrations/phrase-mod1.tex}{\texttt{phrase.tex} using \cref{lst:hspace}}{lst:phrase-mod1}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/hspace.yaml}[replace-TCB]{\texttt{hspace.yaml}}{lst:hspace}
- \end{cmhtcbraster}
-
- The \lstinline!\h+! setting in \cref{lst:hspace} say to replace \emph{at least one
- horizontal space} with a single space.
- \end{example}
-
- \begin{example}
- We begin with the code in \cref{lst:references}.
-
- \cmhlistingsfromfile{demonstrations/references.tex}{\texttt{references.tex}}{lst:references}
-
- Our goal is to change each reference so that both the text and the reference are
- contained within one hyperlink. We achieve this by employing \cref{lst:reference} and
- running the command \index{switches!-l demonstration} \index{switches!-r demonstration}
- \begin{commandshell}
-latexindent.pl -r references.tex -l=reference.yaml
-\end{commandshell}
- which gives the output in \cref{lst:references-mod1}. \index{regular
- expressions!horizontal space \textbackslash{h}}
-
- \cmhlistingsfromfile{demonstrations/references-mod1.tex}{\texttt{references.tex} using \cref{lst:reference}}{lst:references-mod1}
-
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/reference.yaml}[replace-TCB]{\texttt{reference.yaml}}{lst:reference}
-
- Referencing \cref{lst:reference}, the \lstinline!|! means \emph{or}, we have used
- \emph{capture groups}, together with an example of an \emph{optional} pattern,
- \lstinline!(?:eq)?!.
- \end{example}
-
- \begin{example}
- Let's explore the three replacement mode switches (see \vref{tab:replacementswitches}) in
- the context of an example that contains a verbatim code block, \cref{lst:verb1}; we will
- use the settings in \cref{lst:verbatim1-yaml}.
-
- \begin{cmhtcbraster}
- \cmhlistingsfromfile{demonstrations/verb1.tex}{\texttt{verb1.tex}}{lst:verb1}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/verbatim1.yaml}[replace-TCB]{\texttt{verbatim1.yaml}}{lst:verbatim1-yaml}
- \end{cmhtcbraster}
-
- Upon running the following commands, \index{verbatim!comparison with -r and -rr switches}
- \index{switches!-l demonstration} \index{switches!-o demonstration} \index{switches!-r
- demonstration} \index{switches!-rv demonstration} \index{switches!-rr demonstration}
- \begin{commandshell}
-latexindent.pl -r verb1.tex -l=verbatim1.yaml -o=+mod1
-latexindent.pl -rv verb1.tex -l=verbatim1.yaml -o=+-rv-mod1
-latexindent.pl -rr verb1.tex -l=verbatim1.yaml -o=+-rr-mod1
-\end{commandshell}
- we receive the respective output in \crefrange{lst:verb1-mod1}{lst:verb1-rr-mod1}
-
- \begin{cmhtcbraster}[raster columns=3,
- raster left skip=-3.75cm,
- raster right skip=-2cm,]
- \cmhlistingsfromfile{demonstrations/verb1-mod1.tex}{\texttt{verb1-mod1.tex}}{lst:verb1-mod1}
- \cmhlistingsfromfile{demonstrations/verb1-rv-mod1.tex}{\texttt{verb1-rv-mod1.tex}}{lst:verb1-rv-mod1}
- \cmhlistingsfromfile{demonstrations/verb1-rr-mod1.tex}{\texttt{verb1-rr-mod1.tex}}{lst:verb1-rr-mod1}
- \end{cmhtcbraster}
- \end{example}
-
- We note that:
- \begin{enumerate}
- \item in \cref{lst:verb1-mod1} indentation has been performed, and that the replacements
- specified in \cref{lst:verbatim1-yaml} have been performed, even within the verbatim code
- block;
- \item in \cref{lst:verb1-rv-mod1} indentation has been performed, but that the replacements
- have \emph{not} been performed within the verbatim environment, because the \texttt{rv}
- switch is active;
- \item in \cref{lst:verb1-rr-mod1} indentation has \emph{not} been performed, but that
- replacements have been performed, not respecting the verbatim code block.
- \end{enumerate}
- See the summary within \vref{tab:replacementswitches}.
-
- \begin{example}
- Let's explore the \texttt{amalgamate} field from \vref{lst:replacements} in the context
- of the file specified in \cref{lst:amalg1}.
-
- \cmhlistingsfromfile{demonstrations/amalg1.tex}{\texttt{amalg1.tex}}{lst:amalg1}
-
- Let's consider the YAML files given in \crefrange{lst:amalg1-yaml}{lst:amalg3-yaml}.
-
- \begin{cmhtcbraster}[raster columns=3,
- raster left skip=-3.75cm,
- raster right skip=-2cm,]
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/amalg1-yaml.yaml}[replace-TCB]{\texttt{amalg1-yaml.yaml}}{lst:amalg1-yaml}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/amalg2-yaml.yaml}[replace-TCB]{\texttt{amalg2-yaml.yaml}}{lst:amalg2-yaml}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/amalg3-yaml.yaml}[replace-TCB]{\texttt{amalg3-yaml.yaml}}{lst:amalg3-yaml}
- \end{cmhtcbraster}
-
- Upon running the following commands, \index{switches!-l demonstration} \index{switches!-r
- demonstration}
- \begin{commandshell}
-latexindent.pl -r amalg1.tex -l=amalg1-yaml
-latexindent.pl -r amalg1.tex -l=amalg1-yaml,amalg2-yaml
-latexindent.pl -r amalg1.tex -l=amalg1-yaml,amalg2-yaml,amalg3-yaml
-\end{commandshell}
- we receive the respective output in \crefrange{lst:amalg1-mod1}{lst:amalg1-mod123}.
-
- \begin{cmhtcbraster}[raster columns=3,
- raster left skip=-3.75cm,
- raster right skip=-2cm,]
- \cmhlistingsfromfile{demonstrations/amalg1-mod1.tex}{\texttt{amalg1.tex} using \cref{lst:amalg1-yaml}}{lst:amalg1-mod1}
- \cmhlistingsfromfile{demonstrations/amalg1-mod12.tex}{\texttt{amalg1.tex} using \cref{lst:amalg1-yaml,lst:amalg2-yaml}}{lst:amalg1-mod12}
- \cmhlistingsfromfile{demonstrations/amalg1-mod123.tex}{\texttt{amalg1.tex} using \cref{lst:amalg1-yaml,lst:amalg2-yaml,lst:amalg3-yaml}}{lst:amalg1-mod123}
- \end{cmhtcbraster}
- We note that:
- \begin{enumerate}
- \item in \cref{lst:amalg1-mod1} the replacements from \cref{lst:amalg1-yaml} have been used;
- \item in \cref{lst:amalg1-mod12} the replacements from \cref{lst:amalg1-yaml,lst:amalg2-yaml}
- have \emph{both} been used, because the default value of \texttt{amalgamate} is 1;
- \item in \cref{lst:amalg1-mod123} \emph{only} the replacements from \cref{lst:amalg3-yaml} have
- been used, because the value of \texttt{amalgamate} has been set to 0.
- \end{enumerate}
- \end{example}
diff --git a/support/latexindent/documentation/sec-the-line-switch.tex b/support/latexindent/documentation/sec-the-line-switch.tex
deleted file mode 100644
index 96fccecb36..0000000000
--- a/support/latexindent/documentation/sec-the-line-switch.tex
+++ /dev/null
@@ -1,198 +0,0 @@
-% arara: pdflatex: { files: [latexindent]}
-\section{The --lines switch}\label{sec:line-switch}
- \texttt{latexindent.pl}
- \announce{2021-09-16}{line switch demonstration} can
- operate on a \emph{selection} of lines of the file using the \texttt{--lines} or
- \texttt{-n} switch.
-
- \index{switches!-lines demonstration}
-
- The basic syntax is \texttt{--lines MIN-MAX}, so for example
- \begin{commandshell}
-latexindent.pl --lines 3-7 myfile.tex
-latexindent.pl -n 3-7 myfile.tex
-\end{commandshell}
- will only operate upon lines 3 to 7 in \texttt{myfile.tex}. All of the other lines will
- \emph{not} be operated upon by \texttt{latexindent.pl}.
-
- The options for the \texttt{lines} switch are:
- \begin{itemize}
- \item line range, as in \texttt{--lines 3-7}
- \item single line, as in \texttt{--lines 5}
- \item multiple line ranges separated by commas, as in \texttt{--lines 3-5,8-10}
- \item negated line ranges, as in \texttt{--lines !3-5} which translates to \texttt{--lines
- 1-2,6-N}, where N is the number of lines in your file.
- \end{itemize}
-
- We demonstrate this feature, and the available variations in what follows. We will use
- the file in \cref{lst:myfile}.
-
- \cmhlistingsfromfile[style=lineNumbersTeX]{demonstrations/myfile.tex}[tex-TCB]{\texttt{myfile.tex}}{lst:myfile}
-
- \begin{example}
- We demonstrate the basic usage using the command
- \begin{commandshell}
-latexindent.pl --lines 3-7 myfile.tex -o=+-mod1
-\end{commandshell}
- which instructs \texttt{latexindent.pl} to only operate on lines 3 to 7; the output is
- given in \cref{lst:myfile-mod1}.
-
- \cmhlistingsfromfile[style=lineNumbersTeX]{demonstrations/myfile-mod1.tex}[tex-TCB]{\texttt{myfile-mod1.tex}}{lst:myfile-mod1}
-
- The following two calls to \texttt{latexindent.pl} are equivalent
- \begin{commandshell}
-latexindent.pl --lines 3-7 myfile.tex -o=+-mod1
-latexindent.pl --lines 7-3 myfile.tex -o=+-mod1
-\end{commandshell}
- as \texttt{latexindent.pl} performs a check to put the lowest number first.
- \end{example}
-
- \begin{example}
- You can call the \texttt{lines} switch with only \emph{one number} and in which case only
- that line will be operated upon. For example
- \begin{commandshell}
-latexindent.pl --lines 5 myfile.tex -o=+-mod2
-\end{commandshell}
- instructs \texttt{latexindent.pl} to only operate on line 5; the output is given in
- \cref{lst:myfile-mod2}.
-
- \cmhlistingsfromfile[style=lineNumbersTeX]{demonstrations/myfile-mod2.tex}[tex-TCB]{\texttt{myfile-mod2.tex}}{lst:myfile-mod2}
-
- The following two calls are equivalent:
- \begin{commandshell}
-latexindent.pl --lines 5 myfile.tex
-latexindent.pl --lines 5-5 myfile.tex
-\end{commandshell}
- \end{example}
-
- \begin{example}
- If you specify a value outside of the line range of the file then \texttt{latexindent.pl}
- will ignore the \texttt{lines} argument, detail as such in the log file, and proceed to
- operate on the entire file.
-
- For example, in the following call
- \begin{commandshell}
-latexindent.pl --lines 11-13 myfile.tex
- \end{commandshell}
- \texttt{latexindent.pl} will ignore the \texttt{lines} argument, and \emph{operate on the entire file} because \cref{lst:myfile} only has 12 lines.
-
- Similarly, in the call
- \begin{commandshell}
-latexindent.pl --lines -1-3 myfile.tex
- \end{commandshell}
- \texttt{latexindent.pl} will ignore the \texttt{lines} argument, and \emph{operate on the entire file} because we assume that negatively numbered
- lines in a file do not exist.
- \end{example}
-
- \begin{example}
- You can specify \emph{multiple line ranges} as in the following
- \begin{commandshell}
-latexindent.pl --lines 3-5,8-10 myfile.tex -o=+-mod3
-\end{commandshell}
- which instructs \texttt{latexindent.pl} to operate upon lines 3 to 5 and lines 8 to 10;
- the output is given in \cref{lst:myfile-mod3}.
-
- \cmhlistingsfromfile[style=lineNumbersTeX]{demonstrations/myfile-mod3.tex}[tex-TCB]{\texttt{myfile-mod3.tex}}{lst:myfile-mod3}
-
- The following calls to \texttt{latexindent.pl} are all equivalent
- \begin{commandshell}
-latexindent.pl --lines 3-5,8-10 myfile.tex
-latexindent.pl --lines 8-10,3-5 myfile.tex
-latexindent.pl --lines 10-8,3-5 myfile.tex
-latexindent.pl --lines 10-8,5-3 myfile.tex
-\end{commandshell}
- as \texttt{latexindent.pl} performs a check to put the lowest line ranges first, and
- within each line range, it puts the lowest number first.
- \end{example}
-
- \begin{example}
- There's no limit to the number of line ranges that you can specify, they just need to be
- separated by commas. For example
- \begin{commandshell}
-latexindent.pl --lines 1-2,4-5,9-10,12 myfile.tex -o=+-mod4
-\end{commandshell}
- has four line ranges: lines 1 to 2, lines 4 to 5, lines 9 to 10 and line 12. The output
- is given in \cref{lst:myfile-mod4}.
-
- \cmhlistingsfromfile[style=lineNumbersTeX]{demonstrations/myfile-mod4.tex}[tex-TCB]{\texttt{myfile-mod4.tex}}{lst:myfile-mod4}
-
- As previously, the ordering does not matter, and the following calls to
- \texttt{latexindent.pl} are all equivalent
- \begin{commandshell}
-latexindent.pl --lines 1-2,4-5,9-10,12 myfile.tex
-latexindent.pl --lines 2-1,4-5,9-10,12 myfile.tex
-latexindent.pl --lines 4-5,1-2,9-10,12 myfile.tex
-latexindent.pl --lines 12,4-5,1-2,9-10 myfile.tex
-\end{commandshell}
- as \texttt{latexindent.pl} performs a check to put the lowest line ranges first, and
- within each line range, it puts the lowest number first.
- \end{example}
-
- \begin{example}
- \index{switches!-lines demonstration, negation}
- You can specify \emph{negated line ranges} by using \texttt{!} as in
- \begin{commandshell}
-latexindent.pl --lines !5-7 myfile.tex -o=+-mod5
-\end{commandshell}
- which instructs \texttt{latexindent.pl} to operate upon all of the lines \emph{except}
- lines 5 to 7.
-
- In other words, \texttt{latexindent.pl} \emph{will} operate on lines 1 to 4, and 8 to 12,
- so the following two calls are equivalent:
- \begin{commandshell}
-latexindent.pl --lines !5-7 myfile.tex
-latexindent.pl --lines 1-4,8-12 myfile.tex
-\end{commandshell}
- The output is given in \cref{lst:myfile-mod5}.
-
- \cmhlistingsfromfile[style=lineNumbersTeX]{demonstrations/myfile-mod5.tex}[tex-TCB]{\texttt{myfile-mod5.tex}}{lst:myfile-mod5}
-
- \end{example}
-
- \begin{example}
- \index{switches!-lines demonstration, negation}
- You can specify \emph{multiple negated line ranges} such as
- \begin{commandshell}
-latexindent.pl --lines !5-7,!9-10 myfile.tex -o=+-mod6
- \end{commandshell}
- which is equivalent to:
- \begin{commandshell}
-latexindent.pl --lines 1-4,8,11-12 myfile.tex -o=+-mod6
- \end{commandshell}
- The output is given in \cref{lst:myfile-mod6}.
-
- \cmhlistingsfromfile[style=lineNumbersTeX]{demonstrations/myfile-mod6.tex}[tex-TCB]{\texttt{myfile-mod6.tex}}{lst:myfile-mod6}
- \end{example}
-
- \begin{example}
- If you specify a line range with anything other than an integer, then
- \texttt{latexindent.pl} will ignore the \texttt{lines} argument, and \emph{operate on the
- entire file}.
-
- Sample calls that result in the \texttt{lines} argument being ignored include the
- following:
- \begin{commandshell}
-latexindent.pl --lines 1-x myfile.tex
-latexindent.pl --lines !y-3 myfile.tex
- \end{commandshell}
- \end{example}
-
- \begin{example}
- We can, of course, use the \texttt{lines} switch in combination with other switches.
-
- For example, let's use with the file in \cref{lst:myfile1}.
-
- \cmhlistingsfromfile[style=lineNumbersTeX]{demonstrations/myfile1.tex}[tex-TCB]{\texttt{myfile1.tex}}{lst:myfile1}
-
- We can demonstrate interaction with the \texttt{-m} switch (see
- \vref{sec:modifylinebreaks}); in particular, if we use \vref{lst:mlb2},
- \vref{lst:env-mlb7} and \vref{lst:env-mlb8} and run
- \begin{widepage}
- \begin{commandshell}
-latexindent.pl --lines 6 myfile1.tex -o=+-mod1 -m -l env-mlb2,env-mlb7,env-mlb8 -o=+-mod1
- \end{commandshell}
- \end{widepage}
- then we receive the output in \cref{lst:myfile1-mod1}.
-
- \cmhlistingsfromfile[style=lineNumbersTeX]{demonstrations/myfile1-mod1.tex}[tex-TCB]{\texttt{myfile1-mod1.tex}}{lst:myfile1-mod1}
- \end{example}
diff --git a/support/latexindent/documentation/sec-the-m-switch.tex b/support/latexindent/documentation/sec-the-m-switch.tex
deleted file mode 100644
index 9e15c59387..0000000000
--- a/support/latexindent/documentation/sec-the-m-switch.tex
+++ /dev/null
@@ -1,60 +0,0 @@
-% arara: pdflatex: { files: [latexindent]}
-\renewcommand{\imagetouse}{logo}
-\section{The -m (modifylinebreaks) switch}\label{sec:modifylinebreaks}
- \fancyhead[R]{\bfseries\thepage%
- \tikz[remember picture,overlay] {
- \node at (1,0){\includegraphics{logo}};
- }}
- All features described in this section will only be relevant if the \texttt{-m} switch is
- used.
-
- \startcontents[the-m-switch]
- \printcontents[the-m-switch]{}{0}{}
-
-\yamltitle{modifylinebreaks}*{fields}
- \makebox[0pt][r]{%
- \raisebox{-\totalheight}[0pt][0pt]{%
- \tikz\node[opacity=1] at (0,0)
- {\includegraphics[width=4cm]{logo}};}}%
- As of Version 3.0, \texttt{latexindent.pl} has the \texttt{-m} switch, which permits
- \texttt{latexindent.pl} to modify line breaks, according to the specifications in the
- \texttt{modifyLineBreaks} field. \emph{The settings in this field will only be considered
- if the \texttt{-m} switch has been used}. A snippet of the default settings of this field
- is shown in \cref{lst:modifylinebreaks}.
-
- \cmhlistingsfromfile[style=modifylinebreaks]{../defaultSettings.yaml}[MLB-TCB,width=.85\linewidth,before=\centering]{\texttt{modifyLineBreaks}}{lst:modifylinebreaks}
-
- Having read the previous paragraph, it should sound reasonable that, if you call
- \texttt{latexindent.pl} using the \texttt{-m} switch, then you give it permission to
- modify line breaks in your file, but let's be clear: \index{warning!the m switch}
-
- \begin{warning}
- If you call \texttt{latexindent.pl} with the \texttt{-m} switch, then you are giving it
- permission to modify line breaks. By default, the only thing that will happen is that
- multiple blank lines will be condensed into one blank line; many other settings are
- possible, discussed next.
- \end{warning}
-
-\yamltitle{preserveBlankLines}{0|1}
- This field is directly related to \emph{poly-switches}, discussed in
- \cref{sec:poly-switches}. By default, it is set to \texttt{1}, which means that blank
- lines will be \emph{protected} from removal; however, regardless of this setting,
- multiple blank lines can be condensed if \texttt{condenseMultipleBlankLinesInto} is
- greater than \texttt{0}, discussed next.
-
-\yamltitle{condenseMultipleBlankLinesInto}*{positive integer}
- Assuming that this switch takes an integer value greater than \texttt{0},
- \texttt{latexindent.pl} will condense multiple blank lines into the number of blank lines
- illustrated by this switch. As an example, \cref{lst:mlb-bl} shows a sample file with
- blank lines; upon running \index{switches!-m demonstration}
- \begin{commandshell}
-latexindent.pl myfile.tex -m -o=+-mod1
-\end{commandshell}
- the output is shown in \cref{lst:mlb-bl-out}; note that the multiple blank lines have
- been condensed into one blank line, and note also that we have used the \texttt{-m}
- switch!
-
- \begin{cmhtcbraster}
- \cmhlistingsfromfile{demonstrations/mlb1.tex}{\texttt{mlb1.tex}}{lst:mlb-bl}
- \cmhlistingsfromfile{demonstrations/mlb1-out.tex}{\texttt{mlb1-mod1.tex}}{lst:mlb-bl-out}
- \end{cmhtcbraster}
diff --git a/support/latexindent/documentation/subsec-combine-text-wrap-para-line-breaks.tex b/support/latexindent/documentation/subsec-combine-text-wrap-para-line-breaks.tex
deleted file mode 100644
index 0e8a4591f3..0000000000
--- a/support/latexindent/documentation/subsec-combine-text-wrap-para-line-breaks.tex
+++ /dev/null
@@ -1,111 +0,0 @@
-% arara: pdflatex: { files: [latexindent]}
-\subsection{Combining removeParagraphLineBreaks and textWrapOptions}\label{subsec:removeparagraphlinebreaks:and:textwrap}
-
- The \announce{2018-08-13}{combine text wrap and remove paragraph line breaks} text
- wrapping routine (\vref{subsec:textwrapping}) and remove paragraph line breaks routine
- (\vref{subsec:removeparagraphlinebreaks}) can be combined.%
-
- We motivate this feature with the code given in \cref{lst:textwrap7}.
-
- \cmhlistingsfromfile{demonstrations/textwrap7.tex}{\texttt{textwrap7.tex}}{lst:textwrap7}
-
- Applying the text wrap routine from \vref{subsec:textwrapping} with, for example,
- \vref{lst:textwrap3-yaml} gives the output in \cref{lst:textwrap7-mod3}.
-
- \cmhlistingsfromfile{demonstrations/textwrap7-mod3.tex}{\texttt{textwrap7.tex} using \cref{lst:textwrap3-yaml}}{lst:textwrap7-mod3}
-
- The text wrapping routine has behaved as expected, but it may be desired to remove
- paragraph line breaks \emph{before} performing the text wrapping routine. The desired
- behaviour can be achieved by employing the \texttt{beforeTextWrap} switch.
-
- Explicitly, using the settings in \cref{lst:textwrap12-yaml} and running the command
- \index{switches!-l demonstration} \index{switches!-m demonstration} \index{switches!-o
- demonstration}
- \begin{commandshell}
-latexindent.pl -m textwrap7.tex -l=textwrap12.yaml -o=+-mod12
-\end{commandshell}
- we obtain the output in \cref{lst:textwrap7-mod12}.
-
- \begin{cmhtcbraster}
- \cmhlistingsfromfile{demonstrations/textwrap7-mod12.tex}{\texttt{textwrap7-mod12.tex}}{lst:textwrap7-mod12}
- \cmhlistingsfromfile{demonstrations/textwrap12.yaml}[MLB-TCB]{\texttt{textwrap12.yaml}}{lst:textwrap12-yaml}
- \end{cmhtcbraster}
-
- In \cref{lst:textwrap7-mod12} the paragraph line breaks have first been removed from
- \cref{lst:textwrap7}, and then the text wrapping routine has been applied. It is
- envisaged that variants of \cref{lst:textwrap12-yaml} will be among the most useful
- settings for these two features.
-
-\subsubsection{text wrapping beforeFindingChildCodeBlocks}\label{subsubsec:text-wrap-remove-para-bfccb}
-
- \index{text wrap!recommended starting point}
-
- I \announce{2021-07-31}{textWrapOptions new feature: beforeFindingChildCodeBlocks} think
- it likely that most users will wish to employ the \texttt{beforeFindingChildCodeBlocks}
- option for the text wrap routine.%
-
- To motivate its use, we begin with the file in \cref{lst:textwrap-bfccb}.
-
- \cmhlistingsfromfile{demonstrations/textwrap-bfccb.tex}{\texttt{textwrap-bfccb.tex}}{lst:textwrap-bfccb}
-
- Using the settings in \cref{lst:textwrap12-yaml} and running
- \begin{commandshell}
-latexindent.pl -m textwrap-bfccb.tex -l=textwrap12.yaml -o=+-mod12
-\end{commandshell}
- gives the output in \cref{lst:textwrap-bfccb-mod12}
-
- \cmhlistingsfromfile{demonstrations/textwrap-bfccb-mod12.tex}{\texttt{textwrap-bfccb-mod12.tex}}{lst:textwrap-bfccb-mod12}
-
- Note that we have added a `ruler' to \cref{lst:textwrap-bfccb-mod12} to assist with
- measuring.
-
- The output in \cref{lst:textwrap-bfccb-mod12} is not ideal, but it is \emph{expected}.
- The reasoning is as follows:
- \begin{itemize}
- \item \texttt{latexindent.pl} first of all searches for code blocks (see
- \vref{tab:code-blocks});
- \item it replaces each code block with a unique identifying string;
- \item with the settings of \cref{lst:textwrap12-yaml} in place, it performs the paragraph line
- break removal, and then the text wrapping routine first of all on the \texttt{text}
- command, and then on the surrounding text;
- \item the surrounding text does not know that \texttt{text} is a command.
- \end{itemize}
-
- We can instruct \texttt{latexindent.pl} to perform text wrapping \emph{before searching
- for child code blocks} by using the \texttt{beforeFindingChildCodeBlocks} field.
-
- We save the \emph{quick-start} settings from \cref{lst:textwrap-qs-yaml} into
- \cref{lst:textwrap13-yaml} and change the value of \texttt{columns} for demonstration.
- Upon running the command
- \begin{commandshell}
-latexindent.pl -m textwrap-bfccb.tex -l=textwrap13.yaml -o=+-mod13
-\end{commandshell}
- we receive the output in \cref{lst:textwrap-bfccb-mod13}.
-
- \cmhlistingsfromfile{demonstrations/textwrap13.yaml}[MLB-TCB,width=\linewidth]{\texttt{textwrap13.yaml} (tweaked quick start)}{lst:textwrap13-yaml}
-
- \cmhlistingsfromfile{demonstrations/textwrap-bfccb-mod13.tex}{\texttt{textwrap-bfccb-mod13.tex}}{lst:textwrap-bfccb-mod13}
-
- This output is different from \cref{lst:textwrap-bfccb-mod12}, but is still not ideal, as
- the \texttt{test} command has indented its mandatory argument. We can employ
- \texttt{noAdditionalIndent} from \vref{sec:noadd-indent-rules} in
- \cref{lst:textwrap14-yaml} and run the command
- \begin{commandshell}
-latexindent.pl -m textwrap-bfccb.tex -l=textwrap14.yaml -o=+-mod14
-\end{commandshell}
- to receive the output in \cref{lst:textwrap-bfccb-mod14}.
-
- \begin{widepage}
- \begin{cmhtcbraster}
- \cmhlistingsfromfile{demonstrations/textwrap-bfccb-mod14.tex}{\texttt{textwrap-bfccb-mod14.tex}}{lst:textwrap-bfccb-mod14}
- \cmhlistingsfromfile{demonstrations/textwrap14.yaml}[MLB-TCB]{\texttt{textwrap14.yaml}}{lst:textwrap14-yaml}
- \end{cmhtcbraster}
- \end{widepage}
-
- For reference, let's say that we had started from \cref{lst:textwrap12-yaml}, which
- instructs \texttt{latexindent.pl} to apply the text-wrapping and
- paragraph-line-break-removal routines to \emph{all} code blocks. In order to achieve the
- output in \cref{lst:textwrap-bfccb-mod14}, then we would need to employ an exception,
- which we demonstrate in \cref{lst:textwrap15-yaml}.
-
- \cmhlistingsfromfile{demonstrations/textwrap15.yaml}[MLB-TCB]{\texttt{textwrap15.yaml}}{lst:textwrap15-yaml}
diff --git a/support/latexindent/documentation/subsec-commands-and-their-options.tex b/support/latexindent/documentation/subsec-commands-and-their-options.tex
deleted file mode 100644
index ff44ad229e..0000000000
--- a/support/latexindent/documentation/subsec-commands-and-their-options.tex
+++ /dev/null
@@ -1,251 +0,0 @@
-% arara: pdflatex: { files: [latexindent]}
-\subsection{Commands and the strings between their arguments}\label{subsec:commands-string-between} The \texttt{command} code blocks will
- always look for optional (square bracketed) and mandatory (curly braced) arguments which
- can contain comments, line breaks and `beamer' commands \lstinline!<.*?>! between them.
- There are switches that can allow them to contain other strings, which we discuss next.
-
-\yamltitle{commandCodeBlocks}*{fields}
-
- The \texttt{commandCodeBlocks} field \announce{2018-04-27}*{commandCodeBlocks} contains a
- few switches detailed in \cref{lst:commandCodeBlocks}.%
-
- \cmhlistingsfromfile[style=commandCodeBlocks]{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{commandCodeBlocks}}{lst:commandCodeBlocks}
-
-\yamltitle{roundParenthesesAllowed}{0|1}
-
- The need for this field was mostly motivated by commands found in code used to generate
- images in \texttt{PSTricks} and \texttt{tikz}; for example, let's consider the code given
- in \cref{lst:pstricks1}.
-
- \begin{minipage}{.45\textwidth}
- \cmhlistingsfromfile{demonstrations/pstricks1.tex}{\texttt{pstricks1.tex}}{lst:pstricks1}
- \end{minipage}
- \hfill
- \begin{minipage}{.45\textwidth}
- \cmhlistingsfromfile{demonstrations/pstricks1-default.tex}{\texttt{pstricks1} default output}{lst:pstricks1-default}
- \end{minipage}
-
- Notice that the \lstinline!\defFunction! command has an optional argument, followed by a
- mandatory argument, followed by a round-parenthesis argument, $(u,v)$.
-
- By default, because \texttt{roundParenthesesAllowed} is set to $1$ in
- \cref{lst:commandCodeBlocks}, then \texttt{latexindent.pl} will allow round parenthesis
- between optional and mandatory arguments. In the case of the code in
- \cref{lst:pstricks1}, \texttt{latexindent.pl} finds \emph{all} the arguments of
- \lstinline!defFunction!, both before and after \lstinline!(u,v)!.
-
- The default output from running \texttt{latexindent.pl} on \cref{lst:pstricks1} actually
- leaves it unchanged (see \cref{lst:pstricks1-default}); note in particular, this is
- because of \texttt{noAdditionalIndentGlobal} as discussed on
- \cpageref{page:command:noAddGlobal}.
-
- Upon using the YAML settings in \cref{lst:noRoundParentheses}, and running the command
- \index{switches!-l demonstration}
- \begin{commandshell}
-latexindent.pl pstricks1.tex -l noRoundParentheses.yaml
-\end{commandshell}
- we obtain the output given in \cref{lst:pstricks1-nrp}.
-
- \begin{cmhtcbraster}[raster column skip=.1\linewidth]
- \cmhlistingsfromfile{demonstrations/pstricks1-nrp.tex}{\texttt{pstricks1.tex} using \cref{lst:noRoundParentheses}}{lst:pstricks1-nrp}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/noRoundParentheses.yaml}[yaml-TCB]{\texttt{noRoundParentheses.yaml}}{lst:noRoundParentheses}
- \end{cmhtcbraster}
-
- Notice the difference between \cref{lst:pstricks1-default} and \cref{lst:pstricks1-nrp};
- in particular, in \cref{lst:pstricks1-nrp}, because round parentheses are \emph{not}
- allowed, \texttt{latexindent.pl} finds that the \lstinline!\defFunction! command finishes
- at the first opening round parenthesis. As such, the remaining braced, mandatory,
- arguments are found to be \texttt{UnNamedGroupingBracesBrackets} (see
- \vref{tab:code-blocks}) which, by default, assume indentation for their body, and hence
- the tabbed indentation in \cref{lst:pstricks1-nrp}.
-
- Let's explore this using the YAML given in \cref{lst:defFunction} and run the command
- \index{switches!-l demonstration}
- \begin{commandshell}
-latexindent.pl pstricks1.tex -l defFunction.yaml
-\end{commandshell}
- then the output is as in \cref{lst:pstricks1-indent-rules}.
-
- \begin{cmhtcbraster}[raster column skip=.1\linewidth]
- \cmhlistingsfromfile[showspaces=true]{demonstrations/pstricks1-indent-rules.tex}{\texttt{pstricks1.tex} using \cref{lst:defFunction}}{lst:pstricks1-indent-rules}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/defFunction.yaml}[yaml-TCB]{\texttt{defFunction.yaml}}{lst:defFunction}
- \end{cmhtcbraster}
-
- Notice in \cref{lst:pstricks1-indent-rules} that the \emph{body} of the
- \lstinline!defFunction! command i.e, the subsequent lines containing arguments after the
- command name, have received the single space of indentation specified by
- \cref{lst:defFunction}.
-
-\yamltitle{stringsAllowedBetweenArguments}*{fields}
- \texttt{tikz} users may well specify code such as that given in
- \cref{lst:tikz-node1}; processing this code using
- \texttt{latexindent.pl} gives the default output in \cref{lst:tikz-node1-default}.
-
- \begin{minipage}{.45\textwidth}
- \cmhlistingsfromfile[columns=fixed]{demonstrations/tikz-node1.tex}{\texttt{tikz-node1.tex}}{lst:tikz-node1}
- \end{minipage}
- \hfill
- \begin{minipage}{.45\textwidth}
- \cmhlistingsfromfile[columns=fixed]{demonstrations/tikz-node1-default.tex}{\texttt{tikz-node1} default output}{lst:tikz-node1-default}
- \end{minipage}
-
- With reference to \vref{lst:commandCodeBlocks}, we see that the strings
- \begin{quote}
- to, node, ++
- \end{quote}
- are all allowed to appear between arguments; importantly, you are encouraged to add
- further names to this field as necessary. This means that when \texttt{latexindent.pl}
- processes \cref{lst:tikz-node1}, it consumes:
- \begin{itemize}
- \item the optional argument \lstinline![thin]!
- \item the round-bracketed argument \lstinline!(c)! because \texttt{roundParenthesesAllowed} is
- $1$ by default
- \item the string \lstinline!to! (specified in \texttt{stringsAllowedBetweenArguments})
- \item the optional argument \lstinline![in=110,out=-90]!
- \item the string \lstinline!++! (specified in \texttt{stringsAllowedBetweenArguments})
- \item the round-bracketed argument \lstinline!(0,-0.5cm)! because
- \texttt{roundParenthesesAllowed} is $1$ by default
- \item the string \lstinline!node! (specified in \texttt{stringsAllowedBetweenArguments})
- \item the optional argument \lstinline![below,align=left,scale=0.5]!
- \end{itemize}
-
- We can explore this further, for example using \cref{lst:draw} and running the command
- \index{switches!-l demonstration}
- \begin{commandshell}
-latexindent.pl tikz-node1.tex -l draw.yaml
-\end{commandshell}
- we receive the output given in \cref{lst:tikz-node1-draw}.
-
- \begin{cmhtcbraster}[raster column skip=.1\linewidth]
- \cmhlistingsfromfile[showspaces=true]{demonstrations/tikz-node1-draw.tex}{\texttt{tikz-node1.tex} using \cref{lst:draw}}{lst:tikz-node1-draw}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/draw.yaml}[yaml-TCB]{\texttt{draw.yaml}}{lst:draw}
- \end{cmhtcbraster}
-
- Notice that each line after the \lstinline!\draw! command (its `body') in
- \cref{lst:tikz-node1-draw} has been given the appropriate two-spaces worth of indentation
- specified in \cref{lst:draw}.
-
- Let's compare this with the output from using the YAML settings in \cref{lst:no-strings},
- and running the command \index{switches!-l demonstration}
- \begin{commandshell}
-latexindent.pl tikz-node1.tex -l no-strings.yaml
-\end{commandshell}
- given in \cref{lst:tikz-node1-no-strings}.
-
- \begin{cmhtcbraster}[raster column skip=.1\linewidth]
- \cmhlistingsfromfile{demonstrations/tikz-node1-no-strings.tex}{\texttt{tikz-node1.tex} using \cref{lst:no-strings}}{lst:tikz-node1-no-strings}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/no-strings.yaml}[yaml-TCB]{\texttt{no-strings.yaml}}{lst:no-strings}
- \end{cmhtcbraster}
-
- In this case, \texttt{latexindent.pl} sees that:
- \begin{itemize}
- \item the \lstinline!\draw! command finishes after the \lstinline!(c)!, as
- \texttt{stringsAllowedBetweenArguments} has been set to $0$ so there are no strings
- allowed between arguments;
- \item it finds a \texttt{namedGroupingBracesBrackets} called \texttt{to} (see
- \vref{tab:code-blocks}) \emph{with} argument \lstinline![in=110,out=-90]!
- \item it finds another \texttt{namedGroupingBracesBrackets} but this time called \texttt{node}
- with argument \lstinline![below,align=left,scale=0.5]!
- \end{itemize}
-
- Referencing \vref{lst:commandCodeBlocks}, \announce{2018-04-27}*{amalgamate feature in
- commandCodeBlocks}, we see that the first field in the
- \texttt{stringsAllowedBetweenArguments} is \texttt{amalgamate} and is set to \texttt{1}
- by default. This is for users who wish to specify their settings in multiple YAML files.
- For example, by using the settings in either \cref{lst:amalgamate-demo}
- or\cref{lst:amalgamate-demo1} is equivalent to using the settings in
- \cref{lst:amalgamate-demo2}.%
-
- \begin{cmhtcbraster}[raster columns=3,
- raster left skip=-3.5cm,
- raster right skip=-2cm,
- raster column skip=.03\linewidth]
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/amalgamate-demo.yaml}[yaml-TCB]{\texttt{amalgamate-demo.yaml}}{lst:amalgamate-demo}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/amalgamate-demo1.yaml}[yaml-TCB]{\texttt{amalgamate-demo1.yaml}}{lst:amalgamate-demo1}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/amalgamate-demo2.yaml}[yaml-TCB]{\texttt{amalgamate-demo2.yaml}}{lst:amalgamate-demo2}
- \end{cmhtcbraster}
-
- We specify \texttt{amalgamate} to be set to \texttt{0} and in which case any settings
- loaded prior to those specified, including the default, will be overwritten. For example,
- using the settings in \cref{lst:amalgamate-demo3} means that only the strings specified
- in that field will be used.
-
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/amalgamate-demo3.yaml}[yaml-TCB]{\texttt{amalgamate-demo3.yaml}}{lst:amalgamate-demo3}
-
- It is important to note that the \texttt{amalgamate} field, if used, must be in the first
- field, and specified using the syntax given in
- \cref{lst:amalgamate-demo1,lst:amalgamate-demo2,lst:amalgamate-demo3}.
-
- We may explore this feature further with the code in \cref{lst:for-each}, whose default
- output is given in \cref{lst:for-each-default}.
-
- \begin{cmhtcbraster}[raster column skip=.1\linewidth]
- \cmhlistingsfromfile{demonstrations/for-each.tex}{\texttt{for-each.tex}}{lst:for-each}
- \cmhlistingsfromfile{demonstrations/for-each-default.tex}{\texttt{for-each} default output}{lst:for-each-default}
- \end{cmhtcbraster}
-
- Let's compare this with the output from using the YAML settings in \cref{lst:foreach},
- and running the command \index{switches!-l demonstration}
- \begin{commandshell}
-latexindent.pl for-each.tex -l foreach.yaml
-\end{commandshell}
- given in \cref{lst:for-each-mod1}.
-
- \begin{cmhtcbraster}[raster column skip=.1\linewidth]
- \cmhlistingsfromfile{demonstrations/for-each-mod1.tex}{\texttt{for-each.tex} using \cref{lst:foreach}}{lst:for-each-mod1}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/foreach.yaml}[yaml-TCB]{\texttt{foreach.yaml}}{lst:foreach}
- \end{cmhtcbraster}
-
- You might like to compare the output given in \cref{lst:for-each-default} and
- \cref{lst:for-each-mod1}. Note,in particular, in \cref{lst:for-each-default} that the
- \texttt{foreach} command has not included any of the subsequent strings, and that the
- braces have been treated as a \texttt{namedGroupingBracesBrackets}. In
- \cref{lst:for-each-mod1} the \texttt{foreach} command has been allowed to have
- \lstinline!\x/\y! and \texttt{in} between arguments because of the settings given in
- \cref{lst:foreach}.
-
-\yamltitle{commandNameSpecial}*{fields}
- There are some special command names \announce{2018-04-27}*{commandNameSpecial} that do
- not fit within the names recognised by \texttt{latexindent.pl}, the first one of which is
- \lstinline!\@ifnextchar[!. From the perspective of \texttt{latexindent.pl}, the whole of
- the text \lstinline!\@ifnextchar[! is a command, because it is immediately followed by
- sets of mandatory arguments. However, without the \texttt{commandNameSpecial} field,
- \texttt{latexindent.pl} would not be able to label it as such, because the \lstinline![!
- is, necessarily, not matched by a closing \lstinline!]!.%
-
- For example, consider the sample file in \cref{lst:ifnextchar}, which has default output
- in \cref{lst:ifnextchar-default}.
-
- \begin{cmhtcbraster}[raster column skip=.1\linewidth]
- \cmhlistingsfromfile{demonstrations/ifnextchar.tex}{\texttt{ifnextchar.tex}}{lst:ifnextchar}
- \cmhlistingsfromfile{demonstrations/ifnextchar-default.tex}{\texttt{ifnextchar.tex} default output}{lst:ifnextchar-default}
- \end{cmhtcbraster}
-
- Notice that in \cref{lst:ifnextchar-default} the \texttt{parbox} command has been able to
- indent its body, because \texttt{latexindent.pl} has successfully found the command
- \lstinline!\@ifnextchar! first; the pattern-matching of \texttt{latexindent.pl} starts
- from \emph{the inner most <thing> and works outwards}, discussed in more detail on
- \cpageref{page:phases}.
-
- For demonstration, we can compare this output with that given in
- \cref{lst:ifnextchar-off} in which the settings from \cref{lst:no-ifnextchar} have
- dictated that no special command names, including the \lstinline!\@ifnextchar[! command,
- should not be searched for specially; as such, the \texttt{parbox} command has been
- \emph{unable} to indent its body successfully, because the \lstinline!\@ifnextchar[!
- command has not been found.
-
- \begin{cmhtcbraster}[raster column skip=.1\linewidth]
- \cmhlistingsfromfile{demonstrations/ifnextchar-off.tex}{\texttt{ifnextchar.tex} using \cref{lst:no-ifnextchar}}{lst:ifnextchar-off}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/no-ifnextchar.yaml}[yaml-TCB]{\texttt{no-ifnextchar.yaml}}{lst:no-ifnextchar}
- \end{cmhtcbraster}
-
- The \texttt{amalgamate} field can be used for \texttt{commandNameSpecial}, just as for
- \texttt{stringsAllowedBetweenArguments}. The same condition holds as stated previously,
- which we state again here: \index{warning!amalgamate field}
-
- \begin{warning}
- It is important to note that the \texttt{amalgamate} field, if used, in either
- \texttt{commandNameSpecial} or \texttt{stringsAllowedBetweenArguments} must be in the
- first field, and specified using the syntax given in
- \cref{lst:amalgamate-demo1,lst:amalgamate-demo2,lst:amalgamate-demo3}.
- \end{warning}
diff --git a/support/latexindent/documentation/subsec-noAdditionalIndent-indentRules.tex b/support/latexindent/documentation/subsec-noAdditionalIndent-indentRules.tex
deleted file mode 100644
index ec0e699aaa..0000000000
--- a/support/latexindent/documentation/subsec-noAdditionalIndent-indentRules.tex
+++ /dev/null
@@ -1,36 +0,0 @@
-% arara: pdflatex: { files: [latexindent]}
-% arara: pdflatex: { files: [latexindent]}
-\index{indentation!no additional indent}
-\index{indentation!removing indentation per-code block}
-\index{indentation!customising indentation per-code block}
-\index{indentation!customising per-name}
-\index{indentation!no additional indent global}
-\subsection{noAdditionalIndent and indentRules}\label{sec:noadd-indent-rules}
- \texttt{latexindent.pl} operates on files by looking for code blocks, as detailed in
- \vref{subsubsec:code-blocks};
- for each type of code block in \vref{tab:code-blocks} (which we will call a
- \emph{$\langle$thing$\rangle$} in what follows) it searches YAML fields for information
- in the following order:
- \begin{enumerate}
- \item \texttt{noAdditionalIndent} for the \emph{name} of the current
- \emph{$\langle$thing$\rangle$};
- \item \texttt{indentRules} for the \emph{name} of the current \emph{$\langle$thing$\rangle$};
- \item \texttt{noAdditionalIndentGlobal} for the \emph{type} of the current
- \emph{$\langle$thing$\rangle$};
- \item \texttt{indentRulesGlobal} for the \emph{type} of the current
- \emph{$\langle$thing$\rangle$}.
- \end{enumerate}
-
- Using the above list, the first piece of information to be found will be used; failing
- that, the value of \texttt{defaultIndent} is used. If information is found in multiple
- fields, the first one according to the list above will be used; for example, if
- information is present in both \texttt{indentRules} and in
- \texttt{noAdditionalIndentGlobal}, then the information from \texttt{indentRules} takes
- priority.
-
- We now present details for the different type of code blocks known to
- \texttt{latexindent.pl}, as detailed in \vref{tab:code-blocks}; for reference, there
- follows a list of the code blocks covered.
-
- \startcontents[noAdditionalIndent]
- \printcontents[noAdditionalIndent]{}{0}{}
diff --git a/support/latexindent/documentation/subsec-one-sentence-per-line.tex b/support/latexindent/documentation/subsec-one-sentence-per-line.tex
deleted file mode 100644
index 352697735f..0000000000
--- a/support/latexindent/documentation/subsec-one-sentence-per-line.tex
+++ /dev/null
@@ -1,380 +0,0 @@
-% arara: pdflatex: { files: [latexindent]}
-\subsection{oneSentencePerLine: modifying line breaks for sentences}\label{sec:onesentenceperline}
-
- You can instruct \texttt{latexindent.pl} to format \announce{2018-01-13}{one sentence per
- line} your file so that it puts one sentence per line. Thank you to \cite{mlep} for
- helping to shape and test this feature. The behaviour of this part of the script is
- controlled by the switches detailed in \cref{lst:oneSentencePerLine}, all of which we
- discuss next. \index{modifying linebreaks! by using one sentence per line}
- \index{sentences!oneSentencePerLine} \index{sentences!one sentence per line}
- \index{regular expressions!lowercase alph a-z} \index{regular expressions!uppercase alph
- A-Z}%
-
- \cmhlistingsfromfile[style=oneSentencePerLine]{../defaultSettings.yaml}[MLB-TCB,width=.85\linewidth,before=\centering]{\texttt{oneSentencePerLine}}{lst:oneSentencePerLine}
-
-\yamltitle{manipulateSentences}{0|1}
- This is a binary switch that details if \texttt{latexindent.pl} should perform the
- sentence manipulation routine; it is \emph{off} (set to \texttt{0}) by default, and you
- will need to turn it on (by setting it to \texttt{1}) if you want the script to modify
- line breaks surrounding and within sentences.
-
-\yamltitle{removeSentenceLineBreaks}{0|1}
- When operating upon sentences \texttt{latexindent.pl} will, by default, remove internal
- line breaks as \texttt{removeSentenceLineBreaks} is set to \texttt{1}. Setting this
- switch to \texttt{0} instructs \texttt{latexindent.pl} not to do so.
- \index{sentences!removing sentence line breaks}
-
- For example, consider \texttt{multiple-sentences.tex} shown in
- \cref{lst:multiple-sentences}.
-
- \cmhlistingsfromfile{demonstrations/multiple-sentences.tex}{\texttt{multiple-sentences.tex}}{lst:multiple-sentences}
-
- If we use the YAML files in
- \cref{lst:manipulate-sentences-yaml,lst:keep-sen-line-breaks-yaml}, and run the commands
- \index{switches!-l demonstration} \index{switches!-m demonstration}
- \begin{widepage}
- \begin{commandshell}
-latexindent.pl multiple-sentences -m -l=manipulate-sentences.yaml
-latexindent.pl multiple-sentences -m -l=keep-sen-line-breaks.yaml
-\end{commandshell}
- \end{widepage}
- then we obtain the respective output given in
- \cref{lst:multiple-sentences-mod1,lst:multiple-sentences-mod2}.
-
- \begin{cmhtcbraster}
- \cmhlistingsfromfile{demonstrations/multiple-sentences-mod1.tex}{\texttt{multiple-sentences.tex} using \cref{lst:manipulate-sentences-yaml}}{lst:multiple-sentences-mod1}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/manipulate-sentences.yaml}[MLB-TCB]{\texttt{manipulate-sentences.yaml}}{lst:manipulate-sentences-yaml}
- \end{cmhtcbraster}
-
- \begin{cmhtcbraster}
- \cmhlistingsfromfile{demonstrations/multiple-sentences-mod2.tex}{\texttt{multiple-sentences.tex} using \cref{lst:keep-sen-line-breaks-yaml}}{lst:multiple-sentences-mod2}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/keep-sen-line-breaks.yaml}[MLB-TCB]{\texttt{keep-sen-line-breaks.yaml}}{lst:keep-sen-line-breaks-yaml}
- \end{cmhtcbraster}
-
- Notice, in particular, that the `internal' sentence line breaks in
- \cref{lst:multiple-sentences} have been removed in \cref{lst:multiple-sentences-mod1},
- but have not been removed in \cref{lst:multiple-sentences-mod2}.
-
-\yamltitle{multipleSpacesToSingle}{0|1}
- \announce{2022-03-25}*{multipleSpacesToSingle for oneSentencePerLine} By default, the
- one-sentence-per-line routine will convert multiple spaces into single spaces. You can
- change this behaviour by changing the switch \texttt{multipleSpacesToSingle} to a value
- of \texttt{0}.
-
- The remainder of the settings displayed in \vref{lst:oneSentencePerLine} instruct
- \texttt{latexindent.pl} on how to define a sentence. From the perspective of
- \texttt{latexindent.pl} a sentence must: \index{sentences!follow} \index{sentences!begin
- with} \index{sentences!end with}
- \begin{itemize}
- \item \emph{follow} a certain character or set of characters (see
- \cref{lst:sentencesFollow}); by default, this is either \lstinline!\par!, a
- blank line, a full stop/period (.), exclamation mark (!), question mark (?) right brace
- (\}) or a comment on the previous line;
- \item \emph{begin} with a character type (see \cref{lst:sentencesBeginWith}); by
- default, this is only capital letters;
- \item \emph{end} with a character (see \cref{lst:sentencesEndWith}); by
- default, these are full stop/period (.), exclamation mark (!) and question mark (?).
- \end{itemize}
- In each case, you can specify the \texttt{other} field to include any pattern that you
- would like; you can specify anything in this field using the language of regular
- expressions. \index{regular expressions!lowercase alph a-z} \index{regular
- expressions!uppercase alph A-Z}
-
- \begin{cmhtcbraster}[raster columns=3,
- raster left skip=-3.5cm,
- raster right skip=-2cm,
- raster column skip=.06\linewidth]
- \cmhlistingsfromfile[style=sentencesFollow]{../defaultSettings.yaml}[MLB-TCB,width=.9\linewidth,before=\centering]{\texttt{sentencesFollow}}{lst:sentencesFollow}
- \cmhlistingsfromfile[style=sentencesBeginWith]{../defaultSettings.yaml}[MLB-TCB,width=.9\linewidth,before=\centering]{\texttt{sentencesBeginWith}}{lst:sentencesBeginWith}
- \cmhlistingsfromfile[style=sentencesEndWith]{../defaultSettings.yaml}[MLB-TCB,width=.9\linewidth,before=\centering]{\texttt{sentencesEndWith}}{lst:sentencesEndWith}
- \end{cmhtcbraster}
-
-\subsubsection{sentencesFollow}
- Let's explore a few of the switches in \texttt{sentencesFollow}; let's start with
- \vref{lst:multiple-sentences}, and use the YAML settings given in
- \cref{lst:sentences-follow1-yaml}. Using the command \index{sentences!follow}
- \index{switches!-l demonstration} \index{switches!-m demonstration}
- \begin{commandshell}
-latexindent.pl multiple-sentences -m -l=sentences-follow1.yaml
-\end{commandshell}
- we obtain the output given in \cref{lst:multiple-sentences-mod3}.
-
- \begin{cmhtcbraster}
- \cmhlistingsfromfile{demonstrations/multiple-sentences-mod3.tex}{\texttt{multiple-sentences.tex} using \cref{lst:sentences-follow1-yaml}}{lst:multiple-sentences-mod3}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/sentences-follow1.yaml}[MLB-TCB]{\texttt{sentences-follow1.yaml}}{lst:sentences-follow1-yaml}
- \end{cmhtcbraster}
-
- Notice that, because \texttt{blankLine} is set to \texttt{0}, \texttt{latexindent.pl}
- will not seek sentences following a blank line, and so the fourth sentence has not been
- accounted for.
-
- We can explore the \texttt{other} field in \cref{lst:sentencesFollow} with the
- \texttt{.tex} file detailed in \cref{lst:multiple-sentences1}.
-
- \cmhlistingsfromfile{demonstrations/multiple-sentences1.tex}{\texttt{multiple-sentences1.tex}}{lst:multiple-sentences1}
-
- Upon running the following commands \index{switches!-l demonstration} \index{switches!-m
- demonstration}
- \begin{widepage}
- \begin{commandshell}
-latexindent.pl multiple-sentences1 -m -l=manipulate-sentences.yaml
-latexindent.pl multiple-sentences1 -m -l=manipulate-sentences.yaml,sentences-follow2.yaml
-\end{commandshell}
- \end{widepage}
- then we obtain the respective output given in
- \cref{lst:multiple-sentences1-mod1,lst:multiple-sentences1-mod2}.
- \cmhlistingsfromfile{demonstrations/multiple-sentences1-mod1.tex}{\texttt{multiple-sentences1.tex} using \vref{lst:manipulate-sentences-yaml}}{lst:multiple-sentences1-mod1}
-
- \begin{cmhtcbraster}[
- raster force size=false,
- raster column 1/.style={add to width=1cm},
- ]
- \cmhlistingsfromfile{demonstrations/multiple-sentences1-mod2.tex}{\texttt{multiple-sentences1.tex} using \cref{lst:sentences-follow2-yaml}}{lst:multiple-sentences1-mod2}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/sentences-follow2.yaml}[MLB-TCB,width=.45\textwidth]{\texttt{sentences-follow2.yaml}}{lst:sentences-follow2-yaml}
- \end{cmhtcbraster}
-
- Notice that in \cref{lst:multiple-sentences1-mod1} the first sentence after the
- \texttt{)} has not been accounted for, but that following the inclusion of
- \cref{lst:sentences-follow2-yaml}, the output given in
- \cref{lst:multiple-sentences1-mod2} demonstrates that the sentence \emph{has} been
- accounted for correctly.
-
-\subsubsection{sentencesBeginWith}
- By default, \texttt{latexindent.pl} will only assume that sentences begin with the upper
- case letters \texttt{A-Z}; you can instruct the script to define sentences to begin with
- lower case letters (see \cref{lst:sentencesBeginWith}), and we can use the \texttt{other}
- field to define sentences to begin with other characters. \index{sentences!begin with}
-
- \cmhlistingsfromfile{demonstrations/multiple-sentences2.tex}{\texttt{multiple-sentences2.tex}}{lst:multiple-sentences2}
-
- Upon running the following commands \index{switches!-l demonstration} \index{switches!-m
- demonstration}
- \begin{widepage}
- \begin{commandshell}
-latexindent.pl multiple-sentences2 -m -l=manipulate-sentences.yaml
-latexindent.pl multiple-sentences2 -m -l=manipulate-sentences.yaml,sentences-begin1.yaml
-\end{commandshell}
- \end{widepage}
- then we obtain the respective output given in
- \cref{lst:multiple-sentences2-mod1,lst:multiple-sentences2-mod2}.
- \cmhlistingsfromfile{demonstrations/multiple-sentences2-mod1.tex}{\texttt{multiple-sentences2.tex} using \vref{lst:manipulate-sentences-yaml}}{lst:multiple-sentences2-mod1}
- \index{regular expressions!numeric 0-9}
-
- \begin{cmhtcbraster}[
- raster force size=false,
- raster column 1/.style={add to width=1cm},
- ]
- \cmhlistingsfromfile{demonstrations/multiple-sentences2-mod2.tex}{\texttt{multiple-sentences2.tex} using \cref{lst:sentences-begin1-yaml}}{lst:multiple-sentences2-mod2}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/sentences-begin1.yaml}[MLB-TCB,width=.45\textwidth]{\texttt{sentences-begin1.yaml}}{lst:sentences-begin1-yaml}
- \end{cmhtcbraster}
- Notice that in \cref{lst:multiple-sentences2-mod1}, the first sentence has been accounted
- for but that the subsequent sentences have not. In \cref{lst:multiple-sentences2-mod2},
- all of the sentences have been accounted for, because the \texttt{other} field in
- \cref{lst:sentences-begin1-yaml} has defined sentences to begin with either \lstinline!$!
- or any numeric digit, \texttt{0} to \texttt{9}.
-
-\subsubsection{sentencesEndWith}
- Let's return to \vref{lst:multiple-sentences}; we have already seen the default way in
- which \texttt{latexindent.pl} will operate on the sentences in this file in
- \vref{lst:multiple-sentences-mod1}. We can populate the \texttt{other} field with any
- character that we wish; for example, using the YAML specified in
- \cref{lst:sentences-end1-yaml} and the command \index{sentences!end with}
- \index{switches!-l demonstration} \index{switches!-m demonstration}
- \begin{commandshell}
-latexindent.pl multiple-sentences -m -l=sentences-end1.yaml
-latexindent.pl multiple-sentences -m -l=sentences-end2.yaml
-\end{commandshell}
- then we obtain the output in \cref{lst:multiple-sentences-mod4}. \index{regular
- expressions!lowercase alph a-z}
-
- \begin{cmhtcbraster}
- \cmhlistingsfromfile{demonstrations/multiple-sentences-mod4.tex}{\texttt{multiple-sentences.tex} using \cref{lst:sentences-end1-yaml}}{lst:multiple-sentences-mod4}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/sentences-end1.yaml}[MLB-TCB]{\texttt{sentences-end1.yaml}}{lst:sentences-end1-yaml}
- \end{cmhtcbraster}
-
- \begin{cmhtcbraster}
- \cmhlistingsfromfile{demonstrations/multiple-sentences-mod5.tex}{\texttt{multiple-sentences.tex} using \cref{lst:sentences-end2-yaml}}{lst:multiple-sentences-mod5}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/sentences-end2.yaml}[MLB-TCB]{\texttt{sentences-end2.yaml}}{lst:sentences-end2-yaml}
- \end{cmhtcbraster}
-
- There is a subtle difference between the output in
- \cref{lst:multiple-sentences-mod4,lst:multiple-sentences-mod5}; in particular, in
- \cref{lst:multiple-sentences-mod4} the word \texttt{sentence} has not been defined as a
- sentence, because we have not instructed \texttt{latexindent.pl} to begin sentences with
- lower case letters. We have changed this by using the settings in
- \cref{lst:sentences-end2-yaml}, and the associated output in
- \cref{lst:multiple-sentences-mod5} reflects this.
-
- Referencing \vref{lst:sentencesEndWith}, you'll notice that there is a field called
- \texttt{basicFullStop}, which is set to \texttt{0}, and that the \texttt{betterFullStop}
- is set to \texttt{1} by default.
-
- Let's consider the file shown in \cref{lst:url}.
-
- \cmhlistingsfromfile{demonstrations/url.tex}{\texttt{url.tex}}{lst:url}
-
- Upon running the following commands \index{switches!-l demonstration} \index{switches!-m
- demonstration}
- \begin{commandshell}
-latexindent.pl url -m -l=manipulate-sentences.yaml
-\end{commandshell}
- we obtain the output given in \cref{lst:url-mod1}.
-
- \cmhlistingsfromfile{demonstrations/url-mod1.tex}{\texttt{url.tex} using \vref{lst:manipulate-sentences-yaml}}{lst:url-mod1}
-
- Notice that the full stop within the url has been interpreted correctly. This is because,
- within the \texttt{betterFullStop}, full stops at the end of sentences have the following
- properties:
- \begin{itemize}
- \item they are ignored within \texttt{e.g.} and \texttt{i.e.};
- \item they can not be immediately followed by a lower case or upper case letter;
- \item they can not be immediately followed by a hyphen, comma, or number.
- \end{itemize}
- If you find that the \texttt{betterFullStop} does not work for your purposes, then you
- can switch it off by setting it to \texttt{0}, and you can experiment with the
- \texttt{other} field. \announce{2019-07-13}{fine tuning the betterFullStop} You can also
- seek to customise the \texttt{betterFullStop} routine by using the \emph{fine tuning},
- detailed in \vref{lst:fineTuning}.%
-
- The \texttt{basicFullStop} routine should probably be avoided in most situations, as it
- does not accommodate the specifications above. For example, using the following command
- \index{switches!-l demonstration} \index{switches!-m demonstration}
- \begin{commandshell}
-latexindent.pl url -m -l=alt-full-stop1.yaml
-\end{commandshell}
- and the YAML in \cref{lst:alt-full-stop1-yaml} gives the output in \cref{lst:url-mod2}.
-
- \begin{cmhtcbraster}[ raster left skip=-3.5cm,
- raster right skip=-2cm,
- raster force size=false,
- raster column 1/.style={add to width=.1\textwidth},
- raster column skip=.06\linewidth]
- \cmhlistingsfromfile{demonstrations/url-mod2.tex}{\texttt{url.tex} using \cref{lst:alt-full-stop1-yaml}}{lst:url-mod2}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/alt-full-stop1.yaml}[MLB-TCB,width=.5\textwidth]{\texttt{alt-full-stop1.yaml}}{lst:alt-full-stop1-yaml}
- \end{cmhtcbraster}
-
- Notice that the full stop within the URL has not been accommodated correctly because of
- the non-default settings in \cref{lst:alt-full-stop1-yaml}.
-
-\subsubsection{Features of the oneSentencePerLine routine}
- The sentence manipulation routine takes place \emph{after} verbatim \index{verbatim!in
- relation to oneSentencePerLine} environments, preamble and trailing comments have been
- accounted for; this means that any characters within these types of code blocks will not
- be part of the sentence manipulation routine.
-
- For example, if we begin with the \texttt{.tex} file in \cref{lst:multiple-sentences3},
- and run the command \index{switches!-l demonstration} \index{switches!-m demonstration}
- \begin{commandshell}
-latexindent.pl multiple-sentences3 -m -l=manipulate-sentences.yaml
-\end{commandshell}
- then we obtain the output in \cref{lst:multiple-sentences3-mod1}.
- \cmhlistingsfromfile{demonstrations/multiple-sentences3.tex}{\texttt{multiple-sentences3.tex}}{lst:multiple-sentences3}
- \cmhlistingsfromfile{demonstrations/multiple-sentences3-mod1.tex}{\texttt{multiple-sentences3.tex} using \vref{lst:manipulate-sentences-yaml}}{lst:multiple-sentences3-mod1}
-
- Furthermore, if sentences run across environments then, by default, the line breaks
- internal to the sentence will be removed. For example, if we use the \texttt{.tex} file
- in \cref{lst:multiple-sentences4} and run the commands \index{switches!-l demonstration}
- \index{switches!-m demonstration}
- \begin{commandshell}
-latexindent.pl multiple-sentences4 -m -l=manipulate-sentences.yaml
-latexindent.pl multiple-sentences4 -m -l=keep-sen-line-breaks.yaml
-\end{commandshell}
- then we obtain the output in
- \cref{lst:multiple-sentences4-mod1,lst:multiple-sentences4-mod2}.
- \cmhlistingsfromfile{demonstrations/multiple-sentences4.tex}{\texttt{multiple-sentences4.tex}}{lst:multiple-sentences4}
- \begin{widepage}
- \cmhlistingsfromfile{demonstrations/multiple-sentences4-mod1.tex}{\texttt{multiple-sentences4.tex} using \vref{lst:manipulate-sentences-yaml}}{lst:multiple-sentences4-mod1}
- \end{widepage}
- \cmhlistingsfromfile{demonstrations/multiple-sentences4-mod2.tex}{\texttt{multiple-sentences4.tex} using \vref{lst:keep-sen-line-breaks-yaml}}{lst:multiple-sentences4-mod2}
-
- Once you've read \cref{sec:poly-switches}, you will know that you can accommodate the
- removal of internal sentence line breaks by using the YAML in \cref{lst:item-rules2-yaml}
- and the command \index{switches!-l demonstration} \index{switches!-m demonstration}
- \begin{commandshell}
-latexindent.pl multiple-sentences4 -m -l=item-rules2.yaml
-\end{commandshell}
- the output of which is shown in \cref{lst:multiple-sentences4-mod3}.
-
- \begin{cmhtcbraster}
- \cmhlistingsfromfile{demonstrations/multiple-sentences4-mod3.tex}{\texttt{multiple-sentences4.tex} using \cref{lst:item-rules2-yaml}}{lst:multiple-sentences4-mod3}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/item-rules2.yaml}[MLB-TCB]{\texttt{item-rules2.yaml}}{lst:item-rules2-yaml}
- \end{cmhtcbraster}
-
-\subsubsection{Text wrapping and indenting sentences}
- The \texttt{oneSentencePerLine} \announce{2018-08-13}{oneSentencePerline text wrap and
- indent} can be instructed to perform text wrapping and indentation upon sentences.
- \index{sentences!text wrapping} \index{sentences!indenting}%
-
- Let's use the code in \cref{lst:multiple-sentences5}.
-
- \cmhlistingsfromfile{demonstrations/multiple-sentences5.tex}{\texttt{multiple-sentences5.tex}}{lst:multiple-sentences5}
-
- Referencing \cref{lst:sentence-wrap1-yaml}, and running the following command
- \index{switches!-l demonstration} \index{switches!-m demonstration}
- \begin{commandshell}
-latexindent.pl multiple-sentences5 -m -l=sentence-wrap1.yaml
-\end{commandshell}
- we receive the output given in \cref{lst:multiple-sentences5-mod1}.
-
- \begin{cmhtcbraster}[ raster left skip=-3.5cm,
- raster right skip=-2cm,
- raster force size=false,
- raster column 1/.style={add to width=.1\textwidth},
- raster column skip=.06\linewidth]
- \cmhlistingsfromfile{demonstrations/multiple-sentences5-mod1.tex}{\texttt{multiple-sentences5.tex} using \cref{lst:sentence-wrap1-yaml}}{lst:multiple-sentences5-mod1}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/sentence-wrap1.yaml}[MLB-TCB,width=0.5\textwidth]{\texttt{sentence-wrap1.yaml}}{lst:sentence-wrap1-yaml}
- \end{cmhtcbraster}
-
- If you specify \texttt{textWrapSentences} as 1, but do \emph{not} specify a value for
- \texttt{columns} then the text wrapping will \emph{not} operate on sentences, and you
- will see a warning in \texttt{indent.log}.
-
- The indentation of sentences requires that sentences are stored as code blocks. This
- means that you may need to tweak \vref{lst:sentencesEndWith}. Let's explore this in
- relation to \cref{lst:multiple-sentences6}.
-
- \cmhlistingsfromfile{demonstrations/multiple-sentences6.tex}{\texttt{multiple-sentences6.tex}}{lst:multiple-sentences6}
-
- By default, \texttt{latexindent.pl} will find the full-stop within the first
- \texttt{item}, which means that, upon running the following commands \index{switches!-l
- demonstration} \index{switches!-m demonstration} \index{switches!-y demonstration}
- \begin{commandshell}
-latexindent.pl multiple-sentences6 -m -l=sentence-wrap1.yaml
-latexindent.pl multiple-sentences6 -m -l=sentence-wrap1.yaml -y="modifyLineBreaks:oneSentencePerLine:sentenceIndent:''"
-\end{commandshell}
- we receive the respective output in \cref{lst:multiple-sentences6-mod1} and
- \cref{lst:multiple-sentences6-mod2}.
-
- \cmhlistingsfromfile{demonstrations/multiple-sentences6-mod1.tex}{\texttt{multiple-sentences6-mod1.tex} using \cref{lst:sentence-wrap1-yaml}}{lst:multiple-sentences6-mod1}
-
- \cmhlistingsfromfile{demonstrations/multiple-sentences6-mod2.tex}{\texttt{multiple-sentences6-mod2.tex} using \cref{lst:sentence-wrap1-yaml} and no sentence indentation}{lst:multiple-sentences6-mod2}
-
- We note that \cref{lst:multiple-sentences6-mod1} the \texttt{itemize} code block has
- \emph{not} been indented appropriately. This is because the oneSentencePerLine has been
- instructed to store sentences (because \cref{lst:sentence-wrap1-yaml}); each sentence is
- then searched for code blocks.
-
- We can tweak the settings in \vref{lst:sentencesEndWith} to ensure that full stops are
- not followed by \texttt{item} commands, and that the end of sentences contains
- \lstinline!\end{itemize}! as in \cref{lst:itemize-yaml} (if you intend to use this,
- ensure that you remove the line breaks from the \texttt{other} field). \index{regular
- expressions!lowercase alph a-z} \index{regular expressions!uppercase alph A-Z}
- \index{regular expressions!numeric 0-9} \index{regular expressions!horizontal space
- \textbackslash{h}}
-
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/itemized.yaml}[MLB-TCB]{\texttt{itemize.yaml}}{lst:itemize-yaml}
-
- Upon running \index{switches!-l demonstration} \index{switches!-m demonstration}
- \begin{commandshell}
-latexindent.pl multiple-sentences6 -m -l=sentence-wrap1.yaml,itemize.yaml
-\end{commandshell}
- we receive the output in \cref{lst:multiple-sentences6-mod3}.
-
- \cmhlistingsfromfile{demonstrations/multiple-sentences6-mod3.tex}{\texttt{multiple-sentences6-mod3.tex} using \cref{lst:sentence-wrap1-yaml} and \cref{lst:itemize-yaml}}{lst:multiple-sentences6-mod3}
-
- Notice that the sentence has received indentation, and that the \texttt{itemize} code
- block has been found and indented correctly.
-
- Text \announce{2022-04-04}*{oneSentencePerLine text wrapping update} wrapping when using
- the \texttt{oneSentencePerLine} routine determines if it will remove line breaks while
- text wrapping, from the value of \texttt{removeSentenceLineBreaks}.
diff --git a/support/latexindent/documentation/subsec-poly-switches.tex b/support/latexindent/documentation/subsec-poly-switches.tex
deleted file mode 100644
index ebec90f719..0000000000
--- a/support/latexindent/documentation/subsec-poly-switches.tex
+++ /dev/null
@@ -1,1053 +0,0 @@
-% arara: pdflatex: { files: [latexindent]}
-\subsection{Poly-switches}\label{sec:poly-switches}
- Every other field in the \texttt{modifyLineBreaks} field uses poly-switches, and can take
- one of the following%
- \announce{2017-08-21}*{blank line poly-switch} integer values:
- \index{modifying linebreaks! using poly-switches}
- \index{poly-switches!definition}
- \index{poly-switches!values}
- \index{poly-switches!off by default: set to 0}
- \begin{description}
- \item[$-1$] \emph{remove mode}: line breaks before or after the
- \emph{<part of thing>} can be removed (assuming that \texttt{preserveBlankLines} is
- set to \texttt{0});
- \item[0] \emph{off mode}: line breaks will not be modified for the
- \emph{<part of thing>} under consideration;
- \item[1] \emph{add mode}: a line break will be added before or after the
- \emph{<part of thing>} under consideration, assuming that
- there is not already a line break before or after the \emph{<part of thing>};
- \item[2] \emph{comment then add mode}: a comment symbol will be added, followed by a line break
- before or after the \emph{<part of thing>} under consideration, assuming that there is
- not already a comment and line break before or after the \emph{<part of thing>};
- \item[3] \emph{add then blank line mode}%
- \announce{2017-08-21}{blank line poly-switch}: a line break will be added before or after
- the \emph{<part of thing>} under consideration, assuming that there is not already a line
- break before or after the \emph{<part of thing>}, followed by a blank line;
- \item[4] \emph{add blank line mode}%
- \announce{2019-07-13}{blank line poly-switch}; a blank line will
- be added before or after the \emph{<part of thing>} under consideration, even if the
- \emph{<part of thing>} is already on its own line.
- \end{description}
- In the above, \emph{<part of thing>} refers to either the \emph{begin statement},
- \emph{body} or \emph{end statement} of the code blocks detailed in
- \vref{tab:code-blocks}. All poly-switches are \emph{off} by default;
- \texttt{latexindent.pl} searches first of all for per-name settings, and then followed by
- global per-thing settings.
-
-\subsubsection{Poly-switches for environments}\label{sec:modifylinebreaks-environments}
- We start by viewing a snippet of \texttt{defaultSettings.yaml} in
- \cref{lst:environments-mlb}; note that it contains \emph{global} settings (immediately
- after the \texttt{environments} field) and that \emph{per-name} settings are also allowed
- -- in the case of \cref{lst:environments-mlb}, settings for \texttt{equation*} have been
- specified for demonstration. Note that all poly-switches are \emph{off} (set to 0) by
- default. \index{poly-switches!default values} \index{poly-switches!environment global
- example} \index{poly-switches!environment per-code block example}
-
- \cmhlistingsfromfile[style=modifylinebreaksEnv]{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,MLB-TCB]{\texttt{environments}}{lst:environments-mlb}
-
- Let's begin with the simple example given in \cref{lst:env-mlb1-tex}; note that we have
- annotated key parts of the file using $\BeginStartsOnOwnLine$, $\BodyStartsOnOwnLine$,
- $\EndStartsOnOwnLine$ and $\EndFinishesWithLineBreak$, these will be related to fields
- specified in \cref{lst:environments-mlb}. \index{poly-switches!visualisation:
- $\BeginStartsOnOwnLine$, $\BodyStartsOnOwnLine$, $\EndStartsOnOwnLine$,
- $\EndFinishesWithLineBreak$}
-
- \begin{cmhlistings}[style=tcblatex,escapeinside={(*@}{@*)}]{\texttt{env-mlb1.tex}}{lst:env-mlb1-tex}
-before words(*@$\BeginStartsOnOwnLine$@*) \begin{myenv}(*@$\BodyStartsOnOwnLine$@*)body of myenv(*@$\EndStartsOnOwnLine$@*)\end{myenv}(*@$\EndFinishesWithLineBreak$@*) after words
-\end{cmhlistings}
-
- \paragraph{Adding line breaks: BeginStartsOnOwnLine and BodyStartsOnOwnLine}
- Let's explore \texttt{BeginStartsOnOwnLine} and \texttt{BodyStartsOnOwnLine} in
- \cref{lst:env-mlb1,lst:env-mlb2}, and in particular, let's allow each of them in turn to
- take a value of $1$. \index{modifying linebreaks! at the \emph{beginning} of a code
- block} \index{poly-switches!adding line breaks: set to 1}
-
- \begin{minipage}{.45\textwidth}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/env-mlb1.yaml}[MLB-TCB]{\texttt{env-mlb1.yaml}}{lst:env-mlb1}
- \end{minipage}
- \hfill
- \begin{minipage}{.45\textwidth}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/env-mlb2.yaml}[MLB-TCB]{\texttt{env-mlb2.yaml}}{lst:env-mlb2}
- \end{minipage}
-
- After running the following commands, \index{switches!-l demonstration}
- \index{switches!-m demonstration}
- \begin{commandshell}
-latexindent.pl -m env-mlb.tex -l env-mlb1.yaml
-latexindent.pl -m env-mlb.tex -l env-mlb2.yaml
-\end{commandshell}
- the output is as in \cref{lst:env-mlb-mod1,lst:env-mlb-mod2} respectively.
-
- \begin{widepage}
- \begin{minipage}{.56\linewidth}
- \cmhlistingsfromfile{demonstrations/env-mlb-mod1.tex}{\texttt{env-mlb.tex} using \cref{lst:env-mlb1}}{lst:env-mlb-mod1}
- \end{minipage}
- \hfill
- \begin{minipage}{.43\linewidth}
- \cmhlistingsfromfile{demonstrations/env-mlb-mod2.tex}{\texttt{env-mlb.tex} using \cref{lst:env-mlb2}}{lst:env-mlb-mod2}
- \end{minipage}
- \end{widepage}
-
- There are a couple of points to note:
- \begin{itemize}
- \item in \cref{lst:env-mlb-mod1} a line break has been added at the point denoted by
- $\BeginStartsOnOwnLine$ in \cref{lst:env-mlb1-tex}; no other line breaks have been
- changed;
- \item in \cref{lst:env-mlb-mod2} a line break has been added at the point denoted by
- $\BodyStartsOnOwnLine$ in \cref{lst:env-mlb1-tex}; furthermore, note that the \emph{body}
- of \texttt{myenv} has received the appropriate (default) indentation.
- \end{itemize}
-
- Let's now change each of the \texttt{1} values in \cref{lst:env-mlb1,lst:env-mlb2} so
- that they are $2$ and save them into \texttt{env-mlb3.yaml} and \texttt{env-mlb4.yaml}
- respectively (see \cref{lst:env-mlb3,lst:env-mlb4}). \index{poly-switches!adding comments
- and then line breaks: set to 2}
-
- \begin{minipage}{.45\textwidth}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/env-mlb3.yaml}[MLB-TCB]{\texttt{env-mlb3.yaml}}{lst:env-mlb3}
- \end{minipage}
- \hfill
- \begin{minipage}{.45\textwidth}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/env-mlb4.yaml}[MLB-TCB]{\texttt{env-mlb4.yaml}}{lst:env-mlb4}
- \end{minipage}
-
- Upon running commands analogous to the above, we obtain
- \cref{lst:env-mlb-mod3,lst:env-mlb-mod4}.
-
- \begin{widepage}
- \begin{minipage}{.56\linewidth}
- \cmhlistingsfromfile{demonstrations/env-mlb-mod3.tex}{\texttt{env-mlb.tex} using \cref{lst:env-mlb3}}{lst:env-mlb-mod3}
- \end{minipage}
- \hfill
- \begin{minipage}{.43\linewidth}
- \cmhlistingsfromfile{demonstrations/env-mlb-mod4.tex}{\texttt{env-mlb.tex} using \cref{lst:env-mlb4}}{lst:env-mlb-mod4}
- \end{minipage}
- \end{widepage}
-
- Note that line breaks have been added as in \cref{lst:env-mlb-mod1,lst:env-mlb-mod2}, but
- this time a comment symbol has been added before adding the line break; in both cases,
- trailing horizontal space has been stripped before doing so.
-
- Let's \announce{2017-08-21}{demonstration of blank line poly-switch (3)} now change each
- of the \texttt{1} values in \cref{lst:env-mlb1,lst:env-mlb2} so that they are $3$ and
- save them into \texttt{env-mlb5.yaml} and \texttt{env-mlb6.yaml} respectively (see
- \cref{lst:env-mlb5,lst:env-mlb6}). \index{poly-switches!adding blank lines: set to 3}%
-
- \begin{minipage}{.45\textwidth}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/env-mlb5.yaml}[MLB-TCB]{\texttt{env-mlb5.yaml}}{lst:env-mlb5}
- \end{minipage}
- \hfill
- \begin{minipage}{.45\textwidth}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/env-mlb6.yaml}[MLB-TCB]{\texttt{env-mlb6.yaml}}{lst:env-mlb6}
- \end{minipage}
-
- Upon running commands analogous to the above, we obtain
- \cref{lst:env-mlb-mod5,lst:env-mlb-mod6}.
-
- \begin{widepage}
- \begin{minipage}{.56\linewidth}
- \cmhlistingsfromfile{demonstrations/env-mlb-mod5.tex}{\texttt{env-mlb.tex} using \cref{lst:env-mlb5}}{lst:env-mlb-mod5}
- \end{minipage}
- \hfill
- \begin{minipage}{.43\linewidth}
- \cmhlistingsfromfile{demonstrations/env-mlb-mod6.tex}{\texttt{env-mlb.tex} using \cref{lst:env-mlb6}}{lst:env-mlb-mod6}
- \end{minipage}
- \end{widepage}
-
- Note that line breaks have been added as in \cref{lst:env-mlb-mod1,lst:env-mlb-mod2}, but
- this time a \emph{blank line} has been added after adding the line break.
-
- Let's now change \announce{2019-07-13}{demonstration of new blank line poly-switch} each
- of the \texttt{1} values in \cref{lst:env-mlb5,lst:env-mlb6} so that they are $4$ and
- save them into \texttt{env-beg4.yaml} and \texttt{env-body4.yaml} respectively (see
- \cref{lst:env-beg4,lst:env-body4}). \index{poly-switches!adding blank lines (again"!):
- set to 4}%
-
- \begin{minipage}{.45\textwidth}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/env-beg4.yaml}[MLB-TCB]{\texttt{env-beg4.yaml}}{lst:env-beg4}
- \end{minipage}
- \hfill
- \begin{minipage}{.45\textwidth}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/env-body4.yaml}[MLB-TCB]{\texttt{env-body4.yaml}}{lst:env-body4}
- \end{minipage}
-
- We will demonstrate this poly-switch value using the code in \cref{lst:env-mlb1-text}.
-
- \cmhlistingsfromfile{demonstrations/env-mlb1.tex}{\texttt{env-mlb1.tex}}{lst:env-mlb1-text}
-
- Upon running the commands \index{switches!-l demonstration} \index{switches!-m
- demonstration}
- \begin{commandshell}
-latexindent.pl -m env-mlb1.tex -l env-beg4.yaml
-latexindent.pl -m env-mlb.1tex -l env-body4.yaml
-\end{commandshell}
-
- then we receive the respective outputs in \cref{lst:env-mlb1-beg4,lst:env-mlb1-body4}.
-
- \begin{cmhtcbraster}[raster column skip=.1\linewidth]
- \cmhlistingsfromfile{demonstrations/env-mlb1-beg4.tex}{\texttt{env-mlb1.tex} using \cref{lst:env-beg4}}{lst:env-mlb1-beg4}
- \cmhlistingsfromfile{demonstrations/env-mlb1-body4.tex}{\texttt{env-mlb1.tex} using \cref{lst:env-body4}}{lst:env-mlb1-body4}
- \end{cmhtcbraster}
-
- We note in particular that, by design, for this value of the poly-switches:
- \begin{enumerate}
- \item in \cref{lst:env-mlb1-beg4} a blank line has been inserted before the \lstinline!\begin!
- statement, even though the \lstinline!\begin! statement was already on its own line;
- \item in \cref{lst:env-mlb1-body4} a blank line has been inserted before the beginning of the
- \emph{body}, even though it already began on its own line.
- \end{enumerate}
-
- \paragraph{Adding line breaks using EndStartsOnOwnLine and EndFinishesWithLineBreak}
- Let's explore \texttt{EndStartsOnOwnLine} and \texttt{EndFinishesWithLineBreak} in
- \cref{lst:env-mlb7,lst:env-mlb8}, and in particular, let's allow each of them in turn to
- take a value of $1$. \index{modifying linebreaks! at the \emph{end} of a code block}
- \index{poly-switches!adding line breaks: set to 1}
-
- \begin{minipage}{.49\textwidth}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/env-mlb7.yaml}[MLB-TCB]{\texttt{env-mlb7.yaml}}{lst:env-mlb7}
- \end{minipage}
- \hfill
- \begin{minipage}{.49\textwidth}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/env-mlb8.yaml}[MLB-TCB]{\texttt{env-mlb8.yaml}}{lst:env-mlb8}
- \end{minipage}
-
- After running the following commands, \index{switches!-l demonstration}
- \index{switches!-m demonstration}
- \begin{commandshell}
-latexindent.pl -m env-mlb.tex -l env-mlb7.yaml
-latexindent.pl -m env-mlb.tex -l env-mlb8.yaml
-\end{commandshell}
- the output is as in \cref{lst:env-mlb-mod7,lst:env-mlb-mod8}.
-
- \begin{widepage}
- \begin{minipage}{.42\linewidth}
- \cmhlistingsfromfile{demonstrations/env-mlb-mod7.tex}{\texttt{env-mlb.tex} using \cref{lst:env-mlb7}}{lst:env-mlb-mod7}
- \end{minipage}
- \hfill
- \begin{minipage}{.57\linewidth}
- \cmhlistingsfromfile{demonstrations/env-mlb-mod8.tex}{\texttt{env-mlb.tex} using \cref{lst:env-mlb8}}{lst:env-mlb-mod8}
- \end{minipage}
- \end{widepage}
-
- There are a couple of points to note:
- \begin{itemize}
- \item in \cref{lst:env-mlb-mod7} a line break has been added at the point denoted by
- $\EndStartsOnOwnLine$ in \vref{lst:env-mlb1-tex}; no other line breaks have been changed
- and the \lstinline!\end{myenv}! statement has \emph{not} received indentation (as
- intended);
- \item in \cref{lst:env-mlb-mod8} a line break has been added at the point denoted by
- $\EndFinishesWithLineBreak$ in \vref{lst:env-mlb1-tex}.
- \end{itemize}
-
- Let's now change each of the \texttt{1} values in \cref{lst:env-mlb7,lst:env-mlb8} so
- that they are $2$ and save them into \texttt{env-mlb9.yaml} and \texttt{env-mlb10.yaml}
- respectively (see \cref{lst:env-mlb9,lst:env-mlb10}). \index{poly-switches!adding
- comments and then line breaks: set to 2}
-
- \begin{minipage}{.49\textwidth}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/env-mlb9.yaml}[MLB-TCB]{\texttt{env-mlb9.yaml}}{lst:env-mlb9}
- \end{minipage}
- \hfill
- \begin{minipage}{.49\textwidth}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/env-mlb10.yaml}[MLB-TCB]{\texttt{env-mlb10.yaml}}{lst:env-mlb10}
- \end{minipage}
-
- Upon running commands analogous to the above, we obtain
- \cref{lst:env-mlb-mod9,lst:env-mlb-mod10}.
-
- \begin{widepage}
- \begin{minipage}{.43\linewidth}
- \cmhlistingsfromfile{demonstrations/env-mlb-mod9.tex}{\texttt{env-mlb.tex} using \cref{lst:env-mlb9}}{lst:env-mlb-mod9}
- \end{minipage}
- \hfill
- \begin{minipage}{.56\linewidth}
- \cmhlistingsfromfile{demonstrations/env-mlb-mod10.tex}{\texttt{env-mlb.tex} using \cref{lst:env-mlb10}}{lst:env-mlb-mod10}
- \end{minipage}
- \end{widepage}
-
- Note that line breaks have been added as in \cref{lst:env-mlb-mod7,lst:env-mlb-mod8}, but
- this time a comment symbol has been added before adding the line break; in both cases,
- trailing horizontal space has been stripped before doing so.
-
- Let's \announce{2017-08-21}{demonstration of blank line poly-switch (3)} now change each
- of the \texttt{1} values in \cref{lst:env-mlb7,lst:env-mlb8} so that they are $3$ and
- save them into \texttt{env-mlb11.yaml} and \texttt{env-mlb12.yaml} respectively (see
- \cref{lst:env-mlb11,lst:env-mlb12}). \index{poly-switches!adding blank lines: set to 3}%
-
- \begin{minipage}{.49\textwidth}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/env-mlb11.yaml}[MLB-TCB]{\texttt{env-mlb11.yaml}}{lst:env-mlb11}
- \end{minipage}
- \hfill
- \begin{minipage}{.49\textwidth}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/env-mlb12.yaml}[MLB-TCB]{\texttt{env-mlb12.yaml}}{lst:env-mlb12}
- \end{minipage}
-
- Upon running commands analogous to the above, we obtain
- \cref{lst:env-mlb-mod11,lst:env-mlb-mod12}.
-
- \begin{widepage}
- \begin{minipage}{.42\linewidth}
- \cmhlistingsfromfile{demonstrations/env-mlb-mod11.tex}{\texttt{env-mlb.tex} using \cref{lst:env-mlb11}}{lst:env-mlb-mod11}
- \end{minipage}
- \hfill
- \begin{minipage}{.57\linewidth}
- \cmhlistingsfromfile{demonstrations/env-mlb-mod12.tex}{\texttt{env-mlb.tex} using \cref{lst:env-mlb12}}{lst:env-mlb-mod12}
- \end{minipage}
- \end{widepage}
-
- Note that line breaks have been added as in \cref{lst:env-mlb-mod7,lst:env-mlb-mod8}, and
- that a \emph{blank line} has been added after the line break.
-
- Let's now change \announce{2019-07-13}{demonstration of new blank line poly-switch} each
- of the \texttt{1} values in \cref{lst:env-mlb11,lst:env-mlb12} so that they are $4$ and
- save them into \texttt{env-end4.yaml} and \texttt{env-end-f4.yaml} respectively (see
- \cref{lst:env-end4,lst:env-end-f4}). \index{poly-switches!adding blank lines (again"!):
- set to 4}%
-
- \begin{minipage}{.45\textwidth}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/env-end4.yaml}[MLB-TCB]{\texttt{env-end4.yaml}}{lst:env-end4}
- \end{minipage}
- \hfill
- \begin{minipage}{.5\textwidth}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/env-end-f4.yaml}[MLB-TCB]{\texttt{env-end-f4.yaml}}{lst:env-end-f4}
- \end{minipage}
-
- We will demonstrate this poly-switch value using the code from \vref{lst:env-mlb1-text}.
-
- Upon running the commands \index{switches!-l demonstration} \index{switches!-m
- demonstration}
- \begin{commandshell}
-latexindent.pl -m env-mlb1.tex -l env-end4.yaml
-latexindent.pl -m env-mlb.1tex -l env-end-f4.yaml
-\end{commandshell}
-
- then we receive the respective outputs in \cref{lst:env-mlb1-end4,lst:env-mlb1-end-f4}.
-
- \begin{cmhtcbraster}[raster column skip=.1\linewidth]
- \cmhlistingsfromfile{demonstrations/env-mlb1-end4.tex}{\texttt{env-mlb1.tex} using \cref{lst:env-end4}}{lst:env-mlb1-end4}
- \cmhlistingsfromfile{demonstrations/env-mlb1-end-f4.tex}{\texttt{env-mlb1.tex} using \cref{lst:env-end-f4}}{lst:env-mlb1-end-f4}
- \end{cmhtcbraster}
-
- We note in particular that, by design, for this value of the poly-switches:
- \begin{enumerate}
- \item in \cref{lst:env-mlb1-end4} a blank line has been inserted before the \lstinline!\end!
- statement, even though the \lstinline!\end! statement was already on its own line;
- \item in \cref{lst:env-mlb1-end-f4} a blank line has been inserted after the \lstinline!\end!
- statement, even though it already began on its own line.
- \end{enumerate}
-
- \paragraph{poly-switches 1, 2, and 3 only add line breaks when necessary}
- If you ask \texttt{latexindent.pl} to add a line break (possibly with a comment) using a
- poly-switch value of $1$ (or $2$ or $3$), it will only do so if necessary. For example,
- if you process the file in \vref{lst:mlb2} using poly-switch values of 1, 2, or 3, it
- will be left unchanged.
-
- \begin{minipage}{.45\linewidth}
- \cmhlistingsfromfile{demonstrations/env-mlb2.tex}{\texttt{env-mlb2.tex}}{lst:mlb2}
- \end{minipage}
- \hfill
- \begin{minipage}{.45\linewidth}
- \cmhlistingsfromfile{demonstrations/env-mlb3.tex}{\texttt{env-mlb3.tex}}{lst:mlb3}
- \end{minipage}
-
- Setting the poly-switches to a value of $4$ instructs \texttt{latexindent.pl} to add a
- line break even if the \emph{<part of thing>} is already on its own line; see
- \cref{lst:env-mlb1-beg4,lst:env-mlb1-body4} and
- \cref{lst:env-mlb1-end4,lst:env-mlb1-end-f4}.
-
- In contrast, the output from processing the file in \cref{lst:mlb3} will vary depending
- on the poly-switches used; in \cref{lst:env-mlb3-mod2} you'll see that the comment symbol
- after the \lstinline!\begin{myenv}! has been moved to the next line, as
- \texttt{BodyStartsOnOwnLine} is set to \texttt{1}. In \cref{lst:env-mlb3-mod4} you'll see
- that the comment has been accounted for correctly because \texttt{BodyStartsOnOwnLine}
- has been set to \texttt{2}, and the comment symbol has \emph{not} been moved to its own
- line. You're encouraged to experiment with \cref{lst:mlb3} and by setting the other
- poly-switches considered so far to \texttt{2} in turn.
-
- \begin{cmhtcbraster}[raster column skip=.1\linewidth]
- \cmhlistingsfromfile{demonstrations/env-mlb3-mod2.tex}{\texttt{env-mlb3.tex} using \vref{lst:env-mlb2}}{lst:env-mlb3-mod2}
- \cmhlistingsfromfile{demonstrations/env-mlb3-mod4.tex}{\texttt{env-mlb3.tex} using \vref{lst:env-mlb4}}{lst:env-mlb3-mod4}
- \end{cmhtcbraster}
-
- The details of the discussion in this section have concerned \emph{global} poly-switches
- in the \texttt{environments} field; each switch can also be specified on a
- \emph{per-name} basis, which would take priority over the global values; with reference
- to \vref{lst:environments-mlb}, an example is shown for the \texttt{equation*}
- environment.
-
- \paragraph{Removing line breaks (poly-switches set to $-1$)}
- Setting poly-switches to $-1$ tells \texttt{latexindent.pl} to remove line breaks of the
- \emph{<part of the thing>}, if necessary. We will consider the example code given in
- \cref{lst:mlb4}, noting in particular the positions of the line break highlighters,
- $\BeginStartsOnOwnLine$, $\BodyStartsOnOwnLine$, $\EndStartsOnOwnLine$ and
- $\EndFinishesWithLineBreak$, together with the associated YAML files in
- \crefrange{lst:env-mlb13}{lst:env-mlb16}. \index{poly-switches!removing line breaks: set
- to -1}
-
- \begin{minipage}{.45\linewidth}
- \begin{cmhlistings}[style=tcblatex,escapeinside={(*@}{@*)}]{\texttt{env-mlb4.tex}}{lst:mlb4}
-before words(*@$\BeginStartsOnOwnLine$@*)
-\begin{myenv}(*@$\BodyStartsOnOwnLine$@*)
-body of myenv(*@$\EndStartsOnOwnLine$@*)
-\end{myenv}(*@$\EndFinishesWithLineBreak$@*)
-after words
-\end{cmhlistings}
- \end{minipage}%
- \hfill
- \begin{minipage}{.51\textwidth}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/env-mlb13.yaml}[MLB-TCB]{\texttt{env-mlb13.yaml}}{lst:env-mlb13}
-
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/env-mlb14.yaml}[MLB-TCB]{\texttt{env-mlb14.yaml}}{lst:env-mlb14}
-
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/env-mlb15.yaml}[MLB-TCB]{\texttt{env-mlb15.yaml}}{lst:env-mlb15}
-
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/env-mlb16.yaml}[MLB-TCB]{\texttt{env-mlb16.yaml}}{lst:env-mlb16}
- \end{minipage}
-
- After running the commands \index{switches!-l demonstration} \index{switches!-m
- demonstration}
- \begin{commandshell}
-latexindent.pl -m env-mlb4.tex -l env-mlb13.yaml
-latexindent.pl -m env-mlb4.tex -l env-mlb14.yaml
-latexindent.pl -m env-mlb4.tex -l env-mlb15.yaml
-latexindent.pl -m env-mlb4.tex -l env-mlb16.yaml
-\end{commandshell}
-
- we obtain the respective output in \crefrange{lst:env-mlb4-mod13}{lst:env-mlb4-mod16}.
-
- \begin{minipage}{.45\linewidth}
- \cmhlistingsfromfile{demonstrations/env-mlb4-mod13.tex}{\texttt{env-mlb4.tex} using \cref{lst:env-mlb13}}{lst:env-mlb4-mod13}
- \end{minipage}
- \hfill
- \begin{minipage}{.45\linewidth}
- \cmhlistingsfromfile{demonstrations/env-mlb4-mod14.tex}{\texttt{env-mlb4.tex} using \cref{lst:env-mlb14}}{lst:env-mlb4-mod14}
- \end{minipage}
-
- \begin{minipage}{.45\linewidth}
- \cmhlistingsfromfile{demonstrations/env-mlb4-mod15.tex}{\texttt{env-mlb4.tex} using \cref{lst:env-mlb15}}{lst:env-mlb4-mod15}
- \end{minipage}
- \hfill
- \begin{minipage}{.45\linewidth}
- \cmhlistingsfromfile{demonstrations/env-mlb4-mod16.tex}{\texttt{env-mlb4.tex} using \cref{lst:env-mlb16}}{lst:env-mlb4-mod16}
- \end{minipage}
-
- Notice that in:
- \begin{itemize}
- \item \cref{lst:env-mlb4-mod13} the line break denoted by $\BeginStartsOnOwnLine$ in
- \cref{lst:mlb4} has been removed;
- \item \cref{lst:env-mlb4-mod14} the line break denoted by $\BodyStartsOnOwnLine$ in
- \cref{lst:mlb4} has been removed;
- \item \cref{lst:env-mlb4-mod15} the line break denoted by $\EndStartsOnOwnLine$ in
- \cref{lst:mlb4} has been removed;
- \item \cref{lst:env-mlb4-mod16} the line break denoted by $\EndFinishesWithLineBreak$ in
- \cref{lst:mlb4} has been removed.
- \end{itemize}
- We examined each of these cases separately for clarity of explanation, but you can
- combine all of the YAML settings in \crefrange{lst:env-mlb13}{lst:env-mlb16} into one
- file; alternatively, you could tell \texttt{latexindent.pl} to load them all by using the
- following command, for example \index{switches!-l demonstration} \index{switches!-m
- demonstration}
- \begin{widepage}
- \begin{commandshell}
-latexindent.pl -m env-mlb4.tex -l env-mlb13.yaml,env-mlb14.yaml,env-mlb15.yaml,env-mlb16.yaml
-\end{commandshell}
- \end{widepage}
- which gives the output in \vref{lst:env-mlb1-tex}.
-
- \paragraph{About trailing horizontal space}
- Recall that on \cpageref{yaml:removeTrailingWhitespace} we discussed the YAML field
- \texttt{removeTrailingWhitespace}, and that it has two (binary) switches to determine if
- horizontal space should be removed \texttt{beforeProcessing} and
- \texttt{afterProcessing}. The \texttt{beforeProcessing} is particularly relevant when
- considering the \texttt{-m} switch; let's consider the file shown in \cref{lst:mlb5},
- which highlights trailing spaces.
-
- \begin{cmhtcbraster}
- \begin{cmhlistings}[style=tcblatex,showspaces=true,escapeinside={(*@}{@*)}]{\texttt{env-mlb5.tex}}{lst:mlb5}
-before words (*@$\BeginStartsOnOwnLine$@*)
-\begin{myenv} (*@$\BodyStartsOnOwnLine$@*)
-body of myenv (*@$\EndStartsOnOwnLine$@*)
-\end{myenv} (*@$\EndFinishesWithLineBreak$@*)
-after words
-\end{cmhlistings}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/removeTWS-before.yaml}[yaml-TCB]{\texttt{removeTWS-before.yaml}}{lst:removeTWS-before}
- \end{cmhtcbraster}
-
- The output from the following commands \index{switches!-l demonstration}
- \index{switches!-m demonstration}
- \begin{widepage}
- \begin{commandshell}
-latexindent.pl -m env-mlb5.tex -l env-mlb13.yaml,env-mlb14.yaml,env-mlb15.yaml,env-mlb16.yaml
-latexindent.pl -m env-mlb5.tex -l env-mlb13.yaml,env-mlb14.yaml,env-mlb15.yaml,env-mlb16.yaml,removeTWS-before.yaml
-\end{commandshell}
- \end{widepage}
- is shown, respectively, in \cref{lst:env-mlb5-modAll,lst:env-mlb5-modAll-remove-WS}; note
- that the trailing horizontal white space has been preserved (by default) in
- \cref{lst:env-mlb5-modAll}, while in \cref{lst:env-mlb5-modAll-remove-WS}, it has been
- removed using the switch specified in \cref{lst:removeTWS-before}.
-
- \begin{widepage}
- \cmhlistingsfromfile[showspaces=true]{demonstrations/env-mlb5-modAll.tex}{\texttt{env-mlb5.tex} using \crefrange{lst:env-mlb4-mod13}{lst:env-mlb4-mod16}}{lst:env-mlb5-modAll}
-
- \cmhlistingsfromfile[showspaces=true]{demonstrations/env-mlb5-modAll-remove-WS.tex}{\texttt{env-mlb5.tex} using \crefrange{lst:env-mlb4-mod13}{lst:env-mlb4-mod16} \emph{and} \cref{lst:removeTWS-before}}{lst:env-mlb5-modAll-remove-WS}
- \end{widepage}
-
- \paragraph{poly-switch line break removal and blank lines}
- Now let's consider the file in \cref{lst:mlb6}, which contains blank lines.
- \index{poly-switches!blank lines}
-
- \begin{cmhtcbraster}
- \begin{cmhlistings}[style=tcblatex,escapeinside={(*@}{@*)}]{\texttt{env-mlb6.tex}}{lst:mlb6}
-before words(*@$\BeginStartsOnOwnLine$@*)
-
-
-\begin{myenv}(*@$\BodyStartsOnOwnLine$@*)
-
-
-body of myenv(*@$\EndStartsOnOwnLine$@*)
-
-
-\end{myenv}(*@$\EndFinishesWithLineBreak$@*)
-
-after words
-\end{cmhlistings}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/UnpreserveBlankLines.yaml}[MLB-TCB]{\texttt{UnpreserveBlankLines.yaml}}{lst:UnpreserveBlankLines}
- \end{cmhtcbraster}
-
- Upon running the following commands \index{switches!-l demonstration} \index{switches!-m
- demonstration}
- \begin{widepage}
- \begin{commandshell}
-latexindent.pl -m env-mlb6.tex -l env-mlb13.yaml,env-mlb14.yaml,env-mlb15.yaml,env-mlb16.yaml
-latexindent.pl -m env-mlb6.tex -l env-mlb13.yaml,env-mlb14.yaml,env-mlb15.yaml,env-mlb16.yaml,UnpreserveBlankLines.yaml
-\end{commandshell}
- \end{widepage}
- we receive the respective outputs in
- \cref{lst:env-mlb6-modAll,lst:env-mlb6-modAll-un-Preserve-Blank-Lines}. In
- \cref{lst:env-mlb6-modAll} we see that the multiple blank lines have each been condensed
- into one blank line, but that blank lines have \emph{not} been removed by the
- poly-switches -- this is because, by default, \texttt{preserveBlankLines} is set to
- \texttt{1}. By contrast, in \cref{lst:env-mlb6-modAll-un-Preserve-Blank-Lines}, we have
- allowed the poly-switches to remove blank lines because, in
- \cref{lst:UnpreserveBlankLines}, we have set \texttt{preserveBlankLines} to \texttt{0}.
-
- \begin{cmhtcbraster}[ raster left skip=-3.5cm,
- raster right skip=-2cm,
- raster force size=false,
- raster column 1/.style={add to width=-.2\textwidth},
- raster column 2/.style={add to width=.2\textwidth},
- raster column skip=.06\linewidth]
- \cmhlistingsfromfile{demonstrations/env-mlb6-modAll.tex}{\texttt{env-mlb6.tex} using \crefrange{lst:env-mlb4-mod13}{lst:env-mlb4-mod16}}{lst:env-mlb6-modAll}
- \cmhlistingsfromfile{demonstrations/env-mlb6-modAll-un-Preserve-Blank-Lines.tex}{\texttt{env-mlb6.tex} using \crefrange{lst:env-mlb4-mod13}{lst:env-mlb4-mod16} \emph{and} \cref{lst:UnpreserveBlankLines}}{lst:env-mlb6-modAll-un-Preserve-Blank-Lines}
- \end{cmhtcbraster}
-
- We can explore this further using the blank-line poly-switch value of $3$; let's use the
- file given in \cref{lst:env-mlb7-tex}.
-
- \cmhlistingsfromfile{demonstrations/env-mlb7.tex}{\texttt{env-mlb7.tex}}{lst:env-mlb7-tex}
-
- Upon running the following commands \index{switches!-l demonstration} \index{switches!-m
- demonstration}
- \begin{commandshell}
-latexindent.pl -m env-mlb7.tex -l env-mlb12.yaml,env-mlb13.yaml
-latexindent.pl -m env-mlb7.tex -l env-mlb13.yaml,env-mlb14.yaml,UnpreserveBlankLines.yaml
-\end{commandshell}
- we receive the outputs given in \cref{lst:env-mlb7-preserve,lst:env-mlb7-no-preserve}.
-
- \cmhlistingsfromfile{demonstrations/env-mlb7-preserve.tex}{\texttt{env-mlb7-preserve.tex}}{lst:env-mlb7-preserve}
- \cmhlistingsfromfile{demonstrations/env-mlb7-no-preserve.tex}{\texttt{env-mlb7-no-preserve.tex}}{lst:env-mlb7-no-preserve}
-
- Notice that in:
- \begin{itemize}
- \item \cref{lst:env-mlb7-preserve} that \lstinline!\end{one}! has added a blank line,
- because of the value of \texttt{EndFinishesWithLineBreak} in \vref{lst:env-mlb12}, and
- even though the line break ahead of \lstinline!\begin{two}! should have been removed
- (because of \texttt{BeginStartsOnOwnLine} in \vref{lst:env-mlb13}), the blank line has
- been preserved by default;
- \item \cref{lst:env-mlb7-no-preserve}, by contrast, has had the additional line-break removed,
- because of the settings in \cref{lst:UnpreserveBlankLines}.
- \end{itemize}
-
-\subsubsection{Poly-switches for double back slash}\label{subsec:dbs}
- With reference to \texttt{lookForAlignDelims} (see \vref{lst:aligndelims:basic})
- \announce{2019-07-13}{poly-switch for double back slash} you can specify poly-switches to
- dictate the line-break behaviour of double back slashes in environments
- (\vref{lst:tabularafter:basic}), commands (\vref{lst:matrixafter}), or special code
- blocks (\vref{lst:specialafter}). Note that for these poly-switches to take effect, the
- name of the code block must necessarily be specified within \texttt{lookForAlignDelims}
- (\vref{lst:aligndelims:basic}); we will demonstrate this in what follows.
- \index{delimiters!poly-switches for double back slash} \index{modifying linebreaks!
- surrounding double back slash} \index{poly-switches!for double back slash (delimiters)}%
-
- Consider the code given in \cref{lst:dbs-demo}.
- \begin{cmhlistings}[style=tcblatex,escapeinside={(*@}{@*)}]{\texttt{tabular3.tex}}{lst:dbs-demo}
-\begin{tabular}{cc}
- 1 & 2 (*@$\ElseStartsOnOwnLine$@*)\\(*@$\ElseFinishesWithLineBreak$@*) 3 & 4 (*@$\ElseStartsOnOwnLine$@*)\\(*@$\ElseFinishesWithLineBreak$@*)
-\end{tabular}
-\end{cmhlistings}
- Referencing \cref{lst:dbs-demo}:
- \begin{itemize}
- \item \texttt{DBS} stands for \emph{double back slash};
- \item line breaks ahead of the double back slash are annotated by $\ElseStartsOnOwnLine$, and
- are controlled by \texttt{DBSStartsOnOwnLine};
- \item line breaks after the double back slash are annotated by $\ElseFinishesWithLineBreak$,
- and are controlled by \texttt{DBSFinishesWithLineBreak}.
- \end{itemize}
-
- Let's explore each of these in turn.
-
- \paragraph{Double back slash starts on own line}
- We explore \texttt{DBSStartsOnOwnLine} ($\ElseStartsOnOwnLine$ in \cref{lst:dbs-demo});
- starting with the code in \cref{lst:dbs-demo}, together with the YAML files given in
- \cref{lst:DBS1} and \cref{lst:DBS2} and running the following commands \index{switches!-l
- demonstration} \index{switches!-m demonstration}
- \begin{commandshell}
-latexindent.pl -m tabular3.tex -l DBS1.yaml
-latexindent.pl -m tabular3.tex -l DBS2.yaml
-\end{commandshell}
- then we receive the respective output given in \cref{lst:tabular3-DBS1} and
- \cref{lst:tabular3-DBS2}.
-
- \begin{cmhtcbraster}[raster column skip=.01\linewidth]
- \cmhlistingsfromfile{demonstrations/tabular3-mod1.tex}{\texttt{tabular3.tex} using \cref{lst:DBS1}}{lst:tabular3-DBS1}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/DBS1.yaml}[MLB-TCB]{\texttt{DBS1.yaml}}{lst:DBS1}
- \end{cmhtcbraster}
-
- \begin{cmhtcbraster}[raster column skip=.01\linewidth]
- \cmhlistingsfromfile{demonstrations/tabular3-mod2.tex}{\texttt{tabular3.tex} using \cref{lst:DBS2}}{lst:tabular3-DBS2}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/DBS2.yaml}[MLB-TCB]{\texttt{DBS2.yaml}}{lst:DBS2}
- \end{cmhtcbraster}
-
- We note that
- \begin{itemize}
- \item \cref{lst:DBS1} specifies \texttt{DBSStartsOnOwnLine} for
- \emph{every} environment (that is within \texttt{lookForAlignDelims},
- \vref{lst:aligndelims:advanced});
- the double back slashes from \cref{lst:dbs-demo} have been moved to their own line in
- \cref{lst:tabular3-DBS1};
- \item \cref{lst:DBS2} specifies \texttt{DBSStartsOnOwnLine} on a
- \emph{per-name} basis for \texttt{tabular} (that is within \texttt{lookForAlignDelims},
- \vref{lst:aligndelims:advanced});
- the double back slashes from \cref{lst:dbs-demo} have been moved to their own line in
- \cref{lst:tabular3-DBS2}, having added comment symbols before moving them.
- \end{itemize}
-
- \paragraph{Double back slash finishes with line break}
- Let's now explore \texttt{DBSFinishesWithLineBreak} ($\ElseFinishesWithLineBreak$ in
- \cref{lst:dbs-demo}); starting with the code in \cref{lst:dbs-demo}, together with the
- YAML files given in \cref{lst:DBS3} and \cref{lst:DBS4} and running the following
- commands \index{poly-switches!for double back slash (delimiters)} \index{switches!-l
- demonstration} \index{switches!-m demonstration}
- \begin{commandshell}
-latexindent.pl -m tabular3.tex -l DBS3.yaml
-latexindent.pl -m tabular3.tex -l DBS4.yaml
-\end{commandshell}
- then we receive the respective output given in \cref{lst:tabular3-DBS3} and
- \cref{lst:tabular3-DBS4}.
-
- \begin{cmhtcbraster}[raster column skip=.01\linewidth]
- \cmhlistingsfromfile{demonstrations/tabular3-mod3.tex}{\texttt{tabular3.tex} using \cref{lst:DBS3}}{lst:tabular3-DBS3}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/DBS3.yaml}[MLB-TCB]{\texttt{DBS3.yaml}}{lst:DBS3}
- \end{cmhtcbraster}
-
- \begin{cmhtcbraster}[raster column skip=.01\linewidth]
- \cmhlistingsfromfile{demonstrations/tabular3-mod4.tex}{\texttt{tabular3.tex} using \cref{lst:DBS4}}{lst:tabular3-DBS4}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/DBS4.yaml}[MLB-TCB]{\texttt{DBS4.yaml}}{lst:DBS4}
- \end{cmhtcbraster}
-
- We note that
- \begin{itemize}
- \item \cref{lst:DBS3} specifies \texttt{DBSFinishesWithLineBreak} for
- \emph{every} environment (that is within \texttt{lookForAlignDelims},
- \vref{lst:aligndelims:advanced});
- the code following the double back slashes from \cref{lst:dbs-demo} has been moved to
- their own line in \cref{lst:tabular3-DBS3};
- \item \cref{lst:DBS4} specifies \texttt{DBSFinishesWithLineBreak} on a
- \emph{per-name} basis for \texttt{tabular} (that is within \texttt{lookForAlignDelims},
- \vref{lst:aligndelims:advanced});
- the first double back slashes from \cref{lst:dbs-demo} have moved code following them to
- their own line in \cref{lst:tabular3-DBS4}, having added comment symbols before moving
- them; the final double back slashes have \emph{not} added a line break as they are at the
- end of the body within the code block.
- \end{itemize}
-
- \paragraph{Double back slash poly-switches for specialBeginEnd}
- Let's explore the double back slash poly-switches for code blocks within
- \texttt{specialBeginEnd} code blocks (\vref{lst:specialBeginEnd}); we begin with the code
- within \cref{lst:special4}. \index{specialBeginEnd!double backslash poly-switch
- demonstration} \index{poly-switches!double backslash} \index{poly-switches!for double
- back slash (delimiters)} \index{specialBeginEnd!lookForAlignDelims} \index{delimiters}
- \index{linebreaks!summary of poly-switches}
-
- \cmhlistingsfromfile{demonstrations/special4.tex}{\texttt{special4.tex}}{lst:special4}
-
- Upon using the YAML settings in \cref{lst:DBS5}, and running the command
- \index{switches!-l demonstration} \index{switches!-m demonstration}
- \begin{commandshell}
-latexindent.pl -m special4.tex -l DBS5.yaml
-\end{commandshell}
- then we receive the output given in \cref{lst:special4-DBS5}. \index{delimiters!with
- specialBeginEnd and the -m switch}
-
- \begin{cmhtcbraster}[
- raster force size=false,
- raster column 1/.style={add to width=-.1\textwidth},
- raster column skip=.06\linewidth]
- \cmhlistingsfromfile{demonstrations/special4-mod5.tex}{\texttt{special4.tex} using \cref{lst:DBS5}}{lst:special4-DBS5}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/DBS5.yaml}[MLB-TCB,width=0.6\textwidth]{\texttt{DBS5.yaml}}{lst:DBS5}
- \end{cmhtcbraster}
-
- There are a few things to note:
- \begin{itemize}
- \item in \cref{lst:DBS5} we have specified \texttt{cmhMath} within \texttt{lookForAlignDelims};
- without this, the double back slash poly-switches would be ignored for this code block;
- \item the \texttt{DBSFinishesWithLineBreak} poly-switch has controlled the line breaks
- following the double back slashes;
- \item the \texttt{SpecialEndStartsOnOwnLine} poly-switch has controlled the addition of a
- comment symbol, followed by a line break, as it is set to a value of 2.
- \end{itemize}
-
- \paragraph{Double back slash poly-switches for optional and mandatory arguments}
- For clarity, we provide a demonstration of controlling the double back slash
- poly-switches for optional and mandatory arguments. We begin with the code in
- \cref{lst:mycommand2}. \index{poly-switches!for double back slash (delimiters)}
-
- \cmhlistingsfromfile{demonstrations/mycommand2.tex}{\texttt{mycommand2.tex}}{lst:mycommand2}
-
- Upon using the YAML settings in \cref{lst:DBS6,lst:DBS7}, and running the command
- \index{switches!-l demonstration} \index{switches!-m demonstration}
- \begin{commandshell}
-latexindent.pl -m mycommand2.tex -l DBS6.yaml
-latexindent.pl -m mycommand2.tex -l DBS7.yaml
-\end{commandshell}
- then we receive the output given in \cref{lst:mycommand2-DBS6,lst:mycommand2-DBS7}.
-
- \begin{cmhtcbraster}[
- raster force size=false,
- raster column 1/.style={add to width=-.1\textwidth},
- raster column skip=.03\linewidth]
- \cmhlistingsfromfile{demonstrations/mycommand2-mod6.tex}{\texttt{mycommand2.tex} using \cref{lst:DBS6}}{lst:mycommand2-DBS6}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/DBS6.yaml}[MLB-TCB,width=0.6\textwidth]{\texttt{DBS6.yaml}}{lst:DBS6}
- \end{cmhtcbraster}
-
- \begin{cmhtcbraster}[
- raster force size=false,
- raster column 1/.style={add to width=-.1\textwidth},
- raster column skip=.03\linewidth]
- \cmhlistingsfromfile{demonstrations/mycommand2-mod7.tex}{\texttt{mycommand2.tex} using \cref{lst:DBS7}}{lst:mycommand2-DBS7}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/DBS7.yaml}[MLB-TCB,width=0.6\textwidth]{\texttt{DBS7.yaml}}{lst:DBS7}
- \end{cmhtcbraster}
-
- \paragraph{Double back slash optional square brackets}
- The pattern matching for the double back slash will also, optionally, allow trailing
- square brackets that contain a measurement of vertical spacing, for example
- \lstinline!\\[3pt]!. \index{poly-switches!for double back slash (delimiters)}
-
- For example, beginning with the code in \cref{lst:pmatrix3}
-
- \cmhlistingsfromfile{demonstrations/pmatrix3.tex}{\texttt{pmatrix3.tex}}{lst:pmatrix3}
-
- and running the following command, using \cref{lst:DBS3}, \index{switches!-l
- demonstration} \index{switches!-m demonstration}
- \begin{commandshell}
-latexindent.pl -m pmatrix3.tex -l DBS3.yaml
-\end{commandshell}
- then we receive the output given in \cref{lst:pmatrix3-DBS3}.
-
- \cmhlistingsfromfile{demonstrations/pmatrix3-mod3.tex}{\texttt{pmatrix3.tex} using \cref{lst:DBS3}}{lst:pmatrix3-DBS3}
-
- You can customise the pattern for the double back slash by exploring the \emph{fine
- tuning} field detailed in \vref{lst:fineTuning}.
-
-\subsubsection{Poly-switches for other code blocks}
- Rather than repeat the examples shown for the environment code blocks (in
- \vref{sec:modifylinebreaks-environments}), we choose to detail the poly-switches for all
- other code blocks in \cref{tab:poly-switch-mapping}; note that each and every one of
- these poly-switches is \emph{off by default}, i.e, set to \texttt{0}.
-
- Note also that, by design, line breaks involving, \texttt{filecontents} and
- `comment-marked' code blocks (\vref{lst:alignmentmarkup}) can \emph{not} be modified
- using \texttt{latexindent.pl}. \announce{2019-05-05}*{verbatim poly-switch} However,
- there are two poly-switches available for \texttt{verbatim} code blocks: environments
- (\vref{lst:verbatimEnvironments}), commands (\vref{lst:verbatimCommands}) and
- \texttt{specialBeginEnd} (\vref{lst:special-verb1-yaml}).
- \index{specialBeginEnd!poly-switch summary} \index{verbatim!poly-switch summary}
- \index{poly-switches!summary of all poly-switches}%
-
- \clearpage
- \begin{longtable}{llll}
- \caption{Poly-switch mappings for all code-block types}\label{tab:poly-switch-mapping} \\
- \toprule
- Code block & Sample & \multicolumn{2}{c}{Poly-switch mapping} \\
- \midrule
- environment & \verb!before words!$\BeginStartsOnOwnLine$ & $\BeginStartsOnOwnLine$ & BeginStartsOnOwnLine \\
- & \verb!\begin{myenv}!$\BodyStartsOnOwnLine$ & $\BodyStartsOnOwnLine$ & BodyStartsOnOwnLine \\
- & \verb!body of myenv!$\EndStartsOnOwnLine$ & $\EndStartsOnOwnLine$ & EndStartsOnOwnLine \\
- & \verb!\end{myenv}!$\EndFinishesWithLineBreak$ & $\EndFinishesWithLineBreak$ & EndFinishesWithLineBreak \\
- & \verb!after words! & & \\
- \cmidrule{2-4}
- ifelsefi & \verb!before words!$\BeginStartsOnOwnLine$ & $\BeginStartsOnOwnLine$ & IfStartsOnOwnLine \\
- & \verb!\if...!$\BodyStartsOnOwnLine$ & $\BodyStartsOnOwnLine$ & BodyStartsOnOwnLine \\
- & \verb!body of if/or statement!$\OrStartsOnOwnLine$ & $\OrStartsOnOwnLine$ & OrStartsOnOwnLine %
- \announce{2018-04-27}{new ifElseFi code block poly-switches} \\
- & \verb!\or!$\OrFinishesWithLineBreak$ & $\OrFinishesWithLineBreak$ & OrFinishesWithLineBreak \\
- & \verb!body of if/or statement!$\ElseStartsOnOwnLine$ & $\ElseStartsOnOwnLine$ & ElseStartsOnOwnLine \\
- & \verb!\else!$\ElseFinishesWithLineBreak$ & $\ElseFinishesWithLineBreak$ & ElseFinishesWithLineBreak \\
- & \verb!body of else statement!$\EndStartsOnOwnLine$ & $\EndStartsOnOwnLine$ & FiStartsOnOwnLine \\
- & \verb!\fi!$\EndFinishesWithLineBreak$ & $\EndFinishesWithLineBreak$ & FiFinishesWithLineBreak \\
- & \verb!after words! & & \\
- \cmidrule{2-4}
- optionalArguments & \verb!...!$\BeginStartsOnOwnLine$ & $\BeginStartsOnOwnLine$ & LSqBStartsOnOwnLine\footnote{LSqB stands for Left Square Bracket} \\
- & \verb![!$\BodyStartsOnOwnLine$ & $\BodyStartsOnOwnLine$ & OptArgBodyStartsOnOwnLine \\
- \announce{2019-07-13}{new comma-related poly-switches} & \verb!value before comma!$\ElseStartsOnOwnLine$, & $\ElseStartsOnOwnLine$ & CommaStartsOnOwnLine \\
- & $\ElseFinishesWithLineBreak$ & $\ElseFinishesWithLineBreak$ & CommaFinishesWithLineBreak \\
- & \verb!end of body of opt arg!$\EndStartsOnOwnLine$ & $\EndStartsOnOwnLine$ & RSqBStartsOnOwnLine \\
- & \verb!]!$\EndFinishesWithLineBreak$ & $\EndFinishesWithLineBreak$ & RSqBFinishesWithLineBreak \\
- & \verb!...! & & \\
- \cmidrule{2-4}
- mandatoryArguments & \verb!...!$\BeginStartsOnOwnLine$ & $\BeginStartsOnOwnLine$ & LCuBStartsOnOwnLine\footnote{LCuB stands for Left Curly Brace} \\
- & \verb!{!$\BodyStartsOnOwnLine$ & $\BodyStartsOnOwnLine$ & MandArgBodyStartsOnOwnLine \\
- \announce{2019-07-13}{new comma-related poly-switches} & \verb!value before comma!$\ElseStartsOnOwnLine$, & $\ElseStartsOnOwnLine$ & CommaStartsOnOwnLine \\
- & $\ElseFinishesWithLineBreak$ & $\ElseFinishesWithLineBreak$ & CommaFinishesWithLineBreak \\
- & \verb!end of body of mand arg!$\EndStartsOnOwnLine$ & $\EndStartsOnOwnLine$ & RCuBStartsOnOwnLine \\
- & \verb!}!$\EndFinishesWithLineBreak$ & $\EndFinishesWithLineBreak$ & RCuBFinishesWithLineBreak \\
- & \verb!...! & & \\
- \cmidrule{2-4}
- commands & \verb!before words!$\BeginStartsOnOwnLine$ & $\BeginStartsOnOwnLine$ & CommandStartsOnOwnLine \\
- & \verb!\mycommand!$\BodyStartsOnOwnLine$ & $\BodyStartsOnOwnLine$ & CommandNameFinishesWithLineBreak \\
- & $\langle$\itshape{arguments}$\rangle$ & & \\
- \cmidrule{2-4}
- namedGroupingBracesBrackets & before words$\BeginStartsOnOwnLine$ & $\BeginStartsOnOwnLine$ & NameStartsOnOwnLine \\
- & myname$\BodyStartsOnOwnLine$ & $\BodyStartsOnOwnLine$ & NameFinishesWithLineBreak \\
- & $\langle$\itshape{braces/brackets}$\rangle$ & & \\
- \cmidrule{2-4}
- keyEqualsValuesBraces\newline Brackets & before words$\BeginStartsOnOwnLine$ & $\BeginStartsOnOwnLine$ & KeyStartsOnOwnLine \\
- & key$\EqualsStartsOnOwnLine$=$\BodyStartsOnOwnLine$ & $\EqualsStartsOnOwnLine$ & EqualsStartsOnOwnLine \\
- & $\langle$\itshape{braces/brackets}$\rangle$ & $\BodyStartsOnOwnLine$ & EqualsFinishesWithLineBreak \\
- \cmidrule{2-4}
- items & before words$\BeginStartsOnOwnLine$ & $\BeginStartsOnOwnLine$ & ItemStartsOnOwnLine \\
- & \verb!\item!$\BodyStartsOnOwnLine$ & $\BodyStartsOnOwnLine$ & ItemFinishesWithLineBreak \\
- & \verb!...! & & \\
- \cmidrule{2-4}
- specialBeginEnd & before words$\BeginStartsOnOwnLine$ & $\BeginStartsOnOwnLine$ & SpecialBeginStartsOnOwnLine \\
- & \verb!\[!$\BodyStartsOnOwnLine$ & $\BodyStartsOnOwnLine$ & SpecialBodyStartsOnOwnLine \\
- & \verb!body of special/middle!$\ElseStartsOnOwnLine$ & $\ElseStartsOnOwnLine$ & SpecialMiddleStartsOnOwnLine %
- \announce{2018-04-27}{new special code block poly-switches} \\
- & \verb!\middle!$\ElseFinishesWithLineBreak$ & $\ElseFinishesWithLineBreak$ & SpecialMiddleFinishesWithLineBreak \\
- & body of special/middle $\EndStartsOnOwnLine$ & $\EndStartsOnOwnLine$ & SpecialEndStartsOnOwnLine \\
- & \verb!\]!$\EndFinishesWithLineBreak$ & $\EndFinishesWithLineBreak$ & SpecialEndFinishesWithLineBreak \\
- & after words & & \\
- \cmidrule{2-4}
- verbatim & before words$\BeginStartsOnOwnLine$\verb!\begin{verbatim}! & $\BeginStartsOnOwnLine$ & VerbatimBeginStartsOnOwnLine \\
- \announce{2019-05-05}{verbatim poly-switches} & body of verbatim \verb!\end{verbatim}!$\EndFinishesWithLineBreak$ & $\EndFinishesWithLineBreak$ & VerbatimEndFinishesWithLineBreak \\
- & after words & & \\
- \bottomrule
- \end{longtable}
-\subsubsection{Partnering BodyStartsOnOwnLine with argument-based poly-switches}
- Some poly-switches need to be partnered together; in particular, when line breaks
- involving the \emph{first} argument of a code block need to be accounted for using both
- \texttt{BodyStartsOnOwnLine} (or its equivalent, see \vref{tab:poly-switch-mapping}) and
- \texttt{LCuBStartsOnOwnLine} for mandatory arguments, and \texttt{LSqBStartsOnOwnLine}
- for optional arguments. \index{poly-switches!conflicting partnering}
-
- Let's begin with the code in \cref{lst:mycommand1} and the YAML settings in
- \cref{lst:mycom-mlb1}; with reference to \vref{tab:poly-switch-mapping}, the key
- \texttt{CommandNameFinishesWithLineBreak} is an alias for \texttt{BodyStartsOnOwnLine}.
-
- \cmhlistingsfromfile{demonstrations/mycommand1.tex}{\texttt{mycommand1.tex}}{lst:mycommand1}
-
- Upon running the command \index{switches!-l demonstration} \index{switches!-m
- demonstration}
- \begin{commandshell}
-latexindent.pl -m -l=mycom-mlb1.yaml mycommand1.tex
-\end{commandshell}
- we obtain \cref{lst:mycommand1-mlb1}; note that the \emph{second} mandatory argument
- beginning brace \lstinline!{! has had its leading line break removed, but that the
- \emph{first} brace has not.
-
- \begin{cmhtcbraster}[
- raster force size=false,
- raster column 1/.style={add to width=-1cm},
- ]
- \cmhlistingsfromfile{demonstrations/mycommand1-mlb1.tex}{\texttt{mycommand1.tex} using \cref{lst:mycom-mlb1}}{lst:mycommand1-mlb1}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/mycom-mlb1.yaml}[MLB-TCB,width=.6\textwidth]{\texttt{mycom-mlb1.yaml}}{lst:mycom-mlb1}
- \end{cmhtcbraster}
-
- Now let's change the YAML file so that it is as in \cref{lst:mycom-mlb2}; upon running
- the analogous command to that given above, we obtain \cref{lst:mycommand1-mlb2}; both
- beginning braces \lstinline!{! have had their leading line breaks removed.
-
- \begin{cmhtcbraster}[
- raster force size=false,
- raster column 1/.style={add to width=-1cm},
- ]
- \cmhlistingsfromfile{demonstrations/mycommand1-mlb2.tex}{\texttt{mycommand1.tex} using \cref{lst:mycom-mlb2}}{lst:mycommand1-mlb2}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/mycom-mlb2.yaml}[MLB-TCB,width=.6\textwidth]{\texttt{mycom-mlb2.yaml}}{lst:mycom-mlb2}
- \end{cmhtcbraster}
-
- Now let's change the YAML file so that it is as in \cref{lst:mycom-mlb3}; upon running
- the analogous command to that given above, we obtain \cref{lst:mycommand1-mlb3}.
-
- \begin{cmhtcbraster}[
- raster force size=false,
- raster column 1/.style={add to width=-1cm},
- ]
- \cmhlistingsfromfile{demonstrations/mycommand1-mlb3.tex}{\texttt{mycommand1.tex} using \cref{lst:mycom-mlb3}}{lst:mycommand1-mlb3}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/mycom-mlb3.yaml}[MLB-TCB,width=.6\textwidth]{\texttt{mycom-mlb3.yaml}}{lst:mycom-mlb3}
- \end{cmhtcbraster}
-
-\subsubsection{Conflicting poly-switches: sequential code blocks}
- It is very easy to have conflicting poly-switches; if we use the example from
- \vref{lst:mycommand1}, and consider the YAML settings given in \cref{lst:mycom-mlb4}. The
- output from running \index{poly-switches!conflicting switches} \index{switches!-l
- demonstration} \index{switches!-m demonstration}
- \begin{commandshell}
-latexindent.pl -m -l=mycom-mlb4.yaml mycommand1.tex
-\end{commandshell}
- is given in \cref{lst:mycom-mlb4}.
-
- \begin{cmhtcbraster}
- \cmhlistingsfromfile{demonstrations/mycommand1-mlb4.tex}{\texttt{mycommand1.tex} using \cref{lst:mycom-mlb4}}{lst:mycommand1-mlb4}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/mycom-mlb4.yaml}[MLB-TCB,width=\linewidth]{\texttt{mycom-mlb4.yaml}}{lst:mycom-mlb4}
- \end{cmhtcbraster}
-
- Studying \cref{lst:mycom-mlb4}, we see that the two poly-switches are at opposition with
- one another:
- \begin{itemize}
- \item on the one hand, \texttt{LCuBStartsOnOwnLine} should \emph{not} start on its own line (as
- poly-switch is set to $-1$);
- \item on the other hand, \texttt{RCuBFinishesWithLineBreak} \emph{should} finish with a line
- break.
- \end{itemize}
- So, which should win the conflict? As demonstrated in \cref{lst:mycommand1-mlb4}, it is
- clear that \texttt{LCuBStartsOnOwnLine} won this conflict, and the reason is that
- \emph{the second argument was processed after the first} -- in general, the most
- recently-processed code block and associated poly-switch takes priority.
-
- We can explore this further by considering the YAML settings in \cref{lst:mycom-mlb5};
- upon running the command \index{switches!-l demonstration} \index{switches!-m
- demonstration}
- \begin{commandshell}
-latexindent.pl -m -l=mycom-mlb5.yaml mycommand1.tex
-\end{commandshell}
- we obtain the output given in \cref{lst:mycommand1-mlb5}.
-
- \begin{cmhtcbraster}[raster column skip=.1\linewidth]
- \cmhlistingsfromfile{demonstrations/mycommand1-mlb5.tex}{\texttt{mycommand1.tex} using \cref{lst:mycom-mlb5}}{lst:mycommand1-mlb5}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/mycom-mlb5.yaml}[MLB-TCB,width=\linewidth]{\texttt{mycom-mlb5.yaml}}{lst:mycom-mlb5}
- \end{cmhtcbraster}
-
- As previously, the most-recently-processed code block takes priority -- as before, the
- second (i.e, \emph{last}) argument. Exploring this further, we consider the YAML settings
- in \cref{lst:mycom-mlb6}, which give associated output in \cref{lst:mycommand1-mlb6}.
-
- \begin{cmhtcbraster}[raster column skip=.1\linewidth]
- \cmhlistingsfromfile{demonstrations/mycommand1-mlb6.tex}{\texttt{mycommand1.tex} using \cref{lst:mycom-mlb6}}{lst:mycommand1-mlb6}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/mycom-mlb6.yaml}[MLB-TCB,width=\linewidth]{\texttt{mycom-mlb6.yaml}}{lst:mycom-mlb6}
- \end{cmhtcbraster}
-
- Note that a \lstinline!%! \emph{has} been added to the trailing first \lstinline!}!; this
- is because:
- \begin{itemize}
- \item while processing the \emph{first} argument, the trailing line break has been removed
- (\texttt{RCuBFinishesWithLineBreak} set to $-1$);
- \item while processing the \emph{second} argument, \texttt{latexindent.pl} finds that it does
- \emph{not} begin on its own line, and so because \texttt{LCuBStartsOnOwnLine} is set to
- $2$, it adds a comment, followed by a line break.
- \end{itemize}
-
-\subsubsection{Conflicting poly-switches: nested code blocks}
- Now let's consider an example when nested code blocks have conflicting poly-switches;
- we'll use the code in \cref{lst:nested-env}, noting that it contains nested environments.
- \index{poly-switches!conflicting switches}
-
- \cmhlistingsfromfile{demonstrations/nested-env.tex}{\texttt{nested-env.tex}}{lst:nested-env}
-
- Let's use the YAML settings given in \cref{lst:nested-env-mlb1-yaml}, which upon running
- the command \index{switches!-l demonstration} \index{switches!-m demonstration}
- \begin{commandshell}
-latexindent.pl -m -l=nested-env-mlb1.yaml nested-env.tex
-\end{commandshell}
- gives the output in \cref{lst:nested-env-mlb1}.
-
- \begin{cmhtcbraster}[raster column skip=.05\linewidth]
- \cmhlistingsfromfile{demonstrations/nested-env-mlb1.tex}{\texttt{nested-env.tex} using \cref{lst:nested-env-mlb1-yaml}}{lst:nested-env-mlb1}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/nested-env-mlb1.yaml}[MLB-TCB,width=\linewidth]{\texttt{nested-env-mlb1.yaml}}{lst:nested-env-mlb1-yaml}
- \end{cmhtcbraster}
-
- In \cref{lst:nested-env-mlb1}, let's first of all note that both environments have
- received the appropriate (default) indentation; secondly, note that the poly-switch
- \texttt{EndStartsOnOwnLine} appears to have won the conflict, as \lstinline!\end{one}!
- has had its leading line break removed.
-
- To understand it, let's talk about the three basic phases \label{page:phases}of
- \texttt{latexindent.pl}:
- \begin{enumerate}
- \item Phase 1: packing, in which code blocks are replaced with unique ids, working from
- \emph{the inside to the outside}, and then sequentially -- for example, in
- \cref{lst:nested-env}, the \texttt{two} environment is found \emph{before} the
- \texttt{one} environment; if the -m switch is active, then during this phase:
- \begin{itemize}
- \item line breaks at the beginning of the \texttt{body} can be added (if
- \texttt{BodyStartsOnOwnLine} is $1$ or $2$) or removed (if \texttt{BodyStartsOnOwnLine}
- is $-1$);
- \item line breaks at the end of the body can be added (if \texttt{EndStartsOnOwnLine} is $1$ or
- $2$) or removed (if \texttt{EndStartsOnOwnLine} is $-1$);
- \item line breaks after the end statement can be added (if \texttt{EndFinishesWithLineBreak} is
- $1$ or $2$).
- \end{itemize}
- \item Phase 2: indentation, in which white space is added to the begin, body, and end
- statements;
- \item Phase 3: unpacking, in which unique ids are replaced by their \emph{indented} code
- blocks; if the -m switch is active, then during this phase,
- \begin{itemize}
- \item line breaks before \texttt{begin} statements can be added or removed (depending upon
- \texttt{BeginStartsOnOwnLine});
- \item line breaks after \emph{end} statements can be removed but \emph{NOT} added (see
- \texttt{EndFinishesWithLineBreak}).
- \end{itemize}
- \end{enumerate}
-
- With reference to \cref{lst:nested-env-mlb1}, this means that during Phase 1:
- \begin{itemize}
- \item the \texttt{two} environment is found first, and the line break ahead of the
- \lstinline!\end{two}! statement is removed because \texttt{EndStartsOnOwnLine} is set to
- $-1$. Importantly, because, \emph{at this stage}, \lstinline!\end{two}! \emph{does}
- finish with a line break, \texttt{EndFinishesWithLineBreak} causes no action.
- \item next, the \texttt{one} environment is found; the line break ahead of
- \lstinline!\end{one}! is removed because \texttt{EndStartsOnOwnLine} is set to $-1$.
- \end{itemize}
- The indentation is done in Phase 2; in Phase 3 \emph{there is no option to add a line
- break after the \lstinline!end! statements}. We can justify this by remembering that
- during Phase 3, the \texttt{one} environment will be found and processed first, followed
- by the \texttt{two} environment. If the \texttt{two} environment were to add a line break
- after the \lstinline!\end{two}! statement, then \texttt{latexindent.pl} would have no way
- of knowing how much indentation to add to the subsequent text (in this case,
- \lstinline!\end{one}!).
-
- We can explore this further using the poly-switches in \cref{lst:nested-env-mlb2}; upon
- running the command \index{switches!-l demonstration} \index{switches!-m demonstration}
- \begin{commandshell}
-latexindent.pl -m -l=nested-env-mlb2.yaml nested-env.tex
-\end{commandshell}
- we obtain the output given in \cref{lst:nested-env-mlb2-output}.
-
- \begin{cmhtcbraster}
- \cmhlistingsfromfile{demonstrations/nested-env-mlb2.tex}{\texttt{nested-env.tex} using \cref{lst:nested-env-mlb2}}{lst:nested-env-mlb2-output}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/nested-env-mlb2.yaml}[MLB-TCB,width=\linewidth]{\texttt{nested-env-mlb2.yaml}}{lst:nested-env-mlb2}
- \end{cmhtcbraster}
-
- During Phase 1:
- \begin{itemize}
- \item the \texttt{two} environment is found first, and the line break ahead of the
- \lstinline!\end{two}! statement is not changed because \texttt{EndStartsOnOwnLine} is set
- to $1$. Importantly, because, \emph{at this stage}, \lstinline!\end{two}! \emph{does}
- finish with a line break, \texttt{EndFinishesWithLineBreak} causes no action.
- \item next, the \texttt{one} environment is found; the line break ahead of
- \lstinline!\end{one}! is already present, and no action is needed.
- \end{itemize}
- The indentation is done in Phase 2, and then in Phase 3, the \texttt{one} environment is
- found and processed first, followed by the \texttt{two} environment. \emph{At this
- stage}, the \texttt{two} environment finds \texttt{EndFinishesWithLineBreak} is $-1$, so
- it removes the trailing line break; remember, at this point, \texttt{latexindent.pl} has
- completely finished with the \texttt{one} environment.
diff --git a/support/latexindent/documentation/subsec-text-wrap.tex b/support/latexindent/documentation/subsec-text-wrap.tex
deleted file mode 100644
index e17188267a..0000000000
--- a/support/latexindent/documentation/subsec-text-wrap.tex
+++ /dev/null
@@ -1,513 +0,0 @@
-% arara: pdflatex: { files: [latexindent]}
-\subsection{Text Wrapping}\label{subsec:textwrapping}
- \announce{2022-03-13}{text wrap overhaul}\emph{The text wrapping routine has been over-hauled as
- of V3.16; I hope that the interface is simpler, and most importantly, the results are
- better}.
-
- The complete settings for this feature are given in \cref{lst:textWrapOptionsAll}.
-
- \cmhlistingsfromfile[style=textWrapOptionsAll]{../defaultSettings.yaml}[MLB-TCB,width=.95\linewidth,before=\centering]{\texttt{textWrapOptions}}{lst:textWrapOptionsAll}
-
-\subsubsection{Text wrap: overview}
- An overview of how the text wrapping feature works:
- \begin{enumerate}
- \item the default value of \texttt{columns} is 0, which means that text wrapping will
- \emph{not} happen by default;
- \item it happens \emph{after} verbatim blocks have been found;
- \item it happens \emph{after} the oneSentencePerLine routine (see
- \cref{sec:onesentenceperline});
- \item it happens \emph{before} all of the other code blocks are found and does \emph{not}
- operate on a per-code-block basis; this means that, including indentation, you may
- receive a column width wider than that which you specify in \texttt{columns}
- \item code blocks to be text wrapped will:
- \begin{enumerate}
- \item \emph{follow} the fields specified in \texttt{blocksFollow}
- \item \emph{begin} with the fields specified in \texttt{blocksBeginWith}
- \item \emph{end} before the fields specified in \texttt{blocksEndBefore}
- \end{enumerate}
- \item setting \texttt{columns} to a value $>0$ will text wrap blocks by first removing line
- breaks, and then wrapping according to the specified value of \texttt{columns};
- \item setting \texttt{columns} to $-1$ will \emph{only} remove line breaks within the text wrap
- block;
- \item by default, the text wrapping routine will remove line breaks within text blocks because
- \texttt{removeBlockLineBreaks} is set to 1; switch it to 0 if you wish to change this;
- \item about trailing comments within text wrap blocks:
- \begin{enumerate}
- \item trailing comments that do \emph{not} have leading space instruct the text wrap routine to
- connect the lines \emph{without} space (see \cref{lst:tw-tc2});
- \item multiple trailing comments will be connected at the end of the text wrap block (see
- \cref{lst:tw-tc4});
- \item the number of spaces between the end of the text wrap block and the (possibly combined)
- trailing comments is determined by the spaces (if any) at the end of the text wrap block
- (see \cref{lst:tw-tc5}).
- \end{enumerate}
- \end{enumerate}
-
- We demonstrate this feature using a series of examples.
-
-\subsubsection{Text wrap: simple examples}\label{subsec:textwrapping-quick-start}
-
- \begin{example}
- Let's use the sample text given in \cref{lst:textwrap1}. \index{text wrap!quick start}
-
- \cmhlistingsfromfile{demonstrations/textwrap1.tex}{\texttt{textwrap1.tex}}{lst:textwrap1}
-
- We will change the value of \texttt{columns} in \cref{lst:textwrap1-yaml} and then run
- the command
- \begin{commandshell}
-latexindent.pl -m -l textwrap1.yaml textwrap1.tex
-\end{commandshell}
- then we receive the output given in \cref{lst:textwrap1-mod1}.
-
- \begin{cmhtcbraster}[raster column skip=.1\linewidth]
- \cmhlistingsfromfile{demonstrations/textwrap1-mod1.tex}{\texttt{textwrap1-mod1.tex}}{lst:textwrap1-mod1}
- \cmhlistingsfromfile{demonstrations/textwrap1.yaml}[MLB-TCB]{\texttt{textwrap1.yaml}}{lst:textwrap1-yaml}
- \end{cmhtcbraster}
- \end{example}
-
- \begin{example}
- If we set \texttt{columns} to $-1$ then \texttt{latexindent.pl} remove line breaks within
- the text wrap block, and will \emph{not} perform text wrapping. We can use this to undo
- text wrapping. \index{text wrap!setting columns to -1}
-
- Starting from the file in \cref{lst:textwrap1-mod1} and using the settings in
- \cref{lst:textwrap1A-yaml}
-
- \cmhlistingsfromfile{demonstrations/textwrap1A.yaml}[MLB-TCB]{\texttt{textwrap1A.yaml}}{lst:textwrap1A-yaml}
-
- and running
- \begin{commandshell}
-latexindent.pl -m -l textwrap1A.yaml textwrap1-mod1.tex
-\end{commandshell}
- gives the output in \cref{lst:textwrap1-mod1A}.
-
- \cmhlistingsfromfile{demonstrations/textwrap1-mod1A.tex}{\texttt{textwrap1-mod1A.tex}}{lst:textwrap1-mod1A}
- \end{example}
-
- \begin{example}
- By default, the text wrapping routine will convert multiple spaces into single spaces.
- You can change this behaviour by flicking the switch \texttt{multipleSpacesToSingle}
- which we have done in \cref{lst:textwrap1B-yaml}
-
- Using the settings in \cref{lst:textwrap1B-yaml} and running
- \begin{commandshell}
-latexindent.pl -m -l textwrap1B.yaml textwrap1-mod1.tex
-\end{commandshell}
- gives the output in \cref{lst:textwrap1-mod1B}.
- \begin{cmhtcbraster}[raster column skip=.1\linewidth]
- \cmhlistingsfromfile{demonstrations/textwrap1B.yaml}[MLB-TCB]{\texttt{textwrap1B.yaml}}{lst:textwrap1B-yaml}
- \cmhlistingsfromfile[showspaces=true]{demonstrations/textwrap1-mod1B.tex}{\texttt{textwrap1-mod1B.tex}}{lst:textwrap1-mod1B}
- \end{cmhtcbraster}
- We note that in \cref{lst:textwrap1-mod1B} the multiple spaces have \emph{not} been
- condensed into single spaces.
- \end{example}
-
-\subsubsection{Text wrap: \texttt{blocksFollow} examples}
- We examine the \texttt{blocksFollow} field of \cref{lst:textWrapOptionsAll}. \index{text
- wrap!blocksFollow}
-
- \begin{example}
- Let's use the sample text given in \cref{lst:tw-headings1}. \index{text
- wrap!blocksFollow!headings}
-
- \cmhlistingsfromfile{demonstrations/tw-headings1.tex}{\texttt{tw-headings1.tex}}{lst:tw-headings1}
-
- We note that \cref{lst:tw-headings1} contains the heading commands \texttt{section} and
- \texttt{subsection}. Upon running the command
- \begin{commandshell}
-latexindent.pl -m -l textwrap1.yaml tw-headings1.tex
-\end{commandshell}
- then we receive the output given in \cref{lst:tw-headings1-mod1}.
-
- \cmhlistingsfromfile{demonstrations/tw-headings1-mod1.tex}{\texttt{tw-headings1-mod1.tex}}{lst:tw-headings1-mod1}
-
- We reference \vref{lst:textWrapOptionsAll} and also \vref{lst:indentAfterHeadings}:
- \begin{itemize}
- \item in \cref{lst:textWrapOptionsAll} the \texttt{headings} field is set to \texttt{1}, which
- instructs \texttt{latexindent.pl} to read the fields from \vref{lst:indentAfterHeadings},
- \emph{regardless of the value of indentAfterThisHeading or level};
- \item the default is to assume that the heading command can, optionally, be followed by a
- \texttt{label} command.
- \end{itemize}
- If you find scenarios in which the default value of \texttt{headings} does not work, then
- you can explore the \texttt{other} field.
-
- We can turn off \texttt{headings} as in \cref{lst:bf-no-headings-yaml} and then run
- \begin{commandshell}
-latexindent.pl -m -l textwrap1.yaml,bf-no-headings.yaml tw-headings1.tex
-\end{commandshell}
- gives the output in \cref{lst:tw-headings1-mod2}, in which text wrapping has been
- instructed \emph{not to happen} following headings.
- \begin{cmhtcbraster}[raster column skip=.1\linewidth,
- raster left skip=-3.5cm,
- raster right skip=-2cm,
- ]
- \cmhlistingsfromfile{demonstrations/bf-no-headings.yaml}[MLB-TCB]{\texttt{bf-no-headings.yaml}}{lst:bf-no-headings-yaml}
- \cmhlistingsfromfile{demonstrations/tw-headings1-mod2.tex}{\texttt{tw-headings1-mod2.tex}}{lst:tw-headings1-mod2}
- \end{cmhtcbraster}
- \end{example}
-
- \begin{example}
- Let's use the sample text given in \cref{lst:tw-comments1}. \index{text
- wrap!blocksFollow!comments}
-
- \cmhlistingsfromfile{demonstrations/tw-comments1.tex}{\texttt{tw-comments1.tex}}{lst:tw-comments1}
-
- We note that \cref{lst:tw-comments1} contains trailing comments. Upon running the command
- \begin{commandshell}
-latexindent.pl -m -l textwrap1.yaml tw-comments1.tex
-\end{commandshell}
- then we receive the output given in \cref{lst:tw-comments1-mod1}.
-
- \cmhlistingsfromfile{demonstrations/tw-comments1-mod1.tex}{\texttt{tw-comments1-mod1.tex}}{lst:tw-comments1-mod1}
-
- With reference to \vref{lst:textWrapOptionsAll} the \texttt{commentOnPreviousLine} field
- is set to \texttt{1}, which instructs \texttt{latexindent.pl} to find text wrap blocks
- after a comment on its own line.
-
- We can turn off \texttt{comments} as in \cref{lst:bf-no-comments-yaml} and then run
- \begin{commandshell}
-latexindent.pl -m -l textwrap1.yaml,bf-no-comments.yaml tw-comments1.tex
-\end{commandshell}
- gives the output in \cref{lst:tw-comments1-mod2}, in which text wrapping has been
- instructed \emph{not to happen} following comments on their own line.
- \begin{cmhtcbraster}[raster column skip=.1\linewidth,
- raster left skip=-3.5cm,
- raster right skip=-2cm,
- ]
- \cmhlistingsfromfile{demonstrations/bf-no-comments.yaml}[MLB-TCB]{\texttt{bf-no-comments.yaml}}{lst:bf-no-comments-yaml}
- \cmhlistingsfromfile{demonstrations/tw-comments1-mod2.tex}{\texttt{tw-comments1-mod2.tex}}{lst:tw-comments1-mod2}
- \end{cmhtcbraster}
- \end{example}
-
- Referencing \vref{lst:textWrapOptionsAll} the \texttt{blocksFollow} fields \texttt{par},
- \texttt{blankline}, \texttt{verbatim} and \texttt{filecontents} fields operate in
- analogous ways to those demonstrated in the above.
-
- The \texttt{other} field of the \texttt{blocksFollow} can either be \texttt{0} (turned
- off) or set as a regular expression. The default value is set to
- \lstinline!\\\]|\\item(?:\h|\[)! which can be translated to \emph{backslash followed by a
- square bracket} or \emph{backslash item followed by horizontal space or a square
- bracket}, or in other words, \emph{end of display math} or an item command.
-
- \begin{example}
- Let's use the sample text given in \cref{lst:tw-disp-math1}. \index{text
- wrap!blocksFollow!other} \index{regular expressions!text wrap!blocksFollow}
-
- \cmhlistingsfromfile{demonstrations/tw-disp-math1.tex}{\texttt{tw-disp-math1.tex}}{lst:tw-disp-math1}
-
- We note that \cref{lst:tw-disp-math1} contains display math. Upon running the command
- \begin{commandshell}
-latexindent.pl -m -l textwrap1.yaml tw-disp-math1.tex
-\end{commandshell}
- then we receive the output given in \cref{lst:tw-disp-math1-mod1}.
-
- \cmhlistingsfromfile{demonstrations/tw-disp-math1-mod1.tex}{\texttt{tw-disp-math1-mod1.tex}}{lst:tw-disp-math1-mod1}
-
- With reference to \vref{lst:textWrapOptionsAll} the \texttt{other} field is set to
- \lstinline!\\\]!, which instructs \texttt{latexindent.pl} to find text wrap blocks after
- the end of display math.
-
- We can turn off this switch as in \cref{lst:bf-no-disp-math-yaml} and then run
- \begin{widepage}
- \begin{commandshell}
-latexindent.pl -m -l textwrap1.yaml,bf-no-disp-math.yaml tw-disp-math1.tex
-\end{commandshell}
- \end{widepage}
- gives the output in \cref{lst:tw-disp-math1-mod2}, in which text wrapping has been
- instructed \emph{not to happen} following display math.
- \begin{cmhtcbraster}[raster column skip=.1\linewidth]
- \cmhlistingsfromfile{demonstrations/bf-no-disp-math.yaml}[MLB-TCB]{\texttt{bf-no-disp-math.yaml}}{lst:bf-no-disp-math-yaml}
- \cmhlistingsfromfile{demonstrations/tw-disp-math1-mod2.tex}{\texttt{tw-disp-math1-mod2.tex}}{lst:tw-disp-math1-mod2}
- \end{cmhtcbraster}
-
- Naturally, you should feel encouraged to customise this as you see fit.
- \end{example}
-
- The \texttt{blocksFollow} field \emph{deliberately} does not default to allowing text
- wrapping to occur after \texttt{begin environment} statements. You are encouraged to
- customize the \texttt{other} field to accomodate the environments that you would like to
- text wrap individually, as in the next example.
-
- \begin{example}
- Let's use the sample text given in \cref{lst:tw-bf-myenv1}. \index{text
- wrap!blocksFollow!other} \index{regular expressions!text wrap!blocksFollow}
-
- \cmhlistingsfromfile{demonstrations/tw-bf-myenv1.tex}{\texttt{tw-bf-myenv1.tex}}{lst:tw-bf-myenv1}
-
- We note that \cref{lst:tw-bf-myenv1} contains \texttt{myenv} environment. Upon running
- the command
- \begin{commandshell}
-latexindent.pl -m -l textwrap1.yaml tw-bf-myenv1.tex
-\end{commandshell}
- then we receive the output given in \cref{lst:tw-bf-myenv1-mod1}.
-
- \cmhlistingsfromfile{demonstrations/tw-bf-myenv1-mod1.tex}{\texttt{tw-bf-myenv1-mod1.tex}}{lst:tw-bf-myenv1-mod1}
-
- We note that we have \emph{not} received much text wrapping. We can turn do better by
- employing \cref{lst:tw-bf-myenv-yaml} and then run
- \begin{commandshell}
-latexindent.pl -m -l textwrap1.yaml,tw-bf-myenv.yaml tw-bf-myenv1.tex
-\end{commandshell}
- which gives the output in \cref{lst:tw-bf-myenv1-mod2}, in which text wrapping has been
- implemented across the file.
- \begin{cmhtcbraster}[raster column skip=.1\linewidth,
- raster left skip=-3.5cm,
- raster right skip=-2cm,
- ]
- \cmhlistingsfromfile{demonstrations/tw-bf-myenv.yaml}[MLB-TCB]{\texttt{tw-bf-myenv.yaml}}{lst:tw-bf-myenv-yaml}
- \cmhlistingsfromfile{demonstrations/tw-bf-myenv1-mod2.tex}{\texttt{tw-bf-myenv1-mod2.tex}}{lst:tw-bf-myenv1-mod2}
- \end{cmhtcbraster}
-
- \end{example}
-
-\subsubsection{Text wrap: \texttt{blocksBeginWith} examples}
- We examine the \texttt{blocksBeginWith} field of \cref{lst:textWrapOptionsAll} with a
- series of examples. \index{text wrap!blocksBeginWith}
-
- \begin{example}
- By default, text wrap blocks can begin with the characters \texttt{a-z} and \texttt{A-Z}.
-
- If we start with the file given in \cref{lst:tw-0-9}
- \cmhlistingsfromfile{demonstrations/tw-0-9.tex}{\texttt{tw-0-9.tex}}{lst:tw-0-9}
- and run the command
- \begin{commandshell}
-latexindent.pl -m -l textwrap1.yaml tw-0-9.tex
-\end{commandshell}
- then we receive the output given in \cref{lst:tw-0-9-mod1} in which text wrapping has
- \emph{not} occured.
- \cmhlistingsfromfile{demonstrations/tw-0-9-mod1.tex}{\texttt{tw-0-9-mod1.tex}}{lst:tw-0-9-mod1}
-
- We can allow paragraphs to begin with \texttt{0-9} characters by using the settings in
- \cref{lst:bb-0-9-yaml} and running
- \begin{commandshell}
-latexindent.pl -m -l textwrap1.yaml,bb-0-9-yaml tw-0-9.tex
-\end{commandshell}
- gives the output in \cref{lst:tw-0-9-mod2}, in which text wrapping \emph{has} happened.
- \begin{cmhtcbraster}[raster column skip=.1\linewidth,]
- \cmhlistingsfromfile{demonstrations/bb-0-9.yaml}[MLB-TCB]{\texttt{bb-0-9.yaml.yaml}}{lst:bb-0-9-yaml}
- \cmhlistingsfromfile{demonstrations/tw-0-9-mod2.tex}{\texttt{tw-0-9-mod2.tex}}{lst:tw-0-9-mod2}
- \end{cmhtcbraster}
- \end{example}
-
- \begin{example}
- Let's now use the file given in \cref{lst:tw-bb-announce1}
- \cmhlistingsfromfile{demonstrations/tw-bb-announce1.tex}{\texttt{tw-bb-announce1.tex}}{lst:tw-bb-announce1}
- and run the command
- \begin{commandshell}
-latexindent.pl -m -l textwrap1.yaml tw-bb-announce1.tex
-\end{commandshell}
- then we receive the output given in \cref{lst:tw-bb-announce1-mod1} in which text
- wrapping has \emph{not} occured.
-
- \cmhlistingsfromfile{demonstrations/tw-bb-announce1-mod1.tex}{\texttt{tw-bb-announce1-mod1.tex}}{lst:tw-bb-announce1-mod1}
-
- We can allow \lstinline!\announce! to be at the beginning of paragraphs by using the
- settings in \cref{lst:tw-bb-announce-yaml} and running
- \begin{widepage}
- \begin{commandshell}
-latexindent.pl -m -l textwrap1.yaml,tw-bb-announce.yaml tw-bb-announce1.tex
-\end{commandshell}
- \end{widepage}
- gives the output in \cref{lst:tw-bb-announce1-mod2}, in which text wrapping \emph{has}
- happened.
- \begin{cmhtcbraster}[raster column skip=.1\linewidth,]
- \cmhlistingsfromfile{demonstrations/tw-bb-announce.yaml}[MLB-TCB]{\texttt{tw-bb-announce.yaml}}{lst:tw-bb-announce-yaml}
- \cmhlistingsfromfile{demonstrations/tw-bb-announce1-mod2.tex}{\texttt{tw-bb-announce1-mod2.tex}}{lst:tw-bb-announce1-mod2}
- \end{cmhtcbraster}
-
- \end{example}
-
-\subsubsection{Text wrap: \texttt{blocksEndBefore} examples}
- We examine the \texttt{blocksEndBefore} field of \cref{lst:textWrapOptionsAll} with a
- series of examples. \index{text wrap!blocksEndBefore}
-
- \begin{example}
- Let's use the sample text given in \cref{lst:tw-be-equation}. \index{text
- wrap!blocksFollow!other} \index{regular expressions!text wrap!blocksFollow}
-
- \cmhlistingsfromfile{demonstrations/tw-be-equation.tex}{\texttt{tw-be-equation.tex}}{lst:tw-be-equation}
-
- We note that \cref{lst:tw-be-equation} contains an environment. Upon running the command
- \begin{commandshell}
-latexindent.pl -m -l textwrap1A.yaml tw-be-equation.tex
-\end{commandshell}
- then we receive the output given in \cref{lst:tw-be-equation-mod1}.
-
- \cmhlistingsfromfile{demonstrations/tw-be-equation-mod1.tex}{\texttt{tw-be-equation-mod1.tex}}{lst:tw-be-equation-mod1}
-
- With reference to \vref{lst:textWrapOptionsAll} the \texttt{other} field is set to
- \lstinline!\\begin\{|\\\[|\\end\{!, which instructs \texttt{latexindent.pl} to
- \emph{stop} text wrap blocks before \texttt{begin} statements, display math, and
- \texttt{end} statements.
-
- We can turn off this switch as in \cref{lst:tw-be-equation-yaml} and then run
- \begin{widepage}
- \begin{commandshell}
-latexindent.pl -m -l textwrap1A.yaml,tw-be-equation.yaml tw-be-equation.tex
-\end{commandshell}
- \end{widepage}
- gives the output in \cref{lst:tw-be-equation-mod2}, in which text wrapping has been
- instructed \emph{not} to stop at these statements.
-
- \cmhlistingsfromfile{demonstrations/tw-be-equation.yaml}[MLB-TCB]{\texttt{tw-be-equation.yaml}}{lst:tw-be-equation-yaml}
-
- \begin{widepage}
- \cmhlistingsfromfile{demonstrations/tw-be-equation-mod2.tex}{\texttt{tw-be-equation-mod2.tex}}{lst:tw-be-equation-mod2}
- \end{widepage}
-
- Naturally, you should feel encouraged to customise this as you see fit.
- \end{example}
-
-\subsubsection{Text wrap: trailing comments and spaces}
- We explore the behaviour of the text wrap routine in relation to trailing comments using
- the following examples.
-
- \begin{example}
- The file in \cref{lst:tw-tc1} contains a trailing comment which \emph{does} have a space
- infront of it.
-
- Running the command
- \begin{commandshell}
-latexindent.pl -m tw-tc1.tex -l textwrap1A.yaml -o=+-mod1
-\end{commandshell}
- gives the output given in \cref{lst:tw-tc1-mod1}.
-
- \begin{cmhtcbraster}[raster column skip=.1\linewidth]
- \cmhlistingsfromfile[showspaces=true]{demonstrations/tw-tc1.tex}{\texttt{tw-tc1.tex}}{lst:tw-tc1}
- \cmhlistingsfromfile{demonstrations/tw-tc1-mod1.tex}{\texttt{tw-tc1-mod1.tex}}{lst:tw-tc1-mod1}
- \end{cmhtcbraster}
- \end{example}
-
- \begin{example}
- The file in \cref{lst:tw-tc2} contains a trailing comment which does \emph{not} have a
- space infront of it.
-
- Running the command
- \begin{commandshell}
-latexindent.pl -m tw-tc2.tex -l textwrap1A.yaml -o=+-mod1
-\end{commandshell}
- gives the output in \cref{lst:tw-tc2-mod1}.
- \begin{cmhtcbraster}[raster column skip=.1\linewidth]
- \cmhlistingsfromfile{demonstrations/tw-tc2.tex}{\texttt{tw-tc2.tex}}{lst:tw-tc2}
- \cmhlistingsfromfile{demonstrations/tw-tc2-mod1.tex}{\texttt{tw-tc2-mod1.tex}}{lst:tw-tc2-mod1}
- \end{cmhtcbraster}
- We note that, because there is \emph{not} a space before the trailing comment, that the
- lines have been joined \emph{without} a space.
- \end{example}
-
- \begin{example}
- The file in \cref{lst:tw-tc3} contains multiple trailing comments.
-
- Running the command
- \begin{commandshell}
-latexindent.pl -m tw-tc3.tex -l textwrap1A.yaml -o=+-mod1
-\end{commandshell}
- gives the output in \cref{lst:tw-tc3-mod1}.
- \begin{cmhtcbraster}[raster column skip=.1\linewidth]
- \cmhlistingsfromfile{demonstrations/tw-tc3.tex}{\texttt{tw-tc3.tex}}{lst:tw-tc3}
- \cmhlistingsfromfile{demonstrations/tw-tc3-mod1.tex}{\texttt{tw-tc3-mod1.tex}}{lst:tw-tc3-mod1}
- \end{cmhtcbraster}
- \end{example}
-
- \begin{example}
- The file in \cref{lst:tw-tc4} contains multiple trailing comments.
-
- Running the command
- \begin{commandshell}
-latexindent.pl -m tw-tc4.tex -l textwrap1A.yaml -o=+-mod1
-\end{commandshell}
- gives the output in \cref{lst:tw-tc4-mod1}.
- \begin{cmhtcbraster}[raster column skip=.1\linewidth]
- \cmhlistingsfromfile{demonstrations/tw-tc4.tex}{\texttt{tw-tc4.tex}}{lst:tw-tc4}
- \cmhlistingsfromfile{demonstrations/tw-tc4-mod1.tex}{\texttt{tw-tc4-mod1.tex}}{lst:tw-tc4-mod1}
- \end{cmhtcbraster}
- \end{example}
-
- \begin{example}
- The file in \cref{lst:tw-tc5} contains multiple trailing comments.
-
- Running the command
- \begin{commandshell}
-latexindent.pl -m tw-tc5.tex -l textwrap1A.yaml -o=+-mod1
-\end{commandshell}
- gives the output in \cref{lst:tw-tc5-mod1}.
- \begin{cmhtcbraster}[raster column skip=.1\linewidth]
- \cmhlistingsfromfile[showspaces=true]{demonstrations/tw-tc5.tex}{\texttt{tw-tc5.tex}}{lst:tw-tc5}
- \cmhlistingsfromfile[showspaces=true]{demonstrations/tw-tc5-mod1.tex}{\texttt{tw-tc5-mod1.tex}}{lst:tw-tc5-mod1}
- \end{cmhtcbraster}
- The space at the end of the text block has been preserved.
- \end{example}
-
- \begin{example}
- The file in \cref{lst:tw-tc6} contains multiple trailing comments.
-
- Running the command
- \begin{commandshell}
-latexindent.pl -m tw-tc6.tex -l textwrap1A.yaml -o=+-mod1
-\end{commandshell}
- gives the output in \cref{lst:tw-tc6-mod1}.
- \begin{cmhtcbraster}[raster column skip=.1\linewidth]
- \cmhlistingsfromfile[showspaces=true]{demonstrations/tw-tc6.tex}{\texttt{tw-tc6.tex}}{lst:tw-tc6}
- \cmhlistingsfromfile[showspaces=true]{demonstrations/tw-tc6-mod1.tex}{\texttt{tw-tc6-mod1.tex}}{lst:tw-tc6-mod1}
- \end{cmhtcbraster}
- The space at the end of the text block has been preserved.
- \end{example}
-
-\subsubsection{Text wrap: huge, tabstop and separator}
- The \announce{2021-07-23}*{huge:overflow is now default} default value of \texttt{huge}
- is \texttt{overflow}, which means that words will \emph{not} be broken by the text
- wrapping routine, implemented by the \texttt{Text::Wrap} \cite{textwrap}. There are
- options to change the \texttt{huge} option for the \texttt{Text::Wrap} module to either
- \texttt{wrap} or \texttt{die}. Before modifying the value of \texttt{huge}, please bear
- in mind the following warning: \index{warning!changing huge (textwrap)}%
- \begin{warning}
- \raggedright
- Changing the value of \texttt{huge} to anything other than \texttt{overflow} will slow
- down \texttt{latexindent.pl} significantly when the \texttt{-m} switch is active.
-
- Furthermore, changing \texttt{huge} means that you may have some words \emph{or
- commands}(!) split across lines in your .tex file, which may affect your output. I do not
- recommend changing this field.
- \end{warning}
-
- For example, using the settings in \cref{lst:textwrap2A-yaml,lst:textwrap2B-yaml} and
- running the commands \index{switches!-l demonstration} \index{switches!-m demonstration}
- \index{switches!-o demonstration}
- \begin{commandshell}
- latexindent.pl -m textwrap4.tex -o=+-mod2A -l textwrap2A.yaml
- latexindent.pl -m textwrap4.tex -o=+-mod2B -l textwrap2B.yaml
-\end{commandshell}
- gives the respective output in \cref{lst:textwrap4-mod2A,lst:textwrap4-mod2B}.
-
- \begin{cmhtcbraster}[raster column skip=.1\linewidth]
- \cmhlistingsfromfile{demonstrations/textwrap4-mod2A.tex}{\texttt{textwrap4-mod2A.tex}}{lst:textwrap4-mod2A}
- \cmhlistingsfromfile{demonstrations/textwrap2A.yaml}[MLB-TCB]{\texttt{textwrap2A.yaml}}{lst:textwrap2A-yaml}
-
- \cmhlistingsfromfile{demonstrations/textwrap4-mod2B.tex}{\texttt{textwrap4-mod2B.tex}}{lst:textwrap4-mod2B}
- \cmhlistingsfromfile{demonstrations/textwrap2B.yaml}[MLB-TCB]{\texttt{textwrap2B.yaml}}{lst:textwrap2B-yaml}
- \end{cmhtcbraster}
-
- You can also specify the \texttt{tabstop} field \announce{2020-11-06}{tabstop option for
- text wrap module} as an integer value, which is passed to the text wrap module; see
- \cite{textwrap} for details. Starting with the code in \cref{lst:textwrap-ts} with
- settings in \cref{lst:tabstop}, and running the command \index{switches!-l demonstration}
- \index{switches!-m demonstration} \index{switches!-o demonstration}%
- \begin{commandshell}
- latexindent.pl -m textwrap-ts.tex -o=+-mod1 -l tabstop.yaml
- \end{commandshell}
- gives the code given in \cref{lst:textwrap-ts-mod1}.
- \begin{cmhtcbraster}[raster columns=3,
- raster left skip=-3.5cm,
- raster right skip=-2cm,
- raster column skip=.03\linewidth]
- \cmhlistingsfromfile[showtabs=true]{demonstrations/textwrap-ts.tex}{\texttt{textwrap-ts.tex}}{lst:textwrap-ts}
- \cmhlistingsfromfile{demonstrations/tabstop.yaml}[MLB-TCB]{\texttt{tabstop.yaml}}{lst:tabstop}
- \cmhlistingsfromfile[showtabs=true]{demonstrations/textwrap-ts-mod1.tex}{\texttt{textwrap-ts-mod1.tex}}{lst:textwrap-ts-mod1}
- \end{cmhtcbraster}
-
- You can specify \texttt{separator}, \texttt{break} and \texttt{unexpand} options in your
- settings in analogous ways to those demonstrated in
- \cref{lst:textwrap2B-yaml,lst:tabstop}, and they will be passed to the
- \texttt{Text::Wrap} module. I have not found a useful reason to do this; see
- \cite{textwrap} for more details.
diff --git a/support/latexindent/documentation/subsubsec-commands-with-arguments.tex b/support/latexindent/documentation/subsubsec-commands-with-arguments.tex
deleted file mode 100644
index f578d8a9a8..0000000000
--- a/support/latexindent/documentation/subsubsec-commands-with-arguments.tex
+++ /dev/null
@@ -1,109 +0,0 @@
-% arara: pdflatex: { files: [latexindent]}
-\subsubsection{Commands with arguments}\label{subsubsec:commands-arguments}
- Let's begin with the simple example in \cref{lst:mycommand}; when \texttt{latexindent.pl}
- operates on this file, the default output is shown in \cref{lst:mycommand-default}.
- \footnote{The command code blocks have quite a few subtleties, described in
- \vref{subsec:commands-string-between}.}
-
- \begin{cmhtcbraster}[raster column skip=.1\linewidth]
- \cmhlistingsfromfile{demonstrations/mycommand.tex}{\texttt{mycommand.tex}}{lst:mycommand}
- \cmhlistingsfromfile{demonstrations/mycommand-default.tex}{\texttt{mycommand.tex} default output}{lst:mycommand-default}
- \end{cmhtcbraster}
-
- As in the environment-based case (see \vref{lst:myenv-noAdd1,lst:myenv-noAdd2}) we may
- specify \texttt{noAdditionalIndent} either in `scalar' form, or in `field' form, as shown
- in \cref{lst:mycommand-noAdd1,lst:mycommand-noAdd2}
-
- \begin{minipage}{.45\textwidth}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/mycommand-noAdd1.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{mycommand-noAdd1.yaml}}{lst:mycommand-noAdd1}
- \end{minipage}
- \hfill
- \begin{minipage}{.45\textwidth}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/mycommand-noAdd2.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{mycommand-noAdd2.yaml}}{lst:mycommand-noAdd2}
- \end{minipage}
-
- After running the following commands, \index{switches!-l demonstration}
- \begin{commandshell}
-latexindent.pl mycommand.tex -l mycommand-noAdd1.yaml
-latexindent.pl mycommand.tex -l mycommand-noAdd2.yaml
-\end{commandshell}
- we receive the respective output given in
- \cref{lst:mycommand-output-noAdd1,lst:mycommand-output-noAdd2}
-
- \begin{minipage}{.45\textwidth}
- \cmhlistingsfromfile{demonstrations/mycommand-noAdd1.tex}{\texttt{mycommand.tex} using \cref{lst:mycommand-noAdd1}}{lst:mycommand-output-noAdd1}
- \end{minipage}
- \hfill
- \begin{minipage}{.45\textwidth}
- \cmhlistingsfromfile{demonstrations/mycommand-noAdd2.tex}{\texttt{mycommand.tex} using \cref{lst:mycommand-noAdd2}}{lst:mycommand-output-noAdd2}
- \end{minipage}
-
- Note that in \cref{lst:mycommand-output-noAdd1} that the `body', optional argument
- \emph{and} mandatory argument have \emph{all} received no additional indentation, while
- in \cref{lst:mycommand-output-noAdd2}, only the `body' has not received any additional
- indentation. We define the `body' of a command as any lines following the command name
- that include its optional or mandatory arguments.
-
- We may further customise \texttt{noAdditionalIndent} for \texttt{mycommand} as we did in
- \vref{lst:myenv-noAdd5,lst:myenv-noAdd6}; explicit examples are given in
- \cref{lst:mycommand-noAdd3,lst:mycommand-noAdd4}.
-
- \begin{minipage}{.45\textwidth}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/mycommand-noAdd3.yaml}[width=.9\linewidth,before=\centering,yaml-TCB]{\texttt{mycommand-noAdd3.yaml}}{lst:mycommand-noAdd3}
- \end{minipage}
- \hfill
- \begin{minipage}{.45\textwidth}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/mycommand-noAdd4.yaml}[width=.9\linewidth,before=\centering,yaml-TCB]{\texttt{mycommand-noAdd4.yaml}}{lst:mycommand-noAdd4}
- \end{minipage}
-
- After running the following commands, \index{switches!-l demonstration}
- \begin{commandshell}
-latexindent.pl mycommand.tex -l mycommand-noAdd3.yaml
-latexindent.pl mycommand.tex -l mycommand-noAdd4.yaml
-\end{commandshell}
- we receive the respective output given in
- \cref{lst:mycommand-output-noAdd3,lst:mycommand-output-noAdd4}.
-
- \begin{minipage}{.45\textwidth}
- \cmhlistingsfromfile{demonstrations/mycommand-noAdd3.tex}{\texttt{mycommand.tex} using \cref{lst:mycommand-noAdd3}}{lst:mycommand-output-noAdd3}
- \end{minipage}
- \hfill
- \begin{minipage}{.45\textwidth}
- \cmhlistingsfromfile{demonstrations/mycommand-noAdd4.tex}{\texttt{mycommand.tex} using \cref{lst:mycommand-noAdd4}}{lst:mycommand-output-noAdd4}
- \end{minipage}
-
- Attentive readers will note that the body of \texttt{mycommand} in both
- \cref{lst:mycommand-output-noAdd3,lst:mycommand-output-noAdd4} has received no additional
- indent, even though \texttt{body} is explicitly set to \texttt{0} in both
- \cref{lst:mycommand-noAdd3,lst:mycommand-noAdd4}. This is because, by default,
- \texttt{noAdditionalIndentGlobal} for \texttt{commands} is set to \texttt{1} by default;
- this can be easily fixed as in
- \cref{lst:mycommand-noAdd5,lst:mycommand-noAdd6}.\label{page:command:noAddGlobal}
-
- \begin{minipage}{.45\textwidth}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/mycommand-noAdd5.yaml}[width=.9\linewidth,before=\centering,yaml-TCB]{\texttt{mycommand-noAdd5.yaml}}{lst:mycommand-noAdd5}
- \end{minipage}
- \hfill
- \begin{minipage}{.45\textwidth}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/mycommand-noAdd6.yaml}[width=.9\linewidth,before=\centering,yaml-TCB]{\texttt{mycommand-noAdd6.yaml}}{lst:mycommand-noAdd6}
- \end{minipage}
-
- After running the following commands, \index{switches!-l demonstration}
- \begin{commandshell}
-latexindent.pl mycommand.tex -l mycommand-noAdd5.yaml
-latexindent.pl mycommand.tex -l mycommand-noAdd6.yaml
-\end{commandshell}
- we receive the respective output given in
- \cref{lst:mycommand-output-noAdd5,lst:mycommand-output-noAdd6}.
-
- \begin{minipage}{.45\textwidth}
- \cmhlistingsfromfile{demonstrations/mycommand-noAdd5.tex}{\texttt{mycommand.tex} using \cref{lst:mycommand-noAdd5}}{lst:mycommand-output-noAdd5}
- \end{minipage}
- \hfill
- \begin{minipage}{.45\textwidth}
- \cmhlistingsfromfile{demonstrations/mycommand-noAdd6.tex}{\texttt{mycommand.tex} using \cref{lst:mycommand-noAdd6}}{lst:mycommand-output-noAdd6}
- \end{minipage}
-
- Both \texttt{indentRules} and \texttt{indentRulesGlobal} can be adjusted as they were for
- \emph{environment} code blocks, as in \vref{lst:myenv-rules3,lst:myenv-rules4} and
- \vref{lst:indentRulesGlobal:environments,lst:opt-args-indent-rules-glob,lst:mand-args-indent-rules-glob}.
diff --git a/support/latexindent/documentation/subsubsec-environments-and-their-arguments.tex b/support/latexindent/documentation/subsubsec-environments-and-their-arguments.tex
deleted file mode 100644
index 4d750c298b..0000000000
--- a/support/latexindent/documentation/subsubsec-environments-and-their-arguments.tex
+++ /dev/null
@@ -1,294 +0,0 @@
-% arara: pdflatex: { files: [latexindent]}
-\subsubsection{Environments and their arguments}\label{subsubsec:env-and-their-args}
- There are a few different YAML switches governing the indentation of environments; let's
- start with the code shown in \cref{lst:myenvtex}.
-
- \cmhlistingsfromfile{demonstrations/myenvironment-simple.tex}{\texttt{myenv.tex}}{lst:myenvtex}
-
-\yamltitle{noAdditionalIndent}*{fields}
- If we do not wish \texttt{myenv} to receive any additional indentation, we have a few
- choices available to us, as demonstrated in \cref{lst:myenv-noAdd1,lst:myenv-noAdd2}.
-
- \begin{minipage}{.45\textwidth}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/myenv-noAdd1.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{myenv-noAdd1.yaml}}{lst:myenv-noAdd1}
- \end{minipage}
- \hfill
- \begin{minipage}{.45\textwidth}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/myenv-noAdd2.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{myenv-noAdd2.yaml}}{lst:myenv-noAdd2}
- \end{minipage}
-
- On applying either of the following commands, \index{switches!-l demonstration}
- \begin{commandshell}
-latexindent.pl myenv.tex -l myenv-noAdd1.yaml
-latexindent.pl myenv.tex -l myenv-noAdd2.yaml
-\end{commandshell}
- we obtain the output given in \cref{lst:myenv-output}; note in particular that the
- environment \texttt{myenv} has not received any \emph{additional} indentation, but that
- the \texttt{outer} environment \emph{has} still received indentation.
-
- \cmhlistingsfromfile{demonstrations/myenvironment-simple-noAdd-body1.tex}{\texttt{myenv.tex} output (using either \cref{lst:myenv-noAdd1} or \cref{lst:myenv-noAdd2})}{lst:myenv-output}
-
- Upon changing the YAML files to those shown in \cref{lst:myenv-noAdd3,lst:myenv-noAdd4},
- and running either \index{switches!-l demonstration}
- \begin{commandshell}
-latexindent.pl myenv.tex -l myenv-noAdd3.yaml
-latexindent.pl myenv.tex -l myenv-noAdd4.yaml
-\end{commandshell}
- we obtain the output given in \cref{lst:myenv-output-4}.
-
- \begin{minipage}{.45\textwidth}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/myenv-noAdd3.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{myenv-noAdd3.yaml}}{lst:myenv-noAdd3}
- \end{minipage}
- \hfill
- \begin{minipage}{.45\textwidth}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/myenv-noAdd4.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{myenv-noAdd4.yaml}}{lst:myenv-noAdd4}
- \end{minipage}
-
- \cmhlistingsfromfile{demonstrations/myenvironment-simple-noAdd-body4.tex}{\texttt{myenv.tex output} (using either \cref{lst:myenv-noAdd3} or \cref{lst:myenv-noAdd4})}{lst:myenv-output-4}
-
- Let's now allow \texttt{myenv} to have some optional and mandatory arguments, as in
- \cref{lst:myenv-args}.
-
- \cmhlistingsfromfile{demonstrations/myenvironment-args.tex}{\texttt{myenv-args.tex}}{lst:myenv-args}
-
- Upon running \index{switches!-l demonstration}
- \begin{commandshell}
-latexindent.pl -l=myenv-noAdd1.yaml myenv-args.tex
-\end{commandshell}
- we obtain the output shown in \cref{lst:myenv-args-noAdd1}; note that the optional
- argument, mandatory argument and body \emph{all} have received no additional indent. This
- is because, when \texttt{noAdditionalIndent} is specified in `scalar' form (as in
- \cref{lst:myenv-noAdd1}), then \emph{all} parts of the environment (body, optional and
- mandatory arguments) are assumed to want no additional indent.
- \cmhlistingsfromfile{demonstrations/myenvironment-args-noAdd-body1.tex}{\texttt{myenv-args.tex} using \cref{lst:myenv-noAdd1}}{lst:myenv-args-noAdd1}
-
- We may customise \texttt{noAdditionalIndent} for optional and mandatory arguments of the
- \texttt{myenv} environment, as shown in, for example,
- \cref{lst:myenv-noAdd5,lst:myenv-noAdd6}.
-
- \begin{minipage}{.49\textwidth}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/myenv-noAdd5.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{myenv-noAdd5.yaml}}{lst:myenv-noAdd5}
- \end{minipage}
- \hfill
- \begin{minipage}{.49\textwidth}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/myenv-noAdd6.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{myenv-noAdd6.yaml}}{lst:myenv-noAdd6}
- \end{minipage}
-
- Upon running \index{switches!-l demonstration}
- \begin{commandshell}
-latexindent.pl myenv.tex -l myenv-noAdd5.yaml
-latexindent.pl myenv.tex -l myenv-noAdd6.yaml
-\end{commandshell}
- we obtain the respective outputs given in
- \cref{lst:myenv-args-noAdd5,lst:myenv-args-noAdd6}. Note that in
- \cref{lst:myenv-args-noAdd5} the text for the \emph{optional} argument has not received
- any additional indentation, and that in \cref{lst:myenv-args-noAdd6} the \emph{mandatory}
- argument has not received any additional indentation; in both cases, the \emph{body} has
- not received any additional indentation.
-
- \begin{minipage}{.45\textwidth}
- \cmhlistingsfromfile{demonstrations/myenvironment-args-noAdd5.tex}{\texttt{myenv-args.tex} using \cref{lst:myenv-noAdd5}}{lst:myenv-args-noAdd5}
- \end{minipage}
- \hfill
- \begin{minipage}{.45\textwidth}
- \cmhlistingsfromfile{demonstrations/myenvironment-args-noAdd6.tex}{\texttt{myenv-args.tex} using \cref{lst:myenv-noAdd6}}{lst:myenv-args-noAdd6}
- \end{minipage}
-
-\yamltitle{indentRules}*{fields}
- We may also specify indentation rules for environment code blocks using the
- \texttt{indentRules} field; see, for example, \cref{lst:myenv-rules1,lst:myenv-rules2}.
-
- \begin{cmhtcbraster}[raster column skip=.1\linewidth]
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/myenv-rules1.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{myenv-rules1.yaml}}{lst:myenv-rules1}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/myenv-rules2.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{myenv-rules2.yaml}}{lst:myenv-rules2}
- \end{cmhtcbraster}
-
- On applying either of the following commands, \index{switches!-l demonstration}
- \begin{commandshell}
-latexindent.pl myenv.tex -l myenv-rules1.yaml
-latexindent.pl myenv.tex -l myenv-rules2.yaml
-\end{commandshell}
- we obtain the output given in \cref{lst:myenv-rules-output}; note in particular that the
- environment \texttt{myenv} has received one tab (from the \texttt{outer} environment)
- plus three spaces from \cref{lst:myenv-rules1} or \ref{lst:myenv-rules2}.
-
- \cmhlistingsfromfile[showtabs=true,showspaces=true]{demonstrations/myenv-rules1.tex}{\texttt{myenv.tex} output (using either \cref{lst:myenv-rules1} or \cref{lst:myenv-rules2})}{lst:myenv-rules-output}
-
- If you specify a field in \texttt{indentRules} using anything other than horizontal
- space, it will be ignored.
-
- Returning to the example in \cref{lst:myenv-args} that contains optional and mandatory
- arguments. Upon using \cref{lst:myenv-rules1} as in \index{switches!-l demonstration}
- \begin{commandshell}
-latexindent.pl myenv-args.tex -l=myenv-rules1.yaml
-\end{commandshell}
- we obtain the output in \cref{lst:myenv-args-rules1}; note that the body, optional
- argument and mandatory argument of \texttt{myenv} have \emph{all} received the same
- customised indentation.
- \cmhlistingsfromfile[showtabs=true,showspaces=true]{demonstrations/myenvironment-args-rules1.tex}{\texttt{myenv-args.tex} using \cref{lst:myenv-rules1}}{lst:myenv-args-rules1}
-
- You can specify different indentation rules for the different features using, for
- example, \cref{lst:myenv-rules3,lst:myenv-rules4}
-
- \begin{minipage}{.49\textwidth}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/myenv-rules3.yaml}[width=.9\linewidth,before=\centering,yaml-TCB]{\texttt{myenv-rules3.yaml}}{lst:myenv-rules3}
- \end{minipage}
- \hfill
- \begin{minipage}{.49\textwidth}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/myenv-rules4.yaml}[width=.9\linewidth,before=\centering,yaml-TCB]{\texttt{myenv-rules4.yaml}}{lst:myenv-rules4}
- \end{minipage}
-
- After running \index{switches!-l demonstration}
- \begin{commandshell}
-latexindent.pl myenv-args.tex -l myenv-rules3.yaml
-latexindent.pl myenv-args.tex -l myenv-rules4.yaml
-\end{commandshell}
- then we obtain the respective outputs given in
- \cref{lst:myenv-args-rules3,lst:myenv-args-rules4}.
-
- \begin{widepage}
- \begin{minipage}{.5\textwidth}
- \cmhlistingsfromfile[showtabs=true,showspaces=true]{demonstrations/myenvironment-args-rules3.tex}{\texttt{myenv-args.tex} using \cref{lst:myenv-rules3}}{lst:myenv-args-rules3}
- \end{minipage}%
- \hfill
- \begin{minipage}{.5\textwidth}
- \cmhlistingsfromfile[showtabs=true,showspaces=true]{demonstrations/myenvironment-args-rules4.tex}{\texttt{myenv-args.tex} using \cref{lst:myenv-rules4}}{lst:myenv-args-rules4}
- \end{minipage}
- \end{widepage}
-
- Note that in \cref{lst:myenv-args-rules3}, the optional argument has only received a
- single space of indentation, while the mandatory argument has received the default (tab)
- indentation; the environment body has received three spaces of indentation.
-
- In \cref{lst:myenv-args-rules4}, the optional argument has received the default (tab)
- indentation, the mandatory argument has received two tabs of indentation, and the body
- has received three spaces of indentation.
-
-\yamltitle{noAdditionalIndentGlobal}*{fields}
- Assuming that your environment name is not found within neither
- \texttt{noAdditionalIndent} nor \texttt{indentRules}, the next place that
- \texttt{latexindent.pl} will look is \texttt{noAdditionalIndentGlobal}, and in particular
- \emph{for the environments} key (see \cref{lst:noAdditionalIndentGlobal:environments}).
-
- \cmhlistingsfromfile[style=noAdditionalIndentGlobalEnv]{../defaultSettings.yaml}[width=.5\linewidth,before=\centering,yaml-TCB]{\texttt{noAdditionalIndentGlobal}}{lst:noAdditionalIndentGlobal:environments}
-
- Let's say that you change the value of \texttt{environments} to \texttt{1} in
- \cref{lst:noAdditionalIndentGlobal:environments}, and that you run \index{switches!-l
- demonstration}
-
- \begin{widepage}
- \begin{commandshell}
-latexindent.pl myenv-args.tex -l env-noAdditionalGlobal.yaml
-latexindent.pl myenv-args.tex -l myenv-rules1.yaml,env-noAdditionalGlobal.yaml
-\end{commandshell}
- \end{widepage}
-
- The respective output from these two commands are in
- \cref{lst:myenv-args-no-add-global1,lst:myenv-args-no-add-global2}; in
- \cref{lst:myenv-args-no-add-global1} notice that \emph{both} environments receive no
- additional indentation but that the arguments of \texttt{myenv} still \emph{do} receive
- indentation. In \cref{lst:myenv-args-no-add-global2} notice that the \emph{outer}
- environment does not receive additional indentation, but because of the settings from
- \texttt{myenv-rules1.yaml} (in \vref{lst:myenv-rules1}), the \texttt{myenv} environment
- still \emph{does} receive indentation.
-
- \begin{minipage}{.45\textwidth}
- \cmhlistingsfromfile{demonstrations/myenvironment-args-rules1-noAddGlobal1.tex}{\texttt{myenv-args.tex} using \cref{lst:noAdditionalIndentGlobal:environments}}{lst:myenv-args-no-add-global1}
- \end{minipage}
- \hfill
- \begin{minipage}{.45\textwidth}
- \cmhlistingsfromfile{demonstrations/myenvironment-args-rules1-noAddGlobal2.tex}{\texttt{myenv-args.tex} using \cref{lst:noAdditionalIndentGlobal:environments,lst:myenv-rules1}}{lst:myenv-args-no-add-global2}
- \end{minipage}
-
- In fact, \texttt{noAdditionalIndentGlobal} also contains keys that control the
- indentation of optional and mandatory arguments; on referencing
- \cref{lst:opt-args-no-add-glob,lst:mand-args-no-add-glob}
-
- \begin{minipage}{.49\textwidth}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/opt-args-no-add-glob.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{opt-args-no-add-glob.yaml}}{lst:opt-args-no-add-glob}
- \end{minipage}
- \hfill
- \begin{minipage}{.49\textwidth}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/mand-args-no-add-glob.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{mand-args-no-add-glob.yaml}}{lst:mand-args-no-add-glob}
- \end{minipage}
-
- we may run the commands \index{switches!-l demonstration}
- \begin{commandshell}
-latexindent.pl myenv-args.tex -local opt-args-no-add-glob.yaml
-latexindent.pl myenv-args.tex -local mand-args-no-add-glob.yaml
-\end{commandshell}
- which produces the respective outputs given in
- \cref{lst:myenv-args-no-add-opt,lst:myenv-args-no-add-mand}. Notice that in
- \cref{lst:myenv-args-no-add-opt} the \emph{optional} argument has not received any
- additional indentation, and in \cref{lst:myenv-args-no-add-mand} the \emph{mandatory}
- argument has not received any additional indentation.
-
- \begin{minipage}{.45\textwidth}
- \cmhlistingsfromfile{demonstrations/myenvironment-args-rules1-noAddGlobal3.tex}{\texttt{myenv-args.tex} using \cref{lst:opt-args-no-add-glob}}{lst:myenv-args-no-add-opt}
- \end{minipage}
- \hfill
- \begin{minipage}{.45\textwidth}
- \cmhlistingsfromfile{demonstrations/myenvironment-args-rules1-noAddGlobal4.tex}{\texttt{myenv-args.tex} using \cref{lst:mand-args-no-add-glob}}{lst:myenv-args-no-add-mand}
- \end{minipage}
-
-\yamltitle{indentRulesGlobal}*{fields}
- The final check that \texttt{latexindent.pl} will make is to look for
- \texttt{indentRulesGlobal} as detailed in \cref{lst:indentRulesGlobal:environments}.
-
- \cmhlistingsfromfile[style=indentRulesGlobalEnv]{../defaultSettings.yaml}[width=.5\linewidth,before=\centering,yaml-TCB]{\texttt{indentRulesGlobal}}{lst:indentRulesGlobal:environments}
-
- If you change the \texttt{environments} field to anything involving horizontal space, say
- \lstinline!" "!, and then run the following commands \index{switches!-l demonstration}
-
- \begin{commandshell}
-latexindent.pl myenv-args.tex -l env-indentRules.yaml
-latexindent.pl myenv-args.tex -l myenv-rules1.yaml,env-indentRules.yaml
-\end{commandshell}
- then the respective output is shown in
- \cref{lst:myenv-args-indent-rules-global1,lst:myenv-args-indent-rules-global2}. Note that
- in \cref{lst:myenv-args-indent-rules-global1}, both the environment blocks have received
- a single-space indentation, whereas in \cref{lst:myenv-args-indent-rules-global2} the
- \texttt{outer} environment has received single-space indentation (specified by
- \texttt{indentRulesGlobal}), but \texttt{myenv} has received \lstinline!" "!, as
- specified by the particular \texttt{indentRules} for \texttt{myenv}
- \vref{lst:myenv-rules1}.
-
- \begin{minipage}{.45\textwidth}
- \cmhlistingsfromfile[showspaces=true]{demonstrations/myenvironment-args-global-rules1.tex}{\texttt{myenv-args.tex} using \cref{lst:indentRulesGlobal:environments}}{lst:myenv-args-indent-rules-global1}
- \end{minipage}
- \hfill
- \begin{minipage}{.45\textwidth}
- \cmhlistingsfromfile[showspaces=true]{demonstrations/myenvironment-args-global-rules2.tex}{\texttt{myenv-args.tex} using \cref{lst:myenv-rules1,lst:indentRulesGlobal:environments}}{lst:myenv-args-indent-rules-global2}
- \end{minipage}
-
- You can specify \texttt{indentRulesGlobal} for both optional and mandatory arguments, as
- detailed in \cref{lst:opt-args-indent-rules-glob,lst:mand-args-indent-rules-glob}
-
- \begin{minipage}{.49\textwidth}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/opt-args-indent-rules-glob.yaml}[width=.9\linewidth,before=\centering,yaml-TCB]{\texttt{opt-args-indent-rules-glob.yaml}}{lst:opt-args-indent-rules-glob}
- \end{minipage}
- \hfill
- \begin{minipage}{.49\textwidth}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/mand-args-indent-rules-glob.yaml}[width=.9\linewidth,before=\centering,yaml-TCB]{\texttt{mand-args-indent-rules-glob.yaml}}{lst:mand-args-indent-rules-glob}
- \end{minipage}
-
- Upon running the following commands \index{switches!-l demonstration}
- \begin{commandshell}
-latexindent.pl myenv-args.tex -local opt-args-indent-rules-glob.yaml
-latexindent.pl myenv-args.tex -local mand-args-indent-rules-glob.yaml
-\end{commandshell}
- we obtain the respective outputs in
- \cref{lst:myenv-args-indent-rules-global3,lst:myenv-args-indent-rules-global4}. Note that
- the \emph{optional} argument in \cref{lst:myenv-args-indent-rules-global3} has received
- two tabs worth of indentation, while the \emph{mandatory} argument has done so in
- \cref{lst:myenv-args-indent-rules-global4}.
-
- \begin{widepage}
- \begin{minipage}{.55\textwidth}
- \cmhlistingsfromfile[showtabs=true]{demonstrations/myenvironment-args-global-rules3.tex}{\texttt{myenv-args.tex} using \cref{lst:opt-args-indent-rules-glob}}{lst:myenv-args-indent-rules-global3}
- \end{minipage}
- \hfill
- \begin{minipage}{.55\textwidth}
- \cmhlistingsfromfile[showtabs=true]{demonstrations/myenvironment-args-global-rules4.tex}{\texttt{myenv-args.tex} using \cref{lst:mand-args-indent-rules-glob}}{lst:myenv-args-indent-rules-global4}
- \end{minipage}
- \end{widepage}
diff --git a/support/latexindent/documentation/subsubsec-environments-with-items.tex b/support/latexindent/documentation/subsubsec-environments-with-items.tex
deleted file mode 100644
index dab84cbdfd..0000000000
--- a/support/latexindent/documentation/subsubsec-environments-with-items.tex
+++ /dev/null
@@ -1,60 +0,0 @@
-% arara: pdflatex: { files: [latexindent]}
-\subsubsection{Environments with items}
- With reference to \vref{lst:indentafteritems,lst:itemNames}, some commands may contain
- \texttt{item} commands; for the purposes of this discussion, we will use the code from
- \vref{lst:itemsbefore}.
-
- Assuming that you've populated \texttt{itemNames} with the name of your \texttt{item},
- you can put the item name into \texttt{noAdditionalIndent} as in \cref{lst:item-noAdd1},
- although a more efficient approach may be to change the relevant field in
- \texttt{itemNames} to \texttt{0}. Similarly, you can customise the indentation that your
- \texttt{item} receives using \texttt{indentRules}, as in \cref{lst:item-rules1}
-
- \begin{cmhtcbraster}[raster column skip=.1\linewidth]
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/item-noAdd1.yaml}[yaml-TCB]{\texttt{item-noAdd1.yaml}}{lst:item-noAdd1}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/item-rules1.yaml}[yaml-TCB]{\texttt{item-rules1.yaml}}{lst:item-rules1}
- \end{cmhtcbraster}
-
- Upon running the following commands \index{switches!-l demonstration}
- \begin{commandshell}
-latexindent.pl items1.tex -local item-noAdd1.yaml
-latexindent.pl items1.tex -local item-rules1.yaml
-\end{commandshell}
- the respective outputs are given in \cref{lst:items1-noAdd1,lst:items1-rules1}; note that
- in \cref{lst:items1-noAdd1} that the text after each \texttt{item} has not received any
- additional indentation, and in \cref{lst:items1-rules1}, the text after each
- \texttt{item} has received a single space of indentation, specified by
- \cref{lst:item-rules1}.
-
- \begin{minipage}{.45\textwidth}
- \cmhlistingsfromfile{demonstrations/items1-noAdd1.tex}{\texttt{items1.tex} using \cref{lst:item-noAdd1}}{lst:items1-noAdd1}
- \end{minipage}
- \hfill
- \begin{minipage}{.45\textwidth}
- \cmhlistingsfromfile[showtabs=true,showspaces=true]{demonstrations/items1-rules1.tex}{\texttt{items1.tex} using \cref{lst:item-rules1}}{lst:items1-rules1}
- \end{minipage}
-
- Alternatively, you might like to populate \texttt{noAdditionalIndentGlobal} or
- \texttt{indentRulesGlobal} using the \texttt{items} key, as demonstrated in
- \cref{lst:items-noAdditionalGlobal,lst:items-indentRulesGlobal}. Note that there is a
- need to `reset/remove' the \texttt{item} field from \texttt{indentRules} in both cases
- (see the hierarchy description given on \cpageref{sec:noadd-indent-rules}) as the
- \texttt{item} command is a member of \texttt{indentRules} by default.
-
- \begin{minipage}{.45\textwidth}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/items-noAdditionalGlobal.yaml}[yaml-TCB]{\texttt{items-noAdditionalGlobal.yaml}}{lst:items-noAdditionalGlobal}
- \end{minipage}%
- \hfill
- \begin{minipage}{.45\textwidth}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/items-indentRulesGlobal.yaml}[yaml-TCB]{\texttt{items-indentRulesGlobal.yaml}}{lst:items-indentRulesGlobal}
- \end{minipage}
-
- Upon running the following commands, \index{switches!-l demonstration}
- \begin{commandshell}
-latexindent.pl items1.tex -local items-noAdditionalGlobal.yaml
-latexindent.pl items1.tex -local items-indentRulesGlobal.yaml
-\end{commandshell}
- the respective outputs from \cref{lst:items1-noAdd1,lst:items1-rules1} are obtained;
- note, however, that \emph{all} such \texttt{item} commands without their own individual
- \texttt{noAdditionalIndent} or \texttt{indentRules} settings would behave as in these
- listings.
diff --git a/support/latexindent/documentation/subsubsec-headings.tex b/support/latexindent/documentation/subsubsec-headings.tex
deleted file mode 100644
index ee863da138..0000000000
--- a/support/latexindent/documentation/subsubsec-headings.tex
+++ /dev/null
@@ -1,87 +0,0 @@
-% arara: pdflatex: { files: [latexindent]}
-\subsubsection{afterHeading code blocks}\label{subsubsec-headings-no-add-indent-rules}
- Let's use the example \cref{lst:headings2} for demonstration throughout this
- \namecref{subsubsec-headings-no-add-indent-rules}. As discussed on
- \cpageref{lst:headings1}, by default \texttt{latexindent.pl} will not add indentation
- after headings.
-
- \cmhlistingsfromfile{demonstrations/headings2.tex}{\texttt{headings2.tex}}{lst:headings2}
-
- On using the YAML file in \cref{lst:headings3yaml} by running the command
- \index{switches!-l demonstration}
- \begin{commandshell}
-latexindent.pl headings2.tex -l headings3.yaml
-\end{commandshell}
- we obtain the output in \cref{lst:headings2-mod3}. Note that the argument of
- \texttt{paragraph} has received (default) indentation, and that the body after the
- heading statement has received (default) indentation.
-
- \begin{cmhtcbraster}[raster column skip=.1\linewidth]
- \cmhlistingsfromfile{demonstrations/headings2-mod3.tex}{\texttt{headings2.tex} using \cref{lst:headings3yaml}}{lst:headings2-mod3}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/headings3.yaml}[yaml-TCB]{\texttt{headings3.yaml}}{lst:headings3yaml}
- \end{cmhtcbraster}
-
- If we specify \texttt{noAdditionalIndent} as in \cref{lst:headings4yaml} and run the
- command \index{switches!-l demonstration}
- \begin{commandshell}
-latexindent.pl headings2.tex -l headings4.yaml
-\end{commandshell}
- then we receive the output in \cref{lst:headings2-mod4}. Note that the arguments
- \emph{and} the body after the heading of \texttt{paragraph} has received no additional
- indentation, because we have specified \texttt{noAdditionalIndent} in scalar form.
-
- \begin{cmhtcbraster}[raster column skip=.1\linewidth]
- \cmhlistingsfromfile{demonstrations/headings2-mod4.tex}{\texttt{headings2.tex} using \cref{lst:headings4yaml}}{lst:headings2-mod4}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/headings4.yaml}[yaml-TCB]{\texttt{headings4.yaml}}{lst:headings4yaml}
- \end{cmhtcbraster}
-
- Similarly, if we specify \texttt{indentRules} as in \cref{lst:headings5yaml} and run
- analogous commands to those above, we receive the output in \cref{lst:headings2-mod5};
- note that the \emph{body}, \emph{mandatory argument} and content \emph{after the heading}
- of \texttt{paragraph} have \emph{all} received three tabs worth of indentation.
-
- \begin{cmhtcbraster}[raster force size=false,
- raster column 1/.style={add to width=1cm},
- raster column 2/.style={add to width=-1cm},
- ]
- \cmhlistingsfromfile[showtabs=true]{demonstrations/headings2-mod5.tex}{\texttt{headings2.tex} using \cref{lst:headings5yaml}}{lst:headings2-mod5}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/headings5.yaml}[yaml-TCB]{\texttt{headings5.yaml}}{lst:headings5yaml}
- \end{cmhtcbraster}
-
- We may, instead, specify \texttt{noAdditionalIndent} in `field' form, as in
- \cref{lst:headings6yaml} which gives the output in \cref{lst:headings2-mod6}.
-
- \begin{cmhtcbraster}
- \cmhlistingsfromfile{demonstrations/headings2-mod6.tex}{\texttt{headings2.tex} using \cref{lst:headings6yaml}}{lst:headings2-mod6}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/headings6.yaml}[yaml-TCB]{\texttt{headings6.yaml}}{lst:headings6yaml}
- \end{cmhtcbraster}
-
- Analogously, we may specify \texttt{indentRules} as in \cref{lst:headings7yaml} which
- gives the output in \cref{lst:headings2-mod7}; note that mandatory argument text has only
- received a single space of indentation, while the body after the heading has received
- three tabs worth of indentation.
-
- \begin{cmhtcbraster}
- \cmhlistingsfromfile[showtabs=true]{demonstrations/headings2-mod7.tex}{\texttt{headings2.tex} using \cref{lst:headings7yaml}}{lst:headings2-mod7}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/headings7.yaml}[yaml-TCB]{\texttt{headings7.yaml}}{lst:headings7yaml}
- \end{cmhtcbraster}
-
- Finally, let's consider \texttt{noAdditionalIndentGlobal} and \texttt{indentRulesGlobal}
- shown in \cref{lst:headings8yaml,lst:headings9yaml} respectively, with respective output
- in \cref{lst:headings2-mod8,lst:headings2-mod9}. Note that in \cref{lst:headings8yaml}
- the \emph{mandatory argument} of \texttt{paragraph} has received a (default) tab's worth
- of indentation, while the body after the heading has received \emph{no additional
- indentation}. Similarly, in \cref{lst:headings2-mod9}, the \emph{argument} has received
- both a (default) tab plus two spaces of indentation (from the global rule specified in
- \cref{lst:headings9yaml}), and the remaining body after \texttt{paragraph} has received
- just two spaces of indentation.
-
- \begin{cmhtcbraster}
- \cmhlistingsfromfile{demonstrations/headings2-mod8.tex}{\texttt{headings2.tex} using \cref{lst:headings8yaml}}{lst:headings2-mod8}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/headings8.yaml}[yaml-TCB]{\texttt{headings8.yaml}}{lst:headings8yaml}
- \end{cmhtcbraster}
-
- \begin{cmhtcbraster}
- \cmhlistingsfromfile[showspaces=true,showtabs=true]{demonstrations/headings2-mod9.tex}{\texttt{headings2.tex} using \cref{lst:headings9yaml}}{lst:headings2-mod9}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/headings9.yaml}[yaml-TCB]{\texttt{headings9.yaml}}{lst:headings9yaml}
- \end{cmhtcbraster}
diff --git a/support/latexindent/documentation/subsubsec-ifelsefi.tex b/support/latexindent/documentation/subsubsec-ifelsefi.tex
deleted file mode 100644
index 7effdd6dff..0000000000
--- a/support/latexindent/documentation/subsubsec-ifelsefi.tex
+++ /dev/null
@@ -1,87 +0,0 @@
-% arara: pdflatex: { files: [latexindent]}
-\subsubsection{ifelsefi code blocks}
- Let's use the simple example shown in \cref{lst:ifelsefi1}; when \texttt{latexindent.pl}
- operates on this file, the output as in \cref{lst:ifelsefi1-default}; note that the body
- of each of the \lstinline!\if! statements have been indented, and that the
- \lstinline!\else! statement has been accounted for correctly.
-
- \begin{minipage}{.45\textwidth}
- \cmhlistingsfromfile{demonstrations/ifelsefi1.tex}{\texttt{ifelsefi1.tex}}{lst:ifelsefi1}
- \end{minipage}%
- \hfill
- \begin{minipage}{.54\textwidth}
- \cmhlistingsfromfile{demonstrations/ifelsefi1-default.tex}{\texttt{ifelsefi1.tex} default output}{lst:ifelsefi1-default}
- \end{minipage}
-
- It is recommended to specify \texttt{noAdditionalIndent} and \texttt{indentRules} in the
- `scalar' form only for these type of code blocks, although the `field' form would work,
- assuming that \texttt{body} was specified. Examples are shown in
- \cref{lst:ifnum-noAdd,lst:ifnum-indent-rules}.
-
- \begin{minipage}{.45\textwidth}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/ifnum-noAdd.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{ifnum-noAdd.yaml}}{lst:ifnum-noAdd}
- \end{minipage}
- \hfill
- \begin{minipage}{.45\textwidth}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/ifnum-indent-rules.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{ifnum-indent-rules.yaml}}{lst:ifnum-indent-rules}
- \end{minipage}
-
- After running the following commands, \index{switches!-l demonstration}
- \begin{commandshell}
-latexindent.pl ifelsefi1.tex -local ifnum-noAdd.yaml
-latexindent.pl ifelsefi1.tex -l ifnum-indent-rules.yaml
-\end{commandshell}
- we receive the respective output given in
- \cref{lst:ifelsefi1-output-noAdd,lst:ifelsefi1-output-indent-rules}; note that in
- \cref{lst:ifelsefi1-output-noAdd}, the \texttt{ifnum} code block has \emph{not} received
- any additional indentation, while in \cref{lst:ifelsefi1-output-indent-rules}, the
- \texttt{ifnum} code block has received one tab and two spaces of indentation.
-
- \begin{minipage}{.45\textwidth}
- \cmhlistingsfromfile{demonstrations/ifelsefi1-noAdd.tex}{\texttt{ifelsefi1.tex} using \cref{lst:ifnum-noAdd}}{lst:ifelsefi1-output-noAdd}
- \end{minipage}
- \hfill
- \begin{minipage}{.5\textwidth}
- \cmhlistingsfromfile[showspaces=true,showtabs=true]{demonstrations/ifelsefi1-indent-rules.tex}{\texttt{ifelsefi1.tex} using \cref{lst:ifnum-indent-rules}}{lst:ifelsefi1-output-indent-rules}
- \end{minipage}
-
- We may specify \texttt{noAdditionalIndentGlobal} and \texttt{indentRulesGlobal} as in
- \cref{lst:ifelsefi-noAdd-glob,lst:ifelsefi-indent-rules-global}.
-
- \begin{minipage}{.49\textwidth}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/ifelsefi-noAdd-glob.yaml}[width=.9\linewidth,before=\centering,yaml-TCB]{\texttt{ifelsefi-noAdd-glob.yaml}}{lst:ifelsefi-noAdd-glob}
- \end{minipage}
- \hfill
- \begin{minipage}{.49\textwidth}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/ifelsefi-indent-rules-global.yaml}[width=.9\linewidth,before=\centering,yaml-TCB]{\texttt{ifelsefi-indent-rules-global.yaml}}{lst:ifelsefi-indent-rules-global}
- \end{minipage}
-
- Upon running the following commands \index{switches!-l demonstration}
- \begin{commandshell}
-latexindent.pl ifelsefi1.tex -local ifelsefi-noAdd-glob.yaml
-latexindent.pl ifelsefi1.tex -l ifelsefi-indent-rules-global.yaml
-\end{commandshell}
- we receive the outputs in
- \cref{lst:ifelsefi1-output-noAdd-glob,lst:ifelsefi1-output-indent-rules-global}; notice
- that in \cref{lst:ifelsefi1-output-noAdd-glob} neither of the \texttt{ifelsefi} code
- blocks have received indentation, while in
- \cref{lst:ifelsefi1-output-indent-rules-global} both code blocks have received a single
- space of indentation.
-
- \begin{minipage}{.45\textwidth}
- \cmhlistingsfromfile{demonstrations/ifelsefi1-noAdd-glob.tex}{\texttt{ifelsefi1.tex} using \cref{lst:ifelsefi-noAdd-glob}}{lst:ifelsefi1-output-noAdd-glob}
- \end{minipage}
- \hfill
- \begin{minipage}{.45\textwidth}
- \cmhlistingsfromfile[showspaces=true]{demonstrations/ifelsefi1-indent-rules-global.tex}{\texttt{ifelsefi1.tex} using \cref{lst:ifelsefi-indent-rules-global}}{lst:ifelsefi1-output-indent-rules-global}
- \end{minipage}
-
- We can further explore the treatment of \texttt{ifElseFi} code blocks
- \announce{2018-04-27}*{updates to ifElseFi code blocks} in \cref{lst:ifelsefi2}, and the
- associated default output given in \cref{lst:ifelsefi2-default}; note, in particular,
- that the bodies of each of the `or statements' have been indented.%
-
- \begin{cmhtcbraster}[raster column skip=.1\linewidth]
- \cmhlistingsfromfile{demonstrations/ifelsefi2.tex}{\texttt{ifelsefi2.tex}}{lst:ifelsefi2}
- \cmhlistingsfromfile{demonstrations/ifelsefi2-default.tex}{\texttt{ifelsefi2.tex} default output}{lst:ifelsefi2-default}
- \end{cmhtcbraster}
diff --git a/support/latexindent/documentation/subsubsec-no-add-remaining-code-blocks.tex b/support/latexindent/documentation/subsubsec-no-add-remaining-code-blocks.tex
deleted file mode 100644
index 300e39756c..0000000000
--- a/support/latexindent/documentation/subsubsec-no-add-remaining-code-blocks.tex
+++ /dev/null
@@ -1,134 +0,0 @@
-% arara: pdflatex: { files: [latexindent]}
-\subsubsection{The remaining code blocks}
- Referencing the different types of code blocks in \vref{tab:code-blocks}, we have a few
- code blocks yet to cover; these are very similar to the \texttt{commands} code block type
- covered comprehensively in \vref{subsubsec:commands-arguments}, but a small discussion
- defining these remaining code blocks is necessary.
-
- \paragraph{keyEqualsValuesBracesBrackets}
- \texttt{latexindent.pl} defines this type of code block by the following criteria:
- \begin{itemize}
- \item it must immediately follow either \lstinline!{! OR \lstinline![! OR \lstinline!,! with
- comments and blank lines allowed.
- \item then it has a name made up of the characters detailed in \vref{tab:code-blocks};
- \item then an $=$ symbol;
- \item then at least one set of curly braces or square brackets (comments and line breaks
- allowed throughout).
- \end{itemize}
- See the \texttt{keyEqualsValuesBracesBrackets: follow} and
- \texttt{keyEqualsValuesBracesBrackets: name} fields of the fine tuning section in
- \vref{lst:fineTuning} \announce{2019-07-13}{fine tuning: keyEqualsValuesBracesBrackets}%
-
- An example is shown in \cref{lst:pgfkeysbefore}, with the default output given in
- \cref{lst:pgfkeys1:default}.
-
- \begin{minipage}{.45\textwidth}
- \cmhlistingsfromfile{demonstrations/pgfkeys1.tex}{\texttt{pgfkeys1.tex}}{lst:pgfkeysbefore}
- \end{minipage}%
- \hfill
- \begin{minipage}{.5\textwidth}
- \cmhlistingsfromfile[showtabs=true]{demonstrations/pgfkeys1-default.tex}{\texttt{pgfkeys1.tex} default output}{lst:pgfkeys1:default}
- \end{minipage}%
-
- In \cref{lst:pgfkeys1:default}, note that the maximum indentation is three tabs, and
- these come from:
- \begin{itemize}
- \item the \lstinline!\pgfkeys! command's mandatory argument;
- \item the \lstinline!start coordinate/.initial! key's mandatory argument;
- \item the \lstinline!start coordinate/.initial! key's body, which is defined as any lines
- following the name of the key that include its arguments. This is the part controlled by
- the \emph{body} field for \texttt{noAdditionalIndent} and friends from
- \cpageref{sec:noadd-indent-rules}.
- \end{itemize}
- \paragraph{namedGroupingBracesBrackets} This type of code block is mostly motivated by
- tikz-based code; we define this code block as follows:
- \begin{itemize}
- \item it must immediately follow either \emph{horizontal space} OR \emph{one or more line
- breaks} OR \lstinline!{! OR \lstinline![! OR \lstinline!$! OR \lstinline!)! OR
- \lstinline!(!
- \item the name may contain the characters detailed in \vref{tab:code-blocks};
- \item then at least one set of curly braces or square brackets (comments and line breaks
- allowed throughout).
- \end{itemize}
- See the \texttt{NamedGroupingBracesBrackets: follow} and
- \texttt{NamedGroupingBracesBrackets: name} fields of the fine tuning section in
- \vref{lst:fineTuning} \announce{2019-07-13}{fine tuning: namedGroupingBracesBrackets}%
-
- A simple example is given in \cref{lst:child1}, with default output in
- \cref{lst:child1:default}.
-
- \begin{minipage}{.45\textwidth}
- \cmhlistingsfromfile{demonstrations/child1.tex}{\texttt{child1.tex}}{lst:child1}
- \end{minipage}%
- \hfill
- \begin{minipage}{.5\textwidth}
- \cmhlistingsfromfile[showtabs=true]{demonstrations/child1-default.tex}{\texttt{child1.tex} default output}{lst:child1:default}
- \end{minipage}%
-
- In particular, \texttt{latexindent.pl} considers \texttt{child}, \texttt{parent} and
- \texttt{node} all to be \texttt{namedGroupingBracesBrackets}\footnote{ You may like to
- verify this by using the \texttt{-tt} option and checking \texttt{indent.log}! }.
- Referencing \cref{lst:child1:default}, note that the maximum indentation is two tabs, and
- these come from:
- \begin{itemize}
- \item the \lstinline!child!'s mandatory argument;
- \item the \lstinline!child!'s body, which is defined as any lines following the name of the
- \texttt{namedGroupingBracesBrackets} that include its arguments. This is the part
- controlled by the \emph{body} field for \texttt{noAdditionalIndent} and friends from
- \cpageref{sec:noadd-indent-rules}.
- \end{itemize}
-
- \paragraph{UnNamedGroupingBracesBrackets} occur in a variety of situations; specifically, we
- define this type of code block as satisfying the following criteria:
- \begin{itemize}
- \item it must immediately follow either \lstinline!{! OR \lstinline![! OR \lstinline!,! OR
- \lstinline!&! OR \lstinline!)! OR \lstinline!(! OR \lstinline!$!;
- \item then at least one set of curly braces or square brackets (comments and line breaks
- allowed throughout).
- \end{itemize}
- See the \texttt{UnNamedGroupingBracesBrackets: follow} field of the fine tuning section
- in \vref{lst:fineTuning} \announce{2019-07-13}{fine tuning: namedGroupingBracesBrackets}%
-
- An example is shown in \cref{lst:psforeach1} with default output give in
- \cref{lst:psforeach:default}.
-
- \begin{minipage}{.45\textwidth}
- \cmhlistingsfromfile{demonstrations/psforeach1.tex}{\texttt{psforeach1.tex}}{lst:psforeach1}
- \end{minipage}%
- \hfill
- \begin{minipage}{.5\textwidth}
- \cmhlistingsfromfile[showtabs=true]{demonstrations/psforeach1-default.tex}{\texttt{psforeach1.tex} default output}{lst:psforeach:default}
- \end{minipage}%
-
- Referencing \cref{lst:psforeach:default}, there are \emph{three} sets of unnamed braces.
- Note also that the maximum value of indentation is three tabs, and these come from:
- \begin{itemize}
- \item the \lstinline!\psforeach! command's mandatory argument;
- \item the \emph{first} un-named braces mandatory argument;
- \item the \emph{first} un-named braces \emph{body}, which we define as any lines following the
- first opening \lstinline!{! or \lstinline![! that defined the code block. This is the
- part controlled by the \emph{body} field for \texttt{noAdditionalIndent} and friends from
- \cpageref{sec:noadd-indent-rules}.
- \end{itemize}
- Users wishing to customise the mandatory and/or optional arguments on a \emph{per-name}
- basis for the \texttt{UnNamedGroupingBracesBrackets} should use \texttt{always-un-named}.
-
- \paragraph{filecontents} code blocks behave just as \texttt{environments}, except that
- neither arguments nor items are sought.
-
-\subsubsection{Summary}
- \index{indentation!summary}
- Having considered all of the different types of code blocks, the functions of the fields
- given in \cref{lst:noAdditionalIndentGlobal,lst:indentRulesGlobal} should now make sense.
- \index{specialBeginEnd!noAdditionalIndentGlobal}
- \index{specialBeginEnd!indentRulesGlobal}
-
- \begin{widepage}
- \begin{minipage}{.47\linewidth}
- \cmhlistingsfromfile[style=noAdditionalIndentGlobal]{../defaultSettings.yaml}[before=\centering,yaml-TCB]{\texttt{noAdditionalIndentGlobal}}{lst:noAdditionalIndentGlobal}
- \end{minipage}%
- \hfill
- \begin{minipage}{.47\linewidth}
- \cmhlistingsfromfile[style=indentRulesGlobal]{../defaultSettings.yaml}[before=\centering,yaml-TCB]{\texttt{indentRulesGlobal}}{lst:indentRulesGlobal}
- \end{minipage}%
- \end{widepage}
diff --git a/support/latexindent/documentation/subsubsec-special.tex b/support/latexindent/documentation/subsubsec-special.tex
deleted file mode 100644
index 128bd781ca..0000000000
--- a/support/latexindent/documentation/subsubsec-special.tex
+++ /dev/null
@@ -1,67 +0,0 @@
-% arara: pdflatex: {files: [latexindent]}
-\subsubsection{specialBeginEnd code blocks}
- Let's use the example from \vref{lst:specialbefore} which has default output shown in
- \vref{lst:specialafter}.
-
- It is recommended to specify \texttt{noAdditionalIndent} and \texttt{indentRules} in the
- `scalar' form for these type of code blocks, although the `field' form would work,
- assuming that \texttt{body} was specified. Examples are shown in
- \cref{lst:displayMath-noAdd,lst:displayMath-indent-rules}.
- \index{specialBeginEnd!noAdditionalIndent} \index{specialBeginEnd!indentRules example}
-
- \begin{minipage}{.49\textwidth}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/displayMath-noAdd.yaml}[width=.9\linewidth,before=\centering,yaml-TCB]{\texttt{displayMath-noAdd.yaml}}{lst:displayMath-noAdd}
- \end{minipage}
- \hfill
- \begin{minipage}{.49\textwidth}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/displayMath-indent-rules.yaml}[width=.9\linewidth,before=\centering,yaml-TCB]{\texttt{displayMath-indent-rules.yaml}}{lst:displayMath-indent-rules}
- \end{minipage}
-
- After running the following commands, \index{switches!-l demonstration}
- \begin{commandshell}
-latexindent.pl special1.tex -local displayMath-noAdd.yaml
-latexindent.pl special1.tex -l displayMath-indent-rules.yaml
-\end{commandshell}
- we receive the respective output given in
- \cref{lst:special1-output-noAdd,lst:special1-output-indent-rules}; note that in
- \cref{lst:special1-output-noAdd}, the \texttt{displayMath} code block has \emph{not}
- received any additional indentation, while in \cref{lst:special1-output-indent-rules},
- the \texttt{displayMath} code block has received three tabs worth of indentation.
-
- \begin{minipage}{.45\textwidth}
- \cmhlistingsfromfile{demonstrations/special1-noAdd.tex}{\texttt{special1.tex} using \cref{lst:displayMath-noAdd}}{lst:special1-output-noAdd}
- \end{minipage}
- \hfill
- \begin{minipage}{.45\textwidth}
- \cmhlistingsfromfile[showtabs=true]{demonstrations/special1-indent-rules.tex}{\texttt{special1.tex} using \cref{lst:displayMath-indent-rules}}{lst:special1-output-indent-rules}
- \end{minipage}
-
- We may specify \texttt{noAdditionalIndentGlobal} and \texttt{indentRulesGlobal} as in
- \cref{lst:special-noAdd-glob,lst:special-indent-rules-global}.
-
- \begin{minipage}{.49\textwidth}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/special-noAdd-glob.yaml}[width=.9\linewidth,before=\centering,yaml-TCB]{\texttt{special-noAdd-glob.yaml}}{lst:special-noAdd-glob}
- \end{minipage}
- \hfill
- \begin{minipage}{.49\textwidth}
- \cmhlistingsfromfile[style=yaml-LST]{demonstrations/special-indent-rules-global.yaml}[width=.9\linewidth,before=\centering,yaml-TCB]{\texttt{special-indent-rules-global.yaml}}{lst:special-indent-rules-global}
- \end{minipage}
-
- Upon running the following commands \index{switches!-l demonstration}
- \begin{commandshell}
-latexindent.pl special1.tex -local special-noAdd-glob.yaml
-latexindent.pl special1.tex -l special-indent-rules-global.yaml
-\end{commandshell}
- we receive the outputs in
- \cref{lst:special1-output-noAdd-glob,lst:special1-output-indent-rules-global}; notice
- that in \cref{lst:special1-output-noAdd-glob} neither of the \texttt{special} code blocks
- have received indentation, while in \cref{lst:special1-output-indent-rules-global} both
- code blocks have received a single space of indentation.
-
- \begin{minipage}{.45\textwidth}
- \cmhlistingsfromfile{demonstrations/special1-noAdd-glob.tex}{\texttt{special1.tex} using \cref{lst:special-noAdd-glob}}{lst:special1-output-noAdd-glob}
- \end{minipage}
- \hfill
- \begin{minipage}{.45\textwidth}
- \cmhlistingsfromfile[showspaces=true]{demonstrations/special1-indent-rules-global.tex}{\texttt{special1.tex} using \cref{lst:special-indent-rules-global}}{lst:special1-output-indent-rules-global}
- \end{minipage}
diff --git a/support/latexindent/documentation/test-default-settings.tex b/support/latexindent/documentation/test-default-settings.tex
deleted file mode 100644
index 02b858a749..0000000000
--- a/support/latexindent/documentation/test-default-settings.tex
+++ /dev/null
@@ -1,65 +0,0 @@
-% arara: pdflatex: { files: [latexindent]}
-
-% file used to check if line numbers are set correct for defaultSettings.yaml listings
-sec-introduction.tex:
-
-\cmhlistingsfromfile[style=fileExtensionPreference]{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{fileExtensionPreference}}{lst:fileExtensionPreference-demo}
-\cmhlistingsfromfile[style=modifylinebreaks]{../defaultSettings.yaml}[MLB-TCB,width=.85\linewidth,before=\centering]{\texttt{modifyLineBreaks}}{lst:modifylinebreaks-demo}
-\cmhlistingsfromfile[style=replacements]{../defaultSettings.yaml}[replace-TCB,width=.85\linewidth,before=\centering]{\texttt{replacements}}{lst:replacements-demo}
-
-sec default user
-
-\cmhlistingsfromfile[style=fileExtensionPreference]{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{fileExtensionPreference}}{lst:fileExtensionPreference}
-\cmhlistingsfromfile[style=logFilePreferences,]{../defaultSettings.yaml}[width=.9\linewidth,before=\centering,yaml-TCB]{\texttt{logFilePreferences}}{lst:logFilePreferences}
-\cmhlistingsfromfile[style=verbatimEnvironments]{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{verbatimEnvironments}}{lst:verbatimEnvironments}
-\cmhlistingsfromfile[style=verbatimCommands]{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{verbatimCommands}}{lst:verbatimCommands}
-\cmhlistingsfromfile[style=noIndentBlock]{../defaultSettings.yaml}[width=.4\linewidth,before=\centering,yaml-TCB]{\texttt{noIndentBlock}}{lst:noIndentBlock}
-\cmhlistingsfromfile[style=fileContentsEnvironments]{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{fileContentsEnvironments}}{lst:fileContentsEnvironments}
-\cmhlistingsfromfile[style=lookForPreamble]{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{lookForPreamble}{lst:lookForPreamble}
-\cmhlistingsfromfile[style=removeTrailingWhitespace]{../defaultSettings.yaml}[before=\centering,yaml-TCB]{removeTrailingWhitespace}{lst:removeTrailingWhitespace}
-\cmhlistingsfromfile[style=lookForAlignDelims]{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{lookForAlignDelims} (advanced)}{lst:aligndelims:advanced}
-\cmhlistingsfromfile[style=indentAfterItems]{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{indentAfterItems}}{lst:indentafteritems}
-\cmhlistingsfromfile[style=itemNames]{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{itemNames}}{lst:itemNames}
-\cmhlistingsfromfile[style=specialBeginEnd]{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{specialBeginEnd}}{lst:specialBeginEnd}
-\cmhlistingsfromfile[style=indentAfterHeadings]{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{indentAfterHeadings}}{lst:indentAfterHeadings}
-
-subsec-commands-and-their-options.tex:
-
-\cmhlistingsfromfile[style=commandCodeBlocks]{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{commandCodeBlocks}}{lst:commandCodeBlocks}
-
-subsubsec-environments-and-their-arguments.tex:
-
-\cmhlistingsfromfile[style=noAdditionalIndentGlobalEnv]{../defaultSettings.yaml}[width=.5\linewidth,before=\centering,yaml-TCB]{\texttt{noAdditionalIndentGlobal}}{lst:noAdditionalIndentGlobal:environments}
-\cmhlistingsfromfile[style=indentRulesGlobalEnv]{../defaultSettings.yaml}[width=.5\linewidth,before=\centering,yaml-TCB]{\texttt{indentRulesGlobal}}{lst:indentRulesGlobal:environments}
-
-subsubsec-no-add-remaining-code-blocks.tex:
-\cmhlistingsfromfile[style=noAdditionalIndentGlobal]{../defaultSettings.yaml}[before=\centering,yaml-TCB]{\texttt{noAdditionalIndentGlobal}}{lst:noAdditionalIndentGlobal}
-\cmhlistingsfromfile[style=indentRulesGlobal]{../defaultSettings.yaml}[before=\centering,yaml-TCB]{\texttt{indentRulesGlobal}}{lst:indentRulesGlobal}
-
-sec-the-m-switch.tex:
-
-\cmhlistingsfromfile[style=modifylinebreaks]{../defaultSettings.yaml}[MLB-TCB,width=.85\linewidth,before=\centering]{\texttt{modifyLineBreaks}}{lst:modifylinebreaks}
-
-subsec-one-sentence-per-line.tex:
-
-\cmhlistingsfromfile[style=oneSentencePerLine]{../defaultSettings.yaml}[MLB-TCB,width=.85\linewidth,before=\centering]{\texttt{oneSentencePerLine}}{lst:oneSentencePerLine}
-\cmhlistingsfromfile[style=sentencesFollow]{../defaultSettings.yaml}[MLB-TCB,width=.9\linewidth,before=\centering]{\texttt{sentencesFollow}}{lst:sentencesFollow}
-\cmhlistingsfromfile[style=sentencesBeginWith]{../defaultSettings.yaml}[MLB-TCB,width=.9\linewidth,before=\centering]{\texttt{sentencesBeginWith}}{lst:sentencesBeginWith}
-\cmhlistingsfromfile[style=sentencesEndWith]{../defaultSettings.yaml}[MLB-TCB,width=.9\linewidth,before=\centering]{\texttt{sentencesEndWith}}{lst:sentencesEndWith}
-
-subsec-poly-switches.tex:
-
-\cmhlistingsfromfile[style=modifylinebreaksEnv]{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,MLB-TCB]{\texttt{environments}}{lst:environments-mlb}
-
-subsec-text-wrap.tex:
-
-\cmhlistingsfromfile[style=textWrapOptions]{../defaultSettings.yaml}[MLB-TCB,width=.85\linewidth,before=\centering]{\texttt{textWrapOptions}}{lst:textWrapOptions}
-\cmhlistingsfromfile[style=textWrapOptionsAll]{../defaultSettings.yaml}[MLB-TCB,width=.95\linewidth,before=\centering]{\texttt{textWrapOptions}}{lst:textWrapOptionsAll}
-
-sec-replacements.tex:
-
-\cmhlistingsfromfile[style=replacements]{../defaultSettings.yaml}[width=0.95\linewidth,before=\centering,replace-TCB]{\texttt{replacements}}{lst:replacements}
-
-sec-fine-tuning.tex:
-
-\cmhlistingsfromfile*[style=fineTuning]{../defaultSettings.yaml}[width=.95\linewidth,before=\centering,yaml-TCB]{\texttt{fineTuning}}{lst:fineTuning}
diff --git a/support/latexindent/documentation/title.tex b/support/latexindent/documentation/title.tex
deleted file mode 100644
index b9b3bdf117..0000000000
--- a/support/latexindent/documentation/title.tex
+++ /dev/null
@@ -1,30 +0,0 @@
-\title{%
- \begin{tcolorbox}[
- width=5.2cm,
- boxrule=0pt,
- colframe=white!40!black,
- colback=white,
- rightrule=2pt,
- sharp corners,
- enhanced,
- overlay={\node[anchor=north east,outer sep=2pt] at ([xshift=3cm,yshift=4mm]frame.north east) {\includegraphics[width=3cm]{logo}}; }]
- \centering\ttfamily\bfseries latexindent.pl\\[1cm] Version 3.18
- \end{tcolorbox}
-}
-\author{Chris Hughes \thanks{and contributors!
- See \vref{sec:contributors}.
- For
- all communication, please visit \cite{latexindent-home}.}}
-\date{2022-06-12}
-\maketitle
-\begin{adjustwidth}{1cm}{1cm}
- \small
- \texttt{latexindent.pl} is a \texttt{Perl} script that indents \texttt{.tex} (and other) files according to an indentation scheme that the user can modify to suit their taste.
- Environments, including those with alignment delimiters (such as \texttt{tabular}), and commands, including those that can split braces and brackets across lines, are \emph{usually} handled correctly by the script.
- Options for \texttt{verbatim}-like environments and commands, together with indentation after headings (such as \lstinline!chapter!, \lstinline!section!, etc) are also available.
- The script also has the ability to modify line breaks, and to add comment symbols and blank lines; furthermore, it permits string or
- regex-based substitutions.
- All user options are customisable via the switches and the YAML interface.
-
- tl;dr, a quick start guide is given in \vref{sec:quickstart}.
-\end{adjustwidth}
diff --git a/support/latexindent/latexindent.pl b/support/latexindent/latexindent.pl
index 49dbe7192e..838b5ba328 100755
--- a/support/latexindent/latexindent.pl
+++ b/support/latexindent/latexindent.pl
@@ -1,5 +1,5 @@
#!/usr/bin/env perl
-# latexindent.pl, version 3.18, 2022-06-12
+# latexindent.pl, version 3.19, 2022-10-30
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
diff --git a/support/lyluatex/Contributors.md b/support/lyluatex/Contributors.md
index 574ecf10a5..39fe7cc9c0 100644
--- a/support/lyluatex/Contributors.md
+++ b/support/lyluatex/Contributors.md
@@ -2,6 +2,6 @@
Lyluatex is developped by:
-- [Fr. Jacques Peron](mailto:catacolp@hotmail.com);
-- Urs Liska;
-- Br. Samuel Springuel.
+- [Fr. Jacques Peron](mailto:cataclop@hotmail.com); [@jperon](https://github.com/jperon)
+- [Urs Liska](mailto:git@ursliska.de); [@uliska](https://github.com/uliska), [@openlilylib](https://github.com/openlilylib)
+- Br. Samuel Springuel; [@rpspringuel](https://github.com/rpspringuel)
diff --git a/support/lyluatex/LICENSE b/support/lyluatex/LICENSE
index 515e3806df..9193cccea3 100644
--- a/support/lyluatex/LICENSE
+++ b/support/lyluatex/LICENSE
@@ -1,6 +1,6 @@
The MIT License (MIT)
-Copyright (c) 2015--2019 jperon and others
+Copyright (c) 2015--2022 jperon and others
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
diff --git a/support/lyluatex/README.md b/support/lyluatex/README.md
index 18475559cc..7aa096a18d 100644
--- a/support/lyluatex/README.md
+++ b/support/lyluatex/README.md
@@ -1,6 +1,4 @@
-Main author: [Fr. Jacques Peron](mailto:cataclop@hotmail.com)
-This material is subject to the MIT license.
-
+Main author: [Fr. Jacques Peron](mailto:cataclop@hotmail.com)\nThis material is subject to the MIT license.\n
# Lyluatex
## Usage
@@ -23,33 +21,37 @@ Thereafter, you can include a lilypond file with the command:
\lilypondfile[staffsize=17]{PATH/TO/THE/FILE}
```
-The argument `staffsize`, which is optional, changes the size of the score. You
-can change the size for all the subsequent scores in a document by placing the
-following command before your first include statement to be so affected:
+The argument `staffsize`, which is optional, changes the size of the score.
+You can change the size for all the subsequent scores in a document by
+placing the following command before your first include statement to be so
+affected:
```TeX
-\lysetoption{staffsize}{24}
+\setluaoption{ly}{staffsize}{24}
```
Next, you simply need to compile the document normally with the command
-`lualatex -shell-escape` :
+`lualatex -shell-escape`:
```bash
lualatex -shell-escape DOCUMENT.TEX
```
-Another "more secure" option is to add `lilypond` and `gs` to default allowed commands :
+Another "more secure" option is to add `lilypond` and `gs` to default
+allowed commands:
```bash
shell_escape_commands=$(kpsewhich -expand-var '$shell_escape_commands'),lilypond,gs lualatex DOCUMENT.TEX
```
On systems with low RAM, when working on big documents, you could encounter
-*buffer overflows* in `lilypond` calls. In that case, first compile with option
-`-draftmode`, then compile again without this option.
+*buffer overflows* in `lilypond` calls. In that case, first compile with
+luatex's command line option `--draftmode` to generate all LilyPond output
+snippets, then compile again without this option to generate the output PDF.
-You can also input music directly into your docoment with the `lilypond` environment.
-This is only recommended for relatively short snippets. For example:
+You can also input music directly into your document with the `lilypond`
+environment. This is only recommended for relatively short snippets. For
+example:
```TeX
\begin{lilypond}
@@ -57,7 +59,8 @@ This is only recommended for relatively short snippets. For example:
\end{lilypond}
```
-Finally, for truly short snippets, there is also the `\lily` command. Example:
+Finally, for truly short snippets, there is also the `\lily` command.
+Example:
```TeX
\lilypond[staffsize=12]{c' d' g'}
@@ -70,9 +73,9 @@ code with explicit `\score` blocks. Such code must be included with the
## Migration from `lilypond-book`
In order to facilitate the migration from `lilypond-book`, `\lilypondfile`,
-the environment `lilypond` and the command `\lilypond` should work nearly
-as with `lilypond-book` ; for even more identical behaviour, call `lyluatex`
-like follows:
+the environment `lilypond` and the command `\lilypond` should work nearly as
+with `lilypond-book`; for even more identical behaviour, call `lyluatex`
+as follows:
```TeX
\usepackage[program=/opt/lilypond-dev/lilypond]{lyluatex}
@@ -83,15 +86,15 @@ That way, documents typeset with `lilypond-book` can be adapted to use
# Credits
-Cf. [Contributors.md](Contributors.md)
+See [Contributors.md](Contributors.md).
# Contributing
-If you want improvements or encounter an error, do not hesitate to
-to report the [issue](https://github.com/jperon/lyluatex/issues).
-If you have programming skills, you may also propose your changes
-via a [pull request](https://github.com/jperon/lyluatex/pulls).
+If you want improvements or encounter an error, do not hesitate to to report
+the [issue](https://github.com/jperon/lyluatex/issues). If you have
+programming skills, you may also propose your changes via a [pull
+request](https://github.com/jperon/lyluatex/pulls).
-This extension is and will remain free; if you find it useful and
-wish to encourage its development by a
-[donation](https://www.paypal.me/abjperon), many thanks!
+This extension is and will remain free; if you find it useful and wish to
+encourage its development by a [donation](https://www.paypal.me/abjperon),
+many thanks!
diff --git a/support/lyluatex/lyluatex.lua b/support/lyluatex/lyluatex.lua
index 1023e20ef9..adb17a63a0 100644
--- a/support/lyluatex/lyluatex.lua
+++ b/support/lyluatex/lyluatex.lua
@@ -1,21 +1,20 @@
-- luacheck: ignore ly log self luatexbase internalversion font fonts tex token kpse status ly_opts
local err, warn, info, log = luatexbase.provides_module({
name = "lyluatex",
- version = '1.0f', --LYLUATEX_VERSION
- date = "2019/05/27", --LYLUATEX_DATE
+ version = '1.1', --LYLUATEX_VERSION
+ date = "2022/10/30", --LYLUATEX_DATE
description = "Module lyluatex.",
author = "The Gregorio Project − (see Contributors.md)",
- copyright = "2015-2019 - jperon and others",
+ copyright = "2015-2022 - jperon and others",
license = "MIT",
})
-local lib = require(kpse.find_file("lyluatex-lib.lua") or "lyluatex-lib.lua")
-local ly_opts = ly_opts -- global ly_opts has been defined before in lyluatex.sty
+local lib = require(kpse.find_file("luaoptions-lib.lua") or "luaoptions-lib.lua")
+local ly_opts = lua_options.client('ly')
local md5 = require 'md5'
local lfs = require 'lfs'
-local latex = {}
local ly = {
err = err,
varwidth_available = kpse.find_file('varwidth.sty')
@@ -67,19 +66,16 @@ local LY_HEAD = [[
%%File header
\version "<<<version>>>"
<<<language>>>
-
-<<<preamble>>>
-
#(define inside-lyluatex #t)
#(set-global-staff-size <<<staffsize>>>)
+<<<preamble>>>
\header {
copyright = ""
tagline = ##f
}
\paper{
- <<<paper>>>
- two-sided = ##<<<twoside>>>
+ <<<paper>>> two-sided = ##<<<twoside>>>
line-width = <<<linewidth>>>\pt
<<<indent>>>
<<<raggedright>>>
@@ -88,8 +84,7 @@ local LY_HEAD = [[
\layout{
<<<staffprops>>>
<<<fixbadlycroppedstaffgroupbrackets>>>
-}
-<<<header>>>
+}<<<header>>>
%%Follows original score
]]
@@ -121,13 +116,16 @@ end
local function font_default_staffsize()
- return lib.fontinfo(font.current()).size/39321.6
+ return lib.current_font_size()/39321.6
end
local function includes_parse(list)
local includes = ''
if list then
+ includes = [[
+
+]]
list = list:explode(',')
for _, included_file in ipairs(list) do
warn(included_file)
@@ -197,12 +195,11 @@ end
--[[ ================ Bounding box calculations =========================== --]]
-local bbox = {}
-function bbox.get(filename, line_width)
- return bbox.read(filename) or bbox.parse(filename, line_width)
+function bbox_get(filename, line_width)
+ return bbox_read(filename) or bbox_parse(filename, line_width)
end
-function bbox.calc(x_1, x_2, y_1, y_2, line_width)
+function bbox_calc(x_1, x_2, y_1, y_2, line_width)
local bb = {
['protrusion'] = -lib.convert_unit(("%fbp"):format(x_1)),
['r_protrusion'] = lib.convert_unit(("%fbp"):format(x_2)) - line_width,
@@ -216,7 +213,7 @@ function bbox.calc(x_1, x_2, y_1, y_2, line_width)
return bb
end
-function bbox.parse(filename, line_width)
+function bbox_parse(filename, line_width)
-- get BoundingBox from EPS file
local bbline = lib.readlinematching('^%%%%BoundingBox', io.open(filename..'.eps', 'r'))
if not bbline then return end
@@ -239,24 +236,24 @@ function bbox.parse(filename, line_width)
end
local f = io.open(filename .. '.bbox', 'w')
f:write(
- string.format("return %s, %s, %s, %s, %s", x_1, y_1, x_2, y_2, line_width)
+ string.format("return %f, %f, %f, %f, %f", x_1, y_1, x_2, y_2, line_width)
)
f:close()
- return bbox.calc(x_1, x_2, y_1, y_2, line_width)
+ return bbox_calc(x_1, x_2, y_1, y_2, line_width)
end
-function bbox.read(f)
+function bbox_read(f)
f = f .. '.bbox'
if lfs.isfile(f) then
local x_1, y_1, x_2, y_2, line_width = dofile(f)
- return bbox.calc(x_1, x_2, y_1, y_2, line_width)
+ return bbox_calc(x_1, x_2, y_1, y_2, line_width)
end
end
--[[ =============== Functions that output LaTeX code ===================== --]]
-function latex.filename(printfilename, insert, input_file)
+function latex_filename(printfilename, insert, input_file)
if printfilename and input_file then
if insert ~= 'systems' then
warn('`printfilename` only works with `insert=systems`')
@@ -267,7 +264,7 @@ function latex.filename(printfilename, insert, input_file)
end
end
-function latex.fullpagestyle(style, ppn)
+function latex_fullpagestyle(style, ppn)
local function texoutput(s) tex.sprint('\\includepdfset{pagecommand='..s..'}%') end
if style == '' then
if ppn then texoutput('\\thispagestyle{empty}')
@@ -277,7 +274,7 @@ function latex.fullpagestyle(style, ppn)
end
end
-function latex.includeinline(pdfname, height, valign, hpadding, voffset)
+function latex_includeinline(pdfname, height, valign, hpadding, voffset)
local v_base
if valign == 'bottom' then v_base = 0
elseif valign == 'top' then v_base = lib.convert_unit('1em') - height
@@ -285,27 +282,25 @@ function latex.includeinline(pdfname, height, valign, hpadding, voffset)
end
tex.sprint(
string.format(
- [[\hspace{%fpt}\raisebox{%fpt}{\includegraphics{%s-1.pdf}}\hspace{%fpt}]],
+ [[\hspace{%fpt}\raisebox{%fpt}{\includegraphics{%s-1}}\hspace{%fpt}]],
hpadding, v_base + voffset, pdfname, hpadding
)
)
end
-function latex.includepdf(pdfname, range, papersize)
- local noautoscale = ''
- if papersize then noautoscale = 'noautoscale' end
+function latex_includepdf(pdfname, range, papersize)
tex.sprint(string.format(
[[\includepdf[pages={%s},%s]{%s}]],
- table.concat(range, ','), noautoscale, pdfname
+ table.concat(range, ','), papersize and 'noautoscale' or '', pdfname
))
end
-function latex.includesystems(filename, range, protrusion, gutter, staffsize, indent_offset)
+function latex_includesystems(filename, range, protrusion, gutter, staffsize, indent_offset)
local h_offset = protrusion + indent_offset
local texoutput = '\\ifx\\preLilyPondExample\\undefined\\else\\preLilyPondExample\\fi\n'
texoutput = texoutput..'\\par\n'
for index, system in pairs(range) do
- if not lfs.isfile(filename..'-'..system..'.pdf') then break end
+ if not lfs.isfile(filename..'-'..system..'.eps') then break end
texoutput = texoutput..
string.format([[
\noindent\hspace*{%fpt}\includegraphics{%s}%%
@@ -327,13 +322,13 @@ function latex.includesystems(filename, range, protrusion, gutter, staffsize, in
tex.sprint(texoutput:explode('\n'))
end
-function latex.label(label, labelprefix)
+function latex_label(label, labelprefix)
if label then tex.sprint('\\label{'..labelprefix..label..'}%%') end
end
ly.verbenv = {[[\begin{verbatim}]], [[\end{verbatim}]]}
-function latex.verbatim(verbatim, ly_code, intertext, version)
+function latex_verbatim(verbatim, ly_code, intertext, version)
if verbatim then
if version then tex.sprint('\\lyVersion{'..version..'}') end
local content = table.concat(ly_code:explode('\n'), '\n'):gsub(
@@ -372,12 +367,12 @@ function Score:bbox(system)
if not self.bboxes then
self.bboxes = {}
for i = 1, self:count_systems() do
- table.insert(self.bboxes, bbox.get(self.output..'-'..i, self['line-width']))
+ table.insert(self.bboxes, bbox_get(self.output..'-'..i, self['line-width']))
end
end
return self.bboxes[system]
else
- if not self.bbox then self.bbox = bbox.get(self.output, self['line-width']) end
+ if not self.bbox then self.bbox = bbox_get(self.output, self['line-width']) end
return self.bbox
end
end
@@ -707,26 +702,27 @@ function Score:content()
end
function Score:count_systems(force)
- if force or not self.system_count then
- local f = io.open(self.output..'-systems.count', 'r')
- if f then
- self.system_count = tonumber(f:read('*all'))
- f:close()
- else self.system_count = 0
+ local count = self.system_count
+ if force or not count then
+ count = 0
+ local systems = self.output:match("[^/]*$").."%-%d+%.eps"
+ for f in lfs.dir(self.tmpdir) do
+ if f:match(systems) then
+ count = count + 1
+ end
end
+ self.system_count = count
end
- return self.system_count
+ return count
end
function Score:delete_intermediate_files()
for _, filename in pairs(self.output_names) do
if self.insert == 'fullpage' then os.remove(filename..'.ps')
else
- for i = 1, self:count_systems() do os.remove(filename..'-'..i..'.eps') end
os.remove(filename..'-systems.tex')
os.remove(filename..'-systems.texi')
os.remove(filename..'.eps')
- os.remove(filename..'.pdf')
end
end
end
@@ -785,7 +781,7 @@ end
function Score:is_compiled()
if self['force-compilation'] then return false end
- return lfs.isfile(self.output..'.pdf') or self:count_systems(true) ~= 0
+ return lfs.isfile(self.output..'.pdf') or lfs.isfile(self.output..'.eps') or self:count_systems(true) ~= 0
end
function Score:is_odd_page() return tex.count['c@page'] % 2 == 1 end
@@ -799,11 +795,10 @@ function Score:lilypond_cmd()
input = self.output..".ly 2>&1"
mode = 'r'
end
- local cmd = '"'..self.program..'" '..
- "-dno-point-and-click "..
- "-djob-count=2 "..
- "-dno-delete-intermediate-files "
- if self['optimize-pdf'] and self:lilypond_has_TeXGS() then cmd = cmd.."-O TeX-GS " end
+ local cmd = '"'..self.program..'" '
+ .. (self.insert == "fullpage" and "" or "-E ")
+ .. "-dno-point-and-click -djob-count=2 -dno-delete-intermediate-files "
+ if self['optimize-pdf'] and self:lilypond_has_TeXGS() then cmd = cmd.."-O TeX-GS -dgs-never-embed-fonts " end
if self.input_file then
cmd = cmd..'-I "'..lib.dirname(self.input_file):gsub('^%./', lfs.currentdir()..'/')..'" '
end
@@ -844,6 +839,7 @@ function Score:ly_fixbadlycroppedstaffgroupbrackets()
(ly:grob-set-property! grob 'Y-extent
(cons (- (car Y-off) 1.7) (+ (cdr Y-off) 1.7)))))
}]]
+ or '%% no fix for badly cropped StaffGroup brackets'
end
function Score:ly_fonts()
@@ -859,6 +855,8 @@ function Score:ly_fonts()
self.sffamily,
self.ttfamily
)
+ else
+ return '%% fonts not set'
end
end
@@ -869,11 +867,16 @@ end
function Score:ly_indent()
if not (self.indent == false and self.insert == 'fullpage') then
return [[indent = ]]..(self.indent or 0)..[[\pt]]
+ else
+ return '%% no indent set'
end
end
function Score:ly_language()
- if self.language then return '\\language "'..self.language..'"' end
+ if self.language then return '\\language "'..self.language..'"'..[[
+
+]]
+ else return '' end
end
function Score:ly_linewidth() return self['line-width'] end
@@ -883,16 +886,16 @@ function Score:ly_staffsize() return self.staffsize end
function Score:ly_margins()
local horizontal_margins =
self.twoside and string.format([[
- inner-margin = %s\pt]], self:tex_margin_inner())
+ inner-margin = %f\pt]], self:tex_margin_inner())
or string.format([[
- left-margin = %s\pt]], self:tex_margin_left())
+ left-margin = %f\pt]], self:tex_margin_left())
local tex_top = self['extra-top-margin'] + self:tex_margin_top()
local tex_bottom = self['extra-bottom-margin'] + self:tex_margin_bottom()
if self.fullpagealign == 'crop' then
return string.format([[
- top-margin = %s\pt
- bottom-margin = %s\pt
+ top-margin = %f\pt
+ bottom-margin = %f\pt
%s]],
tex_top, tex_bottom, horizontal_margins
)
@@ -904,18 +907,18 @@ function Score:ly_margins()
bottom-margin = 0\pt
%s
top-system-spacing =
- #'((basic-distance . %s)
- (minimum-distance . %s)
+ #'((basic-distance . %f)
+ (minimum-distance . %f)
(padding . 0)
(stretchability . 0))
top-markup-spacing =
- #'((basic-distance . %s)
- (minimum-distance . %s)
+ #'((basic-distance . %f)
+ (minimum-distance . %f)
(padding . 0)
(stretchability . 0))
last-bottom-spacing =
- #'((basic-distance . %s)
- (minimum-distance . %s)
+ #'((basic-distance . %f)
+ (minimum-distance . %f)
(padding . 0)
(stretchability . 0))
]],
@@ -940,7 +943,7 @@ end
function Score:ly_paper()
local system_count =
- self['system-count'] == 0 and ''
+ self['system-count'] == '0' and ''
or 'system-count = '..self['system-count']..'\n '
local papersize = '#(set-paper-size "'..(self.papersize or 'lyluatexfmt')..'")'
@@ -949,33 +952,33 @@ function Score:ly_paper()
local pfpn = self['print-first-page-number'] and 't' or 'f'
local ppn = self['print-page-number'] and 't' or 'f'
return string.format([[
-%s%s
+ %s%s
print-page-number = ##%s
print-first-page-number = ##%s
- first-page-number = %s
+ first-page-number = %d
%s]],
- system_count, papersize, ppn, pfpn,
- first_page_number, self:ly_margins()
+ system_count, papersize, ppn, pfpn,
+ first_page_number, self:ly_margins()
)
else
- if self.papersize then
- papersize = papersize..[[
-]]
- else
- papersize = ''
- end
+ return string.format([[%s%s]], papersize..[[
- return string.format([[%s%s]], papersize, system_count)
+]], system_count)
end
end
function Score:ly_preamble()
+ local result = string.format(
+ [[#(set! paper-alist (cons '("lyluatexfmt" . (cons (* %f pt) (* %f pt))) paper-alist))]],
+ self.paperwidth, self.paperheight
+ )
if self.insert == 'fullpage' then
- return string.format(
- [[#(set! paper-alist (cons '("lyluatexfmt" . (cons (* %s pt) (* %s pt))) paper-alist))]],
- self.paperwidth, self.paperheight
- )
- else return [[\include "lilypond-book-preamble.ly"]]
+ return result
+ else
+ return result..[[
+
+
+\include "lilypond-book-preamble.ly"]]
end
end
@@ -984,11 +987,17 @@ function Score:ly_raggedright()
if self['ragged-right'] then return 'ragged-right = ##t'
else return 'ragged-right = ##f'
end
+ else
+ return '%% no alignment set'
end
end
function Score:ly_staffprops()
- local clef, timing, timesig, staff = '', '', '', ''
+ local clef, timing, timesig, staff =
+ '%% no clef set',
+ ' %% timing not suppressed',
+ ' %% no time signature set',
+ ' %% staff symbol not suppressed'
if self.noclef then clef = [[\context { \Staff \remove "Clef_engraver" }]] end
if self.notiming then timing = [[\context { \Score timing = ##f }]] end
if self.notimesig then timesig = [[\context { \Staff \remove "Time_signature_engraver" }]] end
@@ -1015,28 +1024,29 @@ function Score:optimize_pdf()
end,
'lyluatex optimize-pdf'
)
- end
- local pdf2ps, ps2pdf, path
- for file in lfs.dir(self.tmpdir) do
- path = self.tmpdir..'/'..file
- if path:match(self.output) and path:sub(-4) == '.pdf' then
- pdf2ps = io.popen(
- 'gs -q -sDEVICE=ps2write -sOutputFile=- -dNOPAUSE '..path..' -c quit',
- 'r'
- )
- ps2pdf = io.popen(
- 'gs -q -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile='..path..'-gs -',
- 'w'
- )
- if pdf2ps then
- ps2pdf:write(pdf2ps:read('*a'))
- pdf2ps:close()
- ps2pdf:close()
- os.rename(path..'-gs', path)
- else
- warn(
- [[You have asked for pdf optimization, but gs wasn't found.]]
+ else
+ local pdf2ps, ps2pdf, path
+ for file in lfs.dir(self.tmpdir) do
+ path = self.tmpdir..'/'..file
+ if path:match(self.output) and path:sub(-4) == '.pdf' then
+ pdf2ps = io.popen(
+ 'gs -q -sDEVICE=ps2write -sOutputFile=- -dNOPAUSE '..path..' -c quit',
+ 'r'
+ )
+ ps2pdf = io.popen(
+ 'gs -q -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile='..path..'-gs -',
+ 'w'
)
+ if pdf2ps then
+ ps2pdf:write(pdf2ps:read('*a'))
+ pdf2ps:close()
+ ps2pdf:close()
+ os.rename(path..'-gs', path)
+ else
+ warn(
+ [[You have asked for pdf optimization, but gs wasn't found.]]
+ )
+ end
end
end
end
@@ -1081,9 +1091,9 @@ points to a valid LilyPond executable.
err(warning)
end
end
- -- with bbox.read check_protrusion will only execute with
+ -- with bbox_read check_protrusion will only execute with
-- a prior compilation, otherwise it will be ignored
- local do_compile = not self:check_protrusion(bbox.read)
+ local do_compile = not self:check_protrusion(bbox_read)
if self['force-compilation'] or do_compile then
repeat
self.complete_ly_code = self:header()..self:content()..self:footer()
@@ -1094,7 +1104,7 @@ points to a valid LilyPond executable.
self:clean_failed_compilation()
break
end
- until self:check_protrusion(bbox.get)
+ until self:check_protrusion(bbox_get)
self:optimize_pdf()
else table.insert(self.output_names, self.output)
end
@@ -1112,9 +1122,9 @@ end
function Score:run_lily_proc(p)
if self.debug then
- local f = io.open(self.output..".log", 'w')
- f:write(p:read('*a'))
- f:close()
+ local f = io.open(self.output..".log", 'w')
+ f:write(p:read('*a'))
+ f:close()
else p:write(self.complete_ly_code)
end
return p:close()
@@ -1127,6 +1137,11 @@ function Score:run_lilypond()
self.debug = true
self.lilypond_error = not self:run_lily_proc(io.popen(self:lilypond_cmd(self.complete_ly_code)))
end
+ local lilypond_pdf, mode = self:lilypond_cmd(self.complete_ly_code)
+ if lilypond_pdf:match"-E" then
+ lilypond_pdf = lilypond_pdf:gsub(" %-E", " --pdf")
+ self:run_lily_proc(io.popen(lilypond_pdf, mode))
+ end
end
function Score:tex_margin_bottom()
@@ -1140,7 +1155,7 @@ end
function Score:tex_margin_inner()
self._tex_margin_inner = self._tex_margin_inner or
lib.convert_unit((
- tex.sp('1in') + tex.dimen.oddsidemargin + tex.dimen.hoffset
+ tex.sp('1in') + tex.dimen.oddsidemargin + tex.dimen.hoffset
)..'sp')
return self._tex_margin_inner
end
@@ -1174,16 +1189,16 @@ function Score:tex_margin_top()
end
function Score:write_latex(do_compile)
- latex.filename(self.printfilename, self.insert, self.input_file)
- latex.verbatim(self.verbatim, self.ly_code, self.intertext, self.addversion)
+ latex_filename(self.printfilename, self.insert, self.input_file)
+ latex_verbatim(self.verbatim, self.ly_code, self.intertext, self.addversion)
if do_compile and not self:check_compilation() then return end
--[[ Now we know there is a proper score --]]
- latex.fullpagestyle(self.fullpagestyle, self['print-page-number'])
- latex.label(self.label, self.labelprefix)
+ latex_fullpagestyle(self.fullpagestyle, self['print-page-number'])
+ latex_label(self.label, self.labelprefix)
if self.insert == 'fullpage' then
- latex.includepdf(self.output, self.range, self.papersize)
+ latex_includepdf(self.output, self.range, self.papersize)
elseif self.insert == 'systems' then
- latex.includesystems(
+ latex_includesystems(
self.output, self.range, self.protrusion_left,
self.leftgutter, self.staffsize, self.indent_offset
)
@@ -1196,7 +1211,7 @@ This will probably cause bad output.]]
end
local bb = self:bbox(1)
if bb then
- latex.includeinline(
+ latex_includeinline(
self.output, bb.height, self.valign, self.hpadding, self.voffset
)
end
@@ -1342,20 +1357,20 @@ end
function ly.set_fonts(rm, sf, tt)
-if ly.score.rmfamily..ly.score.sffamily..ly.score.ttfamily ~= '' then
- ly.score['pass-fonts'] = 'true'
- info("At least one font family set explicitly. Activate 'pass-fonts'")
-end
- if ly.score.rmfamily == '' then ly.score.rmfamily = ly.get_font_family(rm)
- else
- -- if explicitly set don't override rmfamily with 'current' font
- if ly.score['current-font-as-main'] then
- info("rmfamily set explicitly. Deactivate 'current-font-as-main'")
- end
- ly.score['current-font-as-main'] = false
- end
- if ly.score.sffamily == '' then ly.score.sffamily = ly.get_font_family(sf) end
- if ly.score.ttfamily == '' then ly.score.ttfamily = ly.get_font_family(tt) end
+ if ly.score.rmfamily..ly.score.sffamily..ly.score.ttfamily ~= '' then
+ ly.score['pass-fonts'] = 'true'
+ info("At least one font family set explicitly. Activate 'pass-fonts'")
+ end
+ if ly.score.rmfamily == '' then ly.score.rmfamily = ly.get_font_family(rm)
+ else
+ -- if explicitly set don't override rmfamily with 'current' font
+ if ly.score['current-font-as-main'] then
+ info("rmfamily set explicitly. Deactivate 'current-font-as-main'")
+ end
+ ly.score['current-font-as-main'] = false
+ end
+ if ly.score.sffamily == '' then ly.score.sffamily = ly.get_font_family(sf) end
+ if ly.score.ttfamily == '' then ly.score.ttfamily = ly.get_font_family(tt) end
end
diff --git a/support/lyluatex/lyluatex.pdf b/support/lyluatex/lyluatex.pdf
index adc9003791..8f546a0f9b 100644
--- a/support/lyluatex/lyluatex.pdf
+++ b/support/lyluatex/lyluatex.pdf
Binary files differ
diff --git a/support/lyluatex/lyluatex.sty b/support/lyluatex/lyluatex.sty
index f0d70d9878..e0108513d9 100644
--- a/support/lyluatex/lyluatex.sty
+++ b/support/lyluatex/lyluatex.sty
@@ -1,22 +1,20 @@
%Lyluatex LaTeX style.
%
-% Copyright (C) 2015-2019 jperon and others (see CONTRIBUTORS.md)
+% Copyright (C) 2015-2022 jperon and others (see CONTRIBUTORS.md)
% License: MIT
% This file is part of lyluatex.
\NeedsTeXFormat{LaTeX2e}%
-\ProvidesPackage{lyluatex}[2019/05/27 v1.0f] %%LYLUATEX_DATE LYLUATEX_VERSION
+\ProvidesPackage{lyluatex}[2022/10/30 v1.1] %%LYLUATEX_DATE LYLUATEX_VERSION
% Dependencies
-\RequirePackage{luatexbase}
-\RequirePackage{luaotfload}
-\RequirePackage{xkeyval}
\RequirePackage{graphicx}
\RequirePackage{minibox}
\RequirePackage{environ}
\RequirePackage{currfile}
\RequirePackage{pdfpages}
\IfFileExists{varwidth.sty}{\RequirePackage{varwidth}}{}
+\RequirePackage{luaoptions}
\RequirePackage{metalogo}
\newcommand{\lyluatex}{\textit{ly}\LuaTeX}
@@ -43,10 +41,8 @@
% Options
\catcode`-=11
\directlua{
- local _opt = require(
- kpse.find_file("lyluatex-options.lua") or "lyluatex-options.lua"
- )
- ly_opts = _opt.Opts:new('ly_opts', {
+ local _opt = lua_options
+ lua_options.register('ly', {
['addversion'] = {'false', 'true', ''},
['autoindent'] = {'true', 'false', ''},
['cleantmp'] = {'false', 'true', ''},
@@ -133,7 +129,7 @@
\directlua{
ly = require(kpse.find_file("lyluatex.lua") or "lyluatex.lua")
ly.make_list_file()
- if ly_opts.cleantmp then
+ if lua_options.client('ly').cleantmp then
luatexbase.add_to_callback('stop_run', ly.clean_tmp_dir, 'lyluatex cleantmp')
luatexbase.add_to_callback('stop_run', ly.conclusion_text, 'lyluatex conclusion')
end
@@ -157,9 +153,6 @@
\setlength{\hfuzz}{\ly@old@hfuzz}%
}
-% Command to change options during the document
-\newcommand{\lysetoption}[2]{\directlua{ly_opts:set_option([[#1]], [[#2]])}}
-
% How the filename of a score will look like (if printed)
\newcommand{\lyFilename}[1]{\noindent #1\par\bigskip}
@@ -174,7 +167,9 @@
% *current* font for optional use.
\newcommand{\ly@currentfonts}{%
\begingroup%
- \directlua{ly_opts:set_option('current-font', ly.get_font_family(font.current()))}%
+ \setluaoption{ly}{current-font}{%
+ \directlua{ly.get_font_family(font.current())}
+ }
\rmfamily \edef\rmfamilyid{\fontid\font}%
\sffamily \edef\sffamilyid{\fontid\font}%
\ttfamily \edef\ttfamilyid{\fontid\font}%
@@ -188,9 +183,9 @@
% Score processing
\newcommand*{\ly@compilescore}[1]{%
\ly@setunits%
+ \setluaoption{ly}{currfiledir}{\currfiledir}
+ \setluaoption{ly}{twoside}{\ly@istwosided}
\directlua{
- ly_opts:set_option('currfiledir', [[\currfiledir]])
- ly_opts:set_option('twoside', '\ly@istwosided')
#1
ly.newpage_if_fullpage()
}%
diff --git a/support/lyluatex/lyluatex.tex b/support/lyluatex/lyluatex.tex
index aaa95d7848..a804663555 100644
--- a/support/lyluatex/lyluatex.tex
+++ b/support/lyluatex/lyluatex.tex
@@ -1,38 +1,45 @@
-\PassOptionsToPackage{unicode=true}{hyperref} % options for packages loaded elsewhere
+% Options for packages loaded elsewhere
+\PassOptionsToPackage{unicode}{hyperref}
\PassOptionsToPackage{hyphens}{url}
%
-\documentclass[]{lyluatexmanual}
+\documentclass[
+]{lyluatexmanual}
+\usepackage{amsmath,amssymb}
\usepackage[]{libertine}
-\usepackage{amssymb,amsmath}
-\usepackage{ifxetex,ifluatex}
-\usepackage{fixltx2e} % provides \textsubscript
-\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex
+\usepackage{iftex}
+\ifPDFTeX
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
- \usepackage{textcomp} % provides euro and other symbols
-\else % if luatex or xelatex
+ \usepackage{textcomp} % provide euro and other symbols
+\else % if luatex or xetex
\usepackage{unicode-math}
- \defaultfontfeatures{Ligatures=TeX,Scale=MatchLowercase}
+ \defaultfontfeatures{Scale=MatchLowercase}
+ \defaultfontfeatures[\rmfamily]{Ligatures=TeX,Scale=1}
\fi
-% use upquote if available, for straight quotes in verbatim environments
+% Use upquote if available, for straight quotes in verbatim environments
\IfFileExists{upquote.sty}{\usepackage{upquote}}{}
-% use microtype if available
-\IfFileExists{microtype.sty}{%
-\usepackage[]{microtype}
-\UseMicrotypeSet[protrusion]{basicmath} % disable protrusion for tt fonts
+\IfFileExists{microtype.sty}{% use microtype if available
+ \usepackage[]{microtype}
+ \UseMicrotypeSet[protrusion]{basicmath} % disable protrusion for tt fonts
}{}
-\IfFileExists{parskip.sty}{%
-\usepackage{parskip}
-}{% else
-\setlength{\parindent}{0pt}
-\setlength{\parskip}{6pt plus 2pt minus 1pt}
-}
-\usepackage{hyperref}
+\makeatletter
+\@ifundefined{KOMAClassName}{% if non-KOMA class
+ \IfFileExists{parskip.sty}{%
+ \usepackage{parskip}
+ }{% else
+ \setlength{\parindent}{0pt}
+ \setlength{\parskip}{6pt plus 2pt minus 1pt}}
+}{% if KOMA class
+ \KOMAoptions{parskip=half}}
+\makeatother
+\usepackage{xcolor}
+\IfFileExists{xurl.sty}{\usepackage{xurl}}{} % add URL line breaks if available
+\IfFileExists{bookmark.sty}{\usepackage{bookmark}}{\usepackage{hyperref}}
\hypersetup{
- pdfauthor={Fr. Jacques Peron; Urs Liska; Br. Samuel Springuel},
- pdfborder={0 0 0},
- breaklinks=true}
-\urlstyle{same} % don't use monospace font for urls
+ pdfauthor={Fr.~Jacques Peron; Urs Liska; Br. Samuel Springuel},
+ hidelinks,
+ pdfcreator={LaTeX via pandoc}}
+\urlstyle{same} % disable monospaced font for URLs
\usepackage{color}
\usepackage{fancyvrb}
\newcommand{\VerbBar}{|}
@@ -44,7 +51,7 @@
\newcommand{\AnnotationTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{#1}}}}
\newcommand{\AttributeTok}[1]{\textcolor[rgb]{0.49,0.56,0.16}{#1}}
\newcommand{\BaseNTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{#1}}
-\newcommand{\BuiltInTok}[1]{#1}
+\newcommand{\BuiltInTok}[1]{\textcolor[rgb]{0.00,0.50,0.00}{#1}}
\newcommand{\CharTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{#1}}
\newcommand{\CommentTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textit{#1}}}
\newcommand{\CommentVarTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{#1}}}}
@@ -57,7 +64,7 @@
\newcommand{\ExtensionTok}[1]{#1}
\newcommand{\FloatTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{#1}}
\newcommand{\FunctionTok}[1]{\textcolor[rgb]{0.02,0.16,0.49}{#1}}
-\newcommand{\ImportTok}[1]{#1}
+\newcommand{\ImportTok}[1]{\textcolor[rgb]{0.00,0.50,0.00}{\textbf{#1}}}
\newcommand{\InformationTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{#1}}}}
\newcommand{\KeywordTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{\textbf{#1}}}
\newcommand{\NormalTok}[1]{#1}
@@ -71,30 +78,23 @@
\newcommand{\VariableTok}[1]{\textcolor[rgb]{0.10,0.09,0.49}{#1}}
\newcommand{\VerbatimStringTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{#1}}
\newcommand{\WarningTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{#1}}}}
-\setlength{\emergencystretch}{3em} % prevent overfull lines
+\setlength{\emergencystretch}{3em} % prevent overfull lines
\providecommand{\tightlist}{%
\setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}}
-\setcounter{secnumdepth}{0}
-% Redefines (sub)paragraphs to behave more like sections
-\ifx\paragraph\undefined\else
-\let\oldparagraph\paragraph
-\renewcommand{\paragraph}[1]{\oldparagraph{#1}\mbox{}}
-\fi
-\ifx\subparagraph\undefined\else
-\let\oldsubparagraph\subparagraph
-\renewcommand{\subparagraph}[1]{\oldsubparagraph{#1}\mbox{}}
+\setcounter{secnumdepth}{-\maxdimen} % remove section numbering
+\ifLuaTeX
+ \usepackage{selnolig} % disable illegal ligatures
\fi
-% set default figure placement to htbp
+\title{\lyluatex}
+\usepackage{etoolbox}
\makeatletter
-\def\fps@figure{htbp}
+\providecommand{\subtitle}[1]{% add subtitle to \maketitle
+ \apptocmd{\@title}{\par {\large #1 \par}}{}{}
+}
\makeatother
-
-
-\title{\lyluatex}
-\providecommand{\subtitle}[1]{}
-\subtitle{1.0f}
-\author{Fr. Jacques Peron \and Urs Liska \and Br. Samuel Springuel}
+\subtitle{1.1}
+\author{Fr.~Jacques Peron \and Urs Liska \and Br. Samuel Springuel}
\date{\lyluatexmanualdate}
\begin{document}
@@ -317,8 +317,8 @@ Linux with TeXLive:
\begin{Shaded}
\begin{Highlighting}[]
-\ExtensionTok{%}\NormalTok{ export shell_escape_commands=}\VariableTok{$(}\ExtensionTok{kpsewhich}\NormalTok{ -expand-var }\StringTok{'$shell_escape_commands'}\VariableTok{)}\NormalTok{,lilypond,gs}
-\ExtensionTok{%}\NormalTok{ lualatex --shell-restricted DOCUMENT.tex}
+\ExtensionTok{\%}\NormalTok{ export shell\_escape\_commands=}\VariableTok{$(}\ExtensionTok{kpsewhich} \AttributeTok{{-}expand{-}var} \StringTok{\textquotesingle{}$shell\_escape\_commands\textquotesingle{}}\VariableTok{)}\NormalTok{,lilypond,gs}
+\ExtensionTok{\%}\NormalTok{ lualatex }\AttributeTok{{-}{-}shell{-}restricted}\NormalTok{ DOCUMENT.tex}
\end{Highlighting}
\end{Shaded}
@@ -347,13 +347,13 @@ The basic mode of inserting scores into text documents is the
\KeywordTok{\textbackslash{}score} \KeywordTok{\{}
\KeywordTok{\textbackslash{}new} \DataTypeTok{ChoirStaff}\NormalTok{ \textbackslash{}with}\KeywordTok{ \{}
\DataTypeTok{instrumentName}\NormalTok{ = "}\StringTok{2 Fl."}
- \KeywordTok{\}} \KeywordTok{<<}
- \KeywordTok{\textbackslash{}new} \DataTypeTok{Staff} \FunctionTok{\textbackslash{}transpose c c'} \FunctionTok{\textbackslash{}music}
+ \KeywordTok{\}} \KeywordTok{\textless{}\textless{}}
+ \KeywordTok{\textbackslash{}new} \DataTypeTok{Staff} \FunctionTok{\textbackslash{}transpose c c\textquotesingle{}} \FunctionTok{\textbackslash{}music}
\KeywordTok{\textbackslash{}new} \DataTypeTok{Staff} \KeywordTok{\{}
\FunctionTok{\textbackslash{}clef bass}
\FunctionTok{\textbackslash{}music}
\KeywordTok{\}}
- \KeywordTok{>>}
+ \KeywordTok{\textgreater{}\textgreater{}}
\KeywordTok{\}}
\FunctionTok{\textbackslash{}end}\KeywordTok{\{}\NormalTok{lilypond}\KeywordTok{\}}
\end{Highlighting}
@@ -510,23 +510,23 @@ arguments to the individual command or environments:
\begin{Highlighting}[]
\FunctionTok{\textbackslash{}lilypondfile}\NormalTok{[key1=value1]\{path/to/file.ly\}}
-\FunctionTok{\textbackslash{}lilypond}\NormalTok{[key1=value1]\{ c' d' e' \}}
+\FunctionTok{\textbackslash{}lilypond}\NormalTok{[key1=value1]\{ c\textquotesingle{} d\textquotesingle{} e\textquotesingle{} \}}
\KeywordTok{\textbackslash{}begin}\NormalTok{\{}\ExtensionTok{lilypond}\NormalTok{\}[key1=value1]}
\NormalTok{\{}
-\NormalTok{ c' d' e'}
+\NormalTok{ c\textquotesingle{} d\textquotesingle{} e\textquotesingle{}}
\NormalTok{\}}
\KeywordTok{\textbackslash{}end}\NormalTok{\{}\ExtensionTok{lilypond}\NormalTok{\}}
\end{Highlighting}
\end{Shaded}
-\lyCmd{lysetoption}
+\lyCmd{setluaoption{ly}}
At any place in the document the value of an option can be changed using
\begin{Shaded}
\begin{Highlighting}[]
-\FunctionTok{\textbackslash{}lysetoption}\NormalTok{\{key\}\{new-value\}}
+\FunctionTok{\textbackslash{}setluaoption}\NormalTok{\{ly\}\{key\}\{new{-}value\}}
\end{Highlighting}
\end{Shaded}
@@ -756,7 +756,7 @@ detail.
If not stated otherwise dimensions can be given in arbitrary \TeX~units,
e.g. \texttt{200pt}, \texttt{1ex} or \texttt{3cm} or as \TeX~lengths,
-e.g. \texttt{0.4\textbackslash{}textwidth}.
+e.g.~\texttt{0.4\textbackslash{}textwidth}.
\hypertarget{general}{%
\paragraph{General}\label{general}}
@@ -1169,7 +1169,7 @@ example:
\begin{Shaded}
\begin{Highlighting}[]
-\FunctionTok{\textbackslash{}lilypond}\NormalTok{\{a' b' c'\}}
+\FunctionTok{\textbackslash{}lilypond}\NormalTok{\{a\textquotesingle{} b\textquotesingle{} c\textquotesingle{}\}}
\end{Highlighting}
\end{Shaded}
@@ -1372,8 +1372,8 @@ monospace:
\begin{Shaded}
\begin{Highlighting}[]
-\FunctionTok{\textbackslash{}renewcommand}\NormalTok{\{}\ExtensionTok{\textbackslash{}lyFilename}\NormalTok{\}[1]\{}\CommentTok{%}
-\FunctionTok{\textbackslash{}noindent} \FunctionTok{\textbackslash{}texttt}\NormalTok{\{#1\}}\FunctionTok{\textbackslash{}par\textbackslash{}bigskip}\CommentTok{%}
+\FunctionTok{\textbackslash{}renewcommand}\NormalTok{\{}\ExtensionTok{\textbackslash{}lyFilename}\NormalTok{\}[1]\{}\CommentTok{\%}
+\FunctionTok{\textbackslash{}noindent} \FunctionTok{\textbackslash{}texttt}\NormalTok{\{\#1\}}\FunctionTok{\textbackslash{}par\textbackslash{}bigskip}\CommentTok{\%}
\NormalTok{\}}
\end{Highlighting}
\end{Shaded}
@@ -1425,8 +1425,8 @@ indent and prints the text blue:
\begin{Shaded}
\begin{Highlighting}[]
-\FunctionTok{\textbackslash{}renewcommand}\NormalTok{\{}\ExtensionTok{\textbackslash{}lyIntertext}\NormalTok{\}[1]\{}\CommentTok{%}
-\FunctionTok{\textbackslash{}noindent} \FunctionTok{\textbackslash{}textcolor}\NormalTok{\{blue\}\{#1\}}\FunctionTok{\textbackslash{}par\textbackslash{}bigskip}\CommentTok{%}
+\FunctionTok{\textbackslash{}renewcommand}\NormalTok{\{}\ExtensionTok{\textbackslash{}lyIntertext}\NormalTok{\}[1]\{}\CommentTok{\%}
+\FunctionTok{\textbackslash{}noindent} \FunctionTok{\textbackslash{}textcolor}\NormalTok{\{blue\}\{\#1\}}\FunctionTok{\textbackslash{}par\textbackslash{}bigskip}\CommentTok{\%}
\NormalTok{\}}
\end{Highlighting}
\end{Shaded}
@@ -1452,11 +1452,11 @@ match today is to use the \texttt{TeX} highlighting of the
\begin{Shaded}
\begin{Highlighting}[]
-\CommentTok{% In the document header:}
+\CommentTok{\% In the document header:}
\BuiltInTok{\textbackslash{}usepackage}\NormalTok{\{}\ExtensionTok{minted}\NormalTok{\}}
-\CommentTok{% anywhere in the header or the body:}
-\FunctionTok{\textbackslash{}lysetverbenv}\NormalTok{\{}\KeywordTok{\textbackslash{}begin}\NormalTok{\{}\ExtensionTok{minted}\NormalTok{\}\{TeX\}\}\{\textbackslash{}end\{minted\}\}}
+\CommentTok{\% anywhere in the header or the body:}
+\FunctionTok{\textbackslash{}lysetverbenv}\NormalTok{\{}\KeywordTok{\textbackslash{}begin}\NormalTok{\{}\ExtensionTok{minted}\NormalTok{\}\{TeX\}}\VerbatimStringTok{\}\{}\KeywordTok{\textbackslash{}end}\NormalTok{\{}\ExtensionTok{minted}\NormalTok{\}\}}
\end{Highlighting}
\end{Shaded}
@@ -1505,9 +1505,9 @@ absolute paths in that process.
\begin{Shaded}
\begin{Highlighting}[]
-\FunctionTok{\textbackslash{}lysetoption}\NormalTok{\{includepaths\}\{}\FunctionTok{\textbackslash{}string}\NormalTok{~/lilypond-lib\}}
+\FunctionTok{\textbackslash{}setluaoption}\NormalTok{\{ly\}\{includepaths\}\{}\FunctionTok{\textbackslash{}string}\NormalTok{\textasciitilde{}/lilypond{-}lib\}}
-\FunctionTok{\textbackslash{}lilypondfile}\NormalTok{[includepaths=\{}\FunctionTok{\textbackslash{}string}\NormalTok{~/lilypond-lib,/home/johndoe/project-lib\}]}
+\FunctionTok{\textbackslash{}lilypondfile}\NormalTok{[includepaths=\{}\FunctionTok{\textbackslash{}string}\NormalTok{\textasciitilde{}/lilypond{-}lib,/home/johndoe/project{-}lib\}]}
\end{Highlighting}
\end{Shaded}
@@ -1774,22 +1774,31 @@ Those examples and others may be found in
\addcontentsline{toc}{subsection}{Insert Systems}
\hypertarget{insert-systems}{}
+
\section*{Insert System-by-System}
+
By default scores defined by the \option{lilypond} environment or the \cmd{lilypondfile} command are inserted as a sequence of systems.
+
\lyluatex\ determines the vertical space between the systems as a flexible length calculated from the \emph{staff size} of the score (as opposed to from the font size) to produce an regular-looking vertical spacing:
+
\begin{lilypond}[]
{
\repeat unfold 30 { c' d' e' d' }
}
\end{lilypond}
+
The following score has a significantly smaller staff size, and consequently the inter-system space is reduced:
+
\begin{lilypond}[staffsize=12]
{
\repeat unfold 36 { c' d' e' d' }
}
\end{lilypond}
+
\subsection*{Before and After the Score}
+
\cmd{preLilyPondExample} and \cmd{postLilyPondExample} allow some code to be printed before and after the score. This may for example be used to wrap the resulting score in an environment. In the following example rules are printed:
+
\def\preLilyPondExample{%
\par\bigskip
\noindent Before the score:
@@ -1798,35 +1807,43 @@ The following score has a significantly smaller staff size, and consequently the
\par\bigskip
\hrule\par\medskip\noindent After the score
\par\bigskip}
+
\begin{verbatim}
\newcommand{\preLilyPondExample}{%
\par\bigskip
\noindent Before the score:
\par\medskip\hrule\par\medskip}
+
\newcommand{\postLilyPondExample}{%
\par\bigskip
\hrule\par\medskip\noindent After the score
\par\bigskip}
\end{verbatim}
+
\begin{lilypond}[]
{
\repeat unfold 30 { c' d' e' d' }
}
\end{lilypond}
+
\subsection*{Configuring the Inter-System Content}
+
\let\preLilyPondExample\undefined
\let\postLilyPondExample\undefined
+
Using \cmd{betweenLilyPondSystem} it is possible to define a macro that is
expanded between each system pair. It is given the index of the previous system
as an argument to work with. The following example simply prints that index
between the systems, but with some programming more complicated and useful
things could be done, for example printing a rule after every third system or
conditionally insert a page break.
+
\def\betweenLilyPondSystem#1{%
\begin{center}
System #1
\end{center}
}
+
\begin{verbatim}
\newcommand{\betweenLilyPondSystem}[1]{%
\begin{center}
@@ -1834,42 +1851,53 @@ System #1
\end{center}
}
\end{verbatim}
+
\bigskip
+
\begin{lilypond}[]
{
\repeat unfold 30 { c' d' e' d' }
}
\end{lilypond}
+
\let\betweenLilyPondSystem\undefined
+
\addcontentsline{toc}{subsection}{Insert Inline}
\hypertarget{insert-inline}{}
+
\section*{Insert Scores Inline}
+
With the \option{insert=inline} option it is simple to insert arbitrary
notational fragments in the \lilypond{ e'8 d'16 e' } continuous text of a
document. By default the staffsize is scaled to be 2/3 of the staffsize a
regular score would have at this point. This means if the \option{staffsize}
option is modified globally or locally then the staffsize of the inline score is
changed too.
+
In order to make the size of inline scores independent from the regular
staffsize the option \option{inline-staffsize} can be used the same way as
\option{staffsize}. \lilypond[inline-staffsize=8]{ e'8 d'16 e' } has the inline
staffsize manually set to \texttt{8}.
+
\paragraph{Alignment and padding} By default inline scores are vertically
centered to a line 1/2em above the text's baseline. \lilypond[valign=top]{ e'8
d'16 e' } but the score can also be aligned \lilypond[valign=bottom]{ e'8 d'16
e' } to the top or the baseline of the text.
+
Unfortunately this can only consider the borders of the \emph{image} and not
those of the \emph{score} or the staff lines. To alleviate this situation a
specific vertical offset can be given with \option{voffset=-3pt} (or any other
\TeX\ lengths). This offset is calculated after the alignment.
\lilypond[valign=bottom,voffset=-6pt]{ e'8 d'16 e' } is inserted with
\option{valign=bottom,voffset=-4pt}.
+
Horizontally inline scores are padded by \option{hpadding=0.75ex} -- except if
they happen to appear at the beginning or end of a line, as can be seen in the
last score in the previous paragraph. \lilypond[hpadding=2em]{ e'8 d'16 e' }
Increasing the \option{hpadding} will ensure more space around the score.
+
\paragraph{Bare Inline scores} \option{insert=bare-inline} will remove all the
staff elements (staff symbol, time signature, clef) by implicitly applying
\option{nostaff}, which is most useful for including notational symbols like
@@ -1885,121 +1913,165 @@ possibility of inserting arbitrary LilyPond material without having to prepare
precompiled PDF images.
+
\addcontentsline{toc}{subsection}{Choosing Systems}
\hypertarget{print-only}{}
+
\def\postLilyPondExample{\par\bigskip\hrule\par\bigskip}
+
\section*{Print only Selected Systems or Pages}
+
The \texttt{print-only} and \texttt{do-not-print} options allow to limit
the printed systems or pages from a score. A typical use case is to print
a score interspersed with comments. The advantage of this approach is that
the score is compiled only once while the individual systems are simply
reused by \LaTeX.
+
Throughout this document we'll demonstrate the different options to
select systems from the following score:
+
\lilypondfile[verbatim]{eight-systems.ly}
+
The simplest selection is a single system: \texttt{print-only=4}
+
\lilypondfile[print-only=4]{eight-systems.ly}
+
Ranges are also possible: \texttt{print-only=3-5}, with the special form of
\texttt{print-only=6-} which prints from the given system throughout the end of
the score. Negative ranges can be given with \texttt{print-only=7-5}
+
\lilypondfile[print-only=3-5]{eight-systems.ly}
+
\lilypondfile[print-only=6-]{eight-systems.ly}
+
\lilypondfile[print-only=7-5]{eight-systems.ly}
+
With a comma-separated list an arbitrary sequence of systems can be specified.
The list has to be enclosed in curly brackets: \texttt{print-only={4,1,2}}
+
\lilypondfile[print-only={4,1,2}]{eight-systems.ly}
+
Each element of the list can include any of the forms described above:\\
\texttt{print-only={3,5-7,4,7-}}
+
\lilypondfile[print-only={3,5-7,4,7-}]{eight-systems.ly}
+
\texttt{do-not-print} does the opposite: it prevents the list of systems from
being printed. It might be used alone, or in combination with
\texttt{print-only}:\\
\texttt{print-only=3-,do-not-print=6}
+
\lilypondfile[print-only=3-,do-not-print=6]{eight-systems.ly}
+
The functionality is identical with fullpage scores where the selection applies
to \emph{pages} instead. This can for example be used when the “score†file
contains a number of individual pieces (e.g. songs for a song book), and
individual selections are to be printed.
+
Systems have some specific behaviour with regard to \emph{indent},
but this is demonstrated in its own file \texttt{dynamic-indent.tex}.
+
\let\postLilyPondExample\undefined
+
\addcontentsline{toc}{subsection}{Dynamic Indent Handling}
\hypertarget{dynamic-indent}{}
+
\def\postLilyPondExample{\par\bigskip\hrule\par\bigskip}
+
\section*{Dynamic Indent}
+
This document demonstrates the use of \texttt{indent} and \texttt{autoindent},
partially in combination with \texttt{print-only}.
+
\texttt{indent=1cm} indents the first line, but if the resulting score contains
only one system this indent is suppressed (issuing a warning on the console):
+
\begin{lilypond}[indent=1cm]
\set Staff.instrumentName = "Violin"
\repeat unfold 12 { c' d' e' d' }
\end{lilypond}
+
\begin{lilypond}[indent=1cm]
{
\set Staff.instrumentName = "Violin"
c' d' e' d'
}
\end{lilypond}
+
If the output of a score which contains more than one system is limited to the
first system using \texttt{print-only=1} then the indent is removed but the
score is recompiled to ensure a full-length system. The following score shows
the two-system score from above (with \texttt{indent=1cm}), limited to its first
system:
+
\begin{lilypond}[indent=1cm,print-only=1]
\set Staff.instrumentName = "Violin"
\repeat unfold 12 { c' d' e' d' }
\end{lilypond}
+
Note that this behaviour also applies when \texttt{print-only} causes the first
system to be printed at another position, e.g. with \texttt{print-only={3,1,2}}.
In this case the indent of the first system is suppressed in order to avoid a
“holeâ€. Of course this is a corner case, but might be useful when a score
consists of separate entities (examples, exercises) per system.
+
\begin{lilypond}[indent=1cm,print-only={3,1,2},max-protrusion=0.5cm]
\repeat unfold 25 { c' d' e' d' }
\end{lilypond}
+
If a protrusion limit has been set with \texttt{max-protrusion=0.5cm} and the
score exceeds that limit in spite of \texttt{indent=1cm} then the whole score
will appropriately be narrowed:
+
\begin{lilypond}[indent=1cm,max-protrusion=0.5cm]
\set Staff.instrumentName = "Violin I. and II."
\repeat unfold 11 { c' d' e' d' }
\end{lilypond}
+
+
This doesn't really look good because the indentation of the second system
wouldn't have been necessary since only the first system exceeds the protrusion
limit. The solution to this situation is the option \texttt{autoindent} which
handles the indentation \emph{automatically} and set the indent to a value that
will make the \emph{first} system fit into the protrusion limit and leave the
remaining systems unchanged:
+
\begin{lilypond}[autoindent=true,max-protrusion=0.5cm]
\set Staff.instrumentName = "Violin I. and II."
\repeat unfold 11 { c' d' e' d' }
\end{lilypond}
+
+
However, if the protrusion limit is not only exceeded by the \emph{first} system
(which should be the typical case due to the instrument name) \texttt{lyluatex}
will deal with the situation by narrowing the \emph{whole} score by the
appropriate amount and adjusting the indent of the first system so all systems
will just fit into the protrusion limit:
+
\begin{lilypond}[autoindent=true,max-protrusion=0.5cm]
\set Staff.instrumentName = "Violin I. and II."
\set Staff.shortInstrumentName = "Violin I/II"
\repeat unfold 11 { c' d' e' d' }
\end{lilypond}
+
There is one special case to be mentioned. As described above the indent is
deactivated if the first system of a score is printed at a later position.
However, if this score will exceed the left protrusion limit \texttt{autoindent}
will be automatically activated to avoid having the \emph{whole} score narrowed:
+
\begin{lilypond}[indent=1cm,print-only={3,1,2},max-protrusion=0.5cm]
\set Staff.instrumentName = "Violin"
\repeat unfold 25 { c' d' e' d' }
\end{lilypond}
+
\paragraph{Right protrusion}
The dynamic handling of (automatic) indent also works correctly when there is
protrusion handling to the right. The following score has the ties manually
shaped to exceed the staff symbol by 10, and 7 staff spaces, and
\texttt{max-protrusion=1cm} .
+
\begin{lilypond}[nofragment,max-protrusion=1cm,]
{
\set Staff.instrumentName = "Violin 1 & 2"
@@ -2011,42 +2083,57 @@ shaped to exceed the staff symbol by 10, and 7 staff spaces, and
c'
}
\end{lilypond}
+
+
\paragraph{Performance considerations}
The handling of indent suppression may require up to four compilations of the
score, but these are handled automatically, and the resulting intermediate
stages of the score are cached just like the scores actually used in the
document.
+
The \texttt{autoindent} option is active by default but will be deactivated if
\texttt{indent} is set explicitly. It has to be noted that this option will add
more LilyPond compilations and therefore compilation time. But it will only
apply and be executed if the score exceeds the protrusion limit, so it can only
occur in circumstances where multiple LilyPond runs are expected anyway.
+
\let\postLilyPondExample\undefined
+
\addcontentsline{toc}{subsection}{Font Handling}
\hypertarget{fonts}{}
+
\defaultfontfeatures{Ligatures=TeX,Numbers=OldStyle,Scale=MatchLowercase}
\setmainfont{Linux Libertine O}
\setsansfont[BoldFont={Linux Biolinum O Bold}]{Linux Biolinum O}
\setmonofont{Inconsolata}
+
\section*{Font Handling}
+
To demonstrate the font handling features of \lyluatex\ we will repeatedly
include the following score from an external file. It includes roman (lyrics,
instrument name), sans (rehearsal mark), and mono (tempo) text, first using
LilyPond's built-in default fonts.
+
\lilypondfile[verbatim]{fonts}
+
\bigskip
The current document uses \option{fontspec} to set roman font to \emph{Linux
Libertine O}, sans font to \emph{Linux Biolinum O}, and mono font to
\emph{Inconsolata}. So if you compile this document yourself and don't have
these fonts installed you will receive unexpected results.
+
\subsection*{Passing Document Fonts to Score}
+
With \option{pass-fonts} the currently active font families for roman, sans, and
mono fonts are passed to LilyPond in order to achieve the most coherent
appearance between text and music.
+
\bigskip
+
\lilypondfile[pass-fonts]{fonts}
+
\bigskip
Note that LilyPond loads fonts differently than \LaTeX\ and can only make use of
fonts installed as system fonts, fonts that are only installed through a \LaTeX\
@@ -2054,11 +2141,14 @@ distribution are not accessible to it. That means that if the document fonts are
not installed system-wide (e.\,g. the default fonts) LilyPond will use rather
ugly fallback fonts. This can't be demonstrated here but the section about
explicitly setting font families will include an example.
+
The inherent problem of fallback fonts, especially with \LaTeX's default
settings, is the reason \option{pass-fonts} is inactive by default. But the
general recommendation is to set \option{pass-fonts} as package option if the
text document uses fonts that are available to LilyPond.
+
\bigskip
+
\sffamily \option{current-font-as-main} will use the font that is
\emph{currently} used for typesetting as LilyPond's main (roman) font. This can
make sure that the score's main font (and roman is usually the font used most in
@@ -2069,9 +2159,12 @@ is one of the two others. Additionally this \emph{may} introduce an
inconsistency not between the score and the surrounding text but between
different scores in a document. For all these reasons the option is by default
set to \texttt{false}.
+
\bigskip
\lilypondfile[pass-fonts,current-font-as-main]{fonts}
+
\subsection*{Setting Score Fonts Explicitly}
+
With \option{rmfamily}, \option{sffamily}, and \option{ttfamily} specific
families can be set to arbitrary fonts, independently from the text document.
For the following score \option{ttfamily=\{TeXGyre Adventor\}} is
@@ -2079,24 +2172,31 @@ used.\footnote{Note that this font (which is included in TeXLive) has to be
installed if you want to successfully compile this document.} Note that this
implicitly sets \option{pass-fonts=true}, and \emph{Linux Libertine O} and
\emph{Linux Biolinum O} are used from the text document.
+
\bigskip
\lilypondfile[ttfamily={TeXGyre Adventor}]{fonts}
+
\highlight{NOTE:} when \option{rmfamily} is set explicitly
\option{current-font-as-main} is forced to \texttt{false} to ensure that the
roman font is actually used. The next score sets \option{rmfamily=\{TeXGyre
Adventor\}} and \option{current-font-as-main}, and despite the current font still being \cmd{sffamily}
\emph{Adventor} is used as the score's main font:
+
\bigskip
\lilypondfile[current-font-as-main,rmfamily={TeXGyre Adventor}]{fonts}
+
\subsection*{LilyPond's Font Fallback}
+
If unavailable fonts are set in a LilyPond document they will \emph{silently} be
replaced with fallback fonts that tend to cause ugly results. This will be shown
by setting \option{rmfamily=FantasyFontOne}, \option{sffamily=FantasyFontTwo},
and \option{tfamily=FantasyFontThree}:
+
\bigskip
\lilypondfile[rmfamily=FantasyFontOne,%
sffamily=FantasyFontTwo,%
ttfamily=FantasyFontThree]{fonts}
+
This can happen in several contexts: apart from compiling the document on a
different computer where the used fonts are missing it is most likely to occur
with the \option{pass-fonts} option, when the text document uses internal
@@ -2104,6 +2204,7 @@ with the \option{pass-fonts} option, when the text document uses internal
family is specified explicitly with an option and the other families are passed
from the text document.
+
\defaultfontfeatures{Ligatures=TeX,Numbers=OldStyle,Scale=MatchLowercase}
\setmainfont{Linux Libertine O}
\setsansfont[BoldFont={Linux Biolinum O Bold}]{Linux Biolinum O}
@@ -2111,18 +2212,29 @@ from the text document.
\addcontentsline{toc}{subsection}{Wrapping Commands}
\hypertarget{wrappingcommands}{}
+
\VerbatimFootnotes
+
\section*{Wrapping Commands}
+
\subsection*{Command within commands}
+
\cmd{lily} can be wrapped within another command as usual:
+
\begin{verbatim}
\newcommand\mylily[2][1]{\lily[inline-staffsize=10, #1]{#2}}
+
This is \mylily[voffset=10pt]{a' b' c''} an example.
\end{verbatim}
+
\newcommand\mylily[2][1]{\lily[inline-staffsize=10, #1]{#2}}
+
This is \mylily[voffset=10pt]{a' b' c''} an example.\par
+
\subsection*{Environment within environments}
+
\emph{It isn't possible to wrap \highlight{ly} environment within a command.}\par
+
It's possible to wrap \highlight{ly} within and environment, but there are
several drawbacks\footnote{%
Those drawbacks are:
@@ -2140,8 +2252,10 @@ Those drawbacks are:
\end{itemize}
\end{itemize}%
}.
+
To avoid those drawbacks, \lyluatex\ defines a special command, \verb`\lynewenvironment`,
that behaves as you'd expect from \verb`\newenvironment`.
+
\begin{verbatim}
\lynewenvironment{myly}{%
This is \emph{my} lilypond environment.
@@ -2149,19 +2263,23 @@ that behaves as you'd expect from \verb`\newenvironment`.
}{%
\end{ly}
}
+
\begin{myly}
a b c
\end{myly}
\end{verbatim}
+
\newenvironment{myly}{%
This is \emph{my} lilypond environment.
\begin{ly}%
}{%
\end{ly}
}
+
\begin{myly}
a b c
\end{myly}
+
\begin{verbatim}
\lynewenvironment{lyfigure}[2][]{%
\edef\mycaption{#2}
@@ -2174,11 +2292,13 @@ that behaves as you'd expect from \verb`\newenvironment`.
\end{center}
\end{figure}
}
+
\begin{lyfigure}{This is a caption}
a' b' c
d' e' f
\end{lyfigure}
\end{verbatim}
+
\lynewenvironment{lyfigure}[2][]{%
\edef\mycaption{#2}
\begin{figure}
@@ -2190,10 +2310,12 @@ d' e' f
\end{center}
\end{figure}
}
+
\begin{lyfigure}{This is a caption}
a' b' c
d' e' f
\end{lyfigure}
+
\begin{verbatim}
\lynewenvironment{lyotherfigure}[1][]{%
\edef\option{#1}
@@ -2206,11 +2328,13 @@ d' e' f
\endcenter
\endfigure
}
+
\begin{lyotherfigure}
d' e' f
a' b' c
\end{lyotherfigure}
\end{verbatim}
+
\lynewenvironment{lyotherfigure}[1][]{%
\edef\option{#1}
\figure
@@ -2222,23 +2346,28 @@ a' b' c
\endcenter
\endfigure
}
+
\begin{lyotherfigure}
d' e' f
a' b' c
\end{lyotherfigure}
+
\begin{verbatim}
\begin{lyotherfigure}[This time with a caption]
d' e' f
a' b' c
\end{lyotherfigure}
\end{verbatim}
+
\begin{lyotherfigure}[This time with a caption]
d' e' f
a' b' c
\end{lyotherfigure}
+
\textbf{Important note:} \verb`\lynewenvironment` is intended to insert \LaTeX\ code before
and after the scores; due to the special behavior of \verb`ly` environment, it isn't possible
to insert \emph{LilyPond} code that way. So this won't work:
+
\begin{verbatim}
\lynewenvironment{myly}{%
\begin{ly}
@@ -2247,26 +2376,33 @@ to insert \emph{LilyPond} code that way. So this won't work:
\end{ly}
}
\end{verbatim}
+
To do such a thing, \lyluatex\ defines a command and four options:
\begin{itemize}
\item \verb`\lysavefrag` lets one save a LilyPond fragment to be re-used afterward;
\item \verb`include_header`, \verb`include_footer`, \verb`include_before_body` and \verb`include_after_body` options
let one insert such fragments at designed places within inserted score.
\end{itemize}
+
So this works:
+
\begin{verbatim}
\begin{lysavefrag}{head}
a b c
\end{lysavefrag}
+
\begin{lysavefrag}{foot}
g a' b
\end{lysavefrag}
+
\begin{lysavefrag}{mymark}
\mark \default
\end{lysavefrag}
+
\begin{lysavefrag}{mymark}
\mark \default
\end{lysavefrag}
+
begin{ly}[
include_before_body={head,mymark,head},
include_after_body=foot,
@@ -2274,17 +2410,22 @@ begin{ly}[
d e f
\end{ly}
\end{verbatim}
+
It's also possible to use \verb`\lynewenvironment` to wrap such a command:
+
\begin{verbatim}
\begin{lysavefrag}{head}
a b c
\end{lysavefrag}
+
\begin{lysavefrag}{foot}
g a' b
\end{lysavefrag}
+
\begin{lysavefrag}{mymark}
\mark \default
\end{lysavefrag}
+
\lynewenvironment{yourly}[1][]{%
{\centering test \par}
\begin{ly}[
@@ -2294,19 +2435,24 @@ g a' b
}{
\end{ly}
}
+
\begin{yourly}
d e f
\end{yourly}
\end{verbatim}
+
\begin{lysavefrag}{head}
a b c
\end{lysavefrag}
+
\begin{lysavefrag}{foot}
g a' b
\end{lysavefrag}
+
\begin{lysavefrag}{mymark}
\mark \default
\end{lysavefrag}
+
\lynewenvironment{yourly}[1][]{%
{\centering test \par}
\begin{ly}[
@@ -2316,27 +2462,34 @@ g a' b
}{
\end{ly}
}
+
\begin{yourly}
d e f
\end{yourly}
+
\addcontentsline{toc}{subsection}{Wrapping Raw PDF Filenames}
\hypertarget{insert-raw-pdf}{}
+
\section*{Wrapping Raw PDF Filenames}
+
With the \option{raw-pdf} option it is possible to create wrapping commands that
circumvent \lyluatex's layout considerations by working with the raw PDF
filename of the generated score. This is especially useful for developing
packages or personal class and style files. For this scores generated with
\option{raw-pdf} define a command \cmd{lyscore} that can be used in the wrapping
commands or environments.
+
All examples in this document could also be realized using “default†\lyluatex\
without \option{raw-pdf}, but they are intended to show how this low-level
access can be used to retrieve the information from the generated score in order
to build custom versions of commands that don't have to adhere to \lyluatex's
pre-built strategies of including the score in the document
+
The easiest way to use a “raw†score is to simply access \cmd{lyscore} in a
command and pass it to an \cmd{includegraphics} macro:
+
\begin{verbatim}
\newcommand\lilyinline[2][]{%
\lily[raw-pdf,%
@@ -2348,27 +2501,33 @@ command and pass it to an \cmd{includegraphics} macro:
\includegraphics{\lyscore{}}%
}
\end{verbatim}
+
\newcommand\lilyinline[2][]{%
\lily[raw-pdf,insert=bare-inline,inline-staffsize=8,hpadding=0.25ex,#1]{
\omit Stem
#2}%
\includegraphics{\lyscore{}}%
}
+
This basically is a way to provide pre-configured commands. In this case
\lilyinline{ c'8 d' c' d'} it is used to pre-configure an inline
type, entered as \verb+\lilyinline{ c'8 d' c' d'}+.
+
+
\bigskip \cmd{lyscore} takes one mandatory argument which can be empty -- as in
the example above --, receive a number, one of the keywords \texttt{nsystems}
and \texttt{hoffset}, or any of the score's options. If passed a number it will
return the filename of the N-th system. With \texttt{nsystems} the number of
systems in the generated score will be returned, while \texttt{hoffset}
generates the code that shifts the score to the left to accommodate protrusion.
+
The following example takes an optional argument with options that are passed to
\lyluatex, and one mandatory argument which expects the system to be used. It
prints the given system centered in a figure and uses the file name as the
caption and makes use of the score's \texttt{label}. Figure \ref{centered} shows
the centering of a short fragment, figure \ref{fifth} the selection of the fifth
system from a larger score.
+
\begin{verbatim}
\newenvironment{centeredlilypondsystem}[2][]{%
\def\usesystem{#2}
@@ -2383,13 +2542,16 @@ system from a larger score.
\end{center}
\end{figure}
}
+
\begin{centeredlilypondsystem}[label=centered]{1}
c'1 d' e'
\end{centeredlilypondsystem}
+
\begin{centeredlilypondsystem}[label=fifth]{5}
\repeat unfold 8 { c'1 \break }
\end{centeredlilypondsystem}
\end{verbatim}
+
\newenvironment{centeredlilypondsystem}[2][]{%
\def\usesystem{#2}
\begin{figure}
@@ -2403,17 +2565,22 @@ system from a larger score.
\end{center}
\end{figure}
}
+
\begin{centeredlilypondsystem}[label=centered]{1}
c'1 d' e'
\end{centeredlilypondsystem}
+
\begin{centeredlilypondsystem}[label=fifth]{5}
\repeat unfold 8 { c'1 \break }
\end{centeredlilypondsystem}
+
+
Finally there's an example showing how to iterate over the systems of a score
using \cmd{foreach} from the \option{pgffor} package. It iterates over all the
systems in the given score, prints them using the protrusion adjustment seen
before, and if the system is the third it prints this information, otherwise
just a line break:
+
\begin{verbatim}
\newcommand\myforlily[2][]{%
\lily[insert=systems,raw-pdf,#1]{#2}%
@@ -2422,10 +2589,12 @@ just a line break:
\ifthenelse{\equal{\n}{3}}{\par Third system\par}{\\}
}%
}
+
\myforlily[staffsize=24]{
\set Staff.instrumentName = "Vl. "
\repeat unfold 4 { c'1 \break } }
\end{verbatim}
+
\newcommand\myforlily[2][]{%
\lily[insert=systems,raw-pdf,#1]{#2}%
\foreach \n in {1,...,\lyscore{nsystems}}%
@@ -2433,9 +2602,11 @@ just a line break:
\ifthenelse{\equal{\n}{3}}{\par\bigskip Third system\par\bigskip}{\\}
}%
}
+
\myforlily[staffsize=24]{
\set Staff.instrumentName = "Vl. "
\repeat unfold 4 { c'1 \break } }
+
\end{document}
diff --git a/support/lyluatex/lyluatexbase.cls b/support/lyluatex/lyluatexbase.cls
index 1e8b048dd8..fb72c667d6 100644
--- a/support/lyluatex/lyluatexbase.cls
+++ b/support/lyluatex/lyluatexbase.cls
@@ -1,11 +1,11 @@
%Lyluatex LaTeX class.
%
-% Copyright (C) 2015-2019 jperon and others (see CONTRIBUTORS.md)
+% Copyright (C) 2015-2022 jperon and others (see CONTRIBUTORS.md)
% License: MIT
% This file is part of lyluatex.
\NeedsTeXFormat{LaTeX2e}
-\ProvidesClass{lyluatexbase}[2019/05/27 v1.0f] %%LYLUATEX_DATE LYLUATEX_VERSION
+\ProvidesClass{lyluatexbase}[2022/10/30 v1.1] %%LYLUATEX_DATE LYLUATEX_VERSION
\LoadClass[DIV=11]{scrartcl}
\RequirePackage{lyluatex}
@@ -16,7 +16,7 @@
\RequirePackage{pgffor}
\RequirePackage{fancyvrb}
\RequirePackage[colorlinks=true]{hyperref}
-\lysetoption{includepaths}{./, ly/}
+\setluaoption{ly}{includepaths}{./, ly/}
% Common formatting elements for manual and examples
diff --git a/support/lyluatex/lyluatexmanual.cls b/support/lyluatex/lyluatexmanual.cls
index 8e1a85d290..16399004c2 100644
--- a/support/lyluatex/lyluatexmanual.cls
+++ b/support/lyluatex/lyluatexmanual.cls
@@ -1,11 +1,11 @@
%Lyluatex LaTeX class for the manual.
%
-% Copyright (C) 2015-2019 jperon and others (see CONTRIBUTORS.md)
+% Copyright (C) 2015-2022 jperon and others (see CONTRIBUTORS.md)
% License: MIT
% This file is part of lyluatex.
\NeedsTeXFormat{LaTeX2e}
-\ProvidesClass{lyluatexmanual}[2019/05/27 v1.0f] %%LYLUATEX_DATE LYLUATEX_VERSION
+\ProvidesClass{lyluatexmanual}[2022/10/30 v1.1] %%LYLUATEX_DATE LYLUATEX_VERSION
\LoadClass{lyluatexbase}
@@ -35,7 +35,7 @@
local PC = string.char(37)
local date_fmt = PC..'Y-'..PC..'m-'..PC..'d'
local p = io.popen('git log -n1 --date=short --format='..PC..'"ad"', 'r')
- tex.sprint(p and p:read('*a') or os.date(date_fmt))
+ tex.sprint(p and p:read('*a'):sub(1,-2) or os.date(date_fmt))
if p then p:close() end
}
-} \ No newline at end of file
+}
diff --git a/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl b/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
index c250d49cf4..fac7466600 100644
--- a/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
+++ b/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
@@ -48,12 +48,8 @@ $mirrors = {
'https://cran.asia/tex/' => 1,
'https://ftp.kaist.ac.kr/pub/tex-archive/' => 1,
'https://lab.uklee.pe.kr/tex-archive/' => 1,
- 'https://mirror.kakao.com/CTAN/' => 1,
'https://mirror.navercorp.com/CTAN/' => 1,
},
- 'Philippines' => {
- 'http://mirror.rise.ph/ctan/' => 1,
- },
'Singapore' => {
'https://download.nus.edu.sg/mirror/ctan/' => 1,
},
@@ -142,7 +138,6 @@ $mirrors = {
'https://sunsite.icm.edu.pl/pub/CTAN/' => 1,
},
'Portugal' => {
- 'https://ftp.eq.uc.pt/software/TeX/' => 1,
'https://mirrors.up.pt/pub/CTAN/' => 1,
},
'Romania' => {
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb b/systems/texlive/tlnet/tlpkg/texlive.tlpdb
index f24c2e2229..f0ea8fee1e 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb
@@ -26,11 +26,11 @@ depend container_split_src_files/1
depend frozen/0
depend minrelease/2016
depend release/2022
-depend revision/64841
+depend revision/64859
name 00texlive.image
category TLCore
-revision 64833
+revision 64853
shortdesc TeX Live files only in the source repository
longdesc The files here are not copied by the installer and containers
longdesc are not built for them; they exist only in the source
@@ -2116,6 +2116,7 @@ runfiles size=12950
tlpkg/tlpsrc/hep-math-font.tlpsrc
tlpkg/tlpsrc/hep-math.tlpsrc
tlpkg/tlpsrc/hep-paper.tlpsrc
+ tlpkg/tlpsrc/hep-reference.tlpsrc
tlpkg/tlpsrc/hep-text.tlpsrc
tlpkg/tlpsrc/hep-title.tlpsrc
tlpkg/tlpsrc/hep.tlpsrc
@@ -4661,7 +4662,7 @@ depend setting_available_architectures:aarch64-linux amd64-freebsd amd64-netbsd
name 00texlive.installer
category TLCore
-revision 64830
+revision 64843
shortdesc TeX Live standalone installer package
longdesc This package defines the files to go into the installer
longdesc archives (install-tl-unx.tar.gz, install-tl.zip) built by the
@@ -8281,7 +8282,7 @@ catalogue-version 1.9.1-2
name accanthis
category Package
-revision 32089
+revision 64844
shortdesc Accanthis fonts, with LaTeX support
relocated 1
longdesc Accanthis No. 3 is designed by Hirwin Harendal and is suitable
@@ -8290,9 +8291,9 @@ longdesc old style, Sabon, and Bembo. The support files are suitable for
longdesc use with all LaTeX engines.
execute addMap accanthis.map
containersize 368064
-containerchecksum 9edbbdd97ea30709f0e0e1959bac7806c188d610e414f037a4115747f57ce7ad68be67b75506f9ce186c951a2c46c3bcd5b0697bb72d81fc48465906cd245be0
-doccontainersize 300384
-doccontainerchecksum efa2cbf4c11b28dc0a907b62d8818489ca48c458419e37571633adb8403f914c01d28431684705363e56cc100adf7cff6539f19fae9e4b23e6cf3dc210109810
+containerchecksum 5727125c85e06501f009267bab8c1eff674a76db618c6155fd9c6b41bb2407a3a201a008c7f5aa6d73ecf100a3fc917961d20f547c2f6040fe72760a4dcd9a44
+doccontainersize 300388
+doccontainerchecksum 6789c3c330d1e6a0d20364e4e98ef72fd1c6294655f704366b0e6c1fd081d1aea312dc9e6767fb3e076b3cd91ea5a67606e8bf62f7f92af097ba766c99ab0cff
docfiles size=84
RELOC/doc/fonts/accanthis/Accanthis-Cat.pdf details="Arkandis catalogue page" language="fr"
RELOC/doc/fonts/accanthis/COPYING
@@ -8385,8 +8386,8 @@ runfiles size=204
RELOC/tex/latex/accanthis/accanthis.sty
catalogue-contact-home http://arkandis.tuxfamily.org/adffonts.html
catalogue-ctan /fonts/accanthis
-catalogue-license gpl2
-catalogue-topics font font-serif font-type1 font-otf
+catalogue-license gpl2+ lppl
+catalogue-topics font font-body font-proportional font-serif font-type1 font-otf font-supp font-t1enc
name accents
category Package
@@ -25062,7 +25063,7 @@ catalogue-version 0.8
name association-matrix
category Package
-revision 61719
+revision 64845
shortdesc LaTeX support for creating association matrices
relocated 1
longdesc This package allows the creation of association matrices in an
@@ -25074,11 +25075,11 @@ longdesc associated. Then, the \amxgenerate command generates a table
longdesc that shows in the cells with a blip (*) where the association
longdesc was added. The package depends on etoolbox, forloop, ifthen,
longdesc textcomp, and xparse.
-containersize 3604
-containerchecksum da84a9048985e8987d8e528533ac3fa0b307d996e159843ce8a3b3754f697191b30264b21b58e0d3dd9ee6c1fe478d84e92996ed3186c10c6d944a33f21f7db0
-doccontainersize 251112
-doccontainerchecksum 19eec11c03b3ab612a14ed2e90e850b8d2961aac85c2400d988a3c478b847dc45c61d03654b5b567978fd69d9fd6a2bfd153bc9278f38c121476e9cd098e38cc
-docfiles size=71
+containersize 4188
+containerchecksum 6b87d01d5559669f6e2d63fc14427d950eba9d790070625cc6acaaf6e308282b7434bce90da78a41858b068121b75a1e1c0ec4453d287aaed94c9e6308a1b5ce
+doccontainersize 268584
+doccontainerchecksum e56de37acf6d8c2b53aff0aa78999dd400b18b3bb44ea40f21a7638e463405ce4f48d2041236897f7a281099c1c5d879ffcbda9d6b08d2b0d5fb83193803d157
+docfiles size=76
RELOC/doc/latex/association-matrix/DEPENDS.txt
RELOC/doc/latex/association-matrix/LICENCE
RELOC/doc/latex/association-matrix/README.md details="Readme"
@@ -25091,7 +25092,7 @@ catalogue-contact-repository https://github.com/whisperity/association-matrix
catalogue-ctan /macros/latex/contrib/association-matrix
catalogue-license lppl1.3c
catalogue-topics table matrix expl3
-catalogue-version 1.0
+catalogue-version 1.1
name asternote
category Package
@@ -71306,7 +71307,7 @@ containerchecksum 7bacc398e20fae5da669102b699ad7dc2513abaa50b9b7969a0acf8ebe8ac5
name collection-mathscience
category Collection
-revision 64763
+revision 64853
shortdesc Mathematics, natural sciences, computer science packages
relocated 1
depend 12many
@@ -71416,6 +71417,7 @@ depend grundgesetze
depend gu
depend helmholtz-ellis-ji-notation
depend hep
+depend hep-reference
depend hepnames
depend hepparticles
depend hepthesis
@@ -71552,8 +71554,8 @@ depend youngtab
depend yquant
depend ytableau
depend zx-calculus
-containersize 1632
-containerchecksum 5f899eb88979bbcac7c780def9f108e1d6b7d6c88f7aa393ac8550bf20453db29b5ec41e2af90a557333018d778c68b38800669f2b1383f028d788c8794719e2
+containersize 1636
+containerchecksum 157a68c5e2e4fa83be6b6ad10bfaf527e55951b4c599897d48f9abdfe13a256e3cf04148f5ae8ae3ad2feb1c321a7d5f37d00edc9ec5a0307ea6055fbca54f45
name collection-metapost
category Collection
@@ -91230,7 +91232,7 @@ binfiles arch=x86_64-solaris size=1
name debate
category Package
-revision 64602
+revision 64846
shortdesc Debates between reviewers
relocated 1
longdesc This package helps to organize debates between multiple
@@ -91241,17 +91243,17 @@ depend pdfcol
depend tcolorbox
depend xcolor
depend xkeyval
-containersize 1680
-containerchecksum c519e285f9828fdb12ec3526eacca487e6b6b53e1ea9c1e9f557447d5557e4b1594543d2aefd8ca113f691c8a6c15bfb214877bad221003b0100e3e6c1f64601
-doccontainersize 326644
-doccontainerchecksum 215a369d23c599d9fe3aa2a7b2b75c107a1166b3196c5f04a131fd50817f4bf75496ad2978809bc05d24821f8a8548efb6258b2cb0b3e8e4d206a1a46fb75d3a
-docfiles size=84
+containersize 1688
+containerchecksum 88f9ff3f473dfbd84509adfe4491d15b7c20229361afde9cbce382be0441378cd6bb7d306c9b0a424dc065f34ab2d86eca8a0334d00fd3a5bae513776c418815
+doccontainersize 285712
+doccontainerchecksum ba5e90ecc8c1733cdb78233099cdc95e09d02786df11606b3f823f2b1b60934cd2881c873ad7afa192ee1b0ff5ad91121896cb30e7405ee3ae9bc960d26e7f9c
+docfiles size=74
RELOC/doc/latex/debate/DEPENDS.txt
RELOC/doc/latex/debate/LICENSE.txt
RELOC/doc/latex/debate/README.md details="Readme"
RELOC/doc/latex/debate/debate.pdf details="Package documentation"
-srccontainersize 3044
-srccontainerchecksum adbeea4f89eccabeabf13fcdcfbbc9edb3960945b099b5c3773c940bb0c8b6cd4cf846fc7910be434c3342cf938a8d474bf5f941d388938117e503a99b08a4eb
+srccontainersize 3084
+srccontainerchecksum b9c0b94eea82d7b684aa358788a5ee3cb9709738137827b7a4f70ddd0d02ad92b6feecf03d0de7dd08c1ab233f17db3c973cfafef98134be33a41d6a8d7c4da6
srcfiles size=3
RELOC/source/latex/debate/debate.dtx
RELOC/source/latex/debate/debate.ins
@@ -91263,7 +91265,7 @@ catalogue-contact-repository https://github.com/yegor256/debate
catalogue-ctan /macros/latex/contrib/debate
catalogue-license mit
catalogue-topics notes
-catalogue-version 0.2.0
+catalogue-version 0.2.1
name decimal
category Package
@@ -109193,7 +109195,7 @@ catalogue-version 1.2
name eolang
category Package
-revision 64834
+revision 64847
shortdesc Formulas and graphs for the EO programming language
relocated 1
longdesc This LaTeX package helps you write [?] -calculus formulas and
@@ -109205,20 +109207,20 @@ depend iexec
depend pgf
depend pgfopts
depend stmaryrd
-containersize 3900
-containerchecksum 8fc92fa7f902ebd44768468afec85003e48512842ed8b6acb79c10763a8a10980f5f3574ddc4934ea9d2209b3b8bde353a3fd09758d7d9b03c6fbaf8b0d7f959
-doccontainersize 875488
-doccontainerchecksum 970b37bf3f0be5af3eae1a21e384375fde2584b6bdd84f11948319637b4697ef68a3db14066f818848e8ad524cb19196d5b98b2c5cbc38cbce7b456e172aa272
-docfiles size=250
+containersize 3996
+containerchecksum ea1bb9e3e6cae3186068bdb3fd7fe7844c71fbc875491f1be104eda86d0bb52810a258c32be57a9116aa1952bb7f4469539c33509a6c94ac3b35f7ab8fce3ec3
+doccontainersize 880404
+doccontainerchecksum d952dcf950f02176ba1727fa9726cf6c2577507541be8fd200adb327a41b1e72f59a61b0f2f4482839cdad67fc0b450110293941e2d11136c61552fa8770b839
+docfiles size=253
RELOC/doc/latex/eolang/DEPENDS.txt
RELOC/doc/latex/eolang/LICENSE.txt
RELOC/doc/latex/eolang/README.md details="Readme"
RELOC/doc/latex/eolang/cactus.pdf
RELOC/doc/latex/eolang/eolang.bib
RELOC/doc/latex/eolang/eolang.pdf details="Package documentation"
-srccontainersize 8008
-srccontainerchecksum e41ba46a23b88e259b44295928c0d2c45a60b6a4dda1dbbc86f11d47059a8cec49a310f0c05e083a00ec706d707b4e7a508703c92386b09d84b33e240f1cdad3
-srcfiles size=7
+srccontainersize 8372
+srccontainerchecksum 51c7a1705621e71b63bb19075ef598a0ac2655eb0303ba8730c9d57228d2026d9f08c3c7979011a443805489f68ac7b292cb6c67b242d98658e680eb38f5b0fb
+srcfiles size=8
RELOC/source/latex/eolang/eolang.dtx
RELOC/source/latex/eolang/eolang.ins
runfiles size=3
@@ -109227,7 +109229,7 @@ catalogue-contact-repository https://github.com/objectionary/eolang.sty
catalogue-ctan /macros/latex/contrib/eolang
catalogue-license mit
catalogue-topics diagram program-doc
-catalogue-version 0.1.0
+catalogue-version 0.2.0
name epigrafica
category Package
@@ -133442,7 +133444,7 @@ catalogue-version 1.1
name gillius
category Package
-revision 32068
+revision 64859
shortdesc Gillius fonts with LaTeX support
relocated 1
longdesc This package provides LaTeX, pdfLaTeX, XeLaTeX and LuaLaTeX
@@ -133451,17 +133453,17 @@ longdesc serif fonts and condensed versions of them, designed by Hirwen
longdesc Harendal. According to the designer, the fonts were inspired by
longdesc Gill Sans.
execute addMap gillius.map
-containersize 941896
-containerchecksum 9620e63fa3a9a981bdb20cbd6d8002179c722e844df0a18566593acef864f134a894a7e1920fbc4494467b1301af0bbf9ee80fb10bcc192762e5b2505fa8becd
+containersize 941916
+containerchecksum 97008aef459313dbed155ea3c5a10b1a0a6e2fd293ff9b76be15c2b41680671276b5426fa74709fc7c28d5757e9a1a6108025a6d141c64e9e89211c578a9611d
doccontainersize 216008
-doccontainerchecksum df8fdeb2055b4d3383eb6ebab3dc4fb92774a96d7b31e7bdd7a238e215619710a8c0ec3fe9593213535933fd76c38947ed295df1a628aee7a7d7b21078f5ffb4
+doccontainerchecksum 16b18d9f23ce0b0d0f8e5af9985d66712bf7d3635139681b32fb8c7e695b25eda517f9d710395ca374c55d32b88748fe8f99497b89cf0967877dc4155e4c4747
docfiles size=66
RELOC/doc/fonts/gillius/COPYING
RELOC/doc/fonts/gillius/Gillius-cat.pdf
RELOC/doc/fonts/gillius/README details="Readme"
RELOC/doc/fonts/gillius/gillius-samples.pdf details="Gillius font samples"
RELOC/doc/fonts/gillius/gillius-samples.tex
- RELOC/doc/fonts/gillius/gillius2-samples.pdf details="Gillius font samples"
+ RELOC/doc/fonts/gillius/gillius2-samples.pdf details="Gillius No. 2 font samples"
RELOC/doc/fonts/gillius/gillius2-samples.tex
runfiles size=628
RELOC/fonts/enc/dvips/gillius/gls_4bsedw.enc
@@ -133781,8 +133783,8 @@ runfiles size=628
RELOC/tex/latex/gillius/gillius2.sty
catalogue-contact-home http://arkandis.tuxfamily.org/adffonts.html
catalogue-ctan /fonts/gillius
-catalogue-license gpl2
-catalogue-topics font font-sans font-type1 font-otf
+catalogue-license gpl2+ lppl
+catalogue-topics font font-body font-proportional font-sans font-type1 font-otf font-supp font-t1enc
name gincltex
category Package
@@ -141012,6 +141014,42 @@ catalogue-license lppl1.3c
catalogue-topics physics
catalogue-version 2.0
+name hep-reference
+category Package
+revision 64853
+shortdesc Adjustments for publications in High Energy Physics
+relocated 1
+longdesc This package makes some changes to the reference, citation and
+longdesc footnote macros to improve the default behavior of LaTeX for
+longdesc High Energy Physics publications.
+containersize 1920
+containerchecksum 1a422d571817be0264385beae73effb4ac674f2e05396289373c0d0792f591c39ebc2bac21d9e6def0e18dc389b7af9f604b6aebba133053894b2874a8dc113d
+doccontainersize 461932
+doccontainerchecksum 8952bc87e4a3cb1780ce51ea402b3dbe924b5e6adc9d05c9c0b75bb2e391c8fb4b07bab0f3419dc9f21bd4e9527eca5b56f6c10ef5a6e41d6c964e15cf9a5a0c
+docfiles size=162
+ RELOC/doc/latex/hep-reference/README-hep-reference.md
+ RELOC/doc/latex/hep-reference/README.md details="Readme"
+ RELOC/doc/latex/hep-reference/bibliography.bib
+ RELOC/doc/latex/hep-reference/hep-reference-documentation.pdf details="Package documentation"
+ RELOC/doc/latex/hep-reference/hep-reference-documentation.tex
+ RELOC/doc/latex/hep-reference/hep-reference-implementation.pdf
+ RELOC/doc/latex/hep-reference/hep-reference-test.tex
+ RELOC/doc/latex/hep-reference/license.md
+srccontainersize 4468
+srccontainerchecksum 3a76caf01215ec123f930e0812674e67753727d3ef2adfcba12f0df9a0291739ec9493aa1b0536f749e976463b8c8ee90add1682109d44794c79e83967564b44
+srcfiles size=4
+ RELOC/source/latex/hep-reference/hep-reference-implementation.dtx
+ RELOC/source/latex/hep-reference/hep-reference.ins
+runfiles size=1
+ RELOC/tex/latex/hep-reference/hep-reference.sty
+catalogue-also hep-paper
+catalogue-contact-bugs https://github.com/janhajer/hep-paper/issues
+catalogue-contact-repository https://github.com/janhajer/hep-paper
+catalogue-ctan /macros/latex/contrib/hep-reference
+catalogue-license lppl1.3c
+catalogue-topics ref-latex
+catalogue-version 1.1
+
name hep-text
category Package
revision 61172
@@ -143768,7 +143806,7 @@ catalogue-version 1.1.1
name huawei
category Package
-revision 64718
+revision 64848
shortdesc Template for Huawei documents
relocated 1
longdesc This unofficial package provides a class for creating documents
@@ -143800,27 +143838,28 @@ depend tools
depend ulem
depend wrapfig
depend xcolor
-containersize 6412
-containerchecksum 132f4118cd8cf6fcc7e81e825615195949601dff32d7643860a8ae9a925c8d36a994041813c8733fe40c0dfe1e8b4b09abcd42985c3f13ca3e4f3470bdcba12f
-doccontainersize 409768
-doccontainerchecksum afb0b4d8b503659240f649766fb420b13e2579f3c2d003d90b654b9bd99135fe04c95550100b0478b022f8c10e698702f148f8db8e73bee59b980f5a4c194d1c
-docfiles size=104
+containersize 260132
+containerchecksum 4df31d09423aabba2d16efcaa129d4560b5d496faf8a38f1884416c257671e1d78b5318a5890b10d696d4132e5ad3712743a85a9e3a4b800288e0b307c4049c3
+doccontainersize 777364
+doccontainerchecksum c5f3a61e0e6d2b6e6aba2c26456130f58ac2270bea56bffafc710d95bb315a439f34de259c5e1386435492c3dbb2cee5788956beb850ec43514b9a5ce76be923
+docfiles size=200
RELOC/doc/latex/huawei/DEPENDS.txt
RELOC/doc/latex/huawei/LICENSE.txt
RELOC/doc/latex/huawei/README.md details="Readme"
RELOC/doc/latex/huawei/huawei.pdf details="Package documentation"
-srccontainersize 9596
-srccontainerchecksum 9e868b2a7cc02cc0995ef9a4d8612fdf3b62c003d147dadc694a9a2361d63014455383d5a6541c156fe07a1da6fdcc5750b3fd37510e86cd468c0f9db31d85be
+srccontainersize 9860
+srccontainerchecksum 7b2a52afbed006f3f369c7b2131ab4d1c6f2475b31c572298e90e03c005e7ea8ea062c5cb79c0fe383054621f103b7b81a0c68e56c8cd42b60581a287773da31
srcfiles size=9
RELOC/source/latex/huawei/huawei.dtx
RELOC/source/latex/huawei/huawei.ins
-runfiles size=5
+runfiles size=67
+ RELOC/tex/latex/huawei/huawei-cover-picture.pdf
RELOC/tex/latex/huawei/huawei.cls
catalogue-contact-home https://github.com/yegor256/huawei.cls
catalogue-ctan /macros/latex/contrib/huawei
catalogue-license mit
catalogue-topics class misc-paper
-catalogue-version 0.14.2
+catalogue-version 0.14.3
name huaz
category Package
@@ -147128,7 +147167,7 @@ catalogue-version 1.0.0
name iexec
category Package
-revision 64810
+revision 64849
shortdesc Execute shell commands and input their output
relocated 1
longdesc With the help of the \iexec command, you can execute a shell
@@ -147137,17 +147176,17 @@ longdesc package also lets you use any special symbols inside your
longdesc command.
depend tools
depend xkeyval
-containersize 2412
-containerchecksum 6d23bd5c3afd9bf791bc082684a412ae934ec919be49432c4c81f916eaaa349aef4e738ca7ff28d3c3c945934809393ffd831930fc1f02cf5b881207fb1adf72
-doccontainersize 325748
-doccontainerchecksum d29d8133bab0d052d9a8d2502fbabe2e72962fc9fa6f2b0ada83b1daf3d9af9a4117da4b1338d7903649dead98c528c0cd1c65c2d8a26dcabac5bb92c1f5a688
-docfiles size=84
+containersize 2416
+containerchecksum 3344c09f44e7797d899e9d84323fad0975d91a8dc88e8b5a05a1c4d457af2007796a81ecb27996b40d4232818385ff6d576067eca5b9b30783c1cd875135b39f
+doccontainersize 325444
+doccontainerchecksum 4efe74c2a6f5933615c438ee129b9e580b997e51546c27dfba0301c993152a0b1cd095c8d9ccc509756d0ba8ad28e134d8296fe0142aed5f536fe332567282ec
+docfiles size=83
RELOC/doc/latex/iexec/DEPENDS.txt
RELOC/doc/latex/iexec/LICENSE.txt
RELOC/doc/latex/iexec/README.md details="Readme"
RELOC/doc/latex/iexec/iexec.pdf details="Package documentation"
-srccontainersize 5548
-srccontainerchecksum 335c636c0cb5dee47b1b528ba583cebb91202c254c78bce694574d07ec4cb9726777b2cf0fc0ecf348b2cbd47b70e1dfab6532772f8c6e1322cd7a13af95b1d6
+srccontainersize 5612
+srccontainerchecksum e891165b9bf9ea9fa0820e4cfd5fd5415c4916046db6c058de237fb9e5edcbcaeec102224f16f461ab903911ae2777b06513d169d422c71a4eadb481edd06070
srcfiles size=5
RELOC/source/latex/iexec/iexec.dtx
RELOC/source/latex/iexec/iexec.ins
@@ -147157,7 +147196,7 @@ catalogue-contact-repository https://github.com/yegor256/iexec
catalogue-ctan /macros/latex/contrib/iexec
catalogue-license mit
catalogue-topics sys-supp exec-foreign
-catalogue-version 0.11.2
+catalogue-version 0.11.3
name ifallfalse
category Package
@@ -159098,20 +159137,21 @@ catalogue-version 1.30
name jeuxcartes
category Package
-revision 64827
+revision 64850
shortdesc Macros to insert playing cards
relocated 1
longdesc This package provides macros to insert playing cards, single,
-longdesc or hand, or random-hand, Poker or French Tarot, from png files.
-containersize 5328884
-containerchecksum 7c4d94f50dda82aa950f6c66e0c0418d05f052b45f2fe34556c611113df1b8d5649c022937a1ef8ca2454c9c2fb1e9cb56ac8a2fb18eeffba48fe466f30d7748
-doccontainersize 5509864
-doccontainerchecksum 389d90b94a8ca7a9dbb322f9fc2d492ddebe101e25f3db86e02b2263ff11bc8de15a9ce03c505a53766952b58eb395f329886a0200f3b160803b8556f1d91448
-docfiles size=1391
+longdesc or hand, or random-hand, Poker or French Tarot or Uno, from png
+longdesc files.
+containersize 5642836
+containerchecksum d05a57bad54f62af0ff0837c591cde9fb6b4b36920e6a1673ee7ec79880d87e19719118a89a3fa05ccfef61ee1c966abf06d0b9ec02875de24b4c268946ef239
+doccontainersize 6404764
+doccontainerchecksum 773a5c7bdef5e2f7328e1bc5c18eee2378783ebfdd8c1df95eea6cac4b1ae94a61cc46635c89ff3521de2079753b696f37bb08b87c1183c9ffa3de43c1b1f2e0
+docfiles size=1636
RELOC/doc/latex/jeuxcartes/JeuxCartes-doc.pdf details="Package documentation" language="fr"
RELOC/doc/latex/jeuxcartes/JeuxCartes-doc.tex
RELOC/doc/latex/jeuxcartes/README.md details="Readme"
-runfiles size=1425
+runfiles size=1538
RELOC/tex/latex/jeuxcartes/CaJ-Poker-10C.png
RELOC/tex/latex/jeuxcartes/CaJ-Poker-10K.png
RELOC/tex/latex/jeuxcartes/CaJ-Poker-10P.png
@@ -159262,11 +159302,68 @@ runfiles size=1425
RELOC/tex/latex/jeuxcartes/CaJ-Tarot-VK.png
RELOC/tex/latex/jeuxcartes/CaJ-Tarot-VP.png
RELOC/tex/latex/jeuxcartes/CaJ-Tarot-VT.png
+ RELOC/tex/latex/jeuxcartes/CaJ-Uno-0B.png
+ RELOC/tex/latex/jeuxcartes/CaJ-Uno-0J.png
+ RELOC/tex/latex/jeuxcartes/CaJ-Uno-0R.png
+ RELOC/tex/latex/jeuxcartes/CaJ-Uno-0V.png
+ RELOC/tex/latex/jeuxcartes/CaJ-Uno-1B.png
+ RELOC/tex/latex/jeuxcartes/CaJ-Uno-1J.png
+ RELOC/tex/latex/jeuxcartes/CaJ-Uno-1R.png
+ RELOC/tex/latex/jeuxcartes/CaJ-Uno-1V.png
+ RELOC/tex/latex/jeuxcartes/CaJ-Uno-2B.png
+ RELOC/tex/latex/jeuxcartes/CaJ-Uno-2J.png
+ RELOC/tex/latex/jeuxcartes/CaJ-Uno-2R.png
+ RELOC/tex/latex/jeuxcartes/CaJ-Uno-2V.png
+ RELOC/tex/latex/jeuxcartes/CaJ-Uno-3B.png
+ RELOC/tex/latex/jeuxcartes/CaJ-Uno-3J.png
+ RELOC/tex/latex/jeuxcartes/CaJ-Uno-3R.png
+ RELOC/tex/latex/jeuxcartes/CaJ-Uno-3V.png
+ RELOC/tex/latex/jeuxcartes/CaJ-Uno-4B.png
+ RELOC/tex/latex/jeuxcartes/CaJ-Uno-4J.png
+ RELOC/tex/latex/jeuxcartes/CaJ-Uno-4R.png
+ RELOC/tex/latex/jeuxcartes/CaJ-Uno-4V.png
+ RELOC/tex/latex/jeuxcartes/CaJ-Uno-5B.png
+ RELOC/tex/latex/jeuxcartes/CaJ-Uno-5J.png
+ RELOC/tex/latex/jeuxcartes/CaJ-Uno-5R.png
+ RELOC/tex/latex/jeuxcartes/CaJ-Uno-5V.png
+ RELOC/tex/latex/jeuxcartes/CaJ-Uno-6B.png
+ RELOC/tex/latex/jeuxcartes/CaJ-Uno-6J.png
+ RELOC/tex/latex/jeuxcartes/CaJ-Uno-6R.png
+ RELOC/tex/latex/jeuxcartes/CaJ-Uno-6V.png
+ RELOC/tex/latex/jeuxcartes/CaJ-Uno-7B.png
+ RELOC/tex/latex/jeuxcartes/CaJ-Uno-7J.png
+ RELOC/tex/latex/jeuxcartes/CaJ-Uno-7R.png
+ RELOC/tex/latex/jeuxcartes/CaJ-Uno-7V.png
+ RELOC/tex/latex/jeuxcartes/CaJ-Uno-8B.png
+ RELOC/tex/latex/jeuxcartes/CaJ-Uno-8J.png
+ RELOC/tex/latex/jeuxcartes/CaJ-Uno-8R.png
+ RELOC/tex/latex/jeuxcartes/CaJ-Uno-8V.png
+ RELOC/tex/latex/jeuxcartes/CaJ-Uno-9B.png
+ RELOC/tex/latex/jeuxcartes/CaJ-Uno-9J.png
+ RELOC/tex/latex/jeuxcartes/CaJ-Uno-9R.png
+ RELOC/tex/latex/jeuxcartes/CaJ-Uno-9V.png
+ RELOC/tex/latex/jeuxcartes/CaJ-Uno-CSB.png
+ RELOC/tex/latex/jeuxcartes/CaJ-Uno-CSJ.png
+ RELOC/tex/latex/jeuxcartes/CaJ-Uno-CSR.png
+ RELOC/tex/latex/jeuxcartes/CaJ-Uno-CSV.png
+ RELOC/tex/latex/jeuxcartes/CaJ-Uno-Dos.png
+ RELOC/tex/latex/jeuxcartes/CaJ-Uno-P2B.png
+ RELOC/tex/latex/jeuxcartes/CaJ-Uno-P2J.png
+ RELOC/tex/latex/jeuxcartes/CaJ-Uno-P2R.png
+ RELOC/tex/latex/jeuxcartes/CaJ-Uno-P2V.png
+ RELOC/tex/latex/jeuxcartes/CaJ-Uno-P4.png
+ RELOC/tex/latex/jeuxcartes/CaJ-Uno-PTJ.png
+ RELOC/tex/latex/jeuxcartes/CaJ-Uno-PTR.png
+ RELOC/tex/latex/jeuxcartes/CaJ-Uno-PTV.png
+ RELOC/tex/latex/jeuxcartes/Caj-Uno-Coul.png
+ RELOC/tex/latex/jeuxcartes/Caj-Uno-PTB.png
RELOC/tex/latex/jeuxcartes/JeuxCartes.sty
+catalogue-contact-bugs https://github.com/cpierquet/JeuxCartes/issues
+catalogue-contact-repository https://github.com/cpierquet/JeuxCartes
catalogue-ctan /macros/latex/contrib/jeuxcartes
catalogue-license lppl1.3c lgpl2.1 pd
catalogue-topics games pgf-tikz
-catalogue-version 0.1.2
+catalogue-version 0.1.3
name jfmutil
category Package
@@ -187101,23 +187198,27 @@ catalogue-version 4.3
name linguisticspro
category Package
-revision 54512
+revision 64858
shortdesc LinguisticsPro fonts with LaTeX support
relocated 1
longdesc The package provides LaTeX, pdfLaTeX, XeLaTeX and LuaLaTeX
longdesc support for the LinguisticsPro family of fonts. This family is
longdesc derived from the Utopia Nova font family, by Andreas Nolda.
execute addMap LinguisticsPro.map
-containersize 1395864
-containerchecksum 62085ea970d1cebc752cc5dab4b84487bd99e0e99fd48a2effa44fe9ae0bb86aa91966fd81639aea7d4364d3c3d97046affcf2693d8b4be8fa016e91014604c5
-doccontainersize 42252
-doccontainerchecksum 4ece804238885fb37505222218c92c923804d032e5e150de3cfadc62f0eec73e8acc47600ddc4d5af0f7bacf9f54254b6ead43a3f4a084aeb40dfe95b53d2965
-docfiles size=14
+containersize 1377940
+containerchecksum 6bf94e8910ae03314a3ff55157e52586b5f2550c2aaca1a8989b1f02400c87363c74e00658ee953c13a44dd69cb253bda6128e66a96b865e6169310165a7f9e4
+doccontainersize 46052
+doccontainerchecksum 8f0c8937cacdec2e2ea4999dd1bb45af96a99a3707ef22b54a2bf1e0c745d663550ff0b68d80cf895e8bdfa1f279873c4725c7851af547f06155589d8e5bfde5
+docfiles size=21
+ RELOC/doc/fonts/linguisticspro/COPYING.txt
+ RELOC/doc/fonts/linguisticspro/ChangeLog.txt
+ RELOC/doc/fonts/linguisticspro/LICENSE-utopia.txt
RELOC/doc/fonts/linguisticspro/README details="Readme"
+ RELOC/doc/fonts/linguisticspro/README.txt
RELOC/doc/fonts/linguisticspro/SILOpenFontLicense.txt
RELOC/doc/fonts/linguisticspro/linguisticspro-samples.pdf details="Package documentation"
RELOC/doc/fonts/linguisticspro/linguisticspro-samples.tex
-runfiles size=697
+runfiles size=696
RELOC/fonts/enc/dvips/linguisticspro/lnpr_2dchsz.enc
RELOC/fonts/enc/dvips/linguisticspro/lnpr_2io6ub.enc
RELOC/fonts/enc/dvips/linguisticspro/lnpr_2mzpfv.enc
@@ -241573,33 +241674,34 @@ binfiles arch=x86_64-solaris size=1
name pdflscape
category Package
-revision 53047
+revision 64851
shortdesc Make landscape pages display as landscape
relocated 1
longdesc The package adds PDF support to the landscape environment of
longdesc package lscape, by setting the PDF /Rotate page attribute.
longdesc Pages with this attribute will be displayed in landscape
longdesc orientation by conforming PDF viewers.
-containersize 2252
-containerchecksum c343f0527f21421f26396a6210f7932786a222a437b43d6b2bf1c53339633a0aa8337843222d92048a6a5a41f0952aa2fde6e2bfb2e181cf811383a23ffadadb
-doccontainersize 298264
-doccontainerchecksum 5fccb7dc5607f1196d6df6a1a68d010c0b9eea10854cdf2e133f31dc4095f101efc05abcf9e980a3e05375ba29ce319dc13385790c2261778fde54d3b94d1251
-docfiles size=75
- RELOC/doc/latex/pdflscape/README.md
+containersize 2612
+containerchecksum 13c581f774e61de70e97b40c54a59054b9ab0a9fd6e1b71d94fc5d0e072aa96661d8b72bc99c083b322df974f75b2f415a6fcd8bc23f95d2d999a03ffc0a3188
+doccontainersize 314616
+doccontainerchecksum c59c598fa494e5a57d2ba058dd6d096edc96aa958bec7ea1240195022b670f0cfc45d15eea0d0b68b499975811505a6fe9a209c7630c74c861fc42ce3904284d
+docfiles size=80
+ RELOC/doc/latex/pdflscape/README.md details="Readme"
RELOC/doc/latex/pdflscape/pdflscape.pdf details="Package documentation"
-srccontainersize 6000
-srccontainerchecksum 08cc0550cb76eff49ab4cc9f357f22a7c8086b2802eb191237bbf79acce2b134a2bf3ea28a8324d0140ac785afb8a928a8f7b8cc7e58bdd7e9d8b1d3a66ee7e5
+srccontainersize 6508
+srccontainerchecksum f844e74588ae5982f1122d9826caa8a93c229d2169813a074537053e0a8387c3917b110ec1653fdddb31513124b4f6974a2e3ba4e96f714a57a03155646bf115
srcfiles size=6
RELOC/source/latex/pdflscape/pdflscape.dtx
-runfiles size=2
+runfiles size=3
+ RELOC/tex/latex/pdflscape/pdflscape-nometadata.sty
RELOC/tex/latex/pdflscape/pdflscape.sty
catalogue-also lscape
catalogue-contact-bugs https://github.com/ho-tex/pdflscape/issues
catalogue-contact-repository https://github.com/ho-tex/pdflscape
catalogue-ctan /macros/latex/contrib/pdflscape
-catalogue-license lppl1.3
+catalogue-license lppl1.3c
catalogue-topics landscape layout
-catalogue-version 0.12
+catalogue-version 0.13
name pdfmanagement-testphase
category Package
@@ -249248,7 +249350,7 @@ catalogue-topics drama-script
name playfair
category Package
-revision 56005
+revision 64857
shortdesc Playfair Display fonts with LaTeX support
relocated 1
longdesc This package provides the PlayFairDisplay family of fonts,
@@ -249262,10 +249364,10 @@ longdesc heavier than the lowercase characters. This helps achieve a
longdesc more even typographical colour when typesetting proper nouns
longdesc and initialisms.
execute addMap PlayfairDisplay.map
-containersize 1679544
-containerchecksum bd9c88074757e0b34fc569e3f383c6b8045216ffe5da4ec897d0c28365063d7a66511ae190017c24dbea92782be05735f62a0684909ca76731a30f6d9855fe5b
-doccontainersize 251112
-doccontainerchecksum 03dfa23f74a3f1f23b4bd4d28ff6580e248074e07f2fc515db3fd917bd10f998886e3ef987e934b8fee7be5467b9f8d9810e9ccb6844af9bf67b8726ddff9773
+containersize 1679528
+containerchecksum 2c75ccda034c607fa67993922e498347cf8a708c31360ac63d8304ebcf538e2012529864c6c3102a63b0320db68101fddae021ec396efaf0396d4d609cd0d711
+doccontainersize 251116
+doccontainerchecksum 006319162a3a7035955064d7ab99e704bf828cc7441a9c930cfccf4cb7e70ac52ff672de3ce8b415fbfb20f29a0b4c09703fe0e3715d15e38c1293973bd3a86a
docfiles size=67
RELOC/doc/fonts/playfair/OFL.txt
RELOC/doc/fonts/playfair/Playfair_Display_A4_specimen.pdf
@@ -251922,7 +252024,7 @@ catalogue-version 3.0.1
name poiretone
category Package
-revision 64527
+revision 64856
shortdesc PoiretOne family of fonts with LaTeX support
relocated 1
longdesc This package provides LaTeX, pdfLaTeX, XeLaTeX and LuaLaTeX
@@ -251931,10 +252033,10 @@ longdesc Masharov. PoiretOne is a decorative geometric grotesque with a
longdesc hint of Art Deco and constructivism. There is currently just a
longdesc regular weight and an artificially emboldened bold.
execute addMap PoiretOne.map
-containersize 172692
-containerchecksum bb88960e42aac6f6275621cc63c913b7b8b4d79c790bfebbb4f640ff1af5c56a1aca69dba081dbf78f81baf6215cfee078c489327563d8f66f1d1953b8e570fd
-doccontainersize 12968
-doccontainerchecksum b79453597539f2510a1450dcf7bfc6a31a0c3be1a48d868cf10b548fd2d597e757e2643f4f2a603431ca2e8332fdda8cafed548c0d5276ddcccc53afe22c6c2d
+containersize 172672
+containerchecksum 07e1479df1d89b568388a855236d997580cb76ca6ea8f45b55622425d10584037cec5e17a734c24a0eb0a9746966e94137026c37d4696b475e641806d07a7ef5
+doccontainersize 12964
+doccontainerchecksum c164f53258e08e74cade46f03f1e6d3d538a0f65cf3086629150c2741488bd33a82fca89d91bcbb83045d126defc3ee9493fc5e1d05e2c567464d4d29afc0cd9
docfiles size=7
RELOC/doc/fonts/poiretone/OFL.txt
RELOC/doc/fonts/poiretone/README details="Readme"
@@ -281334,7 +281436,7 @@ catalogue-version 1.6a
name simpleicons
category Package
-revision 64769
+revision 64855
shortdesc Simple Icons for LaTeX
relocated 1
longdesc Similar to FontAwesome icons being provided on LaTeX by the
@@ -281342,16 +281444,16 @@ longdesc fontawesome package, this package aims to do the same with
longdesc Simple Icons. For reference, visit their website:
longdesc https://simpleicons.org/.
execute addMap simpleicons.map
-containersize 2698076
-containerchecksum 56d888ab9f8ffebcb5131733141d20d550c50d4a73e43b6dc61cc42a790286c07fb78f4348513f639facc8b9386053a4ff9a5b0010cb238c688fc752859f969b
-doccontainersize 1979080
-doccontainerchecksum 897b9fb1bcd8210816b0c8b0dc1f820ae7ddeee368a52255341e3cda40dbece66343740c42b53f388d8c826ab081fab015c260a327518ff0bb2de5813eeac5d9
-docfiles size=515
+containersize 2700300
+containerchecksum 3858ed784073fc2179a2c704f85185bee6a2feab267f7e6e807211756ec8154ae962059a61a3f00d091cdc959955941a0ff5b6f5c6786ef39ff07c5e2dec629a
+doccontainersize 1982104
+doccontainerchecksum 0c320ba57476b239b8224837e4b8885e27794f8bea4a95616917a2b7b03191513f8a11b3395376482b7c37bb81f94724c805d43c07348d5af207e6ec171b6e9d
+docfiles size=516
RELOC/doc/fonts/simpleicons/README.md details="Readme"
RELOC/doc/fonts/simpleicons/bindings.tex
RELOC/doc/fonts/simpleicons/simpleicons.pdf details="Package documentation"
RELOC/doc/fonts/simpleicons/simpleicons.tex
-runfiles size=1018
+runfiles size=1020
RELOC/fonts/enc/dvips/simpleicons/simpleiconsEight.enc
RELOC/fonts/enc/dvips/simpleicons/simpleiconsFive.enc
RELOC/fonts/enc/dvips/simpleicons/simpleiconsFour.enc
@@ -281393,7 +281495,7 @@ catalogue-contact-repository https://github.com/ineshbose/simple-icons-latex
catalogue-ctan /fonts/simpleicons
catalogue-license cc-by-1
catalogue-topics font font-symbol font-supp-symbol font-otf font-type1
-catalogue-version 7.16.0
+catalogue-version 7.17.0
name simpleinvoice
category Package
@@ -309430,7 +309532,7 @@ docfiles size=376
name texlive-scripts
category TLCore
-revision 64830
+revision 64843
shortdesc TeX Live infrastructure programs
longdesc Includes install-tl, tl-portable, rungs, etc.; not needed for
longdesc tlmgr to run but still ours. Not included in tlcritical.
@@ -309438,10 +309540,10 @@ depend texlive-scripts.ARCH
depend texlive.infra
execute addMap mathpple.map
postaction shortcut type=menu name="TeX Live command-line" cmd=TEXDIR/tlpkg/installer/tl-cmd.bat
-containersize 113728
-containerchecksum 17882d42a7e87b0ed0baa145ec964a14ef345b3f0f994dedf911fe0a0cf2c035f1eeb3341b08410f14f5c396a878622aedc455e40ae7d8614570edf746cc8f45
+containersize 113684
+containerchecksum 9b837fd5ce40f1db0fd4f071dfc83342b13467f73ac7bff27672366d621e362cd2325fec6a1f66c0c4a3ceee6381ffe2873d8200b4c1e3689af2f324c7a00ca5
doccontainersize 422980
-doccontainerchecksum ee545e22a0d4946ebfbf594857857a851aacfb4978341d62322241b6bb662c1f790247c70bb044a0f7454b0ed86235bc6cb63698313ccd54e5381e28d1d6918b
+doccontainerchecksum 183fe65d1f59b585ad9fb80ce62b894082db3208ef9777acfad6e059ba19875f169673cb9c67433e2b0859ed4f5ac27f84a9124ef66e2cd62e574c344aec62f0
docfiles size=531
doc.html
texmf-dist/doc/man/man1/fmtutil-sys.1
@@ -324736,32 +324838,35 @@ catalogue-version 1.12d
name transparent
category Package
-revision 52981
+revision 64852
shortdesc Using a color stack for transparency with pdfTeX
relocated 1
-longdesc Since version 1.40 pdfTeX supports several color stacks; the
-longdesc package uses a separate colour stack for control of
-longdesc transparency (which is not, of course, a colour).
-containersize 1992
-containerchecksum a1b545dee3fc210d9ff39c9ad1e8015c3972b2f1655e40f828d3bca0d8ae759772e18fd180cec5fa88d45f48076d92d07bebf2e03ef26745ad53a2fd8581d9cf
-doccontainersize 266624
-doccontainerchecksum 7de04001cea582db36ed0fb0b5f8382a367603d8ce8327d29d773d05af116ae76adddd678b220d2df8abf7c6c619bee9f050f51c5aa255d7b0fb9b576638e049
-docfiles size=68
+longdesc pdfTeX and LuaTeX support several color stacks. This package
+longdesc shows how a separate color stack can be used for transparency,
+longdesc a property besides color that works across page breaks. If the
+longdesc PDF management is used it can also be used with other engines,
+longdesc but without support for page breaks.
+containersize 2272
+containerchecksum 58ffa6219576a994955be228a412835c8da328c351ca0cc5dfa9d3a9fdfe8b38324890ecde9ec8ed9ccc49231169786d704ef65cdd3dfd860f5aa761a18c57d9
+doccontainersize 275336
+doccontainerchecksum 73942fa07c9bcc6e8f08b91837f96a3c781f2f60443078b67232092b98e0bfaab07e57bd43e54345df7fbb9ea20bba8bbbc10c9dc58d5cf2d0b6f6bed469d894
+docfiles size=71
RELOC/doc/latex/transparent/README.md details="Readme"
RELOC/doc/latex/transparent/transparent-example.tex
RELOC/doc/latex/transparent/transparent.pdf details="Package documentation"
-srccontainersize 5448
-srccontainerchecksum 73a5f575a644334ee5a61f740c4f5f2e09a10ee0c4c5732be70809f66f67fddc5979bafe4a7fcd8a2462e0dec2b98867e9ba1ff2d82e3be9743ecf5773cd5ab8
+srccontainersize 5284
+srccontainerchecksum b37938a27dce42366234f7ec2ad1287e4864f53426584ae72dfd801055a06dfd15cd7abffcc0908e22971b01eafe11521c01eaa36a9d0f15fa8b1e61d3d250f2
srcfiles size=5
RELOC/source/latex/transparent/transparent.dtx
-runfiles size=2
+runfiles size=3
+ RELOC/tex/latex/transparent/transparent-nometadata.sty
RELOC/tex/latex/transparent/transparent.sty
catalogue-contact-bugs https://github.com/ho-tex/transparent/issues
catalogue-contact-repository https://github.com/ho-tex/transparent
catalogue-ctan /macros/latex/contrib/transparent
-catalogue-license lppl1.3
+catalogue-license lppl1.3c
catalogue-topics typesetting
-catalogue-version 1.4
+catalogue-version 1.5
name transparent-io
category Package
@@ -325915,18 +326020,18 @@ catalogue-version 1.3a
name twemoji-colr
category Package
-revision 59957
+revision 64854
shortdesc Twemoji font in COLR/CPAL layered format
relocated 1
longdesc This is a COLR/CPAL-based color OpenType font from the Twemoji
longdesc collection of emoji images.
-containersize 564740
-containerchecksum 7e186ffdd023c84419ec704034872805c81bc729b2f828a61af2c1f4cdb3ac40720315967ebd2ceb0349169ffae6ff6e202a1d9196f8c0c0811c66844bae5dc9
-doccontainersize 708
-doccontainerchecksum 368ef5dcfa3609359b154d31d753c89cbe50f377c254cbb40a30beb0757f8bf177eb3bd48ae751f66bdc8c5f95238d514653a6381984a1c9c22ed99266272b42
+containersize 581228
+containerchecksum abc9583bbfd3690ff52b2341e74166fb70eb0f6abbaf99b01b0f24b818abbe3cd7556ef9cdc3cf58c056a038fe6fc3bdd45199c437a7eab99b300622e8d7308a
+doccontainersize 712
+doccontainerchecksum 90e01641e73702fe012510bf3c9cf741bbeb594d528b2eb69487bd57beeff59c27ab397902b3c42d5dd1b5745e5b69d0db80b3b2d399bb1ba67e2c85d14a88b5
docfiles size=1
RELOC/doc/fonts/twemoji-colr/README.md details="Readme"
-runfiles size=352
+runfiles size=360
RELOC/fonts/truetype/public/twemoji-colr/TwemojiMozilla.ttf
catalogue-contact-bugs https://github.com/mozilla/twemoji-colr/issues
catalogue-contact-home https://twemoji.twitter.com/
@@ -325934,7 +326039,7 @@ catalogue-contact-repository https://github.com/mozilla/twemoji-colr
catalogue-ctan /fonts/twemoji-colr
catalogue-license cc-by-sa-4 apache2
catalogue-topics font font-ttf font-symbol
-catalogue-version 0.6.0
+catalogue-version 0.7.0
name twemojis
category Package
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
index 993f7d52be..a4be8cdf90 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
@@ -1 +1 @@
-44a403404f0b9115646ff2d9b973fe40 texlive.tlpdb
+f18bb6f0bb1e42e048f50c07f77fe96a texlive.tlpdb
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
index e0c269f2cc..2b3cb22384 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
@@ -1 +1 @@
-8e2c1233627d6d69f9bd4d53e8a958f47bf5b2ca58064bac4c43318843a393bbc731c5d3b07b872a092e82338d223804db3da014410cd25f57a49ced7deb6f94 texlive.tlpdb
+a53e6e4d8da1c4616235b314d60f74fa0811d42bdc47b00cc3b398d0a7b2952bf74bb25509e9403e691aa2d2220e418fade136546b0d78030d182235fbb683b1 texlive.tlpdb
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
index 54e0db817a..3ab4d29563 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
@@ -1,10 +1,10 @@
-----BEGIN PGP SIGNATURE-----
-iQEcBAEBCgAGBQJjXGt8AAoJEEzhh34ZQ4xwH7wH/AxbagWxPaqTsnAwyysBzhPW
-kAjej+2rOGEc15CAVgOdk5uA8Ydp9ptLbG7uHToC4VfQd8SID/72RV34t+0Oczxv
-edpEt7+m+6qDvGtKqb6bpOlhNz2hS2Z1y5eqP6S7HsbwS8NKteBwaa0PEqif/2va
-I7tOGn+X2Cr5cPgv54TAKZS1jsvr09QKAqczc0qQKDvEo/PPQ0NH6DZ6++FaTvVt
-YZhPpCcWHSq7BpJsXH7aubJ6qW1iGWMkDi70lQAKZ+hY+eJHtPrODeWd/DbtDXXC
-3SglSqSApOet7SPc2I/vGzctMOKp8DBHsBpwwlplYvEOfjfXtPIQliK3bqoZou4=
-=SMJG
+iQEcBAEBCgAGBQJjXb0OAAoJEEzhh34ZQ4xww8UH/jhZuZfr8S2QPm6wWcg+JtD+
+IavOaWl4d8HZHFBKCzBRPUboHarJ0OwTHmu5PmRdl8ZVrZxRaneOC8Ab/rE6DhAT
+xJhczNp1IpbwQTkGGJp9mWtU/u3YY5QBaDhUWuCYIFszi4UBr2fs38H8WEHOU10i
+xRkiZuv0xQefRT9tF/jwPvgzBxkddKafATNGuYBrPTsDkAAq5Oq/ccgcOWEB4hfY
+tNpzmpSAISerHVNzDwG2Xvb6cvld9L94LWuoOM+x0LG5tv7WkP/61BR5iataWj4s
+LuIQa+VNHQZ1HbYM0OZHrostX6eb9bcGbC42DhnKdRA8jgTjBFYItjl5jh0ul7I=
+=GmZS
-----END PGP SIGNATURE-----
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
index 534be33f79..f419b86121 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
Binary files differ
diff --git a/systems/win32/miktex/tm/packages/next/pr.ini b/systems/win32/miktex/tm/packages/next/pr.ini
index 73180009a6..3cc154c584 100644
--- a/systems/win32/miktex/tm/packages/next/pr.ini
+++ b/systems/win32/miktex/tm/packages/next/pr.ini
@@ -1,13 +1,13 @@
[repository]
-date=1667074589
+date=1667164587
lastupd=miktex-arctrl-bin-x64-2.9 miktex-asymptote-bin-x64-2.9 miktex-autosp-bin-x64-2.9 miktex-axohelp-bin-x64-2.9 miktex-bibarts-bin-x64-2.9 miktex-bibtex-bin-x64-2.9 miktex-bibtex8bit-bin-x64-2.9 miktex-bzip2-bin-x64-2.9 miktex-cairo-bin-x64-2.9 miktex-chktex-bin-x64-2.9 miktex-cjkutils-bin-x64-2.9 miktex-console-bin-x64-2.9 miktex-curl-bin-x64-2.9 miktex-cweb-bin-x64-2.9 miktex-devnag-bin-x64-2.9 miktex-doc miktex-dvicopy-bin-x64-2.9 miktex-dvipdfmx-bin-x64-2.9 miktex-dvipng-bin-x64-2.9 miktex-dvips-bin-x64-2.9
-lstdigest=0193f6cce2a09c97a23e8968df45d66a
+lstdigest=83a1801bcb95ed60c18e976c17f58ef3
numpkg=6103
relstate=next
-version=8337
+version=8338
;;;;This configuration file is signed by a MiKTeX maintainer. The signature follows.
;;;;-----BEGIN MIKTEX SIGNATURE-----
-;;;; signature/miktex: ZTk8KOC7xhTuc8aq4ocqLVnRqhhtLhBLnUy0UHBH5ngkTHWwOEZUgOL4x2J+OuiOu0j2USjs0Aj38I7KUfgC5G8L8tDSkWi5+pe+ojO+Qi0K0QdCqiA1ukOSU5CpOOp9td6FlfGwiLGi4msonzrd5HErPX9AM/oCh6Hy/XvIgpku4zycWvATYMO7PSAyxpgJhjagLfQxi69yF2/aKLMw9bKflpJVCKRl/T3REOAuaAQVSSXHmIJsLWEHShngRqwDraClLnw/BZVgWKguJEw36lrn97mBMEdkOaVxvW66rufLNPOXNj4D/XX6unhr0oIb7cA2/SGkWp9NvmNpb53eLg==
+;;;; signature/miktex: Uo/QfsDNVvOZPmMzArXrTuapKIdIb+CR0XZ2/ZASBhVEX/DznSKSlpTibsXkYiZ7cUHeNaTHgStbithT0Du4Z4+1Royp4gTFy1BFkR3ovdWfweDH2+62Bsyoh3FaUCifCcDvcsxZW9Qzbmngf9caV0+SX7nx4pBWFGPBA+HyvRZscwsY0K5ZUzsGFRmSZgWeZx330FPugZvLonflGlJpte3NVq5q+++OVY+gIMAdgLFp+NB6GjxIc0dXug21UuMsouqDWN1Ivo/cIOb6KrpTFghkEgAX/lEJIUFopyxp4q5VH8gaPjKjq/WWdeRc/xkpNI2fA5DXBqpf5UP2KcZz7w==
;;;;-----END MIKTEX SIGNATURE-----
diff --git a/systems/win32/miktex/tm/packages/pr.ini b/systems/win32/miktex/tm/packages/pr.ini
index 4bfeba5d02..2306bc9d14 100644
--- a/systems/win32/miktex/tm/packages/pr.ini
+++ b/systems/win32/miktex/tm/packages/pr.ini
@@ -1,13 +1,13 @@
[repository]
-date=1667074297
+date=1667164294
lastupd=pgf-periodictable pgf-periodictable__doc pgf-periodictable__source urw-base35 urw-base35__doc urw-base35__source miktex-runtime-bin-x64-2.9 standalone was was__doc was__source xcharter-math xcharter-math__doc xcharter-math__source abntexto abntexto__doc abntexto__source algpseudocodex algpseudocodex__doc algpseudocodex__source
-lstdigest=682f09bbc0cdc4e808637b502c3944c5
+lstdigest=9fab14f83dd5ac67db881004ae8f9829
numpkg=6103
relstate=stable
-version=8337
+version=8338
;;;;This configuration file is signed by a MiKTeX maintainer. The signature follows.
;;;;-----BEGIN MIKTEX SIGNATURE-----
-;;;; signature/miktex: AdeXt7jMOOe8cIkOBqxgrH10dMTioFdgZmnsWrQpRVlN+xA2mPVMTVH4mgqDX0vI/fCFEbo5H4FPzz13nRn0rvMMyc1Vr+6yOZYEhO8QAbHlVcyHV5CFJXjJ8idnFj96IMioQuHdvIl49/9uuvtPzC94r2NMZl0pw/ZonuC6L4z7DqQgJpf5W8a4fGzq7R29/1tdS20C5OxYP6s0vm8S5qLxw6OOZXV402Y631Dj4ofs0+XQXAOCvIZHOC6YRRHdy1Lp2kCh6w4hGdbad8FtST9lhJwU8yGx1x8YbRKLLG5oGiCe1VHh+xoJfJqh1ZIsUdwMP+IGPv/kexT+bK6mQw==
+;;;; signature/miktex: F8puSUh+JylQ969v+o3Phr7VCUHn9SAz1grk3TL3OHzz2dEeip+sp/y7/ZFeFCt4u0HsGRvn48XL6gdr354XnNhFsBW0tDgCbWzlFTHibFbBQxYFS9jiOhp1lsFGRB6MlYIUT5PmzAvoL2511PG8gaeaGBKkIClde0oCAQlc81wHSSFRSChCCUAn9DrGXps1ex5dnjjsIoLfuEmOY40Htf9kxLhf9TycHvRbkVFPgIqeDeQKmJizEh8QgQo1GtdyrI5u0XW4Bma6NWanrqanMxWsD3+tIrIvtGiNOAIZTE15rC4YK2IGkGDhFxRbgpcMWZ1YHYpYbQU8O9r8K2zV1w==
;;;;-----END MIKTEX SIGNATURE-----
diff --git a/timestamp b/timestamp
index 25024195e0..f320f7d9e0 100644
--- a/timestamp
+++ b/timestamp
@@ -2,4 +2,4 @@
# The source CTAN of this site's material:
dante.ctan.org
# The year-month-day-hour-minute of this site's material:
-2022-10-30-02-02
+2022-10-31-02-02