アクティブな環境に基づく新しいコマンド

アクティブな環境に基づく新しいコマンド

現在アクティブな環境に基づいて、異なる見出しスタイルを挿入するコマンドが必要です。環境はマクロ経由でアクセスできるはずだとわかりました\@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 の場合は一致し、それ以外の場合は 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

の頻繁な使用にも注意してください%。動機については、%行末のパーセント記号 ( ) は何の目的で使用されますか?

関連情報