Konditionale – etwas tun, wenn ein bestimmter Befehl im Dokument verwendet wird

Konditionale – etwas tun, wenn ein bestimmter Befehl im Dokument verwendet wird

Ist es möglich, eine Bedingung zu haben, die es uns erlaubt, etwas zu tun?Wennein bestimmter Befehl wird verwendet indokumentieren\part? Der Befehl würde beispielsweise lauten:

\@ifcommandisbeingused{\part}{<then>}{<else>}

Klärung

Im Folgenden wird der \bfseriesfür den Kapiteleintrag im Inhaltsverzeichnis vermieden, da der \partBefehl imdokumentieren.

\documentclass{book}

\makeatletter

\@ifcommandisbeingused{\part}
{  
\renewcommand*\l@chapter[2]{%
  \ifnum \c@tocdepth >\m@ne
    \addpenalty{-\@highpenalty}%
    \vskip 1.0em \@plus\p@
    \setlength\@tempdima{1.5em}%
    \begingroup
      \parindent \z@ \rightskip \@pnumwidth
      \parfillskip -\@pnumwidth
      \leavevmode
      \advance\leftskip\@tempdima
      \hskip -\leftskip
      #1\nobreak\hfil \nobreak\hb@xt@\@pnumwidth{\hss #2}\par
      \penalty\@highpenalty
    \endgroup
  \fi}
}{}

\makeatother    

\begin{document}

\part{Lorem}
\chapter{Ipsum}

\end{document}

PS

Ich habe \@ifcommandIsBeingUsedes geändert \@ifcommandisbeingused, weil mir eingefallen ist, dass in der Sprache TeX/LaTeX Großbuchstaben üblicherweise nur in Makros auf „sehr niedriger Ebene“ verwendet werden.

Antwort1

Diese Lösung erstellt eine Datei \jobname.use, die protokolliert, welche Befehle verwendet wurden. Sie fügen der Liste einen Befehl hinzu, indem Sie Folgendes tun \ifused\<command>{<hook>}. Im Beispiel habe ich \patchcmdfrom verwendet, um from etoolboxzu entfernen . Wenn Sie dasselbe Kommando zweimal ausführen, treten Fehler auf.\bfseries\l@chapter\ifused

\documentclass{book}
\usepackage{xparse,etoolbox}
\ExplSyntaxOn

\file_if_exist:nT { \c_job_name_tl . use }
 { \file_input:n { \c_job_name_tl . use } }

\iow_new:N \l_cloud_used_stream
\iow_open:Nn \l_cloud_used_stream { \c_job_name_tl . use  }
\AtEndDocument { \iow_close:N \l_cloud_used_stream }

\cs_new_protected:Npn \cloud_is_used:N #1
 {
  \iow_now:Nx \l_cloud_used_stream
   { \exp_not:N \bool_set_true:c { l _ cloud _ if \cs_to_str:N #1 _ bool } }
 }

\NewDocumentCommand{\ifused}{mm}
 {
  \preto #1 { \cloud_is_used:N #1 }
  \iow_now:Nx \l_cloud_used_stream
   { \exp_not:N \bool_new:c { l _ cloud _ if \cs_to_str:N #1 _ bool } }
  \bool_if:cT { l _ cloud _ if \cs_to_str:N #1 _ bool } { #2 }
 }

\ExplSyntaxOff

\makeatletter
\ifused\part{\patchcmd\l@chapter{\bfseries}{}{}{}}
\makeatother

\begin{document}
\tableofcontents
\chapter{Before first part}
\part{First part}
\chapter{After first part}
\part{Second part}
\end{document}

Bildbeschreibung hier eingeben

verwandte Informationen