如何为 LaTeX 文件中的所有方程式添加框架,使所有方程式看起来像
可以通过以下方式获得
\[\boxed{a+b}\]
例如,将其转换为
进入这个
据我所知,LaTeX 中有很多类型的公式环境。例如
$a+b$,
\[a+b\]
\begin{equation}
a+b
\end{equation}
\begin{equation*}
a+b
\end{equation*}
\begin{eqnarray}
a+b \\
c+d
\end{eqnarray}
\begin{align}
a+b \\
c+d
\end{align}
\begin{equation}
\left(
\begin{matrix}
a &b \\
c &d
\end{matrix}
\right)
\end{equation}
等等 ...
那么,是否有任何神奇的方法可以将边界框添加到所有这些方程环境中不改变方程代码? 我是说不要逐个修改方程式的代码,就像
$\boxed{a+b}$
\[\boxed{a+b}\]
\begin{equation}
\boxed{a+b}
\end{equation}
\begin{equation*}
\boxed{a+b}
\end{equation*}
\begin{eqnarray}
\boxed{a+b} \\
\boxed{c+d}
\end{eqnarray}
\begin{align}
\boxed{a+b} \\
\boxed{c+d}
\end{align}
\begin{equation}
\boxed{
\left(
\begin{matrix}
a &b \\
c &d
\end{matrix}
\right)
}
\end{equation}
答案1
(重写答案以使其处理amsmath
包的多行数学环境)
以下解决方案需要 LuaLaTeX,可处理内联数学情况以及单行显示数学环境,例如、equation
和equation*
。displaymath
它还处理包的四个多行方程环境amsmath
—— align
、、和,以及它们的“带星号”变体——但要注意的是,任何方程编号都会被抑制。(唯一不会自动装箱的主要独立多行方程环境是环境及其带星号的表亲。)alignat
gather
multline
flalign
代码提供了两个用户级 LaTeX 宏:\EqboxOn
和\EqboxOff
。前者打开自动装箱,后者关闭自动装箱。由启用的 Lua 函数会\EqboxOn
扫描所有输入行并\boxed
根据需要“动态”插入语句。请注意,数学环境的定义不会被修改。
请注意,没有提供用于处理eqnarray
和eqnarray*
环境的代码。这种省略是故意的:这些环境已弃用,不应再使用。
% !TEX TS-program = lualatex
\documentclass{article}
\usepackage{mathtools}
%% Lua-side code
\usepackage{luacode}
\begin{luacode*}
function eq_boxed ( s )
s = s:gsub ( "(\\%[)" , "%1\\boxed{" )
s = s:gsub ( "(\\%])" , "}%1" )
s = s:gsub ( "%$%$(.-)%$%$" , "\\[\\boxed{%1}\\]" ) -- $$ .. $$
s = s:gsub ( "%$(.-)%$" , "$\\boxed{%1}$" ) -- inline math
s = s:gsub ( "(\\begin{displaymath})" , "%1\\boxed{" )
s = s:gsub ( "(\\end{displaymath})" , "}%1" )
s = s:gsub ( "(\\begin{equation%*?})" , "%1\\boxed{" )
s = s:gsub ( "(\\end{equation%*?})" , "}%1" )
-----
s = s:gsub ( "(\\begin{align%*?})" , "\\[\\boxed{\\begin{aligned}" )
s = s:gsub ( "(\\end{align%*?})" , "\\end{aligned}}\\]" )
s = s:gsub ( "(\\begin{alignat%*?})" , "\\[\\boxed{\\begin{alignedat}" )
s = s:gsub ( "(\\end{alignat%*?})" , "\\end{alignedat}}\\]" )
s = s:gsub ( "(\\begin{gather%*?})" , "\\[\\boxed{\\begin{gathered}" )
s = s:gsub ( "(\\end{gather%*?})" , "\\end{gathered}}\\]" )
s = s:gsub ( "(\\begin{multline%*?})" , "\\[\\boxed{\\begin{multlined}" )
s = s:gsub ( "(\\end{multline%*?})" , "\\end{multlined}}\\]" )
return s
end
\end{luacode*}
%% LaTeX-side code
\newcommand\EqboxOn{\directlua{luatexbase.add_to_callback(
"process_input_buffer", eq_boxed, "eq_boxed" )}}
\newcommand\EqboxOff{\directlua{luatexbase.remove_from_callback(
"process_input_buffer", "eq_boxed" )}}
\begin{document}
\EqboxOn % turn on automatic boxing
$a+b$, $e^{i\pi}-1=0$
\[a+b\]
\[
c+d
\]
$$e+f$$
\begin{equation}
g+h
\end{equation}
\begin{equation*}
a^b+b^2=c^2
\end{equation*}
\begin{displaymath}
1+1=2
\end{displaymath}
\begin{align}
E &= mc^2 \\
b^2 &= a^2+2\int_a^b x\,dx
\end{align}
\begin{gather}
d = e + f \\
g = h + i + j + k
\end{gather}
\begin{multline*}
d+e+f+g+h+i+j+k+l+m+n\\
=o+p+q+r+s+t+u+v+w+x+y+z
\end{multline*}
\begin{alignat}{2}
x &= y_1-y_2+y_3-y_5+y_8-\dotsb&\quad& \text{by abc}\\
&= y'\circ y^* && \text{by def}\\
&= y(0) y' && \text {by Axiom 1.}
\end{alignat}
\end{document}