diff options
author | Karl Berry <karl@freefriends.org> | 2019-06-30 21:01:23 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2019-06-30 21:01:23 +0000 |
commit | 900b22de16e6b4ced56d7f4ab57238d4a813d0b2 (patch) | |
tree | 2c44dd63c6e8dacff11509e8f81b8e9b7639443b | |
parent | 7984fe8874929e533690ce453b4f74865352e267 (diff) |
pseudo (30jun19)
git-svn-id: svn://tug.org/texlive/trunk@51511 c570f23f-e606-0410-a88d-b1316a301751
-rw-r--r-- | Master/texmf-dist/doc/latex/pseudo/VERSION | 2 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/pseudo/doc/fig/hilitefig.tex | 30 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/pseudo/doc/fig/pausefig.tex | 37 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/pseudo/doc/pseudo.pdf | bin | 512746 -> 525757 bytes | |||
-rw-r--r-- | Master/texmf-dist/doc/latex/pseudo/doc/pseudo.tex | 165 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/pseudo/pseudo.sty | 43 |
6 files changed, 209 insertions, 68 deletions
diff --git a/Master/texmf-dist/doc/latex/pseudo/VERSION b/Master/texmf-dist/doc/latex/pseudo/VERSION index 7dea76edb3d..9459d4ba2a0 100644 --- a/Master/texmf-dist/doc/latex/pseudo/VERSION +++ b/Master/texmf-dist/doc/latex/pseudo/VERSION @@ -1 +1 @@ -1.0.1 +1.1 diff --git a/Master/texmf-dist/doc/latex/pseudo/doc/fig/hilitefig.tex b/Master/texmf-dist/doc/latex/pseudo/doc/fig/hilitefig.tex index 7ea3be4a9cc..8cffae23a43 100644 --- a/Master/texmf-dist/doc/latex/pseudo/doc/fig/hilitefig.tex +++ b/Master/texmf-dist/doc/latex/pseudo/doc/fig/hilitefig.tex @@ -1,39 +1,11 @@ \documentclass[beamer,preview,multi]{standalone} -% \documentclass{beamer} -% \usepackage{mlh} \usepackage{pseudo} -% \pseudoset{kw, hpad, kwfont=\bfseries} -% \pseudoset{kw, hpad, kwfont=\bfseries} -\pseudoset{hpad} +\pseudoset{hpad, compact} \standaloneenv{myenv} -% XXX My \== gets ruined by the standalone preview option for some reason. - \begin{document} -% \begin{standaloneframe} -% \begin{myenv} -% \begin{pseudo}[hpad] <1-3> -% if $x < y$ \\+ <2> [bol=\onslide<2->] -% $\id{foo} = 2$ \\- [hl<3>, bol=\onslide<3->] -% howdy -% \end{pseudo} -% \end{myenv} -% \end{standaloneframe} - -% \begin{standaloneframe} -% \begin{myenv} -% \begin{pseudo} <1,4> -% while $a \neq b$ \\+ <2> -% if $a > b$ \\+ -% $a = a - b$ \\- <3> -% else $b = b - a$ \\- <5> -% return $a$ -% \end{pseudo} -% \end{myenv} -% \end{standaloneframe} - \begin{standaloneframe} \begin{myenv} \begin{pseudo} diff --git a/Master/texmf-dist/doc/latex/pseudo/doc/fig/pausefig.tex b/Master/texmf-dist/doc/latex/pseudo/doc/fig/pausefig.tex index 9cb10a48e77..bbc7ee91fd2 100644 --- a/Master/texmf-dist/doc/latex/pseudo/doc/fig/pausefig.tex +++ b/Master/texmf-dist/doc/latex/pseudo/doc/fig/pausefig.tex @@ -1,48 +1,14 @@ \documentclass[beamer,preview,multi]{standalone} -% \documentclass{beamer} - -% \usepackage[notmath]{sansmathfonts} -% \usepackage{mlh} \usepackage{pseudo} -% \pseudoset{kw, hpad, kwfont=\bfseries, prfont=\sffamily} - -% \usepackage{expl3,xparse} -% -% \makeatletter -% \ExplSyntaxOn -% -% \int_new:N \g_@@_row_num_int -% -% \cs_new:Nn \@@_onslide: { -% \int_gincr:N \g_@@_row_num_int -% \onslide<\g_@@_row_num_int-> -% } -% -% \NewDocumentCommand \pseudostartslide {} { -% \int_zero:N \g_@@_row_num_int -% } -% -% \cs_set_eq:NN \pseudoonslide \@@_onslide: -% % \cs_set_eq:NN \oldctrcmd \__pseudo_old_counter_cmds: -% -% \ExplSyntaxOff -% \makeatother +\pseudoset{compact} \setbeamercovered{transparent} \standaloneenv{myenv} \begin{document} - -% \begin{frame} \begin{standaloneframe} \begin{myenv} -% XXX Begins on line 2, as it hasn't been incremented yet. And several -% solutions (like \onslide<+-> or \pause) just break down. -% XXX Working on an "uncover" option. Should probably have a similar thing -% that dims out the previous ones -- or maybe even a "dim" key... -% -% XXX Use the suffix package to get the starred versions \begin{pseudo}[pause] Eeny \\ Meeny \\ @@ -51,6 +17,5 @@ \end{pseudo} \end{myenv} \end{standaloneframe} -% \end{frame} \end{document} diff --git a/Master/texmf-dist/doc/latex/pseudo/doc/pseudo.pdf b/Master/texmf-dist/doc/latex/pseudo/doc/pseudo.pdf Binary files differindex 8bc210729cc..c9fe6491a34 100644 --- a/Master/texmf-dist/doc/latex/pseudo/doc/pseudo.pdf +++ b/Master/texmf-dist/doc/latex/pseudo/doc/pseudo.pdf diff --git a/Master/texmf-dist/doc/latex/pseudo/doc/pseudo.tex b/Master/texmf-dist/doc/latex/pseudo/doc/pseudo.tex index a283879b677..25c5c099e27 100644 --- a/Master/texmf-dist/doc/latex/pseudo/doc/pseudo.tex +++ b/Master/texmf-dist/doc/latex/pseudo/doc/pseudo.tex @@ -438,6 +438,15 @@ repeat the following while $a\neq b$ \\+ \end{texexp} \noindent +Spacing is handled similarly to in \LaTeX\ lists, with \cs{topsep} and +\cs{parskip} added before and after, as well as \cs{partopsep} whenever the +environment starts a new paragraph. The left margin (how much the pseudocode +is indented wrt.\ the surrounding text) is set by the \refk{left-margin} key +(initially \code{0pt}).\footnote{If \refe{pseudo} occurs in a box such as +\code{fbox}, or a \pkg[https://ctan.org/pkg/pgf]{tikz} node, this spacing is +dropped.} + +\medskip\noindent There are also some styling commands for special elements of the pseudocode: \begin{texexp} @@ -1044,6 +1053,45 @@ alphabetical order), you'll find definitions of a couple of counters here \fontcmd{cn} \end{docCommand} +\begin{docKey}{compact}{\,=\,\meta{boolean}}{default \code{true}, initially + \code{false}} + + \parindent1.5em + \noindent + The \refe{pseudo} environment emulates the built-in \LaTeX\ lists when it + comes to spacing above and below, in normal text. If the environment is + part of an ongoing paragraph, paragraphs will be inserted above and below, + along with whitespace specified by \refk{topsep} and \refk{parskip}. If + the environment begins a paragraph of its own, additional whitespace is + added, as specified by \refk{partopsep}. It is also possible to specify + space to insert to the left of the environment, using \refk{left-margin}. + + However, these spacing commands don't work well inside \cs{mbox}, + \cs{fbox}, etc. To avoid getting into trouble, \pkg{pseudo} determines + that the environment should be \emph{compact}, and drop this surrounding + space, if we're in inner horizontal mode at the beginning of the + environment. + +\begin{texexp} +% In preamble: +% \usepackage{tikz} +\begin{tikzpicture} + \draw (0,0) node [draw] {% + \begin{pseudo} + if we're in a node \\+ + there's no added space + \end{pseudo}}; +\end{tikzpicture} +\end{texexp} + + This may not be enough, however. For example, if you're using + \pkg[https://ctan.org/pkg/standalone]{standalone} to produce individual + pseudocode images, this compactness will \emph{not} be triggered + automatically. In such cases, you can override the behavior using the + \refk{compact} trigger, manually specifying whether you want the + pseudocode to be compact or not. +\end{docKey} + \begin{docCommand}{ct}{\marg{text}} Indicates that \meta{text} is a comment, \ct{typeset like this}. You can customize the comment appearance using \refk{ctfont}, \refk{ct-left} and @@ -1551,6 +1599,40 @@ goto \tn{\ref{li:label}} get the results you want by specifying your own \refk{preamble} in full. \end{docKey} +\begin{docKey}{left-margin}{\,=\,\meta{length}}{\initialkeyvalue{\code{0pt}}} + Sets the left margin of the \code{pseudo} environment, i.e., how far it is + indented wrt.\ the surrounding text: +\begin{texexp} +Lorem ipsum dolor sit amet: + +\begin{pseudo}[left-margin=1.25em] +consetetur sadipscing elitr \\ +sed diam nonumy eirmod tempor +\end{pseudo} + +Invidunt ut labore et dolore magna. +\end{texexp} + +To have the environment indented as (the beginning of) any normal paragraph, +you could use \code*{left-margin = \cs{parindent}}. Note that +\refk{left-margin}, as well as the spacing above and below the \refe{pseudo} +environment, is turned off inside \cs{mbox} and the like: +\begin{texexp} +\pseudoset{left-margin=1cm} % Won't affect box contents +\fbox{\begin{pseudo*} +I'm a livin' in a box \\ +I'm a livin' in a cardboard box +\end{pseudo*}} +\end{texexp} +Note that as opposed to \refk{topsep}, \refk{parskip} and \refk{partopsep}, we +are \emph{not} working with one of the built-in list spacing commands; +\cs{leftmargin} has no effect on this key (which is why the hyphenated naming +style of other keys such as \refk{label-align} or \refk{indent-text} is also +adopted for \refk{left-margin}). +% +See also \refk{compact}. +\end{docKey} + \begin{docKey}{line-height}{\,=\,\meta{factor}}{\initialkeyvalue{\code{1}}} The \meta{factor} with which to multiply the ordinary line height. For simple, sparse pseudocode, the oridnary line height works well, but if @@ -1569,6 +1651,16 @@ goto \tn{\ref{li:label}} See also \refc{tn}. \end{docCommand} +\begin{docKey}{parskip}{\,=\,\meta{length}}{\initialkeyvalue{\cs{parskip}}} + Sets a \pkg{pseudo}-local copy of \cs{parskip} for use in vertical spacing + above and below the \refe{pseudo} environment. See also \refk{compact}. +\end{docKey} + +\begin{docKey}{partopsep}{\,=\,\meta{length}}{\initialkeyvalue{\cs{partopsep}}} + Sets a \pkg{pseudo}-local copy of \cs{partopsep} for use in vertical + spacing above and below the \refe{pseudo} environment. See also \refk{compact}. +\end{docKey} + \begin{docKey}{pause}{}{\novaluekey} Equivalent to \code*{\refk{eol-append} = \cs{pause}} (see \cref{p:pause}). \end{docKey} @@ -1856,6 +1948,11 @@ See also \refk{indent-level}. \shortcutted{tn}{textnormal} \end{docCommand} +\begin{docKey}{topsep}{\,=\,\meta{length}}{\initialkeyvalue{\cs{topsep}}} + Sets a \pkg{pseudo}-local copy of \cs{topsep} for use in vertical spacing + above and below the \refe{pseudo} environment. See also \refk{compact}. +\end{docKey} + \begin{docKey}{unknown}{}{} Unknown keys are checked for \pkg[https://ctan.org/pkg/beamer]{beamer} overlay specifications. That is, if an unknown key has the form @@ -2894,6 +2991,9 @@ typesetting the pseudocode. hsep .tl_set:N = \l_@@_hsep_tl, hsep .initial:n = .75em, + left-margin .tl_set:N = \l_@@_left_margin_tl, + left-margin .initial:n = 0pt, + label .tl_set:N = \l_@@_label_tl, label .initial:n = \arabic*, @@ -3042,6 +3142,32 @@ The prefix is inserted by the row separator command. end-tabular .tl_set:N = \l_@@_end_tabular_tl, end-tabular .initial:n = \end{tabular}, \end{source} +\paragraph{List-like spacing.} Space above and below is handled similarly to +in the built-in \LaTeX\ lists, with the option of locally overriding +\cs{topsep}, \cs{parskip} and \cs{partopsep}, with \refk{compact} used to +control the presence of this spacing (overriding the ordinary automatic choice +based on the current mode). +\begin{source} + topsep .tl_set:N = \l_@@_topsep_tl, + topsep .initial:n = { \topsep }, + + parskip .tl_set:N = \l_@@_parskip_tl, + parskip .initial:n = { \parskip }, + + partopsep .tl_set:N = \l_@@_partopsep_tl, + partopsep .initial:n = { \partopsep }, + + compact .meta:n = { + compact-val = #1, + compact-def = true, + }, + compact .default:n = true, + + % For internal use: + compact-val .bool_set:N = \l_@@_compact_bool, + compact-def .bool_set:N = \l_@@_compact_def_bool, +\end{source} + \paragraph{Details.} Finally, some tweakable parameters. \begin{source} eqs-scale .fp_set:N = \l_@@_eqs_scale_fp, @@ -3053,6 +3179,7 @@ The prefix is inserted by the row separator command. eqs-pad .tl_set:N = \l_@@_eqs_pad_tl, eqs-pad .initial:n = 0.28mu, + } \end{source} % @@ -3290,6 +3417,7 @@ various macros already described. \NewDocumentEnvironment { pseudo } { !+o !s d<> +O{ } } { \group_begin: + \@@_gsave_as:NN \\ \c_@@_saved_cr_cs \@@_gsave_as:NN \= \c_@@_saved_eq_cs @@ -3304,6 +3432,32 @@ various macros already described. } \@@_set_indent_length: + % If not manually set as compact/noncompact, set automatically: + \bool_if:NF \l_@@_compact_def_bool { + \bool_set:Nn \l_@@_compact_bool { + \mode_if_horizontal_p: && \mode_if_inner_p: + } + } + + \bool_if:nF { \l_@@_compact_bool } { + + \skip_set:Nn \l_tmpa_skip { + \l_@@_topsep_tl + \l_@@_parskip_tl + } + \mode_if_vertical:TF { + \skip_add:Nn \l_tmpa_skip { \l_@@_partopsep_tl } + } { + \unskip \par + } + + \addvspace { \l_tmpa_skip } + + \noindent + \skip_horizontal:n{ \dim_eval:n { \l_@@_left_margin_tl } } + + } + + \dim_set:Nn \tabcolsep { \l_@@_hsep_tl / 2 } \tl_set:Nn \arraystretch { \fp_to_decimal:n { \l_@@_line_height_fp } } @@ -3356,6 +3510,17 @@ the line: \tl_use:N \l_@@_end_tabular_tl + + \bool_if:nF { \l_@@_compact_bool } { + + \mode_if_vertical:F { + \unskip \par + } + + \addvspace{ \l_tmpa_skip } + + } + \group_end: } diff --git a/Master/texmf-dist/tex/latex/pseudo/pseudo.sty b/Master/texmf-dist/tex/latex/pseudo/pseudo.sty index 3237e1e9fbe..1d400840d96 100644 --- a/Master/texmf-dist/tex/latex/pseudo/pseudo.sty +++ b/Master/texmf-dist/tex/latex/pseudo/pseudo.sty @@ -20,8 +20,8 @@ % OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE % SOFTWARE. % -\def \pseudoversion {1.0.1} -\def \pseudodate {2019-06-27} +\def \pseudoversion {1.1} +\def \pseudodate {2019-06-30} \RequirePackage{expl3} \ProvidesExplPackage {pseudo} @@ -255,6 +255,8 @@ hpad .default:n = 0.3em, hsep .tl_set:N = \l__pseudo_hsep_tl, hsep .initial:n = .75em, + left-margin .tl_set:N = \l__pseudo_left_margin_tl, + left-margin .initial:n = 0pt, label .tl_set:N = \l__pseudo_label_tl, label .initial:n = \arabic*, label-align .code:n = @@ -353,6 +355,19 @@ begin-tabular .initial:n = \begin{tabular}{\pseudopreamble}, end-tabular .tl_set:N = \l__pseudo_end_tabular_tl, end-tabular .initial:n = \end{tabular}, + topsep .tl_set:N = \l__pseudo_topsep_tl, + topsep .initial:n = { \topsep }, + parskip .tl_set:N = \l__pseudo_parskip_tl, + parskip .initial:n = { \parskip }, + partopsep .tl_set:N = \l__pseudo_partopsep_tl, + partopsep .initial:n = { \partopsep }, + compact .meta:n = { + compact-val = #1, + compact-def = true, + }, + compact .default:n = true, + compact-val .bool_set:N = \l__pseudo_compact_bool, + compact-def .bool_set:N = \l__pseudo_compact_def_bool, eqs-scale .fp_set:N = \l__pseudo_eqs_scale_fp, eqs-scale .initial:n = 0.6785, eqs-sep .tl_set:N = \l__pseudo_eqs_sep_tl, @@ -470,6 +485,24 @@ \pseudoset { #1 } } \__pseudo_set_indent_length: + \bool_if:NF \l__pseudo_compact_def_bool { + \bool_set:Nn \l__pseudo_compact_bool { + \mode_if_horizontal_p: && \mode_if_inner_p: + } + } + \bool_if:nF { \l__pseudo_compact_bool } { + \skip_set:Nn \l_tmpa_skip { + \l__pseudo_topsep_tl + \l__pseudo_parskip_tl + } + \mode_if_vertical:TF { + \skip_add:Nn \l_tmpa_skip { \l__pseudo_partopsep_tl } + } { + \unskip \par + } + \addvspace { \l_tmpa_skip } + \noindent + \skip_horizontal:n{ \dim_eval:n { \l__pseudo_left_margin_tl } } + } \dim_set:Nn \tabcolsep { \l__pseudo_hsep_tl / 2 } \tl_set:Nn \arraystretch { \fp_to_decimal:n { \l__pseudo_line_height_fp } } @@ -486,6 +519,12 @@ \__pseudo_bol: } { \tl_use:N \l__pseudo_end_tabular_tl + \bool_if:nF { \l__pseudo_compact_bool } { + \mode_if_vertical:F { + \unskip \par + } + \addvspace{ \l_tmpa_skip } + } \group_end: } \pseudodefinestyle{starred}{ |