我尝试使用以下方法来改善下表中的对齐\hphantom
:
\documentclass{article}
\usepackage{tabularx}
\begin{document}
\begin{tabularx}{\linewidth}{p{2.8cm} X}
1/00\,--\,2/00 & text text \\
\hphantom{0}1/00\,--\,2/00 & text text \\
01/00\,--\,2/00 & text text \\
10/00\,--\,11/00 & text text
\end{tabularx}
\end{document}
但不知何故,这会在包含以下内容的单元格中添加一行跳行\hphantom
:
我完全清楚错误出在我这边,而不是在tabularx
包中,所以我有两个问题:
我可以以
\hphantom
某种方式在里面完成工作吗tabularx
?即使没有包含 的违规行,
\hphantom
我也会得到一个Overfull \hbox (15.0pt too wide)
,而这不应该出现在那里。我该怎么做才能消除这个警告?
答案1
您的行定义为\parbox
。\parbox
始终以垂直模式启动。 这可以通过以下示例显示。
\documentclass{article}
\begin{document}
\parbox{8cm}{\ifvmode vmode \else hmode \fi}
\end{document}
这意味着一个简单的下一个框将继续上一个垂直列表无需切换模式。您需要在水平模式下明确开始段落才能使用框,例如\hphantom
。这在上一个答案中有解释\leavevmode 的功能和使用。TeX Book 中提供了更多信息:
简单地说
\hbox{...}
是行不通的,因为该框将只继续前一个垂直列表而不切换模式。 您需要明确地开始段落,而最直接的方法就是说\indent\hbox{...}
。但假设您想定义一个扩展为 的宏hbox
,其中这个宏既要在段落开头使用,也要在段落中间使用;那么您就不想强迫用户\indent
在段落开头调用宏之前键入内容,也不想\indent
在宏本身中说 (因为那样可能会插入不需要的缩进)。这个更普遍的问题的一种解决方案是说‘\␣\unskip\hbox{...}’
,因为\␣
使模式为水平 而\unskip
删除了不需要的空格。Plain TEX 提供了一个\leavevmode
宏,它以可能最有效的方式解决了这个问题:\leavevmode
是 的缩写‘\unhbox\voidbox’
,其中\voidbox
是一个永久为空的框寄存器。
\documentclass{article}
\usepackage{tabularx}
\begin{document}
\parbox{8cm}{\ifvmode vmode \else hmode \fi}
\noindent\begin{tabularx}{\linewidth}{p{2.8cm} X}
1/00\,--\,2/00 & text text \\
\leavevmode\hphantom{0}1/00\,--\,2/00 & text text \\
01/00\,--\,2/00 & text text \\
10/00\,--\,11/00 & text text
\end{tabularx}
\end{document}
正如 Werner 所说:在启动 tabularx 之前使用 \noindent。15pt 是 tabularx 向右推的常规段落缩进。这避免了15pt overfull \hbox
。
答案2
Marco 给出了在 LaTeX 中正确的使用方法\hphantom
,但在表格等对齐结构中,不需要使用幻影进行伪对齐。
\documentclass{article}
\usepackage{tabularx}
\begin{document}
\noindent
\begin{tabularx}{\linewidth}{r@{\,--\,}lp{2.8cm} X}
1/00&2/00 & text text \\
1/00&2/00 & text text \\
01/00&2/00 & text text \\
10/00&11/00 & text text
\end{tabularx}
\end{document}
答案3
插入noindent
...但我不知道这是否是一种好的做法
\documentclass{article}
\usepackage{tabularx}
\begin{document}
\begin{tabularx}{\linewidth}{p{2.8cm} X}
1/00\,--\,2/00 & text text \\
\noindent \hphantom{0}1/00\,--\,2/00 & text text \\
01/00\,--\,2/00 & text text \\
10/00\,--\,11/00 & text text
\end{tabularx}
\end{document}