Como uso l3skip como argumento para setlength?

Como uso l3skip como argumento para setlength?

Como recupero enviar expressões l3skip para setlength? Ou: Como faço para converter length + stretch - shrinkpara 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

Responder1

Transformando meus comentários em uma resposta:

Sua sintaxe de entrada \skip_const:Nnprovavelmente não é o que você deseja. Os saltos na expressão são avaliados, para que você possa usar cálculos simples, e your 1ex + 0.2ex - 0.1exé avaliado como tal cálculo, e o resultado é 1.1ex(que é transformado em pt/ sppelo TeX, l3skipusa os registros subjacentes do TeX).

Em vez disso, se você quiser inserir um salto com cola, você ainda deve inserir plusalgo minusassim:

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

Com articlecarregado e o tamanho da fonte padrão, isso resultará na \c__douglas_par_skipdefinição como 4.30554pt plus 0.86108pt minus 0.43057pt.

Agora, se você quiser atribuir isso a um comprimento LaTeX2e, você pode simplesmente usar \skip_use:Nwhich resultará na inserção da string acima. Então o seguinte faz o que você deseja:

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

MWE completo:

\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

estampas

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

para o terminal.

Responder2

Um salto é umtriplo ordenado de valores, convencionalmente inserido como

<length1> plus <length2> minus <length2>

O primeiro comprimento é especificado com uma das unidades padrão ( pt, e mmassim cmpor diante); os outros dois podem ser especificados com uma unidade padrão ou com

fil    fill    filll

correspondendo a “ordem de cola infinita”. Ao somar saltos, a adição é componente a componente, onde colas infinitas vencem as finitas e aquela com mais lganha sobre aquelas com menos l. Se um plusou minusestiver faltando (ou ambos), o valor atribuído no triplo será implicitamente 0pt. Os comprimentos devem ser especificados na ordem precisa.

As palavras-chave plusapenas minusse assemelham aos nomes padrão para adição e subtração, mas de forma alguma denotam adição ou subtração.

Portanto, é errado inserir um salto como você pensa: 1ex +0.2ex -0.1exestaria fora de lugar em uma especificação de salto com a atribuição primitiva

\skip0=1ex +0.2ex -0.1ex

porque assim que o TeX não vê pluso seguinte <length1>, ele interrompe a atribuição.

Com a expl3tarefa

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

é utilizada uma abordagem diferente, porque expl3as atribuições permitem “expressões”. Mas os saltos devem, de qualquer forma, ser inseridos da maneira convencional padrão. Com essa expressão você simplesmente obtém o equivalente a

\skip0=1.1ex

Como funcionam as “expressões de salto”? Suponha que você tenha

\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

então você consegue

\l_dmt_c_skip=36.0pt plus 1.0fil minus 3.0pt

por causa de como a adição de componentes funcionaepelas regras sobre cola infinita.

informação relacionada