对我来说,在 LaTeX 中很好地匹配表格很难,我不知道是否有手册介绍这方面的良好做法。我需要创建一个包含 S 列并列数字的表格,但这些列的标题很长,我无法找到使用此处学到的技巧将其放入页面的方法。
我的 MWE 可能是这样的:
\documentclass[fontsize=11pt,paper=letter,headings=small,bibliography=totoc,DIV=9,headsepline=true]{scrartcl}
\usepackage[utf8]{inputenx}
\usepackage[TS1,T1]{fontenc}
\usepackage{textcomp}
\usepackage[spanish,mexico]{babel}
\usepackage[intlimits]{amsmath}
\usepackage{xspace}
\usepackage{xkeyval}
\usepackage{array,multirow,tabularx,ragged2e,booktabs}
%\newcolumntype{Y}{>{\RaggedRight\arraybackslash\hspace{0pt}}X}
\newcolumntype{Y}{>{\RaggedRight\arraybackslash}X}
%\newcolumntype{C}{>{\centering\arraybackslash\hspace{0pt}}X}
\usepackage{rotating}
\usepackage{colortbl}
\usepackage[per-mode=symbol]{siunitx}
\sisetup{
output-decimal-marker = {,},
range-units = brackets,
list-final-separator = { \translate{and} },
list-pair-separator = { \translate{and} },
range-phrase = { \translate{to (numerical range)} },
}
\ExplSyntaxOn
\providetranslation [ to = Spanish ]
{ to~(numerical~range) } { a }%substitute the right word here
\ExplSyntaxOff
\begin{document}
\begin{table}[htb]
\caption{Capacidad de generación eléctrica en México}
\label{tab:CGE}
\centering
\begin{tabularx}{\textwidth}{@{} l S S[table-format=6.2] S[table-format=3.2]@{}}
\toprule
& \textbf{Permisos de la CRE} & \textbf{Capacidad de generación de energía} [\si{\giga\watt\hour}] & \textbf{Porcentaje}\\
\midrule
% Pública
\textbf{Energía de generación propia} & & \textbf{169,900.00} & \textbf{42.25} \\
\midrule
\textbf{Pemex} & & & \\
\textbf{Autoabastecimiento} & 31 & 2526.40 & 0.61 \\
\textbf{Cogeneración} & 18 & 7049.04 & 1.75 \\
\textbf{Subtotal} & & 9575.44 & 2.38 \\
% Privada
\midrule
\textbf{Autoabastecimiento} & 486 & 67145.80 & 16.70 \\
\textbf{Cogeneración} & 109 & 18153.66 & 4.51 \\
\textbf{Producción independiente} & 30 & 105634.80 & 26.27 \\
\textbf{Exportación} & 8 & 13295.60 & 3.31 \\
\textbf{Importación} & 44 & 2061.30 & 0.51 \\
\textbf{Pequeña producción} & 178 & 12212.60 & 3.04 \\
\textbf{Usos Propios Continuos} & 36 & 1523.50 & 0.38 \\
\textbf{Pemex-Cogeneración} & 1 & 2628.00 & 0.65 \\
\textbf{Subtotal} & 844 & 222655.26 & 55.37 \\
\textbf{Total CRE} & 892 & 232230.70 & 57.75 \\
\midrule
\textbf{Total} & 892 & 402130.14 & 100 \\
\bottomrule
\end{tabularx}
\end{table}
\end{document}
如您所见,我的第一个问题是让表格适合页面。第二个问题是用粗体显示标题行中的单位。第三个问题是在表格左侧添加一列以指定公共和私有生成,但我认为在解决第一个问题之后这个问题很容易解决。
抱歉,如果这是一个重复的问题,但我没有在之前阅读的问题中找到答案。
答案1
解决方案是makecell
包,它允许在单元格中换行,并对列标题进行通用格式设置。在行中添加了一个小的垂直填充,并将l
列替换为X
。最后,我擅自纠正了第二行粗体数字格式的一些不一致之处。
\documentclass[fontsize=11pt,paper=letter,headings=small,bibliography=totoc,DIV=9,headsepline=true]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[TS1,T1]{fontenc}
\usepackage{textcomp}
\usepackage[spanish,mexico]{babel}
\usepackage[intlimits]{amsmath}
\usepackage{xspace}
\usepackage{xkeyval}
\usepackage{array,multirow,tabularx,ragged2e, booktabs}
%\newcolumntype{Y}{>{\RaggedRight\arraybackslash\hspace{0pt}}X}
\newcolumntype{Y}{>{\RaggedRight\arraybackslash}X}
%\newcolumntype{C}{>{\centering\arraybackslash\hspace{0pt}}X}
\usepackage{rotating}
\usepackage{colortbl}
\usepackage[per-mode=symbol]{siunitx}
\sisetup{
output-decimal-marker = {,},
range-units = brackets,
list-final-separator = { \translate{and} },
list-pair-separator = { \translate{and} },
range-phrase = { \translate{to (numerical range)} },
}
\ExplSyntaxOn
\providetranslation [ to = Spanish ]
{ to~(numerical~range) } { a }%substitute the right word here
\ExplSyntaxOff
\usepackage{makecell}
\renewcommand\theadfont{\bfseries}
\renewcommand\theadalign{bc}
\setcellgapes{1.5pt}
\begin{document}
\begin{table}[htb]
\centering\makegapedcells
\caption{Capacidad de generación eléctrica en México}
\label{tab:CGE}
\begin{tabularx}{\linewidth}{@{}>{\bfseries\RaggedRight}X S S[table-format=6.2] S[table-format=2.2]@{}}
\addlinespace
\toprule
\addlinespace[-0.3ex]
& {\thead{Permisos\\ de la CRE}} & {\thead{Capacidad de \\generación de\\ energía (\si{\giga\watt\hour})}}
& {\thead{Porcentaje}}\\[-0.6ex]
\midrule
% Pública
Energía de generación propia & & \textbf{169\,900,00} & \textbf{42,25} \\
\midrule
Pemex & & & \\
Autoabastecimiento & 31 & 2526.40 & 0.61 \\
Cogeneración & 18 & 7049.04 & 1.75 \\
Subtotal & & 9575.44 & 2.38 \\
% Privada
\midrule
Autoabastecimiento & 486 & 67145.80 & 16.70 \\
Cogeneración & 109 & 18153.66 & 4.51 \\
Producción independiente & 30 & 105634.80 & 26.27 \\
Exportación & 8 & 13295.60 & 3.31 \\
Importación & 44 & 2061.30 & 0.51 \\
Pequeña producción & 178 & 12212.60 & 3.04 \\
Usos Propios Continuos & 36 & 1523.50 & 0.38 \\
Pemex-Cogeneración & 1 & 2628.00 & 0.65 \\
Subtotal & 844 & 222655.26 & 55.37 \\
Total CRE & 892 & 232230.70 & 57.75 \\
\midrule
Total & 892 & 402130.14 & 100 \\
\bottomrule
\end{tabularx}
\end{table}
\end{document}
答案2
尝试使用较小的字体(如有必要)并将列标题放在更多行中,如下所示:
对于上表,我添加了包makecell
并将列标题theader
放入makecell
:
\documentclass[fontsize=11pt,paper=letter,headings=small,bibliography=totoc,DIV=9,headsepline=true]{scrartcl}
\usepackage[utf8]{inputenx}
\usepackage[TS1,T1]{fontenc}
\usepackage{textcomp}
\usepackage[spanish,mexico]{babel}
\usepackage[intlimits]{amsmath}
\usepackage{xspace}
\usepackage{xkeyval}
\usepackage{array,multirow,tabularx,ragged2e,booktabs}
\usepackage{makecell}% added
\renewcommand\theadfont{\bfseries}% added
%\newcolumntype{Y}{>{\RaggedRight\arraybackslash\hspace{0pt}}X}
\newcolumntype{Y}{>{\RaggedRight\arraybackslash}X}
%\newcolumntype{C}{>{\centering\arraybackslash\hspace{0pt}}X}
\usepackage{rotating}
\usepackage{colortbl}
\usepackage[per-mode=symbol]{siunitx}
\sisetup{
output-decimal-marker = {,},
range-units = brackets,
list-final-separator = { \translate{and} },
list-pair-separator = { \translate{and} },
range-phrase = { \translate{to (numerical range)} },
}
\ExplSyntaxOn
\providetranslation [ to = Spanish ]
{ to~(numerical~range) } { a }%substitute the right word here
\ExplSyntaxOff
\usepackage[active,floats,tightpage]{preview}
\setlength\PreviewBorder{1em}
\begin{document}
\begin{table}[htb]
\small% added
\caption{Capacidad de generación eléctrica en México}
\label{tab:CGE}
\centering
\begin{tabularx}{\textwidth}{>{\bfseries}l S S[table-format=6.2] S[table-format=3.2]}
\toprule
& {\thead{Permisos\\
de la CRE}}
& {\thead{Capacidad de\\ generación de \\
energía [\si{\giga\watt\hour}]}}
& {\thead{Porcentaje}}\\
\midrule
% Pública
Energía de generación propia
& & \textbf{169,900.00} & \textbf{42.25} \\
\midrule
Pemex & & & \\
Autoabastecimiento & 31 & 2526.40 & 0.61 \\
Cogeneración & 18 & 7049.04 & 1.75 \\
Subtotal & & 9575.44 & 2.38 \\
% Privada
\midrule
Autoabastecimiento & 486 & 67145.80 & 16.70 \\
Cogeneración & 109 & 18153.66 & 4.51 \\
Producción independiente & 30 & 105634.80 & 26.27 \\
Exportación & 8 & 13295.60 & 3.31 \\
Importación & 44 & 2061.30 & 0.51 \\
Pequeña producción & 178 & 12212.60 & 3.04 \\
Usos Propios Continuos & 36 & 1523.50 & 0.38 \\
Pemex-Cogeneración & 1 & 2628.00 & 0.65 \\
Subtotal & 844 & 222655.26 & 55.37 \\
Total CRE & 92 & 232230.70 & 57.75 \\
\midrule
Total & 892 & 402130.14 & 100 \\
\bottomrule
\end{tabularx}
\end{table}
\end{document}
对于最终形式,您可以将分列标题分成适当数量的行并选择其他字体大小。
编辑\textbf{....}
正如@Manuel 在他的评论中所说,如果您在列类型中包含,则 可以省略第一列>{\bfseries}l
。我现在正在考虑这一点并更正上面的代码。
答案3
您不必更改字体大小或放弃基本tabularx
结构。您真正需要做的就是 (a) 将前两个数字列的标题单元格的列类型更改为(居中版本的)列类型X
,以及 (b) 在最右侧的列标题周围放置花括号,即\textbf{Porcentaje}
,告诉 LaTeX 将其内容居中。
为了统一和简化表格的外观,我进一步建议您使用选项siunitx
,group-minimum-digits = 4
即不要将表格第一行的数字加粗,并在第一列中缩进一些条目(并省略几条水平线)。最后,如果您将第一列的类型指定为 而>{\bfseries}l
不是l
,则无需\textbf
在该列的所有后续单元格中键入内容。
\documentclass[fontsize=11pt,paper=letter,headings=small,
bibliography=totoc,DIV=9,headsepline=true]{scrartcl}
\usepackage[utf8]{inputenx}
\usepackage[TS1,T1]{fontenc}
\usepackage{textcomp}
\usepackage[spanish,mexico]{babel}
\usepackage[intlimits]{amsmath}
\usepackage{xspace}
\usepackage{xkeyval}
\usepackage{array,multirow,tabularx,ragged2e,booktabs}
\newcolumntype{C}{>{\Centering\arraybackslash\hspace{0pt}}X}
\usepackage{rotating}
\usepackage{colortbl}
\usepackage[per-mode=symbol]{siunitx}
\sisetup{
output-decimal-marker = {,},
group-minimum-digits = 4,
range-units = brackets,
list-final-separator = { \translate{and} },
list-pair-separator = { \translate{and} },
range-phrase = { \translate{to (numerical range)} },
}
\ExplSyntaxOn
\providetranslation [ to = Spanish ]
{ to~(numerical~range) } { a }%substitute the right word here
\ExplSyntaxOff
\begin{document}
\begin{table}[htb]
\caption{Capacidad de generación eléctrica en México}
\label{tab:CGE}
%%\centering % not needed
\begin{tabularx}{\textwidth}{@{} >{\bfseries}l
S[table-format=3.0]
S[table-format=6.2]
S[table-format=3.2] @{}}
\toprule
& \multicolumn{1}{C}{\textbf{Permisos de la CRE}}
& \multicolumn{1}{C}{\textbf{Capacidad de generación de energía} [\si{\giga\watt\hour}]} &
{\textbf{Porcentaje}}\\
\midrule
% Pública
Energía de generación propia & & 169900.00 & 42.25 \\
\midrule
Pemex & & & \\
Autoabastecimiento & 31 & 2526.40 & 0.61 \\
Cogeneración & 18 & 7049.04 & 1.75 \\
\addlinespace
\quad Subtotal & & 9575.44 & 2.38 \\
% Privada
\addlinespace
Autoabastecimiento & 486 & 67145.80 & 16.70 \\
Cogeneración & 109 & 18153.66 & 4.51 \\
Producción independiente & 30 & 105634.80 & 26.27 \\
Exportación & 8 & 13295.60 & 3.31 \\
Importación & 44 & 2061.30 & 0.51 \\
Pequeña producción & 178 & 12212.60 & 3.04 \\
Usos Propios Continuos & 36 & 1523.50 & 0.38 \\
Pemex-Cogeneración & 1 & 2628.00 & 0.65 \\
\addlinespace
\quad Subtotal & 844 & 222655.26 & 55.37 \\
\addlinespace
\quad Total CRE & 892 & 232230.70 & 57.75 \\
\midrule
Total & 892 & 402130.14 & 100.00 \\
\bottomrule
\end{tabularx}
\end{table}
\end{document}
答案4
有一种使用默认booktabs
包的简单技术。
\begin{tabular}[c]{@{}l@{}} table \\ heading \end{tabular}
例如,在您的表格中,标题“Permisos de la CRE”可以分为两行:
\begin{tabular}[c]{@{}l@{}} Permisos \\ de la CRE \end{tabular}
这可以在表格的任意行或列中完成,而不仅仅是在标题中。