Anzeige der Gummilängen in beliebigen Einheiten

Anzeige der Gummilängen in beliebigen Einheiten

Basierend auf dieser Frage,Ich weiß, wie man normale Längen in beliebigen Einheiten ausdrückt. Ich muss jedoch dasselbe für Gummilängen tun (Plus und Minus anzeigen) und das printlenPaket unterstützt dies nur für pt. Gibt es ein Äquivalent, das für Gummilängen funktioniert?

Antwort1

Bildbeschreibung hier eingeben

etex verfügt über zusätzliche Primitive zum Extrahieren der Komponenten, sodass Sie sie separat ausdrucken können:

\documentclass{article}

\usepackage{printlen}


\begin{document}

\the\parskip


The \verb|\parskip| is \printlength{\dimexpr\parskip\relax} which is also
\uselengthunit{in}\printlength{\dimexpr\parskip\relax} and
\uselengthunit{mm}\printlength{\dimexpr\parskip\relax}.


The \verb|\gluestretch\parskip| is \printlength{\gluestretch\parskip} which is also
\uselengthunit{in}\printlength{\gluestretch\parskip} and
\uselengthunit{mm}\printlength{\gluestretch\parskip}.


The \verb|\glueshrink\parskip| is \printlength{\glueshrink\parskip} which is also
\uselengthunit{in}\printlength{\glueshrink\parskip} and
\uselengthunit{mm}\printlength{\glueshrink\parskip}.

\end{document}

Antwort2

Hier ist eine Version expl3, die auch unendliche Komponenten berücksichtigt.

\documentclass{article}
\usepackage{xparse}

\ExplSyntaxOn
\NewDocumentCommand{\printglue}{O{pt}m}
 { % #1 = unit, #2 = glue
  \rpspringuel_print_glue:nn { #1 } { #2 }
 }

\cs_new_protected:Npn \rpspringuel_print_glue:nn #1 #2
 {
  \skip_set:Nn \l_rpspringuel_input_skip { #2 }
  \dim_set:Nn \l_rpspringuel_natural_dim { \l_rpspringuel_input_skip }
  \dim_set:Nn \l_rpspringuel_stretch_dim
   { \rpspringuel_gluestretch:n { \l_rpspringuel_input_skip } }
  \dim_set:Nn \l_rpspringuel_shrink_dim
   { \rpspringuel_glueshrink:n { \l_rpspringuel_input_skip } }
  \int_set:Nn \l_rpspringuel_stretch_order_int
   { \rpspringuel_gluestretchorder:n { \l_rpspringuel_input_skip } }
  \int_set:Nn \l_rpspringuel_shrink_order_int
   { \rpspringuel_glueshrinkorder:n { \l_rpspringuel_input_skip } }
  % print the components
  \dim_to_decimal_in_unit:nn { \l_rpspringuel_natural_dim } { 1#1 }
  \,#1
  \c_space_tl
  plus
  \c_space_tl
  \int_case:nn { \l_rpspringuel_stretch_order_int }
   {
    { 0 } { \dim_to_decimal_in_unit:nn { \l_rpspringuel_stretch_dim } { 1#1 }\,#1 }
    { 1 } { \dim_to_decimal_in_unit:nn { \l_rpspringuel_stretch_dim } { 1pt }\,fil }
    { 2 } { \dim_to_decimal_in_unit:nn { \l_rpspringuel_stretch_dim } { 1pt }\,fill }
    { 3 } { \dim_to_decimal_in_unit:nn { \l_rpspringuel_stretch_dim } { 1pt }\,filll }
   }
  \c_space_tl
  minus
  \c_space_tl
  \int_case:nn { \l_rpspringuel_shrink_order_int }
   {
    { 0 } { \dim_to_decimal_in_unit:nn { \l_rpspringuel_shrink_dim } { 1#1 }\,#1 }
    { 1 } { \dim_to_decimal_in_unit:nn { \l_rpspringuel_shrink_dim } { 1pt }\,fil }
    { 2 } { \dim_to_decimal_in_unit:nn { \l_rpspringuel_shrink_dim } { 1pt }\,fill }
    { 3 } { \dim_to_decimal_in_unit:nn { \l_rpspringuel_shrink_dim } { 1pt }\,filll }
   }
 }

\skip_new:N \l_rpspringuel_input_skip
\dim_new:N \l_rpspringuel_natural_dim
\dim_new:N \l_rpspringuel_stretch_dim
\dim_new:N \l_rpspringuel_shrink_dim
\int_new:N \l_rpspringuel_stretch_order_int
\int_new:N \l_rpspringuel_shrink_order_int

\cs_new:Npn \rpspringuel_gluestretch:n #1
 {
  \etex_gluestretch:D \etex_glueexpr:D #1\scan_stop:
 }
\cs_new:Npn \rpspringuel_glueshrink:n #1
 {
  \etex_glueshrink:D \etex_glueexpr:D #1\scan_stop:
 }
\cs_new:Npn \rpspringuel_gluestretchorder:n #1
 {
  \etex_gluestretchorder:D \etex_glueexpr:D #1\scan_stop:
 }
\cs_new:Npn \rpspringuel_glueshrinkorder:n #1
 {
  \etex_glueshrinkorder:D \etex_glueexpr:D #1\scan_stop:
 }

\ExplSyntaxOff

\begin{document}

\printglue{\parskip}

\printglue{\fill}

\newlength\mylength

\setlength\mylength{10cm plus 1cm minus 1filll}

\printglue[cm]{\mylength}

\printglue[mm]{10cm plus 1cm minus 1filll}

\end{document}

\gluestretchBeachten Sie, dass es für , \gluestretchorder, \glueshrinkund keine öffentliche Schnittstelle gibt. \glueshrinkorderDeshalb habe ich eine definiert.

Durch Runden kann es zu unerwarteten Ergebnissen kommen, dies kann unter Umständen durch den Einsatz des fpModuls verbessert werden.

Bildbeschreibung hier eingeben

verwandte Informationen