
Como recupero enviar expressões l3skip para setlength
? Ou: Como faço para converter length + stretch - shrink
para 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:Nn
provavelmente 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
/ sp
pelo TeX, l3skip
usa os registros subjacentes do TeX).
Em vez disso, se você quiser inserir um salto com cola, você ainda deve inserir plus
algo minus
assim:
\skip_const:Nn \c__douglas_par_skip { 1ex plus 0.2ex minus 0.1ex }
Com article
carregado e o tamanho da fonte padrão, isso resultará na \c__douglas_par_skip
definiçã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:N
which 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 mm
assim cm
por 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 l
ganha sobre aquelas com menos l
. Se um plus
ou minus
estiver faltando (ou ambos), o valor atribuído no triplo será implicitamente 0pt
. Os comprimentos devem ser especificados na ordem precisa.
As palavras-chave plus
apenas minus
se 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.1ex
estaria 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ê plus
o seguinte <length1>
, ele interrompe a atribuição.
Com a expl3
tarefa
\skip_const:Nn \c__par_skip { 1ex +0.2ex -0.1ex}
é utilizada uma abordagem diferente, porque expl3
as 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.