summaryrefslogtreecommitdiff
path: root/info/macros2e/macros2e.tex
diff options
context:
space:
mode:
Diffstat (limited to 'info/macros2e/macros2e.tex')
-rw-r--r--info/macros2e/macros2e.tex924
1 files changed, 924 insertions, 0 deletions
diff --git a/info/macros2e/macros2e.tex b/info/macros2e/macros2e.tex
new file mode 100644
index 0000000000..d1f6a38f02
--- /dev/null
+++ b/info/macros2e/macros2e.tex
@@ -0,0 +1,924 @@
+%&pdflatex
+% $Id: macros2e.tex 2521 2011-07-23 19:14:33Z martin $
+\documentclass[12pt,a4paper]{article}
+\usepackage[margin=1in]{geometry}
+\usepackage{ydoc-desc}[2010/02/16]
+\usepackage{newverbs}
+\MakeShortVerb\|
+\def\q#1{`#1'}
+\def\qq#1{``#1''}
+\MakeSpecialShortVerb\qverb\"
+\AtBeginDocument{\MakeShortMacroArgs*\`}
+\AtEndDocument{\DeleteShortMacroArgs\`}
+\newcommand\Q[1]{``\texttt{#1}''}
+
+\usepackage{hyperref}
+\usepackage{xcolor}
+\hypersetup{filecolor=macrodesc}
+
+\usepackage{booktabs}
+\usepackage{tabularx}
+\usepackage{multicol}
+
+\usepackage{zref-user}
+\usepackage{zref-abspos}
+\usepackage{zref-xr}
+\usepackage{graphicx}
+
+% Relative position of `source2e` without extension
+\def\sourceIIe{/usr/local/texlive/2010/texmf-dist/doc/latex/base/source2e}
+%source2e}
+
+\makeatletter
+% Bug-fix for missing declaration:
+\@ifundefined{ZREF@xr@ignored}{\newcount\ZREF@xr@ignored}{}
+
+% Redefine the format of macro names to link to 'source2e':
+\def\PrintMacroName#1{%
+ {\macrodescstyle{\strut
+ \begingroup
+ \escapechar\m@ne
+ \edef\name{\string #1}%
+ \edef\@tempa{\noexpand\exthref{\name}{\noexpand\texttt{\char92}\name}}%
+ \expandafter\endgroup\@tempa
+ }}%
+}
+
+\iffalse
+
+\def\exthref#1#2{{%
+ % Get page of 'desc-'iption label
+ \edef\page{\zref@extract{desc-#1}{abspage}}%
+ \ifnum0\page=0\relax
+ % If it doesn't exist try the 'code-' label
+ \edef\page{\zref@extract{code-#1}{abspage}}%
+ \ifnum0\page=0\else
+ %\Gin@defaultbp\x{\zposx{code-#1}sp}%
+ \Gin@defaultbp\y{\zposy{code-#1}sp}%
+ \zrefused{code-#1}%
+ %\message{^^J USED LABEL^^Jcode-#1^^J}%
+ \fi
+ \else
+ %\Gin@defaultbp\x{\zposx{desc-#1}sp}%
+ \Gin@defaultbp\y{\zposy{desc-#1}sp}%
+ \zrefused{desc-#1}%
+ %\message{^^J USED LABEL^^Jdesc-#1^^J}%
+ \fi
+ \ifnum0\page=0\relax
+ % Simply typeset the text if no label is found
+ #2%
+ %\message{^^J No reference for: '\string#2'^^J}%
+ \else
+ % Otherwise set link to Fit Horizontally at the given y-coordinate
+ \href[{page=\page,pdfnewwindow=true,pdfremotestartview=FitH \y}]{file:\sourceIIe.pdf}%
+ %{\llap{\tiny\page,\y\ }
+ {#2}%
+ \fi
+}}
+
+\def\siieposs#1#2#3#4\relax{%
+ \Gin@defaultbp\x{#1sp}%
+ \Gin@defaultbp\y{#2sp}%
+ \def\p{#3}%
+}
+\def\siiepos#1#2{%
+ \siieposs#2\relax
+ \message{^^J\noexpand\siiepos{#1}{\x}{\y}{\p}}
+}
+
+\else
+
+\def\siiepos#1#2#3#4{%
+ \@namedef{siiepos@#1@x}{#2}%
+ \@namedef{siiepos@#1@y}{#3}%
+ \@namedef{siiepos@#1@p}{#4}%
+}
+
+\def\exthref#1#2{%
+ \@ifundefined{siiepos@#1@p}{%
+ % Simply typeset the text if no label is found
+ #2%
+ %\message{^^J No reference for: '\string#2'^^J}%
+ }{%
+ % Otherwise set link to Fit Horizontally at the given y-coordinate
+ \href[page=\@nameuse{siiepos@#1@p},pdfnewwindow=true,pdfremotestartview=FitH \@nameuse{siiepos@#1@y}]{file:\sourceIIe.pdf}%
+ {#2}%
+ }%
+}
+
+\fi
+
+
+\siiepos{@addtofilelist}{64.4291}{530.5617}{75}
+\siiepos{addto@hook}{83.25822}{503.54074}{131}
+\siiepos{@Alph}{106.79463}{245.35754}{113}
+\siiepos{@alph}{106.79463}{321.19466}{113}
+\siiepos{arraystretch}{73.84366}{568.89484}{266}
+\siiepos{@arstrutbox}{78.55093}{532.63092}{266}
+\siiepos{@backslashchar}{64.4291}{288.49547}{37}
+\siiepos{@begin@tempboxa}{59.72182}{151.91508}{241}
+\siiepos{bgroup}{102.08734}{228.77116}{25}
+\siiepos{@break@tfor}{78.55093}{254.67577}{45}
+\siiepos{@bsphack}{92.67278}{338.35991}{60}
+\siiepos{@cclvi}{102.08734}{659.32011}{20}
+\siiepos{@cclv}{106.79463}{689.89565}{20}
+\siiepos{@charlb}{97.38007}{444.76064}{73}
+\siiepos{@charrb}{97.38007}{432.8055}{73}
+\siiepos{@classoptionslist}{50.30725}{732.87947}{375}
+\siiepos{@clsextension}{69.13638}{519.08176}{375}
+\siiepos{count@}{102.08734}{529.44287}{21}
+\siiepos{@ctrerr}{97.38007}{223.98906}{51}
+\siiepos{@currenvir}{83.25822}{675.0963}{211}
+\siiepos{@currext}{92.67278}{555.34567}{375}
+\siiepos{@currname}{87.9655}{591.60959}{375}
+\siiepos{dimen@ii}{92.67278}{493.57745}{21}
+\siiepos{dimen@i}{97.38007}{505.5326}{21}
+\siiepos{dimen@}{102.08734}{517.48773}{21}
+\siiepos{egroup}{102.08734}{216.81602}{25}
+\siiepos{@empty}{102.08734}{582.16159}{45}
+\siiepos{empty}{106.79463}{301.299}{25}
+\siiepos{end}{116.20918}{358.88287}{213}
+\siiepos{@end@tempboxa}{69.13638}{706.24886}{242}
+\siiepos{@Esphack}{92.67278}{192.76773}{61}
+\siiepos{@esphack}{92.67278}{304.81541}{61}
+\siiepos{@expandtwoargs}{64.4291}{335.09938}{37}
+\siiepos{@filelist}{87.9655}{576.76791}{75}
+\siiepos{@firstofone}{78.55093}{463.95224}{37}
+\siiepos{@firstoftwo}{78.55093}{451.9971}{37}
+\siiepos{@flushglue}{83.25822}{140.80533}{42}
+\siiepos{@for}{111.5019}{513.18219}{45}
+\siiepos{g@addto@macro}{69.13638}{394.49792}{383}
+\siiepos{GenericError}{73.84366}{286.28459}{46}
+\siiepos{GenericInfo}{78.55093}{522.39859}{46}
+\siiepos{@gobblefour}{78.55093}{497.60475}{37}
+\siiepos{@gobble}{97.38007}{521.51503}{37}
+\siiepos{@gobbletwo}{83.25822}{509.55989}{37}
+\siiepos{hexnumber@}{83.25822}{571.48509}{178}
+\siiepos{hideskip}{92.67278}{453.08853}{22}
+\siiepos{@iden}{106.79463}{406.38943}{37}
+\siiepos{@ifclasslater}{69.13638}{616.91463}{376}
+\siiepos{@ifclassloaded}{64.4291}{767.74863}{376}
+\siiepos{@iffileonpath}{69.13638}{150.01534}{73}
+\siiepos{if@filesw}{87.9655}{779.70377}{70}
+\siiepos{ifin@}{106.79463}{593.51366}{157}
+\siiepos{ifnot@nil}{87.9655}{553.58012}{143}
+\siiepos{@ifpackagelater}{59.72182}{628.86977}{376}
+\siiepos{@ifpackageloaded}{55.01453}{779.70377}{376}
+\siiepos{if@partsw}{87.9655}{767.74863}{70}
+\siiepos{if@tempswa}{83.25822}{348.22577}{42}
+\siiepos{in@}{116.20918}{605.4688}{157}
+\siiepos{iterate}{97.38007}{767.74863}{26}
+\siiepos{@ixpt}{106.79463}{328.01884}{131}
+\siiepos{l@ngrel@x}{87.9655}{145.68292}{32}
+\siiepos{loop}{111.5019}{779.70377}{26}
+\siiepos{@makeother}{83.25822}{570.09033}{216}
+\siiepos{maxdimen}{92.67278}{465.04367}{22}
+\siiepos{MessageBreak}{73.84366}{590.14438}{46}
+\siiepos{@Miii}{106.79463}{445.91852}{42}
+\siiepos{@Mii}{111.5019}{457.87366}{42}
+\siiepos{@Mi}{116.20918}{469.8288}{42}
+\siiepos{@Miv}{111.5019}{433.96338}{42}
+\siiepos{@MM}{116.20918}{623.4547}{20}
+\siiepos{m@ne}{111.5019}{601.9707}{21}
+\siiepos{@M}{120.91647}{635.40984}{20}
+\siiepos{@m}{120.91647}{647.36497}{20}
+\siiepos{@ne}{116.20918}{737.7162}{20}
+\siiepos{@nnil}{106.79463}{616.65128}{45}
+\siiepos{null}{111.5019}{265.03508}{25}
+\siiepos{@obsoletefile}{69.13638}{682.53369}{75}
+\siiepos{@onelevel@sanitize}{45.59998}{542.79277}{41}
+\siiepos{@onlypreamble}{69.13638}{338.95767}{32}
+\siiepos{@pkgextension}{69.13638}{507.12662}{375}
+\siiepos{p@}{120.91647}{418.60434}{22}
+\siiepos{@protected@testopt}{45.59998}{136.21292}{33}
+\siiepos{@ptionlist}{83.25822}{176.96553}{375}
+\siiepos{remove@star}{78.55093}{438.01378}{143}
+\siiepos{remove@to@nnil}{64.4291}{461.92406}{143}
+\siiepos{rem@pt}{102.08734}{402.0999}{122}
+\siiepos{repeat}{102.08734}{755.79349}{26}
+\siiepos{@sanitize}{87.9655}{626.47874}{41}
+\siiepos{@secondoftwo}{73.84366}{440.04196}{37}
+\siiepos{@settopoint}{78.55093}{386.73682}{114}
+\siiepos{sixt@@n}{97.38007}{701.85078}{20}
+\siiepos{skip@}{106.79463}{481.62231}{21}
+\siiepos{space}{106.79463}{337.56291}{25}
+\siiepos{@spaces}{97.38007}{233.35391}{50}
+\siiepos{@sptoken}{92.67278}{213.96835}{40}
+\siiepos{@star@or@long}{69.13638}{225.38385}{32}
+\siiepos{@starttoc}{87.9655}{283.38025}{296}
+\siiepos{strip@prefix}{73.84366}{356.49013}{11}
+\siiepos{strip@pt}{92.67278}{414.05504}{122}
+\siiepos{strutbox}{92.67278}{734.27771}{27}
+\siiepos{@tempboxa}{87.9655}{256.4905}{42}
+\siiepos{@tempcnta}{87.9655}{394.0934}{42}
+\siiepos{@tempcntb}{87.9655}{382.13826}{42}
+\siiepos{@tempdima}{87.9655}{313.31702}{42}
+\siiepos{@tempdimb}{87.9655}{301.36188}{42}
+\siiepos{@tempdimc}{87.9655}{289.40674}{42}
+\siiepos{@tempskipa}{83.25822}{221.58173}{42}
+\siiepos{@tempskipb}{83.25822}{209.62659}{42}
+\siiepos{@temptokena}{78.55093}{175.71408}{42}
+\siiepos{@testopt}{92.67278}{252.89267}{33}
+\siiepos{@tfor}{106.79463}{343.95984}{45}
+\siiepos{@thirdofthree}{69.13638}{370.74442}{37}
+\siiepos{thr@@}{106.79463}{713.80592}{20}
+\siiepos{toks@}{106.79463}{469.66718}{21}
+\siiepos{tw@}{116.20918}{725.76106}{20}
+\siiepos{@unusedoptionlist}{50.30725}{685.65668}{375}
+\siiepos{@vbsphack}{87.9655}{736.86452}{62}
+\siiepos{@viiipt}{97.38007}{363.12321}{131}
+\siiepos{@viipt}{102.08734}{398.22762}{131}
+\siiepos{@vipt}{106.79463}{433.33199}{131}
+\siiepos{voidb@x}{97.38007}{382.73892}{22}
+\siiepos{@vpt}{111.5019}{468.43637}{131}
+\siiepos{@whiledim}{87.9655}{510.31464}{44}
+\siiepos{@whilenum}{87.9655}{567.50005}{44}
+\siiepos{@whilesw}{92.67278}{440.17783}{44}
+\siiepos{wlog}{111.5019}{565.70679}{21}
+\siiepos{@writefile}{83.25822}{449.68938}{212}
+\siiepos{@xiipt}{102.08734}{222.7057}{131}
+\siiepos{@xipt}{106.79463}{257.81009}{131}
+\siiepos{@xivpt}{102.08734}{187.60133}{131}
+\siiepos{@xpt}{111.5019}{292.91446}{131}
+\siiepos{@xviipt}{97.38007}{152.49695}{131}
+\siiepos{@xxpt}{106.79463}{117.39256}{131}
+\siiepos{@xxvpt}{102.08734}{779.70377}{132}
+\siiepos{@xxxii}{102.08734}{504.73756}{42}
+\siiepos{zap@space}{87.9655}{639.23088}{381}
+\siiepos{z@}{120.91647}{406.6492}{22}
+\siiepos{z@skip}{102.08734}{394.69406}{22}
+\siiepos{@dblarg}{144.7269}{382.64244}{31}
+\siiepos{filename@parse}{144.7269}{274.5259}{12}
+\siiepos{@ifdefinable}{144.7269}{311.46509}{31}
+\siiepos{@ifnextchar}{144.7269}{466.32841}{31}
+\siiepos{@ifstar}{144.7269}{420.99852}{31}
+\siiepos{@ifundefined}{144.7269}{347.3305}{31}
+\siiepos{input@path}{144.7269}{466.08487}{12}
+\siiepos{input}{144.7269}{400.3316}{374}
+\siiepos{@namedef}{144.7269}{514.70245}{31}
+\siiepos{@nameuse}{144.7269}{490.2387}{31}
+\siiepos{@@par}{144.7269}{387.73839}{54}
+\siiepos{@restorepar}{144.7269}{411.37193}{54}
+\siiepos{@setpar}{144.7269}{465.26593}{54}
+
+% Load the external references
+%\zexternaldocument{\sourceIIe}
+
+\title{List of internal \LaTeX2e Macros useful to Package Authors}
+\author{Compiled by Martin Scharrer\\\url{martin@scharrer-online.de}}
+\date{Version 0.4a -- 2017/12/09}
+
+\setlength{\descindent}{0pt}
+\setlength{\parindent}{0pt}
+\makeatletter
+\begin{document}
+\maketitle
+\begin{abstract}
+This document lists the internal macros defined by the \LaTeX2e base files which can be also useful
+to package authors. The macros are hyper-linked to their description in \emph{source2e}.
+For this to work both PDFs must be inside the same directory.
+
+This document is not yet complete in content and format and may miss some macros.
+\end{abstract}
+
+\begin{multicols}{2}
+\tableofcontents
+\end{multicols}
+
+\clearpage
+
+\section{Constants}
+
+\subsection{Number Constants}
+
+Some of the following integer values are defined using `\countdef` (for $-1$),
+`\chardef` (for values between 0--255) and `\mathchardef` ($>255$). They are
+robust and do not expand in an `\edef` context. When used on the right side of an
+assignment the act the same way as a count register. The `\m@ne` is a real count register and can
+still be modified, but doing so would certainly break various code. In the terms defined by
+\emph{The TeXbook}, this integer constants yield \emph{internal integers} rather than \emph{integer
+denotations}.
+
+The other numbers are defined as normal macros, which will simply expand to the containing number.
+They were defined
+to be used to set font sizes, which explains the non-integer numbers. Please note that if they
+are used for an assignment or other numeric context (e.g.\ |\ifnum|) TeX will keep expanding the
+following tokens until a non-numeric token is found.%, e.g.\ a space or |\relax|.
+
+
+\bigskip
+\noindent\hbox to \linewidth\bgroup\hss
+\begin{tabular}{lrl}
+ \toprule
+ Macro & Value & Defined using \\
+ \midrule
+ \Macro\@ne & 1 & chardef \\
+ \Macro\tw@ & 2 & chardef \\
+ \Macro\thr@@ & 3 & chardef \\
+ \Macro\sixt@@n & 16 & chardef \\
+ \Macro\@xxxii & 32 & chardef \\
+ \Macro\@cclv & 255 & chardef \\
+ \Macro\@cclvi & 256 & mathchardef \\
+ \Macro\@m & 1000 & mathchardef \\
+ \Macro\@M & 10000 & mathchardef \\
+ \Macro\@Mi & 10001 & mathchardef \\
+ \Macro\@Mii & 10002 & mathchardef \\
+ \Macro\@Miii & 10003 & mathchardef \\
+ \Macro\@Miv & 10004 & mathchardef \\
+ \Macro\@MM & 20000 & mathchardef \\
+ \bottomrule
+\end{tabular}
+\hss
+\begin{tabular}{lrl}
+ \toprule
+ Macro & Value & Defined using \\
+ \midrule
+ \Macro\@vpt & 5 & def \\
+ \Macro\@vipt & 6 & def \\
+ \Macro\@viipt & 7 & def \\
+ \Macro\@viiipt & 8 & def \\
+ \Macro\@ixpt & 9 & def \\
+ \Macro\@xpt & 10 & def \\
+ \Macro\@xipt & 10.95 & def \\
+ \Macro\@xiipt & 12 & def \\
+ \Macro\@xivpt & 14.4 & def \\
+ \Macro\@xviipt & 17.28 & def \\
+ \Macro\@xxpt & 20.74 & def \\
+ \Macro\@xxvpt & 24.88 & def \\
+ \\%\midrule
+ \Macro\m@ne & $-1$ & countdef \\
+ \bottomrule
+\end{tabular}%
+\hss\egroup
+
+
+\subsection{Dimension Constants}
+The following dimension and skip constants are defined using registers. They must not be changed.
+
+\begin{center}
+\begin{tabularx}{\linewidth}{lrlX}
+ \toprule
+ Macro & Value & Defined using & Notes \\
+ \midrule
+ \Macro\p@ & 1pt & newdimen & Can be used as a replacement of pt behind a number due to the resulting multiplication \\
+ \Macro\z@ & 0pt & newdimen & Can be used both for 0pt and 0 \\
+ \Macro\maxdimen & 16383.99999pt & newdimen & Largest valid dimension \\
+ \bottomrule
+\end{tabularx}
+\par\medskip
+\begin{tabularx}{\linewidth}{lrlX}
+ \toprule
+ Macro & Value & Defined using & Notes\\
+ \midrule
+ \Macro\z@skip & 0pt plust0pt minus0pt & newskip & \\
+ \Macro\hideskip & $-1000$pt plus 1fill & newskip & negative but can grow \\
+ \Macro\@flushglue & 0pt plus 1fil & newskip & \\
+ \bottomrule
+\end{tabularx}
+\end{center}
+
+\subsection{String Constants}
+The following macros hold common strings and are fully expandable.
+Some special characters are defined here as their verbatim ASCII representation.
+This makes them useful if such characters are to be written into an auxiliary file.
+
+\bigskip\noindent
+\begin{tabularx}{\linewidth}{llX}
+ \toprule
+ Macro & Value & Note\\
+ \midrule
+ \Macro\space & One space & An explicit space (catcode 10 \qq{space}).\\
+ \Macro\@spaces & Four spaces & Contains $4\times$\Macro\space.\\
+ \Macro\empty & Empty string & Commonly used to define empty macros using \Macro\let. \\
+ \Macro\@empty & Empty string & Same as above. Used by the \LaTeX{} kernel commands. \\
+ \Macro\@backslashchar & \qq{\texttt{\@backslashchar}} & Backslash with catcode 12 (other), i.e. simple ASCII backlash usable in e.g.\ \Macro\write.\\
+ \Macro\@percentchar & \qq{\texttt{\@percentchar}} & Percent character with catcode 12 (other), i.e. simple ASCII percent usable in e.g.\ \Macro\write.\\
+ \Macro\@charlb & \qq{\texttt{\@charlb}} & Left brace with catcode 11 (letter). \\
+ \Macro\@charrb & \qq{\texttt{\@charrb}} & Right brace with catcode 11 (letter). \\
+ \Macro\@clsextension & \qq{\texttt{cls}} & Used for comparison with \Macro\@currext. \\
+ \Macro\@pkgextension & \qq{\texttt{sty}} & Used for comparison with \Macro\@currext. \\
+ \Macro\@depth & \qq{\texttt{depth}} & Used for box size declarations (\Macro\hb@xt@).\\
+ \Macro\@height & \qq{\texttt{height}} & Used for box size declarations.\\
+ \Macro\@width & \qq{\texttt{width}} & Used for box size declarations.\\
+ \Macro\@minus & \qq{\texttt{minus}} & Used for skip declarations.\\
+ \Macro\@plus & \qq{\texttt{plus}} & Used for skip declarations.\\
+ \bottomrule
+\end{tabularx}
+
+\subsection{Token Constants}
+The following macros are defined using \Macro\let<macro>'='<token> and therefore equal to this token. They are useful for |\ifx| comparisons
+with tokens read by |\let| or |\futurelet|.
+
+\bigskip\noindent
+\begin{tabular}{llll}
+ \toprule
+ Name & Token & Catcode & Note \\
+ \midrule
+ \Macro\@sptoken & Space & 10 & Should not be confused with \Macro\space \\
+ \Macro\bgroup & |{| & 1 & Begin of group \\
+ \Macro\egroup & |}| & 2 & End of group \\
+ \bottomrule
+\end{tabular}
+
+\subsection{Other}
+
+\begin{tabularx}{\linewidth}{lllX}
+ \toprule
+ Macro & Value & Defined using & Notes \\
+ \midrule
+ \Macro\voidb@x & (void) & newbox & permanently void box register \\
+ \Macro\@undefined & (undef) & (undefined) & This macro is not defined.
+ It is used to test if other macros are undefined (using \Macro\ifx) or set them to an undefined state (using \Macro\let).\\
+ \bottomrule
+\end{tabularx}
+
+
+\clearpage
+\section{Variables}
+
+\subsection{Temporary Variables}
+The following variables are defined and used by the \LaTeX{} kernel commands as scratch registers and macros.
+They can be used with care, but should only be redefined inside a local group to avoid interference with other
+code. Care must also be taken if they are used together with external macros, which might use them as well
+-- maybe not yet but in the next release.
+
+\par\bigskip\noindent
+\begin{tabularx}{\linewidth}{llX}
+ \toprule
+ Temp variable & Type & Note \\
+ \midrule
+ \Macro\count@ & counter & \\
+ \Macro\@tempcnta & counter & \\
+ \Macro\@tempcntb & counter & \\
+ \Macro\dimen@ & dimension & \\
+ \Macro\dimen@i & dimension & Marked as \qq{global only} \\
+ \Macro\dimen@ii & dimension & \\
+ \Macro\@tempdima & dimension \\
+ \Macro\@tempdimb & dimension \\
+ \Macro\@tempdimc & dimension \\
+ \Macro\@tempa & macro \\
+ \Macro\@tempb & macro \\
+ \Macro\@tempc & macro \\
+ \Macro\@gtempa & macro & For temporary definitions which must be made global\\
+ \Macro\skip@ & skip & \\
+ \Macro\@tempskipa & skip \\
+ \Macro\@tempskipb & skip \\
+ \Macro\toks@ & token register & \\
+ \Macro\@temptokena & token register \\
+ \Macro\if@tempswa & if switch & Comes with the usual setters \Macro\@tempswatrue and \Macro\@tempswafalse \\
+ \Macro\@tempboxa & box register \\
+ \Macro\@let@token & \q{let} & Used by \Macro\@ifnextchar to temporary store the next token using \Macro\futurelet. Can be used for similar purposes. \\
+ \bottomrule
+\end{tabularx}
+
+
+\subsection{Dimension Variables}
+
+\par\bigskip\noindent
+\begin{tabularx}{\linewidth}{lX}
+ \toprule
+ Macro & Description \\
+ \midrule
+ \Macro\@wholewidth &
+ This |dimen| register hold the full line width (thickness) in \env{picture} environments. \\
+ \Macro\@halfwidth &
+ This |dimen| register holds the half line width (thickness) in \env{picture} environments. \\
+ \bottomrule
+\end{tabularx}
+
+\subsection{String and Other Variables}
+
+\par\bigskip\noindent
+\begin{tabularx}{\linewidth}{lX}
+ \toprule
+ Macro & Description \\
+ \midrule
+ \Macro\@currext & Extension of the current package or class file, empty outside. \\
+ \Macro\@currname & File name base of the current package or class file, empty outside. \\
+ \Macro\@currenvir & Name of the current environment. \\
+ \Macro\@currenvline & Line number of the begin of the current environment \\
+ \Macro\@currentlabel & The value a \Macro\label will point to. Set by \Macro\stepcounter and \Macro\refstepcounter. \\
+ \bottomrule
+\end{tabularx}
+
+
+\section{Macros}
+
+\subsection{Macro Definition}
+\DescribeMacro\@namedef{<name>}<parameter list>{<definition>}
+\noindent
+Defines macro \MacroArgs'\'<name>\relax using \Macro\def. Can be prefixed with \Macro\long and \Macro\global.
+
+\DescribeMacro\@nameuse{<name>}
+\noindent
+Expands to macro \MacroArgs'\'<name>.
+
+\DescribeMacro\@ifnextchar<token>{<yes>}{<no>}
+\noindent
+Tests if next non-space token is equal to \MacroArgs<token>.
+
+\DescribeMacro\@ifstar{<yes>}{<no>}
+\noindent
+Tests of next non-space token is "*". Removes star for \MacroArgs<yes> branch.
+
+\DescribeMacro\@dblarg{<cmd>}{<arg>}
+\noindent
+Expands to \MacroArgs<cmd>[<arg>]{<arg>}.
+
+\DescribeMacro\@ifundefined{<name>}{<yes>}{<no>}
+\noindent
+Tests if \MacroArgs!\@backslashchar!<name> is defined (and not equal to \Macro\relax).
+
+\DescribeMacro\@ifdefinable'\'<name>{<yes>}
+\noindent
+Tests if \MacroArgs'\'<name> is undefined, \MacroArgs<name> not "relax"
+and doesn't start with "end", and if \Macro{end}<name> is not defined.
+
+\DescribeMacro\@onlypreamble<macro>
+\noindent
+The given \meta{macro} is marked as only be valid in the preamble. It will be redefined as an error message AtBeginDocument.
+
+\DescribeMacro\@star@or@long
+\noindent
+Tests for a following "*", if found \Macro\l@ngrel@x will be let to \Macro\relax, but \Macro\long
+otherwise. It can the be used before \Macro\def as an potential prefix.
+
+\DescribeMacro\@testopt{<1>}{<2>}
+\noindent
+Short for \Macro\@ifnextchar'['{<1>}{<1>[{<2>}]}, i.e.\ \meta{2} will be used as default argument if non was given.
+
+\DescribeMacro\@protected@testopt
+\noindent
+Robust version of \Macro\@testopt?
+
+\DescribeMacro\addto@hook<token register>{<code>}
+\noindent
+Appends code to the token register.
+
+\DescribeMacro\g@addto@macro<macro>{<code>}
+\noindent
+Appends \meta{code} to the definition of \MacroArgs<macro>.\\
+
+\subsection{Expanding/Gobbling Arguments}
+\par\bigskip\noindent
+\begin{tabularx}{\linewidth}{lX}
+ \toprule
+ Macro & Description \\
+ \midrule
+ \Macro\@gobble{<arg>} & Removes (gobbles) its argument. (long)\\
+ \Macro\@gobbletwo{<arg 1>}{<arg 2>} & Removes (gobbles) two arguments. (long)\\
+ \Macro\@gobblefour{<1>}{<2>}{<3>}{<4>} & Removes (gobbles) four arguments. (long)\\
+ \Macro\@gobblecr & Gobbles a following carriage return, ignores spaces otherwise \\
+ \Macro\@firstofone{<arg>} & Expands to \meta{arg}, i.e. is used to remove braces. (long)\\
+ \Macro\@iden{<arg>} & Identity. Same as \Macro\@firstofone for compatibility reasons. (long)\\
+ \Macro\@firstoftwo{<1>}{<2>} & Expands to \meta{1}, discards \meta{2}. (long)\\
+ \Macro\@secondoftwo{<1>}{<2>} & Expands to \meta{2}, discards \meta{1}. (long)\\
+ \Macro\@thirdofthree{<1>}{<2>}{<3>} & Expands to \meta{3}, discards \meta{1} and \meta{2}. (long)\\
+ \Macro\@expandtwoargs\AlsoMacro\macro{<1>}{<2>} & Expands the two arguments using \Macro\edef and feeds it to \Macro\macro.\\
+ \bottomrule
+\end{tabularx}
+
+\subsection{Lists}
+
+\DescribeMacro\in@{<1>}{<2>}
+Checks if first argument occurs in the second and sets the switch \Macro\ifin@ accordantly.
+The arguments are not expanded. This must be done beforehand.
+
+\DescribeMacro\@removeelement{<element>}{<list>}{<cs>}
+Removes an element from a comma-separated list and puts it into a control sequence.
+
+\subsection{Loops}
+\begin{tabularx}{\linewidth}{lX}
+ \toprule
+ Macro & Description \\
+ \midrule
+ \Macro\loop' ... '\AlsoMacro\iterate' ... '\AlsoMacro\repeat & \\
+ \Macro\@whilenum <test> \AlsoMacro\do {<body>} & While loop with \Macro\ifnum test. \\
+ \Macro\@whiledim <test> \AlsoMacro\do {<body>} & While loop with \Macro\ifdim test. \\
+ \Macro\@whilesw <switch> \AlsoMacro\fi {<body>} & While loop with \MacroArgs<switch> test. \\
+ \Macro\@for<macro>':='<list>\AlsoMacro\do{<body>} & For loop. The \MacroArgs<list> is supposed to expand to a comma separated list.
+ Defines \MacroArgs<macro> to each element of the list and executes \meta{body} each time.
+ Supports an empty lists without errors. \\
+ \Macro\@tfor<macro>':='<list>\AlsoMacro\do{<body>} & For loop. The \MacroArgs<list> is not expanded and taken as a list of tokens or \MacroArgs{...}.
+ Defines \MacroArgs<macro> to each element of the list and executes \meta{body} each time.
+ Supports an empty lists without errors. \\
+ \Macro\@break@tfor & Break out of a \Macro\@tfor loop. This should be called \emph{inside} the scope of an \Macro\fi.\\
+ \bottomrule
+\end{tabularx}
+\par\bigskip\noindent
+NOTES:\par\vspace{-1ex}
+\begin{enumerate}\itemsep=0pt
+ \item These macros use no |\@temp| sequences.
+ \item These macros do not work if the body contains anything that
+looks syntactically to TeX like an improperly balanced |\if \else \fi|.
+\end{enumerate}
+
+\subsection{Colors}
+The following macros are defined equal to |\relax| by LaTeX2e as placeholder for the
+real code added by the \pkg{color} or \pkg{xcolor} package.
+They are needed to handle colors inside saved boxes correctly.
+See the definitions of \Macro\sbox for an example.
+
+\begin{tabularx}{\linewidth}{lX}
+ \toprule
+ Macro & Definition given by \pkg{color} \\
+ \midrule
+ \Macro\color@begingroup & \leavevmode\Macro\begingroup \\
+ \Macro\color@endgroup & \leavevmode\Macro\endgroup \\
+ \Macro\color@setgroup & \leavevmode\Macro\begingroup\AlsoMacro\set@color \\
+ \Macro\color@hbox & \leavevmode\Macro\hbox\AlsoMacro\bgroup\AlsoMacro\color@begingroup \\
+ \Macro\color@vbox & \leavevmode\Macro\vbox\AlsoMacro\bgroup\AlsoMacro\color@begingroup \\
+ \Macro\color@endbox & \leavevmode\Macro\color@endgroup\AlsoMacro\egroup \\
+ \bottomrule
+\end{tabularx}
+
+\subsection{Auxiliary Macros}
+
+This auxiliary macros were originally defined to handle font changes but can be used for other code as well.
+\par\bigskip\noindent
+\begin{tabularx}{\linewidth}{lX}
+ \toprule
+ Macro & Description \\
+ \midrule
+ \Macro\ifnot@nil{<1>}{<2>} & Checks if \meta{1} is the token \Macro\@nil. If so gobbles \meta{2}
+ otherwise uses \Macro\@firstofone to remove the braces around \meta{2}.\\
+ \Macro\@nil & This macro is undefined on purpose and used as endmarker in loops and other macros which process token lists. \\
+ \Macro\@nnil & Definition contains only \Macro\@nil and is used beside others to test for the presents of \Macro\@nil in \Macro\ifnot@nil. Is also used as endmarker.\\
+ \Macro\remove@to@nnil & Removes everything behind it until and including \Macro\@nnil.\\
+ \Macro\remove@star & Removes everything behind it until and including *.\\
+ \Macro\zap@space<text>!\verb*+ +!\AlsoMacro\@empty & Removes all spaces from \meta{text}. Expandable. \\
+ \Macro\strip@prefix & Removes everything up to and including to the next \texttt{>}. \\
+ \bottomrule
+\end{tabularx}
+
+\subsection{Catcodes}
+
+\par\bigskip\noindent
+\begin{tabularx}{\linewidth}{lX}
+ \toprule
+ Name & Description \\
+ \midrule
+ \Macro\@makeother{<letter>} & Changes the catcode of the letter to \q{other} (12). Special letters must be escaped with a backslash. \\
+ \Macro\@sanitize & Changes catcodes of everything except braces to \q{other} (12).\\
+ \Macro\@onelevel@sanitize<macro> & Sanitizes \meta{macro}, turns it definition into verbatim code. Resulting characters except spaces are in catcode \q{other} (12)! Uses \Macro\meaning and \Macro\strip@prefix. (With $\epsilon$-\TeX\ many applications can be replaced by \Macro\detokenize{<content>}.) \\
+ \bottomrule
+\end{tabularx}
+
+
+\subsection{Messages}
+\DescribeMacro\MessageBreak
+\noindent
+Inside a message this macro create a new line followed by a continuation text. Outside it is equal to |\relax|.
+
+\DescribeMacro\GenericInfo{<continuation>}{<message>}
+\noindent
+Prints \meta{message} to a log file. An included \Macro\MessageBreak\relax will cause a new line which start with \meta{continuation}.
+
+\DescribeMacros
+ \hbox{\Macro\GenericError{<continuation>}{<error message>}}%
+ \hbox{\phantom{\ttfamily\textbackslash GenericError}\MacroArgs{<where to go for further information>}{<help text>}}%
+\endDescribeMacros
+\noindent
+Print error message to log file followed by the \q{further information} line.
+The help text is displayed if the user presses "h".
+
+\DescribeMacro\wlog{<log message>}
+\noindent
+Write on log file only.
+
+\subsection{Dimensions, Length and Skips}
+
+\par\bigskip\noindent
+\begin{tabularx}{\linewidth}{lX}
+ \toprule
+ Name & Description \\
+ \midrule
+ \Macro\@settopoint<register> & Rounds register to whole number of points. \\
+ \Macro\rem@pt<dimension value> & Awaits a value dimension value (\MacroArgs<int>'.'<frac>'pt') as string where the \Q{pt} is removed. If \meta{frac} is numerical equal to 0, then it and the decimal dot are removed as well. \\
+ \Macro\strip@pt<dimension> & Expands dimension using \cs{the} and strips the \Q{pt} using \Macro\rem@pt. \\
+ \Macro\@killglue &
+ Removes (|\unskip|s) the last and then all further skips (|\lastskip|) till one with a size of zero is reached. \\
+ \bottomrule
+\end{tabularx}
+
+\DescribeMacro\@defaultunits
+\noindent
+Used to provide a default unit for |dimen| or |skip| assignment.\\
+Usage: |\@defaultunits\dimen=#1pt\relax\@nnil|.
+Other units can be used instead of "pt".
+
+\subsection{Class and Package Options}
+
+\begin{tabularx}{\linewidth}{lX}
+ \toprule
+ Macro & Description \\
+ \midrule
+ \Macro\@classoptionslist & List of options of the main class. \\
+ \Macro\@unusedoptionlist & List of options to the main class that haven't been declared. \\
+ \Macro\@declaredoptions & Comma separated list of the options declared by the current package or class.
+ The list is in the order in which the options were declared. \\
+ \bottomrule
+\end{tabularx}
+
+\subsection{Files}
+
+\begin{tabularx}{\linewidth}{lX}
+ \toprule
+ Macro & Description \\
+ \midrule
+ \Macro\if@filesw & If false the package should not be produce or write to output files. Set to false by \cs{nofiles}.\\
+ \Macro\if@partsw & \\
+ \Macro\@currdir & Holds the current directory, e.g. \Q{./} in an Unix OS. \\
+ \Macro\input@path & List of input paths. Each path should be enclosed in braces with no delimiters between paths. \\
+ \Macro\@filelist & The comma separated list of all files read so far. Only active if \cs{listfiles} is used in the preamble. \\
+ \Macro\@inputcheck& Input file handle to check for the existence of the file.\\
+ \Macro\@unused & Output file handle used to reserve the standard output. Used in \Macro\typeout to write to the terminal.\\
+ \Macro\@mainaux & Output file handle for the main \texttt{aux} file.\\
+ \Macro\@partaux & Output file handle for include file \texttt{aux} files.\\
+ \Macro\@auxout & Let to \Macro\@partaux inside include files, but to \Macro\@mainaux otherwise.\\
+ \Macro\@partlist & Holds the comma-separated list defined by \Macro\includeonly. \\
+ \Macro\@pushfilename & pushes file name, extension and current catcode of \Q{@} onto the file stack. \\
+ \Macro\@popfilename & pushes file name, extension and current catcode of \Q{@} onto the file stack. \\
+ \Macro\@currnamestack & file name stack.\\
+ \bottomrule
+\end{tabularx}
+
+
+\DescribeMacro\filename@parse{<filename>}
+\noindent
+Parses \meta{filename} and provides its directory, name base and extension in \Macro\filename@area,
+\Macro\filename@base and \Macro\filename@ext. The latter is let to \Macro\relax if it does not
+exists.
+
+\DescribeMacro\@filef@und
+The macro \Macro\IfFileExists (which is used by \Macro\InputIfFileExists) stores the found file followed by a space in this macro.
+
+\DescribeMacro\@starttoc{<ext>}
+\noindent
+Reads the file with the given extension (\texttt{\string\jobname.}\meta{ext}) and opens it for
+writing afterwards. The file is initially empty. Creates the output file handle \Macro\tf@<ext>.
+
+\DescribeMacro\@writefile{<ext>}{<code>}
+\noindent
+Writes code using the output handle \Macro\tf@<ext> if it exists.
+
+
+\DescribeMacro\@iffileonpath{<filename>}
+\noindent
+Check if given file is found by \TeX{} directly or in any of the directories given by \cs{input@path}.
+
+\DescribeMacro\@obsoletefile{<new>}{<obsolete>}
+\noindent
+Prints warning message (only) that now a different file is used a input.
+
+\DescribeMacro\@addtofilelist{<filename>}
+\noindent
+Adds the given filename to the list of files. Only active if \cs{listfiles} is used in the preamble.
+
+\DescribeMacro\@ptionlist{<filename>}
+\noindent
+Expands the option list of package, class or file given by full filename.
+
+\DescribeMacro\@ifpackageloaded{<package>}{<true>}{<false>}
+\DescribeMacro\@ifclassloaded{<class>}{<true>}{<false>}
+\DescribeMacro\@ifl@aded{<extension>}{<file base>}{<true>}{<false>}
+Tests if given package/class/file has been loaded.
+
+
+\DescribeMacros
+\Macro\@ifpackagewith{<name>}{<option-list>}{<true>}{<false>}
+\Macro\@ifclasswith{<name>}{<option-list>}{<true>}{<false>}
+\Macro\@if@ptions{<extension>}{<name>}{<option-list>}{<true>}{<false>}
+\endDescribeMacros
+\noindent
+Tests if given package/class/file has been loaded with the given options.
+
+\DescribeMacros
+\Macro\@ifpackagelater{<name>}{<date YYYY/MM/DD>}{<true>}{<false>}
+\Macro\@ifclasslater{<name>}{<date YYYY/MM/DD>}{<true>}{<false>}
+\Macro\@ifl@ter{<extension>}{<file base>}{<date YYYY/MM/DD>}{<true>}{<false>}
+\endDescribeMacros
+\noindent
+Tests if given package/class/file has been loaded with a version more recent than \meta{version}.
+
+
+\subsection{Saved plain\TeX{} primitives}
+The following plain\TeX{} macros are redefined by \LaTeX{} and therefore saved away first:
+
+\par\bigskip\noindent
+\begin{tabularx}{\linewidth}{llX}
+ \toprule
+ \LaTeX{} Macro & plain\TeX{} original & Description/Note \\
+ \midrule
+ \Macro\@@par & \Macro{par} & Some \LaTeX{} environments redefine \Macro{par} locally \\
+ \Macro\@@input & \Macro\input & Syntax: \Macro\input~<filename> \\
+ \Macro\@@end & \Macro{end} & \\
+ \Macro\@@underline & \Macro\underline & \\
+ \Macro\frozen@everymath & \Macro\everymath & \\
+ \Macro\frozen@everydisplay & \Macro\everydisplay & \\
+ \bottomrule
+\end{tabularx}
+
+\subsection{Fonts}
+\begin{tabularx}{\linewidth}{lX}
+ \toprule
+ Macro & Description \\
+ \midrule
+ \Macro\f@encoding & Holds the current font encoding. \\
+ \Macro\f@family & Holds the current font family. \\
+ \Macro\f@series & Holds the current font series. \\
+ \Macro\f@shape & Holds the current font shape. \\
+ \Macro\f@size & Holds the current font size (in pt but without unit). \\
+ \Macro\f@baselineskip & Holds the current baseline skip (in pt but without unit). \\
+ \Macro\f@linespread & Holds the current internal value for \Macro\baselinestretch. \\
+ \Macro\@currsize & Let to the last font size command (e.g.\ |\small|). \\
+ \Macro\curr@math@size & Holds locally the current math size. \\
+ \Macro\curr@fontshape & |\f@encoding /\f@family /\f@series /\f@shape| \\
+ \bottomrule
+\end{tabularx}
+
+\subsection{Paragraph}
+\begin{tabularx}{\linewidth}{lX}
+ \toprule
+ Macro & Description \\
+ \midrule
+ \Macro\@@par & Plain\TeX{} primitive \cs{par}. \\
+ \Macro\@setpar{<val>} & Used to make environment-wide changes to \cs{par}. Sets both \cs{par} and \cs{@par} to \meta{val}. \\
+ \Macro\@restorepar & Defines \cs{par} to \cs{@par}. \\
+ \bottomrule
+\end{tabularx}
+
+\subsection{Space Hack}
+\begin{tabularx}{\linewidth}{lX}
+ \toprule
+ Macro & Description \\
+ \midrule
+ \Macro\@bsphack & \\
+ \Macro\@esphack & Both of these macro ensure that the code between them does not insert any spaces into the document.
+ The code itself should not produce any text and not change the mode (e.g.\ start or stop math mode).\\
+ \Macro\@Esphack & Variant of \cs{@esphack} which sets the \texttt{@ignore} switch to true which causes an \cs{ignorespaces}
+ after the \cs{end} of the environment.\\
+ \Macro\@vbsphack & Variant of \cs{@bsphack} which ensure the invisible material is \emph{not} set in vmode. Not used by \LaTeX{} itself at the moment. \\
+ \bottomrule
+\end{tabularx}
+
+\subsection{Boxes}
+\begin{tabularx}{\linewidth}{lX}
+ \toprule
+ Macro & Description \\
+ \midrule
+ \Macro\null & Empty \Macro\hbox. Good to fill places which must not be empty. \\
+ \Macro\strutbox & Box with dimension of |\strut|, i.e.\ maximum height and depth of the current font and zero width. Can be used to extract this dimension
+ with \texttt{\string\ht\string\strutbox} and \texttt{\string\dp\string\strutbox}. \\
+ \Macro\@arstrutbox & Defined inside array and tabular. Like \Macro\strutbox but stretched by \Macro\arraystretch. \\
+ \Macro\@begin@tempboxa<box>{<content>} & Stores \meta{content} into \Macro\@tempboxa as \meta{box} (\cs{hbox} or \cs{vbox}) and stores its dimension into \Macro\width, \Macro\height, \Macro\depth and \Macro\totalheight. \\
+ \Macro\@end@tempboxa & Ends a \Macro\@begin@tempboxa environment. \\
+ \Macro\hb@xt@ & \Macro\hbox~'to' \\
+ \Macro\hmode@bgroup & \Macro\leavevmode\AlsoMacro\bgroup \\
+ \bottomrule
+\end{tabularx}
+
+\DescribeMacro\@settodim{<dimension cs>}{<length register>}{<content>}
+Sets the \meta{length register} to the dimension given by the \meta{dimension} (\Macro\ht, \Macro\dp and \Macro\wd\relax) of the \meta{content}.
+Example: \Macro\@settodim{\Macro\wd}{\Macro\@tempdima}{Hello World}
+will set \Macro\@tempdima to the width of \qq{Hello World}.
+
+
+
+
+\subsection{Base Conversion}
+\begin{tabularx}{\linewidth}{lX}
+ \toprule
+ Macro & Description \\
+ \midrule
+ \Macro\hexnumber@{<number>} & Returns a single digit hexadecimal number (\mbox{0--9}, \mbox{A--F}) from given \meta{number}, which must either be a numeric register or a number ending with a space! \\
+ \Macro\@alph{<number>} & Expands to lower case letter corresponding to the given number (1=a, 2=b, \ldots). Expands to \Macro\@ctrerr if number is larger then~26.\\
+ \Macro\@Alph{<number>} & Expands to upper case letter corresponding to the given number (1=A, 2=B, \ldots). Expands to \Macro\@ctrerr if number is larger then~26.\\
+ \Macro\two@digits{<number>} &
+ Returns \meta{number} (e.g.\ a \texttt{count} register) as string and ensures that it has at least two digits
+ by appending a "0" if required. \\
+ \bottomrule
+\end{tabularx}
+
+\subsection{Conditionals}
+
+\begin{tabularx}{\linewidth}{lX}
+ \toprule
+ Macro & Description \\
+ \midrule
+\Macro{if@compatibility} & Switch to indicate if the LaTeX2.09 compatibility mode is active. \\
+\Macro{if@ignore} & Whether or not to ignore spaces after an environment. Set to true by \Macro\ignorespacesafterend.\\
+ \Macro{if@minipage} & True for a \texttt{minipage}, false for a \texttt{parbox}. Responsible for adding space, skips and paragraph indents for a \texttt{parbox}.\\
+\Macro{if@twoside} & True for two-sided documents \\
+\Macro{if@twocolumn} & Indicates if two-column mode is active \\
+\Macro{if@firstcolumn}& Indicates if the first column is processed \\
+ \bottomrule
+\end{tabularx}
+
+
+% ToDo Check footnote makros
+
+
+\end{document}
+
+