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 28 Okt '15, 23:52

rix's gravatar image

rix
3452419
Akzeptiert: 93%

bearbeitet 29 Okt '15, 04:59

esdd's gravatar image

esdd
14.2k53251

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, 02: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, 02: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, 02: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...

(29 Okt '15, 21: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, 02: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, 04:52

esdd's gravatar image

esdd
14.2k53251

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

(29 Okt '15, 21: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, 04: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, 06:18) esdd

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

(31 Okt '15, 12:25) saputello
Deine Antwort auf die Frage (nicht auf andere Antworten)
Knebel-Vorschau

Folge dieser Frage

Per E-Mail:

Wenn Du Dich anmeldest, kannst Du Updates hier abonnieren

Per RSS:

Antworten

Antworten und Kommentare

Aktuelle Buch-Infos

LaTeX Cookbook

LaTeX Beginners Guide

Limitierter Rabatt ebook
50% Coupon code tDRet6Y

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

Zugeordnete Themen:

×492
×1

Frage gestellt: 28 Okt '15, 23:52

Frage wurde angeschaut: 1,175 Mal

Zuletzt aktualisiert: 31 Okt '15, 12:26