为什么我的列表自定义设置没有被考虑?

为什么我的列表自定义设置没有被考虑?

我需要一些帮助来使我的源代码看起来正确。代码应该如下所示:

在此处输入图片描述

如您所见,有些单词应为紫色和粗体,有些单词应为粗体,有些单词应为蓝色,注释应为绿色。我正在使用这个listings包来实现这一点。请参阅下面的最小工作示例。

但是,出于某种原因,使用keywordstyle=[2]{...}and声明新关键字keywordstyle=[3]{...}似乎没有效果。新关键字像普通文本一样打印。我做错了什么?

\documentclass[12pt,a4paper]{report}

\usepackage{listings}
\usepackage{color}

\definecolor{mygreen}{rgb}{0,0.5,0}
\definecolor{mygray}{rgb}{0.5,0.5,0.5}
\definecolor{byzantium}{rgb}{0.44, 0.16, 0.39}

\lstset{
basicstyle=\footnotesize\ttfamily,
numbers=left,
numberstyle=\color{mygray},
commentstyle=\color{mygreen},
keywordstyle=\bfseries\color{byzantium},
keywordstyle=[2]\bfseries,
keywordstyle=[3]\color{blue},
morekeywords = {},
keywords=[2]{ePWM_config()},
keywords=[3]{"DSP28x_Project.h",PCLKCR0,bit,TBCLKSYNC},
title=ePWM.c
}

\begin{document}

\begin{lstlisting}
static void ePWM_config()
{
    // Setup Time Base Clock ePWM1
    EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;
\end{lstlisting}

\end{document}

答案1

您的设置至少存在四个问题listings

  1. 您加载C语言太晚了。listings加载语言会丢弃之前使用 执行的大部分调整\lstset。您必须加载语言第一的,然后才自定义外观。为了方便起见,我建议您定义自己的风格。

  2. 您正在尝试定义诸如"DSP28x_Project.h"关键字之类的事物。这很尴尬,因为listings默认情况下不允许"在标识符中使用,并且C语言使用"作为字符串分隔符。如果您想要用蓝色突出显示 C 字符串文字,您应该简单地告诉listings您首选的字符串样式是什么:

    stringstyle = \color{blue},
    
  3. 你试图定义诸如ePWM_config()关键词之类的东西。默认情况下,listings不允许括号成为标识符的一部分,这是有充分理由的。在某些情况下,您可能希望覆盖该行为(请参阅这个答案(例如),但这里没有必要。此外,括号似乎没有在您的屏幕截图中以粗体显示。只需将ePWM_config(not ePWM_config()) 定义为关键字即可。

  4. 您使用的字体系列不带有粗体打字机字体。TeX 字体系列(例如 Computer Modern(LaTeX 中默认使用))不提供粗体打字机字体。当listings尝试以粗体打字机排版内容时,TeX 会抱怨没有这样的字体可用,而是使用“普通”(即中等系列)打字机字体。要解决该问题,您必须使用带有粗体打字机字体的字体系列。一个流行的选择是 Bera Mono。在序言中插入以下几行会告诉 LaTeX 在整个 LaTeX 文档中使用 Bera Mono 作为打字机字体。

    \usepackage[T1]{fontenc}
    \usepackage[scaled=0.85]{beramono}
    

编辑:如果您希望打字机字体仅在您的列表中为 Bera Mono,而不是在文档的其余部分,请使用以下命令:

basicstyle = \footnotesize\def\fvm@Scale{.85}\fontfamily{fvm}\selectfont

在此处输入图片描述

完整代码

\documentclass[12pt,a4paper]{report}

\usepackage{listings}
\usepackage{xcolor}
\usepackage[T1]{fontenc}

\definecolor{mygreen}{rgb}{0,0.5,0}
\definecolor{mygray}{rgb}{0.5,0.5,0.5}
\definecolor{byzantium}{rgb}{0.44, 0.16, 0.39}

\makeatletter
\lstdefinestyle{myCstyle}{
    language       = C,
    basicstyle     = \footnotesize\def\fvm@Scale{.85}\fontfamily{fvm}\selectfont,
    numbers        = left,
    numberstyle    = \color{mygray},
    commentstyle   = \color{mygreen},
    keywordstyle   = \bfseries\color{byzantium},
    keywordstyle   =[2]\bfseries,
    keywordstyle   =[3]\color{blue},
    stringstyle    = \color{blue},
    morekeywords   = {},
    directivestyle = \color{violet}\bfseries,
    morekeywords   =[2]{ePWM_config,ePWM},
    morekeywords   =[3]{PCLKCR0,bit,TBCLKSYNC},
    title          = ePWM.c,
}
\makeatother

\begin{document}
{
\ttfamily
This should be typeset in Computer Modern typewriter font,
contrary to C listings, which should be typeset in scaled-down Bera Mono font.
}

\begin{lstlisting}[style=myCstyle]
#include  "DSP28x_Project.h"

static void ePWM_config();

#define deadband 76;

void ePWM()
{
    // Stop the Time Base Clock
    EALLOW;
    SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0;
    EDIS;

    // configure the ePWM
    ePWM_config();

    // Enable the Time Base Clock
    EALLOW;
    SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;
    EDIS;
}
\end{lstlisting}

\end{document}

相关内容