Wie kann ich die Pfeilspitzenform an die gängigen LaTeX-Stile anpassen?

Wie steuere ich die Form meiner Pfeilspitzen? Das TikZ-Paket von LaTeX enthält eine Vielzahl vordefinierter Pfeilspitzenstile, von denen ich einige gerne mit Mathematica-Zahlen vergleichen möchte, die ich in ein LaTeX-Dokument importiere:

LaTeX-Pfeilbeispiele

Der Standardpfeilspitzenstil von Mathematica kommt jedoch bei weitem nicht in die Nähe. Beispiel:

Graphics[{Thick, Arrow[{{0, 0}, {-50, 0}}]}] 

ergibt

Standard-Mathematica-Pfeil

Frühere Versionen von Mathematica hatten Optionen zum Steuern der Pfeilspitzenform, aber diese scheinen in 8.0 verschwunden zu sein.

Wie kann ich die Form meiner Mathematica-Pfeilspitzen an die LaTeX TikZ-Pfeilspitzenstile anpassen?

Kommentare

  • Außerdem werden die Pfeile von Mathematica ' mithilfe einer Logik, die ich verwenden kann, anders skaliert als die LaTeX-Pfeilspitzen ' nicht erkennen. Idealerweise möchte ich ' auch sicherstellen, dass meine Mathematica-Pfeile genauso skaliert werden wie LaTeX-Pfeile. Aber das ist vielleicht eine separate Frage.
  • Haben Sie sich die Dokumentation von Arrowheads angesehen?
  • Ja, natürlich. Nichts dort hat mich nahe gebracht.
  • @Heike: Das gibt nur ein Beispiel für eine benutzerdefinierte Pfeilspitze, aber nichts über vordefinierte Typen (obwohl StreamPlot eine Vielzahl von Miriaden hat integrierte Pfeilstile).
  • Siehe diese Frage – es wird gezeigt, wie benutzerdefinierte Formen definiert werden, und absolute Pfeilspitzengrößen festlegen.

Antwort

Hier ist eine Manipulate um sich eine Arrow zu entwerfen:

DynamicModule[{top, baseMid, rightBase, outerMidRight, innerMidRight}, Manipulate[ top = {0, 0}; baseMid = {1, 0} baseMid; rightBase = {1, -1} leftBase; outerMidRight = {1, -1} outerMidLeft; innerMidRight = {1, -1} innerMidLeft; h = Graphics[ { Opacity[0.5], FilledCurve[ { BSplineCurve[{baseMid, innerMidLeft, leftBase}], BSplineCurve[{leftBase, outerMidLeft, top}], BSplineCurve[{top, outerMidRight, rightBase}], BSplineCurve[{rightBase, innerMidRight, baseMid}] } ] } ], {{baseMid, {-2, 0}}, Locator}, {{innerMidLeft, {-2, 0.5}}, Locator}, {{leftBase, {-2, 1}}, Locator}, {{outerMidLeft, {-1, 1}}, Locator} ] ] 

Mathematica-Grafiken

Es ist einfach, bei Bedarf weitere Kontrollpunkte hinzuzufügen.

Die Pfeilspitzengrafiken werden in die Variable h eingefügt. Beachten Sie, dass es eine Opacity -Funktion enthält, um die Kontrollpunkte besser sichtbar zu machen. Sie müssen dies entfernen, wenn Sie eine vollständig gesättigte Pfeilspitze haben möchten.

Einige Beispiele, die mit diesem Manipulate generiert wurden, verwenden:

Graphics[ { Arrowheads[{{Automatic, 1, h /. Opacity[_] :> Sequence[]}}], Arrow /@ Table[{{0, 0}, {Sin[t], Cos[t]}}, {t, 0, 2 \[Pi] - 2 \[Pi]/20, 2 \[Pi]/20}] }, PlotRangePadding -> 0.2 ] 

Mathematica-Grafiken

Der Code für die Pfeilspitzen befindet sich in h. Kopieren Sie einfach die Grafiken oder die FullForm, um sie für die spätere Verwendung zu speichern.

h /. Opacity[_] :> Sequence[] // FullForm (* ==> Graphics[{FilledCurve[{BSplineCurve[{{-0.496, 0.}, {-1., 0.48}, {-2,1}}], BSplineCurve[{{-2, 1}, {-0.548, 0.44999999999999996}, {0, 0}}], BSplineCurve[{{0, 0}, {-0.548, -0.44999999999999996}, {-2, -1}}], BSplineCurve[{{-2, -1}, {-1., -0.48}, {-0.496, 0.}}]}]} ] *) 

BEARBEITEN
Ein weiterer Kontrollpunkt deckt die häufigsten Formen ab:

DynamicModule[{top, baseMid, outerMidRight, innerMidRight, innerBaseRight, outerBaseRight}, Manipulate[ top = {0, 0}; baseMid = {1, 0} baseMid; innerBaseRight = {1, -1} innerBaseLeft; outerBaseRight = {1, -1} outerBaseLeft; outerMidRight = {1, -1} outerMidLeft; innerMidRight = {1, -1} innerMidLeft; h = Graphics[ { Opacity[0.5], FilledCurve[ { BSplineCurve[{baseMid, innerMidLeft, innerBaseLeft}], Line[{innerBaseLeft, outerBaseLeft}], BSplineCurve[{outerBaseLeft, outerMidLeft, top}], BSplineCurve[{top, outerMidRight, outerBaseRight}], Line[{outerBaseRight, innerBaseRight}], BSplineCurve[{innerBaseRight, innerMidRight, baseMid}] } ] } ], {{baseMid, {-2, 0}}, Locator}, {{innerMidLeft, {-2, 0.5}}, Locator}, {{innerBaseLeft, {-2, 1}}, Locator}, {{outerBaseLeft, {-2, 1.1}}, Locator}, {{outerMidLeft, {-1, 1}}, Locator} ] ] 

Mathematica-Grafiken

Mathematica-Grafiken

Kommentare

  • Erstaunlich! Danke!

Antwort

Eine Quelle für Pfeilspitzenformen ist Graph enthält eine Liste vordefinierter Pfeilspitzenformen, die Sie mit der Option EdgeShapeFunction festlegen können. Sie können die Namen dieser Formen abrufen, indem Sie Folgendes tun:

arrowheadNames = GraphElementData["Edge"]; 

Leider sind diese Namen für sich genommen in Arrowheads. Glücklicherweise gibt es eine Möglichkeit, die Graphics -Spezifikationen dieser Pfeilspitzen zu extrahieren, indem eine Graph in Graphics Verwenden von Show und Extrahieren der Anweisungen Arrowheads:

headlist = Flatten[Cases[ Show[Graph[{1 <-> 2}, EdgeShapeFunction -> #]], Arrowheads[a_] :> Cases[a, b_GraphicsBox :> ToExpression[b], Infinity, 1], Infinity, 1] & /@ arrowheadNames]; GraphicsGrid[Partition[headlist, 5, 5, {1, 1}, ""], Frame -> All] 

Mathematica-Grafiken

Sie können diese in Arrowheads wie folgt verwenden:

grlist = Graphics[{Arrowheads[{{.3, 1, #}}], Arrow[{{0, 0}, {1, 1}}]}] & /@ headlist; GraphicsGrid[Partition[grlist, 5, 5, {1, 1}, ""], Frame -> All] 

Mathematica-Grafiken

Kommentare

  • Ich kann ' Dieser Code funktioniert nicht mehr.
  • Wie hier in Mathematica 10.1 funktioniert dieser Code nicht mehr.
  • Hierfür Um in Mathematica 10 zu arbeiten, ersetzen Sie die GraphicsBox durch Graphics: headlist = Flatten[Cases[ Show[Graph[{1 \[DirectedEdge] 2}, EdgeShapeFunction -> #]], Arrowheads[a_] :> Cases[a, _Graphics, Infinity, 1], Infinity, 1] & /@ arrowheadNames];
  • Es gibt eine falsche Eingabe. Die Headlist wird am Anfang mit einem kleinen l „Headlist“ am Ende mit einem Großbuchstaben L „HeadList“ geschrieben …
  • I habe es behoben, @Phil.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.