我不明白为什么下面的代码不起作用。
\documentclass[a4paper,11pt]{article}
\usepackage{amsmath,amssymb, amsthm}
\newcommand{\tempa}{\def\tempb{\min}&\tempb}
\begin{document}
\begin{align*}
\tempa\\
\tempa
\end{align*}
\end{document}
========================== 已解决!
\documentclass[a4paper,11pt]{article}
\usepackage{amsmath,amssymb, amsthm}
\usepackage{etoolbox}
\usepackage{mathtools}
\newtoggle{constDefine}
\toggletrue{constDefine}
\makeatletter
\def\obj#1#2{%
\global\toggletrue{constDefine}%
\gdef\@obj{#1}%
&\mathrlap{\@obj}\phantom{\@obj}\quad #2 \span%
}
\def\const#1{%
\iftoggle{constDefine}{%
\global\togglefalse{constDefine}%
\\&\mathrlap{\text{\normalfont s.t.}}\hphantom{\@obj}\quad%
}{%
,\\&%
}%
}
\makeatother
\begin{document}
\begin{equation*}
\begin{alignedat}{5}
\obj{\min}{x_1}
\const{x_1 + 2x_2 - x_3 &\leq 1}
\const{x_1 + 2x_2 &\leq 1}
\const{x_1 &\leq 1}
\end{alignedat}
\end{equation*}
\end{document}
答案1
你的方法有很多错误。
的细胞
align*
是群体有限的,因此 a\def
不会携带到其他细胞……\gdef
需要 a。\tempa
必须扩大,否则就align*
无法看标签&
分隔符因为它是可选参数(我猜测),所以你不能简单地
\expandafter
传递一个\\
。
这里有一种方法可以完成与你尝试过的事情类似的任务。很丑,不是吗?显然,不要这样做。一定有更好的方法来实现你的目标。你到底想做什么真的试图完成?
\documentclass[a4paper,11pt]{article}
\usepackage{amsmath,amssymb, amsthm}
\newcommand{\tempa}{x\gdef\tempb{\min}&y\tempb}
\def\z{\\}
\begin{document}
\def\tmp{\begin{align*}}
\expandafter\expandafter\expandafter\tmp
\expandafter\expandafter\expandafter\tempa
\expandafter\z\tempa
\end{align*}
\end{document}