Nuestro equipo de expertos luego de varios días de trabajo y de recopilar de datos, han obtenido la respuesta, deseamos que resulte útil para ti en tu proyecto.
Solución:
Trataré primero con el concepto general de TeX, luego por qué es importante en la documentación de esos expl3
funciones
Una dimensión interna (o conteo interno o lo que sea) es algo que ha sido analizado por TeX y ahora está almacenado en la forma correcta. As TeX ‘sabe’ que una dimensin interna es una dimensión válida, y no tiene que ‘buscar’ ningún otro material. Por el contrario, una dimensión externa (etc.) es algo que se compone de tokens discretos y TeX tendría que volver a analizarlo para usarlo. Así cuando nosotros escribe12.0pt
estamos dando un externo representación (TeX tendría que analizarlo para saber que es una dimensión válida), pero después
newdimenmydimen
mydimen=12pt %
Puedo usar mydimen
y TeX lo hace no Necesito analizar cualquier cosa: mydimen
tiene una dimensión interna.
¿Porque es esto importante? Se trata de las reglas de análisis de TeX, en particular que TeX permite un espacio final opcional después de dimensiones, enteros, etc., y lo que es más importante, con una representación externa, TeX no deja de analizar hasta que encuentra algo que no “encaja”. Por ejemplo
deffoo123
newcountfooint
fooint=123 %
newcounttestint
%%%
testint=foo 456 %
showthetestint
testint=fooint 456 %
showthetestint
verás que el primer caso da un resultado erróneo: tenemos un macro que simplemente se expande a 123
, y TeX sigue buscando un número entero hasta que llegamos al espacio opcional. Por el contrario, con una representación de conteo interno, no se trata de analizar: fooint
es123
.
Él key El punto es que una representación interna es ‘más segura’ de usar (además de más rápida): nunca hay duda de dónde termina.
¿Cómo se relaciona esto con expl3
? Algo como dim_eval:n
se utiliza para tomar una expresión y convertirla en una dimensión. Sin embargo, resulta conveniente permitir que también sea solo tipografiado, almacenado por expansión en un macro (tl
), etc. Para hacer eso, tenemos que arreglar que la evaluación resulte en un externo representación, no una interno uno. Eso significa que estas funciones se comportan como almacenar un valor como un macro: tienes que ver la terminación.
Por todo ‘puro’ expl3
el uso no es un problema, ya que tenemos la terminación correcta en los lugares correctos. Pero si combina el uso de estas funciones con la programación TeX más clásica, necesita saber cómo se comportarán. La respuesta de egreg muestra esto muy bien.
Para aquellos que quieren los detalles de TeX, dim_eval:n
es en términos primitivos
thedimexpr #1relax
mientras que si queremos terminar con una representación interna solo queremos
dimexpr #1relax
Sin embargo, eso no se puede usar en composición tipográfica o (con éxito) dentro de un x
-tipo de expansión, por lo tanto, no es adecuado para la definición que queremos.
Considere el siguiente ejemplo
documentclassarticle
usepackageexpl3
ExplSyntaxOn
cs_set_eq:NN dimeval dim_eval:n
ExplSyntaxOff
newlengthmylen
begindocument
Do an assignment mylen=dimeval3pt+1cm plus something else.
enddocument
lo que genera un error
! Missing number, treated as zero.
s
l.12 ...assignment mylen=dimeval3pt+1cm plus s
omething else.
Esto es precisamente a lo que se hace referencia en interface3
.
Un
es cualquier dimen
registro o cualquier registro interno que almacene una longitud (rígida), como parindent
; con extensiones e-TeX, también dimexpr
es una instancia de
.
Otro dato importante es que newlength
asigna un skip
regístrese, por lo que TeX esperará plus
o minus
especificaciones; esto no ocurre cuando setlength
se utiliza, porque el macro proporciona el adecuado relax
terminación.
Tienes la opción de animar nuestro estudio escribiendo un comentario y dejando una valoración te damos las gracias.