定义在对齐环境中使用的新命令

定义在对齐环境中使用的新命令

我不明白为什么下面的代码不起作用。

\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&#1%
    }{%
        ,\\&&#1%
    }%
}
\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

你的方法有很多错误。

  1. 的细胞align*是群体有限的,因此 a\def不会携带到其他细胞……\gdef需要 a。

  2. \tempa必须扩大,否则就align*无法标签&分隔符

  3. 因为它是可选参数(我猜测),所以你不能简单地\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}

在此处输入图片描述

相关内容