如何制作在代码周围绘制一个矩形框的效果,并将其放在图中?(欢迎任何有帮助的方法,包括非 tikz-pgf 方法)
答案1
verbatimbox 用法的一个例子:
\documentclass{article}
\usepackage{verbatimbox}
\begin{document}
\verbfilebox{codefrag}
\begin{tabular}{cc}
\boxbottomsep = 3em
\addvbuffer{\LARGE (b)} & \fbox{\theverbbox}
\end{tabular}
\end{document}
codefrag.tex 的位置
{invoke ... operation = "bf" ...
outputVariable = "FlightConf">
<compensationHandler cost="g">
<invoke ... operation = "cancelF" />
</compensationHandler>
</invoke>
另外,如果您希望自动编号代码片段,我在这里定义了 \numblock 命令,以便每个代码块按顺序编号。完成后,代码片段的放置方式如下,非常简单:
\verbfilebox{codefrag}
\numblock{\fbox{\theverbbox}}
下面是定义 \numblock 的示例。
\documentclass{article}
\usepackage{verbatimbox}
\begin{document}
\newlength\maxblocklabelsize
\newlength\blockindent
\setlength\maxblocklabelsize{-0.4in}
\setlength\blockindent{0.2in}
\newcommand\blocklabel[1]{[\textit{\alph{#1}}]}
\newcounter{blocknum}
\setcounter{blocknum}{0}
\newlength\codeblockwidth
\newlength\parindentsave
\newcommand\numblock[1]{
\setlength\codeblockwidth{\textwidth}
\addtolength\codeblockwidth{-\maxblocklabelsize}
\addtolength\codeblockwidth{-\blockindent}
\setlength\parindentsave{\parindent}
\parindent 0in
\addtocounter{blocknum}{1}
\vspace{\abovecaptionskip}
\begin{tabular}{@{\hspace{\blockindent}} l @{} r @{}}
{\tt
\begin{tabular*}{\codeblockwidth}{@{} l @{}}
#1
\end{tabular*}%
}
& \makebox[\maxblocklabelsize]{\hfill\blocklabel{blocknum}}\\
\end{tabular}
\vspace{\belowcaptionskip}
\setlength{\parindent}{\parindentsave}
}
\verbfilebox{codefrag}
\numblock{\fbox{\theverbbox}}
\end{document}
答案2
如果我没记错的话,这个问题已经被编辑,以强调将代码列表放入“图形”中的概念。 verbatimbox 包可以做到这一点,因为它的输出是一个框,可以很容易地塞入图形环境中,或者,按照我的喜好,塞入 boxhandler 包的 \bxfigure 命令中。
\documentclass{article}
\usepackage{boxhandler}
\usepackage{verbatimbox}
\begin{document}
\verbfilebox{codefrag}
\bxfigure{My caption goes here}{\fbox{\theverbbox}}
\end{document}
在这种情况下,带框的代码片段构成了整个图形(减去标题)。但是,情况不一定如此。可以调整 \bxfigure 的第二个参数,使 \theverbbox 成为表格环境的一部分,等等。