Listings 包处理关键字不一致

Listings 包处理关键字不一致

我正在使用listings带有 pdfLaTeX 的软件包,我注意到它处理关键字不一致。如果我在帖子底部运行 MWE,我会得到以下结果:

我的输出图像

如您所见,第 2 行和第 10 行对“For”的处理不同。此外,“Dim”被视为关键字。但在\lstset“我说”中\deletekeyword{Dim}

但它并没有就此停止:如果我完全删除第 12 行,我会得到以下输出:我的输出 2 的图片

突然间,“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以下几点评论:

  1. 正确的用法deletekeywordsdeletekeywords=[number]{keywordlist},数字表示特定关键字位于语言定义的关键字集中的哪一个。我认为你最好查看listings包文档以了解更多信息

  2. 好的,但是我如何找到关键字的定义位置?好吧,有一个补充文件lstdrvrs,其中包含了 中的语言定义listings。您可以从以下位置获取其文档:卡坦,或者在终端中输入texdoc lstdrvrs。Basic 语言应该在第 12-15 页左右;在第 14 页的底部你会发现Dim(建议:尝试搜索Dim,看看它是否对应于 Basic)。你会立即看到它在 中morekeywords=[4],即列表 4

相关内容