我正在将 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 代码本身。