如何制作多个独立的列然后水平填充它们?

如何制作多个独立的列然后水平填充它们?

我正在实现一个渲染作者的想法。据我所知,没有其他软件包可以为我做到这一点,但我很高兴得到纠正。这个想法是将作者放在几个独立的列中,但我目前的问题是关于我在 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}

相关内容