ゴムの長さを任意の単位で表示する

ゴムの長さを任意の単位で表示する

この質問に基づいて、任意の単位で表現された通常の長さを表示する方法は知っています。ただし、ゴムの長さについても同じことを行う必要があります (プラスとマイナスを表示)。パッケージはprintlenpt を除いてそれをサポートしていません。ゴムの長さに機能する同等のものはありますか?

答え1

ここに画像の説明を入力してください

etex には、コンポーネントを抽出して個別に印刷するための追加のプリミティブがあります。

\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}

答え2

expl3無限コンポーネントも処理する を使用したバージョンを次に示します。

\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}

\gluestretch、、\gluestretchorderおよび\glueshrinkにはパブリック インターフェイスがないため\glueshrinkorder、これを定義したことに注意してください。

丸めによって予期しない結果が生じる可能性がありますが、モジュールを使用することで改善される可能性がありますfp

ここに画像の説明を入力してください

関連情報