我们希望在文档中为源代码块定义一个新的环境
\newenvironment{srcblock}%
% Define the environment
稍后我们会用到环境:
\begin{srcblock} % use the environment
% source code here
\end{srcblock}
我们寻求以下行为:
- src 代码块中的每一行都有编号
- src 代码块使用的字体是等宽字体
- 在代码块周围绘制边框,
\fbox
就像 - 每个代码块“浮动”到一个位置,以便能够容纳整个页面。
答案1
我的答案在此有所变化:看似微不足道:verbatim、newenvironment 和 colorbox。这需要对我的verbatimbox
包进行一点小的修改。
\documentclass{article}
\usepackage{xcolor,caption,lipsum}
\usepackage{verbatimbox}
\makeatletter
\newenvironment{cverbbox}[5][]{%
\setcounter{VerbboxLineNo}{0}%
\def\verbatim@processline{%
% THE FIRST #1 ACCOUNTS FOR NON-PRINTING COMMANDS; THE SECOND #1 IS FOR
% PRINTED OPTIONAL MATERIAL
{\addtocounter{VerbboxLineNo}{1}%
#1\setbox0=\hbox{#1\the\verbatim@line}%
\hsize=\wd0 \the\verbatim@line\par}}%
\@minipagetrue%
\@tempswatrue%
\global\edef\sv@name{\@macro@name{#2}}%
\global\edef\cverbboxColor{#4}%
\global\edef\cverbboxFColor{#5}%
\@ifundefined{\sv@name content}{%
\expandafter\newsavebox\expandafter{\csname\sv@name content\endcsname}%
}%
\expandafter\global\expandafter\edef\csname\sv@name\endcsname{\usebox{%
\csname\sv@name content\endcsname}}%
\setbox0=\vbox\bgroup\color{#3} \verbatim
}
{%
\endverbatim%
\unskip\setbox0=\lastbox %
\egroup%
\setbox1=\hbox{%
\colorbox{\cverbboxColor}{\box0}}%
\global\sbox{\csname\sv@name content\endcsname}%
{\fboxsep=\fboxrule\colorbox{\cverbboxFColor}{\box1}}%
}
\makeatother
\fboxrule=1pt\fboxsep=3pt\relax
\begin{document}
\lipsum[1]
\begin{figure*}[ht]
\begin{cverbbox}[\textcolor{black}{\scriptsize\theVerbboxLineNo~~}]{\mycvbox}{red!80}{blue!10}{cyan}
\verbatim <Text>
Here
%$#@&^* \macros
xa
\end{cverbbox}
\centerline{\mycvbox}
\caption*{My code chunk}
\end{figure*}
\lipsum[2]
\end{document}
答案2
这种方法不是简单环境,而是minted
嵌套在您自己的浮动环境中的标准环境。不完全是要求,但是:
☑ src 代码块中的每一行都已编号(可选地)
☑src 代码块使用的字体是等宽字体(语法突出显示)
☑在代码块周围绘制边框,类似于
\fbox
(顶部标题内使用\stdcaption
,对于框外的底部标题,请使用\caption
*)☑每个代码块“浮动”到一个位置(具体来说,到新页面的顶部) 以便所有内容都能放在一页上。
\documentclass[a6paper]{article}
\usepackage[margin=1cm, paperheight=5in,paperwidth=5in]{geometry}
\pagestyle{empty}
\usepackage{lipsum}
\let\stdcaption\caption
\setcounter{totalnumber}{1}
\usepackage{minted}
\usepackage{float}
\floatstyle{boxed}
\newfloat{fancycode}{t}{loa}
\floatname{fancycode}{LaTeX code}
\begin{document}
\begin{fancycode}
\stdcaption[Basic Structure]{The basic structure of a \LaTeX\ document.}
\begin{minted}[linenos,bgcolor=orange!05]{latex}
\documentclass{article}
\begin{document}
\end{document}
\end{minted}
\end{fancycode}
\begin{fancycode}
\stdcaption[Preamble]{The \LaTeX\ preamble to do a \texttt{fancycode}.}
\begin{minted}[linenos,bgcolor=cyan!10]{latex}
\usepackage{minted}
\usepackage{float}
\floatstyle{boxed}
\newfloat{fancycode}{t}{loa}
\floatname{fancycode}{LaTeX code}
\end{minted}
\end{fancycode}
\lipsum[1-2]
\listof{fancycode}{Code examples}
\end{document}