Come controllo la forma delle mie punte di freccia? Il pacchetto TikZ di LaTeX ha unampia varietà di stili di punte di freccia predefiniti, alcuni dei quali mi piacerebbe provare ad abbinare per le figure di Mathematica che sto importando in un documento LaTeX:
 
 
Ma lo stile predefinito delle punte di freccia di Mathematica non si avvicina affatto a nessuno di questi. Ad esempio,
Graphics[{Thick, Arrow[{{0, 0}, {-50, 0}}]}] 
produce
 
 
Le versioni precedenti di Mathematica avevano opzioni per controllare la forma della punta della freccia, ma quelle sembrano essere scomparse nella 8.0.
Come posso ottenere la forma delle mie punte di freccia di Mathematica per abbinare gli stili della punta della freccia LaTeX TikZ? >
Commenti
Risposta
 Ecco un Manipulate per progettare da soli una Arrow: 
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} ] ] 
 
 
È facile aggiungere più punti di controllo in caso di necessità.
 La grafica della punta della freccia viene inserita nella variabile h. Tieni presente che contiene una funzione Opacity per una migliore visibilità dei punti di controllo. È necessario rimuoverlo se si desidera avere una punta di freccia completamente satura. 
 Alcuni esempi generati con questo Manipulate utilizzando: 
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 ] 
 
 
 Il codice per le punte delle frecce si trova in h. Copia semplicemente la grafica o FullForm per memorizzarla per un uso successivo. 
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  
 Un altro punto di controllo coprirà le forme più comuni: 
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} ] ] 
 
 
 
 
Commenti
- Incredibile! Grazie!
 
Risposta
 Una fonte di forme a punta di freccia è Graph che viene fornito con un elenco di forme di punte di freccia predefinite che puoi impostare utilizzando lopzione EdgeShapeFunction. Puoi ottenere i nomi di queste forme eseguendo qualcosa del tipo 
arrowheadNames = GraphElementData["Edge"]; 
 Sfortunatamente, questi nomi da soli sono inutili in Arrowheads. Fortunatamente esiste un modo per estrarre le Graphics specifiche di queste punte di freccia convertendo un Graph in Graphics utilizzando Show ed estraendo le Arrowheads direttive: 
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] 
 
 
 Puoi utilizzarli in Arrowheads come segue: 
grlist = Graphics[{Arrowheads[{{.3, 1, #}}], Arrow[{{0, 0}, {1, 1}}]}] & /@ headlist; GraphicsGrid[Partition[grlist, 5, 5, {1, 1}, ""], Frame -> All] 
 
 
Commenti
- Posso ' per far funzionare più questo codice.
 - Lo stesso qui, su Mathematica 10.1, questo codice non funziona più.
 -  Per questo per lavorare in Mathematica 10, sostituisci 
GraphicsBoxconGraphics:headlist = Flatten[Cases[ Show[Graph[{1 \[DirectedEdge] 2}, EdgeShapeFunction -> #]], Arrowheads[a_] :> Cases[a, _Graphics, Infinity, 1], Infinity, 1] & /@ arrowheadNames]; - Si è verificato un errore di battitura, Headlist è scritto allinizio con una piccola l “Headlist” alla fine con una L maiuscola “HeadList” …
 - I lho risolto, @Phil.
 
Arrowheads?StreamPlotabbia una miriade di stili freccia incorporati).