Wenn TikZ die Bounding Box zu einem Pfad ermittelt, dann werden von jeder Koordinate, die auf dem Pfad erreicht wird, die *x*- und die *y*-Werte überprüft, ob sie außerhalb der aktuellen (Pfad-)Bounding Box liegen. Nach dem der Pfad konstruiert wurde, wird (in `\pgfusepath`) überprüft, ob der Pfad auch *gezeichnet* werden soll (und nicht nur gefüllt o.Ä.).
Falls dies der Fall ist, fügt PGF der Bounding Box auf allen Seiten `.5\pgflinewidth` hinzu, da das Bild ja nicht nur aus dem Pfad besteht, sondern auch noch aus der Linie, die ja eine gewisse Breite hat.
Das funktioniert für den Fall des (unrotierten) Rechtecks optimal, da wir ja tatsächlich auf allen Seite genau eine halbe Linienbreite „über“ haben. PGF unterscheidet allerdings nicht zwischen dem Rechteck und der horizontalen Linie (die ja im Prinzip auch nur ein gefülltes Rechteck darstellt). So passiert es, dass an beiden Seiten `.5\pgflinewidth` Luft entsteht.
Es kann aber übrigens noch schlimmer sein:
\draw[line width=1cm, blue!50] (2,1) -- (0,0) -- (2,0);
![alt text][1]
Die gestrichelte Linie ist die Pfad-Bounding-Box vor dem Expandieren. Die gepunktete Linien zeigen an, wo die Koordinaten des Pfades liegen und deuten den Abstand `.5\pgflinewidth` an.
Der Algorithmus ist hier nicht sehr intelligent:
- Er fügt die halbe Linienbreite ein, obwohl die Linie stumpf endet (`line cap=butt`).
- Er fügt (nur) die halbe Linienbreite ein, wenn man mit `line cap=rect` das obige Verhalten vermeintlich korrigieren will:
![alt text][2]
- Bei einem `miter`-Line-Join versagt es total.
(Das obige Beispiel würde mit `line join=bevel` ohne Probleme in die Bounding Box passen, genauso wie mit `\line cap=round, line join=round`.)
Bis auf aufwändige manuelle Korrekturen (sofern sie denn überhaupt notwendig sind) kann man hier im Allgemeinen nicht helfen.
----
Für deinen Fall bietet es sich an die Keys `trim left` und `trim right` zu verwenden, um die horizontale Maße des fertigen TikZ-Pictures zu manipulieren. Dafür reicht bereits
trim left=+0cm, trim right=+\linewidth
in dem optionalen Argument von `\begin{tikzpicture}`. Wir erhalten dann:
![alt text][3]
(Meta: Die Linien von `showframe` sind *außen* an der Text-Box dran um nicht mit halber Linienbreite in den Text-Bereich hereinzuragen, werden aber *nach* dem Text gezeichnet.)
Man beachte das untere Beispiel stark herangezoomt, die Linie *berührt* den Rand nur. (Mit `\usepackage[showframe,pass]{geometry}` lässt sich das eventuell besser beobachten.)
----
Ein anderer Lösungsansatz versucht das zu lösen, in dem es die abschließende Überprüfung und das Hinzufügen von `.5\pgflinewidth` verhindert, was mit
\tikz@addmode{\pgf@relevantforpicturesizefalse}
geschehen kann. Der Switch `\pgf@relevantforpicturesizefalse` ist quasi die PGF-Version vom `overlay`-Key. Fügt man es als `mode` hinzu, wird es erst aktiv, wenn der Pfad gezeichnet, aber nicht konstruiert wird. Dies kann man ebenso im `overlay`-Key verpacken:
\makeatletter
\tikzset{
overlay/.is choice,
overlay/.default=true,
overlay/true/.code=\pgf@relevantforpicturesizefalse,
overlay/line width/.code=% oder "line width true"?
\tikz@addmode{\pgf@relevantforpicturesizefalse},
overlay/false/.code=\pgf@relevantforpicturesizetrue,
overlay/line width false/.code=\tikz@addmode{\pgf@relevantforpicturesizetrue}}
\makeatother
Dies erlaubt nun die Verwendung von `overlay=line width` auf einem Pfad, bei dem die Linienbreite schlichtweg ignoriert werden soll. Aber Vorsicht! Das ignoriert die Linienbreite auch in vertikaler Richtung. Bei dem Fall einer horizontalen Linie haben wir dann nur noch eine Bounding Box, die keine Höhe hat (und der roten Linie in dem oberen Beispiel mit der dicken Linie entspricht):
![alt text][4]
----
Wenn du den `line cap=recht` verwendest, kannst du übrigens auch einfach die Linienbreite beim zeichnen abziehen:
\draw[line width=2cm, line cap=rect] (0,0) -- (\linewidth-\pgflinewidth,0);
[1]: http://texwelt.de/wissen/upfiles/de2652-0.png
[2]: http://texwelt.de/wissen/upfiles/de2562_-0.png
[3]: http://texwelt.de/wissen/upfiles/de2652_trim.png
[4]: http://texwelt.de/wissen/upfiles/de2652_pinsel.png