Purely expandable boolean expressions and switch (ε-t E X). 2010/04/15 v3.14

Size: px
Start display at page:

Download "Purely expandable boolean expressions and switch (ε-t E X). 2010/04/15 v3.14"

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. 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 information

mylatexformat 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 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 information

Martin Scharrer Version v /09/19

Martin 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 information

The bigintcalc package

The 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 information

The thepdfnumber package

The 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 information

logbox 2011/03/26 version 1.0

logbox 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 information

The bnumexpr package

The 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 information

Implementation 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 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 information

The newunicodechar package

The 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 information

The alphalph package

The 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 information

The optparams package

The 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 information

The bitset package. Heiko Oberdiek <heiko.oberdiek at googl .com> 2016/05/16 v1.2

The 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 information

The onlyamsmath package

The 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 information

The protecteddef package

The 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 information

The selinput package

The 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 information

The hypbmsec package

The 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 information

The filecontents package

The 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 information

qstest, a L A TEX package for unit tests

qstest, 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 information

The listingsutf8 package

The 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 information

enumitem-zref Extended references to items for enumitem package

enumitem-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 information

The selinput package

The 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 information

The grffile package. Heiko Oberdiek 2009/09/25 v1.10

The 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 information

qstest.sty QuinScape Unit Test Package version

qstest.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 information

The plstx package. Jesse A. Tov This document corresponds to plstx v0.2, dated 2011/03/26.

The 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 information

The svn-prov package

The 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 information

The lips LaTeX package Chicago Manual text ellipses (Frankenstein s lips)

The 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 information

The ushort package. Martin Väth 2013/11/26

The 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 information

The eolgrab package. Heiko Oberdiek <heiko.oberdiek at googl .com> 2016/05/16 v1.1

The 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 information

The lstautogobble Package

The 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 information

Macros. 194 TUGboat, Volume 25 (2004), No. 2

Macros. 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 information

The kvsetkeys package

The 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 information

The EverySel package

The 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 information

The mathstyle package

The 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 information

The dashrule package

The 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 information

The luacolor package

The 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 information

The pdfcrypt package

The 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 information

The tensor package for L A TEX2e

The 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 information

PixelArt A package to draw pixel-art pictures.

PixelArt 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 information

The calc package Infix notation arithmetic in L A TEX

The 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 information

The 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 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 information

The pst-ob3d package A PSTricks package for three dimensional basic objects

The 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 information

The 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 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 information

The totpages package

The 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 information

The bmpsize package. Heiko Oberdiek <heiko.oberdiek at googl .com> 2016/05/16 v1.7

The 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 information

The isodateo package

The 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 information

The widetable package

The 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 information

The pdflscape package

The 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 information

Manuel Pégourié-Gonnard v1.2a 2012/01/23

Manuel 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 information

The hanging package. Contents. 1 Introduction

The 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 information

The 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 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 information

Module 10: Imperative Programming, Modularization, and The Future

Module 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 information

The atveryend package

The 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 information

The stdclsdv package

The 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 information

Package. listofitems. v January Christian Tellechea Steven B. Segletes

Package. 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 information

The cybercic package

The 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 information

The pdflscape package

The 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 information

The l3galley package Galley code

The 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 information

The showexpl package

The 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 information

The listproc package

The 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 information

252 TUGboat, Volume 39 (2018), No. 3

252 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 information

The ifplatform package

The 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 information

The everyshi package

The 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 information

The resizegather package

The 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 information

The nbaseprt package

The 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 information

The luatex package. Heiko Oberdiek 2009/04/10 v0.2

The 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 information

The newcommand.py utility

The 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 information

Compilers Course Lecture 4: Context Free Grammars

Compilers 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 information

M. R. C. van Dongen. ucc. LaTEX and Friends. Commands and Environments. Marc van Dongen

M. 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 information

CS1622. Today. A Recursive Descent Parser. Preliminaries. Lecture 9 Parsing (4)

CS1622. 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 information

Jonathan Zachhuber Michael Fü erer Version v., / /

Jonathan 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 information

The latexrelease package

The 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 information

Case by Case. Chapter 3

Case 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 information

glossaries-extra.sty v1.38: documented code

glossaries-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 information

The etoolbox Package An e-tex Toolbox for Class and Package Authors

The 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 information

The threadcol package

The 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 information

Version v2.01, 2000/06/29

Version 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 information

The etoolbox Package

The 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 information

CS 115 Lecture 8. Selection: the if statement. Neil Moore

CS 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 information

The 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 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 information

mnotes annotate documents with margin comments

mnotes 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 information

The KOMA- Script package tocstyle

The 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 information

Filtering TEX(t) Files by TEX

Filtering 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 information

bibleref.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 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 information

The svn package. Richard Lewis 25th September 2007

The 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 information

The package paresse. Le TEXnicien de surface February 16, 2013

The 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 information

The epstopdf package

The 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 information

The stringenc package

The 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 information

Basic 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 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 information

The trace package. Frank Mittelbach 2014/10/28

The 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 information

The EverySel package

The 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 information

multidef: quick definition of multiple similar L A TEX macros

multidef: 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 information

The rotchiffre package

The 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 information

Simple 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: 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 information

The xparse package Document command parser

The 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 information

Week 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. 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 information

The tabularx package

The 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 information

Scheme: 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, 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 information

pgfopts LaTeX package options with pgfkeys

pgfopts 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 information

The asymptote package

The 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 information

The pagenote package

The 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