使拼写检查器忽略 TexMaker 中某些命令的内容

使拼写检查器忽略 TexMaker 中某些命令的内容

LaTeX 中的某些命令几乎从不包含有意义的单词。一些主要的例子是:

  • \label
  • \ref
  • \includegraphics
  • \input
  • \cite

然而在 TexMaker 中,全部单词包含在拼写检查中,这意味着每次检查都会出现大量误报。是否可以让拼写检查器忽略某些命令的内容?理想情况下,忽略的命令列表应可由用户编辑。

如果 TexMaker 无法实现此功能,是否有包含此功能的类似软件?

答案1

目前这是不可能的,正如第 187 期Texmaker 问题跟踪器。也许其他编辑器也有此功能,您可以在大列表:LaTeX 编辑器/IDE

答案2

好的,我想我找到了一种解决方法 - 没有 Google 帐户,因此无法在错误报告中发布;任何人想要的话,如果有用的话,请随意在那里转发/通知。

无论如何,我首先发现使用\label, 会使 TexMaker 忽略语法检查:

测试1.png

然后我查看了源代码texmaker-4.4.1.tar.bz2,发现latexhighlighter.cpp在关于这一节中,这部分内容被明确硬编码:

....
} else
if (tmp== '}' ){
  blockData->code[i]=1;
  setFormat( i, 1,ColorStandard);
  state=StateStandard;
  int poslab=buffer.indexOf("label{");
  if (poslab!=-1)
    {
    for (k=poslab; k <i ; k++) {if (k>0 && k<text.length()) blockData->code[k]=1;}
    }
  ...

因此,我基本上在之后插入了这个代码片段,以供引用(以差异格式显示):

--- latexhighlighter_orig.cpp   2014-01-02 11:58:33.000000000 +0100
+++ latexhighlighter.cpp    2015-06-10 20:34:55.293092059 +0200
@@ -263,6 +263,17 @@
              {
              for (k=poslab; k <i ; k++) {if (k>0 && k<text.length()) blockData->code[k]=1;}
              }
+           // NB: buffer: "label{dfs}" ; text: "Testing; teaasting ... \label{dfs}" (the whole line); i is current closing brace pos - buffer.indexOf returns 0 if match!
+           QString tmpcmd=QString("cite{");
+           poslab=buffer.indexOf(tmpcmd);
+           if (poslab!=-1)
+             {
+             int startscan = i-buffer.length()+tmpcmd.length()+1; // with this, should scan only inside the {}
+             for (k=startscan; k <i ; k++) {
+               if (k>0 && k<text.length()) blockData->code[k]=1;
+                //qDebug() << "plab " << poslab << " " << k << " " << text.length() << " " << i << " " << blockData->data[k] << buffer << " " << text.at( k ) << " " << text;
+               }
+             }
            poslab=buffer.indexOf("begin{verbatim}");
            if(poslab != -1) {state=StateVerbatim;for (k=poslab; k <i ; k++) {if (k>0 && k<text.length()) blockData->code[k]=1;}}
            poslab=buffer.indexOf("begin{verbatim*}");

重新编译后make(只要您已经完成./BUILD.sh一次构建),您将获得以下内容:

测试2.png

请注意,此补丁仅使 内部的\cite{}拼写检查器不进行检查,而行的其余部分则进行检查,正如人们所期望的那样。同时请注意,这\label{}显然会取消整行的拼写检查 - 显然这是一个错误,要修复它,还应该在检查中实现for (k=startscan; ...而不是。for (k=poslab; ...{label

最好使用像这样的文件spell/spellignore.txt,但我现在没有时间提供完整的解决方案......

最后,为了进行比较,这是我的test.tex

\documentclass{article}

\begin{document}

Testing; teoesting....

Testing; teeesting.... \cite{testciiite} .... toreasdf \cite{sdkjfhwe}  sdfgedtju

Testing; teaasting ... \label{dfs}

\end{document}

答案3

编辑于 2019 年 6 月 4 日在较新版本的 TeXMaker 中,本答案中描述的功能已被删除。拼写检查器现在可对源文件进行操作。

这并非对您的问题的准确回答,而是达到同一目标的另一条路径:

Texmaker 有一个非常漂亮的功能:您可以将文档编译为 PDF,并在内部查看器中对 PDF 文件进行拼写检查。

编辑:如何对 PDF 文件进行拼写检查?编译 PDF 后,查看 PDF 预览窗口的最右侧。那里有一个带有熟悉的 ABC 的小图标。单击它,将弹出一个新窗口,其中包含要进行拼写检查的文本。

在此处输入图片描述

相关内容