如何找到长度命令(例如, \textwidth)与参考值(例如, 6cm)的比率?

如何找到长度命令(例如, \textwidth)与参考值(例如, 6cm)的比率?

\textwidth如何找到长度命令 (例如) 与参考值 (例如)的比率6cm?实际上,我想使用比率作为参数\scalebox,例如\scalebox{<ratio>}

\documentclass{article}
\usepackage[showframe=true]{geometry}
\usepackage{pst-node}
\usepackage{graphicx}

\usepackage{fp}
\usepackage{pgf}
\pgfmathsetmacro{\ratio}{\the\textwidth/(6cm)}

\makeatletter
  \FPdiv\thecm{6}{2.54} %72.27
  \FPmul\thecminpoints{\thecm}{72.27}
  \FPdiv\thescale{\strip@pt\textwidth}{\thecminpoints}%
\makeatother

\begin{document}
\noindent%
%\scalebox{\thescale}{%
\scalebox{\ratio}{%
\begin{pspicture}(6,4)
\pnode(2,2){A}\psframe(A)
\pnode(4,2){B}\pscircle(B){2}
\end{pspicture}}
\uput[-135](A){$A$}
\rput(B){$B$}
\end{document}

替代文本

答案1

TeX 可以进行 64 位整数乘法;得到的整数可以通过 sp-to-pt 转换转换为十进制数:

\documentclass{minimal}
\begin{document}
\makeatletter
\strip@pt\dimexpr\number\numexpr\number\textwidth*65536/\number\dimexpr6cm\relax\relax sp\relax
\end{document}

或者,更一般地:

\documentclass{minimal}
\makeatletter
\newcommand*{\DivideLengths}[2]{%
  \strip@pt\dimexpr\number\numexpr\number\dimexpr#1\relax*65536/\number\dimexpr#2\relax\relax sp\relax
}
\makeatother
\begin{document}
\DivideLengths{\textwidth - 0.2\textheight}{2cm + 4cm}
\end{document}

答案2

您可以使用\the\textwidth它来给出以点为单位的尺寸值,并使用它来计算以厘米为单位的宽度(以英寸为单位(1 英寸为 72.27 点))。

您可以根据计算需要使用 LaTeX 计算自动完成所有这些操作。

编辑

我将使用该fp包进行如下计算:

\makeatletter
  \FPdiv\thecm{6}{2.54} %72.27
  \FPmul\thecminpoints{\thecm}{72.27}
  \FPdiv\thescale{\strip@pt\textwidth}{\thecminpoints}%
  \thescale
\makeatother

\scalebox{\thescale}{Test}

答案3

TeX 没有十进制数的数据类型,并且无法原生划分维度(对于数学家来说:TeX 的维度在有理数域上形成一维向量空间,但本身不是一个域)。您可以使用以下方法pgfmath执行此操作:

\documentclass{article}
\usepackage{pgf}
\begin{document}

\pgfmathsetmacro{\ratio}{\the\textwidth/(6cm)}
\scalebox{\ratio}{\fbox{stuff}}

\end{document}

但这些令人困惑的问题和假定的答案却表明,可能有更好的方法来实现你真正想要的东西。

答案4

您可以使用扩展方式计算(因此作为的参数\scalebox信特压裂

界

\documentclass{article}
\usepackage[showframe=true]{geometry}
\usepackage{pst-node}
\usepackage{graphicx}

\usepackage{xintfrac}

\begin{document}
\noindent
\scalebox{\xintRound {5}{\textwidth/\dimexpr 6cm\relax}}{%
\begin{pspicture}(6,4)
\pnode(2,2){A}\psframe(A)
\pnode(4,2){B}\pscircle(B){2}
\end{pspicture}}
\uput[-135](A){$A$}
\rput(B){$B$}
\end{document}

进一步说明:

  1. 5的 第一个参数\xintRound是输出小数点后保留的位数;分数是在舍入之前精确计算的。分母的存在是可选的,\xintRound {4}{1.2345678}输出1.235(oops)1.2346

  2. 分子和分母涉及算术运算 +,,*- 和括号(将在 内自动执行\numexpr)不应超过八个标记(此处分母已经有五个)。对于较长的输入,\the\numexpr <complicated stuff>\relax分别使用分子或分母。

  3. 或者,您也可以加载包xintexpr并输入诸如\xintRound {5}{\xinttheexpr arbitrarily complicated expression \relax}。例如\xinttheexpr \LenA*\LenB*\LenC/((\LenD+\LenE)*(\LenF+\LenG))\relax,将精确计算而不会出现算术溢出。然后使用\xintRound将其打印为定点数,并在小数点后保留所需的位数(如果您想要截断而不是四舍五入,请使用\xintTrunc)。

    3a. release 1.1ofxint将具有以下语法\xinttheiexpr [4] ... \relax作为快捷方式\xintRound {4}{\xinttheexpr ... \relax}

  4. 如果相同的计算需要执行多次,只需在\edef:中执行一次\edef\RATIO{\xintRound{5}{<numerator>/<denominator>}},然后\RATIO在需要的地方使用。

  5. 如果您想使用明确的尺寸,例如6cm或,1.2345in则将其放入\dimexpr .. \relax和 中,如果您不使用\xinttheexpr .. \relax和 ,如果这些尺寸规范有许多数字,则可能需要嵌入\the\numexpr .. \relax(请参阅上面的第 2 点)。在 内\xinttheexpr只需使用\dimexpr 1.2345in\relax

相关内容