有时我使用不支持breqn
包的软件来生成Latex。它可以创建方程式环境。
是否可以仅在序言中添加一些代码,将任何内容转换\begin{equation}...\end{equation}
为dmath
环境?
问题在于\tag{number}
等式末尾是否有 。否则,使用\renewenvironment
就可以了。
这是 MWE
\documentclass[12pt,notitlepage]{article}
\usepackage{amsmath}
\usepackage{breqn}
\renewenvironment{equation}{\begin{dmath*}}{\end{dmath*}}
\begin{document}
\begin{equation}
-\eta\omega_{y}+\left( -3y' \xi_{y}-2\xi_{x}+\eta_{y}\right)
\omega-\xi\omega_{x}+\left( -y' \eta_{y}+\left( y'\right)
^{2}\xi_{y}+y' \xi_{x}-\eta_{x}\right) \omega_{y'}+\eta
_{xx}+\eta_{yy}\left( y' \right) ^{2}-
\xi_{yy}\left( y' \right)^{3}-2\xi_{yx}\left( y'\right) ^{2}+2\eta_{yx}y'-\xi_{xx} y'=0\tag{1A}
\end{equation}
\end{document}
由于\tag{...}
结尾处有,因此无法编译。(使用 lualatex)给出
/usr/local/texlive/2023/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg))
! Package amsmath Error: \tag not allowed here.
See the amsmath package documentation for explanation.
Type H <return> for immediate help.
...
l.62 ...\right) ^{2}+2\eta_{yx}y'-\xi_{xx} y'=0\tag
{1A}
?
如果我删除它,\tag{1A}
它可以工作并编译给出
由于不能有\tag{}
,dmath*
所以必须将其翻译为
\begin{dmath}[number=1A]
.....
\end{dmath}
但我不知道如何检查\tag{...}
并生成正确的dmath
。
因此有两种情况: equation
没有标签,
\begin{dmath*}
.....
\end{dmath*}
这个案例我可以使用
\renewenvironment{equation}{\begin{dmath*}}{\end{dmath*}}
\tag{N}
第二种情况是等式中有,那么这应该是
\begin{dmath}[number=N]
.....
\end{dmath}
而第二个案例却是比较困难的。
是否可以使用序言中的一些代码来处理这两种情况?我使用 lualatex,并且要使用的代码只能添加到序言中,而不能添加到之后\begin{document}
有什么建议可以解决这两种情况吗?主要问题是处理\tag{}
。软件不会生成其他任何内容,例如\label
,它只会在最后生成\tag
或不生成。\tag
我需要这样做的原因是,生成的一些方程很长,我使用breqn
包来分解它们。但我使用的软件不支持dmath
环境。手动编辑代码进行更改对我来说不是一个选择。
TL 2023
答案1
首先,你想要dmath
,而不是dmath*
。
\documentclass[12pt,notitlepage]{article}
\usepackage{amsmath}
\usepackage{breqn}
\ExplSyntaxOn
\RenewDocumentEnvironment{equation}{b}
{
\nasser_equation:n { #1 }
}{}
\tl_new:N \l__nasser_equation_body_tl
\cs_new_protected:Nn \nasser_equation:n
{
\regex_match:nnTF { \c{tag} } { #1 }
{ \__nasser_equation_tag:n { #1 } }
{ \begin{dmath}#1\end{dmath} }
}
\cs_new_protected:Nn \__nasser_equation_tag:n
{
\tl_set:Nn \l__nasser_equation_body_tl { #1 }
\regex_replace_once:nnN
{ (.*)\c{tag}\{(.*?)\}(.*) } % search
{ \c{begin}\{dmath\}\[number=\2\]\1\3\c{end}\{dmath\} }
\l__nasser_equation_body_tl
\tl_use:N \l__nasser_equation_body_tl
}
\ExplSyntaxOff
\begin{document}
No tag here, normal numbering
\begin{equation}
-\eta\omega_{y}+\left( -3y' \xi_{y}-2\xi_{x}+\eta_{y}\right)
\omega-\xi\omega_{x}+\left( -y' \eta_{y}+\left( y'\right)
^{2}\xi_{y}+y' \xi_{x}-\eta_{x}\right) \omega_{y'}+\eta
_{xx}+\eta_{yy}\left( y' \right) ^{2}-
\xi_{yy}\left( y' \right)^{3}-2\xi_{yx}\left( y'\right) ^{2}+2\eta_{yx}y'-\xi_{xx} y'=0
\end{equation}
Tag at the end
\begin{equation}
-\eta\omega_{y}+\left( -3y' \xi_{y}-2\xi_{x}+\eta_{y}\right)
\omega-\xi\omega_{x}+\left( -y' \eta_{y}+\left( y'\right)
^{2}\xi_{y}+y' \xi_{x}-\eta_{x}\right) \omega_{y'}+\eta
_{xx}+\eta_{yy}\left( y' \right) ^{2}-
\xi_{yy}\left( y' \right)^{3}-2\xi_{yx}\left( y'\right) ^{2}+2\eta_{yx}y'-\xi_{xx} y'=0\tag{1A}
\end{equation}
Tag at the beginning
\begin{equation}\tag{B}
-\eta\omega_{y}+\left( -3y' \xi_{y}-2\xi_{x}+\eta_{y}\right)
\omega-\xi\omega_{x}+\left( -y' \eta_{y}+\left( y'\right)
^{2}\xi_{y}+y' \xi_{x}-\eta_{x}\right) \omega_{y'}+\eta
_{xx}+\eta_{yy}\left( y' \right) ^{2}-
\xi_{yy}\left( y' \right)^{3}-2\xi_{yx}\left( y'\right) ^{2}+2\eta_{yx}y'-\xi_{xx} y'=0
\end{equation}
No \verb|\left| and \verb|\right|
\begin{equation}
-\eta\omega_{y}+( -3y' \xi_{y}-2\xi_{x}+\eta_{y})
\omega-\xi\omega_{x}+( -y' \eta_{y}+( y')
^{2}\xi_{y}+y' \xi_{x}-\eta_{x}) \omega_{y'}+\eta
_{xx}+\eta_{yy}( y' ) ^{2}-
\xi_{yy}( y' )^{3}-2\xi_{yx}( y') ^{2}+2\eta_{yx}y'-\xi_{xx} y'=0
\end{equation}
\end{document}
最后一个例子只是为了展示如何排版公式,而不需要可怕的大括号。
像往常一样,输出结果breqn
并不理想。