texlive[49480] Master/texmf-dist: multicolrule (22dec18)

commits+karl at tug.org commits+karl at tug.org
Sat Dec 22 22:54:43 CET 2018


Revision: 49480
          http://tug.org/svn/texlive?view=revision&revision=49480
Author:   karl
Date:     2018-12-22 22:54:42 +0100 (Sat, 22 Dec 2018)
Log Message:
-----------
multicolrule (22dec18)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/latex/multicolrule/README.md
    trunk/Master/texmf-dist/doc/latex/multicolrule/mcrule-examples.pdf
    trunk/Master/texmf-dist/doc/latex/multicolrule/mcrule-examples.tex
    trunk/Master/texmf-dist/doc/latex/multicolrule/multicolrule.pdf
    trunk/Master/texmf-dist/source/latex/multicolrule/multicolrule.dtx
    trunk/Master/texmf-dist/source/latex/multicolrule/multicolrule.ins
    trunk/Master/texmf-dist/tex/latex/multicolrule/multicolrule.sty

Modified: trunk/Master/texmf-dist/doc/latex/multicolrule/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/multicolrule/README.md	2018-12-22 21:54:16 UTC (rev 49479)
+++ trunk/Master/texmf-dist/doc/latex/multicolrule/README.md	2018-12-22 21:54:42 UTC (rev 49480)
@@ -15,16 +15,17 @@
 compile the documentation at the same time, simply process the
 .dtx file with LaTeX (for example, `pdflatex multicolrule.dtx`).
 To extract the package only, process the file with TeX
-(`tex multicolrule.dtx`). If you have trouble compiling the
-index for the documentation, note that the documentation uses
-the l3doc class to index the code, and so the makeindex command
-should be the following:
+(`tex multicolrule.dtx`). Note that the documentation uses
+the l3doc class to index the code, and so to get the index, you
+must issue:
 
 `makeindex -s gind.ist -o multicolrule.ind multicolrule.idx`
 
+and to get the change list, you must issue
+
+`makeindex -s gglo.ist -o multicolrule.gls multicolrule.glo`.
+
 This package requires LaTeX3 support to run, and compiling the
 documentation requires a variety of other packages, all of which
 are available on CTAN and any modern installation (TeX Live,
 MiKTeX, etc.).
-\RequirePackage{expl3}
-\RequirePackage{xparse}

Modified: trunk/Master/texmf-dist/doc/latex/multicolrule/mcrule-examples.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/multicolrule/mcrule-examples.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/multicolrule/mcrule-examples.tex	2018-12-22 21:54:16 UTC (rev 49479)
+++ trunk/Master/texmf-dist/doc/latex/multicolrule/mcrule-examples.tex	2018-12-22 21:54:42 UTC (rev 49480)
@@ -1,8 +1,11 @@
+% !TeX program = xelatex
 \documentclass{article}
-\usepackage[tikz]{multicolrule}
+\usepackage{fontspec}
+\usepackage[tikz]{multicolrule}[2018/12/21]
 \usepackage{lipsum}
 \usepackage{bbding}
 \usepackage{pgfornament}
+\usepackage{bidi}
 \setlength{\columnsep}{24pt}
 \setlength{\columnseprule}{.5pt}
 \begin{document}
@@ -13,10 +16,15 @@
 for instructions on how to set them in your own documents.
 
 \subsection*{Works without Tikz}
-\begin{multicols}{2}[Default (solid)]
+\begin{multicols}{2}[Default]
 \lipsum[1]
 \end{multicols}
 
+\begin{multicols}{2}[Solid]
+  \SetMCRule{line-style=solid}
+  \lipsum[1]
+\end{multicols}
+
 \begin{multicols}{2}[Double (+ color test)]
   \SetMCRule{color=red,double=2pt}
   \lipsum[1]
@@ -82,7 +90,6 @@
   \lipsum[1]
 \end{multicols}
 
-
 \subsection*{Tikz Only}
 \begin{multicols}{2}[Circles]
   \SetMCRule{width=3pt,line-style=circles}
@@ -156,4 +163,45 @@
   \lipsum[1]
 \end{multicols}
 
+\subsection*{Extended Rules}
+\setlength{\columnsep}{24pt}
+
+\begin{multicols}{2}[Solid -- extend bottom 16pt]
+  \SetMCRule{line-style=solid,extend-bot=16pt}
+  \lipsum[1]
+\end{multicols}
+
+\begin{multicols}{2}[Dots -- extend top 16pt]
+  \SetMCRule{line-style=dots,extend-top=16pt}
+  \lipsum[1]
+\end{multicols}
+
+\begin{multicols}{2}[Dashed -- shrink both 16pt]
+  \SetMCRule{line-style=dashed,extend-top=-16pt,extend-bot=-16pt}
+  \lipsum[1]
+\end{multicols}
+
+\begin{multicols}{2}[Extend-Fill with extend-reserve]
+  \SetMCRule{line-style=solid,extend-fill,extend-reserve=\baselineskip}
+  \lipsum[1-5]
+\end{multicols}
+And something at the end to show the reserved space
+
+\subsection*{RTL Test}
+
+  \RLmulticolcolumns
+
+\begin{multicols}{2}[Reverse Columns Only]
+  \SetMCRule{custom-tile={+}{8pt}{8pt}}
+  \lipsum[1]
+\end{multicols}
+
+\begin{RTL}
+  \begin{multicols}{2}[Mode RTL Full]
+    \SetMCRule{line-style=dashed}
+    \lipsum[1]
+  \end{multicols}
+\end{RTL}
+
+
 \end{document}

Modified: trunk/Master/texmf-dist/doc/latex/multicolrule/multicolrule.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/source/latex/multicolrule/multicolrule.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/multicolrule/multicolrule.dtx	2018-12-22 21:54:16 UTC (rev 49479)
+++ trunk/Master/texmf-dist/source/latex/multicolrule/multicolrule.dtx	2018-12-22 21:54:42 UTC (rev 49480)
@@ -21,13 +21,16 @@
 compile the documentation at the same time, simply process the
 .dtx file with LaTeX (for example, `pdflatex multicolrule.dtx`).
 To extract the package only, process the file with TeX 
-(`tex multicolrule.dtx`). If you have trouble compiling the
-index for the documentation, note that the documentation uses
-the l3doc class to index the code, and so the makeindex command
-should be the following:
+(`tex multicolrule.dtx`). Note that the documentation uses
+the l3doc class to index the code, and so to get the index, you
+must issue:
 
 `makeindex -s gind.ist -o multicolrule.ind multicolrule.idx`
 
+and to get the change list, you must issue
+
+`makeindex -s gglo.ist -o multicolrule.gls multicolrule.glo`.
+
 This package requires LaTeX3 support to run, and compiling the
 documentation requires a variety of other packages, all of which
 are available on CTAN and any modern installation (TeX Live,
@@ -59,7 +62,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
 
@@ -95,8 +98,10 @@
 \expandafter\endgroup
 \fi
 %</internal>
+%<*driver|package>
 \RequirePackage{expl3}
 \RequirePackage{xparse}
+%</driver|package>
 %<*driver>
 \PassOptionsToPackage{svgnames}{xcolor}
 \documentclass{l3doc}
@@ -137,23 +142,20 @@
 %
 %\GetFileInfo{\jobname.sty}
 %
-%^^A \bool_lazy_and:nnTF and \tl_if_empty:NTF are appearing in the index even
-%^^A though they're explicitly excluded below. Why is that?
-%
-%\DoNotIndex{\begin,
-%   \bool_gset_true:N,
-%   \bool_if:NTF,
-%   \bool_lazy_and:nnTF,
-%   \bool_new:N,\box_ht:N,\cs_generate_variant:Nn,\cs_gset:Npn,\cs_new:Npn,
+%\DoNotIndex{\AfterPackage,\begin,\bool_gset_true:N,\bool_if:NTF,
+%   \bool_lazy_and:nnT,\cs_gset_eq:NN,\bool_if_p:n,\bool_lazy_and:nnTF,
+%   \bool_not_p:n,\bool_new:N,\box_ht:N,\box_dp:N,\box_move_down:nn,
+%   \cs_generate_variant:Nn,\cs_gset:Npn,\cs_new:Npn,
 %   \cs_new_nopar:Npn,\cs_set:Npn,\dim_compare_p:nNn,\dim_new:N,\dim_set:Nn,
+%   \dim_compare:nNnTF,\dim_eval:n,\dimen,
 %   \end,\ExplSyntaxOff,\ExplSyntaxOn,\fill,\hbox:n,\hspace,\ht,
 %   \int_compare_p:nNn,\int_new:N,\int_set:Nn,\kern,\keys_define:nn,
 %   \keys_set:nn,\msg_error:nnn,\msg_info:nnn,\msg_new:nnn,\msg_warning:nn,
 %   \NewDocumentCommand,\node,\prg_replicate:nn,\ProcessKeysOptions,
-%   \ProvidesExplPackage,\RequirePackage,\rule,
-%   \tl_if_empty:NTF,\tl_new:N,
-%   \tl_set:Nn,\vbox:n,\vbox_to_ht:nn,\vfill,\vrule,\xpatchcmd,
-%   \cs_new_protected:Npn,\@ifpackageloaded,\@width}
+%   \ProvidesExplPackage,\RequirePackage,\rule,\normalcolor,
+%   \tl_if_empty:NT,\tl_if_empty:NTF,\tl_new:N,\tw@,
+%   \tl_set:Nn,\vbox:n,\vbox_to_ht:nn,\vfill,\vrule,
+%   \cs_new_protected:Npn,\@ifpackageloaded,\@width,\xpatchcmd}
 %
 %\title{^^A
 %  \textsf{multicolrule} --- Decorative rules between columns\thanks{^^A
@@ -167,7 +169,8 @@
 %
 %\maketitle
 %
-%\changes{v0.1}{2018/12/15}{Initial public release}
+%\changes{v1.0}{2018/12/15}{Initial public release}
+%\changes{v1.1}{2018/12/21}{Work with \pkg{bidi} and allow extending rules}
 %
 %\begin{abstract}
 % The \mcrule{} package lets you customize the appearance of the vertical rule
@@ -174,11 +177,15 @@
 % that appears between columns of multicolumn text. It is primarily intended to
 % work with the \pkg{multicol} package, hence its name, but it also supports
 % the twocolumn option and \cs{twocolumn} macro provided by the standard
-% classes (and related classes such as the KOMA-Script equivalents).
+% classes (and related classes such as the KOMA-Script equivalents), as well as
+% the \pkg{bidi} package (and through it, all RTL scripts loaded with
+% \pkg{polyglossia}).
 %\end{abstract}
 %
 %\tableofcontents
 %
+%\begin{documentation}
+%
 %\begin{multicols}{2}[\section{Introduction}]
 %\SetMCRule{line-style=dashed}
 %  
@@ -200,21 +207,27 @@
 % infrastructure for one line style, it was simple to extend the solution to a
 % more general case. I hope someone else will find the options here useful.
 %
-% Note---in case it isn't obvious yet---that this guide illustrates the basic
-% line styles that \mcrule{} makes available throught the document. The default
-% line-width is 0.4pt (thin), and the default color is \texttt{Maroon}. You can
-% find examples of rules created with all available options in the file
-% \file{mcrule-example.pdf}.
+% The basic line styles that \mcrule{} makes available are illustrated
+% throughout this guide. The default line-width used is 0.4pt (thin), and the
+% default color is \texttt{Maroon}. You can also find examples of rules created
+% with all available options in the file \file{mcrule-example.pdf}.
+%
+% \subsection*{New for Version 1.1}
+% Version 1.1 now supports drawing decorative rules if you have the \pkg{bidi}
+% package loaded, which can occur automatically if you set a right-to-left
+% language with \pkg{polyglossia}. It also provides a mechanism to extend or
+% shrink rules by fixed amounts, as well as to have the rule fill the available
+% space to the end of the text area (see section \ref{sec:extend}).
+%
 % \end{multicols}
 %
 % \begin{multicols}{2}[\subsection{Bugs and Known Limitations}]
-% As\stydsc{line-style=dots} this is the first release of this package, there
-% are likely bugs that remain to be uncovered, as well as missing features and
-% inefficient methods that should be improved upon. The development code is
-% maintained on github (\url{https://github.com/polysyllabic/multicolrule}),
-% and you can file feature requests or bug reports there. Alternatively, you
-% can send an email to
-% \href{mailto://latex@polysyllabic.com}{latex at polysyllabic.com}. I welcome
+% There\stydsc{line-style=dots} are likely bugs that remain to be uncovered,
+% as well as missing features and inefficient methods that should be improved
+% upon. The development code is maintained on github
+% (\url{https://github.com/polysyllabic/multicolrule}), and you can file
+% feature requests or bug reports there. Alternatively, you can send an email
+% to \href{mailto://latex@polysyllabic.com}{latex at polysyllabic.com}. I welcome
 % contributions for additional styles, especially to provide more options when
 % running the package without \pkg{tikz}.
 %  
@@ -234,16 +247,17 @@
 % works, as the default rules show the same behavior. I may try to nail down
 % this issue in future version, but as it's an edge case that disappears when
 % you add page breaks or rewrite the text to alter how the columns are filled,
-% it hasn't seemed worth 
+% it hasn't seemed worth taking the time to fix at this point.
 % 
 % This package works by patching the output routines of either \pkg{multicol}
-% or the \LaTeX{} kernel, depending on the mode of operation. It therefore will
-% have no effect if you use a class or package that outputs column text via
-% alternate mechanisms. This includes \pkg{parcolumns}, and probably other
-% classes and packages designed to typeset parallel-column text as well, although
-% I have not done a survey to determine whether this is the case. If you would
-% like support for one of these, please send me an email or file a feature
-% request on github and I'll see what I can do.
+% or the \LaTeX{} kernel, depending on the mode of operation. If \pkg{bidi} is
+% loaded, it will also patch that. It will have no effect if you use a class or
+% package that outputs column text via alternate mechanisms. This includes
+% \pkg{parcolumns}, and probably other classes and packages designed to typeset
+% parallel-column text as well, although I have not done a survey to determine
+% whether this is the case. If you would like support for one of these, please
+% send me an email or file a feature request on github and I'll see what I can
+% do.
 % 
 % \mcrule{} is written using expl3 syntax, and so requires a less-than-ancient
 % installation of \LaTeX. It uses the packages \pkg{l3keys2e}, \pkg{xparse},
@@ -255,11 +269,11 @@
 % \begin{multicols}{2}[\subsection{License}]
 % \SetMCRule{width=ultra-thick,line-style=dotted}
 % The\stydsc{\texttt{line-style=dotted, width=ultra-thick}} \mcrule{}
-% package is copyright 2018 by Karl Hagen. It 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 \url{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.
+% package is copyright 2018 by Karl Hagen. It may be distributed and/or
+% modified under the conditions of the \LaTeX{} Project Public License, either
+% version 1.3c of this license or (at your option) any later version. The
+% latest version of this license is in
+% \url{http://www.latex-project.org/lppl.txt}.
 %  
 % This work has the LPPL maintenance status `maintained.' The Current
 % Maintainer of this work is Karl Hagen.
@@ -309,13 +323,12 @@
 %
 % \begin{multicols}{2}[\section{The User Interface}]
 % \SetMCRule{width=2pt,line-style=circles}
-% \DescribeMacro{\SetMCRule}
 % The\stydsc{line-style=circles,\\width=2pt} \mcrule{} package has
 % just a single user command:
 %
 % \cs{SetMCRule} \marg{key-value}
 %
-% which takes one parameter containing a key-value list of all options you
+% \noindent It takes one parameter containing a key-value list of all options you
 % want to set. You can issue this command in the preamble or the document body.
 % Changes to the rule settings are local to the current group. For example, if
 % you call \cs{SetMCRule} inside a \env{multicols} environment, the rule
@@ -345,15 +358,23 @@
 % \kvdesc{color-model} & Set the color model of the rule (see sec.
 % \ref{sec:color})\\
 % \kvdesc{custom-line} & Set a custom \pkg{tikz} line for the rule 
-% (\emph{tikz only}; see \ref{sec:custom})\\
+% (\emph{tikz only}; see sec. \ref{sec:custom})\\
 % \kvdesc{custom-pattern} & Set a custom individual pattern for the rule (see
-% \ref{sec:custom})\\
+% sec. \ref{sec:custom})\\
 % \kvdesc{custom-tile} & Set a custom tiling pattern for the rule
-% (see \ref{sec:custom})\\
+% (see sec. \ref{sec:custom})\\
 % \kvdesc{double} & Draw two copies of the rule (see sec.
 % \ref{sec:repeats})\\
-% \kvdesc{line-style} & Select the type of rule printed (see sec.
-% \ref{sec:linestyles})\\
+% \kvdesc{extend-bot} & Set an extra amount to extend the rule at the bottom of
+% the column (see sec. \ref{sec:extend})\\
+% \kvdesc{extend-fill} & Extend rule to the bottom of the text area
+% (\emph{multicol} only; see sec. \ref{sec:extend})\\
+% \kvdesc{extend-reserve} & Space to reserve at bottom of text area when using
+% \kvdesc{extend-fill} (\emph{multicol} only; see sec, \ref{sec:extend})\\
+% \kvdesc{extend-top} & Set an extra amount to extend the rule at the top of 
+% the column (see sec. \ref{sec:extend})\\
+% \kvdesc{line-style} & Select the type of rule printed 
+% (default=\emph{default}; see sec. \ref{sec:linestyles})\\
 % \kvdesc{single} & Draw a single copy of the rule (\emph{default};
 % see sec. \ref{sec:repeats})\\
 % \kvdesc{repeat} & Set the number of times to draw the rule (see
@@ -371,20 +392,17 @@
 %   \label{sec:linestyles}]
 %  \SetMCRule{width=4pt,line-style=solid-circles}
 %  
-% You\stydsc{line-style=solid-circles,\\width=4pt} choose a style for the rule
-% with the \kvdesc{line-style} key. The default style is \kvdesc{solid}. In
-% addition to the predefined styles, there are also several ways to get
-% \mcrule{} to draw custom shapes in place of the column rule. The width of
-% most line styles depends on the setting of \cs{columnseprule}, which is the
-% default \LaTeX{} length that controls the width of the column rule
-% (see section \ref{sec:width}). 
+% You\stydsc{line-style= solid-circles,\\ width=4pt} choose a style for the rule
+% with the \kvdesc{line-style} key.  If the predefined styles are insufficient,
+% see section \ref{sec:custom} for different ways to customize it. The width of
+% most line styles depends on the setting of \cs{columnseprule}, the default
+% \LaTeX{} length that controls the width of the column rule (see section
+% \ref{sec:width}). 
 %  
-% Table \ref{table:linestyles} summarizes the available line styles.
-% Most of the basic shapes used to form the patterns come in three versions,
-% which differ only in how closely the pattern is spaced: normal, dense, and
-% loose. These settings parallel those found in \pkg{tikz}, and those
-% line styles whose names are identical to the line patterns in \pkg{tikz}
-% (apart from the substitution of `-' for spaces) produce the same effect.
+% Table \ref{table:linestyles} summarizes the available line styles. Most of
+% the basic patterns come in three versions, differing only in how closely the
+% pattern is spaced: normal, dense, and loose. These settings parallel those
+% found in \pkg{tikz}.
 % \end{multicols}
 %
 % \begin{longtable}{lp{3in}}
@@ -405,25 +423,40 @@
 %   \kvdesc{dash-dot-dot} & A dash followed by two square dots
 %     (\emph{tikz only})\\
 %   \kvdesc{dashed} & A series of dashed lines\\
+%   \kvdesc{default} & A solid rule drawn the same way as the default
+% \pkg{multicol} rule. Does not support extended rules.\\
 %   \kvdesc{dense-circles} & The same as \kvdesc{circles}
 %     but more closely spaced (\emph{tikz only})\\
 %   \kvdesc{dense-dots} & The same as \kvdesc{dots} but
 %     more closely spaced\\
-%   \kvdesc{dense-solid-circles} & The same as \kvdesc{solid-circles} but more closely spaced (\emph{tikz only})\\
-%   \kvdesc{densely-dash-dot} & The same as \kvdesc{dash-dot} but more closely spaced (\emph{tikz only})\\
-%   \kvdesc{densely-dash-dot-dot} & The same as \kvdesc{dash-dot-dot} but more closely spaced (\emph{tikz only})\\
-%   \kvdesc{densely-dashed} & The same as \kvdesc{dashed} but more closely spaced\\
-%   \kvdesc{densely-dotted} & The same as \kvdesc{dotted} but more closely spaced\\
-%   \kvdesc{dots}  & A series of dots drawn with the period (full-stop) of the current font\\
+%   \kvdesc{dense-solid-circles} & The same as \kvdesc{solid-circles} but more
+% closely spaced (\emph{tikz only})\\
+%   \kvdesc{densely-dash-dot} & The same as \kvdesc{dash-dot} but more closely
+% spaced (\emph{tikz only})\\
+%   \kvdesc{densely-dash-dot-dot} & The same as \kvdesc{dash-dot-dot} but more
+% closely spaced (\emph{tikz only})\\
+%   \kvdesc{densely-dashed} & The same as \kvdesc{dashed} but more closely
+% spaced\\
+%   \kvdesc{densely-dotted} & The same as \kvdesc{dotted} but more closely
+% spaced\\
+%   \kvdesc{dots}  & A series of dots drawn with the period (full-stop) of the
+% current font\\
 %   \kvdesc{dotted} & A series of square dots\\
 %   \kvdesc{loose-dots} & The same as \kvdesc{dots} but spaced further apart\\
-%   \kvdesc{loose-circles} & The same as \kvdesc{circles} but spaced further apart (\emph{tikz only})\\
-%   \kvdesc{loose-solid-circles} & The same as \kvdesc{solid-circles} but spaced further apart (\emph{tikz only})\\
-%   \kvdesc{loosely-dash-dot} & The same as \kvdesc{dash-dot} but spaced further apart (\emph{tikz only})\\
-%   \kvdesc{loosely-dash-dot-dot} & The same as \kvdesc{dash-dot-dot} but spaced further apart (\emph{tikz only})\\
-%   \kvdesc{loosely-dashed} & The same as \kvdesc{dashed} but spaced further apart\\
-%   \kvdesc{loosely-dotted} & The same as \kvdesc{dotted} but spaced further apart\\
-% \kvdesc{solid} & A solid line (\emph{default})\\
+%   \kvdesc{loose-circles} & The same as \kvdesc{circles} but spaced further
+% apart (\emph{tikz only})\\
+%   \kvdesc{loose-solid-circles} & The same as \kvdesc{solid-circles} but
+% spaced further apart (\emph{tikz only})\\
+%   \kvdesc{loosely-dash-dot} & The same as \kvdesc{dash-dot} but spaced
+% further apart (\emph{tikz only})\\
+%   \kvdesc{loosely-dash-dot-dot} & The same as \kvdesc{dash-dot-dot} but
+% spaced further apart (\emph{tikz only})\\
+%   \kvdesc{loosely-dashed} & The same as \kvdesc{dashed} but spaced further
+% apart\\
+%   \kvdesc{loosely-dotted} & The same as \kvdesc{dotted} but spaced further
+% apart\\
+% \kvdesc{solid} & A solid line, like \kvdesc{default}, but supports extending
+% rules\\
 % \kvdesc{solid-circles} & A series of filled circles (\emph{tikz only})\\
 % \bottomrule
 % \end{longtable}
@@ -430,29 +463,33 @@
 %
 % \begin{multicols}{2}[\subsubsection{Notes on the Styles}]
 % \SetMCRule{width=thin,line-style=solid} 
-% The\stydsc{line-style=solid} \kvdesc{solid}
-% line style is the default. In fact, if you make no calls to \cs{SetMCRule}
-% after loading \mcrule, the column divider will behave exactly as it does with
-% the ordinary \pkg{multicol} package. You can alter its width and color either
-% with the
-% \kvdesc{width} and \kvdesc{color} keys described in
-% sections \ref{sec:width} and \ref{sec:color}, respectively, or you can set the
-% width directly by changing the value of \cs{columnseprule} and renewing the
-% \cs{columnseprulecolor} macro. Like all line styles, the solid line can be
-% repeated as many times as you like (see section \ref{sec:repeats}).
+% The\stydsc{line-style=solid} \kvdesc{default} and \kvdesc{solid} line styles
+% are nearly the same, except that the \kvdesc{solid} line (as of version 1.1)
+% supports the rule-extension commands described in section \ref{sec:extend}.
+% This means that if you want a solid rule with altered top or bottom
+% extensions, you must explicitly set the line style to \kvdesc{solid}. If you
+% make no calls to \cs{SetMCRule} after loading \mcrule, the column divider
+% will continue to behave exactly as it does with the ordinary \pkg{multicol}
+% package.
+%
+% You can alter the rule's width and color either through \cs{SetMCRule} with
+% the \kvdesc{width} and \kvdesc{color} keys described in sections
+% \ref{sec:width} and \ref{sec:color}, respectively, or directly by changing
+% the value of \cs{columnseprule} and renewing the \cs{columnseprulecolor}
+% macro. All line styles, including \kvdesc{default}, can be repeated as many
+% times as you like (see section \ref{sec:repeats}).
 %  
-% The \kvdesc{dots} style and its variants are rendered with a period
-% (.) in the currently active font. This means that changing
-% \cs{columnseprule} will not change the size of these dots, although, as with
-% all rules, it will not appear at all if \cs{columnseprule} is set to 0pt.
+% The \kvdesc{dots} style and its variants are rendered with a period (.) in
+% the currently active font. This means that changing \cs{columnseprule} will
+% not change the size of these dots, although, as with all rules, it will not
+% appear at all if \cs{columnseprule} is set to 0pt. Custom tiles and patterns
+% also do not scale with \cs{columnseprule}.
 %
-% The \kvdesc{dotted} styles differ from \kvdesc{dots} in
-% that the former are squares with side lengths equal to \cs{columnseprule}.
-% This mirrors the behavior of the equivalently named dotted patterns in
-% \pkg{tikz}.
+% The \kvdesc{dotted} styles differ from \kvdesc{dots} in that the former are
+% squares with side lengths equal to \cs{columnseprule}. This mirrors the
+% behavior of the equivalently named dotted patterns in \pkg{tikz}.
 % \end{multicols}
 %
-% \clearpage
 % \subsubsection{Custom Patterns}\label{sec:custom}
 %
 % \begin{multicols}{2}[\noindent\texttt{custom-tile=} \marg{pattern} \marg{space above}
@@ -472,7 +509,9 @@
 %
 % The rule in this section uses the \cs{SparkleBold} symbol from
 % \pkg{bbding}. Notice that when you use the \kvdesc{custom-tile} parameter,
-% you do \emph{not} specify a separate \kvdesc{line-style}.
+% of any of the other custom key commands, you do \emph{not} specify a separate
+% \kvdesc{line-style}. If you try to provide both, the last style given in the
+% list will be the one that is kept.
 % \end{multicols}
 %
 % \begin{multicols}{2}[\noindent\texttt{custom-pattern=} \marg{pattern} \marg{shift
@@ -489,6 +528,7 @@
 % uses the \cs{HandRight} symbol from \pkg{bbding}.
 % \end{multicols}
 %
+% \clearpage
 % \begin{multicols}{2}[\noindent\texttt{custom-line=} \marg{draw command}]
 % \SetMCRule{width=1pt,custom-line={\draw[line width=\columnseprule] (TOP) to
 %   [ornament=88] (BOT);}}
@@ -549,7 +589,7 @@
 %
 % \begin{multicols}{2}[\subsection{Width}\label{sec:width}]
 % \SetMCRule{width=thick,line-style=dash-dot-dot}
-% You\stydsc{line-style=dash-dot-dot,\\width=thick} can set the width of the
+% You\stydsc{line-style= dash-dot-dot,\\ width=thick} can set the width of the
 % rule with the \kvdesc{width} key. Legal values are any explicit dimension or
 % dimension expression, as well as with names that parallel those used by
 % \pkg{tikz}, except that spaces in the key names are replaced with hyphens.
@@ -595,8 +635,8 @@
 %  
 % The keys \kvdesc{single}, \kvdesc{double}, and \kvdesc{triple} are shorthand
 % methods to set the number of repeats and the \kvdesc{repeat-distance} at the
-% same time. If use the key without a value \kvdesc{repeat-distance} is set to 
-% \cs{columnseprule}.
+% same time. If you use the key without a value \kvdesc{repeat-distance} is set
+% to \cs{columnseprule}.
 %
 % There are no checks made to ensure that repeated rules will fit in the
 % available space between columns, so you should be careful using these
@@ -603,14 +643,48 @@
 % commands, especially with thicker rules.
 % \end{multicols}
 %
-%\StopEventually{^^A
-%  \PrintChanges
-%  \clearpage
-%  \PrintIndex
-%}
+%\begin{multicols}{2}[\subsection{Extended Rules}\label{sec:extend}]
+% \SetMCRule{line-style=dashed,extend-top=-16pt,extend-bot=-16pt}
 %
-% \section{Implementation}
+% You\stydsc{line-style=dashed, extend-top=-16pt, extend-bot=-16pt} can specify
+% an additional amount by which the top or bottom of the rule projects beyond
+% the column's natural length with the keys \kvdesc{extend-top} and
+% \kvdesc{extend-bot}, each of which can be set to a dimension expression.
+% Extending the top of the rule with a positive dimension will push the columns
+% down from any preceding material. A positive value for \kvdesc{extend-bot}
+% does the same in the other direction when a column ends in the middle of a
+% page, but the rule will extend into the the bottom margin if the column goes
+% to the end of the page, and so you probably only want to use this in very
+% limited situations where you need a special effect for one small
+% \env{multicol} environment. Negative values for both keys may be more 
+% generally useful, as they have the effect of shrinking the rule. This
+% behavior is illustrated with the rule for this section.
 %
+% The \kvdesc{extend-fill} key is a boolean option that, when set to true, will
+% extend the rule to occupy any space between the bottom of the columns and the
+% end of the text area. Providing the key with no value is equivalent to
+% |extend-fill=true|. This option has no effect unless the \pkg{multicol}
+% package is loaded.
+%
+% If you want text below the \env{multicols} environment when using
+% \kvdesc{extend-fill}, you can reserve space for it with
+% \kvdesc{extend-reserve}, which takes a dimension expression specifying the
+% vertical space to leave available after the rule. If the value is greater
+% than zero, the height of the extended line will be reduced by the reserved
+% amount plus the value of \cs{multicolsep}. In other words, you only have to
+% specify the actual space you need for the text itself, not the space that 
+% \pkg{multicol} adds automatically below the columns. Note that if the amount
+% you request for reserved space is less than the amount actually available at
+% the end of the page, the rule will not extend below the columns and you
+% probably will find this material spilling onto the next page anyway.
+% 
+%\end{multicols}
+%\end{documentation}
+%
+%\begin{implementation}
+%
+%\section{Implementation}
+%
 %    \begin{macrocode}
 %<*package>
 %    \end{macrocode}
@@ -622,8 +696,8 @@
 %\subsection{Preliminaries}
 %
 %    \begin{macrocode}
-\ProvidesExplPackage {multicolrule} {2018/12/18} {1.0}
-{Decorative~vertical~rules~between~columns}
+\ProvidesExplPackage {multicolrule} {2018/12/21} {1.1}
+  {Decorative~vertical~rules~between~columns}
 %    \end{macrocode}
 %
 % We always need these packages.
@@ -631,6 +705,7 @@
 \RequirePackage{l3keys2e}
 \RequirePackage{xpatch}
 \RequirePackage{xcolor}
+\RequirePackage{scrlfile}
 %    \end{macrocode}
 %
 % Define the messages we use.
@@ -644,32 +719,34 @@
   option~with~multicol~already~loaded.~You~will~likely~run~into~problems.}
 %    \end{macrocode}
 %
-%\begin{variable}{\g_@@_twocolumn_bool}
-% Use traditional two-column mode rather than \pkg{multicol}
+%\begin{variable}{\g_@@_twocolumn_bool,\g_@@_use_tikz_bool}
+% Flags for package options
 %    \begin{macrocode}
 \bool_new:N \g_@@_twocolumn_bool
-%    \end{macrocode}
-%\end{variable}
-%
-%\begin{variable}{\g_@@_use_tikz_bool}
-% Support drawing rules with \pkg{tikz}
-%    \begin{macrocode}
 \bool_new:N \g_@@_use_tikz_bool
 %    \end{macrocode}
 %\end{variable}
 %
-%\begin{variable}{\l_@@_repeat_int}
-% Number of times to copy the rule.
+%\begin{variable}{\l_@@_repeat_int,\l_@@_repeat_distance_dim}
+% Variables to support repeated copies of the rule.
 %    \begin{macrocode}
-\int_new:N \l_@@_repeat_int
+\int_new:N  \l_@@_repeat_int
 \int_set:Nn \l_@@_repeat_int {1}
+\dim_new:N  \l_@@_repeat_distance_dim
 %    \end{macrocode}
 %\end{variable}
 %
-%\begin{variable}{\l_@@_repeat_distance_dim}
-% Separation between multiple copies of the rule.
+%\begin{variable}{\l_@@_extend_top_dim,
+%  \l_@@_extend_bot_dim,
+%  \l_@@_extend_fill_bool,
+%  \l_@@_extend_reserve_dim}
+% Variables to control the distance to extend the rule above and below the
+% natural column height.
 %    \begin{macrocode}
-\dim_new:N \l_@@_repeat_distance_dim
+\dim_new:N  \l_@@_extend_top_dim
+\dim_new:N  \l_@@_extend_bot_dim
+\bool_new:N \l_@@_extend_fill_bool
+\dim_new:N  \l_@@_extend_reserve_dim
 %    \end{macrocode}
 %\end{variable}
 %
@@ -707,85 +784,146 @@
 %
 % \subsection{Patching Output Routines}
 %
-%\begin{function}{\@@_col_box:}
-% Holds a reference to the box appropriate to the supported mode. We'll use
-% this when we need to know the height of the columns.
+%\begin{function}{\@@_column_height:,\@@_column_depth:}
 %
+% Get the height and depth of the box appropriate to the supported mode.
+%
 %    \begin{macrocode}
-\cs_new:Npn \@@_col_box: {}
+\cs_new:Npn \@@_column_height: {}
+\cs_new:Npn \@@_column_depth: {}
 %    \end{macrocode}
 %\end{function}
 %
-% Now that we know what mode we're going to run in, we patch the output routine
-% to substitute our custom rule for the vanilla one. Since \pkg{multicol}
-% doesn't fully support twocolumn mode, we patch one or the other, but not
-% both.
-% 
+% Now that we know what mode we're going to run in, we patch the output
+% routine(s) to substitute our custom rule for the vanilla one. Since
+% \pkg{multicol} doesn't fully support twocolumn mode, we patch one or the
+% other, but not both.
+%
+%\begin{function}{\@@_patch_mcol_output:N}
 %    \begin{macrocode}
+\cs_new_protected:Npn \@@_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}}
+}
+%    \end{macrocode}
+%\end{function}
+%
+%\begin{function}{\@@_patch_twocol_output:N}
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_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}}
+}
+%    \end{macrocode}
+%\end{function}
+%
+%    \begin{macrocode}
 \bool_if:NTF \g_@@_twocolumn_bool
 {
   \@ifpackageloaded{multicol}
-  {
-    \msg_warning:nn {multicolrule} {multicol-loaded}  
-  }
+  {\msg_warning:nn {multicolrule} {multicol-loaded}}{}
 %    \end{macrocode}
 % Provide the column-color macro from \pkg{multicol}.
 %    \begin{macrocode}
   \cs_gset:Npn \columnseprulecolor {\normalcolor}
-  \cs_gset:Npn \@@_col_box: {\@outputbox}
+  \cs_gset:Npn \@@_column_height: {\box_ht:N \@outputbox}
+  \cs_gset:Npn \@@_column_depth: {\box_dp:N \@outputbox}
+  \@@_patch_twocol_output:N \@outputdblcol
 %    \end{macrocode}
+%
 % Now patch the relevant code in |\@outputdblcol|, replacing the hard-coded
-% rule with a macro that we can overwrite
+% rule with a macro that we can overwrite.
+%
 %    \begin{macrocode}
-  \xpatchcmd{\@outputdblcol} {\normalcolor\vrule\@width\columnseprule}
-  {\columnseprulecolor\mcruledivider}
+  \@@_patch_twocol_output:N \@outputdblcol
+%    \end{macrocode}
+%
+% \pkg{bidi} has two output routines to patch, and it insists on being loaded
+% after \pkg{xcolor}, \pkg{tikz}, \emph{and} \pkg{multicol}, so it must always
+% be loaded after us. We use \cs{AfterPackage} from \pkg{scrlfile} to insert
+% the patch if \pkg{bidi} is loaded later on.
+%
+%    \begin{macrocode}
+  \AfterPackage!{bidi}
   {
-    \msg_info:nnn {multicolrule} {patch-success} {\@outputdblcol}
+    \@@_patch_twocol_output:N \RTL at outputdblcol
+    \@@_patch_twocol_output:N \LTR at outputdblcol
   }
-  {
-    \msg_info:nnn {multicolrule} {patch-failure} {\@outputdblcol}
-  }
 }
-{
 %    \end{macrocode}
 %
-% The patching for \pkg{multicol} is essentially the same as that for \LaTeX's
-% normal |twocolumn| mode, except we ensure that \pkg{multicol} is present and
-% we have two output routines to patch: one for LTR and the other for RTL
-% printing.
+% Now patch for \pkg{multicol}.
 %
 %    \begin{macrocode}
+{
   \RequirePackage{multicol}
-  \cs_gset:Npn \@@_col_box: {\mult at rightbox}
-  % Patch the code in multicol that creates the vertical rule.
-  \xpatchcmd{\LR at column@boxes} {\vrule\@width\columnseprule} {\mcruledivider}
-  {\msg_info:nnn {multicolrule} {patch-success} {\LR at column@boxes}}
-  {\msg_info:nnn {multicolrule} {patch-failure} {\LR at column@boxes}}
-  \xpatchcmd{\RL at column@boxes} {\vrule\@width\columnseprule} {\mcruledivider}
-  {\msg_info:nnn {multicolrule} {patch-success} {\RL at column@boxes}}
-  {\msg_info:nnn {multicolrule} {patch-failure} {\RL at column@boxes}}
+  \@@_patch_mcol_output:N \LR at column@boxes
+  \@@_patch_mcol_output:N \RL at column@boxes
 %    \end{macrocode}
 %
-% Reissue \cs{LRmulticolcolumns} to update the actual code
-% in \cmd{\mc at align@columns}.
+% Although taking the height of \cmd{\mult at rightbox} is a reliable way
+% to get the column height, the same isn't true for the depth, so we
+% use |\dimen\tw@|, which \pkg{multicol} uses to hold the maximum
+% depth of all the columns, instead.
 %
 %    \begin{macrocode}
-  \LRmulticolcolumns
+  \cs_gset:Npn \@@_column_height: {\box_ht:N \mult at rightbox}
+  \cs_gset:Npn \@@_column_depth: {\dimen\tw@}
+%    \end{macrocode}
+%
+% We need to reissue \cs{LRmulticolcolumns} to update the actual code in
+% \cmd{\mc at align@columns}.
+%
+%    \begin{macrocode}
+    \LRmulticolcolumns
+%    \end{macrocode}
+%
+% The \pkg{bidi} package supplies its own versions of most core
+% \pkg{multicol} functions, including the output boxes. Much of this is
+% unnecessary, as current versions of \pkg{multicol} support printing the
+% columns in right-to-left order, and the effect is to leave the original
+% \pkg{multicol} definitions loaded but unused. As a result, after these
+% changes, the \pkg{multicol} commands \cs{LRmulticolcolumns} and
+% \cs{RLmulticolcolumns} have no visible effect. But as \pkg{bidi} also
+% reworks the footnotes extensively, it's easier just to patch the equivalent
+% output routines rather than rewrite it properly.
+%
+%    \begin{macrocode}
+  \AfterPackage!{bidi}
+  {
+    \cs_gset_eq:NN \LTR at column@boxes \LR at column@boxes
+    \cs_gset_eq:NN \RTL at column@boxes \RL at column@boxes
+%    \end{macrocode}
+%
+% While we're at it, we also redefine \cs{LRmulticolcolumns} and
+% \cs{RLmulticolcolumns} so they work the way people expect them to.
+%
+%    \begin{macrocode}
+    \cs_gset_eq:NN \LRmulticolcolumns \LTRmulticolcolumns
+    \cs_gset_eq:NN \RLmulticolcolumns \RTLmulticolcolumns
+  }
 }
 %    \end{macrocode}
+% 
 %
 % \subsection{Creating the Rules}
 % Utility functions for different rule types
 %
 %\begin{macro}{\mcruledivider}
-% This is the function directly called by the patched \pkg{multicol} routines.
-% It's given a \LaTeX2 name so the user can redefine it if necessary. Its main
-% function is to call the internal function \cs{_@@_divider:}, which contains the
-% actual rule-typesetting instructions, the number of times specified in
-% \cs{l_@@_repeat_int}. We only call \cs{_@@_divider:} if \cs{columnseprule} $>0$, 
-% so that all line styles can be turned off by setting it to 0, just as is the
-% case with the vanilla rules.
 %
+% This is the function directly called by the patched output routines. It's
+% given a \LaTeX2 name so the user can redefine it if necessary. Its main
+% function is to call the internal function \cs{_@@_divider:}, which contains
+% the actual rule-typesetting instructions, the number of times specified in
+% \cs{l_@@_repeat_int}. We only call \cs{_@@_divider:} if \cs{columnseprule}
+% $>0$, so that all line styles can be turned off by setting it to 0, just as
+% is the case with the vanilla rules.
+%
 %    \begin{macrocode}
 \cs_new:Npn \mcruledivider
 {
@@ -793,11 +931,11 @@
   {\dim_compare_p:nNn {\columnseprule} > {0pt}}
   {\int_compare_p:nNn {\l_@@_repeat_int} > {0}}
   {
-    \_@@_divider:
+    \@@_divider:
     \prg_replicate:nn {\l_@@_repeat_int - 1}
     {
       \hspace{\l_@@_repeat_distance_dim}
-      \_@@_divider:
+      \@@_divider:
     }
   }
 }
@@ -804,14 +942,86 @@
 %    \end{macrocode}
 %\end{macro}
 %
-%\begin{function}{\_@@_divider:}
+%\begin{function}{\@@_column_total_height:,\@@_column_total_depth:}
+%
+% Get column height and depth with any explicit alterations.
+%
+%    \begin{macrocode}
+\cs_new:Npn \@@_column_total_height:
+{
+  \dim_eval:n {\@@_column_height: + \@@_column_depth: + 
+    \@@_extend_column_top: + \@@_extend_column_bottom:}
+}
+\cs_new:Npn \@@_column_total_depth:
+{
+  \dim_eval:n {\@@_column_depth: + \@@_extend_column_bottom:}
+}
+%    \end{macrocode}
+%\end{function}
+%
+%\begin{function}{\@@_extend_column_top:}
+%
+% Currently, the extend amount for the top is just the 
+% |\l_@@_extend_top_dim| distance. In the future we may allow more complex
+% criteria, such as by odd or even page, or on a particular page. Although
+% these might theoretically be useful, I'm not going to implement them until
+% someone comes along with a use-case for it.
+%
+%    \begin{macrocode}
+\cs_new:Npn \@@_extend_column_top:
+{
+  \l_@@_extend_top_dim
+}
+%    \end{macrocode}
+%\end{function}
+%
+%\begin{function}{\@@_extend_column_bottom:}
+%
+% The |extend-fill| option, which is only applicable with \pkg{multicol},
+% extends the rule from the bottom of the column to the end of the text area,
+% minus whatever reserved space the user specifies. If there's less space
+% available than requested, we give everything we can.
+%
+%    \begin{macrocode}
+\cs_new:Npn \@@_extend_column_bottom:
+{
+  \bool_lazy_and:nnTF
+  {\bool_if_p:n {\l_@@_extend_fill_bool}}
+  {\bool_not_p:n {\g_@@_twocolumn_bool}}
+  {
+    \dim_compare:nNnTF 
+    {\@colroom - \@@_column_height: - \@@_extend_reserve:} > {0pt}
+    {\@colroom - \@@_column_height: - \@@_extend_reserve:}
+    {0pt}
+  }
+  {\l_@@_extend_bot_dim}
+}
+%    \end{macrocode}
+%\end{function}
+%
+%\begin{function}{\@@_extend_reserve:}
+%
+% The reserved space is the amount of user-provided space we want, but we also
+% have to account for the space added with \cs{multicolsep}.
+%
+%    \begin{macrocode}
+\cs_new:Npn \@@_extend_reserve:
+{
+  \dim_compare:nNnTF {\l_@@_extend_reserve_dim} > {0pt}
+  {\dim_eval:n {\l_@@_extend_reserve_dim + \multicolsep}}
+  {0pt}
+}
+%    \end{macrocode}
+%\end{function}
+%
+%\begin{function}{\@@_divider:}
 % This is the internal routine that contains the instructions to draw one copy
 % of rule between columns. The default is identical to the original definition
 % used by \pkg{multicol}. It will be reset each time the user calls
-% |\MCSetRule|.
+% \cs{MCSetRule}.
 %
 %    \begin{macrocode}
-\cs_new:Npn \_@@_divider: {\vrule\@width\columnseprule}
+\cs_new:Npn \@@_divider: {\vrule\@width\columnseprule}
 %    \end{macrocode}
 %\end{function}
 %
@@ -827,10 +1037,14 @@
 %    \begin{macrocode}
 \cs_new_nopar:Npn \@@_pattern:nnn #1#2#3
 {
-  \vbox_to_ht:nn {\box_ht:N \@@_col_box:}
-  { \vfill
-    \kern #2 \hbox:n{#1} \kern #3
-    \vfill
+  \box_move_down:nn {\@@_column_total_depth:}
+  {
+    \vbox_to_ht:nn {\@@_column_total_height:}
+    {
+      \vfill
+      \kern #2 \hbox:n{#1} \kern #3
+      \vfill
+    }
   }
 }
 %    \end{macrocode}
@@ -847,11 +1061,16 @@
 %    \begin{macrocode}
 \cs_new_nopar:Npn \@@_tile_pattern:nnn #1#2#3
 {
-  \vbox_to_ht:nn {\box_ht:N \@@_col_box:}
+  \box_move_down:nn {\@@_column_total_depth:}
   {
-    \cleaders \vbox:n {
-      \kern #2 \hbox:n{#1} \kern #3
-    }\vfill
+    \vbox_to_ht:nn {\@@_column_total_height:}
+    {
+      \cleaders \vbox:n
+      {
+        \kern #2 \hbox:n{#1} \kern #3
+      }
+    \vfill
+    }
   }
 }
 %    \end{macrocode}
@@ -880,6 +1099,18 @@
 %    \end{macrocode}
 %\end{function}
 %
+%\begin{function}{\@@_solid_line:}
+% Unlike the default solid line, which is created with a simple \tn{vrule},
+% this version allows us to extend the line beyond the natural space of the
+% column.
+%    \begin{macrocode}
+\cs_new:Npn \@@_solid_line:
+{
+  \rule[-\@@_column_total_depth:]{\columnseprule}{\@@_column_total_height:}
+}
+%    \end{macrocode}
+%\end{function}
+%
 % \subsubsection{Tikz-only Routines}
 %
 % If we're supporting \pkg{tikz}, make sure it's loaded and redefine the
@@ -894,33 +1125,28 @@
   \ExplSyntaxOn  
 %    \end{macrocode}
 % 
-%\begin{function}{\@@_tikz_picture:n, \@@_tikz_picture:nn}
+%\begin{function}{\@@_tikz_picture:n}
 %  \begin{syntax}
 %    |\__mcrule_tikz_picture:n| \Arg{draw function}
 %  \end{syntax}
 % Set up the \env{tikzpicture} environment and declare two nodes, named |(TOP)|
 % and |(BOT)|. This way we can pass a \cs{draw} routine directly,
-% without worrying about the line's coordinates. We do a two-step call here to
-% force expansion of the second argument in a way that \pkg{tikz} likes.
+% without worrying about the line's coordinates.
 %
 %    \begin{macrocode}
-  \cs_set:Npn \@@_tikz_picture:n #1
-  {
-    \@@_tikz_picture:nx {#1} {\@@_col_box:}
-  }
-  \cs_set:Npn \@@_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
+\cs_set:Npn \@@_tikz_picture:n #1
+{
+  \begin{tikzpicture}[x=1pt,y=1pt,inner~sep=0pt,outer~sep=0pt,
+    baseline={([yshift=\@@_column_total_depth:]current~bounding~box.south)}]
+  \node (TOP) at (0,\@@_column_total_height:) {};
+  \node (BOT) at (0,0) {};
+  #1
     \end{tikzpicture}
-  }
-  \cs_generate_variant:Nn \@@_tikz_picture:nn {nx}  
+}
 %    \end{macrocode}
 %\end{function}
 %
-%\begin{function}{\@@_pattern_line:n,\@@_pattern_line:nn}
+%\begin{function}{\@@_pattern_line:n}
 %  \begin{syntax}
 %    |\__mcrule_pattern_line:n| \Arg{tikz pattern}
 %  \end{syntax}
@@ -929,17 +1155,13 @@
 % contain the name of a line style that \pkg{tikz} recognizes.
 %
 %    \begin{macrocode}
-  \cs_set:Npn \@@_pattern_line:n #1
-  {
-    \@@_pattern_line:nx {#1} {\@@_col_box:}
-  }
-  \cs_set:Npn \@@_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);
-    \end{tikzpicture}
-  }
-  \cs_generate_variant:Nn \@@_pattern_line:nn {nx}
+\cs_set:Npn \@@_pattern_line:n #1
+{
+  \begin{tikzpicture}[x=1pt,y=1pt,inner~sep=0pt,outer~sep=0pt,
+    baseline={([yshift=\@@_column_total_depth:]current~bounding~box.south)}]
+  \draw[line~width=\columnseprule,#1] (0,\@@_column_total_height:) -- (0,0);
+  \end{tikzpicture}
+}
 %    \end{macrocode}
 %\end{function}
 %
@@ -989,12 +1211,12 @@
 %    \end{macrocode}
 %
 % \subsection{Color}
-%\begin{function}{\_@@_set_rule_color:}
+%\begin{function}{\@@_set_rule_color:}
 % Reset color definition in \cs{columnseprulecolor} by name or
 % by model and color specification.
 %
 %    \begin{macrocode}
-\cs_new_protected:Npn \_@@_set_rule_color:
+\cs_new_protected:Npn \@@_set_rule_color:
 {
   \tl_if_empty:NT \l_@@_color_name_tl
   {
@@ -1019,66 +1241,73 @@
 %    \begin{macrocode}
 \keys_define:nn {mcrule}
 {
-  line-style .choice:,
-  line-style / solid .code:n = \cs_set:Npn \_@@_divider: 
+  extend-top                       .dim_set:N  = \l_@@_extend_top_dim,
+  extend-bot                       .dim_set:N  = \l_@@_extend_bot_dim,
+  extend-fill                      .bool_set:N = \l_@@_extend_fill_bool,
+  extend-fill                      .default:n = true,
+  extend-reserve                   .dim_set:N  = \l_@@_extend_reserve_dim,
+  line-style                       .choice:,
+  line-style / default             .code:n = \cs_set:Npn \@@_divider: 
     {\vrule\@width\columnseprule},
-  line-style / dots .code:n = \cs_set:Npn \_@@_divider:
+  line-style / solid               .code:n = \cs_set:Npn \@@_divider: 
+    {\@@_solid_line:},
+  line-style / dots                .code:n = \cs_set:Npn \@@_divider:
     {\@@_tile_pattern:nnn {.}{1pt}{1pt}},
-  line-style / dense-dots .code:n = \cs_set:Npn \_@@_divider: 
+  line-style / dense-dots          .code:n = \cs_set:Npn \@@_divider: 
     {\@@_tile_pattern:nnn {.}{1pt}{0pt}},
-  line-style / loose-dots .code:n = \cs_set:Npn \_@@_divider:
+  line-style / loose-dots          .code:n = \cs_set:Npn \@@_divider:
     {\@@_tile_pattern:nnn {.}{2pt}{2pt}},
-  line-style / circles .code:n = \cs_set:Npn \_@@_divider: 
+  line-style / circles             .code:n = \cs_set:Npn \@@_divider: 
     {\@@_tile_pattern:nnn {\@@_circle:}{1pt}{1pt}},
-  line-style / dense-circles .code:n = \cs_set:Npn \_@@_divider:
+  line-style / dense-circles       .code:n = \cs_set:Npn \@@_divider:
     {\@@_tile_pattern:nnn {\@@_circle:}{1pt}{0pt}},
-  line-style / loose-circles .code:n = \cs_set:Npn \_@@_divider: 
+  line-style / loose-circles       .code:n = \cs_set:Npn \@@_divider: 
     {\@@_tile_pattern:nnn {\@@_circle:}{2pt}{2pt}},
-  line-style / solid-circles .code:n = \cs_set:Npn \_@@_divider: 
+  line-style / solid-circles       .code:n = \cs_set:Npn \@@_divider: 
     {\@@_tile_pattern:nnn {\@@_solid_circle:}{1pt}{1pt}},
-  line-style / dense-solid-circles .code:n = \cs_set:Npn \_@@_divider:
+  line-style / dense-solid-circles .code:n = \cs_set:Npn \@@_divider:
     {\@@_tile_pattern:nnn {\@@_solid_circle:}{1pt}{0pt}},
-  line-style / loose-solid-circles .code:n = \cs_set:Npn \_@@_divider:
+  line-style / loose-solid-circles .code:n = \cs_set:Npn \@@_divider:
     {\@@_tile_pattern:nnn {\@@_solid_circle:}{2pt}{2pt}},
-  line-style / dotted .code:n = \cs_set:Npn \_@@_divider: 
+  line-style / dotted              .code:n = \cs_set:Npn \@@_divider: 
     {\@@_line_pattern:nnnn {dotted}{\columnseprule}{1pt}{1pt}},
-  line-style / densely-dotted .code:n = \cs_set:Npn \_@@_divider:
+  line-style / densely-dotted      .code:n = \cs_set:Npn \@@_divider:
     {\@@_line_pattern:nnnn {densely~dotted}{\columnseprule}{1pt}{0pt}},
-  line-style / loosely-dotted .code:n = \cs_set:Npn \_@@_divider:
+  line-style / loosely-dotted      .code:n = \cs_set:Npn \@@_divider:
     {\@@_line_pattern:nnnn {loosely~dotted}{\columnseprule}{2pt}{2pt}},
-  line-style / dashed .code:n = \cs_set:Npn \_@@_divider:
+  line-style / dashed              .code:n = \cs_set:Npn \@@_divider:
     {\@@_line_pattern:nnnn {dashed}{3pt}{1.5pt}{1.5pt}},
-  line-style / densely-dashed .code:n = \cs_set:Npn \_@@_divider:
+  line-style / densely-dashed      .code:n = \cs_set:Npn \@@_divider:
     {\@@_line_pattern:nnnn {densely~dashed}{3pt}{1pt}{1pt}},
-  line-style / loosely-dashed .code:n = \cs_set:Npn \_@@_divider: 
+  line-style / loosely-dashed      .code:n = \cs_set:Npn \@@_divider: 
     {\@@_line_pattern:nnnn {loosely~dashed}{3pt}{3pt}{3pt}},
-  line-style / dash-dot .code:n =
-    \cs_set:Npn \_@@_divider: {\@@_pattern_line:n{dash~dot}},
-  line-style / densely-dash-dot .code:n =
-    \cs_set:Npn \_@@_divider: {\@@_pattern_line:n{densely~dash~dot}},
-  line-style / loosely-dash-dot .code:n =
-    \cs_set:Npn \_@@_divider: {\@@_pattern_line:n{loosely~dash~dot}},
-  line-style / dash-dot-dot .code:n =
-    \cs_set:Npn \_@@_divider: {\@@_pattern_line:n{dash~dot~dot}},
-  line-style / densely-dash-dot-dot .code:n =
-    \cs_set:Npn \_@@_divider: {\@@_pattern_line:n{densely~dash~dot~dot}},
-  line-style / loosely-dash-dot-dot .code:n =
-    \cs_set:Npn \_@@_divider: {\@@_pattern_line:n{loosely~dash~dot~dot}},
-  color .code:n = {
+  line-style / dash-dot            .code:n = \cs_set:Npn \@@_divider:
+    {\@@_pattern_line:n{dash~dot}},
+  line-style / densely-dash-dot    .code:n = \cs_set:Npn \@@_divider: 
+    {\@@_pattern_line:n{densely~dash~dot}},
+  line-style / loosely-dash-dot    .code:n = \cs_set:Npn \@@_divider:
+    {\@@_pattern_line:n{loosely~dash~dot}},
+  line-style / dash-dot-dot         .code:n = \cs_set:Npn \@@_divider:
+    {\@@_pattern_line:n{dash~dot~dot}},
+  line-style / densely-dash-dot-dot .code:n = \cs_set:Npn \@@_divider:
+    {\@@_pattern_line:n{densely~dash~dot~dot}},
+  line-style / loosely-dash-dot-dot .code:n = \cs_set:Npn \@@_divider:
+    {\@@_pattern_line:n{loosely~dash~dot~dot}},
+  color                             .code:n = {
     \tl_set:Nn \l_@@_color_name_tl {#1}
-    \_@@_set_rule_color:
+    \@@_set_rule_color:
   },
-  color-model .code:n = {
+  color-model                       .code:n = {
     \tl_set:Nn \l_@@_color_model_tl {#1}
-    \_@@_set_rule_color:
+    \@@_set_rule_color:
   },
-  custom-line .code:n = \cs_set:Npn \_@@_divider:
+  custom-line         .code:n = \cs_set:Npn \@@_divider:
     {\@@_tikz_picture:n {#1}},
-  custom-pattern .code:n = \cs_set:Npn \_@@_divider:
+  custom-pattern      .code:n = \cs_set:Npn \@@_divider:
     {\@@_pattern:nnn #1},
-  custom-tile .code:n = \cs_set:Npn \_@@_divider:
+  custom-tile         .code:n = \cs_set:Npn \@@_divider:
     {\@@_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},
@@ -1123,4 +1352,10 @@
 %    \end{macrocode}
 %\end{macro}
 %
-%\Finale
\ No newline at end of file
+%\end{implementation}
+%
+% \PrintChanges
+%
+% \newpage
+%
+% \PrintIndex
\ No newline at end of file

Modified: trunk/Master/texmf-dist/source/latex/multicolrule/multicolrule.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/multicolrule/multicolrule.ins	2018-12-22 21:54:16 UTC (rev 49479)
+++ trunk/Master/texmf-dist/source/latex/multicolrule/multicolrule.ins	2018-12-22 21:54:42 UTC (rev 49480)
@@ -31,7 +31,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
 
@@ -50,13 +50,11 @@
   \file{\jobname.sty}{\from{\jobname.dtx}{package}}
 }
 \endbatchfile
-\RequirePackage{expl3}
-\RequirePackage{xparse}
 %% Copyright (C) 2018 by Karl Hagen <latex at polysyllabic.com>
 %% 
 %% 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
 %% 

Modified: trunk/Master/texmf-dist/tex/latex/multicolrule/multicolrule.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/multicolrule/multicolrule.sty	2018-12-22 21:54:16 UTC (rev 49479)
+++ trunk/Master/texmf-dist/tex/latex/multicolrule/multicolrule.sty	2018-12-22 21:54:42 UTC (rev 49480)
@@ -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}
+  \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-success} {\@outputdblcol}
+    \__mcrule_patch_twocol_output:N \RTL at outputdblcol
+    \__mcrule_patch_twocol_output:N \LTR at outputdblcol
   }
-  {
-    \msg_info:nnn {multicolrule} {patch-failure} {\@outputdblcol}
-  }
 }
 {
   \RequirePackage{multicol}
-  \cs_gset:Npn \__mcrule_col_box: {\mult at rightbox}
-  % Patch the code in multicol that creates the vertical rule.
-  \xpatchcmd{\LR at column@boxes} {\vrule\@width\columnseprule} {\mcruledivider}
-  {\msg_info:nnn {multicolrule} {patch-success} {\LR at column@boxes}}
-  {\msg_info:nnn {multicolrule} {patch-failure} {\LR at column@boxes}}
-  \xpatchcmd{\RL at column@boxes} {\vrule\@width\columnseprule} {\mcruledivider}
-  {\msg_info:nnn {multicolrule} {patch-success} {\RL at column@boxes}}
-  {\msg_info:nnn {multicolrule} {patch-failure} {\RL at column@boxes}}
-  \LRmulticolcolumns
+  \__mcrule_patch_mcol_output:N \LR at column@boxes
+  \__mcrule_patch_mcol_output:N \RL at column@boxes
+  \cs_gset:Npn \__mcrule_column_height: {\box_ht:N \mult at rightbox}
+  \cs_gset:Npn \__mcrule_column_depth: {\dimen\tw@}
+    \LRmulticolcolumns
+  \AfterPackage!{bidi}
+  {
+    \cs_gset_eq:NN \LTR at column@boxes \LR at column@boxes
+    \cs_gset_eq:NN \RTL at column@boxes \RL at 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
+\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_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);
-    \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
 %% 



More information about the tex-live-commits mailing list