如何在 LaTeX 中进行简单的计算?

如何在 LaTeX 中进行简单的计算?

考虑下面的宏:

\newcommand{\sxfigure}[4]{
\includegraphics[width=#1*#3 cm, height=#2*#3 cm]{#4}
}

#1#2一些确定图形宽度和高度的值,#3用于控制缩放比例。但是,上面的代码不起作用。有人能提供解决方案吗?我尝试了以下方法,仍然不起作用。有人能指出错误吗?

\usepackage{pgf}
\newcommand{\sxmultiply}[2]{\pgfmathparse{#1*#2}\pgfmathresult}
\newcommand{\sxfigure}[5]{
\begin{figure}
\begin{center}
\includegraphics[width=$\sxmultiply{#3}{#5}$ cm, height=$\sxmultiply{#4}{#5}$ cm]{#1}
\end{center}
\caption{#2}
\end{figure}
}

答案1

fp包裹是一个易于使用的算术包,可以在这里提供帮助:

在此处输入图片描述

\documentclass{article}
\usepackage{graphicx}% http://ctan.org/pkg/graphicx
\usepackage[nomessages]{fp}% http://ctan.org/pkg/fp
\newcommand{\sxfigure}[4]{%
  \FPeval\widthdim{#1*#3}% Calculate width dimension
  \FPeval\heightdim{#2*#3}% Calculate height dimension
  \includegraphics[width=\widthdim cm, height=\heightdim cm]{#4}%
}
\begin{document}
\sxfigure{1}{2}{1.5}{example-image-a} \quad
\sxfigure{1}{2}{1.7}{example-image-a}
\end{document}

然而,我会选择使用键值方法的改进语法,原因正如第一段中提到的那样。xkeyval 文档

在宏定义中使用键的优点是可以轻松避免最多 9 个参数,并且与使用大量(可选)参数相比,它可以减少宏语法中的混乱。例如,比较以下宏的可能语法,例如,宏\mybox可能使用其参数来绘制一些包含文本的框

\mybox[5pt][20pt]{some text}[red][white][blue]
\mybox[text=red,background=white,frame=blue,left=5pt,right=20pt]{some text}

请注意,为了能够在第一个示例中指定框架颜色,还需要指定其他颜色。这在第二个示例中不是必需的,这些颜色可以获取预设值。边距也是如此。

答案2

怎么样,使用calc包裹

\newcommand{\sxfigure}[5]{%
    %   #1: width
    %   #2: height
    %   #3: zoom ratio
    %   #4: image
    %   #5: caption
\begin{figure}[!htb]
  \centering
  \includegraphics[width={#1*#3}, height={#2*#3}]{#4}
\caption{#5}
\end{figure}
}

截屏

请注意,我使用了mwe只是为了图像。

\documentclass{article}
\usepackage{graphicx}
\usepackage{calc}
\usepackage{mwe}

\newcommand{\sxfigure}[5]{%
    %   #1: width
    %   #2: height
    %   #3: zoom ratio
    %   #4: image
    %   #5: caption
\begin{figure}[!htb]
  \centering
  \includegraphics[width={#1*#3}, height={#2*#3}]{#4}
\caption{#5}
\end{figure}
}

\begin{document}

\sxfigure{1cm}{1cm}{2}{example-image-a}{my caption}

\sxfigure{1cm}{1cm}{4}{example-image-b}{my other caption}

\end{document}

想必你也想要\label这些图片,所以也许下面的内容会更好

\newcommand{\sxfigure}[6]{%
    %   #1: width
    %   #2: height
    %   #3: zoom ratio
    %   #4: image
    %   #5: caption
    %   #6: label
\begin{figure}[!htb]
  \centering
  \includegraphics[width={#1*#3}, height={#2*#3}]{#4}
\caption{#5}
\label{#6}
\end{figure}
}

请注意,我已经使用\centering我应该对图形和表格使用 center 还是 centering ?

答案3

在您的情况下,由于您使用#3#5在第二个示例中)仅进行缩放(因子在widthheight键中都相乘),因此您只需使用:

\newcommand{\sxfigure}[4]{
    \includegraphics[width=#1, height=#2, scale=#3]{#4}
}

并像使用它一样

\sxfigure{<width length>}{<height length>}{<scale factor>}{<file>}

calc包可以进行简单的乘法,但使用pgf可以进行各种计算,例如:

\sxfigure[angle=30]{
    image width = 1.1^3*3cm,
    image height = exp(3)*3cm
}{example-image}

代码

\documentclass{article}
\usepackage{graphicx}
\usepackage{pgf}
\newlength{\includewidth}
\newlength{\includeheight}
\pgfset{
    image width/.code={
        \pgfmathsetlength\includewidth{#1}
    },
    image height/.code={
        \pgfmathsetlength\includeheight{#1}
    },
}
\newcommand{\sxfigure}[3][]{% #1 = \includegraphics key-value stuff
                            % #2 = width and height assignments
                            % #3 = the file
    \pgfset{#2}%
    \includegraphics[width=\includewidth, height=\includeheight,#1]{#3}%
}%

\newcommand{\sxFigure}[4][]{% #1 = \includegraphics key-value stuff
                            % #2 = width
                            % #3 = height
                            % #4 = the file
    \pgfmathsetlength\includewidth{#2}%
    \pgfmathsetlength\includeheight{#3}%
    \includegraphics[width=\includewidth, height=\includeheight,#1]{#4}%
}%
\begin{document}
    \sxfigure[angle=30]{image width = 2.5*3cm, image height = 3*3cm}{example-image}

    \sxFigure[angle=30]{2.5*3cm}{3*3cm}{example-image}
\end{document}

输出

在此处输入图片描述

答案4

e-TeX\dimexpr可用于:

\newcommand{\sxfigure}[4]{%
  \includegraphics[width=#3\dimexpr#1cm\relax, height=#3\dimexpr#2cm\relax]{#4}%
}

相关内容