列表样式定义中的多个识字者

列表样式定义中的多个识字者

我为一种有很多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}

相关内容