comment.sty 包允许排版
\begin{comment}
stuff that will be suppressed from output file
\end{comment}
或者
\begin{myCustomEnv}
stuff that will be suppressed from output file
\end{myCustomEnv}
我们甚至可以抑制已经定义的环境的内容,例如{proof}
。
本着这种精神,我想抑制数学模式中的所有内容,无论它以何种方式开始:,,,,$
等等。输出应该就像数学模式中的所有内容都不在源文件中一样\(
。$$
\begin{displaymath}
这能做到吗?
答案1
进入和退出数学模式有几种非常不同的方法:
- TeX 数学移位字符,catcode 3,通常
$
- LaTeX 宏
\(<math>\)
和\[<math>\]
- LaTeX 环境
math
和displaymath
amsmath
环境- 不是直接在源中:使用原始 catcode 定义的宏
$
无法用所描述的方法隐藏。
1. TeX 数学移位
轻松重新定义$
(catcode 13, active) 即可解决这个问题。
\catcode`$=\active
\makeatletter
\def${% % TeX math shift (not anymore)
\@ifnextchar${\killB}{\killA}%
}
\makeatother
\def\killA#1${\ignorespaces} % TeX inline math
\def\killB$#1$${\ignorespaces} % TeX display math
该宏通过删除最后一个 之后的所有空格来\killA
终止内联数学 ( ) 。如果没有,类似的内容将被排版为。 (这将被禁止“输出应该像数学模式中的所有内容不在源文件中一样。”)$<math>$
$
\ignorespaces
Text $ f(x) $ text
Text␣␣text
2. LaTeX 宏\(<math>\)
和\[<math>\]
这些宏的 TeX 重新定义就足够了:
\def\(#1\){\ignorespaces} % LaTeX inline math
\def\[#1\]{\ignorespaces} % LaTeX display math
如果没有空白问题(见上文),下面的方法也可以起作用:
\let\[\iffalse
\let\]\fi
\let\(\iffalse
\let\)\fi
3. LaTeX 环境math
和displaymath
LaTeX 环境math
和displaymath
内部使用$
和\[
和\]
,但上述解决方案在这里不起作用(它们反而会带来更大的危害)。
但是在该包的帮助下,environ
我们可以简单地重新定义这些环境:
\def\killMe#1{% % for math environments
\expandafter\let\csname #1\endcsname\relax
\expandafter\let\csname end#1\endcsname\relax
\NewEnviron{#1}{}%
}
\killMe{displaymath}
\killMe{math}
宏的前两行\killMe
let\<environment>
和\end<environment>
to\relax
认为\NewEnviron
它们尚未定义。会自动在环境的一部分中\NewEnviron
插入一个。\ignorespaces
\end
4.amsmath
环境
该amsmath
软件包提供了一些与宏相同的“静音”环境\killMe
。例如:
\killMe{align}
\killMe{align*}
代码
\documentclass{article}
\usepackage{amsmath}
\usepackage{environ}
\def\killMe#1{% for math environments
\expandafter\let\csname #1\endcsname\relax
\expandafter\let\csname end#1\endcsname\relax
\NewEnviron{#1}{}%
}
\def\(#1\){\ignorespaces}% LaTeX inline math
\def\[#1\]{\ignorespaces}% LaTeX display math
% \let\[\iffalse
% \let\]\fi
% \let\(\iffalse
% \let\)\fi
\catcode`$=\active
\makeatletter
\def${% TeX math shift
\@ifnextchar${\killB}{\killA}%
}%
\makeatother
\def\killA#1${\ignorespaces}% TeX inline math
\def\killB$#1$${\ignorespaces}% TeX display math
\killMe{align}%
\killMe{align*}%
\killMe{displaymath}% displaymath relies on \[ and \] and cannot live
% without the right definition of \[ and \]
\killMe{math}% % math relies on $ as math shift character and would work
% although $ is active and redefined
\begin{document}
H%
$ i^n TeX $
e%
\( i^n LaTeX \)
l%
$$ o^ut TeX $$
l%
\[ o^ut LaTeX \]
o
\begin{align}
f(x) & = x^2
\end{align}
W%
\begin{align*}
f(x) & = x^2
\end{align*}
o%
\begin{displaymath}
f(x) = x^2 (displaymath)
\end{displaymath}
r%
\begin{math}
2^3 (math)
\end{math}
ld!
Text $ f(x) $ text
\end{document}
输出
答案2
我还建议采用一些外部解决方案,从文件中删除数学材料并写入新材料。其中一个原因是 LaTeX 内部在很多不明显的地方使用数学(不一定是真正的数学),\LaTeXe
例如徽标。
无论如何,只是为了好玩,这里有一个 LaTeX 内的解决方案(完全不受支持并且不一定完整,也许必须禁用更多功能):
\documentclass{article}
\makeatletter
\def\nomath{%
\font\dummyft@=dummy \relax
\count@\sixt@@n
\loop
\ifnum\count@ >\z@
\advance\count@\m@ne
\global\textfont\count@\dummyft@
\global\scriptfont\count@\dummyft@
\global\scriptscriptfont\count@\dummyft@
\repeat
\global\let\mathversion\@gobble
\frozen@everymath={}
\frozen@everydisplay={}
\let\boldmath\relax
\let\unboldmath\relax
\let\mv@normal\@empty
\let\mv@bold\@empty
}
\makeatother
\begin{document}
test1: $x$
test2:
\[ a=b\]
test3: \LaTeX{} and $a=b$ but see: \LaTeXe
\begin{itemize} \item test4 $a=b$ \end{itemize}
test5: \parbox[c]{1cm}{now what? $a=b$}
\bigskip
\nomath \ldots{} and again \ldots
test1: $x$
test2:
\[ a=b\]
test3: \LaTeX{} and $a=b$ but see: \LaTeXe
\begin{itemize} \item test4 $a=b$ \end{itemize}
test5: \parbox[c]{1cm}{now what? $a=b$}
\end{document}
但对于示例文档,它似乎确实成功抑制了所有数学运算(或多或少)。请注意,我做了一些非常讨厌的事情,例如更改\frozen@everymath
,由于某种原因被冻结,但你还是这么做了。
还请注意结果输出中的缺陷:
答案3
(我知道 OP 在评论中说过他们不再需要这个,但是它又回到了网站首页,而我第一次错过了它。)
前段时间,我写了一个程序,用于在 LaTeX 文档中查找数学部分。它并不完美,但它比简单的脚本要好一些。
您可以在以下位置找到它(及其限制)https://github.com/loopspace/mathgrep
答案4
这是从文件创建无数学输出的简单方法,LaTeX
方法是从该文件中删除所有数学代码。别忘了保留原始文件的未更改副本!
LaTeX
使用编辑器中的替换功能编辑文件Regular Expressions
,例如Kate
。正则表达式
\$((.|\n)(?!\$))*(.|\n)\$
找到内联数学,但会补偿贪婪,也就是说,它会在代码中保留单词and
和implies
原封不动LaTeX
$x=y$ and $y=z$ implies $x=z$.
(在其他编辑器中,更简单的正则表达式\$.+?\$
可能会起作用。)
要查找类似的其他数学环境equation*
,只需将第一个替换\$
为\\begin\{equation\*\}
,将第二个和第三个替换\$
为\\end\{equation\*\}
。