
Ich möchte einen Befehl haben, um je nach aktuell aktiver Umgebung unterschiedliche Überschriftenstile einzufügen. Ich habe festgestellt, dass die Umgebung per Makro zugänglich sein sollte \@currenvir
, aber bei mir wird der Zweig „else“ ausgeführt, sodass nichts passiert ist.
\newcommand{\head}[1]{
\ifthenelse{\equal{\@currenvir}{itemize}}{
\textbf{#1}
}{
}
}
Antwort1
Sie müssen einen String-Vergleich mit der Erweiterung von \@currenvir
gegen durchführen itemize
. \ifthenelse
Der \equal
Operator mit tut dies, aber Ihnen fehlt ein magischer \makeatletter
... \makeatother
Wrapper (sieheWas tun \makeatletter
und \makeatother
tun?).
Betrachten Sie den BeitragWarum ist das ifthen
Paket veraltet?, ich habe e-TeX verwendet, \pdfstrcmp
um eineSchnurVergleich, der unten erweiterbar ist. Wenn das (numerische) Ergebnis 0 ist, haben wir eine Übereinstimmung, andernfalls ist es ungleich Null:
\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}
Die obige Verwendung sollte itemize
auch für verschachtelte Dateien funktionieren.
Sie können auch den folgenden \ifx
Bedingungssatz verwenden:
\makeatletter
\def\specialenvironment{itemize}
\newcommand{\head}[1]{%
\ifx\@currenvir\specialenvironment
\textbf{#1}% Inside "special environment"
\else
\textit{#1}% Not inside "special environment"
\fi
}
\makeatother
Beachten Sie auch die häufige Verwendung von %
. Zur Motivation sieheWozu dienen die Prozentzeichen ( %
) am Zeilenende?