Cum controlez forma capetelor săgeții mele? Pachetul TikZ al LaTeX are o mare varietate de stiluri predefinite de vârf de săgeată, dintre care unele aș dori să încerc să le potrivesc pentru cifrele Mathematica pe care le import într-un document LaTeX:
  
 
Dar stilul implicit al vârfului de săgeată al lui Mathematica nu se apropie de niciunul dintre acestea. De exemplu,
Graphics[{Thick, Arrow[{{0, 0}, {-50, 0}}]}] produce
  
 
Versiunile anterioare ale Mathematica aveau opțiuni pentru controlul formei vârfurilor de săgeată, dar acestea par să fi dispărut în 8.0.
Cum pot obține forma vârfurilor de săgeată Mathematica pentru a se potrivi cu stilurile LaTeX TikZ de săgeată?
Comentarii
Răspuns
 Iată un Manipulate pentru a vă crea un 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} ] ]   
 
Este ușor să adăugați mai multe puncte de control dacă apare nevoia.
 Grafica cu vârful săgeții este plasată în variabila h. Rețineți că conține o funcție Opacity pentru o mai bună vizibilitate a punctelor de control. Trebuie să eliminați acest lucru dacă doriți să aveți un cap de săgeată complet saturat. 
 Câteva exemple generate cu acest Manipulate folosind: 
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 ]   
 
 Codul pentru capetele săgeții poate fi găsit în h. Doar copiați grafica sau FullForm pentru a o stoca pentru o utilizare ulterioară. 
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  
 Încă un punct de control va acoperi cele mai frecvente forme: 
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} ] ]   
 
  
 
Comentarii
- Uimitor! Mulțumim!
Răspuns
 O sursă de forme de vârf de săgeată este Graph care vine cu o listă de forme de vârf de săgeată predefinite pe care le puteți seta folosind opțiunea EdgeShapeFunction. Puteți obține numele acestor forme făcând ceva de genul 
arrowheadNames = GraphElementData["Edge"];  Din păcate, aceste nume de la sine sunt inutile în Arrowheads. Din fericire există o modalitate de a extrage Graphics specificațiile acestor vârfuri de săgeți prin conversia unui Graph în Graphics folosind Show și extragerea directivelor 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]   
 
 Puteți utiliza acestea în Arrowheads după cum urmează: 
grlist = Graphics[{Arrowheads[{{.3, 1, #}}], Arrow[{{0, 0}, {1, 1}}]}] & /@ headlist; GraphicsGrid[Partition[grlist, 5, 5, {1, 1}, ""], Frame -> All]   
 
Comentarii
- Pot ' nu mai funcționează acest cod.
- La fel și aici, pe Mathematica 10.1, acest cod nu mai funcționează.
-  Pentru aceasta pentru a lucra în Mathematica 10, înlocuiți GraphicsBoxcuGraphics:headlist = Flatten[Cases[ Show[Graph[{1 \[DirectedEdge] 2}, EdgeShapeFunction -> #]], Arrowheads[a_] :> Cases[a, _Graphics, Infinity, 1], Infinity, 1] & /@ arrowheadNames];
- Există o greșeală de scriere, Headlist-ul este scris la început cu un mic „Headlist” la sfârșit, cu un „L HeadList” cu majuscule …
- I l-am remediat, @Phil.
Arrowheads?StreamPlotare o miriadă diferită stiluri de săgeată încorporate).