
Wie kann ich das Senden von L3skip-Ausdrücken an wiederherstellen setlength
? Oder: Wie konvertiere ich length + stretch - shrink
in 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
Antwort1
Meine Kommentare in eine Antwort umwandeln:
Ihre Eingabesyntax für \skip_const:Nn
ist höchstwahrscheinlich nicht die gewünschte. Die Sprünge im Ausdruck werden ausgewertet, sodass Sie einfache Berechnungen verwenden können. Ihr 1ex + 0.2ex - 0.1ex
wird als eine solche Berechnung ausgewertet und das Ergebnis ist (das von TeX in / 1.1ex
umgewandelt wird und die zugrunde liegenden Register von TeX verwendet).pt
sp
l3skip
Wenn Sie stattdessen einen Sprung mit Kleber eingeben möchten, sollten Sie trotzdem plus
Folgendes eingeben minus
:
\skip_const:Nn \c__douglas_par_skip { 1ex plus 0.2ex minus 0.1ex }
Wenn article
geladen und die Standardschriftgröße eingestellt ist, wird dies dazu führen, dass \c__douglas_par_skip
auf eingestellt wird 4.30554pt plus 0.86108pt minus 0.43057pt
.
Wenn Sie dies nun einer LaTeX2e-Länge zuweisen möchten, können Sie einfach verwenden, \skip_use:N
wodurch die obige Zeichenfolge eingefügt wird. Das Folgende bewirkt also, was Sie möchten:
\newlength \douglaslength
\setlength \douglaslength { \skip_use:N \c__douglas_par_skip }
Komplettes MWE:
\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
druckt
> 4.30554pt plus 0.86108pt minus 0.43057pt.
l.7 \showthe \douglaslength
zum Terminal.
Antwort2
Ein Skip ist eingeordnetes Wertetripel, herkömmliche Eingabe als
<length1> plus <length2> minus <length2>
Die erste Länge wird mit einer der Standardeinheiten ( pt
, mm
, cm
usw.) angegeben; die anderen beiden können mit einer Standardeinheit oder mit
fil fill filll
entsprechend der „Reihenfolge des unendlichen Klebers“. Beim Summieren von Sprüngen erfolgt die Addition komponentenweise, wobei unendliche Kleber gegenüber endlichen Klebern siegen und der mit mehr l
's gegenüber dem mit weniger l
's siegt. Wenn eines plus
oder minus
fehlt (oder beides), ist der zugewiesene Wert im Tripel implizit 0pt
. Die Längen müssen in der genauen Reihenfolge angegeben werden.
Die Schlüsselwörter plus
und minus
ähneln lediglich den Standardnamen für Addition und Subtraktion, bezeichnen aber in keiner Weise eine Addition oder Subtraktion.
Es ist also falsch, einen Sprung einzugeben, wie Sie denken: 1ex +0.2ex -0.1ex
wäre fehl am Platz in einer Sprungspezifikation mit der primitiven Zuweisung
\skip0=1ex +0.2ex -0.1ex
denn sobald TeX plus
das Folgende nicht sieht <length1>
, bricht es die Zuweisung ab.
Mit der expl3
Aufgabe
\skip_const:Nn \c__par_skip { 1ex +0.2ex -0.1ex}
wird ein anderer Ansatz verwendet, da expl3
Zuweisungen „Ausdrücke“ zulassen. Aber Sprünge müssen trotzdem auf die übliche konventionelle Weise eingegeben werden. Mit diesem Ausdruck erhalten Sie einfach das Äquivalent von
\skip0=1.1ex
Wie funktioniert das Überspringen von Ausdrücken? Angenommen, Sie haben
\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
dann bekommst du
\l_dmt_c_skip=36.0pt plus 1.0fil minus 3.0pt
wegen der Funktionsweise der komponentenweisen AdditionUndnach den Regeln für unendlichen Kleber.