novo comando baseado em qual ambiente está ativo

novo comando baseado em qual ambiente está ativo

Quero ter um comando para inserir estilos de título diferentes com base no ambiente que está ativo no momento. Descobri que o ambiente deveria ser acessível via macro \@currenvir, mas para mim o branch "else" é executado, então nada aconteceu.

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

    }   
} 

Responder1

Você precisa realizar uma comparação de string com a expansão de \@currenviragainst itemize. \ifthenelsecom o \equaloperador faz isso, mas você está com falta de um wrapper mágico \makeatletter... \makeatother(vejaO que fazer \makeatlettere \makeatotherfazer?).

Considere a postagemPor que o ifthenpacote está obsoleto?, usei o e-TeX \pdfstrcmppara realizar umcordacomparação que é expansível abaixo. Se o resultado (numeral) for 0, temos uma correspondência, caso contrário é diferente de zero:

insira a descrição da imagem aqui

\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}

O uso acima itemizetambém deve funcionar para aninhados.


Você também pode usar a seguinte \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

Observe também o uso frequente de %. Para a motivação, vejaQual é a utilidade dos sinais de porcentagem ( %) no final das linhas?

informação relacionada