LaTeX enumerate环境下图片与后续文本出现过大空白间距
问题原因
出现异常大间距的核心原因有两点:
- 你在TikZ网格绘制的循环代码中写了无效的空节点声明:
node [above] at (\i,-10){}。TikZ计算图片边界盒时会把所有节点的坐标纳入计算范围,哪怕节点内容为空,y=-10的坐标点也会把图片的下边界硬生生拉低10个单位,相当于图片底部凭空多出10个单位的透明空白,直接撑开了和后续列表的间距。 - 代码中直接将
tikzpicture环境和嵌套enumerate环境连写,没有做分段处理,多余的分组(\item后不必要的花括号包裹)和列表默认顶部间距叠加,进一步放大了空白。
修复方案
- 删除无效的空节点代码
网格绘制部分不需要额外添加无内容的节点,直接删掉node声明即可,将循环代码修改为:\foreach \i in {0,...,4}{ \draw [thin,black] (\i,0) -- (\i,4); \draw [thin,black] (0,\i) -- (4,\i); } - 调整排版间距
在tikzpicture环境结束后添加\par强制分段,给嵌套的enumerate环境设置topsep=0pt参数去掉默认顶部间距,同时去掉\item后多余的花括号分组,避免不必要的间距异常。
修复后完整可运行代码
\documentclass{article} \usepackage{tikz} \usepackage{enumitem} \begin{document} \begin{enumerate} \item What is the bitstring of this $4\times 4$ pixel image?\newline \phantom{abcdefg}\begin{tikzpicture}[scale=.7] \path[fill=gray] (0,0) -- (1,0) -- (1,1) -- (0,1) -- (0,0); \path[fill=gray] (0,2) -- (1,2) -- (1,3) -- (0,3) -- (0,2); \path[fill=gray] (3,2) -- (4,2) -- (4,3) -- (3,3) -- (3,2); \path[fill=gray] (2,2) -- (3,2) -- (3,3) -- (2,3) -- (2,2); \path[fill=gray] (1,2) -- (2,2) -- (2,3) -- (1,3) -- (1,2); \path[fill=gray] (2,1) -- (3,1) -- (3,2) -- (2,2) -- (2,1); \path[fill=gray] (2,3) -- (3,3) -- (3,4) -- (2,4) -- (2,3); \path[fill=gray] (3,3) -- (4,3) -- (4,4) -- (3,4) -- (3,3); \path[fill=gray] (2,0) -- (3,0) -- (3,1) -- (2,1) -- (2,0); \foreach \i in {0,...,4}{ \draw [thin,black] (\i,0) -- (\i,4); \draw [thin,black] (0,\i) -- (4,\i); } \end{tikzpicture}\par \begin{enumerate}[topsep=0pt] \item $0011$ $1111$ $0010$ $1010$ \item $0011$ $1111$ $0010$ $1010$ \item $0011$ $1111$ $0010$ $1010$ \item $0011$ $1111$ $0010$ $1010$ \item $0011$ $1111$ $0010$ $1010$ \end{enumerate} \end{enumerate} \end{document}
额外优化建议
如果需要实现图片和选项并排的效果,可以将tikzpicture放入minipage环境中和选项列表做分栏排版,间距控制会更精准,不会出现内容偏移、间距异常的问题。
内容的提问来源于stack exchange,提问作者daniel radil
相关产品推荐
相关产品推荐

