我希望命令根据当前活动的环境插入不同的标题样式。我发现环境应该可以通过宏访问\@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
还请注意频繁使用的%
。有关动机,请参阅%
行末百分号 ( ) 有什么用?