![定义使用 \mint 的新命令时使用双 #s,而不是直接使用 \mint](https://linux22.com/image/258763/%E5%AE%9A%E4%B9%89%E4%BD%BF%E7%94%A8%20%5Cmint%20%E7%9A%84%E6%96%B0%E5%91%BD%E4%BB%A4%E6%97%B6%E4%BD%BF%E7%94%A8%E5%8F%8C%20%23s%EF%BC%8C%E8%80%8C%E4%B8%8D%E6%98%AF%E7%9B%B4%E6%8E%A5%E4%BD%BF%E7%94%A8%20%5Cmint.png)
为什么\dollarcom
给出的结果与不同\mint{bash}|$#|
?
\documentclass{article}
\usepackage{minted}
\newcommand{\dollarcom}{\mint{bash}/$#/}
\begin{document}
\dollarcom
\mint{bash}|$#|
\end{document}
输出:
从输出来看,pdflatex
似乎$#
被视为非法参数编号。在这种情况下,我如何定义具有相同输出的命令\mint{bash}|$#|
?
注:我绝对会不是想要\mint{bash}|$#|
在我的文字中使用,因为非转义$
会破坏 Kile 中的代码突出显示,并且之后我的一半 LaTeX 源代码看起来是绿色的,就像在数学模式下一样。
更新:
我找到了一种让 Kile 将命令识别为\verb
命令的技巧。如果您想更改系统的语法高亮显示,请打开/usr/share/kde4/apps/katepart/syntax/latex.xml
,如果您想仅为您的用户添加语法高亮显示,请打开~/.kde/share/apps/katepart/syntax/latex.xml
。如果后者不存在,请创建缺少的目录并将系统范围的文件复制到其中。
现在修改所选文件。特别是其中一部分如下所示:
<!-- LaTeX command in text mode -->
<context name="ContrSeq" attribute="Keyword" lineEndContext="#pop">
<StringDetect String="verb*" attribute="Keyword" context="Verb"/>
<RegExpr String="(Verb|verb|lstinline)(?=[^a-zA-Z])" attribute="Keyword" context="Verb"/>
<DetectChar char="×" attribute="Bullet" context="#stay"/>
<RegExpr String="[a-zA-Z@]+(\+?|\*{0,3})" attribute="Keyword" context="#pop"/>
<RegExpr String="[^a-zA-Z]" attribute="Keyword" context="#pop" />
</context>
<context name="ToEndOfLine" attribute="Normal Text" lineEndContext="#pop">
</context>
将该行修改<RegExpr String="(Verb...
为:
<RegExpr String="(Verb|verb|lstinline|mint|mint\{[a-zA-Z0-9=, ]+\})(?=[^a-zA-Z])" attribute="Keyword" context="Verb"/>
这将允许 kile 以正确的方式突出\mint|text|
显示。\mint{some,options}|text|
为了让 Kile 突出显示minted
环境,还要检查如下部分:
<!-- filter the environment name and check the type -->
<context name="BeginEnvironment" attribute="Environment" lineEndContext="#stay">
<RegExpr String="(lstlisting|(B|L)?Verbatim)" attribute="Environment" context="VerbatimEnvParam"/>
<RegExpr String="(verbatim|boxedverbatim)" attribute="Environment" context="VerbatimEnv"/>
并将最后一行更改为:
<RegExpr String="(verbatim|boxedverbatim|minted)" attribute="Environment" context="VerbatimEnv"/>
查找以下部分:
<!-- parse verbatim text -->
<context name="Verbatim" attribute="Verbatim" lineEndContext="#stay">
<DetectChar char="×" attribute="Bullet" context="#stay"/>
<RegExpr String="\\end(?=\s*\{(verbatim|lstlisting|boxedverbatim|(B|L)?Verbatim)\*?\})" attribute="Structure" context="VerbFindEnd"/>
</context>
并将该RegExpr
行更改为:
<RegExpr String="\\end(?=\s*\{(verbatim|lstlisting|boxedverbatim|minted|(B|L)?Verbatim)\*?\})" attribute="Structure" context="VerbFindEnd"/>
查找以下部分:
<!-- end of verbatim environment -->
<context name="VerbFindEnd" attribute="Normal Text" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
<RegExpr String="\s*\{" attribute="Normal Text" context="#stay"/>
<RegExpr String="(verbatim|lstlisting|boxedverbatim|(B|L)?Verbatim)\*?" attribute="Environment" context="#stay"/>
<DetectChar char="}" attribute="Normal Text" context="#pop#pop#pop#pop#pop" endRegion="block"/>
</context>
并将第二RegExpr
行更改为:
<RegExpr String="(verbatim|lstlisting|boxedverbatim|minted|(B|L)?Verbatim)\*?" attribute="Environment" context="#stay"/>
此后,Kile 应该可以正确突出显示minted
环境。
我认为应该有一种方法可以添加至少用户特定的语法(如果不是针对每个文件的话),但我找不到任何syntax
目录~/.kde/*
。
不幸的是,这并没有突出显示“快捷方式”,所以您要么必须手动添加所有快捷方式,要么每次都必须使用带有所有选项的“minted”。
答案1
您必须\dollarcom
使用“stringified #
”进行定义:
\documentclass{article}
\usepackage{minted}
\edef\dollarcom{\noexpand\mint{bash}/$\string#/}
\begin{document}
\dollarcom
\mint{bash}|$#|
\end{document}