目前,我为列表语言定义了两个全局选项:color
和monochrome
(我已将该语言捆绑为一个包,因此这些是包选项)。但是,现在我发现我想使用monochrome
内联列表选项和color
多行列表选项。
我浏览了列表包文档,似乎可以使用方言来实现此功能,但是,我不确定这是否是解决问题最语义正确的方法。
以下是我的 mwe 文件,以了解其当前的工作方式:
\documentclass[12pt]{article}
\usepackage[UKenglish]{babel}
\usepackage{verbatim}
\usepackage{pstricks,pst-node}
\usepackage{fancyvrb}
\usepackage[fancyvrb]{listings}
\usepackage[T1]{fontenc} %for " quote
\usepackage{color}
\usepackage[color]{mweisabelle}
\begin{document}
\begin{lstlisting}[language=Isar, mathescape = true]{}
assume "a \<rightarrow> b"
\end{lstlisting}
This statement should be black \Icode!assume!.
\end{document}
和包
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{isabella}[for easy Isabelle syntax]
\RequirePackage{color}
\RequirePackage{verbatim}
\RequirePackage{pstricks,pst-node}
\RequirePackage{fancyvrb}
\RequirePackage[fancyvrb]{listings}
\RequirePackage{textcomp} %for ' quote
\RequirePackage[T1]{fontenc} %for " quote
\RequirePackage{stmaryrd} % for rbrakk
\RequirePackage{upquote}
%% black and white option
\DeclareOption{monochrome}{
\definecolor{NULL}{rgb}{0.0,0.0,0.0}
\definecolor{KEYWORD}{rgb}{0.0,0.0,0.0}
}
%% colour option
\DeclareOption{color}{
\definecolor{NULL}{rgb}{0.0,0.0,0.0}
\definecolor{KEYWORD}{rgb}{0.0,0.0,1}
}
\ExecuteOptions{monochrome, document}
\ProcessOptions\relax
\lstdefinelanguage{Isar}%
{ keywords=[1]{
assume,obtain,show,fix
},
keywordstyle=[1]\color{KEYWORD}\bfseries,
stringstyle=\color{black},
moredelim = [s][stringstyle]{"}{"},
literate=
{\\<not>}{{$\neg$}}1 {\\<times>}{{$×$}}1
{\\<rightarrow>}{{$\rightarrow\ $}}1%
}[keywords,comments,strings]%
% useful defaults
\lstset{
basicstyle=\sffamily
}
\newcommand{\Icode}{\lstinline[{language=Isar}]}
答案1
我意识到可以在内联列表命令声明中编辑关键字样式,例如
\newcommand{\Icode}{\lstinline[{language=Isar,keywordstyle=[1]\color{black}]}
如果设置为黑色,则会覆盖之前的颜色。因此,内联列表(或我想要的任何单个列表)可以具有不同的文本颜色或样式。由于这不使用该monochrome
选项,因此这可能不是最通用的解决方案,但它适合我最初的目的。