如何让文字保留在表格的列内

如何让文字保留在表格的列内

我在 TeX 中有一个下表。

\begin{table}[!ht]
\centering \footnotesize
\caption{Schedule and Milestones}
\begin{tabular}{|p{.4in}|p{.2in}|p{.2in}|p{.2in}|p{.2in}|p{.2in}|p{.2in}|p{.2in}|p{.2in}|p{.2in}|p{.2in}|p{.2in}|p{.2in}|p{.2in}|p{.2in}|p{.2in}|p{.2in}|p{.2in}|p{.2in}|} 
\hline
\textbf{Phase1} \\ \hline
Month & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 & 11 & 12 & 13 & 14 & 15 & 16 & 17 &   18 \\ \hline
Milestones  &   &   &   &   &   & Software Delivery &   &   &   &   &   & Software Delivery  &   &    &    &   &   &  Software Delivery   \\ \hline
Tasks & U1U2E1E2 & U1,U2,E1,E2 & U1,U2,E1,E2 & U1,U2,E1,E2 & U1,U2,E1,E2,E4 & U1,U2,E1,E2,E4 & U1,U2,E1,E2 & U1,U2,E1,E2 & U1,U2,E1,E2  & U1,U2,U3,E1,E2,E3 &   U1,U2,E1,E2,E4 & U1,U2,E1,E2,E4 & U1,U2,E1,E2 & U1,U2,E1,E2 & U1,U2,E1,E2 & U1,U2,U3,E1,E2,E3 & U1,U2,E1,E2,E4 & U1,U2,E1,E2,E4  \\
\hline 
\end{tabular}
\label{Schedule}
\end{table}

尽管将大小定义为p{.2in},但列内的文本超出了边界。任务行中的文本不可见且超出了边界。为什么会这样?!此外,我可以使用哪些其他选项来使表格内容更具可读性?

在此处输入图片描述

答案1

我建议您执行以下操作:

  • 以横向模式排版表格,例如,通过加载rotating包并使用其sidewaystable环境。

  • 在“任务”行中的每个逗号后插入空格,以便根据需要插入换行符。(实际上,我认为逗号甚至没有必要;只需提供空格...)

  • 使用 LuaLaTeX 而不是 pdfLaTeX 来编译代码:LuaLaTeX 会对段落中的第一个单词进行连字符处理,而 pdfLaTeX 则不会。这对于单词“Milestones”和“Software”很重要。

在此处输入图片描述

% !TEX TS-program = lualatex
\documentclass{article}
\usepackage{fontspec,rotating}
\begin{document}
\begin{sidewaystable}[!ht]
\centering \footnotesize
\caption{Schedule and Milestones} \label{Schedule}
\begin{tabular}{| p{.4in} *{18}{|p{.2in}} |} 
\hline
\textbf{Phase1} \\ 
\hline
Month & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 & 11 & 12 & 13 & 14 & 15 & 16 & 17 & 18 \\ 
\hline
Milestones  &   &   &   &   &   & Software Delivery &   &   &   &   &   & Software Delivery  &   &    &    &   &   &  Software Delivery   \\ 
\hline
Tasks & U1, U2, E1, E2 & U1, U2, E1, E2 & U1, U2, E1, E2 & U1, U2, E1, E2 & U1, U2, E1, E2, E4 & U1, U2, E1, E2, E4 & U1, U2, E1, E2 & U1, U2, E1, E2 & U1, U2, E1, E2  & U1, U2, U3, E1, E2, E3 &   U1, U2, E1, E2, E4 & U1, U2, E1, E2, E4 & U1, U2, E1, E2 & U1, U2, E1, E2 & U1, U2, E1, E2 & U1, U2, U3, E1, E2, E3 & U1, U2, E1, E2, E4 & U1, U2, E1, E2, E4  \\
\hline 
\end{tabular}
\end{sidewaystable}
\end{document}

附录:虽然第一批代码可能会以最小的方式使表“工作”,但肯定可以进一步改进:

  • 为了通过更“开放”的表格外观实现更好的可读性,删除所有垂直线并\hline用包的宏替换booktabs\toprule,,,和。将单词“Month”移动到月份数字上方(而不是左侧)的位置\midrule\cmidrule\bottomrule

  • 使用环境自动利用全部可用宽度。对表格的第 2 列至第 19 列tabularx使用该包的列类型的修改形式。X

  • 删除任务字母/数字组合之间的逗号。

  • 加载caption包以便在表格标题和正文之间获得更多间距。

我相信你会喜欢最终的效果:

在此处输入图片描述

% !TEX TS-program = lualatex
\documentclass{article}
\usepackage{fontspec}
\usepackage{rotating,booktabs,tabularx,ragged2e,caption}
%% Create ragged-right versions of the "X" and "p" column types:
\newcolumntype{Y}{>{\RaggedRight\arraybackslash}X}
\newcolumntype{P}[1]{>{\RaggedRight\arraybackslash}p{#1}}

\begin{document}
\begin{sidewaystable}[!ht]
\footnotesize
\caption{Schedule and Milestones} \label{Schedule}
\begin{tabularx}{\textwidth}{@{} P{0.35in} *{3}{YYYYYP{0.6in}}@{}} 
\toprule
Phase~1 &  \multicolumn{18}{c}{Month}\\ 
\cmidrule(l){2-19}
& 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 & 11 & 12 & 13 & 14 & 15 & 16 & 17 & 18 \\ 
\midrule
Milestones  
&   &   &   &   &   & Software Delivery to DARPA
&   &   &   &   &   & Software Delivery to DARPA 
&   &   &   &   &   & Software Delivery to DARPA \\ 
\midrule
Tasks & U1 U2 E1 E2 & U1 U2 E1 E2 & U1 U2 E1 E2 & U1 U2 E1 E2 & U1 U2 E1 E2 E4 & U1 U2 E1 E2 E4 & U1 U2 E1 E2 & U1 U2 E1 E2 & U1 U2 E1 E2  & U1 U2 U3 E1 E2 E3 &   U1 U2 E1 E2 E4 & U1 U2 E1 E2 E4 & U1 U2 E1 E2 & U1 U2 E1 E2 & U1 U2 E1 E2 & U1 U2 U3 E1 E2 E3 & U1 U2 E1 E2 E4 & U1 U2 E1 E2 E4  \\
\bottomrule 
\end{tabularx}
\end{sidewaystable}
\end{document}

相关内容