我有点难以获得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}