
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 \@currenvir
against itemize
. \ifthenelse
com o \equal
operador faz isso, mas você está com falta de um wrapper mágico \makeatletter
... \makeatother
(vejaO que fazer \makeatletter
e \makeatother
fazer?).
Considere a postagemPor que o ifthen
pacote está obsoleto?, usei o e-TeX \pdfstrcmp
para realizar umcordacomparação que é expansível abaixo. Se o resultado (numeral) for 0, temos uma correspondência, caso contrário é diferente de zero:
\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 itemize
também deve funcionar para aninhados.
Você também pode usar a seguinte \ifx
condicional:
\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?