новая команда, основанная на том, какая среда активна

новая команда, основанная на том, какая среда активна

Я хочу иметь команду для вставки разных стилей заголовков в зависимости от того, какая среда активна в данный момент. Я обнаружил, что среда должна быть доступна через макрос \@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

Обратите внимание также на частое использование %. Для мотивации см.Для чего используются знаки процента ( %) в конце строк?

Связанный контент