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 '16, 11:22

Cletus's gravatar image

Cletus
1.6k75866
Akzeptiert-Rate: 75%

bearbeitet 06 Mär '16, 11:45

1

Das ist eventuell ein Duplikat zu Pfade verbergen TikZ.

(05 Mär '16, 22: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 '16, 11: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 '16, 17: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 '16, 13:22

Henri's gravatar image

Henri
15.7k133943
Akzeptiert-Rate: 46%

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 '16, 11: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 '16, 17:36

esdd's gravatar image

esdd
17.8k284257
Akzeptiert-Rate: 62%

bearbeitet 08 Mär '16, 18:16

saputello's gravatar image

saputello
11.1k174365

Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

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ügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×731
×4
×1

gestellte Frage: 05 Mär '16, 11:22

Frage wurde gesehen: 9,009 Mal

zuletzt geändert: 08 Mär '16, 18:16