Waar plaats ik mijn eigen .sty of .cls bestanden, om ze beschikbaar te maken voor al mijn .tex bestanden?

Ik weet hoe ik een package of een class moet definiëren, maar hoe maak ik het altijd beschikbaar (voor mezelf)?

Stel ik heb het package bestand commonstuff.sty (of myprettyclass.cls), dat ik wil kunnen opnemen in elk .tex bestand dat ik maak op mijn computer. Waar moet ik het plaatsen? Moet ik er een of ander installatieprogramma op draaien, of is het voldoende om het in een bepaalde map te bewaren?

Note: Ik weet dat ik het gewoon in dezelfde map kan plaatsen als het .tex bestand, maar dat'is niet waar ik hier naar op zoek ben. Ik'ben op zoek naar een manier om "install" the package centraal op mijn computer.

Oplossing

U zou een map kunnen maken onder uw TeX home directory en uw .sty bestand daarin plaatsen. Gebruik dit commando op de opdrachtprompt om uit te vinden waar:

kpsewhich -var-value=TEXMFHOME

Op mijn computer staat er

C:/Users/stefan/texmf

maar het zou ook ~/texmf/ kunnen zijn op een Linux of Unix computer.

Volgens de TeX directory structuur, zou u uw bestand in een subdirectory als ~/texmf/tex/latex/commonstuff/ moeten plaatsen, volgens Arthur's commentaar hieronder. Dit heeft het voordeel dat het niet nodig is om de package database te updaten omdat TeX uw persoonlijke texmf tree direct doorzoekt. Als er een ls-R bestand in uw texmf home tree staat, kunt u het veilig verwijderen omdat TeX het toch niet zal gebruiken. (Let op: dit gaat er van uit dat uw persoonlijke tree op een lokaal bestandssysteem staat: gebruikers met op afstand gemounte homedirectory's kunnen nog steeds hash nodig hebben).

Wat MiKTeX betreft, zie de sectie "Installing sty or cls files" in het antwoord op de vraag How can I manually install a package on MikTex (Windows).

U kunt dan nagaan met welk bestand:

kpsewhich filename.sty

Dit zal het pad tonen naar het bestand dat door de TeX implementatie wordt opgepikt.

Commentaren (15)

De .sty bestanden moeten in een subdirectory van tex/latex in een texmf tree gezet worden. Die trees hebben een vrij vaste structuur, maar hun plaats kan variëren afhankelijk van uw OS en TeX distributie. Als u Unix (inclusief Mac OS) en TeX Live gebruikt, is er standaard een hiërarchie

/usr/local/texlive/2009/texmf
/usr/local/texlive/2009/texmf-dist
/usr/local/texlive/texmf-local

en ook andere mappen. U wilt het in de texmf-local directory zetten, niet in de andere directories die door het TeX Live installatieprogramma worden beheerd; als u TeX Live upgrade, kan het zijn dat uw pakket wordt overschreven. De texmf-local hiërarchie, zoals de naam al aangeeft, is voor lokale pakketten die door u worden beheerd; het zal niet worden aangeraakt door updates (dat is ook de reden waarom het direct onder de texlive directory staat, en niet texlive/2009, bijvoorbeeld).

U kunt er ook voor kiezen om een directory genaamd texmf in uw home directory aan te maken, en het pakket zal alleen voor u zichtbaar zijn, niet voor de andere gebruikers op uw computer.

Op Windows met MiKTeX, geloof ik dat de directory voor lokale installaties standaard C:-Localtexmf is.

In ieder geval en ongeacht uw distributie, moet u het .sty bestand in .../texmf-local/tex/latex plaatsen en niet direct in de root directory; het's gewoon zal niet werken anders.

Dan, als je'het pakket in je homedirectory hebt geïnstalleerd, heb je niets te doen. Als je daarentegen texmf-local erin hebt gezet, moet je het hulpprogramma mktexlsr (of texhash, het'is een alias) uitvoeren.

Commentaren (1)

Op Linux kun je elke directory kiezen die je wilt, en dan een regel toevoegen als

export TEXINPUTS=".:~/latex:"

aan je .bashrc bestand (je kunt meerdere directories toevoegen, gescheiden door dubbele punten. Ik denk dat je de '.' in het begin nodig hebt). Er is misschien iets gelijkaardigs in Windows. Ik vind dit gemakkelijker, omdat het "my" spul scheidt van de texmf boom. Waarschijnlijk niet geweldig als je'een groot pakket schrijft, maar handig voor wat kleine dingen die je gewoon wilt delen tussen al je projecten.

Commentaren (10)