Folgendes Bildzeichen (Logo) ist mit TikZ geschaffen. Um eine gewisse "Verknotungswirkung" zu erzielen, wurden bestimmte Teile durch zusätzliche Elemente überdeckt. Leider hat das zur Folge, dass die offenen Kanten als hauchzarte weiße Striche noch zu sehen sind, Wie kann man diese wegbekommen, damit die drei Elemente geschlossen wirken?

Open in Online-Editor
\documentclass{minimal}
\usepackage[ngerman]{babel}

\usepackage{tikz}

\begin{document}

\begin{tikzpicture}

\def \l{4} % Einheitslänge
\def \d{1.2mm} % Einheitsdicke
\def \b{5mm} % Abstand als Faktor

\colorlet{dunk}{white!76!black}
\colorlet{mitt}{white!80!black}
\colorlet{hell}{white!84!black}

\tikzstyle{eck} = [line width=\d, white, double distance=\b]

\draw[double=mitt][eck] (0, \l) -- (\l, 0) -- (0, -\l) -- (-\l, 0) -- cycle;
\draw[double=dunk][eck] (0, \l) -- ({\l * cos(30)}, -{\l * sin(30)}) -- (-{\l * cos(30)}, -{\l * sin(30)}) -- cycle;
\draw[double=hell][eck] (0, 0) circle [radius=\l];

\draw[double=mitt][eck] (45: {(\l / sin(45) / 2}) -- (0: \l) -- (315: {(\l / sin(45) / 2});
\draw[double=mitt][eck] (225: {(\l / sin(45) / 2}) -- (180: \l) -- (135: {(\l / sin(45) / 2});
\draw[double=mitt][eck] (225: {(\l / sin(45) / 2}) -- (270: \l) -- (315: {(\l / sin(45) / 2});

\draw[double=dunk][eck] ({\l * cos(30) * 0.8}, -{\l * sin(30)}) -- (-{\l * cos(30) * 0.8}, -{\l * sin(30)});
\draw[double=dunk][eck] (30:{\l * sin(30)}) -- (90:{\l}) -- (150:{\l * sin(30)});

\end{tikzpicture}

\end{document}

gefragt 29 Okt '15, 04:52

rix's gravatar image

rix
39051823
Akzeptiert-Rate: 0%

bearbeitet 29 Okt '15, 09:59

esdd's gravatar image

esdd
17.7k254256

Bitte achte auf korrektes Markdown. Es macht keinen guten Eindruck, wenn man sich nicht einmal die Mühe macht, den Code korrekt darzustellen.

(29 Okt '15, 07:43) saputello

Die Klasse minimal ist für vollständige Minimalbeispiele unbrauchbar, weil sie keine vollständige Klasse ist, sondern lediglich dazu gedacht ist, den LaTeX-Kern zu testen. Verwende besser beispielsweise article.

(29 Okt '15, 07:46) saputello

\def zu verwenden ist immer gefährlich, da man damit Gefahr läuft, eine vorhandene und möglicherweise wichtige Anweisung zu überschreiben. Verwende daher in der Regel \newcommand. Das meldet einen Fehler, wenn man versehentlich eine vorhandene Anweisung überschreibt.

(29 Okt '15, 07:46) saputello

Tut mir leid, das war nicht meine Absicht. Der Quelltext lässt sich hier ziemlich schlecht einfügen. Einfacherer wären zwei Marken ("tags") und fertig...

(30 Okt '15, 02:49) rix

Markieren und Ctrl+k (Neudeutsch: Strg+K) drücken ist doch nun wirklich nicht zu viel verlangt! Aber wenn Dir Systeme mit Tags lieber sind → goLaTeX. Dort finden sich dann aber immer wieder Beiträge mit Tag-Fehlern oder abgeschaltetem BBCode. Wirklich einfacher scheint das also auch nicht zu sein.

(30 Okt '15, 07:36) saputello

Mit double werden eigentlich zwei Linien gezeichnet: zuerst die eine breitere mit der äußeren Farbe (bei Dir white) und dann eine schmalere mit der Füllfarbe zwischen den beiden Linien. Um die Haarlinie in der äußeren Farbe zu vermeiden, kann man das mit postaction auch einfach selbst machen und dabei die innere Linie mit shorten <=-1pt und shorten >=-1pt leicht überstehen lassen:

Open in Online-Editor
\documentclass[margin=5pt]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}

\newcommand*\Einheitslaenge{4}
\newcommand*\Einheitsdicke{1.2mm}
\newcommand*\Breite{5mm}

\colorlet{dunk}{white!76!black}
\colorlet{mitt}{white!80!black}
\colorlet{hell}{white!84!black}

\tikzset{
  eck/.style = {line width=\Einheitsdicke, white, double distance=\Breite,double=#1},
  oben/.style = {line width=2*\Einheitsdicke+\Breite, white,
    postaction={draw=#1, line width=\Breite, shorten <=-1pt, shorten >=-1pt}
  }
}

\begin{scope}[scale=\Einheitslaenge]
\draw[eck=mitt] (0, 1) -- (1, 0) -- (0, -1) -- (-1, 0) -- cycle;
\draw[eck=dunk] (0, 1) -- ({1 * cos(30)}, -{1 * sin(30)}) -- (-{1 * cos(30)}, -{1 * sin(30)}) -- cycle;
\draw[eck=hell] (0, 0) circle [radius=1];
%
\draw[oben=mitt] (45: {(1 / sin(45) / 2}) -- (0: 1) -- (270: 1) -- (180: 1) -- (135: {(1 / sin(45) / 2});
%
\draw[oben=dunk] ({1 * cos(30) * 0.8}, -{1 * sin(30)}) -- (-{1 * cos(30) * 0.8}, -{1 * sin(30)});
\draw[oben=dunk] (30:{1 * sin(30)}) -- (90:{1}) -- (150:{1 * sin(30)});
\end{scope}

\end{tikzpicture}
\end{document}

alt text

Permanenter link

beantwortet 29 Okt '15, 09:52

esdd's gravatar image

esdd
17.7k254256
Akzeptiert-Rate: 62%

Toll! Wäre ich selbst nie drauf gekommen. Vielen Dank! genau so soll es sein

(30 Okt '15, 02:47) rix

Jetzt habe ich ein kleines Problem: Ich möchte die ganze Konstruktion gerne in ein "newcommand" reinpacken und über Parameter steuern. Leider geht Latex / TikZ davon aus, dass "double=#1" und "draw=#1" mit Parametern des "newcommand" gefüllt werden müssen?! Wie kann man das umgehen?

(30 Okt '15, 09:48) rix
1

@rix Wie bei anderen verschachtelten Makrodefinitionen auch: bei den Argumenten der inneren Definition musst Du die Rauten verdoppeln, also double=##1 und draw=##1.

(30 Okt '15, 11:18) esdd

@nix: Das ist übrigens eigentlich eine neue Frage, auf die es bereits eine Antwort gibt.

(31 Okt '15, 17:25) saputello
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:

×728
×1

gestellte Frage: 29 Okt '15, 04:52

Frage wurde gesehen: 6,662 Mal

zuletzt geändert: 31 Okt '15, 17:26