当使用该包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@sofar
multicol
\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 指出了这个问题。