
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 \ifx
nur dann durch die Anweisung verursacht wird, wenn sie ausgewertet wird %empty
und 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}