summaryrefslogtreecommitdiff
path: root/macros/latex/contrib
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib')
-rw-r--r--macros/latex/contrib/bytefield/README2
-rw-r--r--macros/latex/contrib/bytefield/bytefield.dtx728
-rw-r--r--macros/latex/contrib/bytefield/bytefield.ins4
-rw-r--r--macros/latex/contrib/bytefield/bytefield.pdfbin405723 -> 487156 bytes
-rw-r--r--macros/latex/contrib/carlisle/README.txt11
-rw-r--r--macros/latex/contrib/carlisle/ltxtable.pdfbin70947 -> 69207 bytes
-rw-r--r--macros/latex/contrib/carlisle/remreset.sty2
-rw-r--r--macros/latex/contrib/graphpaper/README69
-rw-r--r--macros/latex/contrib/graphpaper/graphpaper.dtx1048
-rw-r--r--macros/latex/contrib/graphpaper/graphpaper.pdfbin0 -> 431219 bytes
-rw-r--r--macros/latex/contrib/mylatex/README.txt18
-rw-r--r--macros/latex/contrib/mylatex/mylatex.ltx (renamed from macros/latex/contrib/carlisle/mylatex.ltx)25
-rw-r--r--macros/latex/contrib/principia/README12
-rw-r--r--macros/latex/contrib/principia/principia.pdfbin0 -> 368370 bytes
-rw-r--r--macros/latex/contrib/principia/principia.sty231
-rw-r--r--macros/latex/contrib/principia/principia.tex172
16 files changed, 2056 insertions, 266 deletions
diff --git a/macros/latex/contrib/bytefield/README b/macros/latex/contrib/bytefield/README
index e1e0d208b9..b76f221d76 100644
--- a/macros/latex/contrib/bytefield/README
+++ b/macros/latex/contrib/bytefield/README
@@ -33,7 +33,7 @@ supports hyperref hyperlinks.
Copyright and license
---------------------
-Copyright (C) 2017 Scott Pakin, scott+bf@pakin.org
+Copyright (C) 2000-2020 Scott Pakin, scott+bf@pakin.org
This package may be distributed and/or modified under the conditions
of the LaTeX Project Public License, either version 1.3a of this
diff --git a/macros/latex/contrib/bytefield/bytefield.dtx b/macros/latex/contrib/bytefield/bytefield.dtx
index deb30c81be..4354a50e78 100644
--- a/macros/latex/contrib/bytefield/bytefield.dtx
+++ b/macros/latex/contrib/bytefield/bytefield.dtx
@@ -1,7 +1,7 @@
% \iffalse meta-comment
%
-% Copyright (C) 2017 by Scott Pakin <scott+bf@pakin.org>
-% ------------------------------------------------------
+% Copyright (C) 2000-2020 by Scott Pakin <scott+bf@pakin.org>
+% -----------------------------------------------------------
%
% This file may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3a
@@ -22,7 +22,7 @@
%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
%<package>\ProvidesPackage{bytefield}
%<*package>
- [2017/09/15 v2.4 Network protocol diagrams]
+ [2020/10/22 v2.5 Network protocol diagrams]
%</package>
%
%<*driver>
@@ -35,6 +35,7 @@
\usepackage{calc}
\usepackage{array}
\usepackage{wasysym}
+\usepackage{needspace}
\usepackage{hyperxmp}
\usepackage{hypdoc}
\usepackage{hyperref}
@@ -45,7 +46,7 @@
pdfauthor={Scott Pakin},
pdfsubject={Protocol diagrams for LaTeX},
pdfkeywords={bits, bytes, bit fields, communication, network protocol diagrams, LaTeX2e, memory maps},
- pdfcopyright={Copyright (C) 2017, Scott Pakin},
+ pdfcopyright={Copyright (C) 2000-2020, Scott Pakin},
pdflicenseurl={http://www.latex-project.org/lppl/},
pdfcaptionwriter={Scott Pakin},
pdfcontactemail={scott+bf@pakin.org},
@@ -67,7 +68,7 @@
%</driver>
% \fi
%
-% \CheckSum{1028}
+% \CheckSum{1161}
%
% \CharacterTable
% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
@@ -99,6 +100,14 @@
% \cs{endwordgroupl} with a \texttt{leftwordgroup} environment and
% also replacing a slew of user-visible lengths and macros with a
% single \cs{bytefieldsetup} macro}
+% \changes{v2.5}{2020/10/20}{Redefine the \protect\cs{bitbox},
+% \protect\cs{wordbox}, and \protect\cs{bitboxes} commands additionally
+% to accept key/value options}
+% \changes{v2.5}{2020/10/20}{Accept a new \protect\optname{bgcolor}
+% option to set a bit's background color}
+% \changes{v2.5}{2020/10/22}{Accept a new \protect\optname{perword}
+% option to execute a macro for each word in a word box. This addresses
+% a feature request by Victor Toni}
%
% \GetFileInfo{bytefield.dtx}
%
@@ -129,7 +138,7 @@
%
% \title{The \textsf{bytefield} package\thanks{This document
% corresponds to \textsf{bytefield}~\fileversion, dated \filedate.}}
-% \author{Scott Pakin \\ \texttt{scott+bf@pakin.org}}
+% \author{Scott Pakin \\ \textit{scott+bf@pakin.org}}
%
% \sloppy
% \maketitle
@@ -271,10 +280,10 @@
% \item ``skipped words'' within fields.
% \end{itemize}
%
-% Because \pkgname{bytefield} draws its figures using only
-% the \LaTeX{} \texttt{picture} environment, these figures are not
-% specific to any particular backend, do not require PostScript support,
-% and do not need support from external programs. Furthermore, unlike an
+% Because \pkgname{bytefield} draws its figures using only the \LaTeX{}
+% \texttt{picture} environment, these figures are not specific to any
+% particular backend, do not require PostScript or PDF support, and do
+% not need support from external programs. Furthermore, unlike an
% imported graphic, \pkgname{bytefield} pictures can include arbitrary
% \LaTeX{} constructs, such as mathematical equations, |\ref|s and
% |\cite|s to the surrounding document, and macro calls.
@@ -372,12 +381,12 @@
% \label{sec:basic-cmds}
%
% This section explains how to use the \pkgname{bytefield} package. It
-% lists all the exported macros and environments in approximately
+% lists all of the exported macros and environments in approximately
% decreasing order of usefulness.
%
% \begin{decl}
% \SpecialEnvIndex{bytefield}
-% |\begin{bytefield}| \oarg{parameters} \marg{bit-width} \\
+% |\begin{bytefield}| \oarg{options} \marg{bit-width} \\
% \meta{fields} \\
% |\end{bytefield}|
% \end{decl}
@@ -385,19 +394,20 @@
% The \pkgname{bytefield} package's top-level environment is called, not
% surprisingly, ``|bytefield|''. It takes one mandatory argument, which
% is the number of bits in each word, and one optional argument, which
-% is a set of parameters, described in Section~\ref{sec:options}, for
-% formatting the bit-field's layout. One can think of a |bytefield| as
-% being analogous to a |tabular|: words are separated by~``|\\|'', and
-% fields within a word are separated by~``|&|''. As in a |tabular|,
-% ``|\\|'' accepts a \meta{length} as an optional argument, and this
-% specifies the amount of additional vertical whitespace to include
-% after the current word is typeset.
+% is a comma-separated list of \meta{key}=\meta{value} pairs, described
+% in Section~\ref{sec:options}, for formatting the bit-field's layout.
+% One can think of a |bytefield| as being analogous to a |tabular|:
+% words are separated by~``|\\|'', and fields within a word are
+% separated by~``|&|''. As in a |tabular|, ``|\\|'' accepts a
+% \meta{length} as an optional argument, and this specifies the amount
+% of additional vertical whitespace to include after the current word is
+% typeset.
%
% \begin{decl}
% \SpecialUsageIndex{\bitbox}
-% |\bitbox| \oarg{sides} \marg{width} \marg{text} \\
+% |\bitbox| \oarg{sides} \marg{width} \oarg{options} \marg{text} \\
% \SpecialUsageIndex{\wordbox}
-% |\wordbox| \oarg{sides} \marg{height} \marg{text}
+% |\wordbox| \oarg{sides} \marg{height} \oarg{options} \marg{text}
% \end{decl}
%
% The two main commands one uses within a \pkgname{bytefield}
@@ -406,16 +416,19 @@
% typesets a field that is an entire word wide and one or more words
% tall.
%
-% The optional argument, \meta{sides}, is a list of letters specifying
-% which sides of the field box to draw---[|l|]eft, [|r|]ight, [|t|]op,
-% and/or [|b|]ottom.\footnote{Uppercase |L|, |R|, |T|, and |B| undo a
-% prior |l|, |r|, |t|, or |b| and may be useful for writing wrapper
-% commands around \texttt{\string\bitbox} and
+% The first, optional, argument, \meta{sides}, is a list of letters
+% specifying which sides of the field box to draw---[|l|]eft, [|r|]ight,
+% [|t|]op, and/or [|b|]ottom.\footnote{Uppercase |L|, |R|, |T|, and |B|
+% undo a prior |l|, |r|, |t|, or |b| and may be useful for writing
+% wrapper commands around \texttt{\string\bitbox} and
% \texttt{\string\wordbox}.} The default is ``|lrtb|'' (i.e.,~all
-% sides are drawn). \meta{text} is the text to include within the
-% |\bitbox| or |\wordbox|. It is typeset horizontally centered within a
-% vertically centered |\parbox|. Hence, words will wrap, and ``|\\|''
-% can be used to break lines manually.
+% sides are drawn). The second, required, argument is the width in bits
+% of a bit box or the height in words of a word box. The third argument
+% is an optional, comma-separated list of \meta{key}=\meta{value} pairs,
+% described in Section~\ref{sec:options}. The fourth, required,
+% argument is the text to typeset within the box. It is typeset
+% horizontally centered within a vertically centered |\parbox|. Hence,
+% words will wrap, and ``|\\|'' can be used to break lines manually.
%
% The following example shows how to produce a simple 16-bit-wide field:
%
@@ -442,6 +455,35 @@
% mandatory argument to the |bytefield| environment);
% \pkgname{bytefield} does not currently check for under- or overruns.
%
+% Here's an example of using the \optname{bgcolor} option to fill each
+% box with a different color:
+%
+% \begin{verbatim}
+% \definecolor{lightcyan}{rgb}{0.84,1,1}
+% \definecolor{lightgreen}{rgb}{0.64,1,0.71}
+% \definecolor{lightred}{rgb}{1,0.7,0.71}
+% \begin{bytefield}[bitheight=\widthof{~Sign~},
+% boxformatting={\centering\small}]{32}
+% \bitheader[endianness=big]{31,23,0} \\
+% \bitbox{1}[bgcolor=lightcyan]{\rotatebox{90}{Sign}} &
+% \bitbox{8}[bgcolor=lightgreen]{Exponent} &
+% \bitbox{23}[bgcolor=lightred]{Mantissa}
+% \end{bytefield}
+% \end{verbatim}
+%
+% \begin{bffigure}
+% \definecolor{lightcyan}{rgb}{0.84,1,1}
+% \definecolor{lightgreen}{rgb}{0.64,1,0.71}
+% \definecolor{lightred}{rgb}{1,0.7,0.71}
+% \begin{bytefield}[bitheight=\widthof{~Sign~},
+% boxformatting={\centering\small}]{32}
+% \bitheader[endianness=big]{31,23,0} \\
+% \bitbox{1}[bgcolor=lightcyan]{\rotatebox{90}{Sign}} &
+% \bitbox{8}[bgcolor=lightgreen]{Exponent} &
+% \bitbox{23}[bgcolor=lightred]{Mantissa}
+% \end{bytefield}
+% \end{bffigure}
+%
% Within a |\bitbox| or |\wordbox|, the \pkgname{bytefield} package
% defines |\height|, |\depth|, |\totalheight|, and |\width| to the
% corresponding dimensions of the box. Section~\ref{sec:tricks} gives an
@@ -449,8 +491,8 @@
%
% \begin{decl}
% \SpecialUsageIndex{\bitboxes}
-% |\bitboxes| \oarg{sides} \marg{width} \marg{tokens} \\
-% |\bitboxes*| \oarg{sides} \marg{width} \marg{tokens} \\
+% |\bitboxes| \oarg{sides} \marg{width} \oarg{options} \marg{tokens} \\
+% |\bitboxes*| \oarg{sides} \marg{width} \oarg{options} \marg{tokens} \\
% \end{decl}
%
% The |\bitboxes| command provides a shortcut for typesetting a sequence
@@ -521,17 +563,17 @@
%
% \begin{decl}
% \SpecialUsageIndex{\bitheader}
-% |\bitheader| \oarg{parameters} \marg{bit-positions}
+% |\bitheader| \oarg{options} \marg{bit-positions}
% \end{decl}
%
% To make the bit field more readable, it helps to label bit positions
% across the top. The |\bitheader| command provides a flexible way to
-% do that. The optional argument is a set of parameters from the set
-% described in Section~\ref{sec:options}. In practice, the only
-% parameters that are meaningful in the context of |\bitheader| are
-% |bitformatting|, |endianness|, and |lsb|. See
-% Section~\ref{sec:options} for descriptions and examples of those
-% parameters.
+% do that. The optional argument is a comma-separated list of
+% \meta{key}=\meta{value} pairs from the set described in
+% Section~\ref{sec:options}. In practice, the only parameters that are
+% meaningful in the context of |\bitheader| are |bitformatting|,
+% |endianness|, and |lsb|. See Section~\ref{sec:options} for
+% descriptions and examples of those parameters.
%
% |\bitheader|'s mandatory argument, \meta{bit-positions}, is a
% comma-separated list of bit positions to label. For example,
@@ -691,12 +733,12 @@
%
% \begin{decl}
% \SpecialUsageIndex{\bytefieldsetup}
-% |\bytefieldsetup| \marg{key-value list}
+% |\bytefieldsetup| \marg{options}
% \end{decl}
%
% Alter the formatting of all subsequent bit fields.
% Section~\ref{sec:options} describes the possible values for each
-% \meta{key}=\meta{value} item in the comma-separated list that
+% \meta{key}=\meta{value} pair in the comma-separated list that
% |\bytefieldsetup| accepts as its argument. Note that changes made
% with |\bytefieldsetup| are local to their current scope. Hence, if
% used within an environment (e.g.,~|figure|), |\bytefieldsetup| does
@@ -709,7 +751,7 @@
% A document author can customize many of the \pkgname{bytefield}
% package's figure-formatting parameters, either globally or on a
% per-figure basis. The parameters described below can be specified in
-% four locations:
+% five locations:
%
% \begin{itemize}
% \item as package options (i.e.,~in the
@@ -726,6 +768,10 @@
% \item as the optional argument to a |\bitheader|, which affects only
% that particular header. (Only a few parameters are meaningful in
% this context.)
+%
+% \item as the second optional argument to a \cs{bitbox}, \cs{wordbox},
+% or \cs{bitboxes}, which affects only that particular box. (Only a
+% few parameters are meaningful in this context.)
% \end{itemize}
%
% Unfortunately, \LaTeX\ tends to abort with a ``\texttt{TeX capacity
@@ -893,6 +939,17 @@
% \end{bffigure}
%
% \begin{decl}
+% \optname{bgcolor} = \meta{color}
+% \end{decl}
+%
+% Bit and word boxes are normally left unfilled. The \optname{bgcolor}
+% option fills them with a specified background color. A document will
+% need to include the \pkgname{color}, \pkgname{xcolor}, or similar
+% package to expose color names to \pkgname{bytefield}. The
+% \optname{boxformatting} option described above can be used to set the
+% foreground color.
+%
+% \begin{decl}
% \optname{leftcurly} = \meta{delimiter} \\
% \optname{rightcurly} = \meta{delimiter}
% \end{decl}
@@ -1067,6 +1124,42 @@
% \end{bytefield}
% \end{bffigure}
%
+% \begin{decl}
+% \optname{perword} = \meta{command}
+% \end{decl}
+%
+% Provide a macro that will be invoked once for each word in a word box
+% after the regular content is rendered. The macro will be passed two
+% arguments: the word number (starting from~0) and the total number of
+% words in the word box. Furthermore, the macro will be invoked within
+% a one-word-wide box positioned at the base of the word.
+% \optname{perword} can therefore be used for delineating words within a
+% word box, numbering words, or performing other such annotations. As a
+% simple example, the following code draws a gray line at the bottom of
+% each word in the ``Descriptive text'' word box:
+%
+% \begin{verbatim}
+% \newcommand{\wordline}[2]{\color[rgb]{0.7,0.7,0.7}\hrulefill}
+% \begin{bytefield}[bitwidth=4em]{8}
+% \bitheader[lsb=1,bitformatting=\small]{1-8} \\
+% \wordbox[lrt]{7}[perword=\wordline]{Descriptive text (60 bytes)} \\
+% \bitbox[lrb]{4}{} & \bitbox{4}{subsys data offset} \\
+% \bitbox{4}{subsys data offset} & \bitbox{2}{version} &
+% \bitbox{2}{endian indicator} \\
+% \end{bytefield}
+% \end{verbatim}
+%
+% \begin{bffigure}
+% \newcommand{\wordline}[2]{\color[rgb]{0.7,0.7,0.7}\hrulefill}
+% \begin{bytefield}[bitwidth=4em]{8}
+% \bitheader[lsb=1,bitformatting=\small]{1-8} \\
+% \wordbox[lrt]{7}[perword=\wordline]{Descriptive text (60 bytes)} \\
+% \bitbox[lrb]{4}{} & \bitbox{4}{subsys data offset} \\
+% \bitbox{4}{subsys data offset} & \bitbox{2}{version} &
+% \bitbox{2}{endian indicator} \\
+% \end{bytefield}
+% \end{bffigure}
+%
%
% \subsection{Common tricks}
% \label{sec:tricks}
@@ -1293,40 +1386,16 @@
% \end{bffigure}
%
% \paragraph{Unused bits}
-% Because |\width| and |\height| are defined within bit boxes (also word
-% boxes), we can represent unused bits by filling a |\bitbox| with a
-% rule of size |\width|~$\times$ |\height|:
-%
-% \begin{verbatim}
-% \begin{bytefield}{32}
-% \bitheader{0,4,8,12,16,20,24,28} \\
-% \bitbox{8}{Tag} & \bitbox{8}{Value} &
-% \bitbox{4}{\rule{\width}{\height}} &
-% \bitbox{12}{Mask} \\
-% \wordbox{1}{Key}
-% \end{bytefield}
-% \end{verbatim}
-%
-% \begin{bffigure}
-% \begin{bytefield}{32}
-% \bitheader{0,4,8,12,16,20,24,28} \\
-% \bitbox{8}{Tag} & \bitbox{8}{Value} &
-% \bitbox{4}{\rule{\width}{\height}} &
-% \bitbox{12}{Mask} \\
-% \wordbox{1}{Key}
-% \end{bytefield}
-% \end{bffigure}
-%
-% \noindent
-% The effect is much better when the \pkgname{color} package is used to
-% draw the unused bits in color. (Light gray looks nice.)
+% The \optname{bgcolor} option can be used to represent unused bits by
+% specifying a background fill color---light gray looks nice---and empty
+% text:
%
% \begin{verbatim}
% \definecolor{lightgray}{gray}{0.8}
% \begin{bytefield}{32}
% \bitheader{0,4,8,12,16,20,24,28} \\
% \bitbox{8}{Tag} & \bitbox{8}{Value} &
-% \bitbox{4}{\color{lightgray}\rule{\width}{\height}} &
+% \bitbox{4}[bgcolor=lightgray]{} &
% \bitbox{12}{Mask} \\
% \wordbox{1}{Key}
% \end{bytefield}
@@ -1337,7 +1406,7 @@
% \begin{bytefield}{32}
% \bitheader{0,4,8,12,16,20,24,28} \\
% \bitbox{8}{Tag} & \bitbox{8}{Value} &
-% \bitbox{4}{\color{lightgray}\rule{\width}{\height}} &
+% \bitbox{4}[bgcolor=lightgray]{} &
% \bitbox{12}{Mask} \\
% \wordbox{1}{Key}
% \end{bytefield}
@@ -1459,44 +1528,6 @@
%
% \subsection{Not-so-common tricks}
%
-% \paragraph{Colored fields}
-% A similar approach to that utilized to indicate unused bits can be
-% applied to coloring an individual bit field. The trick is to use the
-% \TeX\ |\rlap| primitive to draw a colored box that overlaps whatever
-% follows it to the right:
-%
-% \begin{verbatim}
-% \newcommand{\colorbitbox}[3]{%
-% \rlap{\bitbox{#2}{\color{#1}\rule{\width}{\height}}}%
-% \bitbox{#2}{#3}}
-% \definecolor{lightcyan}{rgb}{0.84,1,1}
-% \definecolor{lightgreen}{rgb}{0.64,1,0.71}
-% \definecolor{lightred}{rgb}{1,0.7,0.71}
-% \begin{bytefield}[bitheight=\widthof{~Sign~},
-% boxformatting={\centering\small}]{32}
-% \bitheader[endianness=big]{31,23,0} \\
-% \colorbitbox{lightcyan}{1}{\rotatebox{90}{Sign}} &
-% \colorbitbox{lightgreen}{8}{Exponent} &
-% \colorbitbox{lightred}{23}{Mantissa}
-% \end{bytefield}
-% \end{verbatim}
-%
-% \begin{bffigure}
-% \newcommand{\colorbitbox}[3]{^^A
-% \rlap{\bitbox{#2}{\color{#1}\rule{\width}{\height}}}^^A
-% \bitbox{#2}{#3}}^^A
-% \definecolor{lightcyan}{rgb}{0.84,1,1}
-% \definecolor{lightgreen}{rgb}{0.64,1,0.71}
-% \definecolor{lightred}{rgb}{1,0.7,0.71}
-% \begin{bytefield}[bitheight=\widthof{~Sign~},
-% boxformatting={\centering\small}]{32}
-% \bitheader[endianness=big]{31,23,0} \\
-% \colorbitbox{lightcyan}{1}{\rotatebox{90}{Sign}} &
-% \colorbitbox{lightgreen}{8}{Exponent} &
-% \colorbitbox{lightred}{23}{Mantissa}
-% \end{bytefield}
-% \end{bffigure}
-%
% \paragraph{Omitted bit numbers}
% It is occasionally convenient to show a wide bit field in which the
% middle numbers are replaced with an ellipsis. The trick to
@@ -1951,7 +1982,10 @@
%
% \section{Implementation}
%
-% \newcommand{\usermacro}{\marginpar{\vspace*{1ex}{\strut\hspace{18pt}\huge$\star$}\vspace*{-1ex}}}
+% \newcommand{\usermacro}{^^A
+% \Needspace{2\baselineskip}^^A
+% \marginpar{\huge\raisebox{-1.5ex}[0pt][1.5ex]{\strut\hspace{18pt}$\star$}\par}^^A
+% }
%
% This section contains the complete source code for \pkgname{bytefield}.
% Most users will not get much out of it, but it should be of use to
@@ -2057,7 +2091,8 @@
\newlength{\bytefield@height@increment}
\DeclareRobustCommand{\inc@bytefield@height}[1]{%
\setlength{\bytefield@height@increment}{#1}%
- \global\advance\bytefield@height by \bytefield@height@increment}
+ \global\advance\bytefield@height by \bytefield@height@increment
+}
% \end{macrocode}
% \end{macro}
%
@@ -2127,7 +2162,8 @@
}{%
\amp\show@wordlabelr\cr\egroup\egroup
\end{lrbox}%
- \usebox{\entire@bytefield@picture}}
+ \usebox{\entire@bytefield@picture}%
+}
% \end{macrocode}
% \end{environment}
%
@@ -2187,35 +2223,151 @@
% \end{macro}
% \end{macro}
%
+% \begin{macro}{\bf@call@box@cmd}
+% \begin{macro}{\bf@call@box@func}
+% Define any box-drawing macro that accepts the same set of four
+% arguments. It takes as input the name of a macro that is defined with
+% formal parameters |[#1]#2[#3]#4|. \cs{bf@call@box@cmd} then invokes
+% that macro, passing it a set of lines to draw out of the set
+% ``\texttt{lrtbLRTB}''~(|#1|), a number of bits or words~(|#2|), a list
+% of key/value pairs~(|#3|), and arbitrary text to typeset~(|#4|).
+% \begin{macrocode}
+\newcommand*{\bf@call@box@cmd}[1]{%
+ \def\bf@call@box@func{#1}%
+ \bf@call@box@cmd@i
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\bf@call@box@cmd@i}
+% \begin{macro}{\bf@call@box@arg@i}
+% \begin{macro}{\bf@call@box@arg@ii}
+% Store the set of lines and the bit/word count and invoke
+% \cs{bf@call@box@cmd@ii}.
+% \begin{macrocode}
+\newcommand*{\bf@call@box@cmd@i}[2][lrtb]{%
+ \def\bf@call@box@arg@i{#1}%
+ \def\bf@call@box@arg@ii{#2}%
+ \bf@call@box@cmd@ii
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\bf@call@box@cmd@ii}
+% \begin{macro}{\bf@call@box@arg@iii}
+% \begin{macro}{\bf@call@box@arg@iv}
+% Store the key/value parameters and the text to typeset then invoke the
+% macro originally passed to \cs{bf@call@box@cmd}.
+% \begin{macrocode}
+\newcommand*{\bf@call@box@cmd@ii}[2][]{%
+ \def\bf@call@box@arg@iii{#1}%
+ \def\bf@call@box@arg@iv{#2}%
+ \bf@call@box@func
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
% \begin{macro}{\bitbox}
% \usermacro
-% Put some text (|#3|) in a box that's a given number of bits (|#2|)
-% wide and one byte tall. An optional argument (|#1|) specifies which
+% Put some text~(|#4|) in a box that's a given number of bits~(|#2|)
+% wide and one byte tall. An optional argument~(|#1|) specifies which
% lines to draw---|[l]|eft, |[r]|ight, |[t]|op, and/or |[b]|ottom
-% (default: |lrtb|). Uppercase letters suppress drawing the |[L]|eft,
-% |[R]|ight, |[T]|op, and/or |[B]|ottom sides.
+% (default: |lrtb|). Uppercase letters provide the opposite effect:
+% They suppress drawing the |[L]|eft, |[R]|ight, |[T]|op, and/or
+% |[B]|ottom sides. Additional drawing parameters can be provided via
+% another optional argument~(|#3|).
% \begin{macrocode}
-\DeclareRobustCommand{\bitbox}[3][lrtb]{%
- \setlength{\units@wide}{\bf@bitwidth * #2}%
- \bf@parse@bitbox@arg{#1}%
- \draw@bit@picture{\strip@pt\units@wide}{\strip@pt\bf@bitheight}{#3}}
+\DeclareRobustCommand{\bitbox}{\bf@call@box@cmd{\bf@bitbox}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bf@bitbox}
+% Implement all of the \cs{bitbox} logic.
+% \begin{macrocode}
+\def\bf@bitbox{%
+ \bgroup
+ \expandafter\bf@parse@bitbox@arg\expandafter{\bf@call@box@arg@i}%
+ \setlength{\units@wide}{\bf@bitwidth * \bf@call@box@arg@ii}%
+ \expandafter\bf@bytefieldsetup\expandafter{\bf@call@box@arg@iii}%
+ \@ifundefined{bf@bgcolor}{%
+ }{%
+% \end{macrocode}
+% If \optname{bgcolor} was specified, draw a colored rule of the full
+% size of the box.
+% \begin{macrocode}
+ \rlap{%
+ \draw@bit@picture{\strip@pt\units@wide}{\strip@pt\bf@bitheight}{%
+ \color{\bf@bgcolor}%
+ \rule{\width}{\height}%
+ }%
+ }%
+ }%
+% \end{macrocode}
+% Draw the user-provided text on top of the rule (if any).
+% \begin{macrocode}
+ \draw@bit@picture{\strip@pt\units@wide}{\strip@pt\bf@bitheight}{%
+ \bf@call@box@arg@iv
+ }%
+ \egroup
+ \ignorespaces
+}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\wordbox}
% \usermacro
-% Put some text (|#3|) in a box that's a given number of bytes (|#2|)
-% tall and one word (|\bits@wide| bits) wide.
-% An optional argument (|#1|) specifies which lines to draw---|[l]|eft,
-% |[r]|ight, |[t]|op, and/or |[b]|ottom (default: |lrtb|). Uppercase
-% letters suppress drawing the |[L]|eft, |[R]|ight, |[T]|op, and/or
-% |[B]|ottom sides.
-% \begin{macrocode}
-\DeclareRobustCommand{\wordbox}[3][lrtb]{%
- \setlength{\units@wide}{\bf@bitwidth * \bits@wide}%
- \setlength{\units@tall}{\bf@bitheight * #2}%
- \bf@parse@bitbox@arg{#1}%
- \draw@bit@picture{\strip@pt\units@wide}{\strip@pt\units@tall}{#3}}
+% Put some text~(|#4|) in a box that's a given number of bytes~(|#2|)
+% tall and one word (|\bits@wide| bits) wide. An optional
+% argument~(|#1|) specifies which lines to draw---|[l]|eft, |[r]|ight,
+% |[t]|op, and/or |[b]|ottom (default: |lrtb|). Uppercase letters
+% provide the opposite effect: They suppress drawing the |[L]|eft,
+% |[R]|ight, |[T]|op, and/or |[B]|ottom sides. Additional drawing
+% parameters can be provided via another optional argument~(|#3|).
+% \begin{macrocode}
+\DeclareRobustCommand{\wordbox}{\bf@call@box@cmd{\bf@wordbox}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bf@wordbox}
+% Implement all of the \cs{wordbox} logic.
+% \begin{macrocode}
+\def\bf@wordbox{%
+ \bgroup
+ \expandafter\bf@parse@bitbox@arg\expandafter{\bf@call@box@arg@i}%
+ \setlength{\units@wide}{\bf@bitwidth * \bits@wide}%
+ \setlength{\units@tall}{\bf@bitheight * \bf@call@box@arg@ii}%
+ \expandafter\bf@bytefieldsetup\expandafter{\bf@call@box@arg@iii}%
+ \@ifundefined{bf@bgcolor}{%
+ }{%
+% \end{macrocode}
+% If \optname{bgcolor} was specified, draw a colored rule of the full
+% size of the box.
+% \begin{macrocode}
+ \rlap{%
+ \draw@bit@picture{\strip@pt\units@wide}{\strip@pt\units@tall}{%
+ \color{\bf@bgcolor}%
+ \rule{\width}{\height}%
+ }%
+ }%
+ }%
+% \end{macrocode}
+% Draw the user-provided text on top of the rule (if any).
+% \begin{macrocode}
+ \draw@bit@picture{\strip@pt\units@wide}{\strip@pt\units@tall}{%
+ \bf@call@box@arg@iv
+ }%
+% \end{macrocode}
+% Invoke the user-provided \cs{bf@per@word} macro once per word.
+% \begin{macrocode}
+ \@ifundefined{bf@per@word}{}{\bf@invoke@per@word{\bf@call@box@arg@ii}}%
+ \egroup
+ \ignorespaces
+}
% \end{macrocode}
% \end{macro}
%
@@ -2233,40 +2385,13 @@
\DeclareRobustCommand{\draw@bit@picture}[3]{%
\begin{picture}(#1,#2)%
% \end{macrocode}
-% \begin{macro}{\height}
-% \usermacro
-% \begin{macro}{\depth}
-% \usermacro
-% \begin{macro}{\totalheight}
-% \usermacro
-% \begin{macro}{\width}
-% \usermacro
-% \begin{macro}{\widthunits}
-% \usermacro
-% \begin{macro}{\heightunits}
-% \usermacro
% First, we plot the user's text, with all sorts of useful lengths
% predefined.
% \begin{macrocode}
\put(0,0){\makebox(#1,#2){\parbox{#1\unitlength}{%
- \bf@newdimen\height
- \bf@newdimen\depth
- \bf@newdimen\totalheight
- \bf@newdimen\width
- \height=#2\unitlength
- \depth=0pt%
- \totalheight=#2\unitlength
- \width=#1\unitlength
- \def\widthunits{#1}%
- \def\heightunits{#2}%
+ \bf@set@user@dimens{#1}{#2}%
\bf@boxformatting{#3\par}}}}%
% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
% Next, we draw each line individually. I suppose we could make a special
% case for ``all lines'' and use a |\framebox| above, but the following
% works just fine.
@@ -2294,10 +2419,78 @@
\inc@bytefield@height{\unitlength * \real{#2}}%
\global\counting@wordsfalse
\fi
- \ignorespaces}
+}
% \end{macrocode}
% \end{macro}
%
+% \begin{macro}{\bf@invoke@per@word}
+% Invoke \cs{bf@per@word} once per word, passing it the (0-indexed) word
+% number and total number of words.
+% \begin{macrocode}
+\newcommand{\bf@invoke@per@word}[1]{%
+ \begin{picture}(0,0)%
+ \@tempcnta=0
+ \@tempdima=#1\bf@bitheight
+% \end{macrocode}
+% Make various useful dimensions available to \cs{bf@per@word}.
+% \begin{macrocode}
+ \bf@set@user@dimens{\strip@pt\units@wide}{\strip@pt\units@tall}%
+ \loop
+ \advance\@tempdima by -\bf@bitheight
+ \bgroup
+ \put(-\strip@pt\units@wide, \strip@pt\@tempdima){%
+ \expandafter\bf@per@word\expandafter{\the\@tempcnta}{#1}%
+ }%
+ \egroup
+ \advance\@tempcnta by 1\relax
+ \ifnum#1>\@tempcnta
+ \repeat
+ \end{picture}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bf@set@user@dimens}
+% \mbox{}\vspace*{-1ex}
+% \begin{macro}{\width}
+% \usermacro
+% \begin{macro}{\height}
+% \usermacro
+% \begin{macro}{\depth}
+% \usermacro
+% \begin{macro}{\totalheight}
+% \usermacro
+% \begin{macro}{\widthunits}
+% \usermacro
+% \begin{macro}{\heightunits}
+% \usermacro
+% Given a width in bits~(|#1|) and a height in words~(|#2|), make a
+% number of box dimensions available to the author: \cs{width},
+% \cs{height}, \cs{depth}, \cs{totalheight}. Additionally, make the
+% arguments available to the author via the \cs{widthunits} and
+% \cs{heightunits} macros.
+% \begin{macrocode}
+\newcommand{\bf@set@user@dimens}[2]{%
+ \bf@newdimen\width
+ \bf@newdimen\height
+ \bf@newdimen\depth
+ \bf@newdimen\totalheight
+ \width=#1\unitlength
+ \height=#2\unitlength
+ \depth=0pt%
+ \totalheight=#2\unitlength
+ \def\widthunits{#1}%
+ \def\heightunits{#2}%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
% \begin{macro}{\bitboxes}
% \usermacro
% \changes{v2.2}{2014/06/01}{Added this macro based on an idea proposed
@@ -2312,7 +2505,9 @@
% command omits interior left and right lines.
% \begin{macrocode}
\DeclareRobustCommand{\bitboxes}{%
- \@ifstar\bf@bitboxes@star\bf@bitboxes@no@star
+ \@ifstar
+ {\bf@call@box@cmd{\bf@bitboxes@star}}%
+ {\bf@call@box@cmd{\bf@bitboxes@no@star}}%
}
% \end{macrocode}
% \end{macro}
@@ -2328,112 +2523,114 @@
% \end{macro}
%
% \begin{macro}{\bf@bitboxes@no@star}
-% Implement the unstarred version of |\bitboxes|.
+% Implement the unstarred version of \cs{bitboxes}. This macro simply
+% expands its text argument into a list of tokens followed by \cs{relax}
+% then invokes \cs{bf@bitboxes@no@star@i}.
% \begin{macrocode}
-\newcommand{\bf@bitboxes@no@star}[3][lrtb]{%
+\def\bf@bitboxes@no@star{%
+ \expandafter\bf@bitboxes@no@star@i\bf@call@box@arg@iv\relax
+ \ignorespaces
+}
% \end{macrocode}
+% \end{macro}
+%
% \begin{macro}{\bf@bitboxes@no@star@i}
-% Define a helper macro that walks the final argument of
-% |\bf@bitboxes@no@star| token-by-token.
-% \begin{macrocode}
- \def\bf@bitboxes@no@star@i##1{%
+% Walk the subsequent tokens one-by-one until \cs{relax} is encountered.
+% For each token, invoke \cs{bf@bitbox} (the internal version of
+% \cs{bitbox} for which \cs{bf@call@box@arg@}\meta{number} are all
+% defined.
+% \begin{macrocode}
+\def\bf@bitboxes@no@star@i#1{%
+ \def\bf@call@box@arg@iv{#1}%
+ \ifx\bf@call@box@arg@iv\bf@relax
+ \let\next=\relax
+ \else
+ \bf@bitbox
+ \let\next=\bf@bitboxes@no@star@i
+ \fi
+ \next
+}
% \end{macrocode}
-% \begin{macro}{\bf@bitboxes@arg}
-% \begin{macro}{\next}
-% Store the current argument token in |\bf@bitboxes@arg| for use with |\ifx|.
-% \begin{macrocode}
- \def\bf@bitboxes@arg{##1}%
- \ifx\bf@bitboxes@arg\bf@relax
- \let\next=\relax
- \else
- \bitbox[#1]{#2}{##1}%
- \let\next=\bf@bitboxes@no@star@i
- \fi
- \next
- }%
- \bf@bitboxes@no@star@i#3\relax
+% \end{macro}
+%
+% \begin{macro}{\bf@bitboxes@star}
+% \begin{macro}{\bf@bitboxes@sides}
+% Implement the starred version of \cs{bitboxes}. This macro simply
+% stores the original \meta{sides} argument in \cs{bf@bitboxes@sides},
+% expands its text argument into a list of tokens followed by two
+% \cs{relax}es, and invokes \cs{bf@bitboxes@star@i}.
+% \begin{macrocode}
+\def\bf@bitboxes@star{%
+ \edef\bf@bitboxes@sides{\bf@call@box@arg@i}%
+ \expandafter\bf@bitboxes@star@i\bf@call@box@arg@iv\relax\relax
\ignorespaces
}
% \end{macrocode}
% \end{macro}
% \end{macro}
-% \end{macro}
-% \end{macro}
%
-% \begin{macro}{\bf@bitboxes@star}
-% Implement the starred version of |\bitboxes|.
-% \begin{macrocode}
-\newcommand{\bf@bitboxes@star}[3][lrtb]{%
-% \end{macrocode}
% \begin{macro}{\bf@bitboxes@star@i}
-% If the argument to |\bitboxes*| contains a single (or no) token,
-% simply pass control to |\bitbox| and stop. Otherwise, suppress the
-% box's right border by appending ``|R|'' to |\bitboxes*|'s
-% argument~|#1| and proceeding with the remaining tokens in~|#3|.
-% \begin{macrocode}
- \def\bf@bitboxes@star@i##1##2{%
-% \end{macrocode}
-% \begin{macro}{\bf@bitboxes@arg}
-% \begin{macro}{\next}
-% Store the current argument token in |\bf@bitboxes@arg| for use with |\ifx|.
-% \begin{macrocode}
- \def\bf@bitboxes@arg{##2}%
- \ifx\bf@bitboxes@arg\bf@relax
- \bitbox[#1]{#2}{##1}%
- \let\next=\relax
- \else
- \bitbox[#1R]{#2}{##1}%
- \def\next{\bf@bitboxes@star@ii{##2}}%
- \fi
- \next
- }%
-% \end{macrocode}
-% \begin{macro}{\bf@bitboxes@star@ii}
-% Process all tokens in |\bitboxes*|'s argument |#3| following the first
-% argument. For each token, produce a box with the left side suppressed
-% using~``|L|''.
-% \begin{macrocode}
- \def\bf@bitboxes@star@ii##1##2{%
-% \end{macrocode}
-% \begin{macro}{\bf@bitboxes@arg@i}
+% \begin{macro}{\bf@call@box@arg@iv}
% \begin{macro}{\bf@bitboxes@arg@ii}
-% \begin{macro}{\bf@bitboxes@sides}
% \begin{macro}{\next}
-% Store the next two argument tokens in |\bf@bitboxes@arg@i| and
-% |\bf@bitboxes@arg@i| for use with |\ifx|. We use those to set
-% |\bf@bitboxes@sides| to |\bitbox*|'s argument~|#1| with the left side
-% and, for the final token, the right side suppressed.
-% \begin{macrocode}
- \def\bf@bitboxes@arg@i{##1}%
- \def\bf@bitboxes@arg@ii{##2}%
- \ifx\bf@bitboxes@arg@ii\bf@relax
- \def\bf@bitboxes@sides{#1L}%
- \else
- \def\bf@bitboxes@sides{#1LR}%
- \fi
- \ifx\bf@bitboxes@arg@i\bf@relax
- \let\next=\relax
- \else
- \expandafter\bitbox\expandafter[\bf@bitboxes@sides]{#2}{##1}%
- \def\next{\bf@bitboxes@star@ii{##2}}%
- \fi
- \next
- }%
-% \end{macrocode}
-% \begin{macrocode}
- \bf@bitboxes@star@i#3\relax\relax
- \ignorespaces
+% Process the first token in the text argument passed to \cs{bitboxes*}.
+% If it's also the last token (indicated by its being followed by
+% \cs{relax}), draw an ordinary bit box with all sides present. If it's
+% not the last token, draw a bit box with the right side suppressed and
+% invoke \cs{bf@bitboxes@star@ii} on the remaining tokens.
+% \begin{macrocode}
+\def\bf@bitboxes@star@i#1#2{%
+ \def\bf@call@box@arg@iv{#1}%
+ \def\bf@bitboxes@arg@ii{#2}%
+ \ifx\bf@bitboxes@arg@ii\bf@relax
+ \bf@bitbox
+ \let\next=\relax
+ \else
+ \edef\bf@call@box@arg@i{\bf@bitboxes@sides R}%
+ \bf@bitbox
+ \def\next{\bf@bitboxes@star@ii{#2}}%
+ \fi
+ \next
}
% \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
+%
+% \begin{macro}{\bf@bitboxes@star@ii}
+% \begin{macro}{\bf@call@box@arg@iv}
+% \begin{macro}{\bf@bitboxes@arg@ii}
+% \begin{macro}{\next}
+% Process the second and subsequent tokens in the text argument passed
+% to \cs{bitboxes*}. If the next token in the stream is the final one
+% (indicated by its being followed by \cs{relax}), draw a bit box with
+% the left side suppressed. If it's not the final token, draw a bit box
+% with both the left and right sides suppressed and invoke itself
+% recursively on the remaining tokens.
+% \begin{macrocode}
+\def\bf@bitboxes@star@ii#1#2{%
+ \def\bf@call@box@arg@iv{#1}%
+ \def\bf@bitboxes@arg@ii{#2}%
+ \ifx\bf@bitboxes@arg@ii\bf@relax
+ \edef\bf@call@box@arg@i{\bf@bitboxes@sides L}%
+ \else
+ \edef\bf@call@box@arg@i{\bf@bitboxes@sides LR}%
+ \fi
+ \ifx\bf@call@box@arg@iv\bf@relax
+ \let\next=\relax
+ \else
+ \bf@bitbox
+ \def\next{\bf@bitboxes@star@ii{#2}}%
+ \fi
+ \next
+}
+% \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
-% \end{macro}
+%
%
% \subsubsection{Parsing arguments}
%
@@ -2470,7 +2667,8 @@
\bitbox@bottomfalse
\bitbox@leftfalse
\bitbox@rightfalse
- \bf@parse@bitbox@sides#1X}
+ \bf@parse@bitbox@sides#1X%
+}
% \end{macrocode}
% \end{macro}
%
@@ -2516,7 +2714,8 @@
\fi
\fi
\expandafter\bf@parse@bitbox@sides
- \fi}
+ \fi
+}
% \end{macrocode}
% \end{macro}
%
@@ -2552,7 +2751,8 @@
\ifcounting@words
\inc@bytefield@height{\unitlength * \real{\num@tall}}%
\global\counting@wordsfalse
- \fi}
+ \fi
+}
% \end{macrocode}
% \end{macro}
%
@@ -2604,7 +2804,8 @@
\inc@bytefield@height{\unitlength * \real{\strip@pt\units@tall}}%
\global\counting@wordsfalse
\fi
- \ignorespaces}
+ \ignorespaces
+}
% \end{macrocode}
% \end{macro}
%
@@ -2621,7 +2822,8 @@
\else
\bf@parse@range#1-#1-#1\relax
\expandafter\bf@parse@range@list
- \fi}
+ \fi
+}
% \end{macrocode}
% \end{macro}
%
@@ -2664,7 +2866,8 @@
\makebox(\strip@pt\bf@bitwidth,\strip@pt\units@tall){%
\bf@bitformatting{\theheader@val}}}
\addtocounter{header@val}{1}
- \repeat}
+ \repeat
+}
% \end{macrocode}
% \end{macro}
%
@@ -3111,7 +3314,8 @@
% |\begin|.
% \begin{macrocode}
\def\@currenvir{leftwordgroup}%
- \ignorespaces}
+ \ignorespaces
+}
% \end{macrocode}
% \end{macro}
% \end{environment}
@@ -3430,6 +3634,26 @@
% \end{macrocode}
% \end{macro}
%
+% \begin{macro}{\bf@bgcolor}
+% \begin{macro}{\KV@bytefield@bgcolor}
+% Specify a background color for a bit box or word box.
+% \begin{macrocode}
+\define@key{bytefield}{bgcolor}{\def\bf@bgcolor{#1}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\bf@per@word}
+% \begin{macro}{\KV@bytefield@per@word}
+% Specify a macro to invoke for each word of a word box. The macro must
+% take two arguments: the word number (0-indexed) and the total number
+% of words.
+% \begin{macrocode}
+\define@key{bytefield}{perword}{\def\bf@per@word{#1}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
% \begin{macro}{\bytefieldsetup}
% \usermacro
% \changes{v2.0}{2011/01/18}{Introduced this macro to provide a more
diff --git a/macros/latex/contrib/bytefield/bytefield.ins b/macros/latex/contrib/bytefield/bytefield.ins
index 37197a9ab0..d00c642405 100644
--- a/macros/latex/contrib/bytefield/bytefield.ins
+++ b/macros/latex/contrib/bytefield/bytefield.ins
@@ -1,5 +1,5 @@
%%
-%% Copyright (C) 2017 by Scott Pakin <scott+bf@pakin.org>
+%% Copyright (C) 2000-2020 by Scott Pakin <scott+bf@pakin.org>
%%
%% This file may be distributed and/or modified under the conditions of
%% the LaTeX Project Public License, either version 1.3a of this license
@@ -21,7 +21,7 @@
This is a generated file.
-Copyright (C) 2017 by Scott Pakin <scott+bf@pakin.org>
+Copyright (C) 2000-2020 by Scott Pakin <scott+bf@pakin.org>
This file may be distributed and/or modified under the conditions of
the LaTeX Project Public License, either version 1.3a of this license
diff --git a/macros/latex/contrib/bytefield/bytefield.pdf b/macros/latex/contrib/bytefield/bytefield.pdf
index 3436fa27fa..44c093147a 100644
--- a/macros/latex/contrib/bytefield/bytefield.pdf
+++ b/macros/latex/contrib/bytefield/bytefield.pdf
Binary files differ
diff --git a/macros/latex/contrib/carlisle/README.txt b/macros/latex/contrib/carlisle/README.txt
index 7f4822ffb0..f2dcb0da02 100644
--- a/macros/latex/contrib/carlisle/README.txt
+++ b/macros/latex/contrib/carlisle/README.txt
@@ -13,17 +13,11 @@ each other except by the fact that they have the same author.
David Carlisle https://github.com/davidcarlisle/dpctex
-2018-04-01
+2020-10-23
Currently the directory contains the following.
-mylatex.ltx
- This file provides a method of making a special format tailored to
- one document, with all the class and packages, and other preamble
- material pre-loaded. This can save quite a lot of time on some
- systems. See the comments in the file.
-
dotlessj.sty
If you are using a font set without a dotless j (\j and \jmath) then
this package will fake one. It requires the LaTeX color package.
@@ -64,6 +58,9 @@ remreset.sty
Packages that were formally in this collection.
+mylatex.ltx
+ This file has now moved: see macros/latex/contrib/mylatex
+
nopageno.sty
This file has now moved: see macros/latex/contrib/nopageno
diff --git a/macros/latex/contrib/carlisle/ltxtable.pdf b/macros/latex/contrib/carlisle/ltxtable.pdf
index 70d868afbb..6e0f1848fe 100644
--- a/macros/latex/contrib/carlisle/ltxtable.pdf
+++ b/macros/latex/contrib/carlisle/ltxtable.pdf
Binary files differ
diff --git a/macros/latex/contrib/carlisle/remreset.sty b/macros/latex/contrib/carlisle/remreset.sty
index 0d987ec185..762b8951bf 100644
--- a/macros/latex/contrib/carlisle/remreset.sty
+++ b/macros/latex/contrib/carlisle/remreset.sty
@@ -41,7 +41,7 @@
}{%
\PackageWarningNoLine{remreset}
{The remreset package is obsolete:\MessageBreak
- \noexpand\@removefomresset is defined}%
+ \noexpand\@removefromreset is defined}%
}
diff --git a/macros/latex/contrib/graphpaper/README b/macros/latex/contrib/graphpaper/README
new file mode 100644
index 0000000000..58f2e22f9b
--- /dev/null
+++ b/macros/latex/contrib/graphpaper/README
@@ -0,0 +1,69 @@
+*********************************************************************
+* GraphPaper class *
+*********************************************************************
+
+ This is the README file of the "GraphPaper" LaTeX class.
+
+
+
+** License **********************************************************
+
+ Copyright (c) 2020 by Claudio Beccari e Francesco Biccari.
+
+ This work (specified below) may be distributed and/or
+ modified under the conditions of the
+ LaTeX Project Public License,
+ either version 1.3c of this license or any later version.
+ The latest version of this license is in
+ http://www.latex-project.org/lppl.txt
+ and version 1.3c or later is part of all distributions of
+ LaTeX version 2005/12/01 or later.
+
+ This work has the LPPL maintenance status 'maintained'.
+ The Current Maintainer of this work is Francesco Biccari.
+
+
+
+** Class information ************************************************
+
+ Graphpaper is a new LaTeX document class which allows to print
+ several types of graph papers: bilinear (millimeter paper),
+ semilogarithmic, bilogarithmic, polar, log-polar, Smith charts.
+
+ The documentation is provided in the file graphpaper.pdf.
+
+ The version number of this class is reported at the top of the
+ class file graphpaper.cls and in the pdf manual graphpaper.pdf.
+
+
+
+** Installation instruction *****************************************
+
+ GraphPaper can be installed in 3 different ways:
+
+ 1. The simplest way is by the package manager
+ of your TeX distribution (TeX Live, MiKTeX or MacTeX).
+
+ 2. Instead, if you want to install GraphPaper manually, you have to
+ download the GraphPaper.zip archive from CTAN.
+
+ The archive contains:
+
+ 1. graphpaper.dtx (main file)
+ 2. README (this file)
+
+ You can simply copy graphpaper.dtx into your local work directory
+ and compile it with command "pdflatex.exe graphpaper.dtx",
+ the documentation pdf file and the class file graphpaper.cls
+ will be generated.
+
+ 3. The last possibility is to copy the GraphPaper files
+ (cls and pdf generated as discussed in the previous point and
+ README file) into your texmf tree (or your localtexmf tree) at
+ these locations:
+
+ <texmf>/tex/latex/graphpaper/graphpaper.cls
+ <texmf>/doc/latex/graphpaper/graphpaper.pdf
+ <texmf>/doc/latex/graphpaper/README
+
+ Then, you need to update the file database.
diff --git a/macros/latex/contrib/graphpaper/graphpaper.dtx b/macros/latex/contrib/graphpaper/graphpaper.dtx
new file mode 100644
index 0000000000..071f40b1de
--- /dev/null
+++ b/macros/latex/contrib/graphpaper/graphpaper.dtx
@@ -0,0 +1,1048 @@
+%\iffalse
+% !TEX encoding = UTF-8 Unicode
+% !TEX TS-program = pdflatex
+%<*internal>
+\begingroup
+%^^A Load the docstrip package (DO NOT USE \input{...})
+\input docstrip.tex
+\keepsilent
+%^^A\usedir{tex/latex/graphpaper}
+%^^A insert this text at the beginning of the generated file
+\preamble
+ ________________________________________
+ The graphpaper class for generating several types of graph paper
+ Copyright (C) 2020 C. Beccari & F. Biccari
+ All rights reserved
+
+ License information appended
+
+\endpreamble
+%^^A insert this text at the end of the generated file
+\postamble
+Copyright (C) 2020 Claudio Beccari & Francesco Biccari
+
+Distributable under the LaTeX Project Public License,
+version 1.3c or higher (your choice). The latest version of
+this license is at: http://www.latex-project.org/lppl.txt
+
+This work is "author-maintained".
+
+This work consists of this file graphpaper.dtx,
+and the derived files graphpaper.cls and graphpaper.pdf.
+
+\endpostamble
+%^^A
+%^^A DocStrip can silently overwrite an already existing cls file
+\askforoverwritefalse
+%^^A
+%^^A Generates the cls file from the dtx file, stripping out all
+%^^A the documentation. The option "class" tells to DocStrip to
+%^^A extract only the code marked with the "class" tag.
+\generate{\file{graphpaper.cls}{\from{graphpaper.dtx}{class}}}
+%
+\def\tmpa{plain}
+\ifx\tmpa\fmtname\endgroup\expandafter\bye\fi
+\endgroup
+%</internal>
+%\fi
+%^^A %
+%^^A ----------------------------------------------------------------------
+%^^A Here starts the second part
+%^^A ProvidesFile must be (more or less) the first command for a class dtx.
+%^^A It populates the variables \filename, \filedate, and \fileversion
+%^^A
+% \iffalse
+%<*driver>
+\ProvidesFile{graphpaper.dtx}
+%</driver>
+%<class>\NeedsTeXFormat{LaTeX2e}[2018-01-01]
+%<class>\ProvidesClass{graphpaper}%
+%<*class>
+ [2020-10-10 1.0 A LaTeX class to generate several types of graph papers]
+%</class>
+%<*driver>
+\documentclass[11pt,a4paper]{ltxdoc}
+\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage{lmodern,textcomp}
+\usepackage[a4paper,lines=50]{geometry}
+\usepackage{multicol}
+\hfuzz 10pt
+\let\originalmeta\meta
+\renewcommand\meta[1]{{\normalfont\originalmeta{#1}}}
+\renewcommand\marg[1]{\texttt{\{\meta{#1}\}}}
+\newcommand\Marg[1]{\texttt{\{#1\}}}
+\newcommand\opz[1]{\texttt{[\meta{#1}]}}
+\newcommand\Opz[1]{\texttt{[#1]}}
+\newcommand\amb[1]{\texttt{\slshape#1}}\let\env\amb
+\renewcommand\cs[1]{{\normalfont\ttfamily\char92#1}}
+\newcommand\Benv[1]{\texttt{\char92begin\{#1\}}}
+\newcommand\Eenv[1]{\texttt{\char92end\{#1\}}}
+\newcommand\eTeX{$\varepsilon$-\TeX}
+\providecommand\prog{}
+\renewcommand\prog[1]{\textsf{#1}}
+\newcommand\pack[1]{\texttt{\itshape#1}}
+\newcommand\class[1]{\texttt{#1}}
+%
+\newenvironment{ttsintassi}{\begin{lrbox}{0}
+\minipage{\dimexpr\linewidth-2\fboxrule-2\fboxsep}\ttfamily\obeylines}%
+{\endminipage\end{lrbox}\center\fbox{\box0}\endcenter}
+\let\ttsyntax\ttsintassi \let\endttsyntax\endttsintassi
+%
+\usepackage{color}
+\definecolor{sfondoblu}{rgb}{0.94,0.97,1}
+\usepackage{listings}
+\lstset{language=[LaTeX]TeX,
+ basicstyle=\footnotesize\ttfamily,
+ keywordstyle=\color{blue}\bfseries,
+ commentstyle=\color{gray},
+ backgroundcolor=\color{sfondoblu},
+ frameround=tttt,
+ frame=tlrb,
+ escapechar=|,
+ morekeywords={bilinear, semilogx, semilogy, loglog, polar, logpolar, smith, setgridcolor, setmajorlinethickness, setmediumlinethickness, setminorlinethickness, setminimumdistance, setxside, setyside, customcode},
+ columns=flexible
+}
+\begin{document}
+\GetFileInfo{graphpaper.dtx}
+\title{Documentation of the \class{graphpaper} \LaTeX\ class}
+\author{Claudio Beccari \and Francesco Biccari\thanks{Corresponding author: biccari@gmail.com}}
+\date{Version number \fileversion; last revised on \filedate.}
+\maketitle
+\setcounter{tocdepth}{2}
+\renewcommand{\columnseprule}{0.4pt}
+\setlength{\columnsep}{1.5cm}
+
+\addtocontents{toc}{\protect\begin{multicols}{2}}
+{\small
+\tableofcontents}
+
+\DocInput{graphpaper.dtx}
+\addtocontents{toc}{\protect\end{multicols}}
+\end{document}
+%</driver>
+% \fi
+%^^A \CheckSum{100}
+%\begin{abstract}
+% This document describes how to use the \LaTeX\ document class \class{graphpaper}.
+% It allows to print several types of graph papers: bilinear,
+% semilogarithmic, bilogarithmic, polar, Smith charts.
+%\end{abstract}
+%
+%\section{Legal terms}
+% This file is part of the |graphpaper| bundle.
+%
+% This work may be distributed and/or modified under the
+% conditions of the \LaTeX\ Project Public License, either version 1.3c
+% of this license or (at your option) any later version.
+% The latest version of this license is at:
+% http://www.latex-project.org/lppl.txt
+%
+% This work has the LPPL maintenance status ``maintained''.
+%
+% This work consists of this file graphpaper.dtx,
+% and the derived files graphpaper.cls and graphpaper.pdf.
+%
+% The list of derived (unpacked) files belonging to the distribution
+% and covered by the LPPL is contained in the README file.
+%
+%\section{Installation}
+% The simplest way to install \class{graphpaper} is by the package manager of your \TeX\
+% distribution (\TeX\ Live or MiK\TeX). For manual installation see the README file.
+%
+%
+% \newpage
+% \section{How to use graphpaper}
+% \label{sec:howto}
+%
+% \class{Graphpaper} is a \LaTeX\ class and it is loaded as usual:
+%
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+\documentclass|\opz{options}|{graphpaper}
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
+%
+% It has three class options to specify the paper format:
+% \texttt{a4paper}, \texttt{a3paper}, \texttt{letterpaper}.
+% The paper orientation cannot be changed and it is always set
+% to landscape.
+%
+% \class{Graphpaper} provides the following commands (to be used
+% inside the body of the document) in order to compose graph papers.
+% At the end of the execution of these commands, a new page
+% is always started.
+%
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+\bilinear
+
+\semilogx|\marg{decades along x}|
+
+\semilogy|\marg{decades along y}|
+
+\loglog|\opz{0/1}||\marg{decades along x}||\marg{decades along y}|
+
+\polar
+
+\logpolar|\marg{decades along radius}|
+
+\smith
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
+% The commands \cs{bilinear}, \cs{semilogx}, and \cs{semilogy} are self
+% explanatory.
+% The optional parameter in the \cs{loglog} command chooses wether the
+% decade length along the abscissa and ordinate axes must have the same
+% dimension. It can assume the value 0 (free dimensions) or 1 (same
+% dimensions), 0 being the default.
+% The commadns \cs{polar}, \cs{logpolar}, \cs{smith} are used to plot
+% polar, logpolar, and Smith chart graph papers. The mandatory argument
+% of \cs{logpolar} specifies the number of decades.
+%
+% There are several commands to change the appearance of the graph papers.
+% They must be inserted before the graph paper command which we want they
+% affect.
+%
+% The following ones are specific to bilinear, semilog and loglog papers
+% only:
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+\setxside|\marg{length}|
+
+\setyside|\marg{length}|
+
+\setminimumdistance|\marg{length}|
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
+% \cs{setxside} and \cs{setyside} allow to specify the dimensions of the
+% rectangle of the grid. The default values are (260\,mm, 180\,mm) for
+% A4 paper, (250\,mm, 190\,mm) for letter paper, and (380\,mm, 280\,mm)
+% for A3 paper.
+%
+% \cs{setminimumdistance} specifies the minimal optical distance
+% between two lines. Default is 1\,mm. In this way, the number of
+% subdivision is automatically composed.
+%
+% The following commands are instead general settings for all graph
+% papers:
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+\setgridcolor|\marg{color}|
+
+\setmajorlinethickness|\marg{length}|
+
+\setmediumlinethickness|\marg{length}|
+
+\setminorlinethickness|\marg{length}|
+
+\customcode|\opz{0/1}\marg{picture environment commands}|
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
+%
+% \cs{setgridcolor} sets the color of the grid. The argument must be a
+% color defined or predefined by the color or |xcolor| package. The
+% default color is the typical red-orange color used in many graph papers,
+% Pantone 2011 U corresponding to RGB (250,153,89).
+%
+% \cs{setmajorlinethickness}, \cs{setmediumlinethickness},
+% \cs{setminorlinethickness} can be used to change the thickness of the
+% lines. The default values are 1\,pt, 0.6\,pt, 0.25\,pt, respectively.
+%
+% \cs{customcode} accepts all the commands accepted by the picture
+% environment. This snippet of code is inserted inside the picture
+% environment used to draw the subsequent graph paper.
+% The origin of the coordinate system in the case of rectangular graph
+% papers is the lower left vertex. The \cs{unitlength} is set to 1\,mm.
+% For circular plots (both polar and Smith) the origin is in the center
+% of the circle and the \cs{unitlength} is set to 1/140 of the paper height
+% currently in use.
+%
+% The \cs{customcode} command can be used, for example, to add a logo
+% or to draw on the graph paper.
+% Its optional argument is by default set to 0. If it is set to 1, the
+% content of the \cs{customcode} is erased after its usage in a
+% graphpaper.
+%
+%
+%\StopEventually{}
+%
+%\iffalse
+%<*class>
+%\fi
+%\clearpage
+%\section{The implementation}
+% This class file has been already identified by the commands extracted
+% by the |DocStrip| package, during the |.dtx| file compilation.
+% Therefore the commands \cs{NeedsTeXFormat} and \cs{ProvidesClass} are
+% already present in the |.cls| file.
+%
+% \subsection{Loaded packages, class options, and initial settings}
+% The |xkeyvalue| package is used in order to define the class options:
+% \begin{macrocode}
+\RequirePackage{xkeyval}
+% \end{macrocode}
+% Three class options are implemented and they allows only to change the
+% paper format (A4, A3, letter). The orientation of the paper is fixed
+% to landscape.
+%
+% \begin{macrocode}
+\def\GP@paper{1}
+\define@key[GRP]{}{a4paper}[]{\PassOptionsToPackage{a4paper}{geometry}}
+\define@key[GRP]{}{letterpaper}[]{\PassOptionsToPackage{letterpaper}{geometry}%
+ \def\GP@paper{2}}
+\define@key[GRP]{}{a3paper}[]{\PassOptionsToPackage{a3paper}{geometry}%
+ \def\GP@paper{3}}
+\DeclareOptionX*{\ClassError{graphpaper}{Option '\CurrentOption'%
+ \MessageBreak is not valid}{Remove '\CurrentOption' %
+ from class options}}
+\ProcessOptionsX[GRP]<>
+% \end{macrocode}
+%
+% The class is based on the \class{article} class. The default paper
+% is A4.
+% \begin{macrocode}
+\LoadClass[a4paper,11pt]{article}
+% \end{macrocode}
+%
+% Some packages are loaded. \pack{euclideangeometry} loads \pack{curve2e}
+% which in turns loads \pack{pict2e}; all of them are \env{picture}
+% environment extensions.
+% \begin{macrocode}
+\RequirePackage[landscape]{geometry}
+\RequirePackage{euclideangeometry,graphicx,xcolor}
+% \end{macrocode}
+%
+% Default line color (Pantone 2011~U).
+% \begin{macrocode}
+\definecolor{gridcolor}{RGB}{250,153,89}
+% \end{macrocode}
+%
+% Default thickness of the lines used for main divisions and subdivisions.
+% The ISO-UNI standards prescribe a geometric progression with $\sqrt{2}$
+% ratio, but it is not respected here.
+% It must be keep in mind also that a safe minimum thickness for an offset
+% monochromatic printer is about 0.25\,pt, whereas a safe minimum
+% thickness for a laser printer is about 0.5\,pt.
+% \begin{macrocode}
+\newlength\lwa
+\setlength{\lwa}{1pt}
+\newlength\lwb
+\setlength{\lwb}{0.6pt}
+\newlength\lwc
+\setlength{\lwc}{0.25pt}
+% \end{macrocode}
+%
+% Minimum distance between two subdivision lines. A necessary parameter
+% for automatic choice of number of subdivisions. Default 1\,mm.
+% \begin{macrocode}
+\newlength\mindistanceunit
+\setlength{\mindistanceunit}{1mm}
+% \end{macrocode}
+%
+% Definition of the width and height of the main rectangle within which
+% the bilinear, semilog and loglog grid is composed.
+% \begin{macrocode}
+\newlength\xsideunit
+\newlength\ysideunit
+\if\GP@paper1
+ \setlength{\xsideunit}{260mm}
+ \setlength{\ysideunit}{180mm}
+\fi
+\if\GP@paper2
+ \setlength{\xsideunit}{250mm}
+ \setlength{\ysideunit}{190mm}
+\fi
+\if\GP@paper3
+ \setlength{\xsideunit}{380mm}
+ \setlength{\ysideunit}{280mm}
+\fi
+% \end{macrocode}
+%
+%\subsection{Rectangular graph papers}
+%
+% As we will see below, the commands to compose the bilinear, semilog
+% and loglog graph papers are just proper calls of the low-level command
+% \cs{carta}.
+%
+%\subsubsection{Service macros for rectangular graph papers}
+%
+% First of all, four macros are defined. They are used by the
+% \cs{carta} service command only.
+%
+% Two of them are simply two identical classical |whiledo| commands:
+% the first cycles on the counter \cs{J} while the second one on the
+% counter \cs{K}.
+% They are two because in this way two nested |whiledo| commands can be
+% implemented.
+% These \cs{WhileDo} commands have four parameters:
+% 1. the incremental step of the counter between cycles (default 1);
+% 2. the initial value of the counter;
+% 3. the final value of the counter;
+% 4. the code to execute at each cycle.
+% \begin{macrocode}
+\newcount\J
+\newcount\K
+
+\newcommand\WhileDoOne[4][1]{%
+ \J=#2 \fpdowhile{\J=<#3 }{#4\advance\J by #1\relax}}
+
+\newcommand\WhileDoTwo[4][1]{%
+ \K=#2 \fpdowhile{\K=<#3 }{#4\advance\K by #1\relax}}
+% \end{macrocode}
+%
+%
+% The other two commands are used to draw a periodic set of equidistant
+% lines in log scale.
+% These two commands are practically identical, the only difference is
+% that they act on different axes.
+% These commands have six parameters:
+% 1. number of lines to draw (distance between these lines is the fifth
+% parameter);
+% 2. value at which the first line must be drawn (x-value for vertical
+% lines, y-value for horizontal lines);
+% 3. thickness;
+% 4. tick length;
+% 5. distance between two lines (typically the length of a decade:
+% y-decade for horizontal lines, x-decade for vertical lines);
+% 6. line length (typically the length of the graph paper sides:
+% x-side for horizontal lines and y-side for vertical lines).
+%
+% \begin{macrocode}
+\newcommand\hlines[6]{%
+\multiput(-#4,\fpeval{ln(#2) * #5 / ln(10)})(0,#5){#1}%
+{\linethickness{#3}\line(1,0){\fpeval{#6 + 2*#4}}}%
+}
+
+\newcommand\vlines[6]{%
+\multiput(\fpeval{ln(#2) * #5 / ln(10)},-#4)(#5,0){#1}%
+{\linethickness{#3}\line(0,1){\fpeval{#6 + 2*#4}}}%
+}
+% \end{macrocode}
+%
+%\subsubsection{Command for rectangular graph papers}
+%
+% Here starts the definition of the \cs{carta} command. Its syntax is
+%\begin{ttsyntax}
+%\cs{carta}\opz{0 or1}\marg{no. x decades}\marg{no. of y decades}
+%\end{ttsyntax}
+% If an axis has zero decades, the scale is linear.
+% For example, \cs{carta}\Marg{0}\Marg{0} composes a bilinear graph
+% paper, \cs{carta}\Marg{2}\Marg{0} composes a semilog graph paper with
+% linear y-axis and two decades along x-axis, and so on.
+% Its optional argument can be 0 or 1. If it is set to 0, and both the
+% numbers of decades are greater than zero (which means the resulting
+% graph paper is loglog), then the length of x-axis and y-axis decades
+% are set to be equal.
+%
+% Declaration of the command and its arguments.
+% \begin{macrocode}
+\NewDocumentCommand{\carta}{O{0} m m}{%
+% \end{macrocode}
+%
+% Typographical settings and definition of the main features of the
+% graphpaper. \cs{xlength} and \cs{ylength} represent the lengths,
+% expressed in mm, of the rectangle dimensions. \cs{minimumdistance}
+% is the minimum distance at which two subdivision lines can be drawn.
+% \begin{macrocode}
+\newpage
+\parindent=0pt
+\pagestyle{empty}%
+\color{gridcolor}%
+\setlength{\unitlength}{1mm}%
+\def\ticklength{2}
+\def\minorticklength{1.2}
+\def\minimumdistance{\fpeval{(\mindistanceunit/1mm)}}
+\def\xlength{\fpeval{round(round(\xsideunit/1cm) * 10)}}
+\def\ylength{\fpeval{round(round(\ysideunit/1cm) * 10)}}
+% \end{macrocode}
+%
+% \cs{xlinsq} and \cs{ylinsq} represent the number of big divisions
+% (cm) on horizontal and vertical axes for linear scales, respectively.
+% \begin{macrocode}
+\def\xlinsq{\inteval{\xlength/10}}
+\def\ylinsq{\inteval{\ylength/10}}
+% \end{macrocode}
+%
+% Implementation of the same decade length between x-axis and y-axis
+% for loglog graph paper. This is obtained properly changing the
+% values of \cs{xlength} and \cs{ylength}, making them equal.
+% \begin{macrocode}
+\edef\decx{#2}% decades along x
+\edef\decy{#3}% decades along y
+\unless\ifnum#2=0 \unless\ifnum#3=0 \ifnum#1=1%
+\fptest{\decx/\decy < \xlength/\ylength}%
+{\def\xlength{\fpeval{\ylength*\decx/\decy}}}
+{\def\ylength{\fpeval{\xlength*\decy/\decx}}}
+\fi\fi\fi
+% \end{macrocode}
+%
+% Using the values of the paper width and height together with the
+% length of the graph paper rectangle sides, the margins are calculated
+% and passed to the geometry package in order to center the grid with
+% respect to the page.
+% \begin{macrocode}
+\ifcsname ml\endcsname\relax\else\newlength\ml\fi
+\ifcsname mr\endcsname\relax\else\newlength\mr\fi
+\ifcsname mt\endcsname\relax\else\newlength\mt\fi
+\ifcsname mb\endcsname\relax\else\newlength\mb\fi
+\unless\ifcsname mr\endcsname\newlength\mr\fi
+\unless\ifcsname mt\endcsname\newlength\mt\fi
+\unless\ifcsname mb\endcsname\newlength\mb\fi
+\setlength{\ml}{\fpeval{(\paperwidth/1mm - \xlength)/2}mm}
+\setlength{\mr}{\fpeval{(\paperwidth/1mm - \xlength)/2}mm}
+\setlength{\mt}{\fpeval{(\paperheight/1mm - \ylength)/2}mm}
+\setlength{\mb}{\fpeval{(\paperheight/1mm - \ylength)/2}mm}
+\newgeometry{left=\ml,right=\mr,top=\mt,bottom=\mb}
+% \end{macrocode}
+%
+% Here starts the drawing of the graph paper by the |picture| environment.
+% \begin{macrocode}
+\begin{picture}(\xlength,\ylength)
+% \end{macrocode}
+%
+% If the horizontal axis is linear, vertical lines are drawn by
+% simple \cs{multiput} commands. Otherwise, if the scale is logarithmic,
+% the vertical lines are drawn by the \cs{vlines} command defined above.
+% \begin{macrocode}
+\ifnum#2=0\relax
+% vertical lines on linear abscissa. Main lines every 10 mm.
+% Second level lines every 5 mm, Third level lines every 1 mm,
+% according to the \minimumdistance value
+ \multiput(0,0)(10,0){\inteval{\xlinsq + 1}}{%
+ \linethickness{\lwa}\squarecap\line(0,1){\ylength}}
+ \ifnum\fpeval{\minimumdistance <= 5}=1
+ \multiput(5,0)(10,0){\xlinsq}{%
+ \linethickness{\lwb}\line(0,1){\ylength}}\fi
+ \ifnum\fpeval{\minimumdistance <= 1}=1
+ \multiput(0,0)(1,0){\xlength}{%
+ \linethickness{\lwc}\line(0,1){\ylength}}\fi
+\else
+ % vertical lines on log abscissa
+ \edef\decxx{\fpeval{\decx + 1}}%
+ \edef\xstep{\fpeval{\xlength / \decx}}
+ % main lines: one for each decade (10) plus one at the end
+ \vlines{\decxx}{1}{\lwa}{\ticklength}{\xstep}{\ylength}
+ % second-level lines: one every unit (1), for each decade
+ \WhileDoOne{2}{9}{\vlines{\decx}{\J}{\lwb}{%
+ \minorticklength}{\xstep}{\ylength}}
+ % third-level lines: for each decade (10) and for each unit (1):
+ % 20, 10, 5, 2 are progressively tested and adopted if the distance
+ % between two subsequent nearest lines is less to \minimumdistance
+ \WhileDoTwo{1}{9}{%
+ \edef\xmindivfloat{%
+ \fpeval{(\K+1)*(1-10^-(\minimumdistance/\xstep))}}
+ % xmindiv corresponds to 1/20 of unit
+ \def\xmindiv{20}
+ % xmindivfloat corresponds to the distance of two
+ % subdivision with respect to the unit
+ \ifnum\fpeval{\xmindivfloat <= 0.5}=1 \def\xmindiv{10}\fi
+ \ifnum\fpeval{\xmindivfloat <= 0.2}=1 \def\xmindiv{4}\fi
+ \ifnum\fpeval{\xmindivfloat <= 0.1}=1 \def\xmindiv{2}\fi
+ \ifnum\fpeval{\xmindivfloat <= 0.05}=1 \def\xmindiv{1}\fi
+ \ifnum\fpeval{\xmindiv == 20}=1\relax
+ \else\WhileDoOne[\xmindiv]{\xmindiv}{19}{%
+ \vlines{\decx}{(\K+\J/20)}{\lwc}{0}{\xstep}{\ylength}}\fi}
+\fi
+% \end{macrocode}
+%
+% If the vertical axis is linear, horizontal lines are drawn by
+% simple \cs{multiput} commands. Otherwise, if the scale is logarithmic,
+% the horizontal lines are drawn by the \cs{hlines} command defined above.
+% \begin{macrocode}
+\ifnum#3=0\relax
+% horizontal lines on linear ordinates. Main lines every 10 mm.
+% Second level lines every 5 mm, Third level lines every 1 mm,
+% according to the \minimumdistance value
+ \multiput(0,0)(0,10){\inteval{\ylinsq + 1}}{%
+ \linethickness{\lwa}\squarecap\line(1,0){\xlength}}
+ \ifnum\fpeval{\minimumdistance <= 5}=1
+ \multiput(0,5)(0,10){\ylinsq}{%
+ \linethickness{\lwb}\line(1,0){\xlength}}\fi
+ \ifnum\fpeval{\minimumdistance <= 1}=1
+ \multiput(0,0)(0,1){\ylength}{%
+ \linethickness{\lwc}\line(1,0){\xlength}}\fi
+\else
+ % horizontal lines on log ordinates
+ \edef\decyy{\fpeval{\decy + 1}}%
+ \edef\ystep{\fpeval{\ylength / \decy}}
+ % main lines: one for each decade (10) plus one at the end
+ \hlines{\decyy}{1}{\lwa}{\ticklength}{\ystep}{\xlength}
+ % second-level lines: one every unit (1), for each decade
+ \WhileDoOne{2}{9}{\hlines{\decy}{\J}{\lwb}{%
+ \minorticklength}{\ystep}{\xlength}}
+ % third-level lines: for each decade (10) and for each unit (1):
+ % 20, 10, 5, 2 are progressively tested and adopted if the distance
+ % between two subsequent nearest lines is less to \minimumdistance
+ \WhileDoTwo{1}{9}{\edef\ymindivfloat{%
+ \fpeval{(\K+1)*(1-10^-(\minimumdistance/\ystep))}}
+ % ymindiv corresponds to 1/20 of unit
+ \def\ymindiv{20}
+ % ymindivfloat corresponds to the distance of two subdivisions
+ % with respect to the unit
+ \ifnum\fpeval{\ymindivfloat <= 0.5}=1 \def\ymindiv{10}\fi
+ \ifnum\fpeval{\ymindivfloat <= 0.2}=1 \def\ymindiv{4}\fi
+ \ifnum\fpeval{\ymindivfloat <= 0.1}=1 \def\ymindiv{2}\fi
+ \ifnum\fpeval{\ymindivfloat <= 0.05}=1 \def\ymindiv{1}\fi
+ \ifnum\fpeval{\ymindiv == 20}=1\relax
+ \else\WhileDoOne[\ymindiv]{\ymindiv}{19}{%
+ \hlines{\decy}{(\K+\J/20)}{\lwc}{0}{\ystep}{\xlength}}\fi}
+\fi
+% \end{macrocode}
+%
+% Custom code provided by the user. After executing the code to compose
+% the rectangular graph paper and the user custom code, the latter is
+% reset if the \cs{GP@customcodereset} is true.
+% \begin{macrocode}
+\GP@custom
+\end{picture}
+\ifGP@customcodereset\def\GP@custom{}\fi}
+% \end{macrocode}
+%
+%
+%
+%\subsection{Circular graph papers}
+%
+% The \class{Graphpaper} class provides commands to draw three different
+% circular graph papers: linear polar chart, log polar chart, Smith chart.
+%
+%\subsubsection{Service macros for Smith charts}
+%
+% Here follows a list of service macros used by circular graph papers.
+%
+% Definition of the counter \cs{I}, used both in polar paper and Smith chart.
+% \begin{macrocode}
+\newcount\I
+% \end{macrocode}
+%
+% |Rbox| composes a tick and a label in a rotated box. It is used to
+% compose the ticks and labels along the external circle of circular
+% graph papers. It accepts three arguments: The first one is
+% optional and represents
+% the angle of rotation (default 0); the second one is optional too,
+% it is inserted by round parentheses, and it represents the position of the
+% box which can be given in cartesian $(x,y)$ or polar coordinates $(\theta:\rho)$
+% (default 0:0); the third one is mandatory and
+% contains the label.
+% \begin{macrocode}
+\NewDocumentCommand\Rbox{O{0} D(){0:0} m}{%
+ \fptest{#1>=0}{\edef\RotLab{\fpeval{#1-90}}}{\edef\RotLab{\fpeval{#1+90}}}%
+ \put(#2){\color{black}\segment(0,0)(#1:1)\put(#1:1){%
+ \rotatebox{\RotLab}{\makebox(0,0)[c]{%
+ \fptest{#1>=0}{\Pbox[b]}{\Pbox[t]}{\scriptstyle#3}[0]}}%
+ }%
+ }\ignorespaces}
+% \end{macrocode}
+%
+% |\Xcircle| macro (used only for Smith charts) assumes that the scale
+% factor |\Scala| ($s$) has already been defined and it takes only one
+% mandatory parameter ($x$). It draws a circle with
+% center $(sx/(x+1),0)$ and radius $s/(x+1)$. ($x$ represents the real
+% part (resistance) of the normalised impedance.)
+% \begin{macrocode}
+\NewDocumentCommand\Xcircle{m}{%
+ \edef\Czero{0,0}\edef\Rzero{\Scala}%
+ \edef\Rdue{\fpeval{1/(#1+1)*\Scala}}%
+ \edef\Cdue{\fpeval{\Rzero-\Rdue},0}%
+ \Circlewithcenter\Cdue radius\Rdue\ignorespaces}
+% \end{macrocode}
+%
+% |\Ycircle| macro (used only for Smith charts) assumes that the scale
+% factor |\Scala| ($s$) has already been defined.
+% It assumes that the circle diameter is 100|\unitlength|s long and it
+% takes only one
+% mandatory parameter ($y$). It draws an arc of a circle with
+% center $(s,s/y)$, starting point at $(s,0)$ (and therefore radius
+% $s/y$) and with an angle calculated in order to have the end point on
+% the external circle. ($y$ represents the imaginary part (reactance)
+% of the normalised impedance.)
+% \begin{macrocode}
+\NewDocumentCommand\Ycircle{m s}{%
+ \edef\Czero{0,0}\edef\Rzero{\Scala}% external circle center and radius
+ \edef\Rdue{\fpeval{\Scala/abs(#1)}}% Small circle radius
+ \edef\Cdue{\Rzero,\fpeval{\Scala/#1}}% Small circle center
+ \edef\Cuno{\Rzero,0}% First intersection point
+ \ModAndAngleOfVect\Cdue to\Mod and\Alfa % Small circle center polar coordinates
+ \IntersectionOfLines(\Czero)(\Cdue)and(\Cuno)(\fpeval{\Alfa+90}:1)to\Inter
+ \SymmetricalPointOf\Cuno respect\Inter to\Idue
+ \ModAndAngleOfVect\Idue to\Mdue and\Adue
+ \SubVect\Cdue from\Idue to\IIdue
+ \ModAndAngleOfVect\IIdue to\Mod and\Alfa
+ \fptest{#1>0}{\edef\Alfa{\fpeval{270-\Alfa}}\Arc(\Cdue)(\Idue){\Alfa}}%
+ {\edef\Alfa{\fpeval{270+\Alfa}}\Arc(\Cdue)(\Cuno){\Alfa}}%
+ \IfBooleanT{#2}{\Rbox[\Adue](\Idue){\color{black}#1}}\relax
+ \ignorespaces}
+% \end{macrocode}
+%
+% The following two macros are used to compose the resistance axis
+% below the Smith chart.
+%
+% |CalcRxx| macro (used only for Smith charts) assumes that the scale
+% factor |Scala| ($s$) has already been defined.
+% First, it calculates the reflection coefficient
+% $\Gamma = s \frac{x-1}{x+1}$ from resistance $x$.
+% A tick and a label are inserted for this value of $x$.
+% \begin{macrocode}
+\newcommand\CalcRxx[1]{%
+ \edef\Rxx{\fpeval{\Scala*(#1 - 1)/(#1 + 1)}}%
+ \segment(\Rxx,\LowResZero)(\Rxx,\LowResUno)\relax
+ \Pbox(\Rxx,\LowResUno)[t]{$\color{black}\scriptsize#1$}[0]\ignorespaces}
+% \end{macrocode}
+%
+% |GradResist| macro (used only for Smith charts)
+% draws the graduated axis for resistance and executes the |CalcRxx|
+% for several values of resistance in order to compose the ticks and
+% the labels.
+% \begin{macrocode}
+\newcommand\GradResist[1]{%
+ \color{black}
+ \edef\LowResZero{-#1}\edef\LowResUno{\fpeval{\LowResZero-1}}%
+ \I=0\edef\Auxx{0}\relax
+ \fpdowhile{\I<=10}{\CalcRxx{\Auxx}%
+ \advance\I by1\edef\Auxx{\fpeval{\Auxx+0.1}}\ignorespaces}
+ \CalcRxx{1.5}\I=2\edef\Auxx{2}\relax
+ \fpdowhile{\I<=9}{\CalcRxx{\Auxx}%
+ \advance\I by1\edef\Auxx{\fpeval{\Auxx+1}}\ignorespaces}
+ \CalcRxx{15}\CalcRxx{30}%
+ \edef\Rxx{\Scala}%
+ {\segment(-\Rxx,\LowResZero)(\Rxx,\LowResZero)%
+ \segment(\Rxx,\LowResZero)(\Rxx,\LowResUno)%
+ \Pbox(\Rxx,\LowResUno)[t]{\infty}[0]}}
+% \end{macrocode}
+%
+% |GradPolar| macro (used only for polar charts)
+% draws the graduated axis for log polar charts.
+% \begin{macrocode}
+\newcommand{\GradPolar}[1]{%
+ \color{black}
+ \edef\yline{\fpeval{-1.2 * \Scala}}
+ \linethickness{\lwa}
+ \segment(-\Scala,\yline)(\Scala,\yline)
+ \edef\ytickstart{\yline}
+ \edef\ytickstop{\fpeval{\yline-2}}
+ \edef\yytickstop{\fpeval{\yline-1}}
+ \segment(\Scala,\ytickstart)(\Scala,\ytickstop)
+ \segment(-\Scala,\ytickstart)(-\Scala,\ytickstop)
+ \fptest{#1=0}{%
+ \segment(0,\ytickstart)(0,\ytickstop)
+ \edef\plstep{\fpeval{\Scala/10}}
+ \linethickness{\lwb}
+ \multiput(\plstep,\yline)(\plstep,0){9}{\line(0,-1){1}}
+ \multiput(-\plstep,\yline)(-\plstep,0){9}{\line(0,-1){1}}%
+ }{%
+ \I=0
+ \fpwhiledo{\I<#1}{%
+ \linethickness{\lwa}
+ \edef\xtick{\fpeval{\I*\Scala/#1}}
+ \segment(\xtick,\ytickstart)(\xtick,\ytickstop)
+ \segment(-\xtick,\ytickstart)(-\xtick,\ytickstop)
+ \J=2
+ \fpwhiledo{\J<=9}{%
+ \linethickness{\lwb}
+ \edef\xtick{\fpeval{\Scala/#1 * (\I + ln(\J)/ln(10))}}
+ \segment(\xtick,\ytickstart)(\xtick,\yytickstop)
+ \segment(-\xtick,\ytickstart)(-\xtick,\yytickstop)
+ \advance\J by1\relax}
+ \advance\I by1\relax}}
+}
+% \end{macrocode}
+%
+%
+%\subsubsection{Polar graph papers}
+%
+% The polar graph papers are composed by the command \cs{PolarChart}.
+% The syntax is
+%\begin{ttsyntax}
+% \cs{PolarChart}\opz{diameter}\marg{decades}
+%\end{ttsyntax}
+% where \meta{diameter} is the dimension (plus some extra space for
+% labels and margins) of the polar chart. Its default value
+% corresponds to the \cs{paperheight} (the minimum dimension of the
+% paper).
+% The mandatory parameter \meta{decades} must be an integer number.
+% Its value corresponds to the number of decades of the radial
+% coordinate for the log polar graph paper.
+% If its value is zero, the chart is linear.
+% The maximum number of allowed decades is set by the macro \cs{NDecMax}:
+% its default value is~2.
+%
+% Declaration of the command and its arguments.
+% \begin{macrocode}
+\NewDocumentCommand\PolarChart{O{\paperheight} m}{%
+% \end{macrocode}
+%
+% Typographical settings and definition of the main features of the graphpaper.
+% \cs{xlength} and \cs{ylength} represent the lengths of the rectangle
+% dimensions in which the polar graph is plot.
+% The origin of the coordinate system is in the center of the page.
+% \begin{macrocode}
+ \newpage
+ \parindent=0pt
+ \pagestyle{empty}%
+ \ifcsname pmargin\endcsname\relax\else\newlength\pmargin\fi
+ \setlength{\pmargin}{20pt}
+ \newgeometry{left=\pmargin,right=\pmargin,top=\pmargin,bottom=\pmargin}
+ \def\factor{140}
+ \unitlength=\fpeval{#1/\factor}pt
+ \def\xlength{\fpeval{(\textwidth-0.01pt)/\unitlength}}
+ \def\ylength{\fpeval{(\textheight-0.01pt)/\unitlength}}
+ \begin{picture}(\xlength,\ylength)%
+ (\fpeval{-\xlength/2},\fpeval{-\ylength/2})%
+ \color{gridcolor}%
+ \edef\Scala{50}% The scale factor
+% \end{macrocode}
+%
+%
+% Circle stroking. In linear scale 10 radial units are present,
+% therefore, 10 circles are drawn with tick lines,
+% medium lines circles every 0.5 unit and thin lines circles every
+% 0.1 unit.
+% \begin{macrocode}
+ \fptest{#2=0}{% start circle linear radius sequence.
+ \I=1
+ \fpdowhile{\I=<100}{\edef\R{\fpeval{0.01*\Scala*\I}}%
+ {\fptest{\fpeval{\I-10(round(\I/10,0))}=0}{\linethickness{\lwa}%
+ }%
+ {\fptest{\fpeval{\I-5(round(\I/5,0))}=0}{\linethickness{\lwb}}%
+ {\linethickness{\lwc}}%
+ }\Circlewithcenter0,0radius\R
+ }\advance\I by1\relax}%
+ }% end circle linear radius sequence
+ {%
+ \edef\LnDieci{\fpeval{ln(10)}}%
+ \edef\ScalaDecade{\fpeval{\Scala/#2}}%
+ \fptest{#2<3}{%
+ \newcount\Dec \Dec=1\relax
+ \fpdowhile{\Dec=<#2}{%
+ \linethickness{\lwa}%
+ \edef\R{\fpeval{\Dec*\ScalaDecade}}%
+ \Circlewithcenter0,0radius\R% Thick circles
+ % First band from 1 to 4 (excluded)
+ \edef\LPLA{1}%
+ \fpdowhile{\LPLA<4}{
+ \edef\Logaritmo{\fpeval{\Dec-1+(ln(\LPLA))/\LnDieci}}%
+ \edef\R{\fpeval{\ScalaDecade*\Logaritmo}}%
+ \fptest{\R>0}{\fptest{\LPLA=round(\LPLA,0)}%
+ {\linethickness{\lwb}}{\linethickness{\lwc}}%
+ \Circlewithcenter0,0radius\R}{}%
+ \edef\LPLA{\fpeval{\LPLA+0.2}}}%
+ % Second band from 4 to 10 included
+ \edef\LPLA{4}%
+ \fpdowhile{\LPLA=<10}{%
+ \edef\Logaritmo{\fpeval{\Dec-1+(ln(\LPLA))/\LnDieci}}%
+ \edef\R{\fpeval{\ScalaDecade*\Logaritmo}}%
+ \fptest{\R>0}{\fptest{\LPLA=round(\LPLA,0)}%
+ {\linethickness{\lwb}}{\linethickness{\lwc}}%
+ \Circlewithcenter0,0radius\R}{}%
+ \edef\LPLA{\fpeval{\LPLA+0.5}}}%
+ \advance\Dec by1\relax}%
+ }{%
+ \ClassWarning{GraphPaper}{Logarithmic polar graph paper:\MessageBreak
+ too many decades: \number#2\space\MessageBreak
+ Reduce their number}%
+ }}% End logarithmic circle radius sequence
+ \ignorespaces
+ %
+% \end{macrocode}
+%
+% Radial lines. \cs{I} represents the angle in degrees and it runs
+% from 0 to 359. Tick lines every 10$^\circ$; medium lines every 5$^\circ$
+% for units 2, 7, 8, 9, 10; thin lines every 2$^\circ$ for units 3, 4, 5, 6;
+% thin lines every 1$^\circ$ for units 7, 8, 9, 10.
+% \begin{macrocode}
+ \I=0\edef\R{\Scala}%
+ \fpdowhile{\I<360}{\edef\A{\fpeval{\I}}%
+ \fptest{\fpeval{\I-10(round(\I/10,0))}=0}%
+ {\linethickness{\lwa}\segment(0,0)(\A:\R)
+ \Rbox[\A](\A:\R){\color{black}\A}}% multiple of 10
+ {\fptest{\fpeval{\I-5(round(\I/5,0))}=0}%
+ {\linethickness{\lwb}%
+ \segment(\A:5)(\A:10)
+ \segment(\A:30)(\A:\R)}% multiple of 5
+ {\linethickness{\lwc}%
+ \fptest{\fpeval{\I-2(round(\I/2,0))}=0}%
+ {\segment(\A:10)(\A:\R)}% multiple of 2
+ {\segment(\A:30)(\A:\R)}% multiple of 1
+ }%
+ }%
+ \advance\I by 1\relax
+ }\ignorespaces
+% \end{macrocode}
+%
+% Graduated axis.
+% \begin{macrocode}
+ \GradPolar{#2}
+% \end{macrocode}
+%
+% Custom code provided by the user. After executing the code to compose
+% the rectangular graph paper and the user custom code, the latter is
+% reset if the \cs{GP@customcodereset} is true.
+% \begin{macrocode}
+ \GP@custom
+ \end{picture}
+\ifGP@customcodereset\def\GP@custom{}\fi}
+% \end{macrocode}
+%
+%
+%\subsubsection{Smith chart graph paper}
+%
+% The Smith chart graph paper is composed by the command \cs{SmithChart}:
+%\begin{ttsyntax}
+% \cs{SmithChart}\oarg{diameter}
+%\end{ttsyntax}
+% where
+% \meta{diameter} is the dimension (plus some extra space for labels and
+% margins) of the Smith chart. Its default value corresponds to the
+% \cs{paperheight} (the minimum dimension of the paper).
+%
+% \begin{macrocode}
+\NewDocumentCommand\SmithChart{O{\paperheight}}{%
+ \newpage
+ \parindent=0pt
+ \pagestyle{empty}%
+ \ifcsname pmargin\endcsname\relax\else\newlength\pmargin\fi
+ \setlength{\pmargin}{20pt}
+ \newgeometry{left=\pmargin,right=\pmargin,top=\pmargin,bottom=\pmargin}
+ \def\factor{140}
+ \unitlength=\fpeval{#1/\factor}pt\relax
+ \def\xlength{\fpeval{(\textwidth-0.01pt)/\unitlength}}
+ \def\ylength{\fpeval{(\textheight-0.01pt)/\unitlength}}
+ \begin{picture}(\xlength,\ylength)%
+ (\fpeval{-\xlength/2},\fpeval{-\ylength/2})%
+ \color{gridcolor}%
+ \edef\Scala{50}% scale factor based on the main circle but valid
+ % for everything inside the graph paper.
+ {\color{black}\Pbox(0,0){}[4]}% Black dot in the origin
+ % images of the vertical cartesian lines
+ \I=0\relax
+ \fpdowhile{\I=<6}{\edef\Aux{\fpeval{\I/20}}{%
+ \fptest{\I=0}{\color{black}}{\color{gridcolor}}\thicklines\Xcircle{\Aux}}%
+ \advance\I by1\edef\Aux{\fpeval{\I/20}}\Xcircle{\Aux}%
+ \advance\I by1\ignorespaces}%fino a 0.4
+ \fpdowhile{\I=<16}{\edef\Aux{\fpeval{\I/20}}\relax
+ {\thicklines\Xcircle{\Aux}}\advance\I by2\edef\Aux{\fpeval{\I/20}}\relax
+ \Xcircle{\Aux}\advance\I by2\ignorespaces}% fino a 1
+ \fpdowhile{\I=<36}{\edef\Aux{\fpeval{\I/20}}\relax
+ {\thicklines\Xcircle{\Aux}}\advance\I by4\edef\Aux{\fpeval{\I/20}}\relax
+ \Xcircle{\Aux}\advance\I by4\ignorespaces}% fino a 2
+ \fpdowhile{\I=<96}{\edef\Aux{\fpeval{\I/20}}\relax
+ {\thicklines\Xcircle{\Aux}}\advance\I by8\edef\Aux{\fpeval{\I/20}}\relax
+ \Xcircle{\Aux}\advance\I by8\ignorespaces}%fino a 5
+ \fpdowhile{\I=<296}{\edef\Aux{\fpeval{\I/20}}\relax
+ {\thicklines\Xcircle{\Aux}}\advance\I by16\edef\Aux{\fpeval{\I/20}}\relax
+ \Xcircle{\Aux}\advance\I by16\ignorespaces}% up to 15
+% Images of the horizontal cartesian semi-lines
+ \Ycircle{1}%
+ {\thicklines\segment(-\Rzero,0)(\Rzero,0)}% diameter
+ \Rbox[180](-\Rzero,0){0}\Rbox[0](\Rzero,0){\infty}
+ \Ycircle{0.05}\Ycircle{-0.05}\I=2% \I=2 is to avoid a division by 0
+ \fpdowhile{\I=<18}{\edef\Aux{\fpeval{\I/20}}\relax
+ {\thicklines\Ycircle{\Aux}*\Ycircle{-\Aux}*}%
+ \advance\I by1\edef\Aux{\fpeval{\I/20}}\relax
+ \Ycircle{\Aux}\Ycircle{-\Aux}\advance\I by 1\ignorespaces}% restarts from 1
+ \fpdowhile{\I<40}{\edef\Aux{\fpeval{\I/20}}\relax
+ {\thicklines\Ycircle{\Aux}*\Ycircle{-\Aux}*}%
+ \advance\I by 2\edef\Aux{\fpeval{\I/20}}\relax
+ \Ycircle{\Aux}\Ycircle{-\Aux}\advance\I by 2\ignorespaces}% restarts from 2
+ \fpdowhile{\I<80}{\edef\Aux{\fpeval{\I/20}}\relax
+ {\thicklines\Ycircle{\Aux}*\Ycircle{-\Aux}*}%
+ \advance\I by 4\edef\Aux{\fpeval{\I/20}}\relax
+ \Ycircle{\Aux}\Ycircle{-\Aux}\advance\I by 4\ignorespaces}% restarts from 4
+ \fpdowhile{\I=<140}{\edef\Aux{\fpeval{\I/20}}\relax
+ {\thicklines\Ycircle{\Aux}*\Ycircle{-\Aux}*}%
+ \advance\I by 10\edef\Aux{\fpeval{\I/20}}\relax
+ \Ycircle{\Aux}\Ycircle{-\Aux}\advance\I by 10\ignorespaces}% stops at 7.5
+ {\thicklines\Ycircle{8}*\Ycircle{-8}*}%
+ % non linear graduation for the abscissas
+ \GradResist{62}%
+ % Polar graduation in normalised wave length percentages
+ \edef\Rout{\fpeval{1.09*\Rzero}}%
+ \edef\RoutCifre{\fpeval{\Rout+2}}%
+ \edef\RoutTak{\fpeval{\Rout+1}}%
+ {\color{black}%
+ \Circlewithcenter 0,0radius\Rout
+ \I=0\fpdowhile{\I<10}%
+ {\edef\LAng{\fpeval{180-\I*36}}\edef\Cifre{\fpeval{\I*5}}%
+ \put(\LAng:\RoutCifre){%
+ \rotatebox{\fpeval{\LAng-90}}{\makebox(0,0)[b]{\scriptsize\Cifre}}}%
+ \advance\I by 1\ignorespaces}
+ \I=0\fpdowhile{\I<50}{%
+ \edef\LAng{\fpeval{180-\I*7.2}}\segment(\LAng:\Rout)(\LAng:\RoutTak)%
+ \advance\I by1\ignorespaces}
+ %
+ % Outside circle encloses everything except the abscissa graduation.
+ % Everything lays inside a square
+ \Circlewithcenter0,0radius{\fpeval{\Scala+9}}}%
+ % Now the user supplied code is executed
+ \GP@custom
+ \end{picture}
+\ifGP@customcodereset\def\GP@custom{}\fi}%
+% \end{macrocode}
+%
+%
+%\subsection{User interface}
+%
+% Here follows the user commands to draw the graph papers, as described in
+% section~\ref{sec:howto}:
+% \begin{macrocode}
+\NewDocumentCommand{\bilinear}{}{\carta{0}{0}}
+\NewDocumentCommand{\semilogx}{m}{\carta{#1}{0}}
+\NewDocumentCommand{\semilogy}{m}{\carta{0}{#1}}
+\NewDocumentCommand{\loglog}{O{0}mm}{\carta[#1]{#2}{#3}}
+\NewDocumentCommand{\polar}{}{\PolarChart{0}}
+\NewDocumentCommand{\logpolar}{m}{\PolarChart{#1}}
+\NewDocumentCommand{\smith}{}{\SmithChart}
+% \end{macrocode}
+%
+% The user commands to customise the appearance of the graph
+% papers is defined. Their syntax was previously described in
+% sectio~\ref{sec:howto}:
+% \begin{macrocode}
+\NewDocumentCommand{\setgridcolor}{m}{\colorlet{gridcolor}{#1}}
+\NewDocumentCommand{\setmajorlinethickness}{m}{\setlength{\lwa}{#1}}
+\NewDocumentCommand{\setmediumlinethickness}{m}{\setlength{\lwa}{#1}}
+\NewDocumentCommand{\setminorlinethickness}{m}{\setlength{\lwa}{#1}}
+\NewDocumentCommand{\setminimumdistance}{m}{\setlength{\mindistanceunit}{#1}}
+\NewDocumentCommand{\setxside}{m}{%
+ \ifnum\fpeval{#1 > \paperwidth}=1 \ClassError{graphpaper}{X side too wide!} \fi
+ \setlength{\xsideunit}{#1}}
+\NewDocumentCommand{\setyside}{m}{%
+ \ifnum\fpeval{#1 > \paperheight}=1 \ClassError{graphpaper}{Y side too wide!} \fi
+ \setlength{\ysideunit}{#1}}
+\def\GP@custom{}
+\newif\ifGP@customcodereset \GP@customcoderesettrue
+\NewDocumentCommand{\customcode}{O{1} m}{%
+ \ifnum#1=\z@ \GP@customcoderesetfalse \fi%
+ \def\GP@custom{#2}}
+% \end{macrocode}
+%
+%
+%\subsection{Class code end}
+%
+% \begin{macrocode}
+%
+\endinput
+% \end{macrocode}
+%
+%\iffalse
+%</class>
+%\fi
+%
+% \Finale
+%^^A \ No newline at end of file
diff --git a/macros/latex/contrib/graphpaper/graphpaper.pdf b/macros/latex/contrib/graphpaper/graphpaper.pdf
new file mode 100644
index 0000000000..834127e0df
--- /dev/null
+++ b/macros/latex/contrib/graphpaper/graphpaper.pdf
Binary files differ
diff --git a/macros/latex/contrib/mylatex/README.txt b/macros/latex/contrib/mylatex/README.txt
new file mode 100644
index 0000000000..9160c02984
--- /dev/null
+++ b/macros/latex/contrib/mylatex/README.txt
@@ -0,0 +1,18 @@
+
+CTAN:macros/latex/contrib/supported/mylatex
+
+ All the files in this directory may be redistributed and/or modified
+ under the terms of the LaTeX Project Public License Distributed from
+ CTAN archives in directory macros/latex/base/lppl.txt; either version
+ 1 of the License, or (at your option) any later version.
+
+David Carlisle https://github.com/davidcarlisle/dpctex
+
+2020-10-23
+
+
+mylatex.ltx
+ This file provides a method of making a special format tailored to
+ one document, with all the class and packages, and other preamble
+ material pre-loaded. This can save quite a lot of time on some
+ systems. See the comments in the file.
diff --git a/macros/latex/contrib/carlisle/mylatex.ltx b/macros/latex/contrib/mylatex/mylatex.ltx
index d1ea1ea233..51e2f41c78 100644
--- a/macros/latex/contrib/carlisle/mylatex.ltx
+++ b/macros/latex/contrib/mylatex/mylatex.ltx
@@ -15,8 +15,14 @@
%%% Given a LaTeX file `abc.tex', use initex as follows:
%%%
%%% initex &latex mylatex.ltx abc (Generic TeX)
-%%% initex \&latex mylatex.ltx abc (unix and other TeX's)
-%%% tex /i &latex mylatex.ltx abc (emtex)
+%%%
+%%% You may need to quote the & from your commandline and also
+%%% most modern systems use an --ini option rather than a separate
+%%% initex program so this may need to be
+%%%
+%%% pdftex --ini "&latex" mylatex.ltx abc
+%%%
+%%% To produce a format extending pdflatex for example.
%%%
%%% If you are on a Mac or using some shell that makes it inconvenient
%%% to use a command line such as the above examples then you may
@@ -34,7 +40,10 @@
%%%%%%%%%%%%%%%%%%%%%%%%
%%%
%%% tex &mylatex abc (generic TeX)
-%%% virtex \&mylatex abc (Unix TeX)
+%%%
+%%% As above you may need to quote the & so for pdflatex
+%%%
+%%% pdflatex "&mylatex" abc
%%%
%%% This will process your document, abc.tex, just as LaTeX does, but
%%% quicker as the contents of the preamble will be stored in the
@@ -110,6 +119,8 @@
%%% mylatex.ltx with OzTeX
%%% Modified 1999/01/04 Rowland McDonnell corrected notes on how to
%%% use mylatex.ltx with OzTeX.
+%%% Modified 2020/10/23 Phelype Oleinik updated to work with new hook code
+%%% in \begin{document}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\makeatletter
@@ -118,6 +129,13 @@
\let\MYLATEXdocument\document
\let\MYLATEXopenout\openout
+% new for 2020-10-01
+\ifx\@execute@begin@hook\@undefined
+\else
+ \let\MYLATEX@execute@begin@hook\@execute@begin@hook
+ \def\@execute@begin@hook#1{}%
+\fi
+
% The version of \document to use on the initex run.
% Just preloads some fonts, puts back \document and \openout,
% sets up the banner to display the file list of files preloaded,
@@ -137,6 +155,7 @@
}}%
\let\document\MYLATEXdocument
\let\openout\MYLATEXopenout
+ \let\@execute@begin@hook\MYLATEX@execute@begin@hook
\makeatother
\everyjob\expandafter{\the\everyjob
\begingroup
diff --git a/macros/latex/contrib/principia/README b/macros/latex/contrib/principia/README
new file mode 100644
index 0000000000..ceed875d85
--- /dev/null
+++ b/macros/latex/contrib/principia/README
@@ -0,0 +1,12 @@
+principia.sty - a LaTeX2e package for typesetting the "Peanese" notation of Whitehead and Russell's 1910 "Principia Mathematica".
+
+The file principia.sty is the original work of Landon D. C. Elkind (Copyright (c) 2020). It is released under the LaTeX Project Public License 1.3c.
+
+This is principia package Version 1.0. It covers typesetting the notations through Volume I of "Principia Mathematica". See the file principia.pdf for information on how to typeset these symbols in LaTeX.
+
+Updates to include all notations throughout Volumes II and III are planned. Further information and updates can be found at https://logicalatomist.github.io/principia/
+
+Comments and suggestions are welcomed by the package maintainer, signed below.
+
+Landon D. C. Elkind
+University of Alberta \ No newline at end of file
diff --git a/macros/latex/contrib/principia/principia.pdf b/macros/latex/contrib/principia/principia.pdf
new file mode 100644
index 0000000000..6d4b543228
--- /dev/null
+++ b/macros/latex/contrib/principia/principia.pdf
Binary files differ
diff --git a/macros/latex/contrib/principia/principia.sty b/macros/latex/contrib/principia/principia.sty
new file mode 100644
index 0000000000..3a1fd3b271
--- /dev/null
+++ b/macros/latex/contrib/principia/principia.sty
@@ -0,0 +1,231 @@
+%This is the principia package is for representing notations in Whitehead and Russell's ``Principia Mathematica" close to their appearance in the original.
+%Copyright (C) 2020 by Landon D. C. Elkind (https://landondcelkind.com/contact/).
+%This program is free software. It may be redistributed and/or modified under the terms of the GNU General Public License as published by the Free Software Foundation, Version 3 or any later version.
+
+%Package Identification
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{principia}[2020/10/20 principia package version 1.0] %Covers typesetting of notation through Volume I
+
+%Principia package requirements
+\RequirePackage{graphicx} %This loads commands that flip iota for definite descriptions, Lambda for the universal class, and so on. The (superseded) graphics package should also work here, but is not recommended.
+\RequirePackage{marvosym} %This loads the male and female symbol.
+\RequirePackage{pifont} %This loads the symbols such as the eight-pointed asterisk.
+
+%Meta-logical symbols
+\newcommand{\pmdem}{\textit{Dem}.} %This notation begins a proof.
+\newcommand{\pmsub}[2]{\bigg \lbrack \small \begin{array}{c} #1 \\ \hline #2 \end{array} \bigg \rbrack} %This is the substitution command.
+\newcommand{\pmSub}[3]{\bigg \lbrack \normalsize #1 \text{ } \small \begin{array}{c} #2 \\ \hline #3 \end{array} \bigg \rbrack} %This is the substitution command.
+\newcommand{\pmsubb}[4]{\bigg \lbrack \small \begin{array}{c c} #1, & #3 \\ \hline #2, & #4 \end{array} \bigg \rbrack} %This is the substitution command.
+\newcommand{\pmSubb}[5]{\bigg \lbrack \normalsize #1 \text{ } \small \begin{array}{c c} #2, & #4 \\ \hline #3, & #5 \end{array} \bigg \rbrack} %This is the substitution command.
+\newcommand{\pmsubbb}[6]{\bigg \lbrack \small \begin{array}{c c c} #1, & #3, & #5 \\ \hline #2, & #4, & #6 \end{array} \bigg \rbrack} %This is the substitution command.
+\newcommand{\pmSubbb}[7]{\bigg \lbrack \normalsize #1 \text{ } \small \begin{array}{c c c} #2, & #4, & #6 \\ \hline #3, & #5, & #7 \end{array} \bigg \rbrack} %This is the substitution command.
+\newcommand{\pmsubbbb}[8]{\bigg \lbrack \small \begin{array}{c c c c} #1, & #3, & #5, & #7 \\ \hline #2, & #4, & #6, & #8 \end{array} \bigg \rbrack} %This is the substitution command.
+\newcommand{\pmSubbbb}[9]{\bigg \lbrack \normalsize #1 \text{ } \small \begin{array}{c c c c} #1, & #3, & #5, & #7 \\ \hline #2, & #4, & #6, & #8 \end{array} \bigg \rbrack} %This is the substitution command.
+\newcommand{\pmthm}{\text{\scalebox{.5}[1]{$\boldsymbol\vdash$}}} %This is the theorem sign.
+\newcommand{\pmast}{\text{\resizebox{!}{.75\height}{\ding{107}}}} %This is the sign introducing a theorem number.
+\newcommand{\pmcdot}{\text{\raisebox{.05cm}{$\boldsymbol\cdot$}}} %This is a sign introducing a theorem sub-number.
+\newcommand{\pmdf}{=_\text{Df}}
+\newcommand{\pmpp}{\text{Pp}}
+
+%Square dots for scope, defined for up to six dots
+\newcommand{\pmdot}{\mathop{\hbox{\rule{.3ex}{.3ex}}}}
+\newcommand{\pmdott}{\mathop{\overset{\pmdot}{\pmdot}}}
+\newcommand{\pmdottt}{\pmdott \pmdot}
+\newcommand{\pmdotttt}{\pmdott\pmdott}
+\newcommand{\pmdottttt}{\pmdott\pmdott\pmdot}
+\newcommand{\pmdotttttt}{\pmdott\pmdott\pmdott}
+
+%Logical connectives
+\newcommand{\pmnot}{\mathord{\sim}}
+\newcommand{\pmimp}{\boldsymbol{\supset}}
+\newcommand{\pmiff}{\equiv}
+\newcommand{\pmor}{\boldsymbol{\vee}}
+\newcommand{\pmall}[1]{(#1)}
+\newcommand{\pmsome}[1]{(\text{\raisebox{.5em}{\rotatebox{180}{E}}}#1)}
+\newcommand{\pmSome}{\text{\raisebox{.5em}{\rotatebox{180}{E}}}}
+\newcommand{\pmand}{\mathrel{\hbox{\rule{.3ex}{.3ex}}}}
+\newcommand{\pmandd}{\overset{\pmand}{\pmand}}
+\newcommand{\pmanddd}{\pmandd\hspace{.1em}\pmand}
+\newcommand{\pmandddd}{\pmandd\hspace{.1em}\pmandd}
+\newcommand{\pmanddddd}{\pmandd\hspace{.1em}\pmandd\hspace{.1em}\pmand}
+\newcommand{\pmandddddd}{\pmandd\hspace{.1em}\pmandd\hspace{.1em}\pmandd}
+
+%Additional defined logic signs
+\newcommand{\pmhat}[1]{\mathbf{\hat{\text{$#1$}}}}
+\newcommand{\pmpf}[2]{#1#2} %for propositional functions of one variable
+\newcommand{\pmpff}[3]{#1(#2, #3)} %for propositional functions of two variables
+\newcommand{\pmpfff}[4]{#1(#2, #3, #4)} %for propositional functions of three variables
+\newcommand{\pmshr}{\textbf{!}} %*12.1 and *12.11, used for predicative propositional functions
+\newcommand{\pmpred}[2]{#1\pmshr#2} %for predicates (``predicative functions'') of one variable
+\newcommand{\pmpredd}[3]{#1\pmshr(#2, #3)} %for predicates (``predicative functions'') of two variables
+\newcommand{\pmpreddd}[4]{#1\pmshr(#2, #3, #4)} %for predicates (``predicative functions'') of three variables
+\newcommand{\pmnid}{\mathrel{\ooalign{$=$\cr\hidewidth\footnotesize\rotatebox[origin=c]{210}{\textbf{/}}\hidewidth\cr}}} %*13.01
+\newcommand{\pmiota}{\rotatebox[origin=c]{180}{$\iota$}} %the rotated Greek iota used in definite descriptions
+\newcommand{\pmdsc}[1]{(\pmiota#1)} %*14.01
+\newcommand{\pmDsc}{\pmiota} %*14.01
+\newcommand{\pmexists}{\text{E}\pmshr} %*14.02
+
+%Class signs
+\newcommand{\pmcuni}{\text{\rotatebox[origin=c]{180}{$\Lambda$}}}
+\newcommand{\pmcnull}{\Lambda}
+\newcommand{\pmcls}[2]{\pmhat{#1}(#2)}
+\newcommand{\pmCls}{\text{Cls}}
+\newcommand{\pmClsn}[1]{\text{Cls}^{#1}}
+\newcommand{\pmcexists}{\text{\raisebox{.5em}{\rotatebox{180}{E}}}\mathop{\pmshr}}
+\newcommand{\pmccmp}[1]{\boldsymbol{-}#1}
+\newcommand{\pmcmin}[2]{#1\boldsymbol{-}#2}
+\newcommand{\pmcin}{\mathop{\epsilon}}
+\newcommand{\pmccup}{\mathop{\scalebox{1.3}[1.75]{$\put(3, 2.5){\oval(4,4)[b]}\phantom{\circ}$}}}
+\newcommand{\pmccap}{\mathop{\scalebox{1.3}[1.75]{$\put(3, 2){\oval(4,1)[t]}\phantom{\circ}$}}}
+\newcommand{\pmcinc}{\mathop{\boldsymbol{\subset}}}
+
+%Relation signs
+\newcommand{\pmruni}{\dot{\text{\rotatebox[origin=c]{180}{$\Lambda$}}}}
+\newcommand{\pmrnull}{\dot{\Lambda}}
+\newcommand{\pmdscf}[2]{#1\textbf{`}#2}
+\newcommand{\pmdscff}[2]{#1\textbf{`}\textbf{`}#2}
+\newcommand{\pmdscfff}[2]{#1\textbf{`}\textbf{`}\textbf{`}#2}
+\newcommand{\pmdscfr}[2]{#1_{\pmcin}\textbf{`}#2}
+\newcommand{\pmdscfR}[1]{#1_{\pmcin}}
+\newcommand{\pmdscfe}[2]{\mathop{\text{E}}\mathop{\pmshr\pmshr}\pmdscff{#1}{#2}}
+\newcommand{\pmdm}[1]{\text{D}\textbf{`}#1}
+\newcommand{\pmDm}{\text{D}}
+\newcommand{\pmcdm}[1]{\text{\rotatebox[origin=c]{180}{D}}\textbf{`}#1}
+\newcommand{\pmCdm}{\text{\rotatebox[origin=c]{180}{D}}}
+\newcommand{\pmcmp}[1]{C\textbf{`}#1}
+\newcommand{\pmCmp}{C}
+\newcommand{\pmfld}[1]{F\textbf{`}#1}
+\newcommand{\pmFld}{F}
+\newcommand{\pmrel}[3]{\pmhat{#1}\pmhat{#2}#3}
+\newcommand{\pmrele}[5]{#1\{\pmhat{#2}\pmhat{#3}#4(#2, #3)\}#5}
+\newcommand{\pmrelep}[3]{#1\{#2\}#3}
+\newcommand{\pmrcmp}[1]{\ooalign{$\hidewidth\raisebox{.25em}{$\cdot$}\hidewidth$\cr$\mathbf{\pmccmp}$}#1}
+\newcommand{\pmrmin}[2]{#1\mathrel{\ooalign{$\hidewidth\raisebox{.25em}{$\cdot$}\hidewidth$\cr$\mathbf{\pmccmp}$}}#2}
+\newcommand{\pmrexists}{\dot{\mathop{\text{\raisebox{.5em}{\rotatebox{180}{E}}}}}\mathop{\pmshr}}
+\newcommand{\pmcrel}[1]{\breve{#1}}
+\newcommand{\pmCnv}{\text{Cnv}}
+\newcommand{\pmcnv}[1]{\breve{#1}}
+\newcommand{\pmcnvr}[1]{\text{Cnv}\textbf{`}#1}
+\newcommand{\pmrcup}{\mathrel{\ooalign{$\hidewidth\cdot\hidewidth$\cr$\mathbf{\pmccup}$}}}
+\newcommand{\pmrcap}{\mathrel{\ooalign{$\hidewidth\raisebox{.3em}{$\cdot$}\hidewidth$\cr$\mathbf{\pmccap}$}}}
+\newcommand{\pmrinc}{\mathrel{\ooalign{$\hidewidth\cdot\hidewidth$\cr$\mathbf{\pmcinc}$}}}
+\newcommand{\pmrrf}[2]{\overset{\boldsymbol{\rightarrow}}{#1\textbf{`}}#2}
+\newcommand{\pmRrf}[1]{\overset{\boldsymbol{\rightarrow}}{#1}}
+\newcommand{\pmrrl}[2]{\overset{\boldsymbol{\leftarrow}}{#1\textbf{`}}#2}
+\newcommand{\pmRrl}[1]{\overset{\boldsymbol{\leftarrow}}{#1}}
+\newcommand{\pmsg}[1]{\text{sg}\textbf{`}#1}
+\newcommand{\pmgs}[1]{\text{gs}\textbf{`}#1}
+\newcommand{\pmSg}{\text{sg}}
+\newcommand{\pmGs}{\text{gs}}
+\newcommand{\pmRprd}{\mathop{|}}
+\newcommand{\pmrprd}[2]{{#1}\mathop{|}{#2}}
+\newcommand{\pmrprdn}[2]{#1^{#2}}
+\newcommand{\pmrld}[2]{#1 \boldsymbol{\upharpoonleft} #2}
+\newcommand{\pmrlcd}[2]{#1 \boldsymbol{\upharpoonright} #2}
+\newcommand{\pmrlf}[3]{#1 \boldsymbol{\upharpoonleft} #2 \boldsymbol{\upharpoonright} #3}
+\newcommand{\pmrl}[2]{#1 \boldsymbol{\uparrow} #2}
+\newcommand{\pmrlF}[2]{#1 \mathbin{\ooalign{$\upharpoonright$\cr\hidewidth\rotatebox[origin=c]{180}{\text{$\upharpoonleft$}}\hidewidth\cr}} #2}
+\newcommand{\pmop}{\mathop{\text{\Female}}}
+\newcommand{\pmopc}[2]{#1 \mathop{\underset{\textbf{''}}{\text{\Female}}} #2}
+
+%Products and sums of classes of classes or relations
+\newcommand{\pmccsum}[1]{p\textbf{`}#1}
+\newcommand{\pmccprd}[1]{s\textbf{`}#1}
+\newcommand{\pmcrsum}[1]{\dot{p}\textbf{`}#1}
+\newcommand{\pmcrprd}[1]{\dot{s}\textbf{`}#1}
+\newcommand{\pmRprdd}{\mathop{||}}
+\newcommand{\pmrprdd}[2]{{#1}\mathop{||}{#2}}
+
+%Identity and Diversity
+\newcommand{\pmrid}{I}
+\newcommand{\pmrdiv}{J}
+\newcommand{\pmcunit}[1]{\iota\textbf{`}#1}
+\newcommand{\pmcUnit}{\iota}
+\newcommand{\pmcunits}[1]{\breve{\iota}\textbf{`}#1}
+
+%Cardinal numbers
+\newcommand{\pmcn}[1]{#1}
+
+%Ordinal numbers
+\newcommand{\pmrn}[1]{#1_r}
+\newcommand{\pmdn}[1]{\dot{#1}}
+\newcommand{\pmoc}[2]{#1 \boldsymbol{\downarrow} #2}
+
+%Subclasses and subrelations
+\newcommand{\pmscl}[1]{\text{Cl}\textbf{`}#1}
+\newcommand{\pmsCl}{\text{Cl}}
+\newcommand{\pmscle}[1]{\text{Cl ex}\textbf{`}#1}
+\newcommand{\pmsCle}{\text{Cl ex}}
+\newcommand{\pmscls}[1]{\text{Cls}\textbf{`}#1}
+\newcommand{\pmsrl}[1]{\text{Rl}\textbf{`}#1}
+\newcommand{\pmsRl}{\text{Rl}}
+\newcommand{\pmsrle}[1]{\text{Rl ex}\textbf{`}#1}
+\newcommand{\pmsRle}{\text{Rl ex}}
+\newcommand{\pmsrel}[1]{\text{Rel}\textbf{`}#1}
+\newcommand{\pmRel}{\text{Rel}}
+\newcommand{\pmReln}[1]{\text{Rel}^{#1}}
+\newcommand{\pmrin}{\mathop{\epsilon}}
+
+%Relative type symbols
+\newcommand{\pmrt}[1]{t\textbf{`}#1}
+\newcommand{\pmrti}[2]{t^{#1}\textbf{`}#2}
+\newcommand{\pmrtc}[2]{t_{#1}\textbf{`}#2}
+\newcommand{\pmrtri}[2]{t^{#1}\textbf{`}#2}
+\newcommand{\pmrtrc}[2]{t_{#1}\textbf{`}#2}
+\newcommand{\pmrtrci}[3]{t_{#1}^{\text{ }#2}\textbf{`}#3}
+\newcommand{\pmrtric}[3]{^{#1}t_{#2}\textbf{`}#3}
+\newcommand{\pmrtdi}[2]{#1_{#2}}
+\newcommand{\pmrtdc}[2]{#1(#2)}
+\newcommand{\pmrtdri}[2]{#1_{#2}}
+\newcommand{\pmrtdrc}[2]{#1(#2)}
+
+%Similarity relation signs
+\newcommand{\pmrdc}[2]{#1\boldsymbol{\to}#2}
+\newcommand{\pmsm}{\mathrel{\text{sm}}}
+\newcommand{\pmsmbar}{\mathrel{\overline{\text{sm}}}}
+\newcommand{\pmsmarr}{\overrightarrow{{\pmsm}}}
+\newcommand{\pmonemany}{1\boldsymbol{\to}\pmCls}
+\newcommand{\pmmanyone}{\pmCls\boldsymbol{\to}1}
+\newcommand{\pmoneone}{1\boldsymbol{\to}1}
+
+%Selections
+\newcommand{\pmselp}[1]{P_{\small\Delta}\mathbf{`}#1}
+\newcommand{\pmSelp}{P_{\Delta}}
+\newcommand{\pmsele}[1]{\pmcin_{\small\Delta}\mathbf{`}#1}
+\newcommand{\pmSele}{\pmcin_{\Delta}}
+\newcommand{\pmself}[1]{F_{\small\Delta}\mathbf{`}#1}
+\newcommand{\pmSelf}{F_{\Delta}}
+\newcommand{\pmexc}{\text{Cls}^2 \mathop{\text{excl}}}
+\newcommand{\pmexcc}[1]{\text{Cl} \mathop{\text{excl}}\textbf{`}#1}
+\newcommand{\pmexcn}{\text{Cls} \mathop{\text{ex}}^2 \mathop{\text{excl}}}
+\newcommand{\pmselc}[2]{#1 \mathrel{\rotatebox[origin=c]{270}{$\boldsymbol{\mapsto}$}} #2}
+\newcommand{\pmmultr}{\mathop{\text{Rel}} \mathop{\text{Mult}}}
+\newcommand{\pmmultc}{\mathop{\text{Cls}^2} \mathop{\text{Mult}}}
+\newcommand{\pmmultax}{\mathop{\text{Mult}} \mathop{\text{ax}}}
+
+%Inductive relations
+\newcommand{\pmanc}[1]{#1_\pmast}
+\newcommand{\pmancc}[1]{\pmcnv{#1}_\pmast}
+\newcommand{\pmrst}[1]{#1_\text{st}}
+\newcommand{\pmrts}[1]{#1_\text{ts}}
+\newcommand{\pmpot}[1]{\text{Pot}\mathbf{`}#1}
+\newcommand{\pmpotid}[1]{\text{Potid}\mathbf{`}#1}
+\newcommand{\pmpo}[1]{#1_\text{po}}
+\newcommand{\pmB}{B}
+\newcommand{\pmmin}[1]{\text{min}_{#1}}
+\newcommand{\pmmax}[1]{\text{max}_{#1}}
+\newcommand{\pmMin}{\text{min}}
+\newcommand{\pmMax}{\text{max}}
+\newcommand{\pmgen}[1]{\text{gen}\mathbf{`}#1}
+\newcommand{\pmGen}{\text{gen}}
+\newcommand{\pmefr}[2]{#1\pmast#2}
+\newcommand{\pmipr}[2]{I_{#1}\textbf{`}#2}
+\newcommand{\pmjpr}[2]{J_{#1}\textbf{`}#2}
+\newcommand{\pmfr}[2]{\overset{\boldsymbol{\leftrightarrow}}{#1}\textbf{`}#2}
+
+%Cardinality
+\newcommand{\pmnc}[1]{\text{Nc}\textbf{`}#1}
+\newcommand{\pmNc}{\text{Nc}}
+\newcommand{\pmNC}{\text{NC}}
+\newcommand{\pmnoc}[1]{\text{N}_0\text{c}\textbf{`}#1}
+\newcommand{\pmNoc}{\text{N}_0\text{c}} \ No newline at end of file
diff --git a/macros/latex/contrib/principia/principia.tex b/macros/latex/contrib/principia/principia.tex
new file mode 100644
index 0000000000..47db611908
--- /dev/null
+++ b/macros/latex/contrib/principia/principia.tex
@@ -0,0 +1,172 @@
+\documentclass[12pt]{article}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{principia}[2020/10/20 principia package version 1.0] %Covers typesetting of notation through Volume I
+%Licensed under LaTeX Project Public License 1.3c.
+%Copyright Landon D. C. Elkind, 2020.
+
+\usepackage{amssymb}
+\usepackage{amsmath}
+\usepackage{fullpage}
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage{setspace}
+
+%Principia package requirements
+\usepackage{principia} %The package itself, and its dependencies:
+\usepackage{pifont} %This loads the eight-pointed asterisk.
+\usepackage{marvosym} %This loads the male and female symbol.
+\usepackage{graphicx} %This loads commands that flip iota for definite descriptions, Lambda for the universal class, and so on. The (superseded) graphics package should also work here, but is not recommended.
+
+\title{\texttt{principia.sty }\\ A \LaTeXe \space Package for Typesetting Whitehead and Russell's \textit{Principia Mathematica} (Version 1.0)}
+\author{Landon D. C. Elkind \texttt{elkind@ualberta.ca}}
+\date{\today}
+
+\begin{document}
+\maketitle
+\onehalfspacing
+The \texttt{principia} package is designed for typesetting the Peanese notation of \textit{Principia Mathematica}. ``Peanese'' is something of a misnomer: Whitehead and Russell invented much of the notations used in \textit{Principia Mathematica} even while borrowing from many others.
+
+\texttt{principia}'s style has antecedents in Kevin C. Klement's excellent \textit{Tractatus} typesetting, to which we owe the device of adding `d's and `t's to typeset further square dots. The device of beginning all \texttt{principia} commands with `\texttt{$\backslash$pm}' is owed to the \texttt{begriff} package, a style that was mimicked in both the \texttt{frege} package and the \texttt{Grundgesetze} package.
+
+In \textit{Principia Mathematica} some symbols occur with an argument and sometimes that same symbol occurs without an argument. For example, `$\pmsome{x}$' occurs in some formulas, but sometimes `$\pmSome$' occurs in the text when they talk about the symbol itself. \texttt{principia} is designed to accommodate these different occurrences of symbols. When a symbol is to occur without an argument, capitalize the first letter following the `\texttt{$\backslash$pm}' part of the command. E.g. \verb|\pmsome{x}| produces $\pmsome{x}$ and \verb|\pmSome| produces `$\pmSome$'. Note the former command requires an argument and the latter command does not. Not all commands in the \texttt{principia} package admit of such dual use because some symbols in \textit{Principia Mathematica} never occur without an argument or do not take an argument in the usual sense. For example, the propositional connectives do not take an `argument' in the way singular or plural descriptions do.
+
+Version 1.0 of \texttt{principia} is adequate to typeset all notations throughout Volume I of \textit{Principia}. Updates to include all notations throughout Volumes II and III are planned.
+
+\texttt{principia}'s dependencies are \texttt{pifont} (for the eight-pointed asterisk), \texttt{marvosym} (for the `$\pmop$' symbol), and \texttt{graphicx} (for singular descriptions, universal classes, and existential quantifiers). Make sure to load these package by typing \texttt{$\backslash$usepackage\{graphicx\}}, etc.
+
+To load \texttt{principia}, type \texttt{$\backslash$usepackage\{principia\}} in the preamble to the document.
+
+\noindent \begin{tabular}{@{}p{3cm} | p{5cm} | p{8.25cm}}
+ \textbf{Symbol} & \textbf{\LaTeX command} & \textbf{Notes} \\ \hline
+ $\pmthm$ & \verb|\pmthm| & Theorem. \\
+ $\pmast$ & \verb|\pmast| & As in $\pmast1$. \\
+ $\pmcdot$ & \verb|\pmcdot| & As in, $\pmast1\pmcdot1$. \\
+ $\pmpp$ & \verb|\pmpp| & Primitive proposition. \\
+ $\pmdf$ & \verb|\pmdf| & Definition. \\
+ $\pmdem$ & \verb|\pmdem| & This begins a proof. \\
+ $\pmsub{p}{q}$, $\pmsubb{p}{q}{r}{s}$, $\pmsubbb{p}{q}{r}{s}{t}{u}$, ... $\pmSub{\text{Add}}{p}{q}$, ... & \verb|\pmsub{p}{q}|, \verb|\pmsubb{p}{q}{r}{s}|, \verb|\pmsubbb{p}{q}| \par \hfill \verb|{r}{s}{t}{u}|, ... \verb|\pmSub{\text{Add}{p}{q}| & Substitution into theorems. Add `b's to the end of \verb|\pmsub| to increase the number of substitutions (up to four `b's). Each extra `b' adds two arguments. To substitute and specify the theorem as well, capitalize the `s' in \verb|\pmsub|. \\
+ $\pmdot$, $\pmdott$, $\pmdottt$, $\pmdotttt$, $\pmdottttt$, $\pmdotttttt$ & \verb|\pmdot|, \verb|\pmdott|, \verb|\pmdottt|, ... & Add `t's to the end of \verb|\pmdot| to increase the number of dots (up to six `t's). Note that the spacing of \verb|\pmand| and \verb|\pmdot| differ. \\
+ $\pmand$, $\pmandd$, $\pmanddd$, $\pmandddd$, $\pmanddddd$, $\pmandddddd$ & \verb|\pmand|, \verb|\pmandd|, \verb|\pmanddd|, ...& Add `d's to the end of \verb|\pmand| command to increase the number of dots (up to six `d's). \\
+ $\pmor$ & \verb|\pmor| & Disjunction. \\
+ $\pmnot$ & \verb|\pmnot| & Negation. Note its spacing differs from \verb|\sim|. \\
+ $\pmimp$ & \verb|\pmimp| & Material implication. \\
+ $\pmiff$ & \verb|\pmiff| & Material biconditional. \\
+ $\pmimp_x, \pmimp_{x,y}$ & \verb|\pmimp_x|, \verb|\pmimp_{x,y}| & And so on for more subscripts. \\
+ $\pmiff_x, \pmiff_{x,y}$ & \verb|\pmiff_x|, \verb|\pmiff_{x,y}| & And so on for more subscripts. \\
+ $\pmhat{x}$ & \verb|\pmhat{x}| & This command requires one argument. It can be embedded in other commands. E.g., \verb|\pmpf{\phi}{\pmhat{x}}| renders `$\pmpf{\phi}{\pmhat{x}}$'. \\
+ $\pmpf{\phi}{x}$ & \verb|\pmpf{\phi}{x}| & This command requires two arguments. \\
+ $\pmpff{\phi}{x}{y}$ & \verb|\pmpff{\phi}{x}{y}| & This command requires three arguments. \\
+ $\pmpfff{\phi}{x}{y}{z}$ & \verb|\pmpfff{\phi}{x}{y}{z}| & This command requires four arguments. \\
+ $\pmall{x}$ &\verb|\pmall{x}| & Universal quantifier. \\
+ $\pmsome{x}$, $\pmSome$ & \verb|\pmsome{x}|, \verb|\pmSome| & Existential quantifier. \\
+ $\pmshr$ & \verb|\pmshr| & The predicative propositional functions. \\
+ $\pmpred{\phi}{x}$ & \verb|\pmpred{\phi}{x}| & This command requires two arguments. \\
+ $\pmpredd{\phi}{x}{y}$ & \verb|\pmpredd{\phi}{x}{y}| & This command requires three arguments. \\
+ $\pmpreddd{\phi}{x}{y}{z}$ & \verb|\pmpreddd{\phi}{x}{y}{z}| & This command requires four arguments.
+\end{tabular}
+
+\noindent \begin{tabular}{@{}p{3cm} | p{5cm} | p{8.25cm}}
+ $=$, $\pmnid$ & \verb|=|, \verb|\pmnid| & Identity and its negation. \\
+ $\pmdsc{x}$ & \verb|\pmdsc{x}| & Definite description. \\
+ $\pmexists$ & \verb|\pmexists| & Existence. \\
+ $\pmcls{z}{\psi z}$ & \verb|\pmcls{z}{\psi z}| & The class of $z$s satisfying $\psi$. \\
+ $\pmcin$ & \verb|\pmcin| & The class membership symbol. \\
+ $\pmClsn{n}$, $\pmCls$ & \verb|\pmClsn{n}|, \verb|\pmCls| & The class of classes of individuals. \\
+ $\pmscl{\alpha}$, $\pmsCl$ & \verb|\pmscl{\alpha}|, \verb|\pmsCl| & The subclasses of a class $\alpha$. \\
+ $\pmsrl{R}$, $\pmsRl$ & \verb|\pmsrl{R}|, \verb|\pmsRl| & The sub-relations of a relation $R$. \\
+ $\pmcuni$ & \verb|\pmcuni| & The universal class. \\
+ $\pmcnull$ & \verb|\pmcnull| & The null class. \\
+ $\pmcexists$ & \verb|\pmcexists| & The existence of a class. \\
+ $\pmccmp{\alpha}$ & \verb|\pmccmp{\alpha}| & This command requires one argument. \\
+ $\pmcmin{\alpha}{\beta}$ & \verb|\pmcmin{\alpha}{\beta}| & This command requires two arguments. \\
+ $\pmccup$ & \verb|\pmccup| & Class union. \\
+ $\pmccap$ & \verb|\pmccap| & Class intersection. \\
+ $\pmcinc$ & \verb|\pmcinc| & Class inclusion. \\
+ $\pmrel{x}{y}{\phi(x,y)}$ & \verb|\pmrel{x}{y}{\phi(x,y)}| & The relation in extension given by $\phi$. \\
+ $\pmrele{a}{x}{y}{R}{b}$ & \verb|\pmrele{a}{x}{y}{R}{b}| & This command requires five arguments. \\
+ $\pmrelep{a}{R}{b}$ & \verb|\pmrelep{a}{R}{b}| & This command requires three arguments. \\
+ $\pmrin$ & \verb|\pmrin| & The relation membership symbol. \\
+ $\pmReln{n}$, $\pmRel$ & \verb|\pmReln{n}|, \verb|\pmRel| & The class of relations ($n$-many `of relations'). \\
+ $\pmruni$ & \verb|\pmruni| & The universal relation. \\
+ $\pmrnull$ & \verb|\pmrnull| & The null relation. \\
+ $\pmrexists$ & \verb|\pmrexists| & This symbol prefixes relations. \\
+ $\pmrcmp{R}$ & \verb|\pmrcmp{\alpha}| & This command requires one argument. \\
+ $\pmrmin{R}{S}$ & \verb|\pmcmin{R}{S}| & This command requires two arguments. \\
+ $\pmrcup$ & \verb|\pmrcup| & Relation union. \\
+ $\pmrcap$ & \verb|\pmrcap| & Relation intersection. \\
+ $\pmrinc$ & \verb|\pmrinc| & Relation inclusion. \\
+ $\pmcrel{R}$ & \verb|\pmcrel{R}| & The converse of a relation. \\
+ $\pmCnv$ & \verb|\pmCnv| & The command for `Cnv'. \\
+ $\pmdscf{R}{x}$ & \verb|\pmdscf{R}{x}| & A singular descriptive function. \\
+ $\pmdscff{R}{\beta}$ & \verb|\pmdscff{R}{\beta}| & A plural descriptive function. \\
+ $\pmdscfff{R}{\kappa}$ & \verb|\pmdscfff{R}{\kappa}| & A plural descriptive function. \\
+ $\pmdscfe{R}{\beta}$ & \verb|\pmdscfe{R}{\beta}| & The existence of a plural descriptive function.
+\end{tabular}
+
+\noindent \begin{tabular}{@{}p{3cm} | p{5cm} | p{8.25cm}}
+ $\pmdscfr{R}{x}$, `$\pmdscfR{R}$'& \verb|\pmdscfr{R}{x}|, \verb|\pmdscfR{R}| & The relation of $\pmdscfr{R}{\beta}$ to $\beta$. \\
+ $\pmdm{R}$, $\pmDm$ & \verb|\pmdm{R}|, \verb|\pmDm| & The domain of a relation $R$. \\
+ $\pmcdm{R}$, $\pmCdm$ & \verb|\pmcdm{R}|, \verb|\pmCdm| & The converse domain of a relation $R$. \\
+ $\pmcmp{R}$, $\pmCmp$ & \verb|\pmcmp{R}|, \verb|\pmCmp| & The campus of a relation $R$. \\
+ $\pmfld{R}$, $\pmFld$ & \verb|\pmfld{R}|, \verb|\pmFld| & The field of a relation $R$. \\
+ $\pmrrf{R}{x}$, $\pmRrf{R}$ & \verb|\pmrrf{R}{x}|, \verb|\pmRrf{R}| & The referents of a given relation. \\
+ $\pmrrl{R}{x}$, $\pmRrl{R}$ & \verb|\pmrrl{R}{x}|, \verb|\pmRrl{R}| & The relata of a given relation. \\
+ $\pmsg{R}$, $\pmSg$ & \verb|\pmsg{R}|, \verb|\pmSg| & \\
+ $\pmgs{R}$, $\pmGs$ & \verb|\pmgs{R}|, \verb|\pmGs| & \\
+ $\pmrprd{R}{S}$, $\pmRprd$ & \verb|\pmrprd{R}{S}|, \verb|\pmrprd| & The relative product of $R$ and $S$. \\
+ $\pmrprdn{R}{n}$ & \verb|\pmrprdn{R}{n}| & The $n$th relative product of $R$. \\
+ $\pmrprdd{R}{S}$, $\pmRprdd$ & \verb|\pmrprdd{R}{S}|, \verb|\pmrprdd| & The double relative product of $R$ and $S$. \\
+ $\pmrlcd{\alpha}{R}$ & \verb|\pmrld{\alpha}{R}| & The limitation of $R$'s domain to $\alpha$. \\
+ $\pmrlcd{R}{\beta}$ & \verb|\pmrld{R}{\beta}| & The limitation of $R$'s converse domain to $\beta$. \\
+ $\pmrlf{\alpha}{R}{\beta}$ & \verb|\pmrlf{\alpha}{R}{\beta}| & The limitation of $R$'s field to $\alpha$ and $\beta$, resp. \\
+ $\pmrlF{P}{\alpha}$ & \verb|\pmrlF{\alpha}{R}{\beta}| & The limitation of $P$'s field to $\alpha$. \\
+ $\pmrl{\alpha}{\beta}$ & \verb|\pmrl{\alpha}{\beta}| & The relation made of all $x$s in $\alpha$ and $y$s in $\beta$. \\
+ $\pmop$ & \verb|\pmop| & The operation symbol. \\
+ $\pmopc{\alpha}{y}$ & \verb|\pmopc{\alpha}{y}| & The relation of $x$s in $\alpha$ taken to $y$ by $\pmop$. \\
+ $\pmccsum{\alpha}$ & \verb|\pmccsum{\alpha}| & The sum of a class of classes. \\
+ $\pmccprd{\alpha}$ & \verb|\pmccprd{\alpha}| & The product of a class of classes. \\
+ $\pmcrsum{\alpha}$ & \verb|\pmcrsum{\alpha}| & The sum of a class of relations. \\
+ $\pmcrprd{\alpha}$ & \verb|\pmcrprd{\alpha}| & The product of a class of relations. \\
+ $\pmrid$, $\pmrdiv$ & \verb|\pmrid|, \verb|\pmrdiv| & The relations of identity and diversity. \\
+ $\pmcunit{x}$, $\pmcUnit$ & \verb|\pmcunit{x}|, \verb|\pmcUnit| & The unit class. \\
+ $\pmcunits{\alpha}$ & \verb|\pmcunits{\alpha}| & The sum of unit classes of $\alpha$'s elements. \\
+ $\pmrn{n}$ & \verb|\pmrn{n}| & The ordinal number $n$. \\
+ $\pmdn{n}$ & \verb|\pmdn{n}| & The class of relations equal to an $n$-tuple. \\
+ $\pmoc{x}{y}$ & \verb|\pmoc{x}{y}| & The ordinal number restricted to $R=(x,y)$. \\
+ $\pmrt{x}$, $\pmrti{n}{x}$ & \verb|\pmrt{x}|, \verb|\pmrti{n}{x}| & The relative type of $x$ ($n$-many `type of's). \\
+ $\pmrtc{n}{\alpha}$ & \verb|\pmrtc{n}{\alpha}| & The relative type of $\alpha$ ($n$-many `type of's). \\
+ $\pmrtri{n}{R}$, $\pmrtrc{n}{R}$ & \verb|\pmrtri{n}{R}|, \verb|\pmrtrc{n}{R}| & The relative type of (with $n$-many `type of's) $R$ from individuals to individuals, or from classes to classes. `$nm$' can replace `$n$'.
+\end{tabular}
+
+\noindent \begin{tabular}{@{}p{3cm} | p{5cm} | p{8.25cm}}
+ $\pmrtric{n}{m}{R}$, $\pmrtrci{n}{m}{R}$ & \verb|\pmrtric{n}{R}|, \verb|\pmrtrci{n}{R}| & The relative type of $R$ from individuals to classes, or from classes to individuals. \\
+ $\pmrtdi{\alpha}{x}$, $\pmrtdri{R}{(x,y)}$ & \verb|\pmrtdi{\alpha}{x}|, \verb|\pmrtdri{R}{(x,y)}| & The result of determining that the members of $\alpha$ ($R$) belong to the relative type of $x$ (in the domain, and of $y$ in the converse domain). \\
+ $\pmrtdc{\alpha}{x}$, $\pmrtdrc{R}{x,y}$ & \verb|\pmrtdc{\alpha}{x}|, \verb|\pmrtdrc{R}{x,y}| & The result of determining that the members of $\alpha$ ($R$) belong to the relative type of $\pmrt{x}$ (in the domain, and of $\pmrt{y}$ in the converse domain). \\
+ $\pmrdc{\alpha}{\beta}$ & \verb|\pmrdc{\alpha}{\beta}| & The class of relations $R$ with domain contained in $\alpha$ and converse domain in $\beta$. \\
+ $\pmoneone$, $\pmonemany$, $\pmmanyone$ & \verb|\pmoneone|, \verb|\pmonemany|, \verb|\pmmanyone| & The class of one-one, or one-many, or many-one, relations. Note \verb|\pmrdc| can be used here. \\
+ $\pmsm$, $\pmsmbar$ & \verb|\pmsm|, \verb|\pmsmbar| & The similarity relation. \\
+ $\pmselp{\kappa}$, $\pmSelp$ & \verb|\pmselp{\kappa}|, \verb|\pmSelp| & The $P$-selections from $\kappa$ \\
+ $\pmsele{\kappa}$, $\pmSele$ & \verb|\pmsele{\kappa}|, \verb|\pmSele| & The $\pmcin$-selections from $\kappa$ \\
+ $\pmself{\kappa}$, $\pmSelf$ & \verb|\pmself{\kappa}|, \verb|\pmSelf| & The $F$-selections from $\kappa$ \\
+ $\pmexc$ & \verb|\pmexc| & The class of pairwise-disjoint classes. \\
+ $\pmexcn$ & \verb|\pmexcn| & The class of pairwise-disjoint non-null classes. \\
+ $\pmexcc{\gamma}$ & \verb|\pmexcc{\gamma}| & A class of mutually exclusive classes in $\gamma$. \\
+ $\pmselc{P}{y}$ & \verb|\pmselc{P}{y}| & The class of couples $(y, \pmdscf{P}{y})$. \\
+ $\pmmultc$ & \verb|\pmmultc| & The class of multipliable classes. \\
+ $\pmmultr$ & \verb|\pmmultr| & The class of multipliable relations. \\
+ $\pmmultax$ & \verb|\pmmultax| & The multiplicative axiom. \\
+ $\pmanc{R}$, $\pmancc{R}$ & \verb|\pmanc{R}|, \verb|\pmancc{R}| & The ancestral and its converse. \\
+ $\pmrst{R}$, $\pmrts{R}$ & \verb|\pmrst{R}|, \verb|\pmrts{R}| & The powers of the ancestral and its converse. \\
+ $\pmmin{P}$, $\pmmax{P}$ & \verb|\pmmin{P}|, \verb|\pmmax{P}| & The minimum and maximum under $P$. \\
+ $\pmpot{R}$, $\pmpotid{R}$ & \verb|\pmpot{R}|, \verb|\pmpotid{R}| & The products (strict and not) of an ancestral. \\
+ $\pmpo{R}$ & \verb|\pmpo{R}| & The product of a class of ancestrals $R$. \\
+ $\pmB$ & \verb|\pmB| & The relation of beginning under $P$. \\
+ $\pmgen{P}$ & \verb|\pmgen{P}| & The generation of $P$. \\
+ $\pmefr{P}{Q}$ & \verb|\pmefr{P}{Q}| & The equi-factor relation. \\
+ $\pmipr{R}{x}$ & \verb|\pmipr{R}{x}| & The non-distinct posterity of $x$ under $R$. \\
+ $\pmjpr{R}{x}$ & \verb|\pmjpr{R}{x}| & The distinct posterity of $x$ under $R$. \\
+ $\pmfr{R}{x}$ & \verb|\pmfr{R}{x}| & The ancestry and posterity of $x$ under $R$. \\
+ $\pmnc{\kappa}$, $\pmNc$ & \verb|\pmnc{\kappa}|, \verb|\pmNc| & The cardinal number of $\kappa$.
+\end{tabular}
+
+\end{document} \ No newline at end of file