Latex 列表格式错误

Latex 列表格式错误

我有点难以获得listings包正确格式化代码片段方面遇到了一些困难。特别是,它不能始终如一地大胆的关键词和斜体评论。

我当前使用的代码是:

\usepackage{listings}
\lstset{language=C,
  morekeywords=    {*,rule,endrule,module,endmodule,Action,interface,endinterface,method,endmethod,case,endcase,matches},
  showspaces=false,               % show spaces adding particular underscores
  showstringspaces=false,         % underline spaces within strings
  showtabs=false,                 % show tabs within strings adding particular  underscores
  %frame=single,                   % adds a frame around the code
  tabsize=2,                      % sets default tabsize to 2 spaces
  breaklines=true,                % sets automatic line breaking
  breakatwhitespace=true,        % sets if automatic breaks should only happen at whitespace
}
\begin{lstlisting}[caption={code},label={lst:code}]
//  1: t1 = Py - Qy
rule op1_ctrl(oper == 4'd1 && fire_cond);
pa0.loadAddSub(0, 5, 7, 1, vecCnt);
pa1.loadAddSub(0, 5, 7, 1, vecCnt);
pa2.loadAddSub(0, 5, 7, 1, vecCnt);
pa3.loadAddSub(0, 5, 7, 1, vecCnt);
endrule

//  2: t2 = Px - Qx
rule op2_ctrl(oper == 4'd2 && fire_cond);
pa0.loadAddSub(0, 4, 6, 2, vecCnt);
pa1.loadAddSub(0, 4, 6, 2, vecCnt);
pa2.loadAddSub(0, 4, 6, 2, vecCnt);
pa3.loadAddSub(0, 4, 6, 2, vecCnt);
endrule
\end{lstlisting}

例如我的代码片段应该这样显示:

// 1: t1 = Py - Qy

规则op1_ctrl(oper == 4'd1 && fire_cond);

pa0.loadAddSub(0, 5, 7, 1, vecCnt);

pa1.loadAddSub(0, 5, 7, 1, vecCnt);

pa2.loadAddSub(0,5,7,1,vecCnt);

pa3.loadAddSub(0,5,7,1,vecCnt);

坚持统治

// 2:t2 = Px - Qx

规则op2_ctrl(oper == 4'd2 && fire_cond); pa0.loadAddSub(0, 4, 6, 2, vecCnt);

pa1.loadAddSub(0,4,6,2,vecCnt);

pa2.loadAddSub(0,4,6,2,vecCnt);

pa3.loadAddSub(0,4,6,2,vecCnt);

坚持统治

我实际得到的是:

// 1: t1 = Py - Qy

规则op1_ctrl(oper == 4'd1 && fire_cond);

pa0.loadAddSub(0, 5, 7, 1, vecCnt);

pa1.loadAddSub(0, 5, 7, 1, vecCnt);

pa2.loadAddSub(0,5,7,1,vecCnt);

pa3.loadAddSub(0,5,7,1,vecCnt);

坚持统治

// 2:t2 = Px - Qx

规则 op2_ctrl(oper == 4'd2 && fire_cond); pa0.loadAddSub(0, 4, 6, 2, vecCnt);

pa1.loadAddSub(0,4,6,2,vecCnt);

pa2.loadAddSub(0,4,6,2,vecCnt);

pa3.loadAddSub(0,4,6,2,vecCnt);

坚持统治

知道为什么会发生这种情况或我该如何解决它吗?

答案1

这里的问题是listings用作'字符串分隔符。这就是为什么代码中两个单引号之间的所有内容都是无格式排版的。解决此问题的一种方法是识别literate替换文本:

\literate=*{'}{'}{1}

这将用 替换'宽度'1实际上不执行任何操作,但会替换与 相关的语法更改',如下例所示:

在此处输入图片描述

\documentclass{article}
\usepackage{listings}% http://ctan.org/pkg/listings
\begin{document}
\lstset{language=C,
  morekeywords={*,rule,endrule,module,endmodule,Action,interface,endinterface,method,endmethod,case,endcase,matches},
  showspaces=false,               % show spaces adding particular underscores
  showstringspaces=false,         % underline spaces within strings
  showtabs=false,                 % show tabs within strings adding particular  underscores
  %frame=single,                   % adds a frame around the code
  tabsize=2,                      % sets default tabsize to 2 spaces
  breaklines=true,                % sets automatic line breaking
  breakatwhitespace=true,        % sets if automatic breaks should only happen at whitespace
  literate=*{'}{'}{1}
}
\begin{lstlisting}[caption={code},label={lst:code}]
//  1: t1 = Py - Qy
rule op1_ctrl(oper == 4'd1 && fire_cond);
pa0.loadAddSub(0, 5, 7, 1, vecCnt);
pa1.loadAddSub(0, 5, 7, 1, vecCnt);
pa2.loadAddSub(0, 5, 7, 1, vecCnt);
pa3.loadAddSub(0, 5, 7, 1, vecCnt);
endrule

//  2: t2 = Px - Qx
rule op2_ctrl(oper == 4'd2 && fire_cond);
pa0.loadAddSub(0, 4, 6, 2, vecCnt);
pa1.loadAddSub(0, 4, 6, 2, vecCnt);
pa2.loadAddSub(0, 4, 6, 2, vecCnt);
pa3.loadAddSub(0, 4, 6, 2, vecCnt);
endrule
\end{lstlisting}
\end{document}

相关内容