有没有办法将\vline
稍微延伸到周围框的边界之外?在我所想到的案例中,我试图在环境中的几个项目之间建立一条连续的垂直线enumerate
。这是我目前所做的:
\begin{enumerate}
\item
\begin{enumerate}
\item[] \parbox{0.47\linewidth}{\textbf{Version 1}}
\hfill\vline\hfill
\parbox{0.47\linewidth}{\textbf{Version 2}}
\item \parbox[t]{0.47\linewidth}{Text that may cross to \\ a second line}
\hfill\vline\hfill
\parbox[t]{0.47\linewidth}{Text that may cross to \\ a second line}
\end{enumerate}
\end{enumerate}
这对于对齐垂直线很有效,但每条线之间自然会有小间隙。我知道我可以使用\rule
,但这样我就必须手动设置每个项目的高度,因为它们有时会覆盖多条线。
我对垂直线的其他通用解决方案持开放态度,但我希望使用enumerate
still,因为项目有时会在文本的其他地方交叉引用,我希望它们可以作为超链接使用。例如,我知道使用 很容易做到这一点tabular
,但这样我要么会失去交叉引用,要么必须克服一些困难才能实现它。
答案1
更新评论之后。
此示例使用tikz
和tikzmark
库来绘制连续的垂直线。
(您不需要理解 tikz 代码)
命令
\DrawVerticalRule[<color of the line>]{<name of the top mark>}{<name of the bottom mark>}
(颜色可选,默认=黑色)将在两个 tikzmark 之间绘制垂直线。
在使用 之前\DrawVerticalRule
,必须在每个句子开头前手动添加两个\tikzmark{<unique name>}
, 。对于底部标记,必须将其插入到最后一个 之后\\
,且行首单词前不能有空格。
请注意,\hfill
在 parboxes 之间添加了 ,以便在它们之间添加一些空间,并防止垂直线触及长句子的末尾。
该线的 x 偏移量为1ex
向左,并将在每个首字母上方或下方延伸 1pt。所选线宽为 0.8pt。
\documentclass[12pt,a4paper]{article}
%********************************** added <<<<<<<<<
\usepackage{tikz}
\usetikzlibrary{calc,tikzmark}
\newlength{\xshift}
\setlength{\xshift}{1ex} % line separation from the text <<<<
\newlength{\yshift}
\settoheight{\yshift}{M} % height of M
\newlength{\zshift}
\settodepth{\zshift}{gjpqy} % depth of g
\newcommand{\DrawVerticalRule}[3][black]{% \DrawVerticalRule[<color of the line>] default = black
\begin{tikzpicture}[overlay,remember picture]
\draw [color=#1, line width=0.8pt]($ (pic cs:#2) +(-\xshift,\yshift+1pt) $) -- ($ (pic cs:#3) +(-\xshift,-\zshift-1pt) $);
\end{tikzpicture}
}
%*************************************
\begin{document}
\begin{enumerate}
\item
\begin{enumerate}
\item[] \parbox{0.47\linewidth}{\textbf{Version 3}}\hfill % space between the parboxes
\parbox{0.47\linewidth}{\textbf{\tikzmark{t1}Version 4}} % add the first tikzmark <<<<<<<<<
\item \parbox[t]{0.47\linewidth}{Text that may cross to \\ a second line and it is longer...}\hfill % space between the parboxes
\parbox[t]{0.47\linewidth}{Text that may cross to\\ \tikzmark{b1}a second line}% add the second tikzmark <<<<<<<<
\end{enumerate}
\end{enumerate}
\DrawVerticalRule[blue]{t1}{b1} % draw the vertical line between the two tikzmarks t1 and b1 <<<<<<<<<<
\begin{enumerate}
\item
\begin{enumerate}
\item[] \parbox{0.47\linewidth}{\textbf{Version 5}}\hfill % space between the parboxes
\parbox{0.47\linewidth}{\textbf{\tikzmark{t2}Version 6}} % add the first tikzmark <<<<<<<<<
\item \parbox[t]{0.47\linewidth}{Text that may cross to \\ a second line and it is longer...}\hfill % space between the parboxes
\parbox[t]{0.47\linewidth}{Text that may cross to\\a second line and maybe use \\ \tikzmark{b2}a third line.}% add the second tikzmark <<<<<<<<
\end{enumerate}
\end{enumerate}
\DrawVerticalRule[red]{t2}{b2} % draw the vertical line between the two tikzmarks t2 and b2<<<<<<<<<<
\end{document}