어떤 환경이 활성화되어 있는지에 따른 newcommand

어떤 환경이 활성화되어 있는지에 따른 newcommand

현재 활성화된 환경에 따라 다른 제목 스타일을 삽입하는 명령을 갖고 싶습니다. 매크로를 통해 환경에 액세스할 수 있어야 한다는 것을 알았지 \@currenvir만 제 경우에는 "else" 분기가 실행되므로 아무 일도 일어나지 않았습니다.

\newcommand{\head}[1]{
    \ifthenelse{\equal{\@currenvir}{itemize}}{
        \textbf{#1}
    }{

    }   
} 

답변1

\@currenviragainst 확장을 사용하여 문자열 비교를 수행해야 합니다 itemize. 운영자 \ifthenelse와 함께 \equal이 작업을 수행하지만 마술이 부족합니다 \makeatletter... \makeatother래퍼(참조무엇을 \makeatletter하고 \makeatother무엇을 합니까?).

게시물을 고려하십시오패키지가 더 이상 사용되지 않는 이유는 무엇입니까 ifthen?, 나는 e-TeX를 사용하여 \pdfstrcmp다음 작업을 수행했습니다.아래에서 확장 가능한 비교입니다. (숫자) 결과가 0이면 일치하는 것이고, 그렇지 않으면 0이 아닙니다.

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

\documentclass{article}

\makeatletter
\newcommand{\head}[1]{%
  \ifnum\pdfstrcmp{\@currenvir}{itemize}=0
    \textbf{#1}% Inside itemize
  \else
    \textit{#1}% Not inside itemize
  \fi
}
\makeatother
\begin{document}

\begin{itemize}
  \item \head{First} item
\end{itemize}
\begin{enumerate}
  \item \head{Second} item
\end{enumerate}

\end{document}

위의 사용법은 중첩에서도 작동합니다 itemize.


다음 조건을 사용할 수도 있습니다 \ifx.

\makeatletter
\def\specialenvironment{itemize}
\newcommand{\head}[1]{%
  \ifx\@currenvir\specialenvironment
    \textbf{#1}% Inside "special environment"
  \else
    \textit{#1}% Not inside "special environment"
  \fi
}
\makeatother

을 자주 사용한다는 점도 참고하세요 %. 동기는 다음을 참조하세요.%줄 끝에 백분율 기호( )를 사용하는 방법은 무엇입니까 ?

관련 정보