定义使用 \mint 的新命令时使用双 #s,而不是直接使用 \mint

定义使用 \mint 的新命令时使用双 #s,而不是直接使用 \mint

为什么\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="&#xd7;" 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="&#xd7;" 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}

在此处输入图片描述

相关内容