在子浮点型里面逐字逐句?

在子浮点型里面逐字逐句?

当我写下以下内容时

\subfloat[caption]{\label{fig:xxxx}\verb+xxxx+}

我明白了\verb illegal in command argument。似乎无法verbatim在 中定义环境\subfloat

当我使用它时\subfloat[caption]{\label{fig:xxxx}\texttt{xxxx}}它可以工作,但我需要多行,所以我必须使用verbatim

我有什么选择?也许是另一个包?

答案1

你不能\verb在另一个命令的参数中使用。如果你真的需要在子浮点数中使用逐字模式,那么可以这样

\newsavebox{\verbbox} % in the preamble

\begin{lrbox}{\verbbox}
\verb+xxxx+
\end{lrbox}%
\subfloat[caption]{\label{myfigure}\usebox{\verbbox}}

lrbox就可以了。您还可以在里面放一个minipage,以获得更长的逐字片段:

\begin{lrbox}{\verbbox}
\begin{minipage}{.3\textwidth}
\begin{verbatim}
Some verbatim
on more than one line
\end{verbatim}
\end{minipage}
\end{lrbox}%
\subfloat[caption]{\label{myfigure}\usebox{\verbbox}}

subcaption包具有类似的功能,subfig并且子浮点数被实现为环境,其中允许逐字记录。

答案2

请参阅第 6.9 节(“如何将逐字环境放入子浮点中?”)Sub-g 包手册基本上,手册建议您SubFloat在序言中定义环境:

\makeatletter
\newbox\sf@box
\newenvironment{SubFloat}[2][]%
{\def\sf@one{#1}%
\def\sf@two{#2}%
\setbox\sf@box\hbox
\bgroup}%
{ \egroup
\ifx\@empty\sf@two\@empty\relax
\def\sf@two{\@empty}
\fi
\ifx\@empty\sf@one\@empty\relax
\subfloat[\sf@two]{\box\sf@box}%
\else
\subfloat[\sf@one][\sf@two]{\box\sf@box}%
\fi}
\makeatother

然后,使用SubFloat环境如下:

\begin{figure}
\centering
\begin{SubFloat}[Black box]{\label{fig:label1}Caption 1.}%
\rule{4cm}{3cm}%...blackbox subfigure...
\end{SubFloat}%
\hspace{1.5cm}%
\begin{SubFloat}{\label{fig:label2}Caption 2.}%...verbatim subfigure with
\begin{minipage}[b]{0.3\linewidth}% a minipage to control the width...
\begin{verbatim}
abc def ghi jkl
xx x xxx
abc def ghi jkl
\end{verbatim}%
\end{minipage}%
\end{SubFloat}
\caption{Main Caption.}
\label{fig:label}
\end{figure}

相关内容