Gostaria de agradecer a todos por qualquer ajuda antecipadamente.
Posso fazer a seguinte pergunta? Estou criando um documento tradutor com 2 colunas (como você pode ver no código).
Eu usei o parallel
pacote. Não porque eu saiba alguma coisa sobre o melhor pacote para isso, mas simplesmente porque encontrei um código funcional na rede. Se você tiver algum conselho sobre um pacote melhor para usar ou uma maneira melhor de codificar essas colunas, entre em contato. Especialmente porque quero ter colunas "aninhadas". Veja o código: (teste de tabela). Estou usando tabular
s agora para fazer isso. Alguém conhece alguma maneira melhor, por exemplo, usando opções no pacote paralelo? No futuro, também precisarei de uma tabela aninhada de 3 colunas, se possível.
Sobre isso eu tenho minha dúvida, a saber: gostaria de uma linha vertical entre a coluna aninhada. No momento desenhei a linha com tikz
imagem, também porque é a única maneira que conheço de obter uma linha vertical contínua. Mas meu código não está dando o resultado correto: a linha está dentro de um "parágrafo" de pacote paralelo e, portanto, o parágrafo seguinte é deslocado muito para baixo verticalmente. Usar \vspace{-...cm}
não é muito prático, pois ajustes precisam ser feitos toda vez que a tradução muda... Obrigado por qualquer ajuda na otimização. Por exemplo, tentei usar três colunas dentro da tabela (a do meio vazia), mas não tenho ideia de como desenhar uma linha vertical contínua na coluna vazia do meio (2ª). Obrigado por qualquer ajuda novamente.
Estou usando o seguinte código:
\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}
Responder1
Esta resposta não é bonita, mas pode levá-lo onde você precisa. É uma solução pura tabular
(e tabular*
), embora eu envolva as coisas nos ambientes partabular
e nextentry
. O ambiente partabular
define alguns parâmetros e deve delimitar toda a tabela.
O ambiente nextentry
pode ser chamado sucessivamente para construir sua mesa. Por ser composto por um tabular*
, uma "entrada" pode (mas não precisa) ter múltiplas linhas; no entanto, a quebra de página só pode ocorrer entre invocações de nextentry
. Não adicione an \hline
à última linha de a nextentry
, porque o ambiente faz isso automaticamente para você.
Mostro como se pode construir um tabular
dentro de uma célula que efetivamente a subdivida verticalmente. A desvantagem é que, se a coluna dividida não for a mais longa em sua linha, você deverá usar a macro \filllines{}
para estender a barra vertical até a parte inferior da célula que a contém.
Outra peculiaridade: o comprimento delfix
é o espaço vertical que normalmente apareceria entre tabular*
os blocos adjacentes. A definição \delfix
permite que esse comprimento seja subtraído, de modo que a linha superior do segundo tabular*
se sobreponha à linha inferior do primeiro. A ativação \raggedbottom
no preâmbulo deve evitar que a cola interfira nessa medição.
O MWE está configurado para duas colunas. Para estender para 3, os comprimentos \colwidth
e \splitcolwidth
precisarão de redefinição.
\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}
Se você não estiver satisfeito com a parte da solução em que duas linhas horizontais são sobrepostas através do uso do \delfix
parâmetro, então uma definição alternativa seria
\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}
Isto imprimirá um \hline
no início de uma tabela somente se um argumento opcional não em branco for fornecido nextentry
na forma de
\begin{nextentry}[x]
a & b\\\hline
c & d\\\hline
\lipsA & \lipsB\\
\end{nextentry}
A desvantagem dessa abordagem alternativa é que você precisa adicionar manualmente um argumento opcional ao primeiro nextentry
bloco de cada página de saída. A repaginação descontrolada o deixaria muito infeliz neste caso.