我正在使用 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}}