LaTeX: comando Redefining estrelou
Pergunta
Eu quero redefinir o comando \part*
para que ele adiciona automaticamente uma linha de conteúdo. Isto prova difícil, pois eu quero reutilizar o original comando \part*
dentro da minha versão estrelada.
Normalmente (ou seja, para os comandos sem estrela) eu faria isso como este:
\let\old@part\part
\renewcommand\part[2][]{
\old@part[#1]{#2}
… rest of definition}
Isto é, eu iria salvar a definição original de \part
em \old@part
e usar isso.
No entanto, isso não funciona para comandos com estrela, uma vez que não definem um único lexema (ao contrário do comando \part
no exemplo acima). Isto resume-se a seguinte pergunta:? Como posso salvar um comando estrelada
Observe que eu já sei como se redefinir um comando estrelada, usando o comando \WithSuffix
do pacote suffix
. Este não é o problema.
Solução
Não há nenhum comando \part*
. O que acontece é o comando \part
lança um olhar sobre o próximo caractere após ele (com \@ifstar
) e despacha para uma das duas outras rotinas que faz o trabalho real com base em se há um asterisco lá ou não.
Referência: TeX FAQ entrada comandos definidos com opções *
Outras dicas
Graças a resposta de @ smg, eu remendada uma solução que funciona perfeitamente. Aqui está a fonte completo, juntamente com comentários explicativos:
% 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
(Este precisa do suffix
pacotes e ifthen
.)
Agora, podemos usá-lo:
\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.