nuevo comando basado en qué entorno está activo

nuevo comando basado en qué entorno está activo

Quiero tener un comando para insertar un estilo de encabezado diferente según el entorno que esté activo actualmente. Descubrí que se debería poder acceder al entorno mediante una macro \@currenvir, pero para mí, la rama "else" se ejecuta, por lo que no pasó nada.

\newcommand{\head}[1]{
    \ifthenelse{\equal{\@currenvir}{itemize}}{
        \textbf{#1}
    }{

    }   
} 

Respuesta1

Debe realizar una comparación de cadenas con la expansión de \@currenvirAgainst itemize. \ifthenelsecon el \equaloperador hace esto, pero te falta un envoltorio mágico \makeatletter... \makeatother(ver¿Qué hacer \makeatlettery \makeatotherhacer?).

Considere la publicación¿Por qué el paquete está ifthenobsoleto?, He usado el e-TeX \pdfstrcmppara realizar uncadenacomparación que se puede ampliar a continuación. Si el resultado (numeral) es 0, tenemos una coincidencia; de lo contrario, no es cero:

ingrese la descripción de la imagen aquí

\documentclass{article}

\makeatletter
\newcommand{\head}[1]{%
  \ifnum\pdfstrcmp{\@currenvir}{itemize}=0
    \textbf{#1}% Inside itemize
  \else
    \textit{#1}% Not inside itemize
  \fi
}
\makeatother
\begin{document}

\begin{itemize}
  \item \head{First} item
\end{itemize}
\begin{enumerate}
  \item \head{Second} item
\end{enumerate}

\end{document}

El uso anterior debería funcionar itemizetambién para anidados.


También puedes utilizar el siguiente \ifxcondicional:

\makeatletter
\def\specialenvironment{itemize}
\newcommand{\head}[1]{%
  \ifx\@currenvir\specialenvironment
    \textbf{#1}% Inside "special environment"
  \else
    \textit{#1}% Not inside "special environment"
  \fi
}
\makeatother

Tenga en cuenta también el uso frecuente de %. Para la motivación, ver¿Para qué sirven los signos de porcentaje ( %) al final de las líneas?

información relacionada