基於活躍環境的新指令

基於活躍環境的新指令

我想要命令根據目前活動的環境插入不同的標題樣式。我發現環境應該可以透過巨集訪問\@currenvir,但對我來說,「else」分支被執行,所以什麼也沒有發生。

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

    }   
} 

答案1

\@currenvir您需要使用against的擴充功能來執行字串比較itemize\ifthenelsewith\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

也要注意頻繁使用%.有關動機,請參閱%行尾的百分號 ( ) 有什麼用?

相關內容