summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/multicolrule
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2018-12-22 21:54:42 +0000
committerKarl Berry <karl@freefriends.org>2018-12-22 21:54:42 +0000
commit9ce87495da8b3b9e6adbccb41c78d1554af1d71a (patch)
treefaa9bf81c775dd6177a15d859ad7e51aa47d60f5 /Master/texmf-dist/tex/latex/multicolrule
parentbe95bc2cf6a3578a498f124d737244329dec915f (diff)
multicolrule (22dec18)
git-svn-id: svn://tug.org/texlive/trunk@49480 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/multicolrule')
-rw-r--r--Master/texmf-dist/tex/latex/multicolrule/multicolrule.sty242
1 files changed, 153 insertions, 89 deletions
diff --git a/Master/texmf-dist/tex/latex/multicolrule/multicolrule.sty b/Master/texmf-dist/tex/latex/multicolrule/multicolrule.sty
index bfb62d6e86e..1494adbee72 100644
--- a/Master/texmf-dist/tex/latex/multicolrule/multicolrule.sty
+++ b/Master/texmf-dist/tex/latex/multicolrule/multicolrule.sty
@@ -15,11 +15,12 @@
%%
\RequirePackage{expl3}
\RequirePackage{xparse}
-\ProvidesExplPackage {multicolrule} {2018/12/18} {1.0}
-{Decorative~vertical~rules~between~columns}
+\ProvidesExplPackage {multicolrule} {2018/12/21} {1.1}
+ {Decorative~vertical~rules~between~columns}
\RequirePackage{l3keys2e}
\RequirePackage{xpatch}
\RequirePackage{xcolor}
+\RequirePackage{scrlfile}
\msg_new:nnn {multicolrule} {patch-success} {Patched~#1.}
\msg_new:nnn {multicolrule} {patch-failure} {Error~patching~#1.}
\msg_new:nnn {multicolrule} {tikz-required}
@@ -29,9 +30,13 @@
option~with~multicol~already~loaded.~You~will~likely~run~into~problems.}
\bool_new:N \g__mcrule_twocolumn_bool
\bool_new:N \g__mcrule_use_tikz_bool
-\int_new:N \l__mcrule_repeat_int
+\int_new:N \l__mcrule_repeat_int
\int_set:Nn \l__mcrule_repeat_int {1}
-\dim_new:N \l__mcrule_repeat_distance_dim
+\dim_new:N \l__mcrule_repeat_distance_dim
+\dim_new:N \l__mcrule_extend_top_dim
+\dim_new:N \l__mcrule_extend_bot_dim
+\bool_new:N \l__mcrule_extend_fill_bool
+\dim_new:N \l__mcrule_extend_reserve_dim
\tl_new:N \l__mcrule_color_name_tl
\tl_new:N \l__mcrule_color_model_tl
\@ifpackageloaded{tikz}
@@ -45,35 +50,50 @@
tikz .default:n = true,
}
\ProcessKeysOptions{mcrule-opts}
-\cs_new:Npn \__mcrule_col_box: {}
+\cs_new:Npn \__mcrule_column_height: {}
+\cs_new:Npn \__mcrule_column_depth: {}
+\cs_new_protected:Npn \__mcrule_patch_mcol_output:N #1
+{
+ \xpatchcmd{#1} {\vrule\@width\columnseprule} {\mcruledivider}
+ {\msg_info:nnn {multicolrule} {patch-success} {#1}}
+ {\msg_info:nnn {multicolrule} {patch-failure} {#1}}
+}
+\cs_new_protected:Npn \__mcrule_patch_twocol_output:N #1
+{
+ \xpatchcmd{#1} {\normalcolor\vrule\@width\columnseprule}
+ {\columnseprulecolor\mcruledivider}
+ {\msg_info:nnn {multicolrule} {patch-success} {#1}}
+ {\msg_info:nnn {multicolrule} {patch-failure} {#1}}
+}
\bool_if:NTF \g__mcrule_twocolumn_bool
{
\@ifpackageloaded{multicol}
- {
- \msg_warning:nn {multicolrule} {multicol-loaded}
- }
+ {\msg_warning:nn {multicolrule} {multicol-loaded}}{}
\cs_gset:Npn \columnseprulecolor {\normalcolor}
- \cs_gset:Npn \__mcrule_col_box: {\@outputbox}
- \xpatchcmd{\@outputdblcol} {\normalcolor\vrule\@width\columnseprule}
- {\columnseprulecolor\mcruledivider}
- {
- \msg_info:nnn {multicolrule} {patch-success} {\@outputdblcol}
- }
+ \cs_gset:Npn \__mcrule_column_height: {\box_ht:N \@outputbox}
+ \cs_gset:Npn \__mcrule_column_depth: {\box_dp:N \@outputbox}
+ \__mcrule_patch_twocol_output:N \@outputdblcol
+ \__mcrule_patch_twocol_output:N \@outputdblcol
+ \AfterPackage!{bidi}
{
- \msg_info:nnn {multicolrule} {patch-failure} {\@outputdblcol}
+ \__mcrule_patch_twocol_output:N \RTL@outputdblcol
+ \__mcrule_patch_twocol_output:N \LTR@outputdblcol
}
}
{
\RequirePackage{multicol}
- \cs_gset:Npn \__mcrule_col_box: {\mult@rightbox}
- % Patch the code in multicol that creates the vertical rule.
- \xpatchcmd{\LR@column@boxes} {\vrule\@width\columnseprule} {\mcruledivider}
- {\msg_info:nnn {multicolrule} {patch-success} {\LR@column@boxes}}
- {\msg_info:nnn {multicolrule} {patch-failure} {\LR@column@boxes}}
- \xpatchcmd{\RL@column@boxes} {\vrule\@width\columnseprule} {\mcruledivider}
- {\msg_info:nnn {multicolrule} {patch-success} {\RL@column@boxes}}
- {\msg_info:nnn {multicolrule} {patch-failure} {\RL@column@boxes}}
- \LRmulticolcolumns
+ \__mcrule_patch_mcol_output:N \LR@column@boxes
+ \__mcrule_patch_mcol_output:N \RL@column@boxes
+ \cs_gset:Npn \__mcrule_column_height: {\box_ht:N \mult@rightbox}
+ \cs_gset:Npn \__mcrule_column_depth: {\dimen\tw@}
+ \LRmulticolcolumns
+ \AfterPackage!{bidi}
+ {
+ \cs_gset_eq:NN \LTR@column@boxes \LR@column@boxes
+ \cs_gset_eq:NN \RTL@column@boxes \RL@column@boxes
+ \cs_gset_eq:NN \LRmulticolcolumns \LTRmulticolcolumns
+ \cs_gset_eq:NN \RLmulticolcolumns \RTLmulticolcolumns
+ }
}
\cs_new:Npn \mcruledivider
{
@@ -89,22 +109,63 @@
}
}
}
+\cs_new:Npn \__mcrule_column_total_height:
+{
+ \dim_eval:n {\__mcrule_column_height: + \__mcrule_column_depth: +
+ \__mcrule_extend_column_top: + \__mcrule_extend_column_bottom:}
+}
+\cs_new:Npn \__mcrule_column_total_depth:
+{
+ \dim_eval:n {\__mcrule_column_depth: + \__mcrule_extend_column_bottom:}
+}
+\cs_new:Npn \__mcrule_extend_column_top:
+{
+ \l__mcrule_extend_top_dim
+}
+\cs_new:Npn \__mcrule_extend_column_bottom:
+{
+ \bool_lazy_and:nnTF
+ {\bool_if_p:n {\l__mcrule_extend_fill_bool}}
+ {\bool_not_p:n {\g__mcrule_twocolumn_bool}}
+ {
+ \dim_compare:nNnTF
+ {\@colroom - \__mcrule_column_height: - \__mcrule_extend_reserve:} > {0pt}
+ {\@colroom - \__mcrule_column_height: - \__mcrule_extend_reserve:}
+ {0pt}
+ }
+ {\l__mcrule_extend_bot_dim}
+}
+\cs_new:Npn \__mcrule_extend_reserve:
+{
+ \dim_compare:nNnTF {\l__mcrule_extend_reserve_dim} > {0pt}
+ {\dim_eval:n {\l__mcrule_extend_reserve_dim + \multicolsep}}
+ {0pt}
+}
\cs_new:Npn \__mcrule_divider: {\vrule\@width\columnseprule}
\cs_new_nopar:Npn \__mcrule_pattern:nnn #1#2#3
{
- \vbox_to_ht:nn {\box_ht:N \__mcrule_col_box:}
- { \vfill
- \kern #2 \hbox:n{#1} \kern #3
- \vfill
+ \box_move_down:nn {\__mcrule_column_total_depth:}
+ {
+ \vbox_to_ht:nn {\__mcrule_column_total_height:}
+ {
+ \vfill
+ \kern #2 \hbox:n{#1} \kern #3
+ \vfill
+ }
}
}
\cs_new_nopar:Npn \__mcrule_tile_pattern:nnn #1#2#3
{
- \vbox_to_ht:nn {\box_ht:N \__mcrule_col_box:}
+ \box_move_down:nn {\__mcrule_column_total_depth:}
{
- \cleaders \vbox:n {
- \kern #2 \hbox:n{#1} \kern #3
- }\vfill
+ \vbox_to_ht:nn {\__mcrule_column_total_height:}
+ {
+ \cleaders \vbox:n
+ {
+ \kern #2 \hbox:n{#1} \kern #3
+ }
+ \vfill
+ }
}
}
\cs_new:Npn \__mcrule_line_pattern:nnnn #1#2#3#4
@@ -117,35 +178,31 @@
\__mcrule_tile_pattern:nnn {\rule{\columnseprule}{#2}}{#3}{#4}
}
}
+\cs_new:Npn \__mcrule_solid_line:
+{
+ \rule[-\__mcrule_column_total_depth:]{\columnseprule}{\__mcrule_column_total_height:}
+}
\bool_if:NTF \g__mcrule_use_tikz_bool
{
\ExplSyntaxOff
\RequirePackage{tikz}
\ExplSyntaxOn
- \cs_set:Npn \__mcrule_tikz_picture:n #1
- {
- \__mcrule_tikz_picture:nx {#1} {\__mcrule_col_box:}
- }
- \cs_set:Npn \__mcrule_tikz_picture:nn #1#2
- {
- \begin{tikzpicture}[x=1pt,y=1pt,inner~sep=0pt,outer~sep=0pt]
- \node (TOP) at (0,\ht#2) {};
- \node (BOT) at (0,0) {};
- #1
- \end{tikzpicture}
- }
- \cs_generate_variant:Nn \__mcrule_tikz_picture:nn {nx}
- \cs_set:Npn \__mcrule_pattern_line:n #1
- {
- \__mcrule_pattern_line:nx {#1} {\__mcrule_col_box:}
- }
- \cs_set:Npn \__mcrule_pattern_line:nn #1#2
- {
- \begin{tikzpicture}[x=1pt,y=1pt,inner~sep=0pt,outer~sep=0pt]
- \draw[line~width=\columnseprule,#1] (0,\ht#2) -- (0,0);
+\cs_set:Npn \__mcrule_tikz_picture:n #1
+{
+ \begin{tikzpicture}[x=1pt,y=1pt,inner~sep=0pt,outer~sep=0pt,
+ baseline={([yshift=\__mcrule_column_total_depth:]current~bounding~box.south)}]
+ \node (TOP) at (0,\__mcrule_column_total_height:) {};
+ \node (BOT) at (0,0) {};
+ #1
\end{tikzpicture}
- }
- \cs_generate_variant:Nn \__mcrule_pattern_line:nn {nx}
+}
+\cs_set:Npn \__mcrule_pattern_line:n #1
+{
+ \begin{tikzpicture}[x=1pt,y=1pt,inner~sep=0pt,outer~sep=0pt,
+ baseline={([yshift=\__mcrule_column_total_depth:]current~bounding~box.south)}]
+ \draw[line~width=\columnseprule,#1] (0,\__mcrule_column_total_height:) -- (0,0);
+ \end{tikzpicture}
+}
\cs_set:Npn \__mcrule_circle:
{
\begin{tikzpicture}[x=1pt,y=1pt,inner~sep=0pt,outer~sep=0pt]
@@ -186,66 +243,73 @@
}
\keys_define:nn {mcrule}
{
- line-style .choice:,
- line-style / solid .code:n = \cs_set:Npn \__mcrule_divider:
+ extend-top .dim_set:N = \l__mcrule_extend_top_dim,
+ extend-bot .dim_set:N = \l__mcrule_extend_bot_dim,
+ extend-fill .bool_set:N = \l__mcrule_extend_fill_bool,
+ extend-fill .default:n = true,
+ extend-reserve .dim_set:N = \l__mcrule_extend_reserve_dim,
+ line-style .choice:,
+ line-style / default .code:n = \cs_set:Npn \__mcrule_divider:
{\vrule\@width\columnseprule},
- line-style / dots .code:n = \cs_set:Npn \__mcrule_divider:
+ line-style / solid .code:n = \cs_set:Npn \__mcrule_divider:
+ {\__mcrule_solid_line:},
+ line-style / dots .code:n = \cs_set:Npn \__mcrule_divider:
{\__mcrule_tile_pattern:nnn {.}{1pt}{1pt}},
- line-style / dense-dots .code:n = \cs_set:Npn \__mcrule_divider:
+ line-style / dense-dots .code:n = \cs_set:Npn \__mcrule_divider:
{\__mcrule_tile_pattern:nnn {.}{1pt}{0pt}},
- line-style / loose-dots .code:n = \cs_set:Npn \__mcrule_divider:
+ line-style / loose-dots .code:n = \cs_set:Npn \__mcrule_divider:
{\__mcrule_tile_pattern:nnn {.}{2pt}{2pt}},
- line-style / circles .code:n = \cs_set:Npn \__mcrule_divider:
+ line-style / circles .code:n = \cs_set:Npn \__mcrule_divider:
{\__mcrule_tile_pattern:nnn {\__mcrule_circle:}{1pt}{1pt}},
- line-style / dense-circles .code:n = \cs_set:Npn \__mcrule_divider:
+ line-style / dense-circles .code:n = \cs_set:Npn \__mcrule_divider:
{\__mcrule_tile_pattern:nnn {\__mcrule_circle:}{1pt}{0pt}},
- line-style / loose-circles .code:n = \cs_set:Npn \__mcrule_divider:
+ line-style / loose-circles .code:n = \cs_set:Npn \__mcrule_divider:
{\__mcrule_tile_pattern:nnn {\__mcrule_circle:}{2pt}{2pt}},
- line-style / solid-circles .code:n = \cs_set:Npn \__mcrule_divider:
+ line-style / solid-circles .code:n = \cs_set:Npn \__mcrule_divider:
{\__mcrule_tile_pattern:nnn {\__mcrule_solid_circle:}{1pt}{1pt}},
line-style / dense-solid-circles .code:n = \cs_set:Npn \__mcrule_divider:
{\__mcrule_tile_pattern:nnn {\__mcrule_solid_circle:}{1pt}{0pt}},
line-style / loose-solid-circles .code:n = \cs_set:Npn \__mcrule_divider:
{\__mcrule_tile_pattern:nnn {\__mcrule_solid_circle:}{2pt}{2pt}},
- line-style / dotted .code:n = \cs_set:Npn \__mcrule_divider:
+ line-style / dotted .code:n = \cs_set:Npn \__mcrule_divider:
{\__mcrule_line_pattern:nnnn {dotted}{\columnseprule}{1pt}{1pt}},
- line-style / densely-dotted .code:n = \cs_set:Npn \__mcrule_divider:
+ line-style / densely-dotted .code:n = \cs_set:Npn \__mcrule_divider:
{\__mcrule_line_pattern:nnnn {densely~dotted}{\columnseprule}{1pt}{0pt}},
- line-style / loosely-dotted .code:n = \cs_set:Npn \__mcrule_divider:
+ line-style / loosely-dotted .code:n = \cs_set:Npn \__mcrule_divider:
{\__mcrule_line_pattern:nnnn {loosely~dotted}{\columnseprule}{2pt}{2pt}},
- line-style / dashed .code:n = \cs_set:Npn \__mcrule_divider:
+ line-style / dashed .code:n = \cs_set:Npn \__mcrule_divider:
{\__mcrule_line_pattern:nnnn {dashed}{3pt}{1.5pt}{1.5pt}},
- line-style / densely-dashed .code:n = \cs_set:Npn \__mcrule_divider:
+ line-style / densely-dashed .code:n = \cs_set:Npn \__mcrule_divider:
{\__mcrule_line_pattern:nnnn {densely~dashed}{3pt}{1pt}{1pt}},
- line-style / loosely-dashed .code:n = \cs_set:Npn \__mcrule_divider:
+ line-style / loosely-dashed .code:n = \cs_set:Npn \__mcrule_divider:
{\__mcrule_line_pattern:nnnn {loosely~dashed}{3pt}{3pt}{3pt}},
- line-style / dash-dot .code:n =
- \cs_set:Npn \__mcrule_divider: {\__mcrule_pattern_line:n{dash~dot}},
- line-style / densely-dash-dot .code:n =
- \cs_set:Npn \__mcrule_divider: {\__mcrule_pattern_line:n{densely~dash~dot}},
- line-style / loosely-dash-dot .code:n =
- \cs_set:Npn \__mcrule_divider: {\__mcrule_pattern_line:n{loosely~dash~dot}},
- line-style / dash-dot-dot .code:n =
- \cs_set:Npn \__mcrule_divider: {\__mcrule_pattern_line:n{dash~dot~dot}},
- line-style / densely-dash-dot-dot .code:n =
- \cs_set:Npn \__mcrule_divider: {\__mcrule_pattern_line:n{densely~dash~dot~dot}},
- line-style / loosely-dash-dot-dot .code:n =
- \cs_set:Npn \__mcrule_divider: {\__mcrule_pattern_line:n{loosely~dash~dot~dot}},
- color .code:n = {
+ line-style / dash-dot .code:n = \cs_set:Npn \__mcrule_divider:
+ {\__mcrule_pattern_line:n{dash~dot}},
+ line-style / densely-dash-dot .code:n = \cs_set:Npn \__mcrule_divider:
+ {\__mcrule_pattern_line:n{densely~dash~dot}},
+ line-style / loosely-dash-dot .code:n = \cs_set:Npn \__mcrule_divider:
+ {\__mcrule_pattern_line:n{loosely~dash~dot}},
+ line-style / dash-dot-dot .code:n = \cs_set:Npn \__mcrule_divider:
+ {\__mcrule_pattern_line:n{dash~dot~dot}},
+ line-style / densely-dash-dot-dot .code:n = \cs_set:Npn \__mcrule_divider:
+ {\__mcrule_pattern_line:n{densely~dash~dot~dot}},
+ line-style / loosely-dash-dot-dot .code:n = \cs_set:Npn \__mcrule_divider:
+ {\__mcrule_pattern_line:n{loosely~dash~dot~dot}},
+ color .code:n = {
\tl_set:Nn \l__mcrule_color_name_tl {#1}
\__mcrule_set_rule_color:
},
- color-model .code:n = {
+ color-model .code:n = {
\tl_set:Nn \l__mcrule_color_model_tl {#1}
\__mcrule_set_rule_color:
},
- custom-line .code:n = \cs_set:Npn \__mcrule_divider:
+ custom-line .code:n = \cs_set:Npn \__mcrule_divider:
{\__mcrule_tikz_picture:n {#1}},
- custom-pattern .code:n = \cs_set:Npn \__mcrule_divider:
+ custom-pattern .code:n = \cs_set:Npn \__mcrule_divider:
{\__mcrule_pattern:nnn #1},
- custom-tile .code:n = \cs_set:Npn \__mcrule_divider:
+ custom-tile .code:n = \cs_set:Npn \__mcrule_divider:
{\__mcrule_tile_pattern:nnn #1},
- width .choice:,
+ width .choice:,
width / ultra-thin .code:n = \dim_set:Nn \columnseprule {0.1pt},
width / very-thin .code:n = \dim_set:Nn \columnseprule {0.2pt},
width / thin .code:n = \dim_set:Nn \columnseprule {0.4pt},
@@ -280,7 +344,7 @@
%%
%% This file may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License (LPPL), either
-%% version 1.3 of this license or (at your option) any later
+%% version 1.3c of this license or (at your option) any later
%% version. The latest version of this license is in the file:
%% https://www.latex-project.org/lppl.txt
%%