存储 \ratio 计算结果以供重复使用

存储 \ratio 计算结果以供重复使用

我正在使用 pdflatex 和 beamer 包来创建类似于我公司提供的 PowerPoint 模板的演示模板。

我希望公司徽标在我的模板中的大小与原始模板中的大小相同。我知道 PowerPoint 模板中徽标的宽度、PowerPoint 幻灯片的页面宽度以及 beamer 中幻灯片的宽度。

目前,我设法实现以下扩展:

\RequirePackage{calc}

\newlength{\pptwidth}
\setlength{\pptwidth}{254mm} % width of PPT slide
\newlength{\beamerwidth}
\setlength{\beamerwidth}{160mm} % width of beamer slide
\newlength{\logowidth}
\setlength{\logowidth}{110mm} % width of logo in PPT slide

\includegraphics[width=\logowidth*\ratio{\beamerwidth}{\pptwidth}]{logo.png}

这很好。不过,我还需要以同样的方式缩放许多其他图形和长度。为此,我希望能够存储 的结果\ratio{\beamerwidth}{\pptwidth},这样我就可以编写类似

\newcommand{\widthscale}{\ratio{\beamerwidth}{\pptwidth}}
\includegraphics[width=\logowidth*\widthscale]{logo.png}

但是,这似乎不起作用。我也尝试了在其他地方找到的解决方案\def\edef\expandafter似乎都失败了。

是否可以将其保存\ratio在变量中,以便以后使用?

答案1

\ratio中的命令不calc直接计算商,它是用于其他计算的中间构造。您需要将其包含在完整计算中,以便结果成为实数。最简单的方法是乘以1

 \edef\widthscale{1*\ratio{\beamerwidth}{\pptwidth}}

示例输出

\documentclass{article}

\usepackage{graphicx}
\usepackage{calc}

\newlength{\pptwidth}
\setlength{\pptwidth}{254mm} % width of PPT slide
\newlength{\beamerwidth}
\setlength{\beamerwidth}{160mm} % width of beamer slide
\newlength{\logowidth}
\setlength{\logowidth}{110mm} % width of logo in PPT slide

\newcommand{\widthscale}{1*\ratio{\beamerwidth}{\pptwidth}}

\begin{document}

\includegraphics[width=\logowidth*\ratio{\beamerwidth}{\pptwidth}]{example-image-a.png}

\includegraphics[width=\logowidth*\widthscale]{example-image-a.png}
\end{document}

答案2

我将使用 expl3 而不是 calc:

\documentclass[12pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{xparse}
\ExplSyntaxOn
\NewExpandableDocumentCommand\dimratio { m m }
{
 \fp_eval:n
  {
   \dim_to_fp:n { #1 } /  \dim_to_fp:n { #2 }
  }
}
\ExplSyntaxOff

\newlength{\pptwidth}
\setlength{\pptwidth}{254mm} % width of PPT slide
\newlength{\beamerwidth}
\setlength{\beamerwidth}{160mm} % width of beamer slide
\newlength{\logowidth}
\setlength{\logowidth}{110mm} % width of logo in PPT slide

\newcommand\myscale{\dimratio{\beamerwidth}{\pptwidth}} 
\usepackage{graphicx}
\begin{document}

\includegraphics[width=\myscale\logowidth]{example-image.png}

\end{document}

您还可以使用以下方法存储计算值

 \edef\myscale{\dimratio{\beamerwidth}{\pptwidth}}

相关内容