Как создать простой макрос TeX, который будет работать по-разному в зависимости от того, вызывается ли он из \item или нет?

Как создать простой макрос TeX, который будет работать по-разному в зависимости от того, вызывается ли он из \item или нет?

Я хотел бы создать макрос, который ведет себя по-разному в зависимости от того, вызывается ли он из \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чтобы использовать новую длину \itemindentвместо \parindent, и устанавливаю прежнюю на \parindentplus 1sp. Это оптически неразличимо (всего пара нанометров), но шансы того, что тест \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

введите описание изображения здесь

Связанный контент