Hoe kan ik de vorm van een pijlpunt aanpassen aan de gangbare LaTeX-stijlen?

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:

LaTeX-pijlvoorbeelden

Maar Mathematicas standaard pijlpuntstijl komt bij geen van deze in de buurt. Bijvoorbeeld:

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

opbrengsten

Standaard Mathematica-pijl

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

  • Bovendien zijn de pijlen van Mathematica ' anders geschaald dan LaTeX-pijlpunten, met behulp van een logica die ik kan ' t onderscheiden. Idealiter zou ik ' er ook graag voor willen zorgen dat mijn Mathematica-pijlen op dezelfde manier worden geschaald als LaTeX-pijlen; maar dat is misschien een aparte vraag.
  • Heb je de documentatie van Arrowheads bekeken?
  • Ja, natuurlijk. Niets daar bracht me in de buurt.
  • @Heike: dat geeft slechts één voorbeeld voor een aangepaste pijlpunt, maar niets over vooraf gedefinieerde typen (hoewel StreamPlot een miriad van verschillende ingebouwde pijlstijlen).
  • Zie deze vraag – het zal laten zien hoe u aangepaste vormen kunt definiëren, en stel de absolute grootte van de pijlpunten in.

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} ] ] 

Mathematica-afbeeldingen

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 ] 

Mathematica graphics

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} ] ] 

Mathematica graphics

Mathematica graphics

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] 

Mathematica graphics

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] 

Mathematica graphics

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 door Graphics: 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.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *