如何跳過\newsavebox?

如何跳過\newsavebox?

我經常嘗試一些東西,並進行一些內省,以找出為什麼事情不按它們的方式工作。使用盒子並獲取它們的寬度、高度和深度是其中不可或缺的一部分。

由於這是臨時的 hacky 東西,我想知道我是否已經走了很長的路\newsavebox{\blah}\setbox{\blah}{content}。 IIRC 框就像暫存器一樣,並且有編號。所以我想我可以跳過\newsavebox並且只是\savebox{16}{content}

以上猜測正確嗎?

如果它確實以這種方式工作,那麼使用相對節省的數字是多少,即

Latex 如何給盒子編號?

0-255 或 255-0。前幾天我注意到框 0 和 255 有一些特殊意義,最好不要管。

是否有用於此類目的的預定義框,其中永遠不會保存您想要稍後重用的內容?

答案1

LaTeX 的框分配系統繼承自 plain TeX,因此相同的規則適用於這兩種情況。與其他寄存器一樣,盒子也有編號,正如您所觀察到的,可以通過這種方式尋址。實際上這是原始語法,而不是 LaTeX 語法,所以

\setbox0=\hbox{content}

可用在較低的水平,但是

\savebox{0}{content}

實在是不值得鼓勵!

Knuth 提出了一種方案,使一定數量的暫存器可用作可以按數字存取的暫存空間。按照慣例,從0到9的偶數寄存器可以用作暫存空間並在本地設置,而相同範圍內的奇數寄存器是全域暫存空間。然而,除了非常低的等級之外,更常見的是使用命名的暫存空間:\@tempboxa例如,在 LaTeX 中可用。

您可以直接按編號使用任何寄存器,但您可能會遇到麻煩,因為其他代碼可能為相同寄存器分配了名稱,並且不知道您在做什麼。如果您希望在節省材料方面具有一定的靈活性而不創建新的框名稱,我強烈建議您定義自己的“池”框。

請注意,這裡高級 LaTeX 語法的全部要點是為文件作者提供工具,通常為材料提供專用的命名空間是迄今為止最好的方法。

相關內容