Hvordan kontrollerer jeg formen på pilhodene mine? LaTeX «s TikZ-pakke har et bredt utvalg av forhåndsdefinerte pilspisser, hvorav noen jeg vil prøve å matche for Mathematica-figurer jeg importerer til et LaTeX-dokument:
  
 
Men Mathematicas standard pilspissstil kommer ikke i nærheten av noen av disse. For eksempel
Graphics[{Thick, Arrow[{{0, 0}, {-50, 0}}]}] gir
  
 
Tidligere versjoner av Mathematica hadde muligheter for å kontrollere pilenes form, men de ser ut til å være borte i 8.0.
Hvordan kan jeg få formen til Mathematica-pilene mine til å matche LaTeX TikZ-pilspilene?
Kommentarer
Svar
 Her er et Manipulate for å designe deg selv en 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} ] ]   
 
Det er enkelt å legge til flere kontrollpunkter hvis behovet oppstår.
 Grafikken til pilspissen er satt i variabelen h. Merk at den inneholder en Opacity -funksjon for bedre synlighet av kontrollpunktene. Du må fjerne det hvis du vil ha et fullstendig mettet pilhode. 
 Noen eksempler generert med dette Manipulate ved å bruke: 
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 ]   
 
 Koden for pilhodene finnes i h. Bare kopier grafikken eller FullForm for å lagre den for senere bruk. 
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  
 Ett kontrollpunkt til vil dekke de vanligste figurene: 
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} ] ]   
 
  
 
Kommentarer
- Utrolig! Takk!
Svar
 En kilde til pilspissformer er Graph som kommer med en liste over forhåndsdefinerte pilspissformer som du kan angi ved hjelp av alternativet EdgeShapeFunction. Du kan få navnene på disse figurene ved å gjøre noe sånt som 
arrowheadNames = GraphElementData["Edge"];  Dessverre er disse navnene ubrukelige i Arrowheads. Heldigvis er det en måte å trekke ut Graphics spesifikasjonene til disse pilspissene ved å konvertere en Graph til Graphics bruker Show og trekker ut Arrowheads -direktivene: 
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]   
 
 Du kan bruke disse i Arrowheads som følger: 
grlist = Graphics[{Arrowheads[{{.3, 1, #}}], Arrow[{{0, 0}, {1, 1}}]}] & /@ headlist; GraphicsGrid[Partition[grlist, 5, 5, {1, 1}, ""], Frame -> All]   
 
Kommentarer
- Jeg kan ' For ikke å få denne koden til å fungere lenger.
- Samme her, på Mathematica 10.1, fungerer ikke denne koden lenger.
-  For dette for å jobbe i Mathematica 10, erstatt GraphicsBoxmedGraphics:headlist = Flatten[Cases[ Show[Graph[{1 \[DirectedEdge] 2}, EdgeShapeFunction -> #]], Arrowheads[a_] :> Cases[a, _Graphics, Infinity, 1], Infinity, 1] & /@ arrowheadNames];
- Det er feil skriving, Headlist skrives i begynnelsen med en liten l «Headlist» på slutten med store L «HeadList» …
- I har fikset det, @Phil.
Arrowheads?StreamPlothar en miriade av forskjellige innebygde pilstiler).