diff options
-rw-r--r-- | Master/texmf-dist/doc/latex/codedescribe/README.md | 90 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/codedescribe/codedescribe.pdf | bin | 0 -> 246809 bytes | |||
-rw-r--r-- | Master/texmf-dist/doc/latex/codedescribe/codedescribe.tex | 433 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/codedescribe/codedescribe.sty | 964 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/codedescribe/codelisting.sty | 691 | ||||
-rwxr-xr-x | Master/tlpkg/bin/tlpkg-ctan-check | 4 | ||||
-rwxr-xr-x | Master/tlpkg/libexec/ctan2tds | 1 | ||||
-rw-r--r-- | Master/tlpkg/tlpsrc/codedescribe.tlpsrc | 0 | ||||
-rw-r--r-- | Master/tlpkg/tlpsrc/collection-latexextra.tlpsrc | 1 |
9 files changed, 2182 insertions, 2 deletions
diff --git a/Master/texmf-dist/doc/latex/codedescribe/README.md b/Master/texmf-dist/doc/latex/codedescribe/README.md new file mode 100644 index 00000000000..8045a1a2107 --- /dev/null +++ b/Master/texmf-dist/doc/latex/codedescribe/README.md @@ -0,0 +1,90 @@ + +codedescribe / codelisting +========== + +These are expl3 based packages for LaTeX/expl3 code documetation. +### codedescribe + provides a series of macros/environments (similar to doc/docx/doc3) for package/classes documentantion +### codelisting + provides a few macros for LaTeX code listing/demo. + +They are designed to be 'as class independent as possible', +no assumption about underline macros is made. +Furthermore, it's assumed that *\maketitle* and the *abstract* environment +were modified by the underline class, so alternatives (based on the article class) are provided. + +For more details, see the documentation, +[codedescribe.pdf](http://mirrors.ctan.org/macros/latex/contrib/codedescribe/doc/codedescribe.pdf) + +-------------- + +## Requirements +* none besides a fairly recent LaTeX distribution as recent as 2022/06/01 +(with the new in kernel *\ProcessKeyOptions* and *\NewDocumentCommand*) + +## Installation +The stable version is available at [CTAN](https://ctan.org/pkg/codedescribe). + +## Usage +### Stable version +Just place +```latex + \usepackage{codedescribe} +``` + +in the preamble and compile away. + + +Be aware that options might change between versions, so you have to check them manually. + +## More Information and documentation +More Information can be found in the documentation; you can find a "bleeding edge" version +at [the github page](http://github.com/alceu-frigeri/codedescribe) + +## Contacting Author + +For bug reports and enhacement suggestions, the preferred way is to use +[the project's issue page](https://github.com/alceu-frigeri/codedescribe/issues). +Please be ready to provide an example code showing the bug, if any. + +Please do not use the issue page for generic help on how to use the package. + +* git: https://github.com/alceu-frigeri/codedescribe + +------------- +Copyright 2023 by Alceu Frigeri + + This work may be distributed and/or modified under the + conditions of + + * The [LaTeX Project Public License](http://www.latex-project.org/lppl.txt), version 1.3c (or later), and/or + * The [GNU Affero General Public License](https://www.gnu.org/licenses/agpl-3.0.html), version 3 (or later) + +This work has the LPPL maintenance status *maintained*. + +The Current Maintainer of this work is Alceu Frigeri + +------------- +## This work consists of the files + +* codelisting.sty + - set of macros to typeset and demonstrate LaTeX code + +* codedescribe.sty + - set of macros to document LaTeX packages + +* README.md (this file) + - quick introduction + +* codedescribe.tex + - package documentation + +* codedescribe.pdf + - documentation in PDF format + +------------- + +## Changelog + +* Version 1.0 (this) + - Initial release by CTAN diff --git a/Master/texmf-dist/doc/latex/codedescribe/codedescribe.pdf b/Master/texmf-dist/doc/latex/codedescribe/codedescribe.pdf Binary files differnew file mode 100644 index 00000000000..882a93affd8 --- /dev/null +++ b/Master/texmf-dist/doc/latex/codedescribe/codedescribe.pdf diff --git a/Master/texmf-dist/doc/latex/codedescribe/codedescribe.tex b/Master/texmf-dist/doc/latex/codedescribe/codedescribe.tex new file mode 100644 index 00000000000..b16853b40ae --- /dev/null +++ b/Master/texmf-dist/doc/latex/codedescribe/codedescribe.tex @@ -0,0 +1,433 @@ +% !TEX program = pdflatex +% !TEX ext = --interaction=nonstopmode --enable-etex --enable-write18 +% !BIB program = none +%%%============================================================================== +%% Copyright 2022 by Alceu Frigeri +%% +%% This work may be distributed and/or modified under the conditions of +%% +%% * The [LaTeX Project Public License](http://www.latex-project.org/lppl.txt), +%% version 1.3c (or later), and/or +%% * The [GNU Affero General Public License](https://www.gnu.org/licenses/agpl-3.0.html), +%% version 3 (or later) +%% +%% This work has the LPPL maintenance status *maintained*. +%% +%% The Current Maintainer of this work is Alceu Frigeri +%% +%% This is version 1.0 (2023/05/11) +%% +%% The list of files that compose this work can be found in the README.md file at +%% https://ctan.org/pkg/democodetools +%% +%%%============================================================================== +%\documentclass[dctools,english]{ufrgscca} +\documentclass{article} +\RequirePackage[verbose,a4paper,marginparwidth=27.5mm,top=2.5cm,bottom=1.5cm,hmargin={40mm,20mm},marginparsep=2.5mm,columnsep=10mm,asymmetric]{geometry} +\usepackage{codedescribe} +\usepackage{enumitem} + +\begin{document} + +%%% TO BE DETERMINED !! \parindent +%%%\setlength\parindent{0pt} + +\tstitle{ + author={Alceu Frigeri\footnote{\tsverb{https://github.com/alceu-frigeri/codedescribe}}}, + date={2023/05/11}, + title={The codedescribe and codelisting Packages\break Version \PkgInfo{codedesc}{version}} + } + +\begin{typesetabstract} + +This documentation package is designed to be `as class independent as possible', depending only on \tsobj[pkg]{expl3,scontents,listing}. Unlike other packages of the kind, a minimal set of macros/commands/environments is defined: most/all defined commands have an 'object type' as a \tsobj[key]{keyval} parameter, allowing for an easy expansion mechanism (instead of the usual 'one set of macros/environments' for each object type). + +No assumption about page layout is made (besides `having a marginpar'), or underlying macros, so that it can be used with any document class. + +\end{typesetabstract} + +\tableofcontents + +%\setcodefmt{fontsize=\large} + +\section{Introduction} + +This package aims to document both \tsobj[code]{Document} level (i.e. final user) commands, as well \tsobj[code]{Package/Class} level commands. It's fully implemented using \tsobj[pkg]{expl3} syntax and structures, in special \tsobj[pkg]{l3coffins, l3seq, l3keys}. Besides those \tsobj[pkg]{scontents,listing} packages are used to typeset code snippets. + + +No other package/class is needed, any class can be used as the base one, which allows to demonstrate the documented commands with any desired layout. + +\tsobj[pkg]{codelisting} defines a few macros to display and demonstrate \LaTeX~ code (using \tsobj[pkg]{listings} and \tsobj[pkg]{scontents}), whilst \tsobj[pkg]{codedescribe} defines a series of macros to display/enumerate macros and environments (somewhat resembling the \tsobj[pkg]{doc3} style). + +\subsection{Single versus Multi-column Classes} +This package 'can' be used with multi-column classes, given that the \tsobj[code]{\linewidth,\columnsep} are defined appropriately. \tsobj{\linewidth} shall defaults to text/column real width, whilst \tsobj{\columnsep}, if needed (2 or more columns) shall be greater than \tsobj{\marginparwidth} plus \tsobj{\marginparsep}. + +\subsection{Current Version} +This doc regards to \tsobj[pkg]{codedescribe} version \PkgInfo{codedesc}{version}~ and \tsobj[pkg]{codelisting} version \PkgInfo{codedesc}{version}. Those two packages are fairly stable, and given the \tsobj[meta]{obj-type} mechanism (see below, \ref{obj-type-def}) it can be easily extended without changing it's interface. + +\section{codelisting Package} + +It requires two packages: \tsobj[pkg]{listings,scontents}, defines an environment: \tsobj[env]{codestore} and + 2 main commands: \tsobj[code]{\tscode,\tsdemo} and 1 auxiliary command: \tsobj{\setcodekeys}. + +\subsection{In Memory Code Storage} +Thanks to \tsobj[pkg]{scontents} (\tsobj[pkg]{expl3} based) it's possible to store \LaTeX~ code snippets in a \tsobj[pkg]{expl3} key. + + +\begin{codedescribe}[env,rulecolor=white]{codestore} + \begin{codesyntax} + \tsmacro{\begin{codestore}}[stcontents-keys]{} + \tsmacro{\end{codestore}}{} + \end{codesyntax} +This environment is an alias to \tsobj[env]{scontents} environment (from \tsobj[pkg]{scontents} package), all \tsobj[pkg]{scontents} keys are valid, with two additional ones: \tsobj[key]{st,store-at} which are aliases to the \tsobj[key]{store-env} key. If an 'isolated' \tsobj[key,meta]{st-name} is given (unknown \tsobj[key]{key}), it is assumed 'by Default' that the environment body shall be stored in it (for use with \tsobj[code]{\tscode,\tsdemo}). +\end{codedescribe} + + + +\subsection{Code Display/Demo} +\begin{codedescribe}{\tscode*,\tsdemo*} + \begin{codesyntax}% + \tsmacro{\tscode*}[code-keys]{st-name} + \tsmacro{\tsdemo*}[code-keys]{st-name} + \end{codesyntax} +\tsmacro{\tscode}{} just typesets \tsobj[meta]{st-name} (the key-name created with \tsobj[env]{stcode}), in verbatim mode with syntax highlight. The non-star version centers it and use just half of the base line. The star version uses the full text width. + +\tsmacro{\tsdemo*}{} first typesets \tsobj[meta]{st-name}, as above, then it \emph{executes} said code. The non-start versions place them side-by-side, whilst the star versions places one following the other. +\end{codedescribe} + + +For Example: + +\begin{codestore}[st=democodestore] + \begin{codestore}[stmeta] + Some \LaTeX~coding, for example: \ldots. + \end{codestore} + +This will just typesets \tsobj[key]{stmeta}: + +\tscode*[codeprefix={Sample Code:}] {stmeta} + +and this will demonstrate it, side by side with source code: + +\tsdemo[numbers=left,ruleht=0.5, + codeprefix={inner sample code}, + resultprefix={inner sample result}] {stmeta} +\end{codestore} + +\tsdemo*[emph2={tscode,tsdemo},emph={stmeta},keywd2={codestore}]{democodestore} + +\begin{codedescribe}{\setcodekeys} + \begin{codesyntax}% + \tsmacro{\setcodekeys}{code-keys} + \end{codesyntax} + +Instead of setting/defining \tsmeta{code-keys} per \tsmacro{\tscode}{}/\tsmacro{\tsdemo}{} call, one can set those \emph{globally}, better said, \emph{in the called context group} .\\ +\begin{tsremark}[N.B.:] +All \tsobj[code]{\tscode,\tsdemo} commands create a local group in which the \tsmeta{code-keys} are defined, and discarded once said local group is closed. \tsmacro{\setcodekeys}{} defines those keys in the \emph{current} context/group. +\end{tsremark} +\end{codedescribe} + + + + +\subsubsection{Code Keys} +Using a \tsobj[key]{key}\,=\tsobj[value]{value} syntax, one can fine tune \tsobj[pkg]{listings} syntax highlight. + +\begin{codedescribe}[key]{settexcs,texcs,texcsstyle} +\begin{codesyntax}% Also + \tsobj[key]{settexcs,settexcs2,settexcs3} + \tsobj[key]{texcs,texcs2,texcs3} + \tsobj[key]{texcsstyle,texcs2style,texcs3style} +\end{codesyntax} +Those define sets of \LaTeX~commands (csnames), the \tsobj[key]{set} variants initialize/redefine those sets (an empty list, clears the set), while the others extend those sets. The \tsobj[key]{style} ones redefines the command display style (an empty \tsobj[meta]{value} resets the style to it's default).\\ +\end{codedescribe} + +\begin{codedescribe}[key]{setkeywd,keywd,keywdstyle} +\begin{codesyntax} % + \tsobj[key]{setkeywd,setkeywd2,setkeywd3} + \tsobj[key]{keywd,keywd2,keywd3} + \tsobj[key]{keywdstyle,keywd2style,keywd3style} +\end{codesyntax} +Same for other \emph{keywords} sets.\\ +\end{codedescribe} + +\begin{codedescribe}[key]{setemph,emph,emphstyle} +\begin{codesyntax} % + \tsobj[key]{setemph,setemph2,setemph3} + \tsobj[key]{emph,emph2,emph3} + \tsobj[key]{emphstyle,emph2style,emph3style} +\end{codesyntax} +for some extra emphasis sets.\\ +\end{codedescribe} + +\begin{codedescribe}[key]{numbers,numberstyle} +\begin{codesyntax} % + \tsobj[key]{numbers,numberstyle} +\end{codesyntax} +\tsobj[key]{numbers} possible values are \tsobj[value]{none} (default) and \tsobj[value]{left} (to add tinny numbers to the left of the listing). With \tsobj[key]{numberstyle} one can redefine the numbering style.\\ +\end{codedescribe} + +\begin{codedescribe}[key]{stringstyle,codestyle} +\begin{codesyntax} % + \tsobj[key]{stringstyle,commentstyle} +\end{codesyntax} +to redefine \tsobj[key]{strings} and \tsobj[key]{comments} formatting style.\\ +\end{codedescribe} + +\begin{codedescribe}[key]{bckgndcolor} +\begin{codesyntax} % + \tsobj[key]{bckgndcolor} +\end{codesyntax} +to change the listing background's color.\\ +\end{codedescribe} + +\begin{codedescribe}[key]{codeprefix,resultprefix} +\begin{codesyntax} % + \tsobj[key]{codeprefix,resultprefix} +\end{codesyntax} +those set the \tsobj[key]{codeprefix} (default: \LaTeX~Code:) and \tsobj[key]{resultprefix} (default: \LaTeX~Result:) +\end{codedescribe} + +\begin{codedescribe}[key]{parindent} +\begin{codesyntax} % + \tsobj[key]{parindent} +\end{codesyntax} +Sets the indentation to be used when 'demonstrating' \LaTeXe code (\tsobj[code]{\tsdemo}). Defaults to whatever value \tsobj[code]{\parindent} was when the package was first loaded. +\end{codedescribe} + +\begin{codedescribe}[key]{ruleht} +\begin{codesyntax} % + \tsobj[key]{ruleht} +\end{codesyntax} +When typesetting the 'code demo' (\tsobj{\tsdemo}) a set of rules is drawn. The Default, 1, equals to \tsobj{\arrayrulewidth} (usually 0.4pt). +\end{codedescribe} + + + +\section{codedescribe Package} + +This package aims at minimizing the number of commands, having the object kind (if a macro, or a function, or environment, or variable, or key ...) as a parameter, allowing for a simple 'extension mechanism': other object types can be easily introduced without having to change, or add commands. + +\subsection{Package Options} +It has a single package option: +\begin{describelist}{option} +\describe{nolisting}{it will suppress the \tsobj[pkg]{codelisting} package load. In case it's not necessary or one wants to use a differen package for \LaTeX\ code listing.} +\end{describelist} + +\subsection{\tsobj[oarg]{obj-type} keys}\label{obj-type-def} + + +The current known Object Types (keys) are: +\begin{itemize}[noitemsep] +\item \tsobj[keys]{meta} for a 'general' case, +\item \tsobj[keys]{arg,marg,oarg,parg,xarg} for commands/functions arguments, +\item \tsobj[keys]{code,macro,function} for macros in general, +\item \tsobj[keys]{syntax} to describe/typeset code syntax, +\item \tsobj[keys]{key,keys,keyval,value,defaultval} to list keys, values, etc., +\item \tsobj[keys]{option} for package/macros options, +\item \tsobj[keys]{env} for environments, +\item \tsobj[keys]{pkg,pack} for packages. +\end{itemize} +% Besides those, for \tsmacro{\tsobj}{} one has \tsobj[keys]{sep,comma} keys to change the last 'connector term' (default: and) and \tsobj[keys]{rulecolor,new,update,note} to customize the \tsobj[env]{codedescribe} environment. +The format's defaults can be changed with \tsobj{\setcodefmt} + +\begin{codedescribe}[code]{\setcodefmt} +\begin{codesyntax} % + \tsmacro{\setcodefmt}{fmt-keys} +\end{codesyntax} +\tsobj[marg]{fmt-keys} are basically the same as above: +\begin{itemize}[noitemsep] + \item To change default colors: (note each group defines a single entry/alias) + \begin{itemize}[noitemsep] +\item \tsobj[keys,sep=or]{meta,marg,arg} , +\item \tsobj[keys,sep=or]{oarg,parg,xarg} , +\item \tsobj[keys,sep=or]{code,macro,function} , +\item \tsobj[keys,sep=or]{syntax} , +\item \tsobj[keys,sep=or]{key,keys,keyval,value} , +\item \tsobj[keys,sep=or]{defaultval} , +\item \tsobj[keys,sep=or]{option} , +\item \tsobj[keys,sep=or]{env} , +\item \tsobj[keys,sep=or]{pkg,pack} , +\item \tsobj[keys,sep=or]{allcolors} to set all colors at once, single value. + \end{itemize} +\item others + \begin{itemize} + \item \tsobj[keys]{font} to change font (default: \tsobj{\ttfamily}) + \item \tsobj[keys]{fontsize} to change size (default: \tsobj{\small}) + \item \tsobj[keys]{fontshape} to change the used 'slshape' (default: \tsobj{\slshape}) + \end{itemize} +\end{itemize} + +\end{codedescribe} + + + +\subsection{Environments} +\begin{codedescribe}[env,new=2023/05/01,update=2023/05/1,note={this is an example}]{codedescribe} +\begin{codesyntax} +\tsmacro{\begin{codedescribe}}[obj-type]{csv-list} +\ldots +\tsmacro{\end{codedescribe}}{} +\end{codesyntax} +This is the main environment to describe \tsobj[env]{Macros, Functions, Variable, Environments, etc.} \tsobj[meta]{csv-list} is typeset in the margin. The optional \tsobj[oarg]{obj-type} defines the object-type format. +\end{codedescribe} +\begin{tsremark} +One can change the rule color with the key \tsobj[keys]{rulecolor}, for instance \tsmacro{\begin{codedescribe}[rulecolor=white]}{} will remove the rules. +\end{tsremark} +\begin{tsremark} +Besides that, one can use the keys \tsobj[keys]{new,update,note} to further customize it as: \tsverb{\begin{codedescribe}[new=2023/05/01,update=2023/05/1,note={this is an example}]} +\end{tsremark} + + +\begin{codedescribe}[env]{codesyntax} +\begin{codesyntax} +\tsmacro{\begin{codesyntax}}{} +\end{codesyntax} +The \tsobj[env]{codesyntax} environment sets the fontsize and activates \tsmacro{\obeylines,\obeyspaces}{}, so one can list macros/cmds/keys use, one per line. + +\end{codedescribe} + +\begin{tsremark} +\tsobj[env]{codesyntax} environment shall appear only once, inside of a \tsobj[env]{codedescribe} environment. Take note, as well, this is not a verbatim environment! +%\begin{describelist*}{code} +%\describe{something}{ a text} +%\describe{some}{ some text} +%\end{describelist*} +% +\end{tsremark} + +For example, the code for \tsobj[env]{codedescribe} (entry above) is: + +\begin{codestore}[demoD] +\begin{codedescribe}[env,new=2023/05/01,update=2023/05/1,note={this is an example}]{codedescribe} + \begin{codesyntax} + \tsmacro{\begin{codedescribe}}[obj-type]{csv-list} + \ldots + \tsmacro{\end{codedescribe}}{} + \end{codesyntax} + This is the main ... +\end{codedescribe} +\end{codestore} + +\tscode*{demoD} + + + +\begin{codedescribe}[env]{describelist,describelist*} + \begin{codesyntax} +\tsmacro{\begin{describelist}}[item-indent]{obj-type} +..\tsmacro{\describe}{item-name,item-description} +..\tsmacro{\describe}{item-name,item-description} +\ldots +\tsmacro{\end{describelist}}{} + \end{codesyntax} +This sets a \tsobj[env]{description} like 'list'. In the non-star version the \tsobj[marg]{items-name} will be typeset on the marginpar. In the star version, \tsobj[marg]{item-description} will be indented by \tsobj[oarg]{item-indent} (defaults to: 20mm). +\tsobj[marg]{obj-type} defines the object-type format used to typeset \tsobj[marg]{item-name}. +\end{codedescribe} + +\begin{codedescribe}[code]{\describe} +\begin{codesyntax} +\tsmacro{\describe}{item-name,item-description} +\end{codesyntax} +This is the \tsobj[env]{describelist} companion macro. In case of the \tsobj[env]{describe*}, \tsobj[marg]{item-name} will be typeset in a box \tsobj[oarg]{item-ident} wide, so that \tsobj[marg]{item-description} will be fully indented, otherwise \tsobj[marg]{item-name} will be typed in the marginpar. +\end{codedescribe} + + +\subsection{Commands} + + +\begin{codedescribe}[code]{\typesetobj,\tsobj} +\begin{codesyntax} +\tsmacro{\typesetobj}[obj-type]{csv-list} +\tsmacro{\tsobj}[obj-type]{csv-list} +\end{codesyntax} +It can be used to typeset a single 'object' or a list thereof. In the case of a list, each term will be separated by commas. The last two by \tsobj[key]{sep} (defaults to: and). +\end{codedescribe} +\begin{tsremark} +One can change the last 'separator' with the key \tsobj[keys]{sep}, for instance \tsverb[code]{\tsobj[env,sep=or] {}} (in case one wants to produce an 'or' list of environments). Additionally, one can use the key \tsobj[keys]{comma} to change the last separator to a single comma, like \tsverb[code]{\tsobj[env,comma] {}}. +\end{tsremark} + +\begin{codedescribe}[code]{\typesetargs,\tsargs} +\begin{codesyntax} +\tsmacro{\typesetargs}[obj-type]{csv-list} +\tsmacro{\tsargs}[obj-type]{csv-list} +\end{codesyntax} + Those will typeset \tsobj[marg]{csv-list} as a list of parameters, like \tsargs[oarg]{arg1,arg2,arg3}, or \tsargs[marg]{arg1,arg2,arg3}, etc. \tsobj[oarg]{obj-type} defines the formating AND kind of braces used: \tsverb{[]} for optional arguments (oarg), \tsverb{{}} for mandatory arguments (marg), and so on. +\end{codedescribe} + + +\begin{codedescribe}[code]{\typesetmacro,\tsmacro} +\begin{codesyntax} +\tsmacro{\typesetmacro}{macro-list}\tsargs[oarg]{oargs-list}\tsargs[marg]{margs-list} +\tsmacro{\tsmacro}{macro-list}\tsargs[oarg]{oargs-list}\tsargs[marg]{margs-list} +\end{codesyntax} +This is just a short-cut for\par \tsobj[code]{\tsobj [code] {macro-list}} \tsobj[code]{\tsargs [oarg] {oargs-list}} \tsobj[code]{\tsargs [marg] {margs-list}}. +\end{codedescribe} + +\begin{codedescribe}[code]{\typesetmeta,\tsmeta} +\begin{codesyntax} +\tsmacro{\typesetmeta}{name} +\tsmacro{\tsmeta}{name} +\end{codesyntax} + Those will just typeset \tsobj[meta]{name} between left/right 'angles' (no other formatting). +\end{codedescribe} + +\begin{codedescribe}[code]{\typesetverb,\tsverb} +\begin{codesyntax} +\tsmacro{\typesetverb}[obj-type]{verbatim text} +\tsmacro{\tsverb}[obj-type]{verbatim text} +\end{codesyntax} + Typesets \tsobj[marg]{verbatim text} as is (verbatim...). \tsobj[oarg]{obj-type} defines the used format. +\end{codedescribe} + +\begin{codedescribe}[code]{\typesetmarginnote,\tsmarginnote} +\begin{codesyntax} +\tsmacro{\typesetmarginnote}{note} +\tsmacro{\tsmarginnote}{note} +\end{codesyntax} +Typesets a small note at the margin. +\end{codedescribe} + +\begin{codedescribe}[env]{tsremark} +\begin{codesyntax} +\tsmacro{\begin{tsremark}[NB]}{} +\tsmacro{\end{tsremark}}{} +\end{codesyntax} + The environment body will be typeset as a text note. \tsobj[oarg]{NB} (defaults to Note:) is the note begin (in boldface). For instance: + \begin{codestore}[demo.remark] + Sample text. Sample test. + \begin{tsremark}[N.B.] + This is an example. + \end{tsremark} + \end{codestore} + \tsdemo{demo.remark} +\end{codedescribe} + +\subsection{Auxiliar Command / Environment} +In case the used Document Class redefines the \tsobj[code]{\maketitle} command and/or \tsobj[env]{abstract} environment, alternatives are provided (based on the article class). + +\begin{codedescribe}[code]{typesettitle,tstitle} +\begin{codesyntax} +\tsmacro{\typesettitle}{title-keys} +\tsmacro{\tstitle}{title-keys} +\end{codesyntax} +This is based on the \tsobj[code]{\maketitle} from the \tsobj[pkg]{article} class. The \tsobj[marg]{title-keys} are: +\end{codedescribe} + +\begin{describelist}{key} +\describe{title}{The used title.} +\describe{author}{Author's name. It's possible to use \tsobj[code]{\footnote} command in it.} +\describe{date}{Title's date.} +\end{describelist} + +\begin{codedescribe}[env]{tsabstract} +\begin{codesyntax} +\tsmacro{\begin{tsabstract}}{} +\ldots +\tsmacro{\end{tsabstract}}{} +\end{codesyntax} +This is the \tsobj[env]{abstract} environment from the \tsobj[pkg]{article} class. +\end{codedescribe} + + +\end{document}
\ No newline at end of file diff --git a/Master/texmf-dist/tex/latex/codedescribe/codedescribe.sty b/Master/texmf-dist/tex/latex/codedescribe/codedescribe.sty new file mode 100644 index 00000000000..370f01ba82c --- /dev/null +++ b/Master/texmf-dist/tex/latex/codedescribe/codedescribe.sty @@ -0,0 +1,964 @@ +%%%============================================================================== +%% Copyright 2023 by Alceu Frigeri +%% +%% This work may be distributed and/or modified under the conditions of +%% +%% * The [LaTeX Project Public License](http://www.latex-project.org/lppl.txt), +%% version 1.3c (or later), and/or +%% * The [GNU Affero General Public License](https://www.gnu.org/licenses/agpl-3.0.html), +%% version 3 (or later) +%% +%% This work has the LPPL maintenance status *maintained*. +%% +%% The Current Maintainer of this work is Alceu Frigeri +%% +%% This is version 1.0.1beta (2023/05/11) +%% +%% The list of files that compose this work can be found in the README.md file at +%% https://ctan.org/pkg/codedescribe +%% +%%%============================================================================== +\NeedsTeXFormat{LaTeX2e}[2022/06/01] +\RequirePackage{ expl3 } +\ProvidesExplPackage + {codedescribe} + {2023/05/11} + {1.0} + {LaTeX Code Description/Documentation} + +\prop_if_exist:NTF \g__codedesc_pkg_prop + {} + { \prop_new:N \g__codedesc_pkg_prop } + +\prop_put_from_keyval:Nn \g__codedesc_pkg_prop + { + codedesc . name = codedescribe , + codedesc . prefix = codedesc , + codedesc . date = 2023/05/11 , + codedesc . version = 1.0 , + codedesc . description = LaTeX Code Description/Documentation + } + +\cs_gset:Npn \__codedesc_pkg_info:nn #1#2 + { + \prop_item:Nn \g__codedesc_pkg_prop {#1.#2} + } + +\cs_if_exist:NTF \PkgInfo + {} + { + \NewDocumentCommand \PkgInfo {mm} { \prop_item:Nn \g__codedesc_pkg_prop {#1.#2} } + } + + +\use:c {@reversemargintrue} + +\bool_new:N \l__codedesc_loadlisting_bool +\bool_set_true:N \l__codedesc_loadlisting_bool + +\keys_define:nn { codedescribe } +{ + nolisting.usage:n = general, + nolisting.bool_set_inverse:N = \l__codedesc_loadlisting_bool, + nolisting.default:n = {true}, +} +\ProcessKeyOptions [codedescribe ] + +\RequirePackage{xcolor} +\bool_if:nT {\l__codedesc_loadlisting_bool} + { + \RequirePackage{codelisting} + } + + +\cs_generate_variant:Nn \tl_set:Nn {Ne} + + + +%%%%%%% +%%% +%%% 'simplified' bold versions of \hline and \rule +%%% those don't peek ahead (to see if they are followed by another line) +%%% +%%%%%%% +\cs_new:Npn \__codedesc_hline:nnnn #1#2#3#4 {\noalign{#1\vskip #2\vskip 0pt\hrule height #3\arrayrulewidth\vskip #4\vskip 0pt}} +\cs_new:Npn \__codedesc_hline:nn #1#2 {\__codedesc_hline:nnnn {#1}{-0.5ex}{#2}{0.25ex}} +\cs_new:Npn \__codedesc_hline:n #1 {\__codedesc_hline:nnnn {#1}{-0.5ex}{2}{0.25ex}} +\cs_new:Npn \__codedesc_rule:n #1 {\hrule height #1\arrayrulewidth} +\cs_new:Npn \__codedesc_rule: {\hrule height 2\arrayrulewidth} + + + +%%%%%%% +%%% +%%% To get the 'real' columnwidth (multicolumn case) +%%% given the current \linewidth and \textwidth +%%% +%%%%%%% + +\dim_new:N \l__codedesc_linewidth_dim +\dim_new:N \l__codedesc_textcolwidth_dim + +\cs_new:Npn \__codedesc_set_textcolwidth: + { + \dim_compare:nNnTF {\linewidth} = {\l__codedesc_linewidth_dim} + {} + { +% \dim_set:Nn \l__codedesc_linewidth_dim {\linewidth} +% \fp_set:Nn \l_tmpa_fp {(\textwidth - \linewidth) / \textwidth} +% \dim_set:Nn \l__codedesc_textcolwidth_dim {\linewidth - \fp_use:N \l_tmpa_fp \columnsep} + + \dim_set:Nn \l__codedesc_textcolwidth_dim {\linewidth} + } + + } + +\colorlet{c__codedesc_none_color}{red!70!black} + +\bool_new:N \l__codedesc_descnotes_bool +\bool_new:N \l__codedesc_descdate_new_bool +\tl_new:N \l__codedesc_descdate_new_tl +\bool_new:N \l__codedesc_descdate_update_bool +\tl_new:N \l__codedesc_descdate_update_tl +\bool_new:N \l__codedesc_sidenote_bool +\tl_new:N \l__codedesc_sidenote_tl + + +\cs_new:Npn \__codedesc_keysmetadefaults:nn #1#2 + { + \tl_if_blank:nTF {#2} + { \keys_set:nn {codedesc / defaults} { #1 } } + { \keys_set:nn {codedesc / defaults} { #1 = {#2} } } + } + +\keys_define:nn { codedesc / defaults } +{ + meta.usage:n = general, + meta.code:n = { \colorlet{c__codedesc_marg_color}{#1} } , + meta.default:n = { gray!60!black } , + % + marg.usage:n = general, + marg.code:n = { \__codedesc_keysmetadefaults:nn {meta}{#1} } , + % + arg.usage:n = general, + arg.code:n = { \__codedesc_keysmetadefaults:nn {meta}{#1} } , + % + + oarg.usage:n = general, + oarg.code:n = { \colorlet{c__codedesc_oarg_color}{#1} } , + oarg.default:n = { gray!90!black } , + % + parg.usage:n = general, + parg.code:n = { \__codedesc_keysmetadefaults:nn {oarg}{#1} } , + % + xarg.usage:n = general, + xarg.code:n = { \__codedesc_keysmetadefaults:nn {oarg}{#1} } , + % + + code.usage:n = general, + code.code:n = { \colorlet{c__codedesc_code_color}{#1} } , + code.default:n = { blue!40!black } , + % + macro.usage:n = general, + macro.code:n = { \__codedesc_keysmetadefaults:nn {code}{#1} } , + % + function.usage:n = general, + function.code:n = { \__codedesc_keysmetadefaults:nn {code}{#1} } , + % + + syntax.usage:n = general, + syntax.code:n = { \colorlet{c__codedesc_syntax_color}{#1} } , + syntax.default:n = { blue!60!black } , + % + + keyval.usage:n = general, + keyval.code:n = { \colorlet{c__codedesc_keyval_color}{#1} } , + keyval.default:n = { teal!40!black } , + % + key.usage:n = general, + key.code:n = { \__codedesc_keysmetadefaults:nn {keyval}{#1} } , + % + keys.usage:n = general, + keys.code:n = { \__codedesc_keysmetadefaults:nn {keyval}{#1} } , + % + value.usage:n = general, + value.code:n = { \__codedesc_keysmetadefaults:nn {keyval}{#1} } , + % + + option.usage:n = general, + option.code:n = { \colorlet{c__codedesc_options_color}{#1} } , + option.default:n = { green!30!black } , + % + + defaultval.usage:n = general, + defaultval.code:n = { \colorlet{c__codedesc_defaultval_color}{#1} } , + defaultval.default:n = { blue!60!black } , + % + + env.usage:n = general, + env.code:n = { \colorlet{c__codedesc_env_color}{#1} } , + env.default:n = { green!30!black } , + % + + pkg.usage:n = general, + pkg.code:n = { \colorlet{c__codedesc_pkg_color}{#1} } , + pkg.default:n = { green!30!black } , + % + pack.usage:n = general, + pack.code:n = { \__codedesc_keysmetadefaults:nn {pkg}{#1} } , + % + + allcolors.usage:n = general, + allcolors.meta:n = + { + meta = {#1} , + oarg = {#1} , + code = {#1} , + syntax = {#1} , + keyval = {#1} , + option = {#1} , + defaultval = {#1} , + env = {#1} , + pkg = {#1} , + } , + allcolors.default:n = { black } , + + font.usage:n = general , + font.code:n = { \tl_set:Nn \__codedesc_metafont_tl: {#1} } , + font.default:n = { \ttfamily } , + + fontsize.usage:n = general , + fontsize.code:n = { \tl_set:Nn \__codedesc_metasize_tl: {#1} } , + fontsize.default:n = { \small } , + + fontshape.usage:n = general , + fontshape.code:n = { \tl_set:Nn \__codedesc_slshape_tl: {#1} } , + fontshape.default:n = { \slshape } , + + setdefaults.usage:n = general , + setdefaults.meta:n = { meta, oarg, code, syntax, keyval, option, defaultval, env, pkg , font, fontsize, fontshape} , + + unknown.usage:n = general, + unknown.code:n = + { }, % unknown keys are silently ignored... +} + +\keys_set:nn {codedesc / defaults}{setdefaults} + +\NewDocumentCommand \setcodefmt {m} { \keys_set:nn {codedesc / defaults}{#1}} + +\keys_define:nn { codedesc / format } +{ + meta.usage:n = general, + meta.code:n = + { + \tl_set:Nn \__codedesc_metacolor_tl: { \color{c__codedesc_marg_color} } + \tl_set:Nn \__codedesc_typeset_tl:n { \__codedesc_meta:n } + \tl_set:Nn \__codedesc_typeset_tl:o { \__codedesc_meta:o } + }, + marg.usage:n = general, + marg.meta:n = { meta } , + % + % + arg.usage:n = general, + arg.meta:n = { meta } , + % + + oarg.usage:n = general, + oarg.code:n = + { + \tl_set:Nn \__codedesc_metacolor_tl: { \color{c__codedesc_oarg_color} } + \tl_set:Nn \__codedesc_typeset_tl:n { \__codedesc_meta:n } + \tl_set:Nn \__codedesc_typeset_tl:o { \__codedesc_meta:o } + }, + % + parg.usage:n = general, + parg.meta:n = { oarg } , + % + xarg.usage:n = general, + xarg.meta:n = { oarg } , + % + + code.usage:n = general, + code.code:n = + { + \tl_set:Nn \__codedesc_metacolor_tl: { \color{c__codedesc_code_color} } + \tl_set:Nn \__codedesc_typeset_tl:n { \__codedesc_macro_typeset:n } + \tl_set:Nn \__codedesc_typeset_tl:o { \__codedesc_macro_typeset:o } + }, + % + macro.usage:n = general, + macro.meta:n = { code } , + % + function.usage:n = general, + function.meta:n = { code } , + % + + syntax.usage:n = general, + syntax.code:n = + { + \tl_set:Nn \__codedesc_metacolor_tl: { \color{c__codedesc_syntax_color} } + }, + % + + keyval.usage:n = general, + keyval.code:n = + { + \tl_set:Nn \__codedesc_metacolor_tl: { \color{c__codedesc_keyval_color} } + \tl_set:Nn \__codedesc_metashape_tl: { \__codedesc_slshape_tl: } + }, + % + key.usage:n = general, + key.meta:n = { keyval } , + % + keys.usage:n = general, + keys.meta:n = { keyval } , + % + value.usage:n = general, + value.meta:n = { keyval } , + % + + option.usage:n = general, + option.code:n = + { + \tl_set:Nn \__codedesc_metacolor_tl: { \color{c__codedesc_options_color} } + }, + % + + defaultval.usage:n = general, + defaultval.code:n = + { + \tl_set:Nn \__codedesc_metacolor_tl: { \color{c__codedesc_defaultval_color} } + }, + % + + env.usage:n = general, + env.code:n = + { + \tl_set:Nn \__codedesc_metacolor_tl: { \color{c__codedesc_env_color} } + \tl_set:Nn \__codedesc_metashape_tl: { \__codedesc_slshape_tl: } + }, + % + + pkg.usage:n = general, + pkg.code:n = + { + \tl_set:Nn \__codedesc_metacolor_tl: { \color{c__codedesc_pkg_color} } + \tl_set:Nn \__codedesc_metashape_tl: { \__codedesc_slshape_tl: } + }, + % + pack.usage:n = general, + pack.meta:n = { pkg } , + % + + sep.usage:n = general, + sep.code:n = + { + \tl_set:Nn \__codedesc_lastsep_tl { ~#1~ } + }, + % + comma.usage:n = general, + comma.code:n = + { + \tl_set:Nn \__codedesc_lastsep_tl { ,~ } + }, + % + rulecolor.usage:n = general, + rulecolor.code:n = + { + \tl_set:Nn \__codedesc_rulecolor_tl: { \color{#1} } + }, + % + new.usage:n = general, + new.code:n = + { + \bool_set_true:N \l__codedesc_descnotes_bool + \bool_set_true:N \l__codedesc_descdate_new_bool + \tl_set:Nn \l__codedesc_descdate_new_tl {#1} + }, + + update.usage:n = general, + update.code:n = + { + \bool_set_true:N \l__codedesc_descnotes_bool + \bool_set_true:N \l__codedesc_descdate_update_bool + \tl_set:Nn \l__codedesc_descdate_update_tl {#1} + }, + + note.usage:n = general, + note.code:n = + { + \bool_set_true:N \l__codedesc_descnotes_bool + \bool_set_true:N \l__codedesc_sidenote_bool + \tl_set:Nn \l__codedesc_sidenote_tl {#1} + }, + + unknown.usage:n = general, + unknown.code:n = + { + \tl_set:Nn \__codedesc_metacolor_tl: { \color{c__codedesc_none_color} } + }, + +} + +\cs_new:Npn \__codedesc_metafmt_set:n #1 + { + \tl_set:Nn \__codedesc_rulecolor_tl: { \__codedesc_metacolor_tl: } + \tl_set:Nn \__codedesc_metashape_tl: { } + \tl_set:Nn \__codedesc_typeset_tl:n { } + \tl_set:Nn \__codedesc_typeset_tl:o { \relax } + \tl_set:Nn \__codedesc_sep_tl {,\ } + \tl_set:Nn \__codedesc_lastsep_tl {\ and\ } + + \bool_set_false:N \l__codedesc_descnotes_bool + \bool_set_false:N \l__codedesc_descdate_new_bool + \bool_set_false:N \l__codedesc_descdate_update_bool + \bool_set_false:N \l__codedesc_sidenote_bool + + \keys_set:nn {codedesc / format}{#1} + } + +\cs_generate_variant:Nn \__codedesc_metafmt_set:n {o} + +\cs_new:Npn \__codedesc_metafmt:n #1 + { + \tl_set:Nn \__codedesc_rulecolor_tl: { \__codedesc_metacolor_tl: } + \tl_set:Nn \__codedesc_metashape_tl: { } + \tl_set:Nn \__codedesc_typeset_tl:n { } + \tl_set:Nn \__codedesc_typeset_tl:o { } + \tl_set:Nn \__codedesc_sep_tl {,\ } + \tl_set:Nn \__codedesc_lastsep_tl {\ and\ } + + \bool_set_false:N \l__codedesc_descnotes_bool + \bool_set_false:N \l__codedesc_descdate_new_bool + \bool_set_false:N \l__codedesc_descdate_update_bool + \bool_set_false:N \l__codedesc_sidenote_bool + + \keys_set:nn {codedesc / format}{#1} + %\tl_show:N \__codedesc_rulecolor_tl + \__codedesc_metafmt: + } + +\cs_generate_variant:Nn \__codedesc_metafmt:n {o} + + +\cs_new:Npn \__codedesc_metafmt: + { + \__codedesc_metacolor_tl: + \__codedesc_metasize_tl: + \__codedesc_metafont_tl: + \__codedesc_metashape_tl: + } + + +\keys_define:nn { codedesc / delimiters } +{ + oarg.usage:n = general, + oarg.code:n = + { + \tl_set:Nn \__codedesc_open_delimit_tl {[} + \tl_set:Nn \__codedesc_close_delimit_tl {]} + }, + marg.usage:n = general, + marg.code:n = + { + \tl_set:Nn \__codedesc_open_delimit_tl {\{} + \tl_set:Nn \__codedesc_close_delimit_tl {\}} + }, + parg.usage:n = general, + parg.code:n = + { + \tl_set:Nn \__codedesc_open_delimit_tl {(} + \tl_set:Nn \__codedesc_close_delimit_tl {)} + }, + % + xarg.usage:n = general, + xarg.code:n = + { + \tl_set:Nn \__codedesc_open_delimit_tl {<} + \tl_set:Nn \__codedesc_close_delimit_tl {>} + }, + % + meta.usage:n = general, + meta.code:n = + { + \tl_set:Nn \__codedesc_open_delimit_tl {} + \tl_set:Nn \__codedesc_close_delimit_tl {} + }, + % + unknown.usage:n = general, + unknown.code:n = + { +% \tl_set:Nn \__codedesc_open_delimit_tl {!} +% \tl_set:Nn \__codedesc_close_delimit_tl {!} + }, + % +} + + +%%%%%%% +%%% +%%% < meta > +%%% +%%%%%%% +\cs_new:Npn \__codedesc_meta:n #1 + { + \ensuremath\langle #1 \ensuremath\rangle + } + +\cs_generate_variant:Nn \__codedesc_meta:n {o} + +%%%%%%% +%%% +%%% < meta > 'detokenized' +%%% +%%%%%%% +\cs_new:Npn \__codedesc_meta*:n #1 + { + \ensuremath\langle \tl_to_str:n {#1} \ensuremath\rangle + } + + +\cs_generate_variant:cn {__codedesc_meta*:n} {o} + + + +\cs_new:Npn \__codedesc_macro_typeset:n #1 + { + \tl_set:Ne \l_tmpb_tl {\tl_to_str:n{#1}} + \regex_replace_all:nnN {\ }{} \l_tmpb_tl + \regex_replace_once:nnNTF {TF}{}\l_tmpb_tl + { + \l_tmpb_tl\textsl{\underline{TF}} + } + { \l_tmpb_tl } + } + +\cs_generate_variant:Nn \__codedesc_macro_typeset:n {o} + + + + + +\cs_new:Npn \__codedesc_list_typeset:nnn #1#2#3 + { + \seq_set_from_clist:Nn \l_tmpa_seq {#1} + \bool_set:Nn \l__codedesc_bool {\seq_if_empty_p:N \l_tmpa_seq} + \tl_set:Nn \l__codedesc_middle_tl {} + \tl_set:Nn \l__codedesc_lastone_tl {} + \bool_until_do:Nn \l__codedesc_bool + { + \seq_pop_left:NNTF \l_tmpa_seq \l_tmpa_tl + { + \seq_if_empty:NTF \l_tmpa_seq + { + \l__codedesc_lastone_tl + { + \__codedesc_metafmt: + \__codedesc_typeset_tl:o \l_tmpa_tl + } + \bool_set_true:N \l__codedesc_bool + } + { + \l__codedesc_middle_tl + { + \__codedesc_metafmt: + \__codedesc_typeset_tl:o \l_tmpa_tl + } + \tl_set:Nn \l__codedesc_middle_tl {#2} + \tl_set:Nn \l__codedesc_lastone_tl {#3} + } + } + {} + } + } + +\cs_generate_variant:Nn \__codedesc_list_typeset:nnn {noo} + + + + +\cs_new:Npn \__codedesc_args_typeset:nnnn #1#2#3#4 + { + \seq_set_from_clist:Nn \l_tmpa_seq {#3} + \group_begin: + \__codedesc_metafmt:n {#1} + \seq_map_inline:Nn \l_tmpa_seq {~\!\!#2 \__codedesc_meta:n {##1} #4 } + \group_end: + } + + +\bool_new:N \l__codedesc_longblock_bool +\coffin_new:N \l__codedesc_margin_coffin +\coffin_new:N \l__codedesc_text_coffin +\coffin_new:N \l__codedesc_syntax_coffin +\bool_new:N \l__codedesc_syntax_bool +\dim_new:N \l__codedesc_syntax_wd_dim +\dim_new:N \l__codedesc_margin_wd_dim + + + +%%%%%%%%%%%%%%%%%%% +%%%% +%%%% User/Document level commands +%%%% +%%%%%%%%%%%%%%%%%%% + + + +\NewDocumentEnvironment {codedescribe}{O{code}m} + { + \seq_set_from_clist:Nn \l_tmpa_seq {#2} + \__codedesc_set_textcolwidth: + \hcoffin_set:Nn \l__codedesc_margin_coffin + { + \__codedesc_metafmt:n {#1} + + \begin{tabular}{@{} l @{} } + \__codedesc_hline:nnnn {\__codedesc_rulecolor_tl:}{0.5ex}{2}{0.25ex} + \seq_map_inline:Nn \l_tmpa_seq { \__codedesc_typeset_tl:n {##1} \\ } + \bool_if:nTF {\l__codedesc_descnotes_bool} + { + \\[-2.5ex] + \__codedesc_hline:nnnn {\color{black}}{0.5ex}{0.25}{0.25ex} + + \bool_if:nT {\l__codedesc_descdate_new_bool} + {\scriptsize\color{black}new:~ \l__codedesc_descdate_new_tl\\} + \bool_if:nT {\l__codedesc_descdate_update_bool} + {\scriptsize\color{black}update:~ \l__codedesc_descdate_update_tl\\} + \bool_if:nT {\l__codedesc_sidenote_bool} + {\scriptsize\color{black}NB:~ \l__codedesc_sidenote_tl\\} + } + {} + \\[-2.5ex] + \__codedesc_hline:nnnn {\__codedesc_rulecolor_tl:}{-0.25ex}{2}{1ex} + \end{tabular} + } + \dim_set:Nn \l__codedesc_margin_wd_dim {\coffin_wd:N \l__codedesc_margin_coffin} + \bool_if:nTF { \dim_compare_p:nNn \l__codedesc_margin_wd_dim > \marginparwidth} + { + \bool_set_true:N \l__codedesc_longblock_bool + \dim_set:Nn \l__codedesc_syntax_wd_dim {\l__codedesc_textcolwidth_dim - (\l__codedesc_margin_wd_dim - \marginparwidth) } + } + { + \bool_set_false:N \l__codedesc_longblock_bool + \dim_set:Nn \l__codedesc_syntax_wd_dim {\l__codedesc_textcolwidth_dim} + } + \coffin_clear:N \l__codedesc_syntax_coffin + \bool_set_false:N \l__codedesc_syntax_bool + \vcoffin_set:Nnw \l__codedesc_text_coffin {\l__codedesc_textcolwidth_dim} + \setlength\parindent{0pt} + \begin{minipage}[t]{\l__codedesc_textcolwidth_dim} + } + { + \end{minipage} + \vcoffin_set_end: + \bool_if:NTF \l__codedesc_longblock_bool + { % __describeblock starting at marginpar + \coffin_join:NnnNnnnn \l__codedesc_syntax_coffin {l}{t} \l__codedesc_margin_coffin {r}{t} {-\marginparsep}{0pt} + \coffin_join:NnnNnnnn \l__codedesc_syntax_coffin {l}{b} \l__codedesc_text_coffin {l}{t} {\marginparwidth+\marginparsep}{0pt}%{-0.25\baselineskip} + \par\noindent + \coffin_typeset:Nnnnn \l__codedesc_syntax_coffin {l}{t} {-\marginparwidth-\marginparsep}{0pt} + } + { % __describeblock at marginpar + \coffin_attach:NnnNnnnn \l__codedesc_syntax_coffin {l}{t} \l__codedesc_margin_coffin {r}{t} {-\marginparsep}{0pt} + \coffin_join:NnnNnnnn \l__codedesc_syntax_coffin {l}{b} \l__codedesc_text_coffin {l}{t} {0pt}{0pt}%{-0.25\baselineskip} + \par\noindent + \coffin_typeset:Nnnnn \l__codedesc_syntax_coffin {l}{t} {0pt}{0pt} + } + \\[0.25\baselineskip] + } + + + +\NewDocumentEnvironment{codesyntax}{} + { + \vcoffin_gset:Nnw \l__codedesc_syntax_coffin {\l__codedesc_syntax_wd_dim} + \__codedesc_metafmt:n {syntax} + \hspace*{2em} %% !!! together with \parindent{-2em} + \begin{tabular} { @{} l @{} } + \__codedesc_hline:nnnn {\color{white}}{0.5ex}{2}{-1.5ex} + \__codedesc_metacolor_tl: + \begin{minipage}[t]{\l__codedesc_syntax_wd_dim} + \obeylines\obeyspaces\setlength\parindent{-2em} + } + { + \end{minipage}\\[-2.5ex] + \\ + \__codedesc_hline:nnnn {\color{white}}{0ex}{2}{1ex} + \end{tabular} + %\color{black} + \vcoffin_gset_end: + } + + +\coffin_new:N \__codedesc_describe_coffin +\dim_new:N \__codedesc_describelabel_wd_dim +\dim_new:N \__codedesc_describelist_wd_dim +\tl_new:N \__codedesc_join_tl: +\tl_new:N \__codedesc_ragged_tl: + + + + \NewDocumentEnvironment{describelist}{O{20mm}m} + { + %\vspace*{-1.5ex} + \mode_if_horizontal:TF + {\vspace*{-0.75ex}} + {} + \__codedesc_set_textcolwidth: + \coffin_clear:N \__codedesc_describe_coffin + \dim_set:Nn \__codedesc_describelabel_wd_dim {#1} + \dim_set:Nn \__codedesc_describelist_wd_dim {\l__codedesc_textcolwidth_dim} + \tl_set:Nn \__codedesc_join_tl: {\coffin_attach:NnnNnnnn} + \tl_set:Nn \__codedesc_ragged_tl: {\raggedleft} + \tl_set:Nn \__codedesc_listkind_tl {#2} + } + { +% \par\noindent\coffin_typeset:Nnnnn \__codedesc_describe_coffin {l}{t}{0pt}{10pt} + } + +\NewDocumentEnvironment{describelist*}{O{20mm}m} + { + %\vspace*{-1.5ex} + \mode_if_horizontal:TF + {\vspace*{-1ex}} + {} + \__codedesc_set_textcolwidth: + \coffin_clear:N \__codedesc_describe_coffin + \dim_set:Nn \__codedesc_describelabel_wd_dim {#1} + \dim_set:Nn \__codedesc_describelist_wd_dim {\l__codedesc_textcolwidth_dim - \__codedesc_describelabel_wd_dim -\marginparsep} + \tl_set:Nn \__codedesc_join_tl: {\coffin_join:NnnNnnnn} + \tl_set:Nn \__codedesc_ragged_tl: {} + \tl_set:Nn \__codedesc_listkind_tl {#2} + } + { +% \par\noindent\coffin_typeset:Nnnnn \__codedesc_describe_coffin {l}{t}{0pt}{10pt} + } + +\NewDocumentCommand \describe {mm} + { + + \hcoffin_set:Nn \l_tmpb_coffin + { + \__codedesc_metafmt:o { \__codedesc_listkind_tl } + \__codedesc_ragged_tl: \__codedesc_typeset_tl:n {#1} + } + + \dim_compare:nNnTF {\coffin_wd:N \l_tmpb_coffin} > {\__codedesc_describelabel_wd_dim} + { + \vcoffin_set:Nnn \l_tmpa_coffin + { \__codedesc_describelabel_wd_dim } + { ~\ ~ } + \coffin_attach:NnnNnnnn + \l_tmpa_coffin {r}{t} + \l_tmpb_coffin {r}{t} + {0pt}{0pt} + + } + { + \vcoffin_set:Nnn \l_tmpa_coffin + { \__codedesc_describelabel_wd_dim } + { + \__codedesc_metafmt:o { \__codedesc_listkind_tl } + \noindent\__codedesc_ragged_tl: \__codedesc_typeset_tl:n {#1} + } + } + + \vcoffin_set:Nnn \l_tmpb_coffin + { \__codedesc_describelist_wd_dim } + { + \noindent + \begin{minipage}[t]{ \__codedesc_describelist_wd_dim } + #2 + \end{minipage} + } + + + \__codedesc_join_tl: + \l_tmpb_coffin {l}{t} + \l_tmpa_coffin {r}{t} + {-\marginparsep}{0pt} + + \mode_if_horizontal:TF + { + \\ +% \tl_set:Nn \l_tmpa_tl {~\ ~} + } + { +% \tl_set:Nn \l_tmpa_tl {~\ ~} + } + \noindent%\vspace*{-1ex} + \coffin_typeset:Nnnnn + \l_tmpb_coffin {l}{t} {0pt}{0pt} + \\[-0.5\baselineskip] + + } + + + +\NewDocumentCommand \typesetmeta {m} {\__codedesc_meta:n {#1}} + +\cs_new_eq:NN \tsmeta \typesetmeta + + +\NewDocumentCommand \typesetargs {O{meta}m} + { + \keys_set:nn {codedesc / delimiters}{#1} + \__codedesc_args_typeset:nnnn {#1} \__codedesc_open_delimit_tl {#2} \__codedesc_close_delimit_tl + } + +\cs_new_eq:NN \tsargs \typesetargs + + + +\NewDocumentCommand \typesetmacro {mO{}m} + { + \__codedesc_metafmt_set:n {code} %.... argh! + \__codedesc_list_typeset:nnn{#1}{,~}{,~} +% \__codedesc_macro_typeset:n{#1} + \,\__codedesc_args_typeset:nnnn {oarg} [ {#2} ] + \__codedesc_args_typeset:nnnn {marg} \{ {#3} \} + } +\cs_new_eq:NN \tsmacro \typesetmacro + + +\NewDocumentCommand \typesetverb {O{code}m} + { + \group_begin: + \__codedesc_metafmt:n {#1} + \tl_to_str:n {#2} + \group_end: + } +\cs_new_eq:NN \tsverb \typesetverb + +\NewDocumentCommand \typesetobj {O{code}m} + { + \__codedesc_metafmt_set:n {#1} + \__codedesc_list_typeset:noo{#2}{\__codedesc_sep_tl}{\__codedesc_lastsep_tl} + } + +\cs_new_eq:NN \tsobj \typesetobj + + +\NewDocumentCommand \typesetmarginnote {m}{\marginpar{{\scriptsize\raggedleft #1 \par}}} +\cs_new_eq:NN \tsmarginnote \typesetmarginnote + + +\NewDocumentEnvironment {tsremark} {O{Note:}} + { +% \par\vspace*{0.5\baselineskip} + \mode_if_horizontal:TF + {\par\vspace*{0.25\baselineskip}}%\vspace*{-1.5ex}} + {\vspace*{0.75\baselineskip}} + \__codedesc_set_textcolwidth: + \group_begin: + \noindent\hspace{0.2\l__codedesc_textcolwidth_dim} + \begin{minipage}{0.8\l__codedesc_textcolwidth_dim} + \setlength\parindent{0pt}\small + \textsl{\textbf{#1}} %\dim_to_decimal:n {\linewidth} + } + { + \end{minipage} + \group_end: + \par + } + + +%%%% ARGH !!!! + +\keys_define:nn { codedesc / title } + { + title .usage:n = general , + title .tl_set:N = \l__codedesc_title_tl , + + author .usage:n = general , + author .tl_set:N = \l__codedesc_author_tl , + + date .usage:n = general , + date .tl_set:N = \l__codedesc_descdate_tl , + + abstract .usage:n = general , + abstract .tl_set:N = \l__codedesc_abstract_tl , + } + + +\cs_new:Npn \__codedesc_make_title: {% + \newpage + \null + \vskip 2em% + \begin{center}% + \let \footnote \thanks + {\LARGE \l__codedesc_title_tl \par}% + \vskip 1.5em% + {\large + \lineskip .5em% + \begin{tabular}[t]{c}% + \l__codedesc_author_tl + \end{tabular}\par}% + \vskip 1em% + {\large \l__codedesc_descdate_tl}% + \end{center}% + \par + \vskip 1.5em +} + + +%%%ARGH !!!!! +%%% 'adapted' from 'abstract.cls' +%%% +%%% + +\makeatletter + + +\NewDocumentCommand \typesettitle {m} + { + \keys_set:nn {codedesc / title}{#1} + + \group_begin: + \renewcommand\thefootnote{\@fnsymbol\c@footnote}% + \def\@makefnmark{\rlap{\@textsuperscript{\normalfont\@thefnmark}}}% + \long\def\@makefntext##1{\parindent 1em\noindent + \hb@xt@1.8em{% + \hss\@textsuperscript{\normalfont\@thefnmark}}##1}% + \if@twocolumn + \ifnum \col@number=\@ne + \__codedesc_make_title: + \else + \twocolumn[\__codedesc_make_title:]% + \fi + \else + \newpage + \global\@topnum\z@ % Prevents figures from going at top of page. + \__codedesc_make_title: + \fi + \thispagestyle{plain}\@thanks + \group_end: + } + +\cs_new_eq:NN \tstitle \typesettitle + + +\NewDocumentEnvironment{tsabstract}{} + { + \if@twocolumn + \section*{\abstractname}% + \else + \small + \begin{center}% + {\bfseries \abstractname\vspace{-.5em}\vspace{\z@}}% + \end{center}% + \quotation + \fi + } + { + \if@twocolumn\else\endquotation\fi + } +\cs_new_eq:NN \typesetabstract \tsabstract +\cs_new_eq:NN \endtypesetabstractend \endtsabstract + +\makeatother + + + diff --git a/Master/texmf-dist/tex/latex/codedescribe/codelisting.sty b/Master/texmf-dist/tex/latex/codedescribe/codelisting.sty new file mode 100644 index 00000000000..ede0132e3ea --- /dev/null +++ b/Master/texmf-dist/tex/latex/codedescribe/codelisting.sty @@ -0,0 +1,691 @@ +%%%============================================================================== +%% Copyright 2023 by Alceu Frigeri +%% +%% This work may be distributed and/or modified under the conditions of +%% +%% * The [LaTeX Project Public License](http://www.latex-project.org/lppl.txt), +%% version 1.3c (or later), and/or +%% * The [GNU Affero General Public License](https://www.gnu.org/licenses/agpl-3.0.html), +%% version 3 (or later) +%% +%% This work has the LPPL maintenance status *maintained*. +%% +%% The Current Maintainer of this work is Alceu Frigeri +%% +%% This is version 1.0 (2023/05/11) +%% +%% The list of files that compose this work can be found in the README.md file at +%% https://ctan.org/pkg/codedescribe +%% +%%%============================================================================== +\NeedsTeXFormat{LaTeX2e}[2022/06/01] + +\RequirePackage{ expl3 } +\ProvidesExplPackage + {codelisting} + {2023/05/11} + {1.0} + {LaTeX Code Listing} + +\prop_if_exist:NTF \g__codedesc_pkg_prop + {} + { \prop_new:N \g__codedesc_pkg_prop } + +\prop_put_from_keyval:Nn \g__codedesc_pkg_prop + { + codelist . name = codelisting , + codelist . prefix = codelist , + codelist . date = 2023/05/11 , + codelist . version = 1.0 , + codelist . description = LaTeX Code Listing + } + +\cs_gset:Npn \__codedesc_pkg_info:nn #1#2 + { + \prop_item:Nn \g__codedesc_pkg_prop {#1.#2} + } + +\RequirePackage{listings,scontents} + + + +\dim_new:N \l__codelist_demo_parindent_dim +\dim_new:N \l__codelist_org_parindent_dim + +\dim_set:Nn\l__codelist_org_parindent_dim{\parindent} + + +\colorlet{c__codelist_lightcyan_color}{white!97!cyan} +\colorlet{c__codelist_lightgray_color}{white!97!black} +\definecolor{c__codelist_grayblack_color}{rgb}{0.8,0.8,0.8} + +\colorlet{c__codelist_darkred_color}{red!45!black!100} +\colorlet{c__codelist_darkgreen_color}{green!45!black!100} +\colorlet{c__codelist_darkblue_color}{blue!40!black!100} +\colorlet{c__codelist_darkmagenta_color}{magenta!45!black!100} +\colorlet{c__codelist_darkyellow_color}{yellow!45!black!100} +\colorlet{c__codelist_darkteal_color}{teal!45!black!100} + +\colorlet{c__codelist_redishblack_color}{red!60!black!100} +\colorlet{c__codelist_greenishblack_color}{green!65!black!100} +\colorlet{c__codelist_blueishblack_color}{blue!85!black!100} +\colorlet{c__codelist_magentaishblack_color}{magenta!65!black!100} +\colorlet{c__codelist_yellowishblack_color}{yellow!65!black!100} +\colorlet{c__codelist_tealishblack_color}{teal!65!black!100} + +\colorlet{c__codelist_redblack_color}{red!90!black!100} +\colorlet{c__codelist_greenblack_color}{green!90!black!100} +\colorlet{c__codelist_blueblack_color}{blue!90!black!100} +\colorlet{c__codelist_magentablack_color}{magenta!90!black!100} +\colorlet{c__codelist_yellowblack_color}{yellow!80!black!100} +\colorlet{c__codelist_tealblack_color}{teal!90!black!100} + +\colorlet{c__codelist_gray_color}{gray} + +\tl_set:Nn \l__codelist_bckgnd_color_default_tl{c__codelist_lightgray_color}% +\tl_set:Nn \l__codelist_string_color_default_tl{c__codelist_darkteal_color} +\tl_set:Nn \l__codelist_comment_color_default_tl{c__codelist_darkgreen_color} + +\tl_set:Nn \l__codelist_texcs_color_default_tl{c__codelist_darkblue_color} +\tl_set:Nn \l__codelist_keywd_color_default_tl{c__codelist_darkgreen_color} +\tl_set:Nn \l__codelist_emph_color_default_tl{c__codelist_darkred_color} + +\tl_set:Nn \l__codelist_texcsB_color_default_tl{c__codelist_blueishblack_color} +\tl_set:Nn \l__codelist_keywdB_color_default_tl{c__codelist_greenishblack_color} +\tl_set:Nn \l__codelist_emphB_color_default_tl{c__codelist_redishblack_color} + +\tl_set:Nn \l__codelist_texcsC_color_default_tl{c__codelist_blueblack_color} +\tl_set:Nn \l__codelist_keywdC_color_default_tl{c__codelist_greenblack_color} +\tl_set:Nn \l__codelist_emphC_color_default_tl{c__codelist_redblack_color} + +\tl_set:Nn \l__codelist_rule_color_default_tl{c__codelist_gray_color} +\tl_set:Nn \l__codelist_number_color_default_tl{c__codelist_gray_color} + +\keys_define:nn {CodeListingOptions} { + settexcs .usage:n = general, + settexcs .code:n = { \tl_set:Nn \l__codelist_texcs_tl {#1} }, + settexcs .default:n = , + + texcs .usage:n = general, + texcs .code:n = { \tl_put_right:Nn \l__codelist_texcs_tl { , #1} }, + texcs .default:n = , + + texcsstyle .usage:n = general, + texcsstyle .code:n = { \tl_set:Nn \l__codelist_texcsstyle_tl {#1} }, + texcsstyle .default:n = \bfseries\color{ \l__codelist_texcs_color_default_tl }, + + + settexcs2 .usage:n = general, + settexcs2 .code:n = { \tl_set:Nn \l__codelist_texcsB_tl {#1} }, + settexcs2 .default:n = , + + texcs2 .usage:n = general, + texcs2 .code:n = { \tl_put_right:Nn \l__codelist_texcsB_tl { , #1} }, + texcs2 .default:n = , + + texcs2style .usage:n = general, + texcs2style .code:n = { \tl_set:Nn \l__codelist_texcsBstyle_tl {#1} }, + texcs2style .default:n = \bfseries\color{ \l__codelist_texcs_color_default_tl } , + + + settexcs3 .usage:n = general, + settexcs3 .code:n = { \tl_set:Nn \l__codelist_texcsC_tl {#1} }, + settexcs3 .default:n = , + + texcs3 .usage:n = general, + texcs3 .code:n = { \tl_put_right:Nn \l__codelist_texcsC_tl { , #1} }, + texcs3 .default:n = , + + texcs3style .usage:n = general, + texcs3style .code:n = { \tl_set:Nn \l__codelist_texcsCstyle_tl {#1} }, + texcs3style .default:n = \bfseries\color{ \l__codelist_texcsC_color_default_tl } , + + + setkeywd .usage:n = general, + setkeywd .code:n = { \tl_set:Nn \l__codelist_keywd_tl {#1} }, + setkeywd .default:n = , + + keywd .usage:n = general, + keywd .code:n = { \tl_put_right:Nn \l__codelist_keywd_tl { , #1} }, + keywd .default:n = , + + keywdstyle .usage:n = general, + keywdstyle .code:n = { \tl_set:Nn \l__codelist_keywdstyle_tl {#1} }, + keywdstyle .default:n = \bfseries\color{ \l__codelist_keywd_color_default_tl } , + + setkeywd2 .usage:n = general, + setkeywd2 .code:n = { \tl_set:Nn \l__codelist_keywdB_tl {#1} }, + setkeywd2 .default:n = , + + keywd2 .usage:n = general, + keywd2 .code:n = { \tl_put_right:Nn \l__codelist_keywdB_tl { , #1} }, + keywd2 .default:n = , + + keywd2style .usage:n = general, + keywd2style .code:n = { \tl_set:Nn \l__codelist_keywdBstyle_tl {#1} }, + keywd2style .default:n = \bfseries\color{ \l__codelist_keywdB_color_default_tl } , + + setkeywd3 .usage:n = general, + setkeywd3 .code:n = { \tl_set:Nn \l__codelist_keywdC_tl {#1} }, + setkeywd3 .default:n = , + + keywd3 .usage:n = general, + keywd3 .code:n = { \tl_put_right:Nn \l__codelist_keywdC_tl { , #1} }, + keywd3 .default:n = , + + keywd3style .usage:n = general, + keywd3style .code:n = { \tl_set:Nn \l__codelist_keywdCstyle_tl {#1} }, + keywd3style .default:n = \bfseries\color{ \l__codelist_keywdC_color_default_tl } , + + setemph .usage:n = general, + setemph .code:n = { \tl_set:Nn \l__codelist_emph_tl {#1} }, + setemph .default:n = , + + emph .usage:n = general, + emph .code:n = { \tl_put_right:Nn \l__codelist_emph_tl { , #1} }, + emph .default:n = , + + emphstyle .usage:n = general, + emphstyle .code:n = { \tl_set:Nn \l__codelist_emphstyle_tl {#1} }, + emphstyle .default:n = \bfseries\color{ \l__codelist_emph_color_default_tl } , + + setemph2 .usage:n = general, + setemph2 .code:n = { \tl_set:Nn \l__codelist_emphB_tl {#1} }, + setemph2 .default:n = , + + emph2 .usage:n = general, + emph2 .code:n = { \tl_put_right:Nn \l__codelist_emphB_tl { , #1} }, + emph2 .default:n = , + + emph2style .usage:n = general, + emph2style .code:n = { \tl_set:Nn \l__codelist_emphBstyle_tl {#1} }, + emph2style .default:n = \bfseries\color{ \l__codelist_emphB_color_default_tl } , + + setemph3 .usage:n = general, + setemph3 .code:n = { \tl_set:Nn \l__codelist_emphC_tl {#1} }, + setemph3 .default:n = , + + emph3 .usage:n = general, + emph3 .code:n = { \tl_put_right:Nn \l__codelist_emphC_tl { , #1} }, + emph3 .default:n = , + + emph3style .usage:n = general, + emph3style .code:n = { \tl_set:Nn \l__codelist_emphCstyle_tl {#1} }, + emph3style .default:n = \bfseries\color{ \l__codelist_emphC_color_default_tl } , + + stringstyle .usage:n = general, + stringstyle .code:n = { \tl_set:Nn \l__codelist_stringstyle_tl {#1} }, + stringstyle .default:n = \color{ \l__codelist_string_color_default_tl } , + + commentstyle .usage:n = general, + commentstyle .code:n = { \tl_set:Nn \l__codelist_commentstyle_tl {#1} }, + commentstyle .default:n = \color{ \l__codelist_comment_color_default_tl } , + + bckgndcolor .usage:n = general, + bckgndcolor .code:n = { \tl_set:Nn \l__codelist_bckgndcolor_tl {#1} }, + bckgndcolor .default:n = \color{ \l__codelist_bckgnd_color_default_tl } , + + rulecolor .usage:n = general, + rulecolor .code:n = { \tl_set:Nn \l__codelist_rulecolor_tl {#1} }, + rulecolor .default:n = \color{ \l__codelist_rule_color_default_tl } , + + numbers .usage:n = general, + numbers .code:n = { \tl_set:Nn \l__codelist_numbers_tl {#1} }, + numbers .default:n = none, + + numberstyle .usage:n = general, + numberstyle .code:n = { \tl_set:Nn \l__codelist_numberstyle_tl {#1} }, + numberstyle .default:n = \tiny\color{ \l__codelist_number_color_default_tl }, + + + parindent .usage:n = general, + parindent .code:n = { \dim_set:Nn\l__codelist_demo_parindent_dim{#1} }, + parindent .default:n = \l__codelist_org_parindent_dim, + + + codeprefix .usage:n = general, + codeprefix .code:n = { \tl_set:Nn \l__codelist_codeprefix_tl {#1} }, + codeprefix .default:n = \LaTeX\ Code:, + + resultprefix .usage:n = general, + resultprefix .code:n = { \tl_set:Nn \l__codelist_resultprefix_tl {#1} }, + resultprefix .default:n = \LaTeX\ Result:, + + ruleht .usage:n = general, + ruleht .code:n = { \tl_set:Nn \l__codelist_ruleheight_tl {#1} }, + ruleht .default:n = 1, + + default .usage:n = general, + default .meta:n = { + settexcs , texcsstyle , + settexcs2 , texcs2style , + settexcs3 , texcs3style , + setkeywd , keywdstyle , + setkeywd2 , keywd2style , + setkeywd3 , keywd3style , + setemph , emphstyle , + setemph2 , emph2style , + setemph3 , emph3style , + stringstyle , + commentstyle , + bckgndcolor , rulecolor , + numbers , numberstyle , + parindent , + codeprefix , resultprefix , + ruleht , + }, + +} + +\cs_new:Npn \__codelist_set_options:n #1 {\keys_set:nn {CodeListingOptions}{#1}} + +\__codelist_set_options:n{default} + + +%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%% +%%% +%%% From doctools.dtx file +%%% lstlistings 'definitions' +%%% +%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%% + +%%% listings +% +\lstdefinestyle{lstStyleDefault}{ + %%% appearance + ,basicstyle=\small\ttfamily % Standardschrift + %%% Space and placement + ,floatplacement=tbp % is used as float place specifier + ,aboveskip=\medskipamount % define the space above and + ,belowskip=\medskipamount % below displayed listings. + ,lineskip=0pt % specifies additional space between lines in listings. + ,boxpos=c % c,b,t + ,showlines=false % prints empty lines at the end of listings + %%% characters + ,extendedchars=true % allows or prohibits extended characters + % in listings, that means (national) + % characters of codes 128-255. + ,upquote=true % determines printing of quotes + ,tabsize=2, % chars of tab + ,showtabs=false % do not show tabs + ,showspaces=false % do not show spaces + ,showstringspaces=false % do not show blank spaces in string + %%% Line numbers + ,numbers=none % left, right, none + %%% Captions + ,numberbychapter=true % + ,captionpos=b % t,b + ,abovecaptionskip=\smallskipamount % the vertical space respectively above + ,belowcaptionskip=\smallskipamount % or below each caption + %%% Margins and line shape + ,linewidth=\linewidth % defines the base line width for listings. + ,xleftmargin=0pt % extra margins + ,xrightmargin=0pt % + ,resetmargins=false % indention from list environments like enumerate + % or itemize is reset, i.e. not used. + ,breaklines=true % line breaking of long lines. + ,breakatwhitespace=false % allows line breaks only at white space. + ,breakindent=0pt % is the indention of the second, third, ... + % line of broken lines. + ,breakautoindent=true % apply intendation + ,columns=flexible % + ,keepspaces=true % +} + + +\lstdefinestyle{lstDocStyleBase}{ + %%% base style + ,style=lstStyleDefault + + ,commentstyle=\slshape + %%% Line numbers + ,numbers=left % left, right, none + ,stepnumber=1 % seperation between numbers + ,numberfirstline=false % number first line always + % + ,numberstyle={\l__codelist_numberstyle_tl} % style of numbers + ,numbersep=5pt % distance to text + ,numberblanklines=true % + %%% language + ,language = [LaTeX]TeX + %%% commands + % LaTeX programming + ,moretexcs={setlength,usepackage,newcommand,renewcommand,providecommand,RequirePackage,SelectInputMappings,ifpdftex,ifpdfoutput,AtBeginEnvironment,ProvidesPackage}, + ,moretexcs={maketitle,text,includegraphics,chapter,section,subsection, + subsubsection,paragraph,textmu,enquote,blockquote,ding,mathds,ifcsdef,Bra,Ket,Braket,subcaption,lettrine,mdfsetup,captionof,listoffigures,listoftables,tableofcontents,appendix} + ,moretexcs={newcolumntype,rowfont,taburowcolors,rowcolor,rowcolors,bottomrule, + toprule,midrule,} + ,moretexcs={hypersetup} + ,moretexcs={gls,printglossary,glsadd,newglossaryentry,newacronym} + ,moretexcs={mainmatter,frontmatter,geometry,KOMAoptions,setkomafont,addtokomafont} + ,moretexcs={si,SI,sisetup,unit,unitfrac,micro} + ,moretexcs={newblock,ExecuteBibliographyOptions,addbibresource} + ,moretexcs={operatorname,frac,sfrac,dfrac,DeclareMathOperator,mathcal,underset} + ,moretexcs={democodefile,package,cs,command,env,DemoError,PrintDemo} + ,moretexcs={theadstart,tbody,tsubheadstart,tsubhead,tend} + ,moretexcs={DefineCodeSection,SetCodeSection,BeginCodeSection,EndCodeSection} + ,moretexcs={IfDefined,IfUndefined,IfElseDefined,IfElseUndefined,IfMultDefined,IfNotDraft,IfNotDraftElse,IfDraft,IfPackageLoaded,IfElsePackageLoaded,IfPackageNotLoaded,IfPackagesLoaded,IfPackagesNotLoaded,ExecuteAfterPackage,ExecuteBeforePackage,IfTikzLibraryLoaded,IfColumntypeDefined,IfColumntypesDefined,IfColorDefined,IfColorsDefined,IfMathVersionDefined,SetTemplateDefinition,UseDefinition,IfFileExists,iflanguage} + ,moretexcs={setuptablefontsize,tablefontsize,setuptablestyle,tablestyle, setuptablecolor,tablecolor,disablealternatecolors, tablealtcolored,tbegin,tbody,tend,thead, theadstart,tsubheadstart,tsubhead,theadrow,tsubheadrow,resettablestyle,theadend,tsubheadend,tableitemize,PreserveBackslash} + ,moretexcs={todo,missingfigure} + ,moretexcs={lstloadlanguages,lstdefinestyle,lstset} + ,moretexcs={indexsetup} + ,moretexcs={newglossarystyle,glossarystyle,deftranslation,newglossary} + ,moretexcs={usetikzlibrary} + ,moretexcs={definecolor,colorlet} + ,moretexcs={captionsetup,DeclareCaptionStyle} + ,moretexcs={floatsetup} + ,moretexcs={EnableCrossrefs,DisableCrossrefs,PageIndex,CodelineIndex,CodelineNumbered} + ,moretexcs={cref,Cref,vref,eqnref,figref,tabref,secref,chapref} +} + +%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%% +%%% +%%% From doctools.dtx file +%%% lstlistings 'definitions' +%%% +%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%% + +\lstloadlanguages{[LaTeX]TeX} +\lstdefinestyle{codestyle}{ + style = lstDocStyleBase, + language = [LaTeX]{TeX}, + numbers = none, %\l__codelist_numbers_tl, + rulecolor = {\l__codelist_rulecolor_tl}, + backgroundcolor = {\l__codelist_bckgndcolor_tl}, + stringstyle = {\l__codelist_stringstyle_tl}, + commentstyle = {\l__codelist_commentstyle_tl}, + framerule = 0pt, %0.4pt, + nolol = true, + frame = none, + aboveskip = 0pt,%-2ex, + belowskip = 0pt,%-2ex, + basicstyle = \footnotesize\ttfamily , + rulesep = 0pt, + breaklines = true, + breakindent = 3em, + moretexcs = {\l__codelist_texcs_tl}, + moretexcs = [2] {\l__codelist_texcsB_tl}, + moretexcs = [3] {\l__codelist_texcsC_tl}, + texcsstyle = * {\l__codelist_texcsstyle_tl}, + texcsstyle = *[2] {\l__codelist_texcsBstyle_tl}, + texcsstyle = *[3] {\l__codelist_texcsCstyle_tl}, + morekeywords = {\l__codelist_keywd_tl}, + morekeywords = [2] {\l__codelist_keywdB_tl}, + morekeywords = [3] {\l__codelist_keywdC_tl}, + keywordstyle = {\l__codelist_keywdstyle_tl}, + keywordstyle = [2] {\l__codelist_keywdBstyle_tl}, + keywordstyle = [3] {\l__codelist_keywdCstyle_tl}, + emph = {\l__codelist_emph_tl}, + emph = [2] {\l__codelist_emphB_tl}, + emph = [3] {\l__codelist_emphC_tl}, + emphstyle = {\l__codelist_emphstyle_tl}, + emphstyle = [2] {\l__codelist_emphBstyle_tl}, + emphstyle = [3] {\l__codelist_emphCstyle_tl}, +} +\lstset{style=codestyle} + +\cs_generate_variant:Nn \keys_set:nn {nx} +%%% +%%% extending scontents package options !!!! +%%% changing it's default key handling from \msg_error to 'store-env'. +%%% +\keys_define:nn { scontents / scontents} + { + st.meta:nn = { scontents } { store-env = #1 }, + st.value_required:n = true, + store-at.meta:nn = { scontents } { store-env = #1 }, + store-at.value_required:n = true, + unknown . undefine: , + unknown . code:n = { \keys_set:nx {scontents}{ store-env = \l_keys_key_str} } + } + +\newenvsc{codestore} + + + +%%%%%%%%% +%%% +%%% yep, the <verbatimsc> environment gets redefined +%%% each and every time (to change the 'listings' defaults/highlights ! +%%% +%%% +%%%%%%%%% + +\cs_undefine:c{verbatimsc} +\cs_undefine:c{verbatimsc@@} +\cs_undefine:c{verbatimsc@} +\cs_undefine:c{endverbatimsc} +\lstnewenvironment{verbatimsc}{\lstset{style=codestyle}}{} + +\cs_new:Npn \__codelist_set_verbsc:n #1 + { + \cs_undefine:c{verbatimsc} + \cs_undefine:c{verbatimsc@@} + \cs_undefine:c{verbatimsc@} + \cs_undefine:c{endverbatimsc} + + \__codelist_set_options:n{#1} + + \lstnewenvironment{verbatimsc} + { + \exp_args:Ne \lstset + { + style=codestyle, + moretexcs = {\l__codelist_texcs_tl}, + moretexcs =[2] {\l__codelist_texcsB_tl}, + moretexcs =[3] {\l__codelist_texcsC_tl}, + morekeywords = {\l__codelist_keywd_tl}, + morekeywords =[2] {\l__codelist_keywdB_tl}, + morekeywords =[3] {\l__codelist_keywdC_tl}, + emph = {\l__codelist_emph_tl}, + emph =[2] {\l__codelist_emphB_tl}, + emph =[3] {\l__codelist_emphC_tl}, + numbers = \l__codelist_numbers_tl + } + } + {} + } + +%%% !!! DEPRECTAED !!! +\NewDocumentEnvironment {verbsc} {m} + { + \cs_undefine:c{verbatimsc} + \cs_undefine:c{verbatimsc@@} + \cs_undefine:c{verbatimsc@} + \cs_undefine:c{endverbatimsc} + + \__codelist_set_options:n{#1} + + \lstnewenvironment{verbatimsc} + { + \exp_args:Ne \lstset + { + style=codestyle, + moretexcs = {\l__codelist_texcs_tl}, + moretexcs =[2] {\l__codelist_texcsB_tl}, + moretexcs =[3] {\l__codelist_texcsC_tl}, + morekeywords = {\l__codelist_keywd_tl}, + morekeywords =[2] {\l__codelist_keywdB_tl}, + morekeywords =[3] {\l__codelist_keywdC_tl}, + emph = {\l__codelist_emph_tl}, + emph =[2] {\l__codelist_emphB_tl}, + emph =[3] {\l__codelist_emphC_tl}, + numbers = \l__codelist_numbers_tl + } + } + {} + } + { } %environment's end + + +\NewDocumentCommand \setcodekeys {m} + { + \keys_set:nn {CodeListingOptions}{#1} + } + +\NewDocumentCommand{\typesetcode}{sO{}m} + { + \__codedesc_set_textcolwidth: + \group_begin: + \par\noindent + \bool_if:nTF {#1} + { % paragraph wide + \dim_set:Nn \l__codedesc_width_dim {\l__codedesc_textcolwidth_dim} + \dim_set:Nn \l__codedesc_offset_dim {0pt} + } + { % half as wide + \dim_set:Nn \l__codedesc_width_dim {0.5\l__codedesc_textcolwidth_dim} + \dim_set:Nn \l__codedesc_offset_dim {0.5\l__codedesc_width_dim} + } + + \__codelist_set_verbsc:n {#2} + \vcoffin_set:Nnn \__codelist_display_label_coffin {\l__codedesc_width_dim} + { + \raggedright + \l__codelist_codeprefix_tl + } + \vcoffin_set:Nnn \__codelist_display_coffin {\l__codedesc_width_dim} + { + \raggedright + \typestored{#3} + } + \coffin_join:NnnNnnnn + \__codelist_display_label_coffin {l}{b} + \__codelist_display_coffin {l}{t} + {0pt}{-1ex} + \vspace*{-1ex} + \coffin_typeset:Nnnnn \__codelist_display_label_coffin {l}{t}{\l__codedesc_offset_dim}{0pt} + \vspace*{2ex} + \par + \group_end: + } + +\cs_new_eq:NN \tscode \typesetcode + + + +\coffin_new:N \__codelist_display_coffin +\coffin_new:N \__codelist_display_label_coffin +\coffin_new:N \__codelist_demo_coffin +\coffin_new:N \__codelist_demo_label_coffin + +\dim_new:N \l__codedesc_width_dim +\dim_new:N \l__codedesc_offset_dim + +\NewDocumentCommand{\typesetdemo}{sO{}mO{1ex}} + { + \__codedesc_set_textcolwidth: + \group_begin: + \par\setlength\parindent{0pt} + \bool_if:nTF {#1} + { % one below the other + \dim_set:Nn \l__codedesc_width_dim {\l__codedesc_textcolwidth_dim} + \tl_set:Nn \l__codedesc_rule_in_tl {\__codedesc_rule:n {\l__codelist_ruleheight_tl}} + \tl_set:Nn \l__codedesc_rule_out_tl {} + } + { % side-by-side + \dim_set:Nn \l__codedesc_width_dim {0.5\l__codedesc_textcolwidth_dim} + \tl_set:Nn \l__codedesc_rule_in_tl {} + \tl_set:Nn \l__codedesc_rule_out_tl {\__codedesc_rule:n {\l__codelist_ruleheight_tl}} + } + + \__codelist_set_verbsc:n {#2} + \vcoffin_set:Nnn \__codelist_display_label_coffin {\l__codedesc_width_dim} + { + \raggedright + \l__codelist_codeprefix_tl + } + \vcoffin_set:Nnn \__codelist_display_coffin {\l__codedesc_width_dim} + { + \raggedright\vspace*{0.1ex} + \typestored{#3} + } + + \vcoffin_set:Nnn \__codelist_demo_label_coffin {\l__codedesc_width_dim} + { + \raggedright + \l__codelist_resultprefix_tl + } + \vcoffin_set:Nnn \__codelist_demo_coffin {\l__codedesc_width_dim} + { + \l__codedesc_rule_in_tl + \group_begin:\vspace*{0.5\baselineskip}%\vspace*{-1ex} + \setlength\parindent{\l__codelist_demo_parindent_dim} + \getstored{#3}%\vspace*{-1ex} + \group_end: + \l__codedesc_rule_in_tl + } + + \bool_if:nTF {#1} + { % one below the other + \coffin_join:NnnNnnnn + \__codelist_display_label_coffin {l}{b} + \__codelist_display_coffin {l}{t} + {0pt}{-1ex} + \vspace*{-1ex} + \coffin_typeset:Nnnnn \__codelist_display_label_coffin {l}{t}{0pt}{0pt}\vspace*{1ex} + \par + \coffin_join:NnnNnnnn + \__codelist_demo_label_coffin {l}{b} + \__codelist_demo_coffin {l}{t} + {0pt}{-1ex} + \coffin_typeset:Nnnnn \__codelist_demo_label_coffin {l}{t}{0pt}{0pt} + \vspace*{\baselineskip} + %\vspace*{1ex} + } + { % side-by-side + \coffin_join:NnnNnnnn + \__codelist_display_label_coffin {r}{b} + \__codelist_demo_label_coffin {l}{b} + {0pt}{0pt} + \coffin_join:NnnNnnnn + \__codelist_display_coffin {r}{vc} + \__codelist_demo_coffin {l}{vc} + {0pt}{0pt} + + \coffin_typeset:Nnnnn \__codelist_display_label_coffin {l}{t}{0pt}{0pt}\vspace*{1ex}\par + \l__codedesc_rule_out_tl + \coffin_typeset:Nnnnn \__codelist_display_coffin {l}{t}{0pt}{0pt} + \vspace*{0.25ex} + \l__codedesc_rule_out_tl + \vspace*{\baselineskip} + } + \par + \group_end: + } + + +\cs_new_eq:NN \tsdemo \typesetdemo + +%%% +%%% Using scontents package !!!! +%%% + + +%%% +%%% from https://en.wikibooks.org/wiki/LaTeX/Source_Code_Listings#Encoding_issue +\lstset{literate= + {á}{{\'a}}1 {é}{{\'e}}1 {í}{{\'i}}1 {ó}{{\'o}}1 {ú}{{\'u}}1 + {Á}{{\'A}}1 {É}{{\'E}}1 {Í}{{\'I}}1 {Ó}{{\'O}}1 {Ú}{{\'U}}1 + {à}{{\`a}}1 {è}{{\`e}}1 {ì}{{\`i}}1 {ò}{{\`o}}1 {ù}{{\`u}}1 + {À}{{\`A}}1 {È}{{\'E}}1 {Ì}{{\`I}}1 {Ò}{{\`O}}1 {Ù}{{\`U}}1 + {ä}{{\"a}}1 {ë}{{\"e}}1 {ï}{{\"i}}1 {ö}{{\"o}}1 {ü}{{\"u}}1 + {Ä}{{\"A}}1 {Ë}{{\"E}}1 {Ï}{{\"I}}1 {Ö}{{\"O}}1 {Ü}{{\"U}}1 + {â}{{\^a}}1 {ê}{{\^e}}1 {î}{{\^i}}1 {ô}{{\^o}}1 {û}{{\^u}}1 + {Â}{{\^A}}1 {Ê}{{\^E}}1 {Î}{{\^I}}1 {Ô}{{\^O}}1 {Û}{{\^U}}1 + {ã}{{\~{a}}}1 {õ}{{\~{o}}}1 + {Ã}{{\~{A}}}1 {Õ}{{\~{O}}}1 + {ý}{{\'{y}}}1 {Ý}{{\'{Y}}}1 {ÿ}{{\"{y}}}1 {Ÿ}{{\"{Y}}}1 + {œ}{{\oe}}1 {Œ}{{\OE}}1 {æ}{{\ae}}1 {Æ}{{\AE}}1 {ß}{{\ss}}1 + {ç}{{\c c}}1 {Ç}{{\c C}}1 {ø}{{\o}}1 {å}{{\r a}}1 {Å}{{\r A}}1 + {€}{{\EUR}}1 {£}{{\pounds}}1 +} + + + + +\endinput diff --git a/Master/tlpkg/bin/tlpkg-ctan-check b/Master/tlpkg/bin/tlpkg-ctan-check index 7cd78e7314c..00baaba558e 100755 --- a/Master/tlpkg/bin/tlpkg-ctan-check +++ b/Master/tlpkg/bin/tlpkg-ctan-check @@ -193,8 +193,8 @@ my @TLP_working = qw( cmap cmarrows cmathbb cmbright cmcyr cmdstring cmdtrack cmexb cmextra cmll cmpica cmpj cmsd cmsrb cmtiup cmupint cnbwp cnltx cntformats cntperchap - cochineal codeanatomy codebox codedoc codehigh codepage codesection - codicefiscaleitaliano + cochineal codeanatomy codebox codedescribe codedoc + codehigh codepage codesection codicefiscaleitaliano coelacanth coffeestains collcell collectbox collref colophon color-edits colordoc colorframed colorinfo coloring colorist colorprofiles diff --git a/Master/tlpkg/libexec/ctan2tds b/Master/tlpkg/libexec/ctan2tds index 3e197eaeca3..6d099f06be3 100755 --- a/Master/tlpkg/libexec/ctan2tds +++ b/Master/tlpkg/libexec/ctan2tds @@ -1679,6 +1679,7 @@ chomp (my $ctan_root = `tlpkginfo --ctan-root`); 'citation-style-language' => '&POST_do_man', 'cjk-gs-integrate' => '&POSTcjk_gs_integrate', 'cmcyr' => '&POSTcmcyr', + 'codedescribe' => '&POST_onelevel', 'context' => '&POSTcontext', 'context-games' => '&POSTcontext_games', 'coordsys' => '&POSTcoordsys', diff --git a/Master/tlpkg/tlpsrc/codedescribe.tlpsrc b/Master/tlpkg/tlpsrc/codedescribe.tlpsrc new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/Master/tlpkg/tlpsrc/codedescribe.tlpsrc diff --git a/Master/tlpkg/tlpsrc/collection-latexextra.tlpsrc b/Master/tlpkg/tlpsrc/collection-latexextra.tlpsrc index 4b1dc150c10..caaba8ed64b 100644 --- a/Master/tlpkg/tlpsrc/collection-latexextra.tlpsrc +++ b/Master/tlpkg/tlpsrc/collection-latexextra.tlpsrc @@ -211,6 +211,7 @@ depend cnltx depend cntformats depend cntperchap depend codebox +depend codedescribe depend codedoc depend codehigh depend codepage |