
¿Cómo recupero enviar expresiones l3skip a setlength
? O: ¿Cómo convierto length + stretch - shrink
a 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
Respuesta1
Convirtiendo mis comentarios en una respuesta:
Lo más probable es que la sintaxis de entrada \skip_const:Nn
no sea la que desea. Los saltos en la expresión se evalúan, por lo que puede usar cálculos simples, y su 1ex + 0.2ex - 0.1ex
cálculo se evalúa como tal, y el resultado es 1.1ex
(que es convertido en pt
/ sp
por TeX, l3skip
usa los registros subyacentes de TeX).
En cambio, si desea ingresar un salto con pegamento, aún debe ingresar plus
y minus
así:
\skip_const:Nn \c__douglas_par_skip { 1ex plus 0.2ex minus 0.1ex }
Con article
el tamaño de fuente cargado y predeterminado, esto dará como resultado que \c__douglas_par_skip
se establezca en 4.30554pt plus 0.86108pt minus 0.43057pt
.
Ahora, si desea asignar esto a una longitud de LaTeX2e, simplemente puede usarlo, \skip_use:N
lo que dará como resultado que se inserte la cadena anterior. Entonces lo siguiente hace lo que quieres:
\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
huellas dactilares
> 4.30554pt plus 0.86108pt minus 0.43057pt.
l.7 \showthe \douglaslength
a la terminal.
Respuesta2
Un salto es untriple ordenado de valores, ingresado convencionalmente como
<length1> plus <length2> minus <length2>
La primera longitud se especifica con una de las unidades estándar ( pt
, mm
, cm
etc.); los otros dos se pueden especificar con una unidad estándar o con
fil fill filll
correspondiente al “orden del pegamento infinito”. Al sumar saltos, la suma se realiza por componentes, donde los pegamentos infinitos ganan sobre los finitos y el que tiene más l
gana sobre los que tienen menos l
. Si falta uno plus
o (o ambos), el valor asignado en el triple es implícitamente . Las longitudes deben especificarse en el orden preciso.minus
0pt
Las palabras clave plus
y minus
simplemente se parecen a los nombres estándar para suma y resta, pero de ninguna manera denotan suma o resta.
Por lo tanto, es incorrecto ingresar un salto como cree: 1ex +0.2ex -0.1ex
estaría fuera de lugar en una especificación de salto con la asignación primitiva
\skip0=1ex +0.2ex -0.1ex
porque tan pronto como TeX no ve plus
lo siguiente <length1>
, detiene la tarea.
con la expl3
tarea
\skip_const:Nn \c__par_skip { 1ex +0.2ex -0.1ex}
Se utiliza un enfoque diferente, porque expl3
las asignaciones permiten "expresiones". Pero los saltos deben introducirse de todos modos de la manera convencional. Con esa expresión simplemente obtienes el equivalente a
\skip0=1.1ex
¿Cómo funcionan las “expresiones omitidas”? Supongamos que tienes
\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
entonces obtienes
\l_dmt_c_skip=36.0pt plus 1.0fil minus 3.0pt
debido a cómo funciona la suma de componentesypor las reglas sobre pegamento infinito.