다음 명령에 대한 if 조건

다음 명령에 대한 if 조건

자체 환경 구축을 시작한 후 다음 명령이 무엇인지 확인하고 다음 명령 이전에 무언가를 실행할 수 있는 옵션을 제공하는 if 조건이 있는지 궁금했습니다. 내가 검색하는 내용에 대한 유사 코드 예:

\newenvironment{test}{
    ifnext{\begin{itemize}}{true: do something}{false: do other things}
    }
    {
}

답변1

LaTeX에는 매크로가 있습니다 \@ifnextchar. 이름은 약간 오해의 소지가 있을 수 있습니다. 다음 단일 문자를 테스트하는 데 사용할 수 있을 뿐만 아니라 정의된 의미가 있는 매크로에도 사용할 수 있습니다. 예를 들어 입력 스트림의 다음 항목이 인지 테스트할 수 있습니다 \begin.

이것은 매크로를 구축하는 데 사용될 수 있습니다 \ifnextenv. 환경 이름, 해당 환경이 이를 따르는 경우 실행될 코드, 그렇지 않으면 실행되는 코드라는 세 가지 인수를 사용합니다. 매크로는 입력 스트림의 다음 항목(세 인수 다음)이 인지 확인합니다 \begin. 그렇다면 첫 번째 인수가 using \begin의 첫 번째 인수와 일치하는지 확인합니다 .\ifnextenv\pdf@strcmp

그런 다음 테스트 결과에 따라 분기를 삽입합니다.

이 사용 예에서는 다음이 없는 경우 \ifnextenv자동으로 if를 삽입하는 데 사용됩니다 .itemize\begin{test}\begin{enumerate}

\documentclass[]{article}

\usepackage{pdftexcmds}

\makeatletter
\newcommand\ifnextenv[3]
  {%
    \@ifnextchar\begin{\@ifnextenv{#1}{#2}{#3}}{#3}%
  }
\newcommand\@ifnextenv[5]
  {%
    \ifnum\pdf@strcmp{#1}{#5}=0
      \expandafter\@firstoftwo
    \else
      \expandafter\@secondoftwo
    \fi
    {#2}
    {#3}%
    \begin{#5}%
  }
\makeatother

\newenvironment{test}
  {%
    \ifnextenv{enumerate}
      {\def\test@end{}}
      {\def\test@end{\enditemize}\itemize}%
  }
  {%
    \test@end
  }

\begin{document}
\begin{test}
\item foo
\item bar
\end{test}

\begin{test}
  \begin{enumerate}
    \item foo
    \item bar
  \end{enumerate}
\end{test}
\end{document}

여기에 이미지 설명을 입력하세요

답변2

토큰 사이클을 사용하여 이를 수행하는 방법은 다음과 같습니다.

를 찾을 때마다 \begin{itemize}를 사전 실행하며 \PREitemize여기서는 로 설정합니다 \par Hi Mom, I am about to itemize. 가 감지되었지만 \begin가 아닌 경우 itemize사전 실행하고 \PREbegin여기서는 로 설정합니다 \par Sorry, this begin is not itemize.

\documentclass{article}
\usepackage{tokcycle}
\def\ITM{itemize}
\def\TRUESET{T}
\def\PREitemize{\par Hi Mom, I am about to itemize}
\def\PREbegin{\par Sorry, this begin is not itemize}
\stripgroupingtrue
\tokcycleenvironment\finditemize
{\addcytoks{##1}}
{\tctestifx{\TRUESET\BEGgo}%
  {\def\tmp{##1}\tctestifx{\ITM\tmp}%
    {\addcytoks[1]{\PREitemize}}{\addcytoks[1]{\PREbegin}}
    \addcytoks{\begin{##1}}}%
  {\addcytoks{{##1}}}%
 \def\BEGgo{F}%
}
{\tctestifx{\begin##1}{\def\BEGgo{T}}{\addcytoks{##1}}}
{\addcytoks{##1}}
\begin{document}
\finditemize
Here is a test
\begin{itemize}
\item A
\begin{itemize}
\item A.1
\item A.2
\end{itemize}
\item B
\item C
\end{itemize}
\begin{enumerate}
\item A
\item B
\item C
\end{enumerate}
\endfinditemize
\end{document}

여기에 이미지 설명을 입력하세요

관련 정보