Я хочу переопределить \part*
управляйте так, чтобы это автоматически добавило строку содержания. Это оказывается трудным, так как я хочу снова использовать оригинал \part*
управляйте в моей звездообразной версии.
Обычно (т.е. для незвездообразных команд) я сделал бы это как это:
\let\old@part\part
\renewcommand\part[2][]{
\old@part[#1]{#2}
… rest of definition}
Таким образом, я сохранил бы исходное определение \part
в \old@part
и используйте это.
Однако это не работает на звездообразные команды, так как они не определяют единственную лексему (в отличие от этого, \part
команда в примере выше). Это сводится к следующему вопросу: Как я могу сохранить звездообразную команду?
Заметьте, что я уже знаю, как переопределить саму звездообразную команду, с помощью \WithSuffix
команда от suffix
пакет. Это не проблема.
Нет команды \ part *
. Происходит следующее: команда \ part
смотрит на следующий за ней символ (с \ @ ifstar
) и отправляет одну из двух других подпрограмм, которая выполняет фактическую работу в зависимости от того, есть там звездочка или нет.
Ссылка: TeX FAQ Команды, определенные с помощью * options
Благодаря ответу @ smg я собрал решение, которое отлично работает. Вот полный исходный код с пояснительными комментариями:
% If this is in *.tex file, uncomment the following line.
%\makeatletter
% Save the original \part declaration
\let\old@part\part
% To that definition, add a new special starred version.
\WithSuffix\def\part*{
% Handle the optional parameter.
\ifx\next[%
\let\next\thesis@part@star%
\else
\def\next{\thesis@part@star[]}%
\fi
\next}
% The actual macro definition.
\def\thesis@part@star[#1]#2{
\ifthenelse{\equal{#1}{}}
{% If the first argument isn’t given, default to the second one.
\def\thesis@part@short{#2}
% Insert the actual (unnumbered) \part header.
\old@part*{#2}}
{% Short name is given.
\def\thesis@part@short{#1}
% Insert the actual (unnumbered) \part header with short name.
\old@part*[#1]{#2}}
% Last, add the part to the table of contents. Use the short name, if provided.
\addcontentsline{toc}{part}{\thesis@part@short}
}
% If this is in *.tex file, uncomment the following line.
%\makeatother
(Для этого нужны пакеты с суффиксом
и , если затем
.)
Теперь мы можем использовать его:
\part*{Example 1}
This will be an unnumbered part that appears in the TOC.
\part{Example 2}
Yes, the unstarred version of \verb/\part/ still works, too.