按列表包显示颜色的字符串

按列表包显示颜色的字符串

我正在尝试使用 LaTeX 输入我的 C++ 作业,以便将其准备为 pdf 文件。我希望我的关键字为蓝色,我的数字为紫色,我的字符串为红棕色。我可以通过查找文档和此处的其他问题先完成这两项操作,但我不知道如何更改字符串的颜色。

\documentclass{article}
‎‎
\usepackage{etoolbox}
\usepackage{xcolor}‎
\usepackage‎{listings}‎
\newtoggle{InString}{}% Keep track of if we are within a string
\togglefalse{InString}% Assume not initally in string

\newcommand*{\ColorIfNotInString}[1]{\iftoggle{InString}{#1}{\color{violet}#1}}%
\newcommand*{\ProcessQuote}[1]{#1\iftoggle{InString}{\global\togglefalse{InString}}{\global\toggletrue{InString}}}%
\lstset{literate=%
    {"}{{{\ProcessQuote{"}}}}1% Disable coloring within double quotes
    {'}{{{\ProcessQuote{'}}}}1% Disable coloring within single quote
    {0}{{{\ColorIfNotInString{0}}}}1
    {1}{{{\ColorIfNotInString{1}}}}1
    {2}{{{\ColorIfNotInString{2}}}}1
    {3}{{{\ColorIfNotInString{3}}}}1
    {4}{{{\ColorIfNotInString{4}}}}1
    {5}{{{\ColorIfNotInString{5}}}}1
    {6}{{{\ColorIfNotInString{6}}}}1
    {7}{{{\ColorIfNotInString{7}}}}1
    {8}{{{\ColorIfNotInString{8}}}}1
    {9}{{{\ColorIfNotInString{9}}}}1
}‎
‎‎
\begin{document}‎‎‎‎
\lstset{language=C++ , keywordstyle=\color{blue}\bfseries ,commentstyle=\color{white}, stringstyle=\ttfamily, showstringspaces=false}‎
‎‎\begin{lstlisting}[basicstyle=\ttfamily]
#include<iostream>
‎‎using namespace std ;
 for (col = 1 ; col<= 5 ; col++)
      cout << "Enter your number : " ; 
      cin >> a[row][col] ; 
\end{lstlisting}
\end{document}‎

这是我得到的输出:

我得到的输出。

我想要红棕色的“输入您的号码”。那么我应该怎么做呢?

答案1

以下代码产生了我认为您想要的结果:

\documentclass{article}
\usepackage{xcolor,listings}
\begin{document}

\lstset{language=C++,
    keywordstyle=\color{blue}\bfseries,
    commentstyle=\color{green},
    stringstyle=\ttfamily\color{red!50!brown},
    showstringspaces=false}‎
\lstset{literate=%
   *{0}{{{\color{red!20!violet}0}}}1
    {1}{{{\color{red!20!violet}1}}}1
    {2}{{{\color{red!20!violet}2}}}1
    {3}{{{\color{red!20!violet}3}}}1
    {4}{{{\color{red!20!violet}4}}}1
    {5}{{{\color{red!20!violet}5}}}1
    {6}{{{\color{red!20!violet}6}}}1
    {7}{{{\color{red!20!violet}7}}}1
    {8}{{{\color{red!20!violet}8}}}1
    {9}{{{\color{red!20!violet}9}}}1
}

‎‎\begin{lstlisting}[basicstyle=\ttfamily]
#include<iostream>
using namespace std;
for (col = 1 ; col<= 5 ; col++) {
      cout << "Enter your number : "; 
      cin >> a[row][col];
}
\end{lstlisting}

\end{document}

我删除了所有不必要的内容,并修改了\lstset以包含stringstyle=\ttfamily\color{red!50!brown}。文学编程的第一个参数前的星号\lstset保护注释和字符串等环境中的数字。

在此处输入图片描述

稍微尝试一下,你就能得到水平方向更加紧凑的代码,这样可能读起来更清晰。我在这里把添加的内容放在方括号里,但它们也可以放在\lstset

\begin{lstlisting}[flexiblecolumns=true,basicstyle=\sffamily]
#include<iostream>
// Test comment.
using namespace std ;
for (col = 1 ; col<= 5 ; col++) {
      cout << "Enter your number : "; 
      cin >> a[row][col];
}
\end{lstlisting}

在此处输入图片描述

相关内容