宏参数未考虑格式

宏参数未考虑格式

我正在构建一个宏来在文档末尾输出版本。

这是一个简单的宏,它只是将参数放在“版本:”后面,以灰色和斜体显示。

这是 MWE:

\documentclass{article}
\usepackage[svgnames,usenames,dvipsnames,table]{xcolor}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}

\usepackage{lipsum}

% Insert the project version
\newcommand\insertVersion[1][]{%
    \vfill\hfill%
    \footnotesize{%
        \textcolor{blue}{%
            Version: \textit{#1}%
        }%
    }%
}%

\begin{document}
\lipsum[2]


\insertVersion{1.1.0}
\end{document} 

然而,由于某种原因,它失败了。格式不适用于参数: MWE 输出

我确信我忽略了一件愚蠢的事情,但我无法理解这个问题......

答案1

当你写作时

\newcommand\insertVersion[1][]{...}

你正在定义一个宏\insertVersion,它接受一个选修的默认情况下为空的参数。当您使用它作为\insertVersion{1.1.0}可选参数时,不会给出,因此代码会有效地扩展

\vfill\hfill\footnotesize{\textcolor{blue}{Version: \textit{}}}{1.1.0}

你会得到蓝色版本:后面跟着一个空的斜体文本。版本号仍然存在,\footnotesize因为这个宏不接受参数,但实际上是一个开关。由于它不在一个组中,字体更改实际上会泄露您的预期用途,并且仍然以较小的字体打印版本号。

更好的定义是

\newcommand*{\insertVersion}[1]{%
    \vfill\hfill
        \textcolor{blue}{%
            \footnotesize Version: \textit{#1}%
        }%
}

(还有改进的空间:如果宏在分页符处展开,则可能会失败。)

相关内容