我可以在序言中添加一些智能宏来处理这个 LaTeX 自动生成的代码吗?
我使用 Maple 的latex()
命令将结果转换为 LaTeX,然后在单独的文档中使用 texlive 进行编译。
有时它会生成错误的 LaTeX 或损坏的 LaTeX。以下是这种情况的一个示例:
上述输出被发送到 latex 文件并包装在\begin{equation}
和里面\end{equation}
。我选择了equation
环境来放置结果,但如果它有助于转换,我可以更改它。
这一切都是使用自动脚本完成的。我没有使用任何 Maple 样式表或其他任何东西。我只是获取 latex() 输出并使用 texlive 标准设置对其进行处理。
我有数百个这样的方程式,因此无法手动编辑任何损坏的 Maple LaTeX 输出,因为每次我重新运行脚本时,编辑都会丢失。
有没有办法制作一个宏,将上述内容转换为使用一些智能替换规则的\begin{cases}
封闭内容\end{cases}
,以使 LaTeX 和 amsmath 满意?
这是错误和 MWE:
平均能量损失
\documentclass[11pt,notitlepage]{article}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
%smart renewcommand here? or \let?
\begin{document}
\begin{equation}
x-
\cases{-2\,\sqrt {-y \left( x \right) }&$y \left( x \right) \leq 0$\cr
2\,\sqrt {y \left( x \right) }&$0<y \left( x \right) $\cr}+{\it \_C1}=0_{{1}}
\end{equation}
\end{document}
和
pdflatex foo.tex
(/usr/local/texlive/2014/texmf-dist/tex/latex/amsfonts/umsa.fd)
(/usr/local/texlive/2014/texmf-dist/tex/latex/amsfonts/umsb.fd)
! Package amsmath Error: Old form `\cases' should be \begin{cases}.
See the amsmath package documentation for explanation.
Type H <return> for immediate help.
...
l.9 \cases
{-2\,\sqrt {-y \left( x \right) }&$y \left( x \right) \leq 0$\cr
?
答案1
旧\cases{...}
形式是 Plain TeX 中相同宏的完整副本,并且因为它在 Plain 中,所以也存在于 LaTeX 内核中。
如果我没记错的话,环境形式是amsmath.sty
在 1994 年发布的,所以我很惊讶 Maple 坚持使用已弃用的命令并且不利用amsmath
。
不过,你想要的还是可以实现的。可能没有人们希望的那么强大,但毕竟这是一种 hack。
关键是利用它mathtools
以克服旧\cases
命令的不足。
\documentclass[11pt,notitlepage]{article}
\usepackage{amsmath,mathtools}
\usepackage{amssymb}
\let\amscases\cases
\makeatletter
\def\cases{\@ifnextchar\bgroup\plaincases\amscases}
\def\plaincases#1{\begin{cases*}#1\end{cases*}}
\makeatother
\begin{document}
\begin{equation}
x-
\cases{-2\,\sqrt {-y \left( x \right) }&$y \left( x \right) \leq 0$\cr
2\,\sqrt {y \left( x \right) }&$0<y \left( x \right) $\cr}+{\it \_C1}=0_{{1}}
\end{equation}
\begin{equation}
x-
\begin{cases}
-2\,\sqrt {-y \left( x \right) }&y \left( x \right) \leq 0\\
2\,\sqrt {y \left( x \right) }&0<y \left( x \right)
\end{cases}+{\it \_C1}=0_{{1}}
\end{equation}
\begin{equation}
x-
\begin{cases}
-2\sqrt{-y(x)} & y(x) \leq 0\\
2\sqrt{y(x)} & 0 < y (x)
\end{cases}+\mathit{\_C1}=0_{1}
\end{equation}
\end{document}
第二个示例显示环境形式排版正确,第三个示例是“真正正确”的 LaTeX 输入,没有无用的\left
和\right
过时的和弃用的\it
命令。
答案2
应该很容易用 替换所有出现的\cases
。\Cases
然后,进行一些额外的修改:
\documentclass[11pt,notitlepage]{article}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
%smart renewcommand here? or \let?
\def\Cases#1{\begin{cases}#1\end{cases}}
\begin{document}
\begin{equation}
x-
\Cases{-2\,\sqrt {-y \left( x \right) }&y \left( x \right) \leq 0\cr
2\,\sqrt {y \left( x \right) }&0<y \left( x \right) \cr}+{\it \_C1}=0_{{1}}
\end{equation}
\end{document}