表形式または並列パッケージ内に垂直線を描く (および並列を 2 列以上に拡張する方法)

表形式または並列パッケージ内に垂直線を描く (および並列を 2 列以上に拡張する方法)

皆様のご協力を心より感謝申し上げます。

次の質問をしてもよろしいでしょうか? 2 列の翻訳ドキュメントを作成しています (コードで確認できます)。

私はparallelパッケージを使用しました。このための最適なパッケージについて何か知っているからではなく、単にネット上で動作するコードを見つけたからです。使用すべきより良いパッケージや、これらの列をコーディングするより良い方法についてアドバイスがあれば、私に知らせてください。特に、私は「ネストされた」列が必要なので。コードを参照してください: (テーブル テスト)。私はtabular現在、これを実行するのに s を使用しています。たとえば、並列パッケージのオプションを使用するなど、より良い方法をご存知の方はいませんか? 将来的には、可能であればネストされた 3 列のテーブルも必要になります。

これに関して、私は実際に質問があります。つまり、ネストされた列の間に垂直線を入れたいのです。現在、私はtikz連続した垂直線を引く唯一の方法を知っているので、画像で線を描きました。しかし、私のコードは正しい結果を出していません。線は並列パッケージの「段落」内にあ​​るため、次の段落は垂直方向にかなり下に移動します。\vspace{-...cm}翻訳が変更されるたびに調整が必要になるため、 を使用することはあまり実用的ではありません... 最適化の助けをいただければ幸いです。たとえば、表形式で 3 つの列 (中央の列は空) を使用しようとしましたが、中央 (2 番目) の空の列に連続した垂直線を引く方法がわかりません。また、助けていただければ幸いです。

次のコードを使用しています:

\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*) ソリューションですが、環境と でまとめていますpartabularnextentry環境はpartabularいくつかのパラメータを設定し、テーブル全体を区切る必要があります。

環境は、nextentryテーブルを構築するために連続的に呼び出すことができます。 は で構成されているためtabular*、1 つの「エントリ」に複数の行を含めることができます (ただし、複数行である必要はありません)。ただし、改ページは の呼び出し間でのみ発生します。の最後の行に をnextentry追加しないでください。環境が自動的に追加します。\hlinenextentry

セル内に を構築して、セルを垂直方向に効果的に分割する方法を示しますtabular。欠点は、分割された列がその行内で最長でない場合、マクロを使用して\filllines{}垂直バーを全体のセルの下部まで拡張する必要があることです。

もう一つの奇妙な点は、長さは、通常、隣接するブロックdelfixの間に現れる垂直方向のスペースであるということです。 を定義すると、その長さを減算して、2 番目の上の線が 1 番目の下の線に重なるようにすることができます。 プリアンブルでオンにすると、接着剤がこの測定に干渉しなくなります。tabular*\delfixtabular*\raggedbottom

MWE は 2 つの列に設定されています。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}

ここに画像の説明を入力してください

パラメータを使用して2本の水平線を重ねる部分に満足できない場合は\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出力の各ページの最初のブロックにオプションの引数を手動で追加する必要があることです。この場合、制御されていない再ページ付けは非常に不満足なものになります。

関連情報