我在一个图中有两个子图。其中一个子图的内容由我定义的宏给出。另一个子图的内容正是宏定义的输出。这导致子图错位。这似乎只发生在宏接受参数时,即使这些参数从未使用过。这是一个 MWE:
\documentclass{article}
\usepackage{subcaption}
\usepackage{graphicx}
\newcommand{\mymacro}{
\includegraphics[width=\textwidth]{example-image-a}
}
\newcommand{\myothermacro}[1]{
\includegraphics[width=\textwidth]{example-image-a}
}
\begin{document}
\begin{figure}
\begin{subfigure}{0.48\textwidth}
\mymacro
\end{subfigure}
\begin{subfigure}{0.48\textwidth}
\includegraphics[width=\textwidth]{example-image-a}
\end{subfigure}
\caption{No arguments}
\end{figure}
\begin{figure}
\begin{subfigure}{0.48\textwidth}
\myothermacro{}
\end{subfigure}
\begin{subfigure}{0.48\textwidth}
\includegraphics[width=\textwidth]{example-image-a}
\end{subfigure}
\caption{One argument}
\end{figure}
\end{document}
如果您想知道为什么我不只使用两次宏,那么在我的实际应用中,我想通过对一个子图进行一个小的更改来重现宏,这让我想到了上面的 MWE。我没有在包 subfig 中观察到同样的行为。有人知道为什么会发生这种情况吗?是否有简单的解决方法?
答案1
正如@David Carlisle 指出的那样,通常LaTeX
每个换行符都会留一个空格。因此,要将他的评论放入解决方案中,您必须将宏更改为:
\newcommand{\mymacro}{%
\includegraphics[width=\textwidth]{example-image-a}%
}
\newcommand{\myothermacro}[1]{%
\includegraphics[width=\textwidth]{example-image-a}%
}
或者,对于非常短的宏,您也可以将其写成一行代码,但这很容易降低可读性:
\newcommand{\mymacro}{\includegraphics[width=\textwidth]{example-image-a}}
\newcommand{\myothermacro}[1]{\includegraphics[width=\textwidth]{example-image-a}}