根据文本宽度比例缩放图像

根据文本宽度比例缩放图像

[我重写了这篇文章以回答评论中提出的问题。]

首先,我会尽可能清晰地阐述自己想要实现的目标。然后,我会解释为什么我想这么做。

我的问题:如何通过与之成比例的一个缩放因子来缩放多幅图像\textwidth

在一个伪代码,我想实现这个:

myscale = \textwidth / 200mm
\includegraphics[scale=myscale]{fig1}
\includegraphics[scale=myscale]{fig2}

其中“200mm”是我选择作为示例的恒定长度。但我的问题并不取决于它的值。我无法提供可编译的代码,因为我不知道如何编写这样的代码。

请不要太关注“ / 200mm”部分。只要与myscale成比例\textwidth,我不在乎如何得到结果。但是,一个问题是,\textwidth有一个长度维度,而myscale没有维度。因此,我们想除以\textwidth某个长度来得到一个无维度数。

现在我为什么要这么做?

我写了一份手稿,其中包含许多图片。我排列多张图片并添加注释(如“(a)”)以生成单个图形。为此,我使用环境picture。环境unitlengthpicture设置为0.01\textwidth。如果图像本身按比例缩放到\textwidth,即使您更改整个图形也不会改变\textwidth

现在我为何改变得\textwidth这么频繁?

1)我写稿件时并不关心要投给哪个期刊。只有当我接近最终版本时,我才会决定投给哪个期刊,然后切换到出版商的样式文件,这会发生变化\textwidth

2)打印手稿时,我会尽量减少边距以节省纸张。

3)我有时会把整个图片环境放进去,minipage以缩放整个图形。(记住minipage变化\textwidth。)

4) 我在演示文稿中使用了一些图形,这些图形是我在beamer课堂上制作的,使用了截然不同的方式\textwidth

编辑:这是使用 egreg 代码的解决方案。它演示了我的想法是如何使用的。请注意,当图形放入环境中时minipage,构成图形的所有元素及其相对位置都会按比例缩放,因此缩放后的图形看起来与原始图形相似,只是字体大小没有缩放,这在我的用例中是可以的。

\documentclass{article}

\usepackage{graphicx}
\usepackage{xparse}

\ExplSyntaxOn
\NewExpandableDocumentCommand{\myscale}{}
 {
  \fp_eval:n { round ( \textwidth  / \dim_to_fp:n { 200mm }, 5) }
 }
\ExplSyntaxOff

\newcommand{\myfigure}{%
    \setlength{\unitlength}{0.01\textwidth}
    \fbox{%
      \begin{picture}(70,90)
        \put(0,45){\includegraphics[scale=\myscale]{example-image-a}}
        \put(0, 0){\includegraphics[scale=\myscale]{example-image-b}}
        \put(0,85){This is fig2.}
        \put(0,40){This is fig1.}
      \end{picture}%
    }
}%\myfigure

\begin{document}

\myfigure

\begin{minipage}{0.7\textwidth}
\myfigure
\end{minipage}

\end{document}

我的最后一个问题是,是否可以将比例的计算封装在宏中,以便将其用作\newcommand{\myscale}{\ratio{\textwidth}{200mm}}?我尝试了以下操作,但在使用宏时得到了! Missing number, treated as zero./ <to be read again>/ 。\tex_protected:D\myscale

\newcommand{\ratio}[2]{%
\ExplSyntaxOn
\NewExpandableDocumentCommand{\myscale}{}
 {
  \fp_eval:n { round ( #1  / \dim_to_fp:n { #2 }, 5) }
 }
\ExplSyntaxOff
}

\newcommand{\myscale}{\ratio{\textwidth}{200mm}}

答案1

据我理解,根据你的伪代码,你想在某个点定义宽度或比例,就像一个变量。你可以使用newcommand并存储比例/宽度,如下例所示

\documentclass[a4paper]{article}
\usepackage{graphicx}

\newcommand{\somewidth}{.7\textwidth}
%\newcommand{\somescale}{1}

\begin{document}
\includegraphics[width=\somewidth]{example-image-a}
%\includegraphics[scale=\somescale]{example-image-a}
\end{document}

答案2

我不确定这个固定的比例因子有什么用。

无论如何,这里有一种方法:

\documentclass{article}

\usepackage{graphicx}
\usepackage{xparse}

\ExplSyntaxOn
\NewExpandableDocumentCommand{\myscale}{}
 {
  \fp_eval:n { round ( \textwidth  / \dim_to_fp:n { 200mm }, 5) }
 }
\ExplSyntaxOff

\begin{document}

\myscale

\bigskip

\includegraphics{example-image}

\bigskip

\includegraphics[scale=\myscale]{example-image}

\end{document}

enter image description here

相关内容