\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}
进一步说明:
5
的 第一个参数\xintRound
是输出小数点后保留的位数;分数是在舍入之前精确计算的。分母的存在是可选的,\xintRound {4}{1.2345678}
输出(oops)1.235
1.2346
。分子和分母涉及算术运算
+
,,*
-
和括号(将在 内自动执行\numexpr
)不应超过八个标记(此处分母已经有五个)。对于较长的输入,\the\numexpr <complicated stuff>\relax
分别使用分子或分母。或者,您也可以加载包
xintexpr
并输入诸如\xintRound {5}{\xinttheexpr arbitrarily complicated expression \relax}
。例如\xinttheexpr \LenA*\LenB*\LenC/((\LenD+\LenE)*(\LenF+\LenG))\relax
,将精确计算而不会出现算术溢出。然后使用\xintRound
将其打印为定点数,并在小数点后保留所需的位数(如果您想要截断而不是四舍五入,请使用\xintTrunc
)。3a. release
1.1
ofxint
将具有以下语法\xinttheiexpr [4] ... \relax
作为快捷方式\xintRound {4}{\xinttheexpr ... \relax}
如果相同的计算需要执行多次,只需在
\edef
:中执行一次\edef\RATIO{\xintRound{5}{<numerator>/<denominator>}}
,然后\RATIO
在需要的地方使用。如果您想使用明确的尺寸,例如
6cm
或,1.2345in
则将其放入\dimexpr .. \relax
和 中,如果您不使用\xinttheexpr .. \relax
和 ,如果这些尺寸规范有许多数字,则可能需要嵌入\the\numexpr .. \relax
(请参阅上面的第 2 点)。在 内\xinttheexpr
只需使用\dimexpr 1.2345in\relax
。