我如何告诉 alltt 环境换行?

我如何告诉 alltt 环境换行?

我有一个已经格式化的文本(空格方面),它也被着色等,所以我使用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

截屏

相关内容