texlive[56125] Master: algpseudocodex (17aug20)

commits+karl at tug.org commits+karl at tug.org
Mon Aug 17 22:58:46 CEST 2020


Revision: 56125
          http://tug.org/svn/texlive?view=revision&revision=56125
Author:   karl
Date:     2020-08-17 22:58:45 +0200 (Mon, 17 Aug 2020)
Log Message:
-----------
algpseudocodex (17aug20)

Modified Paths:
--------------
    trunk/Master/tlpkg/bin/tlpkg-ctan-check
    trunk/Master/tlpkg/tlpsrc/collection-mathscience.tlpsrc

Added Paths:
-----------
    trunk/Master/texmf-dist/doc/latex/algpseudocodex/
    trunk/Master/texmf-dist/doc/latex/algpseudocodex/README.md
    trunk/Master/texmf-dist/doc/latex/algpseudocodex/documentation.pdf
    trunk/Master/texmf-dist/doc/latex/algpseudocodex/documentation.tex
    trunk/Master/texmf-dist/tex/latex/algpseudocodex/
    trunk/Master/texmf-dist/tex/latex/algpseudocodex/algpseudocodex.sty
    trunk/Master/tlpkg/tlpsrc/algpseudocodex.tlpsrc

Added: trunk/Master/texmf-dist/doc/latex/algpseudocodex/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/algpseudocodex/README.md	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/algpseudocodex/README.md	2020-08-17 20:58:45 UTC (rev 56125)
@@ -0,0 +1,4 @@
+# algpseudocodex
+This package allows typesetting pseudocode in LaTeX. It is based on algpseudocode from the algorithmicx package and uses the same syntax, but adds several new features and improvements. Notable features include customizable indent guide lines and the ability to draw boxes around parts of the code for highlighting differences. This package also has better support for long code lines spanning several lines and improved comments.
+
+This material is subject to the LATEX Project Public License 1.3c.


Property changes on: trunk/Master/texmf-dist/doc/latex/algpseudocodex/README.md
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/algpseudocodex/documentation.pdf
===================================================================
(Binary files differ)

Index: trunk/Master/texmf-dist/doc/latex/algpseudocodex/documentation.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/algpseudocodex/documentation.pdf	2020-08-16 23:53:37 UTC (rev 56124)
+++ trunk/Master/texmf-dist/doc/latex/algpseudocodex/documentation.pdf	2020-08-17 20:58:45 UTC (rev 56125)

Property changes on: trunk/Master/texmf-dist/doc/latex/algpseudocodex/documentation.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/algpseudocodex/documentation.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/algpseudocodex/documentation.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/algpseudocodex/documentation.tex	2020-08-17 20:58:45 UTC (rev 56125)
@@ -0,0 +1,683 @@
+%% documentation.tex
+%% Copyright 2020 Christian Matt
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+%   http://www.latex-project.org/lppl.txt
+% and version 1.3 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 Christian Matt.
+%
+% This work consists of the files algpseudocodex.sty and documentation.tex.
+
+\documentclass[11pt,a4paper,USenglish]{article}
+\usepackage[T1]{fontenc}
+\usepackage{babel}
+\usepackage[utf8]{inputenc}
+\usepackage[margin=1.0in]{geometry}
+\usepackage{microtype}
+\usepackage{xcolor}
+\usepackage{algpseudocodex}
+
+\usepackage[colorlinks,allcolors=blue!70!black]{hyperref}
+\usepackage[capitalise,nameinlink,noabbrev,compress]{cleveref}
+
+\title{\bf{Algpseudocodex Package Documentation}}
+\author{Christian Matt \\ \url{https://github.com/chrmatt/algpseudocodex}}
+\date{\today\\v1.0}
+
+\begin{document}
+
+\maketitle
+
+\begin{abstract}
+	This package allows typesetting pseudocode in \LaTeX. It is based on \texttt{algpseudocode} from the \texttt{algorithmicx} package and uses the same syntax, but adds several new features and improvements. Notable features include customizable indent guide lines and the ability to draw boxes around parts of the code for highlighting differences. This package also has better support for long code lines spanning several lines and improved comments.
+\end{abstract}
+
+\newpage
+
+\tableofcontents
+
+\newpage
+
+\section{Basic Usage}
+To use the package, load it in your preamble:
+\begin{verbatim}
+	\usepackage{algpseudocodex}
+\end{verbatim}
+
+Basic usage is identical to \texttt{algpseudocode} from the \texttt{algorithmicx} package. Pseudocode written for that package should also be compatible with \texttt{algpseudocodex}.
+
+\subsection{Algorithmic Block}
+Pseudocode can be typeset inside a algorithmic blocks:
+\begin{verbatim}
+	\begin{algorithmic}[line numbering]
+	    ...
+	\end{algorithmic}
+\end{verbatim}
+The optional argument specifies how lines are numbered. $0$ means no numbering, $n > 0$ means every $n$th line gets a number. The default is $0$, i.e., no line numbers will be typeset if no optional argument is provided.
+
+\subsection{Simple Statements and Commands}
+Statements start with \verb|\State|. The command \verb|\Statex| can be used to start a new line that does not get a new line number.
+
+The commands \verb|\Return| and \verb|\Output| can be used for return values of functions and outputs. They do not start a new line on their own, so they need to be used together with \verb|\State|.
+
+The \verb|\Call| command is used for procedure calls. It takes two arguments: The first one is the name of the procedure and the second one are the arguments.
+
+\subsubsection*{Example}
+\begin{minipage}[t]{0.45\textwidth}
+	\begin{verbatim}
+		\begin{algorithmic}[1]
+		    \State first line
+		    \Statex continuing first line
+		    \State \Call{Proc}{a1, a2}
+		    \State \Output Hello World!
+		\end{algorithmic}
+	\end{verbatim}
+\end{minipage}
+\hfill
+\begin{minipage}[t]{0.45\textwidth}
+	\begin{algorithmic}[1]
+		\State first line
+		\Statex continuing first line
+		\State \Call{Proc}{a1, a2}
+		\State \Output Hello World!
+	\end{algorithmic}
+\end{minipage}
+
+
+\subsection{Blocks}
+Blocks are used for loops, conditional statements, and functions. Blocks can also be nested within other blocks.
+
+\subsubsection{While Loop}
+\begin{minipage}[t]{0.45\textwidth}
+	\begin{verbatim}
+		\While{condition}
+		    \State body
+		\EndWhile
+	\end{verbatim}
+\end{minipage}
+\hfill
+\begin{minipage}[t]{0.45\textwidth}
+	\begin{algorithmic}
+		\While{condition}
+		    \State body
+		\EndWhile
+	\end{algorithmic}
+\end{minipage}
+
+
+\subsubsection{For Loop}
+\begin{minipage}[t]{0.45\textwidth}
+	\begin{verbatim}
+		\For{$n = 1, \dots, 10$}
+		    \State body
+		\EndFor
+	\end{verbatim}
+\end{minipage}
+\hfill
+\begin{minipage}[t]{0.45\textwidth}
+	\begin{algorithmic}
+		\For{$n = 1, \dots, 10$}
+		    \State body
+		\EndFor
+	\end{algorithmic}
+\end{minipage}
+
+\subsubsection{For-All Loop}
+\begin{minipage}[t]{0.45\textwidth}
+	\begin{verbatim}
+		\ForAll{$n \in \{1, \dots, 10\}$}
+		    \State body
+		\EndFor
+	\end{verbatim}
+\end{minipage}
+\hfill
+\begin{minipage}[t]{0.45\textwidth}
+	\begin{algorithmic}
+		\ForAll{$n \in \{1, \dots, 10\}$}
+		    \State body
+		\EndFor
+	\end{algorithmic}
+\end{minipage}
+
+\subsubsection{Loop}
+\begin{minipage}[t]{0.45\textwidth}
+	\begin{verbatim}
+		\Loop
+		    \State body
+		\EndLoop
+	\end{verbatim}
+\end{minipage}
+\hfill
+\begin{minipage}[t]{0.45\textwidth}
+	\begin{algorithmic}
+		\Loop
+		    \State body
+		\EndLoop
+	\end{algorithmic}
+\end{minipage}
+
+\subsubsection{Repeat-Until Loop}
+\begin{minipage}[t]{0.45\textwidth}
+	\begin{verbatim}
+		\Repeat
+		    \State body
+		\Until{$n > 10$}
+	\end{verbatim}
+\end{minipage}
+\hfill
+\begin{minipage}[t]{0.45\textwidth}
+	\begin{algorithmic}
+		\Repeat
+		    \State body
+		\Until{$n > 10$}
+	\end{algorithmic}
+\end{minipage}
+
+\subsubsection{If Statement}
+\begin{minipage}[t]{0.45\textwidth}
+	\begin{verbatim}
+		\If{condition}
+		    \State body
+		\ElsIf{condition}
+		    \State body
+		\Else
+		    \State body
+		\EndIf
+	\end{verbatim}
+\end{minipage}
+\hfill
+\begin{minipage}[t]{0.45\textwidth}
+	\begin{algorithmic}
+		\If{condition}
+		    \State body
+		\ElsIf{condition}
+		    \State body
+		\Else
+		    \State body
+		\EndIf
+	\end{algorithmic}
+\end{minipage}
+
+\bigskip
+The \verb|\ElsIf| and \verb|\Else| parts are optional.
+
+
+\subsubsection{Procedure}
+\begin{minipage}[t]{0.45\textwidth}
+	\begin{verbatim}
+		\Procedure{name}{parameters}
+		    \State body
+		\EndProcedure
+	\end{verbatim}
+\end{minipage}
+\hfill
+\begin{minipage}[t]{0.45\textwidth}
+	\begin{algorithmic}
+		\Procedure{name}{parameters}
+		    \State body
+		\EndProcedure
+	\end{algorithmic}
+\end{minipage}
+
+
+\subsubsection{Function}
+\begin{minipage}[t]{0.45\textwidth}
+	\begin{verbatim}
+		\Function{name}{parameters}
+		    \State body
+		\EndFunction
+	\end{verbatim}
+\end{minipage}
+\hfill
+\begin{minipage}[t]{0.45\textwidth}
+	\begin{algorithmic}
+		\Function{name}{parameters}
+		    \State body
+		\EndFunction
+	\end{algorithmic}
+\end{minipage}
+
+
+\subsection{Require and Ensure}
+To specify conditions on the inputs and outputs of an algorithm, \verb|\Require| and \verb|\Ensure| can be used.
+
+\subsubsection*{Example}
+\begin{minipage}[t]{0.45\textwidth}
+	\begin{verbatim}
+		\begin{algorithmic}[1]
+		    \Require $x \in \{0,1\}$
+		    \Ensure $y \in \{1,2\}$
+		    \State $y \gets x+1$
+		    \State \Return $y$
+		\end{algorithmic}
+	\end{verbatim}
+\end{minipage}
+\hfill
+\begin{minipage}[t]{0.45\textwidth}
+	\begin{algorithmic}[1]
+		\Require $x \in \{0,1\}$
+		\Ensure $y \in \{1,2\}$
+		\State $y \gets x+1$
+		\State \Return $y$
+	\end{algorithmic}
+\end{minipage}
+
+
+\subsection{Comments}
+There are two ways to typeset code comments: The command \verb|\Comment| can be used to add shorts comments to the end of the current line. The command \verb|\LComment| can be used to typeset long comments that can span multiple lines. Comments with \verb|\LComment| start on a new line.
+
+\subsubsection*{Example}
+\begin{minipage}[t]{0.45\textwidth}
+	\begin{verbatim}
+		\begin{algorithmic}[1]
+		    \State $x \gets y^2$
+		    \LComment{The next two lines
+		        increment both $x$ and $y$.}
+		    \State $x \gets x + 1$
+		    \Comment{Increment $x$.}
+		    \State $y \gets y + 1$
+		    \Comment{Increment $y$.}
+		\end{algorithmic}
+	\end{verbatim}
+\end{minipage}
+\hfill
+\begin{minipage}[t]{0.45\textwidth}
+	\begin{algorithmic}[1]
+		\State $x \gets y^2$
+		\LComment{The next two lines
+			increment both $x$ and $y$.}
+		\State $x \gets x + 1$
+		\Comment{Increment $x$.}
+		\State $y \gets y + 1$
+		\Comment{Increment $y$.}
+	\end{algorithmic}
+\end{minipage}
+
+
+\section{Boxes}
+A unique feature of the \texttt{algpseudocodex} package is the ability to draw boxes around pieces of code. There are two different methods to do so: One for drawing boxes around multiple lines of code, and another one for drawing a box around a string on a single line of code.
+
+\subsection{Boxes Around Multiple Lines of Code}
+The command \verb|\BeginBox[style]| is used to set the beginning of the box. The optional argument determines the style of the drawn box. The boxes are drawn using TikZ, so any TikZ style can be used. The default style can be changed as described in \cref{sec:defBoxStyle}.
+The command \verb|\EndBox| is used to set the end of the last started box. Boxes can be nested arbitrarily, but every \verb|\BeginBox| needs a matching \verb|\EndBox|.
+
+\subsubsection*{Example}
+\begin{minipage}[t]{0.45\textwidth}
+	\begin{verbatim}
+		\begin{algorithmic}
+		    \BeginBox
+		        \State first line
+		        \BeginBox[fill=yellow]
+		            \State second line
+		            \State another line
+		        \EndBox
+		    \EndBox
+		    \BeginBox[draw=blue,dashed]
+		        \State last line
+		    \EndBox
+		\end{algorithmic}
+	\end{verbatim}
+\end{minipage}
+\hfill
+\begin{minipage}[t]{0.45\textwidth}
+	\begin{algorithmic}
+		\BeginBox
+			\State first line
+			\BeginBox[fill=yellow]
+				\State second line
+				\State another line
+			\EndBox
+		\EndBox
+		\BeginBox[draw=blue,dashed]
+			\State last line
+		\EndBox
+	\end{algorithmic}
+\end{minipage}
+
+
+\subsection{Boxes Inside Single Line}
+The command \verb|\BoxedString[style]{text}| is used to typeset text with a box around it. The optional argument determines the style of the box, as in \verb|\BeginBox|. The default style is the same as for \verb|\BeginBox|.
+
+\subsubsection*{Example}
+\begin{minipage}[t]{0.45\textwidth}
+	\begin{verbatim}
+		\begin{algorithmic}
+		    \State first line
+		    \State second line with
+		    \BoxedString[fill=yellow]{box}
+		    \State last line
+		\end{algorithmic}
+	\end{verbatim}
+\end{minipage}
+\hfill
+\begin{minipage}[t]{0.45\textwidth}
+	\begin{algorithmic}
+		\State first line
+		\State second line with
+		\BoxedString[fill=yellow]{box}
+		\State last line
+	\end{algorithmic}
+\end{minipage}
+
+
+\section{Package Options}
+When loading \texttt{algpseudocodex} the options describe in this section can be set. They syntax for setting \verb|option1| to \verb|value1| and \verb|option2| to \verb|value2| is:
+\begin{verbatim}
+	\usepackage[option1=value1,option2=value2]{algpseudocodex}
+\end{verbatim}
+
+\subsection{noEnd}
+\begin{description}
+	\item[possible values:] \verb|true|, \verb|false|
+	\item[default:] \verb|true|
+\end{description}
+If \verb|false|, the end of blocks are marked with the expression ``end'' followed by the name of the block.
+
+\subsubsection*{Example}
+\begin{minipage}[t]{0.45\textwidth}
+	\verb|noEnd=false|:
+	\begin{algorithmic}
+		\makeatletter
+		\setbool{algpx at noEnd}{false}%
+		\algtext{EndIf}{\algpx at endIndent\algpx at startCodeCommand\algorithmicend\ \algorithmicif%
+			\algpx at startIndent% \EndIf ends another indent. Start fake one here to handle that.
+		}
+		\makeatother
+		\If{$x > 0$}
+			\State $x \gets x - 1$
+		\EndIf
+	\end{algorithmic}
+\end{minipage}
+\hfill
+\begin{minipage}[t]{0.45\textwidth}
+	\verb|noEnd=true|:
+	\begin{algorithmic}
+		\If{$x > 0$}
+			\State $x \gets x - 1$
+		\EndIf
+	\end{algorithmic}
+\end{minipage}
+
+
+\subsection{indLines}
+\begin{description}
+	\item[possible values:] \verb|true|, \verb|false|
+	\item[default:] \verb|true|
+\end{description}
+If \verb|true|, indent guide lines are drawn. The style of the lines can be customized as described in \cref{sec:indStyle}.
+
+\subsubsection*{Example}
+\begin{minipage}[t]{0.45\textwidth}
+	\verb|indLines=false|:
+	\begin{algorithmic}
+		\makeatletter
+		\setbool{algpx at indLines}{false}%
+		\makeatother
+		\If{$x > 0$}
+			\State $x \gets x - 1$
+		\EndIf
+	\end{algorithmic}
+\end{minipage}
+\hfill
+\begin{minipage}[t]{0.45\textwidth}
+	\verb|indLines=true|:
+	\begin{algorithmic}
+		\If{$x > 0$}
+			\State $x \gets x - 1$
+		\EndIf
+	\end{algorithmic}
+\end{minipage}
+
+
+\subsection{spaceRequire}
+\begin{description}
+	\item[possible values:] \verb|true|, \verb|false|
+	\item[default:] \verb|true|
+\end{description}
+If \verb|true|, vertical space is added before every \verb|\Require| except the one on the first line. This is useful for specifying different behaviors depending on the provided input.
+
+\subsubsection*{Example}
+\begin{minipage}[t]{0.45\textwidth}
+	\verb|spaceRequire=false|:
+	\begin{algorithmic}
+		\makeatletter
+		\setbool{algpx at spaceRequire}{false}%
+		\makeatother
+		\Require $x \in \{0,1\}$
+		\State \Return $x$
+		\Require $x \in \{1,2\}$
+		\State \Return $x-1$
+	\end{algorithmic}
+\end{minipage}
+\hfill
+\begin{minipage}[t]{0.45\textwidth}
+	\verb|spaceRequire=true|:
+	\begin{algorithmic}
+		\Require $x \in \{0,1\}$
+		\State \Return $x$
+		\Require $x \in \{1,2\}$
+		\State \Return $x-1$
+	\end{algorithmic}
+\end{minipage}
+
+
+\subsection{italicComments}
+\begin{description}
+	\item[possible values:] \verb|true|, \verb|false|
+	\item[default:] \verb|true|
+\end{description}
+If \verb|true|, all comments are typeset in italic font. If \verb|false|, comments are typeset in roman font.
+
+\subsubsection*{Example}
+\begin{minipage}[t]{0.45\textwidth}
+	\verb|italicComments=false|:
+	\begin{algorithmic}
+		\makeatletter
+		\setbool{algpx at italicComments}{false}%
+		\makeatother
+		\LComment{Long comment.}
+		\State $x \gets 0$ \Comment{Short comment.}
+	\end{algorithmic}
+\end{minipage}
+\hfill
+\begin{minipage}[t]{0.45\textwidth}
+	\verb|italicComments=true|:
+	\begin{algorithmic}
+		\LComment{Long comment.}
+		\State $x \gets 0$ \Comment{Short comment.}
+	\end{algorithmic}
+\end{minipage}
+
+
+\subsection{rightComments}
+\begin{description}
+	\item[possible values:] \verb|true|, \verb|false|
+	\item[default:] \verb|true|
+\end{description}
+If \verb|true|, comments typeset with \verb|\Comment| are right justified on the current line. If a comment does not fit on the current line, no justification is applied. If \verb|false|, all comments are typeset right after the end of the current line.
+
+Does not affect long comments typeset with \verb|\LComment|.
+
+\subsubsection*{Example}
+\begin{minipage}[t]{0.45\textwidth}
+	\verb|rightComments=false|:
+	\begin{algorithmic}
+		\makeatletter
+		\setbool{algpx at rightComments}{false}%
+		\makeatother
+		\LComment{No effect on long comments.}
+		\State $x \gets 0$ \Comment{Short comment.}
+		\State $x \gets x^2$ \Comment{Does not fit on the current line and is thus not justified.}
+	\end{algorithmic}
+\end{minipage}
+\hfill
+\begin{minipage}[t]{0.45\textwidth}
+	\verb|rightComments=true|:
+	\begin{algorithmic}
+		\LComment{No effect on long comments.}
+		\State $x \gets 0$ \Comment{Short comment.}
+		\State $x \gets x^2$ \Comment{Does not fit on the current line and is thus not justified.}
+	\end{algorithmic}
+\end{minipage}
+
+
+\subsection{commentColor}
+\begin{description}
+	\item[possible values:] Any color that can be used in \verb|\textcolor|.
+	\item[default:] \verb|gray|
+\end{description}
+Defines the color in which comments are typeset.
+
+\subsubsection*{Example}
+\begin{minipage}[t]{0.45\textwidth}
+	\verb|commentColor=black|:
+	\begin{algorithmic}
+		\makeatletter
+		\renewcommand{\algpx at commentColor}{black}%
+		\makeatother
+		\LComment{Long comment.}
+		\State $x \gets 0$ \Comment{Short comment.}
+	\end{algorithmic}
+\end{minipage}
+\hfill
+\begin{minipage}[t]{0.45\textwidth}
+	\verb|commentColor=blue|:
+	\begin{algorithmic}
+		\makeatletter
+		\renewcommand{\algpx at commentColor}{blue}%
+		\makeatother
+		\LComment{Long comment.}
+		\State $x \gets 0$ \Comment{Short comment.}
+	\end{algorithmic}
+\end{minipage}
+
+
+\subsection{beginComment and endComment}
+\begin{description}
+	\item[possible values:] Any string that can be typeset in text mode.
+	\item[default:] \verb|$\triangleright$~| and (empty)
+\end{description}
+Used to indicate the beginning and end of comments typeset with \verb|\Comment|, respectively.
+
+\subsubsection*{Example}
+\begin{minipage}[t]{0.45\textwidth}
+	\verb|beginComment=//~|:
+	\begin{algorithmic}
+		\makeatletter
+		\renewcommand{\algpx at beginComment}{//~}%
+		\makeatother
+		\LComment{Long comment.}
+		\State $x \gets 0$ \Comment{Short comment.}
+	\end{algorithmic}
+\end{minipage}
+\hfill
+\begin{minipage}[t]{0.45\textwidth}
+	\verb|beginComment=/*~|, \verb|endComment=~*/|:
+	\begin{algorithmic}
+		\makeatletter
+		\renewcommand{\algpx at beginComment}{/*~}%
+		\renewcommand{\algpx at endComment}{~*/}%
+		\makeatother
+		\LComment{Long comment.}
+		\State $x \gets 0$ \Comment{Short comment.}
+	\end{algorithmic}
+\end{minipage}
+
+\subsection{beginLComment and endLComment}
+\begin{description}
+	\item[possible values:] Any string that can be typeset in text mode.
+	\item[default:] \verb|$\triangleright$~| and \verb|~$\triangleleft$|
+\end{description}
+Used to indicate the beginning and end of long comments typeset with \verb|\LComment|, respectively.
+\subsubsection*{Example}
+\begin{minipage}[t]{0.45\textwidth}
+	\verb|beginLComment=/*~|, \verb|endLComment=~*/|:
+	\begin{algorithmic}
+		\makeatletter
+		\renewcommand{\algpx at beginLComment}{/*~}%
+		\renewcommand{\algpx at endLComment}{~*/}%
+		\makeatother
+		\LComment{Long comment.}
+		\State $x \gets 0$ \Comment{Short comment.}
+	\end{algorithmic}
+\end{minipage}
+
+
+\section{Customization}
+\subsection{Style of Indent Guide Lines}\label{sec:indStyle}
+Indent guide lines are drawn using TikZ and consequently any TikZ style can be used. To set the style, use:
+\begin{verbatim}
+	\tikzset{algpxIndentLine/.style={style}}
+\end{verbatim}
+The default style is \verb|draw=gray,very thin|.
+
+\subsubsection*{Example}
+\verb|algpxIndentLine/.style={draw=blue,dashed}|:
+\begin{algorithmic}
+	\tikzset{algpxIndentLine/.style={draw=blue,dashed}}
+	\If{$x > 0$}
+		\State $x \gets x - 1$
+	\EndIf
+\end{algorithmic}
+
+
+\subsection{Default Style of Boxes}\label{sec:defBoxStyle}
+Boxes are drawn using TikZ and consequently any TikZ style can be used. To set the default style, use:
+\begin{verbatim}
+	\tikzset{algpxDefaultBox/.style={style}}
+\end{verbatim}
+The default style is \verb|draw|.
+
+
+\subsection{Changing Keywords}
+As in the \texttt{algorithmicx} package, keywords can be renamed using the syntax:
+\begin{verbatim}
+	\algrenewcommand\keyword{new name}
+\end{verbatim}
+The following keywords can be customized:
+\begin{itemize}
+	\item \verb|\algorithmicend|
+	\hfill Default: \verb|\textbf{end}|
+	\item \verb|\algorithmicdo|
+	\hfill Default: \verb|\textbf{do}|
+	\item \verb|\algorithmicwhile|
+	\hfill Default: \verb|\textbf{while}|
+	\item \verb|\algorithmicfor|
+	\hfill Default: \verb|\textbf{for}|
+	\item \verb|\algorithmicforall|
+	\hfill Default: \verb|\textbf{for all}|
+	\item \verb|\algorithmicloop|
+	\hfill Default: \verb|\textbf{loop}|
+	\item \verb|\algorithmicrepeat|
+	\hfill Default: \verb|\textbf{repeat}|
+	\item \verb|\algorithmicuntil|
+	\hfill Default: \verb|\textbf{until}|
+	\item \verb|\algorithmicprocedure|
+	\hfill Default: \verb|\textbf{procedure}|
+	\item \verb|\algorithmicfunction|
+	\hfill Default: \verb|\textbf{function}|
+	\item \verb|\algorithmicif|
+	\hfill Default: \verb|\textbf{if}|
+	\item \verb|\algorithmicthen|
+	\hfill Default: \verb|\textbf{then}|
+	\item \verb|\algorithmicelse|
+	\hfill Default: \verb|\textbf{else}|
+	\item \verb|\algorithmicrequire|
+	\hfill Default: \verb|\textbf{Require:}|
+	\item \verb|\algorithmicensure|
+	\hfill Default: \verb|\textbf{Ensure:}|
+	\item \verb|\algorithmicreturn|
+	\hfill Default: \verb|\textbf{return}|
+	\item \verb|\algorithmicoutput|
+	\hfill Default: \verb|\textbf{output}|
+\end{itemize}
+
+
+\end{document}


Property changes on: trunk/Master/texmf-dist/doc/latex/algpseudocodex/documentation.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/algpseudocodex/algpseudocodex.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/algpseudocodex/algpseudocodex.sty	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/algpseudocodex/algpseudocodex.sty	2020-08-17 20:58:45 UTC (rev 56125)
@@ -0,0 +1,735 @@
+%% algpseudocodex.sty
+%% Copyright 2017, 2020 Christian Matt
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+%   http://www.latex-project.org/lppl.txt
+% and version 1.3 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 Christian Matt.
+%
+% This work consists of the files algpseudocodex.sty and documentation.tex.
+
+
+% Pseudocodex algorithmic style
+% Based on Szasz Janos' algpseudocode.sty
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{algpseudocodex}[2020-08-16 v1.0 pseudocode typesetting]
+\RequirePackage{kvoptions}
+\RequirePackage{algorithmicx}
+\RequirePackage{etoolbox}
+\RequirePackage{fifo-stack}
+\RequirePackage{varwidth}
+\RequirePackage{tabto}
+\RequirePackage{tikz}
+\usetikzlibrary{calc,fit,tikzmark}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Package options
+%
+\SetupKeyvalOptions{%
+	family=algpx,%
+	prefix=algpx@%
+}
+
+\DeclareBoolOption[true]{noEnd}% don't print end if etc.
+\DeclareBoolOption[true]{indLines}% show indent guide lines
+\DeclareBoolOption[true]{spaceRequire}% adds vertical space before \Require if not in first line
+\DeclareBoolOption[true]{italicComments}% italicise comments
+\DeclareBoolOption[true]{rightComments}% right justify comments
+\DeclareStringOption[gray]{commentColor}% color of comments
+\DeclareStringOption[$\triangleright$~]{beginComment}% print at beginning of comment
+\DeclareStringOption[]{endComment}% print at end of comment
+\DeclareStringOption[$\triangleright$~]{beginLComment}% print at beginning of long comment
+\DeclareStringOption[~$\triangleleft$]{endLComment}% print at end of long comment
+\ProcessLocalKeyvalOptions*
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Styles
+%
+\tikzset{%
+	algpxDefaultBox/.style={draw},%
+	algpxIndentLine/.style={draw=gray,very thin}%
+}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Declarations
+%
+\algnewlanguage{pseudocodex}
+\alglanguage{pseudocodex}
+
+% \tikzmark is only available on next compilation; the following command immediately after using it
+\newcommand{\@tikzmarkNow}[2][]{\tikz[overlay,remember picture] \node[#1] (#2) {};}
+
+\long\def\@ifnodedefined#1#2#3{%
+	\@ifundefined{pgf at sh@ns@#1}{#3}{#2}%
+}
+
+\newlength{\algpx at codeBoxInnerSep}% distance between box and its content
+\newlength{\algpx at codeBoxSep}% distance between nested boxes
+\newlength{\algpx at codeBoxOuterSep}% additional space before and after box
+\newlength{\algpx at minIndDist}% minimum distance between start and end of indent line to draw line
+\newlength{\algpx at oldPos}
+\newlength{\algpx at newPos}
+\newlength{\algpx at tmpLen}% length to be used for various things
+\newlength{\algpx at tmpLenA}% another tmp length
+\newlength{\algpx at indStartY}
+\newlength{\algpx at indEndY}
+\newlength{\algpx at indStartX}% x coordinate of indent line
+
+\setlength{\algpx at codeBoxInnerSep}{2pt}
+\setlength{\algpx at codeBoxSep}{3pt}
+\setlength{\algpx at codeBoxOuterSep}{1pt}
+
+\newbool{algpx at firstLine}
+\newbool{algpx at setNorth}
+\newbool{algpx at executeEndVarwidth}
+\newbool{algpx at adjustHeight}
+\newbool{algpx at restorePrevdepth}
+\newbool{algpx at indJustEnded}% true after end with noend
+
+\newcounter{algpx at codeBoxCount}% number of already created code boxes. Used to fill algpx at startNewCodeBoxQueue
+\newcounter{algpx at nestedCBoxCount}
+\newcounter{algpx at startedBoxesCount}
+\newcounter{algpx at endedBoxesCount}
+\newcounter{algpx at nestedBoxedStringCount}
+\newcounter{algpx at nestedBoxedStringMaxCount}
+\newcounter{algpx at indentCount}
+\newcounter{algpx at justUsedIndentCount}
+
+\FSCreate{algpx at startNewCodeBoxQueue}{0}% queue of code boxes to be created on next \State, \If etc. Only stores index of box (0 is value of top if empty; should not be relevant)
+\FSCreate{algpx at codeBoxStack}{0}
+\FSCreate{algpx at codeBoxStackTmp}{0}
+\FSCreate{algpx at indentStack}{0}
+
+\newsavebox{\algpx at boxedStringBox}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Macros for boxes around code
+%
+% Draw a box. First parameter is style, others are coordinates (north, west, east, south)
+\newcommand{\algpx at drawCodeBox}[5]{%
+	\tikz[overlay,remember picture]{%
+		\node[inner sep=\algpx at codeBoxInnerSep,#1,fit={(pic cs:#2) (pic cs:#3) (pic cs:#4) (pic cs:#5)}] {};%
+	}%
+}
+
+% execute after \State, \If etc.
+\newcommand{\algpx at startCodeCommand}{%
+	\algpx at startCodeCommandX{}{}%
+}
+
+% extended version of \algpx at startCodeCommand
+% first argument is printed before content
+% second argument is used to reserve space after contents (for end symbol of long comments)
+\newcommand{\algpx at startCodeCommandX}[2]{%
+	\setbool{algpx at indJustEnded}{false}%
+	\setcounter{algpx at startedBoxesCount}{0}%
+	\setcounter{algpx at endedBoxesCount}{0}%
+	\setcounter{algpx at nestedBoxedStringMaxCount}{0}%
+	\whileboolexpr{test{\ifnumcomp{0}{<}{\FSSize{algpx at startNewCodeBoxQueue}}}}{%
+		\FSPush{algpx at codeBoxStack}{\FSTop{algpx at startNewCodeBoxQueue}}%
+		\algpx at drawCodeBox{algpx at codeBoxStyle\FSTop{algpx at startNewCodeBoxQueue}}{algpx at codeBoxNorth-\FSTop{algpx at startNewCodeBoxQueue}}{algpx at codeBoxWest-\FSTop{algpx at startNewCodeBoxQueue}}{algpx at codeBoxEast-\FSTop{algpx at startNewCodeBoxQueue}}{algpx at codeBoxSouth-\FSTop{algpx at startNewCodeBoxQueue}}%
+		\FSPop{algpx at startNewCodeBoxQueue}%
+		\setbool{algpx at setNorth}{true}%
+		\stepcounter{algpx at startedBoxesCount}%
+	}%
+	\algpx at setCodeBoxWest%
+	\setbool{algpx at firstLine}{false}%
+	\setbool{algpx at executeEndVarwidth}{true}%
+	#1%
+	% create box from here to end of line, leaving space for #2
+	\settowidth{\algpx at tmpLen}{#1}%
+	\settowidth{\algpx at tmpLenA}{#2}%
+	\begin{varwidth}[t]{\dimexpr \linewidth - \algpx at tmpLen - \algpx at tmpLenA - \algorithmicindent * \numexpr \value{ALG at nested} - 1 \relax \relax}%
+}
+
+% executed before \State, \If etc., i.e., at end of previous line
+% first argument 1 if after \EndIf etc. and noend
+\newcommand{\algpx at endCodeCommand}[1][0]{%
+	\ifbool{algpx at executeEndVarwidth}{%
+		\par\xdef\algpx at pdtemp{\the\prevdepth}% see https://tex.stackexchange.com/a/34982
+		\end{varwidth}\setbox0=\lastbox\usebox0%
+		\setbool{algpx at executeEndVarwidth}{false}%
+		\setbool{algpx at adjustHeight}{true}%
+		\setbool{algpx at restorePrevdepth}{true}%
+	}{}%
+	\ifbool{algpx at setNorth}{%
+		% todo: north should not be set again if highest element in current line is BoxedString
+		\algpx at setCodeBoxNorth{\the\ht0}% set north here shifted by height of current line
+		\setbool{algpx at setNorth}{false}%
+	}{}%
+	\algpx at setCodeBoxEast%
+	\ifbool{algpx at adjustHeight}{%
+		% todo: if highest or deepest element in current line is BoxedString, \ht0 or \dp0 should be adjusted for different sep values
+		\algpx at addBoxSpacing{\value{algpx at startedBoxesCount}}{\the\ht0}{\value{algpx at endedBoxesCount}}{\the\dp0}%
+		\setbool{algpx at adjustHeight}{false}%
+	}{}%
+	\ifboolexpr{bool{algpx at restorePrevdepth} and test{\ifstrequal{#1}{0}}}{%
+		\par\prevdepth\algpx at pdtemp%
+		\setbool{algpx at restorePrevdepth}{false}%
+	}{}%
+}
+
+% set algpx at codeBoxNorthMax of current box and all ancestors; argument is amount to shift up from current baseline
+\newcommand{\algpx at setCodeBoxNorth}[1]{%
+	\setcounter{algpx at nestedCBoxCount}{0}%
+	\whileboolexpr{test{\ifnumcomp{0}{<}{\FSSize{algpx at codeBoxStack}}}}{%
+		\FSPush{algpx at codeBoxStackTmp}{\FSTop{algpx at codeBoxStack}}% copy stack to tmp
+		\@ifnodedefined{algpx at codeBoxNorthMax-\FSTop{algpx at codeBoxStack}}{%
+			% get current position; shift according to nest-level to ensure nested boxes don't collide
+			\@tikzmarkNow[yshift=\dimexpr #1 + \algpx at codeBoxSep * \value{algpx at nestedCBoxCount}\relax]{algpx at codeBoxNorthHere}%
+			% extract y-coordinate of previously stored north
+			\tikz[overlay,remember picture]{%
+				\pgfextracty{\algpx at oldPos}{\pgfpointanchor{algpx at codeBoxNorthMax-\FSTop{algpx at codeBoxStack}}{center}}%
+				\pgfextracty{\algpx at newPos}{\pgfpointanchor{algpx at codeBoxNorthHere}{center}}%
+				\global\algpx at oldPos=\algpx at oldPos%
+				\global\algpx at newPos=\algpx at newPos%
+			}%
+			\ifdimcomp{\algpx at oldPos}{<}{\algpx at newPos}{%
+				% new y is greater than old one, so set it
+				\@tikzmarkNow[yshift=\dimexpr #1 + \algpx at codeBoxSep * \value{algpx at nestedCBoxCount}\relax]{algpx at codeBoxNorthMax-\FSTop{algpx at codeBoxStack}}%
+			}{%
+				\@tikzmarkNow{algpx at codeBoxNorthDummy}% set something to keep in sync
+			}%
+		}{%
+			\@tikzmarkNow[yshift=\dimexpr #1 + \algpx at codeBoxSep * \value{algpx at nestedCBoxCount}\relax]{algpx at codeBoxNorthMax-\FSTop{algpx at codeBoxStack}}%
+		}%
+		\FSPop{algpx at codeBoxStack}%
+		\stepcounter{algpx at nestedCBoxCount}%
+	}%
+	% restore stack from tmp
+	\whileboolexpr{test{\ifnumcomp{0}{<}{\FSSize{algpx at codeBoxStackTmp}}}}{%
+		\FSPush{algpx at codeBoxStack}{\FSTop{algpx at codeBoxStackTmp}}%
+		\FSPop{algpx at codeBoxStackTmp}%
+	}%
+}
+
+
+% set algpx at codeBoxSouthMax of current box and all ancestors; argument is amount to shift down from current baseline
+\newcommand{\algpx at setCodeBoxSouth}[1]{%
+	\setcounter{algpx at nestedCBoxCount}{0}%
+	\whileboolexpr{test{\ifnumcomp{0}{<}{\FSSize{algpx at codeBoxStack}}}}{%
+		\FSPush{algpx at codeBoxStackTmp}{\FSTop{algpx at codeBoxStack}}% copy stack to tmp
+		\@ifnodedefined{algpx at codeBoxSouthMax-\FSTop{algpx at codeBoxStack}}{%
+			% get current position; shift according to nest-level to ensure nested boxes don't collide
+			\@tikzmarkNow[yshift=\dimexpr -#1 -\algpx at codeBoxSep * \value{algpx at nestedCBoxCount}\relax]{algpx at codeBoxSouthHere}%
+			% extract y-coordinate of previously stored south
+			\tikz[overlay,remember picture]{%
+				\pgfextracty{\algpx at oldPos}{\pgfpointanchor{algpx at codeBoxSouthMax-\FSTop{algpx at codeBoxStack}}{center}}%
+				\pgfextracty{\algpx at newPos}{\pgfpointanchor{algpx at codeBoxSouthHere}{center}}%
+				\global\algpx at oldPos=\algpx at oldPos%
+				\global\algpx at newPos=\algpx at newPos%
+			}%
+			\ifdimcomp{\algpx at oldPos}{>}{\algpx at newPos}{%
+				% new y is less than old one, so set it
+				\@tikzmarkNow[yshift=\dimexpr -#1 -\algpx at codeBoxSep * \value{algpx at nestedCBoxCount}\relax]{algpx at codeBoxSouthMax-\FSTop{algpx at codeBoxStack}}%
+			}{%
+				\@tikzmarkNow{algpx at codeBoxSouthDummy}% set something to keep in sync
+			}%
+		}{%
+			\@tikzmarkNow[yshift=\dimexpr -#1 -\algpx at codeBoxSep * \value{algpx at nestedCBoxCount}\relax]{algpx at codeBoxSouthMax-\FSTop{algpx at codeBoxStack}}%
+		}%
+		\FSPop{algpx at codeBoxStack}%
+		\stepcounter{algpx at nestedCBoxCount}%
+	}%
+	% restore stack from tmp
+	\whileboolexpr{test{\ifnumcomp{0}{<}{\FSSize{algpx at codeBoxStackTmp}}}}{%
+		\FSPush{algpx at codeBoxStack}{\FSTop{algpx at codeBoxStackTmp}}%
+		\FSPop{algpx at codeBoxStackTmp}%
+	}%
+}
+
+% set algpx at codeBoxWestMax of current box and all ancestors; argument is amount to shift left from current position
+\newcommand{\algpx at setCodeBoxWest}[1][0pt]{%
+	\setcounter{algpx at nestedCBoxCount}{0}%
+	\whileboolexpr{test{\ifnumcomp{0}{<}{\FSSize{algpx at codeBoxStack}}}}{%
+		\FSPush{algpx at codeBoxStackTmp}{\FSTop{algpx at codeBoxStack}}% copy stack to tmp
+		\@ifnodedefined{algpx at codeBoxWestMax-\FSTop{algpx at codeBoxStack}}{%
+			% get current position; shift according to nest-level to ensure nested boxes don't collide
+			\@tikzmarkNow[xshift=\dimexpr -#1 -\algpx at codeBoxSep * \value{algpx at nestedCBoxCount}\relax]{algpx at codeBoxWestHere}%
+			% extract x-coordinate of previously stored west
+			\tikz[overlay,remember picture]{%
+				\pgfextractx{\algpx at oldPos}{\pgfpointanchor{algpx at codeBoxWestMax-\FSTop{algpx at codeBoxStack}}{center}}%
+				\pgfextractx{\algpx at newPos}{\pgfpointanchor{algpx at codeBoxWestHere}{center}}%
+				\global\algpx at oldPos=\algpx at oldPos%
+				\global\algpx at newPos=\algpx at newPos%
+			}%
+			\ifdimcomp{\algpx at oldPos}{>}{\algpx at newPos}{%
+				% new x is smaller than old one, so set it
+				\@tikzmarkNow[xshift=\dimexpr -#1 -\algpx at codeBoxSep * \value{algpx at nestedCBoxCount}\relax]{algpx at codeBoxWestMax-\FSTop{algpx at codeBoxStack}}%
+			}{%
+				\@tikzmarkNow{algpx at codeBoxWestDummy}% set something to keep in sync
+			}%
+		}{%
+			\@tikzmarkNow[xshift=\dimexpr -#1 -\algpx at codeBoxSep * \value{algpx at nestedCBoxCount}\relax]{algpx at codeBoxWestMax-\FSTop{algpx at codeBoxStack}}%
+		}%
+		\FSPop{algpx at codeBoxStack}%
+		\stepcounter{algpx at nestedCBoxCount}%
+	}%
+	% restore stack from tmp
+	\whileboolexpr{test{\ifnumcomp{0}{<}{\FSSize{algpx at codeBoxStackTmp}}}}{%
+		\FSPush{algpx at codeBoxStack}{\FSTop{algpx at codeBoxStackTmp}}%
+		\FSPop{algpx at codeBoxStackTmp}%
+	}%
+}
+
+% set algpx at codeBoxEastMax of current box and all ancestors
+\newcommand{\algpx at setCodeBoxEast}{%
+	\setcounter{algpx at nestedCBoxCount}{0}%
+	\whileboolexpr{test{\ifnumcomp{0}{<}{\FSSize{algpx at codeBoxStack}}}}{%
+		\FSPush{algpx at codeBoxStackTmp}{\FSTop{algpx at codeBoxStack}}% copy stack to tmp
+		\@ifnodedefined{algpx at codeBoxEastMax-\FSTop{algpx at codeBoxStack}}{%
+			% get current position; shift according to nest-level to ensure nested boxes don't collide
+			\@tikzmarkNow[xshift=\dimexpr \algpx at codeBoxSep * \value{algpx at nestedCBoxCount}\relax]{algpx at codeBoxEastHere}%
+			% extract x-coordinate of previously stored east
+			\tikz[overlay,remember picture]{%
+				\pgfextractx{\algpx at oldPos}{\pgfpointanchor{algpx at codeBoxEastMax-\FSTop{algpx at codeBoxStack}}{center}}%
+				\pgfextractx{\algpx at newPos}{\pgfpointanchor{algpx at codeBoxEastHere}{center}}%
+				\global\algpx at oldPos=\algpx at oldPos%
+				\global\algpx at newPos=\algpx at newPos%
+			}%
+			\ifdimcomp{\algpx at oldPos}{<}{\algpx at newPos}{%
+				% new x is greater than old one, so set it
+				\@tikzmarkNow[xshift=\dimexpr \algpx at codeBoxSep * \value{algpx at nestedCBoxCount}\relax]{algpx at codeBoxEastMax-\FSTop{algpx at codeBoxStack}}%
+			}{%
+				\@tikzmarkNow{algpx at codeBoxEastDummy}% set something to keep in sync
+			}%
+		}{%
+			\@tikzmarkNow[xshift=\dimexpr \algpx at codeBoxSep * \value{algpx at nestedCBoxCount}\relax]{algpx at codeBoxEastMax-\FSTop{algpx at codeBoxStack}}%
+		}%
+		\FSPop{algpx at codeBoxStack}%
+		\stepcounter{algpx at nestedCBoxCount}%
+	}%
+	% restore stack from tmp
+	\whileboolexpr{test{\ifnumcomp{0}{<}{\FSSize{algpx at codeBoxStackTmp}}}}{%
+		\FSPush{algpx at codeBoxStack}{\FSTop{algpx at codeBoxStackTmp}}%
+		\FSPop{algpx at codeBoxStackTmp}%
+	}%
+}
+
+% Set coordinates of box on top of algpx at codeBoxStack to maximal reported values.
+% This ensures, e.g., that the right edge of the box is after the longest line inside.
+\newcommand{\algpx at setBoxesToStoredMax}{%
+	\tikz[overlay,remember picture]{%
+		\tikzmark{algpx at codeBoxNorth-\FSTop{algpx at codeBoxStack}}{(algpx at codeBoxNorthMax-\FSTop{algpx at codeBoxStack})}%
+		\tikzmark{algpx at codeBoxSouth-\FSTop{algpx at codeBoxStack}}{(algpx at codeBoxSouthMax-\FSTop{algpx at codeBoxStack})}%
+		\tikzmark{algpx at codeBoxWest-\FSTop{algpx at codeBoxStack}}{(algpx at codeBoxWestMax-\FSTop{algpx at codeBoxStack})}%
+		\tikzmark{algpx at codeBoxEast-\FSTop{algpx at codeBoxStack}}{(algpx at codeBoxEastMax-\FSTop{algpx at codeBoxStack})}%
+	}%
+}
+
+% add some space above and below box; more if several boxes are nested
+% first argument: number of boxes above
+% second argument: height of content
+% third argument: number of boxes below
+% fourth argument: depth of content
+\newcommand{\algpx at addBoxSpacing}[4]{%
+	\ifnumcomp{0}{<}{#1}{%
+		\rule{0pt}{\dimexpr #2 + \algpx at codeBoxInnerSep + \algpx at codeBoxOuterSep + (\algpx at codeBoxSep * (#1 - 1))\relax}%
+	}{}%
+	\ifnumcomp{0}{<}{#3}{%
+		\rule[\dimexpr -#4 - \algpx at codeBoxInnerSep - \algpx at codeBoxOuterSep - (\algpx at codeBoxSep * (#3 - 1))\relax]{0pt}{\dimexpr #4 + \algpx at codeBoxInnerSep + \algpx at codeBoxOuterSep + (\algpx at codeBoxSep * (#3 - 1))\relax}% negative offset equal to height to draw line down from baseline
+	}{}%
+}
+
+% Begin a new code box here.
+% Must be followed by \State, \If, \For etc.
+% (optional) argument is style of box
+\newcommand{\BeginBox}[1][algpxDefaultBox]{%
+	\ignorespaces%	
+	\FSUnshift{algpx at startNewCodeBoxQueue}{\thealgpx at codeBoxCount}% add to queue; processed by \algpx at startCodeCommand
+	%globally set tikz style (https://tex.stackexchange.com/a/47918)
+	\begingroup%
+		\globaldefs=1\relax%
+		\pgfqkeys{/tikz}{algpx at codeBoxStyle\thealgpx at codeBoxCount/.style={#1}}%
+	\endgroup%
+	\stepcounter{algpx at codeBoxCount}%
+	\ignorespaces%
+}
+
+% End one open code box. Fails if no box open (i.e., if algpx at codeBoxStack is empty).
+\newcommand{\EndBox}{%
+	\ignorespaces%
+	\ifnumcomp{0}{<}{\FSSize{algpx at startNewCodeBoxQueue}}{%
+		\PackageError{algpseudocodex}{BeginBox must be followed by State, If, For, etc. Use BoxedString instead}{}%
+		\FSClear{algpx at startNewCodeBoxQueue}%
+	}{%
+		\ifnumcomp{0}{<}{\FSSize{algpx at codeBoxStack}}{%
+			\unskip%
+			\ifbool{algpx at executeEndVarwidth}{%
+				\par\xdef\algpx at pdtemp{\the\prevdepth}% see https://tex.stackexchange.com/a/34982
+				\end{varwidth}\setbox0=\lastbox\usebox0%
+				\setbool{algpx at executeEndVarwidth}{false}%
+				\setbool{algpx at adjustHeight}{true}%
+				\setbool{algpx at restorePrevdepth}{true}%
+			}{}%
+			\ifbool{algpx at setNorth}{%
+				\algpx at setCodeBoxNorth{\the\ht0}% set north here shifted by height of current line
+				\setbool{algpx at setNorth}{false}%
+			}{}%
+			\algpx at setCodeBoxEast%
+			\ifbool{algpx at indJustEnded}{%
+				\algpx at setCodeBoxSouth{0pt}% set south here, don't shift after end with noEnd
+				% add space after boxes. Otherwise done by endCodeCommand, but this is not executed after End with noEnd
+				\algpx at addBoxSpacing{\value{algpx at startedBoxesCount}}{0pt}{\numexpr \value{algpx at endedBoxesCount} + 1 \relax}{0pt}%
+			}{%
+				\algpx at setCodeBoxSouth{\the\dp0}% set south here shifted by depth of current line
+			}%
+			%adjust stored prevdepth for ended boxes
+			\ifnumcomp{0}{<}{\value{algpx at endedBoxesCount}}{%
+				\edef\algpx at pdtemp{\dimexpr \algpx at pdtemp + \algpx at codeBoxSep \relax}%
+			}{%
+				\edef\algpx at pdtemp{\dimexpr \algpx at pdtemp + \algpx at codeBoxInnerSep + \algpx at codeBoxOuterSep \relax}%
+			}%
+			\algpx at setBoxesToStoredMax%
+			\FSPop{algpx at codeBoxStack}%
+			\stepcounter{algpx at endedBoxesCount}%
+		}{%
+			\PackageError{algpseudocodex}{No box to end}{}%
+		}%
+	}%
+	\ignorespaces%
+}
+
+% Draw box within a single line of code.
+% (Optional) first argument is style of the box.
+% Second argument is the string to print inside the box.
+\newcommand{\BoxedString}[2][algpxDefaultBox]{%
+	\ifnumcomp{\value{algpx at nestedBoxedStringCount}}{=}{0}{%
+		\setcounter{algpx at nestedBoxedStringMaxCount}{0}% reset max count for new boxes
+	}{}%
+	\stepcounter{algpx at nestedBoxedStringCount}%
+	\ifnumcomp{\value{algpx at nestedBoxedStringMaxCount}}{<}{\value{algpx at nestedBoxedStringCount}}{%
+		\setcounter{algpx at nestedBoxedStringMaxCount}{\value{algpx at nestedBoxedStringCount}}%
+	}{}%
+	\algpx at drawCodeBox{#1}{algpx at codeBoxNorth-\thealgpx at codeBoxCount}{algpx at codeBoxWest-\thealgpx at codeBoxCount}{algpx at codeBoxEast-\thealgpx at codeBoxCount}{algpx at codeBoxSouth-\thealgpx at codeBoxCount}%
+	\FSPush{algpx at codeBoxStack}{\thealgpx at codeBoxCount}%
+	\stepcounter{algpx at codeBoxCount}%
+	\algpx at setCodeBoxWest%
+	\ifmmode%
+		% This works in equation but not in align / displaystyle etc. gets lost
+		\savebox{\algpx at boxedStringBox}{$\m at th#2$}%
+		\usebox{\algpx at boxedStringBox}%
+	\else%
+		\savebox{\algpx at boxedStringBox}{#2}%
+		\usebox{\algpx at boxedStringBox}%
+	\fi%
+	\algpx at setCodeBoxEast%
+	\algpx at setCodeBoxNorth{\the\ht\algpx at boxedStringBox}%
+	\algpx at setCodeBoxSouth{\the\dp\algpx at boxedStringBox}%
+	\algpx at setBoxesToStoredMax%
+	\FSPop{algpx at codeBoxStack}%
+	\addtocounter{algpx at nestedBoxedStringCount}{-1}% BoxedString ends here
+	\ifnumcomp{\value{algpx at nestedBoxedStringCount}}{=}{0}{%
+		\algpx at addBoxSpacing{\value{algpx at nestedBoxedStringMaxCount}}{\the\ht\algpx at boxedStringBox}{\value{algpx at nestedBoxedStringMaxCount}}{\the\dp\algpx at boxedStringBox}%
+	}{}%
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Macros for indentation  lines
+%
+% start indented block
+\newcommand{\algpx at startIndent}{%
+	\ifbool{algpx at indLines}{%
+		\@tikzmarkNow{algpx at indentStart-\thealgpx at indentCount}%
+		\FSPush{algpx at indentStack}{\thealgpx at indentCount}%
+		\stepcounter{algpx at indentCount}%
+	}{}%
+}
+
+% end of indented block; optional argument 1 means that only interrupted by else, 2 means ended with until
+\newcommand{\algpx at endIndent}[1][0]{%
+	\ifbool{algpx at indLines}{%
+		\ifboolexpr{bool{algpx at noEnd} and test{\ifstrequal{#1}{0}}}{%
+			\setlength{\algpx at minIndDist}{1ex}% set mininum drawing distance to 1ex if ending without text
+		}{% otherwise, factor in additional line for end, else, or until
+			\setlength{\algpx at minIndDist}{\dimexpr \baselineskip + 1ex \relax}%
+		}%
+		\@tikzmarkNow{algpx at indentEnd-\FSTop{algpx at indentStack}}%
+		\tikz[overlay,remember picture]{%
+			\pgfextractx{\algpx at indStartX}{\pgfpointanchor{algpx at indentStart-\FSTop{algpx at indentStack}}{center}}%
+			\ifbool{algpx at indJustEnded}{%
+				% use same coordinates as for previous end
+				\pgfextracty{\algpx at indEndY}{\pgfpointanchor{algpx at indentEnd-\thealgpx at justUsedIndentCount}{center}}%
+				\draw[algpxIndentLine] ($(algpx at indentStart-\FSTop{algpx at indentStack})+(0.12em,-0.8ex)$) -- ($(\algpx at indStartX,\algpx at indEndY)+(0.12em,0ex)$) -- +(0.5em,0);%
+			}{%
+				% only draw if at least one line between start and end
+				\pgfextracty{\algpx at indStartY}{\pgfpointanchor{algpx at indentStart-\FSTop{algpx at indentStack}}{center}}%
+				\pgfextracty{\algpx at indEndY}{\pgfpointanchor{algpx at indentEnd-\FSTop{algpx at indentStack}}{center}}%
+				\ifdimcomp{\algpx at indStartY-\algpx at minIndDist}{>}{\algpx at indEndY}{%
+					\ifboolexpr{bool{algpx at noEnd} and test{\ifstrequal{#1}{0}}}{%
+						% x of end is at end of line, extract x of start and use that instead
+						\pgfextractx{\algpx at indStartX}{\pgfpointanchor{algpx at indentStart-\FSTop{algpx at indentStack}}{center}}%
+						% draw additional line to right if noend and line is not interrupted
+						\draw[algpxIndentLine] ($(algpx at indentStart-\FSTop{algpx at indentStack})+(0.12em,-0.8ex)$) -- ($(\algpx at indStartX,\algpx at indEndY)+(0.12em,0ex)$) -- +(0.5em,0);%
+					}{%
+						\draw[algpxIndentLine] ($(algpx at indentStart-\FSTop{algpx at indentStack})+(0.12em,-0.8ex)$) -- ($(algpx at indentEnd-\FSTop{algpx at indentStack})+(0.12em,2.0ex)$);%
+					}%
+				}{}%
+			}%
+		}%
+	}{}%
+	% set indJustEnded even if indLines are not drawn; also used for EndBox
+	\ifboolexpr{not bool{algpx at indJustEnded} and bool{algpx at noEnd} and test{\ifstrequal{#1}{0}}}{%
+		\setbool{algpx at indJustEnded}{true}%
+		\setcounter{algpx at justUsedIndentCount}{\FSTop{algpx at indentStack}}%
+	}{}%
+	\ifbool{algpx at indLines}{%
+		\FSPop{algpx at indentStack}%
+		\ifstrequal{#1}{1}{%
+			\algpx at startIndent% start new line if only interrupted
+		}{}%
+	}{}%
+}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Keywords
+%
+\algnewcommand\algorithmicend{\textbf{end}}
+\algnewcommand\algorithmicdo{\textbf{do}}
+\algnewcommand\algorithmicwhile{\textbf{while}}
+\algnewcommand\algorithmicfor{\textbf{for}}
+\algnewcommand\algorithmicforall{\textbf{for all}}
+\algnewcommand\algorithmicloop{\textbf{loop}}
+\algnewcommand\algorithmicrepeat{\textbf{repeat}}
+\algnewcommand\algorithmicuntil{\textbf{until}}
+\algnewcommand\algorithmicprocedure{\textbf{procedure}}
+\algnewcommand\algorithmicfunction{\textbf{function}}
+\algnewcommand\algorithmicif{\textbf{if}}
+\algnewcommand\algorithmicthen{\textbf{then}}
+\algnewcommand\algorithmicelse{\textbf{else}}
+\algnewcommand\algorithmicrequire{\textbf{Require:}}
+\algnewcommand\algorithmicensure{\textbf{Ensure:}}
+\algnewcommand\algorithmicreturn{\textbf{return}}
+\algnewcommand\algorithmicoutput{\textbf{output}}
+\algnewcommand\textproc{\textsc}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Loops, conditional statements, and functions
+%
+\algdef{SE}[WHILE]{While}{EndWhile}[1]{%
+	\algpx at startIndent\algpx at startCodeCommand\algorithmicwhile\ #1\ \algorithmicdo%
+}{%
+	\algpx at endIndent\algpx at startCodeCommand\algorithmicend\ \algorithmicwhile%
+}
+\algdef{SE}[FOR]{For}{EndFor}[1]{%
+	\algpx at startIndent\algpx at startCodeCommand\algorithmicfor\ #1\ \algorithmicdo%
+}{%
+	\algpx at endIndent\algpx at startCodeCommand\algorithmicend\ \algorithmicfor%
+}
+\algdef{S}[FOR]{ForAll}[1]{%
+	\algpx at startIndent\algpx at startCodeCommand\algorithmicforall\ #1\ \algorithmicdo%
+}
+\algdef{SE}[LOOP]{Loop}{EndLoop}{%
+	\algpx at startIndent\algpx at startCodeCommand\algorithmicloop%
+}{%
+	\algpx at endIndent\algpx at startCodeCommand\algorithmicend\ \algorithmicloop%
+}
+\algdef{SE}[REPEAT]{Repeat}{Until}{%
+	\algpx at startIndent\algpx at startCodeCommand\algorithmicrepeat%
+}[1]{%
+	\algpx at endIndent[2]\algpx at startCodeCommand\algorithmicuntil\ #1%
+}
+\algdef{SE}[IF]{If}{EndIf}[1]{%
+	\algpx at startIndent\algpx at startCodeCommand\algorithmicif\ #1\ \algorithmicthen%
+}{%
+	\algpx at endIndent\algpx at startCodeCommand\algorithmicend\ \algorithmicif%
+}
+\algdef{C}[IF]{IF}{ElsIf}[1]{%
+	\algpx at endIndent[1]\algpx at startCodeCommand\algorithmicelse\ \algorithmicif\ #1\ \algorithmicthen%
+}
+\algdef{Ce}[ELSE]{IF}{Else}{EndIf}{%
+	\algpx at endIndent[1]\algpx at startCodeCommand\algorithmicelse%
+}
+\algdef{SE}[PROCEDURE]{Procedure}{EndProcedure}[2]{%
+	\algpx at startIndent\algpx at startCodeCommand\algorithmicprocedure\ \textproc{#1}\ifstrempty{#2}{}{(#2)}%
+}{%
+	\algpx at endIndent\algpx at startCodeCommand\algorithmicend\ \algorithmicprocedure%
+}
+\algdef{SE}[FUNCTION]{Function}{EndFunction}[2]{%
+	\algpx at startIndent\algpx at startCodeCommand\algorithmicfunction\ \textproc{#1}\ifstrempty{#2}{}{(#2)}%
+}{%
+	\algpx at endIndent\algpx at startCodeCommand\algorithmicend\ \algorithmicfunction%
+}
+
+\ifbool{algpx at noEnd}{%
+	\algtext*{EndWhile}%
+	\algtext*{EndFor}%
+	\algtext*{EndLoop}%
+	\algtext*{EndIf}%
+	\algtext*{EndProcedure}%
+	\algtext*{EndFunction}%
+	%
+	% end indent line after (not before), to get correct y position for multiline text in last command
+	\apptocmd{\EndWhile}{\algpx at endIndent}{}{}%
+	\apptocmd{\EndFor}{\algpx at endIndent}{}{}%
+	\apptocmd{\EndLoop}{\algpx at endIndent}{}{}%
+	\apptocmd{\EndIf}{\algpx at endIndent}{}{}%
+	\apptocmd{\EndProcedure}{\algpx at endIndent}{}{}%
+	\apptocmd{\EndFunction}{\algpx at endIndent}{}{}%
+}{}%
+
+% execute \algpx at endCodeCommand before \State, \If etc.
+\pretocmd{\State}{\algpx at endCodeCommand}{}{}
+\pretocmd{\While}{\algpx at endCodeCommand}{}{}
+\pretocmd{\For}{\algpx at endCodeCommand}{}{}
+\pretocmd{\ForAll}{\algpx at endCodeCommand}{}{}
+\pretocmd{\Loop}{\algpx at endCodeCommand}{}{}
+\pretocmd{\Repeat}{\algpx at endCodeCommand}{}{}
+\pretocmd{\Until}{\algpx at endCodeCommand}{}{}
+\pretocmd{\If}{\algpx at endCodeCommand}{}{}
+\pretocmd{\ElsIf}{\algpx at endCodeCommand}{}{}
+\pretocmd{\Else}{\algpx at endCodeCommand}{}{}
+\pretocmd{\Procedure}{\algpx at endCodeCommand}{}{}
+\pretocmd{\Function}{\algpx at endCodeCommand}{}{}
+
+% for end commands that may not be printed, tell endCodeCommand whether we are using noEnd
+\ifbool{algpx at noEnd}{%
+	\pretocmd{\EndWhile}{\algpx at endCodeCommand[1]}{}{}%
+	\pretocmd{\EndFor}{\algpx at endCodeCommand[1]}{}{}%
+	\pretocmd{\EndLoop}{\algpx at endCodeCommand[1]}{}{}%
+	\pretocmd{\EndIf}{\algpx at endCodeCommand[1]}{}{}%
+	\pretocmd{\EndProcedure}{\algpx at endCodeCommand[1]}{}{}%
+	\pretocmd{\EndFunction}{\algpx at endCodeCommand[1]}{}{}%
+}{%
+	\pretocmd{\EndWhile}{\algpx at endCodeCommand[0]}{}{}%
+	\pretocmd{\EndFor}{\algpx at endCodeCommand[0]}{}{}%
+	\pretocmd{\EndLoop}{\algpx at endCodeCommand[0]}{}{}%
+	\pretocmd{\EndIf}{\algpx at endCodeCommand[0]}{}{}%
+	\pretocmd{\EndProcedure}{\algpx at endCodeCommand[0]}{}{}%
+	\pretocmd{\EndFunction}{\algpx at endCodeCommand[0]}{}{}%
+}%
+
+% execute \algpx at startCodeCommand after \State (this is done for loops etc. inside the definitions above)
+\apptocmd{\State}{\algpx at startCodeCommand}{}{}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Other declarations
+%
+
+% dirty hack: execute drawing in argument of item and rest of \algpx at startCodeCommand outside
+% argument: text in item[.]
+\newcommand{\algpx at drawInItem}[1]{%
+	\item[%
+		\whileboolexpr{test{\ifnumcomp{0}{<}{\FSSize{algpx at startNewCodeBoxQueue}}}}{%
+			\FSPush{algpx at codeBoxStack}{\FSTop{algpx at startNewCodeBoxQueue}}%
+			\algpx at drawCodeBox{algpx at codeBoxStyle\FSTop{algpx at startNewCodeBoxQueue}}{algpx at codeBoxNorth-\FSTop{algpx at startNewCodeBoxQueue}}{algpx at codeBoxWest-\FSTop{algpx at startNewCodeBoxQueue}}{algpx at codeBoxEast-\FSTop{algpx at startNewCodeBoxQueue}}{algpx at codeBoxSouth-\FSTop{algpx at startNewCodeBoxQueue}}%
+			\FSPop{algpx at startNewCodeBoxQueue}%
+			\stepcounter{algpx at startedBoxesCount}%
+		}%
+		#1%
+	]%
+	\setbool{algpx at indJustEnded}{false}%
+	\setcounter{algpx at startedBoxesCount}{0}%
+	\setcounter{algpx at endedBoxesCount}{0}%
+	\setcounter{algpx at nestedBoxedStringMaxCount}{0}%
+	\settowidth{\algpx at tmpLen}{#1}%
+	\algpx at setCodeBoxWest[\dimexpr \labelsep + \algpx at tmpLen \relax]%
+	\setbool{algpx at firstLine}{false}%
+	\setbool{algpx at executeEndVarwidth}{true}%
+	\begin{varwidth}[t]{\dimexpr \linewidth - \labelsep - \algpx at tmpLen + \leftmargin \relax}%
+	\settoheight{\algpx at tmpLen}{#1}%
+	\rule{0pt}{\algpx at tmpLen}%
+}
+
+\algnewcommand\Require{%
+	\algpx at endCodeCommand%
+	\ifnumcomp{0}{<}{\FSSize{algpx at startNewCodeBoxQueue}}{\setbool{algpx at setNorth}{true}}{}%
+	\ifboolexpr{bool{algpx at spaceRequire} and not bool{algpx at firstLine}}{%
+		\medskip%
+	}{}%
+	\algpx at drawInItem{\algorithmicrequire}%
+}
+
+\algnewcommand\Ensure{%
+	\algpx at endCodeCommand%
+	\ifnumcomp{0}{<}{\FSSize{algpx at startNewCodeBoxQueue}}{\setbool{algpx at setNorth}{true}}{}%
+	\algpx at drawInItem{\algorithmicensure}%
+}
+
+\algnewcommand\Return{\algorithmicreturn{} }
+\algnewcommand\Output{\algorithmicoutput{} }
+\algnewcommand\Call[2]{\textproc{#1}\ifstrempty{#2}{}{(#2)}}
+
+%% internal methods to format comment
+% format according to comment format
+\newcommand{\algpx at commentFormat}[1]{%
+	\ifbool{algpx at italicComments}{%
+		\textit{\textcolor{\algpx at commentColor}{#1}}%
+	}{%
+		\textcolor{\algpx at commentColor}{#1}%
+	}%
+}
+
+% get string for inline comment including begin and end markers
+\newcommand{\algpx at commentString}[1]{%
+	\algpx at commentFormat{\algpx at beginComment#1\algpx at endComment}%
+}
+
+% redefine \Comment
+\algrenewcomment[1]{%
+	\ifbool{algpx at rightComments}{%
+		\settowidth{\algpx at tmpLen}{\algpx at commentString{#1}}% set temp variable to width of comment
+		\tabto{\CurrentLineWidth}% this saves current position in \TabPrevPos and fixes spacing up to here
+		\ifdimcomp{\algpx at tmpLen}{<}{\dimexpr \linewidth - \TabPrevPos \relax}{% check whether comment fits on line
+			\tabto{\dimexpr \linewidth - \algpx at tmpLen \relax}% move position to right justify text
+			\algpx at commentString{#1}% print comment
+		}{%
+			\algpx at commentString{#1}% if it doesn't fit, just print normally, allowing line break
+		}%
+	}{%
+		\algpx at commentString{#1}% just print normally if not right justified
+	}%
+	\ignorespaces%
+}%
+
+% Long comment starting on new line.
+% Can span several lines and in contrast to \Comment, never right justified.
+\algdef{SL}[LCOMMENT]{LComment}{0}[1]{%
+	\algpx at startCodeCommandX{\algpx at commentFormat{\algpx at beginLComment}}{\algpx at commentFormat{\algpx at endLComment}}%
+	\algpx at commentFormat{#1}% print actual comment
+	\tabto{\CurrentLineWidth}% this saves current position in \TabPrevPos and fixes spacing up to here
+	\setlength{\algpx at tmpLen}{\dimexpr \linewidth - \TabPrevPos \relax}% set to remaining space on line
+	\makebox[0pt][l]{% start box here that takes no space (otherwise impacts spacing of text before)
+		\rule{\algpx at tmpLen}{0pt}% draw invisible rule from beginning of line until end of comment text
+		\algpx at commentFormat{\algpx at endLComment}% print end comment at the end
+		\algpx at setCodeBoxEast% since this takes 0 space, we have to set east of code box here explicitly
+	}%
+}%
+
+\pretocmd{\LComment}{\algpx at endCodeCommand}{}{}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Execute at beginning and end of algorithmic environment
+%
+\AtBeginEnvironment{algorithmic}{%
+	\setbool{algpx at firstLine}{true}%
+	\setbool{algpx at setNorth}{false}%
+	\setbool{algpx at executeEndVarwidth}{false}%
+	\setbool{algpx at adjustHeight}{false}%
+	\setbool{algpx at restorePrevdepth}{false}%
+	\setcounter{algpx at startedBoxesCount}{0}%
+	\setcounter{algpx at endedBoxesCount}{0}%
+}
+
+\AtEndEnvironment{algorithmic}{%
+	\algpx at endCodeCommand%
+	% Error checking
+	\ifboolexpr{test{\ifnumcomp{0}{<}{\FSSize{algpx at codeBoxStack}}} or test {\ifnumcomp{0}{<}{\FSSize{algpx at startNewCodeBoxQueue}}}}{%
+		\PackageError{algpseudocodex}{Some boxes have not ended}{}%
+	}{}%
+}


Property changes on: trunk/Master/texmf-dist/tex/latex/algpseudocodex/algpseudocodex.sty
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/tlpkg/bin/tlpkg-ctan-check
===================================================================
--- trunk/Master/tlpkg/bin/tlpkg-ctan-check	2020-08-16 23:53:37 UTC (rev 56124)
+++ trunk/Master/tlpkg/bin/tlpkg-ctan-check	2020-08-17 20:58:45 UTC (rev 56125)
@@ -32,7 +32,8 @@
     adrconv adtrees advdate
     ae aeguill afparticle afthesis
     aguplus aiaa aichej ajl akktex akletter akshar alegreya alertmessage
-    alg algobox algolrevived algorithm2e algorithmicx algorithms algxpar
+    alg algobox algolrevived
+    algorithm2e algorithmicx algorithms algpseudocodex algxpar
     aligned-overset
     alkalami allrunes almendra almfixed alnumsec
     alpha-persian alphalph

Added: trunk/Master/tlpkg/tlpsrc/algpseudocodex.tlpsrc
===================================================================
Modified: trunk/Master/tlpkg/tlpsrc/collection-mathscience.tlpsrc
===================================================================
--- trunk/Master/tlpkg/tlpsrc/collection-mathscience.tlpsrc	2020-08-16 23:53:37 UTC (rev 56124)
+++ trunk/Master/tlpkg/tlpsrc/collection-mathscience.tlpsrc	2020-08-17 20:58:45 UTC (rev 56125)
@@ -13,6 +13,7 @@
 depend algorithm2e
 depend algorithmicx
 depend algorithms
+depend algpseudocodex
 depend algxpar
 depend aligned-overset
 depend amscdx



More information about the tex-live-commits mailing list.