根据活动环境的新命令

根据活动环境的新命令

我希望命令根据当前活动的环境插入不同的标题样式。我发现环境应该可以通过宏访问\@currenvir,但对我来说,执行的是“else”分支,所以什么也没发生。

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

    }   
} 

答案1

您需要使用.运算\@currenvir符的扩展执行字符串比较,但您缺少一个神奇的...包装器(请参阅itemize\ifthenelse\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

还请注意频繁使用的%。有关动机,请参阅%行末百分号 ( ) 有什么用?

相关内容