Возможно ли иметь условное наклонение, которое позволяет нам что-то делать?еслиданная команда используется вдокумент? Например, \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}