LaTeX: Redefiniendo comando actuó
Pregunta
Quiero redefinir el comando \part*
para que añada automáticamente una línea de contenidos. Esto resulta difícil ya que quiero volver a utilizar el comando original de \part*
dentro de mi version con estrella.
normalmente (es decir, para los comandos sin asterisco) Me gustaría hacerlo de esta manera:
\let\old@part\part
\renewcommand\part[2][]{
\old@part[#1]{#2}
… rest of definition}
Es decir, me gustaría guardar la definición original de \part
en \old@part
y usar eso.
Sin embargo, esto no funciona para comandos con estrellas ya que no definen un único lexema (a diferencia del comando \part
en el ejemplo anterior). Esto se reduce a la siguiente pregunta:? ¿Cómo puedo guardar un comando estrellado
Tenga en cuenta que ya sé cómo redefinir un comando estrellado en sí, usando el comando \WithSuffix
del paquete suffix
. Este no es el problema.
Solución
No hay un comando \part*
. Lo que sucede es el comando \part
echa un vistazo al siguiente carácter después de que (con \@ifstar
) y despachos a uno de los otros dos rutinas que hace el trabajo real en función de si hay un asterisco allí o no.
Referencia: TeX entrada de la FAQ comandos definidos con opciones *
Otros consejos
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\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
(Esto necesita la suffix
paquetes 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.