在 Latex 中创建长宏/快捷方式

在 Latex 中创建长宏/快捷方式

我想知道是否可以制作一个用于插入数字的大型宏?我希望它包含:

\begin{figure} [H]

\centering

\includegraphics[scale=0.8]{#FILENAME}

\caption{#FIGURECAPTION \label{#LABELREF}}

\end{figure}

看到它这么长,我想让插入这么长的“代码”变得更容易。我应该把它作为序言中的环境吗?还是作为新命令?

我将非常感激能够得到的任何帮助!

答案1

你有没有尝试过:

\newcommand\Figure[3]{%
  \begin{figure} [H]
    \centering
    \includegraphics[scale=0.8]{#1}
    \caption{#2}\label{#3}
  \end{figure}
}

你可以使用它作为

\Figure{filename}{caption}{label}

事实上,更好的做法是:

\newcommand\Figure[4][scale=0.8]{%
  \begin{figure} [H]
    \centering
    \includegraphics[#1]{#2}
    \caption{#3}\label{#4}
  \end{figure}
}

第二种变体定义了一个可选参数,默认为scale=0.8,用于将参数传递给\includegraphics。例如,您可以编写类似 的内容\Figure[width=3cm]{filename}{caption}{label}

编辑:可选简短标题

Sigur 在评论中要求添加可选的简短标题。这实际上有点棘手,因为以下内容不起作用:

\newcommand\Figure[4][]{%
  \begin{figure} [H]
    \centering
    \includegraphics[scale=0.8]{#2}
    \caption[#1]{#3}\label{#4}
  \end{figure}
}

因为没有可选参数#1是空白的,宏会插入\caption[]{...long caption...},所以短标题是空的!为了解决这个问题,你可以改为将默认值设为等于#1\relax例如,然后在宏中使用

\ifx#1\relax\relax\caption{#3}\else\caption[#1]{#3}\fi

现在宏的行为符合预期。

然而,更好的解决方案是\NewDocumentCommand使用解析包,因为这将允许您有两个可选参数。以下是其中一种方法:

\documentclass{article}
\usepackage{mwe}
\usepackage{xparse}
\usepackage{float}
\NewDocumentCommand\Figure{o D<>{scale=0.8} m m m}{%
  % [optional short caption]<optional includegraphics options>{image}{caption}{label}
  \begin{figure}[H]
    \centering
    \includegraphics[#2]{#3}
    \IfNoValueTF{#1}{\caption{#4}}{\caption[#1]{#4}}
    \label{#5}
  \end{figure}
}
\begin{document}

  \Figure{example-image-a}{Normal figure}{f:normal}

  \Figure<width=20mm>{example-image-a}{Width 20mm }{f:20mm}

  \Figure[Short caption]<width=20mm>{example-image-a}{With 20mm with short caption}{f:20mm}

  \Figure[Short caption]{example-image-a}{Short caption}{f:20mm}

\end{document}

中间的可选参数[...]将成为短标题,中间的可选参数<...>将赋予\includegraphics,默认值为scale=0.8

相关内容