![无法解释的箱子超满](https://linux22.com/image/420595/%E6%97%A0%E6%B3%95%E8%A7%A3%E9%87%8A%E7%9A%84%E7%AE%B1%E5%AD%90%E8%B6%85%E6%BB%A1.png)
我试图创建一个长水平条来放置评估标记,并且我创建了以下代码。
\documentclass{article}
\usepackage{tikz}
\setlength{\parindent}{0pt}
\newcommand{\TotalMarks}[1]{%
\tikz\draw[thick]
(0,0) -- (\linewidth,0) --
++(0,2em) -- ++(-2em,0) --
++(0,-2em) node[pos=0.6,left]
{\makebox[2.9cm]{\textbf{Total: #1 marks}\hfill}};}
\begin{document}
\TotalMarks{2}
\end{document}
我不明白为什么它会出现 Overfull 错误:
Overfull \hbox (0.79999pt too wide) in paragraph at lines 14--15[][]
我该如何修复它?
感谢您给予我任何帮助。
答案1
造成这种情况的原因有两点:
段落缩进。标准段落缩进添加在 tikzpicture 之前,您可以使用 禁用单行缩进
\noindent
,即\noindent\tikz...
当你画一条线时,边界框实际上会延伸到终点坐标之外线宽的一半,正如你从这个例子中看到的那样:
\documentclass[border=5mm]{standalone} \usepackage{tikz} \begin{document} \begin{tikzpicture} \draw [line width=5mm] (0,0) -- (1,0); \draw [very thin, red] (0,-0.5) -- (0,0.5); \draw [thin, blue] (current bounding box.south east) rectangle (current bounding box.north west); \end{tikzpicture} \end{document}
蓝线表示边界框。
如果您添加line cap=rect
,该线将延伸以填充该空白处,并且您pgf
有一个方便的宏\pgflinewidth
,它具有当前路径的宽度。因此,您可以执行\draw[thick,line cap=rect] (0,0) -- (\linewidth-\pgflinewidth,0) ...
。
工作示例,正如 egreg 提到的,你不应该使用minimal
(为什么要避免使用最小类?):
\documentclass{article}
\usepackage{tikz}
\newcommand{\TotalMarks}[1]{%
\tikz\draw[thick,line cap=rect]
(0,0) -- (\linewidth-\pgflinewidth,0) --
++(0,2em) -- ++(-2em,0) --
++(0,-2em) node[pos=0.6,left]
{\makebox[2.9cm]{\textbf{Total: #1 marks}\hfill}};}
\begin{document}
\noindent\TotalMarks{2}
\end{document}