如果没有给出参数,则删除新命令中参数占用的空间

如果没有给出参数,则删除新命令中参数占用的空间
\newcommand{\entry}[4]
{
\hspace{\ls}
\textbf{\MakeUppercase{#1},}\MakeUppercase{#2}
\hfill
\MakeUppercase{#3}

\hspace{\ls}
{#4}
\vspace{-0.7em}
}

如果我将第四个参数留空,则我不希望在代码中显示空格(IE我的应该出现/开始在参数所在的itemize行上)。#4

\entry
{1}
{2}
{3}
{4}
\begin{itemize}
\item one
\item two
\end{itemize}

\entry{1}{2}{3}{}
\begin{itemize}
\item one
\item two
\end{itemize}

答案1

你可以检查参数是否为空决定是否设置它:

在此处输入图片描述

\documentclass{article}

\newlength{\ls}
\setlength{\ls}{1.5em}

\newcommand{\entry}[4]{%
  \hspace{\ls}%
  \textbf{\MakeUppercase{#1},}\MakeUppercase{#2}
  \hfill
  \MakeUppercase{#3}

  % https://tex.stackexchange.com/q/53068/5764
  \if\relax\detokenize{#4}\relax\else
    \hspace{\ls}%
    {#4}
  \fi
  \vspace{-0.7em}
}

\begin{document}

\entry{1}{2}{3}{4}
\begin{itemize}
  \item one
  \item two
\end{itemize}

\entry{1}{2}{3}{}
\begin{itemize}
  \item one
  \item two
\end{itemize}

\end{document}

请注意对 定义中的一些虚假空格的更正\entry

答案2

您可以使用ifmtarg检查参数是否为空的包。

% mtargprog. tex SE 526111 参数为空

\documentclass{article}
\usepackage{ifmtarg}

\newlength{\ls}
\setlength{\ls}{1.5em}

\makeatletter
\newcommand{\entry}[4]{%
  \hspace{\ls}%
  \textbf{\MakeUppercase{#1},}\MakeUppercase{#2}
  \hfill
  \MakeUppercase{#3}

  \@ifnotmtarg{#4}{% only do this if the argument is empty
    \hspace{\ls}%
    {#4}%
  \vspace{-0.7em}
  } % end of \@ifnotmatarg
} % end of \entry
\makeatother

\begin{document}

\entry{1}{2}{3}{4}
\begin{itemize}
  \item one
  \item two
\end{itemize}

\entry{1}{2}{3}{}
\begin{itemize}
  \item one
  \item two
\end{itemize}

\end{document}

对使用@Werner 的部分代码表示歉意。

相关内容