Hoe controleer ik de vorm van mijn pijlpunten? Het TikZ-pakket van LaTeX heeft een grote verscheidenheid aan voorgedefinieerde pijlpuntstijlen, waarvan ik sommige “zou willen proberen te matchen voor Mathematica-figuren die ik importeer in een LaTeX-document:
Maar Mathematicas standaard pijlpuntstijl komt bij geen van deze in de buurt. Bijvoorbeeld:
Graphics[{Thick, Arrow[{{0, 0}, {-50, 0}}]}]
opbrengsten
Eerdere versies van Mathematica hadden opties voor het regelen van de pijlpuntvorm, maar die lijken verdwenen te zijn in 8.0.
Hoe kan ik de vorm van mijn Mathematica-pijlpunten aanpassen aan de pijlpuntstijlen van LaTeX TikZ?
Opmerkingen
Antwoord
Hier is een Manipulate
om een Arrow
te ontwerpen:
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} ] ]
Het is gemakkelijk om meer controlepunten toe te voegen als dat nodig is.
De pijlpuntgrafiek wordt in de variabele h
geplaatst. Merk op dat het een Opacity
-functie bevat voor een betere zichtbaarheid van de controlepunten. U moet deze verwijderen als u een volledig verzadigde pijlpunt wilt hebben.
Enkele voorbeelden gegenereerd met deze Manipulate
met behulp van:
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 ]
De code voor de pijlpunten is te vinden in h
. Kopieer gewoon de afbeeldingen of de FullForm
om deze op te slaan voor later gebruik.
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.}}]}]} ] *)
EDIT
Nog een controlepunt zal de meest voorkomende vormen behandelen:
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} ] ]
Reacties
- Geweldig! Bedankt!
Antwoord
Een bron van pijlpuntvormen is Graph
die wordt geleverd met een lijst met voorgedefinieerde pijlpuntvormen die u kunt instellen met de optie EdgeShapeFunction
. Je kunt de namen van deze vormen krijgen door zoiets te doen als
arrowheadNames = GraphElementData["Edge"];
Helaas zijn deze namen op zichzelf nutteloos in Arrowheads
. Gelukkig is er een manier om de Graphics
specificaties van deze pijlpunten te extraheren door een Graph
te converteren naar Graphics
met behulp van Show
en het extraheren van de Arrowheads
richtlijnen:
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]
U kunt deze als volgt gebruiken in Arrowheads
:
grlist = Graphics[{Arrowheads[{{.3, 1, #}}], Arrow[{{0, 0}, {1, 1}}]}] & /@ headlist; GraphicsGrid[Partition[grlist, 5, 5, {1, 1}, ""], Frame -> All]
Opmerkingen
- Ik kan ' om deze code niet meer te laten werken.
- Hetzelfde hier, in Mathematica 10.1 werkt deze code niet meer.
- Hiervoor om in Mathematica 10 te werken, vervangt u
GraphicsBox
doorGraphics
:headlist = Flatten[Cases[ Show[Graph[{1 \[DirectedEdge] 2}, EdgeShapeFunction -> #]], Arrowheads[a_] :> Cases[a, _Graphics, Infinity, 1], Infinity, 1] & /@ arrowheadNames];
- Er is een typefout opgetreden, Headlist wordt aan het begin geschreven met een kleine l “Headlist” aan het einde met een hoofdletter L “HeadList” …
- I heb het opgelost, @Phil.
Arrowheads
bekeken?StreamPlot
een miriad van verschillende ingebouwde pijlstijlen).