如何使用 l3skip 作為 setlength 的參數?

如何使用 l3skip 作為 setlength 的參數?

如何恢復發送 l3skip 表達式到setlength?或:我如何轉換length + stretch - shrinklength plus stretch minus shrink\relax

\ExplSyntaxOn
\skip_const:Nn \c__par_skip    { 1ex  +0.2ex     -0.1ex   }
\setlength {\c__par_skip}   % NOPE!
\exp_args:Nv \setlength {\skip_use:N \c__par_skip}   % ALSO NO: skip_use:N evaluates

答案1

將我的評論轉化為答案:

您的輸入語法\skip_const:Nn很可能不是您想要的。表達式中的跳過被評估,因此您可以使用簡單的計算,並且您1ex + 0.2ex - 0.1ex被評估為這樣的計算,結果是(由TeX1.1ex轉換為pt/ ,使用TeX的底層寄存器)。spl3skip

相反,如果你想用膠水輸入跳過,你仍然應該輸入plusminus如下所示:

\skip_const:Nn \c__douglas_par_skip { 1ex plus 0.2ex minus 0.1ex }

加載article並使用預設字體大小後,這將導致\c__douglas_par_skip設定為4.30554pt plus 0.86108pt minus 0.43057pt.

現在,如果您想將其分配給 LaTeX2e 長度,您可以簡單地使用\skip_use:N這將導致插入上述字串。因此,以下內容可以滿足您的要求:

\newlength \douglaslength
\setlength \douglaslength { \skip_use:N \c__douglas_par_skip }

完整的 MWE:

\documentclass{article}

\ExplSyntaxOn
\skip_const:Nn \c__douglas_par_skip {1ex plus 0.2ex minus 0.1ex}
\newlength \douglaslength
\setlength \douglaslength { \skip_use:N \c__douglas_par_skip }
\showthe \douglaslength
\stop

印刷

> 4.30554pt plus 0.86108pt minus 0.43057pt.
l.7 \showthe \douglaslength

到航站樓。

答案2

跳過是一個有序三元組值,通常輸入為

<length1> plus <length2> minus <length2>

第一個長度以標準單位之一指定(ptmmcm);另外兩個可以用標準單位或用

fil    fill    filll

對應於「無限膠水的順序」。當求和跳過時,加法是按分量進行的,其中無限膠合勝過有限膠合,並且具有更多的膠合l勝過具有較少的膠合l。如果 或 之一plus缺失minus(或兩者都缺失),則三元組中的指定值隱含為0pt。必須以精確的順序指定長度。

關鍵字plusandminus只是類似加法和減法的標準名稱,但它們絕不表示加法或減法。

因此,按照您的想法輸入跳過是錯誤的:1ex +0.2ex -0.1ex在帶有原始賦值的跳過規範中會不合適

\skip0=1ex +0.2ex -0.1ex

因為一旦 TeX 沒有看到plus後續<length1>,它就會停止分配。

隨著expl3作業

\skip_const:Nn \c__par_skip { 1ex +0.2ex -0.1ex}

使用不同的方法,因為expl3賦值允許“表達式”。但無論如何必須以標準常規方式輸入跳過。透過該表達式,您只需獲得相當於

\skip0=1.1ex

“跳過表達式”如何運作?假設你有

\skip_new:N \l_dmt_a_skip
\skip_new:N \l_dmt_b_skip
\skip_new:N \l_dmt_c_skip

\skip_set:Nn \l_dmt_a_skip { 12pt plus 6pt minus 3pt }
\skip_set:Nn \l_dmt_b_skip { 24pt plus 1fil }
\skip_set:Nn \l_dmt_c_skip { \l_dmt_a_skip + \l_dmt_b_skip }

\skip_show:N \l_dmt_c_skip

然後你得到

\l_dmt_c_skip=36.0pt plus 1.0fil minus 3.0pt

因為以分量加法的工作原理根據無限膠水的規則。

相關內容