
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 \item
para usar una nueva longitud \itemindent
en lugar de \parindent
y configuro la primera en \parindent
plus 1sp
. Esto es ópticamente indistinguible (sólo un par de nanómetros), pero \ifdim\hangindent=\itemindent
yo 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
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