![如何让文本适合该表的单元格?](https://linux22.com/image/399948/%E5%A6%82%E4%BD%95%E8%AE%A9%E6%96%87%E6%9C%AC%E9%80%82%E5%90%88%E8%AF%A5%E8%A1%A8%E7%9A%84%E5%8D%95%E5%85%83%E6%A0%BC%EF%BC%9F.png)
我正在尝试使用 Latex 创建一个大表。结果必须是这样的:
\documentclass{article}
\usepackage{tabularx}
\usepackage{adjustbox}
\usepackage{siunitx}
\usepackage{array}
\usepackage{graphicx}
\begin{document}
\begin{center}
\begin{adjustbox}{width=20cm, center}
\begin{tabular}{|c|m{0.5cm}|c|c|c|c|c|c|}
\hline
\textbf{Barra} & \textbf{Comprimento[$\si{\metre}$]} & \hspace{0pt}\textbf{Área da Seção[$\si{mm^2}$]} & \textbf{Força sobre a barra[$\si{\newton}$]} & \textbf{Tensão Normal[$\si{\mega\pascal}$]} & \hspace{0pt}\textbf{Módulo de Elasticidade[$\si{\mega\pascal}$]} & $\si{\epsilon_{L}}$ & \hspace{0pt}\textbf{Deformação[$\si{\metre}$]}\\
\hline
& & & & & & & \\
\hline
& & & & & & &\\
\hline
& & & & & & &\\
\hline
& & & & & & &\\
\hline
& & & & & & &\\
\hline
& & & & & & &\\
\hline
& & & & & & &\\
\hline
& & & & & & &\\
\hline
& & & & & & &\\
\hline
\end{tabular}
\end{adjustbox}
\end{center}
\end{document}
使用此代码,我只能使文本变小。我无法在单元格中换行单个单词(例如“Deformação”和“Comprimento”等大单词),我已经尝试过这个\hspace{0pt}
技巧,但似乎不起作用。在尝试使用 tabularx 等软件包的解决方案后,我仍然无法使其正常工作。此外,我只能使用 adjustbox 使其保持居中。\centering
没有用。有人能帮我吗?
答案1
这只是一个使用正确的包的问题。
使用表格自动获取列宽,巴别塔使用正确的语言(我猜应该是葡萄牙语)和ragged2e[overload]
带有在标题中激活连字符的选项。您必须使用\-
where来帮助连字符巴别塔未命中。此外,表格太宽,因此您需要将 缩小到fontsize
。footnotesize
不过,您要么使用landscape
模式,要么减少左右边距。我使用了几何学减少所有利润。
表格前的命令\noindent
可避免表格向左移动并突出到右边距。另外,我c
在前两个表格中使用了普通列,因为表格最终第一列太窄了(我可以调整tymin
)。
您可以考虑使用书签以获得更好的间距,但你必须删除所有垂直规则。我已使用以下代码包含了代码书签并建议您减少水平线的数量,此外还删除所有垂直线。
如果你不愿意或不允许违反规则,请使用
\renewcommand{\arraystretch}{1.1} % or 1.5
\setlength{\extrarowheight}{1pt} % or 2 in case of 1.5 for arraystretch
以改善间距。
如果希望所有列的宽度相同,请使用表格型和八个类似的列。看来您想要居中列,所以我通过Y
使用以下命令定义新的列类型,使所有列都居中:
\newcolumntype{Y}{>{\Centering\arraybackslash}X}
Centering
是来自的命令ragged2e包。您可以用同样的方式定义左对齐或右对齐的列:
\newcolumntype{W}{>{\RaggedRight\arraybackslash}X}
\newcolumntype{Z}{>{\RaggedLeft\arraybackslash}X}
由于我使用了这个[overload]
选项,ragged2e\centering
即使您使用、\raggedright
或,也会生效\raggedleft
。我还大大增加了间距,正如您在问题中所指出的那样。
如果您要制作需要用铅笔手写填写的记分卡,则第三个表格就可以了。如果您要为演示文稿或文档排版表格,则(我的意见)应该使用以下表格之一书签版本。
如果您提供有关表格内容的信息,您可能会得到额外的建议。
\documentclass{article}
\usepackage[portuguese]{babel}
\usepackage[margin=1.5cm]{geometry}
\usepackage{tabularx,tabulary, booktabs}
\usepackage{siunitx}
\usepackage[overload]{ragged2e}
\setlength{\tabcolsep}{2pt}
\renewcommand{\arraystretch}{1.1}
\setlength{\extrarowheight}{1pt}
\begin{document}
\section*{tabulary}
\footnotesize
{
\noindent\begin{tabulary}{\linewidth}{|c|C|C|C|C|C|C|C|}
\hline
\textbf{Barra} & \textbf{Compri\-mento[$\si{\metre}$]} & \hspace{0pt}\textbf{Área da Seção[$\si{mm^2}$]} & \textbf{Força sobre a barra[$\si{\newton}$]} & \textbf{Tensão Normal[$\si{\mega\pascal}$]} & \hspace{0pt}\textbf{Módulo de Elasticidade[$\si{\mega\pascal}$]} & $\si{\epsilon_{L}}$ & \hspace{0pt}\textbf{Defor\-mação[$\si{\metre}$]}\\
\hline
& & & & & & & \\
\hline
& & & & & & &\\
\hline
& & & & & & &\\
\hline
& & & & & & &\\
\hline
& & & & & & &\\
\hline
& & & & & & &\\
\hline
& & & & & & &\\
\hline
& & & & & & &\\
\hline
& & & & & & &\\
\hline
\end{tabulary}%
}
\vspace{2cm}
{
\noindent\begin{tabulary}{\linewidth}{@{}c*{7}{C}@{}}
\toprule
\textbf{Barra} & \textbf{Compri\-mento[$\si{\metre}$]} & \hspace{0pt}\textbf{Área da Seção[$\si{mm^2}$]} & \textbf{Força sobre a barra[$\si{\newton}$]} & \textbf{Tensão Normal[$\si{\mega\pascal}$]} & \hspace{0pt}\textbf{Módulo de Elasticidade[$\si{\mega\pascal}$]} & $\si{\epsilon_{L}}$ & \textbf{Defor\-mação[$\si{\metre}$]}\\
\midrule
1 & 20 & 300 & 400 & 500 & 600 & 7 & 800\\
2 & 20 & 300 & 400 & 500 & 600 & 7 & 800\\
3 & 20 & 300 & 400 & 500 & 600 & 7 & 800\\
4 & 20 & 300 & 400 & 500 & 600 & 7 & 800\\
5 & 20 & 300 & 400 & 500 & 600 & 7 & 800\\\midrule
6 & 20 & 300 & 400 & 500 & 600 & 7 & 800\\
7 & 20 & 300 & 400 & 500 & 600 & 7 & 800\\
8 & 20 & 300 & 400 & 500 & 600 & 7 & 800\\
9 & 20 & 300 & 400 & 500 & 600 & 7 & 800\\
10 & 20 & 300 & 400 & 500 & 600 & 7 & 800\\
\bottomrule
\end{tabulary}
\pagebreak
\section*{tabularx}
}
{
\renewcommand{\arraystretch}{1.5}
\setlength{\extrarowheight}{2pt}
\setlength{\arrayrulewidth}{0.2pt}
\newcolumntype{Y}{>{\Centering\arraybackslash}X}
\noindent\begin{tabularx}{\linewidth}{*{8}{|Y}|}
\hline
\textbf{Barra} & \textbf{Compri\-mento[$\si{\metre}$]} & \hspace{0pt}\textbf{Área da Seção[$\si{mm^2}$]} & \textbf{Força sobre a barra[$\si{\newton}$]} & \textbf{Tensão Normal[$\si{\mega\pascal}$]} & \hspace{0pt}\textbf{Módulo de Elasti\-cidade[$\si{\mega\pascal}$]} & $\si{\epsilon_{L}}$ & \textbf{Defor\-mação[$\si{\metre}$]}\\
\hline
1 & 20 & 300 & 400 & 500 & 600 & 7 & 800\\\hline
2 & 20 & 300 & 400 & 500 & 600 & 7 & 800\\\hline
3 & 20 & 300 & 400 & 500 & 600 & 7 & 800\\\hline
4 & 20 & 300 & 400 & 500 & 600 & 7 & 800\\\hline
5 & 20 & 300 & 400 & 500 & 600 & 7 & 800\\\hline
6 & 20 & 300 & 400 & 500 & 600 & 7 & 800\\\hline
7 & 20 & 300 & 400 & 500 & 600 & 7 & 800\\\hline
8 & 20 & 300 & 400 & 500 & 600 & 7 & 800\\\hline
9 & 20 & 300 & 400 & 500 & 600 & 7 & 800\\\hline
10 & 20 & 300 & 400 & 500 & 600 & 7 & 800\\
\hline
\end{tabularx}%
}
\vspace{2cm}
{
\newcolumntype{Y}{>{\Centering\arraybackslash}X}
\noindent\begin{tabularx}{\linewidth}{*{8}{Y}}
\toprule
\textbf{Barra} &
\textbf{Compri\-mento[$\si{\metre}$]}l &
\hspace{0pt}\textbf{Área da Seção[$\si{mm^2}$]} &
\textbf{Força sobre a barra[$\si{\newton}$]} &
\textbf{Tensão Normal[$\si{\mega\pascal}$]} &
\textbf{Módulo de Elasti\-cidade[$\si{\mega\pascal}$]} &
$\si{\epsilon_{L}}$ &
\textbf{Defor\-mação[$\si{\metre}$]}\\
\midrule
100 & 20 & 300 & 400 & 500 & 600 & 700 & 800\\
200 & 20 & 300 & 400 & 500 & 600 & 700 & 800\\
300 & 20 & 300 & 400 & 500 & 600 & 700 & 800\\
400 & 20 & 300 & 400 & 500 & 600 & 700 & 800\\
500 & 20 & 300 & 400 & 500 & 600 & 700 & 800\\\addlinespace[6pt]
600 & 20 & 300 & 400 & 500 & 600 & 700 & 800\\
700 & 20 & 300 & 400 & 500 & 600 & 700 & 800\\
800 & 20 & 300 & 400 & 500 & 600 & 700 & 800\\
900 & 20 & 300 & 400 & 500 & 600 & 700 & 800\\
1000 & 20 & 300 & 400 & 500 & 600 & 700 & 800\\
\hline
\end{tabularx}%
}
\end{document}
答案2
作为@Sveinung 回答中的第二个例子的补充/替代:
- 我怀疑列中是数字。不幸的是,它们是未知的。它们都是整数吗?它们的位数都相同吗?无论如何,我宁愿使用
S
列类型并考虑@frougon 在下面的问题中发表评论:
\documentclass{article}
%\usepackage[portuguese]{babel}
\usepackage{geometry}
\usepackage{siunitx}
\usepackage{booktabs, makecell}
\renewcommand\theadfont{\footnotesize\bfseries}
\renewcommand\theadgape{}
%---------------- show page layout. don't use in a real document!
\usepackage{showframe}
\renewcommand\ShowFrameLinethickness{0.15pt}
\renewcommand*\ShowFrameColor{\color{red}}
%---------------------------------------------------------------%
\begin{document}
\begin{center}
\small
\setlength{\tabcolsep}{4pt} % Reduce space between columns
\setcellgapes{3pt}
\makegapedcells
\begin{tabular}{*{8}{S}}
\toprule
{\thead{Barra}}
& {\thead{Compri-\\mento [\si{\metre}]}}
& {\thead{Área da\\ Seção [\si{mm^2}]}}
& {\thead{Força sobre\\ a barra [\si{\newton}]}}
& {\thead{Tensão\\ Normal [\si{\mega\pascal}]}}
& {\thead{Módulo de\\ Elasticidade [\si{\mega\pascal}]}}
& {\si{\epsilon_{L}}}
& {\thead{Deformação\\ {[\si{\metre}]}}} \\
\midrule
1 & 12.3 & 30 & 40 & 55.7 & 60 & 7 & 8 \\
12 & 4.5 & 33 & 38,2 & 33.44 & 60 & 7 & 6 \\
\bottomrule
\end{tabular}
\end{center}
\end{document}
- 对于
S
列类型,我没有确定数字的格式,例如S[table-format=2,2]
因为数字未知,但是使用默认值似乎可以给出相当好的结果:
如您所见,我从列标题中删除了所有内容
\hspace{...}
(不清楚它们的功能是什么)并删除了单位的数学环境,即改为[$\si{metre}$]
使用简单[\si{\metre}]
。在最后一列中,单位用花括号括起来:
\thead{Deformação\\ {[\si{\metre}]}}
。这是必要的,否则编译会导致意外错误。