使用 minted 在代码列表中突出显示 #pragma

使用 minted 在代码列表中突出显示 #pragma

我很快就要就 OpenMP 发表演讲,目前正在准备幻灯片beamer。由于 OpenMP 的很多神奇之处都发生在#pragma指令内部,因此我想用一些明亮的颜色突出显示这些指令(但仍然突出显示其余代码)。我正在使用该minted包来列出代码。目前,下面的代码将导致#include语句和#pragma行以相同的黄色突出显示。假设我希望将代码#pragma omp parallel突出显示为鲜红色,同时保持其他所有内容不变。

\documentclass{beamer}
\usepackage{minted}
\newminted{c}{fontsize=\footnotesize,bgcolor=lightgray}
\begin{document}
\begin{frame}[fragile]
\begin{ccode}
#include <stdio.h>
#include <omp.h>
int main (int argc, char *argv[]) {
#pragma omp parallel
    {
        int tid = omp_get_thread_num();
        printf("Hello from thread %d\n", tid);
    }
    return 0;
}
\end{ccode}
\end{frame}
\end{document}

使用 进行编译xelatex -shell-escape test.tex。结果:

在此处输入图片描述

答案1

更新 2017-01-11:此功能不再适用于 的最新版本minted更新、类似的解决方案目前确实有效。

可以通过修改底层 Pygments 样式宏来实现这一点。这将适用于 的最新版本minted,但由于它正在修改内部结构,因此将来可能并不总是有效。如果您想使用不同的突出显示样式,则需要将 替换default\PYGdefault不同的样式名称。此外,如果您想使用不同的样式,则需要\usemintedstyle在序言中使用 。

在此处输入图片描述

\documentclass{article}
\usepackage{minted}
\newminted{c}{fontsize=\footnotesize,bgcolor=lightgray}

\AtBeginDocument{%
  \let\originalpyg\PYGdefault
  \renewcommand{\PYGdefault}[2]{%
    \ifstrequal{#1}{c+cp}%
     {\IfBeginWith{#2}{\PYGZsh{}pragma}%
       {\originalpyg{#1}{\color{red}{#2}}}%
       {\originalpyg{#1}{#2}}}%
     {\originalpyg{#1}{#2}}%
  }%
}

\begin{document}

\begin{ccode}
#include <stdio.h>
#include <omp.h>
int main (int argc, char *argv[]) {
#pragma omp parallel
    {
        int tid = omp_get_thread_num();
        printf("Hello from thread %d\n", tid);
    }
    return 0;
}
\end{ccode}
\end{document}

相关内容