Я хотел бы заранее поблагодарить вас всех за любую помощь.
Могу ли я задать следующий вопрос? Я создаю документ переводчика с 2 столбцами (как вы можете видеть в коде).
Я использовал parallel
пакет. Не потому, что я знаю что-либо о лучшем пакете для этого, а просто потому, что я нашел работающий код в сети. Если у вас есть какие-либо советы по лучшему пакету для использования или лучшему способу кодирования этих столбцов, пожалуйста, дайте мне знать. Тем более, что я хочу иметь "вложенные" столбцы. Смотрите код: (тест таблицы). tabular
Сейчас я использую s, чтобы сделать это. Кто-нибудь знает лучший способ, например, с использованием опций в параллельном пакете? В будущем мне также понадобится вложенная таблица из 3 столбцов, если это возможно.
По этому поводу у меня есть свой фактический вопрос, а именно: я хотел бы вертикальную линию между вложенными столбцами. Прямо сейчас я нарисовал линию с помощью tikz
piciture, также только потому, что это единственный известный мне способ получить непрерывную вертикальную линию. Но мой код не дает правильного результата: линия находится внутри параллельного пакета-"абзаца", и поэтому следующий абзац сильно смещается вниз по вертикали. Использование \vspace{-...cm}
не очень практично, так как необходимо вносить корректировки каждый раз, когда изменяется перевод... Спасибо за любую помощь по оптимизации. Например, я пробовал использовать три столбца внутри табличного (средний пустой), но тогда я понятия не имею, как нарисовать непрерывную вертикальную линию в среднем (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*
) решение, хотя я оборачиваю все в окружения partabular
и nextentry
. Окружение partabular
задает некоторые параметры и должно разграничивать всю таблицу.
Среду nextentry
можно последовательно вызывать для построения таблицы. Поскольку она состоит из tabular*
, одна «запись» может (но не обязательно) иметь несколько строк; однако разрыв страницы может происходить только между вызовами nextentry
. Не добавляйте \hline
к последней строке nextentry
, поскольку среда делает это автоматически.
Я показываю, как можно построить tabular
внутри ячейки, которая эффективно разделяет ее по вертикали. Недостатком является то, что если разделенный столбец не самый длинный в своей строке, вам придется использовать макрос, \filllines{}
чтобы расширить вертикальную черту до низа общей содержащей ячейки.
Еще одна странность: длина delfix
— это вертикальное пространство, которое обычно появляется между соседними tabular*
блоками. Определение \delfix
позволяет вычитать эту длину, так что верхняя линия 2-го tabular*
накладывается на нижнюю линию 1-го. Включение \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
блок на каждой странице вывода. Неконтролируемая перепагинация сделает вас очень несчастными в этом случае.