2010-03-10 27 views
9

Quiero redefinir el comando \part* para que agregue automáticamente una línea de contenido. Esto resulta difícil ya que quiero reutilizar el comando original \part* dentro de mi versión destacada.LaTeX: redefinición del comando con estrella

Normalmente (es decir, para los comandos sin asterisco) Me gustaría hacerlo de esta manera:

\let\[email protected]\part 
\renewcommand\part[2][]{ 
    \[email protected][#1]{#2} 
    … rest of definition} 

Eso es, me gustaría guardar la definición original de \part en \[email protected] y usar eso.

Sin embargo, esto no funciona para los comandos con estrella porque no definen un solo lexema (a diferencia del comando \part en el ejemplo anterior). Esto se reduce a la siguiente pregunta: ¿Cómo puedo guardar un comando con estrella?

Observe que ya sé cómo redefinir un comando con estrella, utilizando el comando \WithSuffix del paquete suffix. Este no es el problema.

Respuesta

8

No hay ningún comando \part*. Lo que sucede es que el comando \part eche un vistazo al siguiente carácter después de él (con \@ifstar) y se distribuye a una de las otras dos rutinas que hace el trabajo real en función de si hay un asterisco allí o no.

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

+0

“No hay' \ parte * 'comando." - Lo sé. :-(De lo contrario, no tendría este problema. –

+0

¿Entonces redefine '\ part' como tiene y maneje ambas versiones? O explore la fuente LaTeX y redefina el código subyacente' '\ part'? –

+0

... pero esto fue la pista vital. Lo tengo funcionando ahora. Publicaremos la solución en breve. –

3

Gracias a la respuesta de @ SMG, he improvisado una solución que funciona a la perfección. Aquí está el código fuente completo, junto con comentarios explicativos:

% If this is in *.tex file, uncomment the following line. 
%\makeatletter 

% Save the original \part declaration 
\let\[email protected]\part 

% To that definition, add a new special starred version. 
\WithSuffix\def\part*{ 
    % Handle the optional parameter. 
    \ifx\next[% 
    \let\next\[email protected]@star% 
    \else 
    \def\next{\[email protected]@star[]}% 
    \fi 
    \next} 

% The actual macro definition. 
\def\[email protected]@star[#1]#2{ 
    \ifthenelse{\equal{#1}{}} 
    {% If the first argument isn’t given, default to the second one. 
    \def\[email protected]@short{#2} 
    % Insert the actual (unnumbered) \part header. 
    \[email protected]*{#2}} 
    {% Short name is given. 
    \def\[email protected]@short{#1} 
    % Insert the actual (unnumbered) \part header with short name. 
    \[email protected]*[#1]{#2}} 

    % Last, add the part to the table of contents. Use the short name, if provided. 
    \addcontentsline{toc}{part}{\[email protected]@short} 
} 

% If this is in *.tex file, uncomment the following line. 
%\makeatother 

(. Esto necesita los paquetes suffix y ifthen)

Ahora, podemos utilizarlo:

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