我需要一些帮助来使我的源代码看起来正确。代码应该如下所示:
如您所见,有些单词应为紫色和粗体,有些单词应为粗体,有些单词应为蓝色,注释应为绿色。我正在使用这个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
。
您加载
C
语言太晚了。listings
加载语言会丢弃之前使用 执行的大部分调整\lstset
。您必须加载语言第一的,然后才自定义外观。为了方便起见,我建议您定义自己的风格。您正在尝试定义诸如
"DSP28x_Project.h"
关键字之类的事物。这很尴尬,因为listings
默认情况下不允许"
在标识符中使用,并且C
语言使用"
作为字符串分隔符。如果您想要用蓝色突出显示 C 字符串文字,您应该简单地告诉listings
您首选的字符串样式是什么:stringstyle = \color{blue},
你试图定义诸如
ePWM_config()
关键词之类的东西。默认情况下,listings
不允许括号成为标识符的一部分,这是有充分理由的。在某些情况下,您可能希望覆盖该行为(请参阅这个答案(例如),但这里没有必要。此外,括号似乎没有在您的屏幕截图中以粗体显示。只需将ePWM_config
(notePWM_config()
) 定义为关键字即可。您使用的字体系列不带有粗体打字机字体。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}