summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/pseudo/pseudo.sty
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/pseudo/pseudo.sty')
-rw-r--r--macros/latex/contrib/pseudo/pseudo.sty415
1 files changed, 351 insertions, 64 deletions
diff --git a/macros/latex/contrib/pseudo/pseudo.sty b/macros/latex/contrib/pseudo/pseudo.sty
index 938fb4e887..850b19fa14 100644
--- a/macros/latex/contrib/pseudo/pseudo.sty
+++ b/macros/latex/contrib/pseudo/pseudo.sty
@@ -1,6 +1,6 @@
% MIT License
%
-% Copyright (c) 2019 Magnus Lie Hetland
+% Copyright (c) 2019-2022 Magnus Lie Hetland
%
% Permission is hereby granted, free of charge, to any person obtaining a copy
% of this software and associated documentation files (the "Software"), to deal
@@ -20,8 +20,8 @@
% OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
% SOFTWARE.
%
-\def \pseudoversion {1.1.3}
-\def \pseudodate {2019/10/30}
+\def \pseudoversion {1.2}
+\def \pseudodate {2022/07/14}
\RequirePackage{expl3}
\ProvidesExplPackage
{pseudo}
@@ -29,6 +29,7 @@
{\pseudoversion}
{Straightforward pseudocode}
\RequirePackage{xparse}
+\RequirePackage{pgfkeys}
\RequirePackage{array, xcolor, colortbl}
\RequirePackage{l3keys2e}
\RequirePackage{aliascnt}
@@ -42,34 +43,36 @@
\dim_new:N \pseudoindentlength
\int_new:N \g__pseudo_indent_level_int
\int_new:N \l__pseudo_initial_indent_level_int
+\bool_new:N \l__pseudo_in_eol_bool
\cs_generate_variant:Nn \quark_if_no_value:nTF { VTF }
+\cs_generate_variant:Nn \tl_if_novalue:nTF { VTF }
\cs_generate_variant:Nn \tl_set:Nn { Ne }
-\cs_new:Nn \__pseudo_undef_col:n {
+\cs_new:Npn \__pseudo_undef_col:n #1 {
\tl_set_eq:cN { NC@find@ \token_to_str:N #1 } \scan_stop:
}
-\cs_new:Nn \__pseudo_def_col:nn {
+\cs_new:Npn \__pseudo_def_col:nn #1 #2 {
\__pseudo_undef_col:n { #1 }
\newcolumntype { #1 } { #2 }
}
-\cs_new:Nn \__pseudo_meta_new_cmd:NNnn {
+\cs_new:Npn \__pseudo_meta_new_cmd:NNnn #1 #2 #3 #4 {
\tl_set:Nn \l_tmpa_tl {pseudo \cs_to_str:N #2}
\exp_args:Nc
#1 \l_tmpa_tl #3 {#4}
\cs_if_free:NT #2 {\cs_gset_eq:Nc #2 \l_tmpa_tl}
}
-\cs_new:Nn \__pseudo_new_cmd:Nnn {
+\cs_new:Npn \__pseudo_new_cmd:Nnn #1 #2 #3 {
\__pseudo_meta_new_cmd:NNnn
\NewDocumentCommand #1 {{#2}} {
#3
}
}
-\cs_new:Nn \__pseudo_new_ecmd:Nnn {
+\cs_new:Npn \__pseudo_new_ecmd:Nnn #1 #2 #3 {
\__pseudo_meta_new_cmd:NNnn
\def #1 {#2} {
#3
}
}
-\cs_new:Nn \__pseudo_new_dec:nn {
+\cs_new:Npn \__pseudo_new_dec:nn #1 #2 {
\tl_set:Nn \l_tmpa_tl { DeclarePseudo #1 }
\exp_args:Nc
\DeclareDocumentCommand \l_tmpa_tl { mm } {
@@ -78,7 +81,7 @@
}
}
}
-\cs_new:Nn \__pseudo_per_char:nnn {
+\cs_new:Npn \__pseudo_per_char:nnn #1 #2 #3 {
\peek_charcode_remove:NTF { #1 } {
#2
\__pseudo_per_char:nnn{#1}{#2}{#3}
@@ -86,7 +89,7 @@
#3
}
}
-\cs_new:Nn \__pseudo_set_indent_length: {
+\cs_new:Npn \__pseudo_set_indent_length: {
\quark_if_no_value:VTF \l__pseudo_indent_length_tl {
\hbox_set:Nn \l_tmpa_box { \l__pseudo_indent_text_tl }
\dim_set:Nn \pseudoindentlength { \box_wd:N \l_tmpa_box }
@@ -94,31 +97,41 @@
\dim_set:Nn \pseudoindentlength \l__pseudo_indent_length_tl
}
}
-\cs_new:Nn \__pseudo_indent:N {
- \skip_horizontal:n{ \pseudoindentlength * #1 }
+\cs_new:Npn \__pseudo_indent:N #1 {
+ \tl_if_novalue:VTF \l__pseudo_indent_mark_tl {
+ \skip_horizontal:n{ \pseudoindentlength * #1 }
+ } {
+ \group_begin:
+ \color{\l__pseudo_indent_color_tl}
+ \int_step_inline:nn { \g__pseudo_indent_level_int } {
+ \l__pseudo_indent_mark_tl
+ \skip_horizontal:n{ \pseudoindentlength }
+ }
+ \group_end:
+ }
\ignorespaces
}
-\cs_new:Nn \__pseudo_drop_ctr:n {
+\cs_new:Npn \__pseudo_drop_ctr:n #1 {
\cs_undefine:c { c@ #1 }
}
-\cs_new:Nn \__pseudo_copy_ctr:nn {
+\cs_new:Npn \__pseudo_copy_ctr:nn #1 #2 {
\__pseudo_drop_ctr:n { #1 }
\newaliascnt { #1 } { #2 }
}
-\cs_new:Nn \__pseudo_star_setup: {
+\cs_new:Npn \__pseudo_star_setup: {
\cs_if_exist:cT { c@ * } {
\__pseudo_copy_ctr:nn { __pseudo_orig_* } { * }
}
\__pseudo_copy_ctr:nn { * } { pseudoline }
\group_insert_after:N \__pseudo_star_reset:
}
-\cs_new:Nn \__pseudo_star_reset: {
+\cs_new:Npn \__pseudo_star_reset: {
\cs_if_exist:cT { c@ __pseudo_orig_* } {
\__pseudo_copy_ctr:nn { * } { __pseudo_orig_* }
\cs_undefine:c { c@ __pseudo_orig_* }
}
}
-\cs_new:Nn \__pseudo_save_label: {
+\cs_new:Npn \__pseudo_save_label: {
\int_set:Nn \l_tmpa_int {\arabic{pseudoline}}
\int_compare:nF {\l_tmpa_int = \g__pseudo_last_saved_line_int} {
\addtocounter{pseudoline}{-1}
@@ -129,7 +142,7 @@
\DeclareDocumentCommand \pseudosavelabel { } {
\__pseudo_save_label:
}
-\cs_new:Nn \__pseudo_gsave_as:NN {
+\cs_new:Npn \__pseudo_gsave_as:NN #1 #2 {
\cs_gset_eq:NN #2 #1
\group_insert_after:N \cs_gset_eq:NN
\group_insert_after:N #1
@@ -140,7 +153,7 @@
\__pseudo_new_cmd:Nnn \kw { m } { \textnormal {\kwfont { #1 } } }
\__pseudo_new_cmd:Nnn \cn { m } { \textnormal {\cnfont { #1 } } }
\__pseudo_new_cmd:Nnn \id { m } { \textnormal {\idfont { #1 } } }
-\cs_new:Nn \__pseudo_b_or_bx: {
+\cs_new:Npn \__pseudo_b_or_bx: {
\group_begin:
\cs_if_exist:NT \@defaultsubs {
\__pseudo_gsave_as:NN \@defaultsubs \__pseudo_defaultsubs
@@ -154,7 +167,7 @@
\group_end:
\__pseudo_b_or_bx:
}
-\cs_new:Nn \__pseudo_fmt_pr:n {
+\cs_new:Npn \__pseudo_fmt_pr:n #1 {
\textnormal{\prfont{ #1 }}
}
\NewDocumentCommand \__pseudo_parse_paren_args { +d() } {
@@ -175,7 +188,7 @@
\__pseudo_parse_paren_args
}
}
-\cs_new:Nn \__pseudo_fmt_fn:n {
+\cs_new:Npn \__pseudo_fmt_fn:n #1 {
\textnormal{\fnfont{ #1 }}
}
\__pseudo_new_cmd:Nnn \fn { m } {
@@ -186,8 +199,9 @@
}
\__pseudo_new_ecmd:Nnn \hd { #1 ( #2 ) } {
\multicolumn{2}
- {\__pseudo_hd_preamble}
+ {\pseudohdpreamble}
{\__pseudo_fmt_pr:n{#1}\ensuremath{(#2)}}
+ \tl_set_eq:NN \l__pseudo_extra_space_tl \l__pseudo_hd_space_tl
}
\__pseudo_new_cmd:Nnn \st { +m } {
\textnormal {
@@ -232,21 +246,27 @@
}
}
\cs_gset_eq:NN \__pseudo_eq: \=
-\cs_new:Nn \__pseudo_dts: {
+\NewDocumentCommand \dts { } {
+ \nolinebreak
\mathinner {
\ldotp
\ldotp
}
+ \nolinebreak
}
-\NewDocumentCommand \dts { } { \__pseudo_dts: }
\cs_gset_eq:NN \c__pseudo_dot_cs \.
\DeclareDocumentCommand \. { m } {
\tl_if_eq:nnTF { #1 } { . } {
\dts
} {
- \c__pseudo_dot_cs{#1}
+ \c__pseudo_dot_cs { #1 }
}
}
+\NewDocumentCommand \rng { } {
+ \nolinebreak
+ \mathinner { : }
+ \nolinebreak
+}
\keys_define:nn { pseudo/package } {
kw .bool_gset:N = \g__pseudo_kw_bool,
kw .default:n = true
@@ -255,9 +275,13 @@
\keys_define:nn { pseudo } {
font .tl_set:N = \pseudofont,
font .initial:n = \normalfont,
- hpad .tl_set:N = \l__pseudo_hpad_tl,
- hpad .initial:n = 0.0em,
+ hpad .meta:n = {
+ hpad-val = { #1 },
+ hl-warn = false,
+ },
hpad .default:n = 0.3em,
+ hpad-val .tl_set:N = \l__pseudo_hpad_tl,
+ hpad-val .initial:n = 0.0em,
hsep .tl_set:N = \l__pseudo_hsep_tl,
hsep .initial:n = .75em,
left-margin .tl_set:N = \l__pseudo_left_margin_tl,
@@ -273,12 +297,39 @@
indent-length .initial:V = \q_no_value,
indent-text .tl_set:N = \l__pseudo_indent_text_tl,
indent-text .initial:n = { \pseudofont\kw{else}\ },
+ indent-mark .tl_set:N = \l__pseudo_indent_mark_tl,
+ indent-mark .initial:x = \c_novalue_tl,
+ indent-mark .default:n =
+ \skip_horizontal:n { \l__pseudo_indent_mark_shift_tl }
+ \tex_vrule:D width \l__pseudo_indent_mark_wd_tl
+ \skip_horizontal:n {
+ -\l__pseudo_indent_mark_wd_tl
+ -\l__pseudo_indent_mark_shift_tl
+ },
+ indent-mark-width .tl_set:N = \l__pseudo_indent_mark_wd_tl,
+ indent-mark-width .initial:n = \c__pseudo_semithick_dim,
+ indent-mark-shift .tl_set:N = \l__pseudo_indent_mark_shift_tl,
+ indent-mark-shift .initial:n = 0pt,
+ indent-mark-shift .default:n = .5em,
+ indent-mark-color .tl_set:N = \l__pseudo_indent_color_tl,
+ indent-mark-color .initial:n = lightgray,
indent-level .int_set:N = \l__pseudo_initial_indent_level_int,
kwfont .tl_set:N = \kwfont,
kwfont .initial:n = \__pseudo_b_or_bx:,
kw .meta:n = { font = \kwfont },
kw .value_forbidden:n = true,
- hl .meta:n = { bol-prepend = \pseudohl },
+ hl-warn .bool_set:N = \l__pseudo_hl_warn_bool,
+ hl-warn .initial:n = true,
+ hl-warn .default:n = true,
+ hl-warn-code .code:n = {
+ \bool_if:nT \l__pseudo_hl_warn_bool {
+ \msg_warning:nn { pseudo } { hl-without-hpad }
+ }
+ },
+ hl .meta:n = {
+ hl-warn-code,
+ bol-prepend = \pseudohl
+ },
hl .value_forbidden:n = true,
bol .tl_set:N = \l__pseudo_bol_tl,
bol-append .code:n = {
@@ -324,8 +375,13 @@
bol-append = \color{\pseudodimcolor},
setup-append = \color{\pseudodimcolor}
},
- line-height .fp_set:N = \l__pseudo_line_height_fp,
+ line-height .tl_set:N = \l__pseudo_line_height_tl,
line-height .initial:n = 1,
+ extra-space .tl_set:N = \l__pseudo_extra_space_tl,
+ extra-space .initial:n = 0pt,
+ hd-space .tl_set:N = \l__pseudo_hd_space_tl,
+ hd-space .initial:n = 0pt,
+ hd-space .default:n = 0.41386ex,
start .tl_set:N = \l__pseudo_start_tl,
start .initial:n = 1,
preamble .code:n =
@@ -348,31 +404,40 @@
\tl_put_left:Nn \l__pseudo_setup_tl {#1}
},
hd-preamble .code:n =
- \__pseudo_def_col:nn{ \__pseudo_hd_preamble }{#1},
+ \__pseudo_def_col:nn{ \pseudohdpreamble }{#1},
hd-preamble .initial:n = {
- >{\pseudohpad} l <{\pseudohpad}
+ >{ \pseudohpad } l <{ \pseudohpad }
},
prefix .tl_set:N = \pseudoprefix,
prefix .initial:n = {
\pseudobol \stepcounter* \pseudolabel &
},
+ pos .tl_set:N = \pseudopos,
+ pos .initial:n = t,
+ prevdepth .tl_set:N = \l__pseudo_prevdepth_tl,
+ prevdepth .initial:n = .3 \baselineskip,
begin-tabular .tl_set:N = \l__pseudo_begin_tabular_tl,
- begin-tabular .initial:n = \begin{tabular}{\pseudopreamble},
+ begin-tabular .initial:n =
+ \begin{tabular}[\pseudopos]{\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-val = { #1 },
+ compact-def = true,
+ compact-code = { #1 },
},
compact .default:n = true,
compact-val .bool_set:N = \l__pseudo_compact_bool,
compact-def .bool_set:N = \l__pseudo_compact_def_bool,
+ compact-code .code:n = {
+ \bool_if:nT { \l__pseudo_compact_bool } {
+ \tl_clear:N \pseudopos
+ }
+ },
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,
@@ -388,7 +453,7 @@
pause .meta:n = { eol-append = \pause }
}
}
-\cs_new:Nn \__pseudo_keys_set_overlay:nnn {
+\cs_new:Npn \__pseudo_keys_set_overlay:nnn #1 #2 #3 {
\bool_if:NT \c__pseudo_beamer_bool {
\only<#1>{ \keys_set:nn { #2 } { #3 } }
}
@@ -422,29 +487,43 @@
\int_compare_p:n { \l_tmpa_int == \l_tmpb_int == 1 }
&&
\tl_if_empty_p:N \l_tmpa_tl
- }{
- \tl_if_blank:nF{#1} {
+ } {
+ \tl_if_blank:nF{ #1 } {
\tl_put_right:Nn \l_tmpb_tl {= #1}
}
\__pseudo_keys_set_overlay:VnV
\l__pseudo_overlay_tl { pseudo } \l_tmpb_tl
} {
- \msg_error:nnx
- { pseudo } { unknown-key } { \l_keys_path_tl }
+ \bool_if:nTF {
+ \bool_lazy_and_p:nn
+ { \l__pseudo_in_eol_bool }
+ { \tl_if_blank_p:n { #1 } }
+ } {
+ \tl_set_rescan:Nno
+ \l__pseudo_extra_space_tl { }
+ { \l_keys_key_str }
+ } {
+ \msg_error:nnx
+ { pseudo } { unknown-key }
+ { \l_keys_path_str }
+ }
}
- \group_end:
+ \exp_args:NNNV
+ \group_end:
+ \tl_set:Nn \l__pseudo_extra_space_tl \l__pseudo_extra_space_tl
}
}
-\cs_new:Nn \__pseudo_set:n { \keys_set:nn { pseudo } { #1 } }
-\cs_new:Nn \__pseudo_inc_indent: {
+\cs_new:Npn \__pseudo_set:n #1 { \keys_set:nn { pseudo } { #1 } }
+\cs_new:Npn \__pseudo_inc_indent: {
\int_gincr:N \g__pseudo_indent_level_int
}
-\cs_new:Nn \__pseudo_dec_indent: {
+\cs_new:Npn \__pseudo_dec_indent: {
\int_compare:nNnT \g__pseudo_indent_level_int > 0 {
\int_gdecr:N \g__pseudo_indent_level_int
}
}
-\cs_new:Nn \__pseudo_eol_handle_args:nnn {
+\cs_new:Npn \__pseudo_eol_handle_args:nnn #1 #2 #3 {
+ \bool_set_true:N \l__pseudo_in_eol_bool
\__pseudo_keys_set_overlay:nnn { #2 } { pseudo } { hl }
\keys_set:nn { pseudo } { #3 }
\tl_gset_eq:NN \pseudolabel \l__pseudo_label_tl
@@ -459,13 +538,18 @@
}
\NewDocumentCommand \__pseudo_eol_tail { s d<> +O{ } } {
\__pseudo_eol_handle_args:nnn{#1}{#2}{#3}
- \peek_meaning_ignore_spaces:NF \end {
+ \tl_set:Nx \l_tmpa_tl {
+ \exp_not:N \tabularnewline [ \l__pseudo_extra_space_tl ]
+ }
+ \peek_meaning_ignore_spaces:NTF \end {
+ \l_tmpa_tl
+ } {
\pseudoeol
- \tabularnewline
+ \l_tmpa_tl
\__pseudo_bol:
}
}
-\cs_new:Nn \__pseudo_eol: {
+\cs_new:Npn \__pseudo_eol: {
\__pseudo_per_char:nnn { + } {
\__pseudo_inc_indent:
} {
@@ -475,7 +559,7 @@
\__pseudo_eol_tail
} }
}
-\cs_new:Nn \__pseudo_bol: {
+\cs_new:Npn \__pseudo_bol: {
\g__pseudo_cur_prefix_tl
}
\NewDocumentCommand \pseudohpad { } {
@@ -484,10 +568,10 @@
\NewDocumentCommand \pseudoindent { } {
\__pseudo_indent:N { \g__pseudo_indent_level_int }
}
-\NewDocumentCommand \pseudoslash { } {
+\NewDocumentCommand \RestorePseudoBackslash { } {
\cs_gset_eq:NN \\ \__pseudo_eol:
}
-\NewDocumentCommand \pseudoeq { } {
+\NewDocumentCommand \RestorePseudoEq { } {
\cs_gset_eq:NN \= \__pseudo_eq:
}
\NewDocumentCommand \pseudoset { +m }
@@ -503,7 +587,7 @@
\group_begin:
\__pseudo_gsave_as:NN \\ \c__pseudo_saved_cr_cs
\__pseudo_gsave_as:NN \= \c__pseudo_saved_eq_cs
- \pseudoeq
+ \RestorePseudoEq
\int_set:Nn \g__pseudo_last_saved_line_int {\arabic{pseudoline}}
\__pseudo_star_setup:
\IfNoValueF { #1 } {
@@ -517,7 +601,7 @@
}
\bool_if:nF { \l__pseudo_compact_bool } {
\skip_set:Nn \l_tmpa_skip {
- \l__pseudo_topsep_tl + \l__pseudo_parskip_tl
+ \l__pseudo_topsep_tl
}
\mode_if_vertical:TF {
\skip_add:Nn \l_tmpa_skip { \l__pseudo_partopsep_tl }
@@ -528,15 +612,14 @@
\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 } }
+ \dim_set:Nn \tabcolsep { \l__pseudo_hsep_tl / 2 }
+ \tl_set_eq:NN \arraystretch \l__pseudo_line_height_tl
\stepcounter{pseudoenv}
\setcounter{pseudoline}{\l__pseudo_start_tl}
\addtocounter{pseudoline}{-1}
\tl_use:N \l__pseudo_begin_tabular_tl
\tex_noalign:D {
- \pseudoslash
+ \RestorePseudoBackslash
\int_gset_eq:NN \g__pseudo_indent_level_int
\l__pseudo_initial_indent_level_int
\__pseudo_eol_handle_args:nnn{#2}{#3}{#4}
@@ -544,25 +627,229 @@
\__pseudo_bol:
} {
\tl_use:N \l__pseudo_end_tabular_tl
- \bool_if:nF { \l__pseudo_compact_bool } {
+ \bool_if:nTF { \l__pseudo_compact_bool } {
+ \group_end:
+ } {
\mode_if_vertical:F {
\unskip \par
\group_insert_after:N \@endparenv
}
\addvspace{ \l_tmpa_skip }
+ \exp_args:NNNV
+ \group_end:
+ \dim_set:Nn \prevdepth \l__pseudo_prevdepth_tl
}
- \group_end:
}
-\pseudodefinestyle{starred}{
- preamble={
+\pseudodefinestyle{ starred }{
+ preamble = {
>{\pseudohpad\pseudoindent\pseudofont}
l
<{\pseudohpad}
},
- prefix={\pseudobol},
+ prefix = {\pseudobol},
}
\NewDocumentEnvironment { pseudo* } { +O{} } {
\begin{pseudo}[starred, #1]
} {
\end{pseudo}
}
+\@ifpackageloaded { booktabs } { } {
+ \dim_const:Nn \aboverulesep { .40ex }
+ \dim_const:Nn \belowrulesep { .65ex }
+ \dim_const:Nn \heavyrulewidth { .08em }
+ \dim_const:Nn \lightrulewidth { .05em }
+}
+\dim_const:Nn \c__pseudo_very_thin_dim { 0.2pt }
+\dim_const:Nn \c__pseudo_thin_dim { 0.4pt }
+\dim_const:Nn \c__pseudo_semithick_dim { 0.6pt }
+\cs_new:Npn \__pseudo_prevdepth_adjustment: {
+ \par
+ \dim_compare:nNnF \prevdepth < \c_zero_dim {
+ \dim_compare:nNnT \prevdepth < { .3 \baselineskip } {
+ \skip_vertical:n { .3 \baselineskip - \prevdepth }
+ \skip_vertical:N \c_zero_dim
+ }
+ }
+}
+\pseudodefinestyle { in-float } {
+}
+\tl_new:N \l__pseudo_float_init_tl
+\pgfqkeys { /tcb/pseudo } {
+ init/.code = {
+ \tl_set:Nn \l__pseudo_float_init_tl { #1 }
+ },
+boxruled/.style = {
+ floatplacement = tbp,
+ before~upper = {
+ \dim_set:Nn \parskip { .3 \baselineskip }
+ \dim_set:Nn \topsep { .2 \baselineskip }
+ \dim_set:Nn \partopsep { 0pt }
+ \dim_set:Nn \prevdepth { .3 \baselineskip }
+ \RestorePseudoEq
+ \pseudoset { in-float }
+ \l__pseudo_float_init_tl
+ },
+ after~upper = \__pseudo_prevdepth_adjustment:,
+ beforeafter~skip~balanced = \l__pseudo_topsep_tl,
+ boxsep = 0pt,
+ toptitle = \belowrulesep,
+ bottomtitle = \aboverulesep,
+ top = 2 \belowrulesep,
+ bottom = 2 \aboverulesep,
+ left = 2 \belowrulesep,
+ right = 2 \belowrulesep,
+ fonttitle = \bfseries,
+ description~font = \normalfont,
+ before~title =
+ \dim_set:Nn \prevdepth { .3 \baselineskip },
+ after~title = \__pseudo_prevdepth_adjustment:,
+ separator~sign = {
+ \normalfont
+ \skip_horizontal:n { .5em - \fontdimen2\font\space }
+ },
+ sharp~corners,
+ colback = white,
+ colbacktitle = white,
+ coltitle = black,
+ colframe = black,
+ boxrule = \c__pseudo_thin_dim,
+ titlerule = \c__pseudo_very_thin_dim,
+},
+ruled/.style = {
+ pseudo/boxruled,
+ empty,
+ boxrule = 0pt,
+ toprule = \heavyrulewidth,
+ titlerule = \lightrulewidth,
+ bottomrule = \heavyrulewidth,
+ left = 0pt,
+ right = 0pt,
+ titlerule~style = draw,
+ borderline~north = {\heavyrulewidth}{0pt}{black},
+ borderline~south = {\lightrulewidth}{0pt}{black},
+},
+booktabs/.style = {
+ pseudo/ruled,
+ no~borderline,
+ bottomrule = \heavyrulewidth,
+ borderline~horizontal = {\heavyrulewidth}{0pt}{black}
+},
+boxed/.style = {
+ pseudo/boxruled,
+ empty,
+ titlerule = 0pt,
+ borderline = {\c__pseudo_thin_dim}{0pt}{black},
+ toptitle = 1.5 \belowrulesep,
+ bottomtitle = 0pt,
+ top = 0.3 \baselineskip,
+},
+tworuled/.style = {
+ pseudo/boxed,
+ no~borderline,
+ left = 0pt,
+ right = 0pt,
+ boxrule = 0pt,
+ toprule = \heavyrulewidth,
+ bottomrule = \heavyrulewidth,
+ borderline~horizontal = {\heavyrulewidth}{0pt}{black},
+},
+filled/.style = {
+ pseudo/boxruled,
+ tile,
+ colback = \pseudohlcolor,
+ colbacktitle = lightgray,
+ bottom = 2 \aboverulesep + \c__pseudo_thin_dim,
+ left = 2 \belowrulesep + \c__pseudo_thin_dim,
+ right = 2 \belowrulesep + \c__pseudo_thin_dim,
+}
+}
+\msg_new:nnn { pseudo } { useinstead } {
+ The~#1 command~(used~\msg_line_context:)~is~deprecated;~
+ use~#2 instead.
+}
+\cs_new:Npn \__pseudo_use_instead:nn #1 #2 {
+ \msg_warning:nnnn { pseudo } { useinstead } { #1 } { #2 }
+}
+\NewDocumentCommand \pseudoslash { } {
+ \__pseudo_use_instead:nn \pseudoslash \RestorePseudoBackslash
+ \RestorePseudoBackslash
+}
+\NewDocumentCommand \pseudoeq { } {
+ \__pseudo_use_instead:nn \pseudoeq \RestorePseudoEq
+ \RestorePseudoEq
+}
+\msg_new:nnn { pseudo } { hl-without-hpad } {
+ hl~used~without~hpad~\msg_line_context:.
+}
+\pgfkeysifdefined { /tcb/beforeafter~skip~balanced/.@cmd } { } {
+\pgfqkeys { /tcb } {
+ before~skip~balanced/.style = { before = {
+ \int_compare:nNnF { \lastnodetype } = { -1 } {
+ \par
+ \mode_if_vertical:T {
+ \__pseudo_if_minipage:
+ \dim_compare:nNnTF \parskip > \c_zero_dim {
+ \addvspace{ -\parskip }
+ }
+ \else:
+ \bool_lazy_or:nnTF {
+ \dim_compare_p:nNn
+ \prevdepth < \c_zero_dim
+ } {
+ \dim_compare_p:nNn
+ \prevdepth > { .3 \baselineskip }
+ } {
+ \addvspace { \skip_eval:n {
+ #1 - \parskip
+ } }
+ } {
+ \addvspace { \skip_eval:n {
+ #1 + .3 \baselineskip
+ - \prevdepth - \parskip
+ } }
+ }
+ \fi:
+ \nointerlineskip
+ }
+ }
+ \dim_set_eq:NN \lineskip \c_zero_dim
+ \noindent
+ } },
+ after~skip~balanced/.style = { after = {
+ \par
+ \mode_if_vertical:T {
+ \dim_set:Nn \prevdepth { .3\baselineskip }
+ \addvspace { \skip_eval:n { #1 - \parskip } }
+ }
+ } },
+ beforeafter~skip~balanced/.style = {
+ before~skip~balanced = { #1 },
+ after~skip~balanced = { #1 }
+ }
+}
+\RequirePackage{etoolbox}
+\AtEndPreamble {
+ \@ifpackageloaded { tcolorbox } {
+ \tl_set_eq:NN \__pseudo_orig_tcbopt \tcb@apply@box@options
+ \def \tcb@apply@box@options #1 {
+ \__pseudo_orig_tcbopt { #1 }
+ \tl_set_eq:NN \__pseudo_if_minipage: \if@minipage
+ }
+ } { }
+}
+}
+\AtEndPreamble {
+ \@ifpackageloaded { tcolorbox } {
+ \cs_new:Npn \__pseudo_vmaj:n #1 { \__pseudo_vmaj_aux:w #1 \q_stop }
+ \cs_new:Npn \__pseudo_vmaj_aux:w #1 . #2 \q_stop { #1 }
+ \tl_set:Nx \l_tmpa_tl { \exp_args:No \__pseudo_vmaj:n \tcb@version }
+ \int_compare:nNnT \l_tmpa_tl < 5 {
+ \tcbuselibrary { hooks }
+ \tcbset {
+ pseudo/boxruled/.append~style = {
+ before~upper~app = \vspace { -\parskip }
+ }
+ }
+ }
+ }
+}