将 vline 稍微延伸到周围框之外?

将 vline 稍微延伸到周围框之外?

有没有办法将\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,但这样我就必须手动设置每个项目的高度,因为它们有时会覆盖多条线。

我对垂直线的其他通用解决方案持开放态度,但我希望使用enumeratestill,因为项目有时会在文本的其他地方交叉引用,我希望它们可以作为超链接使用。例如,我知道使用 很容易做到这一点tabular,但这样我要么会失去交叉引用,要么必须克服一些困难才能实现它。

答案1

更新评论之后。

此示例使用tikztikzmark库来绘制连续的垂直线。

(您不需要理解 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。

X

\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}

相关内容