tabularx 里面的 \phantom

tabularx 里面的 \phantom

我尝试使用以下方法来改善下表中的对齐\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包中,所以我有两个问题:

  1. 我可以以\hphantom某种方式在里面完成工作吗tabularx

  2. 即使没有包含 的违规行,\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}

相关内容