![“!您不能在内部垂直模式下使用‘\raise’”错误](https://linux22.com/image/325187/%E2%80%9C%EF%BC%81%E6%82%A8%E4%B8%8D%E8%83%BD%E5%9C%A8%E5%86%85%E9%83%A8%E5%9E%82%E7%9B%B4%E6%A8%A1%E5%BC%8F%E4%B8%8B%E4%BD%BF%E7%94%A8%E2%80%98%5Craise%E2%80%99%E2%80%9D%E9%94%99%E8%AF%AF.png)
我使用命令\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}