删除 itemize 前的空格

删除 itemize 前的空格

我定义了一个\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

如果要itemize像这样使用,可以enumitem使用以下方法before=Entry

\documentclass{article}
\usepackage{enumitem}
\setlength{\parindent}{0pt}

\begin{document}
    \begin{itemize}[topsep=0pt,before=Entry]
    \item First Item
    \item Second Item
    \end{itemize}
\end{document}

在此处输入图片描述

答案4

我同意@Christian的观点,即a\par比 更好,\\而且总的来说,这似乎是一种相当奇怪的构建\NewEntry命令的方式。

但是仅供参考,您可以在带有 itemize 的参数中使用负空格:

\NewEntry{ENTRY}
{\vspace{-\baselineskip}
\begin{itemize}[topsep=0pt]
\item First Item
\item Second Item
\end{itemize}
}

尽管如此,我还是会不是推荐这样的构造。

尝试看看是否可以让你的命令更加“语义化”。

相关内容