
Eu gostaria de criar uma macro que se comporte de maneira diferente dependendo de ser chamada ou não de dentro de um arquivo \item
, como
\def\mymacro{\if<INSIDE_ITEM> do this \else do that\fi}
Aqui está um exemplo onde isso pode ser usado:
This is how my macro performs outside an item: {\mymacro}
\item{1}. And this is how it performs inside an item: {\mymacro}
Para efeito de comparação, uma situação semelhante diz respeito às macros que apresentam desempenho diferente dependendo de serem chamadas ou não no modo matemático, como:
\def\anothermacro{\ifmmode do this \else do that\fi}
O problema é que não parece haver grande diferença entre o ambiente de um item e um parágrafo normal. Alguma ideia?
PS: Estou realmente interessado emsimplesTeX (em oposição ao LaTeX)! Além disso, uma solução simples que não requer nenhum pacote extra seria muito apreciada!
Responder1
Semelhante ao quecabohahsugerido em umComente, mas com uma pequena verificação de segurança: eu redefino \item
para usar um novo comprimento \itemindent
em vez de \parindent
e defino o anterior como \parindent
plus 1sp
. Isso é opticamente indistinguível (apenas alguns nanômetros), mas as chances de o teste \ifdim\hangindent=\itemindent
levar a um falso positivo são relativamente pequenas, eu diria.
\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
Responder2
Seguindo a sugestão do cabohah nos comentários:
\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