¿Cómo uso l3skip como argumento para establecer longitud?

¿Cómo uso l3skip como argumento para establecer longitud?

¿Cómo recupero enviar expresiones l3skip a setlength? O: ¿Cómo convierto length + stretch - shrinka 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:Nnno 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.1excálculo se evalúa como tal, y el resultado es 1.1ex(que es convertido en pt/ sppor TeX, l3skipusa los registros subyacentes de TeX).

En cambio, si desea ingresar un salto con pegamento, aún debe ingresar plusy minusasí:

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

Con articleel tamaño de fuente cargado y predeterminado, esto dará como resultado que \c__douglas_par_skipse 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:Nlo 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, cmetc.); 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 lgana sobre los que tienen menos l. Si falta uno pluso (o ambos), el valor asignado en el triple es implícitamente . Las longitudes deben especificarse en el orden preciso.minus0pt

Las palabras clave plusy minussimplemente 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.1exestarí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 pluslo siguiente <length1>, detiene la tarea.

con la expl3tarea

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

Se utiliza un enfoque diferente, porque expl3las 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.

información relacionada