項目別テーブルレイアウト

項目別テーブルレイアウト

質問です: このコードをコピーしました:

\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使用できるだけでなく、必要に応じて配置を指定することもできます(env の 2 番目の引数)。\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}

関連情報