Необъяснимая переполненная коробка

Необъяснимая переполненная коробка

Я пытался создать длинную горизонтальную полосу, на которой можно было бы разместить оценки, и создал следующий код.

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

Связанный контент