我使用命令\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}