tikz Symbol

Antwort erstellen


Diese Frage dient dazu, das automatisierte Versenden von Formularen durch Spam-Bots zu verhindern.
Smilies
:D :) :( :o :shock: :? 8) :lol: :-x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:

BBCode ist eingeschaltet
[img] ist eingeschaltet
[flash] ist ausgeschaltet
[url] ist eingeschaltet
Smilies sind eingeschaltet

Die letzten Beiträge des Themas

Ich habe die Datenschutzerklärung gelesen und bin damit einverstanden.

   

Wenn du eine Datei oder mehrere Dateien anhängen möchtest, gib die Details unten ein.

Ansicht erweitern Die letzten Beiträge des Themas: tikz Symbol

von iTob » So 6. Feb 2011, 14:16

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

von NTNU » So 6. Feb 2011, 14:12

Super, das ist perfekt.

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

von iTob » So 6. Feb 2011, 14:02

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]

von NTNU » So 6. Feb 2011, 10:11

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}

von iTob » Sa 5. Feb 2011, 22:40

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

von NTNU » Sa 5. Feb 2011, 17:26

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}

von iTob » Sa 5. Feb 2011, 14:03

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.

von NTNU » Sa 5. Feb 2011, 07:32

Hey Tobi,

mir ist nochmal was eingefallen. Ich weiß ja nicht wie viel Arbeit das für dich ist, sonst gibt einfach bescheid, wenns nicht klappt oder du keine Zeit/Lust hast...

Also es wäre schön, wenn ich eine zweite Art von Symbol zur Hand hätte. Dabei wäre es cool, wenn zB für einen Kreis, ein Quadrat oder einen Diamand (ich weiß nicht ob sich der Code einfach übertragen ließe) ich die eine Hälfte anders anfärben kann als die andere, waagerecht und quer.

Wenn du spontan eine Idee oder Lust am Basteln hast, immer her damit :)
Schönes WE
Dateianhänge
symbole.jpg
symbole.jpg (42.07 KiB) 3389 mal betrachtet

von iTob » Fr 4. Feb 2011, 17:41

Ja schon klar. Hab ja gern geholfen!

von NTNU » Fr 4. Feb 2011, 17:20

:D, das wäre mit Sicherheit möglich gewesen. Nur ist in zwei Wochen Abgabe, und meine (jetzt schönen, kleinen, Minibalken) sind da gerade nicht mein Hauptproblem sondern nur eins vieler kleiner iTüpfelchen :D

Nach oben