Como reduzir tabelas para que caibam no comprimento de uma página?

Como reduzir tabelas para que caibam no comprimento de uma página?

Eu vi uma pergunta semelhante a esta:

Porém, não quero redimensionar minha tabela para que caiba dentro da largura de uma página (já faço isso sem convertê-la em imagem), quero diminuir a altura da minha tabela para que ela não ocupe duas páginas (ou mais) .

Vi algumas soluções possíveis como longtablemas dividiram minha mesa em 2 e não quero isso.

Sou forçado a converter minha tabela em uma imagem usando \resizeboxo graphicsxpacote ou tenho outras opções?

Responder1

Você não é forçado a converter sua tabela longa em uma imagem, \resizeboxembora este comando seja fornecido pelo graphicxpacote. A mesa ainda será uma mesa.

Você pode definir a largura e/ou altura da tabela redimensionada com este comando. Observe que ao fixar ambas as medidas, as fontes podem não ser reduzidas proporcionalmente, então geralmente é melhor deixar uma dimensão como {!}.

Você também pode reduzir o espaçamento vertical \arraystretchpara reduzir a fonte o mínimo possível e pode usar outra fonte para \tinyalterar ligeiramente as proporções da fonte.

As linhas verticais são sempre más, mas neste caso também as linhas horizontais pelo mesmo motivo, principalmente quando \arraystretchsão reduzidas, exceto as linhas do cabeçalho e da linha inferior. O pacote booktabsfaz um bom trabalho para esta tarefa. Experimente este exemplo mínimo de trabalho:

\documentclass{article}
\usepackage{graphicx,booktabs}
\begin{document}
\centering
{\tiny\renewcommand{\arraystretch}{.8}
\resizebox{!}{.35\paperheight}{%
\begin{tabular}{ccccc}
\toprule
    11 & 12 & 13 & 14 & 15\\
\midrule
    21 & 22 & 23 & 24 & 25\\
    31 & 32 & 33 & 34 & 35\\
    41 & 42 & 43 & 44 & 45\\
    51 & 52 & 53 & 54 & 55\\
    61 & 62 & 63 & 64 & 65\\
    71 & 72 & 73 & 74 & 75\\
    81 & 82 & 83 & 84 & 85\\
    91 & 92 & 93 & 94 & 95\\
    101 & 102 & 103 & 104 & 105\\
    111 & 112 & 113 & 114 & 115\\
    121 & 122 & 123 & 124 & 125\\
    131 & 132 & 133 & 134 & 135\\
    141 & 142 & 143 & 144 & 145\\
    151 & 152 & 153 & 154 & 155\\
    161 & 162 & 163 & 164 & 165\\
    171 & 172 & 173 & 174 & 175\\
    181 & 182 & 183 & 184 & 185\\
    191 & 192 & 193 & 194 & 195\\
    201 & 202 & 203 & 204 & 205\\
    211 & 212 & 213 & 214 & 215\\
    221 & 222 & 223 & 224 & 225\\
    231 & 232 & 233 & 234 & 235\\
    241 & 242 & 243 & 244 & 245\\
    251 & 252 & 253 & 254 & 255\\
    261 & 262 & 263 & 264 & 265\\
    271 & 272 & 273 & 274 & 275\\
    281 & 282 & 283 & 284 & 285\\
    291 & 292 & 293 & 294 & 295\\
    301 & 302 & 303 & 304 & 305\\
    311 & 312 & 313 & 314 & 315\\
    321 & 322 & 323 & 324 & 325\\
    331 & 332 & 333 & 334 & 335\\
    341 & 342 & 343 & 344 & 345\\
    351 & 352 & 353 & 354 & 355\\
    361 & 362 & 363 & 364 & 365\\
    371 & 372 & 373 & 374 & 375\\
    381 & 382 & 383 & 384 & 385\\
    391 & 392 & 393 & 394 & 395\\
    401 & 402 & 403 & 404 & 405\\
    411 & 412 & 413 & 414 & 415\\
    421 & 422 & 423 & 424 & 425\\
    431 & 432 & 433 & 434 & 435\\
    441 & 442 & 443 & 444 & 445\\
    451 & 452 & 453 & 454 & 455\\
    461 & 462 & 463 & 464 & 465\\
    471 & 472 & 473 & 474 & 475\\
    481 & 482 & 483 & 484 & 485\\
    491 & 492 & 493 & 494 & 495\\
    501 & 502 & 503 & 504 & 505\\
\bottomrule
\end{tabular}}}
\end{document}

MWE

Observe que alguns gostam de:

\resizebox{!}{\textheight}{ ...}

não produzirá uma tabela tão longa quanto a altura do texto, pois você está definindo aqui apenas a altura da caixa, mas na forma de estrela, refere-se à altura + profundidade, ou seja:

\resizebox*{!}{\textheight}{ ...}

fará a tabela tão longa quanto \textheight(556,4pt no MWE acima).

Outro comando que você pode usar, do mesmo pacote graphicx, é \scalebox. O problema aqui é que você deve ter alguma ideia de como deve ser o escalonamento, ou experimentar os valores de escalonamento até obter o que deseja. Para testá-lo, basta substituir no MWE o \resizeboxcomando por:

\scalebox{3}[2.2]{...}

Editar:O erro "Dimensão muito grande" do seu comentário é um problema de design da tabela, não do \resizeboxcomando. O LaTeX não pode quebrar o texto dentro das colunas left, right e cinseridas. Para colunas com texto descritivo, você deve usar as colunas p{width}ou m{width}em um tabularambiente. Outra opção são as colunas L, C, Rdo tabularyambiente ou a Xcoluna do tabularxambiente. Esses ambientes necessitam do pacote de mesmo nome e da largura total da tabela como primeiro argumento. Por exemplo:

\usepackage{tabulary}
...

\begin{tabulary}{\linewidth}{RCLL}
...
\end{tabulary}

Alterei seu código para usar tabularxcolunas personalizadas que usam fontes, cores e justificativas diferentes. Adicionei também cores de linha para evitar linhas verticais e a maioria das linhas horizontais, para o resto use as do booktabspacote e não as do pacote \hline. Este é o resultado:

MWE

\documentclass[a4paper]{article}
\usepackage{microtype}
\usepackage[margin=2.54cm]{geometry}
\usepackage{graphicx,booktabs,tabularx}
\usepackage[table]{xcolor}

\newcolumntype{R}{>{\leavevmode\color{magenta!70!black}\ignorespaces\sffamily\bfseries}p{2.5cm}}%
\newcolumntype{H}{>{\leavevmode\color{orange!30!black}\ignorespaces\raggedright\arraybackslash\sffamily}X}%
\newcolumntype{J}{>{\leavevmode\color{green!30!black}\ignorespaces\sffamily}X}%
\newcolumntype{W}{>{\leavevmode\color{blue!30!black}\ignorespaces\raggedleft\arraybackslash\sffamily}X}%

\rowcolors{2}{purple!05}{olive!05}
\begin{document}
\centering
{\resizebox*{\textwidth}{\textheight}{%
\renewcommand{\arraystretch}{2}
\begin{tabularx}{\textwidth}{RHJW}
\toprule\rowcolor{white}
    & \textbf{Hibernate OGM} & \textbf{EclipseLink NoSQL} & \textbf{DataNucleus}\\\midrule
  Goal & Complement JPA with NoSQL, key-value stores & Integrates in the father project main goal of providing a complete persistence solution & Being a standards compliant and efficient JPA and JDO platform\\
  NoSQL and Datastores supported & Infinispan, EHCache, MongoDB & MongoDB, Oracle NoSQL, Oracle AQ, JMS, XML files & Google Big Table, MongoDB, Cassandra, Excel, OOXML, ODF, XML, HBase, AppEngine/DataStore, Neo4j, JSON, Amazon S3, GoogleStorage, LDAP, NeoDatis, db4o\\
  Operations supported & Object Oriented queries (JP-QL), CRUD of entities, Polymorphic entities, Embeddable objects, Basic types (partial), Unidirectional and Bidirectional relationships (partial), Collections, Hibernate Search queries, JPA and Hibernate ORM API & Object Oriented Queries, Polymorphic entities, Basic types, Unidirectional relationships, Collections, JPA (partial), Complex hierarchical, Indexed hierarchical data, Mapped hierarchical data, CRUD operations, Embedded objects and collections, Inheritance, Subset of JP-QL and Criteria API, Denormalization & CRUD operations, Embedded objects and collections, Inheritance, Relationships (Unidirectional and Bidirectional), Queries for JP-QL, JDOQL and SQL (partial),  Basic types, Joins.\\
  No support for & Denormalization, Complex joins and aggregations & Joins & Aggregations? (not specified in documentation)\\
  Future & High performance sequence generator, parallel key fetching, support for Map/Reduce, more NoSQL classes, better mixing of NoSQL and RDBMS & ? & JPA2.1 full feature list, Official support for Cassandra, Considering a plugin for REDIS\\
  Commercial support & Red Hat & Oracle (via TopLink) & Supported by DataNucleus team\\
  Documentation & Scattered, inactive forums, official documentation lacking & Bureaucratic forums, information is complete and gathered mainly in the official website & Active forums, acceptable official documentation, but the big advantage comes from user support in form of blogs and posts scattered around the Internet\\\bottomrule
\end{tabularx}}}
\end{document}

informação relacionada