¿Cómo puedo crear una macro TeX simple que funcione de manera diferente dependiendo de si se llama o no desde un \item?

¿Cómo puedo crear una macro TeX simple que funcione de manera diferente dependiendo de si se llama o no desde un \item?

Me gustaría crear una macro que se comporte de manera diferente dependiendo de si se llama o no desde dentro de un archivo \item, como por ejemplo

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

Aquí hay un ejemplo donde esto podría usarse:

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

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

A modo de comparación, una situación similar se aplica a las macros que funcionan de manera diferente dependiendo de si se llaman o no desde el modo matemático, como por ejemplo:

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

El problema es que no parece haber una gran diferencia entre el entorno de un elemento y el de un párrafo normal. ¿Algunas ideas?

PD: estoy realmente interesado enplano¡TeX (a diferencia de LaTeX)! Además, sería muy apreciada una solución sencilla que no requiera ningún paquete adicional.

Respuesta1

similar a lo quecabohahsugerido en uncomentario, pero con una pequeña comprobación de seguridad: redefino \itempara usar una nueva longitud \itemindenten lugar de \parindenty configuro la primera en \parindentplus 1sp. Esto es ópticamente indistinguible (sólo un par de nanómetros), pero \ifdim\hangindent=\itemindentyo diría que las posibilidades de que la prueba dé lugar a un falso positivo son relativamente pequeñas.

\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

ingrese la descripción de la imagen aquí

Respuesta2

Siguiendo la sugerencia de cabohah en los comentarios:

\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

ingrese la descripción de la imagen aquí

información relacionada