答案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}