Die folgende Grafik (Coulomb-Wall für Protonen) beansprucht nach oben mehr Platz als nötig (erkennbar am eingefügten Rahmen). Dies wird offenkundig durch den Kontrollpunkt (2,4) verursacht, der höher liegt als alle darstellbaren Objekte.

Natürlich will ich den Leerraum über dem Bild vermeiden, also entweder Tikz dazu bringen, den Kontrollpunkt bei der Bestimmung der Bildgröße zu ignorieren oder aber die Kurve auf anderem Wege zeichnen.

Open in Online-Editor
\documentclass{article}
\usepackage{tikz}

\begin{document}
\frame{\begin{tikzpicture}
\draw[very thick,red] (0,0)--(0,-2.5)--(2,-2.5)--(2,0) .. controls (2,4) and (2.5,0.2) ..(4.5,0.15) node[pos=0.6,right] {Coulomb-Wall};
\draw[very thick,->] (0,0)--(4.5,0) node [pos=0.96,below] {$r$};
\draw[very thick,->] (0,-5)--(0,2) node [pos=0.96,left] {$E$};
\end{tikzpicture}}
\end{document}

gefragt 05 Mär, 05:22

Cletus's gravatar image

Cletus
995126
Akzeptiert: 71%

bearbeitet 06 Mär, 05:45

1

Das ist eventuell ein Duplikat zu Pfade verbergen TikZ.

(05 Mär, 16:12) esdd

Diese Frage ist zwar verwandt, jedoch nicht inhaltsgleich, da es dort nicht um Kontrollpunkte geht. Daher ist ein Teil der dort angegebenen Lösungsvorschläge für mein Problem auch nicht brauchbar.

(06 Mär, 05:43) Cletus

@Cletus Die Frage und auch die Antwort dort sind allgemeiner. Die Kontrollpunkte sind nur ein Spezialfall nicht sichtbarer und trotzdem die Bounding Box vergrößernder Pfade und Knoten.

(08 Mär, 11:42) esdd

useasboundingbox

Normalerweise bestimmt TikZ die Bounding Box für das Bild selbst, anhand der platzierten Punkten (wobei Kontrollpunkte von Bézier-Kurven dazu gehören). Man kann die Bounding Box aber auch selbst setzen mit Hilfe von

Open in Online-Editor
\useasboundingbox <Pfad>;

Wobei \useasboundingbox lediglich eine Abkürzung für \path[use as bounding box] ist.

Open in Online-Editor
\documentclass{article}
\usepackage{tikz}

\begin{document}
\frame{%
  \begin{tikzpicture}
    \useasboundingbox (-0.5,-5) rectangle (4.5,2);
    \draw[very thick,red] (0,0)--(0,-2.5)--(2,-2.5)--(2,0) .. controls (2,4) and (2.5,0.2) ..(4.5,0.15);
    \draw[very thick,->] (0,0)--(4.5,0) node [pos=0.96,below] {$r$};
    \draw[very thick,->] (0,-5)--(0,2) node [pos=0.96,left] {$E$};
  \end{tikzpicture}%
}
\end{document}

alt text

curve to

Meistens verbindet man Punkte mit --. Dies ist die »line to«-Operation. Alternativ kann man Punkte mit der »curve to«-Operation verbinden. Dies geht entweder durch manuelles setzen der Kontrollpunkte bei Verwendung von .. oder mit dem Keyword to.

Open in Online-Editor
\path[...] (<Punkt>) to (<Punkt>);

Hier werden die Kontrollpunkt automatisch berechnet aus Optionen, die man an to übergibt. Zum Beispiel kann man die Winkel angeben unter der die Linie einen Punkt verlassen oder treffen soll. Mehr dazu in der Anleitung.

Wählt man als Winkel 0° oder 180°, so kann man sich sicher sein, dass der Kontrollpunkt nicht überhalb liegen wird.

Open in Online-Editor
\documentclass{article}
\usepackage{tikz}

\begin{document}
\frame{%
  \begin{tikzpicture}
    \draw[very thick,red] (0,0)--(0,-2.5)--(2,-2.5)--(2,0)
      to[out=90,in=180,in looseness=0.25] (2.2,1.8) to[out=0,in=180,out looseness=0.25] (4.5,0.15);
    \draw[very thick,->] (0,0)--(4.5,0) node [pos=0.96,below] {$r$};
    \draw[very thick,->] (0,-5)--(0,2) node [pos=0.96,left] {$E$};
  \end{tikzpicture}%
}
\end{document}

alt text

Permanenter link

beantwortet 05 Mär, 07:22

Henri's gravatar image

Henri
10.0k31730

Ist es auch möglich, nur die Bildhöhe, aber nicht die Bildbreite manuell einzustellen? Ich habe das Beispiel jetzt noch um eine Beschriftung der Kurve ergänzt, wodurch die Breite nicht mehr einfach zu bestimmen ist.

(06 Mär, 05:47) Cletus

Wie in der Antwort bei Pfade verbergen TikZ beschrieben, gibt es viele verschiedene Möglichkeiten die Bounding Box einer Zeichnung zu korrigieren, die sonst durch nicht gezeichnete Hilfslinien oder eben verwendete Kontrollpunkte zu groß würde. Welche man einsetzt bzw. welche sich überhaupt einsetzen lässt, hängt von der konkreten Zeichnung ab. Hier sind zusätzlich zu den Vorschlägen in der Antwort von @Henri noch zwei weitere:

Option overlay

Du könntest auch overlay als Option bei der Kurve setzen, da sich diese komplett innerhalb des von den Achsen bestimmten Rechtecks befindet. Damit der Beschriftungsnode dagegen berücksichtigt wird, kann für diesen explizit die Option overlay=false gesetzt werden.

Open in Online-Editor
\documentclass{article}
\usepackage{tikz}

\begin{document}
\frame{\begin{tikzpicture}
\draw[very thick,red,overlay] 
  (0,0)--(0,-2.5)--(2,-2.5)--(2,0) 
  .. controls (2,4) and (2.5,0.2) ..
  (4.5,0.15) node[pos=0.6,right,overlay=false] {Coulomb-Wall}
;
\draw[very thick,->] (0,0)--(4.5,0) node [pos=0.96,below] {$r$};
\draw[very thick,->] (0,-5)--(0,2) node [pos=0.96,left] {$E$};
\end{tikzpicture}}
\end{document}

alt text

Kombination aus \pgfresetboundingbox und \useasboundingbox

Am Ende der Zeichung kann man zwei Koordinaten speichern, die die gewünschte Ausdehnung der Zeichnung beschreiben. Danach wird die bisher ermittelte Bounding Box mittels \pgfresetboundingbox gelöscht und anschließend mit \useasboundingbox und den beiden gespeicherten Koordinaten neu definiert.

Open in Online-Editor
\documentclass{article}
\usepackage{tikz}

\begin{document}
\frame{\begin{tikzpicture}
\draw[very thick,red] 
  (0,0)--(0,-2.5)--(2,-2.5)--(2,0) 
  .. controls (2,4) and (2.5,0.2) ..
  (4.5,0.15) node[pos=0.6,right] {Coulomb-Wall}
;
\draw[very thick,->] (0,0)--(4.5,0) node [pos=0.96,below] {$r$};
\draw[very thick,->] (0,-5)--(0,2) node [pos=0.96,left] {$E$}coordinate(oben);
\path
  (current bounding box.south west)coordinate(unten links)
  (current bounding box.east|-oben)coordinate(oben rechts)
;
\pgfresetboundingbox
\useasboundingbox(unten links)rectangle(oben rechts);
\end{tikzpicture}}
\end{document}

Das Ergebnis ist das gleiche wie oben.

Permanenter link

beantwortet 08 Mär, 11:36

esdd's gravatar image

esdd
14.2k53251

bearbeitet 08 Mär, 12:16

saputello's gravatar image

saputello
18.4k22352

Deine Antwort auf die Frage (nicht auf andere Antworten)
Knebel-Vorschau

Folge dieser Frage

Per E-Mail:

Wenn Du Dich anmeldest, kannst Du Updates hier abonnieren

Per RSS:

Antworten

Antworten und Kommentare

Aktuelle Buch-Infos

LaTeX Cookbook

LaTeX Beginners Guide

Limitierter Rabatt ebook
50% Coupon code tDRet6Y

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs füge einfach zwei Leerzeichen an die Stelle ein, an der die neue Zeile sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Zugeordnete Themen:

×492
×3
×1

Frage gestellt: 05 Mär, 05:22

Frage wurde angeschaut: 949 Mal

Zuletzt aktualisiert: 08 Mär, 12:16