
Responder1
tabela calstable e tabularx
Aqui estão ambas as suas tabelas compostas como calstable
s,ou seja. usando o pacotechamadas. Eu também compus a primeira tabela usandotabularx,hhline,variedadeemultilinha. eu useitabularx, porque esse pacote pode calcular a largura da coluna levando em consideração todas as variáveis necessárias.
caltável
calstable
não tem suporte para regras duplas (bordas duplas), então falsifiquei essas regras usando linhas e colunas estreitas.
Como escrevi as duas tabelas no mesmo documento, movi os comandos de configuração da tabela e a definição dos atalhos do preâmbulo da tabela para o preâmbulo do documento. Eu ajustei todas as regras (linhas), garantindo que nenhuma regra única eliminasse regras duplas. Portanto, você verá o atalho \lb
, \rb
usado em vários lugares, para desativar a remoção e ativar regras para células individuais. A forma como as regras verticais duplas se conectarão às regras horizontais duplas depende das tradições tipográficas locais, portanto não garanto que a escolha seja correta em sua jurisdição.
Preenchi algum conteúdo da célula para compor a tabela com a altura correta das linhas e, como consequência, aumentei as alturas das linhas na primeira tabela paradois \baselineskip
s, em comparação com o exemplo anterior. Além disso, centralizei verticalmente o conteúdo da célula em todas as células usando um gancho documentado, veja o comando \def\cals@AtBeginCell{\vfil}
:
\documentclass{article}
\usepackage{cals}
% Set up the carlstable
\makeatletter
%% All rules of same weight
\def\cals@framers@width{0.3pt} % Outside frame rules, reduce if the rule is too heavy
\def\cals@framecs@width{0.3pt}
\def\cals@bodyrs@width{0.3pt}
\def\cals@cs@width{0.3pt} % Inside rules, reduce if the rule is too heavy
\def\cals@rs@width{0.3pt}
\def\cals@AtBeginCell{\vfil} % All cell contents vertically centred
% Shorthands for spanning cells, table rules and the spece between columns and rows (padding)
\let\nc=\nullcell
\let\sc=\spancontent
\def\rb{\ifx\cals@borderR\relax % Right Border (rules) switch (off-on)
\def\cals@borderR{0.0pt}
\else \let\cals@borderR\relax\fi}
\def\lb{\ifx\cals@borderL\relax % Left Border switch (off-on)
\def\cals@borderL{0.0pt}
\else \let\cals@borderL\relax\fi}
\def\bb{\ifx\cals@borderB\relax % Bottom Border switch (off-on)
\def\cals@borderB{0.0pt}
\else \let\cals@borderB\relax\fi}
\def\tp{\ifdim\cals@paddingT=0.0pt\relax % Top padding switch (off-on)
\cals@setpadding{Ag}
\else \setlength{\cals@paddingT}{0pt}\fi}
\def\bp{\ifdim\cals@paddingB=0.0pt\relax % Bottom padding switch (off-on)
\cals@setpadding{Ag}
\else \setlength{\cals@paddingB}{0pt}\fi}
\makeatother
\begin{document}
\begin{calstable}[c]
% Defining 11 columns, 2 are for double vertical rules (col2 and col7)
\colwidths{{\dimexpr(\columnwidth/21*3)}
{2pt}
{\dimexpr(\columnwidth/21*2)}
{\dimexpr(\columnwidth/21*1)}
{\dimexpr(\columnwidth/21*2)}
{\dimexpr(\columnwidth/21*4)}
{2pt}
{\dimexpr(\columnwidth/21*2)}
{\dimexpr(\columnwidth/21*1)}
{\dimexpr(\columnwidth/21*2)}
{\dimexpr(\columnwidth/21*4)}
}
\makeatletter
% R1H1 % This first row is just to ‘fake’ double horizontal lines
\thead{%
\brow
\rb\tp\cell{}
\bb\cell{}\bb
\cell{}
\cell{}
\cell{}
\cell{}
\bb\cell{}\bb
\cell{}
\cell{}
\cell{}\rb
\cell{}\tp
\ht\cals@current@row=2pt
\erow
%
%R2H2 % Header
\brow
\alignC\cell{C}
\bb\cell{}\bb
\nc{ltb}
\nc{tb}
\nc{tb}
\nc{rtb}\sc{}
\bb\cell{}\bb
\nc{ltb}
\nc{tb}
\nc{tb}
\nc{rtb}\sc{}
\erow
}
\tfoot{\lastrule\strut}
%R3B1
\brow
\cell{C}
\bb\cell{}\bb
\nc{ltb}
\nc{rtb}\sc{}
\cell{}
\cell{}
\bb\cell{}\bb
\nc{ltb}
\nc{rtb}\sc{}
\cell{}
\cell{}
\erow
%R4B2
\brow
\nc{lrt}
\bb\cell{}\bb
\cell{}
\cell{}
\cell{}
\cell{}
\bb\cell{}\bb
\cell{}
\cell{}
\cell{}
\cell{}
\ht\cals@current@row=2\normalbaselineskip
\erow
%R5B3
\brow
\nc{lrb}\alignC\sc{C}
\bb\cell{}\bb
\cell{C}
\cell{}
\cell{}
\cell{}
\bb\cell{}\bb
\cell{}
\cell{}
\cell{}
\cell{}
\erow
%R6B4
\brow
\nc{lrt}
\bb\cell{}\bb
\cell{}
\cell{}
\cell{}
\cell{}
\bb\cell{}\bb
\cell{}
\cell{}
\cell{}
\cell{}
\ht\cals@current@row=2\normalbaselineskip
\erow
%R7B5
\brow
\nc{lrb}\alignC\sc{C}
\bb\cell{}\bb
\cell{C}
\cell{}
\cell{}
\cell{}
\bb\cell{}\bb
\cell{}
\cell{}
\cell{}
\cell{}
\erow
%R8B6
\brow
\nc{lrt}
\bb\cell{}\bb
\cell{}
\cell{}
\cell{}
\cell{}
\bb\cell{}\bb
\cell{}
\cell{}
\cell{}
\cell{}
\ht\cals@current@row=2\normalbaselineskip
\erow
%R9B7
\brow
\nc{lrb}\alignC\sc{C}
\bb\cell{}\bb
\cell{C}
\cell{}
\cell{}
\cell{}
\bb\cell{}\bb
\cell{}
\cell{}
\cell{}
\cell{}
\erow
%R10B9 % This last row is just to ‘fake’ double horizontal lines
\brow
\rb\bp\cell{}
\cell{}
\cell{}
\cell{}
\cell{}
\cell{}
\cell{}
\cell{}
\cell{}
\cell{}\rb
\cell{}\bp
\ht\cals@current@row=2pt
\erow
\makeatletter
\end{calstable}\par
\vspace{1cm}
\begin{calstable}[l]
% Defining 5 columns, 1 are for double vertical rules (col2)
\colwidths{{\dimexpr(\columnwidth/15*3)}
{2pt}
{\dimexpr(\columnwidth/15*2)}
{\dimexpr(\columnwidth/15*1)}
{\dimexpr(\columnwidth/15*3)}
}
\makeatletter
% R1H1 % This first row is just to ‘fake’ double horizontal lines
\thead{%
\brow
\rb\tp\cell{}
\bb\cell{}\bb
\cell{}
\cell{}
\cell{}\rb\tp
\ht\cals@current@row=2pt
\erow
%
%R2H2 % Header
\brow
\alignC\cell{C}
\bb\cell{}\bb
\cell{}
\cell{}
\cell{}
\erow
}
\tfoot{\lastrule\strut}
%R4B2
\brow
\bb\cell{C}
\cell{}
\cell{}
\cell{}
\cell{}
\erow
%R5B3
\brow
\cell{C}
\cell{}
\cell{}
\cell{}
\cell{}
\erow
%R6B4
\brow
\cell{C}
\cell{}
\cell{}
\cell{}
\cell{}
\erow
%R7B5
\brow
\cell{C}
\cell{}
\cell{}
\cell{}
\cell{}
\erow
%R8B6
\brow
\bb\cell{C}\bb
\cell{}
\bb\cell{}
\cell{}
\cell{}\bb
\erow
%R10B9 % This last row is just to ‘fake’ double horizontal lines
\brow
\bb\rb\bp\cell{}
\cell{}
\cell{}
\cell{}\rb
\cell{}\bb
\ht\cals@current@row=2pt
\erow
\makeatletter
\end{calstable}\par
\end{document}
tabularx e amigos
Aqui está sua primeira tabela composta comtabularxe amigos. Como você verá, a configuração e definição das colunas e da largura das colunas são bastante complicadas. Para ter regras de conexão corretas, usei ohhlinepacote.
\documentclass{article}
\usepackage{array, tabularx, multirow, hhline}
% Two shorthands to secured equal rowheigth
\newcommand*{\hz}{\vphantom{\parbox[c]{1cm}{\rule{1cm}{1.5\normalbaselineskip}}}}
\newcommand*{\vz}{\vphantom{\parbox[c]{1cm}{\rule{1cm}{2.5\normalbaselineskip}}}}
% Define four new X column types based on width. tabularx takes care of the maths involved
\newcolumntype{A}{>{\centering\arraybackslash\hsize=0.4\hsize\linewidth=\hsize}X}
\newcolumntype{B}{>{\centering\arraybackslash\hsize=0.3\hsize\linewidth=\hsize}X}
\newcolumntype{C}{>{\centering\arraybackslash\hsize=0.2\hsize\linewidth=\hsize}X}
\newcolumntype{D}{>{\centering\arraybackslash\hsize=0.1\hsize\linewidth=\hsize}X}
% Uncomment to see margins etc.
%\usepackage{showframe}
%\renewcommand*\ShowFrameColor{\color{red}}
%\renewcommand*\ShowFrameLinethickness{.15pt}
\setlength{\tabcolsep}{0.5em}
\setlength{\extrarowheight}{4pt} % Push first line of text away from rules above.
\begin{document}
\centering
\begin{tabularx}{\linewidth}{|B||C|D|C|A||C|D|C|A|}
\hhline{|*{9}{=}|}
\hz B & \multicolumn{4}{c||}{} & \multicolumn{4}{c|}{}\\
\hhline{|-||----||----|}
\hz B & \multicolumn{2}{c|}{} & & & \multicolumn{2}{c|}{} & & \\
\hhline{|-||--|-|-||--|-|-|}
\vz\multirow[c]{3}{=}{\centering B} & & & & & & & & \\
\hhline{|~||--|-|-||--|-|-|}
\hz & C & & & & & & & \\
\hhline{|-||--|-|-||--|-|-|}
\vz\multirow[c]{3}{=}{B} & & & & & & & & \\
\hhline{|~||--|-|-||--|-|-|}
\hz & C & & & & & & & \\
\hhline{|-||--|-|-||--|-|-|}
\vz \hz\multirow[c]{3}{=}{B} & & & & & & & & \\
\hhline{|~||--|-|-||--|-|-|}
\hz & C & & & & & & & \\
\hhline{|*{9}{=}|}
\end{tabularx}
\end{document}