tikz Symbol

Tabellen und Grafiken erstellen und anordnen


Benutzeravatar
iTob
Forum-Meister
Forum-Meister
Beiträge: 1221
Registriert: Mo 19. Apr 2010, 22:19
Kontaktdaten:

Beitrag von iTob »

Das ist nicht so schwer, daher hier (vorerst) nur ein Tipp zum selber versuchen:

Due zeichnest die beiden Frabigen hälften einfach als Rechtecke übereinander (\fill [color=…]) dann zeichnest du noch die Form, die sie bekommen sollen (\draw [color=…] … circle, rectangle etc) darüber und fügst die Option clip (draw [color=…, clip]) zum Pfad hinzu, dann werden die zuvor gezeichneten farbigen Rechtecke entsprechend zugeschnitten.
Die Sache mit der scope-Umgebung ist hier unnötig.
Versuchs mal und wenn du einen Anfang hast und nicht weiter kommst, dann poste den hier und ich mache weiter. Aber zunächst: Hilfe zur Selbsthilfe bzw. Selbst ist der Mann / die Frau … ;)

Tobi

PS: Rückfrage ist für die Antworter nicht für den Frager, schau dir die Erklärungen zu den Statuus (ist das der Plural oder Stati, mein Altsprachlerfreud ist grad nicht bei mir …). Ich hab den Status mal auf beantwortet gesetzt, weil die Ursprungsfrage ja beantwortet ist.

NTNU
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 54
Registriert: So 27. Jun 2010, 15:49

Beitrag von NTNU »

OK, ich hab mich mal probiert.
Ich hab nur leider nicht verstanden (bzw. hat das bei mir nicht funktioniert) wie du das mit dem clip gemeint hast. Deswegen ist das bestimmt nicht so wie du gedacht hast.

Das rectangle mit dem quergeteiltem ist leider auch nicht so ganz auf Kante. Dafür passt vielleicht das erstere?

Der Diamand undn der Kreis wollten auch nicht, ich schätze da verstehe ich noch nicht so ganz wie die gezeichnet werden.
\documentclass{article} 
\usepackage{tikz} 

\begin{document} 

\newcommand{\myrec}[2]{\tikz[scale=0.65]{%
	\draw [fill=#1] (0,0) rectangle (1em,1em);%
		\draw[fill=#2] (0,0) -- (1em,0) -- (1em,1em) -- cycle;}}
	\newcommand{\Myrec}[2]{\tikz[scale=0.65]{%
	\draw [fill=#1] (0,0) rectangle (1em,1em);%
	\draw [fill=#2] (0,0) rectangle (0.5em,1em);}}
	

Hallo Welt das ist mein \Myrec{black}{white} und das ist mein \myrec{black}{white}\ldots
\end{document}

Benutzeravatar
iTob
Forum-Meister
Forum-Meister
Beiträge: 1221
Registriert: Mo 19. Apr 2010, 22:19
Kontaktdaten:

Beitrag von iTob »

clip meint einfach, dass du das gesamte Bild (bzw. aktuelle scope) mit dem Pfad, der [clip] hat bescheidest. Mit diesem clip-Pfad kannst du gleichzeitig dem umriss zeichnen.
Also baue deinen Befehl so / zeichen Befehle in der angebenen Reihenfolge:
1. clip-Pfad mit Umriss
2. farbige Rechtecke, die größer sind als der clip-Pfad (werden ja beschnitten)
3. evtl. die Mittelachse

Die Idee ist also größere Farbflecken zu zeichnen und dann daraus die gewünschte Form auszuschneiden. Nur das hierbei die auszuschneidende Form vor den Farbflecken gemacht werden muss, damit sie wirkt.

Wenn es dann immer noch nicht geht schau bitte in die Anleitung zum Thema clip. Damit sollte eigentlich alles klar sein ;)

Gute Nacht!
Tobi

NTNU
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 54
Registriert: So 27. Jun 2010, 15:49

Beitrag von NTNU »

OK, ich glaub ich habe es geschafft.

Ist zwar nicht so elegant, weil ich nicht in einem Befehl das Muster auswählen kann, sondern drei verschiedene brauche.

Ist es so wie du gemeint hast?
\documentclass[fontsize=12pt]{scrartcl}
\usepackage{lmodern}
\usepackage{tikz}

\newcommand{\sqrsl}[2]{\tikz[scale=0.65]{%
	\path[clip] (-.5em,-.5em) rectangle (.5em,.5em);%
	\fill[fill=#1] (-2,-2) -- (-2,2) -- (2,2) -- cycle;%
	\fill[fill=#2] (-2,-2) -- (2,2) -- (2,-2) -- cycle;%
    \path[draw,line width=1pt,black] (-.5em,-.5em) rectangle (.5em,.5em);%
}}
\newcommand{\sqrver}[2]{\tikz[scale=0.65]{%
	\path[clip] (-.5em,-.5em) rectangle (.5em,.5em);%
    \fill[fill=#1] (-2,-2) rectangle (0,2);%
    \fill[fill=#2] (0,-2) rectangle (2,2);%
    \path[draw,line width=1pt,black] (-.5em,-.5em) rectangle (.5em,.5em);%
}}
\newcommand{\sqrhor}[2]{\tikz[scale=0.65]{%
	\path[clip] (-.5em,-.5em) rectangle (.5em,.5em);%
    \fill[fill=#1] (-2,-2) rectangle (2,0);%
    \fill[fill=#2] (-2,0) rectangle (2,2);%
    \path[draw,line width=1pt,black] (-.5em,-.5em) rectangle (.5em,.5em);%
}}

\begin{document}
(\sqrsl{red}{blue}) VS (\sqrver{black}{yellow}) VS (\sqrhor{blue}{white})
\end{document}

Benutzeravatar
iTob
Forum-Meister
Forum-Meister
Beiträge: 1221
Registriert: Mo 19. Apr 2010, 22:19
Kontaktdaten:

Beitrag von iTob »

Guten Morgen,


im Prinzip meinte ich das. Allerdings dachte ich, dass man den clip-Pfad auch gleichzeitig zeichnen kann. Das geht nur, wenn an keine zusätzlichen Optionen angeben will. Deine Lösung ist also die, die ich auch gefunden hätte.
Hier um ein paar Kommentare ergänzt:
\newcommand{\Sqrsl}[2]{\tikz[scale=0.65]{%
   \clip (-.5em,-.5em) rectangle (.5em,.5em);% \clip = \path[clip]
   \fill[fill=#1] (-2,-2) -- (-2,2) -- (2,2) -- cycle;% 
   \fill[fill=#2] (-2,-2) -- (2,2) -- (2,-2) -- cycle;%
   % evtl eine Mittelachse?
   \draw (-2,-2) -- (2,2);
   \draw [line width=0.8pt,black] (-.5em,-.5em) rectangle (.5em,.5em);% \draw = \path [draw,...]
   %       ^                 ^-- ist eh schwarz;
   %       |                     genauergesagt ist die Grundfarbe des Dokuments auch die Standardfarbe
   %       ---- das mit der Lininenbreite ist ein Problem beim clippen, weil genau auf der Mitte
   %            der gezeichneten Linine gschnitten wird, so dass sie hinterher nur noch halb so breit
   %            ist. Da gibt es aber zwei Lösungen
   %            1. Man verdoppelt die Lininenbreite (also von stadarmäßigen 0.4pt="thin" auf 0.8pt="thick"
   %            hat dann aber das Problem, dass die Figur an sich auch etwas kleiner wird. (Hier verwendet)
   %            2. Man erweitert den clip-Pfad gerade um die Hälfte der Linienbreite. Dazu scheint es aber keine
   %            Option zu geben, sodass man die Kooridnaten direkt bearbeiten muss.
   %            Einfacher scheint also Lösung 1, wenn man die kleinen ungenauigkeiten in Kauf nehemen kann/will.
}} 
Wenn du die Form mit angeben willst, geht das auch, du musst sie nur abfragen. Hier eine Möglichkeit:
\documentclass{scrartcl} 
\usepackage{lmodern} 
\usepackage{tikz}
\usepackage{xstring}

\setlength\parindent{0pt}

\newcommand{\MyShape}[3][rh]{%
\tikz[scale=0.7]{
	% 1. clip-Pfad wählen:
	% 1.1 rectangle
	\IfBeginWith{#1}{r}{\clip (-.5em,-.5em) rectangle (.5em,.5em);}{
	% 1.2 diamond
	\IfBeginWith{#1}{d}{\clip (0,-0.5em) -- (0.5em,0) -- (0,0.5em) -- (-0.5em,0) -- cycle;}{
	% 1.3 circle
	\IfBeginWith{#1}{c}{\clip circle (0.5em);}{
	% 1.4 Unbekannte Form, Rechteck wählen
	\clip (-.5em,-.5em) rectangle (.5em,.5em);
	}}}
	% 2. Farben zeichnen
	% 2.1 horizontal
	\IfEndWith{#1}{h}{
		\fill [#2] (-1em,-1em) rectangle (0,1em);
		\fill [#3] (0,-1em) rectangle (1em,1em);
		\draw (0,-1em) -- (0,1em);
	}{
	% 2.2 vertikal
	\IfEndWith{#1}{v}{
		\fill [#2] (-1em,-1em) rectangle (1em,0);
		\fill [#3] (-1em,0) rectangle (1em,1em);
		\draw (-1em,0) -- (1em,0);
	}{
	% 2.3 diagonal von links nach rechts
	\IfEndWith{#1}{dl}{
		\fill [#2] (-1em,1em) -- (1em,-1em) -- (-1em,-1em) -- cycle;
		\fill [#3] (-1em,1em) -- (1em,1em) -- (1em,-1em) -- cycle;
		\draw (-1em,1em) -- (1em,-1em);
	}{
	% 2.4 diagonal von rechts nach links
	\IfEndWith{#1}{dr}{
		\fill [#2] (-1em,1em) -- (1em,1em) -- (-1em,-1em) -- cycle;
		\fill [#3] (-1em,-1em) -- (1em,-1em) -- (1em,1em) -- cycle;
		\draw (-1em,-1em) -- (1em,1em);
	}{
	% 2.5 unbekannte Teilung, wähle horizontal
		\fill [#2] (-1em,-1em) rectangle (0,1em);
		\fill [#3] (0,-1em) rectangle (1em,1em);
		\draw (0,-1em) -- (0,1em);
	}}}}
	% 3. Rahmen zeichnen
	% 3.1 rectangle
	\IfBeginWith{#1}{r}{\draw [thick] (-.5em,-.5em) rectangle (.5em,.5em);}{
	% 3.2 diamond
	\IfBeginWith{#1}{d}{\draw [thick] (0,-0.5em) -- (0.5em,0) -- (0,0.5em) -- (-0.5em,0) -- cycle;}{
	% 3.3 circle
	\IfBeginWith{#1}{c}{\draw [thick] circle (0.5em);}{
	% 3.4 Unbekannte Form, Rechteck wählen
	\draw [thick] (-.5em,-.5em) rectangle (.5em,.5em);
	}}}%
}%
}

\begin{document}
Syntax:
\verb|\MyShape[|$\langle$\textit{Form}$\rangle$\verb|-|$\langle$\textit{Teilung}$\rangle$\verb|]{|%
$\langle$\textit{Farbe1}$\rangle$\verb|}{|$\langle$\textit{Farbe2}$\rangle$\verb|}|

mit $\langle$\textit{Form}$\rangle\in$ [\texttt{r},\texttt{c},\texttt{d}] und
$\langle$\textit{Teilung}$\rangle\in$ [\texttt{h},\texttt{v},\texttt{dr},\texttt{dl}].
Wobei das \texttt{-} zwischen $\langle$\textit{Form}$\rangle$ und $\langle$\textit{Teilung}$\rangle$
auch weggelassen oder durch ein anderes Zeichen ersetzt werden könnte. Abgefragt wird nur,
womit das Argument beginnt und endet (s.\,u. bei Trennzeichen)

\bigskip
\texttt{[r-h]} = horizontal geteiltes Rechteck (ist Standard): \MyShape{blue}{green}

\texttt{[r-v]} = vertikal geteiltes Rechteck: \MyShape[r-v]{blue}{green}

\texttt{[r-dl]} = diagonal von links nach rechts geteiltes Rechteck: \MyShape[r-dl]{blue}{green}

\texttt{[r-dr]} = diagonal von links nach rechts geteiltes Rechteck: \MyShape[r-dr]{blue}{green}

\texttt{[d-h]} = horizontal geteilter Diamant: \MyShape[d-h]{blue}{green}

\texttt{[c-h]} = horizontal geteilter Kreis: \MyShape[c-h]{blue}{green}

\texttt{[x-h]} = unbekannte Form: \MyShape[x-h]{blue}{green}

\texttt{[c-x]} = unbekannte Teilung: \MyShape[c-x]{blue}{green}

\bigskip
Test: \foreach \form in {r,d,c}{\foreach \teil in {h,v,dl,dr} {\MyShape[\form-\teil]{blue}{green} }\quad}

\bigskip
Trennzeichen:

\texttt{[r-h]} (\MyShape[r-h]{green}{blue})
\foreach \trenner in {,+,?,x,.} {= \texttt{[r\trenner{}h]} (\MyShape[r\trenner{}h]{green}{blue}) }
\end{document}
Grüße,
Tobi

[Edit: zweiten Code verändert bzw. ergänzt]
Zuletzt geändert von iTob am So 6. Feb 2011, 14:17, insgesamt 2-mal geändert.

NTNU
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 54
Registriert: So 27. Jun 2010, 15:49

Beitrag von NTNU »

Super, das ist perfekt.

Vielen Dank nochmal :D :!: und einen schönen Sonntag noch...

Benutzeravatar
iTob
Forum-Meister
Forum-Meister
Beiträge: 1221
Registriert: Mo 19. Apr 2010, 22:19
Kontaktdaten:

Beitrag von iTob »

Beachte bitte, dass ich den Code noch mal editiert habe ;)

Antworten