快速提问:我复制了此代码:
\documentclass{article}
\usepackage{amsmath,amssymb,calc}
\def\horizlist#1#2#3{%
\setcounter{enumi}{0}%
#3%
\flushleft
\newlength\stringlength
\setlength\stringlength{#2}
\advance\stringlength by #1 \relax
\def\item{\hfil\egroup\penalty50 \hfill
\refstepcounter{enumi}%
\leavevmode\hbox to \stringlength \bgroup\space(\theenumi)\space}
\leavevmode\bgroup\hskip 0pt plus -1fill }
\def\endhorizlist{\hfil\egroup\endflushleft}
\begin{document}
\begin{enumerate}
\item blah
\begin{horizlist}{2cm}{\widthof{null}}{\renewcommand\theenumi{\alph{enumi}}}
\item null
\item null
\item null
\item null
\item null
\item null
\item null
\item null
\item null
\item null
\end{horizlist}
\end{enumerate}
\end{document}
它做了它应该做的事情,唯一的问题是最后一个项目出现在右侧,而不是与左侧的前一个项目相邻。我该如何解决这个问题?为了阐明问题:
输出如下:
我要这个:
有什么帮助吗?
答案1
您需要跟踪当前列。我发现通过将环境定义为 来完成整个操作更容易(也更灵活)horizlist
。tabular
这样,您不仅可以使用\item
而不是&
/ \\
,还可以根据需要指定对齐方式(horizlist
env 的第二个参数)。
\documentclass{article}
\usepackage{calc}
\newcount\horizlistcount
\newenvironment{horizlist}[2]{%
\setcounter{enumi}{0}%
\renewcommand\theenumi{\alph{enumi}}%
\def\nextsep{}%
\global\horizlistcount=#1
\def\item{%
\nextsep
\refstepcounter{enumi}(\theenumi)
\ifnum\horizlistcount=0 \global\horizlistcount=#1 \fi
\global\advance\horizlistcount-1
\ifnum\horizlistcount=0 \def\nextsep{\\}\else\def\nextsep{&}\fi
}%
\begin{tabular}[t]{*{#1}{#2}}
}{%
\end{tabular}
}
\begin{document}
\begin{enumerate}
\item blah
\begin{horizlist}{4}{p{\widthof{null}+2cm}}
\item null
\item null
\item null
\item null
\item null
\item null
\item null
\item null
\item null
\item null
\end{horizlist}
\end{enumerate}
\end{document}
(要进入嵌入表之前的新行,只需\\
在其前面说,或将其包含在定义中。)
答案2
不是完全自动化的,但可以满足您的需要。我们引入了一个\noitem
插入“幻影项目”的命令。非自动化的原因是,我们事先不知道\noitems
应该有多少幻影项目。
\documentclass{article}
\usepackage{amsmath,amssymb,calc}
\def\horizlist#1#2#3{%
\setcounter{enumi}{0}%
#3%
\flushleft
\newlength\stringlength
\setlength\stringlength{#2}
\advance\stringlength by #1 \relax
\def\item{\hfil\egroup\penalty50 \hfill
\refstepcounter{enumi}%
\leavevmode\hbox to \stringlength \bgroup\space(\theenumi)\space}
\def\noitem{\hfil\egroup\penalty50 \hfill
\leavevmode\hbox to \stringlength \bgroup}
\leavevmode\bgroup\hskip 0pt plus -1fill }
\def\endhorizlist{\hfil\egroup\endflushleft}
\begin{document}
\begin{enumerate}
\item blah
\begin{horizlist}{2cm}{\widthof{null}}{\renewcommand\theenumi{\alph{enumi}}}
\item null
\item null
\item null
\item null
\item null
\item null
\item null
\item null
\item null
\item null
\noitem\noitem
\end{horizlist}
\end{enumerate}
\end{document}