Condicionales: hacer algo, si se utiliza un comando determinado en el documento

Condicionales: hacer algo, si se utiliza un comando determinado en el documento

¿Es posible tener un condicional que nos permita hacer algo?sise está utilizando un comando determinado en eldocumento? Por ejemplo, el \partcomando sería:

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

Aclaración

Lo siguiente evitaría la \bfseriesentrada del capítulo en el TOC, porque el \partcomando se está utilizando en eldocumento.

\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}

PD

Cambié \@ifcommandIsBeingUseda \@ifcommandisbeingusedporque recordé que en el lenguaje TeX/LaTeX es común usar letras mayúsculas solo en macros de "muy bajo nivel".

Respuesta1

Esta solución crea un archivo \jobname.useque rastrea qué comandos se han utilizado. Agrega un comando a la lista haciendo \ifused\<command>{<hook>}. En el ejemplo que usé \patchcmdfrom etoolboxpara eliminar \bfseriesfrom \l@chapter. Hacer \ifuseddos veces el mismo comando producirá errores.

\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}

ingrese la descripción de la imagen aquí

información relacionada