当我写下以下内容时
\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}