我定义了一个\newcommand
调用\NewEntry
,它接受两个参数并将一个参数打印在另一个参数上方。
\newcommand{\NewEntry}[2]{
#1 \\
#2
}
通过以下方式调用此命令
\NewEntry{ENTRY}
{\begin{itemize}[topsep=0pt]
\item First Item
\item Second Item
\end{itemize}
}
topsep
即使设置为零,也会导致“ENTRY”和“First item”之间出现垂直空格。
我想删除这个空间。
如果命令被调用
\NewEntry{ENTRY}
{Blah\begin{itemize}[topsep=0pt]
\item First Item
\item Second Item
\end{itemize}
}
然后“Blah”占据了我试图删除的空间。
MWE 如下:
\documentclass{article}
\usepackage{enumitem}
\setlength{\parindent}{0pt}
\newcommand{\NewEntry}[2]{
#1 \\
#2
}
\begin{document}
\NewEntry{ENTRY}
{Blah\begin{itemize}[topsep=0pt]
\item First Item
\item Second Item
\end{itemize}
}
\NewEntry{ENTRY}
{\begin{itemize}[topsep=0pt]
\item First Item
\item Second Item
\end{itemize}
}
\end{document}
任何帮助将不胜感激。
答案1
\documentclass{article}
\usepackage{enumitem}
\setlength{\parindent}{0pt}
\newcommand{\NewEntry}[2]{%
#1 \par\noindent
#2}
\begin{document}
\NewEntry{ENTRY}{}
Blah
\begin{itemize}[topsep=0pt]
\item First Item
\item Second Item
\end{itemize}
\NewEntry{ENTRY}{}
\begin{itemize}[topsep=0pt]
\item First Item
\item Second Item
\end{itemize}
\end{document}
itemize
本身会以新行开始,因此\\
在宏中添加更多内容会导致出现空白行。用 替换它\par\noindent
即可解决问题。此外,您可能还记得添加了一个空对,{}
因此也许您稍后可以添加另一个参数。
答案2
\\
删除后面的错误#1
——这样做毫无用处。留一个空白行来分隔项目。在我看来,这并不是真正令人信服的使用方式itemize
。
\documentclass{article}
\usepackage{enumitem}
\setlength{\parindent}{0pt}
\newcommand{\NewEntry}[2]{%
#1%
#2%
}
\begin{document}
\NewEntry{ENTRY}
{\begin{itemize}[topsep=0pt]
\item First Item
\item Second Item
\end{itemize}
}
\NewEntry{ENTRY}{%
\begin{itemize}[topsep=0pt]
\item First Item
\item Second Item
\end{itemize}
}
\end{document}
一些改进的建议
\documentclass{article}
\usepackage{xparse}
\usepackage{enumitem}
\setlength{\parindent}{0pt}
\newlist{notopsepitemize}{itemize}{1}
\setlist[notopsepitemize,1]{label={\textbullet},topsep=0pt}
\ExplSyntaxOn
\clist_new:N \l_tonychief_item_clist
\NewDocumentCommand{\NewEntry}{O{}mm}{
\clist_set:Nn \l_tonychief_item_clist {#3}
#2
\begin{notopsepitemize}[#1]
\item
\clist_use:Nn \l_tonychief_item_clist {\item} %
\end{notopsepitemize}
}
\ExplSyntaxOff
\begin{document}
\NewEntry{ENTRY}{Item One, Item Two, Item Three, Item Four}%
\NewEntry[topsep=20pt]{Other ENTRY}{Item One, Item Two, Item Three, Item Four}%
\end{document}
答案3
答案4
我同意@Christian的观点,即a\par
比 更好,\\
而且总的来说,这似乎是一种相当奇怪的构建\NewEntry
命令的方式。
但是仅供参考,您可以在带有 itemize 的参数中使用负空格:
\NewEntry{ENTRY}
{\vspace{-\baselineskip}
\begin{itemize}[topsep=0pt]
\item First Item
\item Second Item
\end{itemize}
}
尽管如此,我还是会不是推荐这样的构造。
尝试看看是否可以让你的命令更加“语义化”。