将宏转换为环境

将宏转换为环境

\scases我决定将很好的答案我之前的问题可以通过 wipet 来改善代码的可读性。(这是否真的是一种改进取决于我的个人喜好。)

原始宏:

\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}

其输出为

\begin{equation*}
    \scases{
        x \in A & g(x) = 0\\
        x \notin A & g(x) \in B
    }
\end{equation*}

在此处输入图片描述

还有一个可以重复使用的选项,\scases如下所示,但我想制作一个独立版本:

\NewEnviron{scenv}{\expandafter\scases\expandafter{\BODY}}

\begin{equation*}
    \begin{scenv}
        x \in A & g(x) = 0\\
        x \notin A & g(x) \in B
    \end{scenv}
\end{equation*}

以下是我尝试过但无果的一些方法:

1.

\newenvironment{scenv}{
    \bgroup\def\\{;~}\langle \scasesA
}{
    &\egroup
}

在此处输入图片描述 (未完成)

2.

\usepackage{environ}
\NewEnviron{scenv}{\bgroup \def\\{;~}\langle \scasesA{\BODY}&\egroup}

在此处输入图片描述 (=> 缺失)

我认为我不太明白\def工作原理。

我更喜欢\newenvironment使用\NewEnviron但无论哪种方式都足够好。

我需要你的帮助。

答案1

使用&不对齐会使它比其他情况下更加复杂,但是......

在此处输入图片描述

\documentclass{article}
\usepackage{amsmath}
\begin{document}

\newenvironment{SCASES}
  {\def\\{;~\SCASESA}\langle \SCASESA}
  {\rangle}
\def\SCASESA #1&{#1\Rightarrow}



\begin{equation*}
    \begin{SCASES}
        x \in A & g(x) = 0\\
        x \notin A & g(x) \in B
     \end{SCASES}
\end{equation*}


\end{document}

答案2

您可以使用expl3更直接的方法。

\documentclass{article}
\usepackage{amsmath}

\ExplSyntaxOn

\NewDocumentEnvironment{scases}{b}
  {
    \langle
    \hermis_scases:n { #1 } % absorb the entire contents as #1
    \rangle
  }
  {}

\seq_new:N \l__hermis_scases_in_seq
\seq_new:N \l__hermis_scases_out_seq
\tl_new:N \l__hermis_scases_case_tl

\cs_new_protected:Nn \hermis_scases:n
  {
    % split at \\
    \seq_set_split:Nnn \l__hermis_scases_in_seq { \\ } { #1 }
    % wrap every item in the processing function
    \seq_set_map:NNn \l__hermis_scases_out_seq \l__hermis_scases_in_seq
      {
        \__hermis_scases_case:n { ##1 }
      }
    % use the sequence with ;<space> between items
    \seq_use:Nn \l__hermis_scases_out_seq { ;\mspace{\thickmuskip} }
  }

\cs_new_protected:Nn \__hermis_scases_case:n
  {
    % save the contents
    \tl_set:Nn \l__hermis_scases_case_tl { #1 }
    % replace & with \Rightarrow
    \tl_replace_once:Nnn \l__hermis_scases_case_tl { & } { \Rightarrow }
    % deliver the new contents
    \tl_use:N \l__hermis_scases_case_tl
  }

\ExplSyntaxOff

\begin{document}

\begin{equation*}
  \begin{scases}
    x \in A & g(x) = 0 \\
    x \notin A & g(x) \in B
  \end{scases}
\end{equation*}

\begin{equation*}
  \begin{scases}
    x \in A & g(x) = 1 \\
    x \in B & g(x) = 2 \\
    x \in C & g(x) = 3
  \end{scases}
\end{equation*}

\end{document}

在此处输入图片描述

相关内容