我试图找到如何在 LaTeX 中对方程式进行编号。在这Peter Grill 建议使用
\begin{equation}
%equation...
\end{equation}
不过,我几乎用
$$
%equation...
$$
是否有任何简单的方法可以使所有或部分方程式编号,而无需改变所有$$...$$
环境equation
?
答案1
是否有简单的方法可以使所有...方程式编号而不改变所有
$$...$$
?
如果你可以自由地使用 LuaLaTeX 来编译你的文档,以下解决方案——它是这个答案—— 应该会引起您的兴趣。它设置了一个 Lua 函数,充当预处理器,根据情况自动将所有的实例替换$$
为\begin{equation}
或,\end{equation}
前$$
LaTeX 开始其常规处理。Lua 函数还知道如果在一行中遇到成对的符号(例如$$a^2+b^2=c^2$$
或 )该怎么做$$ e^{i\pi}-1=0 $$
。
下面的答案还设置了两个实用宏:\ReplaceDoubleDollarsOn
和\ReplaceDoubleDollarsOff
。前者打开 Lua 函数,后者将其关闭。能够关闭 Lua 函数应该很有用,例如,如果您的文档包含具有实例的 URL 字符串$$
,或者它包含包含实例的逐字材料$$
。
% !TEX TS-program = lualatex
\documentclass{article}
\usepackage{luacode} % for 'luacode' environment
\begin{luacode}
in_display_math = false -- initialize a Boolean variable
function replace_ddollar ( line )
line = line:gsub ( "%$%$(.-)%$%$" , -- pairs of "$$" on 1 line
"\\begin{equation} %1 \\end{equation}" )
line = line:gsub ( "%$%$" , function (x) -- found single instance of "$$"
if not in_display_math then
in_display_math = true
return "\\begin{equation}"
else
in_display_math = false
return "\\end{equation}"
end
end )
return line
end
\end{luacode}
%% Set up two LaTeX utility macros:
\newcommand\ReplaceDoubleDollarsOn{%
\directlua{ luatexbase.add_to_callback(
"process_input_buffer", replace_ddollar, "replace_ddollar" )}}
\newcommand\ReplaceDoubleDollarsOff{%
\directlua{ luatexbase.remove_from_callback(
"process_input_buffer", "replace_ddollar" )}}
\ReplaceDoubleDollarsOn % Switch Lua function _on_ by default
\usepackage{url} % just for this example
\begin{document}
$$
E = mc^2
$$
$$a^2+b^2=c^2$$ $$d^2+e^2=f^2$$ % Aside: I do not endorse this coding style!
$$
x = 3\alpha^2 + \beta = \int f\, d\mu.
$$
% Switch the Lua function off
\ReplaceDoubleDollarsOff
\url{A_URL_string_with_a_$$_and_$$$$_and_another_$$}
% Switch the Lua function back on
\ReplaceDoubleDollarsOn
$$ e^{i\pi}-1=0 $$
$$
1+1=2
$$
\end{document}
答案2
或者使用一个简单的 perl 脚本:
cat yourfile | perl -p0e 's/\$\$(.*?)\$\$/\\begin{equation}\1\\end{equation}/gs'
这会将您的所有$$
“环境”转变为方程式。
您可以使用附加参数-i
和yourfile
(作为最后一个)让 perl 替换一个文件。
g
使此替换成为全局的,s
使.
匹配也变成新行。