Как создать несколько независимых столбцов, а затем заполнить их горизонтально?

Как создать несколько независимых столбцов, а затем заполнить их горизонтально?

Я реализую идею для отображения авторов. Насколько я понял, никакой другой пакет не мог бы сделать это за меня, но я рад, что меня поправили. Идея заключается в том, чтобы разместить авторов в нескольких независимых колонках, но мой текущий вопрос касается конкретно плохого, что я получаю в 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}

Концы отмеченных строк %не нуждаются в комментариях, но это хорошая практика. Отмеченные %%%%нужны для избежания плохих пробелов.


Одна из причин, по которой для такого рода макетов часто используются табличные форматы, заключается в том, что три блока одинаковой ширины, хотя технически они расположены на одинаковом расстоянии друг от друга и охватывают всю ширину, выглядят смещенными влево, если есть вероятность наличия коротких записей.

введите описание изображения здесь

\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}

Связанный контент