l3skip を setlength の引数として使用するにはどうすればよいですか?

l3skip を setlength の引数として使用するにはどうすればよいですか?

l3skip 式を に送信して回復するにはどうすればよいですかsetlength? または:length + stretch - shrinkを に変換するにはどうすればよいですかlength 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そのような計算として評価され、結果は になります(これはTeX によって/1.1exに変換され、 TeX の基礎となるレジスタを使用します)。ptspl3skip

代わりに、グルーを使用してスキップを入力する場合は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

スキップとは順序付けられた3つの値通常は次のように入力する

<length1> plus <length2> minus <length2>

最初の長さは標準単位(ptmmなどcm)のいずれかで指定され、他の2つは標準単位または

fil    fill    filll

は「無限グルーの順序」に対応します。スキップを合計する場合、加算はコンポーネントごとに行われ、無限グルーは有限グルーに勝ち、 の数が多いグルーは の数がl少ないグルーに勝ちます。 または のいずれか(または両方) が欠落しているl場合、3 つの値には暗黙的に が割り当てられます。長さは正確な順序で指定する必要があります。plusminus0pt

キーワード と はplusminus加算と減算の標準名に似ていますが、加算や減算を示すものではありません。

したがって、あなたが考えているようにスキップを入力するのは間違いです。1ex +0.2ex -0.1exプリミティブ割り当てによるスキップ指定では場違いです。

\skip0=1ex +0.2ex -0.1ex

plusTeX は後続のコードが見つからないとすぐに<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

成分ごとの加算の仕組みのためそして無限接着剤のルールに従って。

関連情報