我正在尝试使用 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}