
이 질문을 바탕으로,나는 임의의 단위로 표현된 일정한 길이를 표시하는 방법을 알고 있습니다. 그러나 고무 길이(플러스 및 마이너스 표시)에 대해서도 동일한 작업을 수행해야 하며 패키지 printlen
는 pt를 제외하고는 이를 지원하지 않습니다. 고무 길이에 대해 작동하는 등가물이 있습니까?
답변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
모듈을 사용하여 개선될 수 있습니다.