LaTeX: переопределение команды starred

Я хочу, чтобы переопределить part* команда, чтобы она автоматически добавляла строку содержимого. Это оказывается сложным, так как я хочу повторно использовать оригинал part* команда внутри моей звездной версии.

обычно (т. е. для незапятнанных команд) я бы сделал это так:

letold@partpart
renewcommandpart[2][]{
  old@part[#1]{#2}
  … rest of definition}

то есть, я бы сохранил исходное определение part на old@part и использовать это.

однако это не работает для звездных команд, поскольку они не определяют ни одной лексемы (в отличие от В приведенном выше примере). Это сводится к следующему вопросу:--15-->как я могу сохранить звездную команду?

обратите внимание, что я уже знаю, как переопределить звездную команду, используя С suffix пакета. Проблема не в этом.

2 ответов


нет . Что происходит это \part команда смотрит на следующий символ после него (с \@ifstar) и отправляет в одну из двух других подпрограмм, которая выполняет фактическую работу, основанную на том, есть ли там звездочка или нет.

http://www.tex.ac.uk/cgi-bin/texfaq2html?label=cmdstar


благодаря ответу @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

(для этого нужны пакеты suffix и ifthen.)

теперь мы можем использовать:

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