EDITADO (12/09/09 UTC 2:45)

EDITADO (12/09/09 UTC 2:45)

\defa veces se usa como abreviatura de una construcción de caja, entonces su salida a veces es la misma que la salida con un \boxregistro en lugar de \def.

Aquí está la pregunta. ¿Cuándo debería utilizar un \boxregistro en lugar de \def? ¿Hay alguna situación específica en la que una sea mejor que la otra?


EDITADO (12/09/09 UTC 2:45)

Pregunta editada

¿Hay algún caso en el que \setboxsu par de comandos de salida (no solo \box0, sino también \copy0, \unhbox0etc.) puedan reemplazarse por una definición de macro que eventualmente se expande como un cuadro?

Si existiera tal caso, ¿hay alguna situación específica en la que una sea mejor que la otra?

Ejemplos que pensé

Caso 1:

\def\excuse{I should have made my question more clearer before the post.}
\setbox0=\hbox{I should have made my question more clearer before the post.}

Creo que el caso anterior es el mismo siempre que llame al cuadro de registro con \unhcopy0. Sin embargo, me pregunto si el primero es mejor que el segundo porque puede ahorrar memoria.

Caso2:

\def\excuse{\hbox{I should have made my question more clearer before the post.}}
\setbox0=\hbox{I should have made my question more clearer before the post.}

Creo que el caso anterior también es el mismo siempre que llame al cuadro de registro con \copy0.

Caso3:

\def\myhrulefill{\line{\leaders\hrule\hfill}}
\setbox0=\line{\leaders\hrule\hfill}

en este caso, \hboxcontiene comandos y sospecho que puedo decir que son iguales o no.

Desafortunadamente, no puedo mostrarles un ejemplo lo suficientemente complejo que contenga algunos comandos. Quizás, si los ejemplos anteriores contenían sintaxis condicional como \if, sintaxis de repetición como \loop...\repeat, uno no puede ser una alternativa del otro. Me gusta especialmente conocer un caso así.

Respuesta1

ElsoloLo que tienen en común un cuadro y una macro (definida con \def) es que almacenan cosas. Período.


Una macro almacena código TeX arbitrario para reutilizarlo en el documento por una gran cantidad de razones. Con las macros puedes hacer cualquier cosa, desde simplificar la escrituraArnold Schwarzeneggerel nombre deemulando el propio TeX, dado que tienes suficientes macros haciendo las cosas correctas.

Un cuadro, por otro lado, almacena texto tipográfico. Solo eso.

Para usos bastante simples, ambos puedenparecerhacer lo mismo. Por ejemplo:

\setbox0=\hbox{Arnold Schwarzenegger}
\def\arnold{Arnold Schwarzenegger}
Here's \box0{} and \arnold{} again.

escribirá:

ingrese la descripción de la imagen aquí

sin embargo, la diferencia básica entre \box0y \arnold, en el ejemplo anterior, es que \box0teníayaescriba el nombre en el cuadro y el comando \box0simplemente lo presentará en la página. \arnold, por otro lado, se expandió a una secuencia de caracteres que luego se compuso ysucediópara tener la misma salida.

Para ver la diferencia, supongamos que cambio la fuente después de configurar el cuadro, pero antes de escribirlo:

\setbox0=\hbox{Arnold Schwarzenegger}
\def\arnold{Arnold Schwarzenegger}
\bf Here's \box0{} and \arnold{} again.

la salida será:

ingrese la descripción de la imagen aquí

Vea cómo el contenido de la caja no utiliza la fuente en negrita. Eso es porque ya estaba tipografiado en ese momento, y la caja solo estabausado.

Otra diferencia es que una vez que el texto está tipográfico en un cuadro puedes medirlo:

\setbox0=\hbox{Arnold Schwarzenegger}
Here's \copy0{} typeset in a \the\wd0{} box.

ingrese la descripción de la imagen aquí

Puedes intentar hacerlo con una macro, pero no funcionará.

Con una macro, sin embargo, puedes tener “contenido dinámico”, mientras que con la caja, como se explica en el ejemplo de cambio de fuente anterior, todo se fija en el momento en que la usas \setbox. Por ejemplo (muy simple):

\def\arnold#1{Arnold #1}
Here's \arnold{Schwarzenegger} and another \arnold{Foo}.

lo cual no se puede hacer con cajas.


Así que a la hora de elegir uno u otro tienes que fijarte en qué tipo de datos estás intentando almacenar y luego elegir. Sólo en casos triviales, como el primer ejemplo, la elección podría ser ambigua y, sin embargo, si cambia el ejemplo un poquito (como agregar un cambio de fuente), entonces de una forma u otra será incorrecta.

En resumen, las macros son para código TeX y los cuadros son para texto tipográfico. Elija lo que sea adecuado para la situación específica.

información relacionada