体彩14场胜负彩127期:LaTeX 技巧940:TeX 中作為參數的 dimen 和 skip

14场胜负彩走势 www.jufkwk.com.cn 接觸 TeX 稍久的用戶,應該多少都接觸過 \kern 和 \hskip 兩個命令。那么不知你是否會好奇,TeX 是如何獲取它們的參數的呢?要知道,像 I\kern37ptlike\hskip100ptcake 這種看上去奇奇怪怪的寫法,能正常工作,但 \hskip 2pt minuscule chances of error 這種看起來正常的寫法卻會報錯。

此篇介紹一下 TeX 中作為參數的 dimen 和 skip。

作為參數的 dimen

命令 \kern 的參數是 ?dimen?,因此我們以它為例。具體來說,TeX 在讀入 \kern 這個 token 之后,會先去尋找一個十進制分數(?decimal number?),而后尋找合法的單位(?unit of measure?)。在十進制分數和單位之間的空格都會被忽略。在單位之后,則有一個可選空格。

這里,十進制分數可以是:

  • 任意在 TeX 中合法的整數;

  • 任意合法的十進制分數(以句點或逗號作為整數與小數部分的分隔)。

特別說明一下以逗號作為整數與小數部分的分隔的問題。在中國,大多數時候,我們都以句點作為小數點,來分隔十進制分數的整數與小數部分;例如 1.25。同時,逗號通常用于大數記錄時的千分標記;例如 1, 000.25。但是,在部分國家(例如法國和德國),在表示十進制分數時,句點和逗號的用法正好顛倒。因此,1, 000.25 在法國和德國記作 1. 000,25。有趣的是,\kern , pt 是一個合法的鉛空。它會產生一個寬度為 0pt 的鉛空。這是因為,逗號在此被當做是小數點。而小數點前后的數字是零時,是可以省略的。

這里的單位,指得是 TeX 接受的,以兩個字符表達的長度單位。包括:pt, cm, mm, in, dd, pc, cc, bp, sp, em, ex。對于 pdfTeX 來說,還包括 px。如果 TeX 在讀入一個合法的十進制分數之后,沒有找到合法的單位,則會報錯:

! Illegal unit of measure (pt inserted).

因此,\kern37ptlike 是合法的。它與 \kern 37 pt like 等價。

作為參數的 skip

命令 \hskip 的參數是 ?skip?,因此我們以它為例。具體來說,TeX 在讀入 \hskip 這個 token 之后,會先和上述步驟一樣,尋找一個 ?dimen?,作為 ?skip? 的自然長度。而后,TeX 會在展開得到的 token list 當中繼續尋找 plus。如果 TeX 找到了 plus,則 TeX 又會去尋找一個 ?dimen?。不過,此時十進制分數之后,除了長度單位,還可以是 fil, fill 或者 filll。其中 fil(|l|ll) 之后的可選空格會被忽略。特別地,如果沒有找到 plus,TeX 也會繼續尋找 minus。找到 minus 之后的規則,就跟 plus 的情況一樣了。

因此,在 \hskip 2pt minuscule chances of errors 這個例子中,TeX 讀入 2pt 作為 \hskip 的自然長度。而后,盡管沒有找到 plus,但找到了 minus——它藏在 minuscule 這個單詞中。很不幸,此時在 minus 之后沒有一個合法的 ?dimen?,于是 TeX 會報錯。如果你不了解 TeX 讀入 ?skip? 的規則,那這種報錯還是蠻令人撓頭的。

為了避免這些問題,在 ?skip? 之后,果斷地加一個 \relax 總歸是個好主意。

bonus! 奇怪的 fil(|l|ll)

首先我們來看一個例子。你認為下面的寫法是合法的嗎?

\hskip 0pt plus 1 fil L l minus 2 fiLL

答案是合法的……

事實上,fill 和 filll 并不是 TeX 的關鍵字。真實情況是,fil 和 l 是 TeX 關鍵字。而 TeX 在讀入 fil 之后,會嘗試繼續尋找 l 這個關鍵字。如果找到了,就拼在一起,作為彈力更大的彈簧。此外,TeX 的關鍵字是不區分大小寫的。

因此,fil L l 就相當于 filll;而 fiLL 就相當于是 fill。也因此,如果你不了解這一點,下面的例子可能會讓你很傷腦筋——Let's Go 當中的 L 怎么不輸出了?

\hskip 0pt plus 1fil Let's go

通常,我們(霧)把這種情況稱之為「神秘的 L」。←_←

選自:https://liam.page/2018/12/10/dimen-and-skip-as-argument-in-TeX/  

分享到:
未經允許不得轉載:LaTeX 技巧940:TeX 中作為參數的 dimen 和 skip
已有 條意見

    最新文章

    加載中...
      本站提供專業LaTeX排版、咨詢、定制服務,請點擊下圖咨詢詳情


      全國首個精品的LaTeX視頻教程,大牛帶著你入門,讓LaTeX學習不再糾結,請點擊下圖咨詢詳情

      熱門評論

        聯系我們

        交流QQ群:91940767
        本站QQ號:343083553
        郵箱聯系[email protected]
        淘寶店鋪https://shop240512713.taobao.com/ 提供排版,模板定制,培訓,圖片處理,視頻教程等LaTeX服務。

        關注我們微信公眾號

        如果您投稿或者希望加入我們團隊,請發送您的簡歷到[email protected]。

        科技藝術的完美融合,專業精致的排版體驗

        聯系我們聯系我們