Ich möchte gerne Pfade, die über das hobby-Paket konstruiert werden, mit pgf-Standardelementen, wie Kreisbögen u.ä. kombinieren. Im Frontend-Layer funktioniert das auch problemlos, z.B.

Open in writeLaTeX
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{hobby}
\begin{document}

\begin{tikzpicture}[use Hobby shortcut]
\draw (0,0) arc[start angle=180, end angle=90, x radius=1cm, y radius=1cm] .. (0.51, -0.5) .. (0, 0) -- cycle;
\end{tikzpicture}
\end{document}

alt text

Allerdings konnte ich im hobby manual nichts zur Konstruktion von hobby-Pfaden im Basic Layer, also zur Verwendung mit \pgfusepath, finden. Da es jedoch Situationen gibt, in denen ich die Pfadkonstruktion mit Basic-Layer-Befehlen vorziehe, frage ich mich: Gibt es ein Basic-Layer-Interface des hobby-Paketes? Oder gibt es eine andere Möglichkeit (zusammenhängende) Pfade aus hobby-Pfaden und Standardpfaden zu erzeugen?

gefragt 01 Feb '14, 14:01

carlton87's gravatar image

carlton87
2541411
Akzeptiert: 100%

bearbeitet 01 Feb '14, 16:28

esdd's gravatar image

esdd
14.2k53251

Ich hab nicht wirklich Ahnung von den Basic-Layer Konstrukten ansich, aber ich vermute, ein Blick in pgflibraryhobby.code.tex lohnt sich wahrscheinlich. Dort gibt es Befehle wie \hobby@curveto und \hobby@moveto. Da die Befehle irgends offiziell dokumentiert sind, würde ich mich allerdings nicht darauf verlassen, dass sie immer bleiben, wie sie jetzt sind.

(09 Mär '14, 13:01) Clemens

@Clemens Mit viel gutem Willen von Andrew Stacey hat sich eine sehr viel bequemere Lösung gefunden :) Siehe: meine Antwort weiter unten.

(12 Mär '14, 13:03) carlton87

@carlton87 Cool :)

(14 Mär '14, 05:35) Clemens

Ich hatte zwischenzeitlich Kontakt mit dem Autoren des hobby Paketes, Andrew Stacey, aufgenommen und wieder einmal die Erfahrung machen dürfen, wie unglaublich hilfsbereit (und schnell) die TeX-Community ist. Andrew Stacey hat in der Entwicklungsversion mittlerweile ein Basic-Layer-Interface implementiert. Diese ist auf TeX-SX launchpad page verfügbar (hobby.dtx runterladen und tex hobby.dtx ausführen um die entsprechenden Dateien zu generieren).

Die neue Syntax sieht folgendermaßen aus: Die Konstruktion eines Hobby-Pfades wird mit \pgfpathhobby eingeleitet und durch \pgfpathhobbyend abgeschlossen. Der \pgfpathhobby Befehl überprüft, ob eine \bgroup (oder {) folgt, und wenn dem so ist, wird diese nachfolgende Gruppe als Liste von Key-Value-Paaren interpretiert und an die Konfiguration weitergeleitet (z.B. \pgfpathhobby{closed=true}). Innerhalb der Hobby-Pfad-Konstruktion werden die einzelnen Punkte des Pfades durch \pgfpathhobbypt{<point specification>} angegeben, wobei dieser Befehl ebenfalls auf nachfolgende Gruppen prüft und diese ggf. als Liste von Key-Value-Paaren für diesen Punkt interpretiert (z.B. \pgfpathhobbypt{\pgfpoint{1cm}{2cm}}{tension in=2}). Die Keys sind also die gleichen wie für den Frontend-Layer.

Mit dieser Syntax lässt sich das Beispiel aus meiner Frage folgendermaßen in den Basic-Layer übersetzen:

Open in writeLaTeX
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{hobby}
\begin{document}

\begin{tikzpicture}
  \pgfpathmoveto{\pgfpoint{0cm}{0cm}}
  \pgfpatharc{180}{90}{1cm and 1cm}
  \pgfpathhobby
    \pgfpathhobbypt{\pgfpoint{0.51cm}{-0.5cm}}
    \pgfpathhobbypt{\pgfpoint{0cm}{0cm}}
  \pgfpathhobbyend
  \pgfpathclose
  \pgfusepath{stroke}
\end{tikzpicture}

\end{document}
Permanenter link

beantwortet 12 Mär '14, 12:59

carlton87's gravatar image

carlton87
2541411

bearbeitet 12 Mär '14, 13:00

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
×17
×2

Frage gestellt: 01 Feb '14, 14:01

Frage wurde angeschaut: 2,298 Mal

Zuletzt aktualisiert: 14 Mär '14, 05:35