neuer Befehl basierend auf der aktiven Umgebung

neuer Befehl basierend auf der aktiven Umgebung

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 \@currenvirgegen durchführen itemize. \ifthenelseDer \equalOperator mit tut dies, aber Ihnen fehlt ein magischer \makeatletter... \makeatotherWrapper (sieheWas tun \makeatletterund \makeatothertun?).

Betrachten Sie den BeitragWarum ist das ifthenPaket veraltet?, ich habe e-TeX verwendet, \pdfstrcmpum eineSchnurVergleich, der unten erweiterbar ist. Wenn das (numerische) Ergebnis 0 ist, haben wir eine Übereinstimmung, andernfalls ist es ungleich Null:

Bildbeschreibung hier eingeben

\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 itemizeauch für verschachtelte Dateien funktionieren.


Sie können auch den folgenden \ifxBedingungssatz 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?

verwandte Informationen