如何使用 multicol 包在第一列左侧和最后一列右侧添加垂直线(规则)

如何使用 multicol 包在第一列左侧和最后一列右侧添加垂直线(规则)

当使用该包multicol来表示2列时,输出....|....使用下面的代码。

我想要一种方法来在第一列的左侧和最后一列的右侧添加一条规则,以便输出看起来像|....|....|

如果需要,这 2 条额外规则可以放在边距中,而不是文本区域中。

\documentclass{article}%
\usepackage{lipsum}
\usepackage{multicol}
\setlength{\columnsep}{20pt}
\setlength{\columnseprule}{0.01pt}

\begin{document}

  \begin{multicols}{2}
  \lipsum[1-10]
  \end{multicols}

\end{document}

我尝试过\fbox各种方法,minipage但都没有取得很好的效果。

答案1

一种可能的实现方式是在包的宏\hss{\columnseprulecolor\vrule\@width\columnseprule}\hss里面添加所有列:\page@sofarmulticol

\makeatletter
\def\page@sofar{%
   \process@cols\mult@rightbox
       {\ifvoid\count@
          \setbox\count@\hbox to\hsize{}%
        \else
          \wd\count@\hsize
        \fi}%
   \count@\col@number \advance\count@\m@ne
   \mult@info\z@
    {Column spec: \the\full@width\space = indent
                  + columns + sep =\MessageBreak
        \the\multicol@leftmargin\space
        + \the\col@number\space
        x \the\hsize\space
        + \the\count@\space
        x \the\columnsep
     }%
\ifvmode\else\errmessage{Multicol Error}\fi
   \nointerlineskip
   \setbox\z@\hbox{p}\global\dimen\tw@\dp\z@
   \@ifundefined{maybe@reverse@columns}{}{\maybe@reverse@columns}
   \moveright\multicol@leftmargin
    \hbox to\full@width{%
     \process@cols\mult@gfirstbox{%
       \ifdim\dp\count@>\dimen\tw@
         \global\dimen\tw@\dp\count@ \fi
       \hss{\columnseprulecolor\vrule
              \@width\columnseprule}\hss
              \box\count@
     }%
     \ifdim\dp\mult@rightbox>\dimen\tw@
       \global\dimen\tw@\dp\mult@rightbox \fi
       \hss{\columnseprulecolor\vrule
              \@width\columnseprule}\hss
     \box\mult@rightbox
       \hss{\columnseprulecolor\vrule
              \@width\columnseprule}\hss
     \rlap{\phantom p}%
    }%
 \kern-\dimen\tw@
 \ifdim\dimen\tw@ = \mc@gridwarn
   \PackageWarning{multicol}%
     {Very deep columns!\MessageBreak
      Grid alignment might be broken}%
 \fi
}

\makeatother

您可以将其放在之前\begin{document}


笔记:在 2014 版中,multicol您可能会发现命令有误 \maybe@reverse@columns。因此,我现在修改了宏:

\@ifundefined{maybe@reverse@columns}{}{\maybe@reverse@columns}

感谢@Nasser 指出了这个问题。

相关内容