
Я хочу иметь команду для вставки разных стилей заголовков в зависимости от того, какая среда активна в данный момент. Я обнаружил, что среда должна быть доступна через макрос \@currenvir
, но для меня выполняется ветвь "else", поэтому ничего не происходит.
\newcommand{\head}[1]{
\ifthenelse{\equal{\@currenvir}{itemize}}{
\textbf{#1}
}{
}
}
решение1
Вам нужно выполнить сравнение строк с расширением \@currenvir
против itemize
. \ifthenelse
Оператор with \equal
делает это, но вам не хватает волшебной оболочки \makeatletter
... \makeatother
(см.Что делать \makeatletter
и \makeatother
делать?).
Рассмотрим постПочему ifthen
пакет устарел?, я использовал e-TeX \pdfstrcmp
для выполнениянитьсравнение, которое можно расширить ниже. Если (числовой) результат равен 0, у нас есть совпадение, в противном случае это не ноль:
\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}
Вышеуказанное использование должно работать itemize
и для вложенных объектов.
Вы также можете использовать следующее \ifx
условное предложение:
\makeatletter
\def\specialenvironment{itemize}
\newcommand{\head}[1]{%
\ifx\@currenvir\specialenvironment
\textbf{#1}% Inside "special environment"
\else
\textit{#1}% Not inside "special environment"
\fi
}
\makeatother
Обратите внимание также на частое использование %
. Для мотивации см.Для чего используются знаки процента ( %
) в конце строк?