Übergeben des Ausrichtungstabulatorzeichens an \ifx

Übergeben des Ausrichtungstabulatorzeichens an \ifx

Ich habe folgendes Makro

\usepackage{xintexpr}

\newcommand\seq[4] %length, delimiter, generating func, last term
{%
  \def\s##1{\def\n{##1} #3}
  \xintListWithSep{#2}
  {%
    \xintApply{\s}{\xintSeq{1}{#1}}
  }%
  #2\ldots
  \ifx\\#4\\ %if 4th arg empty
    %empty
  \else
    #2#4
  \fi
}

dieser Typ setzt eine Sequenz mit der gegebenen generierenden Funktion, d.h.

$\seq{3}{,}{\n}{n}$
$\seq{4}{,}{\n}{}$
$\seq{3}{,}{\sqrt{\n}}{}$
$\seq{3}{/}{\frac{1}{\n}}{\frac{1}{n}}$

ist äquivalent zu

$1, 2, 3, ..., n$
$1, 2, 3, 4, ...$
$\sqrt{1}, \sqrt{2}, \sqrt{3}, ...$
$\frac{1}{1}/ \frac{1}{2}/ \frac{1}{3}/ .../ \frac{1}{n}$

Obwohl es wie vorgesehen funktioniert, schlägt es fehl, wenn es sich in einer Umgebung befindet, die Ausrichtung unterstützt und ein Ausrichtungstabulatorzeichen ( &) als zweites Argument übergeben wird und das vierte Argument leer ist, d. h.

\begin{align}
  \seq{3}{&&,}{\n}{n} % this works
  \seq{3}{&&,}{\n}{}  % this causes an error 
\end{align}

Nachdem ich am Code herumgebastelt hatte, kam ich zu dem Schluss, dass der Fehler \ifxnur dann durch die Anweisung verursacht wird, wenn sie ausgewertet wird %emptyund Zeichen ihr vorangestellt werden, wie das folgende Beispiel zeigt:

\documentclass{article}

\usepackage{amsmath}

\newcommand\testa[2]
{%
  \ifx\\#2\\
    %empty, evaluation causes error
  \else
    #1
  \fi
}

\newcommand\testb[2]
{%
  \ifx\\#2\\
    #1
  \else
    %full, evaluation causes error
  \fi
}

\begin{document}
\begin{align}
  \testa{&}{n}    \\ %ok
  \testb{&}{}     \\ %ok
%
  \testa{&}{}     \\ %ok
  \testb{&}{n}    \\ %ok
%
  foo\testa{&}{n} \\ %ok
  foo\testb{&}{}  \\ %ok
%
  foo\testa{&}{}  \\ % causes error
  foo\testb{&}{n}    % causes error
\end{align}
\end{document}

Wie kann die Bedingung geändert werden, um das Tabulatorzeichen für die Ausrichtung zu verarbeiten?

Wenn die Frage zu spezifisch ist, lassen Sie es mich wissen und ich werde sie entfernen.

EDIT: \usepackage{amsmath}zum Beispiel hinzugefügt

Antwort1

Sie müssen den &aus dem übersprungenen Zweig ausblenden

\documentclass{article}
\usepackage{amsmath}

\def\useone#1{#1}
\newcommand\testa[2]
{%
  \ifx\\#2\\%%
    %empty, evaluation causes error
  \else
    \useone{#1}%%
  \fi
}

\newcommand\testb[2]
{%
  \ifx\\#2\\%%
    \useone{#1}%%
  \else
    %full, evaluation causes error
  \fi
}

\begin{document}
\begin{align}
  \testa{&}{n}    \\ %ok
  \testb{&}{}     \\ %ok
%
  \testa{&}{}     \\ %ok
  \testb{&}{n}    \\ %ok
%
  foo\testa{&}{n} \\ %ok
  foo\testb{&}{}  \\ %ok
%
  foo\testa{&}{}  \\ % causes error
  foo\testb{&}{n}    % causes error
\end{align}
\end{document}

verwandte Informationen