Hallo, ich möchte gerne mein eigenes sty-File einbinden. Bisher habe ich unter Windows gearbeitet und da einfach den Pfad in meinem tex-File angegeben. Jetzt arbeite ich unter Ubuntu mit Texlive. Das sty-File liegt in meinem home Verzeichnis in der Dropbox und da soll es auch bleiben. Wenn ich aber einfach den Pfad angebe, wird es nicht gefunden. Kopiere ich den kompletten sty-Inhalt in die normale tex-Datei habe ich keine Problem. Es ist also irgendwas mit dem Pfad falsch.

Open in Online-Editor
\documentclass[11pt, a4paper,twoside]{scrartcl}
\setlength{\parindent}{0em}  
\usepackage{~/home/typ42/Dropbox/mein.sty}

\begin{document}
Hallo!
\meinbefehl
\end{document}

Wie ist die korekte Pfadangabe?

gefragt 27 Aug '15, 21:00

typ42's gravatar image

typ42
38341927
Akzeptiert-Rate: 33%

bearbeitet 28 Aug '15, 08:28

saputello's gravatar image

saputello
11.1k154365

\parindent mal eben auf 0 zu setzen, also den Absatzeinzug abzuschalten, ohne für eine anderen Absatzauszeichnung, i. d. R. Absatzabstand, zu sorgen, ist übrigens keine gute Idee. Näheres zu den Möglichkeiten der alternativen Absatzauszeichnung findet sich in der KOMA-Script-Anleitung bei der Erklärung zu Option parskip.

(28 Aug '15, 07:30) saputello

Deine Angabe bei \usepackage enthält mehrere Fehler.

Die Tilde, ~, steht bei Unix-Betriebsystemen für das HOME-Verzeichnis des aktuellen Benutzers. Angenommen, die Dein HOME-Verzeichnis ist /home/typ42, dann entspricht ~ also bereits eben diesem Verzeichnis. Die Pfadangabe ~/home/typ42/Dropbox/mein.sty wäre damit /home/typ42/home/typ42/Dropbox/mein.sty.

→ Entweder die Tilde oder der Teil /home/type42 muss weg.

Die Tilde ist bei LaTeX ein aktives Zeichen, das zu \nobreakspace {} expandiert. Das passiert auch innerhalb des Arguments von \usepackage. Man müsste diese Expansion der Tilde also verhindern.

→ Um die Tilde im einem Dateinamen zu verwenden, muss man sie mit \string~ vor der Expansion schützen.

Pakete werden in \usepackage nur mit ihrem Namen angegeben. Gibt man dort beispielsweise foo.sty an, so sucht LaTeX nach einer Paketdatei mit dem Namen foo.sty.sty.

→ Die Endung .sty hat in \usepackage nicht verloren.

Pakete werden in \usepackage nur mit ihrem Namen, nicht jedoch mit einem Pfad angegeben. Gibt man den vollen Pfad an, wird die Datei zwar gefunden, man erhält bei korrekten Paketen, die sich LaTeX per \ProvidesPackage bekannt machen, aber min. eine Warnung:

LaTeX Warning: You have requested package `./test', but the package provides `test'.

Es gibt aber noch weit unangenehmere Konsequenzen. So gilt für LaTeX dann nämlich nicht mehr das entsprechende nur mit Namen angegebene Paket als geladen:

Open in Online-Editor
\begin{filecontents*}{test.sty}
\ProvidesPackage{test}[2015/08/28 v0.1 Testpaket]
\ProcessOptions\relax
\end{filecontents*}
\documentclass{article}
\usepackage{./test}
\makeatletter
\@ifpackageloaded{test}{\newcommand*\Paketgeladen{Ja}}{\newcommand*\Paketgeladen{Nein}}
\makeatother
\begin{document}
Paket \texttt{test} geladen? \Paketgeladen.
\end{document}

Hier erhält man nicht nur besagte Warnung, in der Ausgabe heißt es auch, dass Paket test nicht geladen sei. Abfragen auf geladene Pakete über ihren Namen sind aber keineswegs selten in anderen Paketen. Es existieren weitere Nachteile beispielsweise bei der Übergabe von Optionen per \PassOptionsToPackage.

→ Pfadangaben haben in \usepackage nichts verloren.

Was aber kann man nun tun? Man kann zum einen das Verzeichnis, in dem das Paket gefunden werden soll, in die Environmentvariable/Umgebungsvariable TEXINPUTS eintragen. Dann kann man das Paket einfach wie gewohnt nur mit Namen angeben. Unter Linux geht das in den meisten Shells (beispielsweise bash im Terminalfenster) bereits beim Aufruf, indem man das Setzen der Environmentvariable voranstellt:

TEXINPUTS=~/Dropbox:"`kpsewhich -var-value=TEXINPUTS`" pdflatex foo.tex
würde die Paketdatei mein.sty beispielsweise zuerst im Verzeichnis Dropbox suchen. Auch einige Editoren bieten die Möglichkeit, Umgebungsvariablen anzupassen. Natürlich kann man dafür auch Dateien wie .bashrc oder .profile oder .environment verwenden. Welche Datei dafür geeignet ist, hängt von der verwendeten Shell und ggf. der Linux-Distribution ab.

Noch besser wäre allerdings, die Datei korrekt im lokalen TEXMF-Baum zu installieren. Will man sie weiterhin in ~/Dropbox liegen haben, genügt dafür ggf. auch ein Link oder ein symbolischer Link, den man mit:

cd `kpsewhich -var-value=TEXMFHOME | cut -d: -f1`
mkdir -p tex/latex/mein
cd tex/latex/mein
ln -s ~/Dropbox/mein.sty .
anlegen kann. Windows-Anwender verwenden an Stelle eines symbolischen Links eine logische Verknüpfung. Alles weitere zur korrekten Installation und Verwendung lokaler Dateien findet sich unter der Frage: Wie kann ich Klassen oder Pakete verwenden, die nur als einzelne Datei bereitgestellt werden?

Permanenter link

beantwortet 28 Aug '15, 08:21

saputello's gravatar image

saputello
11.1k154365
Akzeptiert-Rate: 51%

bearbeitet 28 Aug '15, 12:29

Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×48
×9
×5

gestellte Frage: 27 Aug '15, 21:00

Frage wurde gesehen: 9,069 Mal

zuletzt geändert: 28 Aug '15, 12:29