
我想要命令根據目前活動的環境插入不同的標題樣式。我發現環境應該可以透過巨集訪問\@currenvir
,但對我來說,「else」分支被執行,所以什麼也沒有發生。
\newcommand{\head}[1]{
\ifthenelse{\equal{\@currenvir}{itemize}}{
\textbf{#1}
}{
}
}
答案1
\@currenvir
您需要使用against的擴充功能來執行字串比較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
也要注意頻繁使用%
.有關動機,請參閱%
行尾的百分號 ( ) 有什麼用?