在列表包中,是否可以像关键字一样突出显示花括号等特殊字符?

在列表包中,是否可以像关键字一样突出显示花括号等特殊字符?

我正在写一篇包含一些内容的 Latex 文章类型化的 Lua代码片段。它们看起来像常规 Lua 代码,但有一些额外的类型注释。例如,如下所示:

function newlist(): {integer}
    local xs = {}
    for i = 1, 10 do
        xs[i] = 42
    end
    return xs
end

有没有办法让我以: {integer}粗体排版该类型注释,或者至少只是{integer}以粗体排版?如果有办法做到这一点而无需{}在第二行中突出显示表构造函数,则可以获得加分。

到目前为止,我所能做的最好的就是将其定义为一个附加关键字,但我认为当其排版方式与围绕它的花括号不同时,integer最终结果看起来很奇怪。integer

\documentclass{article}

\usepackage{listings}
\lstdefinelanguage{TypedLua}[5.3]{Lua}{
    morekeywords={integer,float}
}

\begin{document}

\lstset{language=TypedLua}
\begin{lstlisting}
function newlist(): {integer}
    local xs = {}
    for i = 1, 10 do
        xs[i] = 42
    end
    return xs
end
\end{lstlisting}

\end{document}

答案1

有多种方法可以实现此目的,具体取决于您的需要。

  1. 简单的解决方案:

    morekeywords={\{integer\}}

    尽管您需要强制listings将花括号视为“字母”才能使其起作用:

    alsoletter={\{,\}}

  2. 也许更好:

    moredelim=[s][\bfseries]{:\ \{}{\}}

例子:

\documentclass{article}

\usepackage{listings}
\lstdefinelanguage{TypedLua1}[5.3]{Lua}{
    morekeywords={\{integer\},float},
    alsoletter={\{,\}}
}
\lstdefinelanguage{TypedLua2}[5.3]{Lua}{
    moredelim=[s][\bfseries]{:\ \{}{\}}
}

\begin{document}

\begin{lstlisting}[language=TypedLua1]
function newlist(): {integer}
    local xs = {}
    for i = 1, 10 do
        xs[i] = 42
    end
    return xs
end
\end{lstlisting}

\begin{lstlisting}[language=TypedLua2]
function newlist(): {integer}
    local xs = {}
    for i = 1, 10 do
        xs[i] = 42
    end
    return xs
end
\end{lstlisting}

\end{document}

输出:

两份清单

相关内容