无法解释的箱子超满

无法解释的箱子超满

我试图创建一个长水平条来放置评估标记,并且我创建了以下代码。

\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

造成这种情况的原因有两点:

  1. 段落缩进。标准段落缩进添加在 tikzpicture 之前,您可以使用 禁用单行缩进\noindent,即\noindent\tikz...

  2. 当你画一条线时,边界框实际上会延伸到终点坐标之外线宽的一半,正如你从这个例子中看到的那样:

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

相关内容