已編輯(2009 年 9 月 12 日 UTC 時間 2:45)

已編輯(2009 年 9 月 12 日 UTC 時間 2:45)

\def\box有時用作盒子結構的縮寫,那麼它的輸出有時與寄存器而不是 的輸出相同\def

這是問題所在。我什麼時候應該使用\box寄存器而不是\def?有沒有什麼具體情況,其中一種比另一種更好?


已編輯(2009 年 9 月 12 日 UTC 時間 2:45)

編輯的問題

是否存在\setbox其輸出命令對(不僅是\box0,還包括\copy0\unhbox0等)可以替換為最終擴展為框的巨集定義的情況?

如果有這種情況,有沒有什麼具體情況比另一種情況更好呢?

我想到的例子

情況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.}

我認為只要我用 呼叫盒子寄存器,上面的情況是一樣的\unhcopy0。但是,我想知道第一個是否比第二個更好,因為它可以節省記憶體。

案例2:

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

我想上面的情況也是一樣的,只要我用 呼叫盒子寄存器即可\copy0

案例3:

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

在這種情況下,\hbox包含命令,我懷疑我是否可以說它們是相同的。

不幸的是,我無法向您展示一個包含一些命令的足夠複雜的範例。也許,如果上面的範例包含條件語法(如 )\if、重複語法(如 )\loop...\repeat,則其中一個不能取代另一個。我特別想了解這樣一個案例。

答案1

僅有的盒子和巨集(用 定義)之間的共同點\def是它們儲存東西。時期。


巨集儲存任意 TeX 程式碼,以便出於多種原因在文件中重複使用。使用宏,您可以透過簡化書寫來製作任何東西阿諾德·施瓦辛格的名字為模擬 TeX 本身,假設您有足夠的巨集來做正確的事情。

另一方面,盒子存儲排版文字。只是。

對於足夠簡單的用法,兩者都可以似乎做同樣的事情。例如:

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

將排版:

在此輸入影像描述

然而,在上面的例子中,\box0和之間的基本差異在於\arnold\box0已經在框中排版名稱,該指令\box0將其放置在頁面中。\arnold另一方面,被擴展為一系列字符,然後進行排版和發生了具有相同的輸出。

為了看到差異,假設我在設定框之後但在寫出來之前更改了字體:

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

輸出將是:

在此輸入影像描述

看看盒子裡的內容如何沒有使用粗體字體。那是因為當時已經排版好了,盒子只是用過的

另一個區別是,一旦文字在框中排版,您就可以測量它:

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

在此輸入影像描述

你可以嘗試用宏來做到這一點,但它不起作用。

然而,使用宏,您可以擁有“動態內容”,而使用框,如上面字體更改示例中所述,一切都在您使用時固定\setbox。對於(一個非常簡單的)例子:

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

這是用盒子做不到的。


因此,在選擇其中一種或另一種時,您必須查看要儲存的資料類型,然後進行選擇。僅對於微不足道的情況,例如第一個示例,選擇可能不明確,但是如果您對示例進行了一點點更改(例如添加字體更改),那麼某種方式或另一種方式都會是錯誤的。

簡而言之,巨集用於 TeX 程式碼,而框用於排版文字。選擇適合具體情況的任何內容。

相關內容