如何让文本适合该表的单元格?

如何让文本适合该表的单元格?

我正在尝试使用 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来帮助连字符巴别塔未命中。此外,表格太宽,因此您需要将 缩小到fontsizefootnotesize不过,您要么使用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}]}}。这是必要的,否则编译会导致意外错误。

相关内容