From 9ce87495da8b3b9e6adbccb41c78d1554af1d71a Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Sat, 22 Dec 2018 21:54:42 +0000 Subject: multicolrule (22dec18) git-svn-id: svn://tug.org/texlive/trunk@49480 c570f23f-e606-0410-a88d-b1316a301751 --- .../source/latex/multicolrule/multicolrule.dtx | 727 ++++++++++++++------- .../source/latex/multicolrule/multicolrule.ins | 6 +- 2 files changed, 483 insertions(+), 250 deletions(-) (limited to 'Master/texmf-dist/source/latex') diff --git a/Master/texmf-dist/source/latex/multicolrule/multicolrule.dtx b/Master/texmf-dist/source/latex/multicolrule/multicolrule.dtx index 6edf1600025..3e370bc7f98 100644 --- a/Master/texmf-dist/source/latex/multicolrule/multicolrule.dtx +++ b/Master/texmf-dist/source/latex/multicolrule/multicolrule.dtx @@ -21,13 +21,16 @@ This package is provided as a .dtx file. To install it and 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 @@ Copyright (C) 2018 by Karl Hagen 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 @@ and the derived files multicolrule.ins, \expandafter\endgroup \fi % +%<*driver|package> \RequirePackage{expl3} \RequirePackage{xparse} +% %<*driver> \PassOptionsToPackage{svgnames}{xcolor} \documentclass{l3doc} @@ -137,23 +142,20 @@ and the derived files multicolrule.ins, % %\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,18 +169,23 @@ and the derived files multicolrule.ins, % %\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 % 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 @@ and the derived files multicolrule.ins, % 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@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@polysyllabic.com}. I welcome % contributions for additional styles, especially to provide more options when % running the package without \pkg{tikz}. % @@ -234,16 +247,17 @@ and the derived files multicolrule.ins, % 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 @@ and the derived files multicolrule.ins, % \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 @@ and the derived files multicolrule.ins, % % \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 @@ and the derived files multicolrule.ins, % \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 @@ and the derived files multicolrule.ins, % \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,54 +423,73 @@ and the derived files multicolrule.ins, % \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} % % \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{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{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}. % \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 @@ and the derived files multicolrule.ins, % % 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 @@ and the derived files multicolrule.ins, % 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 @@ and the derived files multicolrule.ins, % % \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,21 +635,55 @@ and the derived files multicolrule.ins, % % 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 % 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} +% +% 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} +%\section{Implementation} % % \begin{macrocode} %<*package> @@ -622,8 +696,8 @@ and the derived files multicolrule.ins, %\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 @@ and the derived files multicolrule.ins, \RequirePackage{l3keys2e} \RequirePackage{xpatch} \RequirePackage{xcolor} +\RequirePackage{scrlfile} % \end{macrocode} % % Define the messages we use. @@ -644,32 +719,34 @@ and the derived files multicolrule.ins, 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,84 +784,145 @@ and the derived files multicolrule.ins, % % \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(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} % -% 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. -% % \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} - { - \msg_info:nnn {multicolrule} {patch-success} {\@outputdblcol} - } + \@@_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-failure} {\@outputdblcol} + \@@_patch_twocol_output:N \RTL@outputdblcol + \@@_patch_twocol_output:N \LTR@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@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}} + \@@_patch_mcol_output:N \LR@column@boxes + \@@_patch_mcol_output:N \RL@column@boxes % \end{macrocode} % -% Reissue \cs{LRmulticolcolumns} to update the actual code -% in \cmd{\mc@align@columns}. +% Although taking the height of \cmd{\mult@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@rightbox} + \cs_gset:Npn \@@_column_depth: {\dimen\tw@} +% \end{macrocode} +% +% We need to reissue \cs{LRmulticolcolumns} to update the actual code in +% \cmd{\mc@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@column@boxes \LR@column@boxes + \cs_gset_eq:NN \RTL@column@boxes \RL@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,25 +931,97 @@ and the derived files multicolrule.ins, {\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: } } } % \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 @@ and the derived files multicolrule.ins, % \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 @@ and the derived files multicolrule.ins, % \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 @@ and the derived files multicolrule.ins, % \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 @@ and the derived files multicolrule.ins, \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 @@ and the derived files multicolrule.ins, % 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 @@ and the derived files multicolrule.ins, % \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 @@ and the derived files multicolrule.ins, % \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 @@ and the derived files multicolrule.ins, % \end{macrocode} %\end{macro} % -%\Finale \ No newline at end of file +%\end{implementation} +% +% \PrintChanges +% +% \newpage +% +% \PrintIndex \ No newline at end of file diff --git a/Master/texmf-dist/source/latex/multicolrule/multicolrule.ins b/Master/texmf-dist/source/latex/multicolrule/multicolrule.ins index 446ac7abb36..24ec592f582 100644 --- a/Master/texmf-dist/source/latex/multicolrule/multicolrule.ins +++ b/Master/texmf-dist/source/latex/multicolrule/multicolrule.ins @@ -31,7 +31,7 @@ Copyright (C) 2018 by Karl Hagen 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 @@ and the derived files multicolrule.ins, \file{\jobname.sty}{\from{\jobname.dtx}{package}} } \endbatchfile -\RequirePackage{expl3} -\RequirePackage{xparse} %% Copyright (C) 2018 by Karl Hagen %% %% 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 %% -- cgit v1.2.3