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