如何准确打印长度并由用户控制舍入?

如何准确打印长度并由用户控制舍入?

尝试了 printlen 包,但似乎不明白 2.5in 是什么意思:

\documentclass{minimal} 
\usepackage{printlen} 
\uselengthunit{in} 
\begin{document} 
\newlength{\advertwidth} 
\setlength{\advertwidth}{2.5in} 
\printlength{\advertwidth} 
\end{document} 

排版上述结果2.50049 in--- 有没有更好的?

注意:除上述内容外,该项目还需要以下软件包:

\usepackage{calc,geometry,xcolor,graphicx,csvsimple}

尤其是最后一个,与最初提供的答案相冲突。

答案1

\documentclass[preview,border=12pt,varwidth]{standalone}
\usepackage[nomessages]{fp}
\usepackage{printlen}
\makeatletter
\newcommand{\printer}[3][in]{%
    \FPeval\temp{round(\expandafter\strip@pt\csname#2\endcsname/72.27:#3)}%
    \temp#1}
\makeatother

\newlength\xxx
\setlength{\xxx}{2.5in}    
\parindent=0pt


\begin{document}    

\printer{xxx}{1}

\printer{xxx}{2}

\printer{xxx}{7}

\end{document}

在此处输入图片描述

答案2

最近上传的lengthconvert包似乎就是您正在寻找的:

\documentclass{article}
\usepackage{lengthconvert}
\Convertsetup{unit=in}
\begin{document}

\newlength{\advertwidth}
\setlength{\advertwidth}{2.5in}

\Convert{\advertwidth}

\Convert{72.27pt}

\end{document}

在此处输入图片描述

答案3

强制expl3解决方案:

\documentclass{minimal} 
\usepackage{expl3,xparse}
\ExplSyntaxOn
\NewDocumentCommand { \printlengthas } { m m }
  { \dim_to_decimal_in_unit:nn {#1} { 1 #2 } #2 }
\ExplSyntaxOff 
\begin{document} 
\newlength{\advertwidth} 
\setlength{\advertwidth}{2.5in} 
\printlengthas{\advertwidth}{in}
\end{document} 

\dim_to_unit:nn目前还在实验阶段,但这个想法必然会保留下来:只是名称的问题。)

注意:这目前需要最新版本expl3\dim_to_decimal_in_unit:nn已于 2014-07-15 添加到 CTAN 版本。

答案4

该函数\printlen[Unit][FracNr]{length}将单位输出格式化为无衬线字体,我不喜欢这种字体,因此我使用以下四个宏来输出长度(单位为 pt、in、cm 和 mm)。这些宏需要用于非整数除法的包 fp 和 siunitx。

\newcommand{\ScaledPointsInPoint}{\number \dimexpr 1pt \relax}

\newcommand*{\FPSizePt}[2][0]{%
\FPdiv\res{\number\dimexpr #2\relax}{\ScaledPointsInPoint}%
\FPeval\res{round(\res:#1)}%
\SI\res{pt}}

\newcommand*{\FPSizeIn}[2][2]{%
\FPdiv\res{\number\dimexpr #2\relax}{\ScaledPointsInPoint}%
\FPdiv\res{\res}{72.27}%
\FPeval\res{round(\res:#1)}%
\SI\res{in}%
}

\newcommand*{\FPSizeCm}[2][2]{%
\FPdiv\res{\number\dimexpr #2\relax}{\ScaledPointsInPoint}%
\FPdiv\res{\res}{72.27}%
\FPmul\res{2.54}{\res}%
\FPeval\res{round(\res:#1)}%
\SI\res{\cm}}

\newcommand*{\FPSizeMm}[2][2]{%
\FPdiv\res{\number\dimexpr #2\relax}{\ScaledPointsInPoint}%
\FPdiv\res{\res}{72.27}%
\FPmul\res{25.4}{\res}%
\FPeval\res{round(\res:#1)}%
\SI\res{\mm}}

用法:

\newlength{\testlen}\setlength{\testlen}{5440 pt}
\FPSizeIn{\testlen}, \FPSizeCm[4]{\testlen}, \FPSizeMm{\testlen}, \FPSizePt{\testlen}.

在区域设置=DE 中输出:75,27 英寸、191,1941 厘米、1911,94 毫米、5440 点。

相关内容