我可以检测 LaTeX 是否处于垂直模式吗?

我可以检测 LaTeX 是否处于垂直模式吗?

我正在编写一个创建边距段落的命令。这要求此命令仅在垂直模式下使用,这没问题。如果在浮动模式下使用该命令,LaTeX 会给出“不在外部段落模式”错误,这不太友好。有没有办法检测 LaTeX 当前是否处于垂直模式,以便我可以写一些对用户有帮助的内容?

答案1

开关\ifvmode指示您是否处于垂直模式(包括内部垂直模式)。还有\ifhmode水平模式和\ifinner“内部”模式。

TeXBook,第 20 章:定义(也称为宏),第 209 页了解更多详细信息。

请注意,有时需要在宏开头添加一个\relax\ifvmode该宏可用于扩展标记的位置。例如,在tabular/\halign单元格中,标记会一直扩展,直到找到不可扩展的内容以查找\noalign。在这种情况下,错误的模式可能仍然处于活动状态,例如,据我所知,TeX 处于行的第一个单元格的垂直模式,因为单元格尚未进入,所以 TeX 仍然在行之间。

答案2

作为尝试复制 LaTeX 所进行的测试的替代方法,您可以直接在本地重新定义\@parmoderr\@ehb重新定义更特定于您的环境的内容。

\@parmoderr最初定义为

    \gdef\@parmoderr{%
  \@latex@error{Not in outer par mode}\@ehb}

这会导致“不在外部 par 模式”错误,然后\@ehb是您输入时获得的帮助文本h,最初定义为

\gdef\@ehb{%
  You've lost some text. \space \@ehc}
\gdef\@ehc{%
  Try typing \space <return> %
  \space to proceed.\MessageBreak
  If that doesn't work, type \space X <return> \space to quit.}

全局改变这些定义不是一个好主意,但是在特定环境中改变它们是合理的。

相关内容