原因不明のボックスオーバー

原因不明のボックスオーバー

評価のマークを入れるための長い水平バーを作成しようとして、次のコードを作成しました。

\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

これには 2 つの原因があります。

  1. 段落のインデント。標準の段落インデントはtikzpictureの前に追加されますが、次のようにして1行だけ無効にすることができます\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}

関連情報