删除拼写和语法检查中的所有数学运算

删除拼写和语法检查中的所有数学运算

我正在将 LaTeX 文件编译为 pdf,然后使用 pdf 到文本转换器将文件转换为纯文本。然后我使用语言工具对该纯文本文件进行语法检查。LaTeX 源有一些自定义功能可以提高纯文本文件的质量(例如,我删除了页眉、页码、多列环境,并且使用了较大的纸张尺寸)。

不幸的是,LanguageTool 在文件的数学部分发现了很多语法错误,这显然没什么用。所以我在想:是否可以从 pdf 输出中删除所有数学?显然,我可以从 LaTeX 源中删除所有数学,但这不是可接受的方法。数学不应该在 pdf 中呈现。

答案1

这确实应该是一个评论,但它有点太复杂了。

如果你的数学运算全部在行内或使用符号显示\[ ... \],则抑制它很容易:

\documentclass{article}
\def\[#1\]{}
\def\(#1\){}
\catcode`\$=13
\def$#1${}
\begin{document}
some text $xyz$ with embedded \(abc\) math.
some display math as well:
\[ def \]
more text
\end{document}

当你使用\begin{xxx} ... \end{xxx}环境时事情会变得更加棘手,甚至没有考虑星号环境。我还没有解决这个问题。

许多环境吸收了和 标记amsmath之间的全部内容,因此可以重新定义为忽略它,而不是测量和设置。\begin\end

这听起来像是一个有趣的包裹项目。任何想要的人都可以窃取上述想法。

答案2

这是一个基于 LuaLaTeX 的解决方案,用于抑制数学显示样式环境,即不让它们产生任何输出。

它使用comment包,并设置(目前)lua函数来用 替换\begin{displaymath}、和的所有实例\begin{equation},以及用 替换、和的所有实例。这些环境的星号版本也会被处理,即,和环境也会被环境替换。\begin{align}\begin{comment}\end{displaymath}\end{equation}\end{align}\end{comment}equation*align*comment

增强代码来处理额外的显示数学环境(如gather和)应该很简单multline

通过将函数添加到 LuaTeX 的“process_input_buffer”回调中,替换将在 tex 文件处理的早期阶段完成,即,TeX 可以进行任何处理。

代码目前确实有点笨拙,因为它需要为每个应排除的数学环境提供两个单独的函数。我想这个问题可以通过使用 Lua 的lpeg库来补救,它提供了一些非常奇特的模式匹配方法。

请注意,建议的方法有以下两个限制:首先,各种\end{...}语句—— \end{displaymath}\end{align*}等等——必须是行上的唯一项,并且必须从行首开始;这是包的要求comment。其次,如果您的文档已经使用了comment包及其同名环境,那么如果预先存在的部分中的代码comment包含数学环境,您将遇到麻烦。

下面的 MWE 由两个文件组成:主“驱动程序”文件和一个应称为“mathcomment.lua”的文件;后者包含 lua 代码,并由驱动程序文件通过指令加载。以下两个屏幕截图显示了如果(a) 包含指令或 (b) 注释掉\directlua{ require(...) }指令,驱动程序文件生成的输出。\directlua{ require( "mathcomment.lua" ) }

在此处输入图片描述


在此处输入图片描述


% !TEX TS-program = lualatex
\documentclass{article}
\usepackage{amsmath,comment,luatexbase}
\directlua{require("mathcomment.lua")} % if commented out, display math stuff is not suppressed
\setlength\textwidth{2in} %% just for this example

\begin{document}
\noindent
aaa
\begin{displaymath}
a^2+b^2=c^2a
\end{displaymath}
bbb
\begin{equation}\label{eq:einstein}
E=mc^2
\end{equation} 
ccc
\begin{align}
1+1&=2\\
2+2&=4
\end{align}
ddd
\begin{align*}
0+0&=0\\
a+a&=2a
\end{align*}
ee
\end{document}

-- mathcomment.lua

--displaymath
local function comment_begin_displaymath ( line )
   return string.gsub ( line, 
      "\\begin{displaymath}", "\\begin{comment}" )
end
local function comment_end_displaymath ( line )
   return string.gsub ( line, 
      "\\end{displaymath}",  "\\end{comment}" )
end

--equation, equation*
local function comment_begin_equation ( line )
   return string.gsub ( line, 
      "\\begin{equation%*?}", "\\begin{comment}" )
end
local function comment_end_equation ( line )
   return string.gsub ( line, 
      "\\end{equation%*?}",  "\\end{comment}" )
end

--align, align*
local function comment_begin_align ( line )
   return string.gsub ( line, 
      "\\begin{align%*?}", "\\begin{comment}" )
end
local function comment_end_align ( line )
   return string.gsub ( line, 
      "\\end{align%*?}",  "\\end{comment}" )
end

-- register the functions as callbacks

luatexbase.add_to_callback( "process_input_buffer", 
   comment_begin_displaymath, "comment_begin_displaymath" )
luatexbase.add_to_callback( "process_input_buffer",  
   comment_end_displaymath, "comment_end_displaymath" )

luatexbase.add_to_callback( "process_input_buffer", 
   comment_begin_equation, "comment_begin_equation" )
luatexbase.add_to_callback( "process_input_buffer",  
   comment_end_equation, "comment_end_equation" )

luatexbase.add_to_callback( "process_input_buffer", 
   comment_begin_align, "comment_begin_align" )
luatexbase.add_to_callback( "process_input_buffer",  
   comment_end_align, "comment_end_align" )

yori 补充: (我认为下面的代码是一个有用的补充,但我不想为此创建一个新的答案,因为我只是概括了上面的代码。)下面的代码更短一些,更容易扩展:

-- mathcomment.lua

local function comment_environment_function(env_regex)
   return function(line)
      line = string.gsub(line, "\\begin{" .. env_regex .. "}", "\\begin{comment}")
      line = string.gsub(line, "\\end{" .. env_regex .. "}", "\\end{comment}")
      return line
   end
end

-- register the functions as callbacks

local environments = { "displaymath", "equation%*?", "align%*?" }

for _,env in pairs(environments) do
   luatexbase.add_to_callback( "process_input_buffer", 
      comment_environment_function(env), 
      "comment_" .. env)
end

答案3

您是否尝试过使用特克斯工作室和 LanguageTool 一起使用?这种组合应该对你来说很好,因为 TeXstudio 可以选择与 LanguageTool 内置的 Web 服务器通信。至少在 Windows 下,这种方式对我来说很好用。

另一种选择是简单地将文本从 PDF 复制并粘贴到 LanguageTool GUI 中。无论哪种方式,数学都会被忽略,而不会更改 LaTeX 代码本身。

相关内容