我想要一个宏来实现以下分段定义表示:
\documentclass{article}
\usepackage{amsmath}
\begin{document}
\begin{equation*}
\exists g \in X \to Y: \forall x \in X:
\langle x \in A \Rightarrow g(x) = 0;~ x \notin A \Rightarrow g(x) \in B \rangle
\end{equation*}
\end{document}
其输出看起来像
所需的宏可以使用以下语法:
\scases{
x \in A & g(x) = 0\\
x \notin A & g(x) \in B
}
或者与环境类似的cases
:
\begin{scases}
x \in A & g(x) = 0\\
x \notin A & g(x) \in B
\end{scases}
\langle
其输出将与括号和所括起来的部分相同\rangle
。
也就是说,&
被条件$ \Rightarrow $取代,并被\\
取代;~
。
请帮我设计这样的宏。
请求更新:宏应该允许任意多个\\
s。
答案1
下面的宏可以完成您想要的操作:
\def\scases #1{\bgroup \def\\{;~}\langle \scasesA #1&\egroup}
\def\scasesA #1&{#1\futurelet\next\scasesB}
\def\scasesB {\ifx\next\egroup \rangle \else \Rightarrow \expandafter\scasesA \fi}
% test:
$$
\scases{
x \in A & g(x) = 0\\
x \notin A & g(x) \in B
}
$$
\bye