Wie schneide ich aus diesem Beipiel ein Teilbild aus, so dass der Ausschnitt endlich die Gesamtgröße des Bildes hat.

So sollte im folgenden Beipiel eigentlich a + <Bild> + b ohne Leerräume stehen.

alt text

Open in Online-Editor
\documentclass[border=5mm]{standalone}
%\documentclass{scrreprt}
\usepackage{selinput}
\SelectInputMappings{adieresis={ä},  germandbls={ß}}
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc} 
\usepackage{microtype}

\usepackage{tikz}
\usetikzlibrary{intersections}
\begin{document}

\newcommand{\UntenLinks}{%
     \begin{scope}[]
      \clip(KL-2)rectangle(KL-3);
      \fill[red]
        [reverseclip]
        [KreisLinks]
      ;
    \end{scope}
}%
\newcommand{\Mitte}{%
    \begin{scope}
      \clip(KL-3)rectangle(KR-2-|KR-3);
      \fill[brown]
        [reverseclip]
        [KreisLinks]
        [KreisRechts]
      ;
    \end{scope}
}%
\newcommand{\UntenRechts}{%
    \begin{scope}
      \clip(KR-3)rectangle(KR-2);
      \fill[green]
        [reverseclip]
        [KreisRechts]
      ;
    \end{scope}
}%
\newcommand{\ObenRechts}{%
    \begin{scope}
    \clip(KR-1)rectangle(KR-2);
    \fill[yellow]
      [reverseclip]
      [KreisRechts]
    ;
  \end{scope}
}%

\newcommand{\Bild}[1]{%====================
\begin{tikzpicture}[
  scale=0.5,
  very thick,
  fill opacity=.5
]
\pgfdeclarelayer{pre main}
\pgfsetlayers{pre main,main}
% Größen
\newcommand\D{10cm}
\tikzset{
  KreisLinks/.style={insert path={(.5*\D,.5*\D)circle[radius=.5*\D]}},
  KreisRechts/.style={insert path={(1.5*\D,.5*\D)circle[radius=.5*\D]}},
  Diagonalendreieck/.style={insert path={(0,0)--+(2*\D,\D)--+(2*\D,0)--cycle}},
  reverseclip/.style={insert path={(current bounding box.south west)rectangle(current bounding box.north east)}},
%
Zeichnen/.style={%
%draw
}%
}
% Gesamtes Rechteck
\path[Zeichnen, name path=Rechteck](0,0) rectangle +(2*\D,\D);
% Kreis links
\path[Zeichnen,
%  path picture={\fill[orange][Diagonalendreieck];},
  name path=KreisLinks
] [KreisLinks];
% Kreis rechts
\path[Zeichnen, 
%  path picture={\fill[blue][Diagonalendreieck];},
  name path=KreisRechts
] [KreisRechts];
%Diagonale
\path[Zeichnen] (0,0) -- +(2*\D,\D);

% Schnittpunkte Kreise mit Rechtecken
\path [name intersections={of=KreisLinks and Rechteck,name=KL}];
\path [name intersections={of=KreisRechts and Rechteck,name=KR}];
% Füllen der Teilflächen
\pgfonlayer{pre main}
\begin{scope}
\clip[Diagonalendreieck];
{#1} % Argumente
\end{scope}
\endpgfonlayer
\end{tikzpicture}
}%====================

a+\Bild{\UntenLinks}+ b%\UntenLinks \Mitte \UntenRechts \ObenRechts
\end{document}

gefragt 15 Aug '16, 16:17

cis's gravatar image

cis
9.5k93459491
Akzeptiert-Rate: 29%

bearbeitet 18 Aug '16, 08:18

sudo's gravatar image

sudo
2.0k51521


Du kannst für das gesamte Bild die overlay Option setzen und diese für die darzustellenden Bereiche mit overlay=false wieder aufheben.

Beim "umgekehrten" Clippen kann man dann aber nicht mehr die Bounding Box verwenden. Deshalb würde ich [reverseclip] durch [Rechteck] mit

Open in Online-Editor
Rechteck/.style={insert path={(0,0)rectangle(2*\D,\D)}},

ersetzen.

Damit das Teilbild \UntenLinks nicht zu hoch und das \ObenRechts nicht zu breit wird, müssen für diese beiden Befehle zusätzlich noch die Schnittpunkte der Diagonalen mit den Kreisen verwendet werden.

Und zum Schluß muss noch das Zeilenende nach \end{tikzpicture} auskommentiert werden, damit es kein Leerzeichen einfügt.

Open in Online-Editor
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{intersections}

\newcommand{\UntenLinks}{%
     \begin{scope}[overlay=false]
      \clip(KL-2|-KLD-2)rectangle(KL-3);
      \fill[red]
        [Rechteck]
        [KreisLinks]
      ;
    \end{scope}
}
\newcommand{\Mitte}{%
    \begin{scope}[overlay=false]
      \clip(KL-3)rectangle(KR-2-|KR-3);
      \fill[brown]
        [Rechteck]
        [KreisLinks]
        [KreisRechts]
      ;
    \end{scope}
}
\newcommand{\UntenRechts}{%
    \begin{scope}[overlay=false]
      \clip(KR-3)rectangle(KR-2);
      \fill[green]
        [Rechteck]
        [KreisRechts]
      ;
    \end{scope}
}
\newcommand{\ObenRechts}{%
    \begin{scope}[overlay=false]
    \clip(KR-1-|KRD-1)rectangle(KR-2);
    \fill[yellow]
      [Rechteck]
      [KreisRechts]
    ;
  \end{scope}
}

\newcommand{\Bild}[1]{%
  \begin{tikzpicture}[
    scale=0.5,
    very thick,
    fill opacity=.5,
    %
    Zeichnen/.style={%
      %draw
    },
    overlay
  ]
  \pgfdeclarelayer{pre main}
  \pgfsetlayers{pre main,main}
  % Größen
  \newcommand\D{10cm}
  \tikzset{
    KreisLinks/.style={insert path={(.5*\D,.5*\D)circle[radius=.5*\D]}},
    KreisRechts/.style={insert path={(1.5*\D,.5*\D)circle[radius=.5*\D]}},
    Diagonalendreieck/.style={insert path={(0,0)--+(2*\D,\D)--+(2*\D,0)--cycle}},
    Rechteck/.style={insert path={(0,0)rectangle(2*\D,\D)}},
  }
  % Gesamtes Rechteck
  \path[Zeichnen, name path=Rechteck][Rechteck];
  % Kreis links
  \path[Zeichnen,
    name path=KreisLinks
  ] [KreisLinks];
  % Kreis rechts
  \path[Zeichnen,
    name path=KreisRechts
  ] [KreisRechts];
  %Diagonale
  \path[Zeichnen,name path=Diagonale] (0,0) -- (2*\D,\D);
  % Schnittpunkte Kreise mit Rechteck und Diagonale
  \path [name intersections={of=KreisLinks and Rechteck,name=KL}];
  \path [name intersections={of=KreisLinks and Diagonale,name=KLD}];
  \path [name intersections={of=KreisRechts and Rechteck,name=KR}];
  \path [name intersections={of=KreisRechts and Diagonale,name=KRD}];
  % Füllen der Teilflächen
  \pgfonlayer{pre main}
    \begin{scope}
      \clip[Diagonalendreieck];
      {#1} % Argumente
    \end{scope}
  \endpgfonlayer
  \end{tikzpicture}% <- sonst Leerzeichen
}

\begin{document}
a+%
%\Bild{\UntenLinks}%
%\Bild{\Mitte}%
%\Bild{\UntenRechts}%
\Bild{\ObenRechts}%
+ b
\end{document}

alt text

alt text

alt text

alt text

Permanenter link

beantwortet 15 Aug '16, 17:52

esdd's gravatar image

esdd
17.8k284257
Akzeptiert-Rate: 62%

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:

×730
×16
×7

gestellte Frage: 15 Aug '16, 16:17

Frage wurde gesehen: 7,508 Mal

zuletzt geändert: 18 Aug '16, 08:18