向宏添加(即使是空的)参数也会改变子图与子标题包的对齐方式

向宏添加(即使是空的)参数也会改变子图与子标题包的对齐方式

我在一个图中有两个子图。其中一个子图的内容由我定义的宏给出。另一个子图的内容正是宏定义的输出。这导致子图错位。这似乎只发生在宏接受参数时,即使这些参数从未使用过。这是一个 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}}

相关内容