截屏

截屏

截屏

替代文本


设想

我想要定义两组设置\lstinputlisting——一组设置用于 CSharp A,另一组设置用于 CSharp B。它们只有在颜色设置上有所不同。

\def\CSharpSettingsA%
{%
 \lstset%
 {%
  language={[Sharp]C},
  literate={ï}{}0{»}{}0{¿}{}0,
  backgroundcolor=\color{White},
   basicstyle=\scriptsize\color{Black}\ttfamily,
   keywordstyle=\color{Orange},
   identifierstyle=\color{Cyan},
   stringstyle=\color{Red}, 
   commentstyle=\color{Green}% 
 }
}

\def\CSharpSettingsB%
{%
 \lstset%
 {%
  language={[Sharp]C},
  literate={ï}{}0{»}{}0{¿}{}0,
  backgroundcolor=\color{Black},
   basicstyle=\scriptsize\color{White}\ttfamily,
   keywordstyle=\color{Orange},
   identifierstyle=\color{Cyan},
   stringstyle=\color{Red}, 
   commentstyle=\color{Green}% 
 }
}

也有一个常见的设置。

\lstset%
{%
 breaklines=true,
 tabsize=2,  
 showstringspaces=false,
 aboveskip=0pt,
 belowskip=0pt%
}

笔记:因为每个集合包含许多键值对,所以将这些键值对直接传递给的可选参数并不是一个好主意 \lstinputlisting

在序言中,我定义了两个命令如下:

\newcommand{\InputCSharpA}[1]{{\CSharpSettingsA\lstinputlisting{#1}}}
\newcommand{\InputCSharpB}[1]{{\CSharpSettingsB\lstinputlisting{#1}}}

在文档主体中,我按如下方式在它们之间切换:

\begin{document}
\InputCSharpA{CSharp/MyCode/Program.cs}

\InputCSharpB{CSharp/MyCode/Program.cs}
\end{document}

问题

如果不为每个设置定义一个新命令,是否可以将设置集传递给可选参数lstinputlisting

比如比如\lstinputlisting[key=CSharpSettingsA]{}


完成最少代码

\documentclass[dvipsnames]{article}
\usepackage[a4paper,margin=20mm]{geometry}
\usepackage{xcolor}

\usepackage{listings}
\lstset%
{%
 breaklines=true,
 tabsize=2,  
 showstringspaces=false,
 aboveskip=0pt,
 belowskip=0pt%
}

\def\CSharpSettingsA%
{%
 \lstset%
 {%
  language={[Sharp]C},
  literate={ï}{}0{»}{}0{¿}{}0,
  backgroundcolor=\color{White},
   basicstyle=\scriptsize\color{Black}\ttfamily,
   keywordstyle=\color{Orange},
   identifierstyle=\color{Cyan},
   stringstyle=\color{Red}, 
   commentstyle=\color{Green}% 
 }
}

\def\CSharpSettingsB%
{%
 \lstset%
 {%
  language={[Sharp]C},
  literate={ï}{}0{»}{}0{¿}{}0,
  backgroundcolor=\color{Black},
   basicstyle=\scriptsize\color{White}\ttfamily,
   keywordstyle=\color{Orange},
   identifierstyle=\color{Cyan},
   stringstyle=\color{Red}, 
   commentstyle=\color{Green}% 
 }
}

\newcommand{\InputCSharpA}[1]{{\CSharpSettingsA\lstinputlisting{#1}}}
\newcommand{\InputCSharpB}[1]{{\CSharpSettingsB\lstinputlisting{#1}}}

\begin{document}
\InputCSharpA{CSharp/MyCode/Program.cs}

\InputCSharpB{CSharp/MyCode/Program.cs}
\end{document}

答案1

\lstdefinestyle{styleA}{...}
\begin{lstlisting}[style=styleA]
...
\end{lststyle}

顺便说一句:如果您想让您的列表更具可读性,请使用更少的颜色......

相关内容