我为一种有很多literate
替换的语言定义了一种风格。
在使用此样式的单个列表中,我想引入更多特定于列表的literate
替换。但是,它们似乎完全覆盖了样式中的替换。
例如在下面的例子中,我希望将\
和都>=
排版为它们的数学符号等价物。
是否有可能附加到, 不是代替,某种literate
风格?
\documentclass{article}
\usepackage{listings}
\begin{document}
\lstdefinestyle{lam}{%
literate={\\}{$\lambda$}1
}
\begin{lstlisting}[style=lam]
let foo = \x -> x >= 1
\end{lstlisting}
\begin{lstlisting}[style=lam, literate={>=}{$\geq$}2]
let bar = \x -> x >= 1
\end{lstlisting}
\end{document}
答案1
从listings.sty
:
\def\lst@Literatekey#1\@nil@{\let\lst@ifxliterate\lst@if \def\lst@literate{#1}} \lst@Key{literate}{}{\@ifstar{\lst@true \lst@Literatekey} {\lst@false\lst@Literatekey}#1\@nil@}
我们可以看到\lst@literate
存储了所有替换物品。但每次您说时literate=blahblahblah
,替换物品都是被取代但不是附加。所以我想尝试下面的技巧。
\documentclass{article}
\usepackage{listings}
\begin{document}
\lstdefinestyle{lam}{%
literate={\\}{$\lambda$}1}
\begin{lstlisting}[style=lam]
let foo = \x -> x >= 1
\end{lstlisting}
\begin{lstlisting}[style=lam,literate={>=}{$\geq$}2]
let bar = \x -> x >= 1
\end{lstlisting}
\makeatletter
\def\lst@Literatekey#1\@nil@{\let\lst@ifxliterate\lst@if
\expandafter\def\expandafter\lst@literate\expandafter{\lst@literate#1}}
\makeatother
\begin{lstlisting}[style=lam,literate={>=}{$\geq$}2]
let bar = \x -> x >= 1
\end{lstlisting}
\end{document}