两个列表项组之间的间距

两个列表项组之间的间距

我正在尝试格式化一份家庭作业文档,我想在其中以列表形式写出问题和答案。问题后面跟着答案,在下一个问题和答案之前,我希望有一个稍大的间隙

\begin{itemize}
    \item[Q.] Question 1
    \item[A.] Answer 1
    %space here
    \item[Q.] Question 2
    \item[A.] Answer 2
\end{itemize}

目前,我使用空列表项 ( ) 添加空格\item[]。输出如下所示。不幸的是,这会创建比我想要的更大的空间。有没有更简洁的方法来做到这一点?

输出

答案1

非常基本的解决方案,不需要手动间隔:

定义两个宏,\question\answer,分别执行\item[Q.]\item[A.]。如果不在第一个问题中,\question宏还会插入一个垂直空格,因此列表和段落之间的空格是正确的。0.25 cm

在此处输入图片描述

\documentclass{article}

\usepackage{lipsum}% Just for dummy text

\makeatletter
\newif\iffirstquestion
        \firstquestiontrue
\def\question{%
  \iffirstquestion
    \firstquestionfalse
  \else
    \vspace{0.25cm}%
  \fi
  \item[Q.]}
\def\answer{%
  \item[A.]}
\makeatother

\begin{document}

\lipsum[1]

\begin{itemize}
    \question Question 1
    \answer Answer 1
    \question Question 2
    \answer Answer 2
    \question Question 2
    \answer Answer 2
    \question Question 2
    \answer Answer 2
\end{itemize}

\lipsum[1]

\end{document}

并且,按照 A. Ellet 的建议,如果您总是用“问题/答案”标记每个项目,则可以使用计数器:

\documentclass{article}

\usepackage{lipsum}% Just for dummy text

\makeatletter
\newcounter{QuestionCounter}
\newif\iffirstquestion
        \firstquestiontrue
\def\question{%
  \iffirstquestion
    \setcounter{QuestionCounter}{1}% Remove this to have the same numbering across different itemize's
    \firstquestionfalse
  \else
    \vspace{0.25cm}%
  \fi
  \item[Q.] Question \theQuestionCounter:\space}
\def\answer{%
  \item[A.] Answer \theQuestionCounter:\space
  \stepcounter{QuestionCounter}}
\makeatother

\begin{document}

\lipsum[1]

\begin{itemize}
    \question What's your name?
    \answer Foo
    \question Where do you live?
    \answer Bar
    \question How old are you?
    \answer -1
\end{itemize}

\lipsum[1]

\end{document}

答案2

更简单地说,你可以为每个问答使用不同的项目:

\begin{itemize}
    \item[Q.] Question 1
    \item[A.] Answer 1
\end[itemize}

\begin{itemize}
    \item[Q.] Question 2
    \item[A.] Answer 2
\end{itemize}

答案3

您有多种选择。

  • 最简单的方法是:定义您自己的命令,例如\questionVSpace,在列表内的元素之间使用空格。请注意,垂直空间命令的定义可能取决于您使用的类。
  • 还有更复杂的方法可以做到这一点。我建议使用命令来执行此操作。此命令应自动处理垂直空间并应全局处理布局问题,例如,如果您想将“Q.”更改为“Question”。一种粗暴但更有用的方法是我的第二种变体。这也允许列举问题,请参阅下面的代码。

这些变体在以下 MWE 中实现。

\documentclass{article} 

%you can manually choose a space here if you do not like the predefined ones
%In case you want to use one of the predfined ones, say \smallskip, you should still use \questionVSpace and replace \vspace{9ex} with \smallskip
\newcommand{\questionVSpace}{\vspace{9ex}}


\newcounter{questionCounter}
\newcommand{\qAndA}[2]{
%The following code automatically adds the space unless it is the first question. 
\ifnum\value{questionCounter}>0
\bigskip%you can choose a different space here.
\fi
\stepcounter{questionCounter}
% You could also change "Q." to "Q. \thequestionCounter"
\item[Q.] #1 
\item[A.] #2
}

\begin{document}
\section{Variant A}
Test
\begin{itemize}
    \item[Q.] Question 1
    \item[A.] Answer 1
    \smallskip
    \item[Q.] Question 2
    \item[A.] Answer 2
    \medskip
    \item[Q.] Question 3
    \item[A.] Answer 3
    \bigskip
    \item[Q.] Question 4
    \item[A.] Answer 4
    \questionVSpace
    \item[Q.] Question 5
    \item[A.] Answer 5
\end{itemize}

\section{Variant B}
Test
\begin{itemize}
    \qAndA {Text foo}{Text bar}
    \qAndA {Text foo}{Text bar}
    \qAndA {Text foo}{Text bar}
\end{itemize}
\end{document}

在此处输入图片描述

答案4

项目之间的空间由 控制\itemsep,因此您可以为每个项目进行修复,这样做的好处是您的问答列表不会受到默认值的影响,\itemsep因为它会使用一些额外的垂直空间,如\vspace\bigskip。我也会添加一些胶水,而不是固定长度,这将有助于避免出现孤立的项目/线条。

这可以很容易地完成,因为已经提议为每个项目类型创建一个宏,我认为从语义上讲,这比复杂的\item类型重新定义隐藏地从“Q。”切换到“A。”更好。考虑到“保持简单”的原则,我认为不需要条件或计数器(如果您澄清了这一点,我会编辑答案),因此宏可以是这样的:

\documentclass{article}

\newcommand\Q[1]{\item[\bfseries Q.]
\itemsep2pt plus 2pt #1}
\newcommand\A[1]{\item[\bfseries A.]
\itemsep1em plus .2em minus .1em #1}

\newenvironment{q-a}{\section*{Questions 
and answers}\begin{itemize}}{\end{itemize}}

\begin{document}

\begin{q-a}
    \Q Question 1
    \A Answer 1 
    \Q Question 2
    \A Answer 2 
    \Q Question 3
    \A Answer 3 
\end{q-a}

\end{document}

姆韦

相关内容