Purely expandable boolean expressions and switch (ε-t E X). 2010/04/15 v3.14
|
|
- Shannon McCarthy
- 6 years ago
- Views:
Transcription
1 The package Purely expandable boolean expressions and switch (ε-t E X). <florent.chervet@free.fr> 2010/04/15 v3.14 Abstract provides a purely expandable way to evaluate boolean expressions of the form: α \AND β \OR γ... where α, β and γ are atomic expressions of one of those 8 valid forms: x = y x <> y 1 x < y x <= y x > y x >= y \if test 0\else 1 another \ evaluation where x and y are either numeric expressions (or dimensions, glue, muglue to test using \dimexpr, \glueexpr or \muexpr please refer to the \ examples) and test may be a switch (\iftrue / \iffalse or a conditional 2 ). abide by the precedence of \AND on \OR, and the whole expression is evaluated until the result is known (in other words, \AND and \OR are shortcut boolean operators). \ will expand to 0 if the expression is true, making it proper to work with \ifcase Furthermore, defines a syntax which remains purely expandable. Be aware that \ (a little like \numexpr) works only if its argument is purely expandable; the same for. If you wish a more general \CASE syntax refer to this excellent paper: The package is designed to work with an ε-tex distribution of L A TEX: it is based on the ε-tex \numexpr primitive and requires no other package. Contents 1 Introduction Using : \ and 2 \ Examples The syntax switch examples Purely expandable macros for tests with Implementation The algorithm Category codes considerations Identification Special catcode Tree helper macros Atomic expression evaluation \AND and \OR management Future developments : to do History 11 [2010/04/15 v3.14] [2009/09/30 v3.1] [2009/09/03 v3.0 ε-tex- and XeTEX- stable] [2009/08/31 v2.9] [2009/08/13 v2.2] [2009/08/12 v2.1] [2009/07/22 v1.0] Index 12 : CTAN:macros/latex/contrib/ This documentation is produced with the DocStrip utility. To get the documentation, run (thrice): pdflatex.dtx for the index: makeindex -s gind.ist.idx To get the package, run: etex.dtx The.dtx file is embedded into this pdf file thank to embedfile by H. Oberdiek. 1. The choice of <> rather than!= is due to Category codes considerations. 2. \if, \ifcase, \ifcat, \ifcsname, \ifdefined, \ifdim, \ifeof, \iffontchar, \ifhmode, \ifinner, \ifmmode, \ifnum, \ifodd, \ifvmode, \ifvoid, \ifx 1 / 12
2 1 Introduction Using : \ and \ { boolean expression } \ is a macro that takes for unique argument a series of atomic expressions of the form: numeric expr. = numeric expr. numeric expr. <> numeric expr. numeric expr. < numeric expr numeric expr. <= numeric expr numeric expr. > numeric expr. numeric expr. >= numeric expr. \if test 0 \else 1 \{ boolean expression } related by \AND or \OR (with the usual logical precedence). \ expands to 0 if the whole expression is true and to a non nul number if the whole expression is false. \ is purely expandable. Therefore, testing may be used as follow: \ifcase\{ boolean expression } what to do if true \else what to do if false It is possible to use switches as boolean quantities into a \ expression with the syntax: \ifswitch 0\else 1 It is also possible to use \ifdim, \ifnum etc. (although it is not necessary because other forms of atomic expression can perform those tests more easily) and \ifdefined, \ifcsname etc. with the same syntax, f.ex.: \ifcsname cs-name \endcsname 0\else 1 It means that if the conditional is true then the atomic expression is true (expands to 0), otherwise the atomic expression is false (expands to non 0). It is possible to test dimensions (or glue or muglue) by writing \dimexpr (or \glueexpr or \muexpr) in front of the atomic expression; therefore, the following are valid atomic expressions: \dimexpr dimen expr. < dimen expr \glueexpr glue expr. <> glue expr. \muexpr mu expr. = mu expr. It is allowed to group expressions inside the argument of \ by inserting another \ evaluation, f.ex.: \{ \{ α \OR β } \AND γ } The logical NOT operator can be achieved by writing for example: \ifcase\{ boolean expression } 1\else 0 Finally, if the boolean expression is missing: \{ } expands to 1 (ie. false). \if { boolean expression } { true part } { false part } \if is the LATEX form of a \ test. \if is purely expandable (provided true part and false part are so). 2 / 12
3 \ examples The part of the expression that is evaluated is in blue (the remainder is not evaluated). \ifcase\{ 45 > 80 \OR 5<>5 \AND 5<4 } is true \else is false is false \ifcase\{ 45 < 80 \OR 5 = 5 \AND 0<>0 } is true \else is false is true \ifcase\{ \{ 45 < 80 \OR 5 = 5 } \AND 0<>0 } is true \else is false is false \ifcase\{ 12>0 \AND (4+3)*5 > 20 } is true \else is false is true \makeatletter \number\{ \the\catcode \@=11 } 0 (catcode of is 11) \makeatother \number\{ \the\catcode \@=11 \AND \ifdefined\@undefined 0\else 1 } 1 (catcode of is 12) \makeatletter \number\{ 3<4 \AND \@ifundefined{iftest}{1}{\iftest 0\else 1} } 1: \iftest not defined \makeatletter \newif\iftest \testtrue \number\{ 3<4 \AND \@ifundefined{iftest}{1}{\iftest 0\else 1} } 0: \iftest is true \ifcase\{ \dimexpr 12pt + 1in > 8mm * 2 \AND \iftest 0\else 1 } is true \else is false is true \ifcase\{ 0=0 \AND \ifcase\{1=1 \AND 5<=5} 1\else 0 } is true is false \else is false α \AND NOT( β \AND γ ) = α \AND NOT β \OR α \AND NOT γ Results in green were evaluated by at compilation time. 3 / 12
4 The syntax \case { boolean expression }... \case { boolean expression }... \otherwise... defines a syntax for conditionals which remains purely expandable: Each part of the switch is optional. That means: \case{ bool expr }... \case{ beel expr }... \case{ bool expr }... \otherwise... \case{ bool expr }... \case{ beel expr }... \case{ bool expr }... \otherwise... are allowed by. examples The part of the expression that is evaluated is in blue (the remainder is not evaluated). 4 / 12
5 \case{6>1 \AND 6<=5}$\geq 1$ and $\leq 5$% \case{3<10}$> 5$ and $< 10$% \case{3>10}$\geq 10$% > 5 and < 10 \edef\result{% \case{6>1 \AND 6<=5}$\geq 1$ and $\leq 5$% \case{3<10}$> 5$ and $< 10$% \case{3>10}$\geq 10$% } result: $>5$ and $< 10$ \newcounter{mycounter} \setcounter{mycounter}{2} \edef\result{% [\value{mycounter}=] \case{1}one% > \case{2}two% <=> \case{value{mycounter}=2} \case{3}three% \case{2}vartwo%never found% \otherwise something else% } result: two switch[\value{mycounter}] \case{=1}it s $1$% \case{=-1}it s $-1$% It s >= > - \case{>=0}it s $>=0$% <=> \case{\value{mycounter}>=0} \otherwise something else% switch[\pdfstrcmp{dummy}] \case{{first}}it s "First"% > - \case{{dummy}it s DuMmY% \otherwise something else% It s "DuMmY" Results in green were evaluated by.sty at compilation time. 1.1 Purely expandable macros for tests with Please refer to the etextools package documentation at : 5 / 12
6 2 Implementation 2.1 The algorithm The string is the suite of atomic expressions connected by \AND or \OR. The result must be 0 if the string is true, and non zero if the string is false. go to some macro means: now expand some macro. A \bex@or 1) Split the string into two parts: #1 = before the first \OR (#1 does not contain any \OR) #2 = after the first \OR 2) If #2 is blank: the string contains no \OR then go to \bex@and to test \AND relations in #1 Otherwise: test the \AND relations in #1 and keep #2 in a so called or-buffer for further testing. B C \bex@and #1 = or-buffer for further testing if needed 1) Split the string before the first \OR (ie. the #1 of A.1) into two parts: #2 = before the first \AND (#2 is an atomic expression) #3 = after the first \AND (#3 does not contain any \OR) 2) Then test #2 (the atomic expression): TRUE: If #3 is blank then #2 is either: an atomic expression alone the last atomic expression in string, preceded by \OR an atomic expression preceded by \OR and followed by \OR In each of these 3 cases, the whole expression (ie. the string) is true because #2 is true (otherwise, we had known the result of the whole string earlier, and were not into testing #2) Now if #3 is not blank then #2 is followed by \AND: go to \bex@andand to test the series of \AND FALSE: if the or-buffer #1 is blank then #2 is either: an atomic expression alone an atomic expression followed a series of \AND (and no \OR) the last atomic expression of the string In each or these 3 cases, the whole expression (ie. the string) is false because #2 is false (otherwise, the result would have been known earlier) Now if the or-buffer #1 is not blank, then we have to do more tests to get the result: go to \bex@or to split the or-buffer (#1 here) and continue testing... \bex@andand #1 is the or-buffer for further testing if needed 1) Split the string (ie. #3 in B.2.true) into two parts: #2 : before the first \AND (#2 is an atomic expression) #3 : after the first \AND 6 / 12
7 2) Test the atomic expression #2: TRUE: If #3 is blank then #2 is the last atomic expression of a series of \AND (possibly followed by \OR). Conclusion: the whole string is true (otherwise, we would have concluded earlier that it was false and were not into testing #2... think about it) Now if #3 is not blank then #2 is followed by \AND and we have to test further: go to \bex@andand to test #3. FALSE: we do not have to test the following \AND: the \AND-connected series is false. If the or-buffer #1 is blank then the whole string is false. Now if the or-buffer #1 is not blank: continue testing into this or-buffer : go to \bex@or. 2.2 Category codes considerations At first glance, the author of this package wanted to test inequality with the operator!=. A problem arose because some languages make the character! active (f.ex. french). As far as babel changes the catcodes \AtBeginDocument, the category code of! is different in the preamble (12) than in the document (13). After all, it was possible to change the definitions after begin document but... if you try to make the = character active, you will (surprisingly) observe that a test like: \ifnum 4=4 ok leads you to one of the following error messages: undefined control sequence = if = is undefined missing = inserted for \ifnum if = is defined. The same apply for < or >. Therefore: such conditionals are possible for TEX only if =, < and > have a category code of 12 (11 is forbidden too). Thus the choice of <> is far easier and more reliable than the c-like!=. 2.3 Identification This package is intended to use with a LATEX distribution of ε-tex. 1 *package 2 \ProvidesPackage{} 3 [2010/04/15 v3.14 Purely expandable boolean expressions and switch (etex)] 2.4 Special catcode The colon (/) will be used as a delimiter. We give it a category code of 8 (as in etextools): 4 \let\bex@atend\@empty 5 \def\tmp@ensurecode#1#2{% 6 \edef\bex@atend{% 7 \bex@atend 8 \catcode#1 \the\catcode#1\relax 9 }% 10 \catcode#1 #2\relax 11 } 12 \TMP@EnsureCode{95}{11}% _ 13 \TMP@EnsureCode{47}{8}% / etextool delimiter 14 \TMP@EnsureCode{60}{12}% < 15 \TMP@EnsureCode{61}{12}% = 16 \TMP@EnsureCode{62}{12}% > 17 \TMP@EnsureCode{43}{12}% - 7 / 12
8 : delimitor 2.5 Tree helper macros While reading the log file it is preferable to read when the algorithm is making a choice (\ifblank) and \bex@truepart/bex@falsepart when the algorithm has just determined the result of an atomic expression. 20 \let\bex@truepart\@firstoftwo 21 \let\bex@falsepart\@secondoftwo \bex@nbk The following macro is purely expandable and its code is most probably due to D. Arseneau (url.sty). \bex@nbk means if not blank. 22 \long\def\bex@nbk#1#2/#3#4#5//{#4} \bex@ifoptchar \bex@ifoptchar checks if a character is a single opening bracket [. 24 first\else second oftwo\endcsname} 2.6 Atomic expression evaluation The six possible numeric atomic expressions x < y, x <= y, x > y, x >= y, x <> y and x = y are first transformed to their zero-form: \numexpr x y < 0,\numexpr x y > 0,\numexpr x y <> 0, \numexpr x y = 0 etc. Before all, we need to know which relation is used in the atomic expression: \bex@rel \bex@rel tests an atomic expression: first determine its type (inferior to, superior to, equality, inequality, other \) and then use the appropriate evaluation macro: 25 \long\def\bex@rel#1{% 26 \bex@test_eval#1/{\bex@eval{#1}} 27 {\bex@test_neq#1<>//{\bex@neq #1/} 28 {\bex@test_infeq#1<=//{\bex@infeq #1/} 29 {\bex@test_inf#1<//{\bex@inf #1/} 30 {\bex@test_supeq#1>=//{\bex@supeq #1/} 31 {\bex@test_sup#1>//{\bex@sup #1/} 32 {\bex@test_eq#1=//{\bex@eq #1/} 33 {\@latex@error{unknown relation found while scanning 34 \noexpand\!}\@ehd}//}//}//}//}//}//}} The test macros They test each atomic expression in order to determine its type: 35 \def\bex@test_neq#1<>#2/{\bex@nbk#2/} 36 \def\bex@test_eq#1=#2/{\bex@nbk #2/} 37 \def\bex@test_infeq#1<=#2/{\bex@nbk #2/} 38 \def\bex@test_inf#1<#2/{\bex@nbk #2/} 39 \def\bex@test_supeq#1>=#2/{\bex@nbk #2/} 40 \def\bex@test_sup#1>#2/{\bex@nbk #2/} 41 \long\def\bex@test_eval#1#2/{% 42 \ifcat\noexpand#1\relax% #1 is a control sequence 43 \bex@test_eval{#1} 44 \else \expandafter\@secondoftwo 45 } \ifx#1\the second% 8 / 12
9 48 \else\ifx#1\numexpr second% 49 \else\ifx #1\number second% 50 \else\ifx #1\dimexpr second% 51 \else\ifx #1\glueexpr second% 52 \else\ifx #1\muexpr second% 53 \else\ifx #1\value second% 54 \else first% 55 oftwo\endcsname} Evaluation macros They evaluate each atomic expression according to its type: \ifnum\numexpr#1 true\else false part\endcsname} \ifnum\numexpr#1 false\else true part\endcsname} \AND and \OR management splits the string to evaluate into two parts: before the first \OR and after: 67 splits the string to evaluate into two parts: before the first \AND and after: evaluate successive atomic expressions related by \AND until false is found or until the end if every expression is true: \ \ is the entry point for evaluating boolean expressions: 76 \newcommand\[1]{\bex@nbk #1//{\numexpr\bex@OR#1\OR:}{+1}//} \if \if is the LATEX form of \ tests: 77 \ifdefined\if% etoolbox defines if \PackageWarning{}{\string\if\space has been defined before\messagebreak 79 by etoolbox (I suppose) - Overwritting} 80 \renewcommand\if[1]{\bex@true_or_false{\{#1}=0}} 81 \else 82 \newcommand\if[1]{\bex@true_or_false{\{#1}=0}} 83 9 / 12
10 is not long to implement... see: 84 \long\def #1 85 \long\def \def } \def\bex@switch_case[#1]#2\case#3{\bex@nbk#2//% 95 {\bex@case[{#1}]#2\endcase% 96 {\bex@nbk#3//{\bex@switch_case[{#1}]#3}\@firstoftwo//}}% 97 {\bex@nbk#3//{\bex@switch_case[{#1}]#3}\@firstoftwo//}//} \long\def\bex@case[#1]#2#3\endcase{\if{#1#2}{\bex@after_endswitch{#3}}} \long\def\bex@after_endswitch#1#2{#1} 102 \long\def\bex@otherwise#1\otherwise#2{#1} Purely expandable macros for tests with \bex@pdfmatch 103 \long\def\bex@pdfmatch#1#2{\ifnum\pdfmatch{#2}{#1}=0 1\else0} \bex@ifempty 104 \long\def\bex@ifempty#1{\if\relax\detokenize{#1}\relax0\else1} 105 first\else second oftwo \bex@ifblank 106 \long\def\bex@ifblank#1{\bex@nbk#1//10//} \bex@ifx 107 \long\def\bex@ifx#1#2{\bex ifx#1#2//} 108 \long\def\bex_ifx#1#2#3/#4#5#6//{\bex@nbk#6//{\ifx#1#2\bex_else#5\else\bex_fi#6}{#5}//} 109 \long\def\bex_else#1\else#2{#1} 110 \long\def\bex_fi#1{#1} \bex@comp 111 \long\def\bex@comp#1{\bex@ifoptchar#1/[/\bex@c@mp{\bex@c@mp@[\numexpr]}} 112 \long\def\bex@c@mp[#1#2]#3#4#5{% 113 \bex_ifempty{#2}{% 114 \ifx #1\dimexpr \bex@c@mp@\ifdim\dimexpr{#3}{#4}{#5}% 115 \else\ifx #1\numexpr \bex@c@mp@\ifnum\numexpr{#3}{#4}{#5}% 116 \else\ifx #1\glueexpr \bex@c@mp@\ifdim\glueexpr{#3}{#4}{#5}% 117 \else\ifx #1\muexpr \bex@c@mp@\ifdim\muexpr{#3}{#4}{#5}% 118 \else\ifx #1\number \bex@c@mp@\ifnum\numexpr{#3}{#4}{#5}% 119 \else\packageerror{}{% 120 Invalid comparison test while scanning \string\bex@comp\messagebreak 121 found: \detokenize{#1}}% 122 }% 123 {\PackageError{}{Invalid comparison test while scanning \string\bex@comp\mes 124 found: \detokenize{#1}}}} 125 \long\def\bex@c@mp@#1#2#3#4#5{#1#2#3#4#5 0\else 1} 10 / 12
11 /package 2.8 Future developments : to do should work either with ε-tex or ε-tex-latex... May be build a real \NOT operator. 3 History [2010/04/15 v3.14] etoolbox now defines a \if macro (not purely expandable). Fix has been done (with a warning) to be able to use \if from. [2009/09/30 v3.1] Support of \pdfmatch added (\bex@pdfmatch) [2009/09/03 v3.0 ε-t E X- and XeT E X- stable] Many bug fixed in. Tested on LATEX, pdflatex and XeLATEX. Revision of this pdf documentation. [2009/08/31 v2.9] Added \value in the list of exceptions (\bex@test_eval) Enhancement of with the optional first argument (refer to the examples). [2009/08/13 v2.2] Small optimisation in \bex@or [2009/08/12 v2.1] Added the syntax Small bug (\numexpr forgotten in the list of exceptions (\bex@test_eval) Redesigned tests for better compilation [2009/07/22 v1.0] First version. 11 / 12
12 4 Index Numbers written in italic refer to the page where the corresponding entry is described; numbers underlined refer to the code line of the definition; numbers in roman refer to the code lines where the entry is used. Symbols 20, 96, 97 21, A \AND , 68, 72 B \bex@after , 101 \bex@and , 68 \bex@andand , 72 \bex@atend , 6, 7, 126 \bex@c@mp , 112 \bex@c@mp@. 111, 114, 115, 116, 117, 118, 125 \bex@case , 99 \bex@comp \bex@eq , 60 \bex@eval , 66 \bex@false , 61, 62, 64 \bex@falsepart \bex@ifblank \bex@ifempty \bex@ifoptchar , 85, 111 \bex@ifx \bex@inf , 63 \bex@infeq , 62 \bex@nbk , 35, 36, 37, 38, 39, 40, 70, 71, 74, 75, 76, 84, 91, 94, 96, 97, 106, 108 \bex@neq , 61 \bex@or , 71, 75, 76 \bex@otherwise , 102 \bex@pdfmatch \bex@rel , 69, 73 \bex@sup , 65 \bex@supeq , 64 \bex@switch. 84, 85, 86, 87, 89, 90, 94, 96, 97 \bex@test , 27, 28, 29, 30, 31, 32, 35, 36, 37, 38, 39, 40, 41, 43, 46 \bex@true , 60, 63, 65, 66, 80, 82 \bex@truepart \ , 34, 76, 80, 82 C \catcode , 10 D \detokenize , 104, 105, 121, 124 \dimexpr , 114 E , 85, 86, 87, 89, 90, 91, 92, 94, 96, 97, 101, 102 \Evaluation macros G \glueexpr , 116 I \if , 77, 99 \ifcat \ifdim , 116, 117 \ifnum , 59, 103, 115, 118 M \muexpr , 117 N \number , 118 \numexpr , 57, 59, 76, 111, 115, 118 O \OR , 76 \otherwise , 89, 102 P \PackageError , 123 \PackageWarning \pdfmatch S , 84 T \The test macros \TMP@EnsureCode 5, 12, 13, 14, 15, 16, 17, 18, 19 V \value / 12
The mhsetup package. 1 The new internal syntax. 2 Handling optional arguments. Morten Høgholm 2007/12/03
The mhsetup package Morten Høgholm 2007/12/03 Abstract The mhsetup package provides tools for a L A TEX programming environment similar to the one described in expl3 on ctan although not as extensive.
More informationmylatexformat Use mylatexformat to make a format based on the preamble of any LaTeX file 2011/02/12 version 3.4
mylatexformat Use mylatexformat to make a format based on the preamble of any LaTeX file FC 2011/02/12 version 3.4 Abstract mylatexformat can be used to make a format from the preamble of any L A TEX file.
More informationMartin Scharrer Version v /09/19
The filemod Package Martin Scharrer martin@scharrer-online.de http://www.ctan.org/pkg/filemod Version v1.2 2011/09/19 Abstract This package provides macros to read and compare the modification dates of
More informationThe bigintcalc package
The bigintcalc package Heiko Oberdiek 2007/11/11 v1.1 Abstract This package provides expandable arithmetic operations with big integers that can exceed TEX s number limits. Contents
More informationThe thepdfnumber package
The thepdfnumber package Heiko Oberdiek 2016/05/16 v1.1 Abstract The package converts real numbers to a minimal representation that is stripped from leading or trailing
More informationlogbox 2011/03/26 version 1.0
FC 2011/03/26 version 1.0 Abstract Exploring a box content and its dimensions is often required for typography is made of measurements. logbox provides a few macros to achieve this task easily: \viewbox
More informationThe bnumexpr package
The bnumexpr package Jean-François Burnol jfbu (at) free (dot) fr Package version: 1.2c (2017/12/05); documentation date: 2017/12/05. From source file bnumexpr.dtx. Time-stamp:
More informationImplementation of Forest, a pgf/tik Z-based package for drawing linguistic trees
Implementation of Forest, a pgf/tik Z-based package for drawing linguistic trees v2.1.5 Sašo Živanović July 14, 2017 This file contains the documented source of Forest. If you are searching for the manual,
More informationThe newunicodechar package
The newunicodechar package nrico Gregorio nrico dot Gregorio at univr dot it April 8, 2018 1 Introduction When using Unicode input with L A TX it s not so uncommon to get an incomprehensible error message
More informationThe alphalph package
The alphalph package Converting numbers to letters 1999/04/13, v1.1 Heiko Oberdiek 1 Abstract The package provides the new expandable commands \alphalph and \AlphAlph. They are like \number, but the expansion
More informationThe optparams package
The optparams package Jonathan Sauer jonathan.sauer@gmx.de 2004/08/14 Abstract This file describes the optparams package that provides a small macro for creating macros with multiple optional parameters.
More informationThe bitset package. Heiko Oberdiek <heiko.oberdiek at googl .com> 2016/05/16 v1.2
The bitset package Heiko Oberdiek 2016/05/16 v1.2 Abstract This package defines and implements the data type bit set, a vector of bits. The size of the vector may grow
More informationThe onlyamsmath package
The onlyamsmath package Harald Harders harald.harders@gmx.de Version v0.20, 2016/12/18, printed January 8, 2017 Abstract This package inhibits the usage of plain TEX and on demand of standard L A TEX math
More informationThe protecteddef package
The protecteddef package Heiko Oberdiek 2016/05/16 v1.1 Abstract This packages provides \ProtectedDef for defining robust macros for both plain TEX and L A TEX. First
More informationThe selinput package
The selinput package Heiko Oberdiek 2007/09/09 v1.2 Abstract This package selects the input encoding by specifying between input characters and their glyph names. Contents 1
More informationThe hypbmsec package
The hypbmsec package Heiko Oberdiek 2016/05/16 v2.5 Abstract This package expands the syntax of the sectioning commands. If the argument of the sectioning commands isn
More informationThe filecontents package
The filecontents package Scott Pakin scott+fc@pakin.org May 31, 2018 1 Introduction filecontents There is a little-known environment called filecontents that is built into L A TEX 2ε. Here is filecontents
More informationqstest, a L A TEX package for unit tests
qstest, a L A TEX package for unit tests David Kastrup David dot Kastrup (at) QuinScape dot de Abstract The qstest package was created because of the need to verify in a large L A TEX project that no regressions
More informationThe listingsutf8 package
The listingsutf8 package Heiko Oberdiek 2011/11/10 v1.2 Abstract Package listings does not support files with multi-byte encodings such as UTF-8. In case of \lstinputlisting
More informationenumitem-zref Extended references to items for enumitem package
enumitem-zref The \refitem command FC 2011/02/18 version 1.8 Abstract enumitem-zref, as a companion package for enumitem 1, extends the references mechanism for lists of items
More informationThe selinput package
The selinput package Heiko Oberdiek 2016/05/17 v1.4 Abstract This package selects the input encoding by specifying between input characters and their glyph names. Contents
More informationThe grffile package. Heiko Oberdiek 2009/09/25 v1.10
The grffile package Heiko Oberdiek 2009/09/25 v1.10 Abstract The package extends the file name processing of package graphics to support a larger range of file names. For example,
More informationqstest.sty QuinScape Unit Test Package version
qstest.sty QuinScape Unit Test Package version 1.7896 David Kastrup 2007/02/21 1 Using qstest The basic idea of qstest is to let the user specify a number of tests that can be performed either at package
More informationThe plstx package. Jesse A. Tov This document corresponds to plstx v0.2, dated 2011/03/26.
The plstx package Jesse A. Tov tov@ccs.neu.edu This document corresponds to plstx v0.2, dated 2011/03/26. Contents 1 Introduction 1 1.1 Requirements.............................. 2 2 Command Reference
More informationThe svn-prov package
The svn-prov package Use SVN Id keywords for package, class and file header Martin Scharrer martin@scharrer-online.de Version v1.1049-2009/05/03 1 Introduction This package is directed to authors of L
More informationThe lips LaTeX package Chicago Manual text ellipses (Frankenstein s lips)
The lips LaTeX package Chicago Manual text ellipses (Frankenstein s lips) Matt Swift Version: 2.1 Date: 2001/08/31 Documentation revision: 2001/08/31 Abstract The \lips command generates
More informationThe ushort package. Martin Väth 2013/11/26
The ushort package Martin Väth 2013/11/26 Abstract With this package you may write shorter(or longer) underlines/underbars. This is particularly useful for underlined variables which are needed by some
More informationThe eolgrab package. Heiko Oberdiek <heiko.oberdiek at googl .com> 2016/05/16 v1.1
The eolgrab package Heiko Oberdiek 2016/05/16 v1.1 Abstract This package implements a generic argument grabber to catch an argument that is delimited by the line end.
More informationThe lstautogobble Package
The lstautogobble Package Martin Scharrer martin@scharrer-online.de CTAN: http://www.ctan.org/pkg/lstautogobble VC: https://bbucket.org/martin_scharrer/lstautogobble Version v0.1 2012/05/03 Abstract This
More informationMacros. 194 TUGboat, Volume 25 (2004), No. 2
194 TUGboat, Volume 25 (2004), No. 2 Macros xkeyval new developments and mechanisms in key processing Hendri Adriaens and Uwe Kern Abstract This article introduces the xkeyval (L A )TEX package, an extension
More informationThe kvsetkeys package
The kvsetkeys package Heiko Oberdiek 2009/07/30 v1.5 Abstract Package kvsetkeys provides \kvsetkeys, a variant of package keyval s \setkeys. It allows to specify a handler that
More informationThe EverySel package
The EverySel package Martin Schröder Unterstraße 31 47051 Duisburg Germany martin@oneiros.de October 28, 2011 Abstract This packages provides hooks into the NFSS-command \selectfont called \EverySelectfont
More informationThe mathstyle package
The mathstyle package Authors: Michael J. Downes, Morten Høgholm Maintained by Morten Høgholm, Will Robertson Feedback: https://github.com/wspr/breqn/issues 2017/01/27 0.98e User s guide This package exists
More informationThe dashrule package
The dashrule package Scott Pakin scott+dash@pakin.org March 28, 2013 Abstract The dashrule package makes it easy to draw a huge variety of dashed rules (i.e., lines) in L A TEX. dashrule provides a command,
More informationThe luacolor package
The luacolor package Heiko Oberdiek 2009/04/10 v1.1 Abstract Package luacolor implements color support based on LuaTEX s node attributes. Contents 1 Documentation 2 1.1 Introduction...............................
More informationThe pdfcrypt package
The pdfcrypt package Heiko Oberdiek 2016/05/16 v1.1 Abstract This package supports the setting of pdf encryption options for VTEX and some older versions of pdftex. Contents
More informationThe tensor package for L A TEX2e
The tensor package for L A TEX2e Philip G. Ratcliffe Dipartimento di Fisica e Matematica Università degli Studi dell Insubria Como Abstract This is a complete revision and extension of Mike Piff s original
More informationPixelArt A package to draw pixel-art pictures.
PixelArt A package to draw pixel-art pictures. Louis Paternault spalax+ctan(at)gresille(dot)org February 25, 2018 Abstract This package defines macros to draw pixel-art pictures using L A TEX. Contents
More informationThe calc package Infix notation arithmetic in L A TEX
The calc package Infix notation arithmetic in L A TEX Kresten Krab Thorup, Frank Jensen (and Chris Rowley) 2017/05/25 This file is maintained by the L A TEX Project team. Bug reports can be opened (category
More informationThe file ltxdoc.dtx for use with L A TEX 2ε. It contains the code for ltxdoc.cls
The file ltxdoc.dtx for use with L A TEX 2ε. It contains the code for ltxdoc.cls David Carlisle 2015/03/26 This file is maintained by the L A TEX Project team. Bug reports can be opened (category latex)
More informationThe pst-ob3d package A PSTricks package for three dimensional basic objects
The pst-ob3d package A PSTricks package for three dimensional basic objects Denis Girou Herbert Voß Version 0.21 August 22, 2007 Abstract This package allow to draw basic three dimensional objects. Up
More informationThe ted package. Manuel Pégourié-Gonnard v1.06 (2008/03/07) 1 Introduction 1. 2 Usage 1. 3 Implementation 3
The ted package Manuel Pégourié-Gonnard mpg@elzevir.fr v1.06 (2008/03/07) Contents 1 Introduction 1 2 Usage 1 3 Implementation 3 1 Introduction Just like sed is a stream editor, ted is a token list editor.
More informationThe totpages package
The totpages package Wilhelm Müller Herbststraße 66 D-28215 Bremen muewi@acm.org 2005/09/19 Abstract This package counts the total number of pages shipped out to the dvi file, which allows sentences like
More informationThe bmpsize package. Heiko Oberdiek <heiko.oberdiek at googl .com> 2016/05/16 v1.7
The bmpsize package Heiko Oberdiek 2016/05/16 v1.7 Abstract Package bmpsize analyzes bitmap images to extract size and resolution data. It adds this feature to the graphics
More informationThe isodateo package
The isodateo package Harald Harders h.harders@tu-bs.de File Date 2004-02-12, Printed 2005-03-10 Abstract This package provides commands to switch between different date formats (standard, ISO, numeric,
More informationThe widetable package
The widetable package Claudio Beccari Version number v.1.4; last revision 2017/09/09. Contents 1 Legalese 1 2 Introduction 1 3 Usage 2 4 The method 3 5 The long division algorithm 3 6 Using the εtex facilies
More informationThe pdflscape package
The pdflscape package Heiko Oberdiek 2008/08/11 v0.10 Abstract Package pdflscape adds PDF support to the environment landscape of package lscape by setting the PDF page
More informationManuel Pégourié-Gonnard v1.2a 2012/01/23
The luacode package Manuel Pégourié-Gonnard v1.2a 2012/01/23 Abstract Executing Lua code from within TEX with \directlua can sometimes be tricky: there is no easy way to use the percent
More informationThe hanging package. Contents. 1 Introduction
The hanging package Author: Peter Wilson, Herries Press Maintainer: Will Robertson will dot robertson at latex-project dot org 2009/09/02 Abstract The hanging package provides facilities for defining hanging
More informationThe file ltxdoc.dtx for use with L A TEX 2ε. It contains the code for ltxdoc.cls
The file ltxdoc.dtx for use with L A TEX 2ε. It contains the code for ltxdoc.cls David Carlisle 1999/08/08 1 Documentation of the L A TEX sources This class file is designed for documenting the L A TEX
More informationModule 10: Imperative Programming, Modularization, and The Future
Module 10: Imperative Programming, Modularization, and The Future If you have not already, make sure you Read How to Design Programs Sections 18. 1 CS 115 Module 10: Imperative Programming, Modularization,
More informationThe atveryend package
The atveryend package Heiko Oberdiek 2016/05/16 v1.9 Abstract This L A TEX package provides two hooks for \end{document} that are executed after the hook of \AtEndDocument.
More informationThe stdclsdv package
The stdclsdv package Peter Wilson, Herries Press Maintainer: Will Robertson will dot robertson at latex-project dot org 2009/09/04 Abstract The stdclsdv package is intended to be used by the authors of
More informationPackage. listofitems. v January Christian Tellechea Steven B. Segletes
Package listofitems v1.52 13 January 2018 Christian Tellechea Steven B. Segletes This simple package is designed to read a list of items whose parsing separator may be selected by the user. Once the list
More informationThe cybercic package
The cybercic package Jared Jennings jjennings@fastmail.fm June 23, 2015 Contents 1 What s it for? 2 2 How to use it 2 3 Caveats 2 4 Implementation 3 This document corresponds to cybercic v2.1, dated 2015/06/24.
More informationThe pdflscape package
The pdflscape package Heiko Oberdiek 2016/05/14 v0.11 Abstract Package pdflscape adds PDF support to the environment landscape of package lscape by setting the PDF page
More informationThe l3galley package Galley code
The l3galley package Galley code The L A TEX3 Project Released 2019-03-05 1 Introduction In L A TEX3 terminology a galley is a rectangular area which receives text and other material filling it from top.
More informationThe showexpl package
The showexpl package Rolf Niepraschk (Rolf.Niepraschk@ptb.de) 2006/09/18 1 Introduction The documentation of a L A TEX package is by far more readable if there are examples of the commands and environments
More informationThe listproc package
The listproc package Jesse A. Tov tov@ccs.neu.edu This document corresponds to listproc v0.2, dated 2011/08/03. Contents 1 Introduction 1 2 Command Reference 2 2.1 List Definition.............................
More information252 TUGboat, Volume 39 (2018), No. 3
252 TUGboat, Volume 39 (2018), No. 3 Abstract checks page or column breaks for issues with widow or orphan lines and issues warnings if such problems are detected. In addition, it checks and complains
More informationThe ifplatform package
The ifplatform package Original code by Johannes Große Package by Will Robertson http://github.com/wspr/ifplatform v0.4a 2017/10/13 1 Main features and usage This package provides the three following conditionals
More informationThe everyshi package
The everyshi package Martin Schröder Crüsemannallee 3 28213 Bremen Germany martin@oneiros.de PGP-Key: 2048 bit / KeyID 292814E5 7E86 6EC8 97FA 2995 82C3 FEA5 2719 090E 2001/05/15 Abstract This packages
More informationThe resizegather package
The resizegather package Heiko Oberdiek 2016/05/16 v1.3 Abstract Equations that are too large are resized to fit the available space. The environment gather of package
More informationThe nbaseprt package
The nbaseprt package Harald Harders harald.harders@gmx.de Version v0.11, 2004/12/14; printed August 20, 2012 Abstract This package prints integer numbers in different bases (octal, decimal, hexadecimal,
More informationThe luatex package. Heiko Oberdiek 2009/04/10 v0.2
The luatex package Heiko Oberdiek 2009/04/10 v0.2 Abstract This package manages the new and extended features and resources that LuaTEX provides. Examples are attributes and
More informationThe newcommand.py utility
The newcommand.py utility Scott Pakin scott+nc@pakin.org 2010/06/01 Abstract L A TEX s \newcommand is fairly limited in the way it processes optional arguments, but the TEX alternative, a batch of \defs
More informationCompilers Course Lecture 4: Context Free Grammars
Compilers Course Lecture 4: Context Free Grammars Example: attempt to define simple arithmetic expressions using named regular expressions: num = [0-9]+ sum = expr "+" expr expr = "(" sum ")" num Appears
More informationM. R. C. van Dongen. ucc. LaTEX and Friends. Commands and Environments. Marc van Dongen
http://csweb.ucc.ie/~dongen/laf/laf.html M. R. C. van Dongen ucc Advantages of Automation se Tedious tasks can be automated. reusability Define once, use many times. simplicity Easier to use. Avoids errors.
More informationCS1622. Today. A Recursive Descent Parser. Preliminaries. Lecture 9 Parsing (4)
CS1622 Lecture 9 Parsing (4) CS 1622 Lecture 9 1 Today Example of a recursive descent parser Predictive & LL(1) parsers Building parse tables CS 1622 Lecture 9 2 A Recursive Descent Parser. Preliminaries
More informationJonathan Zachhuber Michael Fü erer Version v., / /
e coolthms Package Jonathan Zachhuber Michael Füerer Version v., // Abstract is package makes it possible to directly reference \items in theorem-like environments using the ntheorem and cleveref packages.
More informationThe latexrelease package
The latexrelease package The L A TEX3 Project 2018/02/18 This file is maintained by the L A TEX Project team. Bug reports can be opened (category latex) at https://latex-project.org/bugs.html. 1 Introduction
More informationCase by Case. Chapter 3
Chapter 3 Case by Case In the previous chapter, we used the conditional expression if... then... else to define functions whose results depend on their arguments. For some of them we had to nest the conditional
More informationglossaries-extra.sty v1.38: documented code
glossaries-extra.sty v1.38: documented code Nicola L.C. Talbot Dickimaw Books http://www.dickimaw-books.com/ 2018-12-01 1 Abstract This is the documented code for the glossaries-extra package. See glossaries-extra-manual.pdf
More informationThe etoolbox Package An e-tex Toolbox for Class and Package Authors
The etoolbox Package An e-tex Toolbox for Class and Package Authors Philipp Lehman, Joseph Wright joseph.wright@morningstar2.co.uk Contents Version v2.5 2017/11/22 1 Introduction 1 1.1 About...........
More informationThe threadcol package
The threadcol package Scott Pakin scott+thrcl@pakin.org January 6, 2013 1 Introduction Consider the following situation: You have a two-column pdf file that you want to read on your computer (or tablet
More informationVersion v2.01, 2000/06/29
The amstext package Frank Mittelbach Rainer Schöpf Version v2.01, 2000/06/29 1 Introduction This file is maintained by the L A TEX Project team. Bug reports can be opened (category amsmath) at http://latex-project.org/bugs.html.
More informationThe etoolbox Package
The etoolbox Package An e-tex Toolbox for Class and Package Authors Philipp Lehman plehman@gmx.net Version 2.1 January 3, 2011 Contents 1 Introduction......... 1 1.1 About.......... 1 1.2 License.........
More informationCS 115 Lecture 8. Selection: the if statement. Neil Moore
CS 115 Lecture 8 Selection: the if statement Neil Moore Department of Computer Science University of Kentucky Lexington, Kentucky 40506 neil@cs.uky.edu 24 September 2015 Selection Sometime we want to execute
More informationThe twoopt package. Definitions with two optional arguments. 1999/04/12, v1.3. Heiko Oberdiek 1
The twoopt package Definitions with two optional arguments 1999/04/12, v1.3 Heiko Oberdiek 1 Abstract This package provides commands to define macros with two optional arguments. Contents 1 Usage 1 2 Installation
More informationmnotes annotate documents with margin comments
mnotes annotate documents with margin comments S Luz luzsacm.org November 5, 2014 Abstract This is a simple package to allow you to add comments to the margins of your documents. It is primarily designed
More informationThe KOMA- Script package tocstyle
The KOMA- Script package tocstyle Markus Kohm 2009/11/09 While the main classes of the KOMA- Script bundle were made, there where several ideas for formating the table of contents and lists of floats,
More informationFiltering TEX(t) Files by TEX
fifinddo Filtering TEX(t) Files by TEX Uwe Lück http://contact-ednotes.sty.de.vu April 16, 2009 Abstract FIDO, FIND! or: FIND FIDO! oder: FIFI, SUCH! fifinddo starts implementing parsing of plain text
More informationbibleref.sty (1.17a): a L A TEX 2ε package for typesetting bible references
bibleref.sty (1.17a): a L A TEX 2ε package for typesetting bible references Nicola Talbot (inactive) Maïeul Rouquette (active) 2018/06/05 Contents 1 General use 1 1.1 Basic............................................
More informationThe svn package. Richard Lewis 25th September 2007
The svn package Richard Lewis rpil2+svn.sty@rtf.org.uk 25th September 2007 1 Introduction Subversion is a replacement for CVS and RCS. It is similar to CVS but with some improvements (e.g., it understands
More informationThe package paresse. Le TEXnicien de surface February 16, 2013
The package paresse Le TXnicien de surface le.texnicien.de.surface@wanadoo.fr February 16, 2013 Abstract This package implements an example from T. Lachand-Robert in [1]. It provides a means of typing
More informationThe epstopdf package
The epstopdf package Heiko Oberdiek 2009/10/17 v2.4 Abstract This packages adds support of handling eps images to package graphics or graphicx with option pdftex. If an eps image
More informationThe stringenc package
The stringenc package Heiko Oberdiek 2008/10/27 v1.6 Abstract This package provides \StringEncodingConvert for converting a string between different encodings. Both L A TEX and
More informationBasic C Programming (2) Bin Li Assistant Professor Dept. of Electrical, Computer and Biomedical Engineering University of Rhode Island
Basic C Programming (2) Bin Li Assistant Professor Dept. of Electrical, Computer and Biomedical Engineering University of Rhode Island Data Types Basic Types Enumerated types The type void Derived types
More informationThe trace package. Frank Mittelbach 2014/10/28
The trace package Frank Mittelbach 2014/10/28 This file is maintained by the L A TEX Project team. Bug reports can be opened (category tools) at https://latex-project.org/bugs.html. 1 Introduction When
More informationThe EverySel package
The EverySel package Martin Schröder Crüsemannallee 3 D-28213 Bremen Martin.Schroeder@ACM.org PGP-Key: 2048 bit / KeyID 292814E5 7E86 6EC8 97FA 2995 82C3 FEA5 2719 090E 1999/06/08 Abstract This packages
More informationmultidef: quick definition of multiple similar L A TEX macros
multidef: quick definition of multiple similar L A TEX macros Nicolas Markey 2016/04/20 Abstract multidef provides a succinct way of defining series of macros having similar definitions. While this can
More informationThe rotchiffre package
The rotchiffre package Heiko Oberdiek 2016/05/16 v1.1 Abstract This package implements chiffres ROT13 with its variants ROT5, ROT18, and ROT47. Contents 1 Documentation
More informationSimple Math. Adam Dishaw 2011 September 21. Suppose you want to include some math in your documents. Just follow these basics steps:
Simple Math Adam Dishaw 2011 September 21 Suppose you want to include some math in your documents. Just follow these basics steps: 1. Create a new TEX document with the basic requirements (the documentclass
More informationThe xparse package Document command parser
The xparse package Document command parser The L A TEX3 Project Released 2018-10-17 The xparse package provides a high-level interface for producing document-level commands. In that way, it is intended
More informationWeek 2: The Clojure Language. Background Basic structure A few of the most useful facilities. A modernized Lisp. An insider's opinion
Week 2: The Clojure Language Background Basic structure A few of the most useful facilities A modernized Lisp Review of Lisp's origins and development Why did Lisp need to be modernized? Relationship to
More informationThe tabularx package
The tabularx package David Carlisle 2016/02/03 This file is maintained by the L A TEX Project team. Bug reports can be opened (category tools) at https://latex-project.org/bugs.html. Abstract A new environment,
More informationScheme: Data. CS F331 Programming Languages CSCE A331 Programming Language Concepts Lecture Slides Monday, April 3, Glenn G.
Scheme: Data CS F331 Programming Languages CSCE A331 Programming Language Concepts Lecture Slides Monday, April 3, 2017 Glenn G. Chappell Department of Computer Science University of Alaska Fairbanks ggchappell@alaska.edu
More informationpgfopts LaTeX package options with pgfkeys
pgfopts LaTeX package options with pgfkeys Joseph Wright Released 2014/07/10 Abstract Using key value options for packages and macros is a good way of handling large numbers of options with a clean interface.
More informationThe asymptote package
The asymptote package John Bowman, Tom Prince, and Will Robertson 2016/11/26 v1.33 Abstract This package provides integration of inline and external Asymptote graphics within a L A TEX document. Contents
More informationThe pagenote package
The pagenote package Author: Peter Wilson, Herries Press Maintainer: Will Robertson will dot robertson at latex-project dot org 2009/09/03 Abstract The pagenote package provides notes similar to footnotes
More information