\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 的部分代码表示歉意。