使 \newcommand 参数可选且不产生任何后果

使 \newcommand 参数可选且不产生任何后果

我的 .cls 文件中有此代码块 -

\newcommand{\ExperienceEntry}[5]{
    \noindent\makebox[\width][l]{#1} \hfill
    \makebox[\width][l]{#2} \\
    \noindent\makebox[\width][l]{#3} \hfill \\
    \indent
    \makebox[\width][l]{\textit{#4}} \vspace{5pt}\\
    \noindent
    \parbox[t][\height][c]{\textwidth}{\small{#5}}
    \vspace{-1pt}
}

如何使第三个参数 ( #3) 成为可选参数?我所说的可选参数是指,如果我将其留空{},则不希望文档中出现空白。

例如,会发生以下情况:
这是 .tex 代码 -
在此处输入图片描述 这是生成的文档 - 间隙示例

我发现了一些关于根据提供的参数而产生不同行为的相关文档 -
带有和不带有可选参数的不同命令定义
新命令的可选参数?
但我不确定在我的情况下如何使用它。
https://stackoverflow.com/questions/1812214/latex-optional-arguments似乎最相关,但这里必须定义一个默认行为,而我希望默认行为是忽略该参数。

答案1

这不是 LaTeX 术语中的“可选参数”,它们使用[]not {}。但是,您可以通过多种方式测试参数是否为空,例如

\if\relax\detokenize{#2}\relax\else
  \mbox{#2}\\ 
\fi

如果#2为空,则最终测试\if\relax\relax 哪个为真,否则测试将为假,因此#2将被使用。(注意,我简化了\makebox\mbox删除了之前的虚假空格\\


看起来您#3不是想测试#2……

笔记

  \noindent\makebox[\width][l]{#3} \hfill \\

你不需要\hfill之前\\,你之前也不应该有空格\hfill,正如前面提到的,你可以简单地使用\mbox,所以你可以用以下方式替换这一行

\if\relax\detokenize{#3}\relax\else
  \mbox{#3}\\ 
\fi

相关内容