我目前正在写一篇论文,经常需要添加 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}