\item 내에서 호출되는지 여부에 따라 다르게 수행되는 일반 TeX 매크로를 어떻게 만들 수 있습니까?

\item 내에서 호출되는지 여부에 따라 다르게 수행되는 일반 TeX 매크로를 어떻게 만들 수 있습니까?

\item다음과 같이 내부에서 호출되는지 여부에 따라 다르게 동작하는 매크로를 만들고 싶습니다.

\def\mymacro{\if<INSIDE_ITEM> do this \else do that\fi}

이것이 사용될 수 있는 예는 다음과 같습니다:

This is how my macro performs outside an item: {\mymacro}

\item{1}. And this is how it performs inside an item: {\mymacro}

비교를 위해 다음과 같이 수학 모드 내에서 호출되는지 여부에 따라 다르게 수행되는 매크로에 대해서도 비슷한 상황이 발생합니다.

\def\anothermacro{\ifmmode do this \else do that\fi}

문제는 항목의 환경이 일반 문단과 큰 차이가 없어 보인다는 점이다. 어떤 아이디어가 있나요?

PS: 저는 정말 관심이 있어요솔직한TeX(LaTeX와 반대)! 또한 추가 패키지가 필요하지 않은 간단한 솔루션도 높이 평가됩니다!

답변1

무엇과 비슷하다카보하에서 제안논평, 그러나 약간의 안전 점검을 통해 대신에 \item새로운 길이를 사용하도록 재정의하고 전자를 plus 로 설정했습니다 . 이것은 광학적으로 구별할 수 없지만(단 몇 나노미터), 테스트에서 거짓 양성으로 이어질 가능성은 상대적으로 적다고 말하고 싶습니다.\itemindent\parindent\parindent1sp\ifdim\hangindent=\itemindent

\newdimen\itemindent
\itemindent\parindent
\advance\itemindent1sp
% the plain TeX definition is basically:
% \def\item{\par\hangindent\parindent\textindent}
\def\item{\par\hangindent\itemindent\textindent}
\def\mymacro{\ifdim\hangindent=\itemindent(INSIDE)\else(OUTSIDE)\fi}

Text text text text text text text text text \mymacro
\item{x} bla bla bla bla \mymacro
\item{x} bla bla bla bla \mymacro

Text text text text text text text text text \mymacro
\bye

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

답변2

의견에서 cabohah의 제안에 따라 :

\newif\ifinitem
\initemfalse
\def\mymacro{\ifinitem hi!\else bye\fi}
\def\item{\par\initemtrue\hang\textindent}
\let\oldpar\par
\def\par{\initemfalse\oldpar}
This is how my macro performs outside an item: {\mymacro}  

\item{1}. And this is how it performs inside an item: {\mymacro}

Now we are no longer inside the item: {\mymacro}
\bye

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

관련 정보