Kuinka voin mukauttaa nuolenkärjen muotoa vastaamaan yleisiä LaTeX-tyylejä?

Kuinka hallitsen nuolenpäiden muotoa? LaTeX: n TikZ-paketissa on laaja valikoima ennalta määritettyjä nuolenkärjen tyylejä, joista joitain haluaisin yrittää sovittaa Mathematica-lukuihin, jotka tuon LaTeX-dokumenttiin:

LaTeX-nuolinäytteet

Mutta Mathematican oletusarvoinen nuolenkärjen tyyli ei tule lähellekään näistä. Esimerkiksi

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

tuottaa

Mathematica-oletusnuoli

Mathematican aiemmissa versioissa oli vaihtoehtoja nuolenkärjen muodon hallitsemiseksi, mutta ne näyttävät olevan poissa versiosta 8.0.

Kuinka saan Mathematica-nuolenkärjeni muodon vastaamaan LaTeX TikZ -noolityyliä?

Kommentit

  • Lisäksi Mathematica ' -nuolet skaalataan eri tavalla kuin LaTeX-nuolenpäät käyttämällä logiikkaa, jonka voin ' t ymmärrä. Ihannetapauksessa haluan myös ' varmistaa, että Mathematica-nuoleni skaalautuvat samalla tavalla kuin LaTeX-nuolet; mutta se on ehkä erillinen kysymys.
  • Oletko tarkastellut Arrowheads -dokumentaatiota?
  • Kyllä, luonnollisesti. Mikään siellä ei saanut minua lähelle.
  • @Heike: siinä annetaan vain yksi esimerkki mukautetusta nuolipäästä, mutta ei mitään ennalta määritetyistä tyypeistä (tosin StreamPlot on miriad erilaisia sisäänrakennetut nuolityylit).
  • Katso tämä kysymys – se näyttää, kuinka määritetään mukautetut muodot, ja aseta absoluuttiset nuolenkärjen koot.

Vastaa

Tässä on Manipulate suunnitella itsellesi 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} ] ] 

Mathematica-grafiikka

Lisää ohjauspisteitä on helppo lisätä tarvittaessa.

Nuolipään grafiikka laitetaan muuttujaan h. Huomaa, että se sisältää Opacity -toiminnon, joka parantaa hallintapisteiden näkyvyyttä. Sinun on poistettava tämä, jos haluat, että sinulla on täysin kylläinen nuolenpää.

Joitakin esimerkkejä, jotka on luotu tällä Manipulate -toiminnolla:

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-grafiikka

Nuolipään koodi löytyy kohdasta h. Kopioi vain grafiikka tai FullForm ja tallenna se myöhempää käyttöä varten.

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.}}]}]} ] *) 

MUOKKAA
Yksi ohjauspiste kattaa yleisimmät muodot:

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-grafiikka

Mathematica-grafiikka

kommentit

  • Hämmästyttävää! Kiitos!

Vastaus

Yksi nuolenpäämuotojen lähde on Graph, joka sisältää luettelon ennalta määritetyistä nuolenkärjen muodoista, jotka voit asettaa käyttämällä vaihtoehtoa EdgeShapeFunction. Voit saada näiden muotojen nimet tekemällä jotain esimerkiksi

arrowheadNames = GraphElementData["Edge"]; 

Valitettavasti nämä nimet sinänsä ovat turhia Arrowheads. Onneksi on olemassa tapa purkaa näiden nuolenkärkien Graphics -määritykset muuntamalla Graph Graphics käyttäen Show ja poimimalla Arrowheads -direktiivit:

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-grafiikka

Voit käyttää niitä kohdassa Arrowheads seuraavasti:

grlist = Graphics[{Arrowheads[{{.3, 1, #}}], Arrow[{{0, 0}, {1, 1}}]}] & /@ headlist; GraphicsGrid[Partition[grlist, 5, 5, {1, 1}, ""], Frame -> All] 

Mathematica-grafiikka

kommentit

  • osaan ' ei saa tätä koodia toimimaan enää.
  • Sama täällä Mathematica 10.1: ssä tämä koodi ei enää toimi.
  • Tätä varten toimiakseen Mathematica 10: ssä, korvaa GraphicsBox sanalla Graphics: headlist = Flatten[Cases[ Show[Graph[{1 \[DirectedEdge] 2}, EdgeShapeFunction -> #]], Arrowheads[a_] :> Cases[a, _Graphics, Infinity, 1], Infinity, 1] & /@ arrowheadNames];
  • Väärin kirjoitettu, otsikko kirjoitetaan alkuun pienellä l ”otsikkoluettelolla” lopussa isolla L ”päälistalla” …
  • I ve korjattu, @Phil.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *