Условные операторы — выполняют что-либо, если заданная команда используется в документе.

Условные операторы — выполняют что-либо, если заданная команда используется в документе.

Возможно ли иметь условное наклонение, которое позволяет нам что-то делать?еслиданная команда используется вдокумент? Например, \partкоманда будет выглядеть так:

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

Разъяснение

Следующий код позволит избежать \bfseriesзаписи главы в оглавлении, поскольку \partкоманда используется вдокумент.

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

ПС

Я изменил \@ifcommandIsBeingUsedна \@ifcommandisbeingused, потому что вспомнил, что в языке TeX/LaTeX принято использовать заглавные буквы только в макросах «очень низкого уровня».

решение1

Это решение создает файл \jobname.use, который отслеживает, какие команды были использованы. Вы добавляете команду в список, выполняя \ifused\<command>{<hook>}. В примере я использовал \patchcmdиз etoolboxдля удаления \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}

введите описание изображения здесь

Связанный контент