我一直在尝试为我的团队实现一个宏,以便能够使用宏包含图像。使用此宏:
- 图像尺寸
- 图片路径选择
- 图片标题
可以由最终用户定义。宏有一个默认(硬编码)参数(第一个参数),用于定义图像的大小。默认情况下,图像大小固定为0.75\textwidth
,但用户可以使用[]
括号覆盖它,正如我们大多数人所知道的那样。
\newcommand{\addImageSeventyFive}[3][0.75]{
\begin{figure}[H]
\centering
\includegraphics[width=#1\textwidth]{#2}
\caption{#3 (size of #1)}\label{fig:1}
\end{figure}
}
现在一切都很顺利。正如您所看到的,我需要为这个宏定义三个不同的参数。
我一直面临的问题是,即使第一个参数应该是图像的大小(硬编码值:0.75),它也会与图像的路径进行映射。中间的花括号与标题进行映射。因此,最后的花括号留空,而这原本应该是与标题进行映射的。
\addImageSeventyFive{}{}{}
我不知道为什么会发生这种论点的转变,但下面给出的例子运行得很好,这不应该,对吧?
\addImageSeventyFive{example-image-a}{Caption\ Test}{}
此外,覆盖功能也能完美运行,这不应该吗?
\addImageSeventyFive[0.40]{example-image-a}{Caption\ Test}{}
那么,为什么最后的花括号看起来是空的,尽管它不应该是空的。我希望我的问题很清楚。
使用的软件包:
- \usepackage[utf8]{输入框}
- \usepackage{babel}
- \usepackage[a4paper]{几何}
- \usepackage{float}
- \usepackage{graphicx}
使用的编辑器:
- 带有 LaTeX Workshop 扩展的 vscode。
答案1
如果你
\newcommand{\addImageSeventyFive}[3][0.75]{
\begin{figure}[H]
\centering
\includegraphics[width=#1\textwidth]{#2}
\caption{#3 (size of #1)}\label{fig:1}
\end{figure}
}
那么适当的调用形式如下
\addImageSeventyFive{example-image}{Caption text}
如果你对 75% 的大小感到满意,或者
\addImageSeventyFive[0.4]{example-image}{Caption text}
如果您想指定另一个分数。
如果您的 LaTeX 接口(我从您的问题中猜是 VS Code){}
在调用末尾添加了一个,那么它就是一个编辑器“功能”。
另一方面,由于以下各种原因,我不确定我是否建议这样做:
- 该
[H]
选项非常不灵活,通常会导致排版不佳; - 没有办法设置
\label
,除非你在标题文本中输入它; - 代码中的
\label{fig:1}
是错误的,只会产生大量有关重复标签的警告。
但是,你对你的文档更了解,所以我建议你进行一些改进
\newcommand{\addImageSeventyFive}[3][0.75]{%
\par
\begin{figure}[H]
\centering
\includegraphics[width=#1\textwidth]{#2}
\caption{#3 (size of #1)}
\end{figure}
\par
}
(图形最好放在段落之间,这样 LaTeX 至少有机会正确进行分页)。
如果你需要标记其中一个图形,你可以这样做
\addImageSeventyFive{example-image}{Caption text\label{fig:example}}
答案2
我建议不要对交叉引用标签的名称进行硬编码。否则您将收到有关多重定义标签的警告/错误消息。
关于空括号组:
这可能是因为最初的意图是
\newcommand{\addImageSeventyFive}[4][0.75]{%%%
\begin{figure}[H]{%%%
\centering
\includegraphics[width=#1\textwidth]{#2}{%%%
\caption{#3 (size of #1)}\label{#4}{%%%
\end{figure}{%%%
}
...
\addImageSeventyFive{example-image-a}{Caption\ Test}{fig:1}
...
\addImageSeventyFive[0.40]{example-image-a}{Caption\ Test}{fig:2}