在 minted 中禁用一个关键字

在 minted 中禁用一个关键字

我正在使用以下方式格式化文档中的 SQL 代码minted

\usepackage{minted}
\newmintedfile[sql]{sql}{breaklines=true,samepage,fontsize=\footnotesize}

% ...

\sql{query.sql}

在一些文件中,我将其用作source列名,但 minted 将其识别为关键字。不过,在我的 SQL 方言中,这没问题。

有没有一种简单的方法可以让我禁用sourceminted 中的关键字?


梅威瑟:

\documentclass[10pt]{article}

\usepackage{minted}
\newmintedfile[sql]{sql}{breaklines=true,tabsize=4,samepage,frame=none,fontsize=\footnotesize}

\begin{document}

\sql{query.sql}

\end{document}

query.sql 中的 SQL 如下:

SELECT 
    schedule,
    cost
FROM 
    Schedule
WHERE
        source = 'x'
    AND
        destination = 'y';

答案1

可以修补 Pygments 宏来执行您想要的操作。宏的形式为\PYG<style>{<token type>}{<code>}Pygments 令牌类型)。对于default样式,这是\PYGdefault。要使补丁发挥作用,您需要设置样式修补,以便样式宏存在。Pygments 将其视为source关键字,即\PYGdefault{k}{source}。补丁检测到文字文本source,并从关键字 ( k) 切换到名称 ( n)。

请注意,这仅适用于minted2.0+(您正在使用的版本,因为您有该breaklines选项)。

\documentclass{article}

\usepackage{minted}

\usemintedstyle{default}
\AtBeginEnvironment{minted}{%
  \let\originalPYGdefault\PYGdefault
  \renewcommand{\PYGdefault}[2]{%
    \ifstrequal{#1}{k}%
     {\ifstrequal{#2}{source}%
       {\originalPYGdefault{n}{#2}}%
       {\originalPYGdefault{#1}{#2}}}%
     {\originalPYGdefault{#1}{#2}}%
  }%
}

\begin{document}

\begin{minted}[breaklines=true,tabsize=4,samepage,frame=none,fontsize=\footnotesize]{sql}
SELECT 
    schedule,
    cost
FROM 
    Schedule
WHERE
        source = 'x'
    AND
        destination = 'y';
\end{minted}

\end{document}

相关内容