[我重写了这篇文章以回答评论中提出的问题。]
首先,我会尽可能清晰地阐述自己想要实现的目标。然后,我会解释为什么我想这么做。
我的问题:如何通过与之成比例的一个缩放因子来缩放多幅图像\textwidth
?
在一个伪代码,我想实现这个:
myscale = \textwidth / 200mm
\includegraphics[scale=myscale]{fig1}
\includegraphics[scale=myscale]{fig2}
其中“200mm”是我选择作为示例的恒定长度。但我的问题并不取决于它的值。我无法提供可编译的代码,因为我不知道如何编写这样的代码。
请不要太关注“ / 200mm
”部分。只要与myscale
成比例\textwidth
,我不在乎如何得到结果。但是,一个问题是,\textwidth
有一个长度维度,而myscale
没有维度。因此,我们想除以\textwidth
某个长度来得到一个无维度数。
现在我为什么要这么做?
我写了一份手稿,其中包含许多图片。我排列多张图片并添加注释(如“(a)”)以生成单个图形。为此,我使用环境picture
。环境unitlength
的picture
设置为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}