自动调整 inparaenum 布局

自动调整 inparaenum 布局

我正在尝试通过以下方式自定义内联列表:

  1. 我想将无法完全容纳在一行中的项目移动到下一行。
  2. 增加连续行之间的垂直空间。

这是我的 MWE:

\documentclass{article}
\pagestyle{empty}
\usepackage{paralist}
\begin{document}
\noindent
Find the derivative of each of the following:\\[4pt]
\begin{inparaenum}[\hspace{1em}(a)]
\item $f_1(x)=2x^2+x-10$
\item $f_2(x)=4x^4-x^3+2x^2+5x-6$
\item $f_3(x) = -x^3-x^2+4x+6$
\item $f_4(x)=21x^5-x^4+2x^3+7x^2-13$
\item $f_5(x)=3x^4-4x^3-12x^2+12x-10$
\end{inparaenum}
\end{document}

因此,例如,项目 (c) 和 (e) 应该在下一行。当我为学生准备作业集时,我需要这样的环境,其中的问题有多个部分,最好以这种方式布局。我提到这一点是为了防止有人有完全不同的方法。

答案1

zrefsavepos模块 ( zref-savepos) 可用于捕获标签的 (x,y) 坐标。使用此方法,您可以判断是否要断线:

在此处输入图片描述

\documentclass{article}
\pagestyle{empty}
\usepackage{zref-savepos}% http://ctan.org/pkg/zref
\makeatletter
% http://tex.stackexchange.com/q/69051/5764
% \zsaveposx is defined since 2011/12/05 v2.23 of zref-savepos
\@ifundefined{zsaveposy}{\let\zsaveposy\zsavepos}{}
\newcounter{vposcnt}% Vertical position counter
\renewcommand*{\thevposcnt}{vpos\number\value{vposcnt}}
\newcommand*{\markpos}{% Set current mark
  \zsaveposy{\thevposcnt M}}
\newcommand*{\leftpos}{% Set left mark
  \zsaveposy{\thevposcnt L}}
\newcommand*{\rightpos}{% Set right mark
  \zsaveposy{\thevposcnt R}}
\newcommand{\insertbreak}{%
  \zref@refused{\thevposcnt L}% Used left mark
  \zref@refused{\thevposcnt M}% Used current mark
  \zref@refused{\thevposcnt R}% Used right mark
  \ifnum\zposy{\thevposcnt M}=\zposy{\thevposcnt L}\ifnum\zposy{\thevposcnt L}=\zposy{\thevposcnt R}\relax%
  \else\par\noindent\fi\else\par\noindent\fi%
}
\makeatother
\newcounter{inparaenum}\renewcommand{\theinparaenum}{(\alph{inparaenum})}
\newenvironment{inparaenum}{%
  \setcounter{inparaenum}{0}% Restart numbering
  \def\item{% How to process each item
    \ifnum\value{inparaenum}>0\rightpos\quad\fi% Place a right mark in not first item
    \stepcounter{inparaenum}\stepcounter{vposcnt}% A new item
    \markpos\ifnum\value{inparaenum}>1\insertbreak\fi%
    \leftpos\theinparaenum\space\ignorespaces}%
  \noindent\ignorespaces}%
  {\rightpos}% End inparaenum with right mark
\makeatother

\begin{document}
\noindent
Find the derivative of each of the following: \par\medskip
\begin{inparaenum}
  \item $f_1(x)=2x^2+x-10$
  \item $f_2(x)=4x^4-x^3+2x^2+5x-6$
  \item $f_3(x)=-x^3-x^2+4x+6$
  \item $f_4(x)=21x^5-x^4+2x^3+7x^2-13$
  \item $f_5(x)=3x^4-4x^3-12x^2+12x-10$
\end{inparaenum}
\end{document}

如果垂直位置有任何变化,则必须重新编译直到引用稳定下来。

如果需要的话,可以检查inparaenum是否有\item

答案2

这里有一个替代建议(因为你提到了完全不同的方法……)。这个tasks包(我的一部分exsheetsbundle)提供了一个类似列表的环境(嗯,不是确切地列表式...)用于按列排列列表布局,其中项目按行而不是按列排列:

\documentclass{article}
\pagestyle{empty}
\usepackage{tasks}
\settasks{
  counter-format = (tsk[a]) ,% labels (a) (b) ...
  label-width    = 2em
}
\begin{document}
\noindent
Find the derivative of each of the following:
\begin{tasks}(2)% <= use two columns, the default number can be set with an option, too
  \task $f_1(x)=2x^2+x-10$
  \task $f_2(x)=4x^4-x^3+2x^2+5x-6$
  \task $f_3(x)=-x^3-x^2+4x+6$
  \task $f_4(x)=21x^5-x^4+2x^3+7x^2-13$
  \task $f_5(x)=3x^4-4x^3-12x^2+12x-10$
\end{tasks}
\end{document}

在此处输入图片描述

相关内容