为什么使用 aspell 命令无法检查 tex 文件中的拼写错误?

为什么使用 aspell 命令无法检查 tex 文件中的拼写错误?

我的 aspell 版本。

aspell --version
@(#) International Ispell Version 3.1.20 (but really Aspell 0.60.7-20110707)

简单的 tex 文件。

cat  /tmp/test.tex
\documentclass{article}
\title{First \LaTeX Document}
\begunn{document} 
\maketitle 
Hello, \LaTeX! 
\end{document}

begunn您可以看到test.tex 文件中的 单词拼写错误。

现在用 aspell 命令检查它。

aspell --lang=en --mode=tex check  /tmp/test.tex

aspell 命令没有输出任何内容,为什么?

答案1

手册aspell位于http://aspell.net/man-html/index.html

首先,从http://aspell.net/man-html/Spellchecking-Individual-Files.html#Spellchecking-Individual-Files

如果没有指定 mode 选项,Aspell 将使用文件的扩展名来确定当前模式。如果扩展名是 .tex,则将使用 tex 模式;如果扩展名是 .html、.htm、.php 或 .sgml,则将使用 sgml 模式检查文件;否则将使用 url 模式。

http://aspell.net/man-html/Notes-on-Various-Filters-and-Filter-Modes.html#Notes-on-Various-Filters-and-Filter-Modes描述了不同的过滤模式。这些包括

--mode=none

4.4.1.1 无过滤模式

无模式正如其名称所示。它会关闭所有过滤器。

--mode=tex

4.4.1.6 TeX/LaTeX 过滤器

tex(全部小写)过滤模式会跳过 TeX 命令和某些命令的参数和/或选项。

因此,无论是否使用模式开关,运行时--mode=tex都会检查文件中不是宏名称的部分。特别是,在你的示例文件上

 aspell --lang=en check test.tex 
 aspell --lang=en --mode=tex check test.tex 

两者都不返回错误,而

 aspell --lang=en --mode=none check test.tex

捕获所有宏,包括有效的宏,例如documentclass

运行 LaTeX 本身是检查宏构造名称有效性的最快方法。在你的文件中latex test给出

LaTeX2e <2017-04-15>
Babel <3.18> and hyphenation patterns for 84 language(s) loaded.
(/usr/local/texlive/2017/texmf-dist/tex/latex/base/article.cls
Document Class: article 2014/09/29 v1.4h Standard LaTeX document class
(/usr/local/texlive/2017/texmf-dist/tex/latex/base/size10.clo))
! Undefined control sequence.
l.3 \begunn
           {document}
? 

表示\begunn未知。

确实存在类似 Latex 的 lint 程序,请参阅有没有与 LaTeX 的 lint 相当的程序?,它们会捕获一些不正确的构造,但它们不会告诉你从系统构建方式来看,宏名称是否出于根本原因而被 LaTeX 所识别。请参阅如何对未定义的控制序列进行 lint?进行讨论。

相关内容