newcommand 在图形选项中不起作用

newcommand 在图形选项中不起作用

我想利用一个可以多次使用的变量来确保所有图形的大小都相同。

目前我有多张带有以下代码的图像:

\documentclass[a4paper, 11pt]{report}
\usepackage{graphicx}

\begin{document}
\begin{figure}[h!]
    \centering
    \frame{\includegraphics[width=\textwidth,trim={4.0cm 4.0cm 4.5cm 4.5cm},clip]{SomeImage.png}}
    \caption{Some caption describing image.}
    \label{fig: SomeImage}
\end{figure}
\end{document}

我现在想为修剪设置创建一个变量,以便我可以将其重复用于所有与此相似的图形。因此,我按如下方式进行:

\documentclass[a4paper, 11pt]{report}
\usepackage{graphicx}
\newcommand{\ncTrimmed}{{4.0cm 4.0cm 4.5cm 4.5cm}}

\begin{document}
\begin{figure}[h!]
    \centering
    \frame{\includegraphics[width=\textwidth,trim=\ncTrimmed,clip]{SomeImage.png}}
    \caption{Some caption describing image.}
    \label{fig: SomeImage}
\end{figure}
\end{document}

无论我对新命令做什么,都无法使其工作。Latex 一直给我报错,如“缺少 } 插入”等。我做错了什么?

答案1

您必须进行扩展,\ncTrimmed具体操作如下:

\begingroup
\edef\x{\endgroup
  \noexpand\frame{\noexpand\includegraphics
    [width=\textwidth,trim=\ncTrimmed,clip]{example-image}}}\x

简而言之,这里的用例代表

\begingroup
\edef\x{\endgroup
  <stuff>}\x

\edef\x{<def>}展开 中包含的所有内容<def>。因为\endgroup不是可扩展,的定义\x是临时的(在和内\begingroup,使用\endgroup一次)。这里包含您想要扩展的任何内容,而保留不扩展。因此,之后将扩展为\x<stuff>\noexpand<cmd><cmd>\x

\endgroup
  \frame{\includegraphics[width=\textwidth,trim={4.0cm 4.0cm 4.5cm 4.5cm},clip]{example-image}}

(因为\textwidth不可扩展)。你可以看到,使用

\begingroup
\edef\x{\endgroup
  <stuff>}\show\x

\show\x会向您展示\x的定义。您会看到,除了扩展的 之外,其他一切都保持不变\ncTrimmed

相关内容