Я пытаюсь создать большую таблицу с помощью 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
для улучшения интервалов.
Если вы хотите, чтобы все столбцы были одинаковой ширины, используйтетабличныйxи восемь подобных столбцов. Кажется, вам нужны центрированные столбцы, поэтому я отцентрировал их все, определив новый тип столбца Y
с помощью команды:
\newcolumntype{Y}{>{\Centering\arraybackslash}X}
Centering
это команда отragged2epackage. Вы можете определить столбцы, выровненные по левому или правому краю, таким же образом:
\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}$]
используется simple[\si{\metre}]
.В последнем столбце единицы измерения вставляются в фигурные скобки:
\thead{Deformação\\ {[\si{\metre}]}}
. Там это необходимо, так как в противном случае компиляция приведет к непредвиденной ошибке.