包含图像文件的宏定义

包含图像文件的宏定义

我一直在尝试为我的团队实现一个宏,以便能够使用宏包含图像。使用此宏:

  • 图像尺寸
  • 图片路径选择
  • 图片标题

可以由最终用户定义。宏有一个默认(硬编码)参数(第一个参数),用于定义图像的大小。默认情况下,图像大小固定为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){}在调用末尾添加了一个,那么它就是一个编辑器“功能”。

另一方面,由于以下各种原因,我不确定我是否建议这样做:

  1. [H]选项非常不灵活,通常会导致排版不佳;
  2. 没有办法设置\label,除非你在标题文本中输入它;
  3. 代码中的\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}

相关内容