diff options
author | Norbert Preining <norbert@preining.info> | 2019-10-31 03:00:53 +0000 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-10-31 03:00:53 +0000 |
commit | 038f3d26e9b2f40210a14133c33f1d2dfb5261bf (patch) | |
tree | 6e4ac4cf157fbd7b80ca0f6044dfb2452add0376 /macros/latex/contrib | |
parent | 120cbc10db92bf43caa6bbf29549667e979beba4 (diff) |
CTAN sync 201910310300
Diffstat (limited to 'macros/latex/contrib')
128 files changed, 1552 insertions, 682 deletions
diff --git a/macros/latex/contrib/ifetex/README b/macros/latex/contrib/ifetex/README deleted file mode 100644 index b11fd0baa9..0000000000 --- a/macros/latex/contrib/ifetex/README +++ /dev/null @@ -1,17 +0,0 @@ -LaTeX package 'ifetex' -~~~~~~~~~~~~~~~~~~~~~~ -Copyright (c) 2011-2018 by Martin Scharrer <martin@scharrer-online.de> -CTAN: http://www.ctan.org/pkg/ifetex -Code repository: https://bitbucket.org/martin_scharrer/ifetex -Issue tracker: https://bitbucket.org/martin_scharrer/ifetex/issues - -This small package provides the if-switch \ifetex which indicated whether -e-TeX is available or not. - -The package can be loaded as LaTeX package using `\usepackage{ifetex}` or in -plainTeX using `\input ifetex`. In both cases it aborts silently if the \ifetex macro -is already defined. - -The package currently test if \eTeXversion is defined as a primitive and -assumes e-TeX if so. - diff --git a/macros/latex/contrib/ifetex/ifetex.dtx b/macros/latex/contrib/ifetex/ifetex.dtx deleted file mode 100644 index fdcd4d814e..0000000000 --- a/macros/latex/contrib/ifetex/ifetex.dtx +++ /dev/null @@ -1,235 +0,0 @@ -% \iffalse meta-comment -%<=*COPYRIGHT> -%% Copyright (C) 2011-2018 by Martin Scharrer <martin@scharrer-online.de> -%% --------------------------------------------------------------------------- -%% This work may be distributed and/or modified under the -%% conditions of the LaTeX Project Public License, either version 1.3 -%% of this license or (at your option) any later version. -%% The latest version of this license is in -%% http://www.latex-project.org/lppl.txt -%% and version 1.3 or later is part of all distributions of LaTeX -%% version 2005/12/01 or later. -%% -%% This work has the LPPL maintenance status `maintained'. -%% -%% The Current Maintainer of this work is Martin Scharrer. -%% -%% This work consists of the files ifetex.dtx and ifetex.ins -%% and the derived filebase ifetex.sty. -%% -%<=/COPYRIGHT> -% \fi -% -% \iffalse -%<*driver> -\ProvidesFile{ifetex.dtx}[% -%<=*DATE> - 2018/03/31 -%<=/DATE> -%<=*VERSION> - v1.2a -%<=/VERSION> - Conditional to test for e-TeX] -\documentclass{ydoc} -\GetFileInfo{ifetex.dtx} -\usepackage{ifetex}[\filedate] -\EnableCrossrefs -\CodelineIndex -\RecordChanges -\begin{document} - \DocInput{\jobname.dtx} - \PrintChanges - \PrintIndex -\end{document} -%</driver> -% \fi -% -% \CheckSum{73} -% -% \CharacterTable -% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z -% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z -% Digits \0\1\2\3\4\5\6\7\8\9 -% Exclamation \! Double quote \" Hash (number) \# -% Dollar \$ Percent \% Ampersand \& -% Acute accent \' Left paren \( Right paren \) -% Asterisk \* Plus \+ Comma \, -% Minus \- Point \. Solidus \/ -% Colon \: Semicolon \; Less than \< -% Equals \= Greater than \> Question mark \? -% Commercial at \@ Left bracket \[ Backslash \\ -% Right bracket \] Circumflex \^ Underscore \_ -% Grave accent \` Left brace \{ Vertical bar \| -% Right brace \} Tilde \~} -% -% -% \changes{v1.0}{2011/10/31}{First version.} -% \changes{v1.1}{2011/11/06}{Changes to manual, local declaration of \cs{ifetex}.} -% \changes{v1.2}{2011/12/15}{Added \cs{NeedsETeX} \protect\LaTeX\ macro.} -% \changes{v1.2a}{2018/03/31}{Improvements to manual.} -% -% -% \DoNotIndex{\newcommand,\newenvironment} -% -% \GetFileInfo{ifetex.dtx} -% \author{Martin Scharrer} -% \email{martin@scharrer-online.de} -% -% \maketitle -% -% \providecommand\eTeX{$\epsilon$-\TeX} -% \begin{abstract}\noindent -% This small package provides the if-switch \Macro\ifetex which -% indicated whether \eTeX\ is available or not. -% \end{abstract} -% -% \smallskip -% \begin{multicols}{2} -% \setcounter{tocdepth}{2} -% \tableofcontents -% \end{multicols} -% -% \section*{Links} -% This package is developed using an -% \href{https://bitbucket.org/martin_scharrer/ifetex/downloads/}{Mercurial} -% (HG) revision control repository on \href{https://bitbucket.org/}{Bitbucket.org}. -% It is published on the \href{http://www.ctan.org/}{Comprehensive \TeX\ Archive Network} (CTAN) -% and available with the main \TeX\ distributions \TeX Live and Mik\TeX. -% -% Bug reports and feature requests should be submitted using the issue tracker linked below. -% -% The following table lists the location of the package, its downloadable files, both on CTAN and -% on the package website. -% -% \begin{center}\small -% \begin{tabular}{ll} -% \toprule -% CTAN & \small\url{https://www.ctan.org/pkg/ifetex}\\ -% PDF Manual & \small\url{http://mirrors.ctan.org/macros/latex/contrib/ifetex/ifetex.pdf}\\ -% TDS ZIP & \small\url{http://mirrors.ctan.org/install/macros/latex/contrib/ifetex.tds.zip}\\ -% \midrule -% Website & \small\url{https://bitbucket.org/martin_scharrer/ifetex/}\\ -% HG Repository & \small\url{https://bitbucket.org/martin_scharrer/ifetex/}\\ -% Issue Tracker & \small\url{https://bitbucket.org/martin_scharrer/ifetex/issues}\\ -% Downloads & \small\url{https://bitbucket.org/martin_scharrer/ifetex/downloads/}\\ -% PDF Manual & \small\url{https://bitbucket.org/martin_scharrer/ifetex/downloads/ifetex.pdf}\\ -% TDS ZIP & \small\url{https://bitbucket.org/martin_scharrer/ifetex/downloads/ifetex.tds.zip}\\ -% Source ZIP & \small\url{https://bitbucket.org/martin_scharrer/ifetex/downloads/ifetex.zip}\\ -% \bottomrule -% \end{tabular} -% \end{center} -% -% -% -% \clearpage -% \section{Usage} -% The package can be loaded as \LaTeX\ package using \Macro\usepackage{ifetex} or in plain\TeX\ using \Macro\input' ifetex'. -% In both cases it aborts silently if the \Macro\ifetex macro is already defined. -% -% The package currently test if \Macro\eTeXversion is defined as a primitive and assumes \eTeX\ if so. -% -% Note that almost all modern \LaTeX\ distributions use \eTeX. -% The two major distributions \TeX\ Live and Mik\TeX\ support it and use it by default (except for the classic |tex|). -% The \LaTeX\ which comes with \emph{Scientific Work Place} by MacKichan seems to not support \eTeX\ yet. -% Package authors can use this package to test for missing \eTeX\ and provide fall-back code. -% -% \DescribeMacro\ifetex -% Equal to \Macro\iftrue if \eTeX\ support is present and \Macro\iffalse otherwise. -% -% \DescribeMacro\NeedsETeX[<version>] -% The \LaTeX\ package provides this macro which can be used in packages or classes to produce an error if \eTeX\ is not available, -% similar to \Macro\NeedsTeXFormat. In addition an optional version number can be given in the format x.y, where x is the main version and y the revision. -% This number is checked against \Macro\eTeXversion and \Macro\eTeXrevision and an appropriate error is raised if the available -% \eTeX\ is too old. -% -% \StopEventually{} -% \clearpage -% \section{Implementation} -% -% \subsection{\texttt{ifetex.sty}} -% \iffalse -%<*ifetex.sty> -% \fi -% \begin{macrocode} -%<!COPYRIGHT> -\ProvidesPackage{ifetex}[% -%<!DATE> -%<!VERSION> -%<*DRIVER> - 2099/01/01 develop -%</DRIVER> - ifetex] -% \end{macrocode} -% -% \begin{macrocode} -\@@input ifetex -% \end{macrocode} -% -% -% \begin{macro}{\NeedsETeX}[1]{optional version number (x.y)} -% Produces error if e-TeX is not available or if its version is too old. -% \begin{macrocode} -\newcommand*\NeedsETeX[1][]{% - \ifetex - \ifx\@nnil#1\@nnil\else - \ifdim\the\eTeXversion\eTeXrevision\p@<#1\p@\relax - \@latex@error{This file needs e-TeX with version #1% - \MessageBreak but only version \the\eTeXversion\eTeXrevision is available}{% - The current input file will not be processed - further,\MessageBreak - because it was written for a newer version of e-TeX. - \MessageBreak\@ehd}% - \endinput - \fi\fi - \else - \@latex@error{This file needs e-TeX}{% - The current input file will not be processed - further,\MessageBreak - because it was written for e-TeX which is not available. - \MessageBreak\@ehd}% - \endinput - \fi -} -% \end{macrocode} -% \end{macro} -% -% \iffalse -%</ifetex.sty> -% \fi -% -% \subsection{\texttt{ifetex.tex}} -% \iffalse -%<*ifetex.tex> -% \fi -% \begin{macrocode} -%<!COPYRIGHT> -% \end{macrocode} -% -% Abort if \Macro{ifetex} is already defined. -% \begin{macrocode} -\expandafter\ifx\csname ifetex\endcsname\relax\else - \expandafter\endinput -\fi -% \end{macrocode} -% -% \begin{macro}{ifetex} -% Checks if \Macro\eTeXversion is a primitive. -% \begin{macrocode} -\begingroup -\edef\tempa{\meaning\eTeXversion}% -\edef\tempb{\string\eTeXversion}% -\ifx\tempa\tempb - \endgroup - \expandafter\let\csname ifetex\expandafter\endcsname\csname iftrue\endcsname -\else - \endgroup - \expandafter\let\csname ifetex\expandafter\endcsname\csname iffalse\endcsname -\fi -% \end{macrocode} -% \end{macro} -% \iffalse -%</ifetex.tex> -% \fi -% -% \Finale -\endinput diff --git a/macros/latex/contrib/ifetex/ifetex.ins b/macros/latex/contrib/ifetex/ifetex.ins deleted file mode 100644 index 8b3e6d5038..0000000000 --- a/macros/latex/contrib/ifetex/ifetex.ins +++ /dev/null @@ -1,11 +0,0 @@ -\input ydocstrip.tex -\keepsilent -\askforoverwritefalse - -\generate{% - \file{ifetex.sty}{\nopreamble\from{ifetex.dtx}{ifetex.sty}}% - \file{ifetex.tex}{\nopreamble\from{ifetex.dtx}{ifetex.tex}}% -} -\endbatchfile - -%% vim: ft=tex diff --git a/macros/latex/contrib/ifetex/ifetex.pdf b/macros/latex/contrib/ifetex/ifetex.pdf Binary files differdeleted file mode 100644 index 84132f6412..0000000000 --- a/macros/latex/contrib/ifetex/ifetex.pdf +++ /dev/null diff --git a/macros/latex/contrib/iftex/README b/macros/latex/contrib/iftex/README deleted file mode 100644 index 95def7f467..0000000000 --- a/macros/latex/contrib/iftex/README +++ /dev/null @@ -1,29 +0,0 @@ -_________________ -The iftex package -v0.2 - -This very simple package, for both Plain TeX and LaTeX, -defines the \ifPDFTeX, \ifXeTeX, and \ifLuaTeX boolean -for testing whether PDFTeX, or XeTeX, or LuaTeX is being -used for typesetting. - -Also provides the \RequirePDFTeX, \RequireXeTeX, and \RequireLuaTeX -command which throws an error if PDFTeX, XeTeX and LuaTeX (respectively) -is not the engine in use. - -If you want to report any bugs or typos and corrections in the documentation, -or ask for any new features, or suggest any improvements, or ask any questions -about the package, then please do not send any direct emails to us; we will not -answer any direct emails. Instead please use the issue tracker: - <https://github.com/persian-tex/iftex/issues> -In doing so, please always explain your issue well enough, always include -a minimal working examples showing the issue, and always choose the appropriate -label for your query (i.e. if you are reporting any bugs, choose `bug' label). - -Current version release date: 2013/04/04 -______________ -Persian TeX Group -persian-tex@tug.org - -Copyright 2010–2013 -Distributed under the LaTeX Project Public License diff --git a/macros/latex/contrib/iftex/README.md b/macros/latex/contrib/iftex/README.md new file mode 100644 index 0000000000..ec8f5b74cc --- /dev/null +++ b/macros/latex/contrib/iftex/README.md @@ -0,0 +1,65 @@ +# iftex + +## TeX Engine Detection + +This iftex package provides a suite of commands for detecting +different TeX variants. + +For each supported engine, tests are provided of the form + + \ifpdftex which is true if PDFTeX is in use and \RequirePDFTeX + which stops the run with an error message if PDFTeX is not being used. + +The package (which works with plain TeX as well as LaTeX) has tests +for: + +eTeX, PDFTeX, XeTeX, LuaTeX, LuaHBTeX, pTeX, upTeX, pTeX-ng, VTeX, Aleph. + + +In addition, an \iftutex test is true for XeTeX and LuaTeX, and +an \ifpdf test is provided to test the PDF or DVI output mode. + +## Compatibility Packages + +In addition to the main iftex.sty package, small wrapper packages are +provided + +ifetex.sty ifluatex.sty ifvtex.sty ifxetex.sty ifpdf.sty + +These include iftex and in some cases emulate some additional +commands to allow these packages to replace the original packages in TeX +distributions. It is recommended that new documents do not use these +packages, but instead load iftex.sty directly. + +This package may be used on any format (it may be loaded into initex) +it does not assume LaTeX. + + +---- + +This is a merger and simplification of several packages +Based on a suggestion of Norbert Preining + +https://github.com/bidi-tex/iftex/issues/1 + + + * ifetex: Martin Scharrer + * ifxetex: Will Robertson + * iftex: Persian TeX Group / Vafa Khalighi + * ifluatex, ifvtex: Heiko Oberdiek + * ifptex: Takayuki Yato + * ifpdf: Heiko Oberdiek and LaTeX3 Project + + +The existing if(u)ptex packages do far more extensive testing to +distinguish different variants which are not copied here. + +A document specifically for Japanese texts may need the finer grained +tests of the ifptex package which has tests for particular versions +of the pTeX (Japanese TeX) variant in use, and for the mode that is +active. + +This generic package only has coarser tests for the tex variant in +use, so is sufficient for example to distinguish upTeX from pTeX, and +to distinguish both of those from LuaTeX. + diff --git a/macros/latex/contrib/iftex/ann.txt b/macros/latex/contrib/iftex/ann.txt new file mode 100644 index 0000000000..9e153b59ab --- /dev/null +++ b/macros/latex/contrib/iftex/ann.txt @@ -0,0 +1,52 @@ +** UPLOAD: iftex +https://ctan.org/pkg/iftex + +New README will be uploaded, please change catalogue to say +maintained by LaTeX Team +Licence LPPL 1.3 +Bug Tracker: https://github.com/latex3/iftex/issues/ +Repository: https://github.com/latex3/iftex/ + +** UPLOAD: oberdiek +https://ctan.org/pkg/oberdiek +This release will not distribute ifpdf.sty ifluatex.sty ifvtex.sty + + +** DELETE ifxetex +https://ctan.org/pkg/ifxetex +Please change the catalogue to point to the iftex distribution (which will contain ifxetex.sty) +and change maintainer and github links as for iftex above. + +Will Robertson is on LaTeX Team so aware of this. + +** DELETE ifetex +https://ctan.org/pkg/ifetex +Please change the catalogue to point to the iftex distribution (which will contain ifetex.sty) +and change maintainer and github links as for iftex above. + +Martin Scharrer <martin.scharrer@web.de> has agreed to his version of ifetex being deleted + +> Hi David, +> +> I always hated the fact that there where so many if..tex packages and I +> am glad that you people rationalise them now. +> +> Feel free to withdraw my package ifetex from CTAN. +> +> Best Regards, +> +> Martin + +** CATALOGUE Change ifpdf, ifluatex, ifvtex +https://ctan.org/pkg/ifpdf +https://ctan.org/pkg/ifluatex +https://ctan.org/pkg/ifvtex +Please change the catalog entries for these three so they point to iftex as above, +not to the oberdiek bundle. + + +** NO CHANGE +Just to confirm ifptex and ifxptex packages are _not_ affected by this re-arrangement. + + + diff --git a/macros/latex/contrib/iftex/ifetex.sty b/macros/latex/contrib/iftex/ifetex.sty new file mode 100644 index 0000000000..51027d89c5 --- /dev/null +++ b/macros/latex/contrib/iftex/ifetex.sty @@ -0,0 +1,18 @@ +% Compatibility stub package for ifetex + +%% LaTeX3 Project +%% +%% 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 later +%% version. + +% The original ifetex package was written by Martin Scharrer + +\ifx\RequirePackage\undefined + \input iftex.sty +\else + \ProvidesPackage{ifetex}[2019/10/25 v1.3 ifetex legacy package. Use iftex instead.] + \RequirePackage{iftex} + \newcommand*\NeedsETeX[1][]{\RequireeTeX} +\fi diff --git a/macros/latex/contrib/iftex/ifluatex.sty b/macros/latex/contrib/iftex/ifluatex.sty new file mode 100644 index 0000000000..e762e8281f --- /dev/null +++ b/macros/latex/contrib/iftex/ifluatex.sty @@ -0,0 +1,17 @@ +% Compatibility stub package for ifluatex + +%% LaTeX3 Project +%% +%% 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 later +%% version. + +% The original ifluatex package was written by Heiko Oberdiek + +\ifx\RequirePackage\undefined + \input iftex.sty +\else + \ProvidesPackage{ifluatex}[2019/10/25 v1.5 ifluatex legacy package. Use iftex instead.] + \RequirePackage{iftex} +\fi diff --git a/macros/latex/contrib/iftex/ifpdf.sty b/macros/latex/contrib/iftex/ifpdf.sty new file mode 100644 index 0000000000..ec500fba25 --- /dev/null +++ b/macros/latex/contrib/iftex/ifpdf.sty @@ -0,0 +1,17 @@ +% Compatibility stub package for ifpdf + +%% LaTeX3 Project +%% +%% 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 later +%% version. + +% The original ifpdf package was written by Heiko Oberdiek + +\ifx\RequirePackage\undefined + \input iftex.sty +\else + \ProvidesPackage{ifpdf}[2019/10/25 v3.4 ifpdf legacy package. Use iftex instead.] + \RequirePackage{iftex} +\fi diff --git a/macros/latex/contrib/iftex/iftex.pdf b/macros/latex/contrib/iftex/iftex.pdf Binary files differindex 483276ea7c..426b5c4622 100644 --- a/macros/latex/contrib/iftex/iftex.pdf +++ b/macros/latex/contrib/iftex/iftex.pdf diff --git a/macros/latex/contrib/iftex/iftex.sty b/macros/latex/contrib/iftex/iftex.sty index 7651466448..feb5a75f8d 100644 --- a/macros/latex/contrib/iftex/iftex.sty +++ b/macros/latex/contrib/iftex/iftex.sty @@ -1,97 +1,231 @@ +%% iftex TeX engine tests + +%% LaTeX3 Project +%% +%% 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 later +%% version. +%% +%% Using ideas from: %% -%% This is file `iftex.sty', - -%% -%% __________________________________ -%% Copyright © 2010–2013 Persian TeX Group -%% -%% License information appended. -%% -%% -\csname iftexloaded\endcsname -\let\iftexloaded\endinput +%% ifetex Martin Scharrer +%% ifxetex Will Robertson +%% iftex 0.2 Persian TeX Group / Vafa Khalighi +%% ifluatex ifvtex Heiko Oberdiek +%% ifptex Takayuki YATO +%% ifpdf Heiko Oberdiek and LaTeX3 Project + + +% Only load once (not needed in LaTeX, but does no harm). +\csname IFTEX\string @loaded\endcsname +\expandafter\let\csname IFTEX\string @loaded\endcsname\endinput + +% File loadable in initex +% require { } # with standard catcodes. +\catcode123=1 +\catcode125=2 +\catcode35=6 + + +% ProvidesPackage declaration in LaTeX +\begingroup\expandafter\expandafter\expandafter\endgroup \expandafter\ifx\csname ProvidesPackage\endcsname\relax\else - \ProvidesPackage{iftex} - [2013/04/04 v0.2 Provides if(tex) conditional for PDFTeX, XeTeX, and LuaTeX] -\fi -\def\RequirePDFTeX{% - \ifPDFTeX\else - \begingroup - \errorcontextlines=-1\relax - \newlinechar=10\relax - \errmessage{^^J - ********************************************^^J - * PDFTeX is required to compile this document.^^J - * Sorry!^^J - ********************************************}% - \endgroup - \fi} -\def\RequireXeTeX{% - \ifXeTeX\else - \begingroup - \errorcontextlines=-1\relax - \newlinechar=10\relax - \errmessage{^^J - ********************************************^^J - * XeTeX is required to compile this document.^^J - * Sorry!^^J - ********************************************}% - \endgroup - \fi} -\def\RequireLuaTeX{% - \ifLuaTeX\else - \begingroup - \errorcontextlines=-1\relax - \newlinechar=10\relax - \errmessage{^^J - ********************************************^^J - * LuaTeX is required to compile this document.^^J - * Sorry!^^J + \ProvidesPackage{iftex}[2019/10/24 v1.0a TeX engine tests] +\fi + +% Save @ catcode, to restore at end, not needed in LaTeX. +\expandafter\chardef\csname IFTEX\string @atcatcode\endcsname\catcode64 +\catcode 64 11 + +% Message format used in several pre-existing if*tex packages +% Modified here to do a hard stop and not show any error context lines. +\def\IFTEX@Require#1#2#3{% + #1\else + \newlinechar 64\relax + \errorcontextlines -1\relax + \immediate\write20{@ + ********************************************@ + * #2 is required to compile this document.@ + * Sorry!@ ********************************************}% - \endgroup - \fi} -\expandafter\ifx\csname ifPDFTeX\endcsname\relax\else - \expandafter\endinput + \batchmode\read -1 to \@tempa + #3% +} + + +% eTeX \protected if available. +\ifx\protected\@undefined + \let\IFTEX@protected\relax +\else + \let\IFTEX@protected\protected \fi -\expandafter\ifx\csname ifXeTeX\endcsname\relax\else - \expandafter\endinput + +% make sure \detokenize and \protected are available in lualatex, +% but avoid defining them after the package if not already defined. + { + \catcode34 12 % " + \catcode40 12 % ( + \catcode41 12 % ) + \catcode44 12 % , + \catcode46 12 % . + \ifx\directlua\@undefined\else + \directlua{tex.enableprimitives("IFTEX@", {"detokenize","protected"})} + \fi + } + +% \Require... commands that stop if the wrong engine detected. +\IFTEX@protected\def\RequireeTeX{\IFTEX@Require\ifetex{eTeX}\fi} +\IFTEX@protected\def\RequirePDFTeX{\IFTEX@Require\ifpdftex{pdfTeX}\fi} +\IFTEX@protected\def\RequireXeTeX{\IFTEX@Require\ifxetex{XeTeX}\fi} +\IFTEX@protected\def\RequireLuaTeX{\IFTEX@Require\ifluatex{LuaTeX}\fi} +\IFTEX@protected\def\RequireLuaHBTeX{\IFTEX@Require\ifluahbtex{LuaHBTeX}\fi} +\IFTEX@protected\def\RequirepTeX{\IFTEX@Require\ifptex{pTeX}\fi} +\IFTEX@protected\def\RequireupTeX{\IFTEX@Require\ifuptex{upTeX}\fi} +\IFTEX@protected\def\RequirepTeXng{\IFTEX@Require\ifptexng{pTeX-ng}\fi} +\IFTEX@protected\def\RequireVTeX{\IFTEX@Require\ifvtex{VTeX}\fi} +% alephtex as aleph name too generic +\IFTEX@protected\def\RequireAlephTeX{\IFTEX@Require\ifalephtex{Aleph}\fi} +% tutex == has \Umathchardef == XeTeX or Lua(HB)TeX currently +\IFTEX@protected\def\RequireTUTeX{\IFTEX@Require\iftutex{LuaTeX or XeTeX}\fi} + + +% As a matter of policy over-write any existing \if*tex macro and set +% by the tests here. + +% \csname and \let construct useful for hiding \ifzzz tokens from +% outer level \if tests. +\def\IFTEX@let#1#2{% + \expandafter\let\csname if#1\expandafter\endcsname + \csname if#2\endcsname} + +% etex (should always be true in latex based formats) +\ifx\numexpr\@undefined + \IFTEX@let{etex}{false} +\else + \IFTEX@let{etex}{true} \fi -\expandafter\ifx\csname ifLuaTeX\endcsname\relax\else - \expandafter\endinput +\IFTEX@let{eTeX}{etex} + +% pdftex (including in dvi mode) +\ifx\pdftexversion\@undefined + \IFTEX@let{pdftex}{false} +\else + \IFTEX@let{pdftex}{true} \fi -\newif\ifPDFTeX -\begingroup\expandafter\expandafter\expandafter\endgroup -\expandafter\ifx\csname pdfmatch\endcsname\relax - \PDFTeXfalse +\IFTEX@let{PDFTeX}{pdftex} + +% xetex +\ifx\XeTeXrevision\@undefined + \IFTEX@let{xetex}{false} \else - \PDFTeXtrue + \IFTEX@let{xetex}{true} \fi -\newif\ifXeTeX -\begingroup\expandafter\expandafter\expandafter\endgroup -\expandafter\ifx\csname XeTeXinterchartoks\endcsname\relax - \XeTeXfalse +\IFTEX@let{XeTeX}{xetex} + + +% luatex (including luahbtex) +\ifx\directlua\@undefined + \IFTEX@let{luatex}{false} \else - \XeTeXtrue + \IFTEX@let{luatex}{true} \fi -\newif\ifLuaTeX +\IFTEX@let{LuaTeX}{luatex} + +% luahbtex (or luatex + luaharfbuzz) +% Use luaharfbuzz test rather than status.luatex_engine=="luahbtex" +% for issue #2. +\IFTEX@let{luahbtex}{false} +\ifx\directlua\@undefined +\else + \directlua{\IFTEX@detokenize{ + if(pcall(require, 'luaharfbuzz')) then + tex.print("\\let\\ifluahbtex\\iftrue ") + end + }} + +\fi +\IFTEX@let{LuaHBTeX}{luahbtex} + + +% ptex (including all variants) +\ifx\kanjiskip\@undefined + \IFTEX@let{ptex}{false} +\else + \IFTEX@let{ptex}{true} +\fi +\IFTEX@let{pTeX}{ptex} + +% uptex (including euptex) +\ifx\enablecjktoken \@undefined + \IFTEX@let{uptex}{false} +\else + \IFTEX@let{uptex}{true} +\fi +\IFTEX@let{upTeX}{uptex} + +% ptex-ng +\ifx\ngbanner\@undefined + \IFTEX@let{ptexng}{false} +\else + \IFTEX@let{ptexng}{true} +\fi +\IFTEX@let{pTeXng}{ptexng} + +% vtex +\ifx\VTeXversion\@undefined + \IFTEX@let{vtex}{false} +\else + \IFTEX@let{vtex}{true} +\fi +\IFTEX@let{VTeX}{vtex} + +% aleph +\IFTEX@let{alephtex}{false} +\ifptex\else +\ifx\omathchardef\@undefined +\else + \IFTEX@let{alephtex}{true} +\fi +\fi +\IFTEX@let{AlephTeX}{alephtex} + + +% tutex (LuaTeX or XeTeX) +\ifx\Umathchardef\@undefined + \IFTEX@let{tutex}{false} +\else + \IFTEX@let{tutex}{true} +\fi +\IFTEX@let{TUTeX}{tutex} + + + +% Output mode +% declare with as if with \newif +\def\pdftrue{\let\ifpdf\iftrue} +\def\pdffalse{\let\ifpdf\iffalse} +\pdffalse +\ifx\directlua\undefined \begingroup\expandafter\expandafter\expandafter\endgroup -\expandafter\ifx\csname directlua\endcsname\relax - \LuaTeXfalse +\expandafter\ifx\csname pdfoutput\endcsname\relax +\ifvtex + \ifnum\OpMode=3 % + \pdftrue + \fi +\fi \else - \LuaTeXtrue -\fi -%% -%% Copyright © 2010–2013 by Persian TeX Group <persian-tex@tug.org> -%% -%% Distributable under the LaTeX Project Public License, -%% version 1.3c or higher (your choice). The latest version of -%% this license is at: http://www.latex-project.org/lppl.txt -%% -%% This work is "maintained" (as per LPPL maintenance status) -%% by Persian TeX Group. -%% -%% -%% -%% -%% -%% End of file `iftex.sty'. + \ifnum\pdfoutput>0 % + \pdftrue + \fi +\fi +\else +\directlua{\IFTEX@detokenize{ +if (tex.outputmode or tex.pdfoutput or 0) > 0 then + tex.print('\\pdftrue') +end +}} +\fi + +% restore things +\catcode64 \IFTEX@atcatcode diff --git a/macros/latex/contrib/iftex/iftex.tex b/macros/latex/contrib/iftex/iftex.tex index a247e22b5b..67703b93c5 100644 --- a/macros/latex/contrib/iftex/iftex.tex +++ b/macros/latex/contrib/iftex/iftex.tex @@ -1,80 +1,184 @@ -\documentclass{artikel3} -\usepackage{calc} -\usepackage{pifont} -\usepackage{bbding} -\usepackage[colorlinks=true,linkcolor=mybrown,urlcolor=mygreen]{hyperref} -\usepackage{bidicode} -\newcounter{local} -\renewcommand\theenumi{\protect\setcounter{local}% - {201+\the\value{enumi}}\protect\ding{\value{local}}} -\renewcommand\labelenumi{\theenumi} -\renewcommand\labelitemi{\HandRight} -\renewcommand\labelitemii{\HandRightUp} -\renewcommand\labelitemiii{\HandCuffRight} -\renewcommand\labelitemiv{\HandPencilLeft} -\definecolor{mybrown}{rgb}{.6,0,0} -\definecolor{mygreen}{rgb}{0,.43,0} -\definecolor{Orange}{rgb}{1,.4,.2} -\newcommand\PDFTeX{PDF\TeX} -\newcommand\XeTeX{Xe\TeX} -\newcommand\LuaTeX{Lua\TeX} -\title{The \textsf{iftex} Package\\ \href{https://github.com/persian-tex/iftex}{\texttt{https://github.com/persian-tex/iftex}}} -\author{Persian TeX Group\\ \href{mailto:persian-tex@tug.org}{\texttt{persian-tex@tug.org}}} -\date{Version 0.2} +\documentclass{article} +\usepackage[T1]{fontenc} +\usepackage{hyperref} +\hypersetup{colorlinks} +\usepackage{iftex} + +\title{The iftex package} +\author{The \LaTeX\ Project Team\thanks{% +\url{https://github.com/latex3/iftex}}} + +\date{\csname ver@iftex.sty\endcsname} + +\newcommand\cs[1]{{\ttfamily\textbackslash #1}} +\renewcommand*\descriptionlabel[1]{\makebox[\dimexpr\textwidth][l]{% + \normalfont\bfseries #1}} + \begin{document} + \maketitle \tableofcontents + + \section{Introduction} -This package provides a way to check if a document is being processed with \PDFTeX, or \XeTeX, or \LuaTeX. -\section{Loading The Package} -The package can be loaded in the usual way both in Plain \TeX\ and \LaTeX. -\subsection{Loading The Package in Plain \TeX} -\begin{BDef} -\Lcs{input}\quad \Larg{iftex.sty} -\end{BDef} -\subsection{Loading The Package in \LaTeX} -\begin{BDef} -\Lcs{usepackage}\Largb{iftex} -\end{BDef} -\section{Defined Conditionals} -\subsection{For \PDFTeX} -\begin{BDef} -\Lcs{ifPDFTeX}\\ -\qquad\Larga{material for \PDFTeX}\\ -\Lcs{else}\\ -\qquad\Larga{material not for \PDFTeX}\\ -\Lcs{fi} -\end{BDef} -\subsection{For \XeTeX} -\begin{BDef} -\Lcs{ifXeTeX}\\ -\qquad\Larga{material for \XeTeX}\\ -\Lcs{else}\\ -\qquad\Larga{material not for \XeTeX}\\ -\Lcs{fi} -\end{BDef} -\subsection{For \LuaTeX} -\begin{BDef} -\Lcs{ifLuaTeX}\\ -\qquad\Larga{material for \LuaTeX}\\ -\Lcs{else}\\ -\qquad\Larga{material not for \LuaTeX}\\ -\Lcs{fi} -\end{BDef} -\section{Defined Commands} -\subsection{For \PDFTeX} -\begin{BDef} -\Lcs{RequirePDFTeX} -\end{BDef} -This command tests for \PDFTeX\ use and throws an error if a different engine is being used. -\subsection{For \XeTeX} -\begin{BDef} -\Lcs{RequireXeTeX} -\end{BDef} -This command tests for \XeTeX\ use and throws an error if a different engine is being used. -\subsection{For \LuaTeX} -\begin{BDef} -\Lcs{RequireLuaTeX} -\end{BDef} -This command tests for \LuaTeX\ use and throws an error if a different engine is being used. -\end{document}
\ No newline at end of file +This original \textsf{iftex} was written as part of the \textsf{bidi} +collection (by the Persian TeX Group / Vafa Khalighi) +and provided checks for whether a document was being +processed with PDF\TeX, or Xe\TeX, or Lua\TeX. This version recodes +the package and incorporates similar tests from the \textsf{ifetex} +package by Martin Scharrer, the \textsf{ifxetex} package by Will +Robertson, the \textsf{ifluatex} and \textsf{ifvtex} +packages from Heiko Oberdiek and parts of \textsf{ifptex} by Takayuki +Yato. + +For each \TeX\ variant engine supported two commands are provided: +\begin{itemize} +\item + a conditional, \verb|\iffootex| that is true if the \textsf(footex) +engine (or a compatible extension) is being used. + +For compatibility with earlier packages which did not all use the same +naming convention all these conditionals are provided in two forms, a +lowercase name \verb|\iffootex| and a mixed case name \verb|\ifooTeX|. + +\item a command \verb|RequireFooTeX| which checks that \textsf{footex} + is being used, and stops the run with an error message if a + different engine is detected. +\end{itemize} + +\section{Loading the package} +The package can be loaded in the usual way in both Plain \TeX\ and \LaTeX. +\subsection{Loading the package in plain \TeX} +\begin{verbatim} +\input iftex.sty +\end{verbatim} + +\subsection{Loading the package in \LaTeX} +\begin{verbatim} +\usepackage{iftex} +\end{verbatim} + +\subsection{Loading the package in ini\TeX} +The package assumes no existing macros and may be loaded +during format setup in a format without the plain \TeX\ or \LaTeX\ +format being loaded. From an initial ini\TeX\ setup the package may +be loaded as for plain \TeX. + +\section{Engine test conditionals} +All the conditionals defined here are used in the same way: +\begin{verbatim} +\ifluatex + luatex specific code +\else + code for other engines +\fi +\end{verbatim} + + + +\begin{description} +\item[\cs{ifetex}, \cs{ifeTeX}] +True if an e\TeX\ enabled format is in use. (This is necessarily true +in all \LaTeX\ variants.) +\item[\cs{ifpdftex}, \cs{ifPDFTeX}] +True if PDF\TeX\ is in use (whether writing PDF or DVI), so this is +true for documents processed with both the \textsf{latex} and +\textsf{pdflatex} commands. +\item[\cs{ifxetex}, \cs{ifXeTeX}] +True if Xe\TeX\ is in use. +\item[\cs{ifluatex}, \cs{ifLuaTeX}] +True if Lua\TeX\ and extensions such as LuaHB\TeX\ are in use. +\item[\cs{ifluahbtex}, \cs{ifLuaHBTeX}] +True if the \textsf{luaharftex} Lua module is available. +This will be true in \textsf{luahbtex} and may be true in +\textsf{luatex} if a binary Lua \textsf{luaharftex} module has been +compiled and is available in Lua's search path. +\item[\cs{ifptex}, \cs{ifpTeX}] +True if any of the p\TeX\ variants are in use. +\item[\cs{ifuptex}, \cs{ifupTeX}] +True if any of the up\TeX\ variants are in use. (\verb|\ifetex| could +be used in addition to distinguish \textsf{uptex} and \textsf{euptex}.) +\item[\cs{ifptexng}, \cs{ifpTeXng}] +True if p\TeX-ng (Asiatic p\TeX) is in use. +\item[\cs{ifvtex}, \cs{ifVTeX}] +True if V\TeX\ is in use. +\item[\cs{ifalephtex}, \cs{ifAlephTeX}] +True if Aleph is in use. (The \textsf{aleph}-based \LaTeX\ command is +\textsf{lamed}.) +\item[\cs{iftutex}, \cs{ifTUTeX}] +This is not strictly an engine variant, but it is true if +\verb|\Umathchardef| is available, which essentially means that it is +true for Lua\TeX\ and Xe\TeX, allowing constructs such as +\begin{verbatim} +\iftutex + \usepackage{fontspec} + \setmainfont{TeX Gyre Termes} + \usepackage{unicode-math} + \setmathfont{Stix Two Math} +\else + \usepackage{newtxtext,newtxmath} +\fi +\end{verbatim} + +\end{description} + +\section{Requiring specific engines} +For each supported engine, the package provides a command +\verb|\Require...| which checks that the document is being processed +with a suitable engine, and stops with an error message if not. + +\begin{description} +\item[\cs{RequireeTeX}] +\item[\cs{RequirePDFTeX}] +\item[\cs{RequireXeTeX}] +\item[\cs{RequireLuaTeX}] +\item[\cs{RequireLuaHBTeX}] +\item[\cs{RequirepTeX}] +\item[\cs{RequireupTeX}] +\item[\cs{RequirepTeXng}] +\item[\cs{RequireVTeX}] +\item[\cs{RequireAlephTeX}] +\item[\cs{RequireTUTeX}] +\end{description} + + +\section{Output mode conditional} +This package also provides an \verb|\ifpdf| conditional that is true +if the format is set up to output in PDF mode rather than DVI. This is +equivalent to the test in the existing \textsf{ifpdf} package. + +Unlike the engine tests above this is defined as if by \verb|\newif| +with user-documented commands \verb|\pdftrue| and \verb|\pdffalse| that can +change the boolean value. These would be needed to reset the boolean +if the output mode is reset (for example by setting +\verb|\pdfoutput=0| in PDF\LaTeX). + +Unlike the original \textsf{ifpdf} package, the version here also +detects PDF output mode if running in V\TeX. + +\section{Additional packages} +This extended \textsf{iftex} is designed to replace the original +\textsf{iftex} and also the packages +\textsf{ifetex}, +\textsf{ifluatex}, +\textsf{ifvtex}, +\textsf{ifxetex}, +\textsf{ifpdf}. + +This collection includes small packages with these names that include +the main \textsf{iftex} package, and in some cases define additional +commands for increased compatibility. These packages should mean that +authors do not need to change existing documents, although it is +recommended that new documents use the \textsf{iftex} package +directly. + + +Note that while this package provides basic support for detecting +p\TeX\ (Japanese \TeX) variants and is broadly compatible with the +\textsf{ifptex} package, the \textsf{ifptex} package has many more detailed +tests for p\TeX\ variants and this package does \emph{not} replace the +\textsf{ifptex} (or \textsf{ifxptex}) packages, which are maintained +by their original authors and recommended for Japanese documents that +need fine control over the Japanese \TeX\ system in use. + +\end{document} diff --git a/macros/latex/contrib/iftex/ifvtex.sty b/macros/latex/contrib/iftex/ifvtex.sty new file mode 100644 index 0000000000..109cf1cc09 --- /dev/null +++ b/macros/latex/contrib/iftex/ifvtex.sty @@ -0,0 +1,45 @@ +% Compatibility stub package for ifvtex + +%% LaTeX3 Project +%% +%% 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 later +%% version. + +% The original ifvtex package was written by Heiko Oberdiek + +\ifx\RequirePackage\undefined + \input iftex.sty +\else + \ProvidesPackage{ifvtex}[2019/10/25 v1.7 ifvtex legacy package. Use iftex instead.] + \RequirePackage{iftex} +\fi + + +\IFTEX@let{vtexdvi}{false} +\IFTEX@let{vtexpdf}{false} +\IFTEX@let{vtexps}{false} +\IFTEX@let{vtexhtml}{false} +\IFTEX@let{vtexgex}{false} + +\ifvtex + \ifcase\OpMode\relax + \IFTEX@let{vtexdvi}{true} + \or % 1 + \IFTEX@let{vtexpdf}{true} + \or % 2 + \IFTEX@let{vtexps}{true} + \or % 3 + \IFTEX@let{vtexps}{true} + \or\or\or\or\or\or\or % 10 + \IFTEX@let{vtexhtml}{true} + \fi + \begingroup\expandafter\expandafter\expandafter\endgroup + \expandafter\ifx\csname gexmode\endcsname\relax + \else + \ifnum\gexmode>0 % + \IFTEX@let{vtexgex}{true} + \fi + \fi +\fi diff --git a/macros/latex/contrib/iftex/ifxetex.sty b/macros/latex/contrib/iftex/ifxetex.sty new file mode 100644 index 0000000000..8261ec2671 --- /dev/null +++ b/macros/latex/contrib/iftex/ifxetex.sty @@ -0,0 +1,17 @@ +% Compatibility stub package for ifxetex + +%% LaTeX3 Project +%% +%% 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 later +%% version. + +% The original ifxetex package was written by Will Robertson + +\ifx\RequirePackage\undefined + \input iftex.sty +\else + \ProvidesPackage{ifxetex}[2019/10/25 v0.7 ifxetex legacy package. Use iftex instead.] + \RequirePackage{iftex} +\fi diff --git a/macros/latex/contrib/latino-sine-flexione/README.md b/macros/latex/contrib/latino-sine-flexione/README.md new file mode 100644 index 0000000000..81d6a83336 --- /dev/null +++ b/macros/latex/contrib/latino-sine-flexione/README.md @@ -0,0 +1,35 @@ +# `latino-sine-flexione` + +*package by Victor LEVE granted into public domain* + +## Latin without inflexions + +Latino sine Flexione (or Interlingua) is a language constructed by Giuseppe Peano at the +beginning of the last century. This simplified Latin is designed to be a instrument for +international cooperation, firstly in the academic sphere. + +*Note:* Another Interlingua was created a few decades after Peano's work, the one related +to the `babel-interlingua' package. + +## Package content + +This package provides the necessary translations to use the language within a LaTeX +document. It also imports `fontenc` in order to be able to use ligatures and quotation +marks. + +Finally, it offers a text in Interlingua that can be used as fake text: Fundamento de +intelligentia. This article by H. Bijlsma was first published in *Schola et Vita* Anno I +(1926). + +## Basic use + +```latex +\documentclass{article} +\usepackage{latino-sine-flexione} + +\begin{document} + \section{Verbos} + Verbo <<ama>> de pr\ae{}fatione es mirabile. + \input{fundamento} +\end{document} +``` diff --git a/macros/latex/contrib/latino-sine-flexione/fundamento.tex b/macros/latex/contrib/latino-sine-flexione/fundamento.tex new file mode 100644 index 0000000000..8617d8d0a0 --- /dev/null +++ b/macros/latex/contrib/latino-sine-flexione/fundamento.tex @@ -0,0 +1,135 @@ +Omne qui habe probato ad exprime sentimentos plus profundo et plus delicato jam perveni +consciente aut inconsciente ad dilemma sequente. + +Aut decide se pro illo tanto simplice, quod id pote es expresso logico-harmonico; aut +considera coh\ae{}rentia logico de lingua es inferiore et si necessario immola ad +harmonia plus alto de illo plus reale. In ultimo causa lingua es uso in toto altero modo. + +Hic me dona imagine pro illustratione. Reproductione maximo completo de homocorpore +vivente es automato. Isto corresponde in forma, colore et etiam in motione ad originale. + +Theorico isto es reproductione maximo bono. Sed automato composito maximo artificiale, +maximo ingenioso, maximo complicato et maximo functionante non pote repr\ae{}senta plus +multo quam illo toto simplice. + +Contrario, ad spectatore sensitivo et experimentato aliquo lineas nigro super papyro +candido pote produc plus solido et plus justo effectu de vita. Tamen ignorante pr\ae{}fer +automato, nam isto respira et rota cum oculos \ae{}quale ad homo vivente. Secundum suo +obscrvatione rude isto es coh\ae{}rentia de realitate et pro isto corresponde maximo bono +per coh\ae{}rentia de reproductione. Isto es logico pro illo, contrario creta-lineas +nigro non possido sensu et es illogico. + +Isto imagine es utile, si id es relicto ad tempore. Nos non es habituato ad automatos +pulcro et desiderato. Sed productione de lingua-structura logico-harmonico que +corresponde ad negotios simplice et generale, in que nos debe intercomprehende, habe +importantia grande. + +Discursu ideale es illo mathematico. Move ex axiomas. Introduc solo terminos de valore +determinato et invariabile. Veni inductivo de illo simplice ad illo complicato. Progredi +synthetico, non plus rapido quam affirmatione completo de antecedente tolera. Sed solo in +causas abstracto tale discursu es rigoroso possibile. Introductione de termino concreto +fac que exactitudine fi simulante. + +Termino <<substantia>>, termino <<es>>, <<natura>>, <<comprehende>> non es, et si +abstracto, tam exacto quam terminos <<tres>>, <<simile>>, <<dissimile>>, <<parallelo>>, +<<congruente>>. Tamen illos es plus abstracto, minus concreto et tunc minus reale pro +nostro intellectu quam terminos <<homo>>, <<\ae{}re>>, <<dolore>>, etc. Tunc gradu de +abstractione exsiste. Exemplo de gradu superiore es <<tres>>; de gradu inferiore es +<<dolore>> et solo dolore determinato de persona determinato in istante determinato; +inter isto gradu es: <<realitate>>. Discursu es plus exacto et suo effectu es plus certo, +secundum que suo terminos es minus concreto. + +Illo concreto simula plus reale quam illo abstraoto. Nos concipe que <<libro>> es +exsistente, <<numero>> non. Etiam hic es gradatione. Objcctos materiale simula maximo +reale. Consideratione simplice et analysi de isto conceptione duc nos ad adopta non +objecto sed suo impressione sensuale, psyche-impressione, quam maximo reale. <<Lumine>> +quam impressione es primo realitate, maximo certo, – <<sol>> es conceptione facto ex +observationes. + +Et si nos voca numeros quam objecto, nos cognosce que id non exsiste, si non quam idea. +<<Tres>> es nullo, non pote es <<tres>>, sed pote es tres objecto. Tunc toto mathematica +non applicato es irreale, contra reale. Id es modo de realitate repr\ae{}sentato aut +figurato in nostro cogitatione ab symbolos. Id es systema de relationes in multitudine +(numeros) aut in prolixitate, sed vacuo et impossibile, sine continentia de realitates. +Isto realitates debe es sentimento, nam nos non cognosce altero. In idea de mathematica +nos substitue continentia de unitate (in numero) ficto aut de linea et figura. In +mechanica continentia es <<fortia>>. Nos intellige que isto nonexistente, illo forma, es +minimo fallace, es maximo justo in suo coh\ae{}rentia. + +Et in omne es gradatione. Es limite inter concreto, plus reale, sed minus exacto in +coh\ae{}rentia, et abstracto, irreale, sed exacto et stabile in coh\ae{}rentia. + +Nos non vide limite pr\ae{}ciso et separatione pr\ae{}ciso. + +Simula que concreto junge se evolutivo ad abstracto. Tamen consideratione pr\ae{}ciso +permitte ad nos admitte quo existe puncto ubi abstracto puro obtine continentia concreto. +Omne relatione ipso pote es deducto uno ex alio, initiante ab axioma, absoluto certo, – +sed continentia de relatione in nullo tempore pote es deducto ex relatione. Continentia +de relatione es observatione aut sentimento et pro isto non pote es deducto altero modo. + +Concreto et abstracto es tunc simile duo fluvio, que non conflue, sed es parallelo in +coh\ae{}rentia perpetuo. + +Et coh\ae{}rentia in tale modo que relationes fi plus complicato secundum suo continentia +fi plus concreto. Mathematica de mathematica es maximo simplice, mathematica de maximo +concreto, de emotiones, es infinito complicato. + +Ad isto conditione de res, tam que nos senti id in nos ipso per reflexione, lingua +corresponde per suo reproductione et suo expressione. Lingua curre parallelo ad +situatione de psyche in suo gradus de concreto ad abstracto et illo conveniente. + +Et tale modo que illo maximo abstracto es repr\ae{}sentato per vocabulos maximo +symbolico. + +Quanto res, que nos debe exprime, es plus concreto, tanto plus lingua es sentimento et +sono, non symbolico, imitativo et figurativo. + +Homo pote cogita que isto non apto coh\ae{}re pro nomine de objecto. Non objecto es re +maximo concreto, sed emotione. Et isto es expresso maximo bono per lingua minimo +symbolico, per sono-expressione directo, simplice, per lingua figurativo (p\oe{}si). + +Exclamatione quale <<o>>, <<heu>> – vocabulo quale <<gaudio>>, <<triste>> es minimo +symbolico et significa re maximo concreto. Vocabulo de mathematica es symbolo puro. + +Discursu es plus exacto et suo effectu es plus certo secundum que suo termine es minus +concreto. Tunc lingua-structura es minus fallibile secundum que id repr\ae{}senta notione +plus abstracto. Aut etiam, quanto plus puro symbolico, tanto plus certo lingua es. Lingua +absoluto symbolico, mathematica, es infallibile. + +Et \ae{}quale quanto plus lingua muta de symbolico ad non-symbolico (imitativo, +figurativo) aut expressivo directo, repr\ae{}sentante notione plus abstracto, tanto plus +complicato suo relatione fi. Symbolica et repr\ae{}sentatione in lingua corresponde ad +differentia essentiale, sine limite visibile pr\ae{}ciso inter abstracto et concreto. + +Hic etiam duo fluvio es, de quc limite non pote es percepto pr\ae{}ciso, sed que in nullo +tempore pote conflue. Mathematica es symbolico puro, p\oe{}si es figurativo quasi puro, +philosophia es semi-symbolico, semi-figurativo. + +Noscente que repr\ae{}sentatione symbolico de re solo tolera positivitate et +coh\ae{}rentia perfecto: logica, homo habe probato exprime existente per lingua +symbolico. Tamen isto probationes es omne tempore vano, \ae{}quale quam deduc concreto ex +abstracto. + +Illo duo fluvio curre parallelo, tam in re quam in suo reproductione per lingua. Ergo +lingua es uso in duo modo, que differ essentiale: +\begin{enumerate} + \item in modo symbolico, repr\ae{}sentante relatione et notione abstracto. + \item in modo figurativo, repr\ae{}sentante continentia de relatione, re concreto. +\end{enumerate} + +Omne de isto modo de lingua-usu es independente. Nullo tempore illos pote substitue +reciproco, ce que homo pote exprime per versu illo non pote exprime per discursu, et +viceversa. + +Solo in lingua puro symbolico logica, absoluto es et. poxsibile et necessario. Secundum +que lingua fi plus figurativo, id repr\ae{}senta re plus concreto, possibilitate et +necessitate de relatione exacto logico cessa. + +Etiam re eoncreto es inter se subordinato ad \ae{}quale relatione quam illo abstracto, +sed in eomplicatione infinito. Lingua figurativo non exprime isto relatione. Isto non es +suo potentia nec es in suo intentione. Id vol dona solo repr\ae{}sentatione exacto de +illo concreto, de emotione aut de situatione de psyche, que es perceptibile. Ergo suo +postulato non es logica, sed harmonia pr\ae{}ciso cum situatione psychico. + +Solo mathematica es symbolico puro. Tamen in scientia maximo exacto, in philosophia +maximo abstr\ae{}to lingua es uso occasionale figurativo.
\ No newline at end of file diff --git a/macros/latex/contrib/latino-sine-flexione/latino-sine-flexione.sty b/macros/latex/contrib/latino-sine-flexione/latino-sine-flexione.sty new file mode 100644 index 0000000000..ae136175ce --- /dev/null +++ b/macros/latex/contrib/latino-sine-flexione/latino-sine-flexione.sty @@ -0,0 +1,33 @@ +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{latino-sine-flexione}[2019/10/29 v1.1] +% package by Victor LEVE granted into public domain + +\RequirePackage[T1]{fontenc} % \ae ligature and << >> quotes +\language=\l@latin % Latin hyphenation patterns + +% Names +\def\abstractname{Breviario} +\def\alsoname{vide etiam} +\def\appendixname{Appendice} +\def\bibname{Bibliographia} +\def\chaptername{Capitulo} +\def\contentsname{Indice} +\def\datename{Tempore} +\def\figurename{Summaria} +\def\glossaryname{Glossario} +\def\indexname{Caudece} +\def\listfigurename{Lista de figura} +\def\listtablename{Lista de tabula} +\def\pagename{pagina} +\def\partname{Parte} +\def\prefacename{Pr\ae{}fatione} +\def\proofname{Probatione} +\def\refname{Loco} +\def\seename{vide} +\def\tablename{Tabula} + +% Date format +\RequirePackage{datetime} +\newcommand{\Rom@n}[1]{\uppercase\expandafter{\romannumeral #1\relax}} +\newdateformat{ildate}{\THEDAY.\Rom@n\THEMONTH.\THEYEAR} +\ildate diff --git a/macros/latex/contrib/oberdiek/README.txt b/macros/latex/contrib/oberdiek/README.txt index 81b0691b92..fc9ebb7dc6 100644 --- a/macros/latex/contrib/oberdiek/README.txt +++ b/macros/latex/contrib/oberdiek/README.txt @@ -1,4 +1,4 @@ -README 2019/07/27 +README 2019/10/27 This file describes the directory CTAN:macros/latex/contrib/oberdiek/ diff --git a/macros/latex/contrib/oberdiek/accsupp.pdf b/macros/latex/contrib/oberdiek/accsupp.pdf Binary files differindex ba0bff6bed..2fafe93ebf 100644 --- a/macros/latex/contrib/oberdiek/accsupp.pdf +++ b/macros/latex/contrib/oberdiek/accsupp.pdf diff --git a/macros/latex/contrib/oberdiek/aliascnt.pdf b/macros/latex/contrib/oberdiek/aliascnt.pdf Binary files differindex 58baffc06a..ea53cbd9c8 100644 --- a/macros/latex/contrib/oberdiek/aliascnt.pdf +++ b/macros/latex/contrib/oberdiek/aliascnt.pdf diff --git a/macros/latex/contrib/oberdiek/alphalph.pdf b/macros/latex/contrib/oberdiek/alphalph.pdf Binary files differindex 5536dddd92..f3c64f10c7 100644 --- a/macros/latex/contrib/oberdiek/alphalph.pdf +++ b/macros/latex/contrib/oberdiek/alphalph.pdf diff --git a/macros/latex/contrib/oberdiek/askinclude.pdf b/macros/latex/contrib/oberdiek/askinclude.pdf Binary files differindex 1b4737443e..76406bc1ca 100644 --- a/macros/latex/contrib/oberdiek/askinclude.pdf +++ b/macros/latex/contrib/oberdiek/askinclude.pdf diff --git a/macros/latex/contrib/oberdiek/atbegshi.pdf b/macros/latex/contrib/oberdiek/atbegshi.pdf Binary files differindex 24387f0a05..6d540a13a2 100644 --- a/macros/latex/contrib/oberdiek/atbegshi.pdf +++ b/macros/latex/contrib/oberdiek/atbegshi.pdf diff --git a/macros/latex/contrib/oberdiek/atenddvi.pdf b/macros/latex/contrib/oberdiek/atenddvi.pdf Binary files differindex 9153ed314c..a64cd2b05f 100644 --- a/macros/latex/contrib/oberdiek/atenddvi.pdf +++ b/macros/latex/contrib/oberdiek/atenddvi.pdf diff --git a/macros/latex/contrib/oberdiek/attachfile2.pdf b/macros/latex/contrib/oberdiek/attachfile2.pdf Binary files differindex 78b77f1bb3..9f66589eca 100644 --- a/macros/latex/contrib/oberdiek/attachfile2.pdf +++ b/macros/latex/contrib/oberdiek/attachfile2.pdf diff --git a/macros/latex/contrib/oberdiek/atveryend.pdf b/macros/latex/contrib/oberdiek/atveryend.pdf Binary files differindex a9030f1cff..935a5f8b33 100644 --- a/macros/latex/contrib/oberdiek/atveryend.pdf +++ b/macros/latex/contrib/oberdiek/atveryend.pdf diff --git a/macros/latex/contrib/oberdiek/auxhook.pdf b/macros/latex/contrib/oberdiek/auxhook.pdf Binary files differindex ba21ee3dda..131e1215f7 100644 --- a/macros/latex/contrib/oberdiek/auxhook.pdf +++ b/macros/latex/contrib/oberdiek/auxhook.pdf diff --git a/macros/latex/contrib/oberdiek/bigintcalc.pdf b/macros/latex/contrib/oberdiek/bigintcalc.pdf Binary files differindex a8ac42cd9a..03aa51d29c 100644 --- a/macros/latex/contrib/oberdiek/bigintcalc.pdf +++ b/macros/latex/contrib/oberdiek/bigintcalc.pdf diff --git a/macros/latex/contrib/oberdiek/bitset.pdf b/macros/latex/contrib/oberdiek/bitset.pdf Binary files differindex 012ce76213..f3e94411b2 100644 --- a/macros/latex/contrib/oberdiek/bitset.pdf +++ b/macros/latex/contrib/oberdiek/bitset.pdf diff --git a/macros/latex/contrib/oberdiek/bmpsize.pdf b/macros/latex/contrib/oberdiek/bmpsize.pdf Binary files differindex 7f421cece5..fdb74481a6 100644 --- a/macros/latex/contrib/oberdiek/bmpsize.pdf +++ b/macros/latex/contrib/oberdiek/bmpsize.pdf diff --git a/macros/latex/contrib/oberdiek/bookmark.pdf b/macros/latex/contrib/oberdiek/bookmark.pdf Binary files differindex 96582a6439..c5b7daab81 100644 --- a/macros/latex/contrib/oberdiek/bookmark.pdf +++ b/macros/latex/contrib/oberdiek/bookmark.pdf diff --git a/macros/latex/contrib/oberdiek/catchfile.pdf b/macros/latex/contrib/oberdiek/catchfile.pdf Binary files differindex 0c3aa86546..918c6ef441 100644 --- a/macros/latex/contrib/oberdiek/catchfile.pdf +++ b/macros/latex/contrib/oberdiek/catchfile.pdf diff --git a/macros/latex/contrib/oberdiek/centernot.pdf b/macros/latex/contrib/oberdiek/centernot.pdf Binary files differindex 41893f970b..a5ad10540c 100644 --- a/macros/latex/contrib/oberdiek/centernot.pdf +++ b/macros/latex/contrib/oberdiek/centernot.pdf diff --git a/macros/latex/contrib/oberdiek/chemarr.pdf b/macros/latex/contrib/oberdiek/chemarr.pdf Binary files differindex c944655ad0..14e733fca1 100644 --- a/macros/latex/contrib/oberdiek/chemarr.pdf +++ b/macros/latex/contrib/oberdiek/chemarr.pdf diff --git a/macros/latex/contrib/oberdiek/classlist.pdf b/macros/latex/contrib/oberdiek/classlist.pdf Binary files differindex 5c83122d6b..e4b806aa3b 100644 --- a/macros/latex/contrib/oberdiek/classlist.pdf +++ b/macros/latex/contrib/oberdiek/classlist.pdf diff --git a/macros/latex/contrib/oberdiek/colonequals.pdf b/macros/latex/contrib/oberdiek/colonequals.pdf Binary files differindex aae0491822..bc772a3d3a 100644 --- a/macros/latex/contrib/oberdiek/colonequals.pdf +++ b/macros/latex/contrib/oberdiek/colonequals.pdf diff --git a/macros/latex/contrib/oberdiek/dvipscol.pdf b/macros/latex/contrib/oberdiek/dvipscol.pdf Binary files differindex 0935c2dfdb..4e9e3bbeee 100644 --- a/macros/latex/contrib/oberdiek/dvipscol.pdf +++ b/macros/latex/contrib/oberdiek/dvipscol.pdf diff --git a/macros/latex/contrib/oberdiek/embedfile.pdf b/macros/latex/contrib/oberdiek/embedfile.pdf Binary files differindex 1f3ecc552a..8b8419ef95 100644 --- a/macros/latex/contrib/oberdiek/embedfile.pdf +++ b/macros/latex/contrib/oberdiek/embedfile.pdf diff --git a/macros/latex/contrib/oberdiek/engord.pdf b/macros/latex/contrib/oberdiek/engord.pdf Binary files differindex 25ed642363..1d576e13ca 100644 --- a/macros/latex/contrib/oberdiek/engord.pdf +++ b/macros/latex/contrib/oberdiek/engord.pdf diff --git a/macros/latex/contrib/oberdiek/enparen.pdf b/macros/latex/contrib/oberdiek/enparen.pdf Binary files differindex 0431e37295..55f3a00c5b 100644 --- a/macros/latex/contrib/oberdiek/enparen.pdf +++ b/macros/latex/contrib/oberdiek/enparen.pdf diff --git a/macros/latex/contrib/oberdiek/eolgrab.pdf b/macros/latex/contrib/oberdiek/eolgrab.pdf Binary files differindex b4c96bfadd..804354b817 100644 --- a/macros/latex/contrib/oberdiek/eolgrab.pdf +++ b/macros/latex/contrib/oberdiek/eolgrab.pdf diff --git a/macros/latex/contrib/oberdiek/epstopdf.pdf b/macros/latex/contrib/oberdiek/epstopdf.pdf Binary files differindex c212cc0f3c..f143c75bcb 100644 --- a/macros/latex/contrib/oberdiek/epstopdf.pdf +++ b/macros/latex/contrib/oberdiek/epstopdf.pdf diff --git a/macros/latex/contrib/oberdiek/etexcmds.pdf b/macros/latex/contrib/oberdiek/etexcmds.pdf Binary files differindex c07b06c3b6..e8f135358a 100644 --- a/macros/latex/contrib/oberdiek/etexcmds.pdf +++ b/macros/latex/contrib/oberdiek/etexcmds.pdf diff --git a/macros/latex/contrib/oberdiek/fibnum.pdf b/macros/latex/contrib/oberdiek/fibnum.pdf Binary files differindex a18cb065c1..9fa3dd48ce 100644 --- a/macros/latex/contrib/oberdiek/fibnum.pdf +++ b/macros/latex/contrib/oberdiek/fibnum.pdf diff --git a/macros/latex/contrib/oberdiek/flags.pdf b/macros/latex/contrib/oberdiek/flags.pdf Binary files differindex c62e48402e..9a761de095 100644 --- a/macros/latex/contrib/oberdiek/flags.pdf +++ b/macros/latex/contrib/oberdiek/flags.pdf diff --git a/macros/latex/contrib/oberdiek/gettitlestring.pdf b/macros/latex/contrib/oberdiek/gettitlestring.pdf Binary files differindex 12386486dc..21a9095c06 100644 --- a/macros/latex/contrib/oberdiek/gettitlestring.pdf +++ b/macros/latex/contrib/oberdiek/gettitlestring.pdf diff --git a/macros/latex/contrib/oberdiek/grfext.pdf b/macros/latex/contrib/oberdiek/grfext.pdf Binary files differindex 206ebfdd53..18ba2c1d43 100644 --- a/macros/latex/contrib/oberdiek/grfext.pdf +++ b/macros/latex/contrib/oberdiek/grfext.pdf diff --git a/macros/latex/contrib/oberdiek/grffile.pdf b/macros/latex/contrib/oberdiek/grffile.pdf Binary files differindex e2b71da6e6..e452b48cb1 100644 --- a/macros/latex/contrib/oberdiek/grffile.pdf +++ b/macros/latex/contrib/oberdiek/grffile.pdf diff --git a/macros/latex/contrib/oberdiek/hobsub-generic.sty b/macros/latex/contrib/oberdiek/hobsub-generic.sty new file mode 100644 index 0000000000..1d7fe1745d --- /dev/null +++ b/macros/latex/contrib/oberdiek/hobsub-generic.sty @@ -0,0 +1,12 @@ +\ifx\ProvidesPackage\undefined\else +\ProvidesPackage{hobsub-generic}[2019/10/27] +\fi +\wlog{hobsub not currently supported, see hobsub.dtx to extract original code} +\RequirePackage{infwarerr}[2007/09/09]% +\RequirePackage{iftex}[2010/03/01]% +\RequirePackage{etexcmds}[2010/01/28]% +\RequirePackage{ltxcmds}[2010/03/01]% +%\RequirePackage{luatex-loader}[2009/04/10]% +\RequirePackage{pdftexcmds}[2007/11/11]% +\RequirePackage{intcalc}[2007/09/27]% +\RequirePackage{bigintcalc}[2007/09/27]% diff --git a/macros/latex/contrib/oberdiek/hobsub-hyperref.sty b/macros/latex/contrib/oberdiek/hobsub-hyperref.sty new file mode 100644 index 0000000000..7c9f0605a0 --- /dev/null +++ b/macros/latex/contrib/oberdiek/hobsub-hyperref.sty @@ -0,0 +1,15 @@ +\ifx\ProvidesPackage\undefined\else +\ProvidesPackage{hobsub-hyperref}[2019/10/27] +\fi +\wlog{hobsub not currently supported, see hobsub.dtx to extract original code} +\RequirePackage{ltxcmds} +\RequirePackage{ifvtex} +\RequirePackage{pdftexcmds} +\RequirePackage{infwarerr} +\RequirePackage{keyval} +\RequirePackage{kvsetkeys} +\RequirePackage{kvdefinekeys} +\RequirePackage{pdfescape} +\RequirePackage{hycolor} +\RequirePackage{letltxmacro} +\RequirePackage{auxhook} diff --git a/macros/latex/contrib/oberdiek/hobsub.pdf b/macros/latex/contrib/oberdiek/hobsub.pdf Binary files differdeleted file mode 100644 index 8ea8176611..0000000000 --- a/macros/latex/contrib/oberdiek/hobsub.pdf +++ /dev/null diff --git a/macros/latex/contrib/oberdiek/hobsub.sty b/macros/latex/contrib/oberdiek/hobsub.sty new file mode 100644 index 0000000000..ebfde8efe0 --- /dev/null +++ b/macros/latex/contrib/oberdiek/hobsub.sty @@ -0,0 +1,5 @@ +\ifx\ProvidesPackage\undefined\else +\ProvidesPackage{hobsub}[2019/10/27] +\fi + +\wlog{hobsub not currently supported, see hobsub.dtx to extract original code} diff --git a/macros/latex/contrib/oberdiek/hologo.pdf b/macros/latex/contrib/oberdiek/hologo.pdf Binary files differindex 266f19fc2d..68e1643be8 100644 --- a/macros/latex/contrib/oberdiek/hologo.pdf +++ b/macros/latex/contrib/oberdiek/hologo.pdf diff --git a/macros/latex/contrib/oberdiek/holtxdoc.pdf b/macros/latex/contrib/oberdiek/holtxdoc.pdf Binary files differindex 0424029a50..f54af83816 100644 --- a/macros/latex/contrib/oberdiek/holtxdoc.pdf +++ b/macros/latex/contrib/oberdiek/holtxdoc.pdf diff --git a/macros/latex/contrib/oberdiek/hopatch.pdf b/macros/latex/contrib/oberdiek/hopatch.pdf Binary files differindex 22d5e7da4a..8f5363796c 100644 --- a/macros/latex/contrib/oberdiek/hopatch.pdf +++ b/macros/latex/contrib/oberdiek/hopatch.pdf diff --git a/macros/latex/contrib/oberdiek/hycolor.pdf b/macros/latex/contrib/oberdiek/hycolor.pdf Binary files differindex 46abb25d78..054413d720 100644 --- a/macros/latex/contrib/oberdiek/hycolor.pdf +++ b/macros/latex/contrib/oberdiek/hycolor.pdf diff --git a/macros/latex/contrib/oberdiek/hypbmsec.pdf b/macros/latex/contrib/oberdiek/hypbmsec.pdf Binary files differindex 8609621495..ef47ef3a2a 100644 --- a/macros/latex/contrib/oberdiek/hypbmsec.pdf +++ b/macros/latex/contrib/oberdiek/hypbmsec.pdf diff --git a/macros/latex/contrib/oberdiek/hypcap.pdf b/macros/latex/contrib/oberdiek/hypcap.pdf Binary files differindex a808d866f1..a79e9266ae 100644 --- a/macros/latex/contrib/oberdiek/hypcap.pdf +++ b/macros/latex/contrib/oberdiek/hypcap.pdf diff --git a/macros/latex/contrib/oberdiek/hypdestopt.pdf b/macros/latex/contrib/oberdiek/hypdestopt.pdf Binary files differindex 1b60bc674c..4691594a16 100644 --- a/macros/latex/contrib/oberdiek/hypdestopt.pdf +++ b/macros/latex/contrib/oberdiek/hypdestopt.pdf diff --git a/macros/latex/contrib/oberdiek/hypdoc.pdf b/macros/latex/contrib/oberdiek/hypdoc.pdf Binary files differindex 7d06e32171..0fb938f0a4 100644 --- a/macros/latex/contrib/oberdiek/hypdoc.pdf +++ b/macros/latex/contrib/oberdiek/hypdoc.pdf diff --git a/macros/latex/contrib/oberdiek/hypgotoe.pdf b/macros/latex/contrib/oberdiek/hypgotoe.pdf Binary files differindex f517c6f9ba..5d8caea846 100644 --- a/macros/latex/contrib/oberdiek/hypgotoe.pdf +++ b/macros/latex/contrib/oberdiek/hypgotoe.pdf diff --git a/macros/latex/contrib/oberdiek/hyphsubst.pdf b/macros/latex/contrib/oberdiek/hyphsubst.pdf Binary files differindex 1f9a91fb36..6af7871793 100644 --- a/macros/latex/contrib/oberdiek/hyphsubst.pdf +++ b/macros/latex/contrib/oberdiek/hyphsubst.pdf diff --git a/macros/latex/contrib/oberdiek/ifdraft.pdf b/macros/latex/contrib/oberdiek/ifdraft.pdf Binary files differindex 3b1f991991..cf347fbbc9 100644 --- a/macros/latex/contrib/oberdiek/ifdraft.pdf +++ b/macros/latex/contrib/oberdiek/ifdraft.pdf diff --git a/macros/latex/contrib/oberdiek/iflang.pdf b/macros/latex/contrib/oberdiek/iflang.pdf Binary files differindex b334edf0c2..ce8d1cb846 100644 --- a/macros/latex/contrib/oberdiek/iflang.pdf +++ b/macros/latex/contrib/oberdiek/iflang.pdf diff --git a/macros/latex/contrib/oberdiek/ifluatex.pdf b/macros/latex/contrib/oberdiek/ifluatex.pdf Binary files differdeleted file mode 100644 index fbf1f7d0c5..0000000000 --- a/macros/latex/contrib/oberdiek/ifluatex.pdf +++ /dev/null diff --git a/macros/latex/contrib/oberdiek/ifpdf.pdf b/macros/latex/contrib/oberdiek/ifpdf.pdf Binary files differdeleted file mode 100644 index affb115e14..0000000000 --- a/macros/latex/contrib/oberdiek/ifpdf.pdf +++ /dev/null diff --git a/macros/latex/contrib/oberdiek/ifvtex.pdf b/macros/latex/contrib/oberdiek/ifvtex.pdf Binary files differdeleted file mode 100644 index 140b966b12..0000000000 --- a/macros/latex/contrib/oberdiek/ifvtex.pdf +++ /dev/null diff --git a/macros/latex/contrib/oberdiek/infwarerr.pdf b/macros/latex/contrib/oberdiek/infwarerr.pdf Binary files differindex e61e4971f9..18ec7a6133 100644 --- a/macros/latex/contrib/oberdiek/infwarerr.pdf +++ b/macros/latex/contrib/oberdiek/infwarerr.pdf diff --git a/macros/latex/contrib/oberdiek/inputenx.pdf b/macros/latex/contrib/oberdiek/inputenx.pdf Binary files differindex a2b7ba8475..50c77eb19a 100644 --- a/macros/latex/contrib/oberdiek/inputenx.pdf +++ b/macros/latex/contrib/oberdiek/inputenx.pdf diff --git a/macros/latex/contrib/oberdiek/intcalc.pdf b/macros/latex/contrib/oberdiek/intcalc.pdf Binary files differindex 65d448bfbf..16ca359f50 100644 --- a/macros/latex/contrib/oberdiek/intcalc.pdf +++ b/macros/latex/contrib/oberdiek/intcalc.pdf diff --git a/macros/latex/contrib/oberdiek/kvdefinekeys.pdf b/macros/latex/contrib/oberdiek/kvdefinekeys.pdf Binary files differindex a54a7b0544..063cac531d 100644 --- a/macros/latex/contrib/oberdiek/kvdefinekeys.pdf +++ b/macros/latex/contrib/oberdiek/kvdefinekeys.pdf diff --git a/macros/latex/contrib/oberdiek/kvoptions.pdf b/macros/latex/contrib/oberdiek/kvoptions.pdf Binary files differindex 8b444640d3..b827a8c735 100644 --- a/macros/latex/contrib/oberdiek/kvoptions.pdf +++ b/macros/latex/contrib/oberdiek/kvoptions.pdf diff --git a/macros/latex/contrib/oberdiek/kvsetkeys.pdf b/macros/latex/contrib/oberdiek/kvsetkeys.pdf Binary files differindex 4689b89669..a1ed6868f5 100644 --- a/macros/latex/contrib/oberdiek/kvsetkeys.pdf +++ b/macros/latex/contrib/oberdiek/kvsetkeys.pdf diff --git a/macros/latex/contrib/oberdiek/letltxmacro.pdf b/macros/latex/contrib/oberdiek/letltxmacro.pdf Binary files differindex 7ed1f55b34..e94e7a491d 100644 --- a/macros/latex/contrib/oberdiek/letltxmacro.pdf +++ b/macros/latex/contrib/oberdiek/letltxmacro.pdf diff --git a/macros/latex/contrib/oberdiek/listingsutf8.pdf b/macros/latex/contrib/oberdiek/listingsutf8.pdf Binary files differindex 01caba1aca..503e1c272a 100644 --- a/macros/latex/contrib/oberdiek/listingsutf8.pdf +++ b/macros/latex/contrib/oberdiek/listingsutf8.pdf diff --git a/macros/latex/contrib/oberdiek/ltxcmds.pdf b/macros/latex/contrib/oberdiek/ltxcmds.pdf Binary files differindex bf2f6678b9..0c7c1f40d6 100644 --- a/macros/latex/contrib/oberdiek/ltxcmds.pdf +++ b/macros/latex/contrib/oberdiek/ltxcmds.pdf diff --git a/macros/latex/contrib/oberdiek/luacolor.pdf b/macros/latex/contrib/oberdiek/luacolor.pdf Binary files differindex 006f0d2e99..0ae5e79378 100644 --- a/macros/latex/contrib/oberdiek/luacolor.pdf +++ b/macros/latex/contrib/oberdiek/luacolor.pdf diff --git a/macros/latex/contrib/oberdiek/luatex.pdf b/macros/latex/contrib/oberdiek/luatex.pdf Binary files differindex 8316f3e950..1f93caf646 100644 --- a/macros/latex/contrib/oberdiek/luatex.pdf +++ b/macros/latex/contrib/oberdiek/luatex.pdf diff --git a/macros/latex/contrib/oberdiek/magicnum.pdf b/macros/latex/contrib/oberdiek/magicnum.pdf Binary files differindex 692defe8ab..8a9f1b7c9f 100644 --- a/macros/latex/contrib/oberdiek/magicnum.pdf +++ b/macros/latex/contrib/oberdiek/magicnum.pdf diff --git a/macros/latex/contrib/oberdiek/makerobust.pdf b/macros/latex/contrib/oberdiek/makerobust.pdf Binary files differindex c78a449ac2..484857b374 100644 --- a/macros/latex/contrib/oberdiek/makerobust.pdf +++ b/macros/latex/contrib/oberdiek/makerobust.pdf diff --git a/macros/latex/contrib/oberdiek/mleftright.pdf b/macros/latex/contrib/oberdiek/mleftright.pdf Binary files differindex a6d21046e7..8e367535f7 100644 --- a/macros/latex/contrib/oberdiek/mleftright.pdf +++ b/macros/latex/contrib/oberdiek/mleftright.pdf diff --git a/macros/latex/contrib/oberdiek/oberdiek.pdf b/macros/latex/contrib/oberdiek/oberdiek.pdf Binary files differindex 5831c69462..cd58b4b51f 100644 --- a/macros/latex/contrib/oberdiek/oberdiek.pdf +++ b/macros/latex/contrib/oberdiek/oberdiek.pdf diff --git a/macros/latex/contrib/oberdiek/oberdiek.tex b/macros/latex/contrib/oberdiek/oberdiek.tex index f8e9fc10f9..6bbe77ea0f 100644 --- a/macros/latex/contrib/oberdiek/oberdiek.tex +++ b/macros/latex/contrib/oberdiek/oberdiek.tex @@ -6,10 +6,12 @@ \newcommand*{\Subject}{CTAN:\CTANdir} \newcommand*{\Author}{Heiko Oberdiek} \newcommand*{\Email}{ho-tex at tug.org} -\newcommand*{\Date}{2019/07/27} +\newcommand*{\Date}{2019/10/27} -% Copyright (C) 2006-2019 by -% Heiko Oberdiek <heiko.oberdiek at googlemail.com> +% Copyright (C) 2006-2016 by +% Heiko Oberdiek +% Copyright (C) 2016-2019 by +% Oberdiek Package Support Group % % This work may be distributed and/or modified under the % conditions of the LaTeX Project Public License, either @@ -21,7 +23,7 @@ % % This work has the LPPL maintenance status "maintained". % -% This Current Maintainer of this work is Heiko Oberdiek. +% This Current Maintainer of this work is the Oberdiek Package Support Group. % % This work consists of the overview "oberdiek.pdf", its source % "oberdiek.tex", and the installation script "oberdiek.ins" @@ -259,12 +261,12 @@ [\entrysep] \entry{iflang}{2007/11/11}{1.5}{Checks for the current language}% [\entrysep] -\entry{ifluatex}{2010/03/01}{1.3}{Provides the ifluatex switch}% -[\entrysep] -\entry{ifpdf}{2011/01/30}{2.3}{Provides the ifpdf switch}% -[\entrysep] -\entry{ifvtex}{2010/03/01}{1.5}{Detect \hologo{VTeX} and its facilities}% -[\entrysep] +% iftex distribution \entry{ifluatex}{2010/03/01}{1.3}{Provides the ifluatex switch}% +% iftex distribution [\entrysep] +% iftex distribution \entry{ifpdf}{2011/01/30}{2.3}{Provides the ifpdf switch}% +% iftex distribution [\entrysep] +% iftex distribution \entry{ifvtex}{2010/03/01}{1.5}{Detect \hologo{VTeX} and its facilities}% +% iftex distribution [\entrysep] \entry{infwarerr}{2010/04/08}{1.3}{Providing info/warning/error messages}% [\entrysep] \entry{inputenx}{2011/05/27}{1.10}{Enhanced input encoding handling}% @@ -684,7 +686,7 @@ contain spaces. Package \xpackage{hobsub} implements the idea of loading several packages in one big collection package. \end{abstract} -\tocinclude{hobsub} +%\tocinclude{hobsub} \newpage \subsection{\pkgsectformat{hologo}} @@ -819,7 +821,7 @@ and provides the switch \cs{ifluatex}. Also it makes \cs{luatexversion} available if it is not present. It works with \plainTeX\ or \LaTeX. \end{abstract} -\tocinclude{ifluatex} +%\tocinclude{ifluatex} \newpage \subsection{\pkgsectformat{ifpdf}} @@ -831,7 +833,7 @@ The detection is based on \cs{pdfoutput} and the package will not change this value. It works with plain or \LaTeX\ formats. \end{abstract} -\tocinclude{ifpdf} +%\tocinclude{ifpdf} \newpage \subsection{\pkgsectformat{ifvtex}} @@ -841,7 +843,7 @@ This package looks for \VTeX, implements and sets the switches \cs{ifvtex}, \cs{ifvtex}\texttt{\meta{mode}}, \cs{ifvtexgex}. It works with plain or \LaTeX\ formats. \end{abstract} -\tocinclude{ifvtex} +%\tocinclude{ifvtex} \newpage \subsection{\pkgsectformat{infwarerr}} diff --git a/macros/latex/contrib/oberdiek/pagegrid.pdf b/macros/latex/contrib/oberdiek/pagegrid.pdf Binary files differindex bcb35b5bf6..2f845ddf9f 100644 --- a/macros/latex/contrib/oberdiek/pagegrid.pdf +++ b/macros/latex/contrib/oberdiek/pagegrid.pdf diff --git a/macros/latex/contrib/oberdiek/pagesel.pdf b/macros/latex/contrib/oberdiek/pagesel.pdf Binary files differindex 1dad4b4c4e..a247a6ad2c 100644 --- a/macros/latex/contrib/oberdiek/pagesel.pdf +++ b/macros/latex/contrib/oberdiek/pagesel.pdf diff --git a/macros/latex/contrib/oberdiek/pdfcol.pdf b/macros/latex/contrib/oberdiek/pdfcol.pdf Binary files differindex a2f6c7b06e..aa82e74d1a 100644 --- a/macros/latex/contrib/oberdiek/pdfcol.pdf +++ b/macros/latex/contrib/oberdiek/pdfcol.pdf diff --git a/macros/latex/contrib/oberdiek/pdfcolfoot.pdf b/macros/latex/contrib/oberdiek/pdfcolfoot.pdf Binary files differindex f864e6772d..f4cab198c1 100644 --- a/macros/latex/contrib/oberdiek/pdfcolfoot.pdf +++ b/macros/latex/contrib/oberdiek/pdfcolfoot.pdf diff --git a/macros/latex/contrib/oberdiek/pdfcolmk.pdf b/macros/latex/contrib/oberdiek/pdfcolmk.pdf Binary files differindex 8c67c3d1f7..859eed59f4 100644 --- a/macros/latex/contrib/oberdiek/pdfcolmk.pdf +++ b/macros/latex/contrib/oberdiek/pdfcolmk.pdf diff --git a/macros/latex/contrib/oberdiek/pdfcolparallel.pdf b/macros/latex/contrib/oberdiek/pdfcolparallel.pdf Binary files differindex bbadf02f10..d31ed95e9a 100644 --- a/macros/latex/contrib/oberdiek/pdfcolparallel.pdf +++ b/macros/latex/contrib/oberdiek/pdfcolparallel.pdf diff --git a/macros/latex/contrib/oberdiek/pdfcolparcolumns.pdf b/macros/latex/contrib/oberdiek/pdfcolparcolumns.pdf Binary files differindex a05da4f901..558a997044 100644 --- a/macros/latex/contrib/oberdiek/pdfcolparcolumns.pdf +++ b/macros/latex/contrib/oberdiek/pdfcolparcolumns.pdf diff --git a/macros/latex/contrib/oberdiek/pdfcrypt.pdf b/macros/latex/contrib/oberdiek/pdfcrypt.pdf Binary files differindex a4dd1bb092..1b9c41b643 100644 --- a/macros/latex/contrib/oberdiek/pdfcrypt.pdf +++ b/macros/latex/contrib/oberdiek/pdfcrypt.pdf diff --git a/macros/latex/contrib/oberdiek/pdfescape.pdf b/macros/latex/contrib/oberdiek/pdfescape.pdf Binary files differindex d4bb60e010..a14d364eb3 100644 --- a/macros/latex/contrib/oberdiek/pdfescape.pdf +++ b/macros/latex/contrib/oberdiek/pdfescape.pdf diff --git a/macros/latex/contrib/oberdiek/pdflscape.pdf b/macros/latex/contrib/oberdiek/pdflscape.pdf Binary files differindex bfe81e27c1..ef82411004 100644 --- a/macros/latex/contrib/oberdiek/pdflscape.pdf +++ b/macros/latex/contrib/oberdiek/pdflscape.pdf diff --git a/macros/latex/contrib/oberdiek/pdfrender.pdf b/macros/latex/contrib/oberdiek/pdfrender.pdf Binary files differindex 5ff26fc0f6..f77fdd7120 100644 --- a/macros/latex/contrib/oberdiek/pdfrender.pdf +++ b/macros/latex/contrib/oberdiek/pdfrender.pdf diff --git a/macros/latex/contrib/oberdiek/pdftexcmds.pdf b/macros/latex/contrib/oberdiek/pdftexcmds.pdf Binary files differindex 7d1378275b..d9d964016d 100644 --- a/macros/latex/contrib/oberdiek/pdftexcmds.pdf +++ b/macros/latex/contrib/oberdiek/pdftexcmds.pdf diff --git a/macros/latex/contrib/oberdiek/picture.pdf b/macros/latex/contrib/oberdiek/picture.pdf Binary files differindex 99161807ef..8c62cad509 100644 --- a/macros/latex/contrib/oberdiek/picture.pdf +++ b/macros/latex/contrib/oberdiek/picture.pdf diff --git a/macros/latex/contrib/oberdiek/pmboxdraw.pdf b/macros/latex/contrib/oberdiek/pmboxdraw.pdf Binary files differindex 7307f590ad..a4da4b9e0e 100644 --- a/macros/latex/contrib/oberdiek/pmboxdraw.pdf +++ b/macros/latex/contrib/oberdiek/pmboxdraw.pdf diff --git a/macros/latex/contrib/oberdiek/protecteddef.pdf b/macros/latex/contrib/oberdiek/protecteddef.pdf Binary files differindex bddf7cdf1c..c637a25d7a 100644 --- a/macros/latex/contrib/oberdiek/protecteddef.pdf +++ b/macros/latex/contrib/oberdiek/protecteddef.pdf diff --git a/macros/latex/contrib/oberdiek/refcount.pdf b/macros/latex/contrib/oberdiek/refcount.pdf Binary files differindex 6efc8d360a..8ce2c9878e 100644 --- a/macros/latex/contrib/oberdiek/refcount.pdf +++ b/macros/latex/contrib/oberdiek/refcount.pdf diff --git a/macros/latex/contrib/oberdiek/rerunfilecheck.pdf b/macros/latex/contrib/oberdiek/rerunfilecheck.pdf Binary files differindex b92f959320..a59d24e407 100644 --- a/macros/latex/contrib/oberdiek/rerunfilecheck.pdf +++ b/macros/latex/contrib/oberdiek/rerunfilecheck.pdf diff --git a/macros/latex/contrib/oberdiek/resizegather.pdf b/macros/latex/contrib/oberdiek/resizegather.pdf Binary files differindex 5095ae202b..94dc693df5 100644 --- a/macros/latex/contrib/oberdiek/resizegather.pdf +++ b/macros/latex/contrib/oberdiek/resizegather.pdf diff --git a/macros/latex/contrib/oberdiek/rotchiffre.pdf b/macros/latex/contrib/oberdiek/rotchiffre.pdf Binary files differindex 28a7c33fe7..86f4b206a8 100644 --- a/macros/latex/contrib/oberdiek/rotchiffre.pdf +++ b/macros/latex/contrib/oberdiek/rotchiffre.pdf diff --git a/macros/latex/contrib/oberdiek/scrindex.pdf b/macros/latex/contrib/oberdiek/scrindex.pdf Binary files differindex b12323a8e9..34cfd41ce8 100644 --- a/macros/latex/contrib/oberdiek/scrindex.pdf +++ b/macros/latex/contrib/oberdiek/scrindex.pdf diff --git a/macros/latex/contrib/oberdiek/selinput.pdf b/macros/latex/contrib/oberdiek/selinput.pdf Binary files differindex 5e4f05ad72..3506a5da2c 100644 --- a/macros/latex/contrib/oberdiek/selinput.pdf +++ b/macros/latex/contrib/oberdiek/selinput.pdf diff --git a/macros/latex/contrib/oberdiek/setouterhbox.pdf b/macros/latex/contrib/oberdiek/setouterhbox.pdf Binary files differindex f765ad1460..c8f62abb68 100644 --- a/macros/latex/contrib/oberdiek/setouterhbox.pdf +++ b/macros/latex/contrib/oberdiek/setouterhbox.pdf diff --git a/macros/latex/contrib/oberdiek/settobox.pdf b/macros/latex/contrib/oberdiek/settobox.pdf Binary files differindex 6b867bd670..06a7e1a9a6 100644 --- a/macros/latex/contrib/oberdiek/settobox.pdf +++ b/macros/latex/contrib/oberdiek/settobox.pdf diff --git a/macros/latex/contrib/oberdiek/soulutf8.pdf b/macros/latex/contrib/oberdiek/soulutf8.pdf Binary files differindex cc93e0d6e4..cae9a515f8 100644 --- a/macros/latex/contrib/oberdiek/soulutf8.pdf +++ b/macros/latex/contrib/oberdiek/soulutf8.pdf diff --git a/macros/latex/contrib/oberdiek/stackrel.pdf b/macros/latex/contrib/oberdiek/stackrel.pdf Binary files differindex 89aba3dcfe..bc273d49bf 100644 --- a/macros/latex/contrib/oberdiek/stackrel.pdf +++ b/macros/latex/contrib/oberdiek/stackrel.pdf diff --git a/macros/latex/contrib/oberdiek/stampinclude.pdf b/macros/latex/contrib/oberdiek/stampinclude.pdf Binary files differindex b1538ef370..8dae0668a7 100644 --- a/macros/latex/contrib/oberdiek/stampinclude.pdf +++ b/macros/latex/contrib/oberdiek/stampinclude.pdf diff --git a/macros/latex/contrib/oberdiek/stringenc.pdf b/macros/latex/contrib/oberdiek/stringenc.pdf Binary files differindex fe3a514a3a..54994c5987 100644 --- a/macros/latex/contrib/oberdiek/stringenc.pdf +++ b/macros/latex/contrib/oberdiek/stringenc.pdf diff --git a/macros/latex/contrib/oberdiek/tabularht.pdf b/macros/latex/contrib/oberdiek/tabularht.pdf Binary files differindex 735e232943..f8dac8015d 100644 --- a/macros/latex/contrib/oberdiek/tabularht.pdf +++ b/macros/latex/contrib/oberdiek/tabularht.pdf diff --git a/macros/latex/contrib/oberdiek/tabularkv.pdf b/macros/latex/contrib/oberdiek/tabularkv.pdf Binary files differindex ddeccda367..a5b3cf8274 100644 --- a/macros/latex/contrib/oberdiek/tabularkv.pdf +++ b/macros/latex/contrib/oberdiek/tabularkv.pdf diff --git a/macros/latex/contrib/oberdiek/telprint.pdf b/macros/latex/contrib/oberdiek/telprint.pdf Binary files differindex ef672a83da..2118aefb13 100644 --- a/macros/latex/contrib/oberdiek/telprint.pdf +++ b/macros/latex/contrib/oberdiek/telprint.pdf diff --git a/macros/latex/contrib/oberdiek/thepdfnumber.pdf b/macros/latex/contrib/oberdiek/thepdfnumber.pdf Binary files differindex 2c470d72d7..59b9cff048 100644 --- a/macros/latex/contrib/oberdiek/thepdfnumber.pdf +++ b/macros/latex/contrib/oberdiek/thepdfnumber.pdf diff --git a/macros/latex/contrib/oberdiek/transparent.pdf b/macros/latex/contrib/oberdiek/transparent.pdf Binary files differindex cb0c1cc1aa..a68061ef50 100644 --- a/macros/latex/contrib/oberdiek/transparent.pdf +++ b/macros/latex/contrib/oberdiek/transparent.pdf diff --git a/macros/latex/contrib/oberdiek/twoopt.pdf b/macros/latex/contrib/oberdiek/twoopt.pdf Binary files differindex 11c8cc9ae2..497720b914 100644 --- a/macros/latex/contrib/oberdiek/twoopt.pdf +++ b/macros/latex/contrib/oberdiek/twoopt.pdf diff --git a/macros/latex/contrib/oberdiek/uniquecounter.pdf b/macros/latex/contrib/oberdiek/uniquecounter.pdf Binary files differindex 560ffbbdeb..2a2d61fe3a 100644 --- a/macros/latex/contrib/oberdiek/uniquecounter.pdf +++ b/macros/latex/contrib/oberdiek/uniquecounter.pdf diff --git a/macros/latex/contrib/oberdiek/zref.pdf b/macros/latex/contrib/oberdiek/zref.pdf Binary files differindex 9b7598d5a7..724b9fc08b 100644 --- a/macros/latex/contrib/oberdiek/zref.pdf +++ b/macros/latex/contrib/oberdiek/zref.pdf diff --git a/macros/latex/contrib/pseudo/Makefile b/macros/latex/contrib/pseudo/Makefile index 388a7bea2f..0541b20e49 100644 --- a/macros/latex/contrib/pseudo/Makefile +++ b/macros/latex/contrib/pseudo/Makefile @@ -2,13 +2,14 @@ TARGETS=doc/pseudo.pdf doc/fig/readmefig.svg LATEX=latexmk -norc -pdf -auxdir=build -outdir=build FIGS=build/hilitefig.pdf build/pausefig.pdf build/kwfig.pdf +TESTS=build/pseudotest.pdf all: $(TARGETS) doc/pseudo.pdf: build/pseudo.pdf cp $< $@ -build/pseudo.pdf: doc/pseudo.tex build/pseudo.bib $(FIGS) README.md +build/pseudo.pdf: doc/pseudo.tex build/pseudo.bib $(FIGS) $(TESTS) README.md pseudo.sty $(LATEX) $< build/pseudo.bib: doc/pseudo.bib @@ -23,6 +24,9 @@ build/pausefig.pdf: doc/fig/pausefig.tex pseudo.sty build/kwfig.pdf: doc/fig/kwfig.tex pseudo.sty $(LATEX) $< +build/pseudotest.pdf: test/pseudotest.tex pseudo.sty + $(LATEX) $< + pseudo.sty: VERSION LICENSE doc/pseudo.tex cat LICENSE | sed -e "s/^/% /" | sed -e "s/^% \$$/%/" > pseudo.sty echo "%" >> pseudo.sty @@ -33,7 +37,7 @@ pseudo.sty: VERSION LICENSE doc/pseudo.tex -e "s/_@@/__pseudo/g" \ -e "s/@@/__pseudo/g" \ -e "s/VERSION/$$(cat VERSION)/g" \ - -e "s/DATE/$$(date +"%Y-%m-%d")/g" \ + -e "s/DATE/$$(date +"%Y\/%m\/%d")/g" \ -e "s/[ ]*%.*\$$//" \ -e "/^\$$/d" \ -e "p" \ diff --git a/macros/latex/contrib/pseudo/VERSION b/macros/latex/contrib/pseudo/VERSION index 45a1b3f445..781dcb07cd 100644 --- a/macros/latex/contrib/pseudo/VERSION +++ b/macros/latex/contrib/pseudo/VERSION @@ -1 +1 @@ -1.1.2 +1.1.3 diff --git a/macros/latex/contrib/pseudo/doc/fig/readmefig.svg b/macros/latex/contrib/pseudo/doc/fig/readmefig.svg index 0fc3a645a3..6070ef987b 100644 --- a/macros/latex/contrib/pseudo/doc/fig/readmefig.svg +++ b/macros/latex/contrib/pseudo/doc/fig/readmefig.svg @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="249.005pt" height="144.458pt" viewBox="0 0 249.005 144.458" version="1.1"> +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="249.212pt" height="144.458pt" viewBox="0 0 249.212 144.458" version="1.1"> <defs> <g> <symbol overflow="visible" id="glyph0-0"> @@ -233,80 +233,80 @@ <use xlink:href="#glyph1-6" x="0.000000000000035527" y="66.81125"/> </g> <g style="fill:rgb(0%,0%,0%);fill-opacity:1;"> - <use xlink:href="#glyph4-4" x="47.16125" y="66.81125"/> - <use xlink:href="#glyph4-1" x="51.312693" y="66.81125"/> + <use xlink:href="#glyph4-4" x="47.265" y="66.81125"/> + <use xlink:href="#glyph4-1" x="51.416443" y="66.81125"/> </g> <g style="fill:rgb(0%,0%,0%);fill-opacity:1;"> - <use xlink:href="#glyph1-7" x="60.86" y="66.81125"/> + <use xlink:href="#glyph1-7" x="60.96375" y="66.81125"/> </g> <g style="fill:rgb(0%,0%,0%);fill-opacity:1;"> - <use xlink:href="#glyph2-8" x="72.3275" y="66.81125"/> + <use xlink:href="#glyph2-8" x="72.43125" y="66.81125"/> </g> <g style="fill:rgb(0%,0%,0%);fill-opacity:1;"> - <use xlink:href="#glyph2-4" x="87.863282" y="66.81125"/> + <use xlink:href="#glyph2-4" x="87.967032" y="66.81125"/> </g> <g style="fill:rgb(0%,0%,0%);fill-opacity:1;"> - <use xlink:href="#glyph2-6" x="95.475756" y="66.81125"/> + <use xlink:href="#glyph2-6" x="95.579506" y="66.81125"/> </g> <g style="fill:rgb(0%,0%,0%);fill-opacity:1;"> - <use xlink:href="#glyph3-1" x="99.53375" y="66.81125"/> - <use xlink:href="#glyph3-2" x="103.26975" y="66.81125"/> - <use xlink:href="#glyph3-3" x="110.74175" y="66.81125"/> + <use xlink:href="#glyph3-1" x="99.6375" y="66.81125"/> + <use xlink:href="#glyph3-2" x="103.3735" y="66.81125"/> + <use xlink:href="#glyph3-3" x="110.8455" y="66.81125"/> </g> <g style="fill:rgb(0%,0%,0%);fill-opacity:1;"> - <use xlink:href="#glyph3-4" x="116.71935" y="66.81125"/> - <use xlink:href="#glyph3-1" x="123.44415" y="66.81125"/> + <use xlink:href="#glyph3-4" x="116.8231" y="66.81125"/> + <use xlink:href="#glyph3-1" x="123.5479" y="66.81125"/> </g> <g style="fill:rgb(0%,0%,0%);fill-opacity:1;"> - <use xlink:href="#glyph2-8" x="132.88125" y="66.81125"/> + <use xlink:href="#glyph2-8" x="132.985" y="66.81125"/> </g> <g style="fill:rgb(0%,0%,0%);fill-opacity:1;"> - <use xlink:href="#glyph2-5" x="148.417032" y="66.81125"/> + <use xlink:href="#glyph2-5" x="148.520782" y="66.81125"/> </g> <g style="fill:rgb(0%,0%,0%);fill-opacity:1;"> - <use xlink:href="#glyph1-8" x="0.000000000000053291" y="84.86875"/> + <use xlink:href="#glyph1-8" x="0.000000000000035527" y="84.86875"/> </g> <g style="fill:rgb(0%,0%,0%);fill-opacity:1;"> - <use xlink:href="#glyph0-1" x="76.0325" y="84.86875"/> - <use xlink:href="#glyph0-2" x="87.551335" y="84.86875"/> + <use xlink:href="#glyph0-1" x="76.24" y="84.86875"/> + <use xlink:href="#glyph0-2" x="87.758835" y="84.86875"/> </g> <g style="fill:rgb(0%,0%,0%);fill-opacity:1;"> - <use xlink:href="#glyph0-3" x="96.387722" y="84.86875"/> - <use xlink:href="#glyph0-4" x="105.221121" y="84.86875"/> - <use xlink:href="#glyph0-5" x="114.719527" y="84.86875"/> + <use xlink:href="#glyph0-3" x="96.595222" y="84.86875"/> + <use xlink:href="#glyph0-4" x="105.428621" y="84.86875"/> + <use xlink:href="#glyph0-5" x="114.927027" y="84.86875"/> </g> <g style="fill:rgb(0%,0%,0%);fill-opacity:1;"> - <use xlink:href="#glyph0-2" x="125.876718" y="84.86875"/> - <use xlink:href="#glyph0-6" x="135.041873" y="84.86875"/> - <use xlink:href="#glyph0-7" x="144.04115" y="84.86875"/> + <use xlink:href="#glyph0-2" x="126.084218" y="84.86875"/> + <use xlink:href="#glyph0-6" x="135.249373" y="84.86875"/> + <use xlink:href="#glyph0-7" x="144.24865" y="84.86875"/> </g> <g style="fill:rgb(0%,0%,0%);fill-opacity:1;"> - <use xlink:href="#glyph1-1" x="153.37125" y="84.86875"/> + <use xlink:href="#glyph1-1" x="153.57875" y="84.86875"/> </g> <g style="fill:rgb(0%,0%,0%);fill-opacity:1;"> - <use xlink:href="#glyph2-1" x="159.06125" y="84.86875"/> + <use xlink:href="#glyph2-1" x="159.26875" y="84.86875"/> </g> <g style="fill:rgb(0%,0%,0%);fill-opacity:1;"> - <use xlink:href="#glyph2-2" x="168.398261" y="84.86875"/> + <use xlink:href="#glyph2-2" x="168.605761" y="84.86875"/> </g> <g style="fill:rgb(0%,0%,0%);fill-opacity:1;"> - <use xlink:href="#glyph2-3" x="174.958677" y="84.86875"/> + <use xlink:href="#glyph2-3" x="175.166177" y="84.86875"/> </g> <g style="fill:rgb(0%,0%,0%);fill-opacity:1;"> - <use xlink:href="#glyph2-2" x="186.671784" y="84.86875"/> + <use xlink:href="#glyph2-2" x="186.879284" y="84.86875"/> </g> <g style="fill:rgb(0%,0%,0%);fill-opacity:1;"> - <use xlink:href="#glyph2-7" x="193.217256" y="84.86875"/> - <use xlink:href="#glyph2-2" x="201.545548" y="84.86875"/> + <use xlink:href="#glyph2-7" x="193.424756" y="84.86875"/> + <use xlink:href="#glyph2-2" x="201.753048" y="84.86875"/> </g> <g style="fill:rgb(0%,0%,0%);fill-opacity:1;"> - <use xlink:href="#glyph2-5" x="208.105964" y="84.86875"/> + <use xlink:href="#glyph2-5" x="208.313464" y="84.86875"/> </g> <g style="fill:rgb(0%,0%,0%);fill-opacity:1;"> - <use xlink:href="#glyph1-2" x="213.0975" y="84.86875"/> + <use xlink:href="#glyph1-2" x="213.30625" y="84.86875"/> </g> <g style="fill:rgb(0%,0%,0%);fill-opacity:1;"> - <use xlink:href="#glyph1-9" x="0.000000000000035527" y="102.92625"/> + <use xlink:href="#glyph1-9" x="0.000000000000071054" y="102.92625"/> </g> <g style="fill:rgb(0%,0%,0%);fill-opacity:1;"> <use xlink:href="#glyph4-1" x="18.29" y="102.92625"/> @@ -333,79 +333,79 @@ <use xlink:href="#glyph2-3" x="93.8425" y="102.92625"/> </g> <g style="fill:rgb(0%,0%,0%);fill-opacity:1;"> - <use xlink:href="#glyph1-10" x="0.000000000000035527" y="120.98375"/> + <use xlink:href="#glyph1-10" x="0.000000000000071054" y="120.98375"/> </g> <g style="fill:rgb(0%,0%,0%);fill-opacity:1;"> - <use xlink:href="#glyph4-4" x="47.16125" y="120.98375"/> - <use xlink:href="#glyph4-1" x="51.312693" y="120.98375"/> + <use xlink:href="#glyph4-4" x="47.265" y="120.98375"/> + <use xlink:href="#glyph4-1" x="51.416443" y="120.98375"/> </g> <g style="fill:rgb(0%,0%,0%);fill-opacity:1;"> - <use xlink:href="#glyph2-7" x="60.86" y="120.98375"/> - <use xlink:href="#glyph2-6" x="69.188291" y="120.98375"/> + <use xlink:href="#glyph2-7" x="60.96375" y="120.98375"/> + <use xlink:href="#glyph2-6" x="69.292041" y="120.98375"/> </g> <g style="fill:rgb(0%,0%,0%);fill-opacity:1;"> - <use xlink:href="#glyph3-1" x="73.2525" y="120.98375"/> - <use xlink:href="#glyph3-2" x="76.9885" y="120.98375"/> - <use xlink:href="#glyph3-3" x="84.4605" y="120.98375"/> + <use xlink:href="#glyph3-1" x="73.35625" y="120.98375"/> + <use xlink:href="#glyph3-2" x="77.09225" y="120.98375"/> + <use xlink:href="#glyph3-3" x="84.56425" y="120.98375"/> </g> <g style="fill:rgb(0%,0%,0%);fill-opacity:1;"> - <use xlink:href="#glyph3-4" x="90.4381" y="120.98375"/> - <use xlink:href="#glyph3-1" x="97.1629" y="120.98375"/> + <use xlink:href="#glyph3-4" x="90.54185" y="120.98375"/> + <use xlink:href="#glyph3-1" x="97.26665" y="120.98375"/> </g> <g style="fill:rgb(0%,0%,0%);fill-opacity:1;"> - <use xlink:href="#glyph6-1" x="106.8325" y="120.98375"/> + <use xlink:href="#glyph6-1" x="106.93625" y="120.98375"/> </g> <g style="fill:rgb(0%,0%,0%);fill-opacity:1;"> - <use xlink:href="#glyph6-1" x="115.0775" y="120.98375"/> + <use xlink:href="#glyph6-1" x="115.18125" y="120.98375"/> </g> <g style="fill:rgb(0%,0%,0%);fill-opacity:1;"> - <use xlink:href="#glyph1-7" x="127.1825" y="120.98375"/> + <use xlink:href="#glyph1-7" x="127.28625" y="120.98375"/> </g> <g style="fill:rgb(0%,0%,0%);fill-opacity:1;"> <use xlink:href="#glyph1-11" x="0.000000000000014211" y="139.04125"/> </g> <g style="fill:rgb(0%,0%,0%);fill-opacity:1;"> - <use xlink:href="#glyph0-1" x="76.0325" y="139.04125"/> - <use xlink:href="#glyph0-2" x="87.551335" y="139.04125"/> + <use xlink:href="#glyph0-1" x="76.24" y="139.04125"/> + <use xlink:href="#glyph0-2" x="87.758835" y="139.04125"/> </g> <g style="fill:rgb(0%,0%,0%);fill-opacity:1;"> - <use xlink:href="#glyph0-3" x="96.387722" y="139.04125"/> - <use xlink:href="#glyph0-4" x="105.221121" y="139.04125"/> - <use xlink:href="#glyph0-5" x="114.719527" y="139.04125"/> + <use xlink:href="#glyph0-3" x="96.595222" y="139.04125"/> + <use xlink:href="#glyph0-4" x="105.428621" y="139.04125"/> + <use xlink:href="#glyph0-5" x="114.927027" y="139.04125"/> </g> <g style="fill:rgb(0%,0%,0%);fill-opacity:1;"> - <use xlink:href="#glyph0-2" x="125.876718" y="139.04125"/> - <use xlink:href="#glyph0-6" x="135.041873" y="139.04125"/> - <use xlink:href="#glyph0-7" x="144.04115" y="139.04125"/> + <use xlink:href="#glyph0-2" x="126.084218" y="139.04125"/> + <use xlink:href="#glyph0-6" x="135.249373" y="139.04125"/> + <use xlink:href="#glyph0-7" x="144.24865" y="139.04125"/> </g> <g style="fill:rgb(0%,0%,0%);fill-opacity:1;"> - <use xlink:href="#glyph1-1" x="153.37125" y="139.04125"/> + <use xlink:href="#glyph1-1" x="153.57875" y="139.04125"/> </g> <g style="fill:rgb(0%,0%,0%);fill-opacity:1;"> - <use xlink:href="#glyph2-1" x="159.06125" y="139.04125"/> + <use xlink:href="#glyph2-1" x="159.26875" y="139.04125"/> </g> <g style="fill:rgb(0%,0%,0%);fill-opacity:1;"> - <use xlink:href="#glyph2-2" x="168.398261" y="139.04125"/> + <use xlink:href="#glyph2-2" x="168.605761" y="139.04125"/> </g> <g style="fill:rgb(0%,0%,0%);fill-opacity:1;"> - <use xlink:href="#glyph2-3" x="174.958677" y="139.04125"/> + <use xlink:href="#glyph2-3" x="175.166177" y="139.04125"/> </g> <g style="fill:rgb(0%,0%,0%);fill-opacity:1;"> - <use xlink:href="#glyph2-2" x="186.671784" y="139.04125"/> + <use xlink:href="#glyph2-2" x="186.879284" y="139.04125"/> </g> <g style="fill:rgb(0%,0%,0%);fill-opacity:1;"> - <use xlink:href="#glyph2-7" x="193.217256" y="139.04125"/> - <use xlink:href="#glyph2-2" x="201.545548" y="139.04125"/> + <use xlink:href="#glyph2-7" x="193.424756" y="139.04125"/> + <use xlink:href="#glyph2-2" x="201.753048" y="139.04125"/> </g> <g style="fill:rgb(0%,0%,0%);fill-opacity:1;"> - <use xlink:href="#glyph2-5" x="208.105964" y="139.04125"/> + <use xlink:href="#glyph2-5" x="208.313464" y="139.04125"/> </g> <g style="fill:rgb(0%,0%,0%);fill-opacity:1;"> - <use xlink:href="#glyph1-12" x="216.41875" y="139.04125"/> + <use xlink:href="#glyph1-12" x="216.62625" y="139.04125"/> </g> <g style="fill:rgb(0%,0%,0%);fill-opacity:1;"> - <use xlink:href="#glyph1-3" x="231.117668" y="139.04125"/> - <use xlink:href="#glyph1-2" x="238.434251" y="139.04125"/> + <use xlink:href="#glyph1-3" x="231.325168" y="139.04125"/> + <use xlink:href="#glyph1-2" x="238.641751" y="139.04125"/> </g> </g> </svg> diff --git a/macros/latex/contrib/pseudo/doc/pseudo.pdf b/macros/latex/contrib/pseudo/doc/pseudo.pdf Binary files differindex 3a92422f35..515978d79c 100644 --- a/macros/latex/contrib/pseudo/doc/pseudo.pdf +++ b/macros/latex/contrib/pseudo/doc/pseudo.pdf diff --git a/macros/latex/contrib/pseudo/doc/pseudo.tex b/macros/latex/contrib/pseudo/doc/pseudo.tex index 9148d16289..de0e5a8a69 100644 --- a/macros/latex/contrib/pseudo/doc/pseudo.tex +++ b/macros/latex/contrib/pseudo/doc/pseudo.tex @@ -431,6 +431,34 @@ There are also code-typesetting packages like \pkg[https://ctan.org/tex-archive/macros/latex/contrib/listings]{listings} and \pkg[https://ctan.org/pkg/minted]{minted}, of course. +\subsection*{Using older \TeX\ distributions} + +The imlementation of \pkg{pseudo} uses some functionality that isn't available +in older \TeX\ distributions, in particular, older versions of +\pkg[https://ctan.org/pkg/xparse]{xparse} and +\pkg[https://ctan.org/pkg/expl3]{expl3}. Some care has been taken to make the +code backward compatible to the point where it works on \TeX\ Live~2016, which +is what is used (at the time of writing) on \href{https://arxiv.org}{arXiv}. +If you run into issues somewhere else (e.g., when submitting to some publisher +with a custom setup), feel free to +\href{https://github.com/mlhetland/pseudo.sty/issues}{file an issue}, or even +\href{https://github.com/mlhetland/pseudo.sty/pulls}{provide a pull request} +with a fix. One thing to look out for is that older versions of +\pkg[https://ctan.org/pkg/xparse]{xparse} parse arguments differently, so +things like +\begin{texexp}[listing only] +foo\\<1> +bar\\[hl] +\end{texexp} +would work, but separating the arguments with spaces, as in +\begin{texexp}[listing only] +foo\\ <1> +bar\\ [hl] +\end{texexp} +will \emph{not} work, though this works with more recent versions (as seen +from some of my examples, later). For more advice on working around an older +distribution, see also \cref{sec:older}. + \section{Overview} The main component of the \pkg{pseudo} package is the \refe{pseudo} @@ -494,8 +522,10 @@ If you want, you can certainly create shortcuts, e.g., \verb|\def\While{\kw{while}}|, or using various declaration commands, such as \refc{DeclarePseudoKeyword} or \refc{DeclarePseudoConstant}. Procedures and functions capture parenthesized arguments and set them in math mode; this -carries over in such shortcuts, so if you define \verb|\Euclid| to mean -\verb|\pr{Euclid}|, then \code*{\cs{Euclid}(a, b)} yields \pr{Euclid}(a,b). +carries over in shortcuts, so if you define \verb|\Euclid| to mean +\verb|\pr{Euclid}|, then \code*{\cs{Euclid}(a, b)} yields +\pr{Euclid}(a,b).\footnote{Note that \code*{\cs{Euclid} (a, b)}, with a space +before the parenthetical, yields \pr{Euclid} (a, b).} These commands are not used in the internals of the package, so they may be freely redefined for different styling, such as \verb|\let\id\textsf|. They @@ -1099,10 +1129,9 @@ alphabetical order), you'll find definitions of a couple of counters here This may not be enough, however. For example, if you're using \pkg[https://ctan.org/pkg/standalone]{standalone} to produce individual - pseudocode images, this compactness will \emph{not} be triggered - automatically. In such cases, you can override the behavior using the - \refk{compact} key, manually specifying whether you want the pseudocode to - be compact or not. + pseudocode images, this compactness may not be triggered automatically. In + such cases, you can override the behavior using the \refk{compact} key, + manually specifying whether you want the pseudocode to be compact or not. \end{docKey} \begin{docCommand}{ct}{\marg{text}} @@ -1323,14 +1352,14 @@ See also \refk{bol-append}, \refk{setup-append} and \refk{dim-color}. shortcut, and configurable via \refk{eqs-pad}, \refk{eqs-scale} and \refk{eqs-sep}. \end{docCommand} -\begin{docKey}{eqs-pad}{\,=\,\meta{length}}{\initialkeyvalue{\code{0.28mu}}} +\begin{docKey}{eqs-pad}{\,=\,\meta{muskip}}{\initialkeyvalue{\code{0.28mu}}} The amount of space inserted on each side of \refc{eqs}. \end{docKey} \begin{docKey}{eqs-scale}{\,=\,\meta{number}}{\initialkeyvalue{\code{0.6785}}} The amount of horizontal scaling applied to the \code{=} signs in \refc{eqs}. \end{docKey} -\begin{docKey}{eqs-sep}{\,=\,\meta{length}}{\initialkeyvalue{\code{0.63mu}}} +\begin{docKey}{eqs-sep}{\,=\,\meta{muskip}}{\initialkeyvalue{\code{0.63mu}}} The amount of space inserted between the two \code{=} signs in \cs{eqs}. \end{docKey} @@ -1958,10 +1987,10 @@ goto \tn{\ref{li:ref}} \begin{docCommand}{st}{\marg{string}} Typesets \meta{string} with added quotes using \refc{stfont}. (The entire thing is wrapped in \cs{textnormal}.) For example, \code*{print - \cs{st}\braces{42}} yields + \cs{st}\braces{42}} yields: \begin{pseudo*} print \st{42} - \end{pseudo*}. + \end{pseudo*} See also \refc{DeclarePseudoString}. \fontutil{strings} \pseudoshortcutted{st} @@ -2263,7 +2292,7 @@ If all your tabbing is done \emph{before} the text on a given code line, you can achieve this in \pkg{pseudo} as well, by using the \code{+} and \code{-} modifiers. (For example, the tab stops in \pkg[https://ctan.org/pkg/clrscode3e]{clrscode3e} are set at fixed intervals, -just like in \pkg{pseudo}.) But what i you'd like to align something that +just like in \pkg{pseudo}.) But what if you'd like to align something that comes later, such as comments after code lines? You can't simply use \cs{hspace}, of course, unless the code lines themselves have exactly the same length. @@ -2567,7 +2596,69 @@ course. This could be done by some hook triggered by the \code{-} flags in \refc{\bslash}. If it turns out there's a demand for something like that, I might add it in a future version. +\subsection{\dots\,use \pkg{pseudo} with older \TeX\ distributions?} +\label{sec:older} + +As mentioned in the introduction, I've tried to make \pkg{pseudo} work with at +least \emph{somewhat} outdated \TeX\ distributions. In these cases, the +package itself won't be available as part of the distribution, of course, but +you can simply download the file +\texttt{\href{http://mirrors.ctan.org/macros/latex/contrib/pseudo/pseudo.sty}{pseudo.sty}} +and place it in the directory where you're compiling your document (or +anywhere else where your \LaTeX\ executable can find it). + +However, there may be cases where this just doesn't work, such as when +submitting to a publisher with a really old setup.\footnote{If possible, +though, feel free to +\href{https://github.com/mlhetland/pseudo.sty/issues}{file an issue} or +\href{https://github.com/mlhetland/pseudo.sty/pulls}{provide a pull request} +to address the issue.} +In that case, the simplest solution is probably to use the +\pkg[https://ctan.org/pkg/standalone]{standalone} package to produce +individual PDFs of your algorithms, and then to include those in your +document. Then you can submit the PDFs rather than the \LaTeX, so that the +pseudocode need not be compiled on the old system. Each algorithm could go in +a file like this: + +\begin{texexp}[listing only] +\documentclass{standalone} +\usepackage{pseudo} +\begin{document} +\begin{pseudo} + ... +\end{pseudo} +\end{document} +\end{texexp} + +\noindent +Let's say this is compiled to \texttt{algo1.pdf}. You then include this file: + +\begin{texexp}[listing only] +\documentclass{article} +\usepackage{graphicx} % For \includegraphics +... +\begin{document} +... sanctus est Lorem ipsum dolor sit amet: + +\medskip\noindent +\includegraphics{algo1} + +\smallskip +Lorem ipsum dolor sit amet, consetetur sadipscing ... +\end{document} +\end{texexp} + +\noindent +Of course, you can adjust the spacing (e.g., using \verb|\vspace| or the like) +to your liking. Using this method, you can can achieve results essentially +identical to if you compiled the pseudocode directly as part of the document. +Of course, you won't have access to other functionality (such as +\verb|\DeclarePseudoIdentifier| or the like) for use in the main tex, but most +of that should be possible to emulate by hand (possibly peeking at the +implementation in \cref{sec:impl}). + \section{Implementation} +\label{sec:impl} \lstdefinestyle{tcblatex}{language={[LaTeX]TeX}, aboveskip={0\p@ \@plus 6\p@}, @@ -2678,13 +2769,12 @@ which the current line is indented. The initial indent level may be set using \subsection{Utilities} \paragraph{Variants.} First, let's just generate a couple of expansion -variants we'll need of some standard commands: +variants we'll need of some standard commands. (I'm using the +\verb|\q_no_value| machinery rather than \verb|\c_novalue_tl| for +compatibility with older \TeX\ distributions.) \begin{source} -\cs_generate_variant:Nn \tl_if_novalue:nTF { VTF } +\cs_generate_variant:Nn \quark_if_no_value:nTF { VTF } \cs_generate_variant:Nn \tl_set:Nn { Ne } -\cs_generate_variant:Nn \regex_extract_once:nnNTF { nVNTF } -% \cs_generate_variant:Nn \regex_match:nnF { nVF } -\cs_generate_variant:Nn \regex_match:nnF { neF } \end{source} \paragraph{Defining columns.} The \refk{preamble} is is configurable, but the \pkg[https://ctan.org/pkg/array]{array} package makes sure it doesn't expand @@ -2715,21 +2805,22 @@ undefined): \cs_new:Nn \@@_meta_new_cmd:NNnn { \tl_set:Nn \l_tmpa_tl {pseudo \cs_to_str:N #2} \exp_args:Nc - #1 \l_tmpa_tl {#3} {#4} + #1 \l_tmpa_tl #3 {#4} \cs_if_free:NT #2 {\cs_gset_eq:Nc #2 \l_tmpa_tl} } \cs_new:Nn \@@_new_cmd:Nnn { \@@_meta_new_cmd:NNnn - \NewDocumentCommand #1 {#2} { + \NewDocumentCommand #1 {{#2}} { #3 } } - \cs_new:Nn \@@_new_ecmd:Nnn { \@@_meta_new_cmd:NNnn - \NewExpandableDocumentCommand #1 {#2} { + % \NewExpandableDocumentCommand #1 {{#2}} { + % Replaced for compatibility: + \def #1 {#2} { #3 } } @@ -2779,7 +2870,7 @@ provided, but \refk{indent-text} is only used if there is no \refk{indent-length \begin{source} \cs_new:Nn \@@_set_indent_length: { - \tl_if_novalue:VTF \l_@@_indent_length_tl { + \quark_if_no_value:VTF \l_@@_indent_length_tl { \hbox_set:Nn \l_tmpa_box { \l_@@_indent_text_tl } \dim_set:Nn \pseudoindentlength { \box_wd:N \l_tmpa_box } } { @@ -2921,31 +3012,48 @@ generally non-extended bold, if that's available, but extended bold otherwise: % Fallback, if that failed: \cs_if_exist:NT \@defaultsubs { \cs_gset_eq:NN \@@_b_or_bx: \bfseries - \group_insert_after:N \@@_b_or_bx: } \group_end: + % Make sure the new version is used: + \@@_b_or_bx: + } \end{source} Note that the command redefines itself after the first use, so as not to execute the check every time. The \refc{pr} command is also a font shortcut, but in addition takes optional -parenthesis-delimited arguments, which are set in math mode: +parenthesis-delimited arguments, which are set in math mode. To avoid +erroneousy slurping up following parentheticals, there should be no space +separating the command and its optional argument. With current versions of +\pkg[https://ctan.org/pkg/xparse]{xparse}, this can be achieved with the +\verb|!| argument type, but for compatibility with older \TeX\ distributions, +I'll deal with it ``manually.'' \begin{source} \cs_new:Nn \@@_fmt_pr:n { \textnormal{\prfont{ #1 }} } -\cs_new:Nn \@@_fmt_pr:nn { - \@@_fmt_pr:n { #1 } - \ensuremath{ ( #2 ) } + +\NewDocumentCommand \@@_parse_paren_args { +d() } { + \IfNoValueF { #1 } { + \ensuremath{ ( #1 ) } + } } -\@@_new_cmd:Nnn \pr { m !+d() } { - \IfNoValueTF { #2 } { - \@@_fmt_pr:n { #1 } + +\NewDocumentCommand \@@_parse_bracket_or_paren_args { +o } { + \IfNoValueTF { #1 } { + \@@_parse_paren_args } { - \@@_fmt_pr:nn { #1 } { #2 } + \ensuremath{ [ #1 ] } + } +} + +\@@_new_cmd:Nnn \pr { m } { + \@@_fmt_pr:n { #1 } + \peek_catcode:NTF { ~ } { } { + \@@_parse_paren_args } } \end{source} @@ -2955,26 +3063,10 @@ square brackets. \cs_new:Nn \@@_fmt_fn:n { \textnormal{\fnfont{ #1 }} } -\cs_new:Nn \@@_fmt_fn:nn { - \@@_fmt_fn:n { #1 } - \ensuremath{ ( #2 ) } -} -\cs_new:Nn \@@_fmt_ar:nn { +\@@_new_cmd:Nnn \fn { m } { \@@_fmt_fn:n { #1 } - \ensuremath{ [ #2 ] } -} -\@@_new_cmd:Nnn \fn { m !+o !+d() } { - \IfNoValueTF { #2 } { - \IfNoValueTF { #3 } { - \@@_fmt_fn:n { #1 } - } { - \@@_fmt_fn:nn { #1 } { #3 } - } - } { - \@@_fmt_ar:nn { #1 } { #2 } - \IfNoValueF { #3 } { - ( #3 ) - } + \peek_catcode:NTF { ~ } { } { + \@@_parse_bracket_or_paren_args } } \end{source} @@ -2983,10 +3075,12 @@ two columns (effectively ignoring the labeling column). Because it needs to be expandable in order to insert the multicolumn, the final, parenthesis-enclosed argument can not be optional (unlike for \refc{pr}). \begin{source} -\@@_new_ecmd:Nnn \hd { m +r() } { +% \@@_new_ecmd:Nnn \hd { m +r() } { +% Now uses \def syntax: +\@@_new_ecmd:Nnn \hd { #1 ( #2 ) } { \multicolumn{2} {\@@_hd_preamble} - {\@@_fmt_pr:nn{#1}{#2}} + {\@@_fmt_pr:n{#1}\ensuremath{(#2)}} } \end{source} Finally, \refc{st} and \refc{ct} add quotes and comment delimiters, @@ -3003,7 +3097,9 @@ respectively, to the typeset string, keeping it all in \cs{textnormal}: \end{source} Beyond text styling, we also have styling for entire rows, i.e., highlighting: \begin{source} -\NewExpandableDocumentCommand \pseudohl { } { +% \NewExpandableDocumentCommand \pseudohl { } { +% For backward compatibility: +\def \pseudohl { \rowcolor{\pseudohlcolor} } \end{source} @@ -3045,7 +3141,9 @@ well). \tex_mskip:D \l_tmpa_muskip \box_use:N \l_tmpa_box \tex_mskip:D \l_tmpb_muskip - \box_use_drop:N \l_tmpa_box + % \box_use_drop:N \l_tmpa_box + % Replaced for compatibility + \box \l_tmpa_box \tex_mskip:D \l_tmpa_muskip } \group_end: @@ -3154,7 +3252,7 @@ typesetting the pseudocode. ref .default:n = \l_@@_label_tl, indent-length .tl_set:N = \l_@@_indent_length_tl, - indent-length .initial:V = \c_novalue_tl, + indent-length .initial:V = \q_no_value, indent-text .tl_set:N = \l_@@_indent_text_tl, indent-text .initial:n = { \pseudofont\kw{else}\ }, @@ -3373,22 +3471,65 @@ latter of the two really shouldn't.\footnote{See \msg_new:nnn { pseudo } { unknown-key } { Unknown~key~'#1'~ignored. } + +\tl_new:N \l_@@_overlay_tl + \keys_define:nn { pseudo } { unknown .code:n = { - \tl_set_eq:NN \l_tmpa_tl \l_keys_key_tl - \regex_extract_once:nVNTF {\A (.*) < (.*) > \Z} - \l_tmpa_tl \l_tmpa_seq { - \seq_pop_right:NN \l_tmpa_seq \l_tmpb_tl - \seq_pop_right:NN \l_tmpa_seq \l_tmpa_tl + + \group_begin: + + \tl_map_inline:Nn \l_keys_key_tl { + + \tl_if_eq:nnTF { ##1 } { < } { + + \int_incr:N \l_tmpa_int + \int_compare:nF { \l_tmpb_int == 0 } { + % We already found `>'! + % Increment again to prevent match: + \int_incr:N \l_tmpa_int + } + + \tl_set_eq:NN \l_tmpb_tl \l_tmpa_tl + \tl_clear:N \l_tmpa_tl + + } { + + \tl_if_eq:nnTF { ##1 } { > } { + + \int_incr:N \l_tmpb_int + + \tl_set_eq:NN \l_@@_overlay_tl \l_tmpa_tl + \tl_clear:N \l_tmpa_tl + + } { + + \tl_put_right:Nn \l_tmpa_tl { ##1 } + + } } + + } + + % A single `<' and a final, single `>'? + \bool_if:nTF { + \int_compare_p:n { \l_tmpa_int == \l_tmpb_int == 1 } + && + \tl_if_empty_p:N \l_tmpa_tl + }{ + % Match \tl_if_blank:nF{#1} { - \tl_put_right:Nn \l_tmpa_tl {= #1} + \tl_put_right:Nn \l_tmpb_tl {= #1} } \@@_keys_set_overlay:VnV - \l_tmpb_tl { pseudo } \l_tmpa_tl - }{ + \l_@@_overlay_tl { pseudo } \l_tmpb_tl + } { + % No match \msg_error:nnx { pseudo } { unknown-key } { \l_keys_path_tl } } + + \group_end: + } } \end{source} @@ -3432,7 +3573,8 @@ setting it to zero. If the user happens to dedent too much, we might as well be a bit forgiving, and clamp the indent level to non-negative values: \begin{source} - \int_compare:nNnT \g_@@_indent_level_int > \c_zero_int { + % Not using \c_zero_int for compatibility + \int_compare:nNnT \g_@@_indent_level_int > 0 { \int_gdecr:N \g_@@_indent_level_int } } @@ -3469,7 +3611,7 @@ If starred, clear out the prefix: \tl_gset_eq:NN \g_@@_cur_prefix_tl \pseudoprefix } } -\NewDocumentCommand \@@_eol_tail { !s d<> +O{ } } { +\NewDocumentCommand \@@_eol_tail { s d<> +O{ } } { \@@_eol_handle_args:nnn{#1}{#2}{#3} \end{source} A new line is begun only if we're not at the end of the (or, at least of @@ -3563,7 +3705,7 @@ While this is the main attraction, it's essentially just an augmented various macros already described. \begin{source} -\NewDocumentEnvironment { pseudo } { !+o !s d<> +O{ } } { +\NewDocumentEnvironment { pseudo } { +o s d<> +O{ } } { \group_begin: @@ -3581,7 +3723,8 @@ various macros already described. } \@@_set_indent_length: - % If not manually set as compact/noncompact, set automatically: + % If not manually set as compact/noncompact, + % set automatically: \bool_if:NF \l_@@_compact_def_bool { \bool_set:Nn \l_@@_compact_bool { \mode_if_horizontal_p: && \mode_if_inner_p: diff --git a/macros/latex/contrib/pseudo/pseudo.sty b/macros/latex/contrib/pseudo/pseudo.sty index 20859c819d..938fb4e887 100644 --- a/macros/latex/contrib/pseudo/pseudo.sty +++ b/macros/latex/contrib/pseudo/pseudo.sty @@ -20,8 +20,8 @@ % OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE % SOFTWARE. % -\def \pseudoversion {1.1.2} -\def \pseudodate {2019-07-14} +\def \pseudoversion {1.1.3} +\def \pseudodate {2019/10/30} \RequirePackage{expl3} \ProvidesExplPackage {pseudo} @@ -42,10 +42,8 @@ \dim_new:N \pseudoindentlength \int_new:N \g__pseudo_indent_level_int \int_new:N \l__pseudo_initial_indent_level_int -\cs_generate_variant:Nn \tl_if_novalue:nTF { VTF } +\cs_generate_variant:Nn \quark_if_no_value:nTF { VTF } \cs_generate_variant:Nn \tl_set:Nn { Ne } -\cs_generate_variant:Nn \regex_extract_once:nnNTF { nVNTF } -\cs_generate_variant:Nn \regex_match:nnF { neF } \cs_new:Nn \__pseudo_undef_col:n { \tl_set_eq:cN { NC@find@ \token_to_str:N #1 } \scan_stop: } @@ -56,18 +54,18 @@ \cs_new:Nn \__pseudo_meta_new_cmd:NNnn { \tl_set:Nn \l_tmpa_tl {pseudo \cs_to_str:N #2} \exp_args:Nc - #1 \l_tmpa_tl {#3} {#4} + #1 \l_tmpa_tl #3 {#4} \cs_if_free:NT #2 {\cs_gset_eq:Nc #2 \l_tmpa_tl} } \cs_new:Nn \__pseudo_new_cmd:Nnn { \__pseudo_meta_new_cmd:NNnn - \NewDocumentCommand #1 {#2} { + \NewDocumentCommand #1 {{#2}} { #3 } } \cs_new:Nn \__pseudo_new_ecmd:Nnn { \__pseudo_meta_new_cmd:NNnn - \NewExpandableDocumentCommand #1 {#2} { + \def #1 {#2} { #3 } } @@ -89,7 +87,7 @@ } } \cs_new:Nn \__pseudo_set_indent_length: { - \tl_if_novalue:VTF \l__pseudo_indent_length_tl { + \quark_if_no_value:VTF \l__pseudo_indent_length_tl { \hbox_set:Nn \l_tmpa_box { \l__pseudo_indent_text_tl } \dim_set:Nn \pseudoindentlength { \box_wd:N \l_tmpa_box } } { @@ -152,53 +150,44 @@ \__pseudo_b_or_bx: \cs_if_exist:NT \@defaultsubs { \cs_gset_eq:NN \__pseudo_b_or_bx: \bfseries - \group_insert_after:N \__pseudo_b_or_bx: } \group_end: + \__pseudo_b_or_bx: } \cs_new:Nn \__pseudo_fmt_pr:n { \textnormal{\prfont{ #1 }} } -\cs_new:Nn \__pseudo_fmt_pr:nn { - \__pseudo_fmt_pr:n { #1 } - \ensuremath{ ( #2 ) } +\NewDocumentCommand \__pseudo_parse_paren_args { +d() } { + \IfNoValueF { #1 } { + \ensuremath{ ( #1 ) } + } } -\__pseudo_new_cmd:Nnn \pr { m !+d() } { - \IfNoValueTF { #2 } { - \__pseudo_fmt_pr:n { #1 } +\NewDocumentCommand \__pseudo_parse_bracket_or_paren_args { +o } { + \IfNoValueTF { #1 } { + \__pseudo_parse_paren_args } { - \__pseudo_fmt_pr:nn { #1 } { #2 } + \ensuremath{ [ #1 ] } + } +} +\__pseudo_new_cmd:Nnn \pr { m } { + \__pseudo_fmt_pr:n { #1 } + \peek_catcode:NTF { ~ } { } { + \__pseudo_parse_paren_args } } \cs_new:Nn \__pseudo_fmt_fn:n { \textnormal{\fnfont{ #1 }} } -\cs_new:Nn \__pseudo_fmt_fn:nn { - \__pseudo_fmt_fn:n { #1 } - \ensuremath{ ( #2 ) } -} -\cs_new:Nn \__pseudo_fmt_ar:nn { +\__pseudo_new_cmd:Nnn \fn { m } { \__pseudo_fmt_fn:n { #1 } - \ensuremath{ [ #2 ] } -} -\__pseudo_new_cmd:Nnn \fn { m !+o !+d() } { - \IfNoValueTF { #2 } { - \IfNoValueTF { #3 } { - \__pseudo_fmt_fn:n { #1 } - } { - \__pseudo_fmt_fn:nn { #1 } { #3 } - } - } { - \__pseudo_fmt_ar:nn { #1 } { #2 } - \IfNoValueF { #3 } { - ( #3 ) - } + \peek_catcode:NTF { ~ } { } { + \__pseudo_parse_bracket_or_paren_args } } -\__pseudo_new_ecmd:Nnn \hd { m +r() } { +\__pseudo_new_ecmd:Nnn \hd { #1 ( #2 ) } { \multicolumn{2} {\__pseudo_hd_preamble} - {\__pseudo_fmt_pr:nn{#1}{#2}} + {\__pseudo_fmt_pr:n{#1}\ensuremath{(#2)}} } \__pseudo_new_cmd:Nnn \st { +m } { \textnormal { @@ -208,7 +197,7 @@ \textnormal { \l__pseudo_ct_left_tl {\ctfont{#1}} \l__pseudo_ct_right_tl } } -\NewExpandableDocumentCommand \pseudohl { } { +\def \pseudohl { \rowcolor{\pseudohlcolor} } \__pseudo_new_dec:nn { Comment } { ct } @@ -229,7 +218,7 @@ \tex_mskip:D \l_tmpa_muskip \box_use:N \l_tmpa_box \tex_mskip:D \l_tmpb_muskip - \box_use_drop:N \l_tmpa_box + \box \l_tmpa_box \tex_mskip:D \l_tmpa_muskip } \group_end: @@ -281,7 +270,7 @@ ref .tl_set:N = \thepseudoline, ref .default:n = \l__pseudo_label_tl, indent-length .tl_set:N = \l__pseudo_indent_length_tl, - indent-length .initial:V = \c_novalue_tl, + indent-length .initial:V = \q_no_value, indent-text .tl_set:N = \l__pseudo_indent_text_tl, indent-text .initial:n = { \pseudofont\kw{else}\ }, indent-level .int_set:N = \l__pseudo_initial_indent_level_int, @@ -408,22 +397,42 @@ \msg_new:nnn { pseudo } { unknown-key } { Unknown~key~'#1'~ignored. } +\tl_new:N \l__pseudo_overlay_tl \keys_define:nn { pseudo } { unknown .code:n = { - \tl_set_eq:NN \l_tmpa_tl \l_keys_key_tl - \regex_extract_once:nVNTF {\A (.*) < (.*) > \Z} - \l_tmpa_tl \l_tmpa_seq { - \seq_pop_right:NN \l_tmpa_seq \l_tmpb_tl - \seq_pop_right:NN \l_tmpa_seq \l_tmpa_tl + \group_begin: + \tl_map_inline:Nn \l_keys_key_tl { + \tl_if_eq:nnTF { ##1 } { < } { + \int_incr:N \l_tmpa_int + \int_compare:nF { \l_tmpb_int == 0 } { + \int_incr:N \l_tmpa_int + } + \tl_set_eq:NN \l_tmpb_tl \l_tmpa_tl + \tl_clear:N \l_tmpa_tl + } { + \tl_if_eq:nnTF { ##1 } { > } { + \int_incr:N \l_tmpb_int + \tl_set_eq:NN \l__pseudo_overlay_tl \l_tmpa_tl + \tl_clear:N \l_tmpa_tl + } { + \tl_put_right:Nn \l_tmpa_tl { ##1 } + } } + } + \bool_if:nTF { + \int_compare_p:n { \l_tmpa_int == \l_tmpb_int == 1 } + && + \tl_if_empty_p:N \l_tmpa_tl + }{ \tl_if_blank:nF{#1} { - \tl_put_right:Nn \l_tmpa_tl {= #1} + \tl_put_right:Nn \l_tmpb_tl {= #1} } \__pseudo_keys_set_overlay:VnV - \l_tmpb_tl { pseudo } \l_tmpa_tl - }{ + \l__pseudo_overlay_tl { pseudo } \l_tmpb_tl + } { \msg_error:nnx { pseudo } { unknown-key } { \l_keys_path_tl } } + \group_end: } } \cs_new:Nn \__pseudo_set:n { \keys_set:nn { pseudo } { #1 } } @@ -431,7 +440,7 @@ \int_gincr:N \g__pseudo_indent_level_int } \cs_new:Nn \__pseudo_dec_indent: { - \int_compare:nNnT \g__pseudo_indent_level_int > \c_zero_int { + \int_compare:nNnT \g__pseudo_indent_level_int > 0 { \int_gdecr:N \g__pseudo_indent_level_int } } @@ -448,7 +457,7 @@ \tl_gset_eq:NN \g__pseudo_cur_prefix_tl \pseudoprefix } } -\NewDocumentCommand \__pseudo_eol_tail { !s d<> +O{ } } { +\NewDocumentCommand \__pseudo_eol_tail { s d<> +O{ } } { \__pseudo_eol_handle_args:nnn{#1}{#2}{#3} \peek_meaning_ignore_spaces:NF \end { \pseudoeol @@ -490,7 +499,7 @@ } } } -\NewDocumentEnvironment { pseudo } { !+o !s d<> +O{ } } { +\NewDocumentEnvironment { pseudo } { +o s d<> +O{ } } { \group_begin: \__pseudo_gsave_as:NN \\ \c__pseudo_saved_cr_cs \__pseudo_gsave_as:NN \= \c__pseudo_saved_eq_cs diff --git a/macros/latex/contrib/pseudo/test/pseudotest.tex b/macros/latex/contrib/pseudo/test/pseudotest.tex new file mode 100644 index 0000000000..c95a03ab3f --- /dev/null +++ b/macros/latex/contrib/pseudo/test/pseudotest.tex @@ -0,0 +1,209 @@ +\documentclass[a4paper]{article} + +\def\id{my previous definition} + +\usepackage{pseudo} + +\title{Tests for the \textsf{pseudo} package} +\author{Magnus Lie Hetland} + +\begin{document} +\maketitle + +\noindent +This document is an attempt to use the features of the \textsf{pseudo} package +without any other dependencies (as opposed to the \textsf{pseudo} +documentation), e.g., to determine whether it's usable with an older \TeX\ +distribution. + +\section*{Fonts and styling} + +The previous definition of \verb|\id| is: \id\\ +\let\id\pseudoid + +\bigskip +\noindent +\begin{tabular}{@{}ll@{}} +\verb|\cmd| & \verb|\pseudocmd|\\ +\kw{while} & \pseudokw{while}\\ +\cn{false} & \pseudocn{false}\\ +\id{rank} & \pseudoid{rank}\\ +\st{Hello!} & \pseudost{Hello!}\\ +\pr{Euclid}(a b) & \pseudopr{Euclid}(a b)\\ +\fn{length}(A) & \pseudofn{length}(A)\\ +\fn{length}[A] & \pseudofn{length}[A]\\ +\ct{Important!} & \pseudoct{Important!}\\ +\end{tabular} + +{\pseudoset{ + kwfont=KW:~, + cnfont=CN:~, + idfont=ID:~, + stfont=ST:~, + st-left=[, + st-right=], + prfont=PR:~, + fnfont=FN:~, + ctfont=CT:~, + ct-left=[, + ct-right=], +} +\bigskip +\noindent +\begin{tabular}{@{}ll@{}} +\verb|\cmd| & \verb|\pseudocmd|\\ +\kw{while} & \pseudokw{while}\\ +\cn{false} & \pseudocn{false}\\ +\id{rank} & \pseudoid{rank}\\ +\st{Hello!} & \pseudost{Hello!}\\ +\pr{Euclid}(a b) & \pseudopr{Euclid}(a b)\\ +\fn{length}(A) & \pseudofn{length}(A)\\ +\fn{length}[A] & \pseudofn{length}[A]\\ +\ct{Important!} & \pseudoct{Important!}\\ +\end{tabular}} + +% The one on the line is ignored: +\begin{pseudo}[hpad, dim-color=red, kw][dim-color=blue, dim] + foo \\[hl] + bar +\end{pseudo} + +\noindent +Should be \verb|\fn{test}[A]| followed by \verb|(B)| in normalfont: +\fn{test}[A](B) + +\bigskip +\noindent +Should be \verb|\fn{test}(A)| followed by \verb|[B]| in normalfont: +\fn{test}(A)[B] + +\section*{Declarations and definitions} + +\DeclarePseudoComment \Imp {Important!} +\DeclarePseudoConstant \False {false} +\DeclarePseudoFunction \Ln {length} +\DeclarePseudoIdentifier \Rank {rank} +\DeclarePseudoKeyword \While {while} +\DeclarePseudoNormal \Error {halt with an error message} +\DeclarePseudoProcedure \Euclid {Euclid} +\DeclarePseudoString \Hello {Hello!} + +\begin{pseudo*} +$x = y$ \qquad \Imp \\ +\False \\ +\Ln(A) or \Ln[A] \\ +\Rank \\ +\While \\ +\Error \\ +\Euclid(a, b) \\ +\Hello +\end{pseudo*} + +\pseudodefinestyle{mystyle}{ + font = \Large +} + +\begin{pseudo*}[mystyle] +Hello, world! +\end{pseudo*} + +\section*{Notation} + +$A[1\..n] \== B[2\..n+1]$ \\ +$A[1\dts n] \eqs B[2\dts n+1]$ \\ + +\noindent +$\id{foo-bar:baz}$ + +\noindent +{\pseudoset{eqs-pad=10mu, eqs-scale=2, eqs-sep=5mu}$x\==y$} + +\begin{pseudo*}[kw] +keyword \tn{normal} keyword \nf normal +\end{pseudo*} + +\section*{Numbering and indentation} + +\begin{pseudo}[start=2, label=(\Roman*), label-align=l, ref=\Roman*] + one \\ + two \label{linetwo} \\* +? & three \\ +\end{pseudo} + +\begin{pseudo}* +\hd{Header}(\id{args}) \\ +first line +\end{pseudo} + +\noindent +Reference to line~\ref{linetwo}. + +\begin{pseudo}[hpad=1cm, hsep=.1cm, indent-length=2cm, indent-level=1] +A \\+ +B \\++ +C \\- +D \\--- +E +\end{pseudo} + +\begin{pseudo*}[indent-text={otherwise\ }] +if this \\+ + then that \\- +otherwise something else +\end{pseudo*} + +\section*{Layout} + +Here's a compact piece of pseudocode: +\begin{pseudo*}[kw, compact] +print \st{42} +\end{pseudo*} + +\noindent +Automatically compact: +\fbox{\begin{pseudo*} +In a box. +\end{pseudo*}} + +\begin{pseudo}[left-margin=\parindent] +indented +\end{pseudo} + +\begin{pseudo}[line-height=2] +lines \\ +far \\ +apart +\end{pseudo} + +\begin{pseudo}[parskip=1cm, topsep=1cm, partopsep=1cm] +custom parskip, topsep and partopsep +\end{pseudo} + +\section*{Overlays etc.} + +Ignored outside \textsf{beamer}. + +\begin{pseudo}[pause, kwfont<3>=\nf, unknown<3>=42] + foo \\<2> + % bar \\ <3> % Dosn't work in older xparse versions + baz +\end{pseudo} + +% Things that could also be tested: +% begin-tabular +% bol +% bol-append +% bol-prepend +% eol +% eol-append +% eol-prepend +% preamble +% prefix +% pseudoeq +% pseudoslash +% setup +% setup-append +% setup-prepend +% starred + +\end{document} diff --git a/macros/latex/contrib/subfiles/subfiles.dtx b/macros/latex/contrib/subfiles/subfiles.dtx index 39058604a0..201cfd6010 100644 --- a/macros/latex/contrib/subfiles/subfiles.dtx +++ b/macros/latex/contrib/subfiles/subfiles.dtx @@ -23,13 +23,13 @@ % %<*driver> % \fi -\ProvidesFile{subfiles.dtx}[2019/10/25 v1.4 Multi-file projects] +\ProvidesFile{subfiles.dtx}[2019/10/30 v1.5 Multi-file projects] % \iffalse \documentclass{ltxdoc} \GetFileInfo{subfiles.dtx} \title{A Document Class and a Package\\for Handling Multi-File Projects} -\date{\filedate{}} - \author{Federico Garcia, Gernot Salzer} +\date{v1.5 2019/10/30} +\author{Federico Garcia, Gernot Salzer} \begin{document} \maketitle @@ -61,7 +61,7 @@ % % \section{Basic usage} % -% The main file, i.e., the file with the preamble to be shared with the subfiles, has to load the package |subfiles| \emph{at the very end of the preamble}: +% The main file, i.e., the file with the preamble to be shared with the subfiles, has to load the package |subfiles| \emph{at the end of the preamble}: % \begin{center} % \begin{tabular}{l} % |\usepackage{subfiles}|\\ @@ -171,14 +171,36 @@ % \end{tabular} % \end{center} % Then each of the three files can be typeset individually in its respective directory, where \LaTeX\ is able to locate all included text files and images. +% +% \subsection{Including files instead of inputting them} +% +% In plain \LaTeX, you can use either |\input| or |\include| to load a file. +% In most cases the first is appropriate, but sometimes there are reasons to prefer the latter. +% Internally, the |\subfile| command uses |\input|. +% For those cases where you need |\include|, the package provides the command +% \begin{center} +% |\subfileinclude{|\meta{subfile\_name}|}| +% \end{center} +% +% \subsection{Bibliographies} +% +% Manual bibliographies with the |thebibliography| environment work as usual. +% Problems may arise if external programs like |bibtex| or |biber| are used to generate the bibliography, in particular when the bibliographies are distributed over subfiles. +% Here are some hints on how it may work. +% \begin{itemize} +% \item Make sure the command |\bibliography| is executed after loading the |subfiles| package. +% Put the command between |\usepackage{subfiles}| and |\begin{document}| or somewhere into the text part. +% \item When you use the package |biblatex|, and programs like |biber| complain about not being able to find the bibliography files, use |\bibliography| instead of |\addbibresource| for local files (observing the hint above). +% \end{itemize} +% The |subfiles| package has been tested with the packages |biblatex|, |bibunits|, and |chapterbib| as well as the external programs |bibtex| and |biber|. % -% \subsection{Additional definitions for subfiles} +% \subsection{Unusual locations for placing definitions and text} % % Usually all definitions and packages required by the subfiles should go into the preamble of the main file. -% There are some places, though, where one might consider adding definitions for the subfiles. +% There are some further locations, though, where one might consider adding definitions and text. % % \paragraph{Code after the end of the main document} is added to the preamble of the subfiles, but is ignored when typesetting the main file. -% This happens because a subfile typeset by itself does not really take the preamble of the main file, but \emph{everything outside} of \verb|\begin{document}| and \verb|\end{document}|. +% This happens because a subfile typeset by itself does not really take the preamble of the main file, but \emph{everything outside} of |\begin{document}| and |\end{document}|. % This has two consequences: \emph{a)}~the user can add some commands to be processed as part of the preamble only when the subfiles are typeset by themselves; but also \emph{b)}~the user has to be careful even \emph{after} |\end{document}| in the main file, for any syntax error there will ruin the \LaTeX ing of the subfile(s). % % \paragraph{Code in the preamble of a subfile} is processed as part of the text when typesetting the main file, but as part of the preamble when typesetting the subfile. @@ -186,11 +208,16 @@ % One should also keep in mind that each subfile is input within a group, so definitions made within may not work outside. % A good practice when using |subfiles| (and also when not using it) is to make any definitions in the preamble of the main file, avoiding confusion and allowing the reader to find them easily. % +% \paragraph{Code after the end of a subfile} is treated like the code preceding it when the subfile is loaded from the main file, but is ignored when typesetting the subfile. +% The code after |\end{document}| behaves as if following the |\subfile| command in the main file, except that it is still part of the group enclosing the subfile. +% As a consequence, empty lines at the end of the subfile lead to a new paragraph in the main document, even if the |\subfile| command is immediately followed by text. +% % \subsection{Avoiding extra spaces} % % Sometimes you may want to load the contents of a subfile without white space separating it from the contents of the main file. -% In this respect |\subfile| behaves like |\input|. +% In this respect |\subfile| behaves similar to |\input|. % Any space or newline before and after the |\subfile| command will appear in the typeset document, as will any white space between the last character of the subfile and |\end{document}|. +% Moreover, any stuff after |\end{document}| will end up in the main document, including spurious empty lines, which may lead to a new paragraph. % Therefore, to load the contents of a subfile without intervening spaces, you have either to add comment signs: % \begin{center} % \begin{tabular}[t]{l} @@ -210,6 +237,7 @@ % |\begin{document}|\\ % |contents of subfile%|\\ % |\end{document}|\\ +% |% No empty lines after \end{document}!|\\ % \hline % \end{tabular} % \end{center} @@ -228,16 +256,30 @@ % \section{Version history} % % \begin{description} -% \item[v1.1 (FG):] -% Start of version history. -% \item[v1.2 (GS):] -% The |subfiles| package becomes compatible with classes and packages that modify the |\document| command, like the class |revtex4|. -% \item[v1.3 (GS):] -% Use of |import| package to handle directory hierarchies. -% |\ignorespaces| added to avoid spurious spaces. -% Incompatibility with commands removed that expect |\document| to be equal to |\@onlypreamble| after the preamble (thanks to Eric Domenjoud for analysing the problem). -% \item[v1.3 (GS):] -% Incompatibility with |memoir| class and |comment| package removed. +% \item[v1.1:] +% Initial version by Federico Garcia. Further versions by Gernot Salzer. +% \item[v1.2:] \mbox{} +% \begin{itemize} +% \item Incompatibility with classes and packages removed that modify the |\document| command, like the class |revtex4|. +% \end{itemize} +% \item[v1.3:] \mbox{} +% \begin{itemize} +% \item Use of |import| package to handle directory hierarchies. +% \item |\ignorespaces| added to avoid spurious spaces. +% \item Incompatibility with commands removed that expect |\document| to be equal to |\@onlypreamble| after the preamble (thanks to Eric Domenjoud for analysing the problem). +% \end{itemize} +% \item[v1.4:] \mbox{} +% \begin{itemize} +% \item Incompatibility with |memoir| class and |comment| package removed. +% \item Bug `|\unskip| cannot be used in vertical mode` fixed. +% \end{itemize} +% \item[v1.5:] \mbox{} +% \begin{itemize} +% \item Command |\subfileinclude| added. +% \item Basic support for |bibtex| related bibliographies in subfiles added. +% Seems to suffice also for sub-bibliographies with the package |chapterbib|. +% \item Support for sub-bibliographies with package |bibunits| added. +% \end{itemize} % \end{description} % %\section{The Implementation} @@ -245,10 +287,10 @@ % \begin{macrocode} %<*class> \NeedsTeXFormat{LaTeX2e} -\ProvidesClass{subfiles}[2019/10/25 v1.4 Multi-file projects (class)] +\ProvidesClass{subfiles}[2019/10/30 v1.5 Multi-file projects (class)] \DeclareOption*{\typeout{Preamble taken from file `\CurrentOption'}% \let\preamble@file\CurrentOption} -\ProcessOptions +\ProcessOptions % \end{macrocode} % % We start by saving the regular \LaTeX\ definition of |\documentclass|: @@ -345,7 +387,7 @@ % \begin{macrocode} %<*package> \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{subfiles}[2019/10/25 v1.4 Multi-file projects (package)] +\ProvidesPackage{subfiles}[2019/10/30 v1.5 Multi-file projects (package)] \DeclareOption*{\PackageWarning{\CurrentOption ignored}} \ProcessOptions % \end{macrocode} @@ -400,12 +442,29 @@ % After executing e.g.\ |\subfiles@split{../dir1/dir2/file.tex}|, the commands |\subfiles@dir| and |\subfiles@base| expand to |../dir1/dir2/| and |file.tex|, respectively. % % \DescribeMacro{\subfile} -% The command |\subfile| first redefines |\documentclass| and the |document| environment to do nothing. -% To avoid spurious spaces we |\ignorespaces|. -% Moreover, we have to set |\document| to the value it usually has after the end of the preamble, since some commands check this value and may raise an error. +% The command |\subfile| specifies the command |\subimport| for |\input|ing the subfile, and then calls |\subfiles@subfile|. +% \begin{macrocode} +\newcommand\subfile{% + \let\subfiles@loadfile\subimport + \subfiles@subfile +} +% \end{macrocode} +% +% \DescribeMacro{\subfileinclude} +% The command |\subfileinclude| specifies the command |\subincludefrom| for |\include|ing the subfile, and then calls |\subfiles@subfile|. +% \begin{macrocode} +\newcommand\subfileinclude{% + \let\subfiles@loadfile\subincludefrom + \subfiles@subfile +} +% \end{macrocode} +% +% The main functionality of the two |\subfile| commands is implemented in |\subfiles@subfile|. +% It redefines |\documentclass| and the |document| environment to do nothing except avoiding spurious spaces. +% Moreover, |\document| has to be set to the value it usually has after the end of the preamble, since some commands check this value and may raise an error otherwise. % % \begin{macrocode} -\newcommand\subfile[1]{% +\newcommand\subfiles@subfile[1]{% \begingroup \renewcommand\documentclass[2][subfiles]{\ignorespaces}% \renewenvironment{document}{% @@ -415,14 +474,46 @@ \@ignoretrue }% % \end{macrocode} -% -% Now we split the file name into path and base name and |\subimport| the file. +% Now we split the file name into path and base name and load the file. % % \begin{macrocode} \subfiles@split{#1}% - \subimport{\subfiles@dir}{\subfiles@base}% + \subfiles@loadfile{\subfiles@dir}{\subfiles@base}% \endgroup } % \end{macrocode} % % Note that the changes to |\documentclass| and the |document| environment happen \emph{within a group}, so they are undone after inclusion of the subfile. +% +% To let external programs find files, we have to add the |\import@path| to file names. +% This is accomplished with the command |\subfiles@addimportpath|. +% \begin{macrocode} +\def\subfiles@addimportpath#1{% + \def\subfiles@filelist{}% + \def\subfiles@sep{}% + \@for\subfiles@filename:=#1\do{% + \edef\subfiles@filelist{\subfiles@filelist\subfiles@sep\import@path\subfiles@filename}% + \def\subfiles@sep{,}% + } +} +% \end{macrocode} +% +% We redefine the |\bibliography| command such that the import path is added to the file names before the original command is called. +% \begin{macrocode} +\let\subfiles@bibliography\bibliography +\renewcommand\bibliography[1]{% + \subfiles@addimportpath{#1}% + \expandafter\subfiles@bibliography\expandafter{\subfiles@filelist}% +} +% \end{macrocode} +% +% The |bibunits| package uses its own command to specify bib files, we have to patch it separately. +% \begin{macrocode} +\@ifpackageloaded{bibunits}{% + \let\subfiles@putbib\@putbib + \def\@putbib[#1]{% + \subfiles@addimportpath{#1}% + \expandafter\subfiles@putbib\expandafter[\subfiles@filelist]% + }% +}{} +% \end{macrocode} diff --git a/macros/latex/contrib/subfiles/subfiles.pdf b/macros/latex/contrib/subfiles/subfiles.pdf Binary files differindex a7cd81f7f7..33f39c049e 100644 --- a/macros/latex/contrib/subfiles/subfiles.pdf +++ b/macros/latex/contrib/subfiles/subfiles.pdf |