在表格或并行包内绘制垂直线(以及如何扩展并行以拥有超过 2 列)

在表格或并行包内绘制垂直线(以及如何扩展并行以拥有超过 2 列)

我想提前感谢大家的帮助。

我可以问以下问题吗?我正在创建一个有 2 列的翻译文档(如您在代码中看到的那样)。

我使用了该parallel包。不是因为我知道最好的包,而只是因为我在网上找到了一个有效的代码。如果您对使用更好的包有任何建议,或者有更好的编码这些列的方法,请告诉我。特别是因为我想要“嵌套”列。请参阅代码:(表格测试)。我tabular现在正在使用 s 来执行此操作。有人知道更好的方法吗,例如使用并行包中的选项?如果可能的话,将来我也需要一个嵌套的 3 列表。

关于这一点,我有一个实际的问题,即:我想要在嵌套列之间画一条垂直线。现在我用tikz图片画了线,也只是因为我知道这是获得连续垂直线的唯一方法。但我的代码没有给出正确的结果:这条线位于并行包“段落”内,因此下面的段落垂直向下移动了很多。使用\vspace{-...cm}不太实用,因为每次翻译更改时都需要进行调整……感谢任何优化帮助。例如,我尝试在表格中使用三列(中间一列为空),但我不知道如何在中间(第二列)空列中绘制一条连续的垂直线。再次感谢您的帮助。

我正在使用以下代码:

\documentclass{article}

\usepackage{tikz} % to draw a vertical line

\usepackage[margin=0.5in]{geometry}
\usepackage{parallel}
\usepackage{framed}
\setlength{\FrameSep}{0.1cm} % to create parallel translator columns

\usepackage{calc}\setlength\textwidth{8.3in}\setlength\textheight{10.9in}\setlength\oddsidemargin{(\paperwidth-\textwidth)/2 - 1in}\setlength\topmargin{(\paperheight-\textheight-\headheight-\headsep-\footskip)/2 - 1in} % to adjust page boundaries

\newcommand\Par[2]{\begin{Parallel}[v]{10.2cm}{10.2cm}
\ParallelLText{#1}\ParallelRText{#2}\ParallelPar\end{Parallel}}\setlength{\columnseprule}{.4pt} % to create parallel translator columns

\begin{document}

\begin{framed}

\Par % new paragraph
{ % left <<<
\raggedright
\quad \quad Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test.
} % >>> left
{ % right <<<
\raggedright
\quad \quad Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test.
} % >>> right

\Par % new paragraph
{ % left <<<
\raggedright
\quad \quad Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test.
} % >>> left
{ % right <<<
\raggedright
\quad \quad Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test.
} % >>> right

\raggedright
\rule{\textwidth}{0.4pt} % new page

\Par % new paragraph
{ % left <<<
\centering
\scalebox{0.55}[0.55]{page x} % page numbering
} % >>> left
{ % right <<<
\centering
\scalebox{0.55}[0.55]{page x} % page numbering
} % >>> right

\Par % new paragraph
{ % left <<<
\raggedright
\quad \quad Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test.
} % >>> left
{ % right <<<
\raggedright
\quad \quad Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test Test test test.
} % >>> right

\raggedright
\rule{\textwidth}{0.4pt} % new page

\begin{tikzpicture}
\hspace{5cm}
\draw (1,0) -- (1,5);
\end{tikzpicture}

\Par % new paragraph
{ % left <<<
\centering
TABLE TEST \\
\line(1,0){40} \\
} % >>> left
{ % right <<<
\centering
TABLE TEST \\
\line(1,0){40} \\
} % >>> right

\Par % new paragraph
{ % left <<<
\raggedright
\begin{tabular}{p{0.5cm}p{5cm}p{1cm}}
& \scalebox{0.8}[0.8]{{\sc{Element one}}} & \scalebox{0.8}[0.8]{{\sc{Element b-one}}}
\end{tabular} \\
} % >>> left
{ % right <<<
\raggedright
\begin{tabular}{p{0.5cm}p{5cm}p{1cm}}
& \scalebox{0.8}[0.8]{{\sc{Element two}}} & \scalebox{0.8}[0.8]{{\sc{Element b-two}}}
\end{tabular}
} % >>> right

\Par % new paragraph
{ % left <<<
\raggedright
\begin{tabular}{p{0.5cm}p{5cm}p{1cm}}
& \scalebox{0.8}[0.8]{{\sc{Element one}}} & \scalebox{0.8}[0.8]{{\sc{Element b-one}}}
\end{tabular} \\
} % >>> left
{ % right <<<
\raggedright
\begin{tabular}{p{0.5cm}p{5cm}p{1cm}}
& \scalebox{0.8}[0.8]{{\sc{Element two}}} & \scalebox{0.8}[0.8]{{\sc{Element b-two}}}
\end{tabular}
} % >>> right

\Par % new paragraph
{ % left <<<
\raggedright
\begin{tabular}{p{0.5cm}p{5cm}p{1cm}}
& \scalebox{0.8}[0.8]{{\sc{Element three}}} & \scalebox{0.8}[0.8]{{\sc{Element b-three}}}
\end{tabular} \\
} % >>> left
{ % right <<<
\raggedright
\begin{tabular}{p{0.5cm}p{5cm}p{1cm}}
& \scalebox{0.8}[0.8]{{\sc{Element three}}} & \scalebox{0.8}[0.8]{{\sc{Element b-three}}}
\end{tabular}
} % >>> right

\Par % new paragraph
{ % left <<<
\raggedright
\begin{tabular}{p{0.5cm}p{5cm}p{1cm}}
& \scalebox{0.8}[0.8]{{\sc{Element ...}}} & \scalebox{0.8}[0.8]{{\sc{Element b-...}}}
\end{tabular} \\
} % >>> left
{ % right <<<
\raggedright
\begin{tabular}{p{0.5cm}p{5cm}p{1cm}}
& \scalebox{0.8}[0.8]{{\sc{Element ...}}} & \scalebox{0.8}[0.8]{{\sc{Element b-...}}}
\end{tabular}
} % >>> right

\end{framed}

\end{document}

答案1

这个答案并不完美,但可能会让你找到你需要的东西。这是一个纯粹的tabular(和tabular*)解决方案,尽管我将事情包装在环境partabular和中nextentry。环境partabular设置了一些参数,应该界定整个表。

可以连续调用环境nextentry来构建您的表。由于它由 组成tabular*,因此一个“条目”可以(但不需要)有多行;但是分页只能在 调用之间发生nextentry。不要将 添加\hline到 的最后一行nextentry,因为环境会自动为您完成此操作。

我展示了如何在单元格内构建一个tabular,以有效地将其垂直细分。缺点是,如果拆分列不是其行中最长的,则必须使用宏\filllines{}将垂直条延伸到整个包含单元格的底部。

另一个怪癖:长度delfix是相邻块之间通常出现的垂直空间tabular*。定义\delfix允许减去该长度,以便第二块的顶线tabular*覆盖第一块的底线。\raggedbottom在序言中打开应该可以防止胶水干扰此测量。

MWE 设置为两列。若要扩展到 3 列,则需要重新定义长度\colwidth和。\splitcolwidth

\documentclass{article}
\usepackage{lipsum}
\def\lipsA{%
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut purus elit,
vestibulum ut, placerat ac, adipiscing vitae, felis. Curabitur dictum gravida
mauris. Nam arcu libero, nonummy eget, consectetuer id, vulputate a, magna.}
\def\lipsB{%
Donec vehicula augue eu neque. Pellentesque habitant morbi tristique senectus
et netus et malesuada fames ac turpis egestas. Mauris ut leo. Cras viverra
metus rhoncus sem. Nulla et lectus vestibulum urna fringilla ultrices. Phasellus
eu tellus sit amet tortor gravida placerat. Integer sapien est, iaculis in, pretium
quis, viverra ac, nunc. Praesent eget sem vel leo ultrices bibendum. }
\def\lipsC{%
Aenean faucibus. Morbi dolor nulla, malesuada eu, pulvinar at, mollis ac, nulla. Cur-
abitur auctor semper nulla. Donec varius orci eget risus. Duis nibh mi, congue
eu, accumsan eleifend, sagittis quis, diam. Duis eget orci sit amet orci dignissim
rutrum.}
\newlength\svparskip
\newlength\delfix
\delfix1.3pt
\newlength\colwidth
\setlength\colwidth{\dimexpr.5\textwidth-2\tabcolsep}
\newlength\splitcolwidth
\setlength\splitcolwidth{\dimexpr.25\textwidth-2\tabcolsep}
\newenvironment{partabular}
  {\par\svparskip=\parskip\relax\vspace{\delfix}}
  {\vspace{\delfix}\parskip=\svparskip\relax}
\newenvironment{nextentry}
  {\parskip-\delfix\par\noindent\begin{tabular*}{\textwidth}[t]
  {|p{\colwidth}|p{\colwidth}|}\hline}{\hline\end{tabular*}\par}
\def\filllines#1{\vspace{\dimexpr#1\ht\strutbox+#1\dp\strutbox}}
\raggedbottom
\begin{document}
\lipsum[1]
\begin{partabular}
\begin{nextentry}
a & b\\\hline
c & d\\\hline
\lipsA & \lipsB\\
\end{nextentry}
\begin{nextentry}
F & G\\\hline
  \begin{tabular}[t]{@{}p{\splitcolwidth}|p{\splitcolwidth}@{}}
  This is a test of a split column \filllines{6}& X 
  \end{tabular} 
& \lipsC\\
\end{nextentry}
\begin{nextentry}
\lipsA & \lipsC\\
\end{nextentry}
\begin{nextentry}
F & G\\\hline
\lipsB & \lipsC\\\hline
\lipsA & \lipsC\\
\end{nextentry}
\begin{nextentry}
F & G\\\hline
\lipsB & \lipsC\\
\end{nextentry}
\begin{nextentry}
\lipsA & \lipsC\\
\end{nextentry}
\end{partabular}
\end{document}

在此处输入图片描述

如果您对解决方案中通过使用参数使两条水平线重叠的部分不满意\delfix,那么另一种定义是

\newenvironment{nextentry}[1][\relax]
  {\parskip-\delfix\par\noindent\begin{tabular*}{\textwidth}[t]
    {|p{\colwidth}|p{\colwidth}|}\ifx\relax#1\relax\else\hline\fi}
  {\hline\end{tabular*}\par}

仅当以以下方式\hline提供非空可选参数时,才会在表格开头打印nextentry

\begin{nextentry}[x]
a & b\\\hline
c & d\\\hline
\lipsA & \lipsB\\
\end{nextentry}

这种替代方法的缺点是您必须手动将可选参数添加到nextentry每页输出的第一个块。在这种情况下,不受控制的重新分页会让您非常不高兴。

相关内容