
다음 매크로가 있습니다
\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}