截屏
设想
我想要定义两组设置\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}
顺便说一句:如果您想让您的列表更具可读性,请使用更少的颜色......