我正在使用listings
带有 pdfLaTeX 的软件包,我注意到它处理关键字不一致。如果我在帖子底部运行 MWE,我会得到以下结果:
如您所见,第 2 行和第 10 行对“For”的处理不同。此外,“Dim”被视为关键字。但在\lstset
“我说”中\deletekeyword{Dim}
。
但它并没有就此停止:如果我完全删除第 12 行,我会得到以下输出:
突然间,“STR”被视为关键字(第 14 行);“Next”和“Do”不再是关键字(第 15 行和第 19 行)。
这是怎么回事?我该如何解决?
%% MWE
\documentclass[12pt]{article}
\usepackage{listings,tikz}
\usetikzlibrary{babel}
\def\arr{
\begin{tikzpicture}[very thick,x=1em,y=1em,baseline={(0,-0.35em)}]
\draw [->](-0.4,0) -- (0.4,0);
\end{tikzpicture}
}
\def\arrend{
\begin{tikzpicture}[very thick,x=1em,y=1em,baseline={(0,-0.3em)}]
\draw[<-] (-0.25,0) -- (0.25,0) -- (0.25,0.3);
\end{tikzpicture}
}
\def\sp{\bfseries\textvisiblespace}
\lstset{
language=[Visual]Basic,
keywordstyle=\bfseries\underbar,
keepspaces=true,
frame=tBlR,
rulesepcolor=\color[RGB]{204,0,0},
numbers=left,
tabsize=2,
breaklines=true,
breakatwhitespace=true,
showstringspaces=false,
morekeywords={To,LpWhile,IfEnd,Step},
deletekeywords={Dim},
literate={->}{\arr}1 {;}{\arrend}1{=/}{$\neq$}1
}
\begin{document}
\begin{lstlisting}[firstline=1,caption={\texttt{SCORE} (Set Parameters)\label{score}},escapechar=!]
{6,16} -> Dim Mat Z;
For 1 -> I To 6;
-1!\textsc{e}!7 -> Mat Z[I,16];
Next;
ClrText;
"Boolean(show)"? -> D";
"Amount"? -> F;
4 -> X;
4 -> Y;
For 1 -> Mat Z[I,16];
ClrText;
Locate 1,2,"GIVE NAMES!\sp\sp!?:;
Locate 13,2,S;
Locate 3,4,"(!\sp\sp\sp\sp\sp\sp!)";
Prog "STR IN";
Next;
0 -> H;
7 -> X;
3 -> Y;
Do;
\end{lstlisting}
\end{document}
答案1
您的引号在第 6 行不平衡,这扰乱了解析器。我删除了"
后面多余的引号D
。以下情况也是如此"GIVE NAMES"
编辑问题Dim
在于您必须从 Basic 列表 4 中删除关键字。
%% MWE
\documentclass[12pt]{article}
\usepackage{listings,tikz}
\usetikzlibrary{babel}
\def\arr{
\begin{tikzpicture}[very thick,x=1em,y=1em,baseline={(0,-0.35em)}]
\draw [->](-0.4,0) -- (0.4,0);
\end{tikzpicture}
}
\def\arrend{
\begin{tikzpicture}[very thick,x=1em,y=1em,baseline={(0,-0.3em)}]
\draw[<-] (-0.25,0) -- (0.25,0) -- (0.25,0.3);
\end{tikzpicture}
}
\def\sp{\bfseries\textvisiblespace}
\lstset{
language=[Visual]Basic,
keywordstyle=\bfseries\underbar,
keepspaces=true,
frame=tBlR,
rulesepcolor=\color[RGB]{204,0,0},
numbers=left,
tabsize=2,
breaklines=true,
breakatwhitespace=true,
showstringspaces=false,
morekeywords={To,LpWhile,IfEnd,Step},
deletekeywords=[4]{Dim},
literate={->}{\arr}1 {;}{\arrend}1{=/}{$\neq$}1
}
\begin{document}
\begin{lstlisting}[firstline=1,caption={\texttt{SCORE} (Set Parameters)\label{score}},escapechar=!]
{6,16} -> Dim Mat Z;
For 1 -> I To 6;
-1!\textsc{e}!7 -> Mat Z[I,16];
Next;
ClrText;
"Boolean(show)"? -> D;
"Amount"? -> F;
4 -> X;
4 -> Y;
For 1 -> Mat Z[I,16];
ClrText;
Locate 1,2,"GIVE NAMES"!\sp\sp!?:;
Locate 13,2,S;
Locate 3,4,"(!\sp\sp\sp\sp\sp\sp!)";
Prog "STR IN";
Next;
0 -> H;
7 -> X;
3 -> Y;
Do;
\end{lstlisting}
\end{document}
从编程的角度来看,我也不确定第 10 行,因为 for 语法与第一个 for 不同(即for 1->I to 6
第一个,但I to
第二个中缺少)
编辑2
关于list 4
以下几点评论:
正确的用法
deletekeywords
是deletekeywords=[number]{keywordlist}
,数字表示特定关键字位于语言定义的关键字集中的哪一个。我认为你最好查看listings
包文档以了解更多信息好的,但是我如何找到关键字的定义位置?好吧,有一个补充文件
lstdrvrs
,其中包含了 中的语言定义listings
。您可以从以下位置获取其文档:卡坦,或者在终端中输入texdoc lstdrvrs
。Basic 语言应该在第 12-15 页左右;在第 14 页的底部你会发现Dim
(建议:尝试搜索Dim
,看看它是否对应于 Basic)。你会立即看到它在 中morekeywords=[4]
,即列表 4