正确的 Elixir 语法高亮

正确的 Elixir 语法高亮

我目前正在写一篇论文,经常需要添加 Elixir 代码片段。我对 LaTeX 不是很熟悉,但经过一番搜索,我发现此解决方案

问题是这个解决方案并不完美。关键字后面必须至少有一个空格,这是不理想的,因为在实际代码中,关键字后面通常紧跟着逗号或不同类型的括号。如果没有空格,这些逗号或括号也会被突出显示为关键字。此外,当一行以关键字结尾时,空格似乎不起作用,关键字的颜色突出显示会在下一行继续。

以下是其样例:

在此处输入图片描述

以下是相关的 LaTeX 代码:

\definecolor{commentgreen}{RGB}{2,112,10}
\definecolor{eminence}{RGB}{108,48,130}
\definecolor{weborange}{RGB}{255,165,0}
\definecolor{frenchplum}{RGB}{129,20,83}

\lstdefinelanguage{elixir}{
    morekeywords={case,catch,def,do,else,false,%
        use,alias,receive,timeout,defmacro,defp,%
        for,if,import,defmodule,defprotocol,%
        nil,defmacrop,defoverridable,defimpl,%
        super,fn,raise,true,try,end,with,%
        unless},
    otherkeywords={<-,->,|>},
    sensitive=true,
    morecomment=[l]{\#},
    morecomment=[n]{/*}{*/},
    morecomment=[s][\color{purple}]{:}{\ },
    morestring=[s][\color{orange}]"",
    commentstyle=\color{commentgreen},
    keywordstyle=\color{eminence},
    stringstyle=\color{red},
    basicstyle=\ttfamily,
    breaklines,
    showstringspaces=false,
    frame=tb,
}

\begin{lstlisting}[language=elixir] 
pid = spawn(SimpleScoreboard, :loop , [0])
>> {:ok, <PID>}
 
send(pid, {:add, 50})
>> :ok    
 
send(pid, {:sub, 8})
>> :ok  
 
send(pid, :showscore)     
>> :ok
>> 42
\end{lstlisting}

如何解决这个问题?如果有更好的解决方案,我也愿意尝试其他替代方案,将 Elixir 代码片段添加到我的 LaTeX 文档中。

答案1

使用铸造而不是列表:

\begin{minted}{elixir}
pid = spawn(SimpleScoreboard, :loop , [0])
>> {:ok, <PID>}
 
send(pid, {:add, 50})
>> :ok    
 
send(pid, {:sub, 8})
>> :ok  
 
send(pid, :showscore)     
>> :ok
>> 42
\end{minted}

在此处输入图片描述

相关内容