“!您不能在内部垂直模式下使用‘\raise’”错误

“!您不能在内部垂直模式下使用‘\raise’”错误

我使用命令\raise将标题叠加到文字上。

我收到错误

! You can't use `\raise' in internal vertical mode

这让我困惑了一段时间。

对于那些感兴趣的人,这是我的代码:

\def\withHatTitle#1#2{% #1: title #2: content
\setbox1=\hbox{#2}
\setbox0=\hbox{%\leaders\hrule height3pt depth-2pt\hskip 5pt
\kern\fboxsep#1\kern\fboxsep\leaders\hrule height3pt depth-2pt\hskip 5pt}
\ifdim\wd1<\wd0\wd1=\wd0\fi% if title longer than content, title gives the size
\setbox0=\hbox{\makebox[\wd1]{\box0\leaders\hrule height3pt depth-2pt\hfill}}% complete title with hrule
\wd1=0pt \box1 \raise 11pt \box0}% superpose title and content

答案1

这个错误的解释是,在垂直模式下禁止使用 \raise,也就是大致当 Tex 在垂直方向上堆积盒子时。

因此,解决方案很简单:退出垂直模式。一个简单的解决方案是使用 \hbox 命令封闭我的宏 \withHatTitle,如下所示:

\hbox{\withHatTitle{The title}{This is the text to be titled}}

希望这可以帮助 !

PS 前者对于 \lower 也同样适用。

答案2

正如您建议的代码所用,\makebox很明显这是为 LaTeX 设计的。LaTeX 框命令始终使用水平模式来避免此问题和其他问题。直接模拟的\raise\raisebox,但在这里tabular似乎更自然。

在此处输入图片描述

\documentclass{article}
\begin{document}

\newcommand\withHatTitle[2]{\begin{tabular}[b]{@{}l@{}}%
#1 \hrulefill\\%
#2\end{tabular}}

a \withHatTitle{The title}{This is the text to be titled}

\bigskip

\withHatTitle{The title}{This is the text to be titled}

\end{document}

相关内容