列表包中特殊字符注释的问题

列表包中特殊字符注释的问题

我正在使用列表包在我的文档中以一种很好的方式显示 VHDL 代码,为此,我定义了自己的 VHDL 版本,因此:

\documentclass{article}
\usepackage{listings}
\usepackage[usenames,dvipsnames]{xcolor}
\lstdefinelanguage{VHDL}{
  morekeywords=[1]{
    library,use,all,entity,is,port,in,out,end,architecture,of,
    begin,and,or,Not,downto,ALL
  },
  morekeywords=[2]{
    STD_LOGIC_VECTOR,STD_LOGIC,IEEE,STD_LOGIC_1164,
    NUMERIC_STD,STD_LOGIC_ARITH,STD_LOGIC_UNSIGNED,std_logic_vector,
    std_logic
  },
  morecomment=[l]{--}
}

\colorlet{keyword}{blue!100!black!80}
\colorlet{STD}{Lavender}
\colorlet{comment}{green!80!black!90}
\lstdefinestyle{VHDL}{
  language     = VHDL,
  basicstyle   = \footnotesize \ttfamily,
  keywordstyle = [1]\color{keyword}\bfseries,
  keywordstyle = [2]\color{STD}\bfseries,
  commentstyle = \color{comment}
  breaklines=true,                % sets automatic line breaking
  tabsize=3                                % sets default tabsize to 2 spaces
}

输出格式几乎完美,但对于注释,程序用“breaklines”一词替换了空格。此代码:

\begin{document}
\begin{lstlisting}[style=vhdl]

-- attribute s : string;
signal partial_from_static : std_logic_vector(3 downto 0) := (others => '1');
signal partial_to_static : std_logic_vector(3 downto 0) := (others => '1');
signal static_from_partial : std_logic_vector(3 downto 0) := (others => '1');

-- instantiation of instBusMacro
instBusMacro : BM_V5_L4_R4_single
Port Map (
    RH0 => '1',
\end{lstlisting}
\end{document}

给出以下输出:

断线——断线断线属性断线断线断线断线断线:断线断线字符串断线;

信号 partial_from_static : std_logic_vector (3 downto 0) := ( others => '1 '); 信号 partial_to_static : std_logic_vector (3 downto 0) := ( others => '1 '); 信号 static_from_partial : std_logic_vector (3 downto 0) := ( others => '1 ');

断线——断线 断线实例化断线 断线的断线 断线实例总线宏

instBusMacro:BM_V5_L4_R4_single 端口映射(RH0 => '1',

由于评论和关键词的格式已经相应地发生了变化,因此它们都被正确识别了,但是那些“断线”让我抓狂。

我目前学到的知识:

listings 包文档说注释定义中不允许使用“其他”类型的字符(!、-、> 等),所以我很确定问题就出在这里。文档的其他部分还介绍了如何包含这些字符,但我只能找到如何将这些字符用作关键字,而这些字符对于注释毫无用处。

谢谢大家,如果我犯了一些礼仪错误,我很抱歉,这是我第一次在这里发帖。

编辑:

我忘了加逗号:

  commentstyle = \color{comment}
  breaklines=true,

如此微不足道的错误,在这里不值得一看。

答案1

\lstdefinestyle{VHDL}{
  language     = VHDL,
  basicstyle   = \footnotesize \ttfamily,
  keywordstyle = [1]\color{keyword}\bfseries,
  keywordstyle = [2]\color{STD}\bfseries,
  commentstyle = \color{comment},%%%%%%%%%%
  breaklines=true,                % sets automatic line breaking
  tabsize=3                                % sets default tabsize to 2 spaces
}

你自己的定义读

commentstyle = \color{comment}breaklines=true,

相关内容