複数の独立した列を作成し、それらを水平方向に埋めるにはどうすればよいでしょうか?

複数の独立した列を作成し、それらを水平方向に埋めるにはどうすればよいでしょうか?

著者をレンダリングするためのアイデアを実装しています。私が見た限りでは、他のパッケージではこれを行うことはできませんでしたが、訂正していただければ幸いです。アイデアは著者を複数の独立した列に配置することですが、現在の質問は、MWE で発生する不具合についてです。

最初のステップとして、3 つの独立した列を作成し、コンテンツを埋めたいと考えました。行が近すぎる場合に備えて、列を分離するために接着剤を少し追加しました。これは私の望みどおりに機能しますが、オーバーフローの警告が表示されます。

\documentclass{article}

\begin{document}

\makebox[\textwidth][c]{
  \parbox[t]{0.3\textwidth}{
    \noindent{}Item 1

    Item 4

    Item 7
  }
  \hskip 10pt plus 5pt minus 5pt\relax
  \parbox[t]{0.3\textwidth}{%
    \noindent{}Item 2

    Item 5 is a little bit longer

    Item 8
  }
  \hskip 10pt plus 5pt minus 5pt\relax
  \parbox[t]{0.3\textwidth}{%
    \noindent{}Item 3

    Item 6
  }
}

\end{document}

水平ボックスを中央に配置するか幅を狭くすることで、このエラーを解消できますが、その理由を説明できる方はいますか? マクロをまだ使用せずに乱用しているような気がします。

この効果を実現するより良い方法があれば、ぜひ教えてください。テーブルではなくボックスを使用することにしましたが、再検討してもかまいません。列数と行数が事前にわからない場合は、ボックスの方が自然だと思いました。

答え1

あなたは得る

Overfull \hbox (15.0pt too wide) in paragraph at lines 5--28

外側\makeboxがインデントされているため\parindent\noindentこれは修正されますが、内側のリストからボックスがいっぱいになる可能性もあります。

箱の\textwidth中には

SPACE .3\textwidth SPACE 10pt  .3\textwidth SPACE 10pt .3\textwidth SPACE

したがって、4 つの単語スペース + 20pt が .1\textwidth より大きいかどうかによって、収まる場合と収まらない場合があります。

\documentclass{article}

\begin{document}

\noindent\makebox[\textwidth][c]{%%%%
  \parbox[t]{0.3\textwidth}{%
    Item 1

    Item 4

    Item 7
  }\hfill
  \parbox[t]{0.3\textwidth}{%
    Item 2

    Item 5 is a little bit longer

    Item 8
  }\hfill
  \parbox[t]{0.3\textwidth}{%
   Item 3

    Item 6
  }%%%%
}

\end{document}

マークされた行の末尾は%コメントする必要はありませんが、良い習慣です。マークされたものは、%%%%不適切なスペースを避けるために必要です。


この種のレイアウトに表形式がよく使用される理由の 1 つは、3 つの等幅のボックスは技術的には等間隔で全幅に広がっていますが、短いエントリが含まれる可能性がある場合は左にシフトして見えるためです。

ここに画像の説明を入力してください

\documentclass{article}

\begin{document}

\hrule

\noindent X\dotfill X

\noindent\makebox[\textwidth][c]{%%%%
  \parbox[t]{0.3\textwidth}{
    Item 1

    Item 4

    Item 7
  }\hfill
  \parbox[t]{0.3\textwidth}{%
    Item 2

    Item 5 is a little bit longer

    Item 8
  }\hfill
  \parbox[t]{0.3\textwidth}{%
   Item 3

    Item 6
  }%%%
}

\bigskip

\hrule

\noindent X\dotfill X

\noindent\makebox[\textwidth][c]{%%%%
  \begin{tabular}[t]{@{}l@{}}
    Item 1\\
    Item 4\\
    Item 7
   \end{tabular}\hfill
   \begin{tabular}[t]{@{}l@{}}
    Item 2\\
    Item 5 is a little bit longer\\
    Item 8
   \end{tabular}\hfill
   \begin{tabular}[t]{@{}l@{}}
   Item 3\\
    Item 6
   \end{tabular}%%%
}


\end{document}

関連情報