diff options
Diffstat (limited to 'macros')
130 files changed, 1238 insertions, 780 deletions
diff --git a/macros/latex/contrib/acmart/ACM-Reference-Format.bst b/macros/latex/contrib/acmart/ACM-Reference-Format.bst index fa5273282a..8b97b18812 100644 --- a/macros/latex/contrib/acmart/ACM-Reference-Format.bst +++ b/macros/latex/contrib/acmart/ACM-Reference-Format.bst @@ -426,6 +426,44 @@ FUNCTION { output.coden } % UTAH if$ } +% +% Sometimes articleno starts with the word 'Article' or 'Paper. +% (this is a bug of acmdl, sigh) +% We strip them. We assume eid or articleno is already on stack +% + +FUNCTION { strip.articleno.or.eid } +{ + 't := + t #1 #7 substring$ "Article" = + {t #8 t text.length$ substring$ 't :=} + { } + if$ + t #1 #7 substring$ "article" = + {t #8 t text.length$ substring$ 't :=} + { } + if$ + t #1 #5 substring$ "Paper" = + {t #6 t text.length$ substring$ 't :=} + { } + if$ + t #1 #5 substring$ "paper" = + {t #6 t text.length$ substring$ 't :=} + { } + if$ + % Strip any left trailing space or ~ + t #1 #1 substring$ " " = + {t #2 t text.length$ substring$ 't :=} + { } + if$ + t #1 #1 substring$ "~" = + {t #2 t text.length$ substring$ 't :=} + { } + if$ + t +} + + FUNCTION { format.articleno } { articleno empty.or.unknown not eid empty.or.unknown not and @@ -441,8 +479,8 @@ FUNCTION { format.articleno } { } if$ eid empty.or.unknown - { "Article \bibinfo{articleno}{" articleno * "}" * } - { "Article \bibinfo{articleno}{" eid * "}" * } + { "Article \bibinfo{articleno}{" articleno strip.articleno.or.eid * "}" * } + { "Article \bibinfo{articleno}{" eid strip.articleno.or.eid * "}" * } if$ } if$ diff --git a/macros/latex/contrib/acmart/Makefile b/macros/latex/contrib/acmart/Makefile index 96f5db4e8e..68e33d0437 100644 --- a/macros/latex/contrib/acmart/Makefile +++ b/macros/latex/contrib/acmart/Makefile @@ -51,20 +51,20 @@ samples/$(PACKAGE).cls: $(PACKAGE).cls samples/ACM-Reference-Format.bst: ACM-Reference-Format.bst samples/%.pdf: samples/%.tex samples/$(PACKAGE).cls samples/ACM-Reference-Format.bst - cd $(dir $@) && pdflatex $(notdir $<) + cd $(dir $@) && pdflatex-dev $(notdir $<) - cd $(dir $@) && bibtex $(notdir $(basename $<)) - cd $(dir $@) && pdflatex $(notdir $<) - cd $(dir $@) && pdflatex $(notdir $<) + cd $(dir $@) && pdflatex-dev $(notdir $<) + cd $(dir $@) && pdflatex-dev $(notdir $<) while ( grep -q '^LaTeX Warning: Label(s) may have changed' $(basename $<).log) \ - do cd $(dir $@) && pdflatex $(notdir $<); done + do cd $(dir $@) && pdflatex-dev $(notdir $<); done samples/sample-xelatex.pdf: samples/sample-xelatex.tex samples/$(PACKAGE).cls samples/ACM-Reference-Format.bst - cd $(dir $@) && xelatex $(notdir $<) + cd $(dir $@) && xelatex-dev $(notdir $<) - cd $(dir $@) && bibtex $(notdir $(basename $<)) - cd $(dir $@) && xelatex $(notdir $<) - cd $(dir $@) && xelatex $(notdir $<) + cd $(dir $@) && xelatex-dev $(notdir $<) + cd $(dir $@) && xelatex-dev $(notdir $<) while ( grep -q '^LaTeX Warning: Label(s) may have changed' $(basename $<).log) \ - do cd $(dir $@) && xelatex $(notdir $<); done + do cd $(dir $@) && xelatex-dev $(notdir $<); done diff --git a/macros/latex/contrib/acmart/README b/macros/latex/contrib/acmart/README index 8e584fcc3c..c0781d2b64 100644 --- a/macros/latex/contrib/acmart/README +++ b/macros/latex/contrib/acmart/README @@ -252,3 +252,10 @@ Version 1.66 Bug fixes Version 1.67 Urgent bug fixes: BibTeX style bug fixed (Michael D. Adams) Sigplan special section bugfix + +Version 1.68 Bug fixes + BST now recognizes words `Paper' or 'Article' in + eid or articleno + +Version 1.69 Bug fixes + Compatibility with LaTeX 2020-02-02 release diff --git a/macros/latex/contrib/acmart/acmart.dtx b/macros/latex/contrib/acmart/acmart.dtx index d63df04341..389e3e6e35 100644 --- a/macros/latex/contrib/acmart/acmart.dtx +++ b/macros/latex/contrib/acmart/acmart.dtx @@ -1842,7 +1842,7 @@ \ProvidesFile{acmart.dtx} %</gobble> %<class>\ProvidesClass{acmart} -[2020/01/11 v1.67 Typesetting articles for the Association for Computing Machinery] +[2020/02/08 v1.69 Typesetting articles for the Association for Computing Machinery] % \end{macrocode} % % \changes{v1.00}{2016/04/14}{First released version} @@ -4620,10 +4620,11 @@ % \changes{v1.40}{2017/05/27}{Now we can parse |Significance~General| nodes} % \changes{v1.56}{2018/10/23}{End the concepts list with a period % (Philip Quinn)} +% \changes{v1.69}{2019/02/06}{Use math right arrow in text} % The parser of the expression |Significance~General~Specific| (we need % |textcomp| for |\textrightarrow|). Note that |Specific| can be empty! % \begin{macrocode} -\RequirePackage{textcomp} +\def\textrightarrow{$\rightarrow$} \def\ccsdesc@parse#1~#2~#3~{% \stepcounter{@concepts}% \expandafter\ifx\csname CCS@General@#2\endcsname\relax @@ -5202,12 +5203,11 @@ % \changes{v1.66}{2019/11/23}{Suppress warnings about \cs{vspace}} % \changes{v1.67}{2020/01/11}{Paragraph inside group does not print % its argument. Added a bugfix} +% \changes{v1.68}{2020/01/19}{Deleted grouping altogether} +% \changes{v1.69}{2020/02/02}{Changed dot to colon for sigplan} % This macro starts sections for proceedings and uses \cs{small} for journals % \begin{macrocode} \def\@specialsection#1{% - \bgroup - \let\@vspace\@vspace@orig - \let\@vspacer\@vspacer@orig \ifcase\ACM@format@nr \relax % manuscript \par\medskip\small\noindent#1: % @@ -5222,13 +5222,13 @@ \or % siggraph \section*{#1}% \or % sigplan - \noindent\emph{\bfseries#1.}~% + \noindentparagraph*{#1:~}% \or % sigchi \section*{#1}% \or % sigchi-a \section*{#1}% \fi - \egroup} +} % \end{macrocode} % % \end{macro} @@ -6058,13 +6058,16 @@ % \begin{macro}{\@printendtopmatter} % \changes{v1.46}{2017/08/28}{Made it \cs{par}\cs{bigskip} uniformly} % \changes{v1.58}{2019/01/23}{Deleted spurious \cs{vspace} warning} +% \changes{v1.69}{2020/02/02}{Deleted grouping} % End the top matter % \begin{macrocode} -\def\@printendtopmatter{\bgroup +\def\@printendtopmatter{% \let\@vspace\@vspace@orig \let\@vspacer\@vspacer@orig \par\bigskip - \egroup} + \let\@vspace\@vspace@acm + \let\@vspacer\@vspacer@acm + } % \end{macrocode} % % \end{macro} @@ -6164,14 +6167,35 @@ % \begin{macro}{\ACM@linecountR} % \changes{v1.33}{2017/03/29}{Added macro} % \changes{v1.34}{2017/04/10}{Rulers now are continuous} -% How to display the box on the right +% \changes{v1.69}{2020/02/02}{Do not increase numbers in one column format} +% How to display the box on the right. In one column formats we do +% not step the numbers. % \begin{macrocode} \def\ACM@linecountR{% \if@ACM@review - \ACM@mk@linecount - \begin{picture}(0,0)% - \put(20,-22){\usebox{\ACM@linecount@bx}}% - \end{picture}% + \ifcase\ACM@format@nr + \relax % manuscript + \relax + \or % acmsmall + \relax + \or % acmlarge + \relax + \or % acmtog + \ACM@mk@linecount + \or % sigconf + \ACM@mk@linecount + \or % siggraph + \ACM@mk@linecount + \or % sigplan + \ACM@mk@linecount + \or % sigchi + \ACM@mk@linecount + \or % sigchi-a + \ACM@mk@linecount + \fi + \begin{picture}(0,0)% + \put(20,-22){\usebox{\ACM@linecount@bx}}% + \end{picture}% \fi} % \end{macrocode} % @@ -6568,6 +6592,8 @@ % % \changes{v1.54}{2018/05/27}{Deleted indent for subsubsection} % \changes{v1.54}{2018/06/17}{Added Ross's patch for sectioning} +% \changes{v1.68}{2020/01/19}{New command for unindent paras} +% \changes{v1.69}{2020/02/02}{No dots for unindented paragraphs} % Sectioning is different for different levels % \begin{macrocode} \renewcommand\section{\@startsection{section}{1}{\z@}% @@ -6586,6 +6612,10 @@ {-.5\baselineskip \@plus -2\p@ \@minus -.2\p@}% {-3.5\p@}% {\ACM@NRadjust{\@parfont\@adddotafter}}} +\newcommand\noindentparagraph{\@startsection{paragraph}{4}{\z@}% + {-.5\baselineskip \@plus -2\p@ \@minus -.2\p@}% + {-3.5\p@}% + {\ACM@NRadjust{\@parfont}}} \renewcommand\part{\@startsection{part}{9}{\z@}% {-10\p@ \@plus -4\p@ \@minus -2\p@}% @@ -7070,6 +7100,7 @@ % \changes{v1.57}{2018/12/16}{Added warning} % \changes{v1.58}{2019/01/23}{Preserved old versions as % \cs{@vspace@orig} and \cs{@vspace@orig}} +% \changes{1.69}{2020/02/02}{Added the changed command to avoid grouping} % We do not disable \cs{vspace}, but add warning to it % \begin{macrocode} \let\@vspace@orig=\@vspace @@ -7079,7 +7110,9 @@ objects}}{}{} \apptocmd{\@vspacer}{\ClassWarning{\@classname}{\string\vspace\space should only be used to provide space above/below surrounding - objects}}{}{} + objects}}{}{} +\let\@vspace@acm=\@vspace +\let\@vspacer@acm=\@vspacer % \end{macrocode} % % \end{macro} diff --git a/macros/latex/contrib/acmart/acmart.pdf b/macros/latex/contrib/acmart/acmart.pdf Binary files differindex 29ae3c77c6..f54d34e6e0 100644 --- a/macros/latex/contrib/acmart/acmart.pdf +++ b/macros/latex/contrib/acmart/acmart.pdf diff --git a/macros/latex/contrib/acmart/acmguide.pdf b/macros/latex/contrib/acmart/acmguide.pdf Binary files differindex af84e88ca0..1d7121c44f 100644 --- a/macros/latex/contrib/acmart/acmguide.pdf +++ b/macros/latex/contrib/acmart/acmguide.pdf diff --git a/macros/latex/contrib/acmart/samples/sample-acmlarge.pdf b/macros/latex/contrib/acmart/samples/sample-acmlarge.pdf Binary files differindex b825eb8c3c..5a05ff8d3b 100644 --- a/macros/latex/contrib/acmart/samples/sample-acmlarge.pdf +++ b/macros/latex/contrib/acmart/samples/sample-acmlarge.pdf diff --git a/macros/latex/contrib/acmart/samples/sample-acmsmall-conf.pdf b/macros/latex/contrib/acmart/samples/sample-acmsmall-conf.pdf Binary files differindex ea39d42da6..fd0221fe85 100644 --- a/macros/latex/contrib/acmart/samples/sample-acmsmall-conf.pdf +++ b/macros/latex/contrib/acmart/samples/sample-acmsmall-conf.pdf diff --git a/macros/latex/contrib/acmart/samples/sample-acmsmall.pdf b/macros/latex/contrib/acmart/samples/sample-acmsmall.pdf Binary files differindex 0f5e101957..bd87b06be8 100644 --- a/macros/latex/contrib/acmart/samples/sample-acmsmall.pdf +++ b/macros/latex/contrib/acmart/samples/sample-acmsmall.pdf diff --git a/macros/latex/contrib/acmart/samples/sample-acmtog.pdf b/macros/latex/contrib/acmart/samples/sample-acmtog.pdf Binary files differindex e69c92bd20..c4ed5e87cf 100644 --- a/macros/latex/contrib/acmart/samples/sample-acmtog.pdf +++ b/macros/latex/contrib/acmart/samples/sample-acmtog.pdf diff --git a/macros/latex/contrib/acmart/samples/sample-authordraft.pdf b/macros/latex/contrib/acmart/samples/sample-authordraft.pdf Binary files differindex baa98ac773..a05f96b441 100644 --- a/macros/latex/contrib/acmart/samples/sample-authordraft.pdf +++ b/macros/latex/contrib/acmart/samples/sample-authordraft.pdf diff --git a/macros/latex/contrib/acmart/samples/sample-base.bib b/macros/latex/contrib/acmart/samples/sample-base.bib index 48ec212b3f..dde657f885 100644 --- a/macros/latex/contrib/acmart/samples/sample-base.bib +++ b/macros/latex/contrib/acmart/samples/sample-base.bib @@ -215,16 +215,15 @@ author = "Sarah Cohen and Werner Nutt and Yehoshua Sagic", title = "Deciding equivalances among conjunctive aggregate queries", journal = JACM, - articleno = "5", - numpages = "50", - volume = "54", - number = "2", + articleno = 5, + numpages = 50, + volume = 54, + number = 2, month = apr, - year = "2007", + year = 2007, doi = "10.1145/1219092.1219093", url = "http://doi.acm.org/10.1145/1219092.1219093", - acmid = "1219093", - note = "", + acmid = 1219093, } @@ -492,59 +491,38 @@ Editors= "Z. Ghahramani and R. Cowell" @Inproceedings{VanGundy07, author = "Matthew Van Gundy and Davide Balzarotti and Giovanni Vigna", - year = "2007", + year = 2007, title = "Catch me, if you can: Evading network signatures with web-based polymorphic worms", booktitle = "Proceedings of the first USENIX workshop on Offensive Technologies", series = "WOOT '07", publisher = "USENIX Association", address = "Berkley, CA", - articleno = "7", - numpages = "9", - editor = "", - volume = "", - number = "", - pages = "", - month = "", - organization = "", - note = "", + articleno = {Paper 7}, + numpages = 9, } @Inproceedings{VanGundy08, author = "Matthew Van Gundy and Davide Balzarotti and Giovanni Vigna", - year = "2008", + year = 2008, title = "Catch me, if you can: Evading network signatures with web-based polymorphic worms", booktitle = "Proceedings of the first USENIX workshop on Offensive Technologies", series = "WOOT '08", publisher = "USENIX Association", address = "Berkley, CA", - articleno = "7", - numpages = "2", - editor = "", - volume = "", - number = "", + articleno = 7, + numpages = 2, pages = "99-100", - month = "", - organization = "", - note = "", } @Inproceedings{VanGundy09, author = "Matthew Van Gundy and Davide Balzarotti and Giovanni Vigna", - year = "2009", + year = 2009, title = "Catch me, if you can: Evading network signatures with web-based polymorphic worms", booktitle = "Proceedings of the first USENIX workshop on Offensive Technologies", series = "WOOT '09", publisher = "USENIX Association", address = "Berkley, CA", - articleno = "", - numpages = "", - editor = "", - volume = "", - number = "", pages = "90--100", - month = "", - organization = "", - note = "", } @Inproceedings{Andler79, @@ -695,7 +673,7 @@ year = {2003}, volume = "12", number = "3", month = jul, - articleno = "5", + articleno = "Article~5", doi = "", url = "", howpublished = "", @@ -720,14 +698,14 @@ year = {2003}, author = {Werneck, Renato and Setubal, Jo\~{a}o and da Conceic\~{a}o, Arlindo}, title = {(new) Finding minimum congestion spanning trees}, journal = {J. Exp. Algorithmics}, - volume = {5}, + volume = 5, month = dec, - year = {2000}, + year = 2000, issn = {1084-6654}, - articleno = {11}, + articleno = 11, url = {http://portal.acm.org/citation.cfm?id=351827.384253}, doi = {10.1145/351827.384253}, - acmid = {384253}, + acmid = 384253, publisher = {ACM}, address = {New York, NY, USA}, } diff --git a/macros/latex/contrib/acmart/samples/sample-manuscript.pdf b/macros/latex/contrib/acmart/samples/sample-manuscript.pdf Binary files differindex 07669d4ce8..53500a2498 100644 --- a/macros/latex/contrib/acmart/samples/sample-manuscript.pdf +++ b/macros/latex/contrib/acmart/samples/sample-manuscript.pdf diff --git a/macros/latex/contrib/acmart/samples/sample-sigchi-a.pdf b/macros/latex/contrib/acmart/samples/sample-sigchi-a.pdf Binary files differindex 940cc553d9..46e9f4c8ab 100644 --- a/macros/latex/contrib/acmart/samples/sample-sigchi-a.pdf +++ b/macros/latex/contrib/acmart/samples/sample-sigchi-a.pdf diff --git a/macros/latex/contrib/acmart/samples/sample-sigchi.pdf b/macros/latex/contrib/acmart/samples/sample-sigchi.pdf Binary files differindex 773432ce6d..906f91858e 100644 --- a/macros/latex/contrib/acmart/samples/sample-sigchi.pdf +++ b/macros/latex/contrib/acmart/samples/sample-sigchi.pdf diff --git a/macros/latex/contrib/acmart/samples/sample-sigconf.pdf b/macros/latex/contrib/acmart/samples/sample-sigconf.pdf Binary files differindex 7fbea363fb..592dbb49f5 100644 --- a/macros/latex/contrib/acmart/samples/sample-sigconf.pdf +++ b/macros/latex/contrib/acmart/samples/sample-sigconf.pdf diff --git a/macros/latex/contrib/acmart/samples/sample-sigplan.pdf b/macros/latex/contrib/acmart/samples/sample-sigplan.pdf Binary files differindex 6a29056f3b..f8cf4e026a 100644 --- a/macros/latex/contrib/acmart/samples/sample-sigplan.pdf +++ b/macros/latex/contrib/acmart/samples/sample-sigplan.pdf diff --git a/macros/latex/contrib/acmart/samples/sample-xelatex.pdf b/macros/latex/contrib/acmart/samples/sample-xelatex.pdf Binary files differindex 31f5777864..f7273d8595 100644 --- a/macros/latex/contrib/acmart/samples/sample-xelatex.pdf +++ b/macros/latex/contrib/acmart/samples/sample-xelatex.pdf diff --git a/macros/latex/contrib/acmart/samples/samples.dtx b/macros/latex/contrib/acmart/samples/samples.dtx index 33b67895bd..0c9e2514bb 100644 --- a/macros/latex/contrib/acmart/samples/samples.dtx +++ b/macros/latex/contrib/acmart/samples/samples.dtx @@ -617,7 +617,7 @@ suffix, of the \BibTeX\ file. Citations and references are numbered by default. A small number of ACM publications have citations and references formatted in the ``author year'' style; for these exceptions, please include this -command in the {\bfseries preamble} (before +command in the {\bfseries preamble} (before the command ``\verb|\begin{document}|'') of your \LaTeX\ source: \begin{verbatim} \citestyle{acmauthoryear} diff --git a/macros/latex/contrib/appendix/README b/macros/latex/contrib/appendix/README index bf4a0fa2fc..1c419d2d5e 100644 --- a/macros/latex/contrib/appendix/README +++ b/macros/latex/contrib/appendix/README @@ -5,11 +5,14 @@ The APPENDIX package of appendices. Also (sub)appendices environments are provided that can be used, for example, for per chapter/section appendices. +Changes v1.2c (2020-02-08) +- Fix clash with hyperref + Changes v1.2b (2009/09/02) - New maintainer (Will Robertson) Changes v1.2a (2004/04/16) -- Updated contact details +- Updated contact details - Changed license from LPPL v1.0 to LPPL v1.3 Changes in version 1.2 (2002/08/06) @@ -23,19 +26,20 @@ Changes in version 1.1 (2000/02/29) - Addition of a subappendices environment for per chapter/section appendices - Appendices environment now restores chapter/section numbering at the end ------------------------------------------------------------------ +----------------------------------------------------------------- Author: Peter Wilson, Herries Press Maintainer: Will Robertson (will dot robertson at latex-project dot org) Copyright 1998--2004 Peter R. Wilson - + Copyright 2009--2020 Will Robertson + This work may be distributed and/or modified under the conditions of the LaTeX Project Public License, either - version 1.3c of this license or (at your option) any + version 1.3c of this license or (at your option) any later version: <http://www.latex-project.org/lppl.txt> - + This work has the LPPL maintenance status "maintained". The Current Maintainer of this work is Will Robertson. - + This work consists of the files: README (this file) appendix.dtx @@ -44,17 +48,17 @@ appendix.pdf (the user manual) and the derived files: appendix.sty ------------------------------------------------------------------ +----------------------------------------------------------------- To install the package: - run: latex appendix.ins (which will generate appendix.sty) - Move appendix.sty to a location where LaTeX will find it (typically in a local texmf tree at tex/latex/appendix) and refresh the file database. See the FAQ on CTAN at help/uk-tex-faq or - http://www.tug.ac.uk/faq for more information on this. + https://texfaq.org/ for more information on this. - To obtain the user manual: o run: latex appendix.dtx o run: makeindex -s gind.ist appendix o run: latex appendix.dtx - o Print appendix.dvi for a hardcopy of the package manual + o Print appendix.dvi for a hardcopy of the package manual diff --git a/macros/latex/contrib/appendix/appendix.dtx b/macros/latex/contrib/appendix/appendix.dtx index 1b5c16d409..d2c4d22479 100644 --- a/macros/latex/contrib/appendix/appendix.dtx +++ b/macros/latex/contrib/appendix/appendix.dtx @@ -3,10 +3,11 @@ % Author: Peter Wilson, Herries Press % Maintainer: Will Robertson (will dot robertson at latex-project dot org) % Copyright 1998--2004 Peter R. Wilson +% Copyright 2009--2020 Will Robertson % % This work may be distributed and/or modified under the % conditions of the LaTeX Project Public License, either -% version 1.3c of this license or (at your option) any +% version 1.3c of this license or (at your option) any % later version: <http://www.latex-project.org/lppl.txt> % % This work has the LPPL maintenance status "maintained". @@ -14,7 +15,7 @@ % % This work consists of the files listed in the README file. % -% +% %<*driver> \documentclass{ltxdoc} \EnableCrossrefs @@ -27,8 +28,6 @@ % % \fi % -% \CheckSum{481} -% % \DoNotIndex{\',\.,\@M,\@@input,\@addtoreset,\@arabic,\@badmath} % \DoNotIndex{\@centercr,\@cite} % \DoNotIndex{\@dotsep,\@empty,\@float,\@gobble,\@gobbletwo,\@ignoretrue} @@ -79,6 +78,7 @@ % \changes{v1.2}{2002/08/06}{Don't need the ifthen package any more} % \changes{v1.2a}{2004/04/16}{Changed license and contact details} % \changes{v1.2b}{2009/09/02}{New maintainer (Will Robertson)} +% \changes{v1.2c}{2020/02/08}{Fix clash with hyperref} % % \def\dtxfile{appendix.dtx} % \def\fileversion{v1.1} \def\filedate{2000/02/29} @@ -86,6 +86,7 @@ % \def\fileversion{v1.2} \def\filedate{2002/08/06} % \def\fileversion{v1.2a} \def\filedate{2004/04/16} % \def\fileversion{v1.2b} \def\filedate{2009/09/02} +% \def\fileversion{v1.2c} \def\filedate{2020/02/08} % % \newcommand*{\Lpack}[1]{\textsf {#1}} ^^A typeset a package % \newcommand*{\Lopt}[1]{\textsf {#1}} ^^A typeset an option @@ -114,7 +115,7 @@ % The package % is designed to work only with classes that have a |\chapter| and/or % |\section| command. It has not been tested with other packages -% that change the definitions of the sectioning commands. +% that change the definitions of the sectioning commands. % \end{abstract} % \tableofcontents % @@ -139,9 +140,9 @@ % \end{itemize} % % The \Lpack{appendix} package provides additional appendixing capabilities. -% It cooperates with the \Lpack{hyperref} -% package\footnote{With thanks to Hylke W. van Dijk -% (\texttt{hylke@ubicom.tudelft.nl}) who pointed out that version~1.1 did +% It cooperates with the \Lpack{hyperref} +% package\footnote{With thanks to Hylke W. van Dijk +% (\texttt{hylke@ubicom.tudelft.nl}) who pointed out that version~1.1 did % not and set me on the track for supporting the \Lpack{hyperref} package.} % but may be problematic when used with packages that change the definition % of the sectioning commands. @@ -160,7 +161,7 @@ % The \Lpack{appendix} package provides some commands that can be % used in addition to the |\appendix| command. It also provides % a new environment that can be used instead of the |\appendix| command. -% The environment provides some addtional actions with respect to +% The environment provides some additional actions with respect to % the simple |\appendix|. First the new commands will be described and % then the new environment will be discussed. % @@ -191,18 +192,18 @@ % For symmetry, the |\appendicestocpagenum| command ensures that % a page number is put in the ToC. % -% \textbf{NOTE:} Unless |\noappendicestocpagenum| is used -% the |\addappheadtotoc| command uses the +% \textbf{NOTE:} Unless |\noappendicestocpagenum| is used +% the |\addappheadtotoc| command uses the % current page number % when it makes the entry in the ToC. The |\appendixpage| command puts % a heading in the document like a |\part| heading; in un-chaptered documents -% the |\part| heading appears in the ordinary run of the text like a +% the |\part| heading appears in the ordinary run of the text like a % |\section| heading, but in chaptered documents it is on a page by itself. % That is, in chaptered documents |\appendixpage| does a |\clear[double]page| % typesets the heading, and then does another |\clear[double]page|. Therefore, -% in a chaptered document the above sequence of +% in a chaptered document the above sequence of % commands will use the page number -% \emph{after} the |\appendixpage| as the ToC +% \emph{after} the |\appendixpage| as the ToC % entry\footnote{With thanks to Eduardo Jacob (\texttt{edu@kender.es}) % for pointing this out.} and if the ordering % is reversed (i.e., |\addappheadtotoc| |\appendixname|) then the page number @@ -212,7 +213,7 @@ % | \addappheadtotoc| \\ % | \appendixpage| \\ % which will use the page number of |\appendixpage| as the ToC entry. -% +% % % \DescribeMacro{\appendixname} % \DescribeMacro{\appendixtocname} @@ -220,7 +221,7 @@ % The |\appendixname| command is defined in those classes that provide % for chapters. It is provided in this package whether or not it has % been defined in the class. It's default value is `Appendix'. -% The default value of both |\appendixtocname| and |\appendixpagename| is +% The default value of both |\appendixtocname| and |\appendixpagename| is % `Appendices'. These names can all be changed via |\renewcommand|. % For example, % \begin{verbatim} @@ -229,11 +230,11 @@ % % \DescribeEnv{appendices} % The |appendices| environment can be used instead of the |\appendix| -% command. It provides more functionality than is possible from the +% command. It provides more functionality than is possible from the % combination of the |\appendix|, |\addappheadtotoc| and |\appendixpage| % commands. % The functions of the |appendices| environment are usually accessed through -% the package options, but there are declarations that mey be used insted. +% the package options, but there are declarations that may be used instead. % The options are: % \begin{itemize} % \item \Lopt{toc} Put a header (e.g., `Appendices') into the Table @@ -243,7 +244,7 @@ % at the point where the |appendices| environment is begun. % (This is done by calling the |\appendixpage| command.) % \item \Lopt{title} Adds a name (e.g., `Appendix') before each appendix -% title in the body of the document. +% title in the body of the document. % The name is given by the value of |\appendixname|. % Note that this is the default behaviour for classes that have % chapters. @@ -277,29 +278,29 @@ % \DescribeMacro{\appendixpageon} % \DescribeMacro{\appendixpageoff} % |\appendixpagecon| is a declaration equivalent to the \Lopt{page} option. -% The |\appendixpageoff| declaration is equivalent to not using +% The |\appendixpageoff| declaration is equivalent to not using % that option. % % \DescribeMacro{\appendixtitleon} % \DescribeMacro{\appendixtitleoff} % |\appendixtitleon| is a declaration equivalent to the \Lopt{title} option. -% The |\appendixtitleoff| declaration is equivalent to not using +% The |\appendixtitleoff| declaration is equivalent to not using % that option. % % \DescribeMacro{\appendixtitletocon} % \DescribeMacro{\appendixtitletocoff} % |\appendixtitletocon| is a declaration equivalent to the \Lopt{titletoc} option. -% The |\appendixtitletocoff| declaration is equivalent to not using +% The |\appendixtitletocoff| declaration is equivalent to not using % that option. % % \DescribeMacro{\appendixheaderon} % \DescribeMacro{\appendixheaderoff} % |\appendixheaderon| is a declaration equivalent to the \Lopt{header} option. -% The |\appendixheaderoff| declaration is equivalent to not using +% The |\appendixheaderoff| declaration is equivalent to not using % that option. % % \DescribeMacro{\restoreapp} -% The |appendices| environment restores the prior value of the +% The |appendices| environment restores the prior value of the % chapter/section counter at the end of the environment, so the % environment may be used between the main document divisions. By default, % the appendix counter value is saved and restored by the environment. That @@ -311,7 +312,7 @@ % \DescribeEnv{subappendices} % Within the |subappendices| environment, an appendix is introduced by a % |\section| command in chaptered documents, otherwise it is introduced -% by a |\subsection| command. Effectively, this provides for appendices +% by a |\subsection| command. Effectively, this provides for appendices % at the end of a main document division, as an integral % part of the division. The |subappendices| environment supports only % the \Lopt{title} and \Lopt{titletoc} options. @@ -337,9 +338,9 @@ % then the text of the |\addcontentsline| command (`addtotoc' in the example) % is not written to the % appropriate (toc) file until \textit{after} the included file has written all -% its entries out to the (toc) file. As far as I can tell, there is no way +% its entries out to the (toc) file. As far as I can tell, there is no way % around this behaviour without rewriting parts of the \LaTeX{} kernel code. -% +% % It is thus up to the author to avoid putting an |\addcontentsline| command % (or a command that internally uses |\addcontentsline|, as does the % |\addappheadtotoc| command) before @@ -356,10 +357,23 @@ % \begin{macrocode} %<*usc> \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{appendix}[2009/09/02 v1.2b extra appendix facilities] - +\ProvidesPackage{appendix}[2020/02/08 v1.2c extra appendix facilities] +% \end{macrocode} +% +% Check that an \cs{appendix} command is actually defined and emit a warning +% if not. +% \begin{macrocode} +\begingroup\expandafter\expandafter\expandafter\endgroup + \expandafter\ifx\csname appendix\endcsname\relax + \PackageWarningNoLine{appendix}{% + No \protect\appendix\space command in this document class!% + \MessageBreak + Trying to create an appendix will probably fail% + }% + \fi % \end{macrocode} % +% % In order to try and avoid name clashes with other packages, each internal % name will include the character string |@pp|. % @@ -553,7 +567,7 @@ % \begin{macro}{\appendixpage} % The command to typeset a page announcing the start of the appendices. % It is based on the |\part| definition (either from the \Lpack{book} -% class or the \Lpack{article} class). +% class or the \Lpack{article} class). % \begin{macrocode} \newcommand{\appendixpage}{% \if@chapter@pp \@chap@pppage \else \@sec@pppage \fi @@ -562,10 +576,10 @@ % \end{macro} % % \begin{macro}{\clear@ppage} -% The non-chaptered classes do not define |\if@openright|, but we need to +% The non-chaptered classes do not define |\if@openright|, but we need to % use this for chaptered documents to clear the appropriate pages. % |\clear@ppage| does the right thing, but must only be called in -% chapter related code, otherwise there will be error message like +% chapter related code, otherwise there will be error message like % |extra \else| or |extra \fi|. % \begin{macrocode} \newcommand{\clear@ppage}{% @@ -576,7 +590,7 @@ % % \begin{macro}{\@chap@pppage} % Do an appendix page in chapter style. -% Copy code from the \Lpack{book} class |\part| command, but use +% Copy code from the \Lpack{book} class |\part| command, but use % |\appendixpagename| as the title. % \begin{macrocode} \newcommand{\@chap@pppage}{% @@ -619,8 +633,8 @@ % \end{macro} % % \begin{macro}{\@sec@pppage} -% Copy code from the \Lpack{article} class |\part| command, but use -% |\appendixpagename| as +% Copy code from the \Lpack{article} class |\part| command, but use +% |\appendixpagename| as % the title. % \begin{macrocode} \newcommand{\@sec@pppage}{% @@ -650,11 +664,11 @@ % \begin{macro}{\noappendicestocpagenum} % \begin{macro}{\appendicestocpagenum} % \begin{macro}{\addappheadtotoc} -% The |\addappheadtotoc| command adds an `appendices' line to the ToC. +% The |\addappheadtotoc| command adds an `appendices' line to the ToC. % The style is the same % as used in \Lpack{tocbibind} for the `List of figures' line. That is, % as a Chapter heading or a Section heading. |\if@pptocpage| controls -% whether ot not a page number is put into the ToC. +% whether or not a page number is put into the ToC. % \changes{v1.2}{2002/08/06}{Added \cs{noappendicestocpagenum} and changed % \cs{addappheadtotoc}} % \begin{macrocode} @@ -678,7 +692,7 @@ \addtocontents{toc}% {\protect\contentsline{chapter}{\appendixtocname}{}}% \fi - \fi + \fi \else % \end{macrocode} % Not a chaptered document @@ -740,7 +754,7 @@ % % \begin{macro}{\theH@pps} % We are going to use |\theH@pps| to disambiguate contents of appendices -% that might have the same hyperref marks. It is |\provide|d as if +% that might have the same hyperref marks. It is |\provide|d as if % the \Lpack{appendix} and \Lpack{hyperref} are in the `wrong' order % then somehow \Lpack{hyperref} defines it before \Lpack{appendix} % can get to it. @@ -754,7 +768,7 @@ % \begin{macro}{\@resets@pp} % Resets the appropriate sectioning counters and names. This does almost % exactly -% what the default |\appendix| command does, except that it saves and +% what the default |\appendix| command does, except that it saves and % restores sectional numbering. It saves the sectional number at the start % and restores the appendix number at the end. % \changes{v1.1}{2000/02/29}{Added number save/restore to \cs{@reset@pp}} @@ -781,7 +795,7 @@ \else \renewcommand{\theHsection}{\theH@pps.\Alph{section}}% \fi - \def\Hy@chapapp{\appendixname}% + \xdef\Hy@chapapp{\Hy@appendixstring}% \fi \restoreapp } @@ -798,7 +812,7 @@ % \begin{macrocode} \newenvironment{appendices}{% \@resets@pp - \if@dotoc@pp + \if@dotoc@pp \if@dopage@pp % both page and toc \if@chapter@pp % chapters \clear@ppage @@ -824,7 +838,7 @@ \if@dotitletoc@pp \@redotocentry@pp{chapter} \fi \else % \end{macrocode} -% The rest of the code is specific to the section style. While we're in the +% The rest of the code is specific to the section style. While we're in the % mood we might as well finish off doing the \Lopt{titletoc} option. % \begin{macrocode} \if@dotitletoc@pp \@redotocentry@pp{section} \fi @@ -832,7 +846,7 @@ % The next piece of code implements the \Lopt{header} option by providing % a special version of |\sectionmark|. % \begin{macrocode} - \if@dohead@pp + \if@dohead@pp \def\sectionmark##1{% \if@twoside \markboth{\@formatsecmark@pp{##1}}{} @@ -842,7 +856,7 @@ \fi % \end{macrocode} % The next piece of code implements the \Lopt{title} option by doing cunning -% things with the |\@seccntformat|.\footnote{From a posting to +% things with the |\@seccntformat|.\footnote{From a posting to % \texttt{comp.tex.tex} by Donald Arseneau on 13 August 1998.} % \begin{macrocode} \if@dotitle@pp @@ -874,8 +888,8 @@ % \end{macro} % % \begin{macro}{\@resets@ppsub} -% Similar to |\@resets@pp| except that it is for use within the -% |subappendices| envirionment; as such, it is a bit simpler. +% Similar to |\@resets@pp| except that it is for use within the +% |subappendices| environment; as such, it is a bit simpler. % \changes{v1.1}{2000/02/29}{Added \cs{@resets@ppsub} command} % \changes{v1.2}{2002/08/07}{Added hyperref code to \cs{@resets@ppsub}} % \begin{macrocode} @@ -897,7 +911,7 @@ \else \renewcommand{\theHsubsection}{\theH@pps.\setthesubsection}% \fi - \def\Hy@chapapp{\appendixname}% + \xdef\Hy@chapapp{\Hy@appendixstring}% \fi } @@ -906,7 +920,7 @@ % % \begin{environment}{subappendices} % The environment for subappendices. Start it off by doing the resetting -% of the |\(sub)section| command. +% of the |\(sub)section| command. % \changes{v1.1}{2000/02/29}{Added subappendices environment} % \begin{macrocode} \newenvironment{subappendices}{% @@ -958,13 +972,13 @@ % |\addcontentsline| command which is used to put entries into the ToC. % |\@redotocentry@pp{|\meta{sect}|}| does the redefinition, where \meta{sect} % is the name of the sectional heading (i.e., either chapter or section). -% \changes{v1.2}{2002/08/06}{Replaced ifthen package code in +% \changes{v1.2}{2002/08/06}{Replaced ifthen package code in % \cs{@redotocentry@pp} by \cs{ifx} code.} % \changes{v1.2}{2002/08/06}{HW mods to \cs{@redotocentry@pp}} % \begin{macrocode} \newcommand{\@redotocentry@pp}[1]{% % \end{macrocode} -% Save the original definition of |\addcontentsline|. Then start the +% Save the original definition of |\addcontentsline|. Then start the % redefinition. % \begin{macrocode} \let\oldacl@pp=\addcontentsline @@ -980,7 +994,7 @@ \def\@pptempa{##2}\def\@pptempb{#1}% \ifx\@pptempa\@pptempb % \end{macrocode} -% The sectioning command is the same as that specified by the argument to +% The sectioning command is the same as that specified by the argument to % |\@redotocentry@pp|, so get on with the redefinition. % \begin{macrocode} \oldacl@pp{##1}{##2}{\appendixname\space ##3}% diff --git a/macros/latex/contrib/appendix/appendix.ins b/macros/latex/contrib/appendix/appendix.ins index 8228445e89..0256a9d037 100644 --- a/macros/latex/contrib/appendix/appendix.ins +++ b/macros/latex/contrib/appendix/appendix.ins @@ -2,10 +2,11 @@ %% Author: Peter Wilson, Herries Press %% Maintainer: Will Robertson (will dot robertson at latex-project dot org) %% Copyright 1998--2004 Peter R. Wilson +%% Copyright 2009--2020 Will Robertson %% %% This work may be distributed and/or modified under the %% conditions of the LaTeX Project Public License, either -%% version 1.3c of this license or (at your option) any +%% version 1.3c of this license or (at your option) any %% later version: <http://www.latex-project.org/lppl.txt> %% %% This work has the LPPL maintenance status "maintained". @@ -25,21 +26,22 @@ \input docstrip.tex \preamble ------------------------------------------------------------------ +----------------------------------------------------------------- Author: Peter Wilson, Herries Press Maintainer: Will Robertson (will dot robertson at latex-project dot org) Copyright 1998--2004 Peter R. Wilson - + Copyright 2009--2020 Will Robertson + This work may be distributed and/or modified under the conditions of the LaTeX Project Public License, either - version 1.3c of this license or (at your option) any + version 1.3c of this license or (at your option) any later version: <http://www.latex-project.org/lppl.txt> This work has the LPPL maintenance status "maintained". The Current Maintainer of this work is Will Robertson. - + This work consists of the files listed in the README file. ------------------------------------------------------------------ +----------------------------------------------------------------- \endpreamble \askforoverwritefalse diff --git a/macros/latex/contrib/appendix/appendix.pdf b/macros/latex/contrib/appendix/appendix.pdf Binary files differindex 7b14ff06e6..bb66138548 100644 --- a/macros/latex/contrib/appendix/appendix.pdf +++ b/macros/latex/contrib/appendix/appendix.pdf diff --git a/macros/latex/contrib/diagbox/README b/macros/latex/contrib/diagbox/README index ca64b5ef07..2a684e84e5 100644 --- a/macros/latex/contrib/diagbox/README +++ b/macros/latex/contrib/diagbox/README @@ -1,6 +1,6 @@ The diagbox package -Copyright (C) 2011--2016 by Leo Liu <leoliu.pku@gmail.com> +Copyright (C) 2011--2020 by Leo Liu <leoliu.pku@gmail.com> The diagbox package is used for making table heads with diagonal lines. And it is compatible with old slashbox package with many improvements. diff --git a/macros/latex/contrib/diagbox/diagbox.dtx b/macros/latex/contrib/diagbox/diagbox.dtx index e301753950..0fa92deec6 100644 --- a/macros/latex/contrib/diagbox/diagbox.dtx +++ b/macros/latex/contrib/diagbox/diagbox.dtx @@ -1,6 +1,6 @@ % \iffalse meta-comment % -% Copyright (C) 2011--2016 by Leo Liu <leoliu.pku@gmail.com> +% Copyright (C) 2011--2020 by Leo Liu <leoliu.pku@gmail.com> % --------------------------------------------------------------------------- % This work may be distributed and/or modified under the % conditions of the LaTeX Project Public License, either version 1.3 @@ -26,7 +26,7 @@ %<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01] %<package>\ProvidesPackage{diagbox} %<*package> - [2016/12/28 v2.2 Making table heads with diagonal lines] + [2020/02/09 v2.3 Making table heads with diagonal lines] %</package> % %<*driver> @@ -37,9 +37,12 @@ \usepackage{diagbox} \usepackage{xcolor} \usepackage[left=1.7in,top=1in,bottom=1in]{geometry} -\usepackage{fvrb-ex} +\usepackage{fancyvrb-ex} \usepackage{amsmath} \usepackage[UTF8]{ctex} +\setmainfont{Latin Modern Roman} +\setsansfont{Latin Modern Sans} +\setmonofont{Latin Modern Mono} \makeatletter \renewcommand\glossary@prologue{% \section*{版本历史} @@ -66,7 +69,7 @@ %</driver> % \fi % -% \CheckSum{612} +% \CheckSum{661} % % \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 @@ -159,7 +162,7 @@ % \medskip % % "\diagbox" can also take three arguments, to draw a table head with two -% diagbox lines. For example, +% diagonal lines. For example, % \begin{Example}[frame=single,numbers=left] % \begin{tabular}{|l|ccc|} % \hline @@ -340,6 +343,11 @@ % This is not a bug. Usually the width calculated by \pkg{diagbox} is more % safe than \pkg{slashbox}. % +% \item For a triple box (a table head with two diagonal lines), the first +% argument must not be too wide and the third argument must not be too high. +% Otherwise, the layout algorithm cannot calculate the proper width and height +% of the table head, and a warning will be issued. (Thanks to Frank Mittelbach.) +% % \item % The cell with "\diagbox" should be the widest one of the column. Otherwise % the slash line cannot exceeds the boundary. For example,\\[1ex] @@ -353,14 +361,6 @@ % This can be solved by setting a wider "width" option of "\diagbox" manually. % \end{itemize} % -% TODO: -% \begin{itemize} -% \item -% Improve the document of the source code. The algorithm of "\diagbox@triple" -% should be explained in detail. However, the explanations would be only -% available in Chinese, I'm sorry. -% \end{itemize} -% % % \title[]{\hypertarget{Chinese}{\pkg{diagbox} 宏包(\fileversion)} % \makebox[0pt][l]{\hspace{3cm}\large @@ -592,6 +592,10 @@ % 这不是 bug。通常 \pkg{diagbox} 计算出的宽度比 \pkg{slashbox} 的结果更安全一 % 些。 % +% \item 有两条斜线的三部分表头,其所采用的自动布局算法是受限的。特别是,最左的 +% 部分不能过宽,最右的部分不能过高,否则将无法计算出合理的结果,宏包会发出警 +% 告。(感谢 Frank Mittelbach 指出该问题。) +% % \item % "\diagbox" 生成的单元格必须是表列中最宽的一个。如果不能达到最宽,则画出的斜 % 线不能保证在正确的位置。例如:\\[1ex] @@ -605,12 +609,6 @@ % 此时可以手工设置较宽的 "\diagbox" 的 "width" 选项,解决此问题。 % \end{itemize} % -% 未尽的工作: -% \begin{itemize} -% \item 源代码的文档需要改进。特别是在 "\diagbox@triple" 中的宽度和高度计算算 -% 法需要详细说明。 -% \end{itemize} -% % \StopEventually{} % % @@ -757,10 +755,10 @@ % \begin{macrocode} \define@key{diagbox}{leftsep}{% \setlength{\diagbox@insepl}{#1}% - \setlength{\diagbox@outsepl}{-(#1)}} + \setlength{\diagbox@outsepl}{(#1)*-1}} \define@key{diagbox}{rightsep}{% \setlength{\diagbox@insepr}{#1}% - \setlength{\diagbox@outsepr}{-(#1)}} + \setlength{\diagbox@outsepr}{(#1)*-1}} % \end{macrocode} % % 盒子计算边界时是否忽略左右的空白。"trim=l" 效果等同于 "leftsep=0pt";"trim=r" @@ -868,6 +866,9 @@ % 与 \pkg{slashbox} 的行为不同。} % 分成两部分的盒子。三个参数,分别为 key-value 格式的可选项、左半边内容、右半边 % 内容。这里的主要工作是读入参数并计算斜线盒子的大小。 +% +% 这里自动计算斜线盒子大小的算法为:斜线盒子的宽度取两个子盒宽度较大值的二倍, +% 而高度则直接取两个子盒的总高度。 % \begin{macrocode} \def\diagbox@double#1#2#3{% \begingroup @@ -921,15 +922,21 @@ % \end{macrocode} % \end{macro} % -% \begin{macro}{\diagbox@triple@setbox@NW} +% \begin{macro}{\diagbox@triple@setbox@SE} % \begin{macrocode} \def\diagbox@triple@setbox@SE#1#2#3{% - \setbox\diagbox@boxa=\hbox{% - \begin{tabular}{@{\hspace{\diagbox@insepl}}l@{}}#1\end{tabular}}% - \setbox\diagbox@boxm=\hbox{% - \begin{tabular}{@{}r@{\hspace{\diagbox@insepr}}}#2\end{tabular}}% - \setbox\diagbox@boxb=\hbox{% - \begin{tabular}{@{}r@{\hspace{\diagbox@insepr}}}#3\end{tabular}}} +\setbox\diagbox@boxa=\hbox{% + \begin{tabular}{@{\hspace{\diagbox@insepl}}>{\diagbox@font}l@{}} + #1 + \end{tabular}}% +\setbox\diagbox@boxm=\hbox{% + \begin{tabular}{@{}>{\diagbox@font}r@{\hspace{\diagbox@insepr}}} + #2 + \end{tabular}}% +\setbox\diagbox@boxb=\hbox{% + \begin{tabular}{@{}>{\diagbox@font}r@{\hspace{\diagbox@insepr}}} + #3 + \end{tabular}}} % \end{macrocode} % \end{macro} % @@ -994,8 +1001,35 @@ % % \begin{macro}{\diagbox@triplebox} % \changes{v2.0}{2011/11/22}{新增三部分双斜线的盒子} +% \changes{v2.3}{2020/02/09}{检测二次方程无解、异常解的情形} % 分成三部分的盒子。四个参数,分别为 key-value 格式的可选项、左半边内容、中间 % 内容、右半边内容。 +% +% 这里计算双斜线盒子宽、高的算法是简单而直观的。如下图所示,将 A、M、B 三个子盒 +% 子分别放在斜线盒的三个角后,斜线正好使 M 盒、A 或 B 盒、斜线盒的一角三点共 +% 线。 +% \[ +% \tabcolsep=0pt +% \linespread{1}\selectfont +% \begin{tabular}{|c|}\hline +% \diagbox{\fbox{A}}{\fbox{M}}{\fbox{B}}\\ \hline +% \end{tabular} +% \] +% 在 A、M、B 三个盒子内容确定后,斜线盒的宽、高即可通过相似三角形的比例关系求 +% 解。设斜线盒的宽、高为 $x$, $y$,而 A、M、B 盒的宽、高分别为 $(x_a, y_a)$, +% $(x_m, y_m)$, $(x_b, y_b)$。则有: +% \begin{align*} +% \frac{x}{x_a} &= \frac{y - y_m}{y - y_m - y_a}, \\ +% \frac{y}{y_b} &= \frac{x - x_m}{x - x_m - x_b}. +% \end{align*} +% 该方程组通常可化简为一个一元二次方程求解,两组共轭根中可以只需要较大的一组。 +% 但须注意上面的方程组并非总有正的实根,经过简单的代数分析可知,要给出几何直观 +% 的可行解(正实根),需要同时满足以下条件: +% \begin{align*} +% x_a &< x_m + x_b, \\ +% y_b &< y_m + y_a. +% \end{align*} +% 该条件需要在计算中予以检查。 % \begin{macrocode} \def\diagbox@triple#1#2#3#4{% \begingroup @@ -1013,7 +1047,7 @@ \edef\xm{\strip@pt\wd\diagbox@boxm}% \edef\ym{\strip@pt\dimexpr\ht\diagbox@boxm+\dp\diagbox@boxm\relax}% % \end{macrocode} -% 列方程,求方程系数 +% 列方程,计算方程系数 % \begin{macrocode} \FPneg\bi\yb \FPadd\ci\xb\xm \FPneg\ci\ci @@ -1022,30 +1056,51 @@ \FPneg\cj\xa \FPmul\dj\xa\ym % \end{macrocode} -% 解方程 +% 检查可行解条件,解二次方程。这里对于无正实根的情形,会给出一个宽松的值作为斜 +% 线盒子的宽高: +% \begin{align*} +% x &= 2 \max(x_a + x_m, x_b + x_m),\\ +% y &= 2 \max(y_a + y_m, y_b + y_m). +% \end{align*} % \begin{macrocode} \FPsub\u\dj\di \FPupn{v}{bj ci * bi cj * -}% - \FPupn{delta}{bi dj * bj di * - cj ci - * 4 * % - v u + copy * % - - 2 swap root}% + \FPupn{delta}{bi dj * bj di * - cj ci - * 4 * v u + copy * -}% + \newif\ifdeltapositive + \FPifneg\delta \deltapositivefalse \else \deltapositivetrue \fi + \FPset\x{0}% + \FPset\y{0}% \ifdim\diagbox@wd=\z@ - \FPupn{x}{2 bj bi - delta v u - + / /}% + \ifdim\bi\p@>\bj\p@\ifdeltapositive + \FPupn{x}{2 bj bi - 2 delta root v u - + / /}% + \fi\fi + \ifdim\x\p@=\z@ + \FPupn{x}{xa xm + xb xm + max 2 *}% + \PackageWarning{diagbox}{Cannot calculate proper width of triple diagbox.\MessageBreak + Use \x pt instead.}% + \fi \diagbox@wd=\x\p@ \else \edef\x{\strip@pt\diagbox@wd}% \fi \ifdim\diagbox@ht=\z@ - \FPupn{y}{2 cj ci - delta v u + - / /}% + \ifdim\ci\p@<\cj\p@\ifdeltapositive + \FPupn{y}{2 cj ci - 2 delta root v u + - / /}% + \fi\fi + \ifdim\y\p@=\z@ + \FPupn{y}{ya ym + yb ym + max 2 *}% + \PackageWarning{diagbox}{Cannot calculate proper height of triple diagbox.\MessageBreak + Use \y pt instead.}% + \fi \diagbox@ht=\y\p@ \else \edef\y{\strip@pt\diagbox@ht}% \fi - \FPsub\xxm\x\xm - \FPsub\yym\y\ym % \end{macrocode} % 画盒子 % \begin{macrocode} + \FPsub\xxm\x\xm + \FPsub\yym\y\ym $\vcenter{\hbox{\diagbox@pict}}$% \endgroup} % \end{macrocode} diff --git a/macros/latex/contrib/diagbox/diagbox.ins b/macros/latex/contrib/diagbox/diagbox.ins index 93294e12ef..196e5eb08b 100644 --- a/macros/latex/contrib/diagbox/diagbox.ins +++ b/macros/latex/contrib/diagbox/diagbox.ins @@ -1,4 +1,4 @@ -%% Copyright (C) 2011--2016 by Leo Liu <leoliu.pku@gmail.com> +%% Copyright (C) 2011--2020 by Leo Liu <leoliu.pku@gmail.com> %% -------------------------------------------------------------------------- %% This work may be distributed and/or modified under the %% conditions of the LaTeX Project Public License, either version 1.3 @@ -25,7 +25,7 @@ This is a generated file. -Copyright (C) 2011--2016 by Leo Liu <leoliu.pku@gmail.com> +Copyright (C) 2011--2020 by Leo Liu <leoliu.pku@gmail.com> -------------------------------------------------------------------------- This work may be distributed and/or modified under the conditions of the LaTeX Project Public License, either version 1.3 diff --git a/macros/latex/contrib/diagbox/diagbox.pdf b/macros/latex/contrib/diagbox/diagbox.pdf Binary files differindex d31cd0c261..b891b8926a 100644 --- a/macros/latex/contrib/diagbox/diagbox.pdf +++ b/macros/latex/contrib/diagbox/diagbox.pdf diff --git a/macros/latex/contrib/l3kernel/CHANGELOG.md b/macros/latex/contrib/l3kernel/CHANGELOG.md index 2993075c0d..65317903f7 100644 --- a/macros/latex/contrib/l3kernel/CHANGELOG.md +++ b/macros/latex/contrib/l3kernel/CHANGELOG.md @@ -7,6 +7,15 @@ this project uses date-based 'snapshot' version identifiers. ## [Unreleased] +## [2020-02-08] + +### Added +- `\l_keys_key_str` and `\l_keys_path_str` + +### Deprecated +- `\l_keys_key_tl` and `\l_keys_path_tl`, replaced by `\l_keys_key_str` and + `\l_keys_path_str`, respectively + ## [2020-02-03] ### Changed @@ -586,7 +595,8 @@ this project uses date-based 'snapshot' version identifiers. - Step functions have been added for dim variables, e.g. `\dim_step_inline:nnnn` -[Unreleased]: https://github.com/latex3/latex3/compare/2020-02-03...HEAD +[Unreleased]: https://github.com/latex3/latex3/compare/2020-02-08...HEAD +[2020-02-08]: https://github.com/latex3/latex3/compare/2020-02-03...2020-02-08 [2020-02-03]: https://github.com/latex3/latex3/compare/2020-01-31...2020-02-03 [2020-01-31]: https://github.com/latex3/latex3/compare/2020-01-22...2020-01-31 [2020-01-22]: https://github.com/latex3/latex3/compare/2020-01-12...2020-01-22 diff --git a/macros/latex/contrib/l3kernel/README.md b/macros/latex/contrib/l3kernel/README.md index a004f57138..3fe9fde9d1 100644 --- a/macros/latex/contrib/l3kernel/README.md +++ b/macros/latex/contrib/l3kernel/README.md @@ -1,7 +1,7 @@ LaTeX3 Programming Conventions ============================== -Release 2020-02-03 +Release 2020-02-08 Overview -------- diff --git a/macros/latex/contrib/l3kernel/expl3.dtx b/macros/latex/contrib/l3kernel/expl3.dtx index 0c0648295d..babef7f652 100644 --- a/macros/latex/contrib/l3kernel/expl3.dtx +++ b/macros/latex/contrib/l3kernel/expl3.dtx @@ -24,7 +24,7 @@ % %<*driver|generic|package|2ekernel> %</driver|generic|package|2ekernel> -\def\ExplFileDate{2020-02-03}% +\def\ExplFileDate{2020-02-08}% %<*driver> \documentclass[full]{l3doc} \usepackage{graphicx} @@ -51,7 +51,7 @@ % }^^A % } % -% \date{Released 2020-02-03} +% \date{Released 2020-02-08} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/expl3.pdf b/macros/latex/contrib/l3kernel/expl3.pdf Binary files differindex ba7abfc329..067151191b 100644 --- a/macros/latex/contrib/l3kernel/expl3.pdf +++ b/macros/latex/contrib/l3kernel/expl3.pdf diff --git a/macros/latex/contrib/l3kernel/interface3.pdf b/macros/latex/contrib/l3kernel/interface3.pdf Binary files differindex aa9a16c2af..48a2260cf0 100644 --- a/macros/latex/contrib/l3kernel/interface3.pdf +++ b/macros/latex/contrib/l3kernel/interface3.pdf diff --git a/macros/latex/contrib/l3kernel/interface3.tex b/macros/latex/contrib/l3kernel/interface3.tex index f9242b5fdc..e815ff55b7 100644 --- a/macros/latex/contrib/l3kernel/interface3.tex +++ b/macros/latex/contrib/l3kernel/interface3.tex @@ -54,7 +54,7 @@ for those people who are interested. {latex-team@latex-project.org}% }% } -\date{Released 2020-02-03} +\date{Released 2020-02-08} \pagenumbering{roman} \maketitle diff --git a/macros/latex/contrib/l3kernel/l3alloc.dtx b/macros/latex/contrib/l3kernel/l3alloc.dtx index 85e2575abf..9a3b5177cb 100644 --- a/macros/latex/contrib/l3kernel/l3alloc.dtx +++ b/macros/latex/contrib/l3kernel/l3alloc.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2020-02-03} +% \date{Released 2020-02-08} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3basics.dtx b/macros/latex/contrib/l3kernel/l3basics.dtx index 46bb4854d1..8f49503a0e 100644 --- a/macros/latex/contrib/l3kernel/l3basics.dtx +++ b/macros/latex/contrib/l3kernel/l3basics.dtx @@ -2,7 +2,7 @@ % %% File: l3basics.dtx % -% Copyright (C) 1990-2019 The LaTeX3 project +% Copyright (C) 1990-2020 The LaTeX3 Project % % It may be distributed and/or modified under the conditions of the % LaTeX Project Public License (LPPL), either version 1.3c of this @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2020-02-03} +% \date{Released 2020-02-08} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3bootstrap.dtx b/macros/latex/contrib/l3kernel/l3bootstrap.dtx index e9bcf427ac..6ae17167e2 100644 --- a/macros/latex/contrib/l3kernel/l3bootstrap.dtx +++ b/macros/latex/contrib/l3kernel/l3bootstrap.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2020-02-03} +% \date{Released 2020-02-08} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3box.dtx b/macros/latex/contrib/l3kernel/l3box.dtx index 7580ff736d..c9024402d4 100644 --- a/macros/latex/contrib/l3kernel/l3box.dtx +++ b/macros/latex/contrib/l3kernel/l3box.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2020-02-03} +% \date{Released 2020-02-08} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3candidates.dtx b/macros/latex/contrib/l3kernel/l3candidates.dtx index a8cc3a6a97..d6877849c5 100644 --- a/macros/latex/contrib/l3kernel/l3candidates.dtx +++ b/macros/latex/contrib/l3kernel/l3candidates.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2020-02-03} +% \date{Released 2020-02-08} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3clist.dtx b/macros/latex/contrib/l3kernel/l3clist.dtx index 37d3ffb1f1..f50ff2bc9a 100644 --- a/macros/latex/contrib/l3kernel/l3clist.dtx +++ b/macros/latex/contrib/l3kernel/l3clist.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2020-02-03} +% \date{Released 2020-02-08} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3coffins.dtx b/macros/latex/contrib/l3kernel/l3coffins.dtx index 34604bea8e..532a8b251a 100644 --- a/macros/latex/contrib/l3kernel/l3coffins.dtx +++ b/macros/latex/contrib/l3kernel/l3coffins.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2020-02-03} +% \date{Released 2020-02-08} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3color-base.dtx b/macros/latex/contrib/l3kernel/l3color-base.dtx index 8b43ac18df..b190d376f4 100644 --- a/macros/latex/contrib/l3kernel/l3color-base.dtx +++ b/macros/latex/contrib/l3kernel/l3color-base.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2020-02-03} +% \date{Released 2020-02-08} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3debug.dtx b/macros/latex/contrib/l3kernel/l3debug.dtx index c1eda3e360..80762d306f 100644 --- a/macros/latex/contrib/l3kernel/l3debug.dtx +++ b/macros/latex/contrib/l3kernel/l3debug.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2020-02-03} +% \date{Released 2020-02-08} % % \maketitle % @@ -969,7 +969,7 @@ %<@@=keys> \__kernel_patch:nnn { - \cs_if_exist:cF { \c_@@_code_root_tl #1 } + \cs_if_exist:cF { \c_@@_code_root_str #1 } { \__kernel_debug_log:x { Defining~key~#1~\msg_line_context: } } } { } diff --git a/macros/latex/contrib/l3kernel/l3deprecation.dtx b/macros/latex/contrib/l3kernel/l3deprecation.dtx index 13a4840144..5d11e7a4ef 100644 --- a/macros/latex/contrib/l3kernel/l3deprecation.dtx +++ b/macros/latex/contrib/l3kernel/l3deprecation.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2020-02-03} +% \date{Released 2020-02-08} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3doc.dtx b/macros/latex/contrib/l3kernel/l3doc.dtx index 0c1ea2db56..7a00967fb3 100644 --- a/macros/latex/contrib/l3kernel/l3doc.dtx +++ b/macros/latex/contrib/l3kernel/l3doc.dtx @@ -79,7 +79,7 @@ and all files in that bundle must be distributed together. % % \title{The \cls{l3doc} class} % \author{\Team} -% \date{Released 2020-02-03} +% \date{Released 2020-02-08} % \maketitle % \tableofcontents % diff --git a/macros/latex/contrib/l3kernel/l3docstrip.dtx b/macros/latex/contrib/l3kernel/l3docstrip.dtx index 230c61104f..d0e19f8a7c 100644 --- a/macros/latex/contrib/l3kernel/l3docstrip.dtx +++ b/macros/latex/contrib/l3kernel/l3docstrip.dtx @@ -63,7 +63,7 @@ % }^^A % } % -% \date{Released 2020-02-03} +% \date{Released 2020-02-08} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3docstrip.pdf b/macros/latex/contrib/l3kernel/l3docstrip.pdf Binary files differindex 8905a20661..20e93c99a9 100644 --- a/macros/latex/contrib/l3kernel/l3docstrip.pdf +++ b/macros/latex/contrib/l3kernel/l3docstrip.pdf diff --git a/macros/latex/contrib/l3kernel/l3expan.dtx b/macros/latex/contrib/l3kernel/l3expan.dtx index 254424b657..96dada827d 100644 --- a/macros/latex/contrib/l3kernel/l3expan.dtx +++ b/macros/latex/contrib/l3kernel/l3expan.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2020-02-03} +% \date{Released 2020-02-08} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3file.dtx b/macros/latex/contrib/l3kernel/l3file.dtx index b7b55dcd96..6716358b3c 100644 --- a/macros/latex/contrib/l3kernel/l3file.dtx +++ b/macros/latex/contrib/l3kernel/l3file.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2020-02-03} +% \date{Released 2020-02-08} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3final.dtx b/macros/latex/contrib/l3kernel/l3final.dtx index adf058cfe4..92f3b10a84 100644 --- a/macros/latex/contrib/l3kernel/l3final.dtx +++ b/macros/latex/contrib/l3kernel/l3final.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2020-02-03} +% \date{Released 2020-02-08} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3flag.dtx b/macros/latex/contrib/l3kernel/l3flag.dtx index c248c611be..9b780c36d7 100644 --- a/macros/latex/contrib/l3kernel/l3flag.dtx +++ b/macros/latex/contrib/l3kernel/l3flag.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2020-02-03} +% \date{Released 2020-02-08} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3fp-assign.dtx b/macros/latex/contrib/l3kernel/l3fp-assign.dtx index b0ab980cef..778fe9dbd6 100644 --- a/macros/latex/contrib/l3kernel/l3fp-assign.dtx +++ b/macros/latex/contrib/l3kernel/l3fp-assign.dtx @@ -40,7 +40,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2020-02-03} +% \date{Released 2020-02-08} % \maketitle % % \begin{documentation} diff --git a/macros/latex/contrib/l3kernel/l3fp-aux.dtx b/macros/latex/contrib/l3kernel/l3fp-aux.dtx index 1c41c2a4f4..25e6201161 100644 --- a/macros/latex/contrib/l3kernel/l3fp-aux.dtx +++ b/macros/latex/contrib/l3kernel/l3fp-aux.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2020-02-03} +% \date{Released 2020-02-08} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3fp-basics.dtx b/macros/latex/contrib/l3kernel/l3fp-basics.dtx index faacc62e3e..402fcb60ef 100644 --- a/macros/latex/contrib/l3kernel/l3fp-basics.dtx +++ b/macros/latex/contrib/l3kernel/l3fp-basics.dtx @@ -40,7 +40,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2020-02-03} +% \date{Released 2020-02-08} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3fp-convert.dtx b/macros/latex/contrib/l3kernel/l3fp-convert.dtx index 1cff3270bb..74462f5fa2 100644 --- a/macros/latex/contrib/l3kernel/l3fp-convert.dtx +++ b/macros/latex/contrib/l3kernel/l3fp-convert.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2020-02-03} +% \date{Released 2020-02-08} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3fp-expo.dtx b/macros/latex/contrib/l3kernel/l3fp-expo.dtx index 8e68782976..da84406755 100644 --- a/macros/latex/contrib/l3kernel/l3fp-expo.dtx +++ b/macros/latex/contrib/l3kernel/l3fp-expo.dtx @@ -40,7 +40,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2020-02-03} +% \date{Released 2020-02-08} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3fp-extended.dtx b/macros/latex/contrib/l3kernel/l3fp-extended.dtx index 2e21c63d1a..91f9e03d1c 100644 --- a/macros/latex/contrib/l3kernel/l3fp-extended.dtx +++ b/macros/latex/contrib/l3kernel/l3fp-extended.dtx @@ -40,7 +40,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2020-02-03} +% \date{Released 2020-02-08} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3fp-logic.dtx b/macros/latex/contrib/l3kernel/l3fp-logic.dtx index 32a020ac76..c2805a4ea8 100644 --- a/macros/latex/contrib/l3kernel/l3fp-logic.dtx +++ b/macros/latex/contrib/l3kernel/l3fp-logic.dtx @@ -40,7 +40,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2020-02-03} +% \date{Released 2020-02-08} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3fp-parse.dtx b/macros/latex/contrib/l3kernel/l3fp-parse.dtx index 40e6816acd..a798e34131 100644 --- a/macros/latex/contrib/l3kernel/l3fp-parse.dtx +++ b/macros/latex/contrib/l3kernel/l3fp-parse.dtx @@ -40,7 +40,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2020-02-03} +% \date{Released 2020-02-08} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3fp-random.dtx b/macros/latex/contrib/l3kernel/l3fp-random.dtx index c44a6e7e5c..9538e327f2 100644 --- a/macros/latex/contrib/l3kernel/l3fp-random.dtx +++ b/macros/latex/contrib/l3kernel/l3fp-random.dtx @@ -40,7 +40,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2020-02-03} +% \date{Released 2020-02-08} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3fp-round.dtx b/macros/latex/contrib/l3kernel/l3fp-round.dtx index 3be1a6ea32..dd0ed9a63d 100644 --- a/macros/latex/contrib/l3kernel/l3fp-round.dtx +++ b/macros/latex/contrib/l3kernel/l3fp-round.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2020-02-03} +% \date{Released 2020-02-08} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3fp-traps.dtx b/macros/latex/contrib/l3kernel/l3fp-traps.dtx index ce14dd7fd7..a05bf42c87 100644 --- a/macros/latex/contrib/l3kernel/l3fp-traps.dtx +++ b/macros/latex/contrib/l3kernel/l3fp-traps.dtx @@ -40,7 +40,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2020-02-03} +% \date{Released 2020-02-08} % \maketitle % % \begin{documentation} diff --git a/macros/latex/contrib/l3kernel/l3fp-trig.dtx b/macros/latex/contrib/l3kernel/l3fp-trig.dtx index 0b7c7fc8d8..3988dbe455 100644 --- a/macros/latex/contrib/l3kernel/l3fp-trig.dtx +++ b/macros/latex/contrib/l3kernel/l3fp-trig.dtx @@ -40,7 +40,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2020-02-03} +% \date{Released 2020-02-08} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3fp.dtx b/macros/latex/contrib/l3kernel/l3fp.dtx index c068c5bf84..22514c2959 100644 --- a/macros/latex/contrib/l3kernel/l3fp.dtx +++ b/macros/latex/contrib/l3kernel/l3fp.dtx @@ -49,7 +49,7 @@ % }^^A % } % -% \date{Released 2020-02-03} +% \date{Released 2020-02-08} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3fparray.dtx b/macros/latex/contrib/l3kernel/l3fparray.dtx index 0803bbc477..c5f9d80b49 100644 --- a/macros/latex/contrib/l3kernel/l3fparray.dtx +++ b/macros/latex/contrib/l3kernel/l3fparray.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2020-02-03} +% \date{Released 2020-02-08} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3int.dtx b/macros/latex/contrib/l3kernel/l3int.dtx index 2a6cb64cbe..f1b64fcbe1 100644 --- a/macros/latex/contrib/l3kernel/l3int.dtx +++ b/macros/latex/contrib/l3kernel/l3int.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2020-02-03} +% \date{Released 2020-02-08} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3intarray.dtx b/macros/latex/contrib/l3kernel/l3intarray.dtx index 7f5fccc654..0ba79b1389 100644 --- a/macros/latex/contrib/l3kernel/l3intarray.dtx +++ b/macros/latex/contrib/l3kernel/l3intarray.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2020-02-03} +% \date{Released 2020-02-08} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3kernel-functions.dtx b/macros/latex/contrib/l3kernel/l3kernel-functions.dtx index 19fcba0f05..a49e49d62f 100644 --- a/macros/latex/contrib/l3kernel/l3kernel-functions.dtx +++ b/macros/latex/contrib/l3kernel/l3kernel-functions.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2020-02-03} +% \date{Released 2020-02-08} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3keys.dtx b/macros/latex/contrib/l3kernel/l3keys.dtx index 7f2b4ad391..d172a1a041 100644 --- a/macros/latex/contrib/l3kernel/l3keys.dtx +++ b/macros/latex/contrib/l3kernel/l3keys.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2020-02-03} +% \date{Released 2020-02-08} % % \maketitle % @@ -639,8 +639,8 @@ % later. % \end{function} % -% \begin{variable}[updated = 2015-07-14] -% {\l_keys_key_tl, \l_keys_path_tl, \l_keys_value_tl} +% \begin{variable}[updated = 2020-02-08] +% {\l_keys_key_str, \l_keys_path_str, \l_keys_value_tl} % For each key processed, information of the full \emph{path} of the % key, the \emph{name} of the key and the \emph{value} of the key is % available within three token list variables. These may be used within @@ -661,13 +661,12 @@ % \keys_set:nn { mymodule } { subset / key-a = some-value } % \end{verbatim} % has path \texttt{mymodule/subset/key-a}. This information is stored in -% \cs{l_keys_path_tl}, and will have been processed by \cs{tl_to_str:n}. +% \cs{l_keys_path_str}. % % The \emph{name} of the key is the part of the path after the last % \texttt{/}, and thus is not unique. In the preceding examples, both keys % have name \texttt{key-a} despite having different paths. This information -% is stored in \cs{l_keys_key_tl}, and will have been processed by -% \cs{tl_to_str:n}. +% is stored in \cs{l_keys_key_str}. % \end{variable} % % \section{Handling of unknown keys} @@ -681,7 +680,7 @@ % \keys_define:nn { mymodule } % { % unknown .code:n = -% You~tried~to~set~key~'\l_keys_key_tl'~to~'#1'. +% You~tried~to~set~key~'\l_keys_key_str'~to~'#1'. % } % \end{verbatim} % @@ -1169,28 +1168,28 @@ % % \begin{variable} % { -% \c_@@_code_root_tl , -% \c_@@_default_root_tl , -% \c_@@_groups_root_tl , -% \c_@@_inherit_root_tl , -% \c_@@_type_root_tl , -% \c_@@_validate_root_tl +% \c_@@_code_root_str , +% \c_@@_default_root_str , +% \c_@@_groups_root_str , +% \c_@@_inherit_root_str , +% \c_@@_type_root_str , +% \c_@@_validate_root_str % } % Various storage areas for the different data which make up keys. % \begin{macrocode} -\tl_const:Nn \c_@@_code_root_tl { key~code~>~ } -\tl_const:Nn \c_@@_default_root_tl { key~default~>~ } -\tl_const:Nn \c_@@_groups_root_tl { key~groups~>~ } -\tl_const:Nn \c_@@_inherit_root_tl { key~inherit~>~ } -\tl_const:Nn \c_@@_type_root_tl { key~type~>~ } -\tl_const:Nn \c_@@_validate_root_tl { key~validate~>~ } +\str_const:Nn \c_@@_code_root_str { key~code~>~ } +\str_const:Nn \c_@@_default_root_str { key~default~>~ } +\str_const:Nn \c_@@_groups_root_str { key~groups~>~ } +\str_const:Nn \c_@@_inherit_root_str { key~inherit~>~ } +\str_const:Nn \c_@@_type_root_str { key~type~>~ } +\str_const:Nn \c_@@_validate_root_str { key~validate~>~ } % \end{macrocode} % \end{variable} % -% \begin{variable}{\c_@@_props_root_tl} +% \begin{variable}{\c_@@_props_root_str} % The prefix for storing properties. % \begin{macrocode} -\tl_const:Nn \c_@@_props_root_tl { key~prop~>~ } +\str_const:Nn \c_@@_props_root_str { key~prop~>~ } % \end{macrocode} % \end{variable} % @@ -1212,17 +1211,19 @@ % \end{macrocode} % \end{variable} % -% \begin{variable}{\l_keys_key_tl} -% The name of a key itself: needed when setting keys. +% \begin{variable}{\l_keys_key_str, \l_keys_key_tl} +% The name of a key itself: needed when setting keys. The |tl| version +% is deprecated but has to be handled manually. % \begin{macrocode} +\str_new:N \l_keys_key_str \tl_new:N \l_keys_key_tl % \end{macrocode} % \end{variable} % -% \begin{variable}{\l_@@_module_tl} +% \begin{variable}{\l_@@_module_str} % The module for an entire set of keys. % \begin{macrocode} -\tl_new:N \l_@@_module_tl +\str_new:N \l_@@_module_str % \end{macrocode} % \end{variable} % @@ -1241,33 +1242,36 @@ % \end{macrocode} % \end{variable} % -% \begin{variable}{\l_keys_path_tl} +% \begin{variable}{\l_keys_path_str, \l_keys_path_tl} % The \enquote{path} of the current key is stored here: this is -% available to the programmer and so is public. +% available to the programmer and so is public. The older version is +% deprecated but has to be handled manually. % \begin{macrocode} +\str_new:N \l_keys_path_str \tl_new:N \l_keys_path_tl % \end{macrocode} % \end{variable} % -% \begin{variable}{\l_@@_inherit_tl} +% \begin{variable}{\l_@@_inherit_str} % \begin{macrocode} -\tl_new:N \l_@@_inherit_tl +\str_new:N \l_@@_inherit_str % \end{macrocode} % \end{variable} % % \begin{variable}{\l_@@_relative_tl} -% The relative path for passing keys back to the user. +% The relative path for passing keys back to the user. As this can +% be explicitly no-value, it must be a token list. % \begin{macrocode} \tl_new:N \l_@@_relative_tl \tl_set:Nn \l_@@_relative_tl { \q_no_value } % \end{macrocode} % \end{variable} % -% \begin{variable}{\l_@@_property_tl} +% \begin{variable}{\l_@@_property_str} % The \enquote{property} begin set for a key at definition time is % stored here. % \begin{macrocode} -\tl_new:N \l_@@_property_tl +\str_new:N \l_@@_property_str % \end{macrocode} % \end{variable} % @@ -1321,12 +1325,12 @@ % removing any leading |/| (which is not needed here). % \begin{macrocode} \cs_new_protected:Npn \keys_define:nn - { \@@_define:onn \l_@@_module_tl } + { \@@_define:onn \l_@@_module_str } \cs_new_protected:Npn \@@_define:nnn #1#2#3 { - \tl_set:Nx \l_@@_module_tl { \@@_trim_spaces:n {#2} } + \str_set:Nx \l_@@_module_str { \@@_trim_spaces:n {#2} } \keyval_parse:NNn \@@_define:n \@@_define:nn {#3} - \tl_set:Nn \l_@@_module_tl {#1} + \str_set:Nn \l_@@_module_str {#1} } \cs_generate_variant:Nn \@@_define:nnn { o } % \end{macrocode} @@ -1354,14 +1358,13 @@ \cs_new_protected:Npn \@@_define_aux:nn #1#2 { \@@_property_find:n {#1} - \cs_if_exist:cTF { \c_@@_props_root_tl \l_@@_property_tl } - { \@@_define_code:n {#2} - } + \cs_if_exist:cTF { \c_@@_props_root_str \l_@@_property_str } + { \@@_define_code:n {#2} } { - \tl_if_empty:NF \l_@@_property_tl + \str_if_empty:NF \l_@@_property_str { \__kernel_msg_error:nnxx { kernel } { key-property-unknown } - { \l_@@_property_tl } { \l_keys_path_tl } + { \l_@@_property_str } { \l_keys_path_str } } } } @@ -1378,43 +1381,44 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_property_find:n #1 { - \tl_set:Nx \l_@@_property_tl { \@@_trim_spaces:n {#1} } - \exp_after:wN \@@_property_find:w \l_@@_property_tl . . + \str_set:Nx \l_@@_property_str { \@@_trim_spaces:n {#1} } + \exp_after:wN \@@_property_find:w \l_@@_property_str . . \q_stop {#1} } \cs_new_protected:Npn \@@_property_find:w #1 . #2 . #3 \q_stop #4 { \tl_if_blank:nTF {#3} { - \tl_clear:N \l_@@_property_tl + \str_clear:N \l_@@_property_str \__kernel_msg_error:nnn { kernel } { key-no-property } {#4} } { \str_if_eq:nnTF {#3} { . } { - \tl_set:Nx \l_keys_path_tl + \str_set:Nx \l_keys_path_str { - \tl_if_empty:NF \l_@@_module_tl - { \l_@@_module_tl / } + \str_if_empty:NF \l_@@_module_str + { \l_@@_module_str / } \tl_trim_spaces:n {#1} } - \tl_set:Nn \l_@@_property_tl { . #2 } + \str_set:Nn \l_@@_property_str { . #2 } } { - \tl_set:Nx \l_keys_path_tl { \l_@@_module_tl / #1 . #2 } + \str_set:Nx \l_keys_path_str { \l_@@_module_str / #1 . #2 } \@@_property_search:w #3 \q_stop } + \tl_set_eq:NN \l_keys_path_tl \l_keys_path_str } } \cs_new_protected:Npn \@@_property_search:w #1 . #2 \q_stop { \str_if_eq:nnTF {#2} { . } { - \tl_set:Nx \l_keys_path_tl { \l_keys_path_tl } - \tl_set:Nn \l_@@_property_tl { . #1 } + \str_set:Nx \l_keys_path_str { \l_keys_path_str } + \str_set:Nn \l_@@_property_str { . #1 } } { - \tl_set:Nx \l_keys_path_tl { \l_keys_path_tl . #1 } + \str_set:Nx \l_keys_path_str { \l_keys_path_str . #1 } \@@_property_search:w #2 \q_stop } } @@ -1435,15 +1439,15 @@ \bool_if:NTF \l_@@_no_value_bool { \exp_after:wN \@@_define_code:w - \l_@@_property_tl \q_stop - { \use:c { \c_@@_props_root_tl \l_@@_property_tl } } + \l_@@_property_str \q_stop + { \use:c { \c_@@_props_root_str \l_@@_property_str } } { \__kernel_msg_error:nnxx { kernel } - { key-property-requires-value } { \l_@@_property_tl } - { \l_keys_path_tl } + { key-property-requires-value } { \l_@@_property_str } + { \l_keys_path_str } } } - { \use:c { \c_@@_props_root_tl \l_@@_property_tl } {#1} } + { \use:c { \c_@@_props_root_str \l_@@_property_str } {#1} } } \exp_last_unbraced:NNNNo \cs_new:Npn \@@_define_code:w #1 \c_colon_str #2 \q_stop @@ -1463,14 +1467,14 @@ { \bool_if_exist:NF #1 { \bool_new:N #1 } \@@_choice_make: - \@@_cmd_set:nx { \l_keys_path_tl / true } + \@@_cmd_set:nx { \l_keys_path_str / true } { \exp_not:c { bool_ #2 set_true:N } \exp_not:N #1 } - \@@_cmd_set:nx { \l_keys_path_tl / false } + \@@_cmd_set:nx { \l_keys_path_str / false } { \exp_not:c { bool_ #2 set_false:N } \exp_not:N #1 } - \@@_cmd_set:nn { \l_keys_path_tl / unknown } + \@@_cmd_set:nn { \l_keys_path_str / unknown } { \__kernel_msg_error:nnx { kernel } { boolean-values-only } - { \l_keys_key_tl } + { \l_keys_key_str } } \@@_default_set:n { true } } @@ -1485,14 +1489,14 @@ { \bool_if_exist:NF #1 { \bool_new:N #1 } \@@_choice_make: - \@@_cmd_set:nx { \l_keys_path_tl / true } + \@@_cmd_set:nx { \l_keys_path_str / true } { \exp_not:c { bool_ #2 set_false:N } \exp_not:N #1 } - \@@_cmd_set:nx { \l_keys_path_tl / false } + \@@_cmd_set:nx { \l_keys_path_str / false } { \exp_not:c { bool_ #2 set_true:N } \exp_not:N #1 } - \@@_cmd_set:nn { \l_keys_path_tl / unknown } + \@@_cmd_set:nn { \l_keys_path_str / unknown } { \__kernel_msg_error:nnx { kernel } { boolean-values-only } - { \l_keys_key_tl } + { \l_keys_key_str } } \@@_default_set:n { true } } @@ -1514,14 +1518,14 @@ \cs_new_protected:Npn \@@_choice_make:N #1 { \cs_if_exist:cTF - { \c_@@_type_root_tl \@@_parent:o \l_keys_path_tl } + { \c_@@_type_root_str \@@_parent:o \l_keys_path_str } { \str_if_eq:vnTF - { \c_@@_type_root_tl \@@_parent:o \l_keys_path_tl } + { \c_@@_type_root_str \@@_parent:o \l_keys_path_str } { choice } { \__kernel_msg_error:nnxx { kernel } { nested-choice-key } - { \l_keys_path_tl } { \@@_parent:o \l_keys_path_tl } + { \l_keys_path_tl } { \@@_parent:o \l_keys_path_str } } { \@@_choice_make_aux:N #1 } } @@ -1529,13 +1533,13 @@ } \cs_new_protected:Npn \@@_choice_make_aux:N #1 { - \cs_set_nopar:cpn { \c_@@_type_root_tl \l_keys_path_tl } + \cs_set_nopar:cpn { \c_@@_type_root_str \l_keys_path_str } { choice } - \@@_cmd_set:nn { \l_keys_path_tl } { #1 {##1} } - \@@_cmd_set:nn { \l_keys_path_tl / unknown } + \@@_cmd_set:nn { \l_keys_path_str } { #1 {##1} } + \@@_cmd_set:nn { \l_keys_path_str / unknown } { \__kernel_msg_error:nnxx { kernel } { key-choice-unknown } - { \l_keys_path_tl } {##1} + { \l_keys_path_str } {##1} } } % \end{macrocode} @@ -1560,7 +1564,7 @@ { \int_incr:N \l_keys_choice_int \@@_cmd_set:nx - { \l_keys_path_tl / \@@_trim_spaces:n {##1} } + { \l_keys_path_str / \@@_trim_spaces:n {##1} } { \tl_set:Nn \exp_not:N \l_keys_choice_tl {##1} \int_set:Nn \exp_not:N \l_keys_choice_int @@ -1579,7 +1583,7 @@ % defining a new key, then saves the code. % \begin{macrocode} \cs_new_protected:Npn \@@_cmd_set:nn #1#2 - { \cs_set_protected:cpn { \c_@@_code_root_tl #1 } ##1 {#2} } + { \cs_set_protected:cpn { \c_@@_code_root_str #1 } ##1 {#2} } \cs_generate_variant:Nn \@@_cmd_set:nn { nx , Vn , Vo } % \end{macrocode} % \end{macro} @@ -1593,12 +1597,12 @@ \tl_if_empty:nTF {#1} { \cs_set_eq:cN - { \c_@@_default_root_tl \l_keys_path_tl } + { \c_@@_default_root_str \l_keys_path_str } \tex_undefined:D } { \cs_set_nopar:cpx - { \c_@@_default_root_tl \l_keys_path_tl } + { \c_@@_default_root_str \l_keys_path_str } { \exp_not:n {#1} } \@@_value_requirement:nn { required } { false } } @@ -1618,11 +1622,11 @@ \clist_set:Nn \l_@@_groups_clist {#1} \clist_if_empty:NTF \l_@@_groups_clist { - \cs_set_eq:cN { \c_@@_groups_root_tl \l_keys_path_tl } + \cs_set_eq:cN { \c_@@_groups_root_str \l_keys_path_str } \tex_undefined:D } { - \cs_set_eq:cN { \c_@@_groups_root_tl \l_keys_path_tl } + \cs_set_eq:cN { \c_@@_groups_root_str \l_keys_path_str } \l_@@_groups_clist } } @@ -1636,7 +1640,7 @@ \cs_new_protected:Npn \@@_inherit:n #1 { \@@_undefine: - \cs_set_nopar:cpn { \c_@@_inherit_root_tl \l_keys_path_tl } {#1} + \cs_set_nopar:cpn { \c_@@_inherit_root_str \l_keys_path_str } {#1} } % \end{macrocode} % \end{macro} @@ -1647,11 +1651,11 @@ \cs_new_protected:Npn \@@_initialise:n #1 { \cs_if_exist:cTF - { \c_@@_inherit_root_tl \@@_parent:o \l_keys_path_tl } + { \c_@@_inherit_root_str \@@_parent:o \l_keys_path_str } { \@@_execute_inherit: } { - \tl_clear:N \l_@@_inherit_tl - \cs_if_exist_use:cT { \c_@@_code_root_tl \l_keys_path_tl } { {#1} } + \str_clear:N \l_@@_inherit_str + \cs_if_exist_use:cT { \c_@@_code_root_str \l_keys_path_str } { {#1} } } } % \end{macrocode} @@ -1663,14 +1667,14 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_meta_make:n #1 { - \@@_cmd_set:Vo \l_keys_path_tl + \@@_cmd_set:Vo \l_keys_path_str { \exp_after:wN \keys_set:nn - \exp_after:wN { \l_@@_module_tl } {#1} + \exp_after:wN { \l_@@_module_str } {#1} } } \cs_new_protected:Npn \@@_meta_make:nn #1#2 - { \@@_cmd_set:Vn \l_keys_path_tl { \keys_set:nn {#1} {#2} } } + { \@@_cmd_set:Vn \l_keys_path_str { \keys_set:nn {#1} {#2} } } % \end{macrocode} % \end{macro} % \end{macro} @@ -1684,8 +1688,8 @@ \exp_after:wN \@@_find_key_module:NNw \exp_after:wN \l_@@_tmpa_tl \exp_after:wN \l_@@_tmpb_tl - \l_keys_path_tl / \q_stop - \@@_cmd_set:nx { \l_keys_path_tl } + \l_keys_path_str / \q_stop + \@@_cmd_set:nx { \l_keys_path_str } { \exp_not:c { prop_ #2 put:Nnn } \exp_not:N #1 @@ -1707,7 +1711,7 @@ { code , default , groups , inherit , type , validate } { \cs_set_eq:cN - { \tl_use:c { c_@@_ ##1 _root_tl } \l_keys_path_tl } + { \tl_use:c { c_@@_ ##1 _root_str } \l_keys_path_str } \tex_undefined:D } } @@ -1730,17 +1734,17 @@ { true } { \cs_set_eq:cc - { \c_@@_validate_root_tl \l_keys_path_tl } + { \c_@@_validate_root_str \l_keys_path_str } { @@_validate_ #1 : } } { false } { \cs_if_eq:ccT - { \c_@@_validate_root_tl \l_keys_path_tl } + { \c_@@_validate_root_str \l_keys_path_str } { @@_validate_ #1 : } { \cs_set_eq:cN - { \c_@@_validate_root_tl \l_keys_path_tl } + { \c_@@_validate_root_str \l_keys_path_str } \tex_undefined:D } } @@ -1756,7 +1760,7 @@ \bool_if:NF \l_@@_no_value_bool { \__kernel_msg_error:nnxx { kernel } { value-forbidden } - { \l_keys_path_tl } { \l_keys_value_tl } + { \l_keys_path_str } { \l_keys_value_tl } \@@_validate_cleanup:w } } @@ -1765,7 +1769,7 @@ \bool_if:NT \l_@@_no_value_bool { \__kernel_msg_error:nnx { kernel } { value-required } - { \l_keys_path_tl } + { \l_keys_path_str } \@@_validate_cleanup:w } } @@ -1783,7 +1787,7 @@ \cs_new_protected:Npn \@@_variable_set:NnnN #1#2#3#4 { \use:c { #2_if_exist:NF } #1 { \use:c { #2 _new:N } #1 } - \@@_cmd_set:nx { \l_keys_path_tl } + \@@_cmd_set:nx { \l_keys_path_str } { \exp_not:c { #2 _ #3 set:N #4 } \exp_not:N #1 @@ -1816,13 +1820,13 @@ % \begin{macro}{.bool_gset:N, .bool_gset:c} % One function for this. % \begin{macrocode} -\cs_new_protected:cpn { \c_@@_props_root_tl .bool_set:N } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .bool_set:N } #1 { \@@_bool_set:Nn #1 { } } -\cs_new_protected:cpn { \c_@@_props_root_tl .bool_set:c } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .bool_set:c } #1 { \@@_bool_set:cn {#1} { } } -\cs_new_protected:cpn { \c_@@_props_root_tl .bool_gset:N } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .bool_gset:N } #1 { \@@_bool_set:Nn #1 { g } } -\cs_new_protected:cpn { \c_@@_props_root_tl .bool_gset:c } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .bool_gset:c } #1 { \@@_bool_set:cn {#1} { g } } % \end{macrocode} % \end{macro} @@ -1832,13 +1836,13 @@ % \begin{macro}{.bool_gset_inverse:N, .bool_gset_inverse:c} % One function for this. % \begin{macrocode} -\cs_new_protected:cpn { \c_@@_props_root_tl .bool_set_inverse:N } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .bool_set_inverse:N } #1 { \@@_bool_set_inverse:Nn #1 { } } -\cs_new_protected:cpn { \c_@@_props_root_tl .bool_set_inverse:c } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .bool_set_inverse:c } #1 { \@@_bool_set_inverse:cn {#1} { } } -\cs_new_protected:cpn { \c_@@_props_root_tl .bool_gset_inverse:N } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .bool_gset_inverse:N } #1 { \@@_bool_set_inverse:Nn #1 { g } } -\cs_new_protected:cpn { \c_@@_props_root_tl .bool_gset_inverse:c } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .bool_gset_inverse:c } #1 { \@@_bool_set_inverse:cn {#1} { g } } % \end{macrocode} % \end{macro} @@ -1848,7 +1852,7 @@ % Making a choice is handled internally, as it is also needed by % \texttt{.generate_choices:n}. % \begin{macrocode} -\cs_new_protected:cpn { \c_@@_props_root_tl .choice: } +\cs_new_protected:cpn { \c_@@_props_root_str .choice: } { \@@_choice_make: } % \end{macrocode} % \end{macro} @@ -1859,13 +1863,13 @@ % Here, |#1| consists of two separate % arguments, hence the slightly odd-looking implementation. % \begin{macrocode} -\cs_new_protected:cpn { \c_@@_props_root_tl .choices:nn } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .choices:nn } #1 { \@@_choices_make:nn #1 } -\cs_new_protected:cpn { \c_@@_props_root_tl .choices:Vn } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .choices:Vn } #1 { \exp_args:NV \@@_choices_make:nn #1 } -\cs_new_protected:cpn { \c_@@_props_root_tl .choices:on } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .choices:on } #1 { \exp_args:No \@@_choices_make:nn #1 } -\cs_new_protected:cpn { \c_@@_props_root_tl .choices:xn } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .choices:xn } #1 { \exp_args:Nx \@@_choices_make:nn #1 } % \end{macrocode} % \end{macro} @@ -1874,21 +1878,21 @@ % Creating code is simply a case of passing through to the underlying % \texttt{set} function. % \begin{macrocode} -\cs_new_protected:cpn { \c_@@_props_root_tl .code:n } #1 - { \@@_cmd_set:nn { \l_keys_path_tl } {#1} } +\cs_new_protected:cpn { \c_@@_props_root_str .code:n } #1 + { \@@_cmd_set:nn { \l_keys_path_str } {#1} } % \end{macrocode} % \end{macro} % % \begin{macro}{.clist_set:N, .clist_set:c} % \begin{macro}{.clist_gset:N, .clist_gset:c} % \begin{macrocode} -\cs_new_protected:cpn { \c_@@_props_root_tl .clist_set:N } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .clist_set:N } #1 { \@@_variable_set:NnnN #1 { clist } { } n } -\cs_new_protected:cpn { \c_@@_props_root_tl .clist_set:c } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .clist_set:c } #1 { \@@_variable_set:cnnN {#1} { clist } { } n } -\cs_new_protected:cpn { \c_@@_props_root_tl .clist_gset:N } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .clist_gset:N } #1 { \@@_variable_set:NnnN #1 { clist } { g } n } -\cs_new_protected:cpn { \c_@@_props_root_tl .clist_gset:c } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .clist_gset:c } #1 { \@@_variable_set:cnnN {#1} { clist } { g } n } % \end{macrocode} % \end{macro} @@ -1897,13 +1901,13 @@ % \begin{macro}{.default:n, .default:V, .default:o, .default:x} % Expansion is left to the internal functions. % \begin{macrocode} -\cs_new_protected:cpn { \c_@@_props_root_tl .default:n } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .default:n } #1 { \@@_default_set:n {#1} } -\cs_new_protected:cpn { \c_@@_props_root_tl .default:V } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .default:V } #1 { \exp_args:NV \@@_default_set:n #1 } -\cs_new_protected:cpn { \c_@@_props_root_tl .default:o } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .default:o } #1 { \exp_args:No \@@_default_set:n {#1} } -\cs_new_protected:cpn { \c_@@_props_root_tl .default:x } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .default:x } #1 { \exp_args:Nx \@@_default_set:n {#1} } % \end{macrocode} % \end{macro} @@ -1912,13 +1916,13 @@ % \begin{macro}{.dim_gset:N, .dim_gset:c} % Setting a variable is very easy: just pass the data along. % \begin{macrocode} -\cs_new_protected:cpn { \c_@@_props_root_tl .dim_set:N } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .dim_set:N } #1 { \@@_variable_set_required:NnnN #1 { dim } { } n } -\cs_new_protected:cpn { \c_@@_props_root_tl .dim_set:c } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .dim_set:c } #1 { \@@_variable_set_required:cnnN {#1} { dim } { } n } -\cs_new_protected:cpn { \c_@@_props_root_tl .dim_gset:N } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .dim_gset:N } #1 { \@@_variable_set_required:NnnN #1 { dim } { g } n } -\cs_new_protected:cpn { \c_@@_props_root_tl .dim_gset:c } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .dim_gset:c } #1 { \@@_variable_set_required:cnnN {#1} { dim } { g } n } % \end{macrocode} % \end{macro} @@ -1928,13 +1932,13 @@ % \begin{macro}{.fp_gset:N, .fp_gset:c} % Setting a variable is very easy: just pass the data along. % \begin{macrocode} -\cs_new_protected:cpn { \c_@@_props_root_tl .fp_set:N } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .fp_set:N } #1 { \@@_variable_set_required:NnnN #1 { fp } { } n } -\cs_new_protected:cpn { \c_@@_props_root_tl .fp_set:c } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .fp_set:c } #1 { \@@_variable_set_required:cnnN {#1} { fp } { } n } -\cs_new_protected:cpn { \c_@@_props_root_tl .fp_gset:N } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .fp_gset:N } #1 { \@@_variable_set_required:NnnN #1 { fp } { g } n } -\cs_new_protected:cpn { \c_@@_props_root_tl .fp_gset:c } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .fp_gset:c } #1 { \@@_variable_set_required:cnnN {#1} { fp } { g } n } % \end{macrocode} % \end{macro} @@ -1943,7 +1947,7 @@ % \begin{macro}{.groups:n} % A single property to create groups of keys. % \begin{macrocode} -\cs_new_protected:cpn { \c_@@_props_root_tl .groups:n } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .groups:n } #1 { \@@_groups_set:n {#1} } % \end{macrocode} % \end{macro} @@ -1951,7 +1955,7 @@ % \begin{macro}{.inherit:n} % Nothing complex: only one variant at the moment! % \begin{macrocode} -\cs_new_protected:cpn { \c_@@_props_root_tl .inherit:n } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .inherit:n } #1 { \@@_inherit:n {#1} } % \end{macrocode} % \end{macro} @@ -1959,13 +1963,13 @@ % \begin{macro}{.initial:n, .initial:V, .initial:o, .initial:x} % The standard hand-off approach. % \begin{macrocode} -\cs_new_protected:cpn { \c_@@_props_root_tl .initial:n } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .initial:n } #1 { \@@_initialise:n {#1} } -\cs_new_protected:cpn { \c_@@_props_root_tl .initial:V } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .initial:V } #1 { \exp_args:NV \@@_initialise:n #1 } -\cs_new_protected:cpn { \c_@@_props_root_tl .initial:o } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .initial:o } #1 { \exp_args:No \@@_initialise:n {#1} } -\cs_new_protected:cpn { \c_@@_props_root_tl .initial:x } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .initial:x } #1 { \exp_args:Nx \@@_initialise:n {#1} } % \end{macrocode} % \end{macro} @@ -1974,13 +1978,13 @@ % \begin{macro}{.int_gset:N, .int_gset:c} % Setting a variable is very easy: just pass the data along. % \begin{macrocode} -\cs_new_protected:cpn { \c_@@_props_root_tl .int_set:N } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .int_set:N } #1 { \@@_variable_set_required:NnnN #1 { int } { } n } -\cs_new_protected:cpn { \c_@@_props_root_tl .int_set:c } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .int_set:c } #1 { \@@_variable_set_required:cnnN {#1} { int } { } n } -\cs_new_protected:cpn { \c_@@_props_root_tl .int_gset:N } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .int_gset:N } #1 { \@@_variable_set_required:NnnN #1 { int } { g } n } -\cs_new_protected:cpn { \c_@@_props_root_tl .int_gset:c } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .int_gset:c } #1 { \@@_variable_set_required:cnnN {#1} { int } { g } n } % \end{macrocode} % \end{macro} @@ -1989,7 +1993,7 @@ % \begin{macro}{.meta:n} % Making a meta is handled internally. % \begin{macrocode} -\cs_new_protected:cpn { \c_@@_props_root_tl .meta:n } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .meta:n } #1 { \@@_meta_make:n {#1} } % \end{macrocode} % \end{macro} @@ -1998,7 +2002,7 @@ % Meta with path: potentially lots of variants, but for the moment % no so many defined. % \begin{macrocode} -\cs_new_protected:cpn { \c_@@_props_root_tl .meta:nn } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .meta:nn } #1 { \@@_meta_make:nn #1 } % \end{macrocode} % \end{macro} @@ -2012,15 +2016,15 @@ % The same idea as \texttt{.choice:} and \texttt{.choices:nn}, but % where more than one choice is allowed. % \begin{macrocode} -\cs_new_protected:cpn { \c_@@_props_root_tl .multichoice: } +\cs_new_protected:cpn { \c_@@_props_root_str .multichoice: } { \@@_multichoice_make: } -\cs_new_protected:cpn { \c_@@_props_root_tl .multichoices:nn } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .multichoices:nn } #1 { \@@_multichoices_make:nn #1 } -\cs_new_protected:cpn { \c_@@_props_root_tl .multichoices:Vn } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .multichoices:Vn } #1 { \exp_args:NV \@@_multichoices_make:nn #1 } -\cs_new_protected:cpn { \c_@@_props_root_tl .multichoices:on } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .multichoices:on } #1 { \exp_args:No \@@_multichoices_make:nn #1 } -\cs_new_protected:cpn { \c_@@_props_root_tl .multichoices:xn } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .multichoices:xn } #1 { \exp_args:Nx \@@_multichoices_make:nn #1 } % \end{macrocode} % \end{macro} @@ -2029,13 +2033,13 @@ % \begin{macro}{.muskip_set:N, .muskip_set:c, .muskip_gset:N, .muskip_gset:c} % Setting a variable is very easy: just pass the data along. % \begin{macrocode} -\cs_new_protected:cpn { \c_@@_props_root_tl .muskip_set:N } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .muskip_set:N } #1 { \@@_variable_set_required:NnnN #1 { muskip } { } n } -\cs_new_protected:cpn { \c_@@_props_root_tl .muskip_set:c } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .muskip_set:c } #1 { \@@_variable_set_required:cnnN {#1} { muskip } { } n } -\cs_new_protected:cpn { \c_@@_props_root_tl .muskip_gset:N } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .muskip_gset:N } #1 { \@@_variable_set_required:NnnN #1 { muskip } { g } n } -\cs_new_protected:cpn { \c_@@_props_root_tl .muskip_gset:c } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .muskip_gset:c } #1 { \@@_variable_set_required:cnnN {#1} { muskip } { g } n } % \end{macrocode} % \end{macro} @@ -2043,13 +2047,13 @@ % \begin{macro}{.prop_put:N, .prop_put:c, .prop_gput:N, .prop_gput:c} % Setting a variable is very easy: just pass the data along. % \begin{macrocode} -\cs_new_protected:cpn { \c_@@_props_root_tl .prop_put:N } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .prop_put:N } #1 { \@@_prop_put:Nn #1 { } } -\cs_new_protected:cpn { \c_@@_props_root_tl .prop_put:c } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .prop_put:c } #1 { \@@_prop_put:cn {#1} { } } -\cs_new_protected:cpn { \c_@@_props_root_tl .prop_gput:N } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .prop_gput:N } #1 { \@@_prop_put:Nn #1 { g } } -\cs_new_protected:cpn { \c_@@_props_root_tl .prop_gput:c } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .prop_gput:c } #1 { \@@_prop_put:cn {#1} { g } } % \end{macrocode} % \end{macro} @@ -2058,13 +2062,13 @@ % \begin{macro}{.skip_gset:N, .skip_gset:c} % Setting a variable is very easy: just pass the data along. % \begin{macrocode} -\cs_new_protected:cpn { \c_@@_props_root_tl .skip_set:N } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .skip_set:N } #1 { \@@_variable_set_required:NnnN #1 { skip } { } n } -\cs_new_protected:cpn { \c_@@_props_root_tl .skip_set:c } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .skip_set:c } #1 { \@@_variable_set_required:cnnN {#1} { skip } { } n } -\cs_new_protected:cpn { \c_@@_props_root_tl .skip_gset:N } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .skip_gset:N } #1 { \@@_variable_set_required:NnnN #1 { skip } { g } n } -\cs_new_protected:cpn { \c_@@_props_root_tl .skip_gset:c } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .skip_gset:c } #1 { \@@_variable_set_required:cnnN {#1} { skip } { g } n } % \end{macrocode} % \end{macro} @@ -2076,21 +2080,21 @@ % \begin{macro}{.tl_gset_x:N, .tl_gset_x:c} % Setting a variable is very easy: just pass the data along. % \begin{macrocode} -\cs_new_protected:cpn { \c_@@_props_root_tl .tl_set:N } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .tl_set:N } #1 { \@@_variable_set:NnnN #1 { tl } { } n } -\cs_new_protected:cpn { \c_@@_props_root_tl .tl_set:c } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .tl_set:c } #1 { \@@_variable_set:cnnN {#1} { tl } { } n } -\cs_new_protected:cpn { \c_@@_props_root_tl .tl_set_x:N } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .tl_set_x:N } #1 { \@@_variable_set:NnnN #1 { tl } { } x } -\cs_new_protected:cpn { \c_@@_props_root_tl .tl_set_x:c } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .tl_set_x:c } #1 { \@@_variable_set:cnnN {#1} { tl } { } x } -\cs_new_protected:cpn { \c_@@_props_root_tl .tl_gset:N } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .tl_gset:N } #1 { \@@_variable_set:NnnN #1 { tl } { g } n } -\cs_new_protected:cpn { \c_@@_props_root_tl .tl_gset:c } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .tl_gset:c } #1 { \@@_variable_set:cnnN {#1} { tl } { g } n } -\cs_new_protected:cpn { \c_@@_props_root_tl .tl_gset_x:N } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .tl_gset_x:N } #1 { \@@_variable_set:NnnN #1 { tl } { g } x } -\cs_new_protected:cpn { \c_@@_props_root_tl .tl_gset_x:c } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .tl_gset_x:c } #1 { \@@_variable_set:cnnN {#1} { tl } { g } x } % \end{macrocode} % \end{macro} @@ -2101,7 +2105,7 @@ % \begin{macro}{.undefine:} % Another simple wrapper. % \begin{macrocode} -\cs_new_protected:cpn { \c_@@_props_root_tl .undefine: } +\cs_new_protected:cpn { \c_@@_props_root_str .undefine: } { \@@_undefine: } % \end{macrocode} % \end{macro} @@ -2110,9 +2114,9 @@ % \begin{macro}{.value_required:n} % These are very similar, so both call the same function. % \begin{macrocode} -\cs_new_protected:cpn { \c_@@_props_root_tl .value_forbidden:n } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .value_forbidden:n } #1 { \@@_value_requirement:nn { forbidden } {#1} } -\cs_new_protected:cpn { \c_@@_props_root_tl .value_required:n } #1 +\cs_new_protected:cpn { \c_@@_props_root_str .value_required:n } #1 { \@@_value_requirement:nn { required } {#1} } % \end{macrocode} % \end{macro} @@ -2150,12 +2154,12 @@ } \cs_generate_variant:Nn \keys_set:nn { nV , nv , no } \cs_new_protected:Npn \@@_set:nn #1#2 - { \exp_args:No \@@_set:nnn \l_@@_module_tl {#1} {#2} } + { \exp_args:No \@@_set:nnn \l_@@_module_str {#1} {#2} } \cs_new_protected:Npn \@@_set:nnn #1#2#3 { - \tl_set:Nx \l_@@_module_tl { \@@_trim_spaces:n {#2} } + \str_set:Nx \l_@@_module_str { \@@_trim_spaces:n {#2} } \keyval_parse:NNn \@@_set_keyval:n \@@_set_keyval:nn {#3} - \tl_set:Nn \l_@@_module_tl {#1} + \str_set:Nn \l_@@_module_str {#1} } % \end{macrocode} % \end{macro} @@ -2354,12 +2358,12 @@ \cs_new_protected:Npn \@@_set_keyval:n #1 { \bool_set_true:N \l_@@_no_value_bool - \@@_set_keyval:onn \l_@@_module_tl {#1} { } + \@@_set_keyval:onn \l_@@_module_str {#1} { } } \cs_new_protected:Npn \@@_set_keyval:nn #1#2 { \bool_set_false:N \l_@@_no_value_bool - \@@_set_keyval:onn \l_@@_module_tl {#1} {#2} + \@@_set_keyval:onn \l_@@_module_str {#1} {#2} } % \end{macrocode} % The key path here can be fully defined, after which there is a search @@ -2370,33 +2374,34 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_set_keyval:nnn #1#2#3 { - \tl_set:Nx \l_keys_path_tl + \tl_set:Nx \l_keys_path_str { \tl_if_blank:nF {#1} { #1 / } \@@_trim_spaces:n {#2} } - \tl_clear:N \l_@@_module_tl - \tl_clear:N \l_@@_inherit_tl + \str_clear:N \l_@@_module_str + \str_clear:N \l_@@_inherit_str \exp_after:wN \@@_find_key_module:NNw - \exp_after:wN \l_@@_module_tl - \exp_after:wN \l_keys_key_tl - \l_keys_path_tl / \q_stop + \exp_after:wN \l_@@_module_str + \exp_after:wN \l_keys_key_str + \l_keys_path_str / \q_stop + \tl_set_eq:NN \l_keys_key_tl \l_keys_key_str \@@_value_or_default:n {#3} \bool_if:NTF \l_@@_selective_bool { \@@_set_selective: } { \@@_execute: } - \tl_set:Nn \l_@@_module_tl {#1} + \str_set:Nn \l_@@_module_str {#1} } \cs_generate_variant:Nn \@@_set_keyval:nnn { o } \cs_new_protected:Npn \@@_find_key_module:NNw #1#2#3 / #4 \q_stop { \tl_if_blank:nTF {#4} - { \tl_set:Nn #2 {#3} } + { \str_set:Nn #2 {#3} } { - \tl_put_right:Nx #1 + \str_put_right:Nx #1 { - \tl_if_empty:NF #1 { / } + \str_if_empty:NF #1 { / } #3 } \@@_find_key_module:NNw #1#2 #4 \q_stop @@ -2410,10 +2415,10 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_set_selective: { - \cs_if_exist:cTF { \c_@@_groups_root_tl \l_keys_path_tl } + \cs_if_exist:cTF { \c_@@_groups_root_str \l_keys_path_str } { \clist_set_eq:Nc \l_@@_groups_clist - { \c_@@_groups_root_tl \l_keys_path_tl } + { \c_@@_groups_root_str \l_keys_path_str } \@@_check_groups: } { @@ -2469,16 +2474,16 @@ { \bool_if:NTF \l_@@_no_value_bool { - \cs_if_exist:cTF { \c_@@_default_root_tl \l_keys_path_tl } + \cs_if_exist:cTF { \c_@@_default_root_str \l_keys_path_str } { \tl_set_eq:Nc \l_keys_value_tl - { \c_@@_default_root_tl \l_keys_path_tl } + { \c_@@_default_root_str \l_keys_path_str } } { \tl_clear:N \l_keys_value_tl \cs_if_exist:cT - { \c_@@_inherit_root_tl \@@_parent:o \l_keys_path_tl } + { \c_@@_inherit_root_str \@@_parent:o \l_keys_path_str } { \@@_default_inherit: } } } @@ -2487,14 +2492,14 @@ \cs_new_protected:Npn \@@_default_inherit: { \clist_map_inline:cn - { \c_@@_inherit_root_tl \@@_parent:o \l_keys_path_tl } + { \c_@@_inherit_root_str \@@_parent:o \l_keys_path_str } { \cs_if_exist:cT - { \c_@@_default_root_tl ##1 / \l_keys_key_tl } + { \c_@@_default_root_str ##1 / \l_keys_key_str } { \tl_set_eq:Nc \l_keys_value_tl - { \c_@@_default_root_tl ##1 / \l_keys_key_tl } + { \c_@@_default_root_str ##1 / \l_keys_key_str } \clist_map_break: } } @@ -2514,15 +2519,15 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_execute: { - \cs_if_exist:cTF { \c_@@_code_root_tl \l_keys_path_tl } + \cs_if_exist:cTF { \c_@@_code_root_str \l_keys_path_str } { - \cs_if_exist_use:c { \c_@@_validate_root_tl \l_keys_path_tl } - \cs:w \c_@@_code_root_tl \l_keys_path_tl \exp_after:wN \cs_end: + \cs_if_exist_use:c { \c_@@_validate_root_str \l_keys_path_str } + \cs:w \c_@@_code_root_str \l_keys_path_str \exp_after:wN \cs_end: \exp_after:wN { \l_keys_value_tl } } { \cs_if_exist:cTF - { \c_@@_inherit_root_tl \@@_parent:o \l_keys_path_tl } + { \c_@@_inherit_root_str \@@_parent:o \l_keys_path_str } { \@@_execute_inherit: } { \@@_execute_unknown: } } @@ -2535,14 +2540,14 @@ \cs_new_protected:Npn \@@_execute_inherit: { \clist_map_inline:cn - { \c_@@_inherit_root_tl \@@_parent:o \l_keys_path_tl } + { \c_@@_inherit_root_str \@@_parent:o \l_keys_path_str } { \cs_if_exist:cT - { \c_@@_code_root_tl ##1 / \l_keys_key_tl } + { \c_@@_code_root_str ##1 / \l_keys_key_str } { - \tl_set:Nn \l_@@_inherit_tl {##1} - \cs_if_exist_use:c { \c_@@_validate_root_tl ##1 / \l_keys_key_tl } - \cs:w \c_@@_code_root_tl ##1 / \l_keys_key_tl + \str_set:Nn \l_@@_inherit_str {##1} + \cs_if_exist_use:c { \c_@@_validate_root_str ##1 / \l_keys_key_str } + \cs:w \c_@@_code_root_str ##1 / \l_keys_key_str \exp_after:wN \cs_end: \exp_after:wN { \l_keys_value_tl } \clist_map_break:n { \use_none:n } @@ -2556,22 +2561,22 @@ { \@@_store_unused: } { \cs_if_exist:cTF - { \c_@@_code_root_tl \l_@@_module_tl / unknown } + { \c_@@_code_root_str \l_@@_module_str / unknown } { - \cs:w \c_@@_code_root_tl \l_@@_module_tl / unknown + \cs:w \c_@@_code_root_str \l_@@_module_str / unknown \exp_after:wN \cs_end: \exp_after:wN { \l_keys_value_tl } } { \__kernel_msg_error:nnxx { kernel } { key-unknown } - { \l_keys_path_tl } { \l_@@_module_tl } + { \l_keys_path_str } { \l_@@_module_str } } } } \cs_new:Npn \@@_execute:nn #1#2 { - \cs_if_exist:cTF { \c_@@_code_root_tl #1 } + \cs_if_exist:cTF { \c_@@_code_root_str #1 } { - \cs:w \c_@@_code_root_tl #1 \exp_after:wN \cs_end: + \cs:w \c_@@_code_root_str #1 \exp_after:wN \cs_end: \exp_after:wN { \l_keys_value_tl } } {#2} @@ -2589,7 +2594,7 @@ { \clist_put_right:Nx \l_@@_unused_clist { - \exp_not:o \l_keys_key_tl + \exp_not:o \l_keys_key_str \bool_if:NF \l_@@_no_value_bool { = { \exp_not:o \l_keys_value_tl } } } @@ -2599,7 +2604,7 @@ { \clist_put_right:Nx \l_@@_unused_clist { - \exp_not:o \l_keys_path_tl + \exp_not:o \l_keys_path_str \bool_if:NF \l_@@_no_value_bool { = { \exp_not:o \l_keys_value_tl } } } @@ -2622,7 +2627,7 @@ \tl_if_blank:nF {##1} { \__kernel_msg_error:nnxx { kernel } { bad-relative-key-path } - \l_keys_path_tl + \l_keys_path_str \l_@@_relative_tl } \clist_put_right:Nx \l_@@_unused_clist @@ -2634,7 +2639,7 @@ } \use:x { - \@@_store_unused:w \l_keys_path_tl + \@@_store_unused:w \l_keys_path_str \l_@@_relative_tl / \l_@@_relative_tl / \exp_not:N \q_stop } @@ -2655,18 +2660,18 @@ % \begin{macrocode} \cs_new:Npn \@@_choice_find:n #1 { - \tl_if_empty:NTF \l_@@_inherit_tl - { \@@_choice_find:nn { \l_keys_path_tl } {#1} } + \str_if_empty:NTF \l_@@_inherit_str + { \@@_choice_find:nn { \l_keys_path_str } {#1} } { \@@_choice_find:nn - { \l_@@_inherit_tl / \l_keys_key_tl } {#1} + { \l_@@_inherit_str / \l_keys_key_str } {#1} } } \cs_new:Npn \@@_choice_find:nn #1#2 { - \cs_if_exist:cTF { \c_@@_code_root_tl #1 / \@@_trim_spaces:n {#2} } - { \use:c { \c_@@_code_root_tl #1 / \@@_trim_spaces:n {#2} } {#2} } - { \use:c { \c_@@_code_root_tl #1 / unknown } {#2} } + \cs_if_exist:cTF { \c_@@_code_root_str #1 / \@@_trim_spaces:n {#2} } + { \use:c { \c_@@_code_root_str #1 / \@@_trim_spaces:n {#2} } {#2} } + { \use:c { \c_@@_code_root_str #1 / unknown } {#2} } } \cs_new:Npn \@@_multichoice_find:n #1 { \clist_map_function:nN {#1} \@@_choice_find:n } @@ -2742,7 +2747,7 @@ \prg_new_conditional:Npnn \keys_if_exist:nn #1#2 { p , T , F , TF } { \cs_if_exist:cTF - { \c_@@_code_root_tl \@@_trim_spaces:n { #1 / #2 } } + { \c_@@_code_root_str \@@_trim_spaces:n { #1 / #2 } } { \prg_return_true: } { \prg_return_false: } } @@ -2756,7 +2761,7 @@ { p , T , F , TF } { \cs_if_exist:cTF - { \c_@@_code_root_tl \@@_trim_spaces:n { #1 / #2 / #3 } } + { \c_@@_code_root_str \@@_trim_spaces:n { #1 / #2 / #3 } } { \prg_return_true: } { \prg_return_false: } } @@ -2781,7 +2786,7 @@ { \exp_args:Nc \cs_replacement_spec:N { - \c_@@_code_root_tl + \c_@@_code_root_str \@@_trim_spaces:n { #2 / #3 } } } diff --git a/macros/latex/contrib/l3kernel/l3legacy.dtx b/macros/latex/contrib/l3kernel/l3legacy.dtx index 14caa9430d..140f678de4 100644 --- a/macros/latex/contrib/l3kernel/l3legacy.dtx +++ b/macros/latex/contrib/l3kernel/l3legacy.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2020-02-03} +% \date{Released 2020-02-08} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3luatex.dtx b/macros/latex/contrib/l3kernel/l3luatex.dtx index 1623be1c5d..4e248880c3 100644 --- a/macros/latex/contrib/l3kernel/l3luatex.dtx +++ b/macros/latex/contrib/l3kernel/l3luatex.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2020-02-03} +% \date{Released 2020-02-08} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3msg.dtx b/macros/latex/contrib/l3kernel/l3msg.dtx index fd8fb7bbd8..46571537f4 100644 --- a/macros/latex/contrib/l3kernel/l3msg.dtx +++ b/macros/latex/contrib/l3kernel/l3msg.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2020-02-03} +% \date{Released 2020-02-08} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3names.dtx b/macros/latex/contrib/l3kernel/l3names.dtx index 225410545d..c835f888af 100644 --- a/macros/latex/contrib/l3kernel/l3names.dtx +++ b/macros/latex/contrib/l3kernel/l3names.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2020-02-03} +% \date{Released 2020-02-08} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3news.pdf b/macros/latex/contrib/l3kernel/l3news.pdf Binary files differindex fc4c48aefc..dda09e2137 100644 --- a/macros/latex/contrib/l3kernel/l3news.pdf +++ b/macros/latex/contrib/l3kernel/l3news.pdf diff --git a/macros/latex/contrib/l3kernel/l3news01.pdf b/macros/latex/contrib/l3kernel/l3news01.pdf Binary files differindex 8c00d845e8..a024c70236 100644 --- a/macros/latex/contrib/l3kernel/l3news01.pdf +++ b/macros/latex/contrib/l3kernel/l3news01.pdf diff --git a/macros/latex/contrib/l3kernel/l3news02.pdf b/macros/latex/contrib/l3kernel/l3news02.pdf Binary files differindex 9a15e6f09e..1be81998ee 100644 --- a/macros/latex/contrib/l3kernel/l3news02.pdf +++ b/macros/latex/contrib/l3kernel/l3news02.pdf diff --git a/macros/latex/contrib/l3kernel/l3news03.pdf b/macros/latex/contrib/l3kernel/l3news03.pdf Binary files differindex eef685088a..d3fb37b0ab 100644 --- a/macros/latex/contrib/l3kernel/l3news03.pdf +++ b/macros/latex/contrib/l3kernel/l3news03.pdf diff --git a/macros/latex/contrib/l3kernel/l3news04.pdf b/macros/latex/contrib/l3kernel/l3news04.pdf Binary files differindex cd9b45d7fd..94255ae3da 100644 --- a/macros/latex/contrib/l3kernel/l3news04.pdf +++ b/macros/latex/contrib/l3kernel/l3news04.pdf diff --git a/macros/latex/contrib/l3kernel/l3news05.pdf b/macros/latex/contrib/l3kernel/l3news05.pdf Binary files differindex 850660fd97..6b899baf03 100644 --- a/macros/latex/contrib/l3kernel/l3news05.pdf +++ b/macros/latex/contrib/l3kernel/l3news05.pdf diff --git a/macros/latex/contrib/l3kernel/l3news06.pdf b/macros/latex/contrib/l3kernel/l3news06.pdf Binary files differindex 9543481f2f..00355e0e95 100644 --- a/macros/latex/contrib/l3kernel/l3news06.pdf +++ b/macros/latex/contrib/l3kernel/l3news06.pdf diff --git a/macros/latex/contrib/l3kernel/l3news07.pdf b/macros/latex/contrib/l3kernel/l3news07.pdf Binary files differindex 8d45eb668a..3c622d1157 100644 --- a/macros/latex/contrib/l3kernel/l3news07.pdf +++ b/macros/latex/contrib/l3kernel/l3news07.pdf diff --git a/macros/latex/contrib/l3kernel/l3news08.pdf b/macros/latex/contrib/l3kernel/l3news08.pdf Binary files differindex ca357556ba..450b99f51c 100644 --- a/macros/latex/contrib/l3kernel/l3news08.pdf +++ b/macros/latex/contrib/l3kernel/l3news08.pdf diff --git a/macros/latex/contrib/l3kernel/l3news09.pdf b/macros/latex/contrib/l3kernel/l3news09.pdf Binary files differindex 462495b61b..9c0c61bb18 100644 --- a/macros/latex/contrib/l3kernel/l3news09.pdf +++ b/macros/latex/contrib/l3kernel/l3news09.pdf diff --git a/macros/latex/contrib/l3kernel/l3news10.pdf b/macros/latex/contrib/l3kernel/l3news10.pdf Binary files differindex af9e3ed973..4ab0051120 100644 --- a/macros/latex/contrib/l3kernel/l3news10.pdf +++ b/macros/latex/contrib/l3kernel/l3news10.pdf diff --git a/macros/latex/contrib/l3kernel/l3news11.pdf b/macros/latex/contrib/l3kernel/l3news11.pdf Binary files differindex 4139046bb2..22d9abcc6a 100644 --- a/macros/latex/contrib/l3kernel/l3news11.pdf +++ b/macros/latex/contrib/l3kernel/l3news11.pdf diff --git a/macros/latex/contrib/l3kernel/l3news12.pdf b/macros/latex/contrib/l3kernel/l3news12.pdf Binary files differindex 7609ae164a..b1601aef36 100644 --- a/macros/latex/contrib/l3kernel/l3news12.pdf +++ b/macros/latex/contrib/l3kernel/l3news12.pdf diff --git a/macros/latex/contrib/l3kernel/l3prefixes.pdf b/macros/latex/contrib/l3kernel/l3prefixes.pdf Binary files differindex 038c80e6bd..c2608d4d1b 100644 --- a/macros/latex/contrib/l3kernel/l3prefixes.pdf +++ b/macros/latex/contrib/l3kernel/l3prefixes.pdf diff --git a/macros/latex/contrib/l3kernel/l3prg.dtx b/macros/latex/contrib/l3kernel/l3prg.dtx index 4e7e431670..e6b2b22814 100644 --- a/macros/latex/contrib/l3kernel/l3prg.dtx +++ b/macros/latex/contrib/l3kernel/l3prg.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2020-02-03} +% \date{Released 2020-02-08} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3prop.dtx b/macros/latex/contrib/l3kernel/l3prop.dtx index 1eadfa8a3e..53f4a3f5ef 100644 --- a/macros/latex/contrib/l3kernel/l3prop.dtx +++ b/macros/latex/contrib/l3kernel/l3prop.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2020-02-03} +% \date{Released 2020-02-08} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3quark.dtx b/macros/latex/contrib/l3kernel/l3quark.dtx index f79131bb42..aa5e0059c8 100644 --- a/macros/latex/contrib/l3kernel/l3quark.dtx +++ b/macros/latex/contrib/l3kernel/l3quark.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2020-02-03} +% \date{Released 2020-02-08} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3regex.dtx b/macros/latex/contrib/l3kernel/l3regex.dtx index 084cac8c28..d754599b20 100644 --- a/macros/latex/contrib/l3kernel/l3regex.dtx +++ b/macros/latex/contrib/l3kernel/l3regex.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2020-02-03} +% \date{Released 2020-02-08} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3seq.dtx b/macros/latex/contrib/l3kernel/l3seq.dtx index 10cec387fa..3e3bd7dd23 100644 --- a/macros/latex/contrib/l3kernel/l3seq.dtx +++ b/macros/latex/contrib/l3kernel/l3seq.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2020-02-03} +% \date{Released 2020-02-08} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3skip.dtx b/macros/latex/contrib/l3kernel/l3skip.dtx index 06d877cddb..0346f67316 100644 --- a/macros/latex/contrib/l3kernel/l3skip.dtx +++ b/macros/latex/contrib/l3kernel/l3skip.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2020-02-03} +% \date{Released 2020-02-08} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3sort.dtx b/macros/latex/contrib/l3kernel/l3sort.dtx index 09d914f7bc..a0d100e2f2 100644 --- a/macros/latex/contrib/l3kernel/l3sort.dtx +++ b/macros/latex/contrib/l3kernel/l3sort.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2020-02-03} +% \date{Released 2020-02-08} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3str-convert.dtx b/macros/latex/contrib/l3kernel/l3str-convert.dtx index d9cce61c5b..64b3500fee 100644 --- a/macros/latex/contrib/l3kernel/l3str-convert.dtx +++ b/macros/latex/contrib/l3kernel/l3str-convert.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2020-02-03} +% \date{Released 2020-02-08} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3str.dtx b/macros/latex/contrib/l3kernel/l3str.dtx index 8481b1e996..92c86e36a9 100644 --- a/macros/latex/contrib/l3kernel/l3str.dtx +++ b/macros/latex/contrib/l3kernel/l3str.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2020-02-03} +% \date{Released 2020-02-08} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3styleguide.pdf b/macros/latex/contrib/l3kernel/l3styleguide.pdf Binary files differindex 5137403b92..6aa7e3c926 100644 --- a/macros/latex/contrib/l3kernel/l3styleguide.pdf +++ b/macros/latex/contrib/l3kernel/l3styleguide.pdf diff --git a/macros/latex/contrib/l3kernel/l3styleguide.tex b/macros/latex/contrib/l3kernel/l3styleguide.tex index aa8aec5ef3..2465a4b070 100644 --- a/macros/latex/contrib/l3kernel/l3styleguide.tex +++ b/macros/latex/contrib/l3kernel/l3styleguide.tex @@ -32,7 +32,7 @@ The released version of this bundle is available from CTAN. {latex-team@latex-project.org}% }% } -\date{Released 2020-02-03} +\date{Released 2020-02-08} \begin{document} diff --git a/macros/latex/contrib/l3kernel/l3syntax-changes.pdf b/macros/latex/contrib/l3kernel/l3syntax-changes.pdf Binary files differindex 3f5d9029d3..ee618dbe88 100644 --- a/macros/latex/contrib/l3kernel/l3syntax-changes.pdf +++ b/macros/latex/contrib/l3kernel/l3syntax-changes.pdf diff --git a/macros/latex/contrib/l3kernel/l3syntax-changes.tex b/macros/latex/contrib/l3kernel/l3syntax-changes.tex index 2bbeb7d28e..f50d11264c 100644 --- a/macros/latex/contrib/l3kernel/l3syntax-changes.tex +++ b/macros/latex/contrib/l3kernel/l3syntax-changes.tex @@ -32,7 +32,7 @@ The released version of this bundle is available from CTAN. {latex-team@latex-project.org}% }% } -\date{Released 2020-02-03} +\date{Released 2020-02-08} \newcommand{\TF}{\textit{(TF)}} diff --git a/macros/latex/contrib/l3kernel/l3sys.dtx b/macros/latex/contrib/l3kernel/l3sys.dtx index a10a9c8c58..fcf809f839 100644 --- a/macros/latex/contrib/l3kernel/l3sys.dtx +++ b/macros/latex/contrib/l3kernel/l3sys.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2020-02-03} +% \date{Released 2020-02-08} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3term-glossary.pdf b/macros/latex/contrib/l3kernel/l3term-glossary.pdf Binary files differindex 9d0739ae26..801ca39d2c 100644 --- a/macros/latex/contrib/l3kernel/l3term-glossary.pdf +++ b/macros/latex/contrib/l3kernel/l3term-glossary.pdf diff --git a/macros/latex/contrib/l3kernel/l3term-glossary.tex b/macros/latex/contrib/l3kernel/l3term-glossary.tex index 4bc519c592..773ed8878a 100644 --- a/macros/latex/contrib/l3kernel/l3term-glossary.tex +++ b/macros/latex/contrib/l3kernel/l3term-glossary.tex @@ -32,7 +32,7 @@ The released version of this bundle is available from CTAN. {latex-team@latex-project.org}% }% } -\date{Released 2020-02-03} +\date{Released 2020-02-08} \newcommand{\TF}{\textit{(TF)}} diff --git a/macros/latex/contrib/l3kernel/l3text-case.dtx b/macros/latex/contrib/l3kernel/l3text-case.dtx index c8fab265b8..e48d969759 100644 --- a/macros/latex/contrib/l3kernel/l3text-case.dtx +++ b/macros/latex/contrib/l3kernel/l3text-case.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2020-02-03} +% \date{Released 2020-02-08} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3text.dtx b/macros/latex/contrib/l3kernel/l3text.dtx index 56881e290f..72f91af2f1 100644 --- a/macros/latex/contrib/l3kernel/l3text.dtx +++ b/macros/latex/contrib/l3kernel/l3text.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2020-02-03} +% \date{Released 2020-02-08} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3tl-analysis.dtx b/macros/latex/contrib/l3kernel/l3tl-analysis.dtx index b67c36be9d..7e29a8a3a9 100644 --- a/macros/latex/contrib/l3kernel/l3tl-analysis.dtx +++ b/macros/latex/contrib/l3kernel/l3tl-analysis.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2020-02-03} +% \date{Released 2020-02-08} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3tl.dtx b/macros/latex/contrib/l3kernel/l3tl.dtx index 0659d6ddb3..0d13463634 100644 --- a/macros/latex/contrib/l3kernel/l3tl.dtx +++ b/macros/latex/contrib/l3kernel/l3tl.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2020-02-03} +% \date{Released 2020-02-08} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3token.dtx b/macros/latex/contrib/l3kernel/l3token.dtx index 14a8a568ef..2bafe7fb42 100644 --- a/macros/latex/contrib/l3kernel/l3token.dtx +++ b/macros/latex/contrib/l3kernel/l3token.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2020-02-03} +% \date{Released 2020-02-08} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3unicode.dtx b/macros/latex/contrib/l3kernel/l3unicode.dtx index 22ab4a5fe3..63ea9f7a4e 100644 --- a/macros/latex/contrib/l3kernel/l3unicode.dtx +++ b/macros/latex/contrib/l3kernel/l3unicode.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2020-02-03} +% \date{Released 2020-02-08} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/source3.pdf b/macros/latex/contrib/l3kernel/source3.pdf Binary files differindex ff8e66a7f0..2dc02a3256 100644 --- a/macros/latex/contrib/l3kernel/source3.pdf +++ b/macros/latex/contrib/l3kernel/source3.pdf diff --git a/macros/latex/contrib/l3kernel/source3.tex b/macros/latex/contrib/l3kernel/source3.tex index 8219b182a8..d2349d9a0a 100644 --- a/macros/latex/contrib/l3kernel/source3.tex +++ b/macros/latex/contrib/l3kernel/source3.tex @@ -53,7 +53,7 @@ for those people who are interested. {latex-team@latex-project.org}% }% } -\date{Released 2020-02-03} +\date{Released 2020-02-08} \pagenumbering{roman} \maketitle diff --git a/macros/latex/contrib/l3packages/CHANGELOG.md b/macros/latex/contrib/l3packages/CHANGELOG.md index b889b474e5..73d98156b1 100644 --- a/macros/latex/contrib/l3packages/CHANGELOG.md +++ b/macros/latex/contrib/l3packages/CHANGELOG.md @@ -7,6 +7,12 @@ this project uses date-based 'snapshot' version identifiers. ## [Unreleased] +## [2020-02-08] + +### Changed +- Document that `\CurrentOption` is available and should be used in + `l3keys2e` + ## [2020-02-03] ### Fixed @@ -65,7 +71,8 @@ this project uses date-based 'snapshot' version identifiers. - Switch to ISO date format - Improve cross-module use of internal functions -[Unreleased]: https://github.com/latex3/latex3/compare/2020-02-03...HEAD +[Unreleased]: https://github.com/latex3/latex3/compare/2020-02-08...HEAD +[2020-02-08]: https://github.com/latex3/latex3/compare/2020-02-03...2020-02-08 [2020-02-03]: https://github.com/latex3/latex3/compare/2020-01-12...2020-02-03 [2020-01-12]: https://github.com/latex3/latex3/compare/2019-10-11...2020-01-12 [2019-10-11]: https://github.com/latex3/latex3/compare/2019-05-28...2019-10-11 diff --git a/macros/latex/contrib/l3packages/README.md b/macros/latex/contrib/l3packages/README.md index 2aee64937d..b221eec8a1 100644 --- a/macros/latex/contrib/l3packages/README.md +++ b/macros/latex/contrib/l3packages/README.md @@ -1,7 +1,7 @@ LaTeX3 High-Level Concepts ========================== -Release 2020-02-03 +Release 2020-02-08 Overview -------- diff --git a/macros/latex/contrib/l3packages/l3keys2e.dtx b/macros/latex/contrib/l3packages/l3keys2e.dtx index 2a2d4c2686..5753e388c9 100644 --- a/macros/latex/contrib/l3packages/l3keys2e.dtx +++ b/macros/latex/contrib/l3packages/l3keys2e.dtx @@ -25,8 +25,8 @@ %<*driver|package> % The version of expl3 required is tested as early as possible, as % some really old versions do not define \ProvidesExplPackage. -\RequirePackage{expl3}[2018/02/21] -%<package>\@ifpackagelater{expl3}{2018/02/21} +\RequirePackage{expl3}[2020/02/08] +%<package>\@ifpackagelater{expl3}{2020/02/08} %<package> {} %<package> {% %<package> \PackageError{l3keys2e}{Support package l3kernel too old} @@ -62,7 +62,7 @@ % }^^A % } % -% \date{Released 2020-02-03} +% \date{Released 2020-02-08} % % \maketitle % @@ -118,6 +118,12 @@ % \LaTeXe{} kernel function \cs{ProcessOptions}). % \end{function} % +% When passing unknown keys to other packages, the standard \LaTeX{} +% \tn{CurrentOption} command is available and should be used. In contrast +% to \cs{l_keys_key_str}, \cs{CurrentOption} is a token list and thus retains +% category code information. Depending on how options are used by third-party +% packages, this may be essential for the option to be recognised. +% %\end{documentation} % %\begin{implementation} @@ -133,7 +139,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{l3keys2e}{2020-02-03}{} +\ProvidesExplPackage{l3keys2e}{2020-02-08}{} {LaTeX2e option processing using LaTeX3 keys} % \end{macrocode} % @@ -180,7 +186,7 @@ unknown .code:n = { \msg_error:nnxx { keyvalue } { option-unknown } - { \l_keys_key_tl } { \@currname } + { \l_keys_key_str } { \@currname } } } \AtEndOfPackage diff --git a/macros/latex/contrib/l3packages/l3keys2e.pdf b/macros/latex/contrib/l3packages/l3keys2e.pdf Binary files differindex be9b3fe745..542dc679c6 100644 --- a/macros/latex/contrib/l3packages/l3keys2e.pdf +++ b/macros/latex/contrib/l3packages/l3keys2e.pdf diff --git a/macros/latex/contrib/l3packages/xfp.dtx b/macros/latex/contrib/l3packages/xfp.dtx index 4ff775e3a8..854a306709 100644 --- a/macros/latex/contrib/l3packages/xfp.dtx +++ b/macros/latex/contrib/l3packages/xfp.dtx @@ -64,7 +64,7 @@ % }^^A % } % -% \date{Released 2020-02-03} +% \date{Released 2020-02-08} % % \maketitle % @@ -167,7 +167,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{xfp}{2020-02-03}{} +\ProvidesExplPackage{xfp}{2020-02-08}{} {L3 Floating point unit} % \end{macrocode} % diff --git a/macros/latex/contrib/l3packages/xfp.pdf b/macros/latex/contrib/l3packages/xfp.pdf Binary files differindex a604056d35..fd2d9d0765 100644 --- a/macros/latex/contrib/l3packages/xfp.pdf +++ b/macros/latex/contrib/l3packages/xfp.pdf diff --git a/macros/latex/contrib/l3packages/xfrac.dtx b/macros/latex/contrib/l3packages/xfrac.dtx index 15dedf7641..9765c75eb1 100644 --- a/macros/latex/contrib/l3packages/xfrac.dtx +++ b/macros/latex/contrib/l3packages/xfrac.dtx @@ -65,7 +65,7 @@ % }^^A % } % -% \date{Released 2020-02-03} +% \date{Released 2020-02-08} % % \maketitle % @@ -535,7 +535,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{xfrac}{2020-02-03}{} +\ProvidesExplPackage{xfrac}{2020-02-08}{} {L3 Experimental split-level fractions} % \end{macrocode} % diff --git a/macros/latex/contrib/l3packages/xfrac.pdf b/macros/latex/contrib/l3packages/xfrac.pdf Binary files differindex c76c0074e7..f02a8829d9 100644 --- a/macros/latex/contrib/l3packages/xfrac.pdf +++ b/macros/latex/contrib/l3packages/xfrac.pdf diff --git a/macros/latex/contrib/l3packages/xparse.dtx b/macros/latex/contrib/l3packages/xparse.dtx index 81bb4a270a..1f0f483271 100644 --- a/macros/latex/contrib/l3packages/xparse.dtx +++ b/macros/latex/contrib/l3packages/xparse.dtx @@ -67,7 +67,7 @@ % }^^A % } % -% \date{Released 2020-02-03} +% \date{Released 2020-02-08} % % \maketitle % @@ -916,7 +916,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{xparse}{2020-02-03}{} +\ProvidesExplPackage{xparse}{2020-02-08}{} {L3 Experimental document command parser} % \end{macrocode} % diff --git a/macros/latex/contrib/l3packages/xparse.pdf b/macros/latex/contrib/l3packages/xparse.pdf Binary files differindex 7b088cc47e..c176bacedc 100644 --- a/macros/latex/contrib/l3packages/xparse.pdf +++ b/macros/latex/contrib/l3packages/xparse.pdf diff --git a/macros/latex/contrib/l3packages/xtemplate.dtx b/macros/latex/contrib/l3packages/xtemplate.dtx index d5a9783623..32e8fbbd33 100644 --- a/macros/latex/contrib/l3packages/xtemplate.dtx +++ b/macros/latex/contrib/l3packages/xtemplate.dtx @@ -63,7 +63,7 @@ % }^^A % } % -% \date{Released 2020-02-03} +% \date{Released 2020-02-08} % % \maketitle % @@ -682,7 +682,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{xtemplate}{2020-02-03}{} +\ProvidesExplPackage{xtemplate}{2020-02-08}{} {L3 Experimental prototype document functions} % \end{macrocode} % diff --git a/macros/latex/contrib/l3packages/xtemplate.pdf b/macros/latex/contrib/l3packages/xtemplate.pdf Binary files differindex 1b2b03dca1..839e221f6c 100644 --- a/macros/latex/contrib/l3packages/xtemplate.pdf +++ b/macros/latex/contrib/l3packages/xtemplate.pdf diff --git a/macros/latex/contrib/limecv/README.md b/macros/latex/contrib/limecv/README.md index c50155f639..7f6d8dcb43 100644 --- a/macros/latex/contrib/limecv/README.md +++ b/macros/latex/contrib/limecv/README.md @@ -1,5 +1,7 @@ # limecv <img src="src/images/limecv-icon.png" alt="limecv project icon" width="40px"/> +[![Build Status](https://travis-ci.org/opieters/limecv.svg?branch=master)](https://travis-ci.org/opieters/limecv) + `limecv` is a document class to typeset curriculum vitæ in (Xe/Lua)LaTeX. The design of this document class is detailed in [a series of blog posts][blog]. @@ -22,33 +24,17 @@ After installing this package, make sure you have the following fonts installed: * [FontAwesome][FA] * [Fira][fira] (only needed when using XeLaTeX/LuaLaTeX) -The following packages need to be installed on your system. They are all available on CTAN: -`kvoptions`, -`ifxetex`, -`ifluatex`, -`xparse`, -`calc`, -`xcolor`, -`tabularx`, -`hyperref`, -`url`, -`parskip`, -`xstring`, -`xkeyval`, -`tikz`, -`graphicx`, -`fontspec` (XeLaTeX and LuaLaTeX only) and -`fontawesome`. +The required packages are all available on CTAN. `support/install_texlive.sh` list all of them. ## Documentation -The class documentation can be found on [CTAN](http://mirrors.ctan.org/macros/latex/contrib/limecv/limecv.pdf). +The class documentation can be found on [CTAN](http://ctan.org/tex-archive/macros/latex/contrib/limecv/limecv.pdf). -Alternatively, the documentation can also be created by running `pdflatex limecv.dtx`. +Alternatively, the documentation can also be created by running `xelatex limecv.dtx`. ## Examples -To compile the examples in `/examples/`, install the package from CTAN or compile from source by running: `pdflatex limecv.ins` and copy the resulting `limecv.cls` file to the `/examples/` folder. +To compile the examples in `/examples/`, install the package from CTAN or compile from source by running: `xelatex limecv.ins` and copy the resulting `limecv.cls` file to the `/examples/` folder. ## Licence @@ -56,7 +42,7 @@ LPPL v1.3c See LICENSE file. Default profile picture courtesy of Twitter. -© 2017 Olivier Pieters +© 2017 - 2020 Olivier Pieters [blog]: https://olivierpieters.be/blog/archive/tag/limecv [FA]: http://fontawesome.io diff --git a/macros/latex/contrib/limecv/examples/mwe-latex.pdf b/macros/latex/contrib/limecv/examples/mwe-latex.pdf Binary files differindex 9f80f45414..5c713461d1 100644 --- a/macros/latex/contrib/limecv/examples/mwe-latex.pdf +++ b/macros/latex/contrib/limecv/examples/mwe-latex.pdf diff --git a/macros/latex/contrib/limecv/examples/mwe-lualatex.pdf b/macros/latex/contrib/limecv/examples/mwe-lualatex.pdf Binary files differindex 28d661bf7e..2c45a52ba2 100644 --- a/macros/latex/contrib/limecv/examples/mwe-lualatex.pdf +++ b/macros/latex/contrib/limecv/examples/mwe-lualatex.pdf diff --git a/macros/latex/contrib/limecv/examples/mwe-xelatex.pdf b/macros/latex/contrib/limecv/examples/mwe-xelatex.pdf Binary files differindex 2d339ef227..9f8a7415ea 100644 --- a/macros/latex/contrib/limecv/examples/mwe-xelatex.pdf +++ b/macros/latex/contrib/limecv/examples/mwe-xelatex.pdf diff --git a/macros/latex/contrib/limecv/examples/mwe-xelatex.tex b/macros/latex/contrib/limecv/examples/mwe-xelatex.tex index e390aecfd0..fcc52ec766 100644 --- a/macros/latex/contrib/limecv/examples/mwe-xelatex.tex +++ b/macros/latex/contrib/limecv/examples/mwe-xelatex.tex @@ -34,6 +34,7 @@ \begin{document} +\cvSetLanguage{german} % Design of side bar. \begin{cvSidebar} diff --git a/macros/latex/contrib/limecv/limecv.dtx b/macros/latex/contrib/limecv/limecv.dtx index b99d554e15..ade6d1febc 100644 --- a/macros/latex/contrib/limecv/limecv.dtx +++ b/macros/latex/contrib/limecv/limecv.dtx @@ -1,6 +1,6 @@ % \iffalse meta-comment % -% Copyright (C) 2017 by Olivier Pieters - me (at) olivierpieters (dot) be +% Copyright (C) 2017 - 2020 by Olivier Pieters % -------------------------------------------------------------------------- % This work may be distributed and/or modified under the % conditions of the LaTeX Project Public License, either version 1.3 @@ -15,7 +15,7 @@ % The Current Maintainer of this work is Olivier Pieters. % % This work consists of the files limecv.dtx and limecv.ins -% and the derived filebase limecv.sty. +% and the derived filebase limecv.cls. % % \fi % @@ -26,7 +26,7 @@ %<class>\NeedsTeXFormat{LaTeX2e}[1999/12/01] %<class>\ProvidesClass{limecv} %<*class> - [2017/09/12 v0.1.3 limecv Document class for CVs.] + [2020/02/08 v0.1.7 limecv Document class for CVs.] %</class> % %<*driver> @@ -36,6 +36,7 @@ \usepackage{hyperref} \usepackage{cleveref} \usepackage{xparse} +\usepackage[BoldFont,SlantFont]{xeCJK} \NewDocumentCommand{\cvRequirement}{m}{\textbf{#1}} @@ -68,7 +69,7 @@ %</driver> % \fi % -% \CheckSum{1525} +% \CheckSum{1630} % % \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 @@ -89,8 +90,13 @@ % % \changes{v0.1}{2017/09/12}{Initial version.} % \changes{v0.1.1}{2017/09/13}{Bug fixes and improved documentation.} -% \changes{v0.1.2}{2017/11/25}{Add internationalisation support. Support cover letters spanning multiple pages.} +% \changes{v0.1.2}{2017/11/25}{Add internationalisation support. Support cover % +% letters spanning multiple pages.} % \changes{v0.1.3}{2017/09/25}{Fix checksum issue.} +% \changes{v0.1.4}{2018/05/21}{Added support for Chinese.} +% \changes{v0.1.5}{2018/06/05}{Custom contact fields.} +% \changes{v0.1.6}{2018/06/17}{Added support for French.} +% \changes{v0.1.7}{2020/02/08}{Added support for Italian.} % % \DoNotIndex{\NewDocumentCommand,\NewDocumentEnvironment} % @@ -144,35 +150,40 @@ % \section{Requirements} % % It is advised to use the \cvRequirement{XeLaTeX} engine. However, there is -% also support for \cvRequirement{LaTeX} and \cvRequirement{LuaLaTeX}. In these -% cases, fonts might be different than intended and side bearings will not be -% corrected, since only the XeLaTeX engine has access to these. In the subsequent -% sections, it will always be assumed that the XeLaTeX compiler is used (unless -% noted otherwise). +% also support for \cvRequirement{LaTeX} and \cvRequirement{LuaLaTeX}. In +% these cases, fonts might be different than intended and side bearings will +% not be corrected, since only the XeLaTeX engine has access to these. In the +% subsequent sections, it will always be assumed that the XeLaTeX compiler is +% used (unless noted otherwise). % % Any font can be used, though by default the \cvRequirement{Fira} -% \footnote{\url{https://github.com/mozilla/Fira}} font is used. This should be -% installed and accessible by the typesetting system. If another font is desired, -% it can be overwritten using the |sansfont| document class options and -% |\cvMainFont| command. The mono spaced font can be changed by means of the -% |monofont| class option. +% \footnote{\url{https://github.com/mozilla/Fira}} font is used. This should +% be installed and accessible by the typesetting system. If another font is +% desired, it can be overwritten using the |sansfont| document class options +% and |\cvMainFont| command. The mono spaced font can be changed by means of +% the |monofont| class option. % -% \cvRequirement{FontAwesome}\footnote{\url{http://fontawesome.io}} is the icon -% font used. This font should also be available and cannot be replaced by another -% icon font. Most modern TeX distributions ship with this font since they provide -% the |fontawesome| package. +% \cvRequirement{FontAwesome}\footnote{\url{http://fontawesome.io}} is the +% icon font used. This font should also be available and cannot be replaced by +% another icon font. Most modern TeX distributions ship with this font since +% they provide the |fontawesome| package. % % \section{General Macros and Document Class Options} % -% \subsection{Internationalisation} -% \DescribeMacro{\cvSetLanguage} Currently, there is only internationalisation support for English and Dutch. The default language is English and can be modified using the |\cvSetLanguage| macro. Possible arguments are: |english| and |dutch|. If you want to use a different language, you need to modify the keys that hold the different section titles. These can be in the source code. The following snippet illustrates how this can be done for French: +% \DescribeMacro{\cvSetLanguage} The default language is English and can +% be modified using the |\cvSetLanguage| macro. Possible arguments are: +% |chinese|, |dutch|, |english|, |french|, |german|, |italian|. +% If your language is not supported or you want to override a word in any +% supported language, you can modify the keys that hold the different +% section titles. These can be in the source code. The following snippet +% illustrates how this can be done for French: % % \iffalse %<*example> % \fi \begin{lstlisting} \pgfkeys{/@cv/names/education = Formations} -\pgfkeys{/@cv/names/skills = Compétences} +\pgfkeys{/@cv/names/skills = Comp\'etences} \end{lstlisting} % \iffalse %</example> @@ -182,23 +193,25 @@ % \section{Sidebar} % % The sidebar should contain personal information such as your name, job title -% (or industry or similar), contact information, small bio, interests and language -% skills. Special environments and commands have been defined for each of these -% sections and will be described below. +% (or industry or similar), contact information, small bio, interests and +% language skills. Special environments and commands have been defined for +% each of these sections and will be described below. % -% Everything that should be inside the sidebar should be placed in the |cvSidebar| -% environment. This environment is placed on the left side of the page by default. -% If it should be typeset on the right side, use the starred version (|cvSidebar*|) +% Everything that should be inside the sidebar should be placed in the +% |cvSidebar| environment. This environment is placed on the left side of the +% page by default. If it should be typeset on the right side, use the starred +% version (|cvSidebar*|) % % The following environments are available inside the sidebar environment: % |cvProfile|, |cvContact|, |cvLanguages|, |cvInterests| and |cvProjects|. % % \DescribeMacro{\cvID} -% This command typesets a picture (in a circle) with name and position underneath it. -% The argument order is: |\cvID{|\meta{first name}|}{|\meta{last name}|}{| -% \meta{picture location}|}{|\meta{job position}|}|. Empty fields are allowed for -% the third and fourth arguments. No picture and no job position will then be -% typeset. Example code: +% This command typesets a picture (in a circle) with name and position +% underneath it. The argument order is: |\cvID{|\meta{first name}|}{|% +% \meta{last name}|}{| \meta{picture location}|}{|\meta{job position}|}|. +% Empty fields are allowed for the third and fourth arguments. No picture and +% no job position will then be typeset. Example code: +% % \iffalse %<*example> % \fi @@ -210,8 +223,8 @@ % \fi % % \DescribeMacro{cvProfile} -% This environment contains a brief profile description or biography. No additional -% arguments are allowed. Example code: +% This environment contains a brief profile description or biography. No +% additional arguments are allowed. Example code: % \iffalse %<*example> % \fi @@ -225,50 +238,61 @@ % \fi % % \DescribeMacro{cvContact} -% All the contact information goes here. Inside this environment, the following -% commands are available: +% All the contact information goes here. Inside this environment, the +% following commands are available: % \begin{itemize} -% \item \DescribeMacro{\cvContactAddress} |\cvContactAddress{|\meta{address}|}| -% typesets an address. How this address should be typeset exactly, is left to the -% user. The use of line breaks (|\\|) is allowed; +% \item \DescribeMacro{\cvContactAddress} |\cvContactAddress{| +% \meta{address}|}| typesets an address. How this address should be +% typeset exactly, is left to the user. The use of line breaks (|\\|) is +% allowed; % \item \DescribeMacro{\cvContactEmail} -% |\cvContactEmail{|\meta{link}|}{|\meta{email address}|}| typesets an email -% address. The link variable should be a something like |mailto:john@doe.tld|. -% Clicking on the email address will then automatically open the default email -% client with this address as recipient. If the link argument is left empty, no +% |\cvContactEmail{|\meta{link}|}{|\meta{email address}|}| typesets an +% email address. The link variable should be a something like +% |mailto:john@doe.tld|. Clicking on the email address will then +% automatically open the default email client with this address as +% recipient. If the link argument is left empty, no % link will be created. % \item \DescribeMacro{\cvContactPhone} -% |\cvContactPhone{|\meta{mobile phone number}|}| typesets a mobile phone number. +% |\cvContactPhone{|\meta{mobile phone number}|}| typesets a mobile phone +% number. % \item \DescribeMacro{\cvContactWebsite} -% |\cvContactWebsite{|\meta{link}|}{|\meta{website URL}|}| typesets a website. The -% link variable should be a something like |https://johndoe.tld|. Clicking on the -% website will then automatically open the default web browser. If the link argument -% is left empty, no action will be performed upon clicking on the website. +% |\cvContactWebsite{|\meta{link}|}{|\meta{website URL}|}| typesets a +% website. The link variable should be a something like +% |https://johndoe.tld|. Clicking on the website will then automatically +% open the default web browser. If the link argument is left empty, no +% action will be performed upon clicking on the website. % \item \DescribeMacro{\cvContactGithub} -% |\cvContactGithub{|\meta{link}|}{|\meta{username}|}| typesets a GitHub profile. -% The link variable should be a valid link to the GitHub profile (for example -% |https://github.com/johndoe|). Clicking on the username will then automatically -% open the default web browser. If the link argument is left empty, no action will -% be performed upon clicking on the website. +% |\cvContactGithub{|\meta{link}|}{|\meta{username}|}| typesets a GitHub +% profile. The link variable should be a valid link to the GitHub profile +% (for example |https://github.com/johndoe|). Clicking on the username +% will then automatically open the default web browser. If the link +% argument is left empty, no action will be performed upon clicking on the +% website. +% \item \DescribeMacro{\cvContactGitlab} +% |\cvContactGitlab{|\meta{link}|}{|\meta{username}|}| typesets a GitLab +% profile. Same considerations apply as in the |\cvContactGithub| command. % \item \DescribeMacro{\cvContactLinkedin} -% |\cvContactLinkedin{|\meta{link}|}{|\meta{username}|}| typesets a LinkedIn profile. -% The link variable should be a link to your LinkedIn profile homepage (for example -% |https://www.linkedin.com/in/johndoe/|). Clicking on the username will then -% automatically open the default web browser. If the link argument is left empty, -% no action will be performed upon clicking on the website. +% |\cvContactLinkedin{|\meta{link}|}{|\meta{username}|}| typesets a +% LinkedIn profile. The link variable should be a link to your LinkedIn +% profile homepage (for example |https://www.linkedin.com/in/johndoe/|). +% Clicking on the username will then automatically open the default web +% browser. If the link argument is left empty, no action will be performed +% upon clicking on the website. % \item \DescribeMacro{\cvContactTwitter} -% |\cvContactTwitter{|\meta{link}|}{|\meta{username}|}| typesets a Twitter profile. -% The link variable should direct to your Twitter profile. An example link looks as -% follows: |https://twitter.com/johndoe|. Clicking on the username will then -% automatically open the default web browser. If the link argument is left empty, -% no action will be performed upon clicking on the website.this address as recipient. -% If the link argument is left empty, no link will be created. +% |\cvContactTwitter{|\meta{link}|}{|\meta{username}|}| typesets a Twitter +% profile. The link variable should direct to your Twitter profile. An +% example link looks as follows: |https://twitter.com/johndoe|. Clicking +% on the username will then automatically open the default web browser. If +% the link argument is left empty, no action will be performed upon +% clicking on the website. If the link argument is left empty, no link +% will be created. % \item \DescribeMacro{\cvContactKeybase} -% |\cvContactKeybase{|\meta{link}|}{|\meta{fingerprint}|}| typesets a Keybase -% fingerprint (and account). The link variable should be a link to the KeyBase -% profile (e.g.\ |https://keybase.io/johndoe|). Clicking on the fingerprint will then -% automatically open the default web browser. If the link argument is left empty, no -% action will be performed upon clicking on the website. +% |\cvContactKeybase{|\meta{link}|}{|\meta{fingerprint}|}| typesets a +% Keybase fingerprint (and account). The link variable should be a link to +% the KeyBase profile (e.g.\ |https://keybase.io/johndoe|). Clicking on +% the fingerprint will then automatically open the default web browser. If +% the link argument is left empty, no action will be performed upon +% clicking on the website. % \end{itemize} % % A full example: @@ -291,16 +315,17 @@ %</example> % \fi % -% If you wish to add contact information that is not available by default, you can extend -% the command using two internal commands: |\cv@ContactTemplateLink| and -% |\cv@ContactTemplate|. See the source code for usage instructions. +% If you wish to add contact information that is not available by default, you +% can extend the command using two internal commands: +% |\cv@ContactTemplateLink| and |\cv@ContactTemplate|. See the source code for +% usage instructions. % % \DescribeMacro{cvLanguages} % This environment is used to showcase language skills. The -% \DescribeMacro{\cvLanguage} |\cvLanguage{|\meta{language}|}{|\meta{skill level}|}| -% should be used inside this environment. The skill level is a real value with a maximum -% value of 5. If higher values are used, the result will not be typeset properly. An -% example is included below. +% \DescribeMacro{\cvLanguage} |\cvLanguage{|\meta{language}|}{| +% \meta{skill level}|}| should be used inside this environment. The skill +% level is a real value with a maximum value of 5. If higher values are used, +% the result will not be typeset properly. An example is included below. % % \iffalse %<*example> @@ -317,16 +342,17 @@ % \fi % % \DescribeMacro{cvInterests} -% Typeset interests (can be both professional and personal) using |cvInterests|. -% By default it just typesets a list of items in the long format -% (|long|). The short format can be activated by passing the |short| option to the -% environment. Inside this environment, three commands can be used: |\cvInterestsPersonal|, -% |\cvInterestsProfessional| and |\cvInterest|. \DescribeMacro{\cvInterestsPersonal} -% |\cvInterestsPersonal| and \DescribeMacro{\cvInterestsProfessional} -% |\cvInterestsProfessional| add optional sections inside this environment to differentiate -% between personal and professional interests respectively. Both macros have no options nor -% arguments. The \DescribeMacro{\cvInterest} |\cvInterest{|\meta{icon}|}{|\meta{interest}|}| -% command takes an icon and interest as arguments. +% Typeset interests (can be both professional and personal) using +% |cvInterests|. By default it just typesets a list of items in the long +% format (|long|). The short format can be activated by passing the |short| +% option to the environment. Inside this environment, three commands can be +% used: |\cvInterestsPersonal|, |\cvInterestsProfessional| and |\cvInterest|. +% \DescribeMacro{\cvInterestsPersonal} |\cvInterestsPersonal| and +% \DescribeMacro{\cvInterestsProfessional} |\cvInterestsProfessional| add +% optional sections inside this environment to differentiate between personal +% and professional interests respectively. Both macros have no options nor +% arguments. The \DescribeMacro{\cvInterest} |\cvInterest{|\meta{icon}|}{| +% \meta{interest}|}| command takes an icon and interest as arguments. % % Examples that illustrate the different options are depicted below: % @@ -366,13 +392,14 @@ %</example> % \fi % -% \DescribeMacro{cvProjects} If you have interesting (side) projects that are relevant for -% your CV, you can list them using the |cvProjects| environment. Inside this environment -% you can use the \DescribeMacro{\cvProject} -% |\cvProject[|\meta{options}|]{|\meta{name}|}{|\meta{description}|}| macro to list all -% your projects. The only options currently allowed in \meta{options} are an image -% (using |image|) and a URL (using |link|). This image must be an external file and the user -% must handle its size through |width| or |height|. Example usage: +% \DescribeMacro{cvProjects} If you have interesting (side) projects that are +% relevant for your CV, you can list them using the |cvProjects| environment. +% Inside this environment you can use the \DescribeMacro{\cvProject} +% |\cvProject[|\meta{options}|]{|\meta{name}|}{|\meta{description}|}| +% macro to list all your projects. The only options currently allowed in +% \meta{options} are an image (using |image|) and a URL (using |link|). This +% image must be an external file and the user must handle its size through +% |width| or |height|. Example usage: % % \iffalse %<*example> @@ -387,40 +414,44 @@ %</example> % \fi % -% It is currently not possible to extend the sidebar with additional environments. To add -% your own, look at the source code and create your own \LaTeX-style hack. +% It is currently not possible to extend the sidebar with additional +% environments. To add your own, look at the source code and create your own +% \LaTeX-style hack. % % \section{Main Content} % -% The main content section includes details on your education, experience, skills, references -% and more. Several environments have been designed to suit specific needs. These will be -% discussed next. +% The main content section includes details on your education, experience, +% skills, references and more. Several environments have been designed to suit +% specific needs. These will be discussed next. % % \DescribeMacro{cvMainContent} -% Everything in the main content section should be encapsulated in the |cvMainContent| -% environment. This environment defines four new environments: |cvEducation|, -% |cvExperience|, |cvSkills| and |cvReferences|. These four environments are self -% explanatory in terms of functionality. We will detail each of these -% environments. +% Everything in the main content section should be encapsulated in the +% |cvMainContent| environment. This environment defines four new environments: +% |cvEducation|, |cvExperience|, |cvSkills| and |cvReferences|. These four +% environments are self explanatory in terms of functionality. We will detail +% each of these environments. % % Note that |cvMainContent| also has a starred variant (|cvMainContent*|). The -% function is similar to |cvSidebar*|, in the sense that it places everything to the -% left instead of the default right location. +% function is similar to |cvSidebar*|, in the sense that it places everything +% to the left instead of the default right location. % % \DescribeMacro{cvEducation} -% The education environment creates a timeline styled list of your education. Individual -% education items should be listed by means of the |\cvItem{|\meta{details}|}| macro which -% is available within this environment. Instead of forcing a specific layout structure, it -% was preferred to leave the actual mark-up to the end user. \emph{All} information -% concerning a single education should be passed to this single argument. However, the user -% is always welcome to create his own styling macro that takes multiple arguments. This is -% illustrated by the examples below. +% The education environment creates a timeline styled list of your education. +% Individual education items should be listed by means of the |\cvItem{| +% \meta{details}|}| macro which is available within this environment. Instead +% of forcing a specific layout structure, it was preferred to leave the actual +% mark-up to the end user. \emph{All} information concerning a single +% education should be passed to this single argument. However, the user is +% always welcome to create his own styling macro that takes multiple +% arguments. This is illustrated by the examples below. % % \iffalse %<*example> % \fi - \begin{lstlisting}[caption={\lstinline!cvEducation! \emph{without} special user mark-up - command.}] + \begin{lstlisting}[% + caption={\lstinline!cvEducation! \emph{without} special user mark-up + command.} + ] \begin{cvEducation} \cvItem{Evening class: Chinese\\ Some School, City. September 2015 -- June 2016\\ @@ -430,9 +461,9 @@ General training in the basic sciences and the molecular life science.} \cvItem{Master of Science in Biochemistry and Biotechnology\\ University, City. September 2012 -- June 2015\\ - Acquisition of insight into and knowledge of possibilities for application in the area - of biochemistry and biotechnology, specific with applications in biomedical application - and due problem-solving reasoning skills.} + Acquisition of insight into and knowledge of possibilities for application in + the area of biochemistry and biotechnology, specific with applications in + biomedical application and due problem-solving reasoning skills.} \end{cvEducation} \end{lstlisting} % \iffalse @@ -442,8 +473,10 @@ % \iffalse %<*example> % \fi - \begin{lstlisting}[caption={\lstinline!cvEducation! \emph{with} special user mark-up - command.}] + \begin{lstlisting}[% + caption={\lstinline!cvEducation! \emph{with} special user mark-up + command.} + ] % in preamble: \newfontfamily\firaMedium{Fira Sans Medium} \NewDocumentCommand{\cvEducation}{mmm}{{\firaMedium #1}\\ #2\\ \emph{#3}} @@ -454,12 +487,14 @@ {Achieved A2 language skill in Chinese (Mandarin).}} \cvItem{\cvEducation{Bachelor of Science in Biochemistry and Biotechnology}% {University, City. September 2009 -- June 2012}% - {General training in the basic sciences and the molecular life science.}} + {General training in the basic sciences and the molecular life + science.}} \cvItem{\cvEducation{Master of Science in Biochemistry and Biotechnology}% {University, City. September 2012 -- June 2015}% - {Acquisition of insight into and knowledge of possibilities for application - in the area of biochemistry and biotechnology, specific with applications - in biomedical application and due problem-solving reasoning skills.}} + {Acquisition of insight into and knowledge of possibilities for + application in the area of biochemistry and biotechnology, specific + with applications in biomedical application and due problem-solving + reasoning skills.}} \end{cvEducation} \end{lstlisting} % \iffalse @@ -467,33 +502,38 @@ % \fi % % \DescribeMacro{cvExperience} -% |cvExperience| works very similar to |cvEducation|. If follows the exact same structure -% and has the same design philosophy where you should use |\cvItem| inside this environment -% to typeset the individual items in a timeline style. \Cref{cvExperience} illustrates this with an example. +% |cvExperience| works very similar to |cvEducation|. If follows the exact +% same structure and has the same design philosophy where you should use +% |\cvItem| inside this environment to typeset the individual items in a +% timeline style. \Cref{cvExperience} illustrates this with an example. % % \iffalse %<*example> % \fi - \begin{lstlisting}[caption={\lstinline!cvExperience! code example.},label=cvExperience] + \begin{lstlisting}[% + caption={\lstinline!cvExperience! code example.}, + label=cvExperience + ] \begin{cvExperience} \cvItem{Student Job\\ \textsc{\selectfont Company X}, Location X. Summer 2010\\ - Integer tincidunt dapibus consectetur. Nullam tristique aliquam luctus. Sed ut ante velit. - Nulla pharetra maximus lacus at elementum. Suspendisse sodales consectetur metus, sit amet - ultricies ipsum ultrices ut.}; + Integer tincidunt dapibus consectetur. Nullam tristique aliquam luctus. Sed + ut ante velit. Nulla pharetra maximus lacus at elementum. Suspendisse + sodales consectetur metus, sit amet ultricies ipsum ultrices ut.}; \cvItem{Internship\\ \textsc{Company Y}, Location Y. June 2012 -- August 2012\\ - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi dictum cursus sapien, id - eleifend mi pellentesque id. Etiam lobortis eu odio a sodales. Phasellus ut dolor feugiat, - lacinia lectus in, blandit metus. Fusce lacinia dolor et metus gravida pulvinar sit amet - et ex.}; + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi dictum cursus + sapien, id eleifend mi pellentesque id. Etiam lobortis eu odio a sodales. + Phasellus ut dolor feugiat, lacinia lectus in, blandit metus. Fusce lacinia + dolor et metus gravida pulvinar sit amet et ex.}; \cvItem{Internship\\ \textsc{Company Z}, Location Z. August 2014 -- September 2014\\ - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi dictum cursus sapien, id - eleifend mi pellentesque id. Etiam lobortis eu odio a sodales. Phasellus ut dolor feugiat, - lacinia lectus in, blandit metus. Fusce lacinia dolor et metus gravida pulvinar sit amet - et ex. Suspendisse vestibulum, leo malesuada molestie maximus, sem risus ornare elit, vitae - sodales felis elit in ipsum.}; + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi dictum cursus + sapien, id eleifend mi pellentesque id. Etiam lobortis eu odio a sodales. + Phasellus ut dolor feugiat, lacinia lectus in, blandit metus. Fusce lacinia + dolor et metus gravida pulvinar sit amet et ex. Suspendisse vestibulum, leo + malesuada molestie maximus, sem risus ornare elit, vitae sodales felis + elit in ipsum.}; \end{cvExperience} \end{lstlisting} % \iffalse @@ -501,18 +541,23 @@ % \fi % % \DescribeMacro{cvSkills} -% The skills section is contained within the |cvSkills| environment. This environment typesets -% your skills on a 5-level (discrete) scale. These are divided into two columns. To that end, -% two macros are available: |cvSkillOne| and |cvSkillTwo|. \DescribeMacro{cvSkillTwo} -% |cvSkillTwo{|\meta{skill level}|}{|\meta{skill}|}{|\meta{skill level}|}{|\meta{skill}|}| -% typesets a row of two skills. If you have an odd number of items, \DescribeMacro{cvSkillOne} -% |cvSkillOne{|\meta{skill level}|}{|\meta{skill}|}| should be used. An example of a skill-list -% can be found in \cref{cvSkills}. +% The skills section is contained within the |cvSkills| environment. This +% environment typesets your skills on a 5-level (discrete) scale. These are +% divided into two columns. To that end, two macros are available: +% |cvSkillOne| and |cvSkillTwo|. \DescribeMacro{cvSkillTwo} |cvSkillTwo{| +% \meta{skill level}|}{|\meta{skill}|}{|\meta{skill level}|}{|\meta{skill}|}| +% typesets a row of two skills. If you have an odd number of items, +% \DescribeMacro{cvSkillOne} |cvSkillOne{|\meta{skill level}|}{| +% \meta{skill}|}| should be used. An example of a skill-list can be found in +% \cref{cvSkills}. % % \iffalse %<*example> % \fi - \begin{lstlisting}[caption={Illustration of the \lstinline!cvSkills! environment.},label=cvSkills] + \begin{lstlisting}[% + caption={Illustration of the \lstinline!cvSkills! environment.}, + label=cvSkills + ] \begin{cvSkills} \cvSkillTwo{5}{MATLAB}{5}{\LaTeX} \cvSkillTwo{4}{Python}{4}{VHDL} @@ -525,24 +570,28 @@ % \fi % % \DescribeMacro{cvReferences} -% The final section is intended to list all your references. These go inside the |cvReferences| -% environment. The enumeration of the different items should be done using the -% \DescribeMacro{\cvAddReference} |\cvAddReference{|\meta{information}|}| macro. The following -% keys are available: |name|, |company|, |job|, |address line 1|, |address line 2|, -% |address line 3|, |mobile phone|, |work phone| and |email|. These are all optional arguments -% and will be typeset consistently between the two references per row. When adding two references, -% the left one should be specified first using |\cvAddReference*|. This will store the values and -% typeset them when adding the second reference through |\cvAddReference|. Note that -% |\cvAddReference| should be used if only one reference needs to be typese. \Cref{cvReferences} +% The final section is intended to list all your references. These go inside +% the |cvReferences| environment. The enumeration of the different items +% should be done using the \DescribeMacro{\cvAddReference} |\cvAddReference{| +% \meta{information}|}| macro. The following keys are available: |name|, +% |company|, |job|, |address line 1|, |address line 2|, |address line 3|, +% |mobile phone|, |work phone| and |email|. These are all optional arguments +% and will be typeset consistently between the two references per row. When +% adding two references, the left one should be specified first using +% |\cvAddReference*|. This will store the values and typeset them when adding +% the second reference through |\cvAddReference|. Note that |\cvAddReference| +% should be used if only one reference needs to be typese. \Cref{cvReferences} % illustrates the usage of this environment. % -% \emph{Important remark}: the comment after the usage of |\cvAddReference| is required! -% Otherwise, spacing will not be as intended. +% \emph{Important remark}: the comment after the usage of |\cvAddReference| is +% required! Otherwise, spacing will not be as intended. % % \iffalse %<*example> % \fi - \begin{lstlisting}[caption={\lstinline!cvReferences! code example.},label=cvReferences] + \begin{lstlisting}[% + caption={\lstinline!cvReferences! code example.}, + label=cvReferences] \begin{cvReferences} \cvAddReference{% name=Jane Smith, @@ -559,19 +608,21 @@ % % \section{Cover Letter} % -% A final (optional) part of a CV is the cover letter. This is a fairly simple part to create -% design wise, but probably the hardest to write in an actual CV. +% A final (optional) part of a CV is the cover letter. This is a fairly simple +% part to create design wise, but probably the hardest to write in an actual +% CV. % % \DescribeMacro{cvCoverLetter} -% The cover letter environment is |cvCoverLetter| and contains all the cover letter details. -% It will automatically add a header with your name and position based on the information -% filled in in |\cvID|. +% The cover letter environment is |cvCoverLetter| and contains all the cover +% letter details. It will automatically add a header with your name and +% position based on the information filled in in |\cvID|. % % \DescribeMacro{\cvBeneficiary} -% The |\cvBeneficiary{|\meta{options}|}| macro offers a convenience wrapper to typeset the -% beneficiary. Possible options are |name|, |position|, |company|, |address line 1|, -% |address line 2| and |address line 3|. The remainder of the cover letter design is up -% to the user. An example design can be found in \cref{cvCoverLetter}. +% The |\cvBeneficiary{|\meta{options}|}| macro offers a convenience wrapper to +% typeset the beneficiary. Possible options are |name|, |position|, |company|, +% |address line 1|, |address line 2| and |address line 3|. The remainder of +% the cover letter design is up to the user. An example design can be found in +% \cref{cvCoverLetter}. % % \DescribeMacro{\cvFullName} % |\cvFullName| typeset the authors name based on the data provided in |cvID|. @@ -579,7 +630,9 @@ % \iffalse %<*example> % \fi - \begin{lstlisting}[caption={\lstinline!cvCoverLetter! code example.},label=cvCoverLetter] + \begin{lstlisting}[% + caption={\lstinline!cvCoverLetter! code example.}, + label=cvCoverLetter] \section{Cover Letter} \begin{cvCoverLetter} @@ -607,18 +660,19 @@ Dear Miss.\ Smith % % \section{Change Style and Layout} % -% To change the style, one can redefine the colours, lengths and TikZ styles used throughout -% the document class. +% To change the style, one can redefine the colours, lengths and TikZ styles +% used throughout the document class. % % By default the following colours are defined: % \begin{itemize} -% \item |cvGreen| default dark green colour (hex value: {\color{cvGreen} |357F2D|}) -% \item |cvGreenLight| light green colour, for larger shapes and backgrounds (hex value: -% {\color{cvGreenLight} |B8E4B3|}) +% \item |cvGreen| default dark green colour (hex value: {\color{cvGreen} +% |357F2D|}) +% \item |cvGreenLight| light green colour, for larger shapes and backgrounds +% (hex value: {\color{cvGreenLight} |B8E4B3|}) % \item |cvDark| default text colour (hex value: {\color{cvDark} |2F3142|}) % \item |cvRed| currently not used (hex value: {\color{cvRed} |7F2D35|}) -% \item |cvAccent| lighter grey shade for accented text (hex value: {\color{cvAccent} -% |474A65|}) +% \item |cvAccent| lighter grey shade for accented text (hex value: +% {\color{cvAccent} |474A65|}) % \end{itemize} % % To change these, use the code from \cref{cvColour} in the preamble: @@ -633,8 +687,8 @@ Dear Miss.\ Smith %</example> % \fi % -% By overwriting the following styles, one can change the appearance of multiple TikZ nodes. -% The following styles are available. +% By overwriting the following styles, one can change the appearance of +% multiple TikZ nodes. The following styles are available. % \begin{itemize} % \item |interesticon| % \item |interesttext| @@ -668,8 +722,8 @@ Dear Miss.\ Smith %</example> % \fi -% Spacing used inside the document can also be modified by the user. The following -% lengths have been defined: +% Spacing used inside the document can also be modified by the user. The +% following lengths have been defined: % \begin{itemize} % \item |\cvColSep| Distance between columns of |cvSkills|. % Default value: |1cm|. @@ -689,72 +743,82 @@ Dear Miss.\ Smith % Default value: |0.3cm|. % \item |\cvItemSep| Distance between |cvItem| entries. % Default value: |0.4cm|. -% \item |\cvTableSepWidth| Distance between two columns of |cvReferences| environment. -% Default value: |0.3cm|. -% \item |\cvCoverLetterHeight| Height of the coloured bar at the top of the cover letter. -% Default value: |\cvSideWidth|. -% \item |\cvCoverLetterWidth| Width of the cover letter text. This can be used to improve -% to layout. Default value: |\cvMainWidth+3\cvMargin|. +% \item |\cvTableSepWidth| Distance between two columns of |cvReferences| +% environment. Default value: |0.3cm|. +% \item |\cvCoverLetterHeight| Height of the coloured bar at the top of the +% cover letter. Default value: |\cvSideWidth|. +% \item |\cvCoverLetterWidth| Width of the cover letter text. This can be used +% to improve the layout. Default value: |\cvMainWidth+3\cvMargin|. % \item |\cvPictureWidth| Diameter of the profile picture. % Default value: |4cm|. -% \item |\cvProgressAreaWidth| Length of a progress bar for the languages section. -% Default value: |5em|. -% \item |\cvProgressAreaHeight| Height of a progress bar for the languages section. -% Default value: |0.75em|. +% \item |\cvProgressAreaWidth| Length of a progress bar for the languages +% section. Default value: |5em|. +% \item |\cvProgressAreaHeight| Height of a progress bar for the languages +% section. Default value: |0.75em|. % \item |\cvSectionSep| Distance between sections of the main content section. % Default value: |0.6cm|. % \item |\cvSectionSBSep| Distance between sections of the sidebar section. % Default value: |4pt|. % \item |\cvTitleLineWidth| Line width of horizontal line below section title. % Default value: |2pt|. -% \item |\cvTitleLineSpacing| Distance from bottom of the titles of the main content section to -% the horizontal centre of line. Default value: |0.1cm|. +% \item |\cvTitleLineSpacing| Distance from bottom of the titles of the main +% content section to the horizontal centre of line. Default value: |0.1cm|. % \item |\cv@projectSep| Internal length. % Automatically set to |\cvItemSep|. -% \item |\cvProjectDetailsSep| Internal spacing between details of a single project. -% Default value: |0.2cm|. -% \item |\cvInterestDetailsSep| Distance between items in case the |long| options is used for the -% |cvInterests| environment. Default value: |4pt|. -% \item |\cvContactItemSep| Distance between items in the |cvContact| environment. -% Default value: |5pt|. +% \item |\cvProjectDetailsSep| Internal spacing between details of a single +% project. Default value: |0.2cm|. +% \item |\cvInterestDetailsSep| Distance between items in case the |long| +% options is used for the |cvInterests| environment. Default value: |4pt|. +% \item |\cvContactItemSep| Distance between items in the |cvContact| +% environment. Default value: |5pt|. % \item |\cvCoverLetterLineWidth| Line width of line below cover letter name. % Default value: |3pt|. -% \item |\cvCoverLetterPositionSpacing| Distance between name and position in the cover letter. -% Default value: |10pt|. -% \item |\cvSBSectionLineWidth| Line width of left and right lines next to the titles of in the -% sidebar. Default value: |1pt|. -% \item |\cvCoverLetterLineSpacing| Distance between name and line below it in the cover letter. -% Default value: |0pt|. +% \item |\cvCoverLetterPositionSpacing| Distance between name and position in +% the cover letter. Default value: |10pt|. +% \item |\cvSBSectionLineWidth| Line width of left and right lines next to the +% titles of in the sidebar. Default value: |1pt|. +% \item |\cvCoverLetterLineSpacing| Distance between name and line below it in +% the cover letter. Default value: |0pt|. % \item |\cvIDNameSep| Distance between first and last name. % Default value: |0.1cm|. % \item |\cvPositionSep| Distance before and after the position. % Default value: |0.5cm|. % \item |\cvSkillSep| Distance between skills. % Default value: |1ex|. -% \item |\cvHeaderIconWidth| Automatically set, currently has no visible effect on document. -% Default value: |0pt|. +% \item |\cvHeaderIconWidth| Automatically set, currently has no visible +% effect on document. Default value: |0pt|. % \end{itemize} % -% The fonts can also be changed, either by using the |sansfont| and |monofont| class options, or -% by using the default ways provided by \LaTeX, XeLaTeX and LuaLaTeX. Note that the |fontspec| -% package is already loaded by the class, so you can directly use |\setmainfont| in the preamble -% if you are using the XeLaTeX or LuaLaTeX engine. +% The fonts can also be changed, either by using the |sansfont| and |monofont| +% class options, or by using the default ways provided by \LaTeX, XeLaTeX and +% LuaLaTeX. Note that the |fontspec| package is already loaded by the class, so +% you can directly use |\setmainfont| in the preamble if you are using the +% XeLaTeX or LuaLaTeX engine. % % \section{Example} % -% The source code of a typical CV document can be found in the examples folder. -% \Cref{example-cv,example-cover-letter} depict the resulting PDF documents. +% The source code of a typical CV document can be found in the examples +% folder. \Cref{example-cv,example-cover-letter} depict the resulting PDF +% documents. % % \begin{figure}[!ht] -% \IfFileExists{./mwe-xelatex.pdf}{\includegraphics[width=\textwidth,page=1]% -% {mwe-xelatex.pdf}}{No built examples found. Figure not included.} +% \IfFileExists{./mwe-xelatex.pdf}{% +% \includegraphics[ +% width=\textwidth, +% page=1]% +% {mwe-xelatex.pdf}}% +% {No built examples found. Figure not included.} % \caption{Example CV (scaled).} % \label{example-cv} % \end{figure} % % \begin{figure}[!ht] -% \IfFileExists{./mwe-xelatex.pdf}{\includegraphics[width=\textwidth,page=2]% -% {mwe-xelatex.pdf}}{No built examples found.} +% \IfFileExists{./mwe-xelatex.pdf}{% +% \includegraphics[ +% width=\textwidth, +% page=2]% +% {mwe-xelatex.pdf}}% +% {No built examples found.} % \caption{Example cover letter (scaled). Figure not included.} % \label{example-cover-letter} % \end{figure} @@ -766,6 +830,8 @@ Dear Miss.\ Smith % \iffalse %<*class> % \fi +% +% \subsection{Licence} % % limecv.cls % @@ -787,34 +853,58 @@ Dear Miss.\ Smith % The Current Maintainer of this work is Olivier Pieters. % Contact the maintainer at: me (at) olivierpieters (dot) be. % -%------------------------------------------------------ -% -% Include minimal required packages +% \subsection{Intro} +% I have tried to create a logical structure for the source code such that +% related commands are grouped into a signle section. However, this was not +% always possible. +% +% \subsection{Package Info and Required Packages} +% Before starting the actual implementation, we first load all required +% packages and set their options. % -% process key-value class options +% Process key-value class options using |kvoptions|: % \begin{macrocode} \RequirePackage{kvoptions} % \end{macrocode} -%------------------------------------------------------ % -% Process options of this class. +% Define and process class options. |print| is an (unimplemened) option that +% should optimise the layout for printed CVs. % % \begin{macrocode} \DeclareBoolOption[false]{print} +% \end{macrocode} +% +% Since the package already attempts to load the |fontspec| package, it is no +% longer possible to define a custom font path. This is again passible using +% this class option. Other options can also be set this way. However, if +% multiple arguments are desirale, use |\cvComma| to separate between them, +% since the class cannot differentiate between its own options and those it +% need to pass to |fontspec|. +% +% \begin{macrocode} \newif\ifcv@fontPath \cv@fontPathfalse \DeclareStringOption{path} \AddToKeyvalOption*{path}{\cv@fontPathtrue} +% \end{macrocode} +% +% By default, Fira fonts are used. This can be modifed using |sansfont| and +% |monofont|. +% +% \begin{macrocode} \DeclareStringOption[Fira Sans]{sansfont} \DeclareStringOption[Fira Mono]{monofont} +% \end{macrocode} +% +% Process the options. +% +% \begin{macrocode} \ProcessKeyvalOptions* % \end{macrocode} -%------------------------------------------------------ % -% Process general class options +% The article document class is used as a base template for this +% class. Options are automatically passed to the article class via this way. % -% pass document options to article class, which forms -% base of this document class % \begin{macrocode} \DeclareOption*{% \PassOptionsToClass{\CurrentOption}{article}% @@ -822,54 +912,55 @@ Dear Miss.\ Smith \ProcessOptions\relax \LoadClass{article} % \end{macrocode} -%------------------------------------------------------ % -% Include required packages +% Include required packages. A short description is provided about the function +% of each package. % -% check if XeTeX is used +% Check if XeTeX is used. % \begin{macrocode} \RequirePackage{ifxetex} % \end{macrocode} -% check if LuaTeX is used +% Check if LuaTeX is used. % \begin{macrocode} \RequirePackage{ifluatex} % \end{macrocode} -% Advanced command definitions +% Advanced command definitions. % \begin{macrocode} \RequirePackage{xparse} % \end{macrocode} -% complex length calculations +% Complex length calculations. % \begin{macrocode} \RequirePackage{calc} % \end{macrocode} -% colour options +% Colour options. % \begin{macrocode} \RequirePackage{xcolor} % \end{macrocode} -% advanced table options +% Advanced table options. % \begin{macrocode} \RequirePackage{tabularx} % \end{macrocode} -% links +% Links. % \begin{macrocode} \RequirePackage{hyperref} \RequirePackage{url} % \end{macrocode} -% remove paragraph indent +% Remove paragraph indents. % \begin{macrocode} \RequirePackage{parskip} % \end{macrocode} -% string operations +% String operations. % \begin{macrocode} \RequirePackage{xstring} % \end{macrocode} -% key-value parsing within document +% Key-value parsing within document. % \begin{macrocode} \RequirePackage{xkeyval} % \end{macrocode} -%------------------------------------------------------ +% +% \subsection{Colour Definitions} % -% Define colours +% Define the custom colours used in this document. % % \begin{macrocode} \definecolor{cvGreen}{HTML}{357F2D} @@ -878,7 +969,8 @@ Dear Miss.\ Smith \definecolor{cvDark}{HTML}{2F3142} \definecolor{cvAccent}{HTML}{474A65} % \end{macrocode} -%------------------------------------------------------ +% +% \subsection{New Column Types} % % Define new table column types with fixed width. % @@ -890,18 +982,23 @@ Dear Miss.\ Smith \newcolumntype{R}[1]{>{\raggedleft\let\newline\\% \arraybackslash\hspace{0pt}}m{#1}} % \end{macrocode} -%------------------------------------------------------ % -% Misc and helper commands +% \subsection{Helper commands} % -% Add comma in a cvReference entry. +% |\cvComma| escapes the parsing once and ca be useful to add a comma to the key +% of a key-value structure. +% +% \begin{macro}{\cvComma} % \begin{macrocode} \NewDocumentCommand{\cvComma}{}{,} % \end{macrocode} -% Define check if argument is empty -% argument order: |{argument}{if empty}{if not empty}| +% \end{macro} +% +% \begin{macro}{\@IfNoValueOrEmptyTF} +% |\@IfNoValueOrEmptyTF{argument}{if empty}{if not empty}| +% checks if an argument is empty. % -% Based on: http://tex.stackexchange.com/questions/63223 +% Based on: \url{http://tex.stackexchange.com/questions/63223}. % % \begin{macrocode} \ExplSyntaxOn @@ -912,10 +1009,14 @@ Dear Miss.\ Smith } \ExplSyntaxOff % \end{macrocode} +% \end{macro} % % \begin{macro}{\ifnodedefined} -% Check if node is defined. -% Based on: https://tex.stackexchange.com/questions/37709 +% +% Checks if node is defined. +% +% Based on: \url{https://tex.stackexchange.com/questions/37709} +% % \begin{macrocode} \long\def\ifnodedefined#1#2#3{% \@ifundefined{pgf@sh@ns@#1}{#3}{#2}% @@ -923,23 +1024,42 @@ Dear Miss.\ Smith % \end{macrocode} % \end{macro} % -%------------------------------------------------------ +% \subsection{Global Font Colour} % -% Update global font colour +% \begin{macro}{\globalcolor} +% Update global font colour. % % \begin{macrocode} \NewDocumentCommand{\globalcolor}{m}{% \color{#1}\global\let\default@color\current@color } +% \end{macrocode} +% \end{macro} +% +% Automatically set font colour. +% +% \begin{macrocode} \AtBeginDocument{\globalcolor{cvDark}} % \end{macrocode} -%------------------------------------------------------ % -% TikZ +% +% \subsection{TikZ Style Definitions} +% TikZ is a very imporant package and forms the main reason this CV can have +% the look that it does now. % % \begin{macrocode} \RequirePackage{tikz} +% \end{macrocode} +% +% Needed to load the cover letter image in the sidebar. + +% \begin{macrocode} \RequirePackage{graphicx} +% \end{macrocode} +% +% A lot of additional TikZ libraries are also needed: +% +% \begin{macrocode} \usetikzlibrary{% calc, positioning, @@ -947,6 +1067,14 @@ Dear Miss.\ Smith arrows.meta, backgrounds, matrix} +% \end{macrocode} +% +% Define all TikZ styles that are used throughout this document. All styles come +% in pairs: one that the user can overwrite and one that is internally defined +% and results into the default behaviour. Userdefined behaviour is always +% included last, such that it can overwrite the default behaviour. +% +% \begin{macrocode} \tikzset{ interesticon/.style = {}, interesttext/.style = {}, @@ -963,8 +1091,6 @@ Dear Miss.\ Smith progressBar/.style={}, sectionTitle/.style={}, sectionEduText/.style={% - eventdottext, - anchor=north west }, cv@interesticon/.style = {% minimum width=\cvHeaderIconWidth, @@ -1038,20 +1164,33 @@ Dear Miss.\ Smith }, } % \end{macrocode} -%------------------------------------------------------ % -% XeLaTeX/LuaLaTeX specific +% \subsection{XeLaTeX/LuaLaTeX Specific Code} +% The initial design features the Fira font and thus requires the |fontspec| +% package. However, if the |pdflatex| compiler is used, it should still +% compile. This is done in this part of the code. If needed, the relevant +% packages are loaded and the options are set. % +% \begin{macro}{\cv@loadFonts} % \begin{macrocode} \NewDocumentCommand{\cv@loadFonts}{}{ \RequirePackage{fontspec} \RequirePackage{fontawesome} % \end{macrocode} -% set fonts +% +% Load the fonts. By default Fira will be loaded, but this can be overwritten +% by the user. +% % \begin{macrocode} \setmainfont[Numbers={Monospaced}]{\limecv@sansfont} \setsansfont{\limecv@sansfont} \setmonofont{\limecv@monofont} +% \end{macrocode} +% +% Sometimes fonts are not located in their default location, if this option is +% passed, additional paths will be traversed. +% +% \begin{macrocode} \ifcv@fontPath \newfontfamily{\cv@FA}[Path=\limecv@path]% {FontAwesome} @@ -1059,20 +1198,42 @@ Dear Miss.\ Smith \newfontfamily{\cv@FA}{FontAwesome} \fi % \end{macrocode} -% define some missing icons +% +% The |fontawesome| package does not feature all of the latest icons available, +% so we define some of the manually since they are relevant for this CV. +% +% \begin{macro}{\faAddressCard} % \begin{macrocode} \ProvideDocumentCommand{\faAddressCard}{}{{\cv@FA% \symbol{"F2B9}}} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\faVcard} +% \begin{macrocode} \ProvideDocumentCommand{\faVcard}{}{{\cv@FA% \symbol{"F2BB}}} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\faMicrochip} +% \begin{macrocode} \ProvideDocumentCommand{\faMicrochip}{}{{\cv@FA% \symbol{"F2DB}}} % \end{macrocode} -% future possibility: -% https://raw.githubusercontent.com/xdanaux/moderncv/ -% master/moderncviconsmarvosym.sty +% \end{macro} +% +% In the future, the |fontawesome| dependency can be dropped if a manually coded +% icon is included, such as those defined in monderncv. Example: +% \url{https://raw.githubusercontent.com/xdanaux/moderncv/% +% master/moderncviconsmarvosym.sty} % \begin{macrocode} } +% \end{macrocode} +% \end{macro} +% +% Execute the above defined command if relevant. In the case of |pdflatex|, the +% default font is set to a sans serif font. +% +% \begin{macrocode} \ifxetex \cv@loadFonts \else @@ -1084,38 +1245,63 @@ Dear Miss.\ Smith \fi \fi % \end{macrocode} -%------------------------------------------------------ -% -% XeLaTeX/LuaLaTeX specific +% +% If the XeLaTeX compiler is used and the font is compatible, it is possible to +% remove the side bearing of certain characters. This is advantageous for +% alignment of certain characters. However, in the case a non-compatible +% compiler is used, these commands do not poerform anything. % -% Removes left/right side bearing of character -% -% Based on: -% https://tex.stackexchange.com/questions/274479 -% https://tex.stackexchange.com/questions/34563 +% The code below is based on: +% \url{https://tex.stackexchange.com/questions/274479} and +% \url{https://tex.stackexchange.com/questions/34563} % % \begin{macrocode} \ifxetex +% \end{macrocode} +% \begin{macro}{\kright} +% \begin{macrocode} \NewDocumentCommand{\kright}{m}{\leavevmode #1% \kern-\XeTeXglyphbounds3 \the\XeTeXcharglyph`#1 } +% \end{macro} +% \begin{macro}{\kleft} +% \begin{macrocode} \NewDocumentCommand{\kleft}{m}{\leavevmode % \kern-\XeTeXglyphbounds1 \the\XeTeXcharglyph`#1 #1} +% \end{macrocode} +% \end{macro} +% \begin{macrocode} \else +% \end{macrocode} +% \begin{macro}{\kright} +% \begin{macrocode} \NewDocumentCommand{\kright}{m}{#1} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\kleft} +% \begin{macrocode} \NewDocumentCommand{\kleft}{m}{#1} +% \end{macrocode} +% \end{macro} +% \begin{macrocode} \fi % \end{macrocode} +% % Extracts n-th charcter from a string % Argument order: string - character number % \begin{macrocode} \ExplSyntaxOn \cs_generate_variant:Nn\tl_item:nn {f} +% \end{macrocode} +% \begin{macro}{\extract} +% \begin{macrocode} \DeclareExpandableDocumentCommand{\extract}{mm}{% \tl_item:fn{#1}{#2}% } +% \end{macrocode} +% \end{macro} +% \begin{macrocode} \ExplSyntaxOff % \end{macrocode} -%------------------------------------------------------ % % Page layout % @@ -1263,7 +1449,8 @@ Dear Miss.\ Smith % \begin{macrocode} \NewDocumentCommand{\cv@Title}{mm}{% \ifnodedefined{cv@last item \the\value{cv@lastItem}}{% - \setlength\cvHeaderIconWidth{\maxof{\cvHeaderIconWidth}{\widthof{\Large #2}}}% + \setlength\cvHeaderIconWidth{% + \maxof{\cvHeaderIconWidth}{\widthof{\Large #2}}}% \protected@write\@auxout{}{\global\cvHeaderIconWidth=\the\cvHeaderIconWidth} \node[% below=\cvSectionSep of cv@last item % @@ -1406,6 +1593,7 @@ Dear Miss.\ Smith \pgfkeys{/@cv/names/experience = Experience}% \pgfkeys{/@cv/names/references = References}% \pgfkeys{/@cv/names/skills = Skills}% + \pgfkeys{/@cv/names/publications = Publications}% } % \end{macrocode} % @@ -1423,10 +1611,88 @@ Dear Miss.\ Smith \pgfkeys{/@cv/names/experience = Werkervaring}% \pgfkeys{/@cv/names/references = Referenties}% \pgfkeys{/@cv/names/skills = Vaardigheden}% + \pgfkeys{/@cv/names/publications = Publicaties}% +} +% \end{macrocode} +% +% +% Set all title names to Chinese (Mandarin): +% \begin{macrocode} +\NewDocumentCommand{\cv@setChinese}{}{ + \pgfkeys{/@cv/names/profile = 关于我}% + \pgfkeys{/@cv/names/contact = 联系我}% + \pgfkeys{/@cv/names/languages = 语言能力}% + \pgfkeys{/@cv/names/interests = 兴趣爱好}% + \pgfkeys{/@cv/names/professional = Professional}% + \pgfkeys{/@cv/names/personal = Personal}% + \pgfkeys{/@cv/names/projects = 我的项目}% + \pgfkeys{/@cv/names/education = 教育背景}% + \pgfkeys{/@cv/names/experience = 工作经验}% + \pgfkeys{/@cv/names/references = References}% + \pgfkeys{/@cv/names/skills = IT技能}% + \pgfkeys{/@cv/names/publications = 出版作品}% } % \end{macrocode} % -% Set the actual language to English. This can be overwritten by the user in the preamble +% +% Set all title names to French: +% \begin{macrocode} +\NewDocumentCommand{\cv@setFrench}{}{ + \pgfkeys{/@cv/names/profile = Profil}% + \pgfkeys{/@cv/names/contact = Contact}% + \pgfkeys{/@cv/names/languages = Langues}% + \pgfkeys{/@cv/names/interests = Centres d'int\'{e}r\^{e}t}% + \pgfkeys{/@cv/names/professional = Professionel}% + \pgfkeys{/@cv/names/personal = Personnel}% + \pgfkeys{/@cv/names/projects = Projets}% + \pgfkeys{/@cv/names/education = Education}% + \pgfkeys{/@cv/names/experience = Exp\'{e}riences}% + \pgfkeys{/@cv/names/references = R\'{e}f\'{e}rences}% + \pgfkeys{/@cv/names/skills = Comp\'{e}tences}% +} +% \end{macrocode} +% +% +% Set all title names to German: +% \begin{macrocode} +\NewDocumentCommand{\cv@setGerman}{}{ + \pgfkeys{/@cv/names/profile = Profil}% + \pgfkeys{/@cv/names/contact = Kontakt}% + \pgfkeys{/@cv/names/languages = Sprachen}% + \pgfkeys{/@cv/names/interests = Interessen}% + \pgfkeys{/@cv/names/professional = Beruflich}% + \pgfkeys{/@cv/names/personal = Persönlich}% + \pgfkeys{/@cv/names/projects = Projekte}% + \pgfkeys{/@cv/names/education = Ausbildung}% + \pgfkeys{/@cv/names/experience = Berufliche Erfahrung}% + \pgfkeys{/@cv/names/references = Referenzen}% + \pgfkeys{/@cv/names/skills = Kenntnisse}% + \pgfkeys{/@cv/names/publications = Veröffentlichungen}% +} +% \end{macrocode} +% +% +% Set all title names to Italian: +% \begin{macrocode} +\NewDocumentCommand{\cv@setItalian}{}{ + \pgfkeys{/@cv/names/profile = Profilo}% + \pgfkeys{/@cv/names/contact = Contatti}% + \pgfkeys{/@cv/names/languages = Lingue}% + \pgfkeys{/@cv/names/interests = Interessi}% + \pgfkeys{/@cv/names/professional = Professionali}% + \pgfkeys{/@cv/names/personal = Personali}% + \pgfkeys{/@cv/names/projects = Progetti}% + \pgfkeys{/@cv/names/education = Formazione}% + \pgfkeys{/@cv/names/experience = Esperienze lavorative}% + \pgfkeys{/@cv/names/references = Referenze}% + \pgfkeys{/@cv/names/skills = Competenze}% + \pgfkeys{/@cv/names/publications = Pubblicazioni}% +} +% \end{macrocode} +% +% +% Set the actual language to English. This can be overwritten by the user in the +% preamble % % Define the command to change the language % \begin{macrocode} @@ -1436,10 +1702,17 @@ Dear Miss.\ Smith { {dutch} {\cv@setDutch} {english} {\cv@setEnglish} + {french} {\cv@setFrench} + {german} {\cv@setGerman} + {italian} {\cv@setItalian} + {chinese} {% + \usepackage[BoldFont,SlantFont]{xeCJK}% + \cv@setChinese% + } } {\ClassError{limecv}{Unknown option `#1' for cvLanguage % - macro.}{Only `english' and `dutch' are valid options % - for this macro.}} + macro.}{Only `english', `chinese`, `dutch`, `french`, `german` % + and `italian` are valid options for this macro.}} } \ExplSyntaxOff \cvSetLanguage{english} @@ -1581,6 +1854,26 @@ Dear Miss.\ Smith % \end{macrocode} %------------------------------------------------------ % +% cvPublications environment +% +% \begin{macrocode} +\NewDocumentEnvironment{cvPublications}{}{% +\cv@Title{\pgfkeysvalueof{/@cv/names/publications}}{\faNewspaperO} +% \end{macrocode} +% insures uniqueness +% \begin{macrocode} + \stepcounter{cv@itemPrev} + \stepcounter{cv@itemNext} + \cv@definecvItem +}{% + \cv@EndSectionDraw + \stepcounter{cv@lastItem} + \draw (item \the\value{cv@itemPrev}.south west) + node (cv@last item \the\value{cv@lastItem}) {}; +} +% \end{macrocode} +%------------------------------------------------------ +% % cvReferences environment % % \begin{macrocode} @@ -1764,14 +2057,14 @@ Dear Miss.\ Smith -0.5\cvTableSepWidth}@{\hskip \cvTableSepWidth}% L{0.5\cvMainWidth-0.5\cvTimeDotSep% -0.5\cvTableSepWidth}@{}}% - \ifcv@refName \cv@refAName & \cv@refBName \fi % - \ifcv@refCompany \\ \cv@refACompany & \cv@refBCompany \fi % - \ifcv@refPosition \\ \cv@refAPosition & \cv@refBPosition \fi % - \ifcv@refAddressLineA \\ \cv@refAAddressLineA & \cv@refBAddressLineA \fi % - \ifcv@refAddressLineB \\ \cv@refAAddressLineB & \cv@refBAddressLineB \fi % - \ifcv@refAddressLineC \\ \cv@refAAddressLineC & \cv@refBAddressLineC \fi % - \ifcv@refWorkPhone \\ \cv@refAPhoneWork & \cv@refBPhoneWork \fi % - \ifcv@refMobilePhone \\ \cv@refAMobilePhone & \cv@refBMobilePhone \fi % + \ifcv@refName \cv@refAName & \cv@refBName \fi % + \ifcv@refCompany \\ \cv@refACompany & \cv@refBCompany \fi % + \ifcv@refPosition \\ \cv@refAPosition & \cv@refBPosition \fi % + \ifcv@refAddressLineA \\ \cv@refAAddressLineA & \cv@refBAddressLineA \fi % + \ifcv@refAddressLineB \\ \cv@refAAddressLineB & \cv@refBAddressLineB \fi % + \ifcv@refAddressLineC \\ \cv@refAAddressLineC & \cv@refBAddressLineC \fi % + \ifcv@refWorkPhone \\ \cv@refAPhoneWork & \cv@refBPhoneWork \fi % + \ifcv@refMobilePhone \\ \cv@refAMobilePhone & \cv@refBMobilePhone \fi % \end{tabular}% \pgfkeys{/@cv/references/value stored = false}% \else% @@ -1858,6 +2151,17 @@ Dear Miss.\ Smith \@IfNoValueOrEmptyTF{##1}{##2}{\href{##1}{##2}}}; } } +\NewDocumentCommand{\cvContactTemplate}{O{} mm}{ + \ifcv@contactfirst% + \\% + \else % + \global\cv@contactfirsttrue % + \fi % + \node[cv@contactIcon]{#2}; + \pgfmatrixnextcell \node[cv@contactText]{% + \@IfNoValueOrEmptyTF{#1}{#3}{\href{#1}{#3}}% + }; +} \newif\ifcv@contactfirst \NewDocumentEnvironment{cvContact}{}{% \vspace{\cvSectionSBSep} @@ -1871,6 +2175,7 @@ Dear Miss.\ Smith \cv@ContactTemplateLink{\cvContactEmail}{\faEnvelope} \cv@ContactTemplateLink{\cvContactWebsite}{\faGlobe} \cv@ContactTemplateLink{\cvContactGithub}{\faGithub} + \cv@ContactTemplateLink{\cvContactGitlab}{\faGitlab} \cv@ContactTemplateLink{\cvContactLinkedin}{\faLinkedinSquare} \cv@ContactTemplateLink{\cvContactTwitter}{\faTwitter} \cv@ContactTemplateLink{\cvContactKeybase}{\faKey} @@ -1946,18 +2251,22 @@ Dear Miss.\ Smith \NewDocumentCommand{\cvInterest}{mm}{% \ifcv@interestContent % \node[ - below=\cvItemSep of cv@interest text \the\value{cv@cvInterestCounterPrev}, + below=\cvItemSep of cv@interest text % + \the\value{cv@cvInterestCounterPrev}, cv@interesticon] (cv@interest icon \the\value{cv@cvInterestCounter}) {##1}; \node[ - below=\cvInterestDetailsSep of cv@interest icon \the\value{cv@cvInterestCounter}, + below=\cvInterestDetailsSep of cv@interest icon % + \the\value{cv@cvInterestCounter}, cv@interesttext] (cv@interest text \the\value{cv@cvInterestCounter}) {##2}; \else \cv@interestOpen - \node[cv@interesticon] (cv@interest icon \the\value{cv@cvInterestCounter}) {##1}; + \node[cv@interesticon] + (cv@interest icon \the\value{cv@cvInterestCounter}) {##1}; \node[ - below=\cvInterestDetailsSep of cv@interest icon \the\value{cv@cvInterestCounter}, + below=\cvInterestDetailsSep of cv@interest icon % + \the\value{cv@cvInterestCounter}, cv@interesttext] (cv@interest text \the\value{cv@cvInterestCounter}) {##2}; \fi @@ -2006,11 +2315,13 @@ Dear Miss.\ Smith % define new commands % \begin{macrocode} \NewDocumentCommand{\cvInterestsPersonal}{}{% - \cv@interestSection{\faUser\ \emph{Personal}}} + \cv@interestSection{\faUser\ \emph{\pgfkeysvalueof{/@cv/names/personal}}}} % \end{macrocode} % \begin{macrocode} \NewDocumentCommand{\cvInterestsProfessional}{}{% - \cv@interestSection{\faBriefcase\ \emph{Professional}}} + \cv@interestSection{\faBriefcase\ \emph{% + \pgfkeysvalueof{/@cv/names/professional}}% + }} % \end{macrocode} % \begin{macrocode} \ifcv@interestLong @@ -2117,7 +2428,8 @@ Dear Miss.\ Smith \node[% text width=\cvSideWidth, align=center, - below=\cvProjectDetailsSep of project \the\value{cv@projectCurrent} image] + below=\cvProjectDetailsSep of project \the\value{cv@projectCurrent} % + image] (project \the\value{cv@projectCurrent} title) {% \ifcv@projectLink \href{\cv@projectLink}{##2} \else ##2 \fi }; \else diff --git a/macros/latex/contrib/limecv/limecv.ins b/macros/latex/contrib/limecv/limecv.ins index 0c162af69d..d6f0f83263 100644 --- a/macros/latex/contrib/limecv/limecv.ins +++ b/macros/latex/contrib/limecv/limecv.ins @@ -1,5 +1,5 @@ %% -%% Copyright (C) 2017 by Olivier Pieters +%% Copyright (C) 2017 - 2018 by Olivier Pieters %% %% This file may be distributed and/or modified under the %% conditions of the LaTeX Project Public License, either @@ -41,7 +41,7 @@ LaTeX version 2005/12/01 or later. \Msg{* To finish the installation you have to move the *} \Msg{* following file into a directory searched by TeX: *} \Msg{* *} -\Msg{* \space\space limecv.cls *} +\Msg{* limecv.cls *} \Msg{* *} \Msg{* To produce the documentation run the file *} \Msg{* limecv.dtx through LaTeX. *} diff --git a/macros/latex/contrib/limecv/limecv.pdf b/macros/latex/contrib/limecv/limecv.pdf Binary files differindex b17f45cddc..3f9abc7069 100644 --- a/macros/latex/contrib/limecv/limecv.pdf +++ b/macros/latex/contrib/limecv/limecv.pdf |