정렬 탭 문자를 \ifx에 전달

정렬 탭 문자를 \ifx에 전달

다음 매크로가 있습니다

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

해당 유형은 주어진 생성 함수로 시퀀스를 설정합니다. 즉

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

는 다음과 같습니다

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

의도한 대로 작동하지만 정렬을 지원하는 환경에 있고 &두 번째 인수로 정렬 탭 문자( )가 전달되고 네 번째 인수가 비어 있으면 실패합니다.

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

코드를 수정한 후 다음 예에서 볼 수 있듯이 문자 \ifx를 평가하고 앞에 문자가 올 때만 문 으로 인해 오류가 발생한다는 결론에 도달했습니다 .%empty

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

정렬 탭 문자를 처리하기 위해 조건을 어떻게 변경할 수 있습니까?

질문이 구체적인 경우 알려주시면 삭제하겠습니다.

편집: \usepackage{amsmath}예시에 추가됨

답변1

&건너뛰는 지점에서 숨겨야 합니다.

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

관련 정보