\documentclass{ltxdoc} \EnableCrossrefs \CodelineIndex \RecordChanges \usepackage{mdframed} \usepackage{minted} \usepackage{multicol} \usepackage{luacode} \usepackage{syntax} \usemintedstyle{friendly} \BeforeBeginEnvironment{minted}{\begin{mdframed}} \AfterEndEnvironment{minted}{\end{mdframed}} \setminted{ breaklines=true, fontsize=\footnotesize, style=manni, } \def\lua#1{\mintinline{lua}|#1|} \def\latex#1{\mintinline{latex}|#1|} \NewDocumentCommand { \InputLatex } { O{} m } { \begin{mdframed} \inputminted[linenos=false,#1]{latex}{examples/#2} \end{mdframed} } \NewDocumentCommand { \InputLua } { O{} m } { \begin{mdframed} \inputminted[linenos=false,#1]{lua}{examples/#2} \end{mdframed} } \begin{document} \providecommand*{\url}{\texttt} \title{The \textsf{lparse} package} \author{% Josef Friedrich\\% \url{josef@friedrich.rocks}\\% \href{https://github.com/Josef-Friedrich/lparse} {github.com/Josef-Friedrich/lparse}% } \date{0.1.0 from 2023/01/29} \maketitle \InputLatex[firstline=5,lastline=14]{title-page.tex} \newpage \tableofcontents \newpage % \section{Einführung} \section{Introduction} % Der Name |lparse| ist von |xparse| abgeleitet. The name |lparse| is derived from |xparse|. % % Das |x| wurde durch |l| ersetzt, da dieses Packet nur zusammen mit % Lua\TeX{} funktioniert. The |x| has been replaced by |l| because this package only works with Lua\TeX{}. % % |l| steht für \emph{Lua} |l| stands for \emph{Lua}. % % Ebenso wie bei dem Paket |xparse| ist es möglich, die Argumente eines % Makros mit Hilfe einer speziellen Syntax bestehend aus einzelnen % Buchstaben zu beschreiben. Just as with |xparse|, it is possible to use a special syntax consisting of single letters to express the arguments of a macro. % % |lparse| ist jedoch im Stande unabhängig von der verwendeten % Makrosammlung - ob LaTeX oder ConTeXt oder sogar Plain TeX - Argumente % einzulesen. However, |lparse| is able to read arguments regardless of the macro systemd used - whether \LaTeX{} or Con\TeX{}t or even plain \TeX. % % Als Engine musst natürlich immer LuaTeX verwendet werden. Of course, Lua\TeX{} must always be used as the engine. \subsection{Similar projects} % Für ConTeXt gibt es einen ähnlichen Argumenten scanner. For Con\TeX{}t there is a similar argument scanner (see Con\TeX{}t Lua Document \href{http://www.pragma-ade.nl/general/manuals/cld-mkiv.pdf}{cld-mkiv}). % % Dieser Scanner ist in folgenden Dateien implementiert This scanner is implemented in the following files: \href{https://github.com/contextgarden/context/blob/main/tex/context/base/mkiv/toks-scn.lua}{toks-scn.lua} \href{https://github.com/contextgarden/context/blob/main/tex/context/base/mkiv/toks-aux.lua}{toks-aux.lua} \href{https://github.com/contextgarden/context/blob/main/tex/context/base/mkiv/toks-ini.lua}{toks-ini.lua} % Con\TeX{}t scanner verwendet offenbar die Token Bibliothek des LuaTeX Nachfolgeprojekts luametaTeX % Con\TeX{}t scanner apparently uses the token library of the LuaTeX successor project luameta\TeX: \href{https://github.com/contextgarden/context/blob/main/source/luametatex/source/lua/lmttokenlib.c}{lmttokenlib.c} \section{Description of the argument specification} % % Folgende Listen, die die Argumenttypen beschreiben, entstammen den % Handbücher usrguide bzw. xparse. The following lists, which describe the individual argument types, are taken from the manuals \href{http://mirrors.ctan.org/macros/latex/base/usrguide.pdf}{usrguide} and \href{http://mirrors.ctan.org/macros/latex/contrib/l3packages/xparse.pdf}{xparse}. % % Die Beschreibungstexte der einzelnen Argumententypen wurden nur leicht angepasst. The descriptive texts of the individual argument types have only been slightly adjusted. % % Die noch nicht unterstützen Argumentypen sind eingeklammert. The argument types that are not yet supported are bracketed. % /usr/local/texlive/texmf-dist/source/latex/l3packages/xparse/xparse.dtx \begin{itemize} \item[m] A standard mandatory argument, which can either be a single token alone or multiple tokens surrounded by curly braces |{}|. Regardless of the input, the argument will be passed to the internal code without the outer braces. This is the \pkg{xparse} type specifier for a normal \TeX{} argument. \item[r] Given as \texttt{r}\meta{token1}\meta{token2}, this denotes a \enquote{required} delimited argument, where the delimiters are \meta{token1} and \meta{token2}. If the opening delimiter \meta{token1} is missing, |nil| will be returned after a suitable error. \item[R] Given as \texttt{R}\meta{token1}\meta{token2}\marg{default}, this is a \enquote{required} delimited argument as for~\texttt{r}, but it has a user-definable recovery \meta{default} instead of |nil|. \item[v] Reads an argument \enquote{verbatim}, between the following character and its next occurrence. \item[(b)] Not implemented! Only suitable in the argument specification of an environment, it denotes the body of the environment, between |\begin|\marg{environment} and |\end|\marg{environment}. \end{itemize} The types which define optional arguments are: \begin{itemize} \item[o] A standard \LaTeX{} optional argument, surrounded with square brackets, which will supply |nil| if not given (as described later). \item[d] Given as \texttt{d}\meta{token1}\meta{token2}, an optional argument which is delimited by \meta{token1} and \meta{token2}. As with \texttt{o}, if no value is given |nil| is returned. \item[O] Given as \texttt{O}\marg{default}, is like \texttt{o}, but returns \meta{default} if no value is given. \item[D] Given as \texttt{D}\meta{token1}\meta{token2}\marg{default}, it is as for \texttt{d}, but returns \meta{default} if no value is given. Internally, the \texttt{o}, \texttt{d} and \texttt{O} types are short-cuts to an appropriated-constructed \texttt{D} type argument. \item[s] An optional star, which will result in a value |true| if a star is present and |false| otherwise (as described later). \item[t] An optional \meta{token}, which will result in a value |true| if \meta{token} is present and |false| otherwise. Given as \texttt{t}\meta{token}. \item[(e)] Not implemented! Given as \texttt{e}\marg{tokens}, a set of optional \emph{embellishments}, each of which requires a \emph{value}. If an embellishment is not present, |-NoValue-| is returned. Each embellishment gives one argument, ordered as for the list of \meta{tokens} in the argument specification. All \meta{tokens} must be distinct. \emph{This is an experimental type}. \item[(E)] Not implemented! As for \texttt{e} but returns one or more \meta{defaults} if values are not given: \texttt{E}\marg{tokens}\marg{defaults}. \end{itemize} \clearpage \section{Implementation} %% % %% \subsection{lparse.lua} \inputminted[linenos=true]{lua}{lparse.lua} %% % %% \clearpage \subsection{lparse.tex} \inputminted[linenos=true]{latex}{lparse.tex} \clearpage \subsection{lparse.sty} \inputminted[linenos=true]{latex}{lparse.sty} \pagebreak \PrintIndex \end{document}