¿Cómo puedo crear una tabla que abarque el ancho de dos páginas A4 verticales (y opuestas)?

¿Cómo puedo crear una tabla que abarque el ancho de dos páginas A4 verticales (y opuestas)?

Tengo una mesa grande (ancha) para componer. Normalmente uso el siguiente código para mis tablas, lo que me permite especificar el ancho de cada columna de la tabla. Sin embargo, depende de mí asegurarme de que la suma de los anchos de las columnas encaje en una página.

\documentclass[12pt, a4paper]{article} 
\usepackage{booktabs, array}

\newcolumntype{L}[1]{>{\raggedright\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}
\newcolumntype{C}[1]{>{\centering\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}
\newcolumntype{R}[1]{>{\raggedleft\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}

\begin{document}
\begin{table}
\begin{tabular}{C{2cm}  C{2cm} C{2cm} C{2cm}  C{2cm} C{2cm}}
\toprule

~ & \textbf{Column 1} & \textbf{Column 2} & \textbf{Column 3} & \textbf{Column 4} & \textbf{Column 5}  \\
\textbf{Row 1} & Text (1,1) & Text (1,2) & Text (1,3) & Text (1,4) & Text (1,5)  \\
\textbf{Row 2} & Text (2,1) & Text (2,2) & Text (2,3) & Text (2,4) & Text (2,5)  \\
\textbf{Row 3} & Text (3,1) & Text (3,2) & Text (3,3) & Text (3,4) & Text (3,5)  \\
\textbf{Row 4} & Text (4,1) & Text (4,2) & Text (4,3) & Text (4,4) & Text (4,5)  \\
\textbf{Row 5} & Text (5,1) & Text (5,2) & Text (5,3) & Text (5,4) & Text (5,5)  \\
\textbf{Row 6} & Text (6,1) & Text (6,2) & Text (6,3) & Text (6,4) & Text (6,5)  \\

 \bottomrule

\end{tabular}
\caption{This is a table}
\end{table}
\end{document}

Me gustaría crear una tabla muy ancha que abarque el ancho de 2 páginas verticales A4

(Estoy escribiendo un documento usando 2 lados de una página y me gustaría que la esquina izquierda de mi tabla esté en un número de página par y la esquina derecha de la tabla en la página opuesta).

Por lo tanto, no debe haber ningún margen derecho en la página izquierda ni margen izquierdo en la página derecha para que la tabla sea continua a lo ancho de las dos páginas A4.

es posible?

Respuesta1

Comencé con mi respuesta en¿Cómo creo 6 textos paralelos alineados por párrafo, con 3 textos en cada página?como base, pero tuvo que hacer una serie de cambios.

En el lado más fácil, no tengo que preocuparme por las entradas de fila de diferentes alturas para la consulta de este OP. Pero en el lado negativo, tuve que reescribir significativamente el código para manejar 10 o más entradas de columnas (ya que #10no funciona). Con ese fin, no pasé diferentes entradas de columnas como argumentos, sino que escribí mi propio código de análisis de tabulaciones, de modo que se pudiera ingresar la fila como si fuera una fila tabular.

Seguía usando el fragmento de código de Herbert para procesar tokens tabulares dentro de un archivo \whiledoy agregué un fragmento de Stephan Lehmke para iniciar la tabla en un número de página par cuando estaba en twosidemodo.

Como característica adicional, no solo permito que el código se divida en las páginas izquierda y derecha, sino que también se puede dividir verticalmente, para tablas extralargas. La sintaxis es \newtwopagetablepara inicializar el proceso. Luego, se agregan filas individuales \tenbyrow{}donde el argumento es una &lista separada de diez entradas (es una reescritura menor para otras entradas de números de columna). Finalmente, cuando todos los datos estén ingresados ​​de esta manera, tienes dos opciones:

\newtwopagetable{caption}

generará la tabla completa en dos páginas; o

\maketwopagetable[4]{caption}
\maketwopagetable[4]{caption}

También dividirá la mesa de dos caras en piezas verticales, como se muestra arriba como cuatro filas en la primera página doble y cuatro filas en la segunda página doble.

Aquí está el código fuente:

\documentclass[twoside]{article}% TABLE CLEARS TO EVEN PAGE
%\documentclass{article}% TABLE CLEARS TO NEXT PAGE
\usepackage{booktabs, array}
\usepackage{ifthen}
\usepackage{etoolbox}

\makeatletter%%%%%%%%%%% My own tab parsing code

\newcounter{TABcellindex@}

\newcommand\readTABrow[2]{%
  \def\doneTABread{F}%
  \def\postTAB{#2}%
  \setcounter{TABcellindex@}{0}%
  \whiledo{\equal{\doneTABread}{F}}{%
    \stepcounter{TABcellindex@}%
    \expandafter\processTAB\postTAB&\\%
    \ifthenelse{\equal{\preTAB}{}}{%
      \addtocounter{TABcellindex@}{-1}%
      \def\doneTABread{T}%
    }{%
      \expandafter\protected@edef\csname #1\alph{TABcellindex@}\endcsname{%
        \preTAB}%
    }%
  }%
% \#1TABcells GIVES HOW MANY TAB COLUMNS WERE PROCESSED
%  \expandafter\xdef\csname #1TABcells\endcsname{\arabic{TABcellindex@}}%
}

\def\processTAB#1&#2\\{%
  \protected@edef\preTAB{#1}%
  \protected@edef\postTAB{#2}%
}

\makeatother%%%%%%%%%%% END My own tab parsing code

\makeatletter%%%%%%%%%%% Herbert's tabular token code
\newcounter{tabindex}
\newtoks\@tabtoks
\newcommand\addtabtoks[1]{%
  \@tabtoks\expandafter{\the\@tabtoks\stepcounter{tabindex}#1}}
\newcommand*\resettabtoks{\@tabtoks{}}
\newcommand*\synctabindex[1]{\setcounter{tabindex}{\value{#1}}}
\newcommand*\printtabtoks{\the\@tabtoks}
\makeatother%%%%%%%%%%% END Herbert's tabular token code

\makeatletter%%%%%%% Lehmke's \cleartoleftpage
\def\cleartoleftpage{\clearpage\if@twoside \ifodd\c@page
\hbox{}\newpage\if@twocolumn\hbox{}\newpage\fi\fi\fi}
\makeatother
\makeatother%%%%%%%% END Lehmke's \cleartoleftpage


\newcolumntype{L}[1]{>{\raggedright\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}
\newcolumntype{C}[1]{>{\centering\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}
\newcolumntype{R}[1]{>{\raggedleft\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}

\newcounter{sptstartrow}
\newcounter{sptendrow}
\newcounter{entries}

\newcommand\newtwopagetable{%
  \setcounter{sptendrow}{0}%
  \setcounter{entries}{0}%
  \cleartoleftpage%
}

\makeatletter
\newcommand\tenbyrow[1]{%
  \stepcounter{entries}%
  \readTABrow{entryX\roman{entries}X}{#1}%
}
\makeatother
\newcounter{index}
\newcommand\maketwopagetable[2][\theentries]{%
  \setcounter{sptstartrow}{\thesptendrow}%
  \ifthenelse{\thesptstartrow > 1}%
    {\addtocounter{table}{-1}\def\conttext{, continued}}%
    {\def\conttext{}}%
  \addtocounter{sptendrow}{#1}%
  \ifthenelse{\thesptendrow > \theentries}{\setcounter{sptendrow}{\theentries}}{}%
  \clearpage
  \setcounter{index}{\thesptstartrow}%
  \synctabindex{index}
  \resettabtoks%
  \whiledo{\theindex < \thesptendrow}{%
    \stepcounter{index}%
    \addtabtoks{%
      \csname entryX\roman{tabindex}Xa\endcsname &
      \csname entryX\roman{tabindex}Xb\endcsname &
      \csname entryX\roman{tabindex}Xc\endcsname & 
      \csname entryX\roman{tabindex}Xd\endcsname &
      \csname entryX\roman{tabindex}Xe\endcsname 
      \\%
    }%
  }%
  \begin{table}
  \centering
  \begin{tabular}{C{2cm}  C{2cm} C{2cm} C{2cm} C{2cm}}
   \toprule

   \printtabtoks%

   \bottomrule
  \end{tabular}%
  \caption{#2 (left half\conttext)}
  \end{table}%
  \addtocounter{table}{-1}%
  \clearpage
  \setcounter{index}{\thesptstartrow}%
  \synctabindex{index}
  \resettabtoks%
  \whiledo{\theindex < \thesptendrow}{%
    \stepcounter{index}%
    \addtabtoks{%
      \csname entryX\roman{tabindex}Xf\endcsname &
      \csname entryX\roman{tabindex}Xg\endcsname &
      \csname entryX\roman{tabindex}Xh\endcsname &
      \csname entryX\roman{tabindex}Xi\endcsname &
      \csname entryX\roman{tabindex}Xj\endcsname 
      \\%
    }%
  }%
  \begin{table}
  \centering
  \begin{tabular}{C{2cm}  C{2cm} C{2cm} C{2cm} C{2cm}}
   \toprule

   \printtabtoks%

   \bottomrule
  \end{tabular}%
  \caption{#2 (right half\conttext)}
  \end{table}%
}

\begin{document}
\newtwopagetable
\tenbyrow%
{~ & \textbf{Column 1} & \textbf{Column 2} & \textbf{Column 3} &
\textbf{Column 4} & \textbf{Column 5} & \textbf{Column 6} &
\textbf{Column 7} & \textbf{Column 8} & \textbf{Column 9}}
\tenbyrow%
{\textbf{Row 1} & Text (1,1) & Text (1,2) & Text (1,3) & Text (1,4)
& Text (1,5) & Text (1,6) & Text (1,7) & Text (1,8) & Text (1,9)}
\tenbyrow%
{\textbf{Row 2} & Text (2,1) & Text (2,2) & Text (2,3) & Text (2,4)
& Text (2,5) & Text (2,6) & Text (2,7) & Text (2,8) & Text (2,9)}
\tenbyrow%
{\textbf{Row 3} & Text (3,1) & Text (3,2) & Text (3,3) & Text (3,4)
& Text (3,5) & Text (3,6) & Text (3,7) & Text (3,8) & Text (3,9)}
\tenbyrow%
{\textbf{Row 4} & Text (4,1) & Text (4,2) & Text (4,3) & Text (4,4)
& Text (4,5) & Text (4,6) & Text (4,7) & Text (4,8) & Text (4,9)}
\tenbyrow%
{\textbf{Row 5} & Text (5,1) & Text (5,2) & Text (5,3) & Text (5,4)
& Text (5,5) & Text (5,6) & Text (5,7) & Text (5,8) & Text (5,9)}
\tenbyrow%
{\textbf{Row 6} & Text (6,1) & Text (6,2) & Text (6,3) & Text (6,4)
& Text (6,5) & Text (6,6) & Text (6,7) & Text (6,8) & Text (6,9)}
\tenbyrow%
{\textbf{Row 7} & Text (7,1) & Text (7,2) & Text (7,3) & Text (7,4)
& Text (7,5) & Text (7,6) & Text (7,7) & Text (7,8) & Text (7,9)}
\maketwopagetable{This is a table}

\newtwopagetable
\setcounter{entries}{8}% THIS IS TO FOOL LaTeX INTO THINKING I RE-ENTERED THE TABLE DATA
\maketwopagetable[4]{This is a vertically split table}
\maketwopagetable[4]{This is a vertically split table}

\end{document}

Aquí está el resultado completo de la tabla en una doble página:

ingrese la descripción de la imagen aquí

Mientras que aquí está la tabla, dividida a lo ancho y a lo largo, como resultado de las siguientes cuatro páginas. Tenga en cuenta que el (left/right half, continued)comentario lo proporciona \maketwopagetabley no forma parte del argumento de subtítulos del usuario.

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

información relacionada