快速問題:我複製了這段程式碼:
\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
\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}