我有一个已经格式化的文本(空格方面),它也被着色等,所以我使用alltt
环境来打印它。文本实际上是代码,但我没有使用列表,因为我不想它给我的代码着色(我根据哪一行很重要来进行着色,所以它是不同的)。
现在的问题是,我找不到alltt
让文本换行的方法。如果文本换行,最终会看起来很丑,但如果文本超出页面的右边框,那就更丑了!
那么,有没有办法用 来换行alltt
?如果没有,是否可以\textit{...}
使用 listings 包获取具有样式(例如等)的文本?
编辑:以下是一个例子:
序言(一些样式):
\newcommand{\somewhatImportantCode}[1]{\textcolor[rgb]{0.0,0.35,0.6}{#1}}
\newcommand{\veryImportantCode}[1]{\textcolor[rgb]{0.0,0.5,0.9}{#1}}
代码:
\begin{alltt}
\somewhatImportantCode{\#include <iostream>}
int main()
\{
\veryImportantCode{std::cout <<} "Hello World!" \veryImportantCode{<< std::endl};
return 0;
\}
\end{alltt}
它看起来是这样的:
请注意,该目标是将用户引导至更重要的代码部分,这就是其样式不同的原因。如您所见,和\somewhatImportantCode
可以\veryImportantCode
覆盖代码的任何短部分或长部分。
答案1
您listings
只需添加breaklines=true
以启用换行,还可以通过定义包含要执行的命令,escapechar
从而允许您放置自定义格式的命令。
如果您不想对关键字应用斜体格式,只需删除设置keywordstyle={}
。
\documentclass[border=2pt]{standalone}
\usepackage{xcolor}
\usepackage{listings}
\newcommand{\somewhatImportantCode}[1]{\textcolor[rgb]{0.0,0.35,0.6}{#1}}
\newcommand{\veryImportantCode}[1]{\textcolor[rgb]{0.0,0.5,0.9}{#1}}
\lstset{
language=C,
basicstyle=\ttfamily,
showstringspaces=false,
breaklines=true,
keywordstyle={\textit},
%morekeywords={text},% list your attributes here,
escapechar=\&% char to escape out of listings and back to LaTeX
}
\begin{document}
\begin{lstlisting}
&\somewhatImportantCode{\#include <iostream>}&
int main()
{
&\veryImportantCode{std::cout <<}& "Hello World!" &\veryImportantCode{<< std::endl}&;
return 0;
}
\end{lstlisting}
\end{document}
答案2
尽管 OP 已经接受了 Peter 的答案,我还是想建议进行以下改进:它使用listings
moredelim=**
功能来定义打开和关闭特定格式的活动字符。因此,无需转为 LaTeX 并用宏污染源代码:
\documentclass[border=2pt]{standalone}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{xcolor}
\usepackage{listings}
\newcommand{\somewhatImportantCode}{\color[rgb]{0.0,0.35,0.6}}
\newcommand{\veryImportantCode}{\color[rgb]{0.0,0.5,0.9}}
\lstset{
language=C,
basicstyle=\ttfamily,
showstringspaces=false,
breaklines=true,
keywordstyle={\textit},
moredelim=**[is][\somewhatImportantCode]{@}{@},
moredelim=**[is][\veryImportantCode]{@@}{@@},
moredelim=**[is][\color{red}]{@@@}{@@@},
}
\begin{document}
\begin{lstlisting}
@#include <iostream>
@
int main()
{
@@std::cout <<@@ "Hello World!" @@<< std::endl@@;
return @@@0@@@;
}
\end{lstlisting}
\end{document}
我在这里使用了序列@
来表示不同的强调级别,但你可以为每一个级别使用任何字符(序列);如果你愿意,甚至可以为“强调打开”和“强调关闭”使用不同的字符(参见listings
手动的)。
另外一个优点是(取决于使用的选项moredelim=**
)可以应用格式在上面彼此之间以及 已经提供的语法格式的兼容性listings
。在示例中,可以看到指令的兼容性,除了关键字的格式 #include
外,它还获得了“ImportantCode”颜色:\textit