我有以下生成的代码:
\documentclass[twoside]{book}
\RequirePackage{alltt}
\RequirePackage{xcolor}
\definecolor{comment}{rgb}{0.5,0.0,0.0}
\definecolor{keywordtype}{rgb}{0.38,0.25,0.125}
\begin{document}
gravida leo dignissim condimentum. Aliquam porta est ac placerat laoreet. Nam faucibus tincidunt augue eget
\par
\scriptsize
\begin{alltt}
00019 \textcolor{keywordtype}{int} i; \textcolor{comment}{/// Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam commodo mattis orci, id
gravida leo dignissim condimentum. Aliquam porta est ac placerat laoreet. Nam faucibus tincidunt augue eget
faucibus arcu. Aliquam vel enim venenatis nisl malesuada condimentum. Cras vel sollicitudin enim. Nulla sagittis
cursus urna, eget euismod massa vehicula eget. }
\end{alltt}
\normalsize
gravida leo dignissim condimentum. Aliquam porta est ac placerat laoreet. Nam faucibus tincidunt augue eget
\end{document}
生成的代码会进行换行和缩进(基于一行中固定的字符数)。我希望换行和缩进能够自动进行。这样“代码”就可以写成这样:
00019 \textcolor{keywordtype}{int} i; \textcolor{comment}{/// Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam commodo mattis orci, id gravida leo dignissim condimentum. Aliquam porta
est ac placerat laoreet. Nam faucibus tincidunt augue eget faucibus arcu. Aliquam vel enim venenatis nisl malesuada condimentum. Cras vel sollicitudin enim. Nulla sagittis cursus urna, eget euismod ma
ssa vehicula eget. }
由于它是代码清单,因此也存在一些限制:
- 固定宽度字体
- 保留间距,尤其是多个空格
- 可以为文本着色(编辑:由用户)
- 行号 (00019) 可以有超链接和超目标以及变量。
- 编辑:列表中的后续行不一定有后续数字(生成程序可以省略某些类型的注释行)。
我一直在观察hanging
但却verbatim
无法得到结果。
请给我一些建议,我该如何解决这个问题。
答案1
这是软件包的解决方案listings
。一些注意事项:
- 如果您希望将哪些内容用哪种颜色显示,那么可以使用突出显示机制,方法
listings
是将内容声明为关键字、注释等。这个平台上有很多关于如何自定义此机制的问题和答案。不过,在这里,我将展示一种手动执行此操作的方法。 - 我定义
/*!
和!*/
作为转义模式。在这些模式中,您可以使用常规 LaTeX 命令(例如更改文本颜色)。 - 在转义模式中,您可以定义
\label
引用当前行号的 s。 - 使用选项
firstnumber
,您可以定义第一行号的值。在转义模式中,您可以添加命令来编辑计数器的值lstnumber
(例如\stepcounter
或\setcounter
)。 - 在转义模式中,多个空格不会被保留。因此,请尽量减少转义模式的数量(最简单的方法是定义尽可能多的内容,例如
keyword
等)。
\documentclass[twoside]{book}
\usepackage{fmtcount}
\usepackage{xcolor}
\usepackage{listings}
\lstset{%
numbers=left,
numberstyle=\tiny,
basicstyle=\scriptsize\ttfamily,
breaklines=true,
escapeinside={/*!}{!*/},
escapebegin={\ttfamily},
}
\renewcommand{\thelstnumber}{\padzeroes[5]{\decimal{lstnumber}}}
\begin{document}
\begin{lstlisting}[firstnumber=19]
int i; /*!\color{red}/// Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam commodo mattis orci, id gravida leo dignissim condimentum.\label{lst:inti}\stepcounter{lstnumber}!*/
/*!\color{blue}float!*/ /*!\color{green}j!*/; /// /*!\color{pink}Aliquam porta est ac placerat laoreet. Nam faucibus tincidunt augue eget faucibus arcu. Aliquam vel enim venenatis nisl malesuada condimentum. Cras vel sollicitudin enim. Nulla sagittis cursus urna, eget euismod massa vehicula eget.!*/
\end{lstlisting}
In line~\ref{lst:inti}, you see the definition of an integer.
\end{document}