ЛАТЕКС: Переопределение звездообразной команды

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

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

\let\old@part\part
\renewcommand\part[2][]{
  \old@part[#1]{#2}
  … rest of definition}

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

Однако это не работает на звездообразные команды, так как они не определяют единственную лексему (в отличие от этого, \part команда в примере выше). Это сводится к следующему вопросу: Как я могу сохранить звездообразную команду?

Заметьте, что я уже знаю, как переопределить саму звездообразную команду, с помощью \WithSuffix команда от suffix пакет. Это не проблема.

11
задан Konrad Rudolph 10 March 2010 в 16:23
поделиться

2 ответа

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

Ссылка: TeX FAQ Команды, определенные с помощью * options

10
ответ дан 3 December 2019 в 08:03
поделиться

Благодаря ответу @ 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.
5
ответ дан 3 December 2019 в 08:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: